diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 00000000..b3616b92 --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,247 @@ +{ + "projectName": "angular-split", + "projectOwner": "angular-split", + "repoType": "github", + "repoHost": "https://github.com", + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": true, + "commitConvention": "angular", + "contributors": [ + { + "login": "bertrandg", + "name": "Bertrand Gaillard", + "avatar_url": "https://avatars.githubusercontent.com/u/7031941?v=4", + "profile": "https://github.com/bertrandg", + "contributions": [ + "code", + "maintenance" + ] + }, + { + "login": "beeman", + "name": "Bram Borggreve", + "avatar_url": "https://avatars.githubusercontent.com/u/36491?v=4", + "profile": "https://beeman.dev/", + "contributions": [ + "code", + "maintenance" + ] + }, + { + "login": "SanderElias", + "name": "Sander Elias", + "avatar_url": "https://avatars.githubusercontent.com/u/1249083?v=4", + "profile": "https://github.com/SanderElias", + "contributions": [ + "code", + "maintenance" + ] + }, + { + "login": "Jefiozie", + "name": "Jeffrey Bosch", + "avatar_url": "https://avatars.githubusercontent.com/u/17835373?v=4", + "profile": "https://jefiozie.github.io", + "contributions": [ + "doc", + "infra", + "maintenance" + ] + }, + { + "login": "Harpush", + "name": "Harpush", + "avatar_url": "https://avatars.githubusercontent.com/u/30085989?v=4", + "profile": "https://github.com/Harpush", + "contributions": [ + "code", + "maintenance" + ] + }, + { + "login": "lf-novelt", + "name": "Louis Frament", + "avatar_url": "https://avatars.githubusercontent.com/u/46479127?v=4", + "profile": "http://www.novel-t.ch", + "contributions": [ + "code" + ] + }, + { + "login": "shemesh", + "name": "Shemesh", + "avatar_url": "https://avatars.githubusercontent.com/u/2488980?v=4", + "profile": "https://github.com/Shemesh", + "contributions": [ + "code" + ] + }, + { + "login": "nomeaning777", + "name": "nomeaning", + "avatar_url": "https://avatars.githubusercontent.com/u/979296?v=4", + "profile": "https://github.com/nomeaning777", + "contributions": [ + "code" + ] + }, + { + "login": "rahuldimri", + "name": "rahuldimri", + "avatar_url": "https://avatars.githubusercontent.com/u/107100022?v=4", + "profile": "https://github.com/rahuldimri", + "contributions": [ + "code" + ] + }, + { + "login": "kufuntu", + "name": "Andre Steudel", + "avatar_url": "https://avatars.githubusercontent.com/u/7403789?v=4", + "profile": "http://andre-steudel.de", + "contributions": [ + "code" + ] + }, + { + "login": "benjamindobler", + "name": "Benjamin Dobler", + "avatar_url": "https://avatars.githubusercontent.com/u/2612377?v=4", + "profile": "http://www.richapps.de", + "contributions": [ + "code" + ] + }, + { + "login": "cyrildurand", + "name": "Cyril DURAND", + "avatar_url": "https://avatars.githubusercontent.com/u/2543836?v=4", + "profile": "http://www.cyrildurand.net", + "contributions": [ + "code" + ] + }, + { + "login": "jitsmaster", + "name": "Arnold Wang", + "avatar_url": "https://avatars.githubusercontent.com/u/15837601?v=4", + "profile": "https://github.com/jitsmaster", + "contributions": [ + "code" + ] + }, + { + "login": "jakubmank2", + "name": "Kuba Mank", + "avatar_url": "https://avatars.githubusercontent.com/u/124054100?v=4", + "profile": "https://github.com/jakubmank2", + "contributions": [ + "code" + ] + }, + { + "login": "alexanderbabchenko", + "name": "alexanderbabchenko", + "avatar_url": "https://avatars.githubusercontent.com/u/11957042?v=4", + "profile": "https://github.com/AlexanderBabchenko", + "contributions": [ + "code" + ] + }, + { + "login": "dxbrandon", + "name": "Brandon Nguyen", + "avatar_url": "https://avatars.githubusercontent.com/u/84741633?v=4", + "profile": "https://github.com/dxbrandon", + "contributions": [ + "code" + ] + }, + { + "login": "pawelwojkiewicz", + "name": "pawel_wojkiewicz", + "avatar_url": "https://avatars.githubusercontent.com/u/26307117?v=4", + "profile": "https://github.com/pawelwojkiewicz", + "contributions": [ + "code" + ] + }, + { + "login": "pmairoldi", + "name": "Pierre-Marc Airoldi", + "avatar_url": "https://avatars.githubusercontent.com/u/296718?v=4", + "profile": "http://pierremarcairoldi.com", + "contributions": [ + "code" + ] + }, + { + "login": "funkelodeon", + "name": "Nick Funk", + "avatar_url": "https://avatars.githubusercontent.com/u/16770343?v=4", + "profile": "https://github.com/funkelodeon", + "contributions": [ + "code" + ] + }, + { + "login": "blacknight811", + "name": "Bryan Knight", + "avatar_url": "https://avatars.githubusercontent.com/u/7443393?v=4", + "profile": "https://www.linkedin.com/in/bryanknightdev", + "contributions": [ + "code" + ] + }, + { + "login": "erik-seifert", + "name": "Erik Seifert", + "avatar_url": "https://avatars.githubusercontent.com/u/4093180?v=4", + "profile": "https://github.com/erik-seifert", + "contributions": [ + "code" + ] + }, + { + "login": "ethankay", + "name": "Ethan Kay", + "avatar_url": "https://avatars.githubusercontent.com/u/15613563?v=4", + "profile": "https://github.com/ethankay", + "contributions": [ + "code" + ] + }, + { + "login": "kmmccafferty96", + "name": "Keegan McCafferty", + "avatar_url": "https://avatars.githubusercontent.com/u/10471269?v=4", + "profile": "https://github.com/kmmccafferty96", + "contributions": [ + "code" + ] + }, + { + "login": "aszechlicki", + "name": "aszechlicki", + "avatar_url": "https://avatars.githubusercontent.com/u/9299507?v=4", + "profile": "https://github.com/aszechlicki", + "contributions": [ + "code" + ] + }, + { + "login": "gwe-n", + "name": "Gwen", + "avatar_url": "https://avatars.githubusercontent.com/u/66947157?v=4", + "profile": "https://github.com/Gwe-n", + "contributions": [ + "code" + ] + } + ], + "commitType": "docs", + "contributorsPerLine": 7 +} diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..4aab9b38 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,44 @@ +{ + "root": true, + "ignorePatterns": ["projects/**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "sp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "warn", + { + "type": "element", + "prefix": "sp", + "style": "kebab-case" + } + ], + "@typescript-eslint/explicit-member-accessibility": [ + "error", + { + "accessibility": "no-public" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@angular-eslint/template/recommended"], + "rules": {} + } + ] +} diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index a472768d..00000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: beeman # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..48751ec4 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,33 @@ +name: Build + +on: [pull_request] + +jobs: + build: + name: Build + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [20.x] + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + - name: Cache node modules + uses: actions/cache@v4 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + - name: Install dependencies + run: yarn + - name: Run build + run: npm run build diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml new file mode 100644 index 00000000..de4520c7 --- /dev/null +++ b/.github/workflows/contributors.yml @@ -0,0 +1,17 @@ +jobs: + contributors: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - env: + GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} + uses: JoshuaKGoldberg/all-contributors-auto-action@v0.4.3 + +name: Contributors + +on: + push: + branches: + - main diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 00000000..0b5348ae --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,20 @@ +# Dependency Review Action +# +# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging. +# +# Source repository: https://github.com/actions/dependency-review-action +# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement +name: 'Dependency Review' +on: [pull_request] + +permissions: + contents: read + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: 'Checkout Repository' + uses: actions/checkout@v4 + - name: 'Dependency Review' + uses: actions/dependency-review-action@v4 \ No newline at end of file diff --git a/.github/workflows/license.yml b/.github/workflows/license.yml new file mode 100644 index 00000000..fa495229 --- /dev/null +++ b/.github/workflows/license.yml @@ -0,0 +1,24 @@ +name: Update copyright year(s) in license file + +permissions: + pull-requests: write + contents: write + +on: + schedule: + - cron: '0 3 1 1 *' # 03:00 AM on January 1 + workflow_dispatch: + inputs: + name: + description: "this is an input" + default: "yes" +jobs: + update-license-year: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: FantasticFiasco/action-update-license-year@v3 + with: + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..abc5a191 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,33 @@ +name: Run lint + +on: [pull_request] + +jobs: + lint: + name: Run lint + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [20.x] + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + - name: Cache node modules + uses: actions/cache@v4 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + - name: Install dependencies + run: yarn + - name: Run lint + run: npm run lint diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 00000000..f9e231dc --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,40 @@ +on: + push: + branches: + - main +name: release-please +jobs: + release-please: + permissions: + contents: write # to create release commit (google-github-actions/release-please-action) + pull-requests: write # to create release PR (google-github-actions/release-please-action) + runs-on: ubuntu-latest + steps: + - uses: google-github-actions/release-please-action@v4 + id: release + with: + release-type: node + package-name: 'angular-split' + command: manifest + # The logic below handles the npm publication: + - uses: actions/checkout@v4 + # these if statements ensure that a publication only occurs when + # a new release is created: + if: ${{ steps.release.outputs.release_created }} + - uses: actions/setup-node@v4 + with: + node-version: 20 + registry-url: 'https://registry.npmjs.org' + if: ${{ steps.release.outputs.release_created }} + - run: npm ci + if: ${{ steps.release.outputs.release_created }} + - run: npm run build + if: ${{ steps.release.outputs.release_created }} + - run: npm run build + if: ${{ steps.release.outputs.release_created }} + - run: cd dist/angular-split + if: ${{ steps.release.outputs.release_created }} + - run: npm publish --access public + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + if: ${{ steps.release.outputs.release_created }} \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index af53392f..4811c04a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -8,12 +8,12 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [14.x] + node-version: [20.x] steps: - name: Checkout Repo - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Cache node modules - uses: actions/cache@v2 + uses: actions/cache@v4 env: cache-name: cache-node-modules with: @@ -24,10 +24,10 @@ jobs: ${{ runner.os }}-build- ${{ runner.os }}- - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - name: Install dependencies run: yarn - name: Run tests - run: yarn cypress_ci + run: npm run test_ci diff --git a/.gitignore b/.gitignore index 600ea920..6391d2ba 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ !.vscode/extensions.json # misc +/.nx/* /.angular/cache /.sass-cache /connect.lock @@ -40,3 +41,4 @@ testem.log # System Files .DS_Store Thumbs.db +.wireit \ No newline at end of file diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100755 index 00000000..5e563eba --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx --no-install commitlint --edit diff --git a/.husky/pre-commit b/.husky/pre-commit index d2ae35e8..36af2198 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" -yarn lint-staged +npx lint-staged diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 00000000..bba983ed --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + "projects/angular-split": "17.2.0" +} diff --git a/CHANGELOG.md b/CHANGELOG.md index c2131402..8dbffdf2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,57 @@ + + +# 17.1.1 (2023-11-29) + +- **Fix** aria-valuenow incorrectly set to wildcard [#368](https://github.com/angular-split/angular-split/pull/368) thanks to [Harpush](https://github.com/Harpush)! + + + +# 17.1.0 (2023-11-27) + +- **Feat** support custom gutter template [#364](https://github.com/angular-split/angular-split/pull/364) thanks to [Harpush](https://github.com/Harpush)! + + + +# 17.0.0 (2023-11-15) + +- **Docs** add gutterAriaLabel to documentation [#364](https://github.com/angular-split/angular-split/pull/364) thanks to [jakubmank2](https://github.com/jakubmank2)! +- **Chore** add support for Angular 17 [#365](https://github.com/angular-split/angular-split/pull/365) + + + +# 16.2.1 (2023-09-05) + +- **Fix** change default area size from null to `*` [#358](https://github.com/angular-split/angular-split/pull/358) thanks to [Harpush](https://github.com/Harpush)! +- **Fix** use correct peerDependencies versions [#355](https://github.com/angular-split/angular-split/pull/355) thanks to [beeman](https://github.com/beeman)! +- **Chore** remove lodash dependency [#356](https://github.com/angular-split/angular-split/pull/356) thanks to [beeman](https://github.com/beeman)! +- **Chore** update angular.json to modern standards [#357](https://github.com/angular-split/angular-split/pull/357) thanks to [beeman](https://github.com/beeman)! + + + +# 16.2.0 (2023-09-03) + +- **Feat** support angular compiler strict templates [#353](https://github.com/angular-split/angular-split/pull/353) thanks to [Harpush](https://github.com/Harpush)! + + + +# 16.1.1 (2023-08-27) + +- **Fix** remove deprecated forRoot and forChild [#352](https://github.com/angular-split/angular-split/pull/352) thanks to [Harpush](https://github.com/Harpush)! + + + +# 16.1.0 (2023-08-27) + +- **Feat** add wildcard support for percent mode [#336](https://github.com/angular-split/angular-split/pull/336) thanks to [Harpush](https://github.com/Harpush)! + + + +# 16.0.0 (2023-08-24) + +- **Feat** integrate iframe fix [#346](https://github.com/angular-split/angular-split/pull/346) thanks to [Harpush](https://github.com/Harpush)! +- **Fix** role should be separator and not slider [#350](https://github.com/angular-split/angular-split/pull/350) thanks to [kmmccafferty96](https://github.com/kmmccafferty96)! +- **Chore** add support for Angular 16 [#351](https://github.com/angular-split/angular-split/pull/351) + # 15.0.0 (2023-03-01) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..01d90ec6 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +dutchangulargroup+angularsplit@gmail.com. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..babfd561 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,228 @@ +# Contributing to angular-split + +We would love for you to contribute to angular-split and help make it even better +than it is today! As a contributor, here are the guidelines we would like you +to follow: + +- [Code of Conduct](#coc) +- [Issues and Bugs](#issue) +- [Feature Requests](#feature) +- [Submission Guidelines](#submit) +- [Coding Rules](#rules) +- [Commit Message Guidelines](#commit) + +## Code of Conduct + +angular-split follows the same Code of Conduct as Angular. You can read it [here](https://github.com/angular/code-of-conduct/blob/master/CODE_OF_CONDUCT.md). + +## Got a Question or Problem? + +Do not open issues for general support questions as we want to keep GitHub issues for bug reports and feature requests. You've got much better chances of getting your question answered on [Stack Overflow](https://stackoverflow.com/questions/tagged/angular-split) where the questions should be tagged with tag `angular-split`. + +Stack Overflow is a much better place to ask questions since: + +- there are thousands of people willing to help on Stack Overflow +- questions and answers stay available for public viewing so your question / answer might help someone else +- Stack Overflow's voting system assures that the best answers are prominently visible. + +To save your and our time, we will systematically close all issues that are requests for general support and redirect people to Stack Overflow. + +## Found an Issue? + +If you find a bug in the source code or a mistake in the documentation, you can help us by +[submitting an issue](#submit-issue) to our [GitHub Repository][github]. Even better, you can +[submit a Pull Request](#submit-pr) with a fix. + +## Want a Feature? + +You can _request_ a new feature by [submitting an issue](#submit-issue) to our [GitHub +Repository][github]. If you would like to _implement_ a new feature, please submit an issue with +a proposal for your work first, to be sure that we can use it. + +## Submission Guidelines + +### Submitting an Issue + +Before you submit an issue, please search the issue tracker, maybe an issue for your problem already exists and the discussion might inform you of workarounds readily available. + +We want to fix all the issues as soon as possible, but before fixing a bug we need to reproduce and confirm it. In order to reproduce bugs we will systematically ask you to provide a minimal reproduction scenario. Having a reproducible scenario gives us wealth of important information without going back & forth to you with additional questions like: + +- OS: [e.g. iOS] +- Browser [e.g. chrome, safari] +- Version [e.g. 22] +- and most importantly - a use-case that fails + +A minimal reproduce scenario using allows us to quickly confirm a bug (or point out coding problem) as well as confirm that we are fixing the right problem. + +We will be insisting on a minimal reproduce scenario in order to save maintainers time and ultimately be able to fix more bugs. Interestingly, from our experience users often find coding problems themselves while preparing a minimal repository. We understand that sometimes it might be hard to extract essentials bits of code from a larger code-base but we really need to isolate the problem before we can fix it. + +Unfortunately we are not able to investigate / fix bugs without a minimal reproduction, so if we don't hear back from you we are going to close an issue that don't have enough info to be reproduced. + +You can file new issues by filling out our [new issue form](https://github.com/angular-split/angular-split/issues/new). + +### Submitting a Pull Request (PR) + +Before you submit your Pull Request (PR) consider the following guidelines: + +- Search [GitHub](https://github.com/angular-split/angular-split/pulls) for an open or closed PR + that relates to your submission. You don't want to duplicate effort. +- Make your changes in a new git branch: + + ```shell + git checkout -b my-fix-branch main + ``` + +- Create your patch, **including appropriate test cases**. +- Follow our [Coding Rules](#rules). +- Run the full test suite, as described in the [developer documentation][dev-doc], + and ensure that all tests pass (if applicable). +- Commit your changes using a descriptive commit message that follows our + [commit message conventions](#commit). Adherence to these conventions + is necessary because release notes are automatically generated from these messages. + + ```shell + git commit -a + ``` + + Note: the optional commit `-a` command line option will automatically "add" and "rm" edited files. + +- Push your branch to GitHub: + + ```shell + git push origin my-fix-branch + ``` + +- In GitHub, send a pull request to `angular-split:main`. +- If we suggest changes then: + + - Make the required updates. + - Re-run the test suites to ensure tests are still passing. + - Rebase your branch and force push to your GitHub repository (this will update your Pull Request): + + ```shell + git rebase main -i + git push -f + ``` + +That's it! Thank you for your contribution! + +#### After your pull request is merged + +After your pull request is merged, you can safely delete your branch and pull the changes +from the main (upstream) repository: + +- Delete the remote branch on GitHub either through the GitHub web UI or your local shell as follows: + + ```shell + git push origin --delete my-fix-branch + ``` + +- Check out the main branch: + + ```shell + git checkout main -f + ``` + +- Delete the local branch: + + ```shell + git branch -D my-fix-branch + ``` + +- Update your main with the latest upstream version: + + ```shell + git pull --ff upstream main + ``` + +## Coding Rules + +To ensure consistency throughout the source code, keep these rules in mind as you are working: + +- All features or bug fixes **must be tested** by one or more specs (unit-tests or e2e-tests). +- All public API methods **must be documented**. + +## Commit Message Guidelines + +We have very precise rules over how our git commit messages can be formatted. This leads to **more +readable messages** that are easy to follow when looking through the **project history**. But also, +we use the git commit messages to **generate the angular-split change log**. + +### Commit Message Format + +Each commit message consists of a **header**, a **body** and a **footer**. The header has a special +format that includes a **type**, a **scope** and a **subject**: + +``` +(): + + + +