Compare commits
4 commits
main
...
component-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
43d6265203 | ||
|
|
5e5d61c1ae | ||
|
|
31214ca03c | ||
|
|
f21b44d406 |
86 changed files with 917 additions and 437 deletions
|
|
@ -43,6 +43,7 @@
|
||||||
],
|
],
|
||||||
"unicorn/consistent-function-scoping": "off",
|
"unicorn/consistent-function-scoping": "off",
|
||||||
"unicorn/explicit-length-check": "off",
|
"unicorn/explicit-length-check": "off",
|
||||||
|
"unicorn/import-index": "off",
|
||||||
"unicorn/no-array-callback-reference": "off",
|
"unicorn/no-array-callback-reference": "off",
|
||||||
"unicorn/no-for-loop": "off",
|
"unicorn/no-for-loop": "off",
|
||||||
"unicorn/no-null": "off",
|
"unicorn/no-null": "off",
|
||||||
|
|
|
||||||
2
.github/workflows/browserstack.yml
vendored
2
.github/workflows/browserstack.yml
vendored
|
|
@ -5,7 +5,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FORCE_COLOR: 2
|
FORCE_COLOR: 2
|
||||||
NODE: 14
|
NODE: 14.x
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
browserstack:
|
browserstack:
|
||||||
|
|
|
||||||
2
.github/workflows/bundlewatch.yml
vendored
2
.github/workflows/bundlewatch.yml
vendored
|
|
@ -8,7 +8,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FORCE_COLOR: 2
|
FORCE_COLOR: 2
|
||||||
NODE: 14
|
NODE: 14.x
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
bundlewatch:
|
bundlewatch:
|
||||||
|
|
|
||||||
2
.github/workflows/css.yml
vendored
2
.github/workflows/css.yml
vendored
|
|
@ -8,7 +8,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FORCE_COLOR: 2
|
FORCE_COLOR: 2
|
||||||
NODE: 14
|
NODE: 14.x
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
css:
|
css:
|
||||||
|
|
|
||||||
2
.github/workflows/docs.yml
vendored
2
.github/workflows/docs.yml
vendored
|
|
@ -8,7 +8,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FORCE_COLOR: 2
|
FORCE_COLOR: 2
|
||||||
NODE: 14
|
NODE: 14.x
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
docs:
|
docs:
|
||||||
|
|
|
||||||
2
.github/workflows/lint.yml
vendored
2
.github/workflows/lint.yml
vendored
|
|
@ -8,7 +8,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FORCE_COLOR: 2
|
FORCE_COLOR: 2
|
||||||
NODE: 14
|
NODE: 14.x
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
|
|
|
||||||
2
.github/workflows/node-sass.yml
vendored
2
.github/workflows/node-sass.yml
vendored
|
|
@ -8,7 +8,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FORCE_COLOR: 2
|
FORCE_COLOR: 2
|
||||||
NODE: 14
|
NODE: 14.x
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
css:
|
css:
|
||||||
|
|
|
||||||
11
.gitignore
vendored
11
.gitignore
vendored
|
|
@ -1,8 +1,19 @@
|
||||||
# Ignore docs files
|
# Ignore docs files
|
||||||
/_gh_pages/
|
/_gh_pages/
|
||||||
|
# This is the old Jekyll docs dist folder;
|
||||||
|
# keeping it here so that when we switch branches it doesn't show up
|
||||||
|
/site/docs/**/dist/
|
||||||
|
# Jekyll's cache folder; keeping it for the same reason as above
|
||||||
|
/site/.jekyll-cache/
|
||||||
# Hugo resources folder
|
# Hugo resources folder
|
||||||
/resources/
|
/resources/
|
||||||
|
|
||||||
|
# Ignore ruby/bundler files;
|
||||||
|
# keeping them here so that when we switch branches they don't show up
|
||||||
|
/.bundle/
|
||||||
|
/vendor/
|
||||||
|
/.ruby-version
|
||||||
|
|
||||||
# Numerous always-ignore extensions
|
# Numerous always-ignore extensions
|
||||||
*.diff
|
*.diff
|
||||||
*.err
|
*.err
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,6 @@
|
||||||
"stylelint-config-twbs-bootstrap/scss"
|
"stylelint-config-twbs-bootstrap/scss"
|
||||||
],
|
],
|
||||||
"rules": {
|
"rules": {
|
||||||
"declaration-property-value-disallowed-list": {
|
|
||||||
"border": "none",
|
|
||||||
"outline": "none"
|
|
||||||
},
|
|
||||||
"function-disallowed-list": [
|
"function-disallowed-list": [
|
||||||
"calc",
|
"calc",
|
||||||
"lighten",
|
"lighten",
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ const bsPlugins = {
|
||||||
Manipulator: path.resolve(__dirname, '../js/src/dom/manipulator.js'),
|
Manipulator: path.resolve(__dirname, '../js/src/dom/manipulator.js'),
|
||||||
SelectorEngine: path.resolve(__dirname, '../js/src/dom/selector-engine.js'),
|
SelectorEngine: path.resolve(__dirname, '../js/src/dom/selector-engine.js'),
|
||||||
Alert: path.resolve(__dirname, '../js/src/alert.js'),
|
Alert: path.resolve(__dirname, '../js/src/alert.js'),
|
||||||
Base: path.resolve(__dirname, '../js/src/base-component.js'),
|
|
||||||
Button: path.resolve(__dirname, '../js/src/button.js'),
|
Button: path.resolve(__dirname, '../js/src/button.js'),
|
||||||
Carousel: path.resolve(__dirname, '../js/src/carousel.js'),
|
Carousel: path.resolve(__dirname, '../js/src/carousel.js'),
|
||||||
Collapse: path.resolve(__dirname, '../js/src/collapse.js'),
|
Collapse: path.resolve(__dirname, '../js/src/collapse.js'),
|
||||||
|
|
@ -45,13 +44,11 @@ const bsPlugins = {
|
||||||
const defaultPluginConfig = {
|
const defaultPluginConfig = {
|
||||||
external: [
|
external: [
|
||||||
bsPlugins.Data,
|
bsPlugins.Data,
|
||||||
bsPlugins.Base,
|
|
||||||
bsPlugins.EventHandler,
|
bsPlugins.EventHandler,
|
||||||
bsPlugins.SelectorEngine
|
bsPlugins.SelectorEngine
|
||||||
],
|
],
|
||||||
globals: {
|
globals: {
|
||||||
[bsPlugins.Data]: 'Data',
|
[bsPlugins.Data]: 'Data',
|
||||||
[bsPlugins.Base]: 'Base',
|
|
||||||
[bsPlugins.EventHandler]: 'EventHandler',
|
[bsPlugins.EventHandler]: 'EventHandler',
|
||||||
[bsPlugins.SelectorEngine]: 'SelectorEngine'
|
[bsPlugins.SelectorEngine]: 'SelectorEngine'
|
||||||
}
|
}
|
||||||
|
|
@ -76,7 +73,6 @@ const getConfigByPluginKey = pluginKey => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
pluginKey === 'Base' ||
|
|
||||||
pluginKey === 'Button' ||
|
pluginKey === 'Button' ||
|
||||||
pluginKey === 'Carousel' ||
|
pluginKey === 'Carousel' ||
|
||||||
pluginKey === 'Collapse' ||
|
pluginKey === 'Collapse' ||
|
||||||
|
|
@ -116,13 +112,11 @@ const getConfigByPluginKey = pluginKey => {
|
||||||
return {
|
return {
|
||||||
external: [
|
external: [
|
||||||
bsPlugins.Data,
|
bsPlugins.Data,
|
||||||
bsPlugins.Base,
|
|
||||||
bsPlugins.EventHandler,
|
bsPlugins.EventHandler,
|
||||||
bsPlugins.Manipulator
|
bsPlugins.Manipulator
|
||||||
],
|
],
|
||||||
globals: {
|
globals: {
|
||||||
[bsPlugins.Data]: 'Data',
|
[bsPlugins.Data]: 'Data',
|
||||||
[bsPlugins.Base]: 'Base',
|
|
||||||
[bsPlugins.EventHandler]: 'EventHandler',
|
[bsPlugins.EventHandler]: 'EventHandler',
|
||||||
[bsPlugins.Manipulator]: 'Manipulator'
|
[bsPlugins.Manipulator]: 'Manipulator'
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,64 +15,34 @@ const sh = require('shelljs')
|
||||||
const pkg = require('../package.json')
|
const pkg = require('../package.json')
|
||||||
|
|
||||||
const versionShort = pkg.config.version_short
|
const versionShort = pkg.config.version_short
|
||||||
const distFolder = `bootstrap-${pkg.version}-examples`
|
const folderName = `bootstrap-${pkg.version}-examples`
|
||||||
const rootDocsDir = '_gh_pages'
|
|
||||||
const docsDir = `${rootDocsDir}/docs/${versionShort}/`
|
|
||||||
|
|
||||||
// these are the files we need in the examples
|
|
||||||
const cssFiles = [
|
|
||||||
'bootstrap.min.css',
|
|
||||||
'bootstrap.min.css.map',
|
|
||||||
'bootstrap.rtl.min.css',
|
|
||||||
'bootstrap.rtl.min.css.map'
|
|
||||||
]
|
|
||||||
const jsFiles = [
|
|
||||||
'bootstrap.bundle.min.js',
|
|
||||||
'bootstrap.bundle.min.js.map'
|
|
||||||
]
|
|
||||||
const imgFiles = [
|
|
||||||
'bootstrap-logo.svg',
|
|
||||||
'bootstrap-logo-white.svg'
|
|
||||||
]
|
|
||||||
|
|
||||||
sh.config.fatal = true
|
sh.config.fatal = true
|
||||||
|
|
||||||
if (!sh.test('-d', rootDocsDir)) {
|
if (!sh.test('-d', '_gh_pages')) {
|
||||||
throw new Error(`The "${rootDocsDir}" folder does not exist, did you forget building the docs?`)
|
throw new Error('The "_gh_pages" folder does not exist, did you forget building the docs?')
|
||||||
}
|
}
|
||||||
|
|
||||||
// switch to the root dir
|
// switch to the root dir
|
||||||
sh.cd(path.join(__dirname, '..'))
|
sh.cd(path.join(__dirname, '..'))
|
||||||
|
|
||||||
// remove any previously created folder/zip with the same name
|
// remove any previously created folder with the same name
|
||||||
sh.rm('-rf', [distFolder, `${distFolder}.zip`])
|
sh.rm('-rf', folderName)
|
||||||
|
|
||||||
// create any folders so that `cp` works
|
// create any folders so that `cp` works
|
||||||
sh.mkdir('-p', [
|
sh.mkdir('-p', folderName)
|
||||||
distFolder,
|
sh.mkdir('-p', `${folderName}/assets/brand/`)
|
||||||
`${distFolder}/assets/brand/`,
|
|
||||||
`${distFolder}/assets/dist/css/`,
|
|
||||||
`${distFolder}/assets/dist/js/`
|
|
||||||
])
|
|
||||||
|
|
||||||
sh.cp('-Rf', `${docsDir}/examples/*`, distFolder)
|
sh.cp('-Rf', `_gh_pages/docs/${versionShort}/examples/*`, folderName)
|
||||||
|
sh.cp('-Rf', `_gh_pages/docs/${versionShort}/dist/`, `${folderName}/assets/`)
|
||||||
cssFiles.forEach(file => {
|
// also copy the two brand images we use in the examples
|
||||||
sh.cp('-f', `${docsDir}/dist/css/${file}`, `${distFolder}/assets/dist/css/`)
|
sh.cp('-f', [
|
||||||
})
|
`_gh_pages/docs/${versionShort}/assets/brand/bootstrap-logo.svg`,
|
||||||
|
`_gh_pages/docs/${versionShort}/assets/brand/bootstrap-logo-white.svg`
|
||||||
jsFiles.forEach(file => {
|
], `${folderName}/assets/brand/`)
|
||||||
sh.cp('-f', `${docsDir}/dist/js/${file}`, `${distFolder}/assets/dist/js/`)
|
sh.rm(`${folderName}/index.html`)
|
||||||
})
|
|
||||||
|
|
||||||
imgFiles.forEach(file => {
|
|
||||||
sh.cp('-f', `${docsDir}/assets/brand/${file}`, `${distFolder}/assets/brand/`)
|
|
||||||
})
|
|
||||||
|
|
||||||
sh.rm(`${distFolder}/index.html`)
|
|
||||||
|
|
||||||
// get all examples' HTML files
|
// get all examples' HTML files
|
||||||
sh.find(`${distFolder}/**/*.html`).forEach(file => {
|
sh.find(`${folderName}/**/*.html`).forEach(file => {
|
||||||
const fileContents = sh.cat(file)
|
const fileContents = sh.cat(file)
|
||||||
.toString()
|
.toString()
|
||||||
.replace(new RegExp(`"/docs/${versionShort}/`, 'g'), '"../')
|
.replace(new RegExp(`"/docs/${versionShort}/`, 'g'), '"../')
|
||||||
|
|
@ -84,7 +54,7 @@ sh.find(`${distFolder}/**/*.html`).forEach(file => {
|
||||||
})
|
})
|
||||||
|
|
||||||
// create the zip file
|
// create the zip file
|
||||||
sh.exec(`zip -r9 "${distFolder}.zip" "${distFolder}"`)
|
sh.exec(`zip -r9 "${folderName}.zip" "${folderName}"`, { fatal: true })
|
||||||
|
|
||||||
// remove the folder we created
|
// remove the folder we created
|
||||||
sh.rm('-rf', distFolder)
|
sh.rm('-rf', folderName)
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,6 @@ function bootstrapDelegationHandler(element, selector, fn) {
|
||||||
event.delegateTarget = target
|
event.delegateTarget = target
|
||||||
|
|
||||||
if (handler.oneOff) {
|
if (handler.oneOff) {
|
||||||
// eslint-disable-next-line unicorn/consistent-destructuring
|
|
||||||
EventHandler.off(element, event.type, fn)
|
EventHandler.off(element, event.type, fn)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -263,7 +263,7 @@ class Dropdown extends BaseComponent {
|
||||||
typeof config.reference.getBoundingClientRect !== 'function'
|
typeof config.reference.getBoundingClientRect !== 'function'
|
||||||
) {
|
) {
|
||||||
// Popper virtual elements require a getBoundingClientRect method
|
// Popper virtual elements require a getBoundingClientRect method
|
||||||
throw new TypeError(`${NAME.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`)
|
throw new Error(`${NAME}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`)
|
||||||
}
|
}
|
||||||
|
|
||||||
return config
|
return config
|
||||||
|
|
|
||||||
|
|
@ -590,7 +590,7 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
|
||||||
data = new Modal(target, config)
|
data = new Modal(target, config)
|
||||||
}
|
}
|
||||||
|
|
||||||
data.toggle(this)
|
data.show(this)
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -111,14 +111,15 @@ const typeCheckConfig = (componentName, config, configTypes) => {
|
||||||
Object.keys(configTypes).forEach(property => {
|
Object.keys(configTypes).forEach(property => {
|
||||||
const expectedTypes = configTypes[property]
|
const expectedTypes = configTypes[property]
|
||||||
const value = config[property]
|
const value = config[property]
|
||||||
const valueType = value && isElement(value) ? 'element' : toType(value)
|
const valueType = value && isElement(value) ?
|
||||||
|
'element' :
|
||||||
|
toType(value)
|
||||||
|
|
||||||
if (!new RegExp(expectedTypes).test(valueType)) {
|
if (!new RegExp(expectedTypes).test(valueType)) {
|
||||||
throw new TypeError(
|
throw new Error(
|
||||||
`${componentName.toUpperCase()}: ` +
|
`${componentName.toUpperCase()}: ` +
|
||||||
`Option "${property}" provided type "${valueType}" ` +
|
`Option "${property}" provided type "${valueType}" ` +
|
||||||
`but expected type "${expectedTypes}".`
|
`but expected type "${expectedTypes}".`)
|
||||||
)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ const allowedAttribute = (attr, allowedAttributeList) => {
|
||||||
|
|
||||||
if (allowedAttributeList.includes(attrName)) {
|
if (allowedAttributeList.includes(attrName)) {
|
||||||
if (uriAttrs.has(attrName)) {
|
if (uriAttrs.has(attrName)) {
|
||||||
return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue))
|
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
@ -47,7 +47,7 @@ const allowedAttribute = (attr, allowedAttributeList) => {
|
||||||
|
|
||||||
// Check if a regular expression validates the attribute.
|
// Check if a regular expression validates the attribute.
|
||||||
for (let i = 0, len = regExp.length; i < len; i++) {
|
for (let i = 0, len = regExp.length; i < len; i++) {
|
||||||
if (regExp[i].test(attrName)) {
|
if (attrName.match(regExp[i])) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
/* eslint-env node */
|
/* eslint-env node */
|
||||||
|
|
||||||
'use strict'
|
|
||||||
|
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const ip = require('ip')
|
const ip = require('ip')
|
||||||
const { babel } = require('@rollup/plugin-babel')
|
const { babel } = require('@rollup/plugin-babel')
|
||||||
|
|
@ -14,11 +12,10 @@ const {
|
||||||
browsersKeys
|
browsersKeys
|
||||||
} = require('./browsers')
|
} = require('./browsers')
|
||||||
|
|
||||||
const ENV = process.env
|
const { env } = process
|
||||||
const BROWSERSTACK = Boolean(ENV.BROWSERSTACK)
|
const browserStack = env.BROWSER === 'true'
|
||||||
const DEBUG = Boolean(ENV.DEBUG)
|
const debug = env.DEBUG === 'true'
|
||||||
const JQUERY_TEST = Boolean(ENV.JQUERY)
|
const jQueryTest = env.JQUERY === 'true'
|
||||||
|
|
||||||
const frameworks = [
|
const frameworks = [
|
||||||
'jasmine'
|
'jasmine'
|
||||||
]
|
]
|
||||||
|
|
@ -33,16 +30,16 @@ const reporters = ['dots']
|
||||||
const detectBrowsers = {
|
const detectBrowsers = {
|
||||||
usePhantomJS: false,
|
usePhantomJS: false,
|
||||||
postDetection(availableBrowser) {
|
postDetection(availableBrowser) {
|
||||||
if (ENV.CI === true || availableBrowser.includes('Chrome')) {
|
if (env.CI === true || availableBrowser.includes('Chrome')) {
|
||||||
return DEBUG ? ['Chrome'] : ['ChromeHeadless']
|
return debug ? ['Chrome'] : ['ChromeHeadless']
|
||||||
}
|
}
|
||||||
|
|
||||||
if (availableBrowser.includes('Chromium')) {
|
if (availableBrowser.includes('Chromium')) {
|
||||||
return DEBUG ? ['Chromium'] : ['ChromiumHeadless']
|
return debug ? ['Chromium'] : ['ChromiumHeadless']
|
||||||
}
|
}
|
||||||
|
|
||||||
if (availableBrowser.includes('Firefox')) {
|
if (availableBrowser.includes('Firefox')) {
|
||||||
return DEBUG ? ['Firefox'] : ['FirefoxHeadless']
|
return debug ? ['Firefox'] : ['FirefoxHeadless']
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new Error('Please install Chrome, Chromium or Firefox')
|
throw new Error('Please install Chrome, Chromium or Firefox')
|
||||||
|
|
@ -70,7 +67,7 @@ const conf = {
|
||||||
'node_modules/hammer-simulator/index.js',
|
'node_modules/hammer-simulator/index.js',
|
||||||
{
|
{
|
||||||
pattern: 'js/tests/unit/**/!(jquery).spec.js',
|
pattern: 'js/tests/unit/**/!(jquery).spec.js',
|
||||||
watched: !BROWSERSTACK
|
watched: !browserStack
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
preprocessors: {
|
preprocessors: {
|
||||||
|
|
@ -104,11 +101,11 @@ const conf = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BROWSERSTACK) {
|
if (browserStack) {
|
||||||
conf.hostname = ip.address()
|
conf.hostname = ip.address()
|
||||||
conf.browserStack = {
|
conf.browserStack = {
|
||||||
username: ENV.BROWSER_STACK_USERNAME,
|
username: env.BROWSER_STACK_USERNAME,
|
||||||
accessKey: ENV.BROWSER_STACK_ACCESS_KEY,
|
accessKey: env.BROWSER_STACK_ACCESS_KEY,
|
||||||
build: `bootstrap-${new Date().toISOString()}`,
|
build: `bootstrap-${new Date().toISOString()}`,
|
||||||
project: 'Bootstrap',
|
project: 'Bootstrap',
|
||||||
retryLimit: 2
|
retryLimit: 2
|
||||||
|
|
@ -117,7 +114,7 @@ if (BROWSERSTACK) {
|
||||||
conf.customLaunchers = browsers
|
conf.customLaunchers = browsers
|
||||||
conf.browsers = browsersKeys
|
conf.browsers = browsersKeys
|
||||||
reporters.push('BrowserStack', 'kjhtml')
|
reporters.push('BrowserStack', 'kjhtml')
|
||||||
} else if (JQUERY_TEST) {
|
} else if (jQueryTest) {
|
||||||
frameworks.push('detectBrowsers')
|
frameworks.push('detectBrowsers')
|
||||||
plugins.push(
|
plugins.push(
|
||||||
'karma-chrome-launcher',
|
'karma-chrome-launcher',
|
||||||
|
|
@ -158,7 +155,7 @@ if (BROWSERSTACK) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DEBUG) {
|
if (debug) {
|
||||||
conf.hostname = ip.address()
|
conf.hostname = ip.address()
|
||||||
plugins.push('karma-jasmine-html-reporter')
|
plugins.push('karma-jasmine-html-reporter')
|
||||||
reporters.push('kjhtml')
|
reporters.push('kjhtml')
|
||||||
|
|
@ -172,6 +169,7 @@ conf.plugins = plugins
|
||||||
conf.reporters = reporters
|
conf.reporters = reporters
|
||||||
|
|
||||||
module.exports = karmaConfig => {
|
module.exports = karmaConfig => {
|
||||||
conf.logLevel = karmaConfig.LOG_ERROR
|
// possible values: karmaConfig.LOG_DISABLE || karmaConfig.LOG_ERROR || karmaConfig.LOG_WARN || karmaConfig.LOG_INFO || karmaConfig.LOG_DEBUG
|
||||||
|
conf.logLevel = karmaConfig.LOG_ERROR || karmaConfig.LOG_WARN
|
||||||
karmaConfig.set(conf)
|
karmaConfig.set(conf)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1136,9 +1136,11 @@ describe('Carousel', () => {
|
||||||
jQueryMock.fn.carousel = Carousel.jQueryInterface
|
jQueryMock.fn.carousel = Carousel.jQueryInterface
|
||||||
jQueryMock.elements = [div]
|
jQueryMock.elements = [div]
|
||||||
|
|
||||||
expect(() => {
|
try {
|
||||||
jQueryMock.fn.carousel.call(jQueryMock, action)
|
jQueryMock.fn.carousel.call(jQueryMock, action)
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
} catch (error) {
|
||||||
|
expect(error.message).toEqual(`No method named "${action}"`)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -819,9 +819,11 @@ describe('Collapse', () => {
|
||||||
jQueryMock.fn.collapse = Collapse.jQueryInterface
|
jQueryMock.fn.collapse = Collapse.jQueryInterface
|
||||||
jQueryMock.elements = [div]
|
jQueryMock.elements = [div]
|
||||||
|
|
||||||
expect(() => {
|
try {
|
||||||
jQueryMock.fn.collapse.call(jQueryMock, action)
|
jQueryMock.fn.collapse.call(jQueryMock, action)
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
} catch (error) {
|
||||||
|
expect(error.message).toEqual(`No method named "${action}"`)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -393,13 +393,13 @@ describe('Dropdown', () => {
|
||||||
|
|
||||||
expect(() => new Dropdown(btnDropdown, {
|
expect(() => new Dropdown(btnDropdown, {
|
||||||
reference: {}
|
reference: {}
|
||||||
})).toThrowError(TypeError, 'DROPDOWN: Option "reference" provided type "object" without a required "getBoundingClientRect" method.')
|
})).toThrow()
|
||||||
|
|
||||||
expect(() => new Dropdown(btnDropdown, {
|
expect(() => new Dropdown(btnDropdown, {
|
||||||
reference: {
|
reference: {
|
||||||
getBoundingClientRect: 'not-a-function'
|
getBoundingClientRect: 'not-a-function'
|
||||||
}
|
}
|
||||||
})).toThrowError(TypeError, 'DROPDOWN: Option "reference" provided type "object" without a required "getBoundingClientRect" method.')
|
})).toThrow()
|
||||||
|
|
||||||
// use onFirstUpdate as Poppers internal update is executed async
|
// use onFirstUpdate as Poppers internal update is executed async
|
||||||
const dropdown = new Dropdown(btnDropdown, {
|
const dropdown = new Dropdown(btnDropdown, {
|
||||||
|
|
@ -1557,9 +1557,11 @@ describe('Dropdown', () => {
|
||||||
jQueryMock.fn.dropdown = Dropdown.jQueryInterface
|
jQueryMock.fn.dropdown = Dropdown.jQueryInterface
|
||||||
jQueryMock.elements = [div]
|
jQueryMock.elements = [div]
|
||||||
|
|
||||||
expect(() => {
|
try {
|
||||||
jQueryMock.fn.dropdown.call(jQueryMock, action)
|
jQueryMock.fn.dropdown.call(jQueryMock, action)
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
} catch (error) {
|
||||||
|
expect(error.message).toEqual(`No method named "${action}"`)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -870,7 +870,7 @@ describe('Modal', () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('data-api', () => {
|
describe('data-api', () => {
|
||||||
it('should toggle modal', done => {
|
it('should open modal', done => {
|
||||||
fixtureEl.innerHTML = [
|
fixtureEl.innerHTML = [
|
||||||
'<button type="button" data-bs-toggle="modal" data-bs-target="#exampleModal"></button>',
|
'<button type="button" data-bs-toggle="modal" data-bs-target="#exampleModal"></button>',
|
||||||
'<div id="exampleModal" class="modal"><div class="modal-dialog"></div></div>'
|
'<div id="exampleModal" class="modal"><div class="modal-dialog"></div></div>'
|
||||||
|
|
@ -885,15 +885,6 @@ describe('Modal', () => {
|
||||||
expect(modalEl.getAttribute('aria-hidden')).toEqual(null)
|
expect(modalEl.getAttribute('aria-hidden')).toEqual(null)
|
||||||
expect(modalEl.style.display).toEqual('block')
|
expect(modalEl.style.display).toEqual('block')
|
||||||
expect(document.querySelector('.modal-backdrop')).toBeDefined()
|
expect(document.querySelector('.modal-backdrop')).toBeDefined()
|
||||||
setTimeout(() => trigger.click(), 10)
|
|
||||||
})
|
|
||||||
|
|
||||||
modalEl.addEventListener('hidden.bs.modal', () => {
|
|
||||||
expect(modalEl.getAttribute('aria-modal')).toEqual(null)
|
|
||||||
expect(modalEl.getAttribute('role')).toEqual(null)
|
|
||||||
expect(modalEl.getAttribute('aria-hidden')).toEqual('true')
|
|
||||||
expect(modalEl.style.display).toEqual('none')
|
|
||||||
expect(document.querySelector('.modal-backdrop')).toEqual(null)
|
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -1070,9 +1061,11 @@ describe('Modal', () => {
|
||||||
jQueryMock.fn.modal = Modal.jQueryInterface
|
jQueryMock.fn.modal = Modal.jQueryInterface
|
||||||
jQueryMock.elements = [div]
|
jQueryMock.elements = [div]
|
||||||
|
|
||||||
expect(() => {
|
try {
|
||||||
jQueryMock.fn.modal.call(jQueryMock, action)
|
jQueryMock.fn.modal.call(jQueryMock, action)
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
} catch (error) {
|
||||||
|
expect(error.message).toEqual(`No method named "${action}"`)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should call show method', () => {
|
it('should call show method', () => {
|
||||||
|
|
|
||||||
|
|
@ -206,9 +206,11 @@ describe('Popover', () => {
|
||||||
jQueryMock.fn.popover = Popover.jQueryInterface
|
jQueryMock.fn.popover = Popover.jQueryInterface
|
||||||
jQueryMock.elements = [popoverEl]
|
jQueryMock.elements = [popoverEl]
|
||||||
|
|
||||||
expect(() => {
|
try {
|
||||||
jQueryMock.fn.popover.call(jQueryMock, action)
|
jQueryMock.fn.popover.call(jQueryMock, action)
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
} catch (error) {
|
||||||
|
expect(error.message).toEqual(`No method named "${action}"`)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should should call show method', () => {
|
it('should should call show method', () => {
|
||||||
|
|
|
||||||
|
|
@ -625,9 +625,11 @@ describe('ScrollSpy', () => {
|
||||||
jQueryMock.fn.scrollspy = ScrollSpy.jQueryInterface
|
jQueryMock.fn.scrollspy = ScrollSpy.jQueryInterface
|
||||||
jQueryMock.elements = [div]
|
jQueryMock.elements = [div]
|
||||||
|
|
||||||
expect(() => {
|
try {
|
||||||
jQueryMock.fn.scrollspy.call(jQueryMock, action)
|
jQueryMock.fn.scrollspy.call(jQueryMock, action)
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
} catch (error) {
|
||||||
|
expect(error.message).toEqual(`No method named "${action}"`)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -397,9 +397,11 @@ describe('Tab', () => {
|
||||||
jQueryMock.fn.tab = Tab.jQueryInterface
|
jQueryMock.fn.tab = Tab.jQueryInterface
|
||||||
jQueryMock.elements = [div]
|
jQueryMock.elements = [div]
|
||||||
|
|
||||||
expect(() => {
|
try {
|
||||||
jQueryMock.fn.tab.call(jQueryMock, action)
|
jQueryMock.fn.tab.call(jQueryMock, action)
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
} catch (error) {
|
||||||
|
expect(error.message).toEqual(`No method named "${action}"`)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -368,9 +368,11 @@ describe('Toast', () => {
|
||||||
jQueryMock.fn.toast = Toast.jQueryInterface
|
jQueryMock.fn.toast = Toast.jQueryInterface
|
||||||
jQueryMock.elements = [div]
|
jQueryMock.elements = [div]
|
||||||
|
|
||||||
expect(() => {
|
try {
|
||||||
jQueryMock.fn.toast.call(jQueryMock, action)
|
jQueryMock.fn.toast.call(jQueryMock, action)
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
} catch (error) {
|
||||||
|
expect(error.message).toEqual(`No method named "${action}"`)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1207,9 +1207,11 @@ describe('Tooltip', () => {
|
||||||
jQueryMock.fn.tooltip = Tooltip.jQueryInterface
|
jQueryMock.fn.tooltip = Tooltip.jQueryInterface
|
||||||
jQueryMock.elements = [div]
|
jQueryMock.elements = [div]
|
||||||
|
|
||||||
expect(() => {
|
try {
|
||||||
jQueryMock.fn.tooltip.call(jQueryMock, action)
|
jQueryMock.fn.tooltip.call(jQueryMock, action)
|
||||||
}).toThrowError(TypeError, `No method named "${action}"`)
|
} catch (error) {
|
||||||
|
expect(error.message).toEqual(`No method named "${action}"`)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -212,7 +212,7 @@ describe('Util', () => {
|
||||||
|
|
||||||
expect(() => {
|
expect(() => {
|
||||||
Util.typeCheckConfig(namePlugin, config, defaultType)
|
Util.typeCheckConfig(namePlugin, config, defaultType)
|
||||||
}).toThrowError(TypeError, 'COLLAPSE: Option "parent" provided type "number" but expected type "(string|element)".')
|
}).toThrow(new Error('COLLAPSE: Option "parent" provided type "number" but expected type "(string|element)".'))
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should return null stringified when null is passed', () => {
|
it('should return null stringified when null is passed', () => {
|
||||||
|
|
|
||||||
425
package-lock.json
generated
425
package-lock.json
generated
|
|
@ -1253,24 +1253,6 @@
|
||||||
"defer-to-connect": "^1.0.1"
|
"defer-to-connect": "^1.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/component-emitter": {
|
|
||||||
"version": "1.2.10",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz",
|
|
||||||
"integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"@types/cookie": {
|
|
||||||
"version": "0.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz",
|
|
||||||
"integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"@types/cors": {
|
|
||||||
"version": "2.8.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.9.tgz",
|
|
||||||
"integrity": "sha512-zurD1ibz21BRlAOIKP8yhrxlqKx6L9VCwkB5kMiP6nZAhoF5MvC7qS1qPA7nRcr1GJolfkQC7/EAL4hdYejLtg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"@types/estree": {
|
"@types/estree": {
|
||||||
"version": "0.0.39",
|
"version": "0.0.39",
|
||||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
|
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
|
||||||
|
|
@ -1374,6 +1356,12 @@
|
||||||
"integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
|
"integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"after": {
|
||||||
|
"version": "0.8.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
|
||||||
|
"integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"agent-base": {
|
"agent-base": {
|
||||||
"version": "4.3.0",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
|
||||||
|
|
@ -1578,6 +1566,12 @@
|
||||||
"es-abstract": "^1.18.0-next.1"
|
"es-abstract": "^1.18.0-next.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"arraybuffer.slice": {
|
||||||
|
"version": "0.0.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
|
||||||
|
"integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"arrify": {
|
"arrify": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
|
||||||
|
|
@ -1671,6 +1665,12 @@
|
||||||
"object.assign": "^4.1.0"
|
"object.assign": "^4.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"backo2": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"bail": {
|
"bail": {
|
||||||
"version": "1.0.5",
|
"version": "1.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
|
||||||
|
|
@ -1908,6 +1908,12 @@
|
||||||
"safe-buffer": "^5.1.1"
|
"safe-buffer": "^5.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"blob": {
|
||||||
|
"version": "0.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
|
||||||
|
"integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"bluebird": {
|
"bluebird": {
|
||||||
"version": "3.4.7",
|
"version": "3.4.7",
|
||||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
|
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
|
||||||
|
|
@ -2640,12 +2646,24 @@
|
||||||
"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
|
"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"component-bind": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"component-emitter": {
|
"component-emitter": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
|
||||||
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
|
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"component-inherit": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
|
||||||
|
"integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"concat-map": {
|
"concat-map": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||||
|
|
@ -2778,16 +2796,6 @@
|
||||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
|
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"cors": {
|
|
||||||
"version": "2.8.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
|
|
||||||
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"object-assign": "^4",
|
|
||||||
"vary": "^1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"cosmiconfig": {
|
"cosmiconfig": {
|
||||||
"version": "6.0.0",
|
"version": "6.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
|
||||||
|
|
@ -3340,44 +3348,77 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"engine.io": {
|
"engine.io": {
|
||||||
"version": "4.0.6",
|
"version": "3.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz",
|
||||||
"integrity": "sha512-rf7HAVZpcRrcKEKddgIzYUnwg0g5HE1RvJaTLwkcfJmce4g+po8aMuE6vxzp6JwlK8FEq/vi0KWN6tA585DjaA==",
|
"integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"accepts": "~1.3.4",
|
"accepts": "~1.3.4",
|
||||||
"base64id": "2.0.0",
|
"base64id": "2.0.0",
|
||||||
"cookie": "~0.4.1",
|
"cookie": "~0.4.1",
|
||||||
"cors": "~2.8.5",
|
"debug": "~4.1.0",
|
||||||
"debug": "~4.3.1",
|
"engine.io-parser": "~2.2.0",
|
||||||
"engine.io-parser": "~4.0.0",
|
|
||||||
"ws": "~7.4.2"
|
"ws": "~7.4.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "4.3.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||||
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
|
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"ms": "2.1.2"
|
"ms": "^2.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ms": {
|
"ms": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"engine.io-parser": {
|
"engine.io-client": {
|
||||||
"version": "4.0.2",
|
"version": "3.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.0.tgz",
|
||||||
"integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==",
|
"integrity": "sha512-12wPRfMrugVw/DNyJk34GQ5vIVArEcVMXWugQGGuw2XxUSztFNmJggZmv8IZlLyEdnpO1QB9LkcjeWewO2vxtA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"base64-arraybuffer": "0.1.4"
|
"component-emitter": "~1.3.0",
|
||||||
|
"component-inherit": "0.0.3",
|
||||||
|
"debug": "~3.1.0",
|
||||||
|
"engine.io-parser": "~2.2.0",
|
||||||
|
"has-cors": "1.1.0",
|
||||||
|
"indexof": "0.0.1",
|
||||||
|
"parseqs": "0.0.6",
|
||||||
|
"parseuri": "0.0.6",
|
||||||
|
"ws": "~7.4.2",
|
||||||
|
"xmlhttprequest-ssl": "~1.5.4",
|
||||||
|
"yeast": "0.1.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"engine.io-parser": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
|
||||||
|
"integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"after": "0.8.2",
|
||||||
|
"arraybuffer.slice": "~0.0.7",
|
||||||
|
"base64-arraybuffer": "0.1.4",
|
||||||
|
"blob": "0.0.5",
|
||||||
|
"has-binary2": "~1.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"enquirer": {
|
"enquirer": {
|
||||||
|
|
@ -3761,17 +3802,17 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"eslint-plugin-unicorn": {
|
"eslint-plugin-unicorn": {
|
||||||
"version": "26.0.1",
|
"version": "25.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-26.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-25.0.1.tgz",
|
||||||
"integrity": "sha512-SWgF9sIVY74zqkkSN2dclSCqRfocWSUGD0haC0NX2oRfmdp9p8dQvJYkYSQePaCyssPUE/pqpsIEEZNTh8crUA==",
|
"integrity": "sha512-MEyEWoyou/qhJH6rEER9YHACtCsQT+eewc6Fdxbi2eiTvsGrBR8JZMA6qaeof3oMQeRxOpaERoBKzU7R5c4A/w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"ci-info": "^2.0.0",
|
"ci-info": "^2.0.0",
|
||||||
"clean-regexp": "^1.0.0",
|
"clean-regexp": "^1.0.0",
|
||||||
"eslint-ast-utils": "^1.1.0",
|
"eslint-ast-utils": "^1.1.0",
|
||||||
"eslint-template-visitor": "^2.2.2",
|
"eslint-template-visitor": "^2.2.1",
|
||||||
"eslint-utils": "^2.1.0",
|
"eslint-utils": "^2.1.0",
|
||||||
"import-modules": "^2.1.0",
|
"import-modules": "^2.0.0",
|
||||||
"lodash": "^4.17.20",
|
"lodash": "^4.17.20",
|
||||||
"pluralize": "^8.0.0",
|
"pluralize": "^8.0.0",
|
||||||
"read-pkg-up": "^7.0.1",
|
"read-pkg-up": "^7.0.1",
|
||||||
|
|
@ -4935,6 +4976,29 @@
|
||||||
"function-bind": "^1.1.1"
|
"function-bind": "^1.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"has-binary2": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"isarray": "2.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"isarray": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has-cors": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"has-flag": {
|
"has-flag": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
||||||
|
|
@ -5203,6 +5267,12 @@
|
||||||
"integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
|
"integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"indexof": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"inflight": {
|
"inflight": {
|
||||||
"version": "1.0.6",
|
"version": "1.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
|
@ -5856,9 +5926,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"karma": {
|
"karma": {
|
||||||
"version": "6.0.0",
|
"version": "5.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/karma/-/karma-6.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/karma/-/karma-5.2.3.tgz",
|
||||||
"integrity": "sha512-Tc9VlrmAlOUjsi+5tyNlo18TWiOps3wo4HJYqfZImyTrek2gUASmW6q+bEIE1U5w9f+sQ97P5PbbUCp3uVNqrQ==",
|
"integrity": "sha512-tHdyFADhVVPBorIKCX8A37iLHxc6RBRphkSoQ+MLKdAtFn1k97tD8WUGi1KlEtDZKL3hui0qhsY9HXUfSNDYPQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
|
|
@ -5879,22 +5949,13 @@
|
||||||
"qjobs": "^1.2.0",
|
"qjobs": "^1.2.0",
|
||||||
"range-parser": "^1.2.1",
|
"range-parser": "^1.2.1",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"socket.io": "^3.0.4",
|
"socket.io": "^2.3.0",
|
||||||
"source-map": "^0.6.1",
|
"source-map": "^0.6.1",
|
||||||
"tmp": "0.2.1",
|
"tmp": "0.2.1",
|
||||||
"ua-parser-js": "^0.7.23",
|
"ua-parser-js": "0.7.22",
|
||||||
"yargs": "^16.1.1"
|
"yargs": "^15.3.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ansi-styles": {
|
|
||||||
"version": "4.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
|
||||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"color-convert": "^2.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"braces": {
|
"braces": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
||||||
|
|
@ -5904,32 +5965,6 @@
|
||||||
"fill-range": "^7.0.1"
|
"fill-range": "^7.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cliui": {
|
|
||||||
"version": "7.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
|
|
||||||
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"string-width": "^4.2.0",
|
|
||||||
"strip-ansi": "^6.0.0",
|
|
||||||
"wrap-ansi": "^7.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"color-convert": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"color-name": "~1.1.4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"color-name": {
|
|
||||||
"version": "1.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
|
||||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"fill-range": {
|
"fill-range": {
|
||||||
"version": "7.0.1",
|
"version": "7.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||||
|
|
@ -5959,44 +5994,6 @@
|
||||||
"requires": {
|
"requires": {
|
||||||
"is-number": "^7.0.0"
|
"is-number": "^7.0.0"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"wrap-ansi": {
|
|
||||||
"version": "7.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
|
||||||
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ansi-styles": "^4.0.0",
|
|
||||||
"string-width": "^4.1.0",
|
|
||||||
"strip-ansi": "^6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"y18n": {
|
|
||||||
"version": "5.0.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
|
|
||||||
"integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"yargs": {
|
|
||||||
"version": "16.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
|
|
||||||
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"cliui": "^7.0.2",
|
|
||||||
"escalade": "^3.1.1",
|
|
||||||
"get-caller-file": "^2.0.5",
|
|
||||||
"require-directory": "^2.1.1",
|
|
||||||
"string-width": "^4.2.0",
|
|
||||||
"y18n": "^5.0.5",
|
|
||||||
"yargs-parser": "^20.2.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"yargs-parser": {
|
|
||||||
"version": "20.2.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
|
|
||||||
"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
|
|
||||||
"dev": true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -7576,6 +7573,18 @@
|
||||||
"parse5": "^6.0.1"
|
"parse5": "^6.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"parseqs": {
|
||||||
|
"version": "0.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
|
||||||
|
"integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"parseuri": {
|
||||||
|
"version": "0.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
|
||||||
|
"integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"parseurl": {
|
"parseurl": {
|
||||||
"version": "1.3.3",
|
"version": "1.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
||||||
|
|
@ -9463,69 +9472,125 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"socket.io": {
|
"socket.io": {
|
||||||
"version": "3.0.5",
|
"version": "2.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz",
|
||||||
"integrity": "sha512-5yWQ43P/4IttmPCGKDQ3CVocBiJWGpibyhYJxgUhf69EHMzmK8XW0DkmHIoYdLmZaVZJyiEkUqpeC7rSCIqekw==",
|
"integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/cookie": "^0.4.0",
|
"debug": "~4.1.0",
|
||||||
"@types/cors": "^2.8.8",
|
"engine.io": "~3.5.0",
|
||||||
"@types/node": "^14.14.10",
|
"has-binary2": "~1.0.2",
|
||||||
"accepts": "~1.3.4",
|
"socket.io-adapter": "~1.1.0",
|
||||||
"base64id": "~2.0.0",
|
"socket.io-client": "2.4.0",
|
||||||
"debug": "~4.3.1",
|
"socket.io-parser": "~3.4.0"
|
||||||
"engine.io": "~4.0.6",
|
|
||||||
"socket.io-adapter": "~2.0.3",
|
|
||||||
"socket.io-parser": "~4.0.3"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "4.3.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||||
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
|
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"ms": "2.1.2"
|
"ms": "^2.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ms": {
|
"ms": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"socket.io-adapter": {
|
"socket.io-adapter": {
|
||||||
"version": "2.0.3",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
|
||||||
"integrity": "sha512-2wo4EXgxOGSFueqvHAdnmi5JLZzWqMArjuP4nqC26AtLh5PoCPsaRbRdah2xhcwTAMooZfjYiNVNkkmmSMaxOQ==",
|
"integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"socket.io-parser": {
|
"socket.io-client": {
|
||||||
"version": "4.0.3",
|
"version": "2.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz",
|
||||||
"integrity": "sha512-m4ybFiP4UYVORRt7jcdqf8UWx+ywVdAqqsJyruXxAdD3Sv6MDemijWij34mOWdMJ55bEdIb9jACBhxUgNK6sxw==",
|
"integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/component-emitter": "^1.2.10",
|
"backo2": "1.0.2",
|
||||||
|
"component-bind": "1.0.0",
|
||||||
"component-emitter": "~1.3.0",
|
"component-emitter": "~1.3.0",
|
||||||
"debug": "~4.3.1"
|
"debug": "~3.1.0",
|
||||||
|
"engine.io-client": "~3.5.0",
|
||||||
|
"has-binary2": "~1.0.2",
|
||||||
|
"indexof": "0.0.1",
|
||||||
|
"parseqs": "0.0.6",
|
||||||
|
"parseuri": "0.0.6",
|
||||||
|
"socket.io-parser": "~3.3.0",
|
||||||
|
"to-array": "0.1.4"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "4.3.1",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||||
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
|
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"ms": "2.1.2"
|
"ms": "2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"isarray": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"socket.io-parser": {
|
||||||
|
"version": "3.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.1.tgz",
|
||||||
|
"integrity": "sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"component-emitter": "~1.3.0",
|
||||||
|
"debug": "~3.1.0",
|
||||||
|
"isarray": "2.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"socket.io-parser": {
|
||||||
|
"version": "3.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz",
|
||||||
|
"integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"component-emitter": "1.2.1",
|
||||||
|
"debug": "~4.1.0",
|
||||||
|
"isarray": "2.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"component-emitter": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
|
||||||
|
"integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||||
|
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"isarray": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"ms": {
|
"ms": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -10362,6 +10427,12 @@
|
||||||
"rimraf": "^3.0.0"
|
"rimraf": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"to-array": {
|
||||||
|
"version": "0.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
|
||||||
|
"integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"to-buffer": {
|
"to-buffer": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
|
||||||
|
|
@ -10535,9 +10606,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ua-parser-js": {
|
"ua-parser-js": {
|
||||||
"version": "0.7.23",
|
"version": "0.7.22",
|
||||||
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.23.tgz",
|
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz",
|
||||||
"integrity": "sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA==",
|
"integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"unbzip2-stream": {
|
"unbzip2-stream": {
|
||||||
|
|
@ -10901,12 +10972,6 @@
|
||||||
"spdx-expression-parse": "^3.0.0"
|
"spdx-expression-parse": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vary": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
|
||||||
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"vfile": {
|
"vfile": {
|
||||||
"version": "4.2.1",
|
"version": "4.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
|
||||||
|
|
@ -11046,6 +11111,12 @@
|
||||||
"integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
|
"integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"xmlhttprequest-ssl": {
|
||||||
|
"version": "1.5.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
|
||||||
|
"integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"xtend": {
|
"xtend": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
||||||
|
|
@ -11109,6 +11180,12 @@
|
||||||
"fd-slicer": "~1.1.0"
|
"fd-slicer": "~1.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"yeast": {
|
||||||
|
"version": "0.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
|
||||||
|
"integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"yocto-queue": {
|
"yocto-queue": {
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
"js-test-karma": "karma start js/tests/karma.conf.js",
|
"js-test-karma": "karma start js/tests/karma.conf.js",
|
||||||
"js-test-integration-bundle": "rollup --config js/tests/integration/rollup.bundle.js",
|
"js-test-integration-bundle": "rollup --config js/tests/integration/rollup.bundle.js",
|
||||||
"js-test-integration-modularity": "rollup --config js/tests/integration/rollup.bundle-modularity.js",
|
"js-test-integration-modularity": "rollup --config js/tests/integration/rollup.bundle-modularity.js",
|
||||||
"js-test-cloud": "cross-env BROWSERSTACK=true npm run js-test-karma",
|
"js-test-cloud": "cross-env BROWSER=true npm run js-test-karma",
|
||||||
"js-test-jquery": "cross-env JQUERY=true npm run js-test-karma",
|
"js-test-jquery": "cross-env JQUERY=true npm run js-test-karma",
|
||||||
"lint": "npm-run-all --parallel js-lint css-lint lockfile-lint",
|
"lint": "npm-run-all --parallel js-lint css-lint lockfile-lint",
|
||||||
"docs": "npm-run-all docs-build docs-lint",
|
"docs": "npm-run-all docs-build docs-lint",
|
||||||
|
|
@ -115,14 +115,14 @@
|
||||||
"eslint": "^7.17.0",
|
"eslint": "^7.17.0",
|
||||||
"eslint-config-xo": "^0.34.0",
|
"eslint-config-xo": "^0.34.0",
|
||||||
"eslint-plugin-import": "^2.22.1",
|
"eslint-plugin-import": "^2.22.1",
|
||||||
"eslint-plugin-unicorn": "^26.0.1",
|
"eslint-plugin-unicorn": "^25.0.1",
|
||||||
"find-unused-sass-variables": "^3.1.0",
|
"find-unused-sass-variables": "^3.1.0",
|
||||||
"glob": "^7.1.6",
|
"glob": "^7.1.6",
|
||||||
"hammer-simulator": "0.0.1",
|
"hammer-simulator": "0.0.1",
|
||||||
"hugo-bin": "^0.68.0",
|
"hugo-bin": "^0.68.0",
|
||||||
"ip": "^1.1.5",
|
"ip": "^1.1.5",
|
||||||
"jquery": "^3.5.1",
|
"jquery": "^3.5.1",
|
||||||
"karma": "^6.0.0",
|
"karma": "^5.2.3",
|
||||||
"karma-browserstack-launcher": "1.4.0",
|
"karma-browserstack-launcher": "1.4.0",
|
||||||
"karma-chrome-launcher": "^3.1.0",
|
"karma-chrome-launcher": "^3.1.0",
|
||||||
"karma-coverage-istanbul-reporter": "^3.0.3",
|
"karma-coverage-istanbul-reporter": "^3.0.3",
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,7 @@
|
||||||
// Alternate buttons
|
// Alternate buttons
|
||||||
//
|
//
|
||||||
|
|
||||||
|
// scss-docs-start btn-variant-loops
|
||||||
@each $color, $value in $theme-colors {
|
@each $color, $value in $theme-colors {
|
||||||
.btn-#{$color} {
|
.btn-#{$color} {
|
||||||
@include button-variant($value, $value);
|
@include button-variant($value, $value);
|
||||||
|
|
@ -66,6 +67,7 @@
|
||||||
@include button-outline-variant($value);
|
@include button-outline-variant($value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// scss-docs-end btn-variant-loops
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -202,6 +202,7 @@
|
||||||
.modal-xl { max-width: $modal-xl; }
|
.modal-xl { max-width: $modal-xl; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// scss-docs-start modal-fullscreen-loop
|
||||||
@each $breakpoint in map-keys($grid-breakpoints) {
|
@each $breakpoint in map-keys($grid-breakpoints) {
|
||||||
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
||||||
$postfix: if($infix != "", $infix + "-down", "");
|
$postfix: if($infix != "", $infix + "-down", "");
|
||||||
|
|
@ -233,3 +234,4 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// scss-docs-end modal-fullscreen-loop
|
||||||
|
|
|
||||||
|
|
@ -148,6 +148,7 @@
|
||||||
background-size: 100%;
|
background-size: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// scss-docs-start navbar-expand-loop
|
||||||
// Generate series of `.navbar-expand-*` responsive classes for configuring
|
// Generate series of `.navbar-expand-*` responsive classes for configuring
|
||||||
// where your navbar collapses.
|
// where your navbar collapses.
|
||||||
.navbar-expand {
|
.navbar-expand {
|
||||||
|
|
@ -185,6 +186,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// scss-docs-end navbar-expand-loop
|
||||||
|
|
||||||
|
|
||||||
// Navbar themes
|
// Navbar themes
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
// Disable animation if transitions are disabled
|
// Disable animation if transitions are disabled
|
||||||
|
|
||||||
|
// scss-docs-start progress-keyframes
|
||||||
@if $enable-transitions {
|
@if $enable-transitions {
|
||||||
@keyframes progress-bar-stripes {
|
@keyframes progress-bar-stripes {
|
||||||
0% { background-position-x: $progress-height; }
|
0% { background-position-x: $progress-height; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// scss-docs-end progress-keyframes
|
||||||
|
|
||||||
.progress {
|
.progress {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,11 @@
|
||||||
// Rotating border
|
// Rotating border
|
||||||
//
|
//
|
||||||
|
|
||||||
|
// scss-docs-start spinner-border-keyframes
|
||||||
@keyframes spinner-border {
|
@keyframes spinner-border {
|
||||||
to { transform: rotate(360deg) #{"/* rtl:ignore */"}; }
|
to { transform: rotate(360deg) #{"/* rtl:ignore */"}; }
|
||||||
}
|
}
|
||||||
|
// scss-docs-end spinner-border-keyframes
|
||||||
|
|
||||||
.spinner-border {
|
.spinner-border {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
@ -28,6 +30,7 @@
|
||||||
// Growing circle
|
// Growing circle
|
||||||
//
|
//
|
||||||
|
|
||||||
|
// scss-docs-start spinner-grow-keyframes
|
||||||
@keyframes spinner-grow {
|
@keyframes spinner-grow {
|
||||||
0% {
|
0% {
|
||||||
transform: scale(0);
|
transform: scale(0);
|
||||||
|
|
@ -37,6 +40,7 @@
|
||||||
transform: none;
|
transform: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// scss-docs-end spinner-grow-keyframes
|
||||||
|
|
||||||
.spinner-grow {
|
.spinner-grow {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
|
||||||
|
|
@ -47,5 +47,4 @@
|
||||||
|
|
||||||
.toast-body {
|
.toast-body {
|
||||||
padding: $toast-padding-x; // apply to both vertical and horizontal
|
padding: $toast-padding-x; // apply to both vertical and horizontal
|
||||||
word-wrap: break-word;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -344,6 +344,7 @@ $container-padding-x: $grid-gutter-width / 2 !default;
|
||||||
//
|
//
|
||||||
// Define common padding and border radius sizes and more.
|
// Define common padding and border radius sizes and more.
|
||||||
|
|
||||||
|
// scss-docs-start border-variables
|
||||||
$border-width: 1px !default;
|
$border-width: 1px !default;
|
||||||
$border-widths: (
|
$border-widths: (
|
||||||
0: 0,
|
0: 0,
|
||||||
|
|
@ -355,11 +356,14 @@ $border-widths: (
|
||||||
) !default;
|
) !default;
|
||||||
|
|
||||||
$border-color: $gray-300 !default;
|
$border-color: $gray-300 !default;
|
||||||
|
// scss-docs-end border-variables
|
||||||
|
|
||||||
|
// scss-docs-start border-radius-variables
|
||||||
$border-radius: .25rem !default;
|
$border-radius: .25rem !default;
|
||||||
$border-radius-sm: .2rem !default;
|
$border-radius-sm: .2rem !default;
|
||||||
$border-radius-lg: .3rem !default;
|
$border-radius-lg: .3rem !default;
|
||||||
$border-radius-pill: 50rem !default;
|
$border-radius-pill: 50rem !default;
|
||||||
|
// scss-docs-end border-radius-variables
|
||||||
|
|
||||||
$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;
|
$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;
|
||||||
$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;
|
$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;
|
||||||
|
|
@ -436,12 +440,14 @@ $font-sizes: (
|
||||||
) !default;
|
) !default;
|
||||||
// scss-docs-end font-sizes
|
// scss-docs-end font-sizes
|
||||||
|
|
||||||
|
// scss-docs-start headings-variables
|
||||||
$headings-margin-bottom: $spacer / 2 !default;
|
$headings-margin-bottom: $spacer / 2 !default;
|
||||||
$headings-font-family: null !default;
|
$headings-font-family: null !default;
|
||||||
$headings-font-style: null !default;
|
$headings-font-style: null !default;
|
||||||
$headings-font-weight: 500 !default;
|
$headings-font-weight: 500 !default;
|
||||||
$headings-line-height: 1.2 !default;
|
$headings-line-height: 1.2 !default;
|
||||||
$headings-color: null !default;
|
$headings-color: null !default;
|
||||||
|
// scss-docs-end headings-variables
|
||||||
|
|
||||||
// scss-docs-start display-headings
|
// scss-docs-start display-headings
|
||||||
$display-font-sizes: (
|
$display-font-sizes: (
|
||||||
|
|
@ -457,6 +463,7 @@ $display-font-weight: 300 !default;
|
||||||
$display-line-height: $headings-line-height !default;
|
$display-line-height: $headings-line-height !default;
|
||||||
// scss-docs-end display-headings
|
// scss-docs-end display-headings
|
||||||
|
|
||||||
|
// scss-docs-start type-variables
|
||||||
$lead-font-size: $font-size-base * 1.25 !default;
|
$lead-font-size: $font-size-base * 1.25 !default;
|
||||||
$lead-font-weight: 300 !default;
|
$lead-font-weight: 300 !default;
|
||||||
|
|
||||||
|
|
@ -491,6 +498,7 @@ $nested-kbd-font-weight: $font-weight-bold !default;
|
||||||
$list-inline-padding: .5rem !default;
|
$list-inline-padding: .5rem !default;
|
||||||
|
|
||||||
$mark-bg: #fcf8e3 !default;
|
$mark-bg: #fcf8e3 !default;
|
||||||
|
// scss-docs-end type-variables
|
||||||
|
|
||||||
|
|
||||||
// Tables
|
// Tables
|
||||||
|
|
@ -533,7 +541,9 @@ $table-group-separator-color: currentColor !default;
|
||||||
$table-caption-color: $text-muted !default;
|
$table-caption-color: $text-muted !default;
|
||||||
|
|
||||||
$table-bg-scale: -80% !default;
|
$table-bg-scale: -80% !default;
|
||||||
|
// scss-docs-end table-variables
|
||||||
|
|
||||||
|
// scss-docs-start table-loop
|
||||||
$table-variants: (
|
$table-variants: (
|
||||||
"primary": shift-color($primary, $table-bg-scale),
|
"primary": shift-color($primary, $table-bg-scale),
|
||||||
"secondary": shift-color($secondary, $table-bg-scale),
|
"secondary": shift-color($secondary, $table-bg-scale),
|
||||||
|
|
@ -544,13 +554,14 @@ $table-variants: (
|
||||||
"light": $light,
|
"light": $light,
|
||||||
"dark": $dark,
|
"dark": $dark,
|
||||||
) !default;
|
) !default;
|
||||||
// scss-docs-end table-variables
|
// scss-docs-end table-loop
|
||||||
|
|
||||||
|
|
||||||
// Buttons + Forms
|
// Buttons + Forms
|
||||||
//
|
//
|
||||||
// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.
|
// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.
|
||||||
|
|
||||||
|
// scss-docs-start input-btn-variables
|
||||||
$input-btn-padding-y: .375rem !default;
|
$input-btn-padding-y: .375rem !default;
|
||||||
$input-btn-padding-x: .75rem !default;
|
$input-btn-padding-x: .75rem !default;
|
||||||
$input-btn-font-family: null !default;
|
$input-btn-font-family: null !default;
|
||||||
|
|
@ -571,12 +582,14 @@ $input-btn-padding-x-lg: 1rem !default;
|
||||||
$input-btn-font-size-lg: $font-size-lg !default;
|
$input-btn-font-size-lg: $font-size-lg !default;
|
||||||
|
|
||||||
$input-btn-border-width: $border-width !default;
|
$input-btn-border-width: $border-width !default;
|
||||||
|
// scss-docs-end input-btn-variables
|
||||||
|
|
||||||
|
|
||||||
// Buttons
|
// Buttons
|
||||||
//
|
//
|
||||||
// For each of Bootstrap's buttons, define text, background, and border color.
|
// For each of Bootstrap's buttons, define text, background, and border color.
|
||||||
|
|
||||||
|
// scss-docs-start btn-variables
|
||||||
$btn-padding-y: $input-btn-padding-y !default;
|
$btn-padding-y: $input-btn-padding-y !default;
|
||||||
$btn-padding-x: $input-btn-padding-x !default;
|
$btn-padding-x: $input-btn-padding-x !default;
|
||||||
$btn-font-family: $input-btn-font-family !default;
|
$btn-font-family: $input-btn-font-family !default;
|
||||||
|
|
@ -620,22 +633,28 @@ $btn-active-bg-shade-amount: 20% !default;
|
||||||
$btn-active-bg-tint-amount: 20% !default;
|
$btn-active-bg-tint-amount: 20% !default;
|
||||||
$btn-active-border-shade-amount: 25% !default;
|
$btn-active-border-shade-amount: 25% !default;
|
||||||
$btn-active-border-tint-amount: 10% !default;
|
$btn-active-border-tint-amount: 10% !default;
|
||||||
|
// scss-docs-end btn-variables
|
||||||
|
|
||||||
|
|
||||||
// Forms
|
// Forms
|
||||||
|
|
||||||
|
// scss-docs-start form-text-variables
|
||||||
$form-text-margin-top: .25rem !default;
|
$form-text-margin-top: .25rem !default;
|
||||||
$form-text-font-size: $small-font-size !default;
|
$form-text-font-size: $small-font-size !default;
|
||||||
$form-text-font-style: null !default;
|
$form-text-font-style: null !default;
|
||||||
$form-text-font-weight: null !default;
|
$form-text-font-weight: null !default;
|
||||||
$form-text-color: $text-muted !default;
|
$form-text-color: $text-muted !default;
|
||||||
|
// scss-docs-end form-text-variables
|
||||||
|
|
||||||
|
// scss-docs-start form-label-variables
|
||||||
$form-label-margin-bottom: .5rem !default;
|
$form-label-margin-bottom: .5rem !default;
|
||||||
$form-label-font-size: null !default;
|
$form-label-font-size: null !default;
|
||||||
$form-label-font-style: null !default;
|
$form-label-font-style: null !default;
|
||||||
$form-label-font-weight: null !default;
|
$form-label-font-weight: null !default;
|
||||||
$form-label-color: null !default;
|
$form-label-color: null !default;
|
||||||
|
// scss-docs-end form-label-variables
|
||||||
|
|
||||||
|
// scss-docs-start form-input-variables
|
||||||
$input-padding-y: $input-btn-padding-y !default;
|
$input-padding-y: $input-btn-padding-y !default;
|
||||||
$input-padding-x: $input-btn-padding-x !default;
|
$input-padding-x: $input-btn-padding-x !default;
|
||||||
$input-font-family: $input-btn-font-family !default;
|
$input-font-family: $input-btn-font-family !default;
|
||||||
|
|
@ -684,8 +703,9 @@ $input-height-sm: add($input-line-height * 1em, add($input
|
||||||
$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;
|
$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;
|
||||||
|
|
||||||
$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
|
$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
|
||||||
|
// scss-docs-end form-input-variables
|
||||||
|
|
||||||
|
// scss-docs-start form-check-variables
|
||||||
$form-check-input-width: 1em !default;
|
$form-check-input-width: 1em !default;
|
||||||
$form-check-min-height: $font-size-base * $line-height-base !default;
|
$form-check-min-height: $font-size-base * $line-height-base !default;
|
||||||
$form-check-padding-start: $form-check-input-width + .5em !default;
|
$form-check-padding-start: $form-check-input-width + .5em !default;
|
||||||
|
|
@ -718,6 +738,10 @@ $form-check-input-disabled-opacity: .5 !default;
|
||||||
$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;
|
$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;
|
||||||
$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;
|
$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;
|
||||||
|
|
||||||
|
$form-check-inline-margin-end: 1rem !default;
|
||||||
|
// scss-docs-end form-check-variables
|
||||||
|
|
||||||
|
// scss-docs-start form-switch-variables
|
||||||
$form-switch-color: rgba(0, 0, 0, .25) !default;
|
$form-switch-color: rgba(0, 0, 0, .25) !default;
|
||||||
$form-switch-width: 2em !default;
|
$form-switch-width: 2em !default;
|
||||||
$form-switch-padding-start: $form-switch-width + .5em !default;
|
$form-switch-padding-start: $form-switch-width + .5em !default;
|
||||||
|
|
@ -730,16 +754,18 @@ $form-switch-focus-bg-image: url("data:image/svg+xml,<svg xmlns='http://www
|
||||||
$form-switch-checked-color: $component-active-color !default;
|
$form-switch-checked-color: $component-active-color !default;
|
||||||
$form-switch-checked-bg-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>") !default;
|
$form-switch-checked-bg-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>") !default;
|
||||||
$form-switch-checked-bg-position: right center !default;
|
$form-switch-checked-bg-position: right center !default;
|
||||||
|
// scss-docs-end form-switch-variables
|
||||||
|
|
||||||
$form-check-inline-margin-end: 1rem !default;
|
// scss-docs-start input-group-variables
|
||||||
|
|
||||||
$input-group-addon-padding-y: $input-padding-y !default;
|
$input-group-addon-padding-y: $input-padding-y !default;
|
||||||
$input-group-addon-padding-x: $input-padding-x !default;
|
$input-group-addon-padding-x: $input-padding-x !default;
|
||||||
$input-group-addon-font-weight: $input-font-weight !default;
|
$input-group-addon-font-weight: $input-font-weight !default;
|
||||||
$input-group-addon-color: $input-color !default;
|
$input-group-addon-color: $input-color !default;
|
||||||
$input-group-addon-bg: $gray-200 !default;
|
$input-group-addon-bg: $gray-200 !default;
|
||||||
$input-group-addon-border-color: $input-border-color !default;
|
$input-group-addon-border-color: $input-border-color !default;
|
||||||
|
// scss-docs-end input-group-variables
|
||||||
|
|
||||||
|
// scss-docs-start form-select-variables
|
||||||
$form-select-padding-y: $input-padding-y !default;
|
$form-select-padding-y: $input-padding-y !default;
|
||||||
$form-select-padding-x: $input-padding-x !default;
|
$form-select-padding-x: $input-padding-x !default;
|
||||||
$form-select-font-family: $input-font-family !default;
|
$form-select-font-family: $input-font-family !default;
|
||||||
|
|
@ -777,7 +803,9 @@ $form-select-font-size-sm: $input-font-size-sm !default;
|
||||||
$form-select-padding-y-lg: $input-padding-y-lg !default;
|
$form-select-padding-y-lg: $input-padding-y-lg !default;
|
||||||
$form-select-padding-x-lg: $input-padding-x-lg !default;
|
$form-select-padding-x-lg: $input-padding-x-lg !default;
|
||||||
$form-select-font-size-lg: $input-font-size-lg !default;
|
$form-select-font-size-lg: $input-font-size-lg !default;
|
||||||
|
// scss-docs-end form-select-variables
|
||||||
|
|
||||||
|
// scss-docs-start form-range-variables
|
||||||
$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;
|
||||||
|
|
@ -796,11 +824,15 @@ $form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For f
|
||||||
$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;
|
$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;
|
||||||
$form-range-thumb-disabled-bg: $gray-500 !default;
|
$form-range-thumb-disabled-bg: $gray-500 !default;
|
||||||
$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
|
$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
|
||||||
|
// scss-docs-end form-range-variables
|
||||||
|
|
||||||
|
// scss-docs-start form-file-variables
|
||||||
$form-file-button-color: $input-color !default;
|
$form-file-button-color: $input-color !default;
|
||||||
$form-file-button-bg: $input-group-addon-bg !default;
|
$form-file-button-bg: $input-group-addon-bg !default;
|
||||||
$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;
|
$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;
|
||||||
|
// scss-docs-end form-file-variables
|
||||||
|
|
||||||
|
// scss-docs-start form-floating-variables
|
||||||
$form-floating-height: add(3.5rem, $input-height-border) !default;
|
$form-floating-height: add(3.5rem, $input-height-border) !default;
|
||||||
$form-floating-padding-x: $input-padding-x !default;
|
$form-floating-padding-x: $input-padding-x !default;
|
||||||
$form-floating-padding-y: 1rem !default;
|
$form-floating-padding-y: 1rem !default;
|
||||||
|
|
@ -809,9 +841,11 @@ $form-floating-input-padding-b: .625rem !default;
|
||||||
$form-floating-label-opacity: .65 !default;
|
$form-floating-label-opacity: .65 !default;
|
||||||
$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;
|
$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;
|
||||||
$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;
|
$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;
|
||||||
|
// scss-docs-end form-floating-variables
|
||||||
|
|
||||||
// Form validation
|
// Form validation
|
||||||
|
|
||||||
|
// scss-docs-start form-feedback-variables
|
||||||
$form-feedback-margin-top: $form-text-margin-top !default;
|
$form-feedback-margin-top: $form-text-margin-top !default;
|
||||||
$form-feedback-font-size: $form-text-font-size !default;
|
$form-feedback-font-size: $form-text-font-size !default;
|
||||||
$form-feedback-font-style: $form-text-font-style !default;
|
$form-feedback-font-style: $form-text-font-style !default;
|
||||||
|
|
@ -822,6 +856,7 @@ $form-feedback-icon-valid-color: $form-feedback-valid-color !default;
|
||||||
$form-feedback-icon-valid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>") !default;
|
$form-feedback-icon-valid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>") !default;
|
||||||
$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;
|
$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;
|
||||||
$form-feedback-icon-invalid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>") !default;
|
$form-feedback-icon-invalid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>") !default;
|
||||||
|
// scss-docs-end form-feedback-variables
|
||||||
|
|
||||||
// scss-docs-start form-validation-states
|
// scss-docs-start form-validation-states
|
||||||
$form-validation-states: (
|
$form-validation-states: (
|
||||||
|
|
@ -854,6 +889,7 @@ $zindex-tooltip: 1070 !default;
|
||||||
|
|
||||||
// Navs
|
// Navs
|
||||||
|
|
||||||
|
// scss-docs-start nav-variables
|
||||||
$nav-link-padding-y: .5rem !default;
|
$nav-link-padding-y: .5rem !default;
|
||||||
$nav-link-padding-x: 1rem !default;
|
$nav-link-padding-x: 1rem !default;
|
||||||
$nav-link-font-size: null !default;
|
$nav-link-font-size: null !default;
|
||||||
|
|
@ -874,10 +910,12 @@ $nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg
|
||||||
$nav-pills-border-radius: $border-radius !default;
|
$nav-pills-border-radius: $border-radius !default;
|
||||||
$nav-pills-link-active-color: $component-active-color !default;
|
$nav-pills-link-active-color: $component-active-color !default;
|
||||||
$nav-pills-link-active-bg: $component-active-bg !default;
|
$nav-pills-link-active-bg: $component-active-bg !default;
|
||||||
|
// scss-docs-end nav-variables
|
||||||
|
|
||||||
|
|
||||||
// Navbar
|
// Navbar
|
||||||
|
|
||||||
|
// scss-docs-start navbar-variables
|
||||||
$navbar-padding-y: $spacer / 2 !default;
|
$navbar-padding-y: $spacer / 2 !default;
|
||||||
$navbar-padding-x: null !default;
|
$navbar-padding-x: null !default;
|
||||||
|
|
||||||
|
|
@ -896,7 +934,9 @@ $navbar-toggler-font-size: $font-size-lg !default;
|
||||||
$navbar-toggler-border-radius: $btn-border-radius !default;
|
$navbar-toggler-border-radius: $btn-border-radius !default;
|
||||||
$navbar-toggler-focus-width: $btn-focus-width !default;
|
$navbar-toggler-focus-width: $btn-focus-width !default;
|
||||||
$navbar-toggler-transition: box-shadow .15s ease-in-out !default;
|
$navbar-toggler-transition: box-shadow .15s ease-in-out !default;
|
||||||
|
// scss-docs-end navbar-variables
|
||||||
|
|
||||||
|
// scss-docs-start navbar-theme-variables
|
||||||
$navbar-dark-color: rgba($white, .55) !default;
|
$navbar-dark-color: rgba($white, .55) !default;
|
||||||
$navbar-dark-hover-color: rgba($white, .75) !default;
|
$navbar-dark-hover-color: rgba($white, .75) !default;
|
||||||
$navbar-dark-active-color: $white !default;
|
$navbar-dark-active-color: $white !default;
|
||||||
|
|
@ -915,12 +955,14 @@ $navbar-light-brand-color: $navbar-light-active-color !default;
|
||||||
$navbar-light-brand-hover-color: $navbar-light-active-color !default;
|
$navbar-light-brand-hover-color: $navbar-light-active-color !default;
|
||||||
$navbar-dark-brand-color: $navbar-dark-active-color !default;
|
$navbar-dark-brand-color: $navbar-dark-active-color !default;
|
||||||
$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;
|
$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;
|
||||||
|
// scss-docs-end navbar-theme-variables
|
||||||
|
|
||||||
|
|
||||||
// Dropdowns
|
// Dropdowns
|
||||||
//
|
//
|
||||||
// Dropdown menu container and contents.
|
// Dropdown menu container and contents.
|
||||||
|
|
||||||
|
// scss-docs-start dropdown-variables
|
||||||
$dropdown-min-width: 10rem !default;
|
$dropdown-min-width: 10rem !default;
|
||||||
$dropdown-padding-x: 0 !default;
|
$dropdown-padding-x: 0 !default;
|
||||||
$dropdown-padding-y: .5rem !default;
|
$dropdown-padding-y: .5rem !default;
|
||||||
|
|
@ -950,7 +992,9 @@ $dropdown-item-padding-x: $spacer !default;
|
||||||
|
|
||||||
$dropdown-header-color: $gray-600 !default;
|
$dropdown-header-color: $gray-600 !default;
|
||||||
$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;
|
$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;
|
||||||
|
// scss-docs-end dropdown-variables
|
||||||
|
|
||||||
|
// scss-docs-start dropdown-dark-variables
|
||||||
$dropdown-dark-color: $gray-300 !default;
|
$dropdown-dark-color: $gray-300 !default;
|
||||||
$dropdown-dark-bg: $gray-800 !default;
|
$dropdown-dark-bg: $gray-800 !default;
|
||||||
$dropdown-dark-border-color: $dropdown-border-color !default;
|
$dropdown-dark-border-color: $dropdown-border-color !default;
|
||||||
|
|
@ -963,10 +1007,12 @@ $dropdown-dark-link-active-color: $dropdown-link-active-color !default;
|
||||||
$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;
|
$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;
|
||||||
$dropdown-dark-link-disabled-color: $gray-500 !default;
|
$dropdown-dark-link-disabled-color: $gray-500 !default;
|
||||||
$dropdown-dark-header-color: $gray-500 !default;
|
$dropdown-dark-header-color: $gray-500 !default;
|
||||||
|
// scss-docs-end dropdown-dark-variables
|
||||||
|
|
||||||
|
|
||||||
// Pagination
|
// Pagination
|
||||||
|
|
||||||
|
// scss-docs-start pagination-variables
|
||||||
$pagination-padding-y: .375rem !default;
|
$pagination-padding-y: .375rem !default;
|
||||||
$pagination-padding-x: .75rem !default;
|
$pagination-padding-x: .75rem !default;
|
||||||
$pagination-padding-y-sm: .25rem !default;
|
$pagination-padding-y-sm: .25rem !default;
|
||||||
|
|
@ -1002,9 +1048,12 @@ $pagination-transition: color .15s ease-in-out, background-color .1
|
||||||
|
|
||||||
$pagination-border-radius-sm: $border-radius-sm !default;
|
$pagination-border-radius-sm: $border-radius-sm !default;
|
||||||
$pagination-border-radius-lg: $border-radius-lg !default;
|
$pagination-border-radius-lg: $border-radius-lg !default;
|
||||||
|
// scss-docs-end pagination-variables
|
||||||
|
|
||||||
|
|
||||||
// Cards
|
// Cards
|
||||||
|
|
||||||
|
// scss-docs-start card-variables
|
||||||
$card-spacer-y: $spacer !default;
|
$card-spacer-y: $spacer !default;
|
||||||
$card-spacer-x: $spacer !default;
|
$card-spacer-x: $spacer !default;
|
||||||
$card-title-spacer-y: $spacer / 2 !default;
|
$card-title-spacer-y: $spacer / 2 !default;
|
||||||
|
|
@ -1019,12 +1068,13 @@ $card-cap-color: null !default;
|
||||||
$card-height: null !default;
|
$card-height: null !default;
|
||||||
$card-color: null !default;
|
$card-color: null !default;
|
||||||
$card-bg: $white !default;
|
$card-bg: $white !default;
|
||||||
|
|
||||||
$card-img-overlay-padding: $spacer !default;
|
$card-img-overlay-padding: $spacer !default;
|
||||||
|
|
||||||
$card-group-margin: $grid-gutter-width / 2 !default;
|
$card-group-margin: $grid-gutter-width / 2 !default;
|
||||||
|
// scss-docs-end card-variables
|
||||||
|
|
||||||
// Accordion
|
// Accordion
|
||||||
|
|
||||||
|
// scss-docs-start accordion-variables
|
||||||
$accordion-padding-y: 1rem !default;
|
$accordion-padding-y: 1rem !default;
|
||||||
$accordion-padding-x: 1.25rem !default;
|
$accordion-padding-x: 1.25rem !default;
|
||||||
$accordion-color: $body-color !default;
|
$accordion-color: $body-color !default;
|
||||||
|
|
@ -1055,9 +1105,11 @@ $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='#{$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-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='#{$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;
|
||||||
|
// scss-docs-end accordion-variables
|
||||||
|
|
||||||
// Tooltips
|
// Tooltips
|
||||||
|
|
||||||
|
// scss-docs-start tooltip-variables
|
||||||
$tooltip-font-size: $font-size-sm !default;
|
$tooltip-font-size: $font-size-sm !default;
|
||||||
$tooltip-max-width: 200px !default;
|
$tooltip-max-width: 200px !default;
|
||||||
$tooltip-color: $white !default;
|
$tooltip-color: $white !default;
|
||||||
|
|
@ -1071,18 +1123,22 @@ $tooltip-margin: 0 !default;
|
||||||
$tooltip-arrow-width: .8rem !default;
|
$tooltip-arrow-width: .8rem !default;
|
||||||
$tooltip-arrow-height: .4rem !default;
|
$tooltip-arrow-height: .4rem !default;
|
||||||
$tooltip-arrow-color: $tooltip-bg !default;
|
$tooltip-arrow-color: $tooltip-bg !default;
|
||||||
|
// scss-docs-end tooltip-variables
|
||||||
|
|
||||||
// Form tooltips must come after regular tooltips
|
// Form tooltips must come after regular tooltips
|
||||||
|
// scss-docs-start tooltip-feedback-variables
|
||||||
$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;
|
$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;
|
||||||
$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;
|
$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;
|
||||||
$form-feedback-tooltip-font-size: $tooltip-font-size !default;
|
$form-feedback-tooltip-font-size: $tooltip-font-size !default;
|
||||||
$form-feedback-tooltip-line-height: null !default;
|
$form-feedback-tooltip-line-height: null !default;
|
||||||
$form-feedback-tooltip-opacity: $tooltip-opacity !default;
|
$form-feedback-tooltip-opacity: $tooltip-opacity !default;
|
||||||
$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;
|
$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;
|
||||||
|
// scss-docs-start tooltip-feedback-variables
|
||||||
|
|
||||||
|
|
||||||
// Popovers
|
// Popovers
|
||||||
|
|
||||||
|
// scss-docs-start popover-variables
|
||||||
$popover-font-size: $font-size-sm !default;
|
$popover-font-size: $font-size-sm !default;
|
||||||
$popover-bg: $white !default;
|
$popover-bg: $white !default;
|
||||||
$popover-max-width: 276px !default;
|
$popover-max-width: 276px !default;
|
||||||
|
|
@ -1106,10 +1162,12 @@ $popover-arrow-height: .5rem !default;
|
||||||
$popover-arrow-color: $popover-bg !default;
|
$popover-arrow-color: $popover-bg !default;
|
||||||
|
|
||||||
$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;
|
$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;
|
||||||
|
// scss-docs-end popover-variables
|
||||||
|
|
||||||
|
|
||||||
// Toasts
|
// Toasts
|
||||||
|
|
||||||
|
// scss-docs-start toast-variables
|
||||||
$toast-max-width: 350px !default;
|
$toast-max-width: 350px !default;
|
||||||
$toast-padding-x: .75rem !default;
|
$toast-padding-x: .75rem !default;
|
||||||
$toast-padding-y: .5rem !default;
|
$toast-padding-y: .5rem !default;
|
||||||
|
|
@ -1125,24 +1183,26 @@ $toast-spacing: $container-padding-x !default;
|
||||||
$toast-header-color: $gray-600 !default;
|
$toast-header-color: $gray-600 !default;
|
||||||
$toast-header-background-color: rgba($white, .85) !default;
|
$toast-header-background-color: rgba($white, .85) !default;
|
||||||
$toast-header-border-color: rgba(0, 0, 0, .05) !default;
|
$toast-header-border-color: rgba(0, 0, 0, .05) !default;
|
||||||
|
// scss-docs-end toast-variables
|
||||||
|
|
||||||
|
|
||||||
// Badges
|
// Badges
|
||||||
|
|
||||||
|
// scss-docs-start badge-variables
|
||||||
$badge-font-size: .75em !default;
|
$badge-font-size: .75em !default;
|
||||||
$badge-font-weight: $font-weight-bold !default;
|
$badge-font-weight: $font-weight-bold !default;
|
||||||
$badge-color: $white !default;
|
$badge-color: $white !default;
|
||||||
$badge-padding-y: .35em !default;
|
$badge-padding-y: .35em !default;
|
||||||
$badge-padding-x: .65em !default;
|
$badge-padding-x: .65em !default;
|
||||||
$badge-border-radius: $border-radius !default;
|
$badge-border-radius: $border-radius !default;
|
||||||
|
// scss-docs-end badge-variables
|
||||||
|
|
||||||
|
|
||||||
// Modals
|
// Modals
|
||||||
|
|
||||||
// Padding applied to the modal body
|
// scss-docs-start modal-variables
|
||||||
$modal-inner-padding: $spacer !default;
|
$modal-inner-padding: $spacer !default;
|
||||||
|
|
||||||
// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding
|
|
||||||
$modal-footer-margin-between: .5rem !default;
|
$modal-footer-margin-between: .5rem !default;
|
||||||
|
|
||||||
$modal-dialog-margin: .5rem !default;
|
$modal-dialog-margin: .5rem !default;
|
||||||
|
|
@ -1178,28 +1238,30 @@ $modal-fade-transform: translate(0, -50px) !default;
|
||||||
$modal-show-transform: none !default;
|
$modal-show-transform: none !default;
|
||||||
$modal-transition: transform .3s ease-out !default;
|
$modal-transition: transform .3s ease-out !default;
|
||||||
$modal-scale-transform: scale(1.02) !default;
|
$modal-scale-transform: scale(1.02) !default;
|
||||||
|
// scss-docs-end modal-variables
|
||||||
|
|
||||||
|
|
||||||
// Alerts
|
// Alerts
|
||||||
//
|
//
|
||||||
// Define alert colors, border radius, and padding.
|
// Define alert colors, border radius, and padding.
|
||||||
|
|
||||||
$alert-padding-y: $spacer !default;
|
// scss-docs-start alert-variables
|
||||||
$alert-padding-x: $spacer !default;
|
$alert-padding-y: $spacer !default;
|
||||||
$alert-margin-bottom: 1rem !default;
|
$alert-padding-x: $spacer !default;
|
||||||
$alert-border-radius: $border-radius !default;
|
$alert-margin-bottom: 1rem !default;
|
||||||
$alert-link-font-weight: $font-weight-bold !default;
|
$alert-border-radius: $border-radius !default;
|
||||||
$alert-border-width: $border-width !default;
|
$alert-link-font-weight: $font-weight-bold !default;
|
||||||
|
$alert-border-width: $border-width !default;
|
||||||
$alert-bg-scale: -80% !default;
|
$alert-bg-scale: -80% !default;
|
||||||
$alert-border-scale: -70% !default;
|
$alert-border-scale: -70% !default;
|
||||||
$alert-color-scale: 40% !default;
|
$alert-color-scale: 40% !default;
|
||||||
|
$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side
|
||||||
$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side
|
// scss-docs-end alert-variables
|
||||||
|
|
||||||
|
|
||||||
// Progress bars
|
// Progress bars
|
||||||
|
|
||||||
|
// scss-docs-start progress-variables
|
||||||
$progress-height: 1rem !default;
|
$progress-height: 1rem !default;
|
||||||
$progress-font-size: $font-size-base * .75 !default;
|
$progress-font-size: $font-size-base * .75 !default;
|
||||||
$progress-bg: $gray-200 !default;
|
$progress-bg: $gray-200 !default;
|
||||||
|
|
@ -1209,10 +1271,12 @@ $progress-bar-color: $white !default;
|
||||||
$progress-bar-bg: $primary !default;
|
$progress-bar-bg: $primary !default;
|
||||||
$progress-bar-animation-timing: 1s linear infinite !default;
|
$progress-bar-animation-timing: 1s linear infinite !default;
|
||||||
$progress-bar-transition: width .6s ease !default;
|
$progress-bar-transition: width .6s ease !default;
|
||||||
|
// scss-docs-end progress-variables
|
||||||
|
|
||||||
|
|
||||||
// List group
|
// List group
|
||||||
|
|
||||||
|
// scss-docs-start list-group-variables
|
||||||
$list-group-color: null !default;
|
$list-group-color: null !default;
|
||||||
$list-group-bg: $white !default;
|
$list-group-bg: $white !default;
|
||||||
$list-group-border-color: rgba($black, .125) !default;
|
$list-group-border-color: rgba($black, .125) !default;
|
||||||
|
|
@ -1237,26 +1301,32 @@ $list-group-action-hover-color: $list-group-action-color !default;
|
||||||
|
|
||||||
$list-group-action-active-color: $body-color !default;
|
$list-group-action-active-color: $body-color !default;
|
||||||
$list-group-action-active-bg: $gray-200 !default;
|
$list-group-action-active-bg: $gray-200 !default;
|
||||||
|
// scss-docs-end list-group-variables
|
||||||
|
|
||||||
|
|
||||||
// Image thumbnails
|
// Image thumbnails
|
||||||
|
|
||||||
|
// scss-docs-start thumbnail-variables
|
||||||
$thumbnail-padding: .25rem !default;
|
$thumbnail-padding: .25rem !default;
|
||||||
$thumbnail-bg: $body-bg !default;
|
$thumbnail-bg: $body-bg !default;
|
||||||
$thumbnail-border-width: $border-width !default;
|
$thumbnail-border-width: $border-width !default;
|
||||||
$thumbnail-border-color: $gray-300 !default;
|
$thumbnail-border-color: $gray-300 !default;
|
||||||
$thumbnail-border-radius: $border-radius !default;
|
$thumbnail-border-radius: $border-radius !default;
|
||||||
$thumbnail-box-shadow: $box-shadow-sm !default;
|
$thumbnail-box-shadow: $box-shadow-sm !default;
|
||||||
|
// scss-docs-end thumbnail-variables
|
||||||
|
|
||||||
|
|
||||||
// Figures
|
// Figures
|
||||||
|
|
||||||
|
// scss-docs-start figure-variables
|
||||||
$figure-caption-font-size: $small-font-size !default;
|
$figure-caption-font-size: $small-font-size !default;
|
||||||
$figure-caption-color: $gray-600 !default;
|
$figure-caption-color: $gray-600 !default;
|
||||||
|
// scss-docs-end figure-variables
|
||||||
|
|
||||||
|
|
||||||
// Breadcrumbs
|
// Breadcrumbs
|
||||||
|
|
||||||
|
// scss-docs-start breadcrumb-variables
|
||||||
$breadcrumb-font-size: null !default;
|
$breadcrumb-font-size: null !default;
|
||||||
$breadcrumb-padding-y: 0 !default;
|
$breadcrumb-padding-y: 0 !default;
|
||||||
$breadcrumb-padding-x: 0 !default;
|
$breadcrumb-padding-x: 0 !default;
|
||||||
|
|
@ -1268,9 +1338,11 @@ $breadcrumb-active-color: $gray-600 !default;
|
||||||
$breadcrumb-divider: quote("/") !default;
|
$breadcrumb-divider: quote("/") !default;
|
||||||
$breadcrumb-divider-flipped: $breadcrumb-divider !default;
|
$breadcrumb-divider-flipped: $breadcrumb-divider !default;
|
||||||
$breadcrumb-border-radius: null !default;
|
$breadcrumb-border-radius: null !default;
|
||||||
|
// scss-docs-end breadcrumb-variables
|
||||||
|
|
||||||
// Carousel
|
// Carousel
|
||||||
|
|
||||||
|
// scss-docs-start carousel-variables
|
||||||
$carousel-control-color: $white !default;
|
$carousel-control-color: $white !default;
|
||||||
$carousel-control-width: 15% !default;
|
$carousel-control-width: 15% !default;
|
||||||
$carousel-control-opacity: .5 !default;
|
$carousel-control-opacity: .5 !default;
|
||||||
|
|
@ -1302,10 +1374,12 @@ $carousel-transition: transform $carousel-transition-duration eas
|
||||||
$carousel-dark-indicator-active-bg: $black !default;
|
$carousel-dark-indicator-active-bg: $black !default;
|
||||||
$carousel-dark-caption-color: $black !default;
|
$carousel-dark-caption-color: $black !default;
|
||||||
$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;
|
$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;
|
||||||
|
// scss-docs-end carousel-variables
|
||||||
|
|
||||||
|
|
||||||
// Spinners
|
// Spinners
|
||||||
|
|
||||||
|
// scss-docs-start spinner-variables
|
||||||
$spinner-width: 2rem !default;
|
$spinner-width: 2rem !default;
|
||||||
$spinner-height: $spinner-width !default;
|
$spinner-height: $spinner-width !default;
|
||||||
$spinner-border-width: .25em !default;
|
$spinner-border-width: .25em !default;
|
||||||
|
|
@ -1314,10 +1388,12 @@ $spinner-animation-speed: .75s !default;
|
||||||
$spinner-width-sm: 1rem !default;
|
$spinner-width-sm: 1rem !default;
|
||||||
$spinner-height-sm: $spinner-width-sm !default;
|
$spinner-height-sm: $spinner-width-sm !default;
|
||||||
$spinner-border-width-sm: .2em !default;
|
$spinner-border-width-sm: .2em !default;
|
||||||
|
// scss-docs-end spinner-variables
|
||||||
|
|
||||||
|
|
||||||
// Close
|
// Close
|
||||||
|
|
||||||
|
// scss-docs-start close-variables
|
||||||
$btn-close-width: 1em !default;
|
$btn-close-width: 1em !default;
|
||||||
$btn-close-height: $btn-close-width !default;
|
$btn-close-height: $btn-close-width !default;
|
||||||
$btn-close-padding-x: .25em !default;
|
$btn-close-padding-x: .25em !default;
|
||||||
|
|
@ -1330,6 +1406,8 @@ $btn-close-hover-opacity: .75 !default;
|
||||||
$btn-close-focus-opacity: 1 !default;
|
$btn-close-focus-opacity: 1 !default;
|
||||||
$btn-close-disabled-opacity: .25 !default;
|
$btn-close-disabled-opacity: .25 !default;
|
||||||
$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;
|
$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;
|
||||||
|
// scss-docs-end close-variables
|
||||||
|
|
||||||
|
|
||||||
// Code
|
// Code
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
// scss-docs-start alert-variant-mixin
|
||||||
@mixin alert-variant($background, $border, $color) {
|
@mixin alert-variant($background, $border, $color) {
|
||||||
color: $color;
|
color: $color;
|
||||||
@include gradient-bg($background);
|
@include gradient-bg($background);
|
||||||
|
|
@ -7,3 +8,4 @@
|
||||||
color: shade-color($color, 20%);
|
color: shade-color($color, 20%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// scss-docs-end alert-variant-mixin
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@
|
||||||
@return $return;
|
@return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// scss-docs-start border-radius-mixins
|
||||||
@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {
|
@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {
|
||||||
@if $enable-rounded {
|
@if $enable-rounded {
|
||||||
border-radius: valid-radius($radius);
|
border-radius: valid-radius($radius);
|
||||||
|
|
@ -74,3 +75,4 @@
|
||||||
border-bottom-left-radius: valid-radius($radius);
|
border-bottom-left-radius: valid-radius($radius);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// scss-docs-end border-radius-mixins
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
// Easily pump out default styles, as well as :hover, :focus, :active,
|
// Easily pump out default styles, as well as :hover, :focus, :active,
|
||||||
// and disabled options for all buttons
|
// and disabled options for all buttons
|
||||||
|
|
||||||
|
// scss-docs-start btn-variant-mixin
|
||||||
@mixin button-variant(
|
@mixin button-variant(
|
||||||
$background,
|
$background,
|
||||||
$border,
|
$border,
|
||||||
|
|
@ -71,7 +72,9 @@
|
||||||
border-color: $disabled-border;
|
border-color: $disabled-border;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// scss-docs-end btn-variant-mixin
|
||||||
|
|
||||||
|
// scss-docs-start btn-outline-variant-mixin
|
||||||
@mixin button-outline-variant(
|
@mixin button-outline-variant(
|
||||||
$color,
|
$color,
|
||||||
$color-hover: color-contrast($color),
|
$color-hover: color-contrast($color),
|
||||||
|
|
@ -118,11 +121,13 @@
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// scss-docs-end btn-outline-variant-mixin
|
||||||
|
|
||||||
// Button sizes
|
// scss-docs-start btn-size-mixin
|
||||||
@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {
|
@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {
|
||||||
padding: $padding-y $padding-x;
|
padding: $padding-y $padding-x;
|
||||||
@include font-size($font-size);
|
@include font-size($font-size);
|
||||||
// Manually declare to provide an override to the browser default
|
// Manually declare to provide an override to the browser default
|
||||||
@include border-radius($border-radius, 0);
|
@include border-radius($border-radius, 0);
|
||||||
}
|
}
|
||||||
|
// scss-docs-end btn-size-mixin
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
// This mixin uses an `if()` technique to be compatible with Dart Sass
|
// This mixin uses an `if()` technique to be compatible with Dart Sass
|
||||||
// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details
|
// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details
|
||||||
|
|
||||||
|
// scss-docs-start form-validation-mixins
|
||||||
@mixin form-validation-state-selector($state) {
|
@mixin form-validation-state-selector($state) {
|
||||||
@if ($state == "valid" or $state == "invalid") {
|
@if ($state == "valid" or $state == "invalid") {
|
||||||
.was-validated #{if(&, "&", "")}:#{$state},
|
.was-validated #{if(&, "&", "")}:#{$state},
|
||||||
|
|
@ -122,3 +124,4 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// scss-docs-end form-validation-mixins
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
// List Groups
|
// List Groups
|
||||||
|
|
||||||
|
// scss-docs-start list-group-mixin
|
||||||
@mixin list-group-item-variant($state, $background, $color) {
|
@mixin list-group-item-variant($state, $background, $color) {
|
||||||
.list-group-item-#{$state} {
|
.list-group-item-#{$state} {
|
||||||
color: $color;
|
color: $color;
|
||||||
|
|
@ -20,3 +21,4 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// scss-docs-end list-group-mixin
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
// Pagination
|
// Pagination
|
||||||
|
|
||||||
|
// scss-docs-start pagination-mixin
|
||||||
@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {
|
@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {
|
||||||
.page-link {
|
.page-link {
|
||||||
padding: $padding-y $padding-x;
|
padding: $padding-y $padding-x;
|
||||||
|
|
@ -27,3 +28,4 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// scss-docs-end pagination-mixin
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
.bd-subnavbar {
|
.bd-subnavbar {
|
||||||
// The position and z-index are needed for the dropdown to stay on top of the content
|
// The position and z-index are needed for the dropdown to stay on top of the content
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: $zindex-sticky;
|
z-index: $bd-navbar-zindex;
|
||||||
background-color: rgba($white, .95);
|
background-color: rgba($white, .95);
|
||||||
box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .05), inset 0 -1px 0 rgba(0, 0, 0, .15);
|
box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .05), inset 0 -1px 0 rgba(0, 0, 0, .15);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,3 +11,6 @@ $bd-warning: #f0ad4e;
|
||||||
$bd-danger: #d9534f;
|
$bd-danger: #d9534f;
|
||||||
$dropdown-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#292b2c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>");
|
$dropdown-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#292b2c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>");
|
||||||
$sidebar-collapse-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='none' stroke='rgba(0,0,0,.5)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/></svg>");
|
$sidebar-collapse-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path fill='none' stroke='rgba(0,0,0,.5)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/></svg>");
|
||||||
|
|
||||||
|
// Higher than core's $zindex-tooltip, which is 1070
|
||||||
|
$bd-navbar-zindex: 1080;
|
||||||
|
|
|
||||||
|
|
@ -104,3 +104,13 @@ Add `.accordion-flush` to remove the default `background-color`, some borders, a
|
||||||
## Accessibility
|
## Accessibility
|
||||||
|
|
||||||
Please read the [collapse accessibility section]({{< docsref "/components/collapse#accessibility" >}}) for more information.
|
Please read the [collapse accessibility section]({{< docsref "/components/collapse#accessibility" >}}) for more information.
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="accordion-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for accordions.
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,24 @@ You can see this in action with a live demo:
|
||||||
When an alert is dismissed, the element is completely removed from the page structure. If a keyboard user dismisses the alert using the close button, their focus will suddenly be lost and, depending on the browser, reset to the start of the page/document. For this reason, we recommend including additional JavaScript that listens for the `closed.bs.alert` event and programmatically sets `focus()` to the most appropriate location in the page. If you're planning to move focus to a non-interactive element that normally does not receive focus, make sure to add `tabindex="-1"` to the element.
|
When an alert is dismissed, the element is completely removed from the page structure. If a keyboard user dismisses the alert using the close button, their focus will suddenly be lost and, depending on the browser, reset to the start of the page/document. For this reason, we recommend including additional JavaScript that listens for the `closed.bs.alert` event and programmatically sets `focus()` to the most appropriate location in the page. If you're planning to move focus to a non-interactive element that normally does not receive focus, make sure to add `tabindex="-1"` to the element.
|
||||||
{{< /callout >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="alert-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Variant mixin
|
||||||
|
|
||||||
|
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" >}}
|
||||||
|
|
||||||
|
### Loop
|
||||||
|
|
||||||
|
Loop that generates the modifier classes with the `alert-variant()` mixin.
|
||||||
|
|
||||||
|
{{< scss-docs name="alert-modifiers" file="scss/_alert.scss" >}}
|
||||||
|
|
||||||
## JavaScript behavior
|
## JavaScript behavior
|
||||||
|
|
||||||
### Triggers
|
### Triggers
|
||||||
|
|
|
||||||
|
|
@ -63,3 +63,13 @@ Use the `.rounded-pill` utility class to make badges more rounded with a larger
|
||||||
<span class="badge rounded-pill bg-{{ .name }}{{ with .contrast_color }} text-{{ . }}{{ end }}">{{ .name | title }}</span>{{- end -}}
|
<span class="badge rounded-pill bg-{{ .name }}{{ with .contrast_color }} text-{{ . }}{{ end }}">{{ .name | title }}</span>{{- end -}}
|
||||||
{{< /badge.inline >}}
|
{{< /badge.inline >}}
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="badge-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for badges.
|
||||||
|
|
|
||||||
|
|
@ -88,3 +88,13 @@ $breadcrumb-divider: none;
|
||||||
Since breadcrumbs provide a navigation, it's a good idea to add a meaningful label such as `aria-label="breadcrumb"` to describe the type of navigation provided in the `<nav>` element, as well as applying an `aria-current="page"` to the last item of the set to indicate that it represents the current page.
|
Since breadcrumbs provide a navigation, it's a good idea to add a meaningful label such as `aria-label="breadcrumb"` to describe the type of navigation provided in the `<nav>` element, as well as applying an `aria-current="page"` to the last item of the set to indicate that it represents the current page.
|
||||||
|
|
||||||
For more information, see the [WAI-ARIA Authoring Practices for the breadcrumb pattern](https://www.w3.org/TR/wai-aria-practices/#breadcrumb).
|
For more information, see the [WAI-ARIA Authoring Practices for the breadcrumb pattern](https://www.w3.org/TR/wai-aria-practices/#breadcrumb).
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="breadcrumb-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for breadcrumbs.
|
||||||
|
|
|
||||||
|
|
@ -205,3 +205,25 @@ buttons.forEach(function (button) {
|
||||||
button.toggle()
|
button.toggle()
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="btn-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are three mixins for buttons: button and button outline variant mixins (both based on `$theme-colors`), plus a button size mixin.
|
||||||
|
|
||||||
|
{{< scss-docs name="btn-variant-mixin" file="scss/mixins/_buttons.scss" >}}
|
||||||
|
|
||||||
|
{{< scss-docs name="btn-outline-variant-mixin" file="scss/mixins/_buttons.scss" >}}
|
||||||
|
|
||||||
|
{{< scss-docs name="btn-size-mixin" file="scss/mixins/_buttons.scss" >}}
|
||||||
|
|
||||||
|
### Loops
|
||||||
|
|
||||||
|
Button variants (for regular and outline buttons) use their respective mixins with our `$theme-colors` map to generate the modifier classes in `scss/_buttons.scss`.
|
||||||
|
|
||||||
|
{{< scss-docs name="btn-variant-loops" file="scss/_buttons.scss" >}}
|
||||||
|
|
|
||||||
|
|
@ -721,3 +721,13 @@ Just like with card groups, card footers will automatically line up.
|
||||||
### Masonry
|
### Masonry
|
||||||
|
|
||||||
In `v4` we used a CSS-only technique to mimic the behavior of [Masonry](https://masonry.desandro.com/)-like columns, but this technique came with lots of unpleasant [side effects](https://github.com/twbs/bootstrap/pull/28922). If you want to have this type of layout in `v5`, you can just make use of Masonry plugin. **Masonry is not included in Bootstrap**, but we've made a [demo example]({{< docsref "/examples/masonry" >}}) to help you get started.
|
In `v4` we used a CSS-only technique to mimic the behavior of [Masonry](https://masonry.desandro.com/)-like columns, but this technique came with lots of unpleasant [side effects](https://github.com/twbs/bootstrap/pull/28922). If you want to have this type of layout in `v5`, you can just make use of Masonry plugin. **Masonry is not included in Bootstrap**, but we've made a [demo example]({{< docsref "/examples/masonry" >}}) to help you get started.
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="card-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for cards.
|
||||||
|
|
|
||||||
|
|
@ -450,3 +450,13 @@ myCarousel.addEventListener('slide.bs.carousel', function () {
|
||||||
### Change transition duration
|
### Change transition duration
|
||||||
|
|
||||||
The transition duration of `.carousel-item` can be changed with the `$carousel-transition-duration` Sass variable before compiling or custom styles if you're using the compiled CSS. If multiple transitions are applied, make sure the transform transition is defined first (eg. `transition: transform 2s ease, opacity .5s ease-out`).
|
The transition duration of `.carousel-item` can be changed with the `$carousel-transition-duration` Sass variable before compiling or custom styles if you're using the compiled CSS. If multiple transitions are applied, make sure the transform transition is defined first (eg. `transition: transform 2s ease, opacity .5s ease-out`).
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="carousel-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for carousels.
|
||||||
|
|
|
||||||
|
|
@ -30,3 +30,13 @@ Change the default `.btn-close` to be white with the `.btn-close-white` class. T
|
||||||
<button type="button" class="btn-close btn-close-white" aria-label="Close"></button>
|
<button type="button" class="btn-close btn-close-white" aria-label="Close"></button>
|
||||||
<button type="button" class="btn-close btn-close-white" disabled aria-label="Close"></button>
|
<button type="button" class="btn-close btn-close-white" disabled aria-label="Close"></button>
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="close-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for close buttons.
|
||||||
|
|
|
||||||
|
|
@ -1010,3 +1010,19 @@ myDropdown.addEventListener('show.bs.dropdown', function () {
|
||||||
// do something...
|
// do something...
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
Variables for all dropdowns:
|
||||||
|
|
||||||
|
{{< scss-docs name="dropdown-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
Variables for the [dark dropdown](#dark-dropdowns):
|
||||||
|
|
||||||
|
{{< scss-docs name="dropdown-dark-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for dropdowns.
|
||||||
|
|
|
||||||
|
|
@ -470,3 +470,21 @@ tabEl.addEventListener('shown.bs.tab', function (event) {
|
||||||
event.relatedTarget // previous active tab
|
event.relatedTarget // previous active tab
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="list-group-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
Used in combination with `$theme-colors` to generate the [contextual variant classes](#contextual-classes) for `.list-group-item`s.
|
||||||
|
|
||||||
|
{{< scss-docs name="list-group-mixin" file="scss/mixins/_list-group.scss" >}}
|
||||||
|
|
||||||
|
### Loop
|
||||||
|
|
||||||
|
Loop that generates the modifier classes with the `list-group-item-variant()` mixin.
|
||||||
|
|
||||||
|
{{< scss-docs name="list-group-modifiers" file="scss/_list-group.scss" >}}
|
||||||
|
|
|
||||||
|
|
@ -954,3 +954,19 @@ myModalEl.addEventListener('hidden.bs.modal', function (event) {
|
||||||
// do something...
|
// do something...
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="modal-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for modals.
|
||||||
|
|
||||||
|
### Loop
|
||||||
|
|
||||||
|
[Responsive fullscreen modals](#fullscreen-modal) are generated via the `$breakpoints` map and a loop in `scss/_modal.scss`.
|
||||||
|
|
||||||
|
{{< scss-docs name="modal-fullscreen-loop" file="scss/_modal.scss" >}}
|
||||||
|
|
|
||||||
|
|
@ -598,3 +598,21 @@ Sometimes you want to use the collapse plugin to trigger a container element for
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
When you do this, we recommend including additional JavaScript to move the focus programmatically to the container when it is opened. Otherwise, keyboard users and users of assistive technologies will likely have a hard time finding the newly revealed content - particularly if the container that was opened comes *before* the toggler in the document's structure. We also recommend making sure that the toggler has the `aria-controls` attribute, pointing to the `id` of the content container. In theory, this allows assistive technology users to jump directly from the toggler to the container it controls–but support for this is currently quite patchy.
|
When you do this, we recommend including additional JavaScript to move the focus programmatically to the container when it is opened. Otherwise, keyboard users and users of assistive technologies will likely have a hard time finding the newly revealed content - particularly if the container that was opened comes *before* the toggler in the document's structure. We also recommend making sure that the toggler has the `aria-controls` attribute, pointing to the `id` of the content container. In theory, this allows assistive technology users to jump directly from the toggler to the container it controls–but support for this is currently quite patchy.
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="navbar-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
{{< scss-docs name="navbar-theme-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for navbars.
|
||||||
|
|
||||||
|
### Loop
|
||||||
|
|
||||||
|
[Responsive navbar expand/collapse classes](#responsive-behaviors) (e.g., `.navbar-expand-lg`) are combined with the `$breakpoints` map and generated through a loop in `scss/_navbar.scss`.
|
||||||
|
|
||||||
|
{{< scss-docs name="navbar-expand-loop" file="scss/_navbar.scss" >}}
|
||||||
|
|
|
||||||
|
|
@ -663,3 +663,13 @@ tabEl.addEventListener('shown.bs.tab', function (event) {
|
||||||
event.relatedTarget // previous active tab
|
event.relatedTarget // previous active tab
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="nav-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for navigations and tabs.
|
||||||
|
|
|
||||||
|
|
@ -155,3 +155,13 @@ Change the alignment of pagination components with [flexbox utilities]({{< docsr
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="pagination-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
{{< scss-docs name="pagination-mixin" file="scss/mixins/_pagination.scss" >}}
|
||||||
|
|
|
||||||
|
|
@ -401,3 +401,13 @@ myPopoverTrigger.addEventListener('hidden.bs.popover', function () {
|
||||||
// do something...
|
// do something...
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="popover-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for popovers.
|
||||||
|
|
|
||||||
|
|
@ -137,3 +137,19 @@ The striped gradient can also be animated. Add `.progress-bar-animated` to `.pro
|
||||||
<div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100" style="width: 75%"></div>
|
<div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100" style="width: 75%"></div>
|
||||||
</div>
|
</div>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="progress-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for progress bars.
|
||||||
|
|
||||||
|
### Keyframes
|
||||||
|
|
||||||
|
Used for creating the CSS animations for `.progress-bar-animated`. Included in the `scss/_progress-bar.scss` stylesheet.
|
||||||
|
|
||||||
|
{{< scss-docs name="progress-keyframes" file="scss/_progress.scss" >}}
|
||||||
|
|
|
||||||
|
|
@ -171,6 +171,24 @@ Use spinners within buttons to indicate an action is currently processing or tak
|
||||||
</button>
|
</button>
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="spinner-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for spinners.
|
||||||
|
|
||||||
|
### Keyframes
|
||||||
|
|
||||||
|
Used for creating the CSS animations for our spinners. Included in the `scss/_spinners.scss` stylesheet.
|
||||||
|
|
||||||
|
{{< scss-docs name="spinner-border-keyframes" file="scss/_spinners.scss" >}}
|
||||||
|
|
||||||
|
{{< scss-docs name="spinner-grow-keyframes" file="scss/_spinners.scss" >}}
|
||||||
|
|
||||||
|
|
||||||
[color]: {{< docsref "/utilities/colors" >}}
|
[color]: {{< docsref "/utilities/colors" >}}
|
||||||
[display]: {{< docsref "/utilities/display" >}}
|
[display]: {{< docsref "/utilities/display" >}}
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ Toasts are as flexible as you need and have very little required markup. At a mi
|
||||||
|
|
||||||
### Translucent
|
### Translucent
|
||||||
|
|
||||||
Toasts are slightly translucent, too, so they blend over whatever they might appear over.
|
Toasts are slightly translucent, too, so they blend over whatever they might appear over. For browsers that support the `backdrop-filter` CSS property, we'll also attempt to blur the elements under a toast.
|
||||||
|
|
||||||
{{< example class="bg-dark" >}}
|
{{< example class="bg-dark" >}}
|
||||||
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
||||||
|
|
@ -120,7 +120,7 @@ Alternatively, you can also add additional controls and components to toasts.
|
||||||
|
|
||||||
### Color schemes
|
### Color schemes
|
||||||
|
|
||||||
Building on the above example, you can create different toast color schemes with our [color utilities]({{< docsref "/utilities/colors" >}}). Here we've added `.bg-primary` and `.text-white` to the `.toast`, and then added `.btn-close-white` to our close button. For a crisp edge, we remove the default border with `.border-0`.
|
Building on the above example, you can create different toast color schemes with our [color utilities]({{< docsref "/utilities/colors" >}}). Here we've added `.bg-primary` and `.text-white` to the `.toast`, and then added `.text-white` to our close button. For a crisp edge, we remove the default border with `.border-0`.
|
||||||
|
|
||||||
{{< example class="bg-light" >}}
|
{{< example class="bg-light" >}}
|
||||||
<div class="toast d-flex align-items-center text-white bg-primary border-0" role="alert" aria-live="assertive" aria-atomic="true">
|
<div class="toast d-flex align-items-center text-white bg-primary border-0" role="alert" aria-live="assertive" aria-atomic="true">
|
||||||
|
|
@ -376,3 +376,13 @@ myToastEl.addEventListener('hidden.bs.toast', function () {
|
||||||
// do something...
|
// do something...
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="toast-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for toasts.
|
||||||
|
|
|
||||||
|
|
@ -429,3 +429,13 @@ myTooltipEl.addEventListener('hidden.bs.tooltip', function () {
|
||||||
|
|
||||||
tooltip.hide()
|
tooltip.hide()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="tooltip-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for tooltips.
|
||||||
|
|
|
||||||
|
|
@ -24,3 +24,9 @@ Aligning the figure's caption is easy with our [text utilities]({{< docsref "/ut
|
||||||
<figcaption class="figure-caption text-end">A caption for the above image.</figcaption>
|
<figcaption class="figure-caption text-end">A caption for the above image.</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="figure-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
|
||||||
|
|
@ -53,3 +53,11 @@ If you are using the `<picture>` element to specify multiple `<source>` elements
|
||||||
<img src="..." class="img-fluid img-thumbnail" alt="...">
|
<img src="..." class="img-fluid img-thumbnail" alt="...">
|
||||||
</picture>
|
</picture>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
Variables are available for image thumbnails.
|
||||||
|
|
||||||
|
{{< scss-docs name="thumbnail-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
|
||||||
|
|
@ -775,9 +775,17 @@ Use `.table-responsive{-sm|-md|-lg|-xl|-xxl}` as needed to create responsive tab
|
||||||
{{< /tables.inline >}}
|
{{< /tables.inline >}}
|
||||||
{{< /highlight >}}
|
{{< /highlight >}}
|
||||||
|
|
||||||
## Customizing in Sass
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="table-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Loop
|
||||||
|
|
||||||
|
{{< scss-docs name="table-loop" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Customizing
|
||||||
|
|
||||||
- The factor variables (`$table-striped-bg-factor`, `$table-active-bg-factor` & `$table-hover-bg-factor`) are used to determine the contrast in table variants.
|
- The factor variables (`$table-striped-bg-factor`, `$table-active-bg-factor` & `$table-hover-bg-factor`) are used to determine the contrast in table variants.
|
||||||
- Apart from the light & dark table variants, theme colors are lightened by the `$table-bg-level` variable.
|
- Apart from the light & dark table variants, theme colors are lightened by the `$table-bg-level` variable.
|
||||||
|
|
||||||
{{< scss-docs name="table-variables" file="scss/_variables.scss" >}}
|
|
||||||
|
|
|
||||||
|
|
@ -302,3 +302,19 @@ Align terms and descriptions horizontally by using our grid system's predefined
|
||||||
## Responsive font sizes
|
## Responsive font sizes
|
||||||
|
|
||||||
In Bootstrap 5, we've enabled responsive font sizes by default, allowing text to scale more naturally across device and viewport sizes. Have a look at the [RFS page]({{< docsref "/getting-started/rfs" >}}) to find out how this works.
|
In Bootstrap 5, we've enabled responsive font sizes by default, allowing text to scale more naturally across device and viewport sizes. Have a look at the [RFS page]({{< docsref "/getting-started/rfs" >}}) to find out how this works.
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
Headings have some dedicated variables for sizing and spacing.
|
||||||
|
|
||||||
|
{{< scss-docs name="headings-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
Miscellaneous typography elements covered here and in [Reboot]({{< docsref "/content/reboot" >}}) also have dedicated variables.
|
||||||
|
|
||||||
|
{{< scss-docs name="type-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no dedicated mixins for typography, but Bootstrap does use [Responsive Font Sizing (RFS)]({{< docsref "/getting-started/rfs" >}}).
|
||||||
|
|
|
||||||
|
|
@ -34,18 +34,3 @@ While we cannot go into details here on how to use every package manager, we can
|
||||||
For those who want to use the distribution files, review the [getting started page]({{< docsref "/getting-started/introduction" >}}) for how to include those files and an example HTML page. From there, consult the docs for the layout, components, and behaviors you'd like to use.
|
For those who want to use the distribution files, review the [getting started page]({{< docsref "/getting-started/introduction" >}}) for how to include those files and an example HTML page. From there, consult the docs for the layout, components, and behaviors you'd like to use.
|
||||||
|
|
||||||
As you familiarize yourself with Bootstrap, continue exploring this section for more details on how to utilize our global options, making use of and changing our color system, how we build our components, how to use our growing list of CSS custom properties, and how to optimize your code when building with Bootstrap.
|
As you familiarize yourself with Bootstrap, continue exploring this section for more details on how to utilize our global options, making use of and changing our color system, how we build our components, how to use our growing list of CSS custom properties, and how to optimize your code when building with Bootstrap.
|
||||||
|
|
||||||
## CSPs and embedded SVGs
|
|
||||||
|
|
||||||
Several Bootstrap components include embedded SVGs in our CSS to style components consistently and easily across browsers and devices. **For organizations with more strict <abbr title="Content Security Policy">CSP</abbr> configurations**, we've documented all instances of our embedded SVGs (all of which are applied via `background-image`) so you can more thoroughly review your options.
|
|
||||||
|
|
||||||
- [Accordion]({{< docsref "/components/accordion" >}})
|
|
||||||
- [Close button]({{< docsref "/components/close-button" >}}) (used in alerts and modals)
|
|
||||||
- [Form checkboxes and radio buttons]({{< docsref "/forms/checks-radios" >}})
|
|
||||||
- [Form switches]({{< docsref "/forms/checks-radios#switches" >}})
|
|
||||||
- [Form validation icons]({{< docsref "/forms/validation#server-side" >}})
|
|
||||||
- [Select menus]({{< docsref "/forms/select" >}})
|
|
||||||
- [Carousel controls]({{< docsref "/components/carousel#with-controls" >}})
|
|
||||||
- [Navbar toggle buttons]({{< docsref "/components/navbar#responsive-behaviors" >}})
|
|
||||||
|
|
||||||
Based on [community conversation](https://github.com/twbs/bootstrap/issues/25394), some options for addressing this in your own codebase include replacing the URLs with locally hosted assets, removing the images and using inline images (not possible in all components), and modifying your CSP. Our recommendation is to carefully review your own security policies and decide on a best path forward, if necessary.
|
|
||||||
|
|
@ -6,7 +6,7 @@ group: customize
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
Utilize our source Sass files to take advantage of variables, maps, mixins, and more.
|
Utilize our source Sass files to take advantage of variables, maps, mixins, and more. In our build we've increased the Sass rounding precision to 6 (by default it's 5) to prevent issues with browser rounding.
|
||||||
|
|
||||||
## File structure
|
## File structure
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ extra_css:
|
||||||
<div class="carousel-caption text-start">
|
<div class="carousel-caption text-start">
|
||||||
<h1>عنوان المثال.</h1>
|
<h1>عنوان المثال.</h1>
|
||||||
<p> نهاية الأوضاع ان أضف, هو مما رجوعهم وقدّموا. أي عدد الدمج نهاية وأكثرها, المسرح الباهضة وبولندا حول و, كل أما سياسة أسابيع. مع حيث قُدُماً الكونجرس, بها و خيار ٢٠٠٤, كلا في مكّن وقام. مع يكن زهاء بالفشل, الجوي الصين الشمال إذ على.</p>
|
<p> نهاية الأوضاع ان أضف, هو مما رجوعهم وقدّموا. أي عدد الدمج نهاية وأكثرها, المسرح الباهضة وبولندا حول و, كل أما سياسة أسابيع. مع حيث قُدُماً الكونجرس, بها و خيار ٢٠٠٤, كلا في مكّن وقام. مع يكن زهاء بالفشل, الجوي الصين الشمال إذ على.</p>
|
||||||
<p><a class="btn btn-lg btn-primary" href="#">سجل اليوم</a></p>
|
<p><a class="btn btn-lg btn-primary" href="#" role="button">سجل اليوم</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -59,7 +59,7 @@ extra_css:
|
||||||
<div class="carousel-caption">
|
<div class="carousel-caption">
|
||||||
<h1>عنوان مثال آخر.</h1>
|
<h1>عنوان مثال آخر.</h1>
|
||||||
<p>ثم تزامناً الفرنسي الإقتصادية دار. لكل عن الضغوط المتّبعة, أن حتى إختار المدن بالإنزال. عن الشمل بالفشل تلك, بل أراض أوزار بلديهما حول. دون لكون والتي ثم, كُلفة ويعزى استطاعوا أن لمّ. جُل بخطوط واحدة البشريةً.</p>
|
<p>ثم تزامناً الفرنسي الإقتصادية دار. لكل عن الضغوط المتّبعة, أن حتى إختار المدن بالإنزال. عن الشمل بالفشل تلك, بل أراض أوزار بلديهما حول. دون لكون والتي ثم, كُلفة ويعزى استطاعوا أن لمّ. جُل بخطوط واحدة البشريةً.</p>
|
||||||
<p><a class="btn btn-lg btn-primary" href="#">أعرف أكثر</a></p>
|
<p><a class="btn btn-lg btn-primary" href="#" role="button">أعرف أكثر</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -69,7 +69,7 @@ extra_css:
|
||||||
<div class="carousel-caption text-end">
|
<div class="carousel-caption text-end">
|
||||||
<h1>واحد أكثر لقياس جيد.</h1>
|
<h1>واحد أكثر لقياس جيد.</h1>
|
||||||
<p>قررت العصبة إيطاليا وتم أن, عن سكان وقامت الحكومة وفي. كان بـ اوروبا اليابانية, ثمّة بوابة يتعلّق عل بعض. عدم رئيس الآلاف أن حدى.</p>
|
<p>قررت العصبة إيطاليا وتم أن, عن سكان وقامت الحكومة وفي. كان بـ اوروبا اليابانية, ثمّة بوابة يتعلّق عل بعض. عدم رئيس الآلاف أن حدى.</p>
|
||||||
<p><a class="btn btn-lg btn-primary" href="#">تصفح المعرض</a></p>
|
<p><a class="btn btn-lg btn-primary" href="#" role="button">تصفح المعرض</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -97,19 +97,19 @@ extra_css:
|
||||||
{{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
|
{{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
|
||||||
<h2>عنوان</h2>
|
<h2>عنوان</h2>
|
||||||
<p>ان وتم عجّل الأجل, قبل نتيجة المشترك بـ, أي جعل جورج أوزار المسرح. أن وإعلان الساحل تلك, مكن ان استبدال الباهضة التكاليف. الى ماذا اليميني الحكومة في, إجلاء نتيجة قبل تم. مساعدة بولندا، أي هذه الحكم.</p>
|
<p>ان وتم عجّل الأجل, قبل نتيجة المشترك بـ, أي جعل جورج أوزار المسرح. أن وإعلان الساحل تلك, مكن ان استبدال الباهضة التكاليف. الى ماذا اليميني الحكومة في, إجلاء نتيجة قبل تم. مساعدة بولندا، أي هذه الحكم.</p>
|
||||||
<p><a class="btn btn-secondary" href="#">عرض التفاصيل</a></p>
|
<p><a class="btn btn-secondary" href="#" role="button">عرض التفاصيل</a></p>
|
||||||
</div><!-- /.col-lg-4 -->
|
</div><!-- /.col-lg-4 -->
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
{{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
|
{{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
|
||||||
<h2>عنوان</h2>
|
<h2>عنوان</h2>
|
||||||
<p>هو أخر إتفاقية الدولارات الأوروبيّون, ثانية طوكيو و به،, ونتج أعمال مما أم. عن الا يونيو أفريقيا, السيطرة التقليدي ومن ٣٠. هو الغالي الإتفاقية ويكيبيديا، مكن, و الى هُزم اعتداء وايرلندا. وقبل بمباركة الأوروبيّون عن فقد, بتحدّي والفلبين ما كلا.</p>
|
<p>هو أخر إتفاقية الدولارات الأوروبيّون, ثانية طوكيو و به،, ونتج أعمال مما أم. عن الا يونيو أفريقيا, السيطرة التقليدي ومن ٣٠. هو الغالي الإتفاقية ويكيبيديا، مكن, و الى هُزم اعتداء وايرلندا. وقبل بمباركة الأوروبيّون عن فقد, بتحدّي والفلبين ما كلا.</p>
|
||||||
<p><a class="btn btn-secondary" href="#">عرض التفاصيل</a></p>
|
<p><a class="btn btn-secondary" href="#" role="button">عرض التفاصيل</a></p>
|
||||||
</div><!-- /.col-lg-4 -->
|
</div><!-- /.col-lg-4 -->
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
{{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
|
{{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
|
||||||
<h2>عنوان</h2>
|
<h2>عنوان</h2>
|
||||||
<p>غير عن الثقيل وسمّيت الأوضاع, لم تاريخ بالحرب للسيطرة حين, دار اللا تطوير تم. الى بشرية اليابان في. أما الشهيرة الإثنان وايرلندا ما, لإعلان واشتدّت و مدن. في غير والحزب للسيطرة الإكتفاء. ثانية الكونجرس الا من, جُل ٣٠ وبداية الشرقية.</p>
|
<p>غير عن الثقيل وسمّيت الأوضاع, لم تاريخ بالحرب للسيطرة حين, دار اللا تطوير تم. الى بشرية اليابان في. أما الشهيرة الإثنان وايرلندا ما, لإعلان واشتدّت و مدن. في غير والحزب للسيطرة الإكتفاء. ثانية الكونجرس الا من, جُل ٣٠ وبداية الشرقية.</p>
|
||||||
<p><a class="btn btn-secondary" href="#">عرض التفاصيل</a></p>
|
<p><a class="btn btn-secondary" href="#" role="button">عرض التفاصيل</a></p>
|
||||||
</div><!-- /.col-lg-4 -->
|
</div><!-- /.col-lg-4 -->
|
||||||
</div><!-- /.row -->
|
</div><!-- /.row -->
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ extra_css:
|
||||||
<div class="carousel-caption text-start">
|
<div class="carousel-caption text-start">
|
||||||
<h1>Example headline.</h1>
|
<h1>Example headline.</h1>
|
||||||
<p>Some representative placeholder content for the first slide of the carousel.</p>
|
<p>Some representative placeholder content for the first slide of the carousel.</p>
|
||||||
<p><a class="btn btn-lg btn-primary" href="#">Sign up today</a></p>
|
<p><a class="btn btn-lg btn-primary" href="#" role="button">Sign up today</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -58,7 +58,7 @@ extra_css:
|
||||||
<div class="carousel-caption">
|
<div class="carousel-caption">
|
||||||
<h1>Another example headline.</h1>
|
<h1>Another example headline.</h1>
|
||||||
<p>Some representative placeholder content for the second slide of the carousel.</p>
|
<p>Some representative placeholder content for the second slide of the carousel.</p>
|
||||||
<p><a class="btn btn-lg btn-primary" href="#">Learn more</a></p>
|
<p><a class="btn btn-lg btn-primary" href="#" role="button">Learn more</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -68,7 +68,7 @@ extra_css:
|
||||||
<div class="carousel-caption text-end">
|
<div class="carousel-caption text-end">
|
||||||
<h1>One more for good measure.</h1>
|
<h1>One more for good measure.</h1>
|
||||||
<p>Some representative placeholder content for the third slide of this carousel.</p>
|
<p>Some representative placeholder content for the third slide of this carousel.</p>
|
||||||
<p><a class="btn btn-lg btn-primary" href="#">Browse gallery</a></p>
|
<p><a class="btn btn-lg btn-primary" href="#" role="button">Browse gallery</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -96,19 +96,19 @@ extra_css:
|
||||||
{{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
|
{{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
|
||||||
<h2>Heading</h2>
|
<h2>Heading</h2>
|
||||||
<p>Some representative placeholder content for the three columns of text below the carousel. This is the first column.</p>
|
<p>Some representative placeholder content for the three columns of text below the carousel. This is the first column.</p>
|
||||||
<p><a class="btn btn-secondary" href="#">View details »</a></p>
|
<p><a class="btn btn-secondary" href="#" role="button">View details »</a></p>
|
||||||
</div><!-- /.col-lg-4 -->
|
</div><!-- /.col-lg-4 -->
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
{{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
|
{{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
|
||||||
<h2>Heading</h2>
|
<h2>Heading</h2>
|
||||||
<p>Another exciting bit of representative placeholder content. This time, we've moved on to the second column.</p>
|
<p>Another exciting bit of representative placeholder content. This time, we've moved on to the second column.</p>
|
||||||
<p><a class="btn btn-secondary" href="#">View details »</a></p>
|
<p><a class="btn btn-secondary" href="#" role="button">View details »</a></p>
|
||||||
</div><!-- /.col-lg-4 -->
|
</div><!-- /.col-lg-4 -->
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
{{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
|
{{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
|
||||||
<h2>Heading</h2>
|
<h2>Heading</h2>
|
||||||
<p>And lastly this, the third column of representative placeholder content.</p>
|
<p>And lastly this, the third column of representative placeholder content.</p>
|
||||||
<p><a class="btn btn-secondary" href="#">View details »</a></p>
|
<p><a class="btn btn-secondary" href="#" role="button">View details »</a></p>
|
||||||
</div><!-- /.col-lg-4 -->
|
</div><!-- /.col-lg-4 -->
|
||||||
</div><!-- /.row -->
|
</div><!-- /.row -->
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,11 +76,3 @@ Specifically regarding custom CSS, utilities can help combat increasing file siz
|
||||||
## Flexible HTML
|
## Flexible HTML
|
||||||
|
|
||||||
While not always possible, we strive to avoid being overly dogmatic in our HTML requirements for components. Thus, we focus on single classes in our CSS selectors and try to avoid immediate children selectors (`>`). This gives you more flexibility in your implementation and helps keep our CSS simpler and less specific.
|
While not always possible, we strive to avoid being overly dogmatic in our HTML requirements for components. Thus, we focus on single classes in our CSS selectors and try to avoid immediate children selectors (`>`). This gives you more flexibility in your implementation and helps keep our CSS simpler and less specific.
|
||||||
|
|
||||||
## Code conventions
|
|
||||||
|
|
||||||
[Code Guide](https://codeguide.co/) (from Bootstrap co-creator, @mdo) documents how we write our HTML and CSS across Bootstrap. It specifices guidelines for general formatting, common sense defaults, property and attribute orders, and more.
|
|
||||||
|
|
||||||
We use [Stylelint](https://stylelint.io/) to enforce these standards and more in our Sass/CSS. [Our custom Stylelint config](https://github.com/twbs/stylelint-config-twbs-bootstrap) is open source and available for others to use and extend.
|
|
||||||
|
|
||||||
We use [vnu-jar](https://www.npmjs.com/package/vnu-jar) to enforce standard and semantic HTML, as well as detecting common errors.
|
|
||||||
|
|
|
||||||
|
|
@ -269,3 +269,13 @@ Different variants of `.btn`, such at the various outlined styles, are supported
|
||||||
<input type="radio" class="btn-check" name="options-outlined" id="danger-outlined" autocomplete="off">
|
<input type="radio" class="btn-check" name="options-outlined" id="danger-outlined" autocomplete="off">
|
||||||
<label class="btn btn-outline-danger" for="danger-outlined">Danger radio</label>
|
<label class="btn btn-outline-danger" for="danger-outlined">Danger radio</label>
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="form-check-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for checkboxes and radios.
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ To set a custom height on your `<textarea>`, do not use the `rows` attribute. In
|
||||||
|
|
||||||
## Selects
|
## Selects
|
||||||
|
|
||||||
Other than `.form-control`, floating labels are only available on `.form-select`s. They work in the same way, but unlike `<input>`s, they'll always show the `<label>` in its floated state. **Selects with `size` and `multiple` are not supported.**
|
Other than `.form-control`, floating labels are only available on `.form-select`s. They work in the same way, but unlike `<input>`s, they'll always show the `<label>` in its floated state.
|
||||||
|
|
||||||
{{< example >}}
|
{{< example >}}
|
||||||
<div class="form-floating">
|
<div class="form-floating">
|
||||||
|
|
@ -100,3 +100,13 @@ When working with the Bootstrap grid system, be sure to place form elements with
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="form-floating-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for floating label forms.
|
||||||
|
|
|
||||||
|
|
@ -130,3 +130,21 @@ Learn more about [support for datalist elements](https://caniuse.com/datalist).
|
||||||
<option value="Chicago">
|
<option value="Chicago">
|
||||||
</datalist>
|
</datalist>
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
`$input-*` are shared across most of our form controls (and not buttons).
|
||||||
|
|
||||||
|
{{< scss-docs name="form-input-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
`$form-label-*` and `$form-text-*` are for our `<label>`s and `.form-text` component.
|
||||||
|
|
||||||
|
{{< scss-docs name="form-label-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
{{< scss-docs name="form-text-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for form controls.
|
||||||
|
|
|
||||||
|
|
@ -308,3 +308,13 @@ Input groups include support for custom selects and custom file inputs. Browser
|
||||||
<button class="btn btn-outline-secondary" type="button" id="inputGroupFileAddon04">Button</button>
|
<button class="btn btn-outline-secondary" type="button" id="inputGroupFileAddon04">Button</button>
|
||||||
</div>
|
</div>
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="input-group-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for input groups.
|
||||||
|
|
|
||||||
|
|
@ -142,3 +142,15 @@ For situations where it's not possible to include a visible `<label>` or appropr
|
||||||
If none of these are present, assistive technologies may resort to using the `placeholder` attribute as a fallback for the accessible name on `<input>` and `<textarea>` elements. The examples in this section provide a few suggested, case-specific approaches.
|
If none of these are present, assistive technologies may resort to using the `placeholder` attribute as a fallback for the accessible name on `<input>` and `<textarea>` elements. The examples in this section provide a few suggested, case-specific approaches.
|
||||||
|
|
||||||
While using visually hidden content (`.visually-hidden`, `aria-label`, and even `placeholder` content, which disappears once a form field has content) will benefit assistive technology users, a lack of visible label text may still be problematic for certain users. Some form of visible label is generally the best approach, both for accessibility and usability.
|
While using visually hidden content (`.visually-hidden`, `aria-label`, and even `placeholder` content, which disappears once a form field has content) will benefit assistive technology users, a lack of visible label text may still be problematic for certain users. Some form of visible label is generally the best approach, both for accessibility and usability.
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
Many form variables are set at a general level to be re-used and extended by individual form components. You'll see these most often as `$btn-input-*` and `$input-*` variables.
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
`$btn-input-*` variables are shared global variables between our buttons and our form components. You'll find these frequently reassigned as values to other component-specific variables.
|
||||||
|
|
||||||
|
{{< scss-docs name="input-btn-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
|
||||||
|
|
@ -41,3 +41,13 @@ By default, range inputs "snap" to integer values. To change this, you can speci
|
||||||
<label for="customRange3" class="form-label">Example range</label>
|
<label for="customRange3" class="form-label">Example range</label>
|
||||||
<input type="range" class="form-range" min="0" max="5" step="0.5" id="customRange3">
|
<input type="range" class="form-range" min="0" max="5" step="0.5" id="customRange3">
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="form-range-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for range inputs.
|
||||||
|
|
|
||||||
|
|
@ -73,3 +73,13 @@ Add the `disabled` boolean attribute on a select to give it a grayed out appeara
|
||||||
<option value="3">Three</option>
|
<option value="3">Three</option>
|
||||||
</select>
|
</select>
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="form-select-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
There are no mixins for select elements.
|
||||||
|
|
|
||||||
|
|
@ -349,18 +349,34 @@ If your form layout allows it, you can swap the `.{valid|invalid}-feedback` clas
|
||||||
</form>
|
</form>
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
## Customizing
|
## Sass
|
||||||
|
|
||||||
Validation states can be customized via Sass with the `$form-validation-states` map. Located in our `_variables.scss` file, this Sass map is how we generate the default `valid`/`invalid` validation states. Included is a nested map for customizing each state's color, icon, tooltip color, and focus shadow. While no other states are supported by browsers, those using custom styles can easily add more complex form feedback.
|
### Variables
|
||||||
|
|
||||||
Please note that we do not recommend customizing these values without also modifying the `form-validation-state` mixin.
|
{{< scss-docs name="form-feedback-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
This is the Sass map from `_variables.scss`. Override this and recompile your Sass to generate different states:
|
### Mixins
|
||||||
|
|
||||||
|
Two mixins are combined together, through our [loop](#loop), to generate our form validation feedback styles.
|
||||||
|
|
||||||
|
{{< scss-docs name="form-validation-mixins" file="scss/mixins/_forms.scss" >}}
|
||||||
|
|
||||||
|
### Map
|
||||||
|
|
||||||
|
This is the validation Sass map from `_variables.scss`. Override or extend this to generate different or additional states.
|
||||||
|
|
||||||
{{< scss-docs name="form-validation-states" file="scss/_variables.scss" >}}
|
{{< scss-docs name="form-validation-states" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
Maps of `$form-validation-states` can contain three optional parameters to override tooltips and focus styles.
|
Maps of `$form-validation-states` can contain three optional parameters to override tooltips and focus styles.
|
||||||
|
|
||||||
This is the loop from `forms/_validation.scss`. Any modifications to the above Sass map will be reflected in your compiled CSS via this loop:
|
### Loop
|
||||||
|
|
||||||
|
Used to iterate over `$form-validation-states` map values to generate our validation styles. Any modifications to the above Sass map will be reflected in your compiled CSS via this loop.
|
||||||
|
|
||||||
{{< scss-docs name="form-validation-states-loop" file="scss/forms/_validation.scss" >}}
|
{{< scss-docs name="form-validation-states-loop" file="scss/forms/_validation.scss" >}}
|
||||||
|
|
||||||
|
### Customizing
|
||||||
|
|
||||||
|
Validation states can be customized via Sass with the `$form-validation-states` map. Located in our `_variables.scss` file, this Sass map is how we generate the default `valid`/`invalid` validation states. Included is a nested map for customizing each state's color, icon, tooltip color, and focus shadow. While no other states are supported by browsers, those using custom styles can easily add more complex form feedback.
|
||||||
|
|
||||||
|
Please note that we do not recommend customizing `$form-validation-states` values without also modifying the `form-validation-state` mixin.
|
||||||
|
|
|
||||||
|
|
@ -65,12 +65,6 @@ Our [package.json]({{< param repo >}}/blob/v{{< param current_version >}}/packag
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
## Sass
|
|
||||||
|
|
||||||
Bootstrap uses [Dart Sass](https://sass-lang.com/dart-sass) for compiling our Sass source files into CSS files (included in our build process), and we recommend you do the same if you're compiling Sass using your own asset pipeline. We previously used Node Sass for Bootstrap v4, but LibSass and packages built on top of it, including Node Sass, are now [deprecated](https://sass-lang.com/blog/libsass-is-deprecated).
|
|
||||||
|
|
||||||
Dart Sass uses a rounding precision of 10 and for efficiency reasons does not allow adjustment of this value. We don't lower this precision during further processing of our generated CSS, such as during minification, but if you chose to do so we recommend maintaining a precision of at least 6 to prevent issues with browser rounding.
|
|
||||||
|
|
||||||
## Autoprefixer
|
## Autoprefixer
|
||||||
|
|
||||||
Bootstrap uses [Autoprefixer][autoprefixer] (included in our build process) to automatically add vendor prefixes to some CSS properties at build time. Doing so saves us time and code by allowing us to write key parts of our CSS a single time while eliminating the need for vendor mixins like those found in v3.
|
Bootstrap uses [Autoprefixer][autoprefixer] (included in our build process) to automatically add vendor prefixes to some CSS properties at build time. Doing so saves us time and code by allowing us to write key parts of our CSS a single time while eliminating the need for vendor mixins like those found in v3.
|
||||||
|
|
|
||||||
|
|
@ -21,10 +21,10 @@ This doesn't include documentation, source files, or any optional JavaScript dep
|
||||||
|
|
||||||
Compile Bootstrap with your own asset pipeline by downloading our source Sass, JavaScript, and documentation files. This option requires some additional tooling:
|
Compile Bootstrap with your own asset pipeline by downloading our source Sass, JavaScript, and documentation files. This option requires some additional tooling:
|
||||||
|
|
||||||
- [Sass compiler]({{< docsref "/getting-started/build-tools#sass" >}}) for compiling Sass source files into CSS files
|
- Sass compiler (Libsass or Ruby Sass is supported) for compiling your CSS.
|
||||||
- [Autoprefixer](https://github.com/postcss/autoprefixer) for CSS vendor prefixing
|
- [Autoprefixer](https://github.com/postcss/autoprefixer) for CSS vendor prefixing
|
||||||
|
|
||||||
Should you require our full set of [build tools]({{< docsref "/getting-started/build-tools#tooling-setup" >}}), they are included for developing Bootstrap and its docs, but they're likely unsuitable for your own purposes.
|
Should you require [build tools]({{< docsref "/getting-started/build-tools#tooling-setup" >}}), they are included for developing Bootstrap and its docs, but they're likely unsuitable for your own purposes.
|
||||||
|
|
||||||
<a href="{{< param "download.source" >}}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download source');">Download source</a>
|
<a href="{{< param "download.source" >}}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download source');">Download source</a>
|
||||||
|
|
||||||
|
|
@ -52,7 +52,7 @@ If you're using our compiled JavaScript and prefer to include Popper separately,
|
||||||
|
|
||||||
## Package managers
|
## Package managers
|
||||||
|
|
||||||
Pull in Bootstrap's **source files** into nearly any project with some of the most popular package managers. No matter the package manager, Bootstrap will **require a [Sass compiler]({{< docsref "/getting-started/build-tools#sass" >}}) and [Autoprefixer](https://github.com/postcss/autoprefixer)** for a setup that matches our official compiled versions.
|
Pull in Bootstrap's **source files** into nearly any project with some of the most popular package managers. No matter the package manager, Bootstrap will **require a Sass compiler and [Autoprefixer](https://github.com/postcss/autoprefixer)** for a setup that matches our official compiled versions.
|
||||||
|
|
||||||
### npm
|
### npm
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -136,42 +136,6 @@ $font-family-sans-serif:
|
||||||
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
|
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
|
||||||
```
|
```
|
||||||
|
|
||||||
### LTR and RTL at the same time
|
|
||||||
|
|
||||||
Need both LTR and RTL on the same page? Thanks to [RTLCSS String Maps](https://rtlcss.com/learn/usage-guide/string-map/), this is pretty straightforward. Wrap your `@import`s with a class, and set a custom rename rule for RTLCSS:
|
|
||||||
|
|
||||||
```scss
|
|
||||||
/* rtl:begin:options: {
|
|
||||||
"autoRename": true,
|
|
||||||
"stringMap":[
|
|
||||||
"name": "ltr-rtl",
|
|
||||||
"priority": 100,
|
|
||||||
"search": ["ltr"],
|
|
||||||
"replace": ["rtl"],
|
|
||||||
"options": {
|
|
||||||
"scope": "*",
|
|
||||||
"ignoreCase": false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
} */
|
|
||||||
.ltr {
|
|
||||||
@import "../node_modules/bootstrap/scss/bootstrap";
|
|
||||||
}
|
|
||||||
/*rtl:end:options*/
|
|
||||||
```
|
|
||||||
|
|
||||||
After running Sass then RTLCSS, each selector in your CSS files will be prepended by `.ltr`, and `.rtl` for RTL files. Now you're able to use both files on the same page, and simply use `.ltr` or `.rtl` on your components wrappers to use one or the other direction.
|
|
||||||
|
|
||||||
{{< callout warning >}}
|
|
||||||
#### Edge cases and known limitations
|
|
||||||
|
|
||||||
While this approach is understandable, please pay attention to the following:
|
|
||||||
|
|
||||||
1. When switching `.ltr` and `.rtl`, make sure you add `dir` and `lang` attributes accordingly.
|
|
||||||
2. Loading both files can be a real performance bottleneck: consider some [optimization]({{< docsref "/customize/optimize" >}}), and maybe try to [load one of those files asynchronously](https://www.filamentgroup.com/lab/load-css-simpler/).
|
|
||||||
3. Nesting styles this way will prevent our `form-validation-state()` mixin from working as intended, thus require you tweak it a bit by yourself. [See #31223](https://github.com/twbs/bootstrap/issues/31223).
|
|
||||||
{{< /callout >}}
|
|
||||||
|
|
||||||
## The breadcrumb case
|
## The breadcrumb case
|
||||||
|
|
||||||
The [breadcrumb separator]({{< docsref "/components/breadcrumb" >}}/#changing-the-separator) is the only case requiring its own brand new variable— namely `$breadcrumb-divider-flipped` —defaulting to `$breadcrumb-divider`.
|
The [breadcrumb separator]({{< docsref "/components/breadcrumb" >}}/#changing-the-separator) is the only case requiring its own brand new variable— namely `$breadcrumb-divider-flipped` —defaulting to `$breadcrumb-divider`.
|
||||||
|
|
|
||||||
|
|
@ -50,9 +50,7 @@ Horizontal direction sensitive variables, utilities and mixins are renamed with
|
||||||
- Renamed `.pl-*` and `.pr-*` to `.ps-*` and `.pe-*`.
|
- Renamed `.pl-*` and `.pr-*` to `.ps-*` and `.pe-*`.
|
||||||
- Renamed `.text-left` and `.text-right` to `.text-start` and `.text-end`.
|
- Renamed `.text-left` and `.text-right` to `.text-start` and `.text-end`.
|
||||||
|
|
||||||
Breakpoints specific variants are consequently renamed too (e.g. `.text-md-start` replaces `.text-md-left`).
|
Breakpoints specific variants are consequently renamed too (eg. `.text-md-start` replaces `.text-md-left`).
|
||||||
|
|
||||||
**Note**: if you used v4 to make RTL pages, ensure to reverse changes mentioned above: e.g. use `.*-start` were you used `.*-right`.
|
|
||||||
|
|
||||||
##### Mixins
|
##### Mixins
|
||||||
|
|
||||||
|
|
@ -129,7 +127,6 @@ Breakpoints specific variants are consequently renamed too (e.g. `.text-md-start
|
||||||
- Renamed `.font-style-*` utilities as `.fst-*` for brevity and consistency.
|
- Renamed `.font-style-*` utilities as `.fst-*` for brevity and consistency.
|
||||||
- Added `.d-grid` to display utilities
|
- Added `.d-grid` to display utilities
|
||||||
- Added new `gap` utilities (`.gap`) for CSS Grid layouts
|
- Added new `gap` utilities (`.gap`) for CSS Grid layouts
|
||||||
- Removed `.rounded-sm` and `rounded-lg`, and introduced `.rounded-0` to `.rounded-3`. [See #31687](https://github.com/twbs/bootstrap/pull/31687).
|
|
||||||
|
|
||||||
## v5.0.0-alpha2
|
## v5.0.0-alpha2
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -289,25 +289,6 @@ $utilities: map-merge(
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Rename utilities
|
|
||||||
|
|
||||||
Missing v4 utilities, or used to another naming convention? The utilities API can be used to override the resulting `class` of a given utility—for example, to rename `.ms-*` utilities to oldish `.ml-*`:
|
|
||||||
|
|
||||||
```scss
|
|
||||||
@import "bootstrap/scss/functions";
|
|
||||||
@import "bootstrap/scss/variables";
|
|
||||||
@import "bootstrap/scss/utilities";
|
|
||||||
|
|
||||||
$utilities: map-merge(
|
|
||||||
$utilities, (
|
|
||||||
"margin-start": map-merge(
|
|
||||||
map-get($utilities, "margin-start"),
|
|
||||||
( class: ml ),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Remove utilities
|
### Remove utilities
|
||||||
|
|
||||||
Remove any of the default utilities by setting the group key to `null`. For example, to remove all our `width` utilities, create a `$utilities` `map-merge` and add `"width": null` within.
|
Remove any of the default utilities by setting the group key to `null`. For example, to remove all our `width` utilities, create a `$utilities` `map-merge` and add `"width": null` within.
|
||||||
|
|
|
||||||
|
|
@ -77,3 +77,19 @@ Use the scaling classes for larger or smaller rounded corners. Sizes range from
|
||||||
{{< placeholder width="75" height="75" class="rounded-2" title="Example default rounded image" >}}
|
{{< placeholder width="75" height="75" class="rounded-2" title="Example default rounded image" >}}
|
||||||
{{< placeholder width="75" height="75" class="rounded-3" title="Example large rounded image" >}}
|
{{< placeholder width="75" height="75" class="rounded-3" title="Example large rounded image" >}}
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
|
## Sass
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
{{< scss-docs name="border-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
{{< scss-docs name="border-radius-variables" file="scss/_variables.scss" >}}
|
||||||
|
|
||||||
|
### Mixins
|
||||||
|
|
||||||
|
{{< scss-docs name="border-radius-mixins" file="scss/mixins/_border-radius.scss" >}}
|
||||||
|
|
||||||
|
### Utilities
|
||||||
|
|
||||||
|
TODO: this errored out earlier, unclear why...
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue