diff --git a/.eslintrc.cjs b/.eslintrc.cjs
new file mode 100644
index 0000000..b56159e
--- /dev/null
+++ b/.eslintrc.cjs
@@ -0,0 +1,4 @@
+module.exports = {
+ root: true,
+ extends: ['custom'],
+}
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..c124833
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,31 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: bug
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Environment (please complete the following information):**
+ - OS: [e.g. Windows 11]
+ - Version [e.g. 0.2.6]
+
+**Additional context**
+Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..1d9242d
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: enhancement
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you would like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you have considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md
new file mode 100644
index 0000000..260d122
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/question.md
@@ -0,0 +1,21 @@
+---
+name: Question
+about: Ask a question
+title: ''
+labels: question
+assignees: ''
+
+---
+
+**What you are trying to do**
+A clear and concise description of what you want to happen.
+
+**What you have already tried**
+A clear and concise description of any alternative solutions or features you have considered.
+
+**Any error messages you are getting**
+If any, please list the errors you are getting.
+
+**Environment (please complete the following information):**
+ - OS: [e.g. Windows 11]
+ - Version [e.g. 0.2.6]
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 0000000..af3bb09
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,22 @@
+# Describe the PR
+
+A clear and concise description of what the pull request does.
+
+## Small replication
+
+If the change is large enough, a small replication can help demonstrate the changes made. This is optional, but can help observe the intended changes. A mentioned issue that contains a replication also works.
+
+## PR checklist
+
+
+
+**What kind of change does this PR introduce?** (check at least one)
+
+- [ ] Bugfix :bug: - `fix(...)`
+- [ ] Feature - `feat(...)`
+- [ ] ARIA accessibility - `fix(...)`
+- [ ] Other (please describe)
+
+**The PR fulfills these requirements:**
+
+- [ ] Pull request title and all commits follow the [**Conventional Commits**](https://www.conventionalcommits.org/) convention or have an [**override**](https://github.com/googleapis/release-please#how-can-i-fix-release-notes) in this pull request body **This is very important, as the `CHANGELOG` is generated from these messages, and determines the next version type. Pull requests that do not follow conventional commits or do not have an override will be denied**
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
new file mode 100644
index 0000000..7dbe74d
--- /dev/null
+++ b/.github/workflows/ci.yaml
@@ -0,0 +1,118 @@
+name: ci
+
+on:
+ push:
+ branches:
+ - dev
+ - main
+ pull_request:
+ branches:
+ - dev
+ - main
+
+jobs:
+ build:
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+ node-version: [16.x]
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2.2.2
+
+ - name: Set node version to 16
+ uses: actions/setup-node@v2
+ with:
+ node-version: 16
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --ignore-scripts
+
+ - name: Build library
+ run: pnpm run build
+ test-lint:
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+ node-version: [16.x]
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2.2.2
+
+ - name: Set node version to 16
+ uses: actions/setup-node@v2
+ with:
+ node-version: 16
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --ignore-scripts
+
+ - name: Test lint
+ run: pnpm run test:lint
+ test-unit:
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+ node-version: [16.x]
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2.2.2
+
+ - name: Set node version to 16
+ uses: actions/setup-node@v2
+ with:
+ node-version: 16
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --ignore-scripts
+
+ - name: Test unit
+ run: pnpm run test:unit
+
+ test-coverage:
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+ node-version: [16.x]
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2.2.2
+
+ - name: Set node version to 16
+ uses: actions/setup-node@v2
+ with:
+ node-version: 16
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --ignore-scripts
+
+ - name: Test coverage
+ run: pnpm run test:coverage
diff --git a/.github/workflows/npm-publish.yaml b/.github/workflows/npm-publish.yaml
new file mode 100644
index 0000000..6f63a62
--- /dev/null
+++ b/.github/workflows/npm-publish.yaml
@@ -0,0 +1,44 @@
+# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
+# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
+
+name: npm-publish
+
+on:
+ release:
+ types: [created]
+
+jobs:
+ publish-npm:
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+ node-version: [16.x]
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2.2.2
+
+ - name: Set node version to 16
+ uses: actions/setup-node@v2
+ with:
+ node-version: 16
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --ignore-scripts
+
+ - name: Build library
+ run: pnpm run build
+
+ - name: Test library
+ run: pnpm test
+
+ - name: Publish
+ run: pnpm publish --access public --filter "@boindil/bootstrap-vue-3-icons"
+ env:
+ NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
diff --git a/.github/workflows/release-dev.yaml b/.github/workflows/release-dev.yaml
new file mode 100644
index 0000000..17002f8
--- /dev/null
+++ b/.github/workflows/release-dev.yaml
@@ -0,0 +1,70 @@
+# This workflow is for the release please action. It automates releases when using conventional commit messages
+# It also auto publishes releases to npm under the @develop tag
+# For more information see: https://github.com/google-github-actions/release-please-action
+
+name: release-dev
+
+on:
+ push:
+ branches:
+ - dev
+
+jobs:
+ release-please:
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+ node-version: [16.x]
+
+ steps:
+ - name: Use release please
+ uses: google-github-actions/release-please-action@v3
+ id: release
+ with:
+ release-type: node
+ path: packages/bootstrap-vue-3-icons
+ package-name: "@boindil/bootstrap-vue-3-icons"
+ bump-minor-pre-major: true
+ bump-patch-for-minor-pre-major: true
+ default-branch: dev
+ release-labels: 'autorelease: published'
+
+ # The logic below handles the npm publication:
+
+ - name: Clone repository
+ uses: actions/checkout@v3
+ # these if statements ensure that a publication only occurs when
+ # a new release is created:
+ if: ${{ steps.release.outputs.releases_created }}
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2.2.2
+ if: ${{ steps.release.outputs.releases_created }}
+
+ - name: Set node version to 16
+ uses: actions/setup-node@v2
+ with:
+ node-version: 16
+ cache: 'pnpm'
+ registry-url: 'https://registry.npmjs.org'
+ if: ${{ steps.release.outputs.releases_created }}
+
+ - name: Install dependencies
+ run: pnpm install --ignore-scripts
+ if: ${{ steps.release.outputs.releases_created }}
+
+ - name: Build library
+ run: pnpm run build
+ if: ${{ steps.release.outputs.releases_created }}
+
+ - name: Test library
+ run: pnpm test
+ if: ${{ steps.release.outputs.releases_created }}
+
+ - name: Publish
+ run: pnpm publish --access public --tag develop --filter "@boindil/bootstrap-vue-3-icons"
+ env:
+ NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
+ if: ${{ steps.release.outputs.releases_created }}
diff --git a/.github/workflows/release-main.yaml b/.github/workflows/release-main.yaml
new file mode 100644
index 0000000..1bfcecc
--- /dev/null
+++ b/.github/workflows/release-main.yaml
@@ -0,0 +1,70 @@
+# This workflow is for the release please action. It automates releases when using conventional commit messages
+# It also auto publishes releases to npm under the @latest tag
+# For more information see: https://github.com/google-github-actions/release-please-action
+
+name: release-main
+
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ release-please:
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+ node-version: [16.x]
+
+ steps:
+ - name: Use release please
+ uses: google-github-actions/release-please-action@v3
+ id: release
+ with:
+ release-type: node
+ path: packages/bootstrap-vue-3-icons
+ package-name: "@boindil/bootstrap-vue-3-icons"
+ bump-minor-pre-major: true
+ bump-patch-for-minor-pre-major: true
+ default-branch: main
+ release-labels: 'autorelease: published'
+
+ # The logic below handles the npm publication:
+
+ - name: Clone repository
+ uses: actions/checkout@v3
+ # these if statements ensure that a publication only occurs when
+ # a new release is created:
+ if: ${{ steps.release.outputs.releases_created }}
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2.2.2
+ if: ${{ steps.release.outputs.releases_created }}
+
+ - name: Set node version to 16
+ uses: actions/setup-node@v2
+ with:
+ node-version: 16
+ cache: 'pnpm'
+ registry-url: 'https://registry.npmjs.org'
+ if: ${{ steps.release.outputs.releases_created }}
+
+ - name: Install dependencies
+ run: pnpm install --ignore-scripts
+ if: ${{ steps.release.outputs.releases_created }}
+
+ - name: Build library
+ run: pnpm run build
+ if: ${{ steps.release.outputs.releases_created }}
+
+ - name: Test library
+ run: pnpm test
+ if: ${{ steps.release.outputs.releases_created }}
+
+ - name: Publish
+ run: pnpm publish --access public --tag latest --filter "@boindil/bootstrap-vue-3-icons"
+ env:
+ NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
+ if: ${{ steps.release.outputs.releases_created }}
diff --git a/.github/workflows/stale-issues.yaml b/.github/workflows/stale-issues.yaml
new file mode 100644
index 0000000..51a2ef7
--- /dev/null
+++ b/.github/workflows/stale-issues.yaml
@@ -0,0 +1,40 @@
+# This workflow is responsible for auto marking issues and PRs as stale
+# It will mark issues as stale after 30 days, and close them 14 days after that
+# It will mark PRs as stale after 45 days, and will never close them
+# It will never mark an issue or PR that has a milestone or has an assignee
+# Exempt labels that will never be checked include: stale-exempt,future addition,enhancement,autorelease: tagged,autorelease: pending
+# It will only check issues or PRs made after 2022-06-01T00:00:00
+
+name: stale-issues
+
+on:
+ schedule:
+ - cron: '30 1 * * *'
+
+jobs:
+ stale:
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+ node-version: [16.x]
+
+ steps:
+ - name: Use stale
+ uses: actions/stale@v5
+ with:
+ stale-issue-message: 'This issue is stale because it has been open for 30 days with no activity. Either remove stale label or comment, otherwise this will be closed in 14 days'
+ stale-pr-message: 'This PR is stale because it has been open for 45 days with no activity. It will not be auto-closed'
+ close-issue-message: 'This issue was closed because it has been stalled for 14 days with no activity'
+ days-before-issue-stale: 30
+ days-before-pr-stale: 45
+ days-before-issue-close: 14
+ days-before-pr-close: -1
+ stale-issue-label: stale
+ stale-pr-label: stale
+ exempt-issue-labels: 'stale-exempt,future addition,enhancement,autorelease: tagged,autorelease: pending'
+ exempt-pr-labels: 'stale-exempt,future addition,enhancement,autorelease: tagged,autorelease: pending'
+ start-date: '2022-06-01T00:00:00'
+ exempt-all-milestones: true
+ exempt-assignees: true
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6c6dc7f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,46 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+dist
+.eslintcache
+
+# dependencies
+node_modules
+.pnp
+.pnp.js
+
+# testing
+coverage
+
+# misc
+.DS_Store
+*.pem
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+stats.html
+
+# local env files
+.env.local
+.env.*.local
+
+# turbo
+.turbo
+
+# Vuepress files
+.temp
+.cache
+/coverage/
+
+# Editor directories and files
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+# Tarballs
+*.tgz
\ No newline at end of file
diff --git a/.husky/.gitignore b/.husky/.gitignore
new file mode 100644
index 0000000..31354ec
--- /dev/null
+++ b/.husky/.gitignore
@@ -0,0 +1 @@
+_
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100755
index 0000000..fab6428
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,4 @@
+#!/bin/sh
+. "$(dirname "$0")/_/husky.sh"
+
+pnpm lint-staged
diff --git a/.prettierrc.yaml b/.prettierrc.yaml
new file mode 100644
index 0000000..575f961
--- /dev/null
+++ b/.prettierrc.yaml
@@ -0,0 +1,13 @@
+bracketSpacing: false
+printWidth: 100
+quoteProps: 'consistent'
+semi: false
+singleQuote: true
+trailingComma: 'es5'
+overrides:
+ - files:
+ - '**/*.css'
+ - '**/*.scss'
+ - '**/*.html'
+ options:
+ singleQuote: false
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..260cda0
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+ "recommendations": ["Vue.volar", "dbaeumer.vscode-eslint"]
+}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..46e6d1a
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,4 @@
+{
+ "editor.tabSize": 2,
+ "html.format.wrapAttributes": "force-expand-multiline"
+}
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..2891f34
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,130 @@
+# 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, caste, color, 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 via a GitHub issue. Please create an issue there commenting that there is a complaint, **but do not include details of the event**. Then a community leader will give the reporter details on a preferred private contact method to respect the privacy of the reporter. No matter the chosen forum to privately handle the situation, the community leader agrees to act on behalf of the organization.
+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.1, available at
+[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
+
+Community Impact Guidelines were inspired by
+[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
+
+For answers to common questions about this code of conduct, see the FAQ at
+[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
+[https://www.contributor-covenant.org/translations][translations].
+
+[homepage]: https://www.contributor-covenant.org
+[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
+[Mozilla CoC]: https://github.com/mozilla/diversity
+[FAQ]: https://www.contributor-covenant.org/faq
+[translations]: https://www.contributor-covenant.org/translations
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..d0db358
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,103 @@
+# Contribution Workflow
+
+## Use [Conventional Commit](https://www.conventionalcommits.org/) for Commit Messages
+
+It is vital to use the conventional commit standard when writing your commit messages. If your commit contains many fixes or enhancements you can use footers, for example:
+
+```txt
+feat: adds v4 UUID to crypto
+
+This adds support for v4 UUIDs to the library.
+
+fix(utils): unicode no longer throws exception
+ PiperOrigin-RevId: 345559154
+ BREAKING-CHANGE: encode method no longer throws.
+ Source-Link: googleapis/googleapis@5e0dcb2
+
+feat(utils): update encode to support unicode
+ PiperOrigin-RevId: 345559182
+ Source-Link: googleapis/googleapis@e5eef86
+```
+
+Conventional commits are required for the automation of changelog and tag releases. Information on how to write commits can be found at . Additional information on how to do things like introduce multiple fixes in a single commit, or fixing release notes can be found at
+
+## Setting Up Your Workspace
+
+Setting up your workspace follows traditional open-source flows, if you are already familiar with the process, you can most likely skip this section:
+
+**Only pnpm is allowed**, attempting to run any other package manager tool will cause a warning error. View pnpm installation at
+
+1. Go to the
+2. Click **Fork** at the top
+3. On your IDE of choice, clone your own, new, forked repository
+
+This repository is where you will make your changes to. You can safely run `git push ...` and other commands in this repository
+
+When opening your repository, it is usually best to open the **root** folder, not a subdirectory such as `./packages/bootstrap-vue-3-icons`. Eslint rules can sometimes get lost when opening a subdirectory of a workspace. If you do not have the recommended IDE extensions, it will usually suggest that you install them, but this is technically optional. You can finally run at the root:
+
+```bash
+pnpm install
+pnpm dev
+```
+
+Finally, after you have made sufficient changes and you are ready to publish your changes to the main repository, you will:
+
+1. Go to your forked repository on
+2. Switch to the correct branch that you have been working on, this is usually the `main` branch, for simplicity
+3. Click the **Contribute** button near the top of the page
+4. Click **Open pull request**
+
+This will begin the process to merge your changes into the upstream repository's main branch
+
+## Developing
+
+The project uses a monorepo architecture. The main source files for the package exist in `./packages/bootstrap-vue-3-icons`, this is primarily where developing is done. You can then run `pnpm dev` and it will start all possible development environments. When developing the main package, you will want to open the **bootstrap-vue-3-icons:dev** host. This has hot-reloading to make developing easier. You can use the `./packages/bootstrap-vue-3-icons/src/app.vue` file as a test area for any changes that you make
+
+You can also use `pnpm dev --filter bootstrap-vue-3-icons` to only open the main host
+
+## Registering New Components
+
+For adding a new component, there are some notes...
+
+* They should only exist in the `./packages/bootstrap-vue-3-icons/src/components` directory
+* You should first review the `./packages/bootstrap-vue-3-icons/src/types` directory and get familiar with the internal types that you can use
+* They should follow `
+