├── .babelrc.js ├── .browserslistrc ├── .bundlewatch.config.json ├── .cspell.json ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .gitattributes ├── .github ├── CODEOWNERS ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml ├── SUPPORT.md ├── dependabot.yml ├── release-drafter.yml └── workflows │ ├── browserstack.yml │ ├── bundlewatch.yml │ ├── codeql.yml │ ├── css.yml │ ├── docs.yml │ ├── js.yml │ ├── lint.yml │ ├── node-sass.yml │ └── release-notes.yml ├── .gitignore ├── .stylelintignore ├── .stylelintrc ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── SECURITY.md ├── build ├── .eslintrc.json ├── banner.js ├── build-plugins.js ├── change-version.js ├── generate-sri.js ├── postcss.config.js ├── rollup.config.js ├── svgo.yml ├── vnu-jar.js └── zip-examples.js ├── composer.json ├── config.yml ├── dist ├── css │ ├── bootstrap-grid.css │ ├── bootstrap-grid.css.map │ ├── bootstrap-grid.min.css │ ├── bootstrap-grid.min.css.map │ ├── bootstrap-grid.rtl.css │ ├── bootstrap-grid.rtl.css.map │ ├── bootstrap-grid.rtl.min.css │ ├── bootstrap-grid.rtl.min.css.map │ ├── bootstrap-reboot.css │ ├── bootstrap-reboot.css.map │ ├── bootstrap-reboot.min.css │ ├── bootstrap-reboot.min.css.map │ ├── bootstrap-reboot.rtl.css │ ├── bootstrap-reboot.rtl.css.map │ ├── bootstrap-reboot.rtl.min.css │ ├── bootstrap-reboot.rtl.min.css.map │ ├── bootstrap-utilities.css │ ├── bootstrap-utilities.css.map │ ├── bootstrap-utilities.min.css │ ├── bootstrap-utilities.min.css.map │ ├── bootstrap-utilities.rtl.css │ ├── bootstrap-utilities.rtl.css.map │ ├── bootstrap-utilities.rtl.min.css │ ├── bootstrap-utilities.rtl.min.css.map │ ├── bootstrap.css │ ├── bootstrap.css.map │ ├── bootstrap.min.css │ ├── bootstrap.min.css.map │ ├── bootstrap.rtl.css │ ├── bootstrap.rtl.css.map │ ├── bootstrap.rtl.min.css │ └── bootstrap.rtl.min.css.map └── js │ ├── bootstrap.bundle.js │ ├── bootstrap.bundle.js.map │ ├── bootstrap.bundle.min.js │ ├── bootstrap.bundle.min.js.map │ ├── bootstrap.esm.js │ ├── bootstrap.esm.js.map │ ├── bootstrap.esm.min.js │ ├── bootstrap.esm.min.js.map │ ├── bootstrap.js │ ├── bootstrap.js.map │ ├── bootstrap.min.js │ └── bootstrap.min.js.map ├── js ├── dist │ ├── alert.js │ ├── alert.js.map │ ├── base-component.js │ ├── base-component.js.map │ ├── button.js │ ├── button.js.map │ ├── carousel.js │ ├── carousel.js.map │ ├── collapse.js │ ├── collapse.js.map │ ├── dom │ │ ├── data.js │ │ ├── data.js.map │ │ ├── event-handler.js │ │ ├── event-handler.js.map │ │ ├── manipulator.js │ │ ├── manipulator.js.map │ │ ├── selector-engine.js │ │ └── selector-engine.js.map │ ├── dropdown.js │ ├── dropdown.js.map │ ├── modal.js │ ├── modal.js.map │ ├── offcanvas.js │ ├── offcanvas.js.map │ ├── popover.js │ ├── popover.js.map │ ├── scrollspy.js │ ├── scrollspy.js.map │ ├── tab.js │ ├── tab.js.map │ ├── toast.js │ ├── toast.js.map │ ├── tooltip.js │ └── tooltip.js.map ├── index.esm.js ├── index.umd.js ├── src │ ├── alert.js │ ├── base-component.js │ ├── button.js │ ├── carousel.js │ ├── collapse.js │ ├── dom │ │ ├── data.js │ │ ├── event-handler.js │ │ ├── manipulator.js │ │ └── selector-engine.js │ ├── dropdown.js │ ├── modal.js │ ├── offcanvas.js │ ├── popover.js │ ├── scrollspy.js │ ├── tab.js │ ├── toast.js │ ├── tooltip.js │ └── util │ │ ├── backdrop.js │ │ ├── component-functions.js │ │ ├── focustrap.js │ │ ├── index.js │ │ ├── sanitizer.js │ │ ├── scrollbar.js │ │ └── swipe.js └── tests │ ├── README.md │ ├── browsers.js │ ├── helpers │ └── fixture.js │ ├── integration │ ├── bundle-modularity.js │ ├── bundle.js │ ├── index.html │ ├── rollup.bundle-modularity.js │ └── rollup.bundle.js │ ├── karma.conf.js │ ├── unit │ ├── .eslintrc.json │ ├── alert.spec.js │ ├── base-component.spec.js │ ├── button.spec.js │ ├── carousel.spec.js │ ├── collapse.spec.js │ ├── dom │ │ ├── data.spec.js │ │ ├── event-handler.spec.js │ │ ├── manipulator.spec.js │ │ └── selector-engine.spec.js │ ├── dropdown.spec.js │ ├── jquery.spec.js │ ├── modal.spec.js │ ├── offcanvas.spec.js │ ├── popover.spec.js │ ├── scrollspy.spec.js │ ├── tab.spec.js │ ├── toast.spec.js │ ├── tooltip.spec.js │ └── util │ │ ├── backdrop.spec.js │ │ ├── component-functions.spec.js │ │ ├── focustrap.spec.js │ │ ├── index.spec.js │ │ ├── sanitizer.spec.js │ │ ├── scrollbar.spec.js │ │ └── swipe.spec.js │ └── visual │ ├── alert.html │ ├── button.html │ ├── carousel.html │ ├── collapse.html │ ├── dropdown.html │ ├── modal.html │ ├── popover.html │ ├── scrollspy.html │ ├── tab.html │ ├── toast.html │ └── tooltip.html ├── nuget ├── MyGet.ps1 ├── bootstrap.nuspec ├── bootstrap.png └── bootstrap.sass.nuspec ├── package-lock.json ├── package.js ├── package.json ├── scss ├── _accordion.scss ├── _alert.scss ├── _badge.scss ├── _breadcrumb.scss ├── _button-group.scss ├── _buttons.scss ├── _card.scss ├── _carousel.scss ├── _close.scss ├── _containers.scss ├── _dropdown.scss ├── _forms.scss ├── _functions.scss ├── _grid.scss ├── _helpers.scss ├── _images.scss ├── _list-group.scss ├── _mixins.scss ├── _modal.scss ├── _nav.scss ├── _navbar.scss ├── _offcanvas.scss ├── _pagination.scss ├── _placeholders.scss ├── _popover.scss ├── _progress.scss ├── _reboot.scss ├── _root.scss ├── _spinners.scss ├── _tables.scss ├── _toasts.scss ├── _tooltip.scss ├── _transitions.scss ├── _type.scss ├── _utilities.scss ├── _variables.scss ├── bootstrap-grid.scss ├── bootstrap-reboot.scss ├── bootstrap-utilities.scss ├── bootstrap.scss ├── forms │ ├── _floating-labels.scss │ ├── _form-check.scss │ ├── _form-control.scss │ ├── _form-range.scss │ ├── _form-select.scss │ ├── _form-text.scss │ ├── _input-group.scss │ ├── _labels.scss │ └── _validation.scss ├── helpers │ ├── _clearfix.scss │ ├── _colored-links.scss │ ├── _position.scss │ ├── _ratio.scss │ ├── _stacks.scss │ ├── _stretched-link.scss │ ├── _text-truncation.scss │ ├── _visually-hidden.scss │ └── _vr.scss ├── mixins │ ├── _alert.scss │ ├── _backdrop.scss │ ├── _border-radius.scss │ ├── _box-shadow.scss │ ├── _breakpoints.scss │ ├── _buttons.scss │ ├── _caret.scss │ ├── _clearfix.scss │ ├── _color-scheme.scss │ ├── _container.scss │ ├── _deprecate.scss │ ├── _forms.scss │ ├── _gradients.scss │ ├── _grid.scss │ ├── _image.scss │ ├── _list-group.scss │ ├── _lists.scss │ ├── _pagination.scss │ ├── _reset-text.scss │ ├── _resize.scss │ ├── _table-variants.scss │ ├── _text-truncate.scss │ ├── _transition.scss │ ├── _utilities.scss │ └── _visually-hidden.scss ├── utilities │ └── _api.scss └── vendor │ └── _rfs.scss └── site ├── .eslintrc.json ├── assets ├── js │ ├── application.js │ ├── search.js │ └── vendor │ │ ├── anchor.min.js │ │ └── clipboard.min.js └── scss │ ├── _ads.scss │ ├── _algolia.scss │ ├── _anchor.scss │ ├── _brand.scss │ ├── _buttons.scss │ ├── _callouts.scss │ ├── _clipboard-js.scss │ ├── _colors.scss │ ├── _component-examples.scss │ ├── _content.scss │ ├── _footer.scss │ ├── _layout.scss │ ├── _masthead.scss │ ├── _navbar.scss │ ├── _placeholder-img.scss │ ├── _sidebar.scss │ ├── _skippy.scss │ ├── _subnav.scss │ ├── _syntax.scss │ ├── _toc.scss │ ├── _variables.scss │ └── docs.scss ├── content ├── 404.md └── docs │ ├── 5.1 │ ├── _index.html │ ├── about │ │ ├── brand.md │ │ ├── license.md │ │ ├── overview.md │ │ ├── team.md │ │ └── translations.md │ ├── components │ │ ├── accordion.md │ │ ├── alerts.md │ │ ├── badge.md │ │ ├── breadcrumb.md │ │ ├── button-group.md │ │ ├── buttons.md │ │ ├── card.md │ │ ├── carousel.md │ │ ├── close-button.md │ │ ├── collapse.md │ │ ├── dropdowns.md │ │ ├── list-group.md │ │ ├── modal.md │ │ ├── navbar.md │ │ ├── navs-tabs.md │ │ ├── offcanvas.md │ │ ├── pagination.md │ │ ├── placeholders.md │ │ ├── popovers.md │ │ ├── progress.md │ │ ├── scrollspy.md │ │ ├── spinners.md │ │ ├── toasts.md │ │ └── tooltips.md │ ├── content │ │ ├── figures.md │ │ ├── images.md │ │ ├── reboot.md │ │ ├── tables.md │ │ └── typography.md │ ├── customize │ │ ├── color.md │ │ ├── components.md │ │ ├── css-variables.md │ │ ├── optimize.md │ │ ├── options.md │ │ ├── overview.md │ │ └── sass.md │ ├── examples │ │ ├── .stylelintrc │ │ ├── _index.md │ │ ├── album-rtl │ │ │ └── index.html │ │ ├── album │ │ │ └── index.html │ │ ├── blog-rtl │ │ │ └── index.html │ │ ├── blog │ │ │ ├── blog.css │ │ │ ├── blog.rtl.css │ │ │ └── index.html │ │ ├── carousel-rtl │ │ │ └── index.html │ │ ├── carousel │ │ │ ├── carousel.css │ │ │ ├── carousel.rtl.css │ │ │ └── index.html │ │ ├── cheatsheet-rtl │ │ │ └── index.html │ │ ├── cheatsheet │ │ │ ├── cheatsheet.css │ │ │ ├── cheatsheet.js │ │ │ ├── cheatsheet.rtl.css │ │ │ └── index.html │ │ ├── checkout-rtl │ │ │ └── index.html │ │ ├── checkout │ │ │ ├── form-validation.css │ │ │ ├── form-validation.js │ │ │ └── index.html │ │ ├── cover │ │ │ ├── cover.css │ │ │ └── index.html │ │ ├── dashboard-rtl │ │ │ ├── dashboard.js │ │ │ └── index.html │ │ ├── dashboard │ │ │ ├── dashboard.css │ │ │ ├── dashboard.js │ │ │ ├── dashboard.rtl.css │ │ │ └── index.html │ │ ├── dropdowns │ │ │ ├── dropdowns.css │ │ │ └── index.html │ │ ├── features │ │ │ ├── features.css │ │ │ ├── index.html │ │ │ ├── unsplash-photo-1.jpg │ │ │ ├── unsplash-photo-2.jpg │ │ │ └── unsplash-photo-3.jpg │ │ ├── footers │ │ │ ├── footers.css │ │ │ └── index.html │ │ ├── grid │ │ │ ├── grid.css │ │ │ └── index.html │ │ ├── headers │ │ │ ├── headers.css │ │ │ └── index.html │ │ ├── heroes │ │ │ ├── bootstrap-docs.png │ │ │ ├── bootstrap-themes.png │ │ │ ├── heroes.css │ │ │ └── index.html │ │ ├── jumbotron │ │ │ └── index.html │ │ ├── list-groups │ │ │ ├── index.html │ │ │ └── list-groups.css │ │ ├── masonry │ │ │ └── index.html │ │ ├── modals │ │ │ ├── index.html │ │ │ └── modals.css │ │ ├── navbar-bottom │ │ │ └── index.html │ │ ├── navbar-fixed │ │ │ ├── index.html │ │ │ └── navbar-top-fixed.css │ │ ├── navbar-static │ │ │ ├── index.html │ │ │ └── navbar-top.css │ │ ├── navbars │ │ │ ├── index.html │ │ │ └── navbar.css │ │ ├── offcanvas-navbar │ │ │ ├── index.html │ │ │ ├── offcanvas.css │ │ │ └── offcanvas.js │ │ ├── pricing │ │ │ ├── index.html │ │ │ └── pricing.css │ │ ├── product │ │ │ ├── index.html │ │ │ └── product.css │ │ ├── sidebars │ │ │ ├── index.html │ │ │ ├── sidebars.css │ │ │ └── sidebars.js │ │ ├── sign-in │ │ │ ├── index.html │ │ │ └── signin.css │ │ ├── starter-template │ │ │ ├── index.html │ │ │ └── starter-template.css │ │ ├── sticky-footer-navbar │ │ │ ├── index.html │ │ │ └── sticky-footer-navbar.css │ │ └── sticky-footer │ │ │ ├── index.html │ │ │ └── sticky-footer.css │ ├── extend │ │ ├── approach.md │ │ └── icons.md │ ├── forms │ │ ├── checks-radios.md │ │ ├── floating-labels.md │ │ ├── form-control.md │ │ ├── input-group.md │ │ ├── layout.md │ │ ├── overview.md │ │ ├── range.md │ │ ├── select.md │ │ └── validation.md │ ├── getting-started │ │ ├── accessibility.md │ │ ├── best-practices.md │ │ ├── browsers-devices.md │ │ ├── contents.md │ │ ├── contribute.md │ │ ├── download.md │ │ ├── introduction.md │ │ ├── javascript.md │ │ ├── parcel.md │ │ ├── rfs.md │ │ ├── rtl.md │ │ └── webpack.md │ ├── helpers │ │ ├── clearfix.md │ │ ├── colored-links.md │ │ ├── position.md │ │ ├── ratio.md │ │ ├── stacks.md │ │ ├── stretched-link.md │ │ ├── text-truncation.md │ │ ├── vertical-rule.md │ │ └── visually-hidden.md │ ├── layout │ │ ├── breakpoints.md │ │ ├── columns.md │ │ ├── containers.md │ │ ├── css-grid.md │ │ ├── grid.md │ │ ├── gutters.md │ │ ├── utilities.md │ │ └── z-index.md │ ├── migration.md │ └── utilities │ │ ├── api.md │ │ ├── background.md │ │ ├── borders.md │ │ ├── colors.md │ │ ├── display.md │ │ ├── flex.md │ │ ├── float.md │ │ ├── interactions.md │ │ ├── opacity.md │ │ ├── overflow.md │ │ ├── position.md │ │ ├── shadows.md │ │ ├── sizing.md │ │ ├── spacing.md │ │ ├── text.md │ │ ├── vertical-align.md │ │ └── visibility.md │ ├── _index.html │ └── versions.md ├── data ├── breakpoints.yml ├── colors.yml ├── core-team.yml ├── docs-versions.yml ├── examples.yml ├── grays.yml ├── icons.yml ├── sidebar.yml ├── theme-colors.yml └── translations.yml ├── layouts ├── _default │ ├── 404.html │ ├── baseof.html │ ├── docs.html │ ├── examples.html │ ├── home.html │ ├── redirect.html │ └── single.html ├── alias.html ├── partials │ ├── ads.html │ ├── analytics.html │ ├── callout-danger-async-methods.md │ ├── callout-info-mediaqueries-breakpoints.md │ ├── callout-info-npm-starter.md │ ├── callout-info-prefersreducedmotion.md │ ├── callout-info-sanitizer.md │ ├── callout-warning-color-assistive-technologies.md │ ├── callout-warning-input-support.md │ ├── docs-navbar.html │ ├── docs-sidebar.html │ ├── docs-subnav.html │ ├── docs-versions.html │ ├── favicons.html │ ├── footer.html │ ├── header.html │ ├── home │ │ ├── masthead-followup.html │ │ └── masthead.html │ ├── icons │ │ ├── bootstrap-logo-solid.svg │ │ ├── bootstrap-white-fill.svg │ │ ├── bootstrap.svg │ │ ├── circle-square.svg │ │ ├── cloud-fill.svg │ │ ├── code.svg │ │ ├── collapse.svg │ │ ├── droplet-fill.svg │ │ ├── expand.svg │ │ ├── github.svg │ │ ├── hamburger.svg │ │ ├── homepage-hero.svg │ │ ├── list.svg │ │ ├── menu.svg │ │ ├── opencollective.svg │ │ ├── slack.svg │ │ └── twitter.svg │ ├── redirect.html │ ├── scripts.html │ ├── skippy.html │ ├── social.html │ ├── stylesheet.html │ └── table-content.html ├── robots.txt ├── shortcodes │ ├── bs-table.html │ ├── callout.html │ ├── docsref.html │ ├── example.html │ ├── js-dismiss.html │ ├── markdown.html │ ├── param.html │ ├── partial.html │ ├── placeholder.html │ ├── scss-docs.html │ ├── table.html │ └── year.html └── sitemap.xml └── static ├── CNAME ├── docs └── 5.1 │ └── assets │ ├── brand │ ├── bootstrap-logo-black.svg │ ├── bootstrap-logo-shadow.png │ ├── bootstrap-logo-white.svg │ ├── bootstrap-logo.svg │ ├── bootstrap-social-logo.png │ └── bootstrap-social.png │ ├── img │ ├── bootstrap-icons.png │ ├── bootstrap-icons@2x.png │ ├── bootstrap-themes-collage.png │ ├── bootstrap-themes-collage@2x.png │ ├── bootstrap-themes.png │ ├── bootstrap-themes@2x.png │ ├── examples │ │ ├── album-rtl.png │ │ ├── album-rtl@2x.png │ │ ├── album.png │ │ ├── album@2x.png │ │ ├── blog-rtl.png │ │ ├── blog-rtl@2x.png │ │ ├── blog.png │ │ ├── blog@2x.png │ │ ├── carousel-rtl.png │ │ ├── carousel-rtl@2x.png │ │ ├── carousel.png │ │ ├── carousel@2x.png │ │ ├── cheatsheet-rtl.png │ │ ├── cheatsheet-rtl@2x.png │ │ ├── cheatsheet.png │ │ ├── cheatsheet@2x.png │ │ ├── checkout-rtl.png │ │ ├── checkout-rtl@2x.png │ │ ├── checkout.png │ │ ├── checkout@2x.png │ │ ├── cover.png │ │ ├── cover@2x.png │ │ ├── dashboard-rtl.png │ │ ├── dashboard-rtl@2x.png │ │ ├── dashboard.png │ │ ├── dashboard@2x.png │ │ ├── dropdowns.png │ │ ├── dropdowns@2x.png │ │ ├── features.png │ │ ├── features@2x.png │ │ ├── footers.png │ │ ├── footers@2x.png │ │ ├── grid.png │ │ ├── grid@2x.png │ │ ├── headers.png │ │ ├── headers@2x.png │ │ ├── heroes.png │ │ ├── heroes@2x.png │ │ ├── jumbotron.png │ │ ├── jumbotron@2x.png │ │ ├── list-groups.png │ │ ├── list-groups@2x.png │ │ ├── masonry.png │ │ ├── masonry@2x.png │ │ ├── modals.png │ │ ├── modals@2x.png │ │ ├── navbar-bottom.png │ │ ├── navbar-bottom@2x.png │ │ ├── navbar-fixed.png │ │ ├── navbar-fixed@2x.png │ │ ├── navbar-static.png │ │ ├── navbar-static@2x.png │ │ ├── navbars.png │ │ ├── navbars@2x.png │ │ ├── offcanvas-navbar.png │ │ ├── offcanvas-navbar@2x.png │ │ ├── pricing.png │ │ ├── pricing@2x.png │ │ ├── product.png │ │ ├── product@2x.png │ │ ├── sidebars.png │ │ ├── sidebars@2x.png │ │ ├── sign-in.png │ │ ├── sign-in@2x.png │ │ ├── starter-template.png │ │ ├── starter-template@2x.png │ │ ├── sticky-footer-navbar.png │ │ ├── sticky-footer-navbar@2x.png │ │ ├── sticky-footer.png │ │ └── sticky-footer@2x.png │ └── favicons │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── apple-touch-icon.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon.ico │ │ ├── manifest.json │ │ └── safari-pinned-tab.svg │ └── js │ └── validate-forms.js └── sw.js /.babelrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | [ 4 | '@babel/preset-env', 5 | { 6 | loose: true, 7 | bugfixes: true, 8 | modules: false 9 | } 10 | ] 11 | ] 12 | }; 13 | -------------------------------------------------------------------------------- /.browserslistrc: -------------------------------------------------------------------------------- 1 | # https://github.com/browserslist/browserslist#readme 2 | 3 | >= 0.5% 4 | last 2 major versions 5 | not dead 6 | Chrome >= 60 7 | Firefox >= 60 8 | Firefox ESR 9 | iOS >= 12 10 | Safari >= 12 11 | not Explorer <= 11 12 | -------------------------------------------------------------------------------- /.bundlewatch.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [ 3 | { 4 | "path": "./dist/css/bootstrap-grid.css", 5 | "maxSize": "7.25 kB" 6 | }, 7 | { 8 | "path": "./dist/css/bootstrap-grid.min.css", 9 | "maxSize": "6.5 kB" 10 | }, 11 | { 12 | "path": "./dist/css/bootstrap-reboot.css", 13 | "maxSize": "2.5 kB" 14 | }, 15 | { 16 | "path": "./dist/css/bootstrap-reboot.min.css", 17 | "maxSize": "2.35 kB" 18 | }, 19 | { 20 | "path": "./dist/css/bootstrap-utilities.css", 21 | "maxSize": "7.75 kB" 22 | }, 23 | { 24 | "path": "./dist/css/bootstrap-utilities.min.css", 25 | "maxSize": "6.85 kB" 26 | }, 27 | { 28 | "path": "./dist/css/bootstrap.css", 29 | "maxSize": "25.5 kB" 30 | }, 31 | { 32 | "path": "./dist/css/bootstrap.min.css", 33 | "maxSize": "23.25 kB" 34 | }, 35 | { 36 | "path": "./dist/js/bootstrap.bundle.js", 37 | "maxSize": "42.5 kB" 38 | }, 39 | { 40 | "path": "./dist/js/bootstrap.bundle.min.js", 41 | "maxSize": "22.75 kB" 42 | }, 43 | { 44 | "path": "./dist/js/bootstrap.esm.js", 45 | "maxSize": "27.5 kB" 46 | }, 47 | { 48 | "path": "./dist/js/bootstrap.esm.min.js", 49 | "maxSize": "18.25 kB" 50 | }, 51 | { 52 | "path": "./dist/js/bootstrap.js", 53 | "maxSize": "28.25 kB" 54 | }, 55 | { 56 | "path": "./dist/js/bootstrap.min.js", 57 | "maxSize": "16.25 kB" 58 | } 59 | ], 60 | "ci": { 61 | "trackBranches": [ 62 | "main", 63 | "v4-dev" 64 | ] 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | end_of_line = lf 8 | indent_size = 2 9 | indent_style = space 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | **/*.min.js 2 | **/dist/ 3 | **/vendor/ 4 | /_site/ 5 | /js/coverage/ 6 | /site/static/sw.js 7 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": [ 4 | "plugin:import/errors", 5 | "plugin:import/warnings", 6 | "plugin:unicorn/recommended", 7 | "xo", 8 | "xo/browser" 9 | ], 10 | "rules": { 11 | "arrow-body-style": "off", 12 | "capitalized-comments": "off", 13 | "comma-dangle": [ 14 | "error", 15 | "never" 16 | ], 17 | "indent": [ 18 | "error", 19 | 2, 20 | { 21 | "MemberExpression": "off", 22 | "SwitchCase": 1 23 | } 24 | ], 25 | "max-params": [ 26 | "warn", 27 | 5 28 | ], 29 | "multiline-ternary": [ 30 | "error", 31 | "always-multiline" 32 | ], 33 | "new-cap": [ 34 | "error", 35 | { 36 | "properties": false 37 | } 38 | ], 39 | "no-console": "error", 40 | "no-negated-condition": "off", 41 | "object-curly-spacing": [ 42 | "error", 43 | "always" 44 | ], 45 | "operator-linebreak": [ 46 | "error", 47 | "after" 48 | ], 49 | "semi": [ 50 | "error", 51 | "never" 52 | ], 53 | "unicorn/explicit-length-check": "off", 54 | "unicorn/no-array-callback-reference": "off", 55 | "unicorn/no-array-method-this-argument": "off", 56 | "unicorn/no-null": "off", 57 | "unicorn/no-unused-properties": "error", 58 | "unicorn/prefer-array-flat": "off", 59 | "unicorn/prefer-dom-node-dataset": "off", 60 | "unicorn/prefer-module": "off", 61 | "unicorn/prefer-query-selector": "off", 62 | "unicorn/prefer-spread": "off", 63 | "unicorn/prevent-abbreviations": "off" 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Enforce Unix newlines 2 | * text=auto eol=lf 3 | 4 | # Don't diff or textually merge source maps 5 | *.map binary 6 | 7 | bootstrap.css linguist-vendored=false 8 | bootstrap.js linguist-vendored=false 9 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | *.js @twbs/js-review 2 | *.css @twbs/css-review 3 | *.scss @twbs/css-review 4 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: Ask the community 3 | url: https://github.com/twbs/bootstrap/discussions/new 4 | about: Ask and discuss questions with other Bootstrap community members. 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest new or updated features to include in Bootstrap. 3 | title: "Suggest a new feature" 4 | labels: [feature] 5 | assignees: [] 6 | body: 7 | - type: checkboxes 8 | attributes: 9 | label: Prerequisites 10 | description: Take a couple minutes to help our maintainers work faster. 11 | options: 12 | - label: I have [searched](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue) for duplicate or closed feature requests 13 | required: true 14 | - label: I have read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/main/.github/CONTRIBUTING.md) 15 | required: true 16 | - type: textarea 17 | id: proposal 18 | attributes: 19 | label: Proposal 20 | description: Provide detailed information for what we should add, including relevant links to prior art, screenshots, or live demos whenever possible. 21 | validations: 22 | required: true 23 | - type: textarea 24 | id: motivation 25 | attributes: 26 | label: Motivation and context 27 | description: Tell us why this change is needed or helpful, and what problems it may help solve. 28 | validations: 29 | required: true 30 | -------------------------------------------------------------------------------- /.github/SUPPORT.md: -------------------------------------------------------------------------------- 1 | ### Bug reports 2 | 3 | See the [contributing guidelines](CONTRIBUTING.md) for sharing bug reports. 4 | 5 | ### How-to 6 | 7 | For general troubleshooting or help getting started: 8 | 9 | - Join [the official Slack room](https://bootstrap-slack.herokuapp.com/). 10 | - Chat with fellow Bootstrappers in IRC. On the `irc.libera.chat` server, in the `#bootstrap` channel. 11 | - Ask and explore Stack Overflow with the [`bootstrap-5`](https://stackoverflow.com/questions/tagged/bootstrap-5) tag. 12 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/" 5 | schedule: 6 | interval: weekly 7 | day: tuesday 8 | time: "12:00" 9 | timezone: Europe/Athens 10 | open-pull-requests-limit: 10 11 | reviewers: 12 | - XhmikosR 13 | labels: 14 | - dependencies 15 | - v5 16 | versioning-strategy: increase 17 | rebase-strategy: disabled 18 | - package-ecosystem: "github-actions" 19 | directory: "/" 20 | schedule: 21 | interval: weekly 22 | day: tuesday 23 | time: "12:00" 24 | timezone: Europe/Athens 25 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name-template: 'v$NEXT_MAJOR_VERSION' 2 | tag-template: 'v$NEXT_MAJOR_VERSION' 3 | prerelease: true 4 | exclude-labels: 5 | - 'skip-changelog' 6 | categories: 7 | - title: '❗ Breaking Changes' 8 | labels: 9 | - 'breaking-change' 10 | - title: '🚀 Features' 11 | labels: 12 | - 'new-feature' 13 | - 'feature' 14 | - 'enhancement' 15 | - title: '🐛 Bug fixes' 16 | labels: 17 | - 'fix' 18 | - 'bugfix' 19 | - 'bug' 20 | - title: '⚡ Performance improvements' 21 | labels: 22 | - 'performance' 23 | - title: '🎨 CSS' 24 | labels: 25 | - 'css' 26 | - title: '☕️ JavaScript' 27 | labels: 28 | - 'js' 29 | - title: '📖 Docs' 30 | labels: 31 | - 'docs' 32 | - title: '🛠 Examples' 33 | labels: 34 | - 'examples' 35 | - title: '🌎 Accessibility' 36 | labels: 37 | - 'accessibility' 38 | - title: '🔧 Utility API' 39 | labels: 40 | - 'utility API' 41 | - 'utilities' 42 | - title: '🏭 Tests' 43 | labels: 44 | - 'tests' 45 | - title: '🧰 Misc' 46 | labels: 47 | - 'build' 48 | - 'meta' 49 | - 'chore' 50 | - 'CI' 51 | - title: '📦 Dependencies' 52 | labels: 53 | - 'dependencies' 54 | change-template: '- #$NUMBER: $TITLE' 55 | template: | 56 | ## Changes 57 | $CHANGES 58 | -------------------------------------------------------------------------------- /.github/workflows/browserstack.yml: -------------------------------------------------------------------------------- 1 | name: BrowserStack 2 | 3 | on: 4 | push: 5 | 6 | env: 7 | FORCE_COLOR: 2 8 | NODE: 16 9 | 10 | jobs: 11 | browserstack: 12 | runs-on: ubuntu-latest 13 | if: github.repository == 'twbs/bootstrap' && (!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')) 14 | timeout-minutes: 30 15 | 16 | steps: 17 | - name: Clone repository 18 | uses: actions/checkout@v2 19 | 20 | - name: Set up Node.js 21 | uses: actions/setup-node@v2 22 | with: 23 | node-version: "${{ env.NODE }}" 24 | cache: npm 25 | 26 | - name: Install npm dependencies 27 | run: npm ci 28 | 29 | - name: Run dist 30 | run: npm run dist 31 | 32 | - name: Run BrowserStack tests 33 | run: npm run js-test-cloud 34 | env: 35 | BROWSER_STACK_ACCESS_KEY: "${{ secrets.BROWSER_STACK_ACCESS_KEY }}" 36 | BROWSER_STACK_USERNAME: "${{ secrets.BROWSER_STACK_USERNAME }}" 37 | GITHUB_SHA: "${{ github.sha }}" 38 | -------------------------------------------------------------------------------- /.github/workflows/bundlewatch.yml: -------------------------------------------------------------------------------- 1 | name: Bundlewatch 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - "dependabot/**" 7 | pull_request: 8 | 9 | env: 10 | FORCE_COLOR: 2 11 | NODE: 16 12 | 13 | jobs: 14 | bundlewatch: 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - name: Clone repository 19 | uses: actions/checkout@v2 20 | 21 | - name: Set up Node.js 22 | uses: actions/setup-node@v2 23 | with: 24 | node-version: "${{ env.NODE }}" 25 | cache: npm 26 | 27 | - name: Install npm dependencies 28 | run: npm ci 29 | 30 | - name: Run dist 31 | run: npm run dist 32 | 33 | - name: Run bundlewatch 34 | run: npm run bundlewatch 35 | env: 36 | BUNDLEWATCH_GITHUB_TOKEN: "${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}" 37 | CI_BRANCH_BASE: main 38 | -------------------------------------------------------------------------------- /.github/workflows/codeql.yml: -------------------------------------------------------------------------------- 1 | name: "CodeQL" 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | - v4-dev 8 | - "!dependabot/**" 9 | pull_request: 10 | # The branches below must be a subset of the branches above 11 | branches: 12 | - main 13 | - v4-dev 14 | - "!dependabot/**" 15 | schedule: 16 | - cron: "0 2 * * 5" 17 | 18 | jobs: 19 | analyze: 20 | name: Analyze 21 | runs-on: ubuntu-latest 22 | permissions: 23 | actions: read 24 | contents: read 25 | security-events: write 26 | 27 | steps: 28 | - name: Checkout repository 29 | uses: actions/checkout@v2 30 | 31 | - name: Initialize CodeQL 32 | uses: github/codeql-action/init@v1 33 | with: 34 | languages: "javascript" 35 | 36 | - name: Perform CodeQL Analysis 37 | uses: github/codeql-action/analyze@v1 38 | -------------------------------------------------------------------------------- /.github/workflows/css.yml: -------------------------------------------------------------------------------- 1 | name: CSS 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - "dependabot/**" 7 | pull_request: 8 | 9 | env: 10 | FORCE_COLOR: 2 11 | NODE: 16 12 | 13 | jobs: 14 | css: 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - name: Clone repository 19 | uses: actions/checkout@v2 20 | 21 | - name: Set up Node.js 22 | uses: actions/setup-node@v2 23 | with: 24 | node-version: "${{ env.NODE }}" 25 | cache: npm 26 | 27 | - name: Install npm dependencies 28 | run: npm ci 29 | 30 | - name: Build CSS 31 | run: npm run css 32 | -------------------------------------------------------------------------------- /.github/workflows/docs.yml: -------------------------------------------------------------------------------- 1 | name: Docs 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - "dependabot/**" 7 | pull_request: 8 | 9 | env: 10 | FORCE_COLOR: 2 11 | NODE: 16 12 | 13 | jobs: 14 | docs: 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - name: Clone repository 19 | uses: actions/checkout@v2 20 | 21 | - name: Set up Node.js 22 | uses: actions/setup-node@v2 23 | with: 24 | node-version: "${{ env.NODE }}" 25 | cache: npm 26 | 27 | - run: java -version 28 | 29 | - name: Install npm dependencies 30 | run: npm ci 31 | 32 | - name: Test docs 33 | run: npm run docs 34 | -------------------------------------------------------------------------------- /.github/workflows/js.yml: -------------------------------------------------------------------------------- 1 | name: JS Tests 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - "dependabot/**" 7 | pull_request: 8 | 9 | env: 10 | FORCE_COLOR: 2 11 | 12 | jobs: 13 | run: 14 | name: Node ${{ matrix.node }} 15 | runs-on: ubuntu-latest 16 | 17 | strategy: 18 | fail-fast: false 19 | matrix: 20 | node: [12, 14, 16] 21 | 22 | steps: 23 | - name: Clone repository 24 | uses: actions/checkout@v2 25 | 26 | - name: Set up Node.js 27 | uses: actions/setup-node@v2 28 | with: 29 | node-version: ${{ matrix.node }} 30 | cache: npm 31 | 32 | - name: Install npm dependencies 33 | run: npm ci 34 | 35 | - name: Run dist 36 | run: npm run js 37 | 38 | - name: Run JS tests 39 | run: npm run js-test 40 | 41 | - name: Run Coveralls 42 | uses: coverallsapp/github-action@1.1.3 43 | if: matrix.node == 16 44 | with: 45 | github-token: "${{ secrets.GITHUB_TOKEN }}" 46 | path-to-lcov: "./js/coverage/lcov.info" 47 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - "dependabot/**" 7 | pull_request: 8 | 9 | env: 10 | FORCE_COLOR: 2 11 | NODE: 16 12 | 13 | jobs: 14 | lint: 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - name: Clone repository 19 | uses: actions/checkout@v2 20 | 21 | - name: Set up Node.js 22 | uses: actions/setup-node@v2 23 | with: 24 | node-version: "${{ env.NODE }}" 25 | cache: npm 26 | 27 | - name: Install npm dependencies 28 | run: npm ci 29 | 30 | - name: Lint 31 | run: npm run lint 32 | -------------------------------------------------------------------------------- /.github/workflows/node-sass.yml: -------------------------------------------------------------------------------- 1 | name: CSS (node-sass) 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - "dependabot/**" 7 | pull_request: 8 | 9 | env: 10 | FORCE_COLOR: 2 11 | NODE: 16 12 | 13 | jobs: 14 | css: 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - name: Clone repository 19 | uses: actions/checkout@v2 20 | 21 | - name: Set up Node.js 22 | uses: actions/setup-node@v2 23 | with: 24 | node-version: "${{ env.NODE }}" 25 | 26 | - name: Build CSS with node-sass 27 | run: | 28 | npx --package node-sass@latest node-sass --version 29 | npx --package node-sass@latest node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/ -o dist-sass/css/ 30 | ls -Al dist-sass/css 31 | -------------------------------------------------------------------------------- /.github/workflows/release-notes.yml: -------------------------------------------------------------------------------- 1 | name: Release notes 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | update_release_draft: 10 | runs-on: ubuntu-latest 11 | if: github.repository == 'twbs/bootstrap' 12 | steps: 13 | - uses: release-drafter/release-drafter@v5 14 | env: 15 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore docs files 2 | /_site/ 3 | # Hugo resources folder 4 | /resources/ 5 | 6 | # Numerous always-ignore extensions 7 | *.diff 8 | *.err 9 | *.log 10 | *.orig 11 | *.rej 12 | *.swo 13 | *.swp 14 | *.vi 15 | *.zip 16 | *~ 17 | 18 | # OS or Editor folders 19 | ._* 20 | .cache 21 | .DS_Store 22 | .idea 23 | .project 24 | .settings 25 | .tmproj 26 | *.esproj 27 | *.sublime-project 28 | *.sublime-workspace 29 | nbproject 30 | Thumbs.db 31 | /.vscode/ 32 | # Local Netlify folder 33 | .netlify 34 | 35 | # Komodo 36 | .komodotools 37 | *.komodoproject 38 | 39 | # Folders to ignore 40 | /js/coverage/ 41 | /node_modules/ 42 | -------------------------------------------------------------------------------- /.stylelintignore: -------------------------------------------------------------------------------- 1 | **/*.min.css 2 | **/dist/ 3 | **/vendor/ 4 | /_site/ 5 | /js/coverage/ 6 | -------------------------------------------------------------------------------- /.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "stylelint-config-twbs-bootstrap/scss" 4 | ], 5 | "rules": { 6 | "declaration-property-value-disallowed-list": { 7 | "border": "none", 8 | "outline": "none" 9 | }, 10 | "function-disallowed-list": [ 11 | "calc", 12 | "lighten", 13 | "darken" 14 | ], 15 | "property-disallowed-list": [ 16 | "border-radius", 17 | "border-top-left-radius", 18 | "border-top-right-radius", 19 | "border-bottom-right-radius", 20 | "border-bottom-left-radius", 21 | "transition" 22 | ], 23 | "scss/dollar-variable-default": [ 24 | true, 25 | { 26 | "ignore": "local" 27 | } 28 | ], 29 | "scss/selector-no-union-class-name": true 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011-2021 Twitter, Inc. 4 | Copyright (c) 2011-2021 The Bootstrap Authors 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Reporting Security Issues 2 | 3 | The Bootstrap team and community take security issues in Bootstrap seriously. We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions. 4 | 5 | To report a security issue, email [security@getbootstrap.com](mailto:security@getbootstrap.com) and include the word "SECURITY" in the subject line. 6 | 7 | We'll endeavor to respond quickly, and will keep you updated throughout the process. 8 | -------------------------------------------------------------------------------- /build/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": false, 4 | "node": true 5 | }, 6 | "parserOptions": { 7 | "sourceType": "script" 8 | }, 9 | "extends": "../.eslintrc.json", 10 | "rules": { 11 | "no-console": "off", 12 | "strict": "error" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /build/banner.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const pkg = require('../package.json') 4 | const year = new Date().getFullYear() 5 | 6 | function getBanner(pluginFilename) { 7 | return `/*! 8 | * Bootstrap${pluginFilename ? ` ${pluginFilename}` : ''} v${pkg.version} (${pkg.homepage}) 9 | * Copyright 2011-${year} ${pkg.author} 10 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 11 | */` 12 | } 13 | 14 | module.exports = getBanner 15 | -------------------------------------------------------------------------------- /build/postcss.config.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | module.exports = ctx => { 4 | return { 5 | map: ctx.file.dirname.includes('examples') ? 6 | false : 7 | { 8 | inline: false, 9 | annotation: true, 10 | sourcesContent: true 11 | }, 12 | plugins: { 13 | autoprefixer: { 14 | cascade: false 15 | }, 16 | rtlcss: ctx.env === 'RTL' ? {} : false 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /build/rollup.config.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const path = require('path') 4 | const { babel } = require('@rollup/plugin-babel') 5 | const { nodeResolve } = require('@rollup/plugin-node-resolve') 6 | const replace = require('@rollup/plugin-replace') 7 | const banner = require('./banner.js') 8 | 9 | const BUNDLE = process.env.BUNDLE === 'true' 10 | const ESM = process.env.ESM === 'true' 11 | 12 | let fileDest = `bootstrap${ESM ? '.esm' : ''}` 13 | const external = ['@popperjs/core'] 14 | const plugins = [ 15 | babel({ 16 | // Only transpile our source code 17 | exclude: 'node_modules/**', 18 | // Include the helpers in the bundle, at most one copy of each 19 | babelHelpers: 'bundled' 20 | }) 21 | ] 22 | const globals = { 23 | '@popperjs/core': 'Popper' 24 | } 25 | 26 | if (BUNDLE) { 27 | fileDest += '.bundle' 28 | // Remove last entry in external array to bundle Popper 29 | external.pop() 30 | delete globals['@popperjs/core'] 31 | plugins.push( 32 | replace({ 33 | 'process.env.NODE_ENV': '"production"', 34 | preventAssignment: true 35 | }), 36 | nodeResolve() 37 | ) 38 | } 39 | 40 | const rollupConfig = { 41 | input: path.resolve(__dirname, `../js/index.${ESM ? 'esm' : 'umd'}.js`), 42 | output: { 43 | banner, 44 | file: path.resolve(__dirname, `../dist/js/${fileDest}.js`), 45 | format: ESM ? 'esm' : 'umd', 46 | globals, 47 | generatedCode: 'es2015' 48 | }, 49 | external, 50 | plugins 51 | } 52 | 53 | if (!ESM) { 54 | rollupConfig.output.name = 'bootstrap' 55 | } 56 | 57 | module.exports = rollupConfig 58 | -------------------------------------------------------------------------------- /build/svgo.yml: -------------------------------------------------------------------------------- 1 | # Usage: 2 | # install svgo globally: `npm i -g svgo` 3 | # svgo --config=build/svgo.yml --input=foo.svg 4 | 5 | # https://github.com/svg/svgo/blob/master/docs/how-it-works/en.md 6 | # replace default config 7 | 8 | multipass: true 9 | #full: true 10 | 11 | # https://github.com/svg/svgo/blob/master/lib/svgo/js2svg.js#L6 for more config options 12 | 13 | js2svg: 14 | pretty: true 15 | indent: 2 16 | 17 | plugins: 18 | # - addAttributesToSVGElement: 19 | # attributes: 20 | # - focusable: false 21 | - cleanupAttrs: true 22 | - cleanupEnableBackground: true 23 | - cleanupIDs: true 24 | - cleanupListOfValues: true 25 | - cleanupNumericValues: true 26 | - collapseGroups: true 27 | - convertColors: true 28 | - convertPathData: true 29 | - convertShapeToPath: true 30 | - convertStyleToAttrs: true 31 | - convertTransform: true 32 | - inlineStyles: true 33 | - mergePaths: true 34 | - minifyStyles: true 35 | - moveElemsAttrsToGroup: true 36 | - moveGroupAttrsToElems: true 37 | - removeAttrs: 38 | attrs: 39 | - "data-name" 40 | - removeComments: true 41 | - removeDesc: true 42 | - removeDoctype: true 43 | - removeEditorsNSData: true 44 | - removeEmptyAttrs: true 45 | - removeEmptyContainers: true 46 | - removeEmptyText: true 47 | - removeHiddenElems: true 48 | - removeMetadata: true 49 | - removeNonInheritableGroupAttrs: true 50 | - removeTitle: false 51 | - removeUnknownsAndDefaults: 52 | keepRoleAttr: true 53 | - removeUnusedNS: true 54 | - removeUselessDefs: true 55 | - removeUselessStrokeAndFill: true 56 | - removeViewBox: false 57 | - removeXMLNS: false 58 | - removeXMLProcInst: true 59 | - sortAttrs: true 60 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "twbs/bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "keywords": [ 5 | "css", 6 | "js", 7 | "sass", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "https://getbootstrap.com/", 15 | "authors": [ 16 | { 17 | "name": "Mark Otto", 18 | "email": "markdotto@gmail.com" 19 | }, 20 | { 21 | "name": "Jacob Thornton", 22 | "email": "jacobthornton@gmail.com" 23 | } 24 | ], 25 | "support": { 26 | "issues": "https://github.com/twbs/bootstrap/issues" 27 | }, 28 | "license": "MIT", 29 | "replace": { 30 | "twitter/bootstrap": "self.version" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /js/index.esm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------------------------------------- 3 | * Bootstrap (v5.1.3): index.esm.js 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5 | * -------------------------------------------------------------------------- 6 | */ 7 | 8 | import Alert from './src/alert' 9 | import Button from './src/button' 10 | import Carousel from './src/carousel' 11 | import Collapse from './src/collapse' 12 | import Dropdown from './src/dropdown' 13 | import Modal from './src/modal' 14 | import Offcanvas from './src/offcanvas' 15 | import Popover from './src/popover' 16 | import ScrollSpy from './src/scrollspy' 17 | import Tab from './src/tab' 18 | import Toast from './src/toast' 19 | import Tooltip from './src/tooltip' 20 | 21 | export { 22 | Alert, 23 | Button, 24 | Carousel, 25 | Collapse, 26 | Dropdown, 27 | Modal, 28 | Offcanvas, 29 | Popover, 30 | ScrollSpy, 31 | Tab, 32 | Toast, 33 | Tooltip 34 | } 35 | -------------------------------------------------------------------------------- /js/index.umd.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------------------------------------- 3 | * Bootstrap (v5.1.3): index.umd.js 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5 | * -------------------------------------------------------------------------- 6 | */ 7 | 8 | import Alert from './src/alert' 9 | import Button from './src/button' 10 | import Carousel from './src/carousel' 11 | import Collapse from './src/collapse' 12 | import Dropdown from './src/dropdown' 13 | import Modal from './src/modal' 14 | import Offcanvas from './src/offcanvas' 15 | import Popover from './src/popover' 16 | import ScrollSpy from './src/scrollspy' 17 | import Tab from './src/tab' 18 | import Toast from './src/toast' 19 | import Tooltip from './src/tooltip' 20 | 21 | export default { 22 | Alert, 23 | Button, 24 | Carousel, 25 | Collapse, 26 | Dropdown, 27 | Modal, 28 | Offcanvas, 29 | Popover, 30 | ScrollSpy, 31 | Tab, 32 | Toast, 33 | Tooltip 34 | } 35 | -------------------------------------------------------------------------------- /js/src/dom/data.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------------------------------------- 3 | * Bootstrap (v5.1.3): dom/data.js 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5 | * -------------------------------------------------------------------------- 6 | */ 7 | 8 | /** 9 | * Constants 10 | */ 11 | 12 | const elementMap = new Map() 13 | 14 | export default { 15 | set(element, key, instance) { 16 | if (!elementMap.has(element)) { 17 | elementMap.set(element, new Map()) 18 | } 19 | 20 | const instanceMap = elementMap.get(element) 21 | 22 | // make it clear we only want one instance per element 23 | // can be removed later when multiple key/instances are fine to be used 24 | if (!instanceMap.has(key) && instanceMap.size !== 0) { 25 | // eslint-disable-next-line no-console 26 | console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`) 27 | return 28 | } 29 | 30 | instanceMap.set(key, instance) 31 | }, 32 | 33 | get(element, key) { 34 | if (elementMap.has(element)) { 35 | return elementMap.get(element).get(key) || null 36 | } 37 | 38 | return null 39 | }, 40 | 41 | remove(element, key) { 42 | if (!elementMap.has(element)) { 43 | return 44 | } 45 | 46 | const instanceMap = elementMap.get(element) 47 | 48 | instanceMap.delete(key) 49 | 50 | // free up element references if there are no instances left for an element 51 | if (instanceMap.size === 0) { 52 | elementMap.delete(element) 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /js/src/util/component-functions.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------------------------------------- 3 | * Bootstrap (v5.1.3): util/component-functions.js 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5 | * -------------------------------------------------------------------------- 6 | */ 7 | 8 | import EventHandler from '../dom/event-handler' 9 | import { getElementFromSelector, isDisabled } from './index' 10 | 11 | const enableDismissTrigger = (component, method = 'hide') => { 12 | const clickEvent = `click.dismiss${component.EVENT_KEY}` 13 | const name = component.NAME 14 | 15 | EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) { 16 | if (['A', 'AREA'].includes(this.tagName)) { 17 | event.preventDefault() 18 | } 19 | 20 | if (isDisabled(this)) { 21 | return 22 | } 23 | 24 | const target = getElementFromSelector(this) || this.closest(`.${name}`) 25 | const instance = component.getOrCreateInstance(target) 26 | 27 | // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method 28 | instance[method]() 29 | }) 30 | } 31 | 32 | export { 33 | enableDismissTrigger 34 | } 35 | -------------------------------------------------------------------------------- /js/tests/helpers/fixture.js: -------------------------------------------------------------------------------- 1 | const fixtureId = 'fixture' 2 | 3 | export const getFixture = () => { 4 | let fixtureEl = document.getElementById(fixtureId) 5 | 6 | if (!fixtureEl) { 7 | fixtureEl = document.createElement('div') 8 | fixtureEl.setAttribute('id', fixtureId) 9 | fixtureEl.style.position = 'absolute' 10 | fixtureEl.style.top = '-10000px' 11 | fixtureEl.style.left = '-10000px' 12 | fixtureEl.style.width = '10000px' 13 | fixtureEl.style.height = '10000px' 14 | document.body.append(fixtureEl) 15 | } 16 | 17 | return fixtureEl 18 | } 19 | 20 | export const clearFixture = () => { 21 | const fixtureEl = getFixture() 22 | 23 | fixtureEl.innerHTML = '' 24 | } 25 | 26 | export const createEvent = (eventName, params = {}) => { 27 | const event = document.createEvent('Event') 28 | 29 | event.initEvent(eventName, Boolean(params.bubbles), Boolean(params.cancelable)) 30 | return event 31 | } 32 | 33 | export const jQueryMock = { 34 | elements: undefined, 35 | fn: {}, 36 | each(fn) { 37 | for (const el of this.elements) { 38 | fn.call(el) 39 | } 40 | } 41 | } 42 | 43 | export const clearBodyAndDocument = () => { 44 | const attributes = ['data-bs-padding-right', 'style'] 45 | 46 | for (const attr of attributes) { 47 | document.documentElement.removeAttribute(attr) 48 | document.body.removeAttribute(attr) 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /js/tests/integration/bundle-modularity.js: -------------------------------------------------------------------------------- 1 | import Tooltip from '../../dist/tooltip' 2 | import '../../dist/carousel' 3 | 4 | window.addEventListener('load', () => { 5 | [].concat(...document.querySelectorAll('[data-bs-toggle="tooltip"]')) 6 | .map(tooltipNode => new Tooltip(tooltipNode)) 7 | }) 8 | -------------------------------------------------------------------------------- /js/tests/integration/bundle.js: -------------------------------------------------------------------------------- 1 | import { Tooltip } from '../../../dist/js/bootstrap.esm.js' 2 | 3 | window.addEventListener('load', () => { 4 | [].concat(...document.querySelectorAll('[data-bs-toggle="tooltip"]')) 5 | .map(tooltipNode => new Tooltip(tooltipNode)) 6 | }) 7 | -------------------------------------------------------------------------------- /js/tests/integration/rollup.bundle-modularity.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | const commonjs = require('@rollup/plugin-commonjs') 4 | const configRollup = require('./rollup.bundle') 5 | 6 | const config = { 7 | ...configRollup, 8 | input: 'js/tests/integration/bundle-modularity.js', 9 | output: { 10 | file: 'js/coverage/bundle-modularity.js', 11 | format: 'iife' 12 | } 13 | } 14 | 15 | config.plugins.unshift(commonjs()) 16 | 17 | module.exports = config 18 | -------------------------------------------------------------------------------- /js/tests/integration/rollup.bundle.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | const { babel } = require('@rollup/plugin-babel') 4 | const { nodeResolve } = require('@rollup/plugin-node-resolve') 5 | const replace = require('@rollup/plugin-replace') 6 | 7 | module.exports = { 8 | input: 'js/tests/integration/bundle.js', 9 | output: { 10 | file: 'js/coverage/bundle.js', 11 | format: 'iife' 12 | }, 13 | plugins: [ 14 | replace({ 15 | 'process.env.NODE_ENV': '"production"', 16 | preventAssignment: true 17 | }), 18 | nodeResolve(), 19 | babel({ 20 | exclude: 'node_modules/**', 21 | babelHelpers: 'bundled' 22 | }) 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /js/tests/unit/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "../../../.eslintrc.json" 4 | ], 5 | "env": { 6 | "jasmine": true 7 | }, 8 | "rules": { 9 | "unicorn/consistent-function-scoping": "off", 10 | "unicorn/no-useless-undefined": "off", 11 | "unicorn/prefer-add-event-listener": "off" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /nuget/MyGet.ps1: -------------------------------------------------------------------------------- 1 | # set env vars usually set by MyGet (enable for local testing) 2 | #$env:SourcesPath = '..' 3 | #$env:NuGet = "./nuget.exe" # https://dist.nuget.org/win-x86-commandline/latest/nuget.exe 4 | 5 | $nuget = $env:NuGet 6 | 7 | Copy-Item $env:SourcesPath\LICENSE $env:SourcesPath\LICENSE.txt # has to be .txt extension, don't check in 8 | 9 | # parse the version number out of package.json 10 | $bsversionParts = ((Get-Content $env:SourcesPath\package.json) -join "`n" | ConvertFrom-Json).version.split('-', 2) # split the version on the '-' 11 | $bsversion = $bsversionParts[0] 12 | 13 | if ($bsversionParts.Length -gt 1) { 14 | $bsversion += '-' + $bsversionParts[1].replace('.', '').replace('-', '_') # strip out invalid chars from the PreRelease part 15 | } 16 | 17 | # create packages 18 | & $nuget pack "$env:SourcesPath\nuget\bootstrap.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion 19 | & $nuget pack "$env:SourcesPath\nuget\bootstrap.sass.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion 20 | -------------------------------------------------------------------------------- /nuget/bootstrap.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bootstrap 5 | 6 | 5 7 | Bootstrap CSS 8 | The Bootstrap Authors, Twitter Inc. 9 | bootstrap 10 | The most popular front-end framework for developing responsive, mobile first projects on the web. 11 | https://blog.getbootstrap.com/ 12 | Bootstrap framework in CSS. Includes JavaScript 13 | en-us 14 | https://getbootstrap.com/ 15 | bootstrap.png 16 | LICENSE.txt 17 | Copyright 2017-2021 18 | false 19 | css mobile-first responsive front-end framework web 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /nuget/bootstrap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/nuget/bootstrap.png -------------------------------------------------------------------------------- /package.js: -------------------------------------------------------------------------------- 1 | // package metadata file for Meteor.js 2 | 3 | /* eslint-env meteor */ 4 | 5 | Package.describe({ 6 | name: 'twbs:bootstrap', // https://atmospherejs.com/twbs/bootstrap 7 | summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.', 8 | version: '5.1.3', 9 | git: 'https://github.com/twbs/bootstrap.git' 10 | }) 11 | 12 | Package.onUse(api => { 13 | api.versionsFrom('METEOR@1.0') 14 | api.addFiles([ 15 | 'dist/css/bootstrap.css', 16 | 'dist/js/bootstrap.js' 17 | ], 'client') 18 | }) 19 | -------------------------------------------------------------------------------- /scss/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | position: relative; 7 | padding: $alert-padding-y $alert-padding-x; 8 | margin-bottom: $alert-margin-bottom; 9 | border: $alert-border-width solid transparent; 10 | @include border-radius($alert-border-radius); 11 | } 12 | 13 | // Headings for larger alerts 14 | .alert-heading { 15 | // Specified to prevent conflicts of changing $headings-color 16 | color: inherit; 17 | } 18 | 19 | // Provide class for links that match alerts 20 | .alert-link { 21 | font-weight: $alert-link-font-weight; 22 | } 23 | 24 | 25 | // Dismissible alerts 26 | // 27 | // Expand the right padding and account for the close button's positioning. 28 | 29 | .alert-dismissible { 30 | padding-right: $alert-dismissible-padding-r; 31 | 32 | // Adjust close link position 33 | .btn-close { 34 | position: absolute; 35 | top: 0; 36 | right: 0; 37 | z-index: $stretched-link-z-index + 1; 38 | padding: $alert-padding-y * 1.25 $alert-padding-x; 39 | } 40 | } 41 | 42 | 43 | // scss-docs-start alert-modifiers 44 | // Generate contextual modifier classes for colorizing the alert. 45 | 46 | @each $state, $value in $theme-colors { 47 | $alert-background: shift-color($value, $alert-bg-scale); 48 | $alert-border: shift-color($value, $alert-border-scale); 49 | $alert-color: shift-color($value, $alert-color-scale); 50 | @if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) { 51 | $alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale)); 52 | } 53 | .alert-#{$state} { 54 | @include alert-variant($alert-background, $alert-border, $alert-color); 55 | } 56 | } 57 | // scss-docs-end alert-modifiers 58 | -------------------------------------------------------------------------------- /scss/_badge.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Requires one of the contextual, color modifier classes for `color` and 4 | // `background-color`. 5 | 6 | .badge { 7 | display: inline-block; 8 | padding: $badge-padding-y $badge-padding-x; 9 | @include font-size($badge-font-size); 10 | font-weight: $badge-font-weight; 11 | line-height: 1; 12 | color: $badge-color; 13 | text-align: center; 14 | white-space: nowrap; 15 | vertical-align: baseline; 16 | @include border-radius($badge-border-radius); 17 | @include gradient-bg(); 18 | 19 | // Empty badges collapse automatically 20 | &:empty { 21 | display: none; 22 | } 23 | } 24 | 25 | // Quick fix for badges in buttons 26 | .btn .badge { 27 | position: relative; 28 | top: -1px; 29 | } 30 | -------------------------------------------------------------------------------- /scss/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | display: flex; 3 | flex-wrap: wrap; 4 | padding: $breadcrumb-padding-y $breadcrumb-padding-x; 5 | margin-bottom: $breadcrumb-margin-bottom; 6 | @include font-size($breadcrumb-font-size); 7 | list-style: none; 8 | background-color: $breadcrumb-bg; 9 | @include border-radius($breadcrumb-border-radius); 10 | } 11 | 12 | .breadcrumb-item { 13 | // The separator between breadcrumbs (by default, a forward-slash: "/") 14 | + .breadcrumb-item { 15 | padding-left: $breadcrumb-item-padding-x; 16 | 17 | &::before { 18 | float: left; // Suppress inline spacings and underlining of the separator 19 | padding-right: $breadcrumb-item-padding-x; 20 | color: $breadcrumb-divider-color; 21 | content: var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{"/* rtl:"} var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{"*/"}; 22 | } 23 | } 24 | 25 | &.active { 26 | color: $breadcrumb-active-color; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /scss/_close.scss: -------------------------------------------------------------------------------- 1 | // transparent background and border properties included for button version. 2 | // iOS requires the button element instead of an anchor tag. 3 | // If you want the anchor version, it requires `href="#"`. 4 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 5 | 6 | .btn-close { 7 | box-sizing: content-box; 8 | width: $btn-close-width; 9 | height: $btn-close-height; 10 | padding: $btn-close-padding-y $btn-close-padding-x; 11 | color: $btn-close-color; 12 | background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements 13 | border: 0; // for button elements 14 | @include border-radius(); 15 | opacity: $btn-close-opacity; 16 | 17 | // Override 's hover style 18 | &:hover { 19 | color: $btn-close-color; 20 | text-decoration: none; 21 | opacity: $btn-close-hover-opacity; 22 | } 23 | 24 | &:focus { 25 | outline: 0; 26 | box-shadow: $btn-close-focus-shadow; 27 | opacity: $btn-close-focus-opacity; 28 | } 29 | 30 | &:disabled, 31 | &.disabled { 32 | pointer-events: none; 33 | user-select: none; 34 | opacity: $btn-close-disabled-opacity; 35 | } 36 | } 37 | 38 | .btn-close-white { 39 | filter: $btn-close-white-filter; 40 | } 41 | -------------------------------------------------------------------------------- /scss/_containers.scss: -------------------------------------------------------------------------------- 1 | // Container widths 2 | // 3 | // Set the container width, and override it for fixed navbars in media queries. 4 | 5 | @if $enable-container-classes { 6 | // Single container class with breakpoint max-widths 7 | .container, 8 | // 100% wide container at all breakpoints 9 | .container-fluid { 10 | @include make-container(); 11 | } 12 | 13 | // Responsive containers that are 100% wide until a breakpoint 14 | @each $breakpoint, $container-max-width in $container-max-widths { 15 | .container-#{$breakpoint} { 16 | @extend .container-fluid; 17 | } 18 | 19 | @include media-breakpoint-up($breakpoint, $grid-breakpoints) { 20 | %responsive-container-#{$breakpoint} { 21 | max-width: $container-max-width; 22 | } 23 | 24 | // Extend each breakpoint which is smaller or equal to the current breakpoint 25 | $extend-breakpoint: true; 26 | 27 | @each $name, $width in $grid-breakpoints { 28 | @if ($extend-breakpoint) { 29 | .container#{breakpoint-infix($name, $grid-breakpoints)} { 30 | @extend %responsive-container-#{$breakpoint}; 31 | } 32 | 33 | // Once the current breakpoint is reached, stop extending 34 | @if ($breakpoint == $name) { 35 | $extend-breakpoint: false; 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /scss/_forms.scss: -------------------------------------------------------------------------------- 1 | @import "forms/labels"; 2 | @import "forms/form-text"; 3 | @import "forms/form-control"; 4 | @import "forms/form-select"; 5 | @import "forms/form-check"; 6 | @import "forms/form-range"; 7 | @import "forms/floating-labels"; 8 | @import "forms/input-group"; 9 | @import "forms/validation"; 10 | -------------------------------------------------------------------------------- /scss/_grid.scss: -------------------------------------------------------------------------------- 1 | // Row 2 | // 3 | // Rows contain your columns. 4 | 5 | @if $enable-grid-classes { 6 | .row { 7 | @include make-row(); 8 | 9 | > * { 10 | @include make-col-ready(); 11 | } 12 | } 13 | } 14 | 15 | @if $enable-cssgrid { 16 | .grid { 17 | display: grid; 18 | grid-template-rows: repeat(var(--#{$variable-prefix}rows, 1), 1fr); 19 | grid-template-columns: repeat(var(--#{$variable-prefix}columns, #{$grid-columns}), 1fr); 20 | gap: var(--#{$variable-prefix}gap, #{$grid-gutter-width}); 21 | 22 | @include make-cssgrid(); 23 | } 24 | } 25 | 26 | 27 | // Columns 28 | // 29 | // Common styles for small and large grid columns 30 | 31 | @if $enable-grid-classes { 32 | @include make-grid-columns(); 33 | } 34 | -------------------------------------------------------------------------------- /scss/_helpers.scss: -------------------------------------------------------------------------------- 1 | @import "helpers/clearfix"; 2 | @import "helpers/colored-links"; 3 | @import "helpers/ratio"; 4 | @import "helpers/position"; 5 | @import "helpers/stacks"; 6 | @import "helpers/visually-hidden"; 7 | @import "helpers/stretched-link"; 8 | @import "helpers/text-truncation"; 9 | @import "helpers/vr"; 10 | -------------------------------------------------------------------------------- /scss/_images.scss: -------------------------------------------------------------------------------- 1 | // Responsive images (ensure images don't scale beyond their parents) 2 | // 3 | // This is purposefully opt-in via an explicit class rather than being the default for all ``s. 4 | // We previously tried the "images are responsive by default" approach in Bootstrap v2, 5 | // and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps) 6 | // which weren't expecting the images within themselves to be involuntarily resized. 7 | // See also https://github.com/twbs/bootstrap/issues/18178 8 | .img-fluid { 9 | @include img-fluid(); 10 | } 11 | 12 | 13 | // Image thumbnails 14 | .img-thumbnail { 15 | padding: $thumbnail-padding; 16 | background-color: $thumbnail-bg; 17 | border: $thumbnail-border-width solid $thumbnail-border-color; 18 | @include border-radius($thumbnail-border-radius); 19 | @include box-shadow($thumbnail-box-shadow); 20 | 21 | // Keep them at most 100% wide 22 | @include img-fluid(); 23 | } 24 | 25 | // 26 | // Figures 27 | // 28 | 29 | .figure { 30 | // Ensures the caption's text aligns with the image. 31 | display: inline-block; 32 | } 33 | 34 | .figure-img { 35 | margin-bottom: $spacer * .5; 36 | line-height: 1; 37 | } 38 | 39 | .figure-caption { 40 | @include font-size($figure-caption-font-size); 41 | color: $figure-caption-color; 42 | } 43 | -------------------------------------------------------------------------------- /scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Toggles 2 | // 3 | // Used in conjunction with global variables to enable certain theme features. 4 | 5 | // Vendor 6 | @import "vendor/rfs"; 7 | 8 | // Deprecate 9 | @import "mixins/deprecate"; 10 | 11 | // Helpers 12 | @import "mixins/breakpoints"; 13 | @import "mixins/color-scheme"; 14 | @import "mixins/image"; 15 | @import "mixins/resize"; 16 | @import "mixins/visually-hidden"; 17 | @import "mixins/reset-text"; 18 | @import "mixins/text-truncate"; 19 | 20 | // Utilities 21 | @import "mixins/utilities"; 22 | 23 | // Components 24 | @import "mixins/alert"; 25 | @import "mixins/backdrop"; 26 | @import "mixins/buttons"; 27 | @import "mixins/caret"; 28 | @import "mixins/pagination"; 29 | @import "mixins/lists"; 30 | @import "mixins/list-group"; 31 | @import "mixins/forms"; 32 | @import "mixins/table-variants"; 33 | 34 | // Skins 35 | @import "mixins/border-radius"; 36 | @import "mixins/box-shadow"; 37 | @import "mixins/gradients"; 38 | @import "mixins/transition"; 39 | 40 | // Layout 41 | @import "mixins/clearfix"; 42 | @import "mixins/container"; 43 | @import "mixins/grid"; 44 | -------------------------------------------------------------------------------- /scss/_placeholders.scss: -------------------------------------------------------------------------------- 1 | .placeholder { 2 | display: inline-block; 3 | min-height: 1em; 4 | vertical-align: middle; 5 | cursor: wait; 6 | background-color: currentColor; 7 | opacity: $placeholder-opacity-max; 8 | 9 | &.btn::before { 10 | display: inline-block; 11 | content: ""; 12 | } 13 | } 14 | 15 | // Sizing 16 | .placeholder-xs { 17 | min-height: .6em; 18 | } 19 | 20 | .placeholder-sm { 21 | min-height: .8em; 22 | } 23 | 24 | .placeholder-lg { 25 | min-height: 1.2em; 26 | } 27 | 28 | // Animation 29 | .placeholder-glow { 30 | .placeholder { 31 | animation: placeholder-glow 2s ease-in-out infinite; 32 | } 33 | } 34 | 35 | @keyframes placeholder-glow { 36 | 50% { 37 | opacity: $placeholder-opacity-min; 38 | } 39 | } 40 | 41 | .placeholder-wave { 42 | mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%); 43 | mask-size: 200% 100%; 44 | animation: placeholder-wave 2s linear infinite; 45 | } 46 | 47 | @keyframes placeholder-wave { 48 | 100% { 49 | mask-position: -200% 0%; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /scss/_progress.scss: -------------------------------------------------------------------------------- 1 | // Disable animation if transitions are disabled 2 | 3 | // scss-docs-start progress-keyframes 4 | @if $enable-transitions { 5 | @keyframes progress-bar-stripes { 6 | 0% { background-position-x: $progress-height; } 7 | } 8 | } 9 | // scss-docs-end progress-keyframes 10 | 11 | .progress { 12 | display: flex; 13 | height: $progress-height; 14 | overflow: hidden; // force rounded corners by cropping it 15 | @include font-size($progress-font-size); 16 | background-color: $progress-bg; 17 | @include border-radius($progress-border-radius); 18 | @include box-shadow($progress-box-shadow); 19 | } 20 | 21 | .progress-bar { 22 | display: flex; 23 | flex-direction: column; 24 | justify-content: center; 25 | overflow: hidden; 26 | color: $progress-bar-color; 27 | text-align: center; 28 | white-space: nowrap; 29 | background-color: $progress-bar-bg; 30 | @include transition($progress-bar-transition); 31 | } 32 | 33 | .progress-bar-striped { 34 | @include gradient-striped(); 35 | background-size: $progress-height $progress-height; 36 | } 37 | 38 | @if $enable-transitions { 39 | .progress-bar-animated { 40 | animation: $progress-bar-animation-timing progress-bar-stripes; 41 | 42 | @if $enable-reduced-motion { 43 | @media (prefers-reduced-motion: reduce) { 44 | animation: none; 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /scss/_toasts.scss: -------------------------------------------------------------------------------- 1 | .toast { 2 | width: $toast-max-width; 3 | max-width: 100%; 4 | @include font-size($toast-font-size); 5 | color: $toast-color; 6 | pointer-events: auto; 7 | background-color: $toast-background-color; 8 | background-clip: padding-box; 9 | border: $toast-border-width solid $toast-border-color; 10 | box-shadow: $toast-box-shadow; 11 | @include border-radius($toast-border-radius); 12 | 13 | &.showing { 14 | opacity: 0; 15 | } 16 | 17 | &:not(.show) { 18 | display: none; 19 | } 20 | } 21 | 22 | .toast-container { 23 | width: max-content; 24 | max-width: 100%; 25 | pointer-events: none; 26 | 27 | > :not(:last-child) { 28 | margin-bottom: $toast-spacing; 29 | } 30 | } 31 | 32 | .toast-header { 33 | display: flex; 34 | align-items: center; 35 | padding: $toast-padding-y $toast-padding-x; 36 | color: $toast-header-color; 37 | background-color: $toast-header-background-color; 38 | background-clip: padding-box; 39 | border-bottom: $toast-border-width solid $toast-header-border-color; 40 | @include border-top-radius(subtract($toast-border-radius, $toast-border-width)); 41 | 42 | .btn-close { 43 | margin-right: $toast-padding-x * -.5; 44 | margin-left: $toast-padding-x; 45 | } 46 | } 47 | 48 | .toast-body { 49 | padding: $toast-padding-x; // apply to both vertical and horizontal 50 | word-wrap: break-word; 51 | } 52 | -------------------------------------------------------------------------------- /scss/_transitions.scss: -------------------------------------------------------------------------------- 1 | .fade { 2 | @include transition($transition-fade); 3 | 4 | &:not(.show) { 5 | opacity: 0; 6 | } 7 | } 8 | 9 | // scss-docs-start collapse-classes 10 | .collapse { 11 | &:not(.show) { 12 | display: none; 13 | } 14 | } 15 | 16 | .collapsing { 17 | height: 0; 18 | overflow: hidden; 19 | @include transition($transition-collapse); 20 | 21 | &.collapse-horizontal { 22 | width: 0; 23 | height: auto; 24 | @include transition($transition-collapse-width); 25 | } 26 | } 27 | // scss-docs-end collapse-classes 28 | -------------------------------------------------------------------------------- /scss/bootstrap-grid.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grid v5.1.3 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors 4 | * Copyright 2011-2021 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | */ 7 | 8 | $include-column-box-sizing: true !default; 9 | 10 | @import "functions"; 11 | @import "variables"; 12 | 13 | @import "mixins/lists"; 14 | @import "mixins/breakpoints"; 15 | @import "mixins/container"; 16 | @import "mixins/grid"; 17 | @import "mixins/utilities"; 18 | 19 | @import "vendor/rfs"; 20 | 21 | @import "root"; 22 | 23 | @import "containers"; 24 | @import "grid"; 25 | 26 | @import "utilities"; 27 | // Only use the utilities we need 28 | // stylelint-disable-next-line scss/dollar-variable-default 29 | $utilities: map-get-multiple( 30 | $utilities, 31 | ( 32 | "display", 33 | "order", 34 | "flex", 35 | "flex-direction", 36 | "flex-grow", 37 | "flex-shrink", 38 | "flex-wrap", 39 | "justify-content", 40 | "align-items", 41 | "align-content", 42 | "align-self", 43 | "margin", 44 | "margin-x", 45 | "margin-y", 46 | "margin-top", 47 | "margin-end", 48 | "margin-bottom", 49 | "margin-start", 50 | "negative-margin", 51 | "negative-margin-x", 52 | "negative-margin-y", 53 | "negative-margin-top", 54 | "negative-margin-end", 55 | "negative-margin-bottom", 56 | "negative-margin-start", 57 | "padding", 58 | "padding-x", 59 | "padding-y", 60 | "padding-top", 61 | "padding-end", 62 | "padding-bottom", 63 | "padding-start", 64 | ) 65 | ); 66 | 67 | @import "utilities/api"; 68 | -------------------------------------------------------------------------------- /scss/bootstrap-reboot.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v5.1.3 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors 4 | * Copyright 2011-2021 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */ 8 | 9 | @import "functions"; 10 | @import "variables"; 11 | @import "mixins"; 12 | @import "root"; 13 | @import "reboot"; 14 | -------------------------------------------------------------------------------- /scss/bootstrap-utilities.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Utilities v5.1.3 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors 4 | * Copyright 2011-2021 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | */ 7 | 8 | // Configuration 9 | @import "functions"; 10 | @import "variables"; 11 | @import "mixins"; 12 | @import "utilities"; 13 | 14 | // Helpers 15 | @import "helpers"; 16 | 17 | // Utilities 18 | @import "utilities/api"; 19 | -------------------------------------------------------------------------------- /scss/bootstrap.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v5.1.3 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors 4 | * Copyright 2011-2021 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | */ 7 | 8 | // scss-docs-start import-stack 9 | // Configuration 10 | @import "functions"; 11 | @import "variables"; 12 | @import "mixins"; 13 | @import "utilities"; 14 | 15 | // Layout & components 16 | @import "root"; 17 | @import "reboot"; 18 | @import "type"; 19 | @import "images"; 20 | @import "containers"; 21 | @import "grid"; 22 | @import "tables"; 23 | @import "forms"; 24 | @import "buttons"; 25 | @import "transitions"; 26 | @import "dropdown"; 27 | @import "button-group"; 28 | @import "nav"; 29 | @import "navbar"; 30 | @import "card"; 31 | @import "accordion"; 32 | @import "breadcrumb"; 33 | @import "pagination"; 34 | @import "badge"; 35 | @import "alert"; 36 | @import "progress"; 37 | @import "list-group"; 38 | @import "close"; 39 | @import "toasts"; 40 | @import "modal"; 41 | @import "tooltip"; 42 | @import "popover"; 43 | @import "carousel"; 44 | @import "spinners"; 45 | @import "offcanvas"; 46 | @import "placeholders"; 47 | 48 | // Helpers 49 | @import "helpers"; 50 | 51 | // Utilities 52 | @import "utilities/api"; 53 | // scss-docs-end import-stack 54 | -------------------------------------------------------------------------------- /scss/forms/_form-text.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Form text 3 | // 4 | 5 | .form-text { 6 | margin-top: $form-text-margin-top; 7 | @include font-size($form-text-font-size); 8 | font-style: $form-text-font-style; 9 | font-weight: $form-text-font-weight; 10 | color: $form-text-color; 11 | } 12 | -------------------------------------------------------------------------------- /scss/forms/_labels.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Labels 3 | // 4 | 5 | .form-label { 6 | margin-bottom: $form-label-margin-bottom; 7 | @include font-size($form-label-font-size); 8 | font-style: $form-label-font-style; 9 | font-weight: $form-label-font-weight; 10 | color: $form-label-color; 11 | } 12 | 13 | // For use with horizontal and inline forms, when you need the label (or legend) 14 | // text to align with the form controls. 15 | .col-form-label { 16 | padding-top: add($input-padding-y, $input-border-width); 17 | padding-bottom: add($input-padding-y, $input-border-width); 18 | margin-bottom: 0; // Override the `` default 19 | @include font-size(inherit); // Override the `` default 20 | font-style: $form-label-font-style; 21 | font-weight: $form-label-font-weight; 22 | line-height: $input-line-height; 23 | color: $form-label-color; 24 | } 25 | 26 | .col-form-label-lg { 27 | padding-top: add($input-padding-y-lg, $input-border-width); 28 | padding-bottom: add($input-padding-y-lg, $input-border-width); 29 | @include font-size($input-font-size-lg); 30 | } 31 | 32 | .col-form-label-sm { 33 | padding-top: add($input-padding-y-sm, $input-border-width); 34 | padding-bottom: add($input-padding-y-sm, $input-border-width); 35 | @include font-size($input-font-size-sm); 36 | } 37 | -------------------------------------------------------------------------------- /scss/forms/_validation.scss: -------------------------------------------------------------------------------- 1 | // Form validation 2 | // 3 | // Provide feedback to users when form field values are valid or invalid. Works 4 | // primarily for client-side validation via scoped `:invalid` and `:valid` 5 | // pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for 6 | // server-side validation. 7 | 8 | // scss-docs-start form-validation-states-loop 9 | @each $state, $data in $form-validation-states { 10 | @include form-validation-state($state, $data...); 11 | } 12 | // scss-docs-end form-validation-states-loop 13 | -------------------------------------------------------------------------------- /scss/helpers/_clearfix.scss: -------------------------------------------------------------------------------- 1 | .clearfix { 2 | @include clearfix(); 3 | } 4 | -------------------------------------------------------------------------------- /scss/helpers/_colored-links.scss: -------------------------------------------------------------------------------- 1 | @each $color, $value in $theme-colors { 2 | .link-#{$color} { 3 | color: $value; 4 | 5 | @if $link-shade-percentage != 0 { 6 | &:hover, 7 | &:focus { 8 | color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)); 9 | } 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /scss/helpers/_position.scss: -------------------------------------------------------------------------------- 1 | // Shorthand 2 | 3 | .fixed-top { 4 | position: fixed; 5 | top: 0; 6 | right: 0; 7 | left: 0; 8 | z-index: $zindex-fixed; 9 | } 10 | 11 | .fixed-bottom { 12 | position: fixed; 13 | right: 0; 14 | bottom: 0; 15 | left: 0; 16 | z-index: $zindex-fixed; 17 | } 18 | 19 | // Responsive sticky top 20 | @each $breakpoint in map-keys($grid-breakpoints) { 21 | @include media-breakpoint-up($breakpoint) { 22 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 23 | 24 | .sticky#{$infix}-top { 25 | position: sticky; 26 | top: 0; 27 | z-index: $zindex-sticky; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /scss/helpers/_ratio.scss: -------------------------------------------------------------------------------- 1 | // Credit: Nicolas Gallagher and SUIT CSS. 2 | 3 | .ratio { 4 | position: relative; 5 | width: 100%; 6 | 7 | &::before { 8 | display: block; 9 | padding-top: var(--#{$variable-prefix}aspect-ratio); 10 | content: ""; 11 | } 12 | 13 | > * { 14 | position: absolute; 15 | top: 0; 16 | left: 0; 17 | width: 100%; 18 | height: 100%; 19 | } 20 | } 21 | 22 | @each $key, $ratio in $aspect-ratios { 23 | .ratio-#{$key} { 24 | --#{$variable-prefix}aspect-ratio: #{$ratio}; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /scss/helpers/_stacks.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start stacks 2 | .hstack { 3 | display: flex; 4 | flex-direction: row; 5 | align-items: center; 6 | align-self: stretch; 7 | } 8 | 9 | .vstack { 10 | display: flex; 11 | flex: 1 1 auto; 12 | flex-direction: column; 13 | align-self: stretch; 14 | } 15 | // scss-docs-end stacks 16 | -------------------------------------------------------------------------------- /scss/helpers/_stretched-link.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Stretched link 3 | // 4 | 5 | .stretched-link { 6 | &::#{$stretched-link-pseudo-element} { 7 | position: absolute; 8 | top: 0; 9 | right: 0; 10 | bottom: 0; 11 | left: 0; 12 | z-index: $stretched-link-z-index; 13 | content: ""; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /scss/helpers/_text-truncation.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Text truncation 3 | // 4 | 5 | .text-truncate { 6 | @include text-truncate(); 7 | } 8 | -------------------------------------------------------------------------------- /scss/helpers/_visually-hidden.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Visually hidden 3 | // 4 | 5 | .visually-hidden, 6 | .visually-hidden-focusable:not(:focus):not(:focus-within) { 7 | @include visually-hidden(); 8 | } 9 | -------------------------------------------------------------------------------- /scss/helpers/_vr.scss: -------------------------------------------------------------------------------- 1 | .vr { 2 | display: inline-block; 3 | align-self: stretch; 4 | width: 1px; 5 | min-height: 1em; 6 | background-color: currentColor; 7 | opacity: $hr-opacity; 8 | } 9 | -------------------------------------------------------------------------------- /scss/mixins/_alert.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start alert-variant-mixin 2 | @mixin alert-variant($background, $border, $color) { 3 | color: $color; 4 | @include gradient-bg($background); 5 | border-color: $border; 6 | 7 | .alert-link { 8 | color: shade-color($color, 20%); 9 | } 10 | } 11 | // scss-docs-end alert-variant-mixin 12 | -------------------------------------------------------------------------------- /scss/mixins/_backdrop.scss: -------------------------------------------------------------------------------- 1 | // Shared between modals and offcanvases 2 | @mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) { 3 | position: fixed; 4 | top: 0; 5 | left: 0; 6 | z-index: $zindex; 7 | width: 100vw; 8 | height: 100vh; 9 | background-color: $backdrop-bg; 10 | 11 | // Fade for backdrop 12 | &.fade { opacity: 0; } 13 | &.show { opacity: $backdrop-opacity; } 14 | } 15 | -------------------------------------------------------------------------------- /scss/mixins/_box-shadow.scss: -------------------------------------------------------------------------------- 1 | @mixin box-shadow($shadow...) { 2 | @if $enable-shadows { 3 | $result: (); 4 | 5 | @each $value in $shadow { 6 | @if $value != null { 7 | $result: append($result, $value, "comma"); 8 | } 9 | @if $value == none and length($shadow) > 1 { 10 | @warn "The keyword 'none' must be used as a single argument."; 11 | } 12 | } 13 | 14 | @if (length($result) > 0) { 15 | box-shadow: $result; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /scss/mixins/_caret.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start caret-mixins 2 | @mixin caret-down { 3 | border-top: $caret-width solid; 4 | border-right: $caret-width solid transparent; 5 | border-bottom: 0; 6 | border-left: $caret-width solid transparent; 7 | } 8 | 9 | @mixin caret-up { 10 | border-top: 0; 11 | border-right: $caret-width solid transparent; 12 | border-bottom: $caret-width solid; 13 | border-left: $caret-width solid transparent; 14 | } 15 | 16 | @mixin caret-end { 17 | border-top: $caret-width solid transparent; 18 | border-right: 0; 19 | border-bottom: $caret-width solid transparent; 20 | border-left: $caret-width solid; 21 | } 22 | 23 | @mixin caret-start { 24 | border-top: $caret-width solid transparent; 25 | border-right: $caret-width solid; 26 | border-bottom: $caret-width solid transparent; 27 | } 28 | 29 | @mixin caret($direction: down) { 30 | @if $enable-caret { 31 | &::after { 32 | display: inline-block; 33 | margin-left: $caret-spacing; 34 | vertical-align: $caret-vertical-align; 35 | content: ""; 36 | @if $direction == down { 37 | @include caret-down(); 38 | } @else if $direction == up { 39 | @include caret-up(); 40 | } @else if $direction == end { 41 | @include caret-end(); 42 | } 43 | } 44 | 45 | @if $direction == start { 46 | &::after { 47 | display: none; 48 | } 49 | 50 | &::before { 51 | display: inline-block; 52 | margin-right: $caret-spacing; 53 | vertical-align: $caret-vertical-align; 54 | content: ""; 55 | @include caret-start(); 56 | } 57 | } 58 | 59 | &:empty::after { 60 | margin-left: 0; 61 | } 62 | } 63 | } 64 | // scss-docs-end caret-mixins 65 | -------------------------------------------------------------------------------- /scss/mixins/_clearfix.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start clearfix 2 | @mixin clearfix() { 3 | &::after { 4 | display: block; 5 | clear: both; 6 | content: ""; 7 | } 8 | } 9 | // scss-docs-end clearfix 10 | -------------------------------------------------------------------------------- /scss/mixins/_color-scheme.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start mixin-color-scheme 2 | @mixin color-scheme($name) { 3 | @media (prefers-color-scheme: #{$name}) { 4 | @content; 5 | } 6 | } 7 | // scss-docs-end mixin-color-scheme 8 | -------------------------------------------------------------------------------- /scss/mixins/_container.scss: -------------------------------------------------------------------------------- 1 | // Container mixins 2 | 3 | @mixin make-container($gutter: $container-padding-x) { 4 | --#{$variable-prefix}gutter-x: #{$gutter}; 5 | --#{$variable-prefix}gutter-y: 0; 6 | width: 100%; 7 | padding-right: var(--#{$variable-prefix}gutter-x, #{$gutter}); 8 | padding-left: var(--#{$variable-prefix}gutter-x, #{$gutter}); 9 | margin-right: auto; 10 | margin-left: auto; 11 | } 12 | -------------------------------------------------------------------------------- /scss/mixins/_deprecate.scss: -------------------------------------------------------------------------------- 1 | // Deprecate mixin 2 | // 3 | // This mixin can be used to deprecate mixins or functions. 4 | // `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to 5 | // some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap) 6 | @mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) { 7 | @if ($enable-deprecation-messages != false and $ignore-warning != true) { 8 | @warn "#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}."; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /scss/mixins/_image.scss: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | 10 | @mixin img-fluid { 11 | // Part 1: Set a maximum relative to the parent 12 | max-width: 100%; 13 | // Part 2: Override the height to auto, otherwise images will be stretched 14 | // when setting a width and height attribute on the img element. 15 | height: auto; 16 | } 17 | -------------------------------------------------------------------------------- /scss/mixins/_list-group.scss: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | // scss-docs-start list-group-mixin 4 | @mixin list-group-item-variant($state, $background, $color) { 5 | .list-group-item-#{$state} { 6 | color: $color; 7 | background-color: $background; 8 | 9 | &.list-group-item-action { 10 | &:hover, 11 | &:focus { 12 | color: $color; 13 | background-color: shade-color($background, 10%); 14 | } 15 | 16 | &.active { 17 | color: $white; 18 | background-color: $color; 19 | border-color: $color; 20 | } 21 | } 22 | } 23 | } 24 | // scss-docs-end list-group-mixin 25 | -------------------------------------------------------------------------------- /scss/mixins/_lists.scss: -------------------------------------------------------------------------------- 1 | // Lists 2 | 3 | // Unstyled keeps list items block level, just removes default browser padding and list-style 4 | @mixin list-unstyled { 5 | padding-left: 0; 6 | list-style: none; 7 | } 8 | -------------------------------------------------------------------------------- /scss/mixins/_pagination.scss: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | // scss-docs-start pagination-mixin 4 | @mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) { 5 | .page-link { 6 | padding: $padding-y $padding-x; 7 | @include font-size($font-size); 8 | } 9 | 10 | .page-item { 11 | @if $pagination-margin-start == (-$pagination-border-width) { 12 | &:first-child { 13 | .page-link { 14 | @include border-start-radius($border-radius); 15 | } 16 | } 17 | 18 | &:last-child { 19 | .page-link { 20 | @include border-end-radius($border-radius); 21 | } 22 | } 23 | } @else { 24 | //Add border-radius to all pageLinks in case they have left margin 25 | .page-link { 26 | @include border-radius($border-radius); 27 | } 28 | } 29 | } 30 | } 31 | // scss-docs-end pagination-mixin 32 | -------------------------------------------------------------------------------- /scss/mixins/_reset-text.scss: -------------------------------------------------------------------------------- 1 | @mixin reset-text { 2 | font-family: $font-family-base; 3 | // We deliberately do NOT reset font-size or overflow-wrap / word-wrap. 4 | font-style: normal; 5 | font-weight: $font-weight-normal; 6 | line-height: $line-height-base; 7 | text-align: left; // Fallback for where `start` is not supported 8 | text-align: start; 9 | text-decoration: none; 10 | text-shadow: none; 11 | text-transform: none; 12 | letter-spacing: normal; 13 | word-break: normal; 14 | word-spacing: normal; 15 | white-space: normal; 16 | line-break: auto; 17 | } 18 | -------------------------------------------------------------------------------- /scss/mixins/_resize.scss: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | @mixin resizable($direction) { 4 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 5 | resize: $direction; // Options: horizontal, vertical, both 6 | } 7 | -------------------------------------------------------------------------------- /scss/mixins/_table-variants.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start table-variant 2 | @mixin table-variant($state, $background) { 3 | .table-#{$state} { 4 | $color: color-contrast(opaque($body-bg, $background)); 5 | $hover-bg: mix($color, $background, percentage($table-hover-bg-factor)); 6 | $striped-bg: mix($color, $background, percentage($table-striped-bg-factor)); 7 | $active-bg: mix($color, $background, percentage($table-active-bg-factor)); 8 | $border-color: mix($color, $background, percentage($table-border-factor)); 9 | 10 | --#{$variable-prefix}table-color: #{$color}; 11 | --#{$variable-prefix}table-bg: #{$background}; 12 | --#{$variable-prefix}table-border-color: #{$border-color}; 13 | --#{$variable-prefix}table-striped-bg: #{$striped-bg}; 14 | --#{$variable-prefix}table-striped-color: #{color-contrast($striped-bg)}; 15 | --#{$variable-prefix}table-active-bg: #{$active-bg}; 16 | --#{$variable-prefix}table-active-color: #{color-contrast($active-bg)}; 17 | --#{$variable-prefix}table-hover-bg: #{$hover-bg}; 18 | --#{$variable-prefix}table-hover-color: #{color-contrast($hover-bg)}; 19 | 20 | color: var(--#{$variable-prefix}table-color); 21 | border-color: var(--#{$variable-prefix}table-border-color); 22 | } 23 | } 24 | // scss-docs-end table-variant 25 | -------------------------------------------------------------------------------- /scss/mixins/_text-truncate.scss: -------------------------------------------------------------------------------- 1 | // Text truncate 2 | // Requires inline-block or block for proper styling 3 | 4 | @mixin text-truncate() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /scss/mixins/_transition.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable property-disallowed-list 2 | @mixin transition($transition...) { 3 | @if length($transition) == 0 { 4 | $transition: $transition-base; 5 | } 6 | 7 | @if length($transition) > 1 { 8 | @each $value in $transition { 9 | @if $value == null or $value == none { 10 | @warn "The keyword 'none' or 'null' must be used as a single argument."; 11 | } 12 | } 13 | } 14 | 15 | @if $enable-transitions { 16 | @if nth($transition, 1) != null { 17 | transition: $transition; 18 | } 19 | 20 | @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none { 21 | @media (prefers-reduced-motion: reduce) { 22 | transition: none; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /scss/mixins/_visually-hidden.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Hide content visually while keeping it accessible to assistive technologies 4 | // 5 | // See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/ 6 | // See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/ 7 | 8 | @mixin visually-hidden() { 9 | position: absolute !important; 10 | width: 1px !important; 11 | height: 1px !important; 12 | padding: 0 !important; 13 | margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686 14 | overflow: hidden !important; 15 | clip: rect(0, 0, 0, 0) !important; 16 | white-space: nowrap !important; 17 | border: 0 !important; 18 | } 19 | 20 | // Use to only display content when it's focused, or one of its child elements is focused 21 | // (i.e. when focus is within the element/container that the class was applied to) 22 | // 23 | // Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 24 | 25 | @mixin visually-hidden-focusable() { 26 | &:not(:focus):not(:focus-within) { 27 | @include visually-hidden(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /site/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parserOptions": { 4 | "ecmaVersion": 5, 5 | "sourceType": "script" 6 | }, 7 | "extends": [ 8 | "plugin:unicorn/recommended", 9 | "xo", 10 | "xo/browser" 11 | ], 12 | "rules": { 13 | "arrow-body-style": "off", 14 | "capitalized-comments": "off", 15 | "comma-dangle": [ 16 | "error", 17 | "never" 18 | ], 19 | "indent": [ 20 | "error", 21 | 2, 22 | { 23 | "MemberExpression": "off", 24 | "SwitchCase": 1 25 | } 26 | ], 27 | "multiline-ternary": [ 28 | "error", 29 | "always-multiline" 30 | ], 31 | "no-negated-condition": "off", 32 | "no-new": "off", 33 | "no-var": "off", 34 | "object-curly-spacing": [ 35 | "error", 36 | "always" 37 | ], 38 | "object-shorthand": "off", 39 | "operator-linebreak": [ 40 | "error", 41 | "after" 42 | ], 43 | "prefer-arrow-callback": "off", 44 | "prefer-destructuring": "off", 45 | "semi": [ 46 | "error", 47 | "never" 48 | ], 49 | "strict": "error", 50 | "unicorn/no-array-for-each": "off", 51 | "unicorn/no-array-method-this-argument": "off", 52 | "unicorn/no-for-loop": "off", 53 | "unicorn/no-null": "off", 54 | "unicorn/numeric-separators-style": "off", 55 | "unicorn/prefer-array-flat": "off", 56 | "unicorn/prefer-dom-node-dataset": "off", 57 | "unicorn/prefer-module": "off", 58 | "unicorn/prefer-query-selector": "off", 59 | "unicorn/prevent-abbreviations": "off" 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /site/assets/js/search.js: -------------------------------------------------------------------------------- 1 | // NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT 2 | // IT'S ALL JUST JUNK FOR OUR DOCS! 3 | // ++++++++++++++++++++++++++++++++++++++++++ 4 | 5 | (function () { 6 | 'use strict' 7 | 8 | var inputElement = document.getElementById('search-input') 9 | 10 | if (!window.docsearch || !inputElement) { 11 | return 12 | } 13 | 14 | var siteDocsVersion = inputElement.getAttribute('data-bd-docs-version') 15 | 16 | document.addEventListener('keydown', function (event) { 17 | if (event.ctrlKey && event.key === '/') { 18 | event.preventDefault() 19 | inputElement.focus() 20 | } 21 | }) 22 | 23 | window.docsearch({ 24 | apiKey: '5990ad008512000bba2cf951ccf0332f', 25 | indexName: 'bootstrap', 26 | inputSelector: '#search-input', 27 | algoliaOptions: { 28 | facetFilters: ['version:' + siteDocsVersion] 29 | }, 30 | transformData: function (hits) { 31 | return hits.map(function (hit) { 32 | var liveUrl = 'https://getbootstrap.com/' 33 | 34 | hit.url = window.location.origin.startsWith(liveUrl) ? 35 | // On production, return the result as is 36 | hit.url : 37 | // On development or Netlify, replace `hit.url` with a trailing slash, 38 | // so that the result link is relative to the server root 39 | hit.url.replace(liveUrl, '/') 40 | 41 | // Prevent jumping to first header 42 | if (hit.anchor === 'content') { 43 | hit.url = hit.url.replace(/#content$/, '') 44 | hit.anchor = null 45 | } 46 | 47 | return hit 48 | }) 49 | }, 50 | // Set debug to `true` if you want to inspect the dropdown 51 | debug: false 52 | }) 53 | })() 54 | -------------------------------------------------------------------------------- /site/assets/scss/_ads.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important, selector-max-id 2 | 3 | // 4 | // Carbon ads 5 | // 6 | 7 | #carbonads { 8 | position: static; 9 | display: block; 10 | max-width: 400px; 11 | padding: 15px 15px 15px 160px; 12 | margin: 2rem 0; 13 | overflow: hidden; 14 | @include font-size(.8125rem); 15 | line-height: 1.4; 16 | text-align: left; 17 | background-color: rgba(0, 0, 0, .05); 18 | 19 | a { 20 | color: $gray-800; 21 | text-decoration: none; 22 | } 23 | 24 | @include media-breakpoint-up(sm) { 25 | max-width: 330px; 26 | @include border-radius(4px); 27 | } 28 | } 29 | 30 | .carbon-img { 31 | float: left; 32 | margin-left: -145px; 33 | } 34 | 35 | .carbon-poweredby { 36 | display: block; 37 | margin-top: .75rem; 38 | color: $gray-700 !important; 39 | } 40 | -------------------------------------------------------------------------------- /site/assets/scss/_anchor.scss: -------------------------------------------------------------------------------- 1 | .anchorjs-link { 2 | font-weight: 400; 3 | color: rgba($link-color, .5); 4 | @include transition(color .15s ease-in-out); 5 | 6 | &:focus, 7 | &:hover { 8 | color: $link-color; 9 | text-decoration: none; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /site/assets/scss/_brand.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Brand guidelines 3 | // 4 | 5 | // Logo series wrapper 6 | .bd-brand-logos { 7 | color: $bd-purple-bright; 8 | 9 | .inverse { 10 | color: $white; 11 | background-color: $bd-purple-bright; 12 | } 13 | } 14 | 15 | // Individual items 16 | .bd-brand-item { 17 | + .bd-brand-item { 18 | border-top: 1px solid $white; 19 | } 20 | 21 | @include media-breakpoint-up(md) { 22 | + .bd-brand-item { 23 | border-top: 0; 24 | border-left: 1px solid $white; 25 | } 26 | } 27 | } 28 | 29 | 30 | // 31 | // Color swatches 32 | // 33 | 34 | .color-swatches { 35 | margin: 0 -5px; 36 | 37 | // Docs colors 38 | .bd-purple { 39 | background-color: $bd-purple; 40 | } 41 | .bd-purple-light { 42 | background-color: $bd-purple-light; 43 | } 44 | .bd-purple-lighter { 45 | background-color: #e5e1ea; 46 | } 47 | .bd-gray { 48 | background-color: #f9f9f9; 49 | } 50 | } 51 | 52 | .color-swatch { 53 | width: 4rem; 54 | height: 4rem; 55 | 56 | @include media-breakpoint-up(md) { 57 | width: 6rem; 58 | height: 6rem; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /site/assets/scss/_buttons.scss: -------------------------------------------------------------------------------- 1 | // Buttons 2 | // 3 | // Custom buttons for the docs. 4 | 5 | .btn-bd-primary { 6 | font-weight: 600; 7 | color: $white; 8 | background-color: $bd-purple-bright; 9 | border-color: $bd-purple-bright; 10 | 11 | &:hover, 12 | &:active { 13 | color: $white; 14 | background-color: shade-color($bd-purple-bright, 20%); 15 | border-color: shade-color($bd-purple-bright, 20%); 16 | } 17 | 18 | &:focus { 19 | box-shadow: 0 0 0 3px rgba($bd-purple-bright, .25); 20 | } 21 | } 22 | 23 | .btn-bd-download { 24 | font-weight: 600; 25 | color: $bd-download; 26 | border-color: $bd-download; 27 | 28 | &:hover, 29 | &:active { 30 | color: $bd-dark; 31 | background-color: $bd-download; 32 | border-color: $bd-download; 33 | } 34 | 35 | &:focus { 36 | box-shadow: 0 0 0 3px rgba($bd-download, .25); 37 | } 38 | } 39 | 40 | .btn-bd-light { 41 | color: $gray-600; 42 | border-color: $gray-300; 43 | 44 | .show > &, 45 | &:hover, 46 | &:active { 47 | color: $bd-purple-bright; 48 | background-color: $white; 49 | border-color: $bd-purple-bright; 50 | } 51 | 52 | &:focus { 53 | box-shadow: 0 0 0 3px rgba($bd-purple-bright, .25); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /site/assets/scss/_callouts.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Callouts 3 | // 4 | 5 | .bd-callout { 6 | padding: 1.25rem; 7 | margin-top: 1.25rem; 8 | margin-bottom: 1.25rem; 9 | border: 1px solid $gray-200; 10 | border-left-width: .25rem; 11 | @include border-radius(); 12 | 13 | h4 { 14 | margin-bottom: .25rem; 15 | } 16 | 17 | p:last-child { 18 | margin-bottom: 0; 19 | } 20 | 21 | code { 22 | @include border-radius(); 23 | } 24 | 25 | + .bd-callout { 26 | margin-top: -.25rem; 27 | } 28 | } 29 | 30 | // Variations 31 | .bd-callout-info { 32 | border-left-color: $bd-info; 33 | } 34 | 35 | .bd-callout-warning { 36 | border-left-color: $bd-warning; 37 | } 38 | 39 | .bd-callout-danger { 40 | border-left-color: $bd-danger; 41 | } 42 | -------------------------------------------------------------------------------- /site/assets/scss/_clipboard-js.scss: -------------------------------------------------------------------------------- 1 | // clipboard.js 2 | // 3 | // JS-based `Copy` buttons for code snippets. 4 | 5 | .bd-clipboard { 6 | position: relative; 7 | display: none; 8 | float: right; 9 | 10 | + .highlight { 11 | margin-top: 0; 12 | } 13 | 14 | @include media-breakpoint-up(md) { 15 | display: block; 16 | } 17 | } 18 | 19 | .btn-clipboard { 20 | position: absolute; 21 | top: .65rem; 22 | right: .65rem; 23 | z-index: 10; 24 | display: block; 25 | padding: .25rem .5rem; 26 | @include font-size(.65em); 27 | color: $primary; 28 | background-color: $white; 29 | border: 1px solid; 30 | @include border-radius(); 31 | 32 | &:hover, 33 | &:focus { 34 | color: $white; 35 | background-color: $primary; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /site/assets/scss/_content.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Bootstrap docs content theming 3 | // 4 | 5 | // Offset for the sticky header 6 | @include media-breakpoint-up(md) { 7 | :root { 8 | scroll-padding-top: 4rem; 9 | } 10 | } 11 | 12 | .bd-content { 13 | > h2:not(:first-child) { 14 | margin-top: 3rem; 15 | } 16 | 17 | > h3 { 18 | margin-top: 2rem; 19 | } 20 | 21 | > ul li, 22 | > ol li { 23 | margin-bottom: .25rem; 24 | 25 | // stylelint-disable selector-max-type, selector-max-compound-selectors 26 | > p ~ ul { 27 | margin-top: -.5rem; 28 | margin-bottom: 1rem; 29 | } 30 | // stylelint-enable selector-max-type, selector-max-compound-selectors 31 | } 32 | 33 | // Override Bootstrap defaults 34 | > .table { 35 | max-width: 100%; 36 | margin-bottom: 1.5rem; 37 | @include font-size(.875rem); 38 | 39 | @include media-breakpoint-down(lg) { 40 | display: block; 41 | overflow-x: auto; 42 | 43 | &.table-bordered { 44 | border: 0; 45 | } 46 | } 47 | 48 | th, 49 | td { 50 | &:first-child { 51 | padding-left: 0; 52 | } 53 | 54 | &:not(:last-child) { 55 | padding-right: 1.5rem; 56 | } 57 | } 58 | 59 | // Prevent breaking of code 60 | td:first-child > code { 61 | white-space: nowrap; 62 | } 63 | } 64 | } 65 | 66 | .bd-title { 67 | @include font-size(3rem); 68 | } 69 | 70 | .bd-lead { 71 | @include font-size(1.5rem); 72 | font-weight: 300; 73 | } 74 | 75 | .bd-text-purple-bright { 76 | color: $bd-purple-bright; 77 | } 78 | 79 | .bd-bg-purple-bright { 80 | background-color: $bd-purple-bright; 81 | } 82 | -------------------------------------------------------------------------------- /site/assets/scss/_footer.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Footer 3 | // 4 | 5 | .bd-footer { 6 | a { 7 | color: $gray-700; 8 | text-decoration: none; 9 | 10 | &:hover, 11 | &:focus { 12 | color: $link-color; 13 | text-decoration: underline; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /site/assets/scss/_layout.scss: -------------------------------------------------------------------------------- 1 | .bd-layout { 2 | @include media-breakpoint-up(md) { 3 | display: grid; 4 | gap: $grid-gutter-width; 5 | grid-template-areas: "sidebar main"; 6 | grid-template-columns: 1fr 3fr; 7 | } 8 | 9 | @include media-breakpoint-up(lg) { 10 | grid-template-columns: 1fr 5fr; 11 | } 12 | } 13 | 14 | .bd-sidebar { 15 | grid-area: sidebar; 16 | } 17 | 18 | .bd-main { 19 | grid-area: main; 20 | 21 | @include media-breakpoint-up(md) { 22 | display: grid; 23 | gap: inherit; 24 | grid-template-areas: 25 | "intro" 26 | "toc" 27 | "content"; 28 | grid-template-rows: auto auto 1fr; 29 | } 30 | 31 | @include media-breakpoint-up(lg) { 32 | grid-template-areas: 33 | "intro toc" 34 | "content toc"; 35 | grid-template-columns: 4fr 1fr; 36 | grid-template-rows: auto 1fr; 37 | } 38 | } 39 | 40 | .bd-intro { 41 | grid-area: intro; 42 | } 43 | 44 | .bd-toc { 45 | grid-area: toc; 46 | } 47 | 48 | .bd-content { 49 | grid-area: content; 50 | min-width: 1px; // Fix width when bd-content contains a `
` https://github.com/twbs/bootstrap/issues/25410
51 | }
52 | 


--------------------------------------------------------------------------------
/site/assets/scss/_masthead.scss:
--------------------------------------------------------------------------------
 1 | .bd-masthead {
 2 |   padding: 3rem 0;
 3 |   background: linear-gradient(165deg, tint-color($bd-purple-light, 85%) 50%, $white 50%);
 4 | 
 5 |   h1 {
 6 |     @include font-size(4rem);
 7 |     line-height: 1;
 8 |   }
 9 | 
10 |   p:not(.lead) {
11 |     color: $gray-700;
12 |   }
13 | 
14 |   .btn {
15 |     padding: .8rem 2rem;
16 |     font-weight: 600;
17 |   }
18 |   .lead {
19 |     @include font-size(1.5rem);
20 |     font-weight: 400;
21 |     color: $gray-700;
22 |   }
23 | }
24 | 
25 | @include media-breakpoint-up(md) {
26 |   .mw-md-75 { max-width: 75%; }
27 | }
28 | 
29 | .masthead-followup-icon {
30 |   padding: .75rem;
31 |   background-image: linear-gradient(to bottom right, rgba(255, 255, 255, .2), rgba(255, 255, 255, .01));
32 |   @include border-radius(.75rem);
33 |   box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .1);
34 | }
35 | 
36 | .masthead-followup-svg {
37 |   filter: drop-shadow(0 1px 0 rgba(0, 0, 0, .125));
38 | }
39 | 


--------------------------------------------------------------------------------
/site/assets/scss/_navbar.scss:
--------------------------------------------------------------------------------
 1 | .bd-navbar {
 2 |   padding: .75rem 0;
 3 |   background-color: $bd-purple-bright;
 4 | 
 5 |   .navbar-toggler {
 6 |     padding: 0;
 7 |     border: 0;
 8 |   }
 9 | 
10 |   .navbar-nav {
11 |     .nav-link {
12 |       padding-right: $spacer * .25;
13 |       padding-left: $spacer * .25;
14 |       color: rgba($white, .85);
15 | 
16 |       &:hover,
17 |       &:focus {
18 |         color: $white;
19 |       }
20 | 
21 |       &.active {
22 |         font-weight: 600;
23 |         color: $white;
24 |       }
25 |     }
26 |   }
27 | 
28 |   .navbar-nav-svg {
29 |     width: 1rem;
30 |     height: 1rem;
31 |   }
32 | }
33 | 


--------------------------------------------------------------------------------
/site/assets/scss/_placeholder-img.scss:
--------------------------------------------------------------------------------
 1 | //
 2 | // Placeholder svg used in the docs.
 3 | //
 4 | 
 5 | // Remember to update `site/_layouts/examples.html` too if this changes!
 6 | 
 7 | .bd-placeholder-img {
 8 |   @include font-size(1.125rem);
 9 |   text-anchor: middle;
10 |   user-select: none;
11 | }
12 | 
13 | .bd-placeholder-img-lg {
14 |   @include font-size(3.5rem);
15 | }
16 | 


--------------------------------------------------------------------------------
/site/assets/scss/_skippy.scss:
--------------------------------------------------------------------------------
1 | .skippy {
2 |   background-color: $bd-purple;
3 | 
4 |   a {
5 |     color: $white;
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/site/assets/scss/_toc.scss:
--------------------------------------------------------------------------------
 1 | // stylelint-disable selector-max-type
 2 | 
 3 | .bd-toc {
 4 |   @include media-breakpoint-up(lg) {
 5 |     position: sticky;
 6 |     top: 5rem;
 7 |     right: 0;
 8 |     z-index: 2;
 9 |     height: subtract(100vh, 7rem);
10 |     overflow-y: auto;
11 |   }
12 | 
13 |   nav {
14 |     @include font-size(.875rem);
15 | 
16 |     ul {
17 |       padding-left: 0;
18 |       list-style: none;
19 | 
20 |       ul {
21 |         padding-left: 1rem;
22 |         margin-top: .25rem;
23 |       }
24 |     }
25 | 
26 |     li {
27 |       margin-bottom: .25rem;
28 |     }
29 | 
30 |     a {
31 |       color: inherit;
32 | 
33 |       &:not(:hover) {
34 |         text-decoration: none;
35 |       }
36 | 
37 |       code {
38 |         font: inherit;
39 |       }
40 |     }
41 |   }
42 | }
43 | 


--------------------------------------------------------------------------------
/site/assets/scss/_variables.scss:
--------------------------------------------------------------------------------
 1 | // stylelint-disable scss/dollar-variable-default
 2 | 
 3 | // Local docs variables
 4 | $bd-purple:        #563d7c;
 5 | $bd-purple-bright: lighten(saturate($bd-purple, 5%), 15%); // stylelint-disable-line function-disallowed-list
 6 | $bd-purple-light:  lighten(saturate($bd-purple, 5%), 45%); // stylelint-disable-line function-disallowed-list
 7 | $bd-dark:          #2a2730;
 8 | $bd-download:      #ffe484;
 9 | $bd-info:          #5bc0de;
10 | $bd-warning:       #f0ad4e;
11 | $bd-danger:        #d9534f;
12 | $dropdown-active-icon: url("data:image/svg+xml,");
13 | $sidebar-collapse-icon: url("data:image/svg+xml,");
14 | 


--------------------------------------------------------------------------------
/site/content/404.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: "404 - File not found"
 3 | layout: 404
 4 | description: ""
 5 | url: /404.html
 6 | robots: noindex,follow
 7 | sitemap_exclude: true
 8 | ---
 9 | 
10 | 
11 |

404

12 |

File not found

13 |
14 | -------------------------------------------------------------------------------- /site/content/docs/5.1/_index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: redirect 3 | sitemap_exclude: true 4 | redirect: "/docs/5.1/getting-started/introduction/" 5 | --- 6 | -------------------------------------------------------------------------------- /site/content/docs/5.1/about/team.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Team 4 | description: An overview of the founding team and core contributors to Bootstrap. 5 | group: about 6 | --- 7 | 8 | Bootstrap is maintained by the founding team and a small group of invaluable core contributors, with the massive support and involvement of our community. 9 | 10 | {{< team.inline >}} 11 |
12 | {{- range (index $.Site.Data "core-team") }} 13 | 14 | @{{ .user }} 15 | 16 | {{ .name }} @{{ .user }} 17 | 18 | 19 | {{ end -}} 20 |
21 | {{< /team.inline >}} 22 | 23 | Get involved with Bootstrap development by [opening an issue]({{< param repo >}}/issues/new) or submitting a pull request. Read our [contributing guidelines]({{< param repo >}}/blob/v{{< param current_version >}}/.github/CONTRIBUTING.md) for information on how we develop. 24 | -------------------------------------------------------------------------------- /site/content/docs/5.1/about/translations.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Translations 4 | description: Links to community-translated Bootstrap documentation sites. 5 | group: about 6 | --- 7 | 8 | Community members have translated Bootstrap's documentation into various languages. None are officially supported and they may not always be up to date. 9 | 10 | {{< translations.inline >}} 11 | 16 | {{< /translations.inline >}} 17 | 18 | **We don't help organize or host translations, we just link to them.** 19 | 20 | Finished a new or better translation? Open a pull request to add it to our list. 21 | -------------------------------------------------------------------------------- /site/content/docs/5.1/components/close-button.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Close button 4 | description: A generic close button for dismissing content like modals and alerts. 5 | group: components 6 | toc: true 7 | --- 8 | 9 | ## Example 10 | 11 | Provide an option to dismiss or close a component with `.btn-close`. Default styling is limited, but highly customizable. Modify the Sass variables to replace the default `background-image`. **Be sure to include text for screen readers**, as we've done with `aria-label`. 12 | 13 | {{< example >}} 14 | 15 | {{< /example >}} 16 | 17 | ## Disabled state 18 | 19 | Disabled close buttons change their `opacity`. We've also applied `pointer-events: none` and `user-select: none` to preventing hover and active states from triggering. 20 | 21 | {{< example >}} 22 | 23 | {{< /example >}} 24 | 25 | ## White variant 26 | 27 | Change the default `.btn-close` to be white with the `.btn-close-white` class. This class uses the `filter` property to invert the `background-image`. 28 | 29 | {{< example class="bg-dark" >}} 30 | 31 | 32 | {{< /example >}} 33 | 34 | ## Sass 35 | 36 | ### Variables 37 | 38 | {{< scss-docs name="close-variables" file="scss/_variables.scss" >}} 39 | -------------------------------------------------------------------------------- /site/content/docs/5.1/content/figures.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Figures 4 | description: Documentation and examples for displaying related images and text with the figure component in Bootstrap. 5 | group: content 6 | toc: true 7 | --- 8 | 9 | Anytime you need to display a piece of content—like an image with an optional caption, consider using a `
`. 10 | 11 | Use the included `.figure`, `.figure-img` and `.figure-caption` classes to provide some baseline styles for the HTML5 `
` and `
` elements. Images in figures have no explicit size, so be sure to add the `.img-fluid` class to your `` to make it responsive. 12 | 13 | {{< example >}} 14 |
15 | {{< placeholder width="400" height="300" class="figure-img img-fluid rounded" >}} 16 |
A caption for the above image.
17 |
18 | {{< /example >}} 19 | 20 | Aligning the figure's caption is easy with our [text utilities]({{< docsref "/utilities/text#text-alignment" >}}). 21 | 22 | {{< example >}} 23 |
24 | {{< placeholder width="400" height="300" class="figure-img img-fluid rounded" >}} 25 |
A caption for the above image.
26 |
27 | {{< /example >}} 28 | 29 | ## Sass 30 | 31 | ### Variables 32 | 33 | {{< scss-docs name="figure-variables" file="scss/_variables.scss" >}} 34 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "stylelint-config-twbs-bootstrap/css" 4 | ], 5 | "rules": { 6 | "at-rule-no-vendor-prefix": null, 7 | "comment-empty-line-before": null, 8 | "media-feature-name-no-vendor-prefix": null, 9 | "property-blacklist": null, 10 | "property-no-vendor-prefix": null, 11 | "selector-no-qualifying-type": null, 12 | "selector-no-vendor-prefix": null, 13 | "value-no-vendor-prefix": null 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/checkout/form-validation.css: -------------------------------------------------------------------------------- 1 | .container { 2 | max-width: 960px; 3 | } 4 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/checkout/form-validation.js: -------------------------------------------------------------------------------- 1 | // Example starter JavaScript for disabling form submissions if there are invalid fields 2 | (function () { 3 | 'use strict' 4 | 5 | // Fetch all the forms we want to apply custom Bootstrap validation styles to 6 | var forms = document.querySelectorAll('.needs-validation') 7 | 8 | // Loop over them and prevent submission 9 | Array.prototype.slice.call(forms) 10 | .forEach(function (form) { 11 | form.addEventListener('submit', function (event) { 12 | if (!form.checkValidity()) { 13 | event.preventDefault() 14 | event.stopPropagation() 15 | } 16 | 17 | form.classList.add('was-validated') 18 | }, false) 19 | }) 20 | })() 21 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/cover/cover.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Globals 3 | */ 4 | 5 | 6 | /* Custom default button */ 7 | .btn-secondary, 8 | .btn-secondary:hover, 9 | .btn-secondary:focus { 10 | color: #333; 11 | text-shadow: none; /* Prevent inheritance from `body` */ 12 | } 13 | 14 | 15 | /* 16 | * Base structure 17 | */ 18 | 19 | body { 20 | text-shadow: 0 .05rem .1rem rgba(0, 0, 0, .5); 21 | box-shadow: inset 0 0 5rem rgba(0, 0, 0, .5); 22 | } 23 | 24 | .cover-container { 25 | max-width: 42em; 26 | } 27 | 28 | 29 | /* 30 | * Header 31 | */ 32 | 33 | .nav-masthead .nav-link { 34 | padding: .25rem 0; 35 | font-weight: 700; 36 | color: rgba(255, 255, 255, .5); 37 | background-color: transparent; 38 | border-bottom: .25rem solid transparent; 39 | } 40 | 41 | .nav-masthead .nav-link:hover, 42 | .nav-masthead .nav-link:focus { 43 | border-bottom-color: rgba(255, 255, 255, .25); 44 | } 45 | 46 | .nav-masthead .nav-link + .nav-link { 47 | margin-left: 1rem; 48 | } 49 | 50 | .nav-masthead .active { 51 | color: #fff; 52 | border-bottom-color: #fff; 53 | } 54 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/cover/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: examples 3 | title: Cover Template 4 | extra_css: 5 | - "cover.css" 6 | html_class: "h-100" 7 | body_class: "d-flex h-100 text-center text-white bg-dark" 8 | include_js: false 9 | --- 10 | 11 |
12 |
13 |
14 |

Cover

15 | 20 |
21 |
22 | 23 |
24 |

Cover your page.

25 |

Cover is a one-page template for building simple and beautiful home pages. Download, edit the text, and add your own fullscreen background photo to make it your own.

26 |

27 | Learn more 28 |

29 |
30 | 31 | 34 |
35 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/dashboard-rtl/dashboard.js: -------------------------------------------------------------------------------- 1 | /* globals Chart:false, feather:false */ 2 | 3 | (function () { 4 | 'use strict' 5 | 6 | feather.replace({ 'aria-hidden': 'true' }) 7 | 8 | // Graphs 9 | var ctx = document.getElementById('myChart') 10 | // eslint-disable-next-line no-unused-vars 11 | var myChart = new Chart(ctx, { 12 | type: 'line', 13 | data: { 14 | labels: [ 15 | 'الأحد', 16 | 'الإثنين', 17 | 'الثلاثاء', 18 | 'الأربعاء', 19 | 'الخميس', 20 | 'الجمعة', 21 | 'السبت' 22 | ], 23 | datasets: [{ 24 | data: [ 25 | 15339, 26 | 21345, 27 | 18483, 28 | 24003, 29 | 23489, 30 | 24092, 31 | 12034 32 | ], 33 | lineTension: 0, 34 | backgroundColor: 'transparent', 35 | borderColor: '#007bff', 36 | borderWidth: 4, 37 | pointBackgroundColor: '#007bff' 38 | }] 39 | }, 40 | options: { 41 | scales: { 42 | yAxes: [{ 43 | ticks: { 44 | beginAtZero: false 45 | } 46 | }] 47 | }, 48 | legend: { 49 | display: false 50 | } 51 | } 52 | }) 53 | })() 54 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/dashboard/dashboard.js: -------------------------------------------------------------------------------- 1 | /* globals Chart:false, feather:false */ 2 | 3 | (function () { 4 | 'use strict' 5 | 6 | feather.replace({ 'aria-hidden': 'true' }) 7 | 8 | // Graphs 9 | var ctx = document.getElementById('myChart') 10 | // eslint-disable-next-line no-unused-vars 11 | var myChart = new Chart(ctx, { 12 | type: 'line', 13 | data: { 14 | labels: [ 15 | 'Sunday', 16 | 'Monday', 17 | 'Tuesday', 18 | 'Wednesday', 19 | 'Thursday', 20 | 'Friday', 21 | 'Saturday' 22 | ], 23 | datasets: [{ 24 | data: [ 25 | 15339, 26 | 21345, 27 | 18483, 28 | 24003, 29 | 23489, 30 | 24092, 31 | 12034 32 | ], 33 | lineTension: 0, 34 | backgroundColor: 'transparent', 35 | borderColor: '#007bff', 36 | borderWidth: 4, 37 | pointBackgroundColor: '#007bff' 38 | }] 39 | }, 40 | options: { 41 | scales: { 42 | yAxes: [{ 43 | ticks: { 44 | beginAtZero: false 45 | } 46 | }] 47 | }, 48 | legend: { 49 | display: false 50 | } 51 | } 52 | }) 53 | })() 54 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/features/features.css: -------------------------------------------------------------------------------- 1 | .b-example-divider { 2 | height: 3rem; 3 | background-color: rgba(0, 0, 0, .1); 4 | border: solid rgba(0, 0, 0, .15); 5 | border-width: 1px 0; 6 | box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15); 7 | } 8 | 9 | .bi { 10 | vertical-align: -.125em; 11 | fill: currentColor; 12 | } 13 | 14 | .feature-icon { 15 | display: inline-flex; 16 | align-items: center; 17 | justify-content: center; 18 | width: 4rem; 19 | height: 4rem; 20 | margin-bottom: 1rem; 21 | font-size: 2rem; 22 | color: #fff; 23 | border-radius: .75rem; 24 | } 25 | 26 | .icon-link { 27 | display: inline-flex; 28 | align-items: center; 29 | } 30 | .icon-link > .bi { 31 | margin-top: .125rem; 32 | margin-left: .125rem; 33 | transition: transform .25s ease-in-out; 34 | fill: currentColor; 35 | } 36 | .icon-link:hover > .bi { 37 | transform: translate(.25rem); 38 | } 39 | 40 | .icon-square { 41 | display: inline-flex; 42 | align-items: center; 43 | justify-content: center; 44 | width: 3rem; 45 | height: 3rem; 46 | font-size: 1.5rem; 47 | border-radius: .75rem; 48 | } 49 | 50 | .rounded-4 { border-radius: .5rem; } 51 | .rounded-5 { border-radius: 1rem; } 52 | 53 | .text-shadow-1 { text-shadow: 0 .125rem .25rem rgba(0, 0, 0, .25); } 54 | .text-shadow-2 { text-shadow: 0 .25rem .5rem rgba(0, 0, 0, .25); } 55 | .text-shadow-3 { text-shadow: 0 .5rem 1.5rem rgba(0, 0, 0, .25); } 56 | 57 | .card-cover { 58 | background-repeat: no-repeat; 59 | background-position: center center; 60 | background-size: cover; 61 | } 62 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/features/unsplash-photo-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/content/docs/5.1/examples/features/unsplash-photo-1.jpg -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/features/unsplash-photo-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/content/docs/5.1/examples/features/unsplash-photo-2.jpg -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/features/unsplash-photo-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/content/docs/5.1/examples/features/unsplash-photo-3.jpg -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/footers/footers.css: -------------------------------------------------------------------------------- 1 | .b-example-divider { 2 | height: 3rem; 3 | background-color: rgba(0, 0, 0, .1); 4 | border: solid rgba(0, 0, 0, .15); 5 | border-width: 1px 0; 6 | box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15); 7 | } 8 | 9 | .bi { 10 | vertical-align: -.125em; 11 | fill: currentColor; 12 | } 13 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/grid/grid.css: -------------------------------------------------------------------------------- 1 | .themed-grid-col { 2 | padding-top: .75rem; 3 | padding-bottom: .75rem; 4 | background-color: rgba(86, 61, 124, .15); 5 | border: 1px solid rgba(86, 61, 124, .2); 6 | } 7 | 8 | .themed-container { 9 | padding: .75rem; 10 | margin-bottom: 1.5rem; 11 | background-color: rgba(0, 123, 255, .15); 12 | border: 1px solid rgba(0, 123, 255, .2); 13 | } 14 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/headers/headers.css: -------------------------------------------------------------------------------- 1 | .b-example-divider { 2 | height: 3rem; 3 | background-color: rgba(0, 0, 0, .1); 4 | border: solid rgba(0, 0, 0, .15); 5 | border-width: 1px 0; 6 | box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15); 7 | } 8 | 9 | .form-control-dark { 10 | color: #fff; 11 | background-color: var(--bs-dark); 12 | border-color: var(--bs-gray); 13 | } 14 | .form-control-dark:focus { 15 | color: #fff; 16 | background-color: var(--bs-dark); 17 | border-color: #fff; 18 | box-shadow: 0 0 0 .25rem rgba(255, 255, 255, .25); 19 | } 20 | 21 | .bi { 22 | vertical-align: -.125em; 23 | fill: currentColor; 24 | } 25 | 26 | .text-small { 27 | font-size: 85%; 28 | } 29 | 30 | .dropdown-toggle { 31 | outline: 0; 32 | } 33 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/heroes/bootstrap-docs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/content/docs/5.1/examples/heroes/bootstrap-docs.png -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/heroes/bootstrap-themes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/content/docs/5.1/examples/heroes/bootstrap-themes.png -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/heroes/heroes.css: -------------------------------------------------------------------------------- 1 | .b-example-divider { 2 | height: 3rem; 3 | background-color: rgba(0, 0, 0, .1); 4 | border: solid rgba(0, 0, 0, .15); 5 | border-width: 1px 0; 6 | box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15); 7 | } 8 | 9 | @media (min-width: 992px) { 10 | .rounded-lg-3 { border-radius: .3rem; } 11 | } 12 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/list-groups/list-groups.css: -------------------------------------------------------------------------------- 1 | .b-example-divider { 2 | height: 3rem; 3 | background-color: rgba(0, 0, 0, .1); 4 | border: solid rgba(0, 0, 0, .15); 5 | border-width: 1px 0; 6 | box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15); 7 | } 8 | 9 | .bi { 10 | vertical-align: -.125em; 11 | fill: currentColor; 12 | } 13 | 14 | .opacity-50 { opacity: .5; } 15 | .opacity-75 { opacity: .75; } 16 | 17 | .list-group { 18 | width: auto; 19 | max-width: 460px; 20 | margin: 4rem auto; 21 | } 22 | 23 | .form-check-input:checked + .form-checked-content { 24 | opacity: .5; 25 | } 26 | 27 | .form-check-input-placeholder { 28 | pointer-events: none; 29 | border-style: dashed; 30 | } 31 | [contenteditable]:focus { 32 | outline: 0; 33 | } 34 | 35 | .list-group-checkable { 36 | display: grid; 37 | gap: .5rem; 38 | border: 0; 39 | } 40 | .list-group-checkable .list-group-item { 41 | cursor: pointer; 42 | border-radius: .5rem; 43 | } 44 | .list-group-item-check { 45 | position: absolute; 46 | clip: rect(0, 0, 0, 0); 47 | pointer-events: none; 48 | } 49 | .list-group-item-check:hover + .list-group-item { 50 | background-color: var(--bs-light); 51 | } 52 | .list-group-item-check:checked + .list-group-item { 53 | color: #fff; 54 | background-color: var(--bs-blue); 55 | } 56 | .list-group-item-check[disabled] + .list-group-item, 57 | .list-group-item-check:disabled + .list-group-item { 58 | pointer-events: none; 59 | filter: none; 60 | opacity: .5; 61 | } 62 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/modals/modals.css: -------------------------------------------------------------------------------- 1 | .b-example-divider { 2 | height: 3rem; 3 | background-color: rgba(0, 0, 0, .1); 4 | border: solid rgba(0, 0, 0, .15); 5 | border-width: 1px 0; 6 | box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15); 7 | } 8 | 9 | .bi { 10 | vertical-align: -.125em; 11 | fill: currentColor; 12 | } 13 | 14 | .rounded-4 { border-radius: .5rem; } 15 | .rounded-5 { border-radius: .75rem; } 16 | .rounded-6 { border-radius: 1rem; } 17 | 18 | .modal-sheet .modal-dialog { 19 | width: 380px; 20 | transition: bottom .75s ease-in-out; 21 | } 22 | .modal-sheet .modal-footer { 23 | padding-bottom: 2rem; 24 | } 25 | 26 | .modal-alert .modal-dialog { 27 | width: 380px; 28 | } 29 | 30 | .border-right { border-right: 1px solid #eee; } 31 | 32 | .modal-tour .modal-dialog { 33 | width: 380px; 34 | } 35 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/navbar-fixed/navbar-top-fixed.css: -------------------------------------------------------------------------------- 1 | /* Show it is fixed to the top */ 2 | body { 3 | min-height: 75rem; 4 | padding-top: 4.5rem; 5 | } 6 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/navbar-static/navbar-top.css: -------------------------------------------------------------------------------- 1 | /* Show it's not fixed to the top */ 2 | body { 3 | min-height: 75rem; 4 | } 5 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/navbars/navbar.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-bottom: 20px; 3 | } 4 | 5 | .navbar { 6 | margin-bottom: 20px; 7 | } 8 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/offcanvas-navbar/offcanvas.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | overflow-x: hidden; /* Prevent scroll on narrow devices */ 4 | } 5 | 6 | body { 7 | padding-top: 56px; 8 | } 9 | 10 | @media (max-width: 991.98px) { 11 | .offcanvas-collapse { 12 | position: fixed; 13 | top: 56px; /* Height of navbar */ 14 | bottom: 0; 15 | left: 100%; 16 | width: 100%; 17 | padding-right: 1rem; 18 | padding-left: 1rem; 19 | overflow-y: auto; 20 | visibility: hidden; 21 | background-color: #343a40; 22 | transition: transform .3s ease-in-out, visibility .3s ease-in-out; 23 | } 24 | .offcanvas-collapse.open { 25 | visibility: visible; 26 | transform: translateX(-100%); 27 | } 28 | } 29 | 30 | .nav-scroller { 31 | position: relative; 32 | z-index: 2; 33 | height: 2.75rem; 34 | overflow-y: hidden; 35 | } 36 | 37 | .nav-scroller .nav { 38 | display: flex; 39 | flex-wrap: nowrap; 40 | padding-bottom: 1rem; 41 | margin-top: -1px; 42 | overflow-x: auto; 43 | color: rgba(255, 255, 255, .75); 44 | text-align: center; 45 | white-space: nowrap; 46 | -webkit-overflow-scrolling: touch; 47 | } 48 | 49 | .nav-underline .nav-link { 50 | padding-top: .75rem; 51 | padding-bottom: .75rem; 52 | font-size: .875rem; 53 | color: #6c757d; 54 | } 55 | 56 | .nav-underline .nav-link:hover { 57 | color: #007bff; 58 | } 59 | 60 | .nav-underline .active { 61 | font-weight: 500; 62 | color: #343a40; 63 | } 64 | 65 | .bg-purple { 66 | background-color: #6f42c1; 67 | } 68 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/offcanvas-navbar/offcanvas.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict' 3 | 4 | document.querySelector('#navbarSideCollapse').addEventListener('click', function () { 5 | document.querySelector('.offcanvas-collapse').classList.toggle('open') 6 | }) 7 | })() 8 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/pricing/pricing.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-image: linear-gradient(180deg, #eee, #fff 100px, #fff); 3 | } 4 | 5 | .container { 6 | max-width: 960px; 7 | } 8 | 9 | .pricing-header { 10 | max-width: 700px; 11 | } 12 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/product/product.css: -------------------------------------------------------------------------------- 1 | .container { 2 | max-width: 960px; 3 | } 4 | 5 | /* 6 | * Custom translucent site header 7 | */ 8 | 9 | .site-header { 10 | background-color: rgba(0, 0, 0, .85); 11 | -webkit-backdrop-filter: saturate(180%) blur(20px); 12 | backdrop-filter: saturate(180%) blur(20px); 13 | } 14 | .site-header a { 15 | color: #8e8e8e; 16 | transition: color .15s ease-in-out; 17 | } 18 | .site-header a:hover { 19 | color: #fff; 20 | text-decoration: none; 21 | } 22 | 23 | /* 24 | * Dummy devices (replace them with your own or something else entirely!) 25 | */ 26 | 27 | .product-device { 28 | position: absolute; 29 | right: 10%; 30 | bottom: -30%; 31 | width: 300px; 32 | height: 540px; 33 | background-color: #333; 34 | border-radius: 21px; 35 | transform: rotate(30deg); 36 | } 37 | 38 | .product-device::before { 39 | position: absolute; 40 | top: 10%; 41 | right: 10px; 42 | bottom: 10%; 43 | left: 10px; 44 | content: ""; 45 | background-color: rgba(255, 255, 255, .1); 46 | border-radius: 5px; 47 | } 48 | 49 | .product-device-2 { 50 | top: -25%; 51 | right: auto; 52 | bottom: 0; 53 | left: 5%; 54 | background-color: #e5e5e5; 55 | } 56 | 57 | 58 | /* 59 | * Extra utilities 60 | */ 61 | 62 | .flex-equal > * { 63 | flex: 1; 64 | } 65 | @media (min-width: 768px) { 66 | .flex-md-equal > * { 67 | flex: 1; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/sidebars/sidebars.js: -------------------------------------------------------------------------------- 1 | /* global bootstrap: false */ 2 | (function () { 3 | 'use strict' 4 | var tooltipTriggerList = Array.prototype.slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) 5 | tooltipTriggerList.forEach(function (tooltipTriggerEl) { 6 | new bootstrap.Tooltip(tooltipTriggerEl) 7 | }) 8 | })() 9 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/sign-in/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: examples 3 | title: Signin Template 4 | extra_css: 5 | - "signin.css" 6 | body_class: "text-center" 7 | include_js: false 8 | --- 9 | 10 |
11 |
12 | 13 |

Please sign in

14 | 15 |
16 | 17 | 18 |
19 |
20 | 21 | 22 |
23 | 24 |
25 | 28 |
29 | 30 |

© 2017–{{< year >}}

31 |
32 |
33 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/sign-in/signin.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | height: 100%; 4 | } 5 | 6 | body { 7 | display: flex; 8 | align-items: center; 9 | padding-top: 40px; 10 | padding-bottom: 40px; 11 | background-color: #f5f5f5; 12 | } 13 | 14 | .form-signin { 15 | width: 100%; 16 | max-width: 330px; 17 | padding: 15px; 18 | margin: auto; 19 | } 20 | 21 | .form-signin .checkbox { 22 | font-weight: 400; 23 | } 24 | 25 | .form-signin .form-floating:focus-within { 26 | z-index: 2; 27 | } 28 | 29 | .form-signin input[type="email"] { 30 | margin-bottom: -1px; 31 | border-bottom-right-radius: 0; 32 | border-bottom-left-radius: 0; 33 | } 34 | 35 | .form-signin input[type="password"] { 36 | margin-bottom: 10px; 37 | border-top-left-radius: 0; 38 | border-top-right-radius: 0; 39 | } 40 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/starter-template/starter-template.css: -------------------------------------------------------------------------------- 1 | .icon-list { 2 | padding-left: 0; 3 | list-style: none; 4 | } 5 | .icon-list li { 6 | display: flex; 7 | align-items: flex-start; 8 | margin-bottom: .25rem; 9 | } 10 | .icon-list li::before { 11 | display: block; 12 | flex-shrink: 0; 13 | width: 1.5em; 14 | height: 1.5em; 15 | margin-right: .5rem; 16 | content: ""; 17 | background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23212529' viewBox='0 0 16 16'%3E%3Cpath d='M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0zM4.5 7.5a.5.5 0 0 0 0 1h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 1 0-.708.708L10.293 7.5H4.5z'/%3E%3C/svg%3E") no-repeat center center / 100% auto; 18 | } 19 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/sticky-footer-navbar/sticky-footer-navbar.css: -------------------------------------------------------------------------------- 1 | /* Custom page CSS 2 | -------------------------------------------------- */ 3 | /* Not required for template or sticky footer method. */ 4 | 5 | main > .container { 6 | padding: 60px 15px 0; 7 | } 8 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/sticky-footer/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: examples 3 | title: Sticky Footer Template 4 | extra_css: 5 | - "sticky-footer.css" 6 | html_class: "h-100" 7 | body_class: "d-flex flex-column h-100" 8 | include_js: false 9 | --- 10 | 11 | 12 |
13 |
14 |

Sticky footer

15 |

Pin a footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.

16 |

Use }}">the sticky footer with a fixed navbar if need be, too.

17 |
18 |
19 | 20 |
21 |
22 | Place sticky footer content here. 23 |
24 |
25 | -------------------------------------------------------------------------------- /site/content/docs/5.1/examples/sticky-footer/sticky-footer.css: -------------------------------------------------------------------------------- 1 | /* Custom page CSS 2 | -------------------------------------------------- */ 3 | /* Not required for template or sticky footer method. */ 4 | 5 | .container { 6 | width: auto; 7 | max-width: 680px; 8 | padding: 0 15px; 9 | } 10 | -------------------------------------------------------------------------------- /site/content/docs/5.1/getting-started/best-practices.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Best practices 4 | description: Learn about some of the best practices we've gathered from years of working on and using Bootstrap. 5 | group: getting-started 6 | --- 7 | 8 | We've designed and developed Bootstrap to work in a number of environments. Here are some of the best practices we've gathered from years of working on and using it ourselves. 9 | 10 | {{< callout info >}} 11 | **Heads up!** This copy is a work in progress. 12 | {{< /callout >}} 13 | 14 | ### General outline 15 | 16 | - Working with CSS 17 | - Working with Sass files 18 | - Building new CSS components 19 | - Working with flexbox 20 | - Ask in [Slack](https://bootstrap-slack.herokuapp.com/) 21 | -------------------------------------------------------------------------------- /site/content/docs/5.1/helpers/clearfix.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Clearfix 4 | description: Quickly and easily clear floated content within a container by adding a clearfix utility. 5 | group: helpers 6 | aliases: "/docs/5.1/helpers/" 7 | --- 8 | 9 | Easily clear `float`s by adding `.clearfix` **to the parent element**. Can also be used as a mixin. 10 | 11 | Use in HTML: 12 | 13 | ```html 14 |
...
15 | ``` 16 | 17 | The mixin source code: 18 | 19 | {{< scss-docs name="clearfix" file="scss/mixins/_clearfix.scss" >}} 20 | 21 | Use the mixin in SCSS: 22 | 23 | ```scss 24 | .element { 25 | @include clearfix; 26 | } 27 | ``` 28 | 29 | The following example shows how the clearfix can be used. Without the clearfix the wrapping div would not span around the buttons which would cause a broken layout. 30 | 31 | {{< example >}} 32 |
33 | 34 | 35 |
36 | {{< /example >}} 37 | -------------------------------------------------------------------------------- /site/content/docs/5.1/helpers/colored-links.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Colored links 4 | description: Colored links with hover states 5 | group: helpers 6 | toc: false 7 | --- 8 | 9 | You can use the `.link-*` classes to colorize links. Unlike the [`.text-*` classes]({{< docsref "/utilities/colors" >}}), these classes have a `:hover` and `:focus` state. 10 | 11 | {{< example >}} 12 | {{< colored-links.inline >}} 13 | {{- range (index $.Site.Data "theme-colors") }} 14 | {{ .name | title }} link 15 | {{- end -}} 16 | {{< /colored-links.inline >}} 17 | {{< /example >}} 18 | 19 | {{< callout info >}} 20 | Some of the link styles use a relatively light foreground color, and should only be used on a dark background in order to have sufficient contrast. 21 | {{< /callout >}} 22 | -------------------------------------------------------------------------------- /site/content/docs/5.1/helpers/position.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Position 4 | description: Use these helpers for quickly configuring the position of an element. 5 | group: helpers 6 | toc: true 7 | --- 8 | 9 | ## Fixed top 10 | 11 | Position an element at the top of the viewport, from edge to edge. Be sure you understand the ramifications of fixed position in your project; you may need to add additional CSS. 12 | 13 | ```html 14 |
...
15 | ``` 16 | 17 | ## Fixed bottom 18 | 19 | Position an element at the bottom of the viewport, from edge to edge. Be sure you understand the ramifications of fixed position in your project; you may need to add additional CSS. 20 | 21 | ```html 22 |
...
23 | ``` 24 | 25 | ## Sticky top 26 | 27 | Position an element at the top of the viewport, from edge to edge, but only after you scroll past it. The `.sticky-top` utility uses CSS's `position: sticky`, which isn't fully supported in all browsers. 28 | 29 | ```html 30 |
...
31 | ``` 32 | 33 | ## Responsive sticky top 34 | 35 | Responsive variations also exist for `.sticky-top` utility. 36 | 37 | ```html 38 |
Stick to the top on viewports sized SM (small) or wider
39 |
Stick to the top on viewports sized MD (medium) or wider
40 |
Stick to the top on viewports sized LG (large) or wider
41 |
Stick to the top on viewports sized XL (extra-large) or wider
42 | ``` 43 | -------------------------------------------------------------------------------- /site/content/docs/5.1/helpers/text-truncation.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Text truncation 4 | description: Truncate long strings of text with an ellipsis. 5 | group: helpers 6 | toc: false 7 | --- 8 | 9 | For longer content, you can add a `.text-truncate` class to truncate the text with an ellipsis. **Requires `display: inline-block` or `display: block`.** 10 | 11 | {{< example >}} 12 | 13 |
14 |
15 | This text is quite long, and will be truncated once displayed. 16 |
17 |
18 | 19 | 20 | 21 | This text is quite long, and will be truncated once displayed. 22 | 23 | {{< /example >}} 24 | -------------------------------------------------------------------------------- /site/content/docs/5.1/helpers/vertical-rule.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Vertical rule 4 | description: Use the custom vertical rule helper to create vertical dividers like the `
` element. 5 | group: helpers 6 | toc: true 7 | --- 8 | 9 | ## How it works 10 | 11 | Vertical rules are inspired by the `
` element, allowing you to create vertical dividers in common layouts. They're styled just like `
` elements: 12 | 13 | - They're `1px` wide 14 | - They have `min-height` of `1em` 15 | - Their color is set via `currentColor` and `opacity` 16 | 17 | Customize them with additional styles as needed. 18 | 19 | ## Example 20 | 21 | {{< example >}} 22 |
23 | {{< /example >}} 24 | 25 | Vertical rules scale their height in flex layouts: 26 | 27 | {{< example >}} 28 |
29 |
30 |
31 | {{< /example >}} 32 | 33 | ## With stacks 34 | 35 | They can also be used in [stacks]({{< docsref "/helpers/stacks" >}}): 36 | 37 | {{< example >}} 38 |
39 |
First item
40 |
Second item
41 |
42 |
Third item
43 |
44 | {{< /example >}} 45 | -------------------------------------------------------------------------------- /site/content/docs/5.1/helpers/visually-hidden.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Visually hidden 4 | description: Use these helpers to visually hide elements but keep them accessible to assistive technologies. 5 | group: helpers 6 | aliases: "/docs/5.1/helpers/screen-readers/" 7 | --- 8 | 9 | Visually hide an element while still allowing it to be exposed to assistive technologies (such as screen readers) with `.visually-hidden`. Use `.visually-hidden-focusable` to visually hide an element by default, but to display it when it's focused (e.g. by a keyboard-only user). `.visually-hidden-focusable` can also be applied to a container–thanks to `:focus-within`, the container will be displayed when any child element of the container receives focus. 10 | 11 | {{< example >}} 12 |

Title for screen readers

13 | Skip to main content 14 |
A container with a focusable element.
15 | {{< /example >}} 16 | 17 | Both `visually-hidden` and `visually-hidden-focusable` can also be used as mixins. 18 | 19 | ```scss 20 | // Usage as a mixin 21 | 22 | .visually-hidden-title { 23 | @include visually-hidden; 24 | } 25 | 26 | .skip-navigation { 27 | @include visually-hidden-focusable; 28 | } 29 | ``` 30 | -------------------------------------------------------------------------------- /site/content/docs/5.1/layout/z-index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Z-index 4 | description: While not a part of Bootstrap's grid system, z-indexes play an important part in how our components overlay and interact with one another. 5 | group: layout 6 | --- 7 | 8 | Several Bootstrap components utilize `z-index`, the CSS property that helps control layout by providing a third axis to arrange content. We utilize a default z-index scale in Bootstrap that's been designed to properly layer navigation, tooltips and popovers, modals, and more. 9 | 10 | These higher values start at an arbitrary number, high and specific enough to ideally avoid conflicts. We need a standard set of these across our layered components—tooltips, popovers, navbars, dropdowns, modals—so we can be reasonably consistent in the behaviors. There's no reason we couldn't have used `100`+ or `500`+. 11 | 12 | We don't encourage customization of these individual values; should you change one, you likely need to change them all. 13 | 14 | {{< scss-docs name="zindex-stack" file="scss/_variables.scss" >}} 15 | 16 | To handle overlapping borders within components (e.g., buttons and inputs in input groups), we use low single digit `z-index` values of `1`, `2`, and `3` for default, hover, and active states. On hover/focus/active, we bring a particular element to the forefront with a higher `z-index` value to show their border over the sibling elements. 17 | -------------------------------------------------------------------------------- /site/content/docs/5.1/utilities/opacity.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Opacity 4 | description: Control the opacity of elements. 5 | group: utilities 6 | --- 7 | 8 | The `opacity` property sets the opacity level for an element. The opacity level describes the transparency level, where `1` is not transparent at all, `.5` is 50% visible, and `0` is completely transparent. 9 | 10 | Set the `opacity` of an element using `.opacity-{value}` utilities. 11 | 12 |
13 |
100%
14 |
75%
15 |
50%
16 |
25%
17 |
18 | 19 | ```html 20 |
...
21 |
...
22 |
...
23 |
...
24 | ``` 25 | 26 | ### Utilities API 27 | 28 | Opacity utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}}) 29 | 30 | {{< scss-docs name="utils-opacity" file="scss/_utilities.scss" >}} 31 | -------------------------------------------------------------------------------- /site/content/docs/5.1/utilities/shadows.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Shadows 4 | description: Add or remove shadows to elements with box-shadow utilities. 5 | group: utilities 6 | toc: true 7 | --- 8 | 9 | ## Examples 10 | 11 | While shadows on components are disabled by default in Bootstrap and can be enabled via `$enable-shadows`, you can also quickly add or remove a shadow with our `box-shadow` utility classes. Includes support for `.shadow-none` and three default sizes (which have associated variables to match). 12 | 13 | {{< example >}} 14 |
No shadow
15 |
Small shadow
16 |
Regular shadow
17 |
Larger shadow
18 | {{< /example >}} 19 | 20 | ## Sass 21 | 22 | ### Variables 23 | 24 | {{< scss-docs name="box-shadow-variables" file="scss/_variables.scss" >}} 25 | 26 | ### Utilities API 27 | 28 | Shadow utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}}) 29 | 30 | {{< scss-docs name="utils-shadow" file="scss/_utilities.scss" >}} 31 | -------------------------------------------------------------------------------- /site/content/docs/5.1/utilities/visibility.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Visibility 4 | description: Control the visibility of elements, without modifying their display, with visibility utilities. 5 | group: utilities 6 | --- 7 | 8 | Set the `visibility` of elements with our visibility utilities. These utility classes do not modify the `display` value at all and do not affect layout – `.invisible` elements still take up space in the page. 9 | 10 | {{< callout warning >}} 11 | Elements with the `.invisible` class will be hidden *both* visually and for assistive technology/screen reader users. 12 | {{< /callout >}} 13 | 14 | Apply `.visible` or `.invisible` as needed. 15 | 16 | ```html 17 |
...
18 | 19 | ``` 20 | 21 | ```scss 22 | // Class 23 | .visible { 24 | visibility: visible !important; 25 | } 26 | .invisible { 27 | visibility: hidden !important; 28 | } 29 | ``` 30 | 31 | ## Sass 32 | 33 | ### Utilities API 34 | 35 | Visibility utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}}) 36 | 37 | {{< scss-docs name="utils-visibility" file="scss/_utilities.scss" >}} 38 | -------------------------------------------------------------------------------- /site/content/docs/_index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: redirect 3 | sitemap_exclude: true 4 | redirect: "/docs/5.1/getting-started/introduction/" 5 | --- 6 | -------------------------------------------------------------------------------- /site/content/docs/versions.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Versions 3 | description: An appendix of hosted documentation for nearly every release of Bootstrap, from v1 through v5. 4 | --- 5 | 6 | {{< list-versions.inline >}} 7 |
8 | {{- range $release := sort (index $.Site.Data "docs-versions") "group" "desc" }} 9 |
10 |

{{ $release.group }}

11 |

{{ $release.description }}

12 | {{- $versions := sort $release.versions "v" "desc" -}} 13 | {{- range $i, $version := $versions }} 14 | {{- $len := len $versions -}} 15 | {{ if (eq $i 0) }}{{ end }} 23 | {{ end -}} 24 |
25 | {{ end -}} 26 |
27 | {{< /list-versions.inline >}} 28 | -------------------------------------------------------------------------------- /site/data/breakpoints.yml: -------------------------------------------------------------------------------- 1 | - breakpoint: xs 2 | abbr: "" 3 | name: X-Small 4 | min-width: 0px 5 | container: "" 6 | 7 | - breakpoint: sm 8 | abbr: -sm 9 | name: Small 10 | min-width: 576px 11 | container: 540px 12 | 13 | - breakpoint: md 14 | abbr: -md 15 | name: Medium 16 | min-width: 768px 17 | container: 720px 18 | 19 | - breakpoint: lg 20 | abbr: -lg 21 | name: Large 22 | min-width: 992px 23 | container: 960px 24 | 25 | - breakpoint: xl 26 | abbr: -xl 27 | name: X-Large 28 | min-width: 1200px 29 | container: 1140px 30 | 31 | - breakpoint: xxl 32 | abbr: -xxl 33 | name: XX-Large 34 | min-width: 1400px 35 | container: 1320px 36 | -------------------------------------------------------------------------------- /site/data/colors.yml: -------------------------------------------------------------------------------- 1 | - name: blue 2 | hex: "#0d6efd" 3 | - name: indigo 4 | hex: "#6610f2" 5 | - name: purple 6 | hex: "#6f42c1" 7 | - name: pink 8 | hex: "#d63384" 9 | - name: red 10 | hex: "#dc3545" 11 | - name: orange 12 | hex: "#fd7e14" 13 | - name: yellow 14 | hex: "#ffc107" 15 | - name: green 16 | hex: "#198754" 17 | - name: teal 18 | hex: "#20c997" 19 | - name: cyan 20 | hex: "#0dcaf0" 21 | - name: white 22 | hex: "#fff" 23 | - name: gray 24 | hex: "#6c757d" 25 | - name: gray-dark 26 | hex: "#343a40" 27 | -------------------------------------------------------------------------------- /site/data/core-team.yml: -------------------------------------------------------------------------------- 1 | - name: Mark Otto 2 | user: mdo 3 | 4 | - name: Jacob Thornton 5 | user: fat 6 | 7 | - name: XhmikosR 8 | user: xhmikosr 9 | 10 | - name: GeoSot 11 | user: geosot 12 | 13 | - name: Rohit Sharma 14 | user: rohit2sharma95 15 | 16 | - name: alpadev 17 | user: alpadev 18 | 19 | - name: Gaël Poupard 20 | user: ffoodd 21 | 22 | - name: Patrick H. Lauke 23 | user: patrickhlauke 24 | 25 | - name: Martijn Cuppens 26 | user: martijncuppens 27 | 28 | - name: Johann-S 29 | user: johann-s 30 | 31 | - name: Gleb Mazovetskiy 32 | user: glebm 33 | -------------------------------------------------------------------------------- /site/data/docs-versions.yml: -------------------------------------------------------------------------------- 1 | - group: v1.x 2 | baseurl: "https://getbootstrap.com" 3 | description: "Every minor and patch release from v1 is listed below." 4 | versions: 5 | - v: "1.0.0" 6 | - v: "1.1.0" 7 | - v: "1.1.1" 8 | - v: "1.2.0" 9 | - v: "1.3.0" 10 | - v: "1.4.0" 11 | 12 | - group: v2.x 13 | baseurl: "https://getbootstrap.com" 14 | description: "Every minor and patch release from v2 is listed below." 15 | versions: 16 | - v: "2.0.0" 17 | - v: "2.0.1" 18 | - v: "2.0.2" 19 | - v: "2.0.3" 20 | - v: "2.0.4" 21 | - v: "2.1.0" 22 | - v: "2.1.1" 23 | - v: "2.2.0" 24 | - v: "2.2.1" 25 | - v: "2.2.2" 26 | - v: "2.3.0" 27 | - v: "2.3.1" 28 | - v: "2.3.2" 29 | 30 | - group: v3.x 31 | baseurl: "https://getbootstrap.com/docs" 32 | description: "Every minor and patch release from v3 is listed below. Last update was v3.4.1." 33 | versions: 34 | - v: "3.3" 35 | - v: "3.4" 36 | 37 | - group: v4.x 38 | baseurl: "https://getbootstrap.com/docs" 39 | description: "Our previous major release with its minor releases. Last update was v4.6.0." 40 | versions: 41 | - v: "4.0" 42 | - v: "4.1" 43 | - v: "4.2" 44 | - v: "4.3" 45 | - v: "4.4" 46 | - v: "4.5" 47 | - v: "4.6" 48 | 49 | - group: v5.x 50 | baseurl: "https://getbootstrap.com/docs" 51 | description: "Current major release. Last update was v5.1.3." 52 | versions: 53 | - v: "5.0" 54 | - v: "5.1" 55 | -------------------------------------------------------------------------------- /site/data/grays.yml: -------------------------------------------------------------------------------- 1 | - name: 100 2 | hex: "#f8f9fa" 3 | - name: 200 4 | hex: "#e9ecef" 5 | - name: 300 6 | hex: "#dee2e6" 7 | - name: 400 8 | hex: "#ced4da" 9 | - name: 500 10 | hex: "#adb5bd" 11 | - name: 600 12 | hex: "#868e96" 13 | - name: 700 14 | hex: "#495057" 15 | - name: 800 16 | hex: "#343a40" 17 | - name: 900 18 | hex: "#212529" 19 | -------------------------------------------------------------------------------- /site/data/icons.yml: -------------------------------------------------------------------------------- 1 | preferred: 2 | - name: Font Awesome 3 | website: https://fontawesome.com/ 4 | - name: Feather 5 | website: https://feathericons.com/ 6 | - name: Octicons 7 | website: https://octicons.github.com/ 8 | 9 | more: 10 | - name: Bytesize 11 | website: https://github.com/danklammer/bytesize-icons 12 | - name: CoreUI Icons 13 | website: https://icons.coreui.io/ 14 | - name: Google Material icons 15 | website: https://material.io/resources/icons/ 16 | - name: Ionicons 17 | website: https://ionicons.com/ 18 | - name: Dripicons 19 | website: http://demo.amitjakhu.com/dripicons/ 20 | - name: Ikons 21 | website: http://ikons.piotrkwiatkowski.co.uk/ 22 | - name: Icons8 23 | website: https://icons8.com/ 24 | - name: icofont 25 | website: https://icofont.com/ 26 | - name: Octicons 27 | website: https://primer.style/octicons/ 28 | -------------------------------------------------------------------------------- /site/data/theme-colors.yml: -------------------------------------------------------------------------------- 1 | - name: primary 2 | hex: "#0d6efd" 3 | - name: secondary 4 | hex: "#6c757d" 5 | - name: success 6 | hex: "#28a745" 7 | - name: danger 8 | hex: "#dc3545" 9 | - name: warning 10 | hex: "#ffc107" 11 | contrast_color: dark 12 | - name: info 13 | hex: "#17a2b8" 14 | contrast_color: dark 15 | - name: light 16 | hex: "#f8f9fa" 17 | contrast_color: dark 18 | - name: dark 19 | hex: "#343a40" 20 | -------------------------------------------------------------------------------- /site/data/translations.yml: -------------------------------------------------------------------------------- 1 | - name: العربية 2 | code: ar 3 | description: Bootstrap 5 باللغة العربية 4 | url: https://bootstrap.mahdi.style/ 5 | 6 | - name: 中文(繁體) 7 | code: zh-tw 8 | description: Bootstrap 4 繁體中文手冊 9 | url: https://bootstrap.hexschool.com/ 10 | 11 | - name: Chinese 12 | code: zh 13 | description: Bootstrap 4 · 全球最流行的 HTML、CSS 和 JS 工具库。 14 | url: https://code.z01.com/v4/ 15 | 16 | - name: Brazilian Portuguese 17 | code: pt-BR 18 | description: Bootstrap 4 Português do Brasil 19 | url: https://getbootstrap.com.br/v4/ 20 | 21 | - name: Japanese 22 | code: ja 23 | description: Bootstrap 4 日本語リファレンス 24 | url: https://getbootstrap.jp/ 25 | 26 | - name: Russian 27 | code: ru 28 | description: Bootstrap 5 на русском 29 | url: https://getbootstrap.su/ 30 | 31 | - name: Korean 32 | code: ko 33 | description: Bootstrap 5 한국어 문서 34 | url: https://getbootstrap.kr/ 35 | 36 | - name: 中文(繁體) 37 | code: zh-tw 38 | description: Bootstrap 5 繁體中文手冊 39 | url: https://bootstrap5.hexschool.com/ 40 | 41 | - name: Simplified Chinese 42 | code: zh-CN 43 | description: Bootstrap 5 中文文档 44 | url: https://v5.bootcss.com/ 45 | -------------------------------------------------------------------------------- /site/layouts/_default/404.html: -------------------------------------------------------------------------------- 1 | {{ define "body_override" }}{{ end }} 2 | {{ define "main" }} 3 |
4 | {{ .Content }} 5 |
6 | {{ end }} 7 | -------------------------------------------------------------------------------- /site/layouts/_default/baseof.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ partial "header" . }} 5 | 6 | {{ block "body_override" . }}{{ end }} 7 | {{ partial "skippy" . }} 8 | 9 | {{ partial "docs-navbar" . }} 10 | 11 | {{ block "main" . }} 12 | {{ end }} 13 | 14 | {{ partial "footer" . }} 15 | {{ partial "scripts" . }} 16 | 17 | {{ block "footer" . }} 18 | {{ end }} 19 | 20 | 21 | -------------------------------------------------------------------------------- /site/layouts/_default/home.html: -------------------------------------------------------------------------------- 1 | {{ define "main" }} 2 |
3 | {{ partial "home/masthead" . }} 4 | {{ partial "home/masthead-followup" . }} 5 |
6 | 7 | {{ .Content }} 8 | {{ end }} 9 | -------------------------------------------------------------------------------- /site/layouts/_default/redirect.html: -------------------------------------------------------------------------------- 1 | {{ partial "redirect" (.Page.Params.redirect | absURL) }} 2 | -------------------------------------------------------------------------------- /site/layouts/alias.html: -------------------------------------------------------------------------------- 1 | {{ partial "redirect" .Permalink }} 2 | -------------------------------------------------------------------------------- /site/layouts/partials/ads.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /site/layouts/partials/analytics.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | -------------------------------------------------------------------------------- /site/layouts/partials/callout-danger-async-methods.md: -------------------------------------------------------------------------------- 1 | #### Asynchronous methods and transitions 2 | 3 | All API methods are **asynchronous** and start a **transition**. They return to the caller as soon as the transition is started but **before it ends**. In addition, a method call on a **transitioning component will be ignored**. 4 | 5 | [See our JavaScript documentation for more information](/docs/{{ .Site.Params.docs_version }}/getting-started/javascript/#asynchronous-functions-and-transitions). 6 | -------------------------------------------------------------------------------- /site/layouts/partials/callout-info-mediaqueries-breakpoints.md: -------------------------------------------------------------------------------- 1 | **Why subtract .02px?** Browsers don't currently support [range context queries](https://www.w3.org/TR/mediaqueries-4/#range-context), so we work around the limitations of [`min-` and `max-` prefixes](https://www.w3.org/TR/mediaqueries-4/#mq-min-max) and viewports with fractional widths (which can occur under certain conditions on high-dpi devices, for instance) by using values with higher precision. 2 | -------------------------------------------------------------------------------- /site/layouts/partials/callout-info-npm-starter.md: -------------------------------------------------------------------------------- 1 | **Get started with Bootstrap via npm with our starter project!** Head to the [twbs/bootstrap-npm-starter](https://github.com/twbs/bootstrap-npm-starter) template repository to see how to build and customize Bootstrap in your own npm project. Includes Sass compiler, Autoprefixer, Stylelint, PurgeCSS, and Bootstrap Icons. 2 | -------------------------------------------------------------------------------- /site/layouts/partials/callout-info-prefersreducedmotion.md: -------------------------------------------------------------------------------- 1 | The animation effect of this component is dependent on the `prefers-reduced-motion` media query. See the [reduced motion section of our accessibility documentation](/docs/{{ .Site.Params.docs_version }}/getting-started/accessibility/#reduced-motion). 2 | -------------------------------------------------------------------------------- /site/layouts/partials/callout-info-sanitizer.md: -------------------------------------------------------------------------------- 1 | By default, this component uses the built-in content sanitizer, which strips out any HTML elements that are not explicitly allowed. See the [sanitizer section in our JavaScript documentation](/docs/{{ .Site.Params.docs_version }}/getting-started/javascript/#sanitizer) for more details. 2 | -------------------------------------------------------------------------------- /site/layouts/partials/callout-warning-color-assistive-technologies.md: -------------------------------------------------------------------------------- 1 | ##### Conveying meaning to assistive technologies 2 | 3 | Using color to add meaning only provides a visual indication, which will not be conveyed to users of assistive technologies – such as screen readers. Ensure that information denoted by the color is either obvious from the content itself (e.g. the visible text), or is included through alternative means, such as additional text hidden with the `.visually-hidden` class. 4 | -------------------------------------------------------------------------------- /site/layouts/partials/callout-warning-input-support.md: -------------------------------------------------------------------------------- 1 | ##### Date & color input support 2 | 3 | Keep in mind date inputs are [not fully supported](https://caniuse.com/input-datetime) by all browsers, namely Safari. 4 | -------------------------------------------------------------------------------- /site/layouts/partials/docs-subnav.html: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /site/layouts/partials/docs-versions.html: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /site/layouts/partials/favicons.html: -------------------------------------------------------------------------------- 1 | {{ "" | safeHTML }} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /site/layouts/partials/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {{ if .IsHome }}{{ .Site.Title | markdownify }} · {{ .Site.Params.description | markdownify }}{{ else }}{{ .Title | markdownify }} · {{ .Site.Title | markdownify }} v{{ .Site.Params.docs_version }}{{ end }} 11 | 12 | 13 | 14 | {{ with .Params.robots -}} 15 | 16 | {{- end }} 17 | 18 | {{ partial "stylesheet" . }} 19 | {{ partial "favicons" . }} 20 | {{ partial "social" . }} 21 | {{ partial "analytics" . }} 22 | -------------------------------------------------------------------------------- /site/layouts/partials/icons/bootstrap-logo-solid.svg: -------------------------------------------------------------------------------- 1 | {{ with .title }}{{ . }}{{ else }}Bootstrap{{ end }} 2 | -------------------------------------------------------------------------------- /site/layouts/partials/icons/bootstrap-white-fill.svg: -------------------------------------------------------------------------------- 1 | {{ with .title }}{{ . }}{{ else }}Bootstrap{{ end }} -------------------------------------------------------------------------------- /site/layouts/partials/icons/bootstrap.svg: -------------------------------------------------------------------------------- 1 | {{ with .title }}{{ . }}{{ else }}Bootstrap{{ end }} -------------------------------------------------------------------------------- /site/layouts/partials/icons/circle-square.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /site/layouts/partials/icons/cloud-fill.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /site/layouts/partials/icons/code.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /site/layouts/partials/icons/collapse.svg: -------------------------------------------------------------------------------- 1 | 2 | {{ with .title }}{{ . }}{{ else }}Collapse{{ end }} 3 | 4 | 5 | -------------------------------------------------------------------------------- /site/layouts/partials/icons/droplet-fill.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /site/layouts/partials/icons/expand.svg: -------------------------------------------------------------------------------- 1 | 2 | {{ with .title }}{{ . }}{{ else }}Expand{{ end }} 3 | 4 | 5 | -------------------------------------------------------------------------------- /site/layouts/partials/icons/github.svg: -------------------------------------------------------------------------------- 1 | {{ with .title }}{{ . }}{{ else }}GitHub{{ end }} -------------------------------------------------------------------------------- /site/layouts/partials/icons/hamburger.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /site/layouts/partials/icons/list.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /site/layouts/partials/icons/menu.svg: -------------------------------------------------------------------------------- 1 | {{ with .title }}{{ . }}{{ else }}Menu{{ end }} -------------------------------------------------------------------------------- /site/layouts/partials/icons/opencollective.svg: -------------------------------------------------------------------------------- 1 | {{ with .title }}{{ . }}{{ else }}Open Collective{{ end }} -------------------------------------------------------------------------------- /site/layouts/partials/icons/slack.svg: -------------------------------------------------------------------------------- 1 | {{ with .title }}{{ . }}{{ else }}Slack{{ end }} -------------------------------------------------------------------------------- /site/layouts/partials/icons/twitter.svg: -------------------------------------------------------------------------------- 1 | {{ with .title }}{{ . }}{{ else }}Twitter{{ end }} -------------------------------------------------------------------------------- /site/layouts/partials/redirect.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{ . }} 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /site/layouts/partials/scripts.html: -------------------------------------------------------------------------------- 1 | {{ if eq hugo.Environment "production" -}} 2 | 3 | {{ else -}} 4 | 5 | {{- end }} 6 | 7 | {{ if eq .Page.Layout "docs" -}} 8 | 9 | {{- end }} 10 | 11 | {{- $vendor := resources.Match "js/vendor/*.js" -}} 12 | {{- $js := resources.Match "js/*.js" -}} 13 | {{- $targetDocsJSPath := path.Join "/docs" .Site.Params.docs_version "assets/js/docs.js" -}} 14 | {{- $docsJs := append $js $vendor | resources.Concat $targetDocsJSPath -}} 15 | 16 | {{- if eq hugo.Environment "production" -}} 17 | {{- $docsJs = $docsJs | resources.Minify -}} 18 | {{- end }} 19 | 20 | 21 | -------------------------------------------------------------------------------- /site/layouts/partials/skippy.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | Skip to main content 4 | {{ if (eq .Page.Layout "docs") -}} 5 | Skip to docs navigation 6 | {{- end }} 7 |
8 |
9 | -------------------------------------------------------------------------------- /site/layouts/partials/social.html: -------------------------------------------------------------------------------- 1 | {{ "" | safeHTML }} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | {{ "" | safeHTML }} 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /site/layouts/partials/stylesheet.html: -------------------------------------------------------------------------------- 1 | {{- "" | safeHTML }} 2 | {{ if eq hugo.Environment "production" -}} 3 | {{ if eq .Page.Params.direction "rtl" -}} 4 | 5 | {{- else -}} 6 | 7 | {{- end -}} 8 | {{- else -}} 9 | 10 | {{- end }} 11 | 12 | {{- if (ne .Page.Layout "examples") }} 13 | {{- $targetDocsCssPath := path.Join "/docs" .Site.Params.docs_version "assets/css/docs.css" -}} 14 | {{- $sassOptions := dict "targetPath" $targetDocsCssPath "outputStyle" "expanded" "precision" 6 -}} 15 | {{- $postcssOptions := dict "use" "autoprefixer" "noMap" true -}} 16 | 17 | {{ if eq hugo.Environment "production" -}} 18 | {{- $sassOptions = merge $sassOptions (dict "outputStyle" "compressed") -}} 19 | {{- end -}} 20 | 21 | {{- $style := resources.Get "scss/docs.scss" | toCSS $sassOptions | postCSS $postcssOptions }} 22 | 23 | 24 | {{- end }} 25 | -------------------------------------------------------------------------------- /site/layouts/partials/table-content.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 4 | First 5 | Last 6 | Handle 7 | 8 | 9 | 10 | 11 | 1 12 | Mark 13 | Otto 14 | @mdo 15 | 16 | 17 | 2 18 | Jacob 19 | Thornton 20 | @fat 21 | 22 | 23 | 3 24 | Larry the Bird 25 | @twitter 26 | 27 | 28 | -------------------------------------------------------------------------------- /site/layouts/robots.txt: -------------------------------------------------------------------------------- 1 | # www.robotstxt.org 2 | 3 | {{- $isProduction := eq hugo.Environment "production" -}} 4 | {{- $isNetlify := eq (getenv "NETLIFY") "true" -}} 5 | {{- $allowCrawling := and (not $isNetlify) $isProduction -}} 6 | 7 | {{ if $allowCrawling }} 8 | # Allow crawling of all content 9 | {{- end }} 10 | User-agent: * 11 | Disallow:{{ if not $allowCrawling }} /{{ end }} 12 | Sitemap: {{ "/sitemap.xml" | absURL }} 13 | -------------------------------------------------------------------------------- /site/layouts/shortcodes/bs-table.html: -------------------------------------------------------------------------------- 1 | {{- /* 2 | Usage: `bs-table "class class-foo"`, where class can be any string 3 | */ -}} 4 | 5 | {{- $css_class := .Get 0 | default "table" -}} 6 | {{- $html_table := .Inner | markdownify -}} 7 | {{- $html_table = replace $html_table "" (printf `
` $css_class) -}} 8 | {{- $html_table | safeHTML -}} 9 | -------------------------------------------------------------------------------- /site/layouts/shortcodes/callout.html: -------------------------------------------------------------------------------- 1 | {{- /* 2 | Usage: `callout "type"`, where `type` is one of info (default), danger, or warning 3 | */ -}} 4 | 5 | {{- $css_class := .Get 0 | default "info" -}} 6 | 7 |
8 | {{ .Inner | markdownify }} 9 |
10 | -------------------------------------------------------------------------------- /site/layouts/shortcodes/docsref.html: -------------------------------------------------------------------------------- 1 | {{- relref . ((path.Join "docs" $.Site.Params.docs_version (.Get 0)) | relURL) -}} 2 | -------------------------------------------------------------------------------- /site/layouts/shortcodes/example.html: -------------------------------------------------------------------------------- 1 | {{- /* 2 | Usage: `example args` 3 | 4 | `args` are all optional and can be one of the following: 5 | * id: the `div`'s id - default: "" 6 | * class: any extra class(es) to be added to the `div` - default: "" 7 | * show_preview: if the preview should be output in the HTML - default: `true` 8 | * show_markup: if the markup should be output in the HTML - default: `true` 9 | */ -}} 10 | 11 | {{- $id := .Get "id" -}} 12 | {{- $class := .Get "class" -}} 13 | {{- $lang := .Get "lang" | default "html" -}} 14 | {{- $show_preview := .Get "show_preview" | default true -}} 15 | {{- $show_markup := .Get "show_markup" | default true -}} 16 | {{- $input := .Inner -}} 17 | 18 | {{- if eq $show_preview true -}} 19 | 20 | {{- $input -}} 21 | 22 | {{- end -}} 23 | 24 | {{- if eq $show_markup true -}} 25 | {{- $content := replaceRE `\n` `...` $input -}} 26 | {{- $content = replaceRE ` (class=" *?")` "" $content -}} 27 | {{- highlight (trim $content "\n") $lang "" -}} 28 | {{- end -}} 29 | -------------------------------------------------------------------------------- /site/layouts/shortcodes/js-dismiss.html: -------------------------------------------------------------------------------- 1 | {{- /* Usage: js-dismiss "ComponentName" */ -}} 2 | 3 | {{- $name := .Get 0 -}} 4 | 5 | Dismissal can be achieved with the `data` attribute on a button **within the {{ $name }}** as demonstrated below: 6 | 7 | ```html 8 | 9 | ``` 10 | 11 | or on a button **outside the {{ $name }}** using the `data-bs-target` as demonstrated below: 12 | 13 | ```html 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /site/layouts/shortcodes/markdown.html: -------------------------------------------------------------------------------- 1 | {{- .Inner | markdownify -}} 2 | -------------------------------------------------------------------------------- /site/layouts/shortcodes/param.html: -------------------------------------------------------------------------------- 1 | {{- /* 2 | Work around wrong escapes in integrity attributes. 3 | Original: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/shortcodes/param.html 4 | */ -}} 5 | 6 | {{- $name := .Get 0 -}} 7 | {{- with $name -}} 8 | {{- $value := $.Page.Param . -}} 9 | {{- /* If any parameter ends with `_hash`, mark the string as safe HTML */ -}} 10 | {{- if (strings.HasSuffix $name "_hash") -}} 11 | {{- $value = $value | safeHTML -}} 12 | {{- end -}} 13 | {{- with $value }}{{ . }}{{ else }}{{ errorf "Param %q not found: %s" $name $.Position }}{{ end -}} 14 | {{- else }}{{ errorf "Missing param key: %s" $.Position }}{{ end -}} 15 | -------------------------------------------------------------------------------- /site/layouts/shortcodes/partial.html: -------------------------------------------------------------------------------- 1 | {{ partial (.Get 0) . }} 2 | -------------------------------------------------------------------------------- /site/layouts/shortcodes/scss-docs.html: -------------------------------------------------------------------------------- 1 | {{- /* 2 | Usage: `scss-docs name="name" file="file/_location.scss"` 3 | 4 | Prints everything between `// scss-docs-start "name"` and `// scss-docs-end "name"` 5 | comments in the docs. 6 | 7 | Optional parameters: 8 | * strip-default: Remove the ` !default` flag from variable assignments - default: `true` 9 | */ -}} 10 | 11 | {{- $name := .Get "name" -}} 12 | {{- $file := .Get "file" -}} 13 | {{- $strip_default := .Get "strip-default" | default "true" -}} 14 | 15 | {{- /* If any parameters are missing, print an error and exit */ -}} 16 | {{- if or (not $name) (not $file) -}} 17 | {{- errorf "%s: %q: Missing required parameters! Got: name=%q file=%q!" .Position .Name $name $file -}} 18 | {{- else -}} 19 | {{- $capture_start := printf "// scss-docs-start %s\n" $name -}} 20 | {{- $capture_end := printf "// scss-docs-end %s" $name -}} 21 | {{- $regex := printf `%s((?:.|\n)*)%s` $capture_start $capture_end -}} 22 | 23 | {{- /* 24 | TODO: figure out why we can't do the following and get the first group (the only capturing one)... 25 | $regex := printf `(?:// scss-docs-start %s\n)((?:.|\n)*)(?:\n// scss-docs-end %s)` $name $name 26 | */ -}} 27 | 28 | {{- $match := findRE $regex (readFile $file) -}} 29 | {{- $match = index $match 0 -}} 30 | 31 | {{- if not $match -}} 32 | {{- errorf "%s: %q: Got no matches for name=%q in file=%q!" .Position .Name $name $file -}} 33 | {{- end -}} 34 | 35 | {{- $match = replace $match $capture_start "" -}} 36 | {{- $match = replace $match $capture_end "" -}} 37 | 38 | {{- if (ne $strip_default "false") -}} 39 | {{- $match = replace $match " !default" "" -}} 40 | {{- end -}} 41 | 42 | {{- highlight $match "scss" "" -}} 43 | {{- end -}} 44 | -------------------------------------------------------------------------------- /site/layouts/shortcodes/table.html: -------------------------------------------------------------------------------- 1 | {{- /* 2 | Usage: `table [args]` 3 | 4 | `args` are optional and can be one of the following: 5 | * class: any class(es) to be added to the `table` - default "" 6 | * simplified: show a simplified version in the examples - default `true` 7 | */ -}} 8 | 9 | {{- $class := .Get "class" -}} 10 | {{- $simplified := .Get "simplified" | default true -}} 11 | 12 | {{- $table_attributes := "" -}} 13 | {{- $table_content := " ...\n" -}} 14 | 15 | {{- with $class -}} 16 | {{- $table_attributes = printf ` class="%s"` . -}} 17 | {{- end -}} 18 | 19 | {{- if eq $simplified "false" -}} 20 | {{- $table_content = partialCached "table-content" . -}} 21 | {{- end -}} 22 | 23 | {{- $table := printf "\n%s
" $table_attributes $table_content -}} 24 | 25 |
26 | 27 | {{ partialCached "table-content" . }} 28 | 29 |
30 | 31 | {{- highlight $table "html" "" -}} 32 | -------------------------------------------------------------------------------- /site/layouts/shortcodes/year.html: -------------------------------------------------------------------------------- 1 | {{- /* Outputs the current year */ -}} 2 | 3 | {{- now.Format "2006" -}} 4 | -------------------------------------------------------------------------------- /site/layouts/sitemap.xml: -------------------------------------------------------------------------------- 1 | {{ printf "" | safeHTML }} 2 | 3 | {{- range .Data.Pages -}}{{ if and .Permalink (ne .Params.sitemap_exclude true) }} 4 | 5 | {{ .Permalink }}{{ if not .Lastmod.IsZero }} 6 | {{ safeHTML (.Lastmod.Format "2006-01-02T15:04:05-07:00") }}{{ end }}{{ with .Sitemap.ChangeFreq }} 7 | {{ . }}{{ end }}{{ if ge .Sitemap.Priority 0.0 }} 8 | {{ .Sitemap.Priority }}{{ end }}{{ if .IsTranslated }}{{ range .Translations }} 9 | {{ end }} 10 | {{ end }} 11 | {{ end }}{{ end }} 12 | 13 | -------------------------------------------------------------------------------- /site/static/CNAME: -------------------------------------------------------------------------------- 1 | getbootstrap.com 2 | -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/brand/bootstrap-logo-black.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/brand/bootstrap-logo-shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/brand/bootstrap-logo-shadow.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/brand/bootstrap-logo-white.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/brand/bootstrap-social-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/brand/bootstrap-social-logo.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/brand/bootstrap-social.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/brand/bootstrap-social.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/bootstrap-icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/bootstrap-icons.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/bootstrap-icons@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/bootstrap-icons@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/bootstrap-themes-collage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/bootstrap-themes-collage.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/bootstrap-themes-collage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/bootstrap-themes-collage@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/bootstrap-themes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/bootstrap-themes.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/bootstrap-themes@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/bootstrap-themes@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/album-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/album-rtl.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/album-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/album-rtl@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/album.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/album.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/album@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/album@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/blog-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/blog-rtl.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/blog-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/blog-rtl@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/blog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/blog.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/blog@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/blog@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/carousel-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/carousel-rtl.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/carousel-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/carousel-rtl@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/carousel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/carousel.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/carousel@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/carousel@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/cheatsheet-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/cheatsheet-rtl.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/cheatsheet-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/cheatsheet-rtl@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/cheatsheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/cheatsheet.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/cheatsheet@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/cheatsheet@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/checkout-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/checkout-rtl.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/checkout-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/checkout-rtl@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/checkout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/checkout.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/checkout@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/checkout@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/cover.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/cover@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/cover@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/dashboard-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/dashboard-rtl.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/dashboard-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/dashboard-rtl@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/dashboard.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/dashboard@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/dashboard@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/dropdowns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/dropdowns.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/dropdowns@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/dropdowns@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/features.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/features.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/features@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/features@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/footers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/footers.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/footers@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/footers@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/grid.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/grid@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/grid@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/headers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/headers.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/headers@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/headers@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/heroes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/heroes.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/heroes@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/heroes@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/jumbotron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/jumbotron.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/jumbotron@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/jumbotron@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/list-groups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/list-groups.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/list-groups@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/list-groups@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/masonry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/masonry.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/masonry@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/masonry@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/modals.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/modals.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/modals@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/modals@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/navbar-bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/navbar-bottom.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/navbar-bottom@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/navbar-bottom@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/navbar-fixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/navbar-fixed.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/navbar-fixed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/navbar-fixed@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/navbar-static.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/navbar-static.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/navbar-static@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/navbar-static@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/navbars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/navbars.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/navbars@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/navbars@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/offcanvas-navbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/offcanvas-navbar.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/offcanvas-navbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/offcanvas-navbar@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/pricing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/pricing.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/pricing@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/pricing@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/product.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/product.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/product@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/product@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/sidebars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/sidebars.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/sidebars@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/sidebars@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/sign-in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/sign-in.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/sign-in@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/sign-in@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/starter-template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/starter-template.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/starter-template@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/starter-template@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/sticky-footer-navbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/sticky-footer-navbar.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/sticky-footer-navbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/sticky-footer-navbar@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/sticky-footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/sticky-footer.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/examples/sticky-footer@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/examples/sticky-footer@2x.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/favicons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/favicons/android-chrome-192x192.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/favicons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/favicons/android-chrome-512x512.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/favicons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/favicons/apple-touch-icon.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinSSJ3/bootstrap/98889f214489dc3c04375a8bbb9979020882f2cc/site/static/docs/5.1/assets/img/favicons/favicon.ico -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/favicons/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Bootstrap", 3 | "short_name": "Bootstrap", 4 | "icons": [ 5 | { 6 | "src": "android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "start_url": "/?utm_source=a2hs", 17 | "theme_color": "#7952b3", 18 | "background_color": "#7952b3", 19 | "display": "standalone" 20 | } 21 | -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/img/favicons/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /site/static/docs/5.1/assets/js/validate-forms.js: -------------------------------------------------------------------------------- 1 | // Example starter JavaScript for disabling form submissions if there are invalid fields 2 | (function () { 3 | 'use strict' 4 | 5 | // Fetch all the forms we want to apply custom Bootstrap validation styles to 6 | var forms = document.querySelectorAll('.needs-validation') 7 | 8 | // Loop over them and prevent submission 9 | Array.prototype.slice.call(forms) 10 | .forEach(function (form) { 11 | form.addEventListener('submit', function (event) { 12 | if (!form.checkValidity()) { 13 | event.preventDefault() 14 | event.stopPropagation() 15 | } 16 | 17 | form.classList.add('was-validated') 18 | }, false) 19 | }) 20 | })() 21 | -------------------------------------------------------------------------------- /site/static/sw.js: -------------------------------------------------------------------------------- 1 | // NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT 2 | // IT'S ALL JUST JUNK FOR OUR DOCS! 3 | // ++++++++++++++++++++++++++++++++++++++++++ 4 | 5 | (function () { 6 | 'use strict' 7 | 8 | if ('serviceWorker' in navigator) { 9 | window.addEventListener('load', function () { 10 | navigator.serviceWorker.getRegistrations().then(function (registrations) { 11 | for (var registration of registrations) { 12 | registration.unregister() 13 | .then(function () { 14 | return self.clients.matchAll() 15 | }) 16 | .then(function (clients) { 17 | clients.forEach(function (client) { 18 | if (client.url && 'navigate' in client) { 19 | client.navigate(client.url) 20 | } 21 | }) 22 | }) 23 | } 24 | }) 25 | }) 26 | } 27 | })() 28 | --------------------------------------------------------------------------------