Merging upstream version 5.3.3+dfsg.
Signed-off-by: Daniel Baumann <daniel@debian.org>
|
@ -40,6 +40,7 @@
|
||||||
"dropright",
|
"dropright",
|
||||||
"dropstart",
|
"dropstart",
|
||||||
"dropup",
|
"dropup",
|
||||||
|
"dgst",
|
||||||
"errorf",
|
"errorf",
|
||||||
"favicon",
|
"favicon",
|
||||||
"favicons",
|
"favicons",
|
||||||
|
|
|
@ -51,6 +51,7 @@
|
||||||
"SwitchCase": 1
|
"SwitchCase": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"logical-assignment-operators": "off",
|
||||||
"max-params": [
|
"max-params": [
|
||||||
"warn",
|
"warn",
|
||||||
5
|
5
|
||||||
|
@ -75,6 +76,7 @@
|
||||||
"error",
|
"error",
|
||||||
"after"
|
"after"
|
||||||
],
|
],
|
||||||
|
"prefer-object-has-own": "off",
|
||||||
"prefer-template": "error",
|
"prefer-template": "error",
|
||||||
"semi": [
|
"semi": [
|
||||||
"error",
|
"error",
|
||||||
|
@ -108,7 +110,7 @@
|
||||||
"node": true
|
"node": true
|
||||||
},
|
},
|
||||||
"parserOptions": {
|
"parserOptions": {
|
||||||
"sourceType": "script"
|
"sourceType": "module"
|
||||||
},
|
},
|
||||||
"rules": {
|
"rules": {
|
||||||
"no-console": "off",
|
"no-console": "off",
|
||||||
|
|
6
.github/workflows/browserstack.yml
vendored
|
@ -9,7 +9,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FORCE_COLOR: 2
|
FORCE_COLOR: 2
|
||||||
NODE: 18
|
NODE: 20
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
@ -22,12 +22,12 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "${{ env.NODE }}"
|
node-version: "${{ env.NODE }}"
|
||||||
cache: npm
|
cache: npm
|
||||||
|
|
6
.github/workflows/bundlewatch.yml
vendored
|
@ -9,7 +9,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FORCE_COLOR: 2
|
FORCE_COLOR: 2
|
||||||
NODE: 18
|
NODE: 20
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
@ -20,12 +20,12 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "${{ env.NODE }}"
|
node-version: "${{ env.NODE }}"
|
||||||
cache: npm
|
cache: npm
|
||||||
|
|
10
.github/workflows/calibreapp-image-actions.yml
vendored
|
@ -8,15 +8,21 @@ on:
|
||||||
- '**.png'
|
- '**.png'
|
||||||
- '**.webp'
|
- '**.webp'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
# Only run on Pull Requests within the same repository, and not from forks.
|
# Only run on Pull Requests within the same repository, and not from forks.
|
||||||
if: github.event.pull_request.head.repo.full_name == github.repository
|
if: github.event.pull_request.head.repo.full_name == github.repository
|
||||||
name: calibreapp/image-actions
|
name: calibreapp/image-actions
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
# allow calibreapp/image-actions to update PRs
|
||||||
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Clone repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
|
8
.github/workflows/codeql.yml
vendored
|
@ -24,21 +24,21 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v2
|
uses: github/codeql-action/init@v3
|
||||||
with:
|
with:
|
||||||
config-file: ./.github/codeql/codeql-config.yml
|
config-file: ./.github/codeql/codeql-config.yml
|
||||||
languages: "javascript"
|
languages: "javascript"
|
||||||
queries: +security-and-quality
|
queries: +security-and-quality
|
||||||
|
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v2
|
uses: github/codeql-action/autobuild@v3
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v2
|
uses: github/codeql-action/analyze@v3
|
||||||
with:
|
with:
|
||||||
category: "/language:javascript"
|
category: "/language:javascript"
|
||||||
|
|
4
.github/workflows/cspell.yml
vendored
|
@ -23,12 +23,12 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Run cspell
|
- name: Run cspell
|
||||||
uses: streetsidesoftware/cspell-action@v2
|
uses: streetsidesoftware/cspell-action@v5
|
||||||
with:
|
with:
|
||||||
config: ".cspell.json"
|
config: ".cspell.json"
|
||||||
files: "**/*.md"
|
files: "**/*.md"
|
||||||
|
|
6
.github/workflows/css.yml
vendored
|
@ -9,7 +9,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FORCE_COLOR: 2
|
FORCE_COLOR: 2
|
||||||
NODE: 18
|
NODE: 20
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
@ -20,12 +20,12 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "${{ env.NODE }}"
|
node-version: "${{ env.NODE }}"
|
||||||
cache: npm
|
cache: npm
|
||||||
|
|
6
.github/workflows/docs.yml
vendored
|
@ -9,7 +9,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FORCE_COLOR: 2
|
FORCE_COLOR: 2
|
||||||
NODE: 18
|
NODE: 20
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
@ -20,12 +20,12 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "${{ env.NODE }}"
|
node-version: "${{ env.NODE }}"
|
||||||
cache: npm
|
cache: npm
|
||||||
|
|
7
.github/workflows/js.yml
vendored
|
@ -9,7 +9,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FORCE_COLOR: 2
|
FORCE_COLOR: 2
|
||||||
NODE: 18
|
NODE: 20
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
@ -25,12 +25,12 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: ${{ env.NODE }}
|
node-version: ${{ env.NODE }}
|
||||||
cache: npm
|
cache: npm
|
||||||
|
@ -46,6 +46,7 @@ jobs:
|
||||||
|
|
||||||
- name: Run Coveralls
|
- name: Run Coveralls
|
||||||
uses: coverallsapp/github-action@v2
|
uses: coverallsapp/github-action@v2
|
||||||
|
if: ${{ !github.event.repository.fork }}
|
||||||
with:
|
with:
|
||||||
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
path-to-lcov: "./js/coverage/lcov.info"
|
path-to-lcov: "./js/coverage/lcov.info"
|
||||||
|
|
6
.github/workflows/lint.yml
vendored
|
@ -9,7 +9,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FORCE_COLOR: 2
|
FORCE_COLOR: 2
|
||||||
NODE: 18
|
NODE: 20
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
@ -20,12 +20,12 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "${{ env.NODE }}"
|
node-version: "${{ env.NODE }}"
|
||||||
cache: npm
|
cache: npm
|
||||||
|
|
6
.github/workflows/node-sass.yml
vendored
|
@ -9,7 +9,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FORCE_COLOR: 2
|
FORCE_COLOR: 2
|
||||||
NODE: 18
|
NODE: 20
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
@ -20,12 +20,12 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "${{ env.NODE }}"
|
node-version: "${{ env.NODE }}"
|
||||||
|
|
||||||
|
|
2
.github/workflows/release-notes.yml
vendored
|
@ -18,6 +18,6 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.repository == 'twbs/bootstrap'
|
if: github.repository == 'twbs/bootstrap'
|
||||||
steps:
|
steps:
|
||||||
- uses: release-drafter/release-drafter@v5
|
- uses: release-drafter/release-drafter@v6
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
2
LICENSE
|
@ -1,6 +1,6 @@
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) 2011-2023 The Bootstrap Authors
|
Copyright (c) 2011-2024 The Bootstrap Authors
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
14
README.md
|
@ -46,11 +46,11 @@ Our default branch is for development of our Bootstrap 5 release. Head to the [`
|
||||||
|
|
||||||
Several quick start options are available:
|
Several quick start options are available:
|
||||||
|
|
||||||
- [Download the latest release](https://github.com/twbs/bootstrap/archive/v5.3.1.zip)
|
- [Download the latest release](https://github.com/twbs/bootstrap/archive/v5.3.3.zip)
|
||||||
- Clone the repo: `git clone https://github.com/twbs/bootstrap.git`
|
- Clone the repo: `git clone https://github.com/twbs/bootstrap.git`
|
||||||
- Install with [npm](https://www.npmjs.com/): `npm install bootstrap@v5.3.1`
|
- Install with [npm](https://www.npmjs.com/): `npm install bootstrap@v5.3.3`
|
||||||
- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@v5.3.1`
|
- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@v5.3.3`
|
||||||
- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:5.3.1`
|
- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:5.3.3`
|
||||||
- Install with [NuGet](https://www.nuget.org/): CSS: `Install-Package bootstrap` Sass: `Install-Package bootstrap.sass`
|
- Install with [NuGet](https://www.nuget.org/): CSS: `Install-Package bootstrap` Sass: `Install-Package bootstrap.sass`
|
||||||
|
|
||||||
Read the [Getting started page](https://getbootstrap.com/docs/5.3/getting-started/introduction/) for information on the framework contents, templates, examples, and more.
|
Read the [Getting started page](https://getbootstrap.com/docs/5.3/getting-started/introduction/) for information on the framework contents, templates, examples, and more.
|
||||||
|
@ -69,7 +69,6 @@ Read the [Getting started page](https://getbootstrap.com/docs/5.3/getting-starte
|
||||||
[](https://github.com/twbs/bootstrap/blob/main/dist/css/bootstrap.min.css)
|
[](https://github.com/twbs/bootstrap/blob/main/dist/css/bootstrap.min.css)
|
||||||
[](https://github.com/twbs/bootstrap/blob/main/dist/js/bootstrap.min.js)
|
[](https://github.com/twbs/bootstrap/blob/main/dist/js/bootstrap.min.js)
|
||||||
[](https://github.com/twbs/bootstrap/blob/main/dist/js/bootstrap.min.js)
|
[](https://github.com/twbs/bootstrap/blob/main/dist/js/bootstrap.min.js)
|
||||||
[](https://www.browserstack.com/automate/public-build/SkxZcStBeExEdVJqQ2hWYnlWckpkNmNEY213SFp6WHFETWk2bGFuY3pCbz0tLXhqbHJsVlZhQnRBdEpod3NLSDMzaHc9PQ==--3d0b75245708616eb93113221beece33e680b229)
|
|
||||||
[](#backers)
|
[](#backers)
|
||||||
[](#sponsors)
|
[](#sponsors)
|
||||||
|
|
||||||
|
@ -177,7 +176,8 @@ Get updates on Bootstrap's development and chat with the project maintainers and
|
||||||
|
|
||||||
- Follow [@getbootstrap on Twitter](https://twitter.com/getbootstrap).
|
- Follow [@getbootstrap on Twitter](https://twitter.com/getbootstrap).
|
||||||
- Read and subscribe to [The Official Bootstrap Blog](https://blog.getbootstrap.com/).
|
- Read and subscribe to [The Official Bootstrap Blog](https://blog.getbootstrap.com/).
|
||||||
- Ask and explore [our GitHub Discussions](https://github.com/twbs/bootstrap/discussions).
|
- Ask questions and explore [our GitHub Discussions](https://github.com/twbs/bootstrap/discussions).
|
||||||
|
- Discuss, ask questions, and more on [the community Discord](https://discord.gg/bZUvakRU3M) or [Bootstrap subreddit](https://reddit.com/r/bootstrap).
|
||||||
- Chat with fellow Bootstrappers in IRC. On the `irc.libera.chat` server, in the `#bootstrap` channel.
|
- Chat with fellow Bootstrappers in IRC. On the `irc.libera.chat` server, in the `#bootstrap` channel.
|
||||||
- Implementation help may be found at Stack Overflow (tagged [`bootstrap-5`](https://stackoverflow.com/questions/tagged/bootstrap-5)).
|
- Implementation help may be found at Stack Overflow (tagged [`bootstrap-5`](https://stackoverflow.com/questions/tagged/bootstrap-5)).
|
||||||
- Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/browse/keyword/bootstrap) or similar delivery mechanisms for maximum discoverability.
|
- Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/browse/keyword/bootstrap) or similar delivery mechanisms for maximum discoverability.
|
||||||
|
@ -243,4 +243,4 @@ Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com
|
||||||
|
|
||||||
## Copyright and license
|
## Copyright and license
|
||||||
|
|
||||||
Code and documentation copyright 2011–2023 the [Bootstrap Authors](https://github.com/twbs/bootstrap/graphs/contributors). Code released under the [MIT License](https://github.com/twbs/bootstrap/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/).
|
Code and documentation copyright 2011–2024 the [Bootstrap Authors](https://github.com/twbs/bootstrap/graphs/contributors). Code released under the [MIT License](https://github.com/twbs/bootstrap/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/).
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
'use strict'
|
import fs from 'node:fs/promises'
|
||||||
|
import path from 'node:path'
|
||||||
|
import { fileURLToPath } from 'node:url'
|
||||||
|
|
||||||
const pkg = require('../package.json')
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||||
|
|
||||||
|
const pkgJson = path.join(__dirname, '../package.json')
|
||||||
|
const pkg = JSON.parse(await fs.readFile(pkgJson, 'utf8'))
|
||||||
|
|
||||||
const year = new Date().getFullYear()
|
const year = new Date().getFullYear()
|
||||||
|
|
||||||
|
@ -12,4 +17,4 @@ function getBanner(pluginFilename) {
|
||||||
*/`
|
*/`
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = getBanner
|
export default getBanner
|
|
@ -2,17 +2,19 @@
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Script to build our plugins to use them separately.
|
* Script to build our plugins to use them separately.
|
||||||
* Copyright 2020-2023 The Bootstrap Authors
|
* Copyright 2020-2024 The Bootstrap Authors
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'use strict'
|
import path from 'node:path'
|
||||||
|
import { fileURLToPath } from 'node:url'
|
||||||
|
import { babel } from '@rollup/plugin-babel'
|
||||||
|
import globby from 'globby'
|
||||||
|
import { rollup } from 'rollup'
|
||||||
|
import banner from './banner.mjs'
|
||||||
|
|
||||||
const path = require('node:path')
|
const __filename = fileURLToPath(import.meta.url)
|
||||||
const rollup = require('rollup')
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||||
const globby = require('globby')
|
|
||||||
const { babel } = require('@rollup/plugin-babel')
|
|
||||||
const banner = require('./banner.js')
|
|
||||||
|
|
||||||
const sourcePath = path.resolve(__dirname, '../js/src/').replace(/\\/g, '/')
|
const sourcePath = path.resolve(__dirname, '../js/src/').replace(/\\/g, '/')
|
||||||
const jsFiles = globby.sync(`${sourcePath}/**/*.js`)
|
const jsFiles = globby.sync(`${sourcePath}/**/*.js`)
|
||||||
|
@ -37,7 +39,7 @@ for (const file of jsFiles) {
|
||||||
const build = async plugin => {
|
const build = async plugin => {
|
||||||
const globals = {}
|
const globals = {}
|
||||||
|
|
||||||
const bundle = await rollup.rollup({
|
const bundle = await rollup({
|
||||||
input: plugin.src,
|
input: plugin.src,
|
||||||
plugins: [
|
plugins: [
|
||||||
babel({
|
babel({
|
|
@ -2,27 +2,26 @@
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Script to update version number references in the project.
|
* Script to update version number references in the project.
|
||||||
* Copyright 2017-2023 The Bootstrap Authors
|
* Copyright 2017-2024 The Bootstrap Authors
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'use strict'
|
import { execFile } from 'node:child_process'
|
||||||
|
import fs from 'node:fs/promises'
|
||||||
const fs = require('node:fs').promises
|
import process from 'node:process'
|
||||||
const path = require('node:path')
|
|
||||||
const globby = require('globby')
|
|
||||||
|
|
||||||
const VERBOSE = process.argv.includes('--verbose')
|
const VERBOSE = process.argv.includes('--verbose')
|
||||||
const DRY_RUN = process.argv.includes('--dry') || process.argv.includes('--dry-run')
|
const DRY_RUN = process.argv.includes('--dry') || process.argv.includes('--dry-run')
|
||||||
|
|
||||||
// These are the filetypes we only care about replacing the version
|
// These are the files we only care about replacing the version
|
||||||
const GLOB = [
|
const FILES = [
|
||||||
'**/*.{css,html,js,json,md,scss,txt,yml}'
|
'README.md',
|
||||||
|
'hugo.yml',
|
||||||
|
'js/src/base-component.js',
|
||||||
|
'package.js',
|
||||||
|
'scss/mixins/_banner.scss',
|
||||||
|
'site/data/docs-versions.yml'
|
||||||
]
|
]
|
||||||
const GLOBBY_OPTIONS = {
|
|
||||||
cwd: path.join(__dirname, '..'),
|
|
||||||
gitignore: true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Blame TC39... https://github.com/benjamingr/RegExp.escape/issues/37
|
// Blame TC39... https://github.com/benjamingr/RegExp.escape/issues/37
|
||||||
function regExpQuote(string) {
|
function regExpQuote(string) {
|
||||||
|
@ -53,7 +52,7 @@ async function replaceRecursively(file, oldVersion, newVersion) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
console.log(`FILE: ${file}`)
|
console.log(`Found ${oldVersion} in ${file}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DRY_RUN) {
|
if (DRY_RUN) {
|
||||||
|
@ -63,6 +62,19 @@ async function replaceRecursively(file, oldVersion, newVersion) {
|
||||||
await fs.writeFile(file, newString, 'utf8')
|
await fs.writeFile(file, newString, 'utf8')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function bumpNpmVersion(newVersion) {
|
||||||
|
if (DRY_RUN) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
execFile('npm', ['version', newVersion, '--no-git-tag'], { shell: true }, error => {
|
||||||
|
if (error) {
|
||||||
|
console.error(error)
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function showUsage(args) {
|
function showUsage(args) {
|
||||||
console.error('USAGE: change-version old_version new_version [--verbose] [--dry[-run]]')
|
console.error('USAGE: change-version old_version new_version [--verbose] [--dry[-run]]')
|
||||||
console.error('Got arguments:', args)
|
console.error('Got arguments:', args)
|
||||||
|
@ -86,11 +98,11 @@ async function main(args) {
|
||||||
showUsage(args)
|
showUsage(args)
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
bumpNpmVersion(newVersion)
|
||||||
const files = await globby(GLOB, GLOBBY_OPTIONS)
|
|
||||||
|
|
||||||
|
try {
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
files.map(file => replaceRecursively(file, oldVersion, newVersion))
|
FILES.map(file => replaceRecursively(file, oldVersion, newVersion))
|
||||||
)
|
)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error)
|
console.error(error)
|
|
@ -5,16 +5,17 @@
|
||||||
* Remember to use the same vendor files as the CDN ones,
|
* Remember to use the same vendor files as the CDN ones,
|
||||||
* otherwise the hashes won't match!
|
* otherwise the hashes won't match!
|
||||||
*
|
*
|
||||||
* Copyright 2017-2023 The Bootstrap Authors
|
* Copyright 2017-2024 The Bootstrap Authors
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'use strict'
|
import crypto from 'node:crypto'
|
||||||
|
import fs from 'node:fs'
|
||||||
|
import path from 'node:path'
|
||||||
|
import { fileURLToPath } from 'node:url'
|
||||||
|
import sh from 'shelljs'
|
||||||
|
|
||||||
const crypto = require('node:crypto')
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||||
const fs = require('node:fs')
|
|
||||||
const path = require('node:path')
|
|
||||||
const sh = require('shelljs')
|
|
||||||
|
|
||||||
sh.config.fatal = true
|
sh.config.fatal = true
|
||||||
|
|
||||||
|
@ -52,9 +53,9 @@ for (const { file, configPropertyName } of files) {
|
||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
|
|
||||||
const algo = 'sha384'
|
const algorithm = 'sha384'
|
||||||
const hash = crypto.createHash(algo).update(data, 'utf8').digest('base64')
|
const hash = crypto.createHash(algorithm).update(data, 'utf8').digest('base64')
|
||||||
const integrity = `${algo}-${hash}`
|
const integrity = `${algorithm}-${hash}`
|
||||||
|
|
||||||
console.log(`${configPropertyName}: ${integrity}`)
|
console.log(`${configPropertyName}: ${integrity}`)
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
'use strict'
|
|
||||||
|
|
||||||
const mapConfig = {
|
const mapConfig = {
|
||||||
inline: false,
|
inline: false,
|
||||||
annotation: true,
|
annotation: true,
|
||||||
sourcesContent: true
|
sourcesContent: true
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = context => {
|
export default context => {
|
||||||
return {
|
return {
|
||||||
map: context.file.dirname.includes('examples') ? false : mapConfig,
|
map: context.file.dirname.includes('examples') ? false : mapConfig,
|
||||||
plugins: {
|
plugins: {
|
|
@ -1,15 +1,17 @@
|
||||||
'use strict'
|
import path from 'node:path'
|
||||||
|
import process from 'node:process'
|
||||||
|
import { fileURLToPath } from 'node:url'
|
||||||
|
import { babel } from '@rollup/plugin-babel'
|
||||||
|
import { nodeResolve } from '@rollup/plugin-node-resolve'
|
||||||
|
import replace from '@rollup/plugin-replace'
|
||||||
|
import banner from './banner.mjs'
|
||||||
|
|
||||||
const path = require('node:path')
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||||
const { babel } = require('@rollup/plugin-babel')
|
|
||||||
const { nodeResolve } = require('@rollup/plugin-node-resolve')
|
|
||||||
const replace = require('@rollup/plugin-replace')
|
|
||||||
const banner = require('./banner.js')
|
|
||||||
|
|
||||||
const BUNDLE = process.env.BUNDLE === 'true'
|
const BUNDLE = process.env.BUNDLE === 'true'
|
||||||
const ESM = process.env.ESM === 'true'
|
const ESM = process.env.ESM === 'true'
|
||||||
|
|
||||||
let fileDestination = `bootstrap${ESM ? '.esm' : ''}`
|
let destinationFile = `bootstrap${ESM ? '.esm' : ''}`
|
||||||
const external = ['@popperjs/core']
|
const external = ['@popperjs/core']
|
||||||
const plugins = [
|
const plugins = [
|
||||||
babel({
|
babel({
|
||||||
|
@ -24,7 +26,7 @@ const globals = {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BUNDLE) {
|
if (BUNDLE) {
|
||||||
fileDestination += '.bundle'
|
destinationFile += '.bundle'
|
||||||
// Remove last entry in external array to bundle Popper
|
// Remove last entry in external array to bundle Popper
|
||||||
external.pop()
|
external.pop()
|
||||||
delete globals['@popperjs/core']
|
delete globals['@popperjs/core']
|
||||||
|
@ -41,7 +43,7 @@ const rollupConfig = {
|
||||||
input: path.resolve(__dirname, `../js/index.${ESM ? 'esm' : 'umd'}.js`),
|
input: path.resolve(__dirname, `../js/index.${ESM ? 'esm' : 'umd'}.js`),
|
||||||
output: {
|
output: {
|
||||||
banner: banner(),
|
banner: banner(),
|
||||||
file: path.resolve(__dirname, `../dist/js/${fileDestination}.js`),
|
file: path.resolve(__dirname, `../dist/js/${destinationFile}.js`),
|
||||||
format: ESM ? 'esm' : 'umd',
|
format: ESM ? 'esm' : 'umd',
|
||||||
globals,
|
globals,
|
||||||
generatedCode: 'es2015'
|
generatedCode: 'es2015'
|
||||||
|
@ -54,4 +56,4 @@ if (!ESM) {
|
||||||
rollupConfig.output.name = 'bootstrap'
|
rollupConfig.output.name = 'bootstrap'
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = rollupConfig
|
export default rollupConfig
|
|
@ -2,14 +2,12 @@
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Script to run vnu-jar if Java is available.
|
* Script to run vnu-jar if Java is available.
|
||||||
* Copyright 2017-2023 The Bootstrap Authors
|
* Copyright 2017-2024 The Bootstrap Authors
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'use strict'
|
import { execFile, spawn } from 'node:child_process'
|
||||||
|
import vnu from 'vnu-jar'
|
||||||
const { execFile, spawn } = require('node:child_process')
|
|
||||||
const vnu = require('vnu-jar')
|
|
||||||
|
|
||||||
execFile('java', ['-version'], (error, stdout, stderr) => {
|
execFile('java', ['-version'], (error, stdout, stderr) => {
|
||||||
if (error) {
|
if (error) {
|
|
@ -3,16 +3,19 @@
|
||||||
/*!
|
/*!
|
||||||
* Script to create the built examples zip archive;
|
* Script to create the built examples zip archive;
|
||||||
* requires the `zip` command to be present!
|
* requires the `zip` command to be present!
|
||||||
* Copyright 2020-2023 The Bootstrap Authors
|
* Copyright 2020-2024 The Bootstrap Authors
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'use strict'
|
import fs from 'node:fs/promises'
|
||||||
|
import path from 'node:path'
|
||||||
|
import { fileURLToPath } from 'node:url'
|
||||||
|
import sh from 'shelljs'
|
||||||
|
|
||||||
const path = require('node:path')
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||||
const sh = require('shelljs')
|
|
||||||
|
|
||||||
const pkg = require('../package.json')
|
const pkgJson = path.join(__dirname, '../package.json')
|
||||||
|
const pkg = JSON.parse(await fs.readFile(pkgJson, 'utf8'))
|
||||||
|
|
||||||
const versionShort = pkg.config.version_short
|
const versionShort = pkg.config.version_short
|
||||||
const distFolder = `bootstrap-${pkg.version}-examples`
|
const distFolder = `bootstrap-${pkg.version}-examples`
|
26
hugo.yml
|
@ -54,8 +54,8 @@ params:
|
||||||
description: "Powerful, extensible, and feature-packed frontend toolkit. Build and customize with Sass, utilize prebuilt grid system and components, and bring projects to life with powerful JavaScript plugins."
|
description: "Powerful, extensible, and feature-packed frontend toolkit. Build and customize with Sass, utilize prebuilt grid system and components, and bring projects to life with powerful JavaScript plugins."
|
||||||
authors: "Mark Otto, Jacob Thornton, and Bootstrap contributors"
|
authors: "Mark Otto, Jacob Thornton, and Bootstrap contributors"
|
||||||
|
|
||||||
current_version: "5.3.1"
|
current_version: "5.3.3"
|
||||||
current_ruby_version: "5.3.1"
|
current_ruby_version: "5.3.3"
|
||||||
docs_version: "5.3"
|
docs_version: "5.3"
|
||||||
rfs_version: "v10.0.0"
|
rfs_version: "v10.0.0"
|
||||||
github_org: "https://github.com/twbs"
|
github_org: "https://github.com/twbs"
|
||||||
|
@ -68,20 +68,20 @@ params:
|
||||||
swag: "https://cottonbureau.com/people/bootstrap"
|
swag: "https://cottonbureau.com/people/bootstrap"
|
||||||
|
|
||||||
download:
|
download:
|
||||||
source: "https://github.com/twbs/bootstrap/archive/v5.3.1.zip"
|
source: "https://github.com/twbs/bootstrap/archive/v5.3.3.zip"
|
||||||
dist: "https://github.com/twbs/bootstrap/releases/download/v5.3.1/bootstrap-5.3.1-dist.zip"
|
dist: "https://github.com/twbs/bootstrap/releases/download/v5.3.3/bootstrap-5.3.3-dist.zip"
|
||||||
dist_examples: "https://github.com/twbs/bootstrap/releases/download/v5.3.1/bootstrap-5.3.1-examples.zip"
|
dist_examples: "https://github.com/twbs/bootstrap/releases/download/v5.3.3/bootstrap-5.3.3-examples.zip"
|
||||||
|
|
||||||
cdn:
|
cdn:
|
||||||
# See https://www.srihash.org for info on how to generate the hashes
|
# See https://www.srihash.org for info on how to generate the hashes
|
||||||
css: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css"
|
css: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"
|
||||||
css_hash: "sha384-4bw+/aepP/YC94hEpVNVgiZdgIC5+VKNBQNGCHeKRQN+PtmoHDEXuppvnDJzQIu9"
|
css_hash: "sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH"
|
||||||
css_rtl: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.rtl.min.css"
|
css_rtl: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.rtl.min.css"
|
||||||
css_rtl_hash: "sha384-PRrgQVJ8NNHGieOA1grGdCTIt4h21CzJs6SnWH4YMQ6G5F5+IEzOHz67L4SQaF0o"
|
css_rtl_hash: "sha384-dpuaG1suU0eT09tx5plTaGMLBsfDLzUCCUXOY2j/LSvXYuG6Bqs43ALlhIqAJVRb"
|
||||||
js: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/js/bootstrap.min.js"
|
js: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.min.js"
|
||||||
js_hash: "sha384-Rx+T1VzGupg4BHQYs2gCW9It+akI2MM/mndMCy36UVfodzcJcF0GGLxZIzObiEfa"
|
js_hash: "sha384-0pUGZvbkm6XF6gxjEnlmuGrJXVbNuzT9qBBavbLwCsOGabYfZo0T0to5eqruptLy"
|
||||||
js_bundle: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/js/bootstrap.bundle.min.js"
|
js_bundle: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"
|
||||||
js_bundle_hash: "sha384-HwwvtgBNo3bZJJLYd8oVXjrBZt8cqVSpeBNS5n7C8IVInixGAoxmnlMuBnhbgrkm"
|
js_bundle_hash: "sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz"
|
||||||
popper: "https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
|
popper: "https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
|
||||||
popper_hash: "sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
|
popper_hash: "sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
|
||||||
popper_esm: "https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/esm/popper.min.js"
|
popper_esm: "https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/esm/popper.min.js"
|
||||||
|
|
|
@ -14,7 +14,7 @@ import { executeAfterTransition, getElement } from './util/index.js'
|
||||||
* Constants
|
* Constants
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const VERSION = '5.3.1'
|
const VERSION = '5.3.3'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class definition
|
* Class definition
|
||||||
|
|
|
@ -29,7 +29,7 @@ const getSelector = element => {
|
||||||
selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null
|
selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null
|
||||||
}
|
}
|
||||||
|
|
||||||
return parseSelector(selector)
|
return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null
|
||||||
}
|
}
|
||||||
|
|
||||||
const SelectorEngine = {
|
const SelectorEngine = {
|
||||||
|
|
|
@ -11,7 +11,9 @@ import SelectorEngine from './dom/selector-engine.js'
|
||||||
import Backdrop from './util/backdrop.js'
|
import Backdrop from './util/backdrop.js'
|
||||||
import { enableDismissTrigger } from './util/component-functions.js'
|
import { enableDismissTrigger } from './util/component-functions.js'
|
||||||
import FocusTrap from './util/focustrap.js'
|
import FocusTrap from './util/focustrap.js'
|
||||||
import { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'
|
import {
|
||||||
|
defineJQueryPlugin, isRTL, isVisible, reflow
|
||||||
|
} from './util/index.js'
|
||||||
import ScrollBarHelper from './util/scrollbar.js'
|
import ScrollBarHelper from './util/scrollbar.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -8,7 +8,9 @@
|
||||||
import BaseComponent from './base-component.js'
|
import BaseComponent from './base-component.js'
|
||||||
import EventHandler from './dom/event-handler.js'
|
import EventHandler from './dom/event-handler.js'
|
||||||
import SelectorEngine from './dom/selector-engine.js'
|
import SelectorEngine from './dom/selector-engine.js'
|
||||||
import { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'
|
import {
|
||||||
|
defineJQueryPlugin, getElement, isDisabled, isVisible
|
||||||
|
} from './util/index.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants
|
* Constants
|
||||||
|
|
|
@ -40,7 +40,7 @@ const CLASS_DROPDOWN = 'dropdown'
|
||||||
|
|
||||||
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'
|
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'
|
||||||
const SELECTOR_DROPDOWN_MENU = '.dropdown-menu'
|
const SELECTOR_DROPDOWN_MENU = '.dropdown-menu'
|
||||||
const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'
|
const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`
|
||||||
|
|
||||||
const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]'
|
const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]'
|
||||||
const SELECTOR_OUTER = '.nav-item, .list-group-item'
|
const SELECTOR_OUTER = '.nav-item, .list-group-item'
|
||||||
|
|
|
@ -9,7 +9,9 @@ import * as Popper from '@popperjs/core'
|
||||||
import BaseComponent from './base-component.js'
|
import BaseComponent from './base-component.js'
|
||||||
import EventHandler from './dom/event-handler.js'
|
import EventHandler from './dom/event-handler.js'
|
||||||
import Manipulator from './dom/manipulator.js'
|
import Manipulator from './dom/manipulator.js'
|
||||||
import { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'
|
import {
|
||||||
|
defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop
|
||||||
|
} from './util/index.js'
|
||||||
import { DefaultAllowlist } from './util/sanitizer.js'
|
import { DefaultAllowlist } from './util/sanitizer.js'
|
||||||
import TemplateFactory from './util/template-factory.js'
|
import TemplateFactory from './util/template-factory.js'
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,9 @@
|
||||||
|
|
||||||
import EventHandler from '../dom/event-handler.js'
|
import EventHandler from '../dom/event-handler.js'
|
||||||
import Config from './config.js'
|
import Config from './config.js'
|
||||||
import { execute, executeAfterTransition, getElement, reflow } from './index.js'
|
import {
|
||||||
|
execute, executeAfterTransition, getElement, reflow
|
||||||
|
} from './index.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants
|
* Constants
|
||||||
|
|
|
@ -17,7 +17,10 @@ export const DefaultAllowlist = {
|
||||||
br: [],
|
br: [],
|
||||||
col: [],
|
col: [],
|
||||||
code: [],
|
code: [],
|
||||||
|
dd: [],
|
||||||
div: [],
|
div: [],
|
||||||
|
dl: [],
|
||||||
|
dt: [],
|
||||||
em: [],
|
em: [],
|
||||||
hr: [],
|
hr: [],
|
||||||
h1: [],
|
h1: [],
|
||||||
|
|
|
@ -2,7 +2,9 @@ import Carousel from '../../src/carousel.js'
|
||||||
import EventHandler from '../../src/dom/event-handler.js'
|
import EventHandler from '../../src/dom/event-handler.js'
|
||||||
import { isRTL, noop } from '../../src/util/index.js'
|
import { isRTL, noop } from '../../src/util/index.js'
|
||||||
import Swipe from '../../src/util/swipe.js'
|
import Swipe from '../../src/util/swipe.js'
|
||||||
import { clearFixture, createEvent, getFixture, jQueryMock } from '../helpers/fixture.js'
|
import {
|
||||||
|
clearFixture, createEvent, getFixture, jQueryMock
|
||||||
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Carousel', () => {
|
describe('Carousel', () => {
|
||||||
const { Simulator, PointerEvent } = window
|
const { Simulator, PointerEvent } = window
|
||||||
|
|
|
@ -359,6 +359,30 @@ describe('SelectorEngine', () => {
|
||||||
expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual(Array.from(fixtureEl.querySelectorAll('.target')))
|
expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual(Array.from(fixtureEl.querySelectorAll('.target')))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should get elements if several ids are given', () => {
|
||||||
|
fixtureEl.innerHTML = [
|
||||||
|
'<div id="test" data-bs-target="#target1,#target2"></div>',
|
||||||
|
'<div class="target" id="target1"></div>',
|
||||||
|
'<div class="target" id="target2"></div>'
|
||||||
|
].join('')
|
||||||
|
|
||||||
|
const testEl = fixtureEl.querySelector('#test')
|
||||||
|
|
||||||
|
expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual(Array.from(fixtureEl.querySelectorAll('.target')))
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should get elements if several ids with special chars are given', () => {
|
||||||
|
fixtureEl.innerHTML = [
|
||||||
|
'<div id="test" data-bs-target="#j_id11:exampleModal,#j_id22:exampleModal"></div>',
|
||||||
|
'<div class="target" id="j_id11:exampleModal"></div>',
|
||||||
|
'<div class="target" id="j_id22:exampleModal"></div>'
|
||||||
|
].join('')
|
||||||
|
|
||||||
|
const testEl = fixtureEl.querySelector('#test')
|
||||||
|
|
||||||
|
expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual(Array.from(fixtureEl.querySelectorAll('.target')))
|
||||||
|
})
|
||||||
|
|
||||||
it('should get elements in array, from href if no data-bs-target set', () => {
|
it('should get elements in array, from href if no data-bs-target set', () => {
|
||||||
fixtureEl.innerHTML = [
|
fixtureEl.innerHTML = [
|
||||||
'<a id="test" href=".target"></a>',
|
'<a id="test" href=".target"></a>',
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
import EventHandler from '../../src/dom/event-handler.js'
|
import EventHandler from '../../src/dom/event-handler.js'
|
||||||
import Dropdown from '../../src/dropdown.js'
|
import Dropdown from '../../src/dropdown.js'
|
||||||
import { noop } from '../../src/util/index.js'
|
import { noop } from '../../src/util/index.js'
|
||||||
import { clearFixture, createEvent, getFixture, jQueryMock } from '../helpers/fixture.js'
|
import {
|
||||||
|
clearFixture, createEvent, getFixture, jQueryMock
|
||||||
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Dropdown', () => {
|
describe('Dropdown', () => {
|
||||||
let fixtureEl
|
let fixtureEl
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
import EventHandler from '../../src/dom/event-handler.js'
|
import EventHandler from '../../src/dom/event-handler.js'
|
||||||
import Modal from '../../src/modal.js'
|
import Modal from '../../src/modal.js'
|
||||||
import ScrollBarHelper from '../../src/util/scrollbar.js'
|
import ScrollBarHelper from '../../src/util/scrollbar.js'
|
||||||
import { clearBodyAndDocument, clearFixture, createEvent, getFixture, jQueryMock } from '../helpers/fixture.js'
|
import {
|
||||||
|
clearBodyAndDocument, clearFixture, createEvent, getFixture, jQueryMock
|
||||||
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Modal', () => {
|
describe('Modal', () => {
|
||||||
let fixtureEl
|
let fixtureEl
|
||||||
|
@ -989,6 +991,35 @@ describe('Modal', () => {
|
||||||
trigger.click()
|
trigger.click()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should open modal, having special characters in its id', () => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
fixtureEl.innerHTML = [
|
||||||
|
'<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#j_id22:exampleModal">',
|
||||||
|
' Launch demo modal',
|
||||||
|
'</button>',
|
||||||
|
'<div class="modal fade" id="j_id22:exampleModal" aria-labelledby="exampleModalLabel" aria-hidden="true">',
|
||||||
|
' <div class="modal-dialog">',
|
||||||
|
' <div class="modal-content">',
|
||||||
|
' <div class="modal-body">',
|
||||||
|
' <p>modal body</p>',
|
||||||
|
' </div>',
|
||||||
|
' </div>',
|
||||||
|
' </div>',
|
||||||
|
'</div>'
|
||||||
|
].join('')
|
||||||
|
|
||||||
|
const modalEl = fixtureEl.querySelector('.modal')
|
||||||
|
const trigger = fixtureEl.querySelector('[data-bs-toggle="modal"]')
|
||||||
|
|
||||||
|
modalEl.addEventListener('shown.bs.modal', () => {
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
|
||||||
|
trigger.click()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
it('should not prevent default when a click occurred on data-bs-dismiss="modal" where tagName is DIFFERENT than <a> or <area>', () => {
|
it('should not prevent default when a click occurred on data-bs-dismiss="modal" where tagName is DIFFERENT than <a> or <area>', () => {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
fixtureEl.innerHTML = [
|
fixtureEl.innerHTML = [
|
||||||
|
|
|
@ -2,7 +2,9 @@ import EventHandler from '../../src/dom/event-handler.js'
|
||||||
import Offcanvas from '../../src/offcanvas.js'
|
import Offcanvas from '../../src/offcanvas.js'
|
||||||
import { isVisible } from '../../src/util/index.js'
|
import { isVisible } from '../../src/util/index.js'
|
||||||
import ScrollBarHelper from '../../src/util/scrollbar.js'
|
import ScrollBarHelper from '../../src/util/scrollbar.js'
|
||||||
import { clearBodyAndDocument, clearFixture, createEvent, getFixture, jQueryMock } from '../helpers/fixture.js'
|
import {
|
||||||
|
clearBodyAndDocument, clearFixture, createEvent, getFixture, jQueryMock
|
||||||
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Offcanvas', () => {
|
describe('Offcanvas', () => {
|
||||||
let fixtureEl
|
let fixtureEl
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import EventHandler from '../../src/dom/event-handler.js'
|
import EventHandler from '../../src/dom/event-handler.js'
|
||||||
import ScrollSpy from '../../src/scrollspy.js'
|
import ScrollSpy from '../../src/scrollspy.js'
|
||||||
import { clearFixture, createEvent, getFixture, jQueryMock } from '../helpers/fixture.js'
|
import {
|
||||||
|
clearFixture, createEvent, getFixture, jQueryMock
|
||||||
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('ScrollSpy', () => {
|
describe('ScrollSpy', () => {
|
||||||
let fixtureEl
|
let fixtureEl
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import Tab from '../../src/tab.js'
|
import Tab from '../../src/tab.js'
|
||||||
import { clearFixture, createEvent, getFixture, jQueryMock } from '../helpers/fixture.js'
|
import {
|
||||||
|
clearFixture, createEvent, getFixture, jQueryMock
|
||||||
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Tab', () => {
|
describe('Tab', () => {
|
||||||
let fixtureEl
|
let fixtureEl
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import Toast from '../../src/toast.js'
|
import Toast from '../../src/toast.js'
|
||||||
import { clearFixture, createEvent, getFixture, jQueryMock } from '../helpers/fixture.js'
|
import {
|
||||||
|
clearFixture, createEvent, getFixture, jQueryMock
|
||||||
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Toast', () => {
|
describe('Toast', () => {
|
||||||
let fixtureEl
|
let fixtureEl
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
import EventHandler from '../../src/dom/event-handler.js'
|
import EventHandler from '../../src/dom/event-handler.js'
|
||||||
import Tooltip from '../../src/tooltip.js'
|
import Tooltip from '../../src/tooltip.js'
|
||||||
import { noop } from '../../src/util/index.js'
|
import { noop } from '../../src/util/index.js'
|
||||||
import { clearFixture, createEvent, getFixture, jQueryMock } from '../helpers/fixture.js'
|
import {
|
||||||
|
clearFixture, createEvent, getFixture, jQueryMock
|
||||||
|
} from '../helpers/fixture.js'
|
||||||
|
|
||||||
describe('Tooltip', () => {
|
describe('Tooltip', () => {
|
||||||
let fixtureEl
|
let fixtureEl
|
||||||
|
|
|
@ -13,21 +13,25 @@
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<nav class="navbar navbar-full navbar-dark bg-dark">
|
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||||
<button class="navbar-toggler hidden-lg-up" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"></button>
|
<div class="container-fluid">
|
||||||
<div class="collapse navbar-expand-md" id="navbarResponsive">
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
<a class="navbar-brand" href="#">This shouldn't jump!</a>
|
<span class="navbar-toggler-icon"></span>
|
||||||
<ul class="navbar-nav">
|
</button>
|
||||||
<li class="nav-item">
|
<div class="collapse navbar-collapse" id="navbarResponsive">
|
||||||
<a class="nav-link active" href="#" aria-current="page">Home</a>
|
<a class="navbar-brand" href="#">This shouldn't jump!</a>
|
||||||
</li>
|
<ul class="navbar-nav">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="#">Link</a>
|
<a class="nav-link active" href="#" aria-current="page">Home</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="#">Link</a>
|
<a class="nav-link" href="#">Link</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="#">Link</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
<repository type="git" url="https://github.com/twbs/bootstrap.git" branch="main" />
|
<repository type="git" url="https://github.com/twbs/bootstrap.git" branch="main" />
|
||||||
<icon>bootstrap.png</icon>
|
<icon>bootstrap.png</icon>
|
||||||
<license type="expression">MIT</license>
|
<license type="expression">MIT</license>
|
||||||
<copyright>Copyright 2011-2023</copyright>
|
<copyright>Copyright 2011-2024</copyright>
|
||||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||||
<tags>css mobile-first responsive front-end framework web</tags>
|
<tags>css mobile-first responsive front-end framework web</tags>
|
||||||
<contentFiles>
|
<contentFiles>
|
||||||
|
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
|
@ -15,7 +15,7 @@
|
||||||
<repository type="git" url="https://github.com/twbs/bootstrap.git" branch="main" />
|
<repository type="git" url="https://github.com/twbs/bootstrap.git" branch="main" />
|
||||||
<icon>bootstrap.png</icon>
|
<icon>bootstrap.png</icon>
|
||||||
<license type="expression">MIT</license>
|
<license type="expression">MIT</license>
|
||||||
<copyright>Copyright 2011-2023</copyright>
|
<copyright>Copyright 2011-2024</copyright>
|
||||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||||
<tags>css sass mobile-first responsive front-end framework web</tags>
|
<tags>css sass mobile-first responsive front-end framework web</tags>
|
||||||
<contentFiles>
|
<contentFiles>
|
||||||
|
|
7915
package-lock.json
generated
|
@ -5,7 +5,7 @@
|
||||||
Package.describe({
|
Package.describe({
|
||||||
name: 'twbs:bootstrap', // https://atmospherejs.com/twbs/bootstrap
|
name: 'twbs:bootstrap', // https://atmospherejs.com/twbs/bootstrap
|
||||||
summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.',
|
summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.',
|
||||||
version: '5.3.1',
|
version: '5.3.3',
|
||||||
git: 'https://github.com/twbs/bootstrap.git'
|
git: 'https://github.com/twbs/bootstrap.git'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
92
package.json
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "bootstrap",
|
"name": "bootstrap",
|
||||||
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
|
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
|
||||||
"version": "5.3.1",
|
"version": "5.3.3",
|
||||||
"config": {
|
"config": {
|
||||||
"version_short": "5.3"
|
"version_short": "5.3"
|
||||||
},
|
},
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
"bundlewatch": "bundlewatch --config .bundlewatch.config.json",
|
"bundlewatch": "bundlewatch --config .bundlewatch.config.json",
|
||||||
"css": "npm-run-all css-compile css-prefix css-rtl css-minify",
|
"css": "npm-run-all css-compile css-prefix css-rtl css-minify",
|
||||||
"css-compile": "sass --style expanded --source-map --embed-sources --no-error-css scss/:dist/css/",
|
"css-compile": "sass --style expanded --source-map --embed-sources --no-error-css scss/:dist/css/",
|
||||||
"css-rtl": "cross-env NODE_ENV=RTL postcss --config build/postcss.config.js --dir \"dist/css\" --ext \".rtl.css\" \"dist/css/*.css\" \"!dist/css/*.min.css\" \"!dist/css/*.rtl.css\"",
|
"css-rtl": "cross-env NODE_ENV=RTL postcss --config build/postcss.config.mjs --dir \"dist/css\" --ext \".rtl.css\" \"dist/css/*.css\" \"!dist/css/*.min.css\" \"!dist/css/*.rtl.css\"",
|
||||||
"css-lint": "npm-run-all --aggregate-output --continue-on-error --parallel css-lint-*",
|
"css-lint": "npm-run-all --aggregate-output --continue-on-error --parallel css-lint-*",
|
||||||
"css-lint-stylelint": "stylelint \"**/*.{css,scss}\" --cache --cache-location .cache/.stylelintcache",
|
"css-lint-stylelint": "stylelint \"**/*.{css,scss}\" --cache --cache-location .cache/.stylelintcache",
|
||||||
"css-lint-vars": "fusv scss/ site/assets/scss/",
|
"css-lint-vars": "fusv scss/ site/assets/scss/",
|
||||||
|
@ -51,17 +51,17 @@
|
||||||
"css-minify-main": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/ --batch --batch-suffix \".min\" \"dist/css/*.css\" \"!dist/css/*.min.css\" \"!dist/css/*rtl*.css\"",
|
"css-minify-main": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/ --batch --batch-suffix \".min\" \"dist/css/*.css\" \"!dist/css/*.min.css\" \"!dist/css/*rtl*.css\"",
|
||||||
"css-minify-rtl": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/ --batch --batch-suffix \".min\" \"dist/css/*rtl.css\" \"!dist/css/*.min.css\"",
|
"css-minify-rtl": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/ --batch --batch-suffix \".min\" \"dist/css/*rtl.css\" \"!dist/css/*.min.css\"",
|
||||||
"css-prefix": "npm-run-all --aggregate-output --parallel css-prefix-*",
|
"css-prefix": "npm-run-all --aggregate-output --parallel css-prefix-*",
|
||||||
"css-prefix-main": "postcss --config build/postcss.config.js --replace \"dist/css/*.css\" \"!dist/css/*.rtl*.css\" \"!dist/css/*.min.css\"",
|
"css-prefix-main": "postcss --config build/postcss.config.mjs --replace \"dist/css/*.css\" \"!dist/css/*.rtl*.css\" \"!dist/css/*.min.css\"",
|
||||||
"css-prefix-examples": "postcss --config build/postcss.config.js --replace \"site/content/**/*.css\"",
|
"css-prefix-examples": "postcss --config build/postcss.config.mjs --replace \"site/content/**/*.css\"",
|
||||||
"css-prefix-examples-rtl": "cross-env-shell NODE_ENV=RTL postcss --config build/postcss.config.js --dir \"site/content/docs/$npm_package_config_version_short/examples/\" --ext \".rtl.css\" --base \"site/content/docs/$npm_package_config_version_short/examples/\" \"site/content/docs/$npm_package_config_version_short/examples/{blog,carousel,dashboard,cheatsheet}/*.css\" \"!site/content/docs/$npm_package_config_version_short/examples/{blog,carousel,dashboard,cheatsheet}/*.rtl.css\"",
|
"css-prefix-examples-rtl": "cross-env-shell NODE_ENV=RTL postcss --config build/postcss.config.mjs --dir \"site/content/docs/$npm_package_config_version_short/examples/\" --ext \".rtl.css\" --base \"site/content/docs/$npm_package_config_version_short/examples/\" \"site/content/docs/$npm_package_config_version_short/examples/{blog,carousel,dashboard,cheatsheet}/*.css\" \"!site/content/docs/$npm_package_config_version_short/examples/{blog,carousel,dashboard,cheatsheet}/*.rtl.css\"",
|
||||||
"css-test": "jasmine --config=scss/tests/jasmine.js",
|
"css-test": "jasmine --config=scss/tests/jasmine.js",
|
||||||
"js": "npm-run-all js-compile js-minify",
|
"js": "npm-run-all js-compile js-minify",
|
||||||
"js-compile": "npm-run-all --aggregate-output --parallel js-compile-*",
|
"js-compile": "npm-run-all --aggregate-output --parallel js-compile-*",
|
||||||
"js-compile-standalone": "rollup --environment BUNDLE:false --config build/rollup.config.js --sourcemap",
|
"js-compile-standalone": "rollup --environment BUNDLE:false --config build/rollup.config.mjs --sourcemap",
|
||||||
"js-compile-standalone-esm": "rollup --environment ESM:true,BUNDLE:false --config build/rollup.config.js --sourcemap",
|
"js-compile-standalone-esm": "rollup --environment ESM:true,BUNDLE:false --config build/rollup.config.mjs --sourcemap",
|
||||||
"js-compile-bundle": "rollup --environment BUNDLE:true --config build/rollup.config.js --sourcemap",
|
"js-compile-bundle": "rollup --environment BUNDLE:true --config build/rollup.config.mjs --sourcemap",
|
||||||
"js-compile-plugins": "node build/build-plugins.js",
|
"js-compile-plugins": "node build/build-plugins.mjs",
|
||||||
"js-lint": "eslint --cache --cache-location .cache/.eslintcache --report-unused-disable-directives --ext .html,.js,.md .",
|
"js-lint": "eslint --cache --cache-location .cache/.eslintcache --report-unused-disable-directives --ext .html,.js,.mjs,.md .",
|
||||||
"js-minify": "npm-run-all --aggregate-output --parallel js-minify-*",
|
"js-minify": "npm-run-all --aggregate-output --parallel js-minify-*",
|
||||||
"js-minify-standalone": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map\" --output dist/js/bootstrap.min.js dist/js/bootstrap.js",
|
"js-minify-standalone": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map\" --output dist/js/bootstrap.min.js dist/js/bootstrap.js",
|
||||||
"js-minify-standalone-esm": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.esm.js.map,includeSources,url=bootstrap.esm.min.js.map\" --output dist/js/bootstrap.esm.min.js dist/js/bootstrap.esm.js",
|
"js-minify-standalone-esm": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.esm.js.map,includeSources,url=bootstrap.esm.min.js.map\" --output dist/js/bootstrap.esm.min.js dist/js/bootstrap.esm.js",
|
||||||
|
@ -77,17 +77,17 @@
|
||||||
"docs": "npm-run-all docs-build docs-lint",
|
"docs": "npm-run-all docs-build docs-lint",
|
||||||
"docs-build": "hugo --cleanDestinationDir --printUnusedTemplates",
|
"docs-build": "hugo --cleanDestinationDir --printUnusedTemplates",
|
||||||
"docs-compile": "npm run docs-build",
|
"docs-compile": "npm run docs-build",
|
||||||
"docs-vnu": "node build/vnu-jar.js",
|
"docs-vnu": "node build/vnu-jar.mjs",
|
||||||
"docs-lint": "npm run docs-vnu",
|
"docs-lint": "npm run docs-vnu",
|
||||||
"docs-serve": "hugo server --port 9001 --disableFastRender --printUnusedTemplates",
|
"docs-serve": "hugo server --port 9001 --disableFastRender --printUnusedTemplates",
|
||||||
"docs-serve-only": "npx sirv-cli _site --port 9001",
|
"docs-serve-only": "npx sirv-cli _site --port 9001",
|
||||||
"lockfile-lint": "lockfile-lint --allowed-hosts npm --allowed-schemes https: --empty-hostname false --type npm --path package-lock.json",
|
"lockfile-lint": "lockfile-lint --allowed-hosts npm --allowed-schemes https: --empty-hostname false --type npm --path package-lock.json",
|
||||||
"update-deps": "ncu -u -x globby,jasmine,karma-browserstack-launcher,karma-rollup-preprocessor && echo Manually update site/assets/js/vendor",
|
"update-deps": "ncu -u -x globby,jasmine,karma-browserstack-launcher,karma-rollup-preprocessor && echo Manually update site/assets/js/vendor",
|
||||||
"release": "npm-run-all dist release-sri docs-build release-zip*",
|
"release": "npm-run-all dist release-sri docs-build release-zip*",
|
||||||
"release-sri": "node build/generate-sri.js",
|
"release-sri": "node build/generate-sri.mjs",
|
||||||
"release-version": "node build/change-version.js",
|
"release-version": "node build/change-version.mjs",
|
||||||
"release-zip": "cross-env-shell \"rm -rf bootstrap-$npm_package_version-dist bootstrap-$npm_package_version-dist.zip && cp -r dist/ bootstrap-$npm_package_version-dist && zip -qr9 bootstrap-$npm_package_version-dist.zip bootstrap-$npm_package_version-dist && rm -rf bootstrap-$npm_package_version-dist\"",
|
"release-zip": "cross-env-shell \"rm -rf bootstrap-$npm_package_version-dist bootstrap-$npm_package_version-dist.zip && cp -r dist/ bootstrap-$npm_package_version-dist && zip -qr9 bootstrap-$npm_package_version-dist.zip bootstrap-$npm_package_version-dist && rm -rf bootstrap-$npm_package_version-dist\"",
|
||||||
"release-zip-examples": "node build/zip-examples.js",
|
"release-zip-examples": "node build/zip-examples.mjs",
|
||||||
"dist": "npm-run-all --aggregate-output --parallel css js",
|
"dist": "npm-run-all --aggregate-output --parallel css js",
|
||||||
"test": "npm-run-all lint dist js-test docs-build docs-lint",
|
"test": "npm-run-all lint dist js-test docs-build docs-lint",
|
||||||
"netlify": "cross-env-shell HUGO_BASEURL=$DEPLOY_PRIME_URL npm-run-all dist release-sri docs-build",
|
"netlify": "cross-env-shell HUGO_BASEURL=$DEPLOY_PRIME_URL npm-run-all dist release-sri docs-build",
|
||||||
|
@ -103,31 +103,31 @@
|
||||||
"@popperjs/core": "^2.11.8"
|
"@popperjs/core": "^2.11.8"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "^7.22.9",
|
"@babel/cli": "^7.23.9",
|
||||||
"@babel/core": "^7.22.9",
|
"@babel/core": "^7.23.9",
|
||||||
"@babel/preset-env": "^7.22.9",
|
"@babel/preset-env": "^7.23.9",
|
||||||
"@popperjs/core": "^2.11.8",
|
"@popperjs/core": "^2.11.8",
|
||||||
"@rollup/plugin-babel": "^6.0.3",
|
"@rollup/plugin-babel": "^6.0.4",
|
||||||
"@rollup/plugin-commonjs": "^25.0.3",
|
"@rollup/plugin-commonjs": "^25.0.7",
|
||||||
"@rollup/plugin-node-resolve": "^15.1.0",
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
||||||
"@rollup/plugin-replace": "^5.0.2",
|
"@rollup/plugin-replace": "^5.0.5",
|
||||||
"autoprefixer": "^10.4.14",
|
"autoprefixer": "^10.4.17",
|
||||||
"bundlewatch": "^0.3.3",
|
"bundlewatch": "^0.3.3",
|
||||||
"clean-css-cli": "^5.6.2",
|
"clean-css-cli": "^5.6.3",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"eslint": "^8.45.0",
|
"eslint": "^8.56.0",
|
||||||
"eslint-config-xo": "^0.43.1",
|
"eslint-config-xo": "^0.44.0",
|
||||||
"eslint-plugin-html": "^7.1.0",
|
"eslint-plugin-html": "^8.0.0",
|
||||||
"eslint-plugin-import": "^2.27.5",
|
"eslint-plugin-import": "^2.29.1",
|
||||||
"eslint-plugin-markdown": "^3.0.0",
|
"eslint-plugin-markdown": "^3.0.1",
|
||||||
"eslint-plugin-unicorn": "^48.0.0",
|
"eslint-plugin-unicorn": "^51.0.1",
|
||||||
"find-unused-sass-variables": "^5.0.0",
|
"find-unused-sass-variables": "^5.0.0",
|
||||||
"globby": "^11.1.0",
|
"globby": "^11.1.0",
|
||||||
"hammer-simulator": "0.0.1",
|
"hammer-simulator": "0.0.1",
|
||||||
"hugo-bin": "^0.111.4",
|
"hugo-bin": "^0.119.0",
|
||||||
"ip": "^2.0.0",
|
"ip": "^2.0.1",
|
||||||
"jasmine": "^4.6.0",
|
"jasmine": "^5.1.0",
|
||||||
"jquery": "^3.7.0",
|
"jquery": "^3.7.1",
|
||||||
"karma": "^6.4.2",
|
"karma": "^6.4.2",
|
||||||
"karma-browserstack-launcher": "1.4.0",
|
"karma-browserstack-launcher": "1.4.0",
|
||||||
"karma-chrome-launcher": "^3.2.0",
|
"karma-chrome-launcher": "^3.2.0",
|
||||||
|
@ -137,20 +137,20 @@
|
||||||
"karma-jasmine": "^5.1.0",
|
"karma-jasmine": "^5.1.0",
|
||||||
"karma-jasmine-html-reporter": "^2.1.0",
|
"karma-jasmine-html-reporter": "^2.1.0",
|
||||||
"karma-rollup-preprocessor": "7.0.7",
|
"karma-rollup-preprocessor": "7.0.7",
|
||||||
"lockfile-lint": "^4.10.6",
|
"lockfile-lint": "^4.13.1",
|
||||||
"nodemon": "^3.0.1",
|
"nodemon": "^3.0.3",
|
||||||
"npm-run-all2": "^6.0.6",
|
"npm-run-all2": "^6.1.2",
|
||||||
"postcss": "^8.4.27",
|
"postcss": "^8.4.35",
|
||||||
"postcss-cli": "^10.1.0",
|
"postcss-cli": "^11.0.0",
|
||||||
"rollup": "^3.26.3",
|
"rollup": "^4.12.0",
|
||||||
"rollup-plugin-istanbul": "^4.0.0",
|
"rollup-plugin-istanbul": "^5.0.0",
|
||||||
"rtlcss": "^4.1.0",
|
"rtlcss": "^4.1.1",
|
||||||
"sass": "^1.64.1",
|
"sass": "^1.71.0",
|
||||||
"sass-true": "^7.0.0",
|
"sass-true": "^7.0.1",
|
||||||
"shelljs": "^0.8.5",
|
"shelljs": "^0.8.5",
|
||||||
"stylelint": "^15.10.2",
|
"stylelint": "^16.2.1",
|
||||||
"stylelint-config-twbs-bootstrap": "^11.0.1",
|
"stylelint-config-twbs-bootstrap": "^14.0.0",
|
||||||
"terser": "^5.19.2",
|
"terser": "^5.27.2",
|
||||||
"vnu-jar": "23.4.11"
|
"vnu-jar": "23.4.11"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
--#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};
|
--#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};
|
||||||
--#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};
|
--#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};
|
||||||
--#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};
|
--#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};
|
||||||
--#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};
|
|
||||||
--#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};
|
--#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};
|
||||||
--#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};
|
--#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};
|
||||||
--#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};
|
--#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};
|
||||||
|
@ -74,7 +73,6 @@
|
||||||
|
|
||||||
&:focus {
|
&:focus {
|
||||||
z-index: 3;
|
z-index: 3;
|
||||||
border-color: var(--#{$prefix}accordion-btn-focus-border-color);
|
|
||||||
outline: 0;
|
outline: 0;
|
||||||
box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);
|
box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);
|
||||||
}
|
}
|
||||||
|
@ -92,7 +90,7 @@
|
||||||
&:first-of-type {
|
&:first-of-type {
|
||||||
@include border-top-radius(var(--#{$prefix}accordion-border-radius));
|
@include border-top-radius(var(--#{$prefix}accordion-border-radius));
|
||||||
|
|
||||||
.accordion-button {
|
> .accordion-header .accordion-button {
|
||||||
@include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));
|
@include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -105,13 +103,13 @@
|
||||||
&:last-of-type {
|
&:last-of-type {
|
||||||
@include border-bottom-radius(var(--#{$prefix}accordion-border-radius));
|
@include border-bottom-radius(var(--#{$prefix}accordion-border-radius));
|
||||||
|
|
||||||
.accordion-button {
|
> .accordion-header .accordion-button {
|
||||||
&.collapsed {
|
&.collapsed {
|
||||||
@include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));
|
@include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.accordion-collapse {
|
> .accordion-collapse {
|
||||||
@include border-bottom-radius(var(--#{$prefix}accordion-border-radius));
|
@include border-bottom-radius(var(--#{$prefix}accordion-border-radius));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -127,11 +125,7 @@
|
||||||
// Remove borders and border-radius to keep accordion items edge-to-edge.
|
// Remove borders and border-radius to keep accordion items edge-to-edge.
|
||||||
|
|
||||||
.accordion-flush {
|
.accordion-flush {
|
||||||
.accordion-collapse {
|
> .accordion-item {
|
||||||
border-width: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.accordion-item {
|
|
||||||
border-right: 0;
|
border-right: 0;
|
||||||
border-left: 0;
|
border-left: 0;
|
||||||
@include border-radius(0);
|
@include border-radius(0);
|
||||||
|
@ -139,12 +133,18 @@
|
||||||
&:first-child { border-top: 0; }
|
&:first-child { border-top: 0; }
|
||||||
&:last-child { border-bottom: 0; }
|
&:last-child { border-bottom: 0; }
|
||||||
|
|
||||||
.accordion-button {
|
// stylelint-disable selector-max-class
|
||||||
|
> .accordion-header .accordion-button {
|
||||||
&,
|
&,
|
||||||
&.collapsed {
|
&.collapsed {
|
||||||
@include border-radius(0);
|
@include border-radius(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// stylelint-enable selector-max-class
|
||||||
|
|
||||||
|
> .accordion-collapse {
|
||||||
|
@include border-radius(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -100,6 +100,15 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.btn-check:checked:focus-visible + & {
|
||||||
|
// Avoid using mixin so we can pass custom focus shadow properly
|
||||||
|
@if $enable-shadows {
|
||||||
|
box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);
|
||||||
|
} @else {
|
||||||
|
box-shadow: var(--#{$prefix}btn-focus-box-shadow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&:disabled,
|
&:disabled,
|
||||||
&.disabled,
|
&.disabled,
|
||||||
fieldset:disabled & {
|
fieldset:disabled & {
|
||||||
|
@ -170,7 +179,7 @@
|
||||||
--#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};
|
--#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};
|
||||||
--#{$prefix}btn-disabled-border-color: transparent;
|
--#{$prefix}btn-disabled-border-color: transparent;
|
||||||
--#{$prefix}btn-box-shadow: 0 0 0 #000; // Can't use `none` as keyword negates all values when used with multiple shadows
|
--#{$prefix}btn-box-shadow: 0 0 0 #000; // Can't use `none` as keyword negates all values when used with multiple shadows
|
||||||
--#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix(color-contrast($link-color), $link-color, 15%))};
|
--#{$prefix}btn-focus-shadow-rgb: #{$btn-link-focus-shadow-rgb};
|
||||||
|
|
||||||
text-decoration: $link-decoration;
|
text-decoration: $link-decoration;
|
||||||
@if $enable-gradients {
|
@if $enable-gradients {
|
||||||
|
|
|
@ -132,19 +132,11 @@
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* rtl:options: {
|
|
||||||
"autoRename": true,
|
|
||||||
"stringMap":[ {
|
|
||||||
"name" : "prev-next",
|
|
||||||
"search" : "prev",
|
|
||||||
"replace" : "next"
|
|
||||||
} ]
|
|
||||||
} */
|
|
||||||
.carousel-control-prev-icon {
|
.carousel-control-prev-icon {
|
||||||
background-image: escape-svg($carousel-control-prev-icon-bg);
|
background-image: escape-svg($carousel-control-prev-icon-bg) #{"/*rtl:" + escape-svg($carousel-control-next-icon-bg) + "*/"};
|
||||||
}
|
}
|
||||||
.carousel-control-next-icon {
|
.carousel-control-next-icon {
|
||||||
background-image: escape-svg($carousel-control-next-icon-bg);
|
background-image: escape-svg($carousel-control-next-icon-bg) #{"/*rtl:" + escape-svg($carousel-control-prev-icon-bg) + "*/"};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Optional indicator pips/controls
|
// Optional indicator pips/controls
|
||||||
|
|
|
@ -126,7 +126,6 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
|
|
||||||
padding: var(--#{$prefix}modal-header-padding);
|
padding: var(--#{$prefix}modal-header-padding);
|
||||||
border-bottom: var(--#{$prefix}modal-header-border-width) solid var(--#{$prefix}modal-header-border-color);
|
border-bottom: var(--#{$prefix}modal-header-border-width) solid var(--#{$prefix}modal-header-border-color);
|
||||||
@include border-top-radius(var(--#{$prefix}modal-inner-border-radius));
|
@include border-top-radius(var(--#{$prefix}modal-inner-border-radius));
|
||||||
|
|
|
@ -123,14 +123,11 @@
|
||||||
.offcanvas-header {
|
.offcanvas-header {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
|
||||||
padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);
|
padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);
|
||||||
|
|
||||||
.btn-close {
|
.btn-close {
|
||||||
padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);
|
padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);
|
||||||
margin-top: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));
|
margin: calc(-.5 * var(--#{$prefix}offcanvas-padding-y)) calc(-.5 * var(--#{$prefix}offcanvas-padding-x)) calc(-.5 * var(--#{$prefix}offcanvas-padding-y)) auto;
|
||||||
margin-right: calc(-.5 * var(--#{$prefix}offcanvas-padding-x));
|
|
||||||
margin-bottom: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -217,6 +217,7 @@ small {
|
||||||
|
|
||||||
mark {
|
mark {
|
||||||
padding: $mark-padding;
|
padding: $mark-padding;
|
||||||
|
color: var(--#{$prefix}highlight-color);
|
||||||
background-color: var(--#{$prefix}highlight-bg);
|
background-color: var(--#{$prefix}highlight-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -91,6 +91,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
--#{$prefix}code-color: #{$code-color};
|
--#{$prefix}code-color: #{$code-color};
|
||||||
|
--#{$prefix}highlight-color: #{$mark-color};
|
||||||
--#{$prefix}highlight-bg: #{$mark-bg};
|
--#{$prefix}highlight-bg: #{$mark-bg};
|
||||||
|
|
||||||
// scss-docs-start root-border-var
|
// scss-docs-start root-border-var
|
||||||
|
@ -171,6 +172,8 @@
|
||||||
--#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};
|
--#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};
|
||||||
|
|
||||||
--#{$prefix}code-color: #{$code-color-dark};
|
--#{$prefix}code-color: #{$code-color-dark};
|
||||||
|
--#{$prefix}highlight-color: #{$mark-color-dark};
|
||||||
|
--#{$prefix}highlight-bg: #{$mark-bg-dark};
|
||||||
|
|
||||||
--#{$prefix}border-color: #{$border-color-dark};
|
--#{$prefix}border-color: #{$border-color-dark};
|
||||||
--#{$prefix}border-color-translucent: #{$border-color-translucent-dark};
|
--#{$prefix}border-color-translucent: #{$border-color-translucent-dark};
|
||||||
|
|
|
@ -79,7 +79,7 @@
|
||||||
//
|
//
|
||||||
// When borders are added on all sides of the cells, the corners can render odd when
|
// When borders are added on all sides of the cells, the corners can render odd when
|
||||||
// these borders do not have the same color or if they are semi-transparent.
|
// these borders do not have the same color or if they are semi-transparent.
|
||||||
// Therefor we add top and border bottoms to the `tr`s and left and right borders
|
// Therefore we add top and border bottoms to the `tr`s and left and right borders
|
||||||
// to the `td`s or `th`s
|
// to the `td`s or `th`s
|
||||||
|
|
||||||
.table-bordered {
|
.table-bordered {
|
||||||
|
|
|
@ -77,9 +77,9 @@ $utilities: map-merge(
|
||||||
property: box-shadow,
|
property: box-shadow,
|
||||||
class: shadow,
|
class: shadow,
|
||||||
values: (
|
values: (
|
||||||
null: $box-shadow,
|
null: var(--#{$prefix}box-shadow),
|
||||||
sm: $box-shadow-sm,
|
sm: var(--#{$prefix}box-shadow-sm),
|
||||||
lg: $box-shadow-lg,
|
lg: var(--#{$prefix}box-shadow-lg),
|
||||||
none: none,
|
none: none,
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
|
|
@ -53,6 +53,8 @@ $headings-color-dark: inherit !default;
|
||||||
$link-color-dark: tint-color($primary, 40%) !default;
|
$link-color-dark: tint-color($primary, 40%) !default;
|
||||||
$link-hover-color-dark: shift-color($link-color-dark, -$link-shade-percentage) !default;
|
$link-hover-color-dark: shift-color($link-color-dark, -$link-shade-percentage) !default;
|
||||||
$code-color-dark: tint-color($code-color, 40%) !default;
|
$code-color-dark: tint-color($code-color, 40%) !default;
|
||||||
|
$mark-color-dark: $body-color-dark !default;
|
||||||
|
$mark-bg-dark: $yellow-800 !default;
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -718,6 +718,7 @@ $dt-font-weight: $font-weight-bold !default;
|
||||||
$list-inline-padding: .5rem !default;
|
$list-inline-padding: .5rem !default;
|
||||||
|
|
||||||
$mark-padding: .1875em !default;
|
$mark-padding: .1875em !default;
|
||||||
|
$mark-color: $body-color !default;
|
||||||
$mark-bg: $yellow-100 !default;
|
$mark-bg: $yellow-100 !default;
|
||||||
// scss-docs-end type-variables
|
// scss-docs-end type-variables
|
||||||
|
|
||||||
|
@ -734,7 +735,7 @@ $table-cell-padding-x-sm: .25rem !default;
|
||||||
|
|
||||||
$table-cell-vertical-align: top !default;
|
$table-cell-vertical-align: top !default;
|
||||||
|
|
||||||
$table-color: var(--#{$prefix}body-color) !default;
|
$table-color: var(--#{$prefix}emphasis-color) !default;
|
||||||
$table-bg: var(--#{$prefix}body-bg) !default;
|
$table-bg: var(--#{$prefix}body-bg) !default;
|
||||||
$table-accent-bg: transparent !default;
|
$table-accent-bg: transparent !default;
|
||||||
|
|
||||||
|
@ -742,17 +743,17 @@ $table-th-font-weight: null !default;
|
||||||
|
|
||||||
$table-striped-color: $table-color !default;
|
$table-striped-color: $table-color !default;
|
||||||
$table-striped-bg-factor: .05 !default;
|
$table-striped-bg-factor: .05 !default;
|
||||||
$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;
|
$table-striped-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-striped-bg-factor) !default;
|
||||||
|
|
||||||
$table-active-color: $table-color !default;
|
$table-active-color: $table-color !default;
|
||||||
$table-active-bg-factor: .1 !default;
|
$table-active-bg-factor: .1 !default;
|
||||||
$table-active-bg: rgba($black, $table-active-bg-factor) !default;
|
$table-active-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-active-bg-factor) !default;
|
||||||
|
|
||||||
$table-hover-color: $table-color !default;
|
$table-hover-color: $table-color !default;
|
||||||
$table-hover-bg-factor: .075 !default;
|
$table-hover-bg-factor: .075 !default;
|
||||||
$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;
|
$table-hover-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-hover-bg-factor) !default;
|
||||||
|
|
||||||
$table-border-factor: .1 !default;
|
$table-border-factor: .2 !default;
|
||||||
$table-border-width: var(--#{$prefix}border-width) !default;
|
$table-border-width: var(--#{$prefix}border-width) !default;
|
||||||
$table-border-color: var(--#{$prefix}border-color) !default;
|
$table-border-color: var(--#{$prefix}border-color) !default;
|
||||||
|
|
||||||
|
@ -842,6 +843,7 @@ $btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;
|
||||||
$btn-link-color: var(--#{$prefix}link-color) !default;
|
$btn-link-color: var(--#{$prefix}link-color) !default;
|
||||||
$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;
|
$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;
|
||||||
$btn-link-disabled-color: $gray-600 !default;
|
$btn-link-disabled-color: $gray-600 !default;
|
||||||
|
$btn-link-focus-shadow-rgb: to-rgb(mix(color-contrast($link-color), $link-color, 15%)) !default;
|
||||||
|
|
||||||
// Allows for customizing button radius independently from global border radius
|
// Allows for customizing button radius independently from global border radius
|
||||||
$btn-border-radius: var(--#{$prefix}border-radius) !default;
|
$btn-border-radius: var(--#{$prefix}border-radius) !default;
|
||||||
|
@ -903,7 +905,7 @@ $input-disabled-border-color: null !default;
|
||||||
$input-color: var(--#{$prefix}body-color) !default;
|
$input-color: var(--#{$prefix}body-color) !default;
|
||||||
$input-border-color: var(--#{$prefix}border-color) !default;
|
$input-border-color: var(--#{$prefix}border-color) !default;
|
||||||
$input-border-width: $input-btn-border-width !default;
|
$input-border-width: $input-btn-border-width !default;
|
||||||
$input-box-shadow: $box-shadow-inset !default;
|
$input-box-shadow: var(--#{$prefix}box-shadow-inset) !default;
|
||||||
|
|
||||||
$input-border-radius: var(--#{$prefix}border-radius) !default;
|
$input-border-radius: var(--#{$prefix}border-radius) !default;
|
||||||
$input-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;
|
$input-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;
|
||||||
|
@ -1019,7 +1021,7 @@ $form-select-feedback-icon-size: $input-height-inner-half $input-height-i
|
||||||
$form-select-border-width: $input-border-width !default;
|
$form-select-border-width: $input-border-width !default;
|
||||||
$form-select-border-color: $input-border-color !default;
|
$form-select-border-color: $input-border-color !default;
|
||||||
$form-select-border-radius: $input-border-radius !default;
|
$form-select-border-radius: $input-border-radius !default;
|
||||||
$form-select-box-shadow: $box-shadow-inset !default;
|
$form-select-box-shadow: var(--#{$prefix}box-shadow-inset) !default;
|
||||||
|
|
||||||
$form-select-focus-border-color: $input-focus-border-color !default;
|
$form-select-focus-border-color: $input-focus-border-color !default;
|
||||||
$form-select-focus-width: $input-focus-width !default;
|
$form-select-focus-width: $input-focus-width !default;
|
||||||
|
@ -1042,9 +1044,9 @@ $form-select-transition: $input-transition !default;
|
||||||
$form-range-track-width: 100% !default;
|
$form-range-track-width: 100% !default;
|
||||||
$form-range-track-height: .5rem !default;
|
$form-range-track-height: .5rem !default;
|
||||||
$form-range-track-cursor: pointer !default;
|
$form-range-track-cursor: pointer !default;
|
||||||
$form-range-track-bg: var(--#{$prefix}tertiary-bg) !default;
|
$form-range-track-bg: var(--#{$prefix}secondary-bg) !default;
|
||||||
$form-range-track-border-radius: 1rem !default;
|
$form-range-track-border-radius: 1rem !default;
|
||||||
$form-range-track-box-shadow: $box-shadow-inset !default;
|
$form-range-track-box-shadow: var(--#{$prefix}box-shadow-inset) !default;
|
||||||
|
|
||||||
$form-range-thumb-width: 1rem !default;
|
$form-range-thumb-width: 1rem !default;
|
||||||
$form-range-thumb-height: $form-range-thumb-width !default;
|
$form-range-thumb-height: $form-range-thumb-width !default;
|
||||||
|
@ -1246,7 +1248,7 @@ $dropdown-border-width: var(--#{$prefix}border-width) !default;
|
||||||
$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default; // stylelint-disable-line function-disallowed-list
|
$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default; // stylelint-disable-line function-disallowed-list
|
||||||
$dropdown-divider-bg: $dropdown-border-color !default;
|
$dropdown-divider-bg: $dropdown-border-color !default;
|
||||||
$dropdown-divider-margin-y: $spacer * .5 !default;
|
$dropdown-divider-margin-y: $spacer * .5 !default;
|
||||||
$dropdown-box-shadow: $box-shadow !default;
|
$dropdown-box-shadow: var(--#{$prefix}box-shadow) !default;
|
||||||
|
|
||||||
$dropdown-link-color: var(--#{$prefix}body-color) !default;
|
$dropdown-link-color: var(--#{$prefix}body-color) !default;
|
||||||
$dropdown-link-hover-color: $dropdown-link-color !default;
|
$dropdown-link-hover-color: $dropdown-link-color !default;
|
||||||
|
@ -1381,7 +1383,9 @@ $accordion-transition: $btn-transition, border-radius .15s ea
|
||||||
$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;
|
$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;
|
||||||
$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis) !default;
|
$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis) !default;
|
||||||
|
|
||||||
$accordion-button-focus-border-color: $input-focus-border-color !default;
|
// fusv-disable
|
||||||
|
$accordion-button-focus-border-color: $input-focus-border-color !default; // Deprecated in v5.3.3
|
||||||
|
// fusv-enable
|
||||||
$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;
|
$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;
|
||||||
|
|
||||||
$accordion-icon-width: 1.25rem !default;
|
$accordion-icon-width: 1.25rem !default;
|
||||||
|
@ -1390,8 +1394,8 @@ $accordion-icon-active-color: $primary-text-emphasis !default;
|
||||||
$accordion-icon-transition: transform .2s ease-in-out !default;
|
$accordion-icon-transition: transform .2s ease-in-out !default;
|
||||||
$accordion-icon-transform: rotate(-180deg) !default;
|
$accordion-icon-transform: rotate(-180deg) !default;
|
||||||
|
|
||||||
$accordion-button-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
|
$accordion-button-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-color}' stroke-linecap='round' stroke-linejoin='round'><path d='M2 5L8 11L14 5'/></svg>") !default;
|
||||||
$accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
|
$accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-active-color}' stroke-linecap='round' stroke-linejoin='round'><path d='M2 5L8 11L14 5'/></svg>") !default;
|
||||||
// scss-docs-end accordion-variables
|
// scss-docs-end accordion-variables
|
||||||
|
|
||||||
// Tooltips
|
// Tooltips
|
||||||
|
@ -1435,7 +1439,7 @@ $popover-border-width: var(--#{$prefix}border-width) !default;
|
||||||
$popover-border-color: var(--#{$prefix}border-color-translucent) !default;
|
$popover-border-color: var(--#{$prefix}border-color-translucent) !default;
|
||||||
$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;
|
$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;
|
||||||
$popover-inner-border-radius: calc(#{$popover-border-radius} - #{$popover-border-width}) !default; // stylelint-disable-line function-disallowed-list
|
$popover-inner-border-radius: calc(#{$popover-border-radius} - #{$popover-border-width}) !default; // stylelint-disable-line function-disallowed-list
|
||||||
$popover-box-shadow: $box-shadow !default;
|
$popover-box-shadow: var(--#{$prefix}box-shadow) !default;
|
||||||
|
|
||||||
$popover-header-font-size: $font-size-base !default;
|
$popover-header-font-size: $font-size-base !default;
|
||||||
$popover-header-bg: var(--#{$prefix}secondary-bg) !default;
|
$popover-header-bg: var(--#{$prefix}secondary-bg) !default;
|
||||||
|
@ -1509,8 +1513,8 @@ $modal-content-border-color: var(--#{$prefix}border-color-translucent) !d
|
||||||
$modal-content-border-width: var(--#{$prefix}border-width) !default;
|
$modal-content-border-width: var(--#{$prefix}border-width) !default;
|
||||||
$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;
|
$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;
|
||||||
$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;
|
$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;
|
||||||
$modal-content-box-shadow-xs: $box-shadow-sm !default;
|
$modal-content-box-shadow-xs: var(--#{$prefix}box-shadow-sm) !default;
|
||||||
$modal-content-box-shadow-sm-up: $box-shadow !default;
|
$modal-content-box-shadow-sm-up: var(--#{$prefix}box-shadow) !default;
|
||||||
|
|
||||||
$modal-backdrop-bg: $black !default;
|
$modal-backdrop-bg: $black !default;
|
||||||
$modal-backdrop-opacity: .5 !default;
|
$modal-backdrop-opacity: .5 !default;
|
||||||
|
@ -1743,3 +1747,5 @@ $kbd-bg: var(--#{$prefix}body-color) !default;
|
||||||
$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6
|
$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6
|
||||||
|
|
||||||
$pre-color: null !default;
|
$pre-color: null !default;
|
||||||
|
|
||||||
|
@import "variables-dark"; // TODO: can be removed safely in v6, only here to avoid breaking changes in v5.3
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
.form-check-input {
|
.form-check-input {
|
||||||
--#{$prefix}form-check-bg: #{$form-check-input-bg};
|
--#{$prefix}form-check-bg: #{$form-check-input-bg};
|
||||||
|
|
||||||
|
flex-shrink: 0;
|
||||||
width: $form-check-input-width;
|
width: $form-check-input-width;
|
||||||
height: $form-check-input-width;
|
height: $form-check-input-width;
|
||||||
margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height
|
margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height
|
||||||
|
@ -130,7 +131,7 @@
|
||||||
margin-left: $form-switch-padding-start * -1;
|
margin-left: $form-switch-padding-start * -1;
|
||||||
background-image: var(--#{$prefix}form-switch-bg);
|
background-image: var(--#{$prefix}form-switch-bg);
|
||||||
background-position: left center;
|
background-position: left center;
|
||||||
@include border-radius($form-switch-border-radius);
|
@include border-radius($form-switch-border-radius, 0);
|
||||||
@include transition($form-switch-transition);
|
@include transition($form-switch-transition);
|
||||||
|
|
||||||
&:focus {
|
&:focus {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
@mixin bsBanner($file) {
|
@mixin bsBanner($file) {
|
||||||
/*!
|
/*!
|
||||||
* Bootstrap #{$file} v5.3.1 (https://getbootstrap.com/)
|
* Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)
|
||||||
* Copyright 2011-2023 The Bootstrap Authors
|
* Copyright 2011-2024 The Bootstrap Authors
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,12 @@
|
||||||
|
|
||||||
&:focus {
|
&:focus {
|
||||||
border-color: $border-color;
|
border-color: $border-color;
|
||||||
box-shadow: $focus-box-shadow;
|
@if $enable-shadows {
|
||||||
|
@include box-shadow($input-box-shadow, $focus-box-shadow);
|
||||||
|
} @else {
|
||||||
|
// Avoid using mixin so we can pass custom focus shadow properly
|
||||||
|
box-shadow: $focus-box-shadow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -100,7 +105,12 @@
|
||||||
|
|
||||||
&:focus {
|
&:focus {
|
||||||
border-color: $border-color;
|
border-color: $border-color;
|
||||||
box-shadow: $focus-box-shadow;
|
@if $enable-shadows {
|
||||||
|
@include box-shadow($form-select-box-shadow, $focus-box-shadow);
|
||||||
|
} @else {
|
||||||
|
// Avoid using mixin so we can pass custom focus shadow properly
|
||||||
|
box-shadow: $focus-box-shadow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
@mixin row-cols($count) {
|
@mixin row-cols($count) {
|
||||||
> * {
|
> * {
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
width: divide(100%, $count);
|
width: percentage(divide(1, $count));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start with `1` because `0` is and invalid value.
|
// Start with `1` because `0` is an invalid value.
|
||||||
// Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.
|
// Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.
|
||||||
@for $i from 1 through ($columns - 1) {
|
@for $i from 1 through ($columns - 1) {
|
||||||
.g-start#{$infix}-#{$i} {
|
.g-start#{$infix}-#{$i} {
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
// TODO: this file can be removed safely in v6 when `@import "variables-dark"` will be removed at the end of _variables.scss
|
||||||
|
|
||||||
|
@import "../../functions";
|
||||||
|
@import "../../variables";
|
||||||
|
// Voluntarily not importing _variables-dark.scss
|
||||||
|
@import "../../maps";
|
||||||
|
@import "../../mixins";
|
|
@ -258,7 +258,7 @@ $enable-important-utilities: false;
|
||||||
.desaturated-color-blue {
|
.desaturated-color-blue {
|
||||||
--bs-color-opacity: 1;
|
--bs-color-opacity: 1;
|
||||||
// Sass compilation will put a leading zero so we want to keep that one
|
// Sass compilation will put a leading zero so we want to keep that one
|
||||||
// stylelint-disable-next-line stylistic/number-leading-zero
|
// stylelint-disable-next-line @stylistic/number-leading-zero
|
||||||
--bs-color-saturation: 0.25;
|
--bs-color-saturation: 0.25;
|
||||||
color: hsla(192deg, var(--bs-color-saturation), 0, var(--bs-color-opacity));
|
color: hsla(192deg, var(--bs-color-saturation), 0, var(--bs-color-opacity));
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* JavaScript for Bootstrap's docs (https://getbootstrap.com/)
|
* JavaScript for Bootstrap's docs (https://getbootstrap.com/)
|
||||||
* Copyright 2011-2023 The Bootstrap Authors
|
* Copyright 2011-2024 The Bootstrap Authors
|
||||||
* Licensed under the Creative Commons Attribution 3.0 Unported License.
|
* Licensed under the Creative Commons Attribution 3.0 Unported License.
|
||||||
* For details, see https://creativecommons.org/licenses/by/3.0/.
|
* For details, see https://creativecommons.org/licenses/by/3.0/.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* JavaScript for Bootstrap's docs (https://getbootstrap.com/)
|
* JavaScript for Bootstrap's docs (https://getbootstrap.com/)
|
||||||
* Copyright 2011-2023 The Bootstrap Authors
|
* Copyright 2011-2024 The Bootstrap Authors
|
||||||
* Licensed under the Creative Commons Attribution 3.0 Unported License.
|
* Licensed under the Creative Commons Attribution 3.0 Unported License.
|
||||||
* For details, see https://creativecommons.org/licenses/by/3.0/.
|
* For details, see https://creativecommons.org/licenses/by/3.0/.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* JavaScript for Bootstrap's docs (https://getbootstrap.com/)
|
* JavaScript for Bootstrap's docs (https://getbootstrap.com/)
|
||||||
* Copyright 2011-2023 The Bootstrap Authors
|
* Copyright 2011-2024 The Bootstrap Authors
|
||||||
* Licensed under the Creative Commons Attribution 3.0 Unported License.
|
* Licensed under the Creative Commons Attribution 3.0 Unported License.
|
||||||
* For details, see https://creativecommons.org/licenses/by/3.0/.
|
* For details, see https://creativecommons.org/licenses/by/3.0/.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -379,6 +379,10 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.bd-example-snippet .highlight pre {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.highlight-toolbar {
|
.highlight-toolbar {
|
||||||
background-color: var(--bd-pre-bg);
|
background-color: var(--bd-pre-bg);
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
border-left: 0;
|
border-left: 0;
|
||||||
|
|
||||||
@include media-breakpoint-down(lg) {
|
@include media-breakpoint-down(lg) {
|
||||||
box-shadow: $box-shadow-lg;
|
box-shadow: var(--bs-box-shadow-lg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
main {
|
main {
|
||||||
a,
|
a,
|
||||||
button,
|
button,
|
||||||
|
input,
|
||||||
|
select,
|
||||||
|
textarea,
|
||||||
h2,
|
h2,
|
||||||
h3,
|
h3,
|
||||||
h4,
|
h4,
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
@include media-breakpoint-down(lg) {
|
@include media-breakpoint-down(lg) {
|
||||||
.offcanvas-lg {
|
.offcanvas-lg {
|
||||||
border-right-color: var(--bs-border-color);
|
border-right-color: var(--bs-border-color);
|
||||||
box-shadow: $box-shadow-lg;
|
box-shadow: var(--bs-box-shadow-lg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*!
|
/*!
|
||||||
* Bootstrap Docs (https://getbootstrap.com/)
|
* Bootstrap Docs (https://getbootstrap.com/)
|
||||||
* Copyright 2011-2023 The Bootstrap Authors
|
* Copyright 2011-2024 The Bootstrap Authors
|
||||||
* Licensed under the Creative Commons Attribution 3.0 Unported License.
|
* Licensed under the Creative Commons Attribution 3.0 Unported License.
|
||||||
* For details, see https://creativecommons.org/licenses/by/3.0/.
|
* For details, see https://creativecommons.org/licenses/by/3.0/.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -11,7 +11,7 @@ toc: true
|
||||||
|
|
||||||
## How it works
|
## How it works
|
||||||
|
|
||||||
The accordion uses [collapse]({{< docsref "/components/collapse" >}}) internally to make it collapsible. To render an accordion that's expanded, add the `.open` class on the `.accordion`.
|
The accordion uses [collapse]({{< docsref "/components/collapse" >}}) internally to make it collapsible.
|
||||||
|
|
||||||
{{< callout info >}}
|
{{< callout info >}}
|
||||||
{{< partial "callouts/info-prefersreducedmotion.md" >}}
|
{{< partial "callouts/info-prefersreducedmotion.md" >}}
|
||||||
|
@ -21,6 +21,10 @@ The accordion uses [collapse]({{< docsref "/components/collapse" >}}) internally
|
||||||
|
|
||||||
Click the accordions below to expand/collapse the accordion content.
|
Click the accordions below to expand/collapse the accordion content.
|
||||||
|
|
||||||
|
To render an accordion that's expanded by default:
|
||||||
|
- add the `.show` class on the `.accordion-collapse` element.
|
||||||
|
- drop the `.collapsed` class from the `.accordion-button` element and set its `aria-expanded` attribute to `true`.
|
||||||
|
|
||||||
{{< example >}}
|
{{< example >}}
|
||||||
<div class="accordion" id="accordionExample">
|
<div class="accordion" id="accordionExample">
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
|
|
|
@ -162,13 +162,11 @@ As part of Bootstrap's evolving CSS variables approach, alerts now use local CSS
|
||||||
|
|
||||||
{{< deprecated-in "5.3.0" >}}
|
{{< deprecated-in "5.3.0" >}}
|
||||||
|
|
||||||
Used in combination with `$theme-colors` to create contextual modifier classes for our alerts.
|
|
||||||
|
|
||||||
{{< scss-docs name="alert-variant-mixin" file="scss/mixins/_alert.scss" >}}
|
{{< scss-docs name="alert-variant-mixin" file="scss/mixins/_alert.scss" >}}
|
||||||
|
|
||||||
### Sass loops
|
### Sass loops
|
||||||
|
|
||||||
Loop that generates the modifier classes with the `alert-variant()` mixin.
|
Loop that generates the modifier classes with an overriding of CSS variables.
|
||||||
|
|
||||||
{{< scss-docs name="alert-modifiers" file="scss/_alert.scss" >}}
|
{{< scss-docs name="alert-modifiers" file="scss/_alert.scss" >}}
|
||||||
|
|
||||||
|
|
|
@ -13,12 +13,12 @@ Badges scale to match the size of the immediate parent element by using relative
|
||||||
### Headings
|
### Headings
|
||||||
|
|
||||||
{{< example >}}
|
{{< example >}}
|
||||||
<h1>Example heading <span class="badge bg-secondary">New</span></h1>
|
<h1>Example heading <span class="badge text-bg-secondary">New</span></h1>
|
||||||
<h2>Example heading <span class="badge bg-secondary">New</span></h2>
|
<h2>Example heading <span class="badge text-bg-secondary">New</span></h2>
|
||||||
<h3>Example heading <span class="badge bg-secondary">New</span></h3>
|
<h3>Example heading <span class="badge text-bg-secondary">New</span></h3>
|
||||||
<h4>Example heading <span class="badge bg-secondary">New</span></h4>
|
<h4>Example heading <span class="badge text-bg-secondary">New</span></h4>
|
||||||
<h5>Example heading <span class="badge bg-secondary">New</span></h5>
|
<h5>Example heading <span class="badge text-bg-secondary">New</span></h5>
|
||||||
<h6>Example heading <span class="badge bg-secondary">New</span></h6>
|
<h6>Example heading <span class="badge text-bg-secondary">New</span></h6>
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
### Buttons
|
### Buttons
|
||||||
|
|
|
@ -63,7 +63,7 @@ Subtitles are used by adding a `.card-subtitle` to a `<h*>` tag. If the `.card-t
|
||||||
|
|
||||||
### Images
|
### Images
|
||||||
|
|
||||||
`.card-img-top` places an image to the top of the card. With `.card-text`, text can be added to the card. Text within `.card-text` can also be styled with the standard HTML tags.
|
`.card-img-top` and `.card-img-bottom` respectively set the top and bottom corners rounded to match the card's borders. With `.card-text`, text can be added to the card. Text within `.card-text` can also be styled with the standard HTML tags.
|
||||||
|
|
||||||
{{< example >}}
|
{{< example >}}
|
||||||
<div class="card" style="width: 18rem;">
|
<div class="card" style="width: 18rem;">
|
||||||
|
|
|
@ -117,21 +117,21 @@ These work great with custom content as well.
|
||||||
<div class="fw-bold">Subheading</div>
|
<div class="fw-bold">Subheading</div>
|
||||||
Content for list item
|
Content for list item
|
||||||
</div>
|
</div>
|
||||||
<span class="badge bg-primary rounded-pill">14</span>
|
<span class="badge text-bg-primary rounded-pill">14</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item d-flex justify-content-between align-items-start">
|
<li class="list-group-item d-flex justify-content-between align-items-start">
|
||||||
<div class="ms-2 me-auto">
|
<div class="ms-2 me-auto">
|
||||||
<div class="fw-bold">Subheading</div>
|
<div class="fw-bold">Subheading</div>
|
||||||
Content for list item
|
Content for list item
|
||||||
</div>
|
</div>
|
||||||
<span class="badge bg-primary rounded-pill">14</span>
|
<span class="badge text-bg-primary rounded-pill">14</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item d-flex justify-content-between align-items-start">
|
<li class="list-group-item d-flex justify-content-between align-items-start">
|
||||||
<div class="ms-2 me-auto">
|
<div class="ms-2 me-auto">
|
||||||
<div class="fw-bold">Subheading</div>
|
<div class="fw-bold">Subheading</div>
|
||||||
Content for list item
|
Content for list item
|
||||||
</div>
|
</div>
|
||||||
<span class="badge bg-primary rounded-pill">14</span>
|
<span class="badge text-bg-primary rounded-pill">14</span>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
@ -200,15 +200,15 @@ Add badges to any list group item to show unread counts, activity, and more with
|
||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||||||
A list item
|
A list item
|
||||||
<span class="badge bg-primary rounded-pill">14</span>
|
<span class="badge text-bg-primary rounded-pill">14</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||||||
A second list item
|
A second list item
|
||||||
<span class="badge bg-primary rounded-pill">2</span>
|
<span class="badge text-bg-primary rounded-pill">2</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||||||
A third list item
|
A third list item
|
||||||
<span class="badge bg-primary rounded-pill">1</span>
|
<span class="badge text-bg-primary rounded-pill">1</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
@ -321,8 +321,6 @@ As part of Bootstrap's evolving CSS variables approach, list groups now use loca
|
||||||
|
|
||||||
{{< deprecated-in "5.3.0" >}}
|
{{< deprecated-in "5.3.0" >}}
|
||||||
|
|
||||||
Used in combination with `$theme-colors` to generate the [contextual variant classes](#variants) for `.list-group-item`s.
|
|
||||||
|
|
||||||
{{< scss-docs name="list-group-mixin" file="scss/mixins/_list-group.scss" >}}
|
{{< scss-docs name="list-group-mixin" file="scss/mixins/_list-group.scss" >}}
|
||||||
|
|
||||||
### Sass loops
|
### Sass loops
|
||||||
|
|
|
@ -218,7 +218,7 @@ When modals become too long for the user's viewport or device, they scroll indep
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
You can also create a scrollable modal that allows scroll the modal body by adding `.modal-dialog-scrollable` to `.modal-dialog`.
|
You can also create a scrollable modal that allows scrolling the modal body by adding `.modal-dialog-scrollable` to `.modal-dialog`.
|
||||||
|
|
||||||
<div class="modal fade" id="exampleModalScrollable" tabindex="-1" aria-labelledby="exampleModalScrollableTitle" aria-hidden="true">
|
<div class="modal fade" id="exampleModalScrollable" tabindex="-1" aria-labelledby="exampleModalScrollableTitle" aria-hidden="true">
|
||||||
<div class="modal-dialog modal-dialog-scrollable">
|
<div class="modal-dialog modal-dialog-scrollable">
|
||||||
|
|
|
@ -144,7 +144,7 @@ When backdrop is set to static, the offcanvas will not close when clicking outsi
|
||||||
Change the appearance of offcanvases with utilities to better match them to different contexts like dark navbars. Here we add `.text-bg-dark` to the `.offcanvas` and `.btn-close-white` to `.btn-close` for proper styling with a dark offcanvas. If you have dropdowns within, consider also adding `.dropdown-menu-dark` to `.dropdown-menu`.
|
Change the appearance of offcanvases with utilities to better match them to different contexts like dark navbars. Here we add `.text-bg-dark` to the `.offcanvas` and `.btn-close-white` to `.btn-close` for proper styling with a dark offcanvas. If you have dropdowns within, consider also adding `.dropdown-menu-dark` to `.dropdown-menu`.
|
||||||
|
|
||||||
{{< callout warning >}}
|
{{< callout warning >}}
|
||||||
Heads up! Dark variants for components were deprecated in v5.3.0 with the introduction of color modes. Instead of manually adding classes mentioned above, set `data-bs-theme="dark"` on the root element, a parent wrapper, or the component itself.
|
**Heads up!** Dark variants for components were deprecated in v5.3.0 with the introduction of color modes. Instead of manually adding classes mentioned above, set `data-bs-theme="dark"` on the root element, a parent wrapper, or the component itself.
|
||||||
{{< /callout >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
{{< example class="bd-example-offcanvas p-0 bg-body-secondary overflow-hidden" >}}
|
{{< example class="bd-example-offcanvas p-0 bg-body-secondary overflow-hidden" >}}
|
||||||
|
@ -328,6 +328,7 @@ const bsOffcanvas = new bootstrap.Offcanvas('#myOffcanvas')
|
||||||
{{< bs-table "table" >}}
|
{{< bs-table "table" >}}
|
||||||
| Method | Description |
|
| Method | Description |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
|
| `dispose` | Destroys an element's offcanvas. |
|
||||||
| `getInstance` | *Static* method which allows you to get the offcanvas instance associated with a DOM element. |
|
| `getInstance` | *Static* method which allows you to get the offcanvas instance associated with a DOM element. |
|
||||||
| `getOrCreateInstance` | *Static* method which allows you to get the offcanvas instance associated with a DOM element, or create a new one in case it wasn't initialized. |
|
| `getOrCreateInstance` | *Static* method which allows you to get the offcanvas instance associated with a DOM element, or create a new one in case it wasn't initialized. |
|
||||||
| `hide` | Hides an offcanvas element. **Returns to the caller before the offcanvas element has actually been hidden** (i.e. before the `hidden.bs.offcanvas` event occurs). |
|
| `hide` | Hides an offcanvas element. **Returns to the caller before the offcanvas element has actually been hidden** (i.e. before the `hidden.bs.offcanvas` event occurs). |
|
||||||
|
|
|
@ -198,7 +198,7 @@ Note that for security reasons the `sanitize`, `sanitizeFn`, and `allowList` opt
|
||||||
| `sanitize` | boolean | `true` | Enable or disable the sanitization. If activated `'template'`, `'content'` and `'title'` options will be sanitized. |
|
| `sanitize` | boolean | `true` | Enable or disable the sanitization. If activated `'template'`, `'content'` and `'title'` options will be sanitized. |
|
||||||
| `sanitizeFn` | null, function | `null` | Here you can supply your own sanitize function. This can be useful if you prefer to use a dedicated library to perform sanitization. |
|
| `sanitizeFn` | null, function | `null` | Here you can supply your own sanitize function. This can be useful if you prefer to use a dedicated library to perform sanitization. |
|
||||||
| `selector` | string, false | `false` | If a selector is provided, popover objects will be delegated to the specified targets. In practice, this is used to also apply popovers to dynamically added DOM elements (`jQuery.on` support). See [this issue]({{< param repo >}}/issues/4215) and [an informative example](https://codepen.io/Johann-S/pen/djJYPb). **Note**: `title` attribute must not be used as a selector. |
|
| `selector` | string, false | `false` | If a selector is provided, popover objects will be delegated to the specified targets. In practice, this is used to also apply popovers to dynamically added DOM elements (`jQuery.on` support). See [this issue]({{< param repo >}}/issues/4215) and [an informative example](https://codepen.io/Johann-S/pen/djJYPb). **Note**: `title` attribute must not be used as a selector. |
|
||||||
| `template` | string | `'<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>'` | Base HTML to use when creating the popover. The popover's `title` will be injected into the `.popover-inner`. `.popover-arrow` will become the popover's arrow. The outermost wrapper element should have the `.popover` class and `role="popover"`. |
|
| `template` | string | `'<div class="popover" role="tooltip"><div class="popover-arrow"></div><div class="popover-inner"></div></div>'` | Base HTML to use when creating the popover. The popover's `title` will be injected into the `.popover-inner`. `.popover-arrow` will become the popover's arrow. The outermost wrapper element should have the `.popover` class and `role="tooltip"`. |
|
||||||
| `title` | string, element, function | `''` | The popover title. If a function is given, it will be called with its `this` reference set to the element that the popover is attached to. |
|
| `title` | string, element, function | `''` | The popover title. If a function is given, it will be called with its `this` reference set to the element that the popover is attached to. |
|
||||||
| `trigger` | string | `'hover focus'` | How popover is triggered: click, hover, focus, manual. You may pass multiple triggers; separate them with a space. `'manual'` indicates that the popover will be triggered programmatically via the `.popover('show')`, `.popover('hide')` and `.popover('toggle')` methods; this value cannot be combined with any other trigger. `'hover'` on its own will result in popovers that cannot be triggered via the keyboard, and should only be used if alternative methods for conveying the same information for keyboard users is present. |
|
| `trigger` | string | `'hover focus'` | How popover is triggered: click, hover, focus, manual. You may pass multiple triggers; separate them with a space. `'manual'` indicates that the popover will be triggered programmatically via the `.popover('show')`, `.popover('hide')` and `.popover('toggle')` methods; this value cannot be combined with any other trigger. `'hover'` on its own will result in popovers that cannot be triggered via the keyboard, and should only be used if alternative methods for conveying the same information for keyboard users is present. |
|
||||||
{{< /bs-table >}}
|
{{< /bs-table >}}
|
||||||
|
@ -249,7 +249,7 @@ const popover = new bootstrap.Popover(element, {
|
||||||
const popover = bootstrap.Popover.getOrCreateInstance('#example') // Returns a Bootstrap popover instance
|
const popover = bootstrap.Popover.getOrCreateInstance('#example') // Returns a Bootstrap popover instance
|
||||||
|
|
||||||
// setContent example
|
// setContent example
|
||||||
myPopover.setContent({
|
popover.setContent({
|
||||||
'.popover-header': 'another title',
|
'.popover-header': 'another title',
|
||||||
'.popover-body': 'another content'
|
'.popover-body': 'another content'
|
||||||
})
|
})
|
||||||
|
|
|
@ -64,7 +64,7 @@ $font-family-sans-serif:
|
||||||
// Android
|
// Android
|
||||||
Roboto,
|
Roboto,
|
||||||
// older macOS and iOS
|
// older macOS and iOS
|
||||||
"Helvetica Neue"
|
"Helvetica Neue",
|
||||||
// Linux
|
// Linux
|
||||||
"Noto Sans",
|
"Noto Sans",
|
||||||
"Liberation Sans",
|
"Liberation Sans",
|
||||||
|
|
|
@ -549,7 +549,7 @@ Similar to tables and dark tables, use the modifier classes `.table-light` or `.
|
||||||
|
|
||||||
<div class="bd-example">
|
<div class="bd-example">
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead class="table-light">
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">#</th>
|
<th scope="col">#</th>
|
||||||
<th scope="col">First</th>
|
<th scope="col">First</th>
|
||||||
|
|
|
@ -18,341 +18,343 @@ Colors ending in `-rgb` provide the `red, green, blue` values for use in `rgb()`
|
||||||
**Heads up!** There's some potential confusion with our new secondary and tertiary colors, and our existing secondary theme color, as well as our light and dark theme colors. Expect this to be ironed out in v6.
|
**Heads up!** There's some potential confusion with our new secondary and tertiary colors, and our existing secondary theme color, as well as our light and dark theme colors. Expect this to be ironed out in v6.
|
||||||
{{< /callout >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
<table class="table table-swatches">
|
<div class="table-responsive">
|
||||||
<thead>
|
<table class="table table-swatches">
|
||||||
<tr>
|
<thead>
|
||||||
<th style="width: 340px;">Description</th>
|
<tr>
|
||||||
<th style="width: 200px;" class="ps-0">Swatch</th>
|
<th style="width: 340px;">Description</th>
|
||||||
<th>Variables</th>
|
<th style="width: 200px;" class="ps-0">Swatch</th>
|
||||||
</tr>
|
<th>Variables</th>
|
||||||
</thead>
|
</tr>
|
||||||
<tbody>
|
</thead>
|
||||||
<tr>
|
<tbody>
|
||||||
<td rowspan="2">
|
<tr>
|
||||||
{{< markdown >}}**Body —** Default foreground (color) and background, including components.{{< /markdown >}}
|
<td rowspan="2">
|
||||||
</td>
|
{{< markdown >}}**Body —** Default foreground (color) and background, including components.{{< /markdown >}}
|
||||||
<td class="ps-0">
|
</td>
|
||||||
<div class="p-3 rounded-2" style="background-color: var(--bs-body-color);"> </div>
|
<td class="ps-0">
|
||||||
</td>
|
<div class="p-3 rounded-2" style="background-color: var(--bs-body-color);"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-body-color`<br>`--bs-body-color-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-body-color`<br>`--bs-body-color-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2 border" style="background-color: var(--bs-body-bg);"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2 border" style="background-color: var(--bs-body-bg);"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-body-bg`<br>`--bs-body-bg-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-body-bg`<br>`--bs-body-bg-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td rowspan="2">
|
<tr>
|
||||||
{{< markdown >}}**Secondary —** Use the `color` option for lighter text. Use the `bg` option for dividers and to indicate disabled component states.{{< /markdown >}}
|
<td rowspan="2">
|
||||||
</td>
|
{{< markdown >}}**Secondary —** Use the `color` option for lighter text. Use the `bg` option for dividers and to indicate disabled component states.{{< /markdown >}}
|
||||||
<td class="ps-0">
|
</td>
|
||||||
<div class="p-3 rounded-2" style="background-color: var(--bs-secondary-color);"> </div>
|
<td class="ps-0">
|
||||||
</td>
|
<div class="p-3 rounded-2" style="background-color: var(--bs-secondary-color);"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-secondary-color`<br>`--bs-secondary-color-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-secondary-color`<br>`--bs-secondary-color-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2 border" style="background-color: var(--bs-secondary-bg);"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2 border" style="background-color: var(--bs-secondary-bg);"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-secondary-bg`<br>`--bs-secondary-bg-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-secondary-bg`<br>`--bs-secondary-bg-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td rowspan="2">
|
<tr>
|
||||||
{{< markdown >}}**Tertiary —** Use the `color` option for even lighter text. Use the `bg` option to style backgrounds for hover states, accents, and wells.{{< /markdown >}}
|
<td rowspan="2">
|
||||||
</td>
|
{{< markdown >}}**Tertiary —** Use the `color` option for even lighter text. Use the `bg` option to style backgrounds for hover states, accents, and wells.{{< /markdown >}}
|
||||||
<td class="ps-0">
|
</td>
|
||||||
<div class="p-3 rounded-2" style="background-color: var(--bs-tertiary-color);"> </div>
|
<td class="ps-0">
|
||||||
</td>
|
<div class="p-3 rounded-2" style="background-color: var(--bs-tertiary-color);"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-tertiary-color`<br>`--bs-tertiary-color-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-tertiary-color`<br>`--bs-tertiary-color-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2 border" style="background-color: var(--bs-tertiary-bg);"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2 border" style="background-color: var(--bs-tertiary-bg);"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-tertiary-bg`<br>`--bs-tertiary-bg-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-tertiary-bg`<br>`--bs-tertiary-bg-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
{{< markdown >}}**Emphasis —** For higher contrast text. Not applicable for backgrounds.{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}**Emphasis —** For higher contrast text. Not applicable for backgrounds.{{< /markdown >}}
|
||||||
<td class="ps-0">
|
</td>
|
||||||
<div class="p-3 rounded-2" style="background-color: var(--bs-emphasis-color);"> </div>
|
<td class="ps-0">
|
||||||
</td>
|
<div class="p-3 rounded-2" style="background-color: var(--bs-emphasis-color);"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-emphasis-color`<br>`--bs-emphasis-color-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-emphasis-color`<br>`--bs-emphasis-color-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
{{< markdown >}}**Border —** For component borders, dividers, and rules. Use `--bs-border-color-translucent` to blend with backgrounds with an `rgba()` value.{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}**Border —** For component borders, dividers, and rules. Use `--bs-border-color-translucent` to blend with backgrounds with an `rgba()` value.{{< /markdown >}}
|
||||||
<td class="ps-0">
|
</td>
|
||||||
<div class="p-3 rounded-2" style="background-color: var(--bs-border-color);"> </div>
|
<td class="ps-0">
|
||||||
</td>
|
<div class="p-3 rounded-2" style="background-color: var(--bs-border-color);"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-border-color`<br>`--bs-border-color-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-border-color`<br>`--bs-border-color-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td rowspan="4">
|
<tr>
|
||||||
{{< markdown >}}**Primary —** Main theme color, used for hyperlinks, focus styles, and component and form active states.{{< /markdown >}}
|
<td rowspan="4">
|
||||||
</td>
|
{{< markdown >}}**Primary —** Main theme color, used for hyperlinks, focus styles, and component and form active states.{{< /markdown >}}
|
||||||
<td class="ps-0">
|
</td>
|
||||||
<div class="p-3 rounded-2 bg-primary"> </div>
|
<td class="ps-0">
|
||||||
</td>
|
<div class="p-3 rounded-2 bg-primary"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-primary`<br>`--bs-primary-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-primary`<br>`--bs-primary-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="background-color: var(--bs-primary-bg-subtle)"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="background-color: var(--bs-primary-bg-subtle)"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-primary-bg-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-primary-bg-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="border: 5px var(--bs-primary-border-subtle) solid"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="border: 5px var(--bs-primary-border-subtle) solid"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-primary-border-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-primary-border-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="py-3 fw-bold h5" style="color: var(--bs-primary-text-emphasis)">Text</div>
|
<td>
|
||||||
</td>
|
<div class="py-3 fw-bold h5" style="color: var(--bs-primary-text-emphasis)">Text</div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-primary-text-emphasis`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-primary-text-emphasis`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td rowspan="4">
|
<tr>
|
||||||
{{< markdown >}}**Success —** Theme color used for positive or successful actions and information.{{< /markdown >}}
|
<td rowspan="4">
|
||||||
</td>
|
{{< markdown >}}**Success —** Theme color used for positive or successful actions and information.{{< /markdown >}}
|
||||||
<td class="ps-0">
|
</td>
|
||||||
<div class="p-3 rounded-2 bg-success"> </div>
|
<td class="ps-0">
|
||||||
</td>
|
<div class="p-3 rounded-2 bg-success"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-success`<br>`--bs-success-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-success`<br>`--bs-success-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="background-color: var(--bs-success-bg-subtle)"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="background-color: var(--bs-success-bg-subtle)"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-success-bg-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-success-bg-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="border: 5px var(--bs-success-border-subtle) solid"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="border: 5px var(--bs-success-border-subtle) solid"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-success-border-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-success-border-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="py-3 fw-bold h5" style="color: var(--bs-success-text-emphasis)">Text</div>
|
<td>
|
||||||
</td>
|
<div class="py-3 fw-bold h5" style="color: var(--bs-success-text-emphasis)">Text</div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-success-text-emphasis`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-success-text-emphasis`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td rowspan="4">
|
<tr>
|
||||||
{{< markdown >}}**Danger —** Theme color used for errors and dangerous actions.{{< /markdown >}}
|
<td rowspan="4">
|
||||||
</td>
|
{{< markdown >}}**Danger —** Theme color used for errors and dangerous actions.{{< /markdown >}}
|
||||||
<td class="ps-0">
|
</td>
|
||||||
<div class="p-3 rounded-2 bg-danger"> </div>
|
<td class="ps-0">
|
||||||
</td>
|
<div class="p-3 rounded-2 bg-danger"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-danger`<br>`--bs-danger-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-danger`<br>`--bs-danger-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="background-color: var(--bs-danger-bg-subtle)"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="background-color: var(--bs-danger-bg-subtle)"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-danger-bg-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-danger-bg-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="border: 5px var(--bs-danger-border-subtle) solid"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="border: 5px var(--bs-danger-border-subtle) solid"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-danger-border-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-danger-border-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="py-3 fw-bold h5" style="color: var(--bs-danger-text-emphasis)">Text</div>
|
<td>
|
||||||
</td>
|
<div class="py-3 fw-bold h5" style="color: var(--bs-danger-text-emphasis)">Text</div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-danger-text-emphasis`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-danger-text-emphasis`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td rowspan="4">
|
<tr>
|
||||||
{{< markdown >}}**Warning —** Theme color used for non-destructive warning messages.{{< /markdown >}}
|
<td rowspan="4">
|
||||||
</td>
|
{{< markdown >}}**Warning —** Theme color used for non-destructive warning messages.{{< /markdown >}}
|
||||||
<td class="ps-0">
|
</td>
|
||||||
<div class="p-3 rounded-2 bg-warning"> </div>
|
<td class="ps-0">
|
||||||
</td>
|
<div class="p-3 rounded-2 bg-warning"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-warning`<br>`--bs-warning-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-warning`<br>`--bs-warning-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="background-color: var(--bs-warning-bg-subtle)"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="background-color: var(--bs-warning-bg-subtle)"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-warning-bg-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-warning-bg-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="border: 5px var(--bs-warning-border-subtle) solid"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="border: 5px var(--bs-warning-border-subtle) solid"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-warning-border-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-warning-border-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="py-3 fw-bold h5" style="color: var(--bs-warning-text-emphasis)">Text</div>
|
<td>
|
||||||
</td>
|
<div class="py-3 fw-bold h5" style="color: var(--bs-warning-text-emphasis)">Text</div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-warning-text-emphasis`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-warning-text-emphasis`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td rowspan="4">
|
<tr>
|
||||||
{{< markdown >}}**Info —** Theme color used for neutral and informative content.{{< /markdown >}}
|
<td rowspan="4">
|
||||||
</td>
|
{{< markdown >}}**Info —** Theme color used for neutral and informative content.{{< /markdown >}}
|
||||||
<td class="ps-0">
|
</td>
|
||||||
<div class="p-3 rounded-2 bg-info"> </div>
|
<td class="ps-0">
|
||||||
</td>
|
<div class="p-3 rounded-2 bg-info"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-info`<br>`--bs-info-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-info`<br>`--bs-info-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="background-color: var(--bs-info-bg-subtle)"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="background-color: var(--bs-info-bg-subtle)"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-info-bg-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-info-bg-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="border: 5px var(--bs-info-border-subtle) solid"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="border: 5px var(--bs-info-border-subtle) solid"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-info-border-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-info-border-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="py-3 fw-bold h5" style="color: var(--bs-info-text-emphasis)">Text</div>
|
<td>
|
||||||
</td>
|
<div class="py-3 fw-bold h5" style="color: var(--bs-info-text-emphasis)">Text</div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-info-text-emphasis`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-info-text-emphasis`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td rowspan="4">
|
<tr>
|
||||||
{{< markdown >}}**Light —** Additional theme option for less contrasting colors.{{< /markdown >}}
|
<td rowspan="4">
|
||||||
</td>
|
{{< markdown >}}**Light —** Additional theme option for less contrasting colors.{{< /markdown >}}
|
||||||
<td class="ps-0">
|
</td>
|
||||||
<div class="p-3 rounded-2 bg-light"> </div>
|
<td class="ps-0">
|
||||||
</td>
|
<div class="p-3 rounded-2 bg-light"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-light`<br>`--bs-light-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-light`<br>`--bs-light-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="background-color: var(--bs-light-bg-subtle)"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="background-color: var(--bs-light-bg-subtle)"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-light-bg-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-light-bg-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="border: 5px var(--bs-light-border-subtle) solid"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="border: 5px var(--bs-light-border-subtle) solid"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-light-border-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-light-border-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="py-3 fw-bold h5" style="color: var(--bs-light-text-emphasis)">Text</div>
|
<td>
|
||||||
</td>
|
<div class="py-3 fw-bold h5" style="color: var(--bs-light-text-emphasis)">Text</div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-light-text-emphasis`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-light-text-emphasis`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td rowspan="4">
|
<tr>
|
||||||
{{< markdown >}}**Dark —** Additional theme option for higher contrasting colors.{{< /markdown >}}
|
<td rowspan="4">
|
||||||
</td>
|
{{< markdown >}}**Dark —** Additional theme option for higher contrasting colors.{{< /markdown >}}
|
||||||
<td class="ps-0">
|
</td>
|
||||||
<div class="p-3 rounded-2 bg-dark"> </div>
|
<td class="ps-0">
|
||||||
</td>
|
<div class="p-3 rounded-2 bg-dark"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-dark`<br>`--bs-dark-rgb`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-dark`<br>`--bs-dark-rgb`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="background-color: var(--bs-dark-bg-subtle)"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="background-color: var(--bs-dark-bg-subtle)"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-dark-bg-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-dark-bg-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="p-3 rounded-2" style="border: 5px var(--bs-dark-border-subtle) solid"> </div>
|
<td>
|
||||||
</td>
|
<div class="p-3 rounded-2" style="border: 5px var(--bs-dark-border-subtle) solid"> </div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-dark-border-subtle`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-dark-border-subtle`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<div class="py-3 fw-bold h5" style="color: var(--bs-dark-text-emphasis)">Text</div>
|
<td>
|
||||||
</td>
|
<div class="py-3 fw-bold h5" style="color: var(--bs-dark-text-emphasis)">Text</div>
|
||||||
<td>
|
</td>
|
||||||
{{< markdown >}}`--bs-dark-text-emphasis`{{< /markdown >}}
|
<td>
|
||||||
</td>
|
{{< markdown >}}`--bs-dark-text-emphasis`{{< /markdown >}}
|
||||||
</tr>
|
</td>
|
||||||
</tbody>
|
</tr>
|
||||||
</table>
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
### Using the new colors
|
### Using the new colors
|
||||||
|
|
||||||
|
|
|
@ -244,6 +244,8 @@ Next to the [Sass maps]({{< docsref "/customize/color#color-sass-maps" >}}) we h
|
||||||
|
|
||||||
You can lighten or darken colors with Bootstrap's `tint-color()` and `shade-color()` functions. These functions will mix colors with black or white, unlike Sass' native `lighten()` and `darken()` functions which will change the lightness by a fixed amount, which often doesn't lead to the desired effect.
|
You can lighten or darken colors with Bootstrap's `tint-color()` and `shade-color()` functions. These functions will mix colors with black or white, unlike Sass' native `lighten()` and `darken()` functions which will change the lightness by a fixed amount, which often doesn't lead to the desired effect.
|
||||||
|
|
||||||
|
`shift-color()` combines these two functions by shading the color if the weight is positive and tinting the color if the weight is negative.
|
||||||
|
|
||||||
{{< scss-docs name="color-functions" file="scss/_functions.scss" >}}
|
{{< scss-docs name="color-functions" file="scss/_functions.scss" >}}
|
||||||
|
|
||||||
In practice, you'd call the function and pass in the color and weight parameters.
|
In practice, you'd call the function and pass in the color and weight parameters.
|
||||||
|
@ -256,6 +258,11 @@ In practice, you'd call the function and pass in the color and weight parameters
|
||||||
.custom-element-2 {
|
.custom-element-2 {
|
||||||
color: shade-color($danger, 30%);
|
color: shade-color($danger, 30%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.custom-element-3 {
|
||||||
|
color: shift-color($success, 40%);
|
||||||
|
background-color: shift-color($success, -60%);
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Color contrast
|
### Color contrast
|
||||||
|
@ -338,18 +345,18 @@ Our `scss/mixins/` directory has a ton of mixins that power parts of Bootstrap a
|
||||||
|
|
||||||
### Color schemes
|
### Color schemes
|
||||||
|
|
||||||
A shorthand mixin for the `prefers-color-scheme` media query is available with support for `light`, `dark`, and custom color schemes. See [the color modes documentation]({{< docsref "/customize/color-modes" >}}) for information on our color mode mixin.
|
A shorthand mixin for the `prefers-color-scheme` media query is available with support for `light` and `dark` color schemes. See [the color modes documentation]({{< docsref "/customize/color-modes" >}}) for information on our color mode mixin.
|
||||||
|
|
||||||
{{< scss-docs name="mixin-color-scheme" file="scss/mixins/_color-scheme.scss" >}}
|
{{< scss-docs name="mixin-color-scheme" file="scss/mixins/_color-scheme.scss" >}}
|
||||||
|
|
||||||
```scss
|
```scss
|
||||||
.custom-element {
|
.custom-element {
|
||||||
|
@include color-scheme(light) {
|
||||||
|
// Insert light mode styles here
|
||||||
|
}
|
||||||
|
|
||||||
@include color-scheme(dark) {
|
@include color-scheme(dark) {
|
||||||
// Insert dark mode styles here
|
// Insert dark mode styles here
|
||||||
}
|
}
|
||||||
|
|
||||||
@include color-scheme(custom-named-scheme) {
|
|
||||||
// Insert custom color scheme styles here
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -192,7 +192,7 @@ extra_css:
|
||||||
{{< placeholder width="100%" height="96" background="#777" color="#777" text="false" title="false" >}}
|
{{< placeholder width="100%" height="96" background="#777" color="#777" text="false" title="false" >}}
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-8">
|
||||||
<h6 class="mb-0">مثال على عنوان منشور المدونة</h6>
|
<h6 class="mb-0">مثال على عنوان منشور المدونة</h6>
|
||||||
<small class="text-body-secondary">15 يناير 2023</small>
|
<small class="text-body-secondary">15 يناير 2024</small>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -201,7 +201,7 @@ extra_css:
|
||||||
{{< placeholder width="100%" height="96" background="#777" color="#777" text="false" title="false" >}}
|
{{< placeholder width="100%" height="96" background="#777" color="#777" text="false" title="false" >}}
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-8">
|
||||||
<h6 class="mb-0">هذا عنوان آخر للمدونة</h6>
|
<h6 class="mb-0">هذا عنوان آخر للمدونة</h6>
|
||||||
<small class="text-body-secondary">14 يناير 2023</small>
|
<small class="text-body-secondary">14 يناير 2024</small>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -210,7 +210,7 @@ extra_css:
|
||||||
{{< placeholder width="100%" height="96" background="#777" color="#777" text="false" title="false" >}}
|
{{< placeholder width="100%" height="96" background="#777" color="#777" text="false" title="false" >}}
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-8">
|
||||||
<h6 class="mb-0">أطول عنوان منشور للمدونة: يحتوي هذا الخط على عدة أسطر!</h6>
|
<h6 class="mb-0">أطول عنوان منشور للمدونة: يحتوي هذا الخط على عدة أسطر!</h6>
|
||||||
<small class="text-body-secondary">13 يناير 2023</small>
|
<small class="text-body-secondary">13 يناير 2024</small>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* stylelint-disable stylistic/selector-list-comma-newline-after */
|
/* stylelint-disable @stylistic/selector-list-comma-newline-after */
|
||||||
|
|
||||||
.blog-header-logo {
|
.blog-header-logo {
|
||||||
font-family: "Playfair Display", Georgia, "Times New Roman", serif/*rtl:Amiri, Georgia, "Times New Roman", serif*/;
|
font-family: "Playfair Display", Georgia, "Times New Roman", serif/*rtl:Amiri, Georgia, "Times New Roman", serif*/;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* stylelint-disable stylistic/selector-list-comma-newline-after */
|
/* stylelint-disable @stylistic/selector-list-comma-newline-after */
|
||||||
|
|
||||||
.blog-header-logo {
|
.blog-header-logo {
|
||||||
font-family: Amiri, Georgia, "Times New Roman", serif;
|
font-family: Amiri, Georgia, "Times New Roman", serif;
|
||||||
|
|
|
@ -244,7 +244,7 @@ extra_css:
|
||||||
{{< placeholder width="100%" height="96" background="#777" color="#777" text="false" title="false" >}}
|
{{< placeholder width="100%" height="96" background="#777" color="#777" text="false" title="false" >}}
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-8">
|
||||||
<h6 class="mb-0">Example blog post title</h6>
|
<h6 class="mb-0">Example blog post title</h6>
|
||||||
<small class="text-body-secondary">January 15, 2023</small>
|
<small class="text-body-secondary">January 15, 2024</small>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -253,7 +253,7 @@ extra_css:
|
||||||
{{< placeholder width="100%" height="96" background="#777" color="#777" text="false" title="false" >}}
|
{{< placeholder width="100%" height="96" background="#777" color="#777" text="false" title="false" >}}
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-8">
|
||||||
<h6 class="mb-0">This is another blog post title</h6>
|
<h6 class="mb-0">This is another blog post title</h6>
|
||||||
<small class="text-body-secondary">January 14, 2023</small>
|
<small class="text-body-secondary">January 14, 2024</small>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -262,7 +262,7 @@ extra_css:
|
||||||
{{< placeholder width="100%" height="96" background="#777" color="#777" text="false" title="false" >}}
|
{{< placeholder width="100%" height="96" background="#777" color="#777" text="false" title="false" >}}
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-8">
|
||||||
<h6 class="mb-0">Longer blog post title: This one has multiple lines!</h6>
|
<h6 class="mb-0">Longer blog post title: This one has multiple lines!</h6>
|
||||||
<small class="text-body-secondary">January 13, 2023</small>
|
<small class="text-body-secondary">January 13, 2024</small>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -23,7 +23,7 @@ direction: rtl
|
||||||
<nav class="small" id="toc">
|
<nav class="small" id="toc">
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<li class="my-2">
|
<li class="my-2">
|
||||||
<button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#contents-collapse" aria-controls="contents-collapse">المحتوى</button>
|
<button type="button" class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#contents-collapse" aria-controls="contents-collapse">المحتوى</button>
|
||||||
<ul class="list-unstyled ps-3 collapse" id="contents-collapse">
|
<ul class="list-unstyled ps-3 collapse" id="contents-collapse">
|
||||||
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#typography">النصوص</a></li>
|
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#typography">النصوص</a></li>
|
||||||
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#images">الصور</a></li>
|
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#images">الصور</a></li>
|
||||||
|
@ -32,7 +32,7 @@ direction: rtl
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="my-2">
|
<li class="my-2">
|
||||||
<button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#forms-collapse" aria-controls="forms-collapse">النماذج</button>
|
<button type="button" class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#forms-collapse" aria-controls="forms-collapse">النماذج</button>
|
||||||
<ul class="list-unstyled ps-3 collapse" id="forms-collapse">
|
<ul class="list-unstyled ps-3 collapse" id="forms-collapse">
|
||||||
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#overview">نظرة عامة</a></li>
|
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#overview">نظرة عامة</a></li>
|
||||||
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#disabled-forms">الحقول المعطلة</a></li>
|
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#disabled-forms">الحقول المعطلة</a></li>
|
||||||
|
@ -43,7 +43,7 @@ direction: rtl
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="my-2">
|
<li class="my-2">
|
||||||
<button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#components-collapse" aria-controls="components-collapse">مكونات</button>
|
<button type="button" class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#components-collapse" aria-controls="components-collapse">مكونات</button>
|
||||||
<ul class="list-unstyled ps-3 collapse" id="components-collapse">
|
<ul class="list-unstyled ps-3 collapse" id="components-collapse">
|
||||||
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#accordion">المطوية</a></li>
|
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#accordion">المطوية</a></li>
|
||||||
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#alerts">الإنذارات</a></li>
|
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#alerts">الإنذارات</a></li>
|
||||||
|
|
|
@ -22,7 +22,7 @@ body_class: "bg-body-tertiary"
|
||||||
<nav class="small" id="toc">
|
<nav class="small" id="toc">
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<li class="my-2">
|
<li class="my-2">
|
||||||
<button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#contents-collapse" aria-controls="contents-collapse">Contents</button>
|
<button type="button" class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#contents-collapse" aria-controls="contents-collapse">Contents</button>
|
||||||
<ul class="list-unstyled ps-3 collapse" id="contents-collapse">
|
<ul class="list-unstyled ps-3 collapse" id="contents-collapse">
|
||||||
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#typography">Typography</a></li>
|
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#typography">Typography</a></li>
|
||||||
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#images">Images</a></li>
|
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#images">Images</a></li>
|
||||||
|
@ -31,7 +31,7 @@ body_class: "bg-body-tertiary"
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="my-2">
|
<li class="my-2">
|
||||||
<button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#forms-collapse" aria-controls="forms-collapse">Forms</button>
|
<button type="button" class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#forms-collapse" aria-controls="forms-collapse">Forms</button>
|
||||||
<ul class="list-unstyled ps-3 collapse" id="forms-collapse">
|
<ul class="list-unstyled ps-3 collapse" id="forms-collapse">
|
||||||
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#overview">Overview</a></li>
|
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#overview">Overview</a></li>
|
||||||
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#disabled-forms">Disabled forms</a></li>
|
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#disabled-forms">Disabled forms</a></li>
|
||||||
|
@ -42,7 +42,7 @@ body_class: "bg-body-tertiary"
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="my-2">
|
<li class="my-2">
|
||||||
<button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#components-collapse" aria-controls="components-collapse">Components</button>
|
<button type="button" class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#components-collapse" aria-controls="components-collapse">Components</button>
|
||||||
<ul class="list-unstyled ps-3 collapse" id="components-collapse">
|
<ul class="list-unstyled ps-3 collapse" id="components-collapse">
|
||||||
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#accordion">Accordion</a></li>
|
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#accordion">Accordion</a></li>
|
||||||
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#alerts">Alerts</a></li>
|
<li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#alerts">Alerts</a></li>
|
||||||
|
|
|
@ -3,11 +3,11 @@ layout: examples
|
||||||
title: قالب لوحة القيادة
|
title: قالب لوحة القيادة
|
||||||
direction: rtl
|
direction: rtl
|
||||||
extra_css:
|
extra_css:
|
||||||
- "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.3/font/bootstrap-icons.css"
|
- "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.min.css"
|
||||||
- "../dashboard/dashboard.rtl.css"
|
- "../dashboard/dashboard.rtl.css"
|
||||||
extra_js:
|
extra_js:
|
||||||
- src: "https://cdn.jsdelivr.net/npm/chart.js@4.2.1/dist/chart.umd.min.js"
|
- src: "https://cdn.jsdelivr.net/npm/chart.js@4.3.2/dist/chart.umd.js"
|
||||||
integrity: "sha384-gdQErvCNWvHQZj6XZM0dNsAoY4v+j5P1XDpNkcM3HJG1Yx04ecqIHk7+4VBOCHOG"
|
integrity: "sha384-eI7PSr3L1XLISH8JdDII5YN/njoSsxfbrkCTnJrzXt+ENP5MOVBxD+l6sEG4zoLp"
|
||||||
- src: "dashboard.js"
|
- src: "dashboard.js"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
layout: examples
|
layout: examples
|
||||||
title: Dashboard Template
|
title: Dashboard Template
|
||||||
extra_css:
|
extra_css:
|
||||||
- "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.3/font/bootstrap-icons.css"
|
- "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.min.css"
|
||||||
- "dashboard.css"
|
- "dashboard.css"
|
||||||
extra_js:
|
extra_js:
|
||||||
- src: "https://cdn.jsdelivr.net/npm/chart.js@4.2.1/dist/chart.umd.min.js"
|
- src: "https://cdn.jsdelivr.net/npm/chart.js@4.3.2/dist/chart.umd.js"
|
||||||
integrity: "sha384-gdQErvCNWvHQZj6XZM0dNsAoY4v+j5P1XDpNkcM3HJG1Yx04ecqIHk7+4VBOCHOG"
|
integrity: "sha384-eI7PSr3L1XLISH8JdDII5YN/njoSsxfbrkCTnJrzXt+ENP5MOVBxD+l6sEG4zoLp"
|
||||||
- src: "dashboard.js"
|
- src: "dashboard.js"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 110 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 363 KiB After Width: | Height: | Size: 361 KiB |
|
@ -24,12 +24,12 @@ extra_css:
|
||||||
<svg class="bi" width="24" height="24"><use xlink:href="#aperture"/></svg>
|
<svg class="bi" width="24" height="24"><use xlink:href="#aperture"/></svg>
|
||||||
Aperture
|
Aperture
|
||||||
</a>
|
</a>
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvas" aria-controls="#offcanvas" aria-label="Toggle navigation">
|
<button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvas" aria-controls="offcanvas" aria-label="Toggle navigation">
|
||||||
<span class="navbar-toggler-icon"></span>
|
<span class="navbar-toggler-icon"></span>
|
||||||
</button>
|
</button>
|
||||||
<div class="offcanvas offcanvas-end" tabindex="-1" id="#offcanvas" aria-labelledby="#offcanvasLabel">
|
<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvas" aria-labelledby="offcanvasLabel">
|
||||||
<div class="offcanvas-header">
|
<div class="offcanvas-header">
|
||||||
<h5 class="offcanvas-title" id="#offcanvasLabel">Aperture</h5>
|
<h5 class="offcanvas-title" id="offcanvasLabel">Aperture</h5>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="offcanvas-body">
|
<div class="offcanvas-body">
|
||||||
|
|
|
@ -34,7 +34,7 @@ title: Starter Template
|
||||||
<div class="row g-5">
|
<div class="row g-5">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<h2 class="text-body-emphasis">Starter projects</h2>
|
<h2 class="text-body-emphasis">Starter projects</h2>
|
||||||
<p>Ready to beyond the starter template? Check out these open source projects that you can quickly duplicate to a new GitHub repository.</p>
|
<p>Ready to go beyond the starter template? Check out these open source projects that you can quickly duplicate to a new GitHub repository.</p>
|
||||||
<ul class="list-unstyled ps-0">
|
<ul class="list-unstyled ps-0">
|
||||||
<li>
|
<li>
|
||||||
<a class="icon-link mb-1" href="https://github.com/twbs/examples/tree/main/icons-font" rel="noopener" target="_blank">
|
<a class="icon-link mb-1" href="https://github.com/twbs/examples/tree/main/icons-font" rel="noopener" target="_blank">
|
||||||
|
|
|
@ -305,7 +305,7 @@ Visually, these checkbox toggle buttons are identical to the [button plugin togg
|
||||||
|
|
||||||
### Outlined styles
|
### Outlined styles
|
||||||
|
|
||||||
Different variants of `.btn`, such at the various outlined styles, are supported.
|
Different variants of `.btn`, such as the various outlined styles, are supported.
|
||||||
|
|
||||||
{{< example >}}
|
{{< example >}}
|
||||||
<input type="checkbox" class="btn-check" id="btn-check-outlined" autocomplete="off">
|
<input type="checkbox" class="btn-check" id="btn-check-outlined" autocomplete="off">
|
||||||
|
|