diff --git a/.gitignore b/.gitignore
index 91e7ded..dbc440a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,9 +6,12 @@ __pycache__/
# C extensions
*.so
+# Bootstrap CSS
+!bootstrap-css/build/*
+
# Distribution / packaging
.Python
-build/
+# build/
develop-eggs/
dist/
downloads/
@@ -130,3 +133,7 @@ dmypy.json
.DS_Store
.idea/
+
+# Node JS
+node_modules/
+
diff --git a/bootstrap-css/.babelrc.js b/bootstrap-css/.babelrc.js
new file mode 100644
index 0000000..5139969
--- /dev/null
+++ b/bootstrap-css/.babelrc.js
@@ -0,0 +1,12 @@
+module.exports = {
+ presets: [
+ [
+ '@babel/preset-env',
+ {
+ loose: true,
+ bugfixes: true,
+ modules: false
+ }
+ ]
+ ]
+};
diff --git a/bootstrap-css/.browserslistrc b/bootstrap-css/.browserslistrc
new file mode 100644
index 0000000..c71c8b9
--- /dev/null
+++ b/bootstrap-css/.browserslistrc
@@ -0,0 +1,11 @@
+# https://github.com/browserslist/browserslist#readme
+
+>= 0.5%
+last 2 major versions
+not dead
+Chrome >= 60
+Firefox >= 60
+Firefox ESR
+iOS >= 12
+Safari >= 12
+not Explorer <= 11
diff --git a/bootstrap-css/.bundlewatch.config.json b/bootstrap-css/.bundlewatch.config.json
new file mode 100644
index 0000000..8c390c6
--- /dev/null
+++ b/bootstrap-css/.bundlewatch.config.json
@@ -0,0 +1,66 @@
+{
+ "files": [
+ {
+ "path": "./dist/css/bootstrap-grid.css",
+ "maxSize": "7.5 kB"
+ },
+ {
+ "path": "./dist/css/bootstrap-grid.min.css",
+ "maxSize": "6.75 kB"
+ },
+ {
+ "path": "./dist/css/bootstrap-reboot.css",
+ "maxSize": "2.75 kB"
+ },
+ {
+ "path": "./dist/css/bootstrap-reboot.min.css",
+ "maxSize": "2.5 kB"
+ },
+ {
+ "path": "./dist/css/bootstrap-utilities.css",
+ "maxSize": "8.5 kB"
+ },
+ {
+ "path": "./dist/css/bootstrap-utilities.min.css",
+ "maxSize": "7.75 kB"
+ },
+ {
+ "path": "./dist/css/bootstrap.css",
+ "maxSize": "29.5 kB"
+ },
+ {
+ "path": "./dist/css/bootstrap.min.css",
+ "maxSize": "27.5 kB"
+ },
+ {
+ "path": "./dist/js/bootstrap.bundle.js",
+ "maxSize": "43.25 kB"
+ },
+ {
+ "path": "./dist/js/bootstrap.bundle.min.js",
+ "maxSize": "22.75 kB"
+ },
+ {
+ "path": "./dist/js/bootstrap.esm.js",
+ "maxSize": "28.0 kB"
+ },
+ {
+ "path": "./dist/js/bootstrap.esm.min.js",
+ "maxSize": "18.5 kB"
+ },
+ {
+ "path": "./dist/js/bootstrap.js",
+ "maxSize": "28.75 kB"
+ },
+ {
+ "path": "./dist/js/bootstrap.min.js",
+ "maxSize": "16.25 kB"
+ }
+ ],
+ "ci": {
+ "trackBranches": [
+ "main",
+ "v4-dev"
+ ]
+ }
+}
diff --git a/bootstrap-css/.cspell.json b/bootstrap-css/.cspell.json
new file mode 100644
index 0000000..d528823
--- /dev/null
+++ b/bootstrap-css/.cspell.json
@@ -0,0 +1,130 @@
+{
+ "version": "0.2",
+ "words": [
+ "affordance",
+ "allowfullscreen",
+ "Analyser",
+ "autohide",
+ "autohiding",
+ "autoplay",
+ "autoplays",
+ "blazingly",
+ "Blockquotes",
+ "Bootstrappers",
+ "borderless",
+ "Brotli",
+ "browserslist",
+ "browserslistrc",
+ "btncheck",
+ "btnradio",
+ "callout",
+ "callouts",
+ "camelCase",
+ "clearfix",
+ "Codesniffer",
+ "combinator",
+ "Contentful",
+ "Cpath",
+ "Crossfade",
+ "crossfading",
+ "cssgrid",
+ "Csvg",
+ "Datalists",
+ "Deque",
+ "discoverability",
+ "docsearch",
+ "docsref",
+ "dropend",
+ "dropleft",
+ "dropright",
+ "dropstart",
+ "dropup",
+ "errorf",
+ "favicon",
+ "favicons",
+ "fieldsets",
+ "flexbox",
+ "fullscreen",
+ "getbootstrap",
+ "Grayscale",
+ "Hoverable",
+ "hreflang",
+ "hstack",
+ "importmap",
+ "jsdelivr",
+ "Jumpstart",
+ "keyframes",
+ "libera",
+ "libman",
+ "Libsass",
+ "lightboxes",
+ "Lowercased",
+ "markdownify",
+ "mediaqueries",
+ "minifiers",
+ "misfunction",
+ "mkdir",
+ "monospace",
+ "mouseleave",
+ "navbars",
+ "navs",
+ "Neue",
+ "noindex",
+ "Noto",
+ "offcanvas",
+ "offcanvases",
+ "Packagist",
+ "popperjs",
+ "prebuild",
+ "prefersreducedmotion",
+ "prepended",
+ "printf",
+ "rects",
+ "relref",
+ "rgba",
+ "roboto",
+ "RTLCSS",
+ "ruleset",
+ "screenreaders",
+ "scrollbars",
+ "scrollspy",
+ "Segoe",
+ "semibold",
+ "socio",
+ "srcset",
+ "stackblitz",
+ "stickied",
+ "Stylelint",
+ "subnav",
+ "tabbable",
+ "textareas",
+ "toggleable",
+ "topbar",
+ "touchend",
+ "twbs",
+ "unitless",
+ "unstylable",
+ "unstyled",
+ "Uppercased",
+ "urlize",
+ "vbtn",
+ "viewports",
+ "Vite",
+ "vstack",
+ "walkthroughs",
+ "WCAG",
+ "zindex"
+ ],
+ "language": "en-US",
+ "files": [
+ "**/*.md"
+ ],
+ "ignorePaths": [
+ ".cspell.json",
+ "dist/",
+ "*.min.*",
+ "**/*rtl*",
+ "**/tests/**"
+ ],
+ "useGitignore": true
+}
diff --git a/bootstrap-css/.editorconfig b/bootstrap-css/.editorconfig
new file mode 100644
index 0000000..f29d257
--- /dev/null
+++ b/bootstrap-css/.editorconfig
@@ -0,0 +1,11 @@
+# editorconfig.org
+
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 2
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
diff --git a/bootstrap-css/.eslintignore b/bootstrap-css/.eslintignore
new file mode 100644
index 0000000..04bae15
--- /dev/null
+++ b/bootstrap-css/.eslintignore
@@ -0,0 +1,8 @@
+**/*.min.js
+**/dist/
+**/vendor/
+/_site/
+/js/coverage/
+/js/tests/integration/
+/site/static/sw.js
+/site/layouts/
diff --git a/bootstrap-css/.eslintrc.json b/bootstrap-css/.eslintrc.json
new file mode 100644
index 0000000..d8e83a8
--- /dev/null
+++ b/bootstrap-css/.eslintrc.json
@@ -0,0 +1,65 @@
+{
+ "root": true,
+ "extends": [
+ "plugin:import/errors",
+ "plugin:import/warnings",
+ "plugin:unicorn/recommended",
+ "xo",
+ "xo/browser"
+ ],
+ "rules": {
+ "arrow-body-style": "off",
+ "capitalized-comments": "off",
+ "comma-dangle": [
+ "error",
+ "never"
+ ],
+ "indent": [
+ "error",
+ 2,
+ {
+ "MemberExpression": "off",
+ "SwitchCase": 1
+ }
+ ],
+ "max-params": [
+ "warn",
+ 5
+ ],
+ "multiline-ternary": [
+ "error",
+ "always-multiline"
+ ],
+ "new-cap": [
+ "error",
+ {
+ "properties": false
+ }
+ ],
+ "no-console": "error",
+ "no-negated-condition": "off",
+ "object-curly-spacing": [
+ "error",
+ "always"
+ ],
+ "operator-linebreak": [
+ "error",
+ "after"
+ ],
+ "semi": [
+ "error",
+ "never"
+ ],
+ "unicorn/explicit-length-check": "off",
+ "unicorn/no-array-callback-reference": "off",
+ "unicorn/no-array-method-this-argument": "off",
+ "unicorn/no-null": "off",
+ "unicorn/no-unused-properties": "error",
+ "unicorn/prefer-array-flat": "off",
+ "unicorn/prefer-dom-node-dataset": "off",
+ "unicorn/prefer-module": "off",
+ "unicorn/prefer-query-selector": "off",
+ "unicorn/prefer-spread": "off",
+ "unicorn/prevent-abbreviations": "off"
+ }
+}
diff --git a/bootstrap-css/.gitattributes b/bootstrap-css/.gitattributes
new file mode 100644
index 0000000..40b1c37
--- /dev/null
+++ b/bootstrap-css/.gitattributes
@@ -0,0 +1,8 @@
+# Enforce Unix newlines
+* text=auto eol=lf
+
+# Don't diff or textually merge source maps
+*.map binary
+
+bootstrap.css linguist-vendored=false
+bootstrap.js linguist-vendored=false
diff --git a/bootstrap-css/.github/CODEOWNERS b/bootstrap-css/.github/CODEOWNERS
new file mode 100644
index 0000000..7d3fa99
--- /dev/null
+++ b/bootstrap-css/.github/CODEOWNERS
@@ -0,0 +1,3 @@
+*.js @twbs/js-review
+*.css @twbs/css-review
+*.scss @twbs/css-review
diff --git a/bootstrap-css/.github/CONTRIBUTING.md b/bootstrap-css/.github/CONTRIBUTING.md
new file mode 100644
index 0000000..c7211e6
--- /dev/null
+++ b/bootstrap-css/.github/CONTRIBUTING.md
@@ -0,0 +1,237 @@
+# Contributing to Bootstrap
+
+Looking to contribute something to Bootstrap? **Here's how you can help.**
+
+Please take a moment to review this document in order to make the contribution
+process easy and effective for everyone involved.
+
+Following these guidelines helps to communicate that you respect the time of
+the developers managing and developing this open source project. In return,
+they should reciprocate that respect in addressing your issue or assessing
+patches and features.
+
+
+## Using the issue tracker
+
+The [issue tracker](https://github.com/twbs/bootstrap/issues) is
+the preferred channel for [bug reports](#bug-reports), [features requests](#feature-requests)
+and [submitting pull requests](#pull-requests), but please respect the following
+restrictions:
+
+* Please **do not** use the issue tracker for personal support requests. Stack Overflow ([`bootstrap-5`](https://stackoverflow.com/questions/tagged/bootstrap-5) tag), [our GitHub Discussions](https://github.com/twbs/bootstrap/discussions) or [IRC](/README.md#community) are better places to get help.
+
+* Please **do not** derail or troll issues. Keep the discussion on topic and
+ respect the opinions of others.
+
+* Please **do not** post comments consisting solely of "+1" or ":thumbsup:".
+ Use [GitHub's "reactions" feature](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/)
+ instead. We reserve the right to delete comments which violate this rule.
+
+* Please **do not** open issues regarding the official themes offered on .
+ Instead, please email any questions or feedback regarding those themes to `themes AT getbootstrap DOT com`.
+
+
+## Issues and labels
+
+Our bug tracker utilizes several labels to help organize and identify issues. Here's what they represent and how we use them:
+
+- `browser bug` - Issues that are reported to us, but actually are the result of a browser-specific bug. These are diagnosed with reduced test cases and result in an issue opened on that browser's own bug tracker.
+- `confirmed` - Issues that have been confirmed with a reduced test case and identify a bug in Bootstrap.
+- `css` - Issues stemming from our compiled CSS or source Sass files.
+- `docs` - Issues for improving or updating our documentation.
+- `examples` - Issues involving the example templates included in our docs.
+- `feature` - Issues asking for a new feature to be added, or an existing one to be extended or modified. New features require a minor version bump (e.g., `v3.0.0` to `v3.1.0`).
+- `build` - Issues with our build system, which is used to run all our tests, concatenate and compile source files, and more.
+- `help wanted` - Issues we need or would love help from the community to resolve.
+- `js` - Issues stemming from our compiled or source JavaScript files.
+- `meta` - Issues with the project itself or our GitHub repository.
+
+For a complete look at our labels, see the [project labels page](https://github.com/twbs/bootstrap/labels).
+
+
+## Bug reports
+
+A bug is a _demonstrable problem_ that is caused by the code in the repository.
+Good bug reports are extremely helpful, so thanks!
+
+Guidelines for bug reports:
+
+0. **[Validate your HTML](https://html5.validator.nu/)** to ensure your
+ problem isn't caused by a simple error in your own code.
+
+1. **Use the GitHub issue search** — check if the issue has already been
+ reported.
+
+2. **Check if the issue has been fixed** — try to reproduce it using the
+ latest `main` (or `v4-dev` branch if the issue is about v4) in the repository.
+
+3. **Isolate the problem** — ideally create a [reduced test
+ case](https://css-tricks.com/reduced-test-cases/) and a live example.
+ These [v4 CodePen](https://codepen.io/team/bootstrap/pen/yLabNQL) and [v5 CodePen](https://codepen.io/team/bootstrap/pen/qBamdLj) are helpful templates.
+
+
+A good bug report shouldn't leave others needing to chase you up for more
+information. Please try to be as detailed as possible in your report. What is
+your environment? What steps will reproduce the issue? What browser(s) and OS
+experience the problem? Do other browsers show the bug differently? What
+would you expect to be the outcome? All these details will help people to fix
+any potential bugs.
+
+Example:
+
+> Short and descriptive example bug report title
+>
+> A summary of the issue and the browser/OS environment in which it occurs. If
+> suitable, include the steps required to reproduce the bug.
+>
+> 1. This is the first step
+> 2. This is the second step
+> 3. Further steps, etc.
+>
+> `` - a link to the reduced test case
+>
+> Any other information you want to share that is relevant to the issue being
+> reported. This might include the lines of code that you have identified as
+> causing the bug, and potential solutions (and your opinions on their
+> merits).
+
+### Reporting upstream browser bugs
+
+Sometimes bugs reported to us are actually caused by bugs in the browser(s) themselves, not bugs in Bootstrap per se.
+
+| Vendor(s) | Browser(s) | Rendering engine | Bug reporting website(s) | Notes |
+| ------------- | ---------------------------- | ---------------- | ------------------------------------------------------ | -------------------------------------------------------- |
+| Mozilla | Firefox | Gecko | https://bugzilla.mozilla.org/enter_bug.cgi | "Core" is normally the right product option to choose. |
+| Apple | Safari | WebKit | https://bugs.webkit.org/enter_bug.cgi?product=WebKit | In Apple's bug reporter, choose "Safari" as the product. |
+| Google, Opera | Chrome, Chromium, Opera v15+ | Blink | https://bugs.chromium.org/p/chromium/issues/list | Click the "New issue" button. |
+| Microsoft | Edge | Blink | https://developer.microsoft.com/en-us/microsoft-edge/ | Go to "Help > Send Feedback" from the browser |
+
+
+## Feature requests
+
+Feature requests are welcome. But take a moment to find out whether your idea
+fits with the scope and aims of the project. It's up to *you* to make a strong
+case to convince the project's developers of the merits of this feature. Please
+provide as much detail and context as possible.
+
+
+## Pull requests
+
+Good pull requests—patches, improvements, new features—are a fantastic
+help. They should remain focused in scope and avoid containing unrelated
+commits.
+
+**Please ask first** before embarking on any **significant** pull request (e.g.
+implementing features, refactoring code, porting to a different language),
+otherwise you risk spending a lot of time working on something that the
+project's developers might not want to merge into the project. For trivial
+things, or things that don't require a lot of your time, you can go ahead and
+make a PR.
+
+Please adhere to the [coding guidelines](#code-guidelines) used throughout the
+project (indentation, accurate comments, etc.) and any other requirements
+(such as test coverage).
+
+**Do not edit `bootstrap.css` or `bootstrap.js`, and do not commit
+any dist files (`dist/` or `js/dist`).** Those files are automatically generated by our build tools. You should
+edit the source files in [`/bootstrap/scss/`](https://github.com/twbs/bootstrap/tree/main/scss)
+and/or [`/bootstrap/js/src/`](https://github.com/twbs/bootstrap/tree/main/js/src) instead.
+
+Similarly, when contributing to Bootstrap's documentation, you should edit the
+documentation source files in
+[the `/bootstrap/site/content/docs/` directory of the `main` branch](https://github.com/twbs/bootstrap/tree/main/site/content/docs).
+**Do not edit the `gh-pages` branch.** That branch is generated from the
+documentation source files and is managed separately by the Bootstrap Core Team.
+
+Adhering to the following process is the best way to get your work
+included in the project:
+
+1. [Fork](https://help.github.com/articles/fork-a-repo/) the project, clone your fork,
+ and configure the remotes:
+
+ ```bash
+ # Clone your fork of the repo into the current directory
+ git clone https://github.com//bootstrap.git
+ # Navigate to the newly cloned directory
+ cd bootstrap
+ # Assign the original repo to a remote called "upstream"
+ git remote add upstream https://github.com/twbs/bootstrap.git
+ ```
+
+2. If you cloned a while ago, get the latest changes from upstream:
+
+ ```bash
+ git checkout main
+ git pull upstream main
+ ```
+
+3. Create a new topic branch (off the main project development branch) to
+ contain your feature, change, or fix:
+
+ ```bash
+ git checkout -b
+ ```
+
+4. Commit your changes in logical chunks. Please adhere to these [git commit
+ message guidelines](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)
+ or your code is unlikely be merged into the main project. Use Git's
+ [interactive rebase](https://help.github.com/articles/about-git-rebase/)
+ feature to tidy up your commits before making them public.
+
+5. Locally merge (or rebase) the upstream development branch into your topic branch:
+
+ ```bash
+ git pull [--rebase] upstream main
+ ```
+
+6. Push your topic branch up to your fork:
+
+ ```bash
+ git push origin
+ ```
+
+7. [Open a Pull Request](https://help.github.com/articles/about-pull-requests/)
+ with a clear title and description against the `main` branch.
+
+**IMPORTANT**: By submitting a patch, you agree to allow the project owners to
+license your work under the terms of the [MIT License](../LICENSE) (if it
+includes code changes) and under the terms of the
+[Creative Commons Attribution 3.0 Unported License](https://creativecommons.org/licenses/by/3.0/)
+(if it includes documentation changes).
+
+
+## Code guidelines
+
+### HTML
+
+[Adhere to the Code Guide.](https://codeguide.co/#html)
+
+- Use tags and elements appropriate for an HTML5 doctype (e.g., self-closing tags).
+- Use CDNs and HTTPS for third-party JS when possible. We don't use protocol-relative URLs in this case because they break when viewing the page locally via `file://`.
+- Use [WAI-ARIA](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) attributes in documentation examples to promote accessibility.
+
+### CSS
+
+[Adhere to the Code Guide.](https://codeguide.co/#css)
+
+- When feasible, default color palettes should comply with [WCAG color contrast guidelines](https://www.w3.org/TR/WCAG20/#visual-audio-contrast).
+- Except in rare cases, don't remove default `:focus` styles (via e.g. `outline: none;`) without providing alternative styles. See [this A11Y Project post](https://www.a11yproject.com/posts/2013-01-25-never-remove-css-outlines/) for more details.
+
+### JS
+
+- No semicolons (in client-side JS)
+- 2 spaces (no tabs)
+- strict mode
+- "Attractive"
+
+### Checking coding style
+
+Run `npm run test` before committing to ensure your changes follow our coding standards.
+
+
+## License
+
+By contributing your code, you agree to license your contribution under the [MIT License](../LICENSE).
+By contributing to the documentation, you agree to license your contribution under the [Creative Commons Attribution 3.0 Unported License](https://creativecommons.org/licenses/by/3.0/).
+
+Prior to v3.1.0, Bootstrap's code was released under the Apache License v2.0.
diff --git a/bootstrap-css/.github/ISSUE_TEMPLATE/bug_report.yml b/bootstrap-css/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 0000000..3e3d6b9
--- /dev/null
+++ b/bootstrap-css/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,62 @@
+name: Report a bug
+description: Tell us about a bug or issue you may have identified in Bootstrap.
+title: "Provide a general summary of the issue"
+labels: [bug]
+assignees: "-"
+body:
+ - type: checkboxes
+ attributes:
+ label: Prerequisites
+ description: Take a couple minutes to help our maintainers work faster.
+ options:
+ - label: I have [searched](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue) for duplicate or closed issues
+ required: true
+ - label: I have [validated](https://html5.validator.nu/) any HTML to avoid common problems
+ required: true
+ - label: I have read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/main/.github/CONTRIBUTING.md)
+ required: true
+ - type: textarea
+ id: what-happened
+ attributes:
+ label: Describe the issue
+ description: Provide a summary of the issue and what you expected to happen, including specific steps to reproduce.
+ validations:
+ required: true
+ - type: textarea
+ id: reduced-test-case
+ attributes:
+ label: Reduced test cases
+ description: Include links [reduced test case](https://css-tricks.com/reduced-test-cases/) links or suggested fixes using CodePen ([v4 template](https://codepen.io/team/bootstrap/pen/yLabNQL) or [v5 template](https://codepen.io/team/bootstrap/pen/qBamdLj)).
+ validations:
+ required: true
+ - type: dropdown
+ id: os
+ attributes:
+ label: What operating system(s) are you seeing the problem on?
+ multiple: true
+ options:
+ - Windows
+ - macOS
+ - Android
+ - iOS
+ - Linux
+ validations:
+ required: true
+ - type: dropdown
+ id: browser
+ attributes:
+ label: What browser(s) are you seeing the problem on?
+ multiple: true
+ options:
+ - Chrome
+ - Safari
+ - Firefox
+ - Microsoft Edge
+ - Opera
+ - type: input
+ id: version
+ attributes:
+ label: What version of Bootstrap are you using?
+ placeholder: "e.g., v5.1.0 or v4.5.2"
+ validations:
+ required: true
diff --git a/bootstrap-css/.github/ISSUE_TEMPLATE/config.yml b/bootstrap-css/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..f152071
--- /dev/null
+++ b/bootstrap-css/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,4 @@
+contact_links:
+ - name: Ask the community
+ url: https://github.com/twbs/bootstrap/discussions/new
+ about: Ask and discuss questions with other Bootstrap community members.
diff --git a/bootstrap-css/.github/ISSUE_TEMPLATE/feature_request.yml b/bootstrap-css/.github/ISSUE_TEMPLATE/feature_request.yml
new file mode 100644
index 0000000..4b757b1
--- /dev/null
+++ b/bootstrap-css/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -0,0 +1,29 @@
+name: Feature request
+description: Suggest new or updated features to include in Bootstrap.
+title: "Suggest a new feature"
+labels: [feature]
+assignees: []
+body:
+ - type: checkboxes
+ attributes:
+ label: Prerequisites
+ description: Take a couple minutes to help our maintainers work faster.
+ options:
+ - label: I have [searched](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue) for duplicate or closed feature requests
+ required: true
+ - label: I have read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/main/.github/CONTRIBUTING.md)
+ required: true
+ - type: textarea
+ id: proposal
+ attributes:
+ label: Proposal
+ description: Provide detailed information for what we should add, including relevant links to prior art, screenshots, or live demos whenever possible.
+ validations:
+ required: true
+ - type: textarea
+ id: motivation
+ attributes:
+ label: Motivation and context
+ description: Tell us why this change is needed or helpful, and what problems it may help solve.
+ validations:
+ required: true
diff --git a/bootstrap-css/.github/PULL_REQUEST_TEMPLATE.md b/bootstrap-css/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..4675f70
--- /dev/null
+++ b/bootstrap-css/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,38 @@
+### Description
+
+
+
+### Motivation & Context
+
+
+
+### Type of changes
+
+
+
+- [ ] Bug fix (non-breaking change which fixes an issue)
+- [ ] New feature (non-breaking change which adds functionality)
+- [ ] Refactoring (non-breaking change)
+- [ ] Breaking change (fix or feature that would change existing functionality)
+
+### Checklist
+
+
+
+
+- [ ] I have read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/main/.github/CONTRIBUTING.md)
+- [ ] My code follows the code style of the project _(using `npm run lint`)_
+- [ ] My change introduces changes to the documentation
+- [ ] I have updated the documentation accordingly
+- [ ] I have added tests to cover my changes
+- [ ] All new and existing tests passed
+
+#### Live previews
+
+
+
+* https://deploy-preview-{your pr number}--twbs-bootstrap.netlify.app/
+
+### Related issues
+
+
diff --git a/bootstrap-css/.github/SUPPORT.md b/bootstrap-css/.github/SUPPORT.md
new file mode 100644
index 0000000..26b3be4
--- /dev/null
+++ b/bootstrap-css/.github/SUPPORT.md
@@ -0,0 +1,11 @@
+### Bug reports
+
+See the [contributing guidelines](CONTRIBUTING.md) for sharing bug reports.
+
+### How-to
+
+For general troubleshooting or help getting started:
+
+- Ask and explore [our GitHub Discussions](https://github.com/twbs/bootstrap/discussions).
+- Chat with fellow Bootstrappers in IRC. On the `irc.libera.chat` server, in the `#bootstrap` channel.
+- Ask and explore Stack Overflow with the [`bootstrap-5`](https://stackoverflow.com/questions/tagged/bootstrap-5) tag.
diff --git a/bootstrap-css/.github/dependabot.yml b/bootstrap-css/.github/dependabot.yml
new file mode 100644
index 0000000..29135b4
--- /dev/null
+++ b/bootstrap-css/.github/dependabot.yml
@@ -0,0 +1,24 @@
+version: 2
+updates:
+ - package-ecosystem: npm
+ directory: "/"
+ schedule:
+ interval: weekly
+ day: tuesday
+ time: "12:00"
+ timezone: Europe/Athens
+ open-pull-requests-limit: 10
+ reviewers:
+ - XhmikosR
+ labels:
+ - dependencies
+ - v5
+ versioning-strategy: increase
+ rebase-strategy: disabled
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: weekly
+ day: tuesday
+ time: "12:00"
+ timezone: Europe/Athens
diff --git a/bootstrap-css/.github/release-drafter.yml b/bootstrap-css/.github/release-drafter.yml
new file mode 100644
index 0000000..0289984
--- /dev/null
+++ b/bootstrap-css/.github/release-drafter.yml
@@ -0,0 +1,60 @@
+name-template: 'v$NEXT_MAJOR_VERSION'
+tag-template: 'v$NEXT_MAJOR_VERSION'
+prerelease: true
+exclude-labels:
+ - 'skip-changelog'
+categories:
+ - title: '❗ Breaking Changes'
+ labels:
+ - 'breaking-change'
+ - title: '🚀 Highlights'
+ labels:
+ - 'release-highlight'
+ - title: '🚀 Features'
+ labels:
+ - 'new-feature'
+ - 'feature'
+ - 'enhancement'
+ - title: '🐛 Bug fixes'
+ labels:
+ - 'fix'
+ - 'bugfix'
+ - 'bug'
+ - title: '⚡ Performance improvements'
+ labels:
+ - 'performance'
+ - title: '🎨 CSS'
+ labels:
+ - 'css'
+ - title: '☕️ JavaScript'
+ labels:
+ - 'js'
+ - title: '📖 Docs'
+ labels:
+ - 'docs'
+ - title: '🛠 Examples'
+ labels:
+ - 'examples'
+ - title: '🌎 Accessibility'
+ labels:
+ - 'accessibility'
+ - title: '🔧 Utility API'
+ labels:
+ - 'utility API'
+ - 'utilities'
+ - title: '🏭 Tests'
+ labels:
+ - 'tests'
+ - title: '🧰 Misc'
+ labels:
+ - 'build'
+ - 'meta'
+ - 'chore'
+ - 'CI'
+ - title: '📦 Dependencies'
+ labels:
+ - 'dependencies'
+change-template: '- #$NUMBER: $TITLE'
+template: |
+ ## Changes
+ $CHANGES
diff --git a/bootstrap-css/.github/workflows/browserstack.yml b/bootstrap-css/.github/workflows/browserstack.yml
new file mode 100644
index 0000000..425c566
--- /dev/null
+++ b/bootstrap-css/.github/workflows/browserstack.yml
@@ -0,0 +1,38 @@
+name: BrowserStack
+
+on:
+ push:
+ workflow_dispatch:
+
+env:
+ FORCE_COLOR: 2
+ NODE: 16
+
+jobs:
+ browserstack:
+ runs-on: ubuntu-latest
+ if: github.repository == 'twbs/bootstrap' && (!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]'))
+ timeout-minutes: 30
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: "${{ env.NODE }}"
+ cache: npm
+
+ - name: Install npm dependencies
+ run: npm ci
+
+ - name: Run dist
+ run: npm run dist
+
+ - name: Run BrowserStack tests
+ run: npm run js-test-cloud
+ env:
+ BROWSER_STACK_ACCESS_KEY: "${{ secrets.BROWSER_STACK_ACCESS_KEY }}"
+ BROWSER_STACK_USERNAME: "${{ secrets.BROWSER_STACK_USERNAME }}"
+ GITHUB_SHA: "${{ github.sha }}"
diff --git a/bootstrap-css/.github/workflows/bundlewatch.yml b/bootstrap-css/.github/workflows/bundlewatch.yml
new file mode 100644
index 0000000..d1a1747
--- /dev/null
+++ b/bootstrap-css/.github/workflows/bundlewatch.yml
@@ -0,0 +1,38 @@
+name: Bundlewatch
+
+on:
+ push:
+ branches-ignore:
+ - "dependabot/**"
+ pull_request:
+ workflow_dispatch:
+
+env:
+ FORCE_COLOR: 2
+ NODE: 16
+
+jobs:
+ bundlewatch:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: "${{ env.NODE }}"
+ cache: npm
+
+ - name: Install npm dependencies
+ run: npm ci
+
+ - name: Run dist
+ run: npm run dist
+
+ - name: Run bundlewatch
+ run: npm run bundlewatch
+ env:
+ BUNDLEWATCH_GITHUB_TOKEN: "${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}"
+ CI_BRANCH_BASE: main
diff --git a/bootstrap-css/.github/workflows/calibreapp-image-actions.yml b/bootstrap-css/.github/workflows/calibreapp-image-actions.yml
new file mode 100644
index 0000000..e23f562
--- /dev/null
+++ b/bootstrap-css/.github/workflows/calibreapp-image-actions.yml
@@ -0,0 +1,24 @@
+name: Compress Images
+
+on:
+ pull_request:
+ paths:
+ - '**.jpg'
+ - '**.jpeg'
+ - '**.png'
+ - '**.webp'
+
+jobs:
+ build:
+ # Only run on Pull Requests within the same repository, and not from forks.
+ if: github.event.pull_request.head.repo.full_name == github.repository
+ name: calibreapp/image-actions
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v3
+
+ - name: Compress Images
+ uses: calibreapp/image-actions@1.1.0
+ with:
+ githubToken: ${{ secrets.GITHUB_TOKEN }}
diff --git a/bootstrap-css/.github/workflows/codeql.yml b/bootstrap-css/.github/workflows/codeql.yml
new file mode 100644
index 0000000..70be056
--- /dev/null
+++ b/bootstrap-css/.github/workflows/codeql.yml
@@ -0,0 +1,38 @@
+name: "CodeQL"
+
+on:
+ push:
+ branches:
+ - main
+ - v4-dev
+ - "!dependabot/**"
+ pull_request:
+ # The branches below must be a subset of the branches above
+ branches:
+ - main
+ - v4-dev
+ - "!dependabot/**"
+ schedule:
+ - cron: "0 2 * * 5"
+ workflow_dispatch:
+
+jobs:
+ analyze:
+ name: Analyze
+ runs-on: ubuntu-latest
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v2
+ with:
+ languages: "javascript"
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v2
diff --git a/bootstrap-css/.github/workflows/cspell.yml b/bootstrap-css/.github/workflows/cspell.yml
new file mode 100644
index 0000000..3751ad3
--- /dev/null
+++ b/bootstrap-css/.github/workflows/cspell.yml
@@ -0,0 +1,28 @@
+name: cspell
+
+on:
+ push:
+ branches-ignore:
+ - "dependabot/**"
+ pull_request:
+ workflow_dispatch:
+
+env:
+ FORCE_COLOR: 2
+ NODE: 16
+
+jobs:
+ cspell:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+
+ - name: Run cspell
+ uses: streetsidesoftware/cspell-action@v2
+ with:
+ config: ".cspell.json"
+ files: "**/*.md"
+ inline: error
+ incremental_files_only: false
diff --git a/bootstrap-css/.github/workflows/css.yml b/bootstrap-css/.github/workflows/css.yml
new file mode 100644
index 0000000..857a567
--- /dev/null
+++ b/bootstrap-css/.github/workflows/css.yml
@@ -0,0 +1,32 @@
+name: CSS
+
+on:
+ push:
+ branches-ignore:
+ - "dependabot/**"
+ pull_request:
+ workflow_dispatch:
+
+env:
+ FORCE_COLOR: 2
+ NODE: 16
+
+jobs:
+ css:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: "${{ env.NODE }}"
+ cache: npm
+
+ - name: Install npm dependencies
+ run: npm ci
+
+ - name: Build CSS
+ run: npm run css
diff --git a/bootstrap-css/.github/workflows/docs.yml b/bootstrap-css/.github/workflows/docs.yml
new file mode 100644
index 0000000..f33413e
--- /dev/null
+++ b/bootstrap-css/.github/workflows/docs.yml
@@ -0,0 +1,45 @@
+name: Docs
+
+on:
+ push:
+ branches-ignore:
+ - "dependabot/**"
+ pull_request:
+ workflow_dispatch:
+
+env:
+ FORCE_COLOR: 2
+ NODE: 16
+
+jobs:
+ docs:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: "${{ env.NODE }}"
+ cache: npm
+
+ - run: java -version
+
+ - name: Install npm dependencies
+ run: npm ci
+
+ - name: Build docs
+ run: npm run docs-build
+
+ - name: Validate HTML
+ run: npm run docs-vnu
+
+ - name: Run linkinator
+ uses: JustinBeckwith/linkinator-action@v1
+ with:
+ paths: _site
+ recurse: true
+ verbosity: error
+ skip: "^(?!http://localhost)"
diff --git a/bootstrap-css/.github/workflows/issue-close-require.yml b/bootstrap-css/.github/workflows/issue-close-require.yml
new file mode 100644
index 0000000..b251cd7
--- /dev/null
+++ b/bootstrap-css/.github/workflows/issue-close-require.yml
@@ -0,0 +1,19 @@
+name: Close Issue Awaiting Reply
+
+on:
+ schedule:
+ - cron: "0 0 * * *"
+
+jobs:
+ issue-close-require:
+ runs-on: ubuntu-latest
+ if: github.repository == 'twbs/bootstrap'
+ steps:
+ - name: awaiting reply
+ uses: actions-cool/issues-helper@v3
+ with:
+ actions: "close-issues"
+ labels: "awaiting-reply"
+ inactive-day: 14
+ body: |
+ As the issue was labeled with `awaiting-reply`, but there has been no response in 14 days, this issue will be closed. If you have any questions, you can comment/reply.
diff --git a/bootstrap-css/.github/workflows/issue-labeled.yml b/bootstrap-css/.github/workflows/issue-labeled.yml
new file mode 100644
index 0000000..fac5849
--- /dev/null
+++ b/bootstrap-css/.github/workflows/issue-labeled.yml
@@ -0,0 +1,19 @@
+name: Issue Labeled
+
+on:
+ issues:
+ types: [labeled]
+
+jobs:
+ issue-labeled:
+ if: github.repository == 'twbs/bootstrap'
+ runs-on: ubuntu-latest
+ steps:
+ - name: awaiting reply
+ if: github.event.label.name == 'needs-example'
+ uses: actions-cool/issues-helper@v3
+ with:
+ actions: "create-comment"
+ token: ${{ secrets.GITHUB_TOKEN }}
+ body: |
+ Hello @${{ github.event.issue.user.login }}. Bug reports must include a **live demo** of the issue. Per our [contributing guidelines](https://github.com/twbs/bootstrap/blob/main/.github/CONTRIBUTING.md), please create a reduced test case on [CodePen](https://codepen.io/) or [StackBlitz](https://stackblitz.com/) and report back with your link, Bootstrap version, and specific browser and Operating System details.
diff --git a/bootstrap-css/.github/workflows/js.yml b/bootstrap-css/.github/workflows/js.yml
new file mode 100644
index 0000000..82616c5
--- /dev/null
+++ b/bootstrap-css/.github/workflows/js.yml
@@ -0,0 +1,42 @@
+name: JS Tests
+
+on:
+ push:
+ branches-ignore:
+ - "dependabot/**"
+ pull_request:
+ workflow_dispatch:
+
+env:
+ FORCE_COLOR: 2
+ NODE: 16
+
+jobs:
+ run:
+ name: JS Tests
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ env.NODE }}
+ cache: npm
+
+ - name: Install npm dependencies
+ run: npm ci
+
+ - name: Run dist
+ run: npm run js
+
+ - name: Run JS tests
+ run: npm run js-test
+
+ - name: Run Coveralls
+ uses: coverallsapp/github-action@1.1.3
+ with:
+ github-token: "${{ secrets.GITHUB_TOKEN }}"
+ path-to-lcov: "./js/coverage/lcov.info"
diff --git a/bootstrap-css/.github/workflows/lint.yml b/bootstrap-css/.github/workflows/lint.yml
new file mode 100644
index 0000000..816694e
--- /dev/null
+++ b/bootstrap-css/.github/workflows/lint.yml
@@ -0,0 +1,32 @@
+name: Lint
+
+on:
+ push:
+ branches-ignore:
+ - "dependabot/**"
+ pull_request:
+ workflow_dispatch:
+
+env:
+ FORCE_COLOR: 2
+ NODE: 16
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: "${{ env.NODE }}"
+ cache: npm
+
+ - name: Install npm dependencies
+ run: npm ci
+
+ - name: Lint
+ run: npm run lint
diff --git a/bootstrap-css/.github/workflows/node-sass.yml b/bootstrap-css/.github/workflows/node-sass.yml
new file mode 100644
index 0000000..465cee4
--- /dev/null
+++ b/bootstrap-css/.github/workflows/node-sass.yml
@@ -0,0 +1,31 @@
+name: CSS (node-sass)
+
+on:
+ push:
+ branches-ignore:
+ - "dependabot/**"
+ pull_request:
+ workflow_dispatch:
+
+env:
+ FORCE_COLOR: 2
+ NODE: 16
+
+jobs:
+ css:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: "${{ env.NODE }}"
+
+ - name: Build CSS with node-sass
+ run: |
+ npx --package node-sass@latest node-sass --version
+ npx --package node-sass@latest node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/ -o dist-sass/css/
+ ls -Al dist-sass/css
diff --git a/bootstrap-css/.github/workflows/release-notes.yml b/bootstrap-css/.github/workflows/release-notes.yml
new file mode 100644
index 0000000..bbd0a24
--- /dev/null
+++ b/bootstrap-css/.github/workflows/release-notes.yml
@@ -0,0 +1,16 @@
+name: Release notes
+
+on:
+ push:
+ branches:
+ - main
+ workflow_dispatch:
+
+jobs:
+ update_release_draft:
+ runs-on: ubuntu-latest
+ if: github.repository == 'twbs/bootstrap'
+ steps:
+ - uses: release-drafter/release-drafter@v5
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/bootstrap-css/.gitignore b/bootstrap-css/.gitignore
new file mode 100644
index 0000000..2215d63
--- /dev/null
+++ b/bootstrap-css/.gitignore
@@ -0,0 +1,42 @@
+# Ignore docs files
+/_site/
+# Hugo files
+/resources/
+/.hugo_build.lock
+
+# Numerous always-ignore extensions
+*.diff
+*.err
+*.log
+*.orig
+*.rej
+*.swo
+*.swp
+*.vi
+*.zip
+*~
+
+# OS or Editor folders
+._*
+.cache
+.DS_Store
+.idea
+.project
+.settings
+.tmproj
+*.esproj
+*.sublime-project
+*.sublime-workspace
+nbproject
+Thumbs.db
+/.vscode/
+# Local Netlify folder
+.netlify
+
+# Komodo
+.komodotools
+*.komodoproject
+
+# Folders to ignore
+/js/coverage/
+/node_modules/
diff --git a/bootstrap-css/.stylelintignore b/bootstrap-css/.stylelintignore
new file mode 100644
index 0000000..0759a69
--- /dev/null
+++ b/bootstrap-css/.stylelintignore
@@ -0,0 +1,5 @@
+**/*.min.css
+**/dist/
+**/vendor/
+/_site/
+/js/coverage/
diff --git a/bootstrap-css/.stylelintrc b/bootstrap-css/.stylelintrc
new file mode 100644
index 0000000..94c8ec1
--- /dev/null
+++ b/bootstrap-css/.stylelintrc
@@ -0,0 +1,31 @@
+{
+ "extends": [
+ "stylelint-config-twbs-bootstrap"
+ ],
+ "rules": {
+ "declaration-property-value-disallowed-list": {
+ "border": "none",
+ "outline": "none"
+ },
+ "function-disallowed-list": [
+ "calc",
+ "lighten",
+ "darken"
+ ],
+ "property-disallowed-list": [
+ "border-radius",
+ "border-top-left-radius",
+ "border-top-right-radius",
+ "border-bottom-right-radius",
+ "border-bottom-left-radius",
+ "transition"
+ ],
+ "scss/dollar-variable-default": [
+ true,
+ {
+ "ignore": "local"
+ }
+ ],
+ "scss/selector-no-union-class-name": true
+ }
+}
diff --git a/bootstrap-css/CODE_OF_CONDUCT.md b/bootstrap-css/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..28fd5e8
--- /dev/null
+++ b/bootstrap-css/CODE_OF_CONDUCT.md
@@ -0,0 +1,132 @@
+# 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 responsible for enforcement at
+mdo@getbootstrap.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.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/bootstrap-css/LICENSE b/bootstrap-css/LICENSE
new file mode 100644
index 0000000..dda75ca
--- /dev/null
+++ b/bootstrap-css/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2011-2022 Twitter, Inc.
+Copyright (c) 2011-2022 The Bootstrap Authors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/bootstrap-css/README.md b/bootstrap-css/README.md
new file mode 100644
index 0000000..5ad3d90
--- /dev/null
+++ b/bootstrap-css/README.md
@@ -0,0 +1,246 @@
+