administrate-bootstrap-theme 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/administrate-bootstrap-theme/components/_content_body.scss +16 -0
  3. data/app/assets/stylesheets/administrate-bootstrap-theme/theme.scss +12 -0
  4. data/lib/administrate-bootstrap-theme/version.rb +1 -1
  5. metadata +4 -85
  6. data/node_modules/bootstrap/LICENSE +0 -22
  7. data/node_modules/bootstrap/README.md +0 -239
  8. data/node_modules/bootstrap/dist/css/bootstrap-grid.css +0 -4997
  9. data/node_modules/bootstrap/dist/css/bootstrap-grid.css.map +0 -1
  10. data/node_modules/bootstrap/dist/css/bootstrap-grid.min.css +0 -7
  11. data/node_modules/bootstrap/dist/css/bootstrap-grid.min.css.map +0 -1
  12. data/node_modules/bootstrap/dist/css/bootstrap-grid.rtl.css +0 -4996
  13. data/node_modules/bootstrap/dist/css/bootstrap-grid.rtl.css.map +0 -1
  14. data/node_modules/bootstrap/dist/css/bootstrap-grid.rtl.min.css +0 -7
  15. data/node_modules/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map +0 -1
  16. data/node_modules/bootstrap/dist/css/bootstrap-reboot.css +0 -426
  17. data/node_modules/bootstrap/dist/css/bootstrap-reboot.css.map +0 -1
  18. data/node_modules/bootstrap/dist/css/bootstrap-reboot.min.css +0 -8
  19. data/node_modules/bootstrap/dist/css/bootstrap-reboot.min.css.map +0 -1
  20. data/node_modules/bootstrap/dist/css/bootstrap-reboot.rtl.css +0 -423
  21. data/node_modules/bootstrap/dist/css/bootstrap-reboot.rtl.css.map +0 -1
  22. data/node_modules/bootstrap/dist/css/bootstrap-reboot.rtl.min.css +0 -8
  23. data/node_modules/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map +0 -1
  24. data/node_modules/bootstrap/dist/css/bootstrap-utilities.css +0 -4752
  25. data/node_modules/bootstrap/dist/css/bootstrap-utilities.css.map +0 -1
  26. data/node_modules/bootstrap/dist/css/bootstrap-utilities.min.css +0 -7
  27. data/node_modules/bootstrap/dist/css/bootstrap-utilities.min.css.map +0 -1
  28. data/node_modules/bootstrap/dist/css/bootstrap-utilities.rtl.css +0 -4743
  29. data/node_modules/bootstrap/dist/css/bootstrap-utilities.rtl.css.map +0 -1
  30. data/node_modules/bootstrap/dist/css/bootstrap-utilities.rtl.min.css +0 -7
  31. data/node_modules/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map +0 -1
  32. data/node_modules/bootstrap/dist/css/bootstrap.css +0 -10819
  33. data/node_modules/bootstrap/dist/css/bootstrap.css.map +0 -1
  34. data/node_modules/bootstrap/dist/css/bootstrap.min.css +0 -7
  35. data/node_modules/bootstrap/dist/css/bootstrap.min.css.map +0 -1
  36. data/node_modules/bootstrap/dist/css/bootstrap.rtl.css +0 -10795
  37. data/node_modules/bootstrap/dist/css/bootstrap.rtl.css.map +0 -1
  38. data/node_modules/bootstrap/dist/css/bootstrap.rtl.min.css +0 -7
  39. data/node_modules/bootstrap/dist/css/bootstrap.rtl.min.css.map +0 -1
  40. data/node_modules/bootstrap/dist/js/bootstrap.bundle.js +0 -6714
  41. data/node_modules/bootstrap/dist/js/bootstrap.bundle.js.map +0 -1
  42. data/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js +0 -7
  43. data/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js.map +0 -1
  44. data/node_modules/bootstrap/dist/js/bootstrap.esm.js +0 -4944
  45. data/node_modules/bootstrap/dist/js/bootstrap.esm.js.map +0 -1
  46. data/node_modules/bootstrap/dist/js/bootstrap.esm.min.js +0 -7
  47. data/node_modules/bootstrap/dist/js/bootstrap.esm.min.js.map +0 -1
  48. data/node_modules/bootstrap/dist/js/bootstrap.js +0 -4993
  49. data/node_modules/bootstrap/dist/js/bootstrap.js.map +0 -1
  50. data/node_modules/bootstrap/dist/js/bootstrap.min.js +0 -7
  51. data/node_modules/bootstrap/dist/js/bootstrap.min.js.map +0 -1
  52. data/node_modules/bootstrap/js/dist/alert.js +0 -264
  53. data/node_modules/bootstrap/js/dist/alert.js.map +0 -1
  54. data/node_modules/bootstrap/js/dist/base-component.js +0 -62
  55. data/node_modules/bootstrap/js/dist/base-component.js.map +0 -1
  56. data/node_modules/bootstrap/js/dist/button.js +0 -146
  57. data/node_modules/bootstrap/js/dist/button.js.map +0 -1
  58. data/node_modules/bootstrap/js/dist/carousel.js +0 -757
  59. data/node_modules/bootstrap/js/dist/carousel.js.map +0 -1
  60. data/node_modules/bootstrap/js/dist/collapse.js +0 -551
  61. data/node_modules/bootstrap/js/dist/collapse.js.map +0 -1
  62. data/node_modules/bootstrap/js/dist/dom/data.js +0 -69
  63. data/node_modules/bootstrap/js/dist/dom/data.js.map +0 -1
  64. data/node_modules/bootstrap/js/dist/dom/event-handler.js +0 -305
  65. data/node_modules/bootstrap/js/dist/dom/event-handler.js.map +0 -1
  66. data/node_modules/bootstrap/js/dist/dom/manipulator.js +0 -89
  67. data/node_modules/bootstrap/js/dist/dom/manipulator.js.map +0 -1
  68. data/node_modules/bootstrap/js/dist/dom/selector-engine.js +0 -86
  69. data/node_modules/bootstrap/js/dist/dom/selector-engine.js.map +0 -1
  70. data/node_modules/bootstrap/js/dist/dropdown.js +0 -662
  71. data/node_modules/bootstrap/js/dist/dropdown.js.map +0 -1
  72. data/node_modules/bootstrap/js/dist/modal.js +0 -752
  73. data/node_modules/bootstrap/js/dist/modal.js.map +0 -1
  74. data/node_modules/bootstrap/js/dist/offcanvas.js +0 -509
  75. data/node_modules/bootstrap/js/dist/offcanvas.js.map +0 -1
  76. data/node_modules/bootstrap/js/dist/popover.js +0 -216
  77. data/node_modules/bootstrap/js/dist/popover.js.map +0 -1
  78. data/node_modules/bootstrap/js/dist/scrollspy.js +0 -400
  79. data/node_modules/bootstrap/js/dist/scrollspy.js.map +0 -1
  80. data/node_modules/bootstrap/js/dist/tab.js +0 -347
  81. data/node_modules/bootstrap/js/dist/tab.js.map +0 -1
  82. data/node_modules/bootstrap/js/dist/toast.js +0 -335
  83. data/node_modules/bootstrap/js/dist/toast.js.map +0 -1
  84. data/node_modules/bootstrap/js/dist/tooltip.js +0 -1055
  85. data/node_modules/bootstrap/js/dist/tooltip.js.map +0 -1
  86. data/node_modules/bootstrap/package.json +0 -177
@@ -1 +0,0 @@
1
- {"version":3,"file":"toast.js","sources":["../src/util/index.js","../src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta3): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = obj => {\n if (obj === null || obj === undefined) {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttr = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttr || (!hrefAttr.includes('#') && !hrefAttr.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n hrefAttr = '#' + hrefAttr.split('#')[1]\n }\n\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = obj => (obj[0] || obj).nodeType\n\nconst emulateTransitionEnd = (element, duration) => {\n let called = false\n const durationPadding = 5\n const emulatedDuration = duration + durationPadding\n\n function listener() {\n called = true\n element.removeEventListener(TRANSITION_END, listener)\n }\n\n element.addEventListener(TRANSITION_END, listener)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(element)\n }\n }, emulatedDuration)\n}\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n Object.keys(configTypes).forEach(property => {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`\n )\n }\n })\n}\n\nconst isVisible = element => {\n if (!element) {\n return false\n }\n\n if (element.style && element.parentNode && element.parentNode.style) {\n const elementStyle = getComputedStyle(element)\n const parentNodeStyle = getComputedStyle(element.parentNode)\n\n return elementStyle.display !== 'none' &&\n parentNodeStyle.display !== 'none' &&\n elementStyle.visibility !== 'hidden'\n }\n\n return false\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => function () {}\n\nconst reflow = element => element.offsetHeight\n\nconst getjQuery = () => {\n const { jQuery } = window\n\n if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return jQuery\n }\n\n return null\n}\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = (name, plugin) => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nexport {\n getUID,\n getSelectorFromElement,\n getElementFromSelector,\n getTransitionDurationFromElement,\n triggerTransitionEnd,\n isElement,\n emulateTransitionEnd,\n typeCheckConfig,\n isVisible,\n isDisabled,\n findShadowRoot,\n noop,\n reflow,\n getjQuery,\n onDOMContentLoaded,\n isRTL,\n defineJQueryPlugin\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta3): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n emulateTransitionEnd,\n getTransitionDurationFromElement,\n reflow,\n typeCheckConfig\n} from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n // Public\n\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = getTransitionDurationFromElement(this._element)\n\n EventHandler.one(this._element, 'transitionend', complete)\n emulateTransitionEnd(this._element, transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = getTransitionDurationFromElement(this._element)\n\n EventHandler.one(this._element, 'transitionend', complete)\n emulateTransitionEnd(this._element, transitionDuration)\n } else {\n complete()\n }\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n EventHandler.off(this._element, EVENT_CLICK_DISMISS)\n\n super.dispose()\n this._config = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n return config\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.get(this, DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, Toast)\n\nexport default Toast\n"],"names":["MILLISECONDS_MULTIPLIER","TRANSITION_END","toType","obj","undefined","toString","call","match","toLowerCase","getTransitionDurationFromElement","element","transitionDuration","transitionDelay","window","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","triggerTransitionEnd","dispatchEvent","Event","isElement","nodeType","emulateTransitionEnd","duration","called","durationPadding","emulatedDuration","listener","removeEventListener","addEventListener","setTimeout","typeCheckConfig","componentName","config","configTypes","Object","keys","forEach","property","expectedTypes","value","valueType","RegExp","test","TypeError","toUpperCase","reflow","offsetHeight","getjQuery","jQuery","document","body","hasAttribute","onDOMContentLoaded","callback","readyState","defineJQueryPlugin","name","plugin","$","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","NAME","DATA_KEY","EVENT_KEY","EVENT_CLICK_DISMISS","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_FADE","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","DefaultType","animation","autohide","delay","Default","SELECTOR_DATA_DISMISS","Toast","BaseComponent","constructor","_config","_getConfig","_timeout","_setListeners","show","showEvent","EventHandler","trigger","_element","defaultPrevented","_clearTimeout","classList","add","complete","remove","hide","one","contains","hideEvent","dispose","off","Manipulator","getDataAttributes","on","clearTimeout","each","data","Data","get"],"mappings":"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"}
@@ -1,1055 +0,0 @@
1
- /*!
2
- * Bootstrap tooltip.js v5.0.0-beta3 (https://getbootstrap.com/)
3
- * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
- */
6
- (function (global, factory) {
7
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
- typeof define === 'function' && define.amd ? define(['@popperjs/core', './dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tooltip = factory(global.Popper, global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
10
- }(this, (function (Popper, Data, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
11
-
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
-
14
- function _interopNamespace(e) {
15
- if (e && e.__esModule) return e;
16
- var n = Object.create(null);
17
- if (e) {
18
- Object.keys(e).forEach(function (k) {
19
- if (k !== 'default') {
20
- var d = Object.getOwnPropertyDescriptor(e, k);
21
- Object.defineProperty(n, k, d.get ? d : {
22
- enumerable: true,
23
- get: function () {
24
- return e[k];
25
- }
26
- });
27
- }
28
- });
29
- }
30
- n['default'] = e;
31
- return Object.freeze(n);
32
- }
33
-
34
- var Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
35
- var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
36
- var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
37
- var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
38
- var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
39
- var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
40
-
41
- /**
42
- * --------------------------------------------------------------------------
43
- * Bootstrap (v5.0.0-beta3): util/index.js
44
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
45
- * --------------------------------------------------------------------------
46
- */
47
- const MAX_UID = 1000000;
48
- const MILLISECONDS_MULTIPLIER = 1000;
49
- const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
50
-
51
- const toType = obj => {
52
- if (obj === null || obj === undefined) {
53
- return `${obj}`;
54
- }
55
-
56
- return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
57
- };
58
- /**
59
- * --------------------------------------------------------------------------
60
- * Public Util Api
61
- * --------------------------------------------------------------------------
62
- */
63
-
64
-
65
- const getUID = prefix => {
66
- do {
67
- prefix += Math.floor(Math.random() * MAX_UID);
68
- } while (document.getElementById(prefix));
69
-
70
- return prefix;
71
- };
72
-
73
- const getTransitionDurationFromElement = element => {
74
- if (!element) {
75
- return 0;
76
- } // Get transition-duration of the element
77
-
78
-
79
- let {
80
- transitionDuration,
81
- transitionDelay
82
- } = window.getComputedStyle(element);
83
- const floatTransitionDuration = Number.parseFloat(transitionDuration);
84
- const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
85
-
86
- if (!floatTransitionDuration && !floatTransitionDelay) {
87
- return 0;
88
- } // If multiple durations are defined, take the first
89
-
90
-
91
- transitionDuration = transitionDuration.split(',')[0];
92
- transitionDelay = transitionDelay.split(',')[0];
93
- return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
94
- };
95
-
96
- const triggerTransitionEnd = element => {
97
- element.dispatchEvent(new Event(TRANSITION_END));
98
- };
99
-
100
- const isElement = obj => (obj[0] || obj).nodeType;
101
-
102
- const emulateTransitionEnd = (element, duration) => {
103
- let called = false;
104
- const durationPadding = 5;
105
- const emulatedDuration = duration + durationPadding;
106
-
107
- function listener() {
108
- called = true;
109
- element.removeEventListener(TRANSITION_END, listener);
110
- }
111
-
112
- element.addEventListener(TRANSITION_END, listener);
113
- setTimeout(() => {
114
- if (!called) {
115
- triggerTransitionEnd(element);
116
- }
117
- }, emulatedDuration);
118
- };
119
-
120
- const typeCheckConfig = (componentName, config, configTypes) => {
121
- Object.keys(configTypes).forEach(property => {
122
- const expectedTypes = configTypes[property];
123
- const value = config[property];
124
- const valueType = value && isElement(value) ? 'element' : toType(value);
125
-
126
- if (!new RegExp(expectedTypes).test(valueType)) {
127
- throw new TypeError(`${componentName.toUpperCase()}: ` + `Option "${property}" provided type "${valueType}" ` + `but expected type "${expectedTypes}".`);
128
- }
129
- });
130
- };
131
-
132
- const findShadowRoot = element => {
133
- if (!document.documentElement.attachShadow) {
134
- return null;
135
- } // Can find the shadow root otherwise it'll return the document
136
-
137
-
138
- if (typeof element.getRootNode === 'function') {
139
- const root = element.getRootNode();
140
- return root instanceof ShadowRoot ? root : null;
141
- }
142
-
143
- if (element instanceof ShadowRoot) {
144
- return element;
145
- } // when we don't find a shadow root
146
-
147
-
148
- if (!element.parentNode) {
149
- return null;
150
- }
151
-
152
- return findShadowRoot(element.parentNode);
153
- };
154
-
155
- const noop = () => function () {};
156
-
157
- const getjQuery = () => {
158
- const {
159
- jQuery
160
- } = window;
161
-
162
- if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
163
- return jQuery;
164
- }
165
-
166
- return null;
167
- };
168
-
169
- const onDOMContentLoaded = callback => {
170
- if (document.readyState === 'loading') {
171
- document.addEventListener('DOMContentLoaded', callback);
172
- } else {
173
- callback();
174
- }
175
- };
176
-
177
- const isRTL = () => document.documentElement.dir === 'rtl';
178
-
179
- const defineJQueryPlugin = (name, plugin) => {
180
- onDOMContentLoaded(() => {
181
- const $ = getjQuery();
182
- /* istanbul ignore if */
183
-
184
- if ($) {
185
- const JQUERY_NO_CONFLICT = $.fn[name];
186
- $.fn[name] = plugin.jQueryInterface;
187
- $.fn[name].Constructor = plugin;
188
-
189
- $.fn[name].noConflict = () => {
190
- $.fn[name] = JQUERY_NO_CONFLICT;
191
- return plugin.jQueryInterface;
192
- };
193
- }
194
- });
195
- };
196
-
197
- /**
198
- * --------------------------------------------------------------------------
199
- * Bootstrap (v5.0.0-beta3): util/sanitizer.js
200
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
201
- * --------------------------------------------------------------------------
202
- */
203
- const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
204
- const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
205
- /**
206
- * A pattern that recognizes a commonly useful subset of URLs that are safe.
207
- *
208
- * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
209
- */
210
-
211
- const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;
212
- /**
213
- * A pattern that matches safe data URLs. Only matches image, video and audio types.
214
- *
215
- * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
216
- */
217
-
218
- const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
219
-
220
- const allowedAttribute = (attr, allowedAttributeList) => {
221
- const attrName = attr.nodeName.toLowerCase();
222
-
223
- if (allowedAttributeList.includes(attrName)) {
224
- if (uriAttrs.has(attrName)) {
225
- return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));
226
- }
227
-
228
- return true;
229
- }
230
-
231
- const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.
232
-
233
- for (let i = 0, len = regExp.length; i < len; i++) {
234
- if (regExp[i].test(attrName)) {
235
- return true;
236
- }
237
- }
238
-
239
- return false;
240
- };
241
-
242
- const DefaultAllowlist = {
243
- // Global attributes allowed on any supplied element below.
244
- '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
245
- a: ['target', 'href', 'title', 'rel'],
246
- area: [],
247
- b: [],
248
- br: [],
249
- col: [],
250
- code: [],
251
- div: [],
252
- em: [],
253
- hr: [],
254
- h1: [],
255
- h2: [],
256
- h3: [],
257
- h4: [],
258
- h5: [],
259
- h6: [],
260
- i: [],
261
- img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
262
- li: [],
263
- ol: [],
264
- p: [],
265
- pre: [],
266
- s: [],
267
- small: [],
268
- span: [],
269
- sub: [],
270
- sup: [],
271
- strong: [],
272
- u: [],
273
- ul: []
274
- };
275
- function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
276
- if (!unsafeHtml.length) {
277
- return unsafeHtml;
278
- }
279
-
280
- if (sanitizeFn && typeof sanitizeFn === 'function') {
281
- return sanitizeFn(unsafeHtml);
282
- }
283
-
284
- const domParser = new window.DOMParser();
285
- const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
286
- const allowlistKeys = Object.keys(allowList);
287
- const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
288
-
289
- for (let i = 0, len = elements.length; i < len; i++) {
290
- const el = elements[i];
291
- const elName = el.nodeName.toLowerCase();
292
-
293
- if (!allowlistKeys.includes(elName)) {
294
- el.parentNode.removeChild(el);
295
- continue;
296
- }
297
-
298
- const attributeList = [].concat(...el.attributes);
299
- const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);
300
- attributeList.forEach(attr => {
301
- if (!allowedAttribute(attr, allowedAttributes)) {
302
- el.removeAttribute(attr.nodeName);
303
- }
304
- });
305
- }
306
-
307
- return createdDocument.body.innerHTML;
308
- }
309
-
310
- /**
311
- * --------------------------------------------------------------------------
312
- * Bootstrap (v5.0.0-beta3): tooltip.js
313
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
314
- * --------------------------------------------------------------------------
315
- */
316
- /**
317
- * ------------------------------------------------------------------------
318
- * Constants
319
- * ------------------------------------------------------------------------
320
- */
321
-
322
- const NAME = 'tooltip';
323
- const DATA_KEY = 'bs.tooltip';
324
- const EVENT_KEY = `.${DATA_KEY}`;
325
- const CLASS_PREFIX = 'bs-tooltip';
326
- const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g');
327
- const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
328
- const DefaultType = {
329
- animation: 'boolean',
330
- template: 'string',
331
- title: '(string|element|function)',
332
- trigger: 'string',
333
- delay: '(number|object)',
334
- html: 'boolean',
335
- selector: '(string|boolean)',
336
- placement: '(string|function)',
337
- offset: '(array|string|function)',
338
- container: '(string|element|boolean)',
339
- fallbackPlacements: 'array',
340
- boundary: '(string|element)',
341
- customClass: '(string|function)',
342
- sanitize: 'boolean',
343
- sanitizeFn: '(null|function)',
344
- allowList: 'object',
345
- popperConfig: '(null|object|function)'
346
- };
347
- const AttachmentMap = {
348
- AUTO: 'auto',
349
- TOP: 'top',
350
- RIGHT: isRTL() ? 'left' : 'right',
351
- BOTTOM: 'bottom',
352
- LEFT: isRTL() ? 'right' : 'left'
353
- };
354
- const Default = {
355
- animation: true,
356
- template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
357
- trigger: 'hover focus',
358
- title: '',
359
- delay: 0,
360
- html: false,
361
- selector: false,
362
- placement: 'top',
363
- offset: [0, 0],
364
- container: false,
365
- fallbackPlacements: ['top', 'right', 'bottom', 'left'],
366
- boundary: 'clippingParents',
367
- customClass: '',
368
- sanitize: true,
369
- sanitizeFn: null,
370
- allowList: DefaultAllowlist,
371
- popperConfig: null
372
- };
373
- const Event$1 = {
374
- HIDE: `hide${EVENT_KEY}`,
375
- HIDDEN: `hidden${EVENT_KEY}`,
376
- SHOW: `show${EVENT_KEY}`,
377
- SHOWN: `shown${EVENT_KEY}`,
378
- INSERTED: `inserted${EVENT_KEY}`,
379
- CLICK: `click${EVENT_KEY}`,
380
- FOCUSIN: `focusin${EVENT_KEY}`,
381
- FOCUSOUT: `focusout${EVENT_KEY}`,
382
- MOUSEENTER: `mouseenter${EVENT_KEY}`,
383
- MOUSELEAVE: `mouseleave${EVENT_KEY}`
384
- };
385
- const CLASS_NAME_FADE = 'fade';
386
- const CLASS_NAME_MODAL = 'modal';
387
- const CLASS_NAME_SHOW = 'show';
388
- const HOVER_STATE_SHOW = 'show';
389
- const HOVER_STATE_OUT = 'out';
390
- const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
391
- const TRIGGER_HOVER = 'hover';
392
- const TRIGGER_FOCUS = 'focus';
393
- const TRIGGER_CLICK = 'click';
394
- const TRIGGER_MANUAL = 'manual';
395
- /**
396
- * ------------------------------------------------------------------------
397
- * Class Definition
398
- * ------------------------------------------------------------------------
399
- */
400
-
401
- class Tooltip extends BaseComponent__default['default'] {
402
- constructor(element, config) {
403
- if (typeof Popper__namespace === 'undefined') {
404
- throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
405
- }
406
-
407
- super(element); // private
408
-
409
- this._isEnabled = true;
410
- this._timeout = 0;
411
- this._hoverState = '';
412
- this._activeTrigger = {};
413
- this._popper = null; // Protected
414
-
415
- this.config = this._getConfig(config);
416
- this.tip = null;
417
-
418
- this._setListeners();
419
- } // Getters
420
-
421
-
422
- static get Default() {
423
- return Default;
424
- }
425
-
426
- static get NAME() {
427
- return NAME;
428
- }
429
-
430
- static get DATA_KEY() {
431
- return DATA_KEY;
432
- }
433
-
434
- static get Event() {
435
- return Event$1;
436
- }
437
-
438
- static get EVENT_KEY() {
439
- return EVENT_KEY;
440
- }
441
-
442
- static get DefaultType() {
443
- return DefaultType;
444
- } // Public
445
-
446
-
447
- enable() {
448
- this._isEnabled = true;
449
- }
450
-
451
- disable() {
452
- this._isEnabled = false;
453
- }
454
-
455
- toggleEnabled() {
456
- this._isEnabled = !this._isEnabled;
457
- }
458
-
459
- toggle(event) {
460
- if (!this._isEnabled) {
461
- return;
462
- }
463
-
464
- if (event) {
465
- const context = this._initializeOnDelegatedTarget(event);
466
-
467
- context._activeTrigger.click = !context._activeTrigger.click;
468
-
469
- if (context._isWithActiveTrigger()) {
470
- context._enter(null, context);
471
- } else {
472
- context._leave(null, context);
473
- }
474
- } else {
475
- if (this.getTipElement().classList.contains(CLASS_NAME_SHOW)) {
476
- this._leave(null, this);
477
-
478
- return;
479
- }
480
-
481
- this._enter(null, this);
482
- }
483
- }
484
-
485
- dispose() {
486
- clearTimeout(this._timeout);
487
- EventHandler__default['default'].off(this._element, this.constructor.EVENT_KEY);
488
- EventHandler__default['default'].off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);
489
-
490
- if (this.tip && this.tip.parentNode) {
491
- this.tip.parentNode.removeChild(this.tip);
492
- }
493
-
494
- this._isEnabled = null;
495
- this._timeout = null;
496
- this._hoverState = null;
497
- this._activeTrigger = null;
498
-
499
- if (this._popper) {
500
- this._popper.destroy();
501
- }
502
-
503
- this._popper = null;
504
- this.config = null;
505
- this.tip = null;
506
- super.dispose();
507
- }
508
-
509
- show() {
510
- if (this._element.style.display === 'none') {
511
- throw new Error('Please use show on visible elements');
512
- }
513
-
514
- if (!(this.isWithContent() && this._isEnabled)) {
515
- return;
516
- }
517
-
518
- const showEvent = EventHandler__default['default'].trigger(this._element, this.constructor.Event.SHOW);
519
- const shadowRoot = findShadowRoot(this._element);
520
- const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);
521
-
522
- if (showEvent.defaultPrevented || !isInTheDom) {
523
- return;
524
- }
525
-
526
- const tip = this.getTipElement();
527
- const tipId = getUID(this.constructor.NAME);
528
- tip.setAttribute('id', tipId);
529
-
530
- this._element.setAttribute('aria-describedby', tipId);
531
-
532
- this.setContent();
533
-
534
- if (this.config.animation) {
535
- tip.classList.add(CLASS_NAME_FADE);
536
- }
537
-
538
- const placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this._element) : this.config.placement;
539
-
540
- const attachment = this._getAttachment(placement);
541
-
542
- this._addAttachmentClass(attachment);
543
-
544
- const container = this._getContainer();
545
-
546
- Data__default['default'].set(tip, this.constructor.DATA_KEY, this);
547
-
548
- if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
549
- container.appendChild(tip);
550
- EventHandler__default['default'].trigger(this._element, this.constructor.Event.INSERTED);
551
- }
552
-
553
- if (this._popper) {
554
- this._popper.update();
555
- } else {
556
- this._popper = Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));
557
- }
558
-
559
- tip.classList.add(CLASS_NAME_SHOW);
560
- const customClass = typeof this.config.customClass === 'function' ? this.config.customClass() : this.config.customClass;
561
-
562
- if (customClass) {
563
- tip.classList.add(...customClass.split(' '));
564
- } // If this is a touch-enabled device we add extra
565
- // empty mouseover listeners to the body's immediate children;
566
- // only needed because of broken event delegation on iOS
567
- // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
568
-
569
-
570
- if ('ontouchstart' in document.documentElement) {
571
- [].concat(...document.body.children).forEach(element => {
572
- EventHandler__default['default'].on(element, 'mouseover', noop());
573
- });
574
- }
575
-
576
- const complete = () => {
577
- const prevHoverState = this._hoverState;
578
- this._hoverState = null;
579
- EventHandler__default['default'].trigger(this._element, this.constructor.Event.SHOWN);
580
-
581
- if (prevHoverState === HOVER_STATE_OUT) {
582
- this._leave(null, this);
583
- }
584
- };
585
-
586
- if (this.tip.classList.contains(CLASS_NAME_FADE)) {
587
- const transitionDuration = getTransitionDurationFromElement(this.tip);
588
- EventHandler__default['default'].one(this.tip, 'transitionend', complete);
589
- emulateTransitionEnd(this.tip, transitionDuration);
590
- } else {
591
- complete();
592
- }
593
- }
594
-
595
- hide() {
596
- if (!this._popper) {
597
- return;
598
- }
599
-
600
- const tip = this.getTipElement();
601
-
602
- const complete = () => {
603
- if (this._isWithActiveTrigger()) {
604
- return;
605
- }
606
-
607
- if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
608
- tip.parentNode.removeChild(tip);
609
- }
610
-
611
- this._cleanTipClass();
612
-
613
- this._element.removeAttribute('aria-describedby');
614
-
615
- EventHandler__default['default'].trigger(this._element, this.constructor.Event.HIDDEN);
616
-
617
- if (this._popper) {
618
- this._popper.destroy();
619
-
620
- this._popper = null;
621
- }
622
- };
623
-
624
- const hideEvent = EventHandler__default['default'].trigger(this._element, this.constructor.Event.HIDE);
625
-
626
- if (hideEvent.defaultPrevented) {
627
- return;
628
- }
629
-
630
- tip.classList.remove(CLASS_NAME_SHOW); // If this is a touch-enabled device we remove the extra
631
- // empty mouseover listeners we added for iOS support
632
-
633
- if ('ontouchstart' in document.documentElement) {
634
- [].concat(...document.body.children).forEach(element => EventHandler__default['default'].off(element, 'mouseover', noop));
635
- }
636
-
637
- this._activeTrigger[TRIGGER_CLICK] = false;
638
- this._activeTrigger[TRIGGER_FOCUS] = false;
639
- this._activeTrigger[TRIGGER_HOVER] = false;
640
-
641
- if (this.tip.classList.contains(CLASS_NAME_FADE)) {
642
- const transitionDuration = getTransitionDurationFromElement(tip);
643
- EventHandler__default['default'].one(tip, 'transitionend', complete);
644
- emulateTransitionEnd(tip, transitionDuration);
645
- } else {
646
- complete();
647
- }
648
-
649
- this._hoverState = '';
650
- }
651
-
652
- update() {
653
- if (this._popper !== null) {
654
- this._popper.update();
655
- }
656
- } // Protected
657
-
658
-
659
- isWithContent() {
660
- return Boolean(this.getTitle());
661
- }
662
-
663
- getTipElement() {
664
- if (this.tip) {
665
- return this.tip;
666
- }
667
-
668
- const element = document.createElement('div');
669
- element.innerHTML = this.config.template;
670
- this.tip = element.children[0];
671
- return this.tip;
672
- }
673
-
674
- setContent() {
675
- const tip = this.getTipElement();
676
- this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());
677
- tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);
678
- }
679
-
680
- setElementContent(element, content) {
681
- if (element === null) {
682
- return;
683
- }
684
-
685
- if (typeof content === 'object' && isElement(content)) {
686
- if (content.jquery) {
687
- content = content[0];
688
- } // content is a DOM node or a jQuery
689
-
690
-
691
- if (this.config.html) {
692
- if (content.parentNode !== element) {
693
- element.innerHTML = '';
694
- element.appendChild(content);
695
- }
696
- } else {
697
- element.textContent = content.textContent;
698
- }
699
-
700
- return;
701
- }
702
-
703
- if (this.config.html) {
704
- if (this.config.sanitize) {
705
- content = sanitizeHtml(content, this.config.allowList, this.config.sanitizeFn);
706
- }
707
-
708
- element.innerHTML = content;
709
- } else {
710
- element.textContent = content;
711
- }
712
- }
713
-
714
- getTitle() {
715
- let title = this._element.getAttribute('data-bs-original-title');
716
-
717
- if (!title) {
718
- title = typeof this.config.title === 'function' ? this.config.title.call(this._element) : this.config.title;
719
- }
720
-
721
- return title;
722
- }
723
-
724
- updateAttachment(attachment) {
725
- if (attachment === 'right') {
726
- return 'end';
727
- }
728
-
729
- if (attachment === 'left') {
730
- return 'start';
731
- }
732
-
733
- return attachment;
734
- } // Private
735
-
736
-
737
- _initializeOnDelegatedTarget(event, context) {
738
- const dataKey = this.constructor.DATA_KEY;
739
- context = context || Data__default['default'].get(event.delegateTarget, dataKey);
740
-
741
- if (!context) {
742
- context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
743
- Data__default['default'].set(event.delegateTarget, dataKey, context);
744
- }
745
-
746
- return context;
747
- }
748
-
749
- _getOffset() {
750
- const {
751
- offset
752
- } = this.config;
753
-
754
- if (typeof offset === 'string') {
755
- return offset.split(',').map(val => Number.parseInt(val, 10));
756
- }
757
-
758
- if (typeof offset === 'function') {
759
- return popperData => offset(popperData, this._element);
760
- }
761
-
762
- return offset;
763
- }
764
-
765
- _getPopperConfig(attachment) {
766
- const defaultBsPopperConfig = {
767
- placement: attachment,
768
- modifiers: [{
769
- name: 'flip',
770
- options: {
771
- altBoundary: true,
772
- fallbackPlacements: this.config.fallbackPlacements
773
- }
774
- }, {
775
- name: 'offset',
776
- options: {
777
- offset: this._getOffset()
778
- }
779
- }, {
780
- name: 'preventOverflow',
781
- options: {
782
- boundary: this.config.boundary
783
- }
784
- }, {
785
- name: 'arrow',
786
- options: {
787
- element: `.${this.constructor.NAME}-arrow`
788
- }
789
- }, {
790
- name: 'onChange',
791
- enabled: true,
792
- phase: 'afterWrite',
793
- fn: data => this._handlePopperPlacementChange(data)
794
- }],
795
- onFirstUpdate: data => {
796
- if (data.options.placement !== data.placement) {
797
- this._handlePopperPlacementChange(data);
798
- }
799
- }
800
- };
801
- return { ...defaultBsPopperConfig,
802
- ...(typeof this.config.popperConfig === 'function' ? this.config.popperConfig(defaultBsPopperConfig) : this.config.popperConfig)
803
- };
804
- }
805
-
806
- _addAttachmentClass(attachment) {
807
- this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);
808
- }
809
-
810
- _getContainer() {
811
- if (this.config.container === false) {
812
- return document.body;
813
- }
814
-
815
- if (isElement(this.config.container)) {
816
- return this.config.container;
817
- }
818
-
819
- return SelectorEngine__default['default'].findOne(this.config.container);
820
- }
821
-
822
- _getAttachment(placement) {
823
- return AttachmentMap[placement.toUpperCase()];
824
- }
825
-
826
- _setListeners() {
827
- const triggers = this.config.trigger.split(' ');
828
- triggers.forEach(trigger => {
829
- if (trigger === 'click') {
830
- EventHandler__default['default'].on(this._element, this.constructor.Event.CLICK, this.config.selector, event => this.toggle(event));
831
- } else if (trigger !== TRIGGER_MANUAL) {
832
- const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;
833
- const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;
834
- EventHandler__default['default'].on(this._element, eventIn, this.config.selector, event => this._enter(event));
835
- EventHandler__default['default'].on(this._element, eventOut, this.config.selector, event => this._leave(event));
836
- }
837
- });
838
-
839
- this._hideModalHandler = () => {
840
- if (this._element) {
841
- this.hide();
842
- }
843
- };
844
-
845
- EventHandler__default['default'].on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);
846
-
847
- if (this.config.selector) {
848
- this.config = { ...this.config,
849
- trigger: 'manual',
850
- selector: ''
851
- };
852
- } else {
853
- this._fixTitle();
854
- }
855
- }
856
-
857
- _fixTitle() {
858
- const title = this._element.getAttribute('title');
859
-
860
- const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');
861
-
862
- if (title || originalTitleType !== 'string') {
863
- this._element.setAttribute('data-bs-original-title', title || '');
864
-
865
- if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {
866
- this._element.setAttribute('aria-label', title);
867
- }
868
-
869
- this._element.setAttribute('title', '');
870
- }
871
- }
872
-
873
- _enter(event, context) {
874
- context = this._initializeOnDelegatedTarget(event, context);
875
-
876
- if (event) {
877
- context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
878
- }
879
-
880
- if (context.getTipElement().classList.contains(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {
881
- context._hoverState = HOVER_STATE_SHOW;
882
- return;
883
- }
884
-
885
- clearTimeout(context._timeout);
886
- context._hoverState = HOVER_STATE_SHOW;
887
-
888
- if (!context.config.delay || !context.config.delay.show) {
889
- context.show();
890
- return;
891
- }
892
-
893
- context._timeout = setTimeout(() => {
894
- if (context._hoverState === HOVER_STATE_SHOW) {
895
- context.show();
896
- }
897
- }, context.config.delay.show);
898
- }
899
-
900
- _leave(event, context) {
901
- context = this._initializeOnDelegatedTarget(event, context);
902
-
903
- if (event) {
904
- context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
905
- }
906
-
907
- if (context._isWithActiveTrigger()) {
908
- return;
909
- }
910
-
911
- clearTimeout(context._timeout);
912
- context._hoverState = HOVER_STATE_OUT;
913
-
914
- if (!context.config.delay || !context.config.delay.hide) {
915
- context.hide();
916
- return;
917
- }
918
-
919
- context._timeout = setTimeout(() => {
920
- if (context._hoverState === HOVER_STATE_OUT) {
921
- context.hide();
922
- }
923
- }, context.config.delay.hide);
924
- }
925
-
926
- _isWithActiveTrigger() {
927
- for (const trigger in this._activeTrigger) {
928
- if (this._activeTrigger[trigger]) {
929
- return true;
930
- }
931
- }
932
-
933
- return false;
934
- }
935
-
936
- _getConfig(config) {
937
- const dataAttributes = Manipulator__default['default'].getDataAttributes(this._element);
938
- Object.keys(dataAttributes).forEach(dataAttr => {
939
- if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {
940
- delete dataAttributes[dataAttr];
941
- }
942
- });
943
-
944
- if (config && typeof config.container === 'object' && config.container.jquery) {
945
- config.container = config.container[0];
946
- }
947
-
948
- config = { ...this.constructor.Default,
949
- ...dataAttributes,
950
- ...(typeof config === 'object' && config ? config : {})
951
- };
952
-
953
- if (typeof config.delay === 'number') {
954
- config.delay = {
955
- show: config.delay,
956
- hide: config.delay
957
- };
958
- }
959
-
960
- if (typeof config.title === 'number') {
961
- config.title = config.title.toString();
962
- }
963
-
964
- if (typeof config.content === 'number') {
965
- config.content = config.content.toString();
966
- }
967
-
968
- typeCheckConfig(NAME, config, this.constructor.DefaultType);
969
-
970
- if (config.sanitize) {
971
- config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);
972
- }
973
-
974
- return config;
975
- }
976
-
977
- _getDelegateConfig() {
978
- const config = {};
979
-
980
- if (this.config) {
981
- for (const key in this.config) {
982
- if (this.constructor.Default[key] !== this.config[key]) {
983
- config[key] = this.config[key];
984
- }
985
- }
986
- }
987
-
988
- return config;
989
- }
990
-
991
- _cleanTipClass() {
992
- const tip = this.getTipElement();
993
- const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
994
-
995
- if (tabClass !== null && tabClass.length > 0) {
996
- tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
997
- }
998
- }
999
-
1000
- _handlePopperPlacementChange(popperData) {
1001
- const {
1002
- state
1003
- } = popperData;
1004
-
1005
- if (!state) {
1006
- return;
1007
- }
1008
-
1009
- this.tip = state.elements.popper;
1010
-
1011
- this._cleanTipClass();
1012
-
1013
- this._addAttachmentClass(this._getAttachment(state.placement));
1014
- } // Static
1015
-
1016
-
1017
- static jQueryInterface(config) {
1018
- return this.each(function () {
1019
- let data = Data__default['default'].get(this, DATA_KEY);
1020
-
1021
- const _config = typeof config === 'object' && config;
1022
-
1023
- if (!data && /dispose|hide/.test(config)) {
1024
- return;
1025
- }
1026
-
1027
- if (!data) {
1028
- data = new Tooltip(this, _config);
1029
- }
1030
-
1031
- if (typeof config === 'string') {
1032
- if (typeof data[config] === 'undefined') {
1033
- throw new TypeError(`No method named "${config}"`);
1034
- }
1035
-
1036
- data[config]();
1037
- }
1038
- });
1039
- }
1040
-
1041
- }
1042
- /**
1043
- * ------------------------------------------------------------------------
1044
- * jQuery
1045
- * ------------------------------------------------------------------------
1046
- * add .Tooltip to jQuery only if jQuery is present
1047
- */
1048
-
1049
-
1050
- defineJQueryPlugin(NAME, Tooltip);
1051
-
1052
- return Tooltip;
1053
-
1054
- })));
1055
- //# sourceMappingURL=tooltip.js.map