@datadog/druids-test-pkg 0.0.2
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.
- package/LICENSE +201 -0
- package/LICENSES-3rdparty.csv +601 -0
- package/NOTICE +4 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +7 -0
- package/package.json +47 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../.yarn/cache/case-npm-1.6.3-9c9236eb6ac31d4fd1ab432656702670-1-d9.zip/node_modules/case/dist/Case.js", "../../../../.yarn/cache/classnames-npm-2.3.2-abef1471fa16ba05dab602cb04fa0f58-1-d9.zip/node_modules/classnames/index.js", "../../../../.yarn/cache/react-fast-compare-npm-3.2.0-35f5e09bfb80423bc880a294876a6b8d-1-d9.zip/node_modules/react-fast-compare/index.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/isArray.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/_trimmedEndIndex.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/_baseTrim.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/isObject.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/_freeGlobal.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/_root.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/_Symbol.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/_getRawTag.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/_objectToString.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/_baseGetTag.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/isObjectLike.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/isSymbol.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/toNumber.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/toFinite.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/toInteger.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/before.js", "../../../../.yarn/cache/lodash-npm-4.17.21-6790ba4f0c5e41be76d68f8a70e2df68-1-d9.zip/node_modules/lodash/once.js", "../../../../.yarn/cache/react-is-npm-18.3.1-c643deb43f9e281c5656269f8854c15c-1-d9.zip/node_modules/react-is/cjs/react-is.production.min.js", "../../../../.yarn/cache/react-is-npm-18.3.1-c643deb43f9e281c5656269f8854c15c-1-d9.zip/node_modules/react-is/index.js", "css-stub:./horizontal-separator.module.css", "../../../../.yarn/cache/detect-browser-npm-4.8.0-8bd538f0f5bac012ee92cf8f02188ff6-1-d9.zip/node_modules/detect-browser/index.js", "css-stub:./keycap.module.css", "css-stub:./keyboard-shortcut.module.css", "css-stub:./loading-indicator.module.css", "css-stub:./feature-status-label.module.css", "../../../druids/ui/form/Button/Button.tsx", "../../../../.yarn/cache/resize-observer-polyfill-patch-04026e0be8ac18105bdc96ab37614205-1-d9.zip/node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js", "../../../lib/hooks/use-deep-memo/use-deep-memo.ts", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/enums.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/math.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/userAgent.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/within.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/debounce.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/createPopper.js", "../../../../.yarn/cache/@popperjs-core-npm-2.11.8-79c8a6a95a9ca4d9f764ce2b7134458c-1-d9.zip/node_modules/@popperjs/core/lib/popper.js", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/constants.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/utils.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/dom-utils.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/bindGlobalEventListeners.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/browser.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/validation.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/props.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/template.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/createTippy.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/index.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/addons/createSingleton.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/addons/delegate.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/plugins/animateFill.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/plugins/followCursor.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/plugins/inlinePositioning.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/src/plugins/sticky.ts", "../../../../.yarn/cache/tippy.js-npm-6.3.7-259c7e8b322799e4faffd3cea73998bc-1-d9.zip/node_modules/tippy.js/build/base.js", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@tippyjs-react-npm-4.2.6-aece2cd2388510cd3d4e44eec573fa60-1-d9.zip/node_modules/@tippyjs/react/src/utils.js", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@tippyjs-react-npm-4.2.6-aece2cd2388510cd3d4e44eec573fa60-1-d9.zip/node_modules/@tippyjs/react/src/util-hooks.js", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@tippyjs-react-npm-4.2.6-aece2cd2388510cd3d4e44eec573fa60-1-d9.zip/node_modules/@tippyjs/react/src/className-plugin.js", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@tippyjs-react-npm-4.2.6-aece2cd2388510cd3d4e44eec573fa60-1-d9.zip/node_modules/@tippyjs/react/src/Tippy.js", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@tippyjs-react-npm-4.2.6-aece2cd2388510cd3d4e44eec573fa60-1-d9.zip/node_modules/@tippyjs/react/src/useSingleton.js", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@tippyjs-react-npm-4.2.6-aece2cd2388510cd3d4e44eec573fa60-1-d9.zip/node_modules/@tippyjs/react/src/forwardRef.js", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@tippyjs-react-npm-4.2.6-aece2cd2388510cd3d4e44eec573fa60-1-d9.zip/node_modules/@tippyjs/react/src/index.js", "../../../druids/ui/dialogs/Tooltip/Tooltip.tsx", "../../../druids/ui/form/Action/Action.tsx", "../../../druids/ui/lib/accessibility/focusVisible/focus-visible.js", "../../../druids/ui/lib/components-helpers/components-helpers.ts", "../../../lib/design-tokens/animations.constants.ts", "../../../lib/design-tokens/sizes.constants.ts", "../../../druids/ui/lib/misc/use-as-component/use-as-component.tsx", "../../../druids/ui/lib/routing/use-smooth-anchor-link.ts", "../../../druids/ui/nav/Link/link.utils.ts", "../../../druids/ui/internals/component-warning.ts", "../../../lib/browser-sdk-shims/shim-utils.ts", "../../../lib/browser-sdk-shims/logs.ts", "../../../lib/browser-sdk-shims/rum.ts", "../../../druids/ui/internals/create-logger.ts", "../../../druids/ui/layout/HorizontalSeparator/HorizontalSeparator.tsx", "../../../druids/ui/layout/Spacing/Spacing.tsx", "../../../druids/ui/lib/color/use-global-theme-preference/use-global-theme-preference.tsx", "../../../druids/ui/lib/color/use-global-theme-preference/_context/global-theme-preference.context.ts", "../../../druids/ui/lib/color/theme/theme.constants.ts", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@blocz-react-responsive-npm-4.0.0-cdb9de99f1fedc17c4995770474b8456-1-d9.zip/node_modules/@blocz/react-responsive/src/sanitize.ts", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@blocz-react-responsive-npm-4.0.0-cdb9de99f1fedc17c4995770474b8456-1-d9.zip/node_modules/@blocz/react-responsive/src/BreakpointsContext.tsx", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@blocz-react-responsive-npm-4.0.0-cdb9de99f1fedc17c4995770474b8456-1-d9.zip/node_modules/@blocz/react-responsive/src/fromBreakpointToMedia.ts", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@blocz-react-responsive-npm-4.0.0-cdb9de99f1fedc17c4995770474b8456-1-d9.zip/node_modules/@blocz/react-responsive/src/useMediaQuery.ts", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@blocz-react-responsive-npm-4.0.0-cdb9de99f1fedc17c4995770474b8456-1-d9.zip/node_modules/@blocz/react-responsive/src/useBreakpoint.ts", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@blocz-react-responsive-npm-4.0.0-cdb9de99f1fedc17c4995770474b8456-1-d9.zip/node_modules/@blocz/react-responsive/src/mediaQueryBuilder.ts", "../../../../.yarn/__virtual__/hash-9aeacaf1c19d3d79/0/cache/@blocz-react-responsive-npm-4.0.0-cdb9de99f1fedc17c4995770474b8456-1-d9.zip/node_modules/@blocz/react-responsive/src/Only.tsx", "../../../druids/ui/lib/color/use-theme/use-theme.tsx", "../../../druids/ui/lib/misc/use-following-state/use-following-state.ts", "../../../druids/ui/lib/color/use-theme/_context/theme-context.ts", "../../../../.yarn/cache/js-cookie-npm-3.0.5-eb6affe3f2a12fabd713579f03a08018-1-d9.zip/node_modules/js-cookie/dist/js.cookie.mjs", "../../../lib/cookie/main.ts", "../../../druids/ui/lib/dom/use-scrollbars-width/use-scrollbars-width.ts", "../../../druids/ui/lib/color/theme/theme.ts", "../../../druids/ui/lib/color/theme/theme-context.ts", "../../../lib/hooks/use-safe-state/use-safe-state.ts", "../../../lib/hooks/use-is-mounted-ref/use-is-mounted-ref.ts", "../../../druids/ui/lib/dialogs/use-elevation/use-elevation.ts", "../../../druids/ui/lib/dialogs/use-elevation/ElevationContext.tsx", "../../../druids/ui/lib/dom/get-portal-target/get-portal-target.ts", "../../../druids/ui/lib/misc/test-children/test-children.ts", "../../../druids/ui/lib/misc/use-previous/use-previous.ts", "../../../druids/ui/misc/ThemeProvider/ThemeProvider.tsx", "../../../druids/ui/nav/Link/Link.tsx", "../../../druids/ui/icons/ExternalLink/ExternalLink.tsx", "../../../druids/ui/icons/Icon/Icon.tsx", "../../../druids/ui/lib/size/use-text-context-size/use-text-context-size.ts", "../../../druids/ui/misc/Image/Image.tsx", "svg-stub:./external-link.svg?sprite", "../../../druids/ui/lib/size/size.ts", "../../../druids/ui/typography/KeyboardShortcut/KeyboardShortcut.tsx", "../../../druids/ui/typography/Keycap/Keycap.tsx", "../../../druids/ui/lib/browser/is-mac/is-mac.ts", "../../../druids/ui/typography/Text/Text.tsx", "../../../druids/ui/dialogs/Tooltip/_use-escape-dismissal.ts", "../../../druids/ui/form/Group/Group.tsx", "../../../druids/ui/form/Group/GroupContext.ts", "../../../druids/ui/form/InputText/InputFocusContext.tsx", "../../../lib/hooks/element-referer.ts", "../../../druids/ui/lib/color/custom-color-styles/custom-color-styles.ts", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/rgb/parseNumber.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/colors/named.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/rgb/parseNamed.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/rgb/parseHex.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/util/regex.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/rgb/parseRgbLegacy.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/_prepare.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/converter.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/modes.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/parse.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/rgb/parseRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/rgb/parseTransparent.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/interpolate/lerp.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/interpolate/piecewise.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/interpolate/linear.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/fixup/alpha.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/rgb/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/a98/convertA98ToXyz65.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/a98/convertXyz65ToA98.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lrgb/convertRgbToLrgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyz65/convertRgbToXyz65.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lrgb/convertLrgbToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyz65/convertXyz65ToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/a98/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/util/normalizeHue.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/fixup/hue.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/cubehelix/constants.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/cubehelix/convertRgbToCubehelix.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/cubehelix/convertCubehelixToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/difference.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/average.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/cubehelix/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lch/convertLabToLch.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lch/convertLchToLab.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyz65/constants.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/constants.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lab65/convertLab65ToXyz65.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lab65/convertLab65ToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lab65/convertXyz65ToLab65.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lab65/convertRgbToLab65.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/dlch/constants.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/dlch/convertDlchToLab65.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/dlch/convertLab65ToDlch.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/dlab/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/dlch/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hsi/convertHsiToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hsi/convertRgbToHsi.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hsi/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hsl/convertHslToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hsl/convertRgbToHsl.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/util/hue.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hsl/parseHslLegacy.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hsl/parseHsl.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hsl/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hsv/convertHsvToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hsv/convertRgbToHsv.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hsv/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hwb/convertHwbToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hwb/convertRgbToHwb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hwb/parseHwb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hwb/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/hdr/transfer.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/itp/convertItpToXyz65.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/itp/convertXyz65ToItp.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/itp/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/jab/convertXyz65ToJab.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/jab/convertJabToXyz65.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/jab/convertRgbToJab.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/jab/convertJabToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/jab/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/jch/convertJabToJch.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/jch/convertJchToJab.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/jch/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyz50/constants.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lab/convertLabToXyz50.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyz50/convertXyz50ToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lab/convertLabToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyz50/convertRgbToXyz50.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lab/convertXyz50ToLab.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lab/convertRgbToLab.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lab/parseLab.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lab/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lab65/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lch/parseLch.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lch/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lch65/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lchuv/convertLuvToLchuv.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lchuv/convertLchuvToLuv.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/luv/convertXyz50ToLuv.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/luv/convertLuvToXyz50.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lchuv/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/lrgb/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/luv/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/oklab/convertLrgbToOklab.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/oklab/convertRgbToOklab.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/oklab/convertOklabToLrgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/oklab/convertOklabToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/okhsl/helpers.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/okhsl/convertOklabToOkhsl.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/okhsl/convertOkhslToOklab.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/okhsl/modeOkhsl.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/okhsv/convertOklabToOkhsv.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/okhsv/convertOkhsvToOklab.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/okhsv/modeOkhsv.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/oklab/parseOklab.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/oklab/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/oklch/parseOklch.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/oklch/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/p3/convertP3ToXyz65.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/p3/convertXyz65ToP3.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/p3/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/prophoto/convertXyz50ToProphoto.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/prophoto/convertProphotoToXyz50.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/prophoto/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/rec2020/convertXyz65ToRec2020.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/rec2020/convertRec2020ToXyz65.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/rec2020/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyb/constants.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyb/convertRgbToXyb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyb/convertXybToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyb/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyz50/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyz65/convertXyz65ToXyz50.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyz65/convertXyz50ToXyz65.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/xyz65/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/yiq/convertRgbToYiq.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/yiq/convertYiqToRgb.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/yiq/definition.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/round.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/formatter.js", "../../../../.yarn/cache/culori-npm-4.0.1-8ccb67fde7f1cceffa930aee60eaa16d-1-d9.zip/node_modules/culori/src/index.js", "../../../druids/ui/lib/color/is-css-variable/is-css-variable.ts", "../../../druids/ui/lib/color/parse-color/parse-color.ts", "../../../druids/ui/lib/color/adjust-color-brightness/adjust-color-brightness.ts", "../../../druids/ui/internals/rum-agent.ts", "../../../lib/design-tokens/theme-colors.json", "../../../druids/ui/lib/color/theme-color/theme-color.ts", "../../../druids/ui/lib/color/get-contrasted-color/get-contrasted-color.ts", "../../../druids/ui/lib/color/get-value-for-css-var/get-value-for-css-var.ts", "../../../druids/ui/misc/LoadingIndicator/LoadingIndicator.tsx", "../../../druids/ui/pills/FeatureStatusLabel/FeatureStatusLabel.tsx", "../../../druids/ui/lib/number/formatter-options/formatter-options.ts", "../../../druids/ui/lib/number/format-unit-system/format-unit-system.ts", "../../../druids/ui/lib/number/format-big-float/format-big-float.ts", "../../../druids/ui/lib/number/format-byte-binary/format-byte-binary.ts", "../../../druids/ui/lib/number/format-byte-decimal/format-byte-decimal.ts", "../../../druids/ui/lib/number/format-duration/format-duration.ts", "../../../druids/ui/lib/number/format-float/format-float.ts", "../../../druids/ui/lib/number/format-human/format-human.ts", "../../../druids/ui/lib/number/format-integer/format-integer.ts", "../../../druids/ui/lib/number/format-rate/format-rate.ts", "../../../druids/ui/lib/number/format-number/format-number.ts", "../../../druids/ui/lib/number/formatted-max-count/formatted-max-count.ts"],
|
|
4
|
+
"sourcesContent": ["/*! Case - v1.6.2 - 2020-03-24\n* Copyright (c) 2020 Nathan Bubna; Licensed MIT, GPL */\n(function() {\n \"use strict\";\n var unicodes = function(s, prefix) {\n prefix = prefix || '';\n return s.replace(/(^|-)/g, '$1\\\\u'+prefix).replace(/,/g, '\\\\u'+prefix);\n },\n basicSymbols = unicodes('20-26,28-2F,3A-40,5B-60,7B-7E,A0-BF,D7,F7', '00'),\n baseLowerCase = 'a-z'+unicodes('DF-F6,F8-FF', '00'),\n baseUpperCase = 'A-Z'+unicodes('C0-D6,D8-DE', '00'),\n improperInTitle = 'A|An|And|As|At|But|By|En|For|If|In|Of|On|Or|The|To|Vs?\\\\.?|Via',\n regexps = function(symbols, lowers, uppers, impropers) {\n symbols = symbols || basicSymbols;\n lowers = lowers || baseLowerCase;\n uppers = uppers || baseUpperCase;\n impropers = impropers || improperInTitle;\n return {\n capitalize: new RegExp('(^|['+symbols+'])(['+lowers+'])', 'g'),\n pascal: new RegExp('(^|['+symbols+'])+(['+lowers+uppers+'])', 'g'),\n fill: new RegExp('['+symbols+']+(.|$)','g'),\n sentence: new RegExp('(^\\\\s*|[\\\\?\\\\!\\\\.]+\"?\\\\s+\"?|,\\\\s+\")(['+lowers+'])', 'g'),\n improper: new RegExp('\\\\b('+impropers+')\\\\b', 'g'),\n relax: new RegExp('([^'+uppers+'])(['+uppers+']*)(['+uppers+'])(?=[^'+uppers+']|$)', 'g'),\n upper: new RegExp('^[^'+lowers+']+$'),\n hole: /[^\\s]\\s[^\\s]/,\n apostrophe: /'/g,\n room: new RegExp('['+symbols+']')\n };\n },\n re = regexps(),\n _ = {\n re: re,\n unicodes: unicodes,\n regexps: regexps,\n types: [],\n up: String.prototype.toUpperCase,\n low: String.prototype.toLowerCase,\n cap: function(s) {\n return _.up.call(s.charAt(0))+s.slice(1);\n },\n decap: function(s) {\n return _.low.call(s.charAt(0))+s.slice(1);\n },\n deapostrophe: function(s) {\n return s.replace(re.apostrophe, '');\n },\n fill: function(s, fill, deapostrophe) {\n if (fill != null) {\n s = s.replace(re.fill, function(m, next) {\n return next ? fill + next : '';\n });\n }\n if (deapostrophe) {\n s = _.deapostrophe(s);\n }\n return s;\n },\n prep: function(s, fill, pascal, upper) {\n s = s == null ? '' : s + '';// force to string\n if (!upper && re.upper.test(s)) {\n s = _.low.call(s);\n }\n if (!fill && !re.hole.test(s)) {\n var holey = _.fill(s, ' ');\n if (re.hole.test(holey)) {\n s = holey;\n }\n }\n if (!pascal && !re.room.test(s)) {\n s = s.replace(re.relax, _.relax);\n }\n return s;\n },\n relax: function(m, before, acronym, caps) {\n return before + ' ' + (acronym ? acronym+' ' : '') + caps;\n }\n },\n Case = {\n _: _,\n of: function(s) {\n for (var i=0,m=_.types.length; i<m; i++) {\n if (Case[_.types[i]].apply(Case, arguments) === s){ return _.types[i]; }\n }\n },\n flip: function(s) {\n return s.replace(/\\w/g, function(l) {\n return (l == _.up.call(l) ? _.low : _.up).call(l);\n });\n },\n random: function(s) {\n return s.replace(/\\w/g, function(l) {\n return (Math.round(Math.random()) ? _.up : _.low).call(l);\n });\n },\n type: function(type, fn) {\n Case[type] = fn;\n _.types.push(type);\n }\n },\n types = {\n lower: function(s, fill, deapostrophe) {\n return _.fill(_.low.call(_.prep(s, fill)), fill, deapostrophe);\n },\n snake: function(s) {\n return Case.lower(s, '_', true);\n },\n constant: function(s) {\n return Case.upper(s, '_', true);\n },\n camel: function(s) {\n return _.decap(Case.pascal(s));\n },\n kebab: function(s) {\n return Case.lower(s, '-', true);\n },\n upper: function(s, fill, deapostrophe) {\n return _.fill(_.up.call(_.prep(s, fill, false, true)), fill, deapostrophe);\n },\n capital: function(s, fill, deapostrophe) {\n return _.fill(_.prep(s).replace(re.capitalize, function(m, border, letter) {\n return border+_.up.call(letter);\n }), fill, deapostrophe);\n },\n header: function(s) {\n return Case.capital(s, '-', true);\n },\n pascal: function(s) {\n return _.fill(_.prep(s, false, true).replace(re.pascal, function(m, border, letter) {\n return _.up.call(letter);\n }), '', true);\n },\n title: function(s) {\n return Case.capital(s).replace(re.improper, function(small, p, i, s) {\n return i > 0 && i < s.lastIndexOf(' ') ? _.low.call(small) : small;\n });\n },\n sentence: function(s, names, abbreviations) {\n s = Case.lower(s).replace(re.sentence, function(m, prelude, letter) {\n return prelude + _.up.call(letter);\n });\n if (names) {\n names.forEach(function(name) {\n s = s.replace(new RegExp('\\\\b'+Case.lower(name)+'\\\\b', \"g\"), _.cap);\n });\n }\n if (abbreviations) {\n abbreviations.forEach(function(abbr) {\n s = s.replace(new RegExp('(\\\\b'+Case.lower(abbr)+'\\\\. +)(\\\\w)'), function(m, abbrAndSpace, letter) {\n return abbrAndSpace + _.low.call(letter);\n });\n });\n }\n return s;\n }\n };\n\n // TODO: Remove \"squish\" in a future breaking release.\n types.squish = types.pascal;\n \n // Allow import default\n Case.default = Case;\n\n for (var type in types) {\n Case.type(type, types[type]);\n }\n // export Case (AMD, commonjs, or global)\n var define = typeof define === \"function\" ? define : function(){};\n define(typeof module === \"object\" && module.exports ? module.exports = Case : this.Case = Case);\n\n}).call(this);\n", "/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n", "/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.1\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n", "/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n", "var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n", "var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n", "var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n", "var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n", "var toInteger = require('./toInteger');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\nfunction before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n}\n\nmodule.exports = before;\n", "var before = require('./before');\n\n/**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\nfunction once(func) {\n return before(2, func);\n}\n\nmodule.exports = once;\n", "/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n", "", "\"use strict\";\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar BrowserInfo = /** @class */ (function () {\n function BrowserInfo(name, version, os) {\n this.name = name;\n this.version = version;\n this.os = os;\n }\n return BrowserInfo;\n}());\nexports.BrowserInfo = BrowserInfo;\nvar NodeInfo = /** @class */ (function () {\n function NodeInfo(version) {\n this.version = version;\n this.name = 'node';\n this.os = process.platform;\n }\n return NodeInfo;\n}());\nexports.NodeInfo = NodeInfo;\nvar BotInfo = /** @class */ (function () {\n function BotInfo() {\n this.bot = true; // NOTE: deprecated test name instead\n this.name = 'bot';\n this.version = null;\n this.os = null;\n }\n return BotInfo;\n}());\nexports.BotInfo = BotInfo;\n// tslint:disable-next-line:max-line-length\nvar SEARCHBOX_UA_REGEX = /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/;\nvar SEARCHBOT_OS_REGEX = /(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves\\/Teoma)|(ia_archiver)/;\nvar REQUIRED_VERSION_PARTS = 3;\nvar userAgentRules = [\n ['aol', /AOLShield\\/([0-9\\._]+)/],\n ['edge', /Edge\\/([0-9\\._]+)/],\n ['edge-ios', /EdgiOS\\/([0-9\\._]+)/],\n ['yandexbrowser', /YaBrowser\\/([0-9\\._]+)/],\n ['vivaldi', /Vivaldi\\/([0-9\\.]+)/],\n ['kakaotalk', /KAKAOTALK\\s([0-9\\.]+)/],\n ['samsung', /SamsungBrowser\\/([0-9\\.]+)/],\n ['silk', /\\bSilk\\/([0-9._-]+)\\b/],\n ['miui', /MiuiBrowser\\/([0-9\\.]+)$/],\n ['beaker', /BeakerBrowser\\/([0-9\\.]+)/],\n ['edge-chromium', /Edg\\/([0-9\\.]+)/],\n [\n 'chromium-webview',\n /(?!Chrom.*OPR)wv\\).*Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/,\n ],\n ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n ['phantomjs', /PhantomJS\\/([0-9\\.]+)(:?\\s|$)/],\n ['crios', /CriOS\\/([0-9\\.]+)(:?\\s|$)/],\n ['firefox', /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n ['fxios', /FxiOS\\/([0-9\\.]+)/],\n ['opera-mini', /Opera Mini.*Version\\/([0-9\\.]+)/],\n ['opera', /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n ['opera', /OPR\\/([0-9\\.]+)(:?\\s|$)/],\n ['ie', /Trident\\/7\\.0.*rv\\:([0-9\\.]+).*\\).*Gecko$/],\n ['ie', /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n ['ie', /MSIE\\s(7\\.0)/],\n ['bb10', /BB10;\\sTouch.*Version\\/([0-9\\.]+)/],\n ['android', /Android\\s([0-9\\.]+)/],\n ['ios', /Version\\/([0-9\\._]+).*Mobile.*Safari.*/],\n ['safari', /Version\\/([0-9\\._]+).*Safari/],\n ['facebook', /FBAV\\/([0-9\\.]+)/],\n ['instagram', /Instagram\\s([0-9\\.]+)/],\n ['ios-webview', /AppleWebKit\\/([0-9\\.]+).*Mobile/],\n ['ios-webview', /AppleWebKit\\/([0-9\\.]+).*Gecko\\)$/],\n ['searchbot', SEARCHBOX_UA_REGEX],\n];\nvar operatingSystemRules = [\n ['iOS', /iP(hone|od|ad)/],\n ['Android OS', /Android/],\n ['BlackBerry OS', /BlackBerry|BB10/],\n ['Windows Mobile', /IEMobile/],\n ['Amazon OS', /Kindle/],\n ['Windows 3.11', /Win16/],\n ['Windows 95', /(Windows 95)|(Win95)|(Windows_95)/],\n ['Windows 98', /(Windows 98)|(Win98)/],\n ['Windows 2000', /(Windows NT 5.0)|(Windows 2000)/],\n ['Windows XP', /(Windows NT 5.1)|(Windows XP)/],\n ['Windows Server 2003', /(Windows NT 5.2)/],\n ['Windows Vista', /(Windows NT 6.0)/],\n ['Windows 7', /(Windows NT 6.1)/],\n ['Windows 8', /(Windows NT 6.2)/],\n ['Windows 8.1', /(Windows NT 6.3)/],\n ['Windows 10', /(Windows NT 10.0)/],\n ['Windows ME', /Windows ME/],\n ['Open BSD', /OpenBSD/],\n ['Sun OS', /SunOS/],\n ['Chrome OS', /CrOS/],\n ['Linux', /(Linux)|(X11)/],\n ['Mac OS', /(Mac_PowerPC)|(Macintosh)/],\n ['QNX', /QNX/],\n ['BeOS', /BeOS/],\n ['OS/2', /OS\\/2/],\n ['Search Bot', SEARCHBOT_OS_REGEX],\n];\nfunction detect(userAgent) {\n if (!!userAgent) {\n return parseUserAgent(userAgent);\n }\n if (typeof navigator !== 'undefined') {\n return parseUserAgent(navigator.userAgent);\n }\n return getNodeVersion();\n}\nexports.detect = detect;\nfunction parseUserAgent(ua) {\n // opted for using reduce here rather than Array#first with a regex.test call\n // this is primarily because using the reduce we only perform the regex\n // execution once rather than once for the test and for the exec again below\n // probably something that needs to be benchmarked though\n var matchedRule = ua !== '' &&\n userAgentRules.reduce(function (matched, _a) {\n var browser = _a[0], regex = _a[1];\n if (matched) {\n return matched;\n }\n var uaMatch = regex.exec(ua);\n return !!uaMatch && [browser, uaMatch];\n }, false);\n if (!matchedRule) {\n return null;\n }\n var name = matchedRule[0], match = matchedRule[1];\n if (name === 'searchbot') {\n return new BotInfo();\n }\n var versionParts = match[1] && match[1].split(/[._]/).slice(0, 3);\n if (versionParts) {\n if (versionParts.length < REQUIRED_VERSION_PARTS) {\n versionParts = __spreadArrays(versionParts, createVersionParts(REQUIRED_VERSION_PARTS - versionParts.length));\n }\n }\n else {\n versionParts = [];\n }\n return new BrowserInfo(name, versionParts.join('.'), detectOS(ua));\n}\nexports.parseUserAgent = parseUserAgent;\nfunction detectOS(ua) {\n for (var ii = 0, count = operatingSystemRules.length; ii < count; ii++) {\n var _a = operatingSystemRules[ii], os = _a[0], regex = _a[1];\n var match = regex.test(ua);\n if (match) {\n return os;\n }\n }\n return null;\n}\nexports.detectOS = detectOS;\nfunction getNodeVersion() {\n var isNode = typeof process !== 'undefined' && process.version;\n return isNode ? new NodeInfo(process.version.slice(1)) : null;\n}\nexports.getNodeVersion = getNodeVersion;\nfunction createVersionParts(count) {\n var output = [];\n for (var ii = 0; ii < count; ii++) {\n output.push('0');\n }\n return output;\n}\n", "", "", "", "", "import Case from 'case';\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\n\nimport type { ReferenceOnlyTooltipProps } from '#dialogs/Tooltip';\nimport { Tooltip } from '#dialogs/Tooltip';\nimport { useGroupContext } from '#form/Group';\nimport { useInputFocusContext } from '#form/InputText/InputFocusContext';\nimport type { IconComponent, IconProps } from '#icons/Icon';\nimport { useComponentWarning } from '#internals/component-warning';\nimport { focusVisible } from '#lib/accessibility/focusVisible/focus-visible';\nimport type { CustomColorProps } from '#lib/color/custom-color-styles';\nimport { useCustomColorStyles } from '#lib/color/custom-color-styles';\nimport { isBright } from '#lib/color/get-contrasted-color';\nimport type {\n MarginProps,\n PaddingProps,\n LockupProps,\n ExtraDOMProps,\n} from '#lib/components-helpers';\nimport { handleHelpersClassNames } from '#lib/components-helpers';\nimport { useTextContextSize } from '#lib/size/use-text-context-size';\nimport { LoadingIndicator } from '#misc/LoadingIndicator';\nimport type { LinkProps } from '#nav/Link';\nimport { Link } from '#nav/Link';\nimport { FeatureStatusLabel } from '#pills/FeatureStatusLabel';\nimport type { FEATURE_STATUSES } from '#pills/FeatureStatusLabel';\nimport { KeyboardShortcut } from '#typography/KeyboardShortcut';\nimport type { KeyboardShortcutProps } from '#typography/KeyboardShortcut';\nimport { keycapName } from '#typography/Keycap';\nimport type { LEVELS, FORM_SIZES } from '#ui-constants';\nimport { ORDERED_FORM_SIZES } from '#ui-constants';\n\nimport './button.less';\n\nconst BLOCK = 'druids_form_button';\n\nconst formatShortcutForA11y = (keys: Array<string[] | string>): string => {\n return keys\n .map((key) => {\n if (Array.isArray(key)) {\n return key.map(keycapName).join(' ');\n }\n return keycapName(key);\n })\n .join(' ');\n};\n\nexport type ButtonPickedProps = Pick<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n | 'id'\n | 'type'\n | 'onClick'\n | 'onAuxClick'\n | 'onMouseEnter'\n | 'onMouseLeave'\n | 'onMouseOver'\n | 'onMouseOut'\n | 'onMouseDown'\n | 'onFocus'\n | 'onKeyDown'\n | 'onKeyUp'\n | 'onKeyPress'\n | 'onBlur'\n | 'autoFocus'\n | 'tabIndex'\n | 'form'\n | 'style'\n | 'translate'\n>;\n\nconst getIconElement = ({\n icon: Icon,\n position,\n isScaledDown,\n size,\n hasHoveredState,\n iconProps,\n isSpaced,\n}: {\n icon: IconComponent | null;\n position: 'left' | 'right';\n isScaledDown?: boolean;\n size?: FORM_SIZES;\n hasHoveredState?: boolean;\n iconProps?: Partial<IconProps>;\n isSpaced?: boolean;\n}) =>\n Icon ? (\n <div className={`${BLOCK}__icon-wrapper`}>\n <Icon\n title=\"\"\n isScaledDown={isScaledDown}\n size={size}\n isHovered={hasHoveredState}\n // Can override the above, should not override the className\n {...iconProps}\n className={classNames(\n `${BLOCK}__icon`,\n iconProps?.className,\n isSpaced && `${BLOCK}__icon--position-${position}`,\n )}\n />\n </div>\n ) : null;\nexport interface ButtonProps\n extends ButtonPickedProps,\n Omit<LinkProps, 'children' | 'hasExternalIcon' | 'isExternal'>,\n LockupProps,\n MarginProps,\n ExtraDOMProps {\n /** Size, according to standard \u201CT-shirt\u201D sizes */\n size?: FORM_SIZES;\n\n /** Keyboard shortcut keys to display */\n shortcut?: KeyboardShortcutProps['keys'];\n\n /** Where to display the keyboard shortcut */\n shortcutDisplay?: 'inline' | 'tooltip';\n\n /** Does the Button sit atop of a dark or colored background, regardless of light or dark theme? */\n isShade?: boolean;\n\n /** DRUIDS [Icon](../../icons) or [IntegrationLogo](../misc/IntegrationLogo#as-icon-component) to display inside the Button */\n icon?: IconComponent | null;\n\n /** DRUIDS [Icon](../../icons) or [IntegrationLogo](../misc/IntegrationLogo#as-icon-component) to display inside the Button. It\u2019s only appropriate to use icons on the right to suggest forward motion, like \u201CGo,\u201D \u201CNext,\u201D \u201CContinue,\u201D etc.) */\n iconRight?: IconComponent | null;\n\n /** Should the Button have a softer full-color background? */\n isSoft?: boolean;\n\n /** Should the Button have its border removed and be rendered in a more minimalist style? */\n isBorderless?: boolean;\n\n /** A more extreme version of `isBorderless`: the same in the non-hovered state, but with no background color applied on hover. (It\u2019s named to discourage casual use. Use it only in special situations where a background on hover is truly inappropriate.) */\n isDangerouslyNaked?: boolean;\n\n /** @deprecated Equivalent to `isDangerouslyNaked`. **Will be removed once all existing uses are migrated to either `isBorderless` or `isDangerouslyNaked`. */\n isNaked?: boolean;\n\n /**\n * Global horizontal padding, will be overridden by specific padding properties.\n * To be used only with `isDangerouslyNaked` or `isNaked` props.\n */\n paddingX?: PaddingProps['paddingX'];\n /**\n * Left padding.\n * To be used only with `isDangerouslyNaked` or `isNaked` props.\n */\n paddingLeft?: PaddingProps['paddingLeft'];\n /**\n * Right padding.\n * To be used only with `isDangerouslyNaked` or `isNaked` props.\n */\n paddingRight?: PaddingProps['paddingRight'];\n\n /** Should the Button have a full-color background in the base state? (If combined with `isDangerouslyNaked` or `isNaked`, its text \u2014 not its background \u2014 will be colored in the base state.) */\n isPrimary?: boolean;\n\n /** Should the Button expand to fill 100% of its container\u2019s width? */\n isFullWidth?: boolean;\n\n /** Has the Button triggered some other element which is currently open (like a `<Popover>`)? */\n isActive?: boolean;\n\n /** Should hover styling be forced? (Should be used very rarely \u2014 only when the styling must correspond with the state of another element which only can be controlled with JS. Otherwise, this is handled automatically by CSS and the `onPointerEnter`/`onPointerLeave` events.) */\n isHovered?: boolean;\n\n /** Apply disabled styling and remove interactions */\n isDisabled?: boolean;\n\n /** Is the `<LoadingIndicator>` visible? */\n isLoading?: boolean;\n\n /** Should a `<FeatureStatusLabel>` appear after the content? */\n featureStatus?: FEATURE_STATUSES;\n\n /** HTML `title` attribute to display on hover */\n title?: string;\n\n /** HTML `aria-label`. (Defaults to same value as `label` if not set.) */\n ariaLabel?: string;\n\n /** Text to display inside the Button */\n label?: string;\n\n /** Should the `label` text be title-cased? (Set it to `false` when specific casing like \u201Cp99\u201D or \u201Ctext/xml\u201D must be preserved, or when the Button has long, sentence-like text.) */\n isTitleCased?: boolean;\n\n /** Is the text truncated with an ellipsis if it can\u2019t fit in the available space? */\n hasEllipsis?: boolean;\n\n /**\n * Should the `label` text be truncated with an ellipsis if it can\u2019t fit\n * in the available space and display a Tooltip on hover if truncated?\n */\n hasEllipsisWithTooltip?: boolean;\n\n /** Props to pass to the [Icon](../../icons)s */\n iconProps?: Partial<IconProps>;\n\n /** [Ref](https://reactjs.org/docs/refs-and-the-dom.html) for the element */\n innerRef?: React.Ref<HTMLButtonElement>;\n\n /** Extra HTML class attribute(s) to apply to the overall Button */\n className?: string;\n\n /** Usage and color */\n level?: LEVELS | 'featured' | 'custom';\n\n /** Custom styles for the Button with `level=\"custom\"`. */\n customStyle?: CustomColorProps;\n\n /** Does the Button open in a new tab? Setting it to `true` automatically adds `target=\"_blank\"` and `rel=\"noopener noreferrer\"` (or `rel=\"noopener\"` if on the same website). Note that, unlike the `<Link>` component, the `<ExternalIcon>` does not appear when `isExternal={true}`. */\n isExternal?: boolean;\n\n /** Can the Button be quiet in an appropriate context? */\n canBeQuiet?: boolean;\n\n /** Tooltip to display over the Button when hovered or focused */\n tooltip?: ReferenceOnlyTooltipProps['content'];\n\n /** Optional props to pass to the `<Tooltip>` component. */\n tooltipProps?: Omit<\n ReferenceOnlyTooltipProps,\n 'content' | 'reference' | 'shortcut' | 'shortcutProps'\n >;\n}\n\n/**\n * Interactive element for triggering a wide range of actions, from submitting forms to navigating between pages\n *\n * [View in DRUIDS style guide \u2197](https://druids.us1.prod.dog/components/form/Button?ref=jsdoc)\n */\nexport const Button = ({\n className,\n size: sizeProp,\n component,\n href,\n isExternal,\n level = 'default',\n icon: iconProp = null,\n iconRight: iconRightProp = null,\n isPrimary,\n isBorderless,\n isDangerouslyNaked,\n isNaked,\n isSoft,\n isShade,\n isFullWidth,\n isActive,\n isHovered,\n isLoading,\n isDisabled: isDisabledProp,\n featureStatus,\n type = 'button',\n title,\n label,\n isTitleCased = true,\n canBeQuiet = true,\n autoFocus,\n iconProps,\n hasEllipsisWithTooltip,\n hasEllipsis = hasEllipsisWithTooltip,\n innerRef,\n ariaAttrs,\n dataAttrs,\n ariaLabel = ariaAttrs?.['aria-label'],\n paddingX,\n paddingLeft,\n paddingRight,\n customStyle,\n shortcut,\n shortcutDisplay: shortcutDisplayProp = 'tooltip',\n tooltip,\n tooltipProps,\n ...otherProps\n}: ButtonProps): React.ReactNode => {\n useComponentWarning({\n componentName: 'Button',\n message:\n 'In order to use `customStyle` you must set `level` to `custom`.',\n shouldWarn: Boolean(level !== 'custom' && customStyle),\n });\n\n useComponentWarning({\n componentName: 'Button',\n message:\n \"Don't use `customStyle` with `isBorderless`, `isPrimary`, or `isDangerouslyNaked`.\",\n shouldWarn: Boolean(\n (isBorderless || isPrimary || isDangerouslyNaked) &&\n level === 'custom',\n ),\n });\n\n useComponentWarning({\n componentName: 'Button',\n message:\n \"Don't use `isBorderless` with `isDangerouslyNaked` or `isNaked`. `isBorderless` will take precedence.\",\n shouldWarn: Boolean(isBorderless && (isDangerouslyNaked || isNaked)),\n });\n const isDisabled = isDisabledProp || isLoading;\n const [isHoveredByMouse, setIsHoveredByMouse] = React.useState(false);\n const [isActiveByMouse, setIsActiveByMouse] = React.useState(false);\n const hasHoveredState = isHovered || isHoveredByMouse;\n const localRef = React.useRef<HTMLButtonElement | null>(null);\n const ref = innerRef || localRef;\n\n // When we disable a button, we remove the events from it, which would\n // otherwise reset the `isHoveredByMouse` and `isActiveByMouse` state, so we want to adjust it\n // separately in an effect instead.\n React.useEffect(() => {\n if (!isDisabled) {\n return;\n }\n setIsHoveredByMouse(false);\n setIsActiveByMouse(false);\n }, [isDisabled]);\n\n const hasPaddings = isDangerouslyNaked || isNaked;\n const [helperClassNames, other] = handleHelpersClassNames(\n {\n ...otherProps,\n ...(hasPaddings ? { paddingX, paddingLeft, paddingRight } : {}),\n },\n ['margin', 'padding', 'lockups'],\n );\n\n const { size: groupContextSize } = useGroupContext();\n\n // When InputText has a Button in before/after content, we need to capture the focus state\n const { isFocused } = useInputFocusContext();\n // Using `??` to allow setting an explicit `false` to `isPrimary`\n const isPrimaryOrFocusedContext = isPrimary ?? isFocused;\n const hasActiveState = isActive || isActiveByMouse;\n const shouldIconBeKnockedOut =\n (isPrimaryOrFocusedContext && !isBorderless) ||\n (isBorderless && hasActiveState);\n\n const contextSize = useTextContextSize('md', ORDERED_FORM_SIZES);\n const size = groupContextSize || sizeProp || contextSize;\n\n let isScaledDown = true;\n if ((isBorderless || isDangerouslyNaked || isNaked) && !label) {\n isScaledDown = false;\n }\n\n const isSpaced = !!label;\n\n let iconLeft = getIconElement({\n icon: iconProp,\n position: 'left',\n isScaledDown,\n size,\n hasHoveredState: shouldIconBeKnockedOut,\n iconProps,\n isSpaced,\n });\n const iconRight = getIconElement({\n icon: iconRightProp,\n position: 'right',\n isScaledDown,\n size,\n hasHoveredState: shouldIconBeKnockedOut,\n iconProps,\n isSpaced,\n });\n\n // Loading indicator is always on the left and replaces the icon\n if (isLoading) {\n iconLeft = (\n <div className={`${BLOCK}__icon-wrapper`}>\n <LoadingIndicator\n size={size}\n className={classNames(\n `${BLOCK}__loading-indicator`,\n isSpaced && `${BLOCK}__icon--position-left`,\n )}\n />\n </div>\n );\n }\n\n // Don't apply title-casing to an already all-caps label or when it has been disabled explicitly\n let labelWithCorrectedCase = label;\n if (label) {\n const labelCase = Case.of(label);\n if (labelCase !== 'constant' && labelCase !== 'upper' && isTitleCased) {\n labelWithCorrectedCase = Case.title(label);\n }\n }\n\n const hasIconOnly = !label && !featureStatus;\n // Icon-only buttons should always show shortcuts in tooltip, not inline\n const shortcutDisplay =\n hasIconOnly && shortcutDisplayProp === 'inline'\n ? 'tooltip'\n : shortcutDisplayProp;\n\n const shouldHaveTooltip =\n (shortcut && shortcutDisplay === 'tooltip') ||\n tooltip ||\n // We should always render the tooltip if the content can overflow,\n // we should not switch the JSX dynamically, as it will lead to\n // the button remounting.\n hasEllipsisWithTooltip;\n\n const hasTooltipHelper = Boolean(isDisabled && shouldHaveTooltip);\n\n // We only need to assign the id if we have a tooltip helper, as it will be\n // used to associate the tooltip with the button.\n let contentSpanId: string | undefined = React.useId();\n if (!hasTooltipHelper) {\n contentSpanId = undefined;\n }\n\n const inlineShortcut =\n shortcutDisplay === 'inline' && shortcut ? (\n <KeyboardShortcut\n className={`${BLOCK}__inline-shortcut`}\n keys={shortcut}\n size={size}\n isBorderless={isSoft || isPrimary}\n ariaAttrs={{ 'aria-hidden': true }}\n variant={isDisabled ? 'disabled' : 'default'}\n />\n ) : null;\n\n const contentRef = React.useRef<HTMLSpanElement | null>(null);\n\n const nonIconContent: React.ReactNode =\n hasEllipsis && labelWithCorrectedCase ? (\n <span\n id={contentSpanId}\n className={`${BLOCK}__content`}\n ref={contentRef}\n >\n {labelWithCorrectedCase}\n {inlineShortcut}\n </span>\n ) : hasTooltipHelper ? (\n <span id={contentSpanId}>{labelWithCorrectedCase}</span>\n ) : (\n <>\n {labelWithCorrectedCase}\n {inlineShortcut}\n </>\n );\n\n const customStyles = useCustomColorStyles({\n ref: ref as React.MutableRefObject<HTMLButtonElement | null>,\n componentName: 'button',\n textColor: customStyle?.textColor,\n backgroundColor: customStyle?.backgroundColor,\n borderColor: customStyle?.borderColor,\n isEnabled: level === 'custom',\n hasTextHoverOnWhite: true,\n });\n\n const isCustomBgDark = Boolean(\n customStyles['--button-custom-background-color'] &&\n !isBright(customStyles['--button-custom-background-color']),\n );\n\n const featureStatusLabel = featureStatus ? (\n <FeatureStatusLabel\n status={featureStatus}\n isKnockout={\n (isPrimaryOrFocusedContext &&\n !isBorderless &&\n !isDangerouslyNaked &&\n !isNaked) ||\n isShade ||\n isCustomBgDark\n }\n isDisabled={isDisabled}\n className={`${BLOCK}__feature-status-label`}\n />\n ) : null;\n\n // When we have ellipsis, we need to use spacers instead of margins,\n // so they could collapse when there is not enough space.\n const leftSpacer =\n hasEllipsis && iconLeft ? (\n <span className={`${BLOCK}__left-spacer`} />\n ) : null;\n const rightSpacer =\n hasEllipsis && iconRight ? (\n <span className={`${BLOCK}__right-spacer`} />\n ) : null;\n const featureSpacer =\n hasEllipsis && featureStatusLabel ? (\n <span className={`${BLOCK}__feature-spacer`} />\n ) : null;\n\n focusVisible();\n\n const shortcutText =\n shortcut && shortcutDisplay === 'inline'\n ? ` ${formatShortcutForA11y(shortcut)}`\n : '';\n // We only need to set the min-width if we have ellipsis and icons.\n const hasIconMinWidth =\n !hasIconOnly && hasEllipsis && (iconLeft || iconRight);\n const hasTwoIconsMinWidth =\n !hasIconOnly && hasEllipsis && iconLeft && iconRight;\n\n // Check if the tooltip will be used as the aria-label\n // (no explicit ariaLabel, no label text, but tooltip is a string)\n const isTooltipUsedAsAriaLabel =\n !ariaLabel && !labelWithCorrectedCase && typeof tooltip === 'string';\n\n const props = {\n ...ariaAttrs,\n ...dataAttrs,\n 'aria-label':\n ariaLabel ??\n // If the label is an empty string, don't pass it to aria-label\n (labelWithCorrectedCase\n ? `${labelWithCorrectedCase}${shortcutText}`\n : isTooltipUsedAsAriaLabel\n ? `${tooltip}${shortcutText}`\n : undefined),\n className: classNames(\n BLOCK,\n `${BLOCK}--${size}`,\n `${BLOCK}--${level}`,\n helperClassNames,\n {\n [`${BLOCK}--has-icon-only`]: hasIconOnly,\n [`${BLOCK}--has-ellipsis`]: hasEllipsis,\n [`${BLOCK}--has-icon-min-width`]: hasIconMinWidth,\n [`${BLOCK}--has-two-icons-min-width`]: hasTwoIconsMinWidth,\n [`${BLOCK}--is-borderless`]: isBorderless || isShade,\n [`${BLOCK}--is-naked`]:\n (isDangerouslyNaked || isNaked) &&\n !isShade &&\n !isBorderless,\n [`${BLOCK}--is-primary`]: isPrimaryOrFocusedContext,\n [`${BLOCK}--is-soft`]: isSoft,\n [`${BLOCK}--is-shade`]: isShade,\n [`${BLOCK}--is-full-width`]: isFullWidth,\n [`${BLOCK}--is-active`]: isActive,\n [`${BLOCK}--is-hovered`]: hasHoveredState,\n [`${BLOCK}--is-disabled`]: isDisabled,\n [`${BLOCK}--is-never-quiet`]: !canBeQuiet,\n },\n className,\n ),\n title,\n type,\n disabled: isDisabled,\n autoFocus,\n onPointerEnter: !isDisabled\n ? () => setIsHoveredByMouse(true)\n : undefined,\n onPointerLeave: !isDisabled\n ? () => {\n setIsHoveredByMouse(false);\n setIsActiveByMouse(false);\n }\n : undefined,\n onPointerDown: !isDisabled ? () => setIsActiveByMouse(true) : undefined,\n onPointerUp: !isDisabled ? () => setIsActiveByMouse(false) : undefined,\n onPointerCancel: !isDisabled\n ? () => setIsActiveByMouse(false)\n : undefined,\n style: { ...other.style, ...(level === 'custom' ? customStyles : {}) },\n ...other,\n };\n\n const disabledTooltipHelperRef = React.useRef<HTMLSpanElement | null>(null);\n\n // When the button is disabled, it does not receive any pointer events,\n // so we need to add a tooltip helper element to make the tooltip still\n // available both on hover and focus.\n const disabledTooltipHelper = hasTooltipHelper ? (\n <span\n role=\"button\"\n tabIndex={0}\n aria-label={ariaLabel}\n // If no explicit aria-label is provided, we use the id of the\n // content span to provide the label to the helper.\n aria-labelledby={!ariaLabel ? contentSpanId : undefined}\n // We should not add `aria-disabled`, as then the button would not\n // be read. When inside a disabled button, it will be read\n // as \u201Cdimmed\u201D already.\n ref={disabledTooltipHelperRef}\n className={`${BLOCK}__disabled-tooltip-helper`}\n />\n ) : null;\n\n const buttonContent = (\n <>\n {iconLeft}\n {leftSpacer}\n {nonIconContent}\n {rightSpacer}\n {iconRight}\n {featureSpacer}\n {featureStatusLabel}\n {disabledTooltipHelper}\n </>\n );\n\n const buttonElement =\n (href || component) && !isDisabled ? (\n <Link\n href={href}\n component={component}\n linkType=\"no-class-names\"\n isExternal={isExternal}\n hasExternalIcon={false}\n innerRef={ref}\n {...props}\n >\n {buttonContent}\n </Link>\n ) : (\n <button ref={ref} {...props}>\n {buttonContent}\n </button>\n );\n\n // Ideally, we would want to not update React state when overflow state\n // changes, but currently it is not possible to do so with Tippy.\n const [isOverflowing, setIsOverflowing] = React.useState(false);\n React.useEffect(\n function observeButtonContentOverflow() {\n const contentNode = contentRef.current;\n if (!contentNode || !hasEllipsisWithTooltip) {\n return;\n }\n const contentObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const isNowOverflowing =\n Math.ceil(entry.contentRect.width) <\n (entry.target as HTMLElement).scrollWidth;\n setIsOverflowing(isNowOverflowing);\n }\n });\n contentObserver.observe(contentNode);\n return () => {\n contentObserver.disconnect();\n };\n },\n [hasEllipsisWithTooltip],\n );\n\n let tooltipContent = tooltip;\n if (isOverflowing) {\n // We are adding the label to the tooltip as aria-hidden, so it won't\n // be read by screen readers as it will duplicate the already present\n // but overflown label.\n tooltipContent = (\n <>\n <div aria-hidden>{labelWithCorrectedCase}</div>\n {tooltip}\n </>\n );\n } else if (isTooltipUsedAsAriaLabel) {\n // When the tooltip is used as the aria-label, wrap it in aria-hidden\n // to prevent screen readers from reading it twice.\n tooltipContent = (\n <div className={`${BLOCK}__tooltip-content`} aria-hidden>\n {tooltip}\n </div>\n );\n }\n\n if (shouldHaveTooltip) {\n return (\n <Tooltip\n {...tooltipProps}\n shortcut={shortcutDisplay === 'tooltip' ? shortcut : undefined}\n shortcutProps={isDisabled ? { variant: 'disabled' } : undefined}\n content={tooltipContent}\n reference={\n hasTooltipHelper\n ? disabledTooltipHelperRef\n : (ref as React.RefObject<Element | null>)\n }\n >\n {buttonElement}\n </Tooltip>\n );\n }\n\n return buttonElement;\n};\n", "/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array<Array>} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array<ResizeObserverSPI>}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the <html> itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array<ResizeObservation>}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map<Element, ResizeObservation>}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n", "import isEqual from 'react-fast-compare';\nimport { useMemo, useRef } from 'react';\n\n/**\n * Similar to React.useMemo but uses deep comparison\n *\n * ```js\n * const memoizedValue = useDeepMemo(changingValue);\n * ```\n */\nexport const useDeepMemo = <T>(value: T): T => {\n const previousValueRef = useRef(value);\n\n return useMemo(() => {\n const previousValue = previousValueRef.current;\n if (isEqual(value, previousValue)) {\n return previousValue;\n }\n previousValueRef.current = value;\n return value;\n }, [value]);\n};\n", "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}", "import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}", "import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};", "var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}", "var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases \u2013 research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};", "export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};", "export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}", "export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}", "export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update \u2013 it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update \u2013 it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", "export const ROUND_ARROW =\n '<svg width=\"16\" height=\"6\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 6s1.796-.013 4.67-3.615C5.851.9 6.93.006 8 0c1.07-.006 2.148.887 3.343 2.385C14.233 6.005 16 6 16 6H0z\"></svg>';\n\nexport const BOX_CLASS = `__NAMESPACE_PREFIX__-box`;\nexport const CONTENT_CLASS = `__NAMESPACE_PREFIX__-content`;\nexport const BACKDROP_CLASS = `__NAMESPACE_PREFIX__-backdrop`;\nexport const ARROW_CLASS = `__NAMESPACE_PREFIX__-arrow`;\nexport const SVG_ARROW_CLASS = `__NAMESPACE_PREFIX__-svg-arrow`;\n\nexport const TOUCH_OPTIONS = {passive: true, capture: true};\n\nexport const TIPPY_DEFAULT_APPEND_TO = () => document.body;\n", "import {BasePlacement, Placement} from './types';\n\nexport function hasOwnProperty(\n obj: Record<string, unknown>,\n key: string\n): boolean {\n return {}.hasOwnProperty.call(obj, key);\n}\n\nexport function getValueAtIndexOrReturn<T>(\n value: T | [T | null, T | null],\n index: number,\n defaultValue: T | [T, T]\n): T {\n if (Array.isArray(value)) {\n const v = value[index];\n return v == null\n ? Array.isArray(defaultValue)\n ? defaultValue[index]\n : defaultValue\n : v;\n }\n\n return value;\n}\n\nexport function isType(value: any, type: string): boolean {\n const str = {}.toString.call(value);\n return str.indexOf('[object') === 0 && str.indexOf(`${type}]`) > -1;\n}\n\nexport function invokeWithArgsOrReturn(value: any, args: any[]): any {\n return typeof value === 'function' ? value(...args) : value;\n}\n\nexport function debounce<T>(\n fn: (arg: T) => void,\n ms: number\n): (arg: T) => void {\n // Avoid wrapping in `setTimeout` if ms is 0 anyway\n if (ms === 0) {\n return fn;\n }\n\n let timeout: any;\n\n return (arg): void => {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n fn(arg);\n }, ms);\n };\n}\n\nexport function removeProperties<T>(obj: T, keys: string[]): Partial<T> {\n const clone = {...obj};\n keys.forEach((key) => {\n delete (clone as any)[key];\n });\n return clone;\n}\n\nexport function splitBySpaces(value: string): string[] {\n return value.split(/\\s+/).filter(Boolean);\n}\n\nexport function normalizeToArray<T>(value: T | T[]): T[] {\n return ([] as T[]).concat(value);\n}\n\nexport function pushIfUnique<T>(arr: T[], value: T): void {\n if (arr.indexOf(value) === -1) {\n arr.push(value);\n }\n}\n\nexport function appendPxIfNumber(value: string | number): string {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport function unique<T>(arr: T[]): T[] {\n return arr.filter((item, index) => arr.indexOf(item) === index);\n}\n\nexport function getNumber(value: string | number): number {\n return typeof value === 'number' ? value : parseFloat(value);\n}\n\nexport function getBasePlacement(placement: Placement): BasePlacement {\n return placement.split('-')[0] as BasePlacement;\n}\n\nexport function arrayFrom(value: ArrayLike<any>): any[] {\n return [].slice.call(value);\n}\n\nexport function removeUndefinedProps(\n obj: Record<string, unknown>\n): Partial<Record<string, unknown>> {\n return Object.keys(obj).reduce((acc, key) => {\n if (obj[key] !== undefined) {\n (acc as any)[key] = obj[key];\n }\n\n return acc;\n }, {});\n}\n", "import {ReferenceElement, Targets} from './types';\nimport {PopperTreeData} from './types-internal';\nimport {arrayFrom, isType, normalizeToArray, getBasePlacement} from './utils';\n\nexport function div(): HTMLDivElement {\n return document.createElement('div');\n}\n\nexport function isElement(value: unknown): value is Element | DocumentFragment {\n return ['Element', 'Fragment'].some((type) => isType(value, type));\n}\n\nexport function isNodeList(value: unknown): value is NodeList {\n return isType(value, 'NodeList');\n}\n\nexport function isMouseEvent(value: unknown): value is MouseEvent {\n return isType(value, 'MouseEvent');\n}\n\nexport function isReferenceElement(value: any): value is ReferenceElement {\n return !!(value && value._tippy && value._tippy.reference === value);\n}\n\nexport function getArrayOfElements(value: Targets): Element[] {\n if (isElement(value)) {\n return [value];\n }\n\n if (isNodeList(value)) {\n return arrayFrom(value);\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return arrayFrom(document.querySelectorAll(value));\n}\n\nexport function setTransitionDuration(\n els: (HTMLDivElement | null)[],\n value: number\n): void {\n els.forEach((el) => {\n if (el) {\n el.style.transitionDuration = `${value}ms`;\n }\n });\n}\n\nexport function setVisibilityState(\n els: (HTMLDivElement | null)[],\n state: 'visible' | 'hidden'\n): void {\n els.forEach((el) => {\n if (el) {\n el.setAttribute('data-state', state);\n }\n });\n}\n\nexport function getOwnerDocument(\n elementOrElements: Element | Element[]\n): Document {\n const [element] = normalizeToArray(elementOrElements);\n\n // Elements created via a <template> have an ownerDocument with no reference to the body\n return element?.ownerDocument?.body ? element.ownerDocument : document;\n}\n\nexport function isCursorOutsideInteractiveBorder(\n popperTreeData: PopperTreeData[],\n event: MouseEvent\n): boolean {\n const {clientX, clientY} = event;\n\n return popperTreeData.every(({popperRect, popperState, props}) => {\n const {interactiveBorder} = props;\n const basePlacement = getBasePlacement(popperState.placement);\n const offsetData = popperState.modifiersData.offset;\n\n if (!offsetData) {\n return true;\n }\n\n const topDistance = basePlacement === 'bottom' ? offsetData.top!.y : 0;\n const bottomDistance = basePlacement === 'top' ? offsetData.bottom!.y : 0;\n const leftDistance = basePlacement === 'right' ? offsetData.left!.x : 0;\n const rightDistance = basePlacement === 'left' ? offsetData.right!.x : 0;\n\n const exceedsTop =\n popperRect.top - clientY + topDistance > interactiveBorder;\n const exceedsBottom =\n clientY - popperRect.bottom - bottomDistance > interactiveBorder;\n const exceedsLeft =\n popperRect.left - clientX + leftDistance > interactiveBorder;\n const exceedsRight =\n clientX - popperRect.right - rightDistance > interactiveBorder;\n\n return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;\n });\n}\n\nexport function updateTransitionEndListener(\n box: HTMLDivElement,\n action: 'add' | 'remove',\n listener: (event: TransitionEvent) => void\n): void {\n const method = `${action}EventListener` as\n | 'addEventListener'\n | 'removeEventListener';\n\n // some browsers apparently support `transition` (unprefixed) but only fire\n // `webkitTransitionEnd`...\n ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n box[method](event, listener as EventListener);\n });\n}\n\n/**\n * Compared to xxx.contains, this function works for dom structures with shadow\n * dom\n */\nexport function actualContains(parent: Element, child: Element): boolean {\n let target = child;\n while (target) {\n if (parent.contains(target)) {\n return true;\n }\n target = (target.getRootNode?.() as any)?.host;\n }\n return false;\n}\n", "import {TOUCH_OPTIONS} from './constants';\nimport {isReferenceElement} from './dom-utils';\n\nexport const currentInput = {isTouch: false};\nlet lastMouseMoveTime = 0;\n\n/**\n * When a `touchstart` event is fired, it's assumed the user is using touch\n * input. We'll bind a `mousemove` event listener to listen for mouse input in\n * the future. This way, the `isTouch` property is fully dynamic and will handle\n * hybrid devices that use a mix of touch + mouse input.\n */\nexport function onDocumentTouchStart(): void {\n if (currentInput.isTouch) {\n return;\n }\n\n currentInput.isTouch = true;\n\n if (window.performance) {\n document.addEventListener('mousemove', onDocumentMouseMove);\n }\n}\n\n/**\n * When two `mousemove` event are fired consecutively within 20ms, it's assumed\n * the user is using mouse input again. `mousemove` can fire on touch devices as\n * well, but very rarely that quickly.\n */\nexport function onDocumentMouseMove(): void {\n const now = performance.now();\n\n if (now - lastMouseMoveTime < 20) {\n currentInput.isTouch = false;\n\n document.removeEventListener('mousemove', onDocumentMouseMove);\n }\n\n lastMouseMoveTime = now;\n}\n\n/**\n * When an element is in focus and has a tippy, leaving the tab/window and\n * returning causes it to show again. For mouse users this is unexpected, but\n * for keyboard use it makes sense.\n * TODO: find a better technique to solve this problem\n */\nexport function onWindowBlur(): void {\n const activeElement = document.activeElement as HTMLElement | null;\n\n if (isReferenceElement(activeElement)) {\n const instance = activeElement._tippy!;\n\n if (activeElement.blur && !instance.state.isVisible) {\n activeElement.blur();\n }\n }\n}\n\nexport default function bindGlobalEventListeners(): void {\n document.addEventListener('touchstart', onDocumentTouchStart, TOUCH_OPTIONS);\n window.addEventListener('blur', onWindowBlur);\n}\n", "export const isBrowser =\n typeof window !== 'undefined' && typeof document !== 'undefined';\n\nexport const isIE11 = isBrowser\n ? // @ts-ignore\n !!window.msCrypto\n : false;\n", "import {Targets} from './types';\n\nexport function createMemoryLeakWarning(method: string): string {\n const txt = method === 'destroy' ? 'n already-' : ' ';\n\n return [\n `${method}() was called on a${txt}destroyed instance. This is a no-op but`,\n 'indicates a potential memory leak.',\n ].join(' ');\n}\n\nexport function clean(value: string): string {\n const spacesAndTabs = /[ \\t]{2,}/g;\n const lineStartWithSpaces = /^[ \\t]*/gm;\n\n return value\n .replace(spacesAndTabs, ' ')\n .replace(lineStartWithSpaces, '')\n .trim();\n}\n\nfunction getDevMessage(message: string): string {\n return clean(`\n %ctippy.js\n\n %c${clean(message)}\n\n %c👷 This is a development-only message. It will be removed in production.\n `);\n}\n\nexport function getFormattedMessage(message: string): string[] {\n return [\n getDevMessage(message),\n // title\n 'color: #00C584; font-size: 1.3em; font-weight: bold;',\n // message\n 'line-height: 1.5',\n // footer\n 'color: #a6a095;',\n ];\n}\n\n// Assume warnings and errors never have the same message\nlet visitedMessages: Set<string>;\nif (__DEV__) {\n resetVisitedMessages();\n}\n\nexport function resetVisitedMessages(): void {\n visitedMessages = new Set();\n}\n\nexport function warnWhen(condition: boolean, message: string): void {\n if (condition && !visitedMessages.has(message)) {\n visitedMessages.add(message);\n console.warn(...getFormattedMessage(message));\n }\n}\n\nexport function errorWhen(condition: boolean, message: string): void {\n if (condition && !visitedMessages.has(message)) {\n visitedMessages.add(message);\n console.error(...getFormattedMessage(message));\n }\n}\n\nexport function validateTargets(targets: Targets): void {\n const didPassFalsyValue = !targets;\n const didPassPlainObject =\n Object.prototype.toString.call(targets) === '[object Object]' &&\n !(targets as any).addEventListener;\n\n errorWhen(\n didPassFalsyValue,\n [\n 'tippy() was passed',\n '`' + String(targets) + '`',\n 'as its targets (first) argument. Valid types are: String, Element,',\n 'Element[], or NodeList.',\n ].join(' ')\n );\n\n errorWhen(\n didPassPlainObject,\n [\n 'tippy() was passed a plain object which is not supported as an argument',\n 'for virtual positioning. Use props.getReferenceClientRect instead.',\n ].join(' ')\n );\n}\n", "import {DefaultProps, Plugin, Props, ReferenceElement, Tippy} from './types';\nimport {\n hasOwnProperty,\n removeProperties,\n invokeWithArgsOrReturn,\n} from './utils';\nimport {warnWhen} from './validation';\nimport {TIPPY_DEFAULT_APPEND_TO} from './constants';\n\nconst pluginProps = {\n animateFill: false,\n followCursor: false,\n inlinePositioning: false,\n sticky: false,\n};\n\nconst renderProps = {\n allowHTML: false,\n animation: 'fade',\n arrow: true,\n content: '',\n inertia: false,\n maxWidth: 350,\n role: 'tooltip',\n theme: '',\n zIndex: 9999,\n};\n\nexport const defaultProps: DefaultProps = {\n appendTo: TIPPY_DEFAULT_APPEND_TO,\n aria: {\n content: 'auto',\n expanded: 'auto',\n },\n delay: 0,\n duration: [300, 250],\n getReferenceClientRect: null,\n hideOnClick: true,\n ignoreAttributes: false,\n interactive: false,\n interactiveBorder: 2,\n interactiveDebounce: 0,\n moveTransition: '',\n offset: [0, 10],\n onAfterUpdate() {},\n onBeforeUpdate() {},\n onCreate() {},\n onDestroy() {},\n onHidden() {},\n onHide() {},\n onMount() {},\n onShow() {},\n onShown() {},\n onTrigger() {},\n onUntrigger() {},\n onClickOutside() {},\n placement: 'top',\n plugins: [],\n popperOptions: {},\n render: null,\n showOnCreate: false,\n touch: true,\n trigger: 'mouseenter focus',\n triggerTarget: null,\n ...pluginProps,\n ...renderProps,\n};\n\nconst defaultKeys = Object.keys(defaultProps);\n\nexport const setDefaultProps: Tippy['setDefaultProps'] = (partialProps) => {\n /* istanbul ignore else */\n if (__DEV__) {\n validateProps(partialProps, []);\n }\n\n const keys = Object.keys(partialProps) as Array<keyof DefaultProps>;\n keys.forEach((key) => {\n (defaultProps as any)[key] = partialProps[key];\n });\n};\n\nexport function getExtendedPassedProps(\n passedProps: Partial<Props> & Record<string, unknown>\n): Partial<Props> {\n const plugins = passedProps.plugins || [];\n const pluginProps = plugins.reduce<Record<string, unknown>>((acc, plugin) => {\n const {name, defaultValue} = plugin;\n\n if (name) {\n acc[name] =\n passedProps[name] !== undefined\n ? passedProps[name]\n : (defaultProps as any)[name] ?? defaultValue;\n }\n\n return acc;\n }, {});\n\n return {\n ...passedProps,\n ...pluginProps,\n };\n}\n\nexport function getDataAttributeProps(\n reference: ReferenceElement,\n plugins: Plugin[]\n): Record<string, unknown> {\n const propKeys = plugins\n ? Object.keys(getExtendedPassedProps({...defaultProps, plugins}))\n : defaultKeys;\n\n const props = propKeys.reduce(\n (acc: Partial<Props> & Record<string, unknown>, key) => {\n const valueAsString = (\n reference.getAttribute(`data-tippy-${key}`) || ''\n ).trim();\n\n if (!valueAsString) {\n return acc;\n }\n\n if (key === 'content') {\n acc[key] = valueAsString;\n } else {\n try {\n acc[key] = JSON.parse(valueAsString);\n } catch (e) {\n acc[key] = valueAsString;\n }\n }\n\n return acc;\n },\n {}\n );\n\n return props;\n}\n\nexport function evaluateProps(\n reference: ReferenceElement,\n props: Props\n): Props {\n const out = {\n ...props,\n content: invokeWithArgsOrReturn(props.content, [reference]),\n ...(props.ignoreAttributes\n ? {}\n : getDataAttributeProps(reference, props.plugins)),\n };\n\n out.aria = {\n ...defaultProps.aria,\n ...out.aria,\n };\n\n out.aria = {\n expanded:\n out.aria.expanded === 'auto' ? props.interactive : out.aria.expanded,\n content:\n out.aria.content === 'auto'\n ? props.interactive\n ? null\n : 'describedby'\n : out.aria.content,\n };\n\n return out;\n}\n\nexport function validateProps(\n partialProps: Partial<Props> = {},\n plugins: Plugin[] = []\n): void {\n const keys = Object.keys(partialProps) as Array<keyof Props>;\n keys.forEach((prop) => {\n const nonPluginProps = removeProperties(\n defaultProps,\n Object.keys(pluginProps)\n );\n\n let didPassUnknownProp = !hasOwnProperty(nonPluginProps, prop);\n\n // Check if the prop exists in `plugins`\n if (didPassUnknownProp) {\n didPassUnknownProp =\n plugins.filter((plugin) => plugin.name === prop).length === 0;\n }\n\n warnWhen(\n didPassUnknownProp,\n [\n `\\`${prop}\\``,\n \"is not a valid prop. You may have spelled it incorrectly, or if it's\",\n 'a plugin, forgot to pass it in an array as props.plugins.',\n '\\n\\n',\n 'All props: https://atomiks.github.io/tippyjs/v6/all-props/\\n',\n 'Plugins: https://atomiks.github.io/tippyjs/v6/plugins/',\n ].join(' ')\n );\n });\n}\n", "import {\n ARROW_CLASS,\n BACKDROP_CLASS,\n BOX_CLASS,\n CONTENT_CLASS,\n SVG_ARROW_CLASS,\n} from './constants';\nimport {div, isElement} from './dom-utils';\nimport {Instance, PopperElement, Props} from './types';\nimport {PopperChildren} from './types-internal';\nimport {arrayFrom} from './utils';\n\n// Firefox extensions don't allow .innerHTML = \"...\" property. This tricks it.\nconst innerHTML = (): 'innerHTML' => 'innerHTML';\n\nfunction dangerouslySetInnerHTML(element: Element, html: string): void {\n element[innerHTML()] = html;\n}\n\nfunction createArrowElement(value: Props['arrow']): HTMLDivElement {\n const arrow = div();\n\n if (value === true) {\n arrow.className = ARROW_CLASS;\n } else {\n arrow.className = SVG_ARROW_CLASS;\n\n if (isElement(value)) {\n arrow.appendChild(value);\n } else {\n dangerouslySetInnerHTML(arrow, value as string);\n }\n }\n\n return arrow;\n}\n\nexport function setContent(content: HTMLDivElement, props: Props): void {\n if (isElement(props.content)) {\n dangerouslySetInnerHTML(content, '');\n content.appendChild(props.content);\n } else if (typeof props.content !== 'function') {\n if (props.allowHTML) {\n dangerouslySetInnerHTML(content, props.content);\n } else {\n content.textContent = props.content;\n }\n }\n}\n\nexport function getChildren(popper: PopperElement): PopperChildren {\n const box = popper.firstElementChild as HTMLDivElement;\n const boxChildren = arrayFrom(box.children);\n\n return {\n box,\n content: boxChildren.find((node) => node.classList.contains(CONTENT_CLASS)),\n arrow: boxChildren.find(\n (node) =>\n node.classList.contains(ARROW_CLASS) ||\n node.classList.contains(SVG_ARROW_CLASS)\n ),\n backdrop: boxChildren.find((node) =>\n node.classList.contains(BACKDROP_CLASS)\n ),\n };\n}\n\nexport function render(\n instance: Instance\n): {\n popper: PopperElement;\n onUpdate?: (prevProps: Props, nextProps: Props) => void;\n} {\n const popper = div();\n\n const box = div();\n box.className = BOX_CLASS;\n box.setAttribute('data-state', 'hidden');\n box.setAttribute('tabindex', '-1');\n\n const content = div();\n content.className = CONTENT_CLASS;\n content.setAttribute('data-state', 'hidden');\n\n setContent(content, instance.props);\n\n popper.appendChild(box);\n box.appendChild(content);\n\n onUpdate(instance.props, instance.props);\n\n function onUpdate(prevProps: Props, nextProps: Props): void {\n const {box, content, arrow} = getChildren(popper);\n\n if (nextProps.theme) {\n box.setAttribute('data-theme', nextProps.theme);\n } else {\n box.removeAttribute('data-theme');\n }\n\n if (typeof nextProps.animation === 'string') {\n box.setAttribute('data-animation', nextProps.animation);\n } else {\n box.removeAttribute('data-animation');\n }\n\n if (nextProps.inertia) {\n box.setAttribute('data-inertia', '');\n } else {\n box.removeAttribute('data-inertia');\n }\n\n box.style.maxWidth =\n typeof nextProps.maxWidth === 'number'\n ? `${nextProps.maxWidth}px`\n : nextProps.maxWidth;\n\n if (nextProps.role) {\n box.setAttribute('role', nextProps.role);\n } else {\n box.removeAttribute('role');\n }\n\n if (\n prevProps.content !== nextProps.content ||\n prevProps.allowHTML !== nextProps.allowHTML\n ) {\n setContent(content, instance.props);\n }\n\n if (nextProps.arrow) {\n if (!arrow) {\n box.appendChild(createArrowElement(nextProps.arrow));\n } else if (prevProps.arrow !== nextProps.arrow) {\n box.removeChild(arrow);\n box.appendChild(createArrowElement(nextProps.arrow));\n }\n } else if (arrow) {\n box.removeChild(arrow!);\n }\n }\n\n return {\n popper,\n onUpdate,\n };\n}\n\n// Runtime check to identify if the render function is the default one; this\n// way we can apply default CSS transitions logic and it can be tree-shaken away\nrender.$$tippy = true;\n", "import {createPopper, StrictModifiers, Modifier} from '@popperjs/core';\nimport {currentInput} from './bindGlobalEventListeners';\nimport {isIE11} from './browser';\nimport {TIPPY_DEFAULT_APPEND_TO, TOUCH_OPTIONS} from './constants';\nimport {\n actualContains,\n div,\n getOwnerDocument,\n isCursorOutsideInteractiveBorder,\n isMouseEvent,\n setTransitionDuration,\n setVisibilityState,\n updateTransitionEndListener,\n} from './dom-utils';\nimport {defaultProps, evaluateProps, getExtendedPassedProps} from './props';\nimport {getChildren} from './template';\nimport {\n Content,\n Instance,\n LifecycleHooks,\n PopperElement,\n Props,\n ReferenceElement,\n} from './types';\nimport {ListenerObject, PopperTreeData, PopperChildren} from './types-internal';\nimport {\n arrayFrom,\n debounce,\n getValueAtIndexOrReturn,\n invokeWithArgsOrReturn,\n normalizeToArray,\n pushIfUnique,\n splitBySpaces,\n unique,\n removeUndefinedProps,\n} from './utils';\nimport {createMemoryLeakWarning, errorWhen, warnWhen} from './validation';\n\nlet idCounter = 1;\nlet mouseMoveListeners: ((event: MouseEvent) => void)[] = [];\n\n// Used by `hideAll()`\nexport let mountedInstances: Instance[] = [];\n\nexport default function createTippy(\n reference: ReferenceElement,\n passedProps: Partial<Props>\n): Instance {\n const props = evaluateProps(reference, {\n ...defaultProps,\n ...getExtendedPassedProps(removeUndefinedProps(passedProps)),\n });\n\n // ===========================================================================\n // 🔒 Private members\n // ===========================================================================\n let showTimeout: any;\n let hideTimeout: any;\n let scheduleHideAnimationFrame: number;\n let isVisibleFromClick = false;\n let didHideDueToDocumentMouseDown = false;\n let didTouchMove = false;\n let ignoreOnFirstUpdate = false;\n let lastTriggerEvent: Event | undefined;\n let currentTransitionEndListener: (event: TransitionEvent) => void;\n let onFirstUpdate: () => void;\n let listeners: ListenerObject[] = [];\n let debouncedOnMouseMove = debounce(onMouseMove, props.interactiveDebounce);\n let currentTarget: Element;\n\n // ===========================================================================\n // 🔑 Public members\n // ===========================================================================\n const id = idCounter++;\n const popperInstance = null;\n const plugins = unique(props.plugins);\n\n const state = {\n // Is the instance currently enabled?\n isEnabled: true,\n // Is the tippy currently showing and not transitioning out?\n isVisible: false,\n // Has the instance been destroyed?\n isDestroyed: false,\n // Is the tippy currently mounted to the DOM?\n isMounted: false,\n // Has the tippy finished transitioning in?\n isShown: false,\n };\n\n const instance: Instance = {\n // properties\n id,\n reference,\n popper: div(),\n popperInstance,\n props,\n state,\n plugins,\n // methods\n clearDelayTimeouts,\n setProps,\n setContent,\n show,\n hide,\n hideWithInteractivity,\n enable,\n disable,\n unmount,\n destroy,\n };\n\n // TODO: Investigate why this early return causes a TDZ error in the tests —\n // it doesn't seem to happen in the browser\n /* istanbul ignore if */\n if (!props.render) {\n if (__DEV__) {\n errorWhen(true, 'render() function has not been supplied.');\n }\n\n return instance;\n }\n\n // ===========================================================================\n // Initial mutations\n // ===========================================================================\n const {popper, onUpdate} = props.render(instance);\n\n popper.setAttribute('data-__NAMESPACE_PREFIX__-root', '');\n popper.id = `__NAMESPACE_PREFIX__-${instance.id}`;\n\n instance.popper = popper;\n reference._tippy = instance;\n popper._tippy = instance;\n\n const pluginsHooks = plugins.map((plugin) => plugin.fn(instance));\n const hasAriaExpanded = reference.hasAttribute('aria-expanded');\n\n addListeners();\n handleAriaExpandedAttribute();\n handleStyles();\n\n invokeHook('onCreate', [instance]);\n\n if (props.showOnCreate) {\n scheduleShow();\n }\n\n // Prevent a tippy with a delay from hiding if the cursor left then returned\n // before it started hiding\n popper.addEventListener('mouseenter', () => {\n if (instance.props.interactive && instance.state.isVisible) {\n instance.clearDelayTimeouts();\n }\n });\n\n popper.addEventListener('mouseleave', () => {\n if (\n instance.props.interactive &&\n instance.props.trigger.indexOf('mouseenter') >= 0\n ) {\n getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n }\n });\n\n return instance;\n\n // ===========================================================================\n // 🔒 Private methods\n // ===========================================================================\n function getNormalizedTouchSettings(): [string | boolean, number] {\n const {touch} = instance.props;\n return Array.isArray(touch) ? touch : [touch, 0];\n }\n\n function getIsCustomTouchBehavior(): boolean {\n return getNormalizedTouchSettings()[0] === 'hold';\n }\n\n function getIsDefaultRenderFn(): boolean {\n // @ts-ignore\n return !!instance.props.render?.$$tippy;\n }\n\n function getCurrentTarget(): Element {\n return currentTarget || reference;\n }\n\n function getDocument(): Document {\n const parent = getCurrentTarget().parentNode as Element;\n return parent ? getOwnerDocument(parent) : document;\n }\n\n function getDefaultTemplateChildren(): PopperChildren {\n return getChildren(popper);\n }\n\n function getDelay(isShow: boolean): number {\n // For touch or keyboard input, force `0` delay for UX reasons\n // Also if the instance is mounted but not visible (transitioning out),\n // ignore delay\n if (\n (instance.state.isMounted && !instance.state.isVisible) ||\n currentInput.isTouch ||\n (lastTriggerEvent && lastTriggerEvent.type === 'focus')\n ) {\n return 0;\n }\n\n return getValueAtIndexOrReturn(\n instance.props.delay,\n isShow ? 0 : 1,\n defaultProps.delay\n );\n }\n\n function handleStyles(fromHide = false): void {\n popper.style.pointerEvents =\n instance.props.interactive && !fromHide ? '' : 'none';\n popper.style.zIndex = `${instance.props.zIndex}`;\n }\n\n function invokeHook(\n hook: keyof LifecycleHooks,\n args: [Instance, any?],\n shouldInvokePropsHook = true\n ): void {\n pluginsHooks.forEach((pluginHooks) => {\n if (pluginHooks[hook]) {\n pluginHooks[hook]!(...args);\n }\n });\n\n if (shouldInvokePropsHook) {\n instance.props[hook](...args);\n }\n }\n\n function handleAriaContentAttribute(): void {\n const {aria} = instance.props;\n\n if (!aria.content) {\n return;\n }\n\n const attr = `aria-${aria.content}`;\n const id = popper.id;\n const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n\n nodes.forEach((node) => {\n const currentValue = node.getAttribute(attr);\n\n if (instance.state.isVisible) {\n node.setAttribute(attr, currentValue ? `${currentValue} ${id}` : id);\n } else {\n const nextValue = currentValue && currentValue.replace(id, '').trim();\n\n if (nextValue) {\n node.setAttribute(attr, nextValue);\n } else {\n node.removeAttribute(attr);\n }\n }\n });\n }\n\n function handleAriaExpandedAttribute(): void {\n if (hasAriaExpanded || !instance.props.aria.expanded) {\n return;\n }\n\n const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n\n nodes.forEach((node) => {\n if (instance.props.interactive) {\n node.setAttribute(\n 'aria-expanded',\n instance.state.isVisible && node === getCurrentTarget()\n ? 'true'\n : 'false'\n );\n } else {\n node.removeAttribute('aria-expanded');\n }\n });\n }\n\n function cleanupInteractiveMouseListeners(): void {\n getDocument().removeEventListener('mousemove', debouncedOnMouseMove);\n mouseMoveListeners = mouseMoveListeners.filter(\n (listener) => listener !== debouncedOnMouseMove\n );\n }\n\n function onDocumentPress(event: MouseEvent | TouchEvent): void {\n // Moved finger to scroll instead of an intentional tap outside\n if (currentInput.isTouch) {\n if (didTouchMove || event.type === 'mousedown') {\n return;\n }\n }\n\n const actualTarget =\n (event.composedPath && event.composedPath()[0]) || event.target;\n\n // Clicked on interactive popper\n if (\n instance.props.interactive &&\n actualContains(popper, actualTarget as Element)\n ) {\n return;\n }\n\n // Clicked on the event listeners target\n if (\n normalizeToArray(instance.props.triggerTarget || reference).some((el) =>\n actualContains(el, actualTarget as Element)\n )\n ) {\n if (currentInput.isTouch) {\n return;\n }\n\n if (\n instance.state.isVisible &&\n instance.props.trigger.indexOf('click') >= 0\n ) {\n return;\n }\n } else {\n invokeHook('onClickOutside', [instance, event]);\n }\n\n if (instance.props.hideOnClick === true) {\n instance.clearDelayTimeouts();\n instance.hide();\n\n // `mousedown` event is fired right before `focus` if pressing the\n // currentTarget. This lets a tippy with `focus` trigger know that it\n // should not show\n didHideDueToDocumentMouseDown = true;\n setTimeout(() => {\n didHideDueToDocumentMouseDown = false;\n });\n\n // The listener gets added in `scheduleShow()`, but this may be hiding it\n // before it shows, and hide()'s early bail-out behavior can prevent it\n // from being cleaned up\n if (!instance.state.isMounted) {\n removeDocumentPress();\n }\n }\n }\n\n function onTouchMove(): void {\n didTouchMove = true;\n }\n\n function onTouchStart(): void {\n didTouchMove = false;\n }\n\n function addDocumentPress(): void {\n const doc = getDocument();\n doc.addEventListener('mousedown', onDocumentPress, true);\n doc.addEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n doc.addEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n doc.addEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n }\n\n function removeDocumentPress(): void {\n const doc = getDocument();\n doc.removeEventListener('mousedown', onDocumentPress, true);\n doc.removeEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n doc.removeEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n doc.removeEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n }\n\n function onTransitionedOut(duration: number, callback: () => void): void {\n onTransitionEnd(duration, () => {\n if (\n !instance.state.isVisible &&\n popper.parentNode &&\n popper.parentNode.contains(popper)\n ) {\n callback();\n }\n });\n }\n\n function onTransitionedIn(duration: number, callback: () => void): void {\n onTransitionEnd(duration, callback);\n }\n\n function onTransitionEnd(duration: number, callback: () => void): void {\n const box = getDefaultTemplateChildren().box;\n\n function listener(event: TransitionEvent): void {\n if (event.target === box) {\n updateTransitionEndListener(box, 'remove', listener);\n callback();\n }\n }\n\n // Make callback synchronous if duration is 0\n // `transitionend` won't fire otherwise\n if (duration === 0) {\n return callback();\n }\n\n updateTransitionEndListener(box, 'remove', currentTransitionEndListener);\n updateTransitionEndListener(box, 'add', listener);\n\n currentTransitionEndListener = listener;\n }\n\n function on(\n eventType: string,\n handler: EventListener,\n options: boolean | Record<string, unknown> = false\n ): void {\n const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n nodes.forEach((node) => {\n node.addEventListener(eventType, handler, options);\n listeners.push({node, eventType, handler, options});\n });\n }\n\n function addListeners(): void {\n if (getIsCustomTouchBehavior()) {\n on('touchstart', onTrigger, {passive: true});\n on('touchend', onMouseLeave as EventListener, {passive: true});\n }\n\n splitBySpaces(instance.props.trigger).forEach((eventType) => {\n if (eventType === 'manual') {\n return;\n }\n\n on(eventType, onTrigger);\n\n switch (eventType) {\n case 'mouseenter':\n on('mouseleave', onMouseLeave as EventListener);\n break;\n case 'focus':\n on(isIE11 ? 'focusout' : 'blur', onBlurOrFocusOut as EventListener);\n break;\n case 'focusin':\n on('focusout', onBlurOrFocusOut as EventListener);\n break;\n }\n });\n }\n\n function removeListeners(): void {\n listeners.forEach(({node, eventType, handler, options}: ListenerObject) => {\n node.removeEventListener(eventType, handler, options);\n });\n listeners = [];\n }\n\n function onTrigger(event: Event): void {\n let shouldScheduleClickHide = false;\n\n if (\n !instance.state.isEnabled ||\n isEventListenerStopped(event) ||\n didHideDueToDocumentMouseDown\n ) {\n return;\n }\n\n const wasFocused = lastTriggerEvent?.type === 'focus';\n\n lastTriggerEvent = event;\n currentTarget = event.currentTarget as Element;\n\n handleAriaExpandedAttribute();\n\n if (!instance.state.isVisible && isMouseEvent(event)) {\n // If scrolling, `mouseenter` events can be fired if the cursor lands\n // over a new target, but `mousemove` events don't get fired. This\n // causes interactive tooltips to get stuck open until the cursor is\n // moved\n mouseMoveListeners.forEach((listener) => listener(event));\n }\n\n // Toggle show/hide when clicking click-triggered tooltips\n if (\n event.type === 'click' &&\n (instance.props.trigger.indexOf('mouseenter') < 0 ||\n isVisibleFromClick) &&\n instance.props.hideOnClick !== false &&\n instance.state.isVisible\n ) {\n shouldScheduleClickHide = true;\n } else {\n scheduleShow(event);\n }\n\n if (event.type === 'click') {\n isVisibleFromClick = !shouldScheduleClickHide;\n }\n\n if (shouldScheduleClickHide && !wasFocused) {\n scheduleHide(event);\n }\n }\n\n function onMouseMove(event: MouseEvent): void {\n const target = event.target as Node;\n const isCursorOverReferenceOrPopper =\n getCurrentTarget().contains(target) || popper.contains(target);\n\n if (event.type === 'mousemove' && isCursorOverReferenceOrPopper) {\n return;\n }\n\n const popperTreeData = getNestedPopperTree()\n .concat(popper)\n .map((popper) => {\n const instance = popper._tippy!;\n const state = instance.popperInstance?.state;\n\n if (state) {\n return {\n popperRect: popper.getBoundingClientRect(),\n popperState: state,\n props,\n };\n }\n\n return null;\n })\n .filter(Boolean) as PopperTreeData[];\n\n if (isCursorOutsideInteractiveBorder(popperTreeData, event)) {\n cleanupInteractiveMouseListeners();\n scheduleHide(event);\n }\n }\n\n function onMouseLeave(event: MouseEvent): void {\n const shouldBail =\n isEventListenerStopped(event) ||\n (instance.props.trigger.indexOf('click') >= 0 && isVisibleFromClick);\n\n if (shouldBail) {\n return;\n }\n\n if (instance.props.interactive) {\n instance.hideWithInteractivity(event);\n return;\n }\n\n scheduleHide(event);\n }\n\n function onBlurOrFocusOut(event: FocusEvent): void {\n if (\n instance.props.trigger.indexOf('focusin') < 0 &&\n event.target !== getCurrentTarget()\n ) {\n return;\n }\n\n // If focus was moved to within the popper\n if (\n instance.props.interactive &&\n event.relatedTarget &&\n popper.contains(event.relatedTarget as Element)\n ) {\n return;\n }\n\n scheduleHide(event);\n }\n\n function isEventListenerStopped(event: Event): boolean {\n return currentInput.isTouch\n ? getIsCustomTouchBehavior() !== event.type.indexOf('touch') >= 0\n : false;\n }\n\n function createPopperInstance(): void {\n destroyPopperInstance();\n\n const {\n popperOptions,\n placement,\n offset,\n getReferenceClientRect,\n moveTransition,\n } = instance.props;\n\n const arrow = getIsDefaultRenderFn() ? getChildren(popper).arrow : null;\n\n const computedReference = getReferenceClientRect\n ? {\n getBoundingClientRect: getReferenceClientRect,\n contextElement:\n getReferenceClientRect.contextElement || getCurrentTarget(),\n }\n : reference;\n\n const tippyModifier: Modifier<'$$tippy', Record<string, unknown>> = {\n name: '$$tippy',\n enabled: true,\n phase: 'beforeWrite',\n requires: ['computeStyles'],\n fn({state}) {\n if (getIsDefaultRenderFn()) {\n const {box} = getDefaultTemplateChildren();\n\n ['placement', 'reference-hidden', 'escaped'].forEach((attr) => {\n if (attr === 'placement') {\n box.setAttribute('data-placement', state.placement);\n } else {\n if (state.attributes.popper[`data-popper-${attr}`]) {\n box.setAttribute(`data-${attr}`, '');\n } else {\n box.removeAttribute(`data-${attr}`);\n }\n }\n });\n\n state.attributes.popper = {};\n }\n },\n };\n\n type TippyModifier = Modifier<'$$tippy', Record<string, unknown>>;\n type ExtendedModifiers = StrictModifiers | Partial<TippyModifier>;\n\n const modifiers: Array<ExtendedModifiers> = [\n {\n name: 'offset',\n options: {\n offset,\n },\n },\n {\n name: 'preventOverflow',\n options: {\n padding: {\n top: 2,\n bottom: 2,\n left: 5,\n right: 5,\n },\n },\n },\n {\n name: 'flip',\n options: {\n padding: 5,\n },\n },\n {\n name: 'computeStyles',\n options: {\n adaptive: !moveTransition,\n },\n },\n tippyModifier,\n ];\n\n if (getIsDefaultRenderFn() && arrow) {\n modifiers.push({\n name: 'arrow',\n options: {\n element: arrow,\n padding: 3,\n },\n });\n }\n\n modifiers.push(...(popperOptions?.modifiers || []));\n\n instance.popperInstance = createPopper<ExtendedModifiers>(\n computedReference,\n popper,\n {\n ...popperOptions,\n placement,\n onFirstUpdate,\n modifiers,\n }\n );\n }\n\n function destroyPopperInstance(): void {\n if (instance.popperInstance) {\n instance.popperInstance.destroy();\n instance.popperInstance = null;\n }\n }\n\n function mount(): void {\n const {appendTo} = instance.props;\n\n let parentNode: any;\n\n // By default, we'll append the popper to the triggerTargets's parentNode so\n // it's directly after the reference element so the elements inside the\n // tippy can be tabbed to\n // If there are clipping issues, the user can specify a different appendTo\n // and ensure focus management is handled correctly manually\n const node = getCurrentTarget();\n\n if (\n (instance.props.interactive && appendTo === TIPPY_DEFAULT_APPEND_TO) ||\n appendTo === 'parent'\n ) {\n parentNode = node.parentNode;\n } else {\n parentNode = invokeWithArgsOrReturn(appendTo, [node]);\n }\n\n // The popper element needs to exist on the DOM before its position can be\n // updated as Popper needs to read its dimensions\n if (!parentNode.contains(popper)) {\n parentNode.appendChild(popper);\n }\n\n instance.state.isMounted = true;\n\n createPopperInstance();\n\n /* istanbul ignore else */\n if (__DEV__) {\n // Accessibility check\n warnWhen(\n instance.props.interactive &&\n appendTo === defaultProps.appendTo &&\n node.nextElementSibling !== popper,\n [\n 'Interactive tippy element may not be accessible via keyboard',\n 'navigation because it is not directly after the reference element',\n 'in the DOM source order.',\n '\\n\\n',\n 'Using a wrapper <div> or <span> tag around the reference element',\n 'solves this by creating a new parentNode context.',\n '\\n\\n',\n 'Specifying `appendTo: document.body` silences this warning, but it',\n 'assumes you are using a focus management solution to handle',\n 'keyboard navigation.',\n '\\n\\n',\n 'See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity',\n ].join(' ')\n );\n }\n }\n\n function getNestedPopperTree(): PopperElement[] {\n return arrayFrom(\n popper.querySelectorAll('[data-__NAMESPACE_PREFIX__-root]')\n );\n }\n\n function scheduleShow(event?: Event): void {\n instance.clearDelayTimeouts();\n\n if (event) {\n invokeHook('onTrigger', [instance, event]);\n }\n\n addDocumentPress();\n\n let delay = getDelay(true);\n const [touchValue, touchDelay] = getNormalizedTouchSettings();\n\n if (currentInput.isTouch && touchValue === 'hold' && touchDelay) {\n delay = touchDelay;\n }\n\n if (delay) {\n showTimeout = setTimeout(() => {\n instance.show();\n }, delay);\n } else {\n instance.show();\n }\n }\n\n function scheduleHide(event: Event): void {\n instance.clearDelayTimeouts();\n\n invokeHook('onUntrigger', [instance, event]);\n\n if (!instance.state.isVisible) {\n removeDocumentPress();\n\n return;\n }\n\n // For interactive tippies, scheduleHide is added to a document.body handler\n // from onMouseLeave so must intercept scheduled hides from mousemove/leave\n // events when trigger contains mouseenter and click, and the tip is\n // currently shown as a result of a click.\n if (\n instance.props.trigger.indexOf('mouseenter') >= 0 &&\n instance.props.trigger.indexOf('click') >= 0 &&\n ['mouseleave', 'mousemove'].indexOf(event.type) >= 0 &&\n isVisibleFromClick\n ) {\n return;\n }\n\n const delay = getDelay(false);\n\n if (delay) {\n hideTimeout = setTimeout(() => {\n if (instance.state.isVisible) {\n instance.hide();\n }\n }, delay);\n } else {\n // Fixes a `transitionend` problem when it fires 1 frame too\n // late sometimes, we don't want hide() to be called.\n scheduleHideAnimationFrame = requestAnimationFrame(() => {\n instance.hide();\n });\n }\n }\n\n // ===========================================================================\n // 🔑 Public methods\n // ===========================================================================\n function enable(): void {\n instance.state.isEnabled = true;\n }\n\n function disable(): void {\n // Disabling the instance should also hide it\n // https://github.com/atomiks/tippy.js-react/issues/106\n instance.hide();\n instance.state.isEnabled = false;\n }\n\n function clearDelayTimeouts(): void {\n clearTimeout(showTimeout);\n clearTimeout(hideTimeout);\n cancelAnimationFrame(scheduleHideAnimationFrame);\n }\n\n function setProps(partialProps: Partial<Props>): void {\n /* istanbul ignore else */\n if (__DEV__) {\n warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('setProps'));\n }\n\n if (instance.state.isDestroyed) {\n return;\n }\n\n invokeHook('onBeforeUpdate', [instance, partialProps]);\n\n removeListeners();\n\n const prevProps = instance.props;\n const nextProps = evaluateProps(reference, {\n ...prevProps,\n ...removeUndefinedProps(partialProps),\n ignoreAttributes: true,\n });\n\n instance.props = nextProps;\n\n addListeners();\n\n if (prevProps.interactiveDebounce !== nextProps.interactiveDebounce) {\n cleanupInteractiveMouseListeners();\n debouncedOnMouseMove = debounce(\n onMouseMove,\n nextProps.interactiveDebounce\n );\n }\n\n // Ensure stale aria-expanded attributes are removed\n if (prevProps.triggerTarget && !nextProps.triggerTarget) {\n normalizeToArray(prevProps.triggerTarget).forEach((node) => {\n node.removeAttribute('aria-expanded');\n });\n } else if (nextProps.triggerTarget) {\n reference.removeAttribute('aria-expanded');\n }\n\n handleAriaExpandedAttribute();\n handleStyles();\n\n if (onUpdate) {\n onUpdate(prevProps, nextProps);\n }\n\n if (instance.popperInstance) {\n createPopperInstance();\n\n // Fixes an issue with nested tippies if they are all getting re-rendered,\n // and the nested ones get re-rendered first.\n // https://github.com/atomiks/tippyjs-react/issues/177\n // TODO: find a cleaner / more efficient solution(!)\n getNestedPopperTree().forEach((nestedPopper) => {\n // React (and other UI libs likely) requires a rAF wrapper as it flushes\n // its work in one\n requestAnimationFrame(nestedPopper._tippy!.popperInstance!.forceUpdate);\n });\n }\n\n invokeHook('onAfterUpdate', [instance, partialProps]);\n }\n\n function setContent(content: Content): void {\n instance.setProps({content});\n }\n\n function show(): void {\n /* istanbul ignore else */\n if (__DEV__) {\n warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('show'));\n }\n\n // Early bail-out\n const isAlreadyVisible = instance.state.isVisible;\n const isDestroyed = instance.state.isDestroyed;\n const isDisabled = !instance.state.isEnabled;\n const isTouchAndTouchDisabled =\n currentInput.isTouch && !instance.props.touch;\n const duration = getValueAtIndexOrReturn(\n instance.props.duration,\n 0,\n defaultProps.duration\n );\n\n if (\n isAlreadyVisible ||\n isDestroyed ||\n isDisabled ||\n isTouchAndTouchDisabled\n ) {\n return;\n }\n\n // Normalize `disabled` behavior across browsers.\n // Firefox allows events on disabled elements, but Chrome doesn't.\n // Using a wrapper element (i.e. <span>) is recommended.\n if (getCurrentTarget().hasAttribute('disabled')) {\n return;\n }\n\n invokeHook('onShow', [instance], false);\n if (instance.props.onShow(instance) === false) {\n return;\n }\n\n instance.state.isVisible = true;\n\n if (getIsDefaultRenderFn()) {\n popper.style.visibility = 'visible';\n }\n\n handleStyles();\n addDocumentPress();\n\n if (!instance.state.isMounted) {\n popper.style.transition = 'none';\n }\n\n // If flipping to the opposite side after hiding at least once, the\n // animation will use the wrong placement without resetting the duration\n if (getIsDefaultRenderFn()) {\n const {box, content} = getDefaultTemplateChildren();\n setTransitionDuration([box, content], 0);\n }\n\n onFirstUpdate = (): void => {\n if (!instance.state.isVisible || ignoreOnFirstUpdate) {\n return;\n }\n\n ignoreOnFirstUpdate = true;\n\n // reflow\n void popper.offsetHeight;\n\n popper.style.transition = instance.props.moveTransition;\n\n if (getIsDefaultRenderFn() && instance.props.animation) {\n const {box, content} = getDefaultTemplateChildren();\n setTransitionDuration([box, content], duration);\n setVisibilityState([box, content], 'visible');\n }\n\n handleAriaContentAttribute();\n handleAriaExpandedAttribute();\n\n pushIfUnique(mountedInstances, instance);\n\n // certain modifiers (e.g. `maxSize`) require a second update after the\n // popper has been positioned for the first time\n instance.popperInstance?.forceUpdate();\n\n invokeHook('onMount', [instance]);\n\n if (instance.props.animation && getIsDefaultRenderFn()) {\n onTransitionedIn(duration, () => {\n instance.state.isShown = true;\n invokeHook('onShown', [instance]);\n });\n }\n };\n\n mount();\n }\n\n function hide(): void {\n /* istanbul ignore else */\n if (__DEV__) {\n warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('hide'));\n }\n\n // Early bail-out\n const isAlreadyHidden = !instance.state.isVisible;\n const isDestroyed = instance.state.isDestroyed;\n const isDisabled = !instance.state.isEnabled;\n const duration = getValueAtIndexOrReturn(\n instance.props.duration,\n 1,\n defaultProps.duration\n );\n\n if (isAlreadyHidden || isDestroyed || isDisabled) {\n return;\n }\n\n invokeHook('onHide', [instance], false);\n if (instance.props.onHide(instance) === false) {\n return;\n }\n\n instance.state.isVisible = false;\n instance.state.isShown = false;\n ignoreOnFirstUpdate = false;\n isVisibleFromClick = false;\n\n if (getIsDefaultRenderFn()) {\n popper.style.visibility = 'hidden';\n }\n\n cleanupInteractiveMouseListeners();\n removeDocumentPress();\n handleStyles(true);\n\n if (getIsDefaultRenderFn()) {\n const {box, content} = getDefaultTemplateChildren();\n\n if (instance.props.animation) {\n setTransitionDuration([box, content], duration);\n setVisibilityState([box, content], 'hidden');\n }\n }\n\n handleAriaContentAttribute();\n handleAriaExpandedAttribute();\n\n if (instance.props.animation) {\n if (getIsDefaultRenderFn()) {\n onTransitionedOut(duration, instance.unmount);\n }\n } else {\n instance.unmount();\n }\n }\n\n function hideWithInteractivity(event: MouseEvent): void {\n /* istanbul ignore else */\n if (__DEV__) {\n warnWhen(\n instance.state.isDestroyed,\n createMemoryLeakWarning('hideWithInteractivity')\n );\n }\n\n getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n pushIfUnique(mouseMoveListeners, debouncedOnMouseMove);\n debouncedOnMouseMove(event);\n }\n\n function unmount(): void {\n /* istanbul ignore else */\n if (__DEV__) {\n warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('unmount'));\n }\n\n if (instance.state.isVisible) {\n instance.hide();\n }\n\n if (!instance.state.isMounted) {\n return;\n }\n\n destroyPopperInstance();\n\n // If a popper is not interactive, it will be appended outside the popper\n // tree by default. This seems mainly for interactive tippies, but we should\n // find a workaround if possible\n getNestedPopperTree().forEach((nestedPopper) => {\n nestedPopper._tippy!.unmount();\n });\n\n if (popper.parentNode) {\n popper.parentNode.removeChild(popper);\n }\n\n mountedInstances = mountedInstances.filter((i) => i !== instance);\n\n instance.state.isMounted = false;\n invokeHook('onHidden', [instance]);\n }\n\n function destroy(): void {\n /* istanbul ignore else */\n if (__DEV__) {\n warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('destroy'));\n }\n\n if (instance.state.isDestroyed) {\n return;\n }\n\n instance.clearDelayTimeouts();\n instance.unmount();\n\n removeListeners();\n\n delete reference._tippy;\n\n instance.state.isDestroyed = true;\n\n invokeHook('onDestroy', [instance]);\n }\n}\n", "import bindGlobalEventListeners, {\n currentInput,\n} from './bindGlobalEventListeners';\nimport createTippy, {mountedInstances} from './createTippy';\nimport {getArrayOfElements, isElement, isReferenceElement} from './dom-utils';\nimport {defaultProps, setDefaultProps, validateProps} from './props';\nimport {HideAll, HideAllOptions, Instance, Props, Targets} from './types';\nimport {validateTargets, warnWhen} from './validation';\n\nfunction tippy(\n targets: Targets,\n optionalProps: Partial<Props> = {}\n): Instance | Instance[] {\n const plugins = defaultProps.plugins.concat(optionalProps.plugins || []);\n\n /* istanbul ignore else */\n if (__DEV__) {\n validateTargets(targets);\n validateProps(optionalProps, plugins);\n }\n\n bindGlobalEventListeners();\n\n const passedProps: Partial<Props> = {...optionalProps, plugins};\n\n const elements = getArrayOfElements(targets);\n\n /* istanbul ignore else */\n if (__DEV__) {\n const isSingleContentElement = isElement(passedProps.content);\n const isMoreThanOneReferenceElement = elements.length > 1;\n warnWhen(\n isSingleContentElement && isMoreThanOneReferenceElement,\n [\n 'tippy() was passed an Element as the `content` prop, but more than',\n 'one tippy instance was created by this invocation. This means the',\n 'content element will only be appended to the last tippy instance.',\n '\\n\\n',\n 'Instead, pass the .innerHTML of the element, or use a function that',\n 'returns a cloned version of the element instead.',\n '\\n\\n',\n '1) content: element.innerHTML\\n',\n '2) content: () => element.cloneNode(true)',\n ].join(' ')\n );\n }\n\n const instances = elements.reduce<Instance[]>(\n (acc, reference): Instance[] => {\n const instance = reference && createTippy(reference, passedProps);\n\n if (instance) {\n acc.push(instance);\n }\n\n return acc;\n },\n []\n );\n\n return isElement(targets) ? instances[0] : instances;\n}\n\ntippy.defaultProps = defaultProps;\ntippy.setDefaultProps = setDefaultProps;\ntippy.currentInput = currentInput;\n\nexport default tippy;\n\nexport const hideAll: HideAll = ({\n exclude: excludedReferenceOrInstance,\n duration,\n}: HideAllOptions = {}) => {\n mountedInstances.forEach((instance) => {\n let isExcluded = false;\n\n if (excludedReferenceOrInstance) {\n isExcluded = isReferenceElement(excludedReferenceOrInstance)\n ? instance.reference === excludedReferenceOrInstance\n : instance.popper === (excludedReferenceOrInstance as Instance).popper;\n }\n\n if (!isExcluded) {\n const originalDuration = instance.props.duration;\n\n instance.setProps({duration});\n instance.hide();\n\n if (!instance.state.isDestroyed) {\n instance.setProps({duration: originalDuration});\n }\n }\n });\n};\n", "import tippy from '..';\nimport {div} from '../dom-utils';\nimport {\n CreateSingleton,\n Plugin,\n CreateSingletonProps,\n ReferenceElement,\n CreateSingletonInstance,\n Instance,\n Props,\n} from '../types';\nimport {normalizeToArray, removeProperties} from '../utils';\nimport {errorWhen} from '../validation';\nimport {applyStyles, Modifier} from '@popperjs/core';\n\n// The default `applyStyles` modifier has a cleanup function that gets called\n// every time the popper is destroyed (i.e. a new target), removing the styles\n// and causing transitions to break for singletons when the console is open, but\n// most notably for non-transform styles being used, `gpuAcceleration: false`.\nconst applyStylesModifier: Modifier<'applyStyles', Record<string, unknown>> = {\n ...applyStyles,\n effect({state}) {\n const initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0',\n },\n arrow: {\n position: 'absolute',\n },\n reference: {},\n };\n\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n // intentionally return no cleanup function\n // return () => { ... }\n },\n};\n\nconst createSingleton: CreateSingleton = (\n tippyInstances,\n optionalProps = {}\n) => {\n /* istanbul ignore else */\n if (__DEV__) {\n errorWhen(\n !Array.isArray(tippyInstances),\n [\n 'The first argument passed to createSingleton() must be an array of',\n 'tippy instances. The passed value was',\n String(tippyInstances),\n ].join(' ')\n );\n }\n\n let individualInstances = tippyInstances;\n let references: Array<ReferenceElement> = [];\n let triggerTargets: Array<Element> = [];\n let currentTarget: Element | null;\n let overrides = optionalProps.overrides;\n let interceptSetPropsCleanups: Array<() => void> = [];\n let shownOnCreate = false;\n\n function setTriggerTargets(): void {\n triggerTargets = individualInstances\n .map((instance) =>\n normalizeToArray(instance.props.triggerTarget || instance.reference)\n )\n .reduce((acc, item) => acc.concat(item), []);\n }\n\n function setReferences(): void {\n references = individualInstances.map((instance) => instance.reference);\n }\n\n function enableInstances(isEnabled: boolean): void {\n individualInstances.forEach((instance) => {\n if (isEnabled) {\n instance.enable();\n } else {\n instance.disable();\n }\n });\n }\n\n function interceptSetProps(singleton: Instance): Array<() => void> {\n return individualInstances.map((instance) => {\n const originalSetProps = instance.setProps;\n\n instance.setProps = (props): void => {\n originalSetProps(props);\n\n if (instance.reference === currentTarget) {\n singleton.setProps(props);\n }\n };\n\n return (): void => {\n instance.setProps = originalSetProps;\n };\n });\n }\n\n // have to pass singleton, as it maybe undefined on first call\n function prepareInstance(\n singleton: Instance,\n target: ReferenceElement\n ): void {\n const index = triggerTargets.indexOf(target);\n\n // bail-out\n if (target === currentTarget) {\n return;\n }\n\n currentTarget = target;\n\n const overrideProps: Partial<Props> = (overrides || [])\n .concat('content')\n .reduce((acc, prop) => {\n (acc as any)[prop] = individualInstances[index].props[prop];\n return acc;\n }, {});\n\n singleton.setProps({\n ...overrideProps,\n getReferenceClientRect:\n typeof overrideProps.getReferenceClientRect === 'function'\n ? overrideProps.getReferenceClientRect\n : (): ClientRect => references[index]?.getBoundingClientRect(),\n });\n }\n\n enableInstances(false);\n setReferences();\n setTriggerTargets();\n\n const plugin: Plugin = {\n fn() {\n return {\n onDestroy(): void {\n enableInstances(true);\n },\n onHidden(): void {\n currentTarget = null;\n },\n onClickOutside(instance): void {\n if (instance.props.showOnCreate && !shownOnCreate) {\n shownOnCreate = true;\n currentTarget = null;\n }\n },\n onShow(instance): void {\n if (instance.props.showOnCreate && !shownOnCreate) {\n shownOnCreate = true;\n prepareInstance(instance, references[0]);\n }\n },\n onTrigger(instance, event): void {\n prepareInstance(instance, event.currentTarget as Element);\n },\n };\n },\n };\n\n const singleton = tippy(div(), {\n ...removeProperties(optionalProps, ['overrides']),\n plugins: [plugin, ...(optionalProps.plugins || [])],\n triggerTarget: triggerTargets,\n popperOptions: {\n ...optionalProps.popperOptions,\n modifiers: [\n ...(optionalProps.popperOptions?.modifiers || []),\n applyStylesModifier,\n ],\n },\n }) as CreateSingletonInstance<CreateSingletonProps>;\n\n const originalShow = singleton.show;\n\n singleton.show = (target?: ReferenceElement | Instance | number): void => {\n originalShow();\n\n // first time, showOnCreate or programmatic call with no params\n // default to showing first instance\n if (!currentTarget && target == null) {\n return prepareInstance(singleton, references[0]);\n }\n\n // triggered from event (do nothing as prepareInstance already called by onTrigger)\n // programmatic call with no params when already visible (do nothing again)\n if (currentTarget && target == null) {\n return;\n }\n\n // target is index of instance\n if (typeof target === 'number') {\n return (\n references[target] && prepareInstance(singleton, references[target])\n );\n }\n\n // target is a child tippy instance\n if (individualInstances.indexOf(target as Instance) >= 0) {\n const ref = (target as Instance).reference;\n return prepareInstance(singleton, ref);\n }\n\n // target is a ReferenceElement\n if (references.indexOf(target as ReferenceElement) >= 0) {\n return prepareInstance(singleton, target as ReferenceElement);\n }\n };\n\n singleton.showNext = (): void => {\n const first = references[0];\n if (!currentTarget) {\n return singleton.show(0);\n }\n const index = references.indexOf(currentTarget);\n singleton.show(references[index + 1] || first);\n };\n\n singleton.showPrevious = (): void => {\n const last = references[references.length - 1];\n if (!currentTarget) {\n return singleton.show(last);\n }\n const index = references.indexOf(currentTarget);\n const target = references[index - 1] || last;\n singleton.show(target);\n };\n\n const originalSetProps = singleton.setProps;\n\n singleton.setProps = (props): void => {\n overrides = props.overrides || overrides;\n originalSetProps(props);\n };\n\n singleton.setInstances = (nextInstances): void => {\n enableInstances(true);\n interceptSetPropsCleanups.forEach((fn) => fn());\n\n individualInstances = nextInstances;\n\n enableInstances(false);\n setReferences();\n setTriggerTargets();\n interceptSetPropsCleanups = interceptSetProps(singleton);\n\n singleton.setProps({triggerTarget: triggerTargets});\n };\n\n interceptSetPropsCleanups = interceptSetProps(singleton);\n\n return singleton;\n};\n\nexport default createSingleton;\n", "import tippy from '..';\nimport {TOUCH_OPTIONS} from '../constants';\nimport {defaultProps} from '../props';\nimport {Instance, Props, Targets} from '../types';\nimport {ListenerObject} from '../types-internal';\nimport {normalizeToArray, removeProperties} from '../utils';\nimport {errorWhen} from '../validation';\n\nconst BUBBLING_EVENTS_MAP = {\n mouseover: 'mouseenter',\n focusin: 'focus',\n click: 'click',\n};\n\n/**\n * Creates a delegate instance that controls the creation of tippy instances\n * for child elements (`target` CSS selector).\n */\nfunction delegate(\n targets: Targets,\n props: Partial<Props> & {target: string}\n): Instance | Instance[] {\n /* istanbul ignore else */\n if (__DEV__) {\n errorWhen(\n !(props && props.target),\n [\n 'You must specity a `target` prop indicating a CSS selector string matching',\n 'the target elements that should receive a tippy.',\n ].join(' ')\n );\n }\n\n let listeners: ListenerObject[] = [];\n let childTippyInstances: Instance[] = [];\n let disabled = false;\n\n const {target} = props;\n\n const nativeProps = removeProperties(props, ['target']);\n const parentProps = {...nativeProps, trigger: 'manual', touch: false};\n const childProps = {\n touch: defaultProps.touch,\n ...nativeProps,\n showOnCreate: true,\n };\n\n const returnValue = tippy(targets, parentProps);\n const normalizedReturnValue = normalizeToArray(returnValue);\n\n function onTrigger(event: Event): void {\n if (!event.target || disabled) {\n return;\n }\n\n const targetNode = (event.target as Element).closest(target);\n\n if (!targetNode) {\n return;\n }\n\n // Get relevant trigger with fallbacks:\n // 1. Check `data-tippy-trigger` attribute on target node\n // 2. Fallback to `trigger` passed to `delegate()`\n // 3. Fallback to `defaultProps.trigger`\n const trigger =\n targetNode.getAttribute('data-tippy-trigger') ||\n props.trigger ||\n defaultProps.trigger;\n\n // @ts-ignore\n if (targetNode._tippy) {\n return;\n }\n\n if (event.type === 'touchstart' && typeof childProps.touch === 'boolean') {\n return;\n }\n\n if (\n event.type !== 'touchstart' &&\n trigger.indexOf((BUBBLING_EVENTS_MAP as any)[event.type]) < 0\n ) {\n return;\n }\n\n const instance = tippy(targetNode, childProps);\n\n if (instance) {\n childTippyInstances = childTippyInstances.concat(instance);\n }\n }\n\n function on(\n node: Element,\n eventType: string,\n handler: EventListener,\n options: boolean | Record<string, unknown> = false\n ): void {\n node.addEventListener(eventType, handler, options);\n listeners.push({node, eventType, handler, options});\n }\n\n function addEventListeners(instance: Instance): void {\n const {reference} = instance;\n\n on(reference, 'touchstart', onTrigger, TOUCH_OPTIONS);\n on(reference, 'mouseover', onTrigger);\n on(reference, 'focusin', onTrigger);\n on(reference, 'click', onTrigger);\n }\n\n function removeEventListeners(): void {\n listeners.forEach(({node, eventType, handler, options}: ListenerObject) => {\n node.removeEventListener(eventType, handler, options);\n });\n listeners = [];\n }\n\n function applyMutations(instance: Instance): void {\n const originalDestroy = instance.destroy;\n const originalEnable = instance.enable;\n const originalDisable = instance.disable;\n\n instance.destroy = (shouldDestroyChildInstances = true): void => {\n if (shouldDestroyChildInstances) {\n childTippyInstances.forEach((instance) => {\n instance.destroy();\n });\n }\n\n childTippyInstances = [];\n\n removeEventListeners();\n originalDestroy();\n };\n\n instance.enable = (): void => {\n originalEnable();\n childTippyInstances.forEach((instance) => instance.enable());\n disabled = false;\n };\n\n instance.disable = (): void => {\n originalDisable();\n childTippyInstances.forEach((instance) => instance.disable());\n disabled = true;\n };\n\n addEventListeners(instance);\n }\n\n normalizedReturnValue.forEach(applyMutations);\n\n return returnValue;\n}\n\nexport default delegate;\n", "import {BACKDROP_CLASS} from '../constants';\nimport {div, setVisibilityState} from '../dom-utils';\nimport {getChildren} from '../template';\nimport {AnimateFill} from '../types';\nimport {errorWhen} from '../validation';\n\nconst animateFill: AnimateFill = {\n name: 'animateFill',\n defaultValue: false,\n fn(instance) {\n // @ts-ignore\n if (!instance.props.render?.$$tippy) {\n if (__DEV__) {\n errorWhen(\n instance.props.animateFill,\n 'The `animateFill` plugin requires the default render function.'\n );\n }\n\n return {};\n }\n\n const {box, content} = getChildren(instance.popper);\n\n const backdrop = instance.props.animateFill\n ? createBackdropElement()\n : null;\n\n return {\n onCreate(): void {\n if (backdrop) {\n box.insertBefore(backdrop, box.firstElementChild!);\n box.setAttribute('data-animatefill', '');\n box.style.overflow = 'hidden';\n\n instance.setProps({arrow: false, animation: 'shift-away'});\n }\n },\n onMount(): void {\n if (backdrop) {\n const {transitionDuration} = box.style;\n const duration = Number(transitionDuration.replace('ms', ''));\n\n // The content should fade in after the backdrop has mostly filled the\n // tooltip element. `clip-path` is the other alternative but is not\n // well-supported and is buggy on some devices.\n content.style.transitionDelay = `${Math.round(duration / 10)}ms`;\n\n backdrop.style.transitionDuration = transitionDuration;\n setVisibilityState([backdrop], 'visible');\n }\n },\n onShow(): void {\n if (backdrop) {\n backdrop.style.transitionDuration = '0ms';\n }\n },\n onHide(): void {\n if (backdrop) {\n setVisibilityState([backdrop], 'hidden');\n }\n },\n };\n },\n};\n\nexport default animateFill;\n\nfunction createBackdropElement(): HTMLDivElement {\n const backdrop = div();\n backdrop.className = BACKDROP_CLASS;\n setVisibilityState([backdrop], 'hidden');\n return backdrop;\n}\n", "import {getOwnerDocument, isMouseEvent} from '../dom-utils';\nimport {FollowCursor, Instance} from '../types';\n\nlet mouseCoords = {clientX: 0, clientY: 0};\nlet activeInstances: Array<{instance: Instance; doc: Document}> = [];\n\nfunction storeMouseCoords({clientX, clientY}: MouseEvent): void {\n mouseCoords = {clientX, clientY};\n}\n\nfunction addMouseCoordsListener(doc: Document): void {\n doc.addEventListener('mousemove', storeMouseCoords);\n}\n\nfunction removeMouseCoordsListener(doc: Document): void {\n doc.removeEventListener('mousemove', storeMouseCoords);\n}\n\nconst followCursor: FollowCursor = {\n name: 'followCursor',\n defaultValue: false,\n fn(instance) {\n const reference = instance.reference;\n const doc = getOwnerDocument(instance.props.triggerTarget || reference);\n\n let isInternalUpdate = false;\n let wasFocusEvent = false;\n let isUnmounted = true;\n let prevProps = instance.props;\n\n function getIsInitialBehavior(): boolean {\n return (\n instance.props.followCursor === 'initial' && instance.state.isVisible\n );\n }\n\n function addListener(): void {\n doc.addEventListener('mousemove', onMouseMove);\n }\n\n function removeListener(): void {\n doc.removeEventListener('mousemove', onMouseMove);\n }\n\n function unsetGetReferenceClientRect(): void {\n isInternalUpdate = true;\n instance.setProps({getReferenceClientRect: null});\n isInternalUpdate = false;\n }\n\n function onMouseMove(event: MouseEvent): void {\n // If the instance is interactive, avoid updating the position unless it's\n // over the reference element\n const isCursorOverReference = event.target\n ? reference.contains(event.target as Node)\n : true;\n const {followCursor} = instance.props;\n const {clientX, clientY} = event;\n\n const rect = reference.getBoundingClientRect();\n const relativeX = clientX - rect.left;\n const relativeY = clientY - rect.top;\n\n if (isCursorOverReference || !instance.props.interactive) {\n instance.setProps({\n // @ts-ignore - unneeded DOMRect properties\n getReferenceClientRect() {\n const rect = reference.getBoundingClientRect();\n\n let x = clientX;\n let y = clientY;\n\n if (followCursor === 'initial') {\n x = rect.left + relativeX;\n y = rect.top + relativeY;\n }\n\n const top = followCursor === 'horizontal' ? rect.top : y;\n const right = followCursor === 'vertical' ? rect.right : x;\n const bottom = followCursor === 'horizontal' ? rect.bottom : y;\n const left = followCursor === 'vertical' ? rect.left : x;\n\n return {\n width: right - left,\n height: bottom - top,\n top,\n right,\n bottom,\n left,\n };\n },\n });\n }\n }\n\n function create(): void {\n if (instance.props.followCursor) {\n activeInstances.push({instance, doc});\n addMouseCoordsListener(doc);\n }\n }\n\n function destroy(): void {\n activeInstances = activeInstances.filter(\n (data) => data.instance !== instance\n );\n\n if (activeInstances.filter((data) => data.doc === doc).length === 0) {\n removeMouseCoordsListener(doc);\n }\n }\n\n return {\n onCreate: create,\n onDestroy: destroy,\n onBeforeUpdate(): void {\n prevProps = instance.props;\n },\n onAfterUpdate(_, {followCursor}): void {\n if (isInternalUpdate) {\n return;\n }\n\n if (\n followCursor !== undefined &&\n prevProps.followCursor !== followCursor\n ) {\n destroy();\n\n if (followCursor) {\n create();\n\n if (\n instance.state.isMounted &&\n !wasFocusEvent &&\n !getIsInitialBehavior()\n ) {\n addListener();\n }\n } else {\n removeListener();\n unsetGetReferenceClientRect();\n }\n }\n },\n onMount(): void {\n if (instance.props.followCursor && !wasFocusEvent) {\n if (isUnmounted) {\n onMouseMove(mouseCoords as MouseEvent);\n isUnmounted = false;\n }\n\n if (!getIsInitialBehavior()) {\n addListener();\n }\n }\n },\n onTrigger(_, event): void {\n if (isMouseEvent(event)) {\n mouseCoords = {clientX: event.clientX, clientY: event.clientY};\n }\n wasFocusEvent = event.type === 'focus';\n },\n onHidden(): void {\n if (instance.props.followCursor) {\n unsetGetReferenceClientRect();\n removeListener();\n isUnmounted = true;\n }\n },\n };\n },\n};\n\nexport default followCursor;\n", "import {Modifier, Placement} from '@popperjs/core';\nimport {isMouseEvent} from '../dom-utils';\nimport {BasePlacement, InlinePositioning, Props} from '../types';\nimport {arrayFrom, getBasePlacement} from '../utils';\n\nfunction getProps(props: Props, modifier: Modifier<any, any>): Partial<Props> {\n return {\n popperOptions: {\n ...props.popperOptions,\n modifiers: [\n ...(props.popperOptions?.modifiers || []).filter(\n ({name}) => name !== modifier.name\n ),\n modifier,\n ],\n },\n };\n}\n\nconst inlinePositioning: InlinePositioning = {\n name: 'inlinePositioning',\n defaultValue: false,\n fn(instance) {\n const {reference} = instance;\n\n function isEnabled(): boolean {\n return !!instance.props.inlinePositioning;\n }\n\n let placement: Placement;\n let cursorRectIndex = -1;\n let isInternalUpdate = false;\n let triedPlacements: Array<string> = [];\n\n const modifier: Modifier<\n 'tippyInlinePositioning',\n Record<string, unknown>\n > = {\n name: 'tippyInlinePositioning',\n enabled: true,\n phase: 'afterWrite',\n fn({state}) {\n if (isEnabled()) {\n if (triedPlacements.indexOf(state.placement) !== -1) {\n triedPlacements = [];\n }\n\n if (\n placement !== state.placement &&\n triedPlacements.indexOf(state.placement) === -1\n ) {\n triedPlacements.push(state.placement);\n instance.setProps({\n // @ts-ignore - unneeded DOMRect properties\n getReferenceClientRect: () =>\n getReferenceClientRect(state.placement),\n });\n }\n\n placement = state.placement;\n }\n },\n };\n\n function getReferenceClientRect(placement: Placement): Partial<DOMRect> {\n return getInlineBoundingClientRect(\n getBasePlacement(placement),\n reference.getBoundingClientRect(),\n arrayFrom(reference.getClientRects()),\n cursorRectIndex\n );\n }\n\n function setInternalProps(partialProps: Partial<Props>): void {\n isInternalUpdate = true;\n instance.setProps(partialProps);\n isInternalUpdate = false;\n }\n\n function addModifier(): void {\n if (!isInternalUpdate) {\n setInternalProps(getProps(instance.props, modifier));\n }\n }\n\n return {\n onCreate: addModifier,\n onAfterUpdate: addModifier,\n onTrigger(_, event): void {\n if (isMouseEvent(event)) {\n const rects = arrayFrom(instance.reference.getClientRects());\n const cursorRect = rects.find(\n (rect) =>\n rect.left - 2 <= event.clientX &&\n rect.right + 2 >= event.clientX &&\n rect.top - 2 <= event.clientY &&\n rect.bottom + 2 >= event.clientY\n );\n const index = rects.indexOf(cursorRect);\n cursorRectIndex = index > -1 ? index : cursorRectIndex;\n }\n },\n onHidden(): void {\n cursorRectIndex = -1;\n },\n };\n },\n};\n\nexport default inlinePositioning;\n\nexport function getInlineBoundingClientRect(\n currentBasePlacement: BasePlacement | null,\n boundingRect: DOMRect,\n clientRects: DOMRect[],\n cursorRectIndex: number\n): {\n top: number;\n bottom: number;\n left: number;\n right: number;\n width: number;\n height: number;\n} {\n // Not an inline element, or placement is not yet known\n if (clientRects.length < 2 || currentBasePlacement === null) {\n return boundingRect;\n }\n\n // There are two rects and they are disjoined\n if (\n clientRects.length === 2 &&\n cursorRectIndex >= 0 &&\n clientRects[0].left > clientRects[1].right\n ) {\n return clientRects[cursorRectIndex] || boundingRect;\n }\n\n switch (currentBasePlacement) {\n case 'top':\n case 'bottom': {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = currentBasePlacement === 'top';\n\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n\n return {top, bottom, left, right, width, height};\n }\n case 'left':\n case 'right': {\n const minLeft = Math.min(...clientRects.map((rects) => rects.left));\n const maxRight = Math.max(...clientRects.map((rects) => rects.right));\n const measureRects = clientRects.filter((rect) =>\n currentBasePlacement === 'left'\n ? rect.left === minLeft\n : rect.right === maxRight\n );\n\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n\n return {top, bottom, left, right, width, height};\n }\n default: {\n return boundingRect;\n }\n }\n}\n", "import {VirtualElement} from '@popperjs/core';\nimport {ReferenceElement, Sticky} from '../types';\n\nconst sticky: Sticky = {\n name: 'sticky',\n defaultValue: false,\n fn(instance) {\n const {reference, popper} = instance;\n\n function getReference(): ReferenceElement | VirtualElement {\n return instance.popperInstance\n ? instance.popperInstance.state.elements.reference\n : reference;\n }\n\n function shouldCheck(value: 'reference' | 'popper'): boolean {\n return instance.props.sticky === true || instance.props.sticky === value;\n }\n\n let prevRefRect: ClientRect | null = null;\n let prevPopRect: ClientRect | null = null;\n\n function updatePosition(): void {\n const currentRefRect = shouldCheck('reference')\n ? getReference().getBoundingClientRect()\n : null;\n const currentPopRect = shouldCheck('popper')\n ? popper.getBoundingClientRect()\n : null;\n\n if (\n (currentRefRect && areRectsDifferent(prevRefRect, currentRefRect)) ||\n (currentPopRect && areRectsDifferent(prevPopRect, currentPopRect))\n ) {\n if (instance.popperInstance) {\n instance.popperInstance.update();\n }\n }\n\n prevRefRect = currentRefRect;\n prevPopRect = currentPopRect;\n\n if (instance.state.isMounted) {\n requestAnimationFrame(updatePosition);\n }\n }\n\n return {\n onMount(): void {\n if (instance.props.sticky) {\n updatePosition();\n }\n },\n };\n },\n};\n\nexport default sticky;\n\nfunction areRectsDifferent(\n rectA: ClientRect | null,\n rectB: ClientRect | null\n): boolean {\n if (rectA && rectB) {\n return (\n rectA.top !== rectB.top ||\n rectA.right !== rectB.right ||\n rectA.bottom !== rectB.bottom ||\n rectA.left !== rectB.left\n );\n }\n\n return true;\n}\n", "import tippy from '../src';\nimport {render} from '../src/template';\n\ntippy.setDefaultProps({render});\n\nexport {default, hideAll} from '../src';\nexport {default as createSingleton} from '../src/addons/createSingleton';\nexport {default as delegate} from '../src/addons/delegate';\nexport {default as animateFill} from '../src/plugins/animateFill';\nexport {default as followCursor} from '../src/plugins/followCursor';\nexport {default as inlinePositioning} from '../src/plugins/inlinePositioning';\nexport {default as sticky} from '../src/plugins/sticky';\nexport {ROUND_ARROW as roundArrow} from '../src/constants';\n", "export const isBrowser =\n typeof window !== 'undefined' && typeof document !== 'undefined';\n\nexport function preserveRef(ref, node) {\n if (ref) {\n if (typeof ref === 'function') {\n ref(node);\n }\n if ({}.hasOwnProperty.call(ref, 'current')) {\n ref.current = node;\n }\n }\n}\n\nexport function ssrSafeCreateDiv() {\n return isBrowser && document.createElement('div');\n}\n\nexport function toDataAttributes(attrs) {\n const dataAttrs = {\n 'data-placement': attrs.placement,\n };\n\n if (attrs.referenceHidden) {\n dataAttrs['data-reference-hidden'] = '';\n }\n\n if (attrs.escaped) {\n dataAttrs['data-escaped'] = '';\n }\n\n return dataAttrs;\n}\n\nfunction deepEqual(x, y) {\n if (x === y) {\n return true;\n } else if (\n typeof x === 'object' &&\n x != null &&\n typeof y === 'object' &&\n y != null\n ) {\n if (Object.keys(x).length !== Object.keys(y).length) {\n return false;\n }\n\n for (const prop in x) {\n if (y.hasOwnProperty(prop)) {\n if (!deepEqual(x[prop], y[prop])) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n return true;\n } else {\n return false;\n }\n}\n\nexport function uniqueByShape(arr) {\n const output = [];\n\n arr.forEach(item => {\n if (!output.find(outputItem => deepEqual(item, outputItem))) {\n output.push(item);\n }\n });\n\n return output;\n}\n\nexport function deepPreserveProps(instanceProps, componentProps) {\n return {\n ...componentProps,\n popperOptions: {\n ...instanceProps.popperOptions,\n ...componentProps.popperOptions,\n modifiers: uniqueByShape([\n ...(instanceProps.popperOptions?.modifiers || []),\n ...(componentProps.popperOptions?.modifiers || []),\n ]),\n },\n };\n}\n", "import {isBrowser} from './utils';\nimport {useLayoutEffect, useEffect, useRef} from 'react';\n\nexport const useIsomorphicLayoutEffect = isBrowser\n ? useLayoutEffect\n : useEffect;\n\nexport function useMutableBox(initialValue) {\n // Using refs instead of state as it's recommended to not store imperative\n // values in state due to memory problems in React(?)\n const ref = useRef();\n\n if (!ref.current) {\n ref.current =\n typeof initialValue === 'function' ? initialValue() : initialValue;\n }\n\n return ref.current;\n}\n", "function updateClassName(box, action, classNames) {\n classNames.split(/\\s+/).forEach(name => {\n if (name) {\n box.classList[action](name);\n }\n });\n}\n\nexport const classNamePlugin = {\n name: 'className',\n defaultValue: '',\n fn(instance) {\n const box = instance.popper.firstElementChild;\n const isDefaultRenderFn = () => !!instance.props.render?.$$tippy;\n\n function add() {\n if (instance.props.className && !isDefaultRenderFn()) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n [\n '@tippyjs/react: Cannot use `className` prop in conjunction with',\n '`render` prop. Place the className on the element you are',\n 'rendering.',\n ].join(' '),\n );\n }\n\n return;\n }\n\n updateClassName(box, 'add', instance.props.className);\n }\n\n function remove() {\n if (isDefaultRenderFn()) {\n updateClassName(box, 'remove', instance.props.className);\n }\n }\n\n return {\n onCreate: add,\n onBeforeUpdate: remove,\n onAfterUpdate: add,\n };\n },\n};\n", "import React, {cloneElement, useState} from 'react';\nimport {createPortal} from 'react-dom';\nimport {\n preserveRef,\n ssrSafeCreateDiv,\n toDataAttributes,\n deepPreserveProps,\n} from './utils';\nimport {useMutableBox, useIsomorphicLayoutEffect} from './util-hooks';\nimport {classNamePlugin} from './className-plugin';\n\nexport default function TippyGenerator(tippy) {\n function Tippy({\n children,\n content,\n visible,\n singleton,\n render,\n reference,\n disabled = false,\n ignoreAttributes = true,\n // Filter React development reserved props\n // added by babel-preset-react dev plugins:\n // transform-react-jsx-self and transform-react-jsx-source\n __source,\n __self,\n ...restOfNativeProps\n }) {\n const isControlledMode = visible !== undefined;\n const isSingletonMode = singleton !== undefined;\n\n const [mounted, setMounted] = useState(false);\n const [attrs, setAttrs] = useState({});\n const [singletonContent, setSingletonContent] = useState();\n const mutableBox = useMutableBox(() => ({\n container: ssrSafeCreateDiv(),\n renders: 1,\n }));\n\n const props = {\n ignoreAttributes,\n ...restOfNativeProps,\n content: mutableBox.container,\n };\n\n if (isControlledMode) {\n if (process.env.NODE_ENV !== 'production') {\n ['trigger', 'hideOnClick', 'showOnCreate'].forEach(nativeStateProp => {\n if (props[nativeStateProp] !== undefined) {\n console.warn(\n [\n `@tippyjs/react: Cannot specify \\`${nativeStateProp}\\` prop in`,\n `controlled mode (\\`visible\\` prop)`,\n ].join(' '),\n );\n }\n });\n }\n\n props.trigger = 'manual';\n props.hideOnClick = false;\n }\n\n if (isSingletonMode) {\n disabled = true;\n }\n\n let computedProps = props;\n const plugins = props.plugins || [];\n\n if (render) {\n computedProps = {\n ...props,\n plugins:\n isSingletonMode && singleton.data != null\n ? [\n ...plugins,\n {\n fn() {\n return {\n onTrigger(instance, event) {\n const node = singleton.data.children.find(\n ({instance}) =>\n instance.reference === event.currentTarget,\n );\n instance.state.$$activeSingletonInstance =\n node.instance;\n setSingletonContent(node.content);\n },\n };\n },\n },\n ]\n : plugins,\n render: () => ({popper: mutableBox.container}),\n };\n }\n\n const deps = [reference].concat(children ? [children.type] : []);\n\n // CREATE\n useIsomorphicLayoutEffect(() => {\n let element = reference;\n if (reference && reference.hasOwnProperty('current')) {\n element = reference.current;\n }\n\n const instance = tippy(element || mutableBox.ref || ssrSafeCreateDiv(), {\n ...computedProps,\n plugins: [classNamePlugin, ...(props.plugins || [])],\n });\n\n mutableBox.instance = instance;\n\n if (disabled) {\n instance.disable();\n }\n\n if (visible) {\n instance.show();\n }\n\n if (isSingletonMode) {\n singleton.hook({\n instance,\n content,\n props: computedProps,\n setSingletonContent,\n });\n }\n\n setMounted(true);\n\n return () => {\n instance.destroy();\n singleton?.cleanup(instance);\n };\n }, deps);\n\n // UPDATE\n useIsomorphicLayoutEffect(() => {\n // Prevent this effect from running on 1st render\n if (mutableBox.renders === 1) {\n mutableBox.renders++;\n return;\n }\n\n const {instance} = mutableBox;\n\n instance.setProps(deepPreserveProps(instance.props, computedProps));\n\n // Fixes #264\n instance.popperInstance?.forceUpdate();\n\n if (disabled) {\n instance.disable();\n } else {\n instance.enable();\n }\n\n if (isControlledMode) {\n if (visible) {\n instance.show();\n } else {\n instance.hide();\n }\n }\n\n if (isSingletonMode) {\n singleton.hook({\n instance,\n content,\n props: computedProps,\n setSingletonContent,\n });\n }\n });\n\n useIsomorphicLayoutEffect(() => {\n if (!render) {\n return;\n }\n\n const {instance} = mutableBox;\n\n instance.setProps({\n popperOptions: {\n ...instance.props.popperOptions,\n modifiers: [\n ...(instance.props.popperOptions?.modifiers || []).filter(\n ({name}) => name !== '$$tippyReact',\n ),\n {\n name: '$$tippyReact',\n enabled: true,\n phase: 'beforeWrite',\n requires: ['computeStyles'],\n fn({state}) {\n const hideData = state.modifiersData?.hide;\n\n // WARNING: this is a high-risk path that can cause an infinite\n // loop. This expression _must_ evaluate to false when required\n if (\n attrs.placement !== state.placement ||\n attrs.referenceHidden !== hideData?.isReferenceHidden ||\n attrs.escaped !== hideData?.hasPopperEscaped\n ) {\n setAttrs({\n placement: state.placement,\n referenceHidden: hideData?.isReferenceHidden,\n escaped: hideData?.hasPopperEscaped,\n });\n }\n\n state.attributes.popper = {};\n },\n },\n ],\n },\n });\n }, [attrs.placement, attrs.referenceHidden, attrs.escaped, ...deps]);\n\n return (\n <>\n {children\n ? cloneElement(children, {\n ref(node) {\n mutableBox.ref = node;\n preserveRef(children.ref, node);\n },\n })\n : null}\n {mounted &&\n createPortal(\n render\n ? render(\n toDataAttributes(attrs),\n singletonContent,\n mutableBox.instance,\n )\n : content,\n mutableBox.container,\n )}\n </>\n );\n }\n\n return Tippy;\n}\n", "import {useMutableBox, useIsomorphicLayoutEffect} from './util-hooks';\nimport {deepPreserveProps} from './utils';\nimport {classNamePlugin} from './className-plugin';\nimport {useMemo, useState} from 'react';\n\nexport default function useSingletonGenerator(createSingleton) {\n return function useSingleton({disabled = false, overrides = []} = {}) {\n const [mounted, setMounted] = useState(false);\n const mutableBox = useMutableBox({\n children: [],\n renders: 1,\n });\n\n useIsomorphicLayoutEffect(() => {\n if (!mounted) {\n setMounted(true);\n return;\n }\n\n const {children, sourceData} = mutableBox;\n\n if (!sourceData) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n [\n '@tippyjs/react: The `source` variable from `useSingleton()` has',\n 'not been passed to a <Tippy /> component.',\n ].join(' '),\n );\n }\n\n return;\n }\n\n const instance = createSingleton(\n children.map(child => child.instance),\n {\n ...sourceData.props,\n popperOptions: sourceData.instance.props.popperOptions,\n overrides,\n plugins: [classNamePlugin, ...(sourceData.props.plugins || [])],\n },\n );\n\n mutableBox.instance = instance;\n\n if (disabled) {\n instance.disable();\n }\n\n return () => {\n instance.destroy();\n mutableBox.children = children.filter(\n ({instance}) => !instance.state.isDestroyed,\n );\n };\n }, [mounted]);\n\n useIsomorphicLayoutEffect(() => {\n if (!mounted) {\n return;\n }\n\n if (mutableBox.renders === 1) {\n mutableBox.renders++;\n return;\n }\n\n const {children, instance, sourceData} = mutableBox;\n\n if (!(instance && sourceData)) {\n return;\n }\n\n const {content, ...props} = sourceData.props;\n\n instance.setProps(\n deepPreserveProps(instance.props, {\n ...props,\n overrides,\n }),\n );\n\n instance.setInstances(children.map(child => child.instance));\n\n if (disabled) {\n instance.disable();\n } else {\n instance.enable();\n }\n });\n\n return useMemo(() => {\n const source = {\n data: mutableBox,\n hook(data) {\n mutableBox.sourceData = data;\n mutableBox.setSingletonContent = data.setSingletonContent;\n },\n cleanup() {\n mutableBox.sourceData = null;\n },\n };\n\n const target = {\n hook(data) {\n mutableBox.children = mutableBox.children.filter(\n ({instance}) => data.instance !== instance,\n );\n mutableBox.children.push(data);\n\n if (\n mutableBox.instance?.state.isMounted &&\n mutableBox.instance?.state.$$activeSingletonInstance ===\n data.instance\n ) {\n mutableBox.setSingletonContent?.(data.content);\n }\n\n if (mutableBox.instance && !mutableBox.instance.state.isDestroyed) {\n mutableBox.instance.setInstances(\n mutableBox.children.map(child => child.instance),\n );\n }\n },\n cleanup(instance) {\n mutableBox.children = mutableBox.children.filter(\n data => data.instance !== instance,\n );\n\n if (mutableBox.instance && !mutableBox.instance.state.isDestroyed) {\n mutableBox.instance.setInstances(\n mutableBox.children.map(child => child.instance),\n );\n }\n },\n };\n\n return [source, target];\n }, []);\n };\n}\n", "import React, {cloneElement, forwardRef} from 'react';\nimport {preserveRef} from './utils';\n\nexport default (Tippy, defaultProps) =>\n forwardRef(function TippyWrapper({children, ...props}, ref) {\n return (\n // If I spread them separately here, Babel adds the _extends ponyfill for\n // some reason\n <Tippy {...{...defaultProps, ...props}}>\n {children\n ? cloneElement(children, {\n ref(node) {\n preserveRef(ref, node);\n preserveRef(children.ref, node);\n },\n })\n : null}\n </Tippy>\n );\n });\n", "import tippy, {createSingleton} from 'tippy.js';\nimport TippyGenerator from './Tippy';\nimport useSingletonGenerator from './useSingleton';\nimport forwardRef from './forwardRef';\n\nconst useSingleton = useSingletonGenerator(createSingleton);\n\nexport default forwardRef(TippyGenerator(tippy));\nexport {useSingleton, tippy};\n", "import { useDeepMemo } from '@lib/hooks/use-deep-memo';\nimport type { TippyProps } from '@tippyjs/react';\nimport Tippy from '@tippyjs/react';\nimport classNames from 'classnames';\nimport isArray from 'lodash/isArray';\nimport * as React from 'react';\nimport type { Instance as TippyInstance } from 'tippy.js';\n\nimport type { ActionProps } from '#form/Action';\nimport { Action } from '#form/Action';\nimport { useComponentWarning } from '#internals/component-warning';\nimport { HorizontalSeparator } from '#layout/HorizontalSeparator';\nimport { Spacing } from '#layout/Spacing';\nimport { ThemeClassNames } from '#lib/color/theme';\nimport { useElevation } from '#lib/dialogs/use-elevation';\nimport { getPortalTarget } from '#lib/dom/get-portal-target';\nimport { testChildren } from '#lib/misc/test-children';\nimport { usePrevious } from '#lib/misc/use-previous';\nimport { ThemeProvider } from '#misc/ThemeProvider';\nimport { Link } from '#nav/Link';\nimport type { KeyboardShortcutProps } from '#typography/KeyboardShortcut';\nimport { KeyboardShortcut } from '#typography/KeyboardShortcut';\nimport type { TOOLTIP_DELAY } from '#ui-constants';\nimport { TOOLTIP_DELAYS, ANIMATION_DURATIONS } from '#ui-constants';\n\nimport { useEscapeDismissal } from './_use-escape-dismissal';\nimport './tooltip.less';\n\n// Make the element as narrow as possible while maintaining its current height (number of lines). Binary search.\nconst squeezeContainer = (\n wrapperElement: HTMLDivElement,\n measuredElement: HTMLDivElement,\n originalHeight: number,\n bottomRange: number,\n topRange: number,\n) => {\n const mid = Math.ceil((bottomRange + topRange) / 2);\n\n if (bottomRange >= topRange) {\n wrapperElement.style.maxWidth = `${topRange}px`;\n\n return;\n }\n const originalMaxWidth = wrapperElement.style.maxWidth;\n wrapperElement.style.maxWidth = `${mid}px`;\n if (measuredElement.scrollWidth > measuredElement.clientWidth) {\n // the inside node doesn't reflow, abort squeezing\n wrapperElement.style.maxWidth = originalMaxWidth;\n return;\n }\n\n if (wrapperElement.clientHeight > originalHeight) {\n // we've squeezed too far and element has spilled onto an additional line; recurse on wider range\n squeezeContainer(\n wrapperElement,\n measuredElement,\n originalHeight,\n mid + 1,\n topRange,\n );\n } else {\n // element has not wrapped to another line; keep squeezing!\n squeezeContainer(\n wrapperElement,\n measuredElement,\n originalHeight,\n bottomRange + 1,\n mid,\n );\n }\n};\n\n/*\n * As for the 2nd of February, I remove the prop sticky and the plugin \"sticky\":\n * - They weren't used\n * - It doesn't seem to be required anymore and seems to be working OOTB\n * But we can re-enable it\n */\n\nconst BLOCK = 'druids_dialogs_tooltip';\n\ntype PickedHTMLProps = Pick<\n React.HTMLAttributes<HTMLDivElement | HTMLAnchorElement>,\n | 'onMouseEnter'\n | 'onMouseLeave'\n | 'onClick'\n | 'onDoubleClick'\n | 'children'\n | 'role'\n>;\n\ntype PickedTippyProps = Pick<\n TippyProps,\n | 'placement'\n | 'maxWidth'\n | 'onHide'\n | 'onShow'\n | 'triggerTarget'\n | 'offset'\n | 'getReferenceClientRect'\n> & {\n reference?: TippyProps['reference'] | React.RefObject<Element | null>;\n};\n\nexport interface TooltipProps extends PickedHTMLProps, PickedTippyProps {\n /** Extra HTML class attribute(s) to apply to the wrapper */\n className?: string;\n\n /** Extra HTML class attribute(s) to apply to the Tooltip itself */\n tooltipClassName?: string;\n\n /** What's inside the tooltip itself */\n content?: React.ReactNode;\n\n /** use this if you want the component to be controlled */\n isOpen?: boolean;\n\n /** Is the tooltip enabled */\n isEnabled?: boolean;\n\n /**\n * Alternative display for the wrapper element.\n * Use `reference` to omit an extra wrapper completely.\n */\n display?: 'inline' | 'inline-flex' | 'flex' | 'grid';\n\n /** if there are nested tooltips, pass the content to them instead of rendering overlapping tooltips */\n shouldMergeNestedTooltips?: boolean;\n\n /**\n * Allows the user to interact with content inside the Tooltip.\n *\n * When used, makes the `<Tooltip>` look like a `<Popover`>.\n */\n isInteractive?: boolean;\n\n /** Should the tooltip be shown when the enabled state changes from false? */\n shouldShowOnEnabled?: boolean;\n\n /** The html element that would be used (only intrinsic allowed for proper ref handling) */\n as?: 'div' | 'span' | 'a';\n\n /** Should the tooltip be animated on show/hide? */\n isAnimated?: boolean;\n\n /** Delay before showing the tooltip. */\n delay?: TOOLTIP_DELAY | [TOOLTIP_DELAY, TOOLTIP_DELAY];\n\n /**\n * Does the content have an emphasis to show that it's hoverable?\n * Uses an `<Action>` under-the-hood to do so, so can change the layout a bit\n */\n hasHoverEmphasis?: boolean;\n\n /** Whether the tooltip has an arrow */\n hasArrow?: boolean;\n\n /**\n * Whether the `<Tooltip>` look like a `<Popover`>\n * Uses `isInteractive` value by default\n */\n shouldLookLikePopover?: boolean;\n\n /**\n * Maximum number of lines for the tooltip content. If set, content will be cropped and show ellipsis.\n */\n maxNumberOfLines?: number;\n\n /**\n * Should the text in the tooltip be balanced\n */\n shouldBalanceText?: boolean;\n\n /**\n * Keyboard shortcut to display at the end of the tooltip content.\n */\n shortcut?: KeyboardShortcutProps['keys'];\n\n /** Optional props to pass to the `<KeyboardShortcut>` component. */\n shortcutProps?: Omit<KeyboardShortcutProps, 'keys'>;\n}\n\n// When a Tooltip is used with a reference, we don\u2019t need to pass any of the\n// props that control the tooltip\u2019s handle wrapper element.\nexport type ReferenceOnlyTooltipProps = Omit<\n TooltipProps,\n 'display' | 'className' | 'as' | 'hasHoverEmphasis'\n>;\n\nconst TIPPY_OPTIONS: TippyProps = {\n popperOptions: {\n strategy: 'fixed',\n modifiers: [\n {\n name: 'preventOverflow',\n options: {\n mainAxis: true,\n altAxis: true,\n rootBoundary: 'viewport',\n },\n },\n ],\n },\n // Pass as function for tippy to invoke instead of immediately calling\n // and providing the HTMLElement.\n // This delays creating of the `druids_portal` element until the first\n // render so that it appears after the `react-app` render root element.\n // The `getPortalTarget` function will only create the element once so\n // it is okay to let tippy use the function form.\n appendTo: getPortalTarget,\n zIndex: 10000,\n};\n\nconst DEFAULT_OFFSET: [number, number] = [0, 10];\n\nexport interface TooltipContextValue {\n content: TooltipProps['content'];\n setEnabled: (isEnabled: boolean) => void;\n}\n\nexport const TooltipContext: React.Context<TooltipContextValue> =\n React.createContext<TooltipContextValue>({\n content: '',\n setEnabled: () => {},\n });\n\n// Tippy uses cloneElement with the `ref` prop, so it needs to work\nconst ActionWithRef = React.forwardRef<HTMLElement, ActionProps>(\n (props, ref) => <Action {...props} innerRef={ref} />,\n);\n\n/**\n * Displays short, text-only info about a hovered element\n *\n * [View in DRUIDS style guide \u2197](https://druids.us1.prod.dog/components/dialogs/Tooltip?ref=jsdoc)\n */\nexport const Tooltip: React.FunctionComponent<TooltipProps> = ({\n content = '',\n placement = 'top',\n maxWidth = 300,\n display = 'inline',\n delay = 'none',\n isAnimated = false,\n shouldShowOnEnabled = false,\n isOpen,\n className,\n tooltipClassName,\n children,\n shouldMergeNestedTooltips,\n isInteractive,\n isEnabled: isEnabledProp = true,\n onShow: onShowProp,\n onHide: onHideProp,\n as: asProp = 'div',\n reference,\n triggerTarget,\n hasHoverEmphasis,\n hasArrow = true,\n offset = DEFAULT_OFFSET,\n shouldLookLikePopover = isInteractive,\n maxNumberOfLines,\n shouldBalanceText = !maxNumberOfLines,\n shortcut,\n shortcutProps,\n getReferenceClientRect = null,\n ...props\n}) => {\n const wrapperRef = React.useRef<HTMLElement | null>(null);\n\n // Stores the child's aria-describedby before tooltip modifies it (null = no original value)\n const childOriginalDescribedByRef = React.useRef<string | null>(null);\n\n // When wrapper path is used, we need to manually propagate aria-describedby to child\n // as Tippy does not do it automatically.\n const needsManualAriaDescribedBy =\n reference === undefined && !hasHoverEmphasis;\n\n useComponentWarning({\n componentName: 'Tooltip',\n type: 'misuse',\n message:\n 'hasHoverEmphasis requires the Tooltip to add an extra element. So cannot be used with reference',\n shouldWarn: Boolean(hasHoverEmphasis && reference),\n });\n\n const hasLinkInContent = testChildren(content, (child) => {\n return React.isValidElement(child) && child.type === Link;\n });\n\n // TODO(DRUIDS-7796): Replace with conditional warning callback when available\n useComponentWarning({\n componentName: 'Tooltip',\n type: 'misuse',\n message:\n 'Tooltip content should not contain <Link>. Links are not accessible in non-interactive tooltips. Use isInteractive={true} to make the tooltip accessible.',\n shouldWarn: hasLinkInContent && !isInteractive,\n });\n\n const TagName = hasHoverEmphasis ? ActionWithRef : asProp;\n\n const [tippyInstance, setTippyInstance] = React.useState<TippyInstance>();\n const isOpenRef = React.useRef(isOpen);\n isOpenRef.current = isOpen;\n\n const { startListeningToEsc, stopListeningToEsc } = useEscapeDismissal({\n tippyInstance,\n });\n\n const hideTooltip = React.useCallback(() => {\n // We need to do this only when the Tooltip is uncontrolled\n if (tippyInstance && isOpenRef.current !== true) {\n // Interactive tooltips don't disappear\n // on scroll, so we need to hide them manually.\n tippyInstance.unmount();\n }\n }, [tippyInstance]);\n const { content: parentContent, setEnabled: setParentEnabled } =\n React.useContext(TooltipContext);\n\n const onMount: TippyProps['onMount'] = (instance) => {\n // Propagate aria-describedby from wrapper to child for accessibility\n if (needsManualAriaDescribedBy) {\n const wrapper = wrapperRef.current;\n const child = wrapper?.firstElementChild;\n\n if (wrapper && child) {\n // Store current aria-describedby on every show (not just the first)\n // to capture any new values added by consumers (e.g., form validation)\n childOriginalDescribedByRef.current =\n child.getAttribute('aria-describedby');\n\n // Tippy automatically adds an aria-describedby to the wrapper, we store it to\n // propagate it manually to the child.\n const wrapperDescribedBy =\n wrapper.getAttribute('aria-describedby');\n\n if (wrapperDescribedBy) {\n // Consumers may pass in an aria-describedby to the wrapper, we store it to\n // propagate it manually to the child (together with the tippy-generated one).\n const originalDescribedBy =\n childOriginalDescribedByRef.current;\n\n const combined = originalDescribedBy\n ? [originalDescribedBy, wrapperDescribedBy]\n .filter(Boolean)\n .join(' ')\n : wrapperDescribedBy;\n\n child.setAttribute('aria-describedby', combined);\n }\n }\n }\n\n // try to avoid weird text wrapping when it's only text\n const tippyBox = instance.popper.querySelector(\n `.${BLOCK}__tooltip`,\n ) as HTMLDivElement;\n const tippyContent = tippyBox.querySelector(\n '.tippy-content',\n ) as HTMLDivElement;\n\n if (!(tippyBox && tippyContent && tippyBox?.children.length)) {\n return;\n }\n\n const originalMaxWidth = tippyBox.style.maxWidth.endsWith('px')\n ? parseInt(tippyBox.style.maxWidth, 10)\n : undefined;\n // If the element is initially smaller than the maxWidth, that means\n // it does not wrap, so no need to apply the squeeze.\n const isAlreadySqueezed =\n originalMaxWidth && tippyBox.clientWidth < originalMaxWidth;\n if (isAlreadySqueezed || !shouldBalanceText) {\n return;\n }\n\n // Inside the squeeze we measure the content, but apply the maxWidth on the wrapper\n // as the other elements (like arrow) are decoration only but influence sizing\n // initial measurement is on the wrapper as user can pass in a maxWidth.\n // clientWidth will return a truncated value (no subpixel), we round up for good measure\n squeezeContainer(\n tippyBox,\n tippyContent,\n tippyBox.clientHeight,\n 0,\n tippyBox.clientWidth + 1,\n );\n instance?.popperInstance?.forceUpdate();\n };\n\n // If the isOpen is a boolean, use it for the isEnabled\n // Otherwise, we need to somehow be able to maybe receive the custom callbacks to use\n // like toggleEnabled, as we don't want to adjust the state here.\n const { style: elevationStyle, setIsEnabled } = useElevation({\n legacyElevation: 'top',\n isEnabled: isOpen === true,\n });\n\n const onShow: TippyProps['onShow'] = (instance) => {\n // Prevent parent tooltip from showing when focus is on a nested tooltip's child\n // (focusin bubbles, so we need to check if focus is inside a nested tooltip)\n // Only block if the focused tooltip wrapper is a descendant of current wrapper\n const focusedElement = document.activeElement;\n const wrapper = wrapperRef.current;\n const closestTooltipWrapper = focusedElement?.closest(`.${BLOCK}`);\n const isFocusInsideNestedTooltip =\n closestTooltipWrapper &&\n closestTooltipWrapper !== wrapper &&\n wrapper?.contains(closestTooltipWrapper);\n\n if (isFocusInsideNestedTooltip) {\n return false;\n }\n\n setIsEnabled(true);\n if (onShowProp) {\n onShowProp(instance);\n }\n if (setParentEnabled) {\n setParentEnabled(false);\n }\n window.addEventListener('scroll', hideTooltip);\n\n startListeningToEsc();\n\n // Tippy's onShow can return `false` to cancel showing. TypeScript requires\n // consistent return types, so we explicitly return undefined here.\n return undefined;\n };\n\n const onHide: TippyProps['onHide'] = (instance) => {\n setIsEnabled(false);\n if (onHideProp) {\n onHideProp(instance);\n }\n if (setParentEnabled) {\n setParentEnabled(true);\n }\n window.removeEventListener('scroll', hideTooltip);\n\n stopListeningToEsc();\n\n // Restore original aria-describedby on child when tooltip hides\n if (needsManualAriaDescribedBy) {\n const wrapper = wrapperRef.current;\n const child = wrapper?.firstElementChild;\n\n if (child) {\n const originalDescribedBy = childOriginalDescribedByRef.current;\n\n if (originalDescribedBy) {\n child.setAttribute('aria-describedby', originalDescribedBy);\n } else {\n child.removeAttribute('aria-describedby');\n }\n }\n }\n };\n\n const memoizedShortcut = useDeepMemo(shortcut);\n const memoizedShortcutProps = useDeepMemo(shortcutProps);\n\n const isEnabled =\n Boolean(parentContent || content || memoizedShortcut) && isEnabledProp;\n const prevIsEnabled = usePrevious(isEnabled);\n\n const setEnabled = React.useCallback(\n (shouldEnable: boolean) => {\n if (tippyInstance) {\n if (shouldEnable && isEnabled) {\n tippyInstance.enable();\n } else {\n tippyInstance.disable();\n }\n }\n },\n [tippyInstance, isEnabled],\n );\n\n const wrapperClassName = classNames(BLOCK, className);\n\n const combinedContent = React.useMemo(() => {\n let innerContent = content;\n if (maxNumberOfLines && content) {\n innerContent = (\n <div\n className={`${BLOCK}__cropped-content`}\n style={{\n WebkitLineClamp: maxNumberOfLines,\n }}\n >\n {content}\n </div>\n );\n }\n\n let keyboardShortcutElement: React.ReactNode = null;\n if (memoizedShortcut) {\n keyboardShortcutElement = (\n <KeyboardShortcut\n variant={shouldLookLikePopover ? 'default' : 'knockout'}\n size=\"sm\"\n // `variant` and `size` can be overridden.\n {...memoizedShortcutProps}\n keys={memoizedShortcut}\n />\n );\n }\n if (memoizedShortcut && innerContent) {\n innerContent = (\n <>\n {innerContent}\n <Spacing marginLeft=\"sm\">{keyboardShortcutElement}</Spacing>\n </>\n );\n } else if (memoizedShortcut && !innerContent) {\n // If only shortcut is provided without content\n innerContent = keyboardShortcutElement;\n }\n\n return parentContent && innerContent ? (\n <>\n {parentContent}\n <HorizontalSeparator marginY=\"xs\" />\n {innerContent}\n </>\n ) : (\n parentContent || innerContent\n );\n }, [\n content,\n parentContent,\n maxNumberOfLines,\n memoizedShortcut,\n memoizedShortcutProps,\n shouldLookLikePopover,\n ]);\n\n if (\n // Asserting as potentially `undefined`, as absent in tests\n (document.createRange as typeof document.createRange | undefined) &&\n shouldShowOnEnabled &&\n tippyInstance &&\n prevIsEnabled === false &&\n isEnabled === true\n ) {\n tippyInstance.enable();\n tippyInstance.show();\n }\n\n const contextValue = React.useMemo(\n () => ({\n content:\n shouldMergeNestedTooltips && isEnabled ? combinedContent : null,\n setEnabled,\n }),\n [combinedContent, setEnabled, shouldMergeNestedTooltips, isEnabled],\n );\n\n // In controlled mode, Tippy doesn't allow trigger prop\n const isControlledMode = typeof isOpen === 'boolean';\n\n return (\n <Tippy\n {...TIPPY_OPTIONS}\n {...elevationStyle}\n // Only specify trigger in uncontrolled mode - controlled mode uses visible prop\n {...(!isControlledMode && { trigger: 'mouseenter focusin' })}\n className={classNames(\n `${BLOCK}__tooltip`,\n {\n [`${BLOCK}__tooltip--popover`]: shouldLookLikePopover,\n // We need \u201Cdark-mode\u201D there as the background of a tooltip\n // is always dark unless it's a popover.\n // Note: The `forcedTheme` prop of `ThemeProvider` will not work here,\n // as it will only apply the CSS class to the inner content, not the outer wrapper (where CSS variables are applied).\n [ThemeClassNames.dark]: !shouldLookLikePopover,\n },\n tooltipClassName,\n )}\n content={\n combinedContent ? (\n !isInteractive ? (\n <ThemeProvider forcedTheme=\"dark\" hasWrapper={false}>\n {combinedContent}\n </ThemeProvider>\n ) : (\n combinedContent\n )\n ) : (\n ''\n )\n }\n getReferenceClientRect={getReferenceClientRect}\n maxWidth={maxWidth}\n visible={isOpen}\n placement={placement}\n interactive={isInteractive}\n arrow={hasArrow}\n offset={offset}\n onCreate={setTippyInstance}\n onShow={onShow}\n onMount={onMount}\n onHide={onHide}\n disabled={!isEnabled}\n reference={reference as React.RefObject<Element>}\n triggerTarget={triggerTarget}\n delay={\n isArray(delay)\n ? [TOOLTIP_DELAYS[delay[0]], TOOLTIP_DELAYS[delay[1]]]\n : TOOLTIP_DELAYS[delay]\n }\n animation={isAnimated ? 'fade' : 'none'}\n duration={isAnimated ? ANIMATION_DURATIONS.short : 0}\n >\n {hasHoverEmphasis || reference === undefined ? (\n <TagName\n ref={(node: HTMLElement | null) => {\n wrapperRef.current = node;\n }}\n className={wrapperClassName}\n style={{ display }}\n // Maybe we could want to make all tooltips focusable?\n // But in most cases, if it wraps an interactive element, it can be annoying to have 2 focusable elements\n // So only applying it to dotted tooltips is a good compromise\n {...(hasHoverEmphasis\n ? {\n shouldInherit: true,\n underline: 'dotted',\n // No need for `<div>` or `<span>` (inaccessible)\n as: asProp === 'a' ? 'a' : undefined,\n }\n : {})}\n {...props}\n >\n <TooltipContext.Provider value={contextValue}>\n {children}\n </TooltipContext.Provider>\n </TagName>\n ) : (\n <TooltipContext.Provider value={contextValue}>\n {children}\n </TooltipContext.Provider>\n )}\n </Tippy>\n );\n};\n", "import classNames from 'classnames';\nimport * as React from 'react';\n\nimport { focusVisible } from '#lib/accessibility/focusVisible/focus-visible';\nimport type {\n ExtraDOMProps,\n MarginProps,\n PaddingProps,\n LockupProps,\n} from '#lib/components-helpers';\nimport { handleHelpersClassNames } from '#lib/components-helpers';\nimport type { AsPropType } from '#lib/misc/use-as-component';\nimport { useAsComponent } from '#lib/misc/use-as-component';\nimport { useSmoothAnchorLink } from '#lib/routing/use-smooth-anchor-link';\nimport { getExternalProps } from '#nav/Link/link.utils';\nimport type { STATUS_LEVELS } from '#ui-constants';\n\nimport './action.less';\n\nexport const BLOCK = 'druids_form_action';\n\ninterface ActionButtonProps\n extends Omit<React.HTMLProps<HTMLButtonElement>, 'onClick' | 'as'> {\n onClick: Exclude<React.HTMLProps<HTMLButtonElement>['onClick'], undefined>;\n\n // Removing the props that can't be used with a button\n href?: never;\n isExternal?: never;\n}\n\ninterface ActionLinkProps\n extends Omit<React.HTMLProps<HTMLAnchorElement>, 'href' | 'as'> {\n /** An optional prop, allowing using the Action as a link */\n href: Exclude<React.HTMLProps<HTMLAnchorElement>['href'], undefined>;\n /** Does the link point to an external domain? It\u2019s \"false\" by default; setting it to \"true\" automatically adds target=\"_blank\" and rel=\"noopener noreferrer\" */\n isExternal?: boolean;\n}\n\ninterface ActionAsProps extends Omit<React.HTMLProps<HTMLElement>, 'as'> {\n href?: never;\n isExternal?: never;\n}\n\ninterface ActionPropsInterface\n extends PaddingProps,\n MarginProps,\n LockupProps,\n ExtraDOMProps {\n /**\n * Component to render the element with\n * (the component must accept `style` and `className` props)\n */\n as?: AsPropType;\n\n /** HTML `aria-label` attribute */\n ariaLabel?: string;\n\n /** Is the component disabled? */\n isDisabled?: boolean;\n\n /** Has the Action triggered some other element which is currently open (like a `<Popover>`)? */\n isActive?: boolean;\n\n /** If added, applies a hover */\n hoverStyle?: 'color' | 'background' | 'soft-background';\n\n /** If added, applies an underline */\n underline?: 'solid' | 'on-hover' | 'dotted';\n\n /** The cursor that is shown when hovering over the Action */\n cursor?: 'default' | 'help';\n\n /** Usage and color, is applied only if the `hoverStyle` is defined */\n level?: STATUS_LEVELS;\n\n /** When `true`, scroll to the linked anchor on the same page with a smooth transition */\n hasSmoothAnchorLink?: boolean;\n\n /** Should the Action inherit the font and color? */\n shouldInherit?: boolean;\n\n /** [Ref](https://reactjs.org/docs/refs-and-the-dom.html) for the element */\n innerRef?: React.Ref<HTMLElement | null>;\n\n /** Extra HTML class attribute(s) to apply to the overall Action */\n className?: string;\n}\n\nexport type ActionProps = ActionPropsInterface &\n (ActionButtonProps | ActionLinkProps | ActionAsProps);\n\n/**\n * Provides an accessible, unstyled foundation for a clickable element (such as an `<a>` or `<button>`) on top of which more complex styling can be built\n *\n * [View in DRUIDS style guide \u2197](https://druids.us1.prod.dog/components/form/Action?ref=jsdoc)\n */\nexport const Action: React.FunctionComponent<ActionProps> = ({\n href: hrefProp,\n isDisabled,\n isActive,\n hoverStyle,\n underline,\n cursor = 'default',\n level = hoverStyle ? 'default' : undefined,\n as = hrefProp ? 'a' : 'button',\n type = as === 'button' ? 'button' : undefined,\n className,\n onClick: onClickProp,\n children,\n isExternal = false,\n hasSmoothAnchorLink = false,\n shouldInherit = false,\n innerRef,\n dataAttrs,\n ariaAttrs,\n ariaLabel,\n onMouseEnter,\n ...rest\n}) => {\n const [helperClassNames, props] = handleHelpersClassNames(rest, [\n 'margin',\n 'padding',\n 'lockups',\n ]);\n\n const [Component, { href: hrefAs, onClick: onClickAs }] =\n useAsComponent(as);\n const href: typeof hrefProp = hrefProp || hrefAs;\n const combinedOnClick: typeof onClickProp =\n onClickProp || onClickAs\n ? // TODO: there should be a better way to do this without `any`.\n (event: React.MouseEvent<any>) => {\n if (onClickAs) {\n onClickAs(event);\n }\n if (onClickProp) {\n onClickProp(event);\n }\n }\n : undefined;\n const onClick = useSmoothAnchorLink({\n href,\n onClick: combinedOnClick as React.MouseEventHandler<HTMLAnchorElement>,\n isEnabled: hasSmoothAnchorLink,\n });\n const isBasic = typeof Component === 'string';\n React.useEffect(focusVisible, []);\n\n const externalProps = getExternalProps(href);\n\n return (\n <Component\n {...ariaAttrs}\n {...(ariaLabel !== undefined && { 'aria-label': ariaLabel })}\n data-dd-action-name=\"Action\"\n {...dataAttrs}\n className={classNames(\n BLOCK,\n {\n [`${BLOCK}--has-${hoverStyle}-on-hover`]: hoverStyle,\n [`${BLOCK}--${level}-hover${\n hoverStyle === 'soft-background' ? '-soft' : ''\n }`]: level,\n [`${BLOCK}--is-disabled`]: isDisabled,\n [`${BLOCK}--is-active`]: isActive,\n [`${BLOCK}--is-basic`]: isBasic,\n [`${BLOCK}--should-inherit`]: shouldInherit,\n [`${BLOCK}--underline-${underline}`]: underline,\n [`${BLOCK}--cursor-${cursor}`]: cursor !== 'default',\n },\n className,\n helperClassNames,\n )}\n href={isDisabled ? undefined : href}\n onClick={isDisabled ? undefined : onClick}\n onMouseEnter={onMouseEnter}\n type={type}\n disabled={as === 'button' && isDisabled ? true : undefined}\n ref={innerRef}\n {...(isExternal ? externalProps : {})}\n {...props}\n >\n {children}\n </Component>\n );\n};\n", "/* eslint-disable eqeqeq */\n// This polyfill has been cloned from the source and slightly modified so its function can be exported. It can't be imported as a package because it executes automatically on DOM ready. This means webpack would tree-shake out any CSS rules we write to target the `.focus-visible` class applied by the polyfill, since it doesn't realize those rules will ever be needed.\n\n// Once browser support for the `:focus-visible` CSS pseudo class is more widespread (https://caniuse.com/#search=%3Afocus-visible), we can remove the polyfill altogether and simply apply `:focus-visible` styling directly on elements as appropriate.\n\nimport once from 'lodash/once';\n\n// v5.0.2\n// See https://github.com/WICG/focus-visible\n\n/**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\nfunction applyFocusVisiblePolyfill(scope) {\n let hadKeyboardEvent = true;\n let hadFocusVisibleRecently = false;\n let hadFocusVisibleRecentlyTimeout = null;\n\n const inputTypesWhitelist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true,\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n const type = el.type;\n const tagName = el.tagName;\n\n if (tagName == 'INPUT' && inputTypesWhitelist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName == 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Checks if an element has a proper target className, and returns its\n * closest ancestor with the corresponding className.\n */\n function getAncestorFromTarget(el) {\n if (!el.classList.contains(FOCUS_VISIBLE_TARGET)) {\n return null;\n }\n return el.closest(`.${FOCUS_VISIBLE_ANCESTOR}`);\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n\n const targetAncestor = getAncestorFromTarget(el);\n if (targetAncestor) {\n targetAncestor.classList.add('focus-visible');\n targetAncestor.setAttribute('data-focus-visible-added', '');\n }\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n\n const targetAncestor = getAncestorFromTarget(el);\n if (targetAncestor) {\n targetAncestor.classList.remove('focus-visible');\n targetAncestor.removeAttribute('data-focus-visible-added');\n }\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function () {\n hadFocusVisibleRecently = false;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState == 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on <html> whenever the\n // window blurs, even if you're tabbing out of the page. \u00AF\\_(\u30C4)_/\u00AF\n if (\n e.target &&\n e.target.nodeName &&\n e.target.nodeName.toLowerCase() === 'html'\n ) {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n }\n}\n\n// Make the polyfill helper globally available. This can be used as a signal to\n// interested libraries that wish to coordinate with the polyfill for e.g.,\n// applying the polyfill to a shadow root:\n// window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n// Notify interested libraries of the polyfill's presence, in case the polyfill\n// was loaded lazily:\nlet event;\n\ntry {\n event = new CustomEvent('focus-visible-polyfill-ready');\n} catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n}\n\n// window.dispatchEvent(event);\n\n// Apply the polyfill to the global document, so that no JavaScript coordination\n// is required to use the polyfill in the top-level document:\n// applyFocusVisiblePolyfill(document);\n\nexport const FOCUS_VISIBLE_TARGET = 'focus-visible-target';\nexport const FOCUS_VISIBLE_ANCESTOR = 'focus-visible-ancestor';\nexport const FOCUS_VISIBLE_CLASS = 'focus-visible';\nexport const DATA_FOCUS_VISIBLE_ADDED_ATTR = 'data-focus-visible-added';\n\nexport const focusVisible = once(() => applyFocusVisiblePolyfill(document));\n", "import classNames from 'classnames';\nimport type { AriaAttributes } from 'react';\n\nimport type { SIZES } from '#ui-constants';\nimport { ORDERED_SIZES } from '#ui-constants';\n\nimport './border-helpers.less';\nimport './lockup-helpers.less';\nimport './spacing-helpers.less';\n\nexport interface LockupProps {\n /** Should the component have squared-off left corners? */\n hasLeftLockup?: boolean;\n\n /** Should the component have squared-off right corners? */\n hasRightLockup?: boolean;\n\n /** Should the component have squared-off top corners? */\n hasTopLockup?: boolean;\n\n /** Should the component have squared-off bottom corners? */\n hasBottomLockup?: boolean;\n\n /** Should the component have all squared-off corners? */\n hasFullLockup?: boolean;\n}\n\nexport type SPACING_SIZE = SIZES | 'none';\n\nexport const ORDERED_SPACING_SIZES: SPACING_SIZE[] = [...ORDERED_SIZES, 'none'];\n\nexport interface MarginProps {\n /** Global margin, will be overridden by specific margin properties */\n margin?: SPACING_SIZE | 'auto' | null;\n\n /** Global horizontal margin, will be overridden by specific margin properties */\n marginX?: SPACING_SIZE | 'auto' | null;\n\n /** Global vertical margin, will be overridden by specific margin properties */\n marginY?: SPACING_SIZE | 'auto' | null;\n\n /** Left margin */\n marginLeft?: SPACING_SIZE | 'auto' | null;\n\n /** Top margin */\n marginTop?: SPACING_SIZE | 'auto' | null;\n\n /** Right margin */\n marginRight?: SPACING_SIZE | 'auto' | null;\n\n /** Bottom margin */\n marginBottom?: SPACING_SIZE | 'auto' | null;\n}\n\nexport const MARGIN_BASE_CLASS = 'druids_margin';\nexport const PADDING_BASE_CLASS = 'druids_padding';\nexport const LOCKUP_BASE_CLASS = 'druids_lockup';\nexport const BORDER_BASE_CLASS = 'druids_border';\n\nexport interface ExtraDOMProps {\n dataAttrs?: Record<`data-${string}`, string>;\n ariaAttrs?: AriaAttributes;\n}\n\nexport interface PaddingProps {\n /** Global padding, will be overridden by specific padding properties */\n padding?: SPACING_SIZE | null;\n\n /** Global horizontal padding, will be overridden by specific padding properties */\n paddingX?: SPACING_SIZE | null;\n\n /** Global vertical padding, will be overridden by specific padding properties */\n paddingY?: SPACING_SIZE | null;\n\n /** Left padding */\n paddingLeft?: SPACING_SIZE | null;\n\n /** Top padding */\n paddingTop?: SPACING_SIZE | null;\n\n /** Right padding */\n paddingRight?: SPACING_SIZE | null;\n\n /** Bottom padding */\n paddingBottom?: SPACING_SIZE | null;\n}\n\nexport interface BorderProps {\n /** Global border, will be overridden by specific border properties */\n hasBorder?: boolean | null;\n\n /** Global horizontal border, will be overridden by specific border properties */\n hasBorderX?: boolean | null;\n\n /** Global vertical border, will be overridden by specific border properties */\n hasBorderY?: boolean | null;\n\n /** Left border */\n hasBorderLeft?: boolean | null;\n\n /** Top border */\n hasBorderTop?: boolean | null;\n\n /** Right border */\n hasBorderRight?: boolean | null;\n\n /** Bottom border */\n hasBorderBottom?: boolean | null;\n}\n\nexport const BORDER_PROPS: Array<keyof BorderProps> = [\n 'hasBorderX',\n 'hasBorderY',\n 'hasBorder',\n 'hasBorderLeft',\n 'hasBorderTop',\n 'hasBorderRight',\n 'hasBorderBottom',\n];\n\ntype ComponentProperty = 'margin' | 'padding' | 'lockups' | 'border';\ntype HelperProps = PaddingProps & MarginProps & LockupProps & BorderProps;\n\ntype MarginKeys<Helper extends ComponentProperty> = Helper extends 'margin'\n ? keyof MarginProps\n : never;\ntype PaddingKeys<Helper extends ComponentProperty> = Helper extends 'padding'\n ? keyof PaddingProps\n : never;\ntype LockupsKeys<Helper extends ComponentProperty> = Helper extends 'lockups'\n ? keyof LockupProps\n : never;\ntype BorderKeys<Helper extends ComponentProperty> = Helper extends 'border'\n ? keyof BorderProps\n : never;\n\n/**\n * Calculates the \u201Cscore\u201D for an optional boolean value, allowing to\n * gauge a combined value of multiple values, essentially, counting them.\n */\nconst getScore = (value?: boolean | null) =>\n // `-4` is enough to allow getting a negative value when there is\n // one undefined and three positive values: `3 - 4 = -1`.\n // If we will ever separate this to be reusable with more different values,\n // we could make this configurable and be a -1 * N of possible values.\n value === undefined || value === null ? -4 : value ? 1 : 0;\n\n// We need all these overloads to properly narrow-down the return value\n// If we'd plan to add more helper types, I'd say we'd want to either allow\n// applying all the helpers, or to chose up to two, as otherwise the overloads\n// would get out of hand.\nexport function handleHelpersClassNames<\n P extends HelperProps,\n const Helper extends ComponentProperty,\n>(\n props: P,\n classNamesToApply: Helper[],\n): readonly [\n string,\n Omit<\n P,\n | MarginKeys<Helper>\n | PaddingKeys<Helper>\n | LockupsKeys<Helper>\n | BorderKeys<Helper>\n >,\n];\n\nexport function handleHelpersClassNames<P extends HelperProps>(\n props: P,\n classNamesToApply: ComponentProperty[],\n) {\n const { marginProps, paddingProps, lockupProps, borderProps, rest } =\n splitHelperProps(props);\n\n const helperClassNames: Parameters<typeof classNames>[number] = {};\n let otherProps = rest;\n if (classNamesToApply.includes('margin')) {\n const {\n marginX,\n marginY,\n margin,\n marginLeft,\n marginTop,\n marginRight,\n marginBottom,\n } = marginProps;\n\n if (margin) {\n helperClassNames[`${MARGIN_BASE_CLASS}--${margin}`] = true;\n }\n // When value is `null`, we explicitly skip it, not inheriting from the\n // axis value (`marginX` / `marginY`). This allows overriding defaults.\n const mTop = marginTop === null ? null : marginTop || marginY;\n const mBottom = marginBottom === null ? null : marginBottom || marginY;\n const mLeft = marginLeft === null ? null : marginLeft || marginX;\n const mRight = marginRight === null ? null : marginRight || marginX;\n if (mTop || mBottom || mLeft || mRight) {\n helperClassNames[`${MARGIN_BASE_CLASS}--top-${mTop}`] = mTop;\n helperClassNames[`${MARGIN_BASE_CLASS}--bottom-${mBottom}`] =\n mBottom;\n helperClassNames[`${MARGIN_BASE_CLASS}--left-${mLeft}`] = mLeft;\n helperClassNames[`${MARGIN_BASE_CLASS}--right-${mRight}`] = mRight;\n }\n } else {\n otherProps = { ...otherProps, ...marginProps };\n }\n\n if (classNamesToApply.includes('padding')) {\n const {\n paddingX,\n paddingY,\n padding,\n paddingLeft,\n paddingTop,\n paddingRight,\n paddingBottom,\n } = paddingProps;\n\n if (padding) {\n helperClassNames[`${PADDING_BASE_CLASS}--${padding}`] = true;\n }\n // When value is `null`, we explicitly skip it, not inheriting from the\n // axis value (`paddingX` / `paddingY`). This allows overriding defaults.\n const pTop = paddingTop === null ? null : paddingTop || paddingY;\n const pBottom =\n paddingBottom === null ? null : paddingBottom || paddingY;\n const pLeft = paddingLeft === null ? null : paddingLeft || paddingX;\n const pRight = paddingRight === null ? null : paddingRight || paddingX;\n if (pTop || pBottom || pLeft || pRight) {\n helperClassNames[`${PADDING_BASE_CLASS}--top-${pTop}`] = pTop;\n helperClassNames[`${PADDING_BASE_CLASS}--bottom-${pBottom}`] =\n pBottom;\n helperClassNames[`${PADDING_BASE_CLASS}--left-${pLeft}`] = pLeft;\n helperClassNames[`${PADDING_BASE_CLASS}--right-${pRight}`] = pRight;\n }\n } else {\n otherProps = { ...otherProps, ...paddingProps };\n }\n\n if (classNamesToApply.includes('lockups')) {\n const {\n hasLeftLockup,\n hasRightLockup,\n hasTopLockup,\n hasBottomLockup,\n hasFullLockup,\n } = lockupProps;\n helperClassNames[`${LOCKUP_BASE_CLASS}--left`] =\n hasLeftLockup || hasFullLockup;\n helperClassNames[`${LOCKUP_BASE_CLASS}--right`] =\n hasRightLockup || hasFullLockup;\n helperClassNames[`${LOCKUP_BASE_CLASS}--top`] =\n hasTopLockup || hasFullLockup;\n helperClassNames[`${LOCKUP_BASE_CLASS}--bottom`] =\n hasBottomLockup || hasFullLockup;\n } else {\n otherProps = { ...otherProps, ...lockupProps };\n }\n\n if (classNamesToApply.includes('border')) {\n const {\n hasBorder,\n hasBorderX = hasBorder,\n hasBorderY = hasBorder,\n hasBorderTop = hasBorderY,\n hasBorderBottom = hasBorderY,\n hasBorderLeft = hasBorderX,\n hasBorderRight = hasBorderX,\n } = borderProps;\n\n // Counts all the borders. Allows us to just check the\n // result of the calculation:\n //\n // - when negative: there is at least one `undefined` or `null` value;\n // - when 0: means all four values are explicitly `false`.\n // - when 4: all four are explicitly `true`.\n // - when 1-3: allows to see how many values are explicitly `true`.\n //\n // This allows to have very simple conditions, without checking for many\n // permutations of multiple variables.\n const borderCount =\n getScore(hasBorderTop) +\n getScore(hasBorderBottom) +\n getScore(hasBorderLeft) +\n getScore(hasBorderRight);\n\n // If we have 2 or more explicit borders, and the rest is explicitly\n // absent, we need to set the full border className.\n if (borderCount > 1) {\n helperClassNames[BORDER_BASE_CLASS] = true;\n }\n // If we have either all explicitly absent, or just one explicitly\n // present border, we need to set the full border removal className.\n if (borderCount === 0 || borderCount === 1) {\n helperClassNames[`${BORDER_BASE_CLASS}--none`] = true;\n }\n // If we have at least one undefined border, or just one explicitly\n // present border, we add classNames for any present borders.\n if (borderCount < 0 || borderCount === 1) {\n helperClassNames[`${BORDER_BASE_CLASS}--top`] = hasBorderTop;\n helperClassNames[`${BORDER_BASE_CLASS}--bottom`] = hasBorderBottom;\n helperClassNames[`${BORDER_BASE_CLASS}--left`] = hasBorderLeft;\n helperClassNames[`${BORDER_BASE_CLASS}--right`] = hasBorderRight;\n }\n // If we have at least one undefined border, or have exactly 2 or 3\n // explicitly set borders, we remove any specific borders.\n if (borderCount < 0 || borderCount === 2 || borderCount === 3) {\n helperClassNames[`${BORDER_BASE_CLASS}--top-none`] =\n hasBorderTop === false;\n helperClassNames[`${BORDER_BASE_CLASS}--bottom-none`] =\n hasBorderBottom === false;\n helperClassNames[`${BORDER_BASE_CLASS}--left-none`] =\n hasBorderLeft === false;\n helperClassNames[`${BORDER_BASE_CLASS}--right-none`] =\n hasBorderRight === false;\n }\n } else {\n otherProps = { ...otherProps, ...borderProps };\n }\n\n return [classNames(helperClassNames), otherProps] as const;\n}\n\ntype Direction = 'top' | 'bottom' | 'left' | 'right';\n\nexport const MARGIN_PROPS: Array<keyof MarginProps> = [\n 'marginX',\n 'marginY',\n 'margin',\n 'marginLeft',\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n];\n\nexport const PADDING_PROPS: Array<keyof PaddingProps> = [\n 'paddingX',\n 'paddingY',\n 'padding',\n 'paddingLeft',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n];\n\nexport const LOCKUP_PROPS: Array<keyof LockupProps> = [\n 'hasLeftLockup',\n 'hasRightLockup',\n 'hasTopLockup',\n 'hasBottomLockup',\n 'hasFullLockup',\n];\n\ntype SplitHelperPropsReturn<T extends HelperProps> = {\n marginProps: MarginProps;\n paddingProps: PaddingProps;\n lockupProps: LockupProps;\n borderProps: BorderProps;\n rest: Omit<T, keyof HelperProps>;\n};\n\nexport function splitHelperProps<T extends HelperProps>(\n props: T,\n): SplitHelperPropsReturn<T> {\n const result: SplitHelperPropsReturn<T> = {\n marginProps: {},\n paddingProps: {},\n lockupProps: {},\n borderProps: {},\n rest: {} as Omit<T, keyof HelperProps>,\n };\n\n (Object.keys(props) as Array<keyof HelperProps>).forEach((key) => {\n const keyAsMargin = key as keyof MarginProps;\n if (MARGIN_PROPS.includes(keyAsMargin)) {\n result.marginProps[keyAsMargin] = props[keyAsMargin];\n return;\n }\n const keyAsPadding = key as keyof PaddingProps;\n if (PADDING_PROPS.includes(keyAsPadding)) {\n result.paddingProps[keyAsPadding] = props[keyAsPadding];\n return;\n }\n const keyAsLockup = key as keyof LockupProps;\n if (LOCKUP_PROPS.includes(keyAsLockup)) {\n result.lockupProps[keyAsLockup] = props[keyAsLockup];\n return;\n }\n const keyAsBorder = key as keyof BorderProps;\n if (BORDER_PROPS.includes(keyAsBorder)) {\n result.borderProps[keyAsBorder] = props[keyAsBorder];\n return;\n }\n const restKey = key as keyof Omit<T, keyof HelperProps>;\n result.rest[restKey] = props[restKey];\n });\n\n return result;\n}\n\nexport const getMarginClass = (\n size: SPACING_SIZE | 'auto',\n direction?: Direction,\n): string =>\n direction\n ? `${MARGIN_BASE_CLASS}--${direction}-${size}`\n : `${MARGIN_BASE_CLASS}--${size}`;\n\nexport const getPaddingClass = (\n size: SPACING_SIZE,\n direction?: Direction,\n): string =>\n direction\n ? `${PADDING_BASE_CLASS}--${direction}-${size}`\n : `${PADDING_BASE_CLASS}--${size}`;\n", "export const TOOLTIP_DELAYS = {\n none: 0,\n minimal: 100,\n short: 300,\n long: 500,\n};\n\nexport type TOOLTIP_DELAY = keyof typeof TOOLTIP_DELAYS;\n\nexport const ANIMATION_DURATIONS = {\n short: 150,\n long: 250,\n};\n\nexport type ANIMATION_DURATION = keyof typeof ANIMATION_DURATIONS;\n", "/**\n * UI size options\n */\nexport const ORDERED_SIZES = [\n 'xxs',\n 'xs',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n 'xxl',\n] as const;\nexport type SIZES = (typeof ORDERED_SIZES)[number];\n\nexport const ORDERED_FORM_SIZES = ['xs', 'sm', 'md', 'lg'] as const;\nexport type FORM_SIZES = (typeof ORDERED_FORM_SIZES)[number];\n\n/**\n * UI spacing values\n * This represents the spacing in pixels written in the file ui-constants.less\n */\nexport const SPACING_VALUES = {\n none: 0,\n xxs: 2,\n xs: 4,\n sm: 8,\n md: 16,\n lg: 24,\n xl: 32,\n xxl: 48,\n} as const;\n\nexport type SPACING_VALUE =\n (typeof SPACING_VALUES)[keyof typeof SPACING_VALUES];\n\n/**\n * UI height values\n * This represents the height in pixels written in the file ui-constants.less\n */\nexport const HEIGHT_VALUES = {\n xxs: 16,\n xs: 20,\n sm: 24,\n md: 28,\n lg: 36,\n xl: 44,\n xxl: 52,\n} as const;\n\nexport type HEIGHT_VALUE = (typeof HEIGHT_VALUES)[keyof typeof HEIGHT_VALUES];\n\n/**\n * For elements that have a border, use this width.\n */\nexport const BORDER_WIDTH_VALUE = 1;\n\n/**\n * If you want rounded corners, this is the border radius to use.\n */\nexport const BORDER_RADIUS_VALUE = 4;\n\nexport const MAX_SELECT_OPEN_HEIGHT = 300;\n", "import classNames from 'classnames';\nimport { isForwardRef, isValidElementType } from 'react-is';\nimport * as React from 'react';\n\nimport type { IntrinsicElements } from './jsx-intrinsic-elements.types';\n\ntype ReactElement = React.ReactElement<any>;\ntype TagComponent = React.ComponentType<any> | IntrinsicElements;\ntype ElementProps = { [key: string]: any };\nexport type AsPropType = ReactElement | TagComponent | null;\n\n/**\n * ```jsx\n * const [Component, props] = useAsComponent(<Base propA=\"a\" />)\n * ```\n */\nexport const useAsComponent = (\n Component: AsPropType,\n): [TagComponent, ElementProps] => {\n const isElement = React.isValidElement(Component);\n const isNull = Component === null;\n const props = isElement ? (Component as ReactElement).props : {};\n\n /**\n * We're storing the cloned component in a callback,\n * then pass the props from the original as a reference,\n * so the remount would happen only on the element's type update.\n */\n const propsRef = React.useRef(props);\n propsRef.current = props;\n const ClonedComponent: React.FunctionComponent<any> = (newProps) =>\n isNull\n ? null\n : React.cloneElement(Component as ReactElement, {\n ...propsRef.current,\n ...newProps,\n className:\n propsRef.current.className || newProps.className\n ? classNames(\n propsRef.current.className,\n newProps.className,\n )\n : undefined,\n style:\n newProps.style || propsRef.current.style\n ? {\n ...propsRef.current.style,\n ...newProps.style,\n }\n : undefined,\n });\n const type = isElement ? (Component as ReactElement).type : null;\n // FIXME: Update the dependency list to be exhaustive, and delete this comment.\n // For guidance, see https://datadoghq.atlassian.net/wiki/spaces/FRON/pages/2470838701/How+to+make+your+hook+dependencies+exhaustive\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const Element = React.useCallback(ClonedComponent, [type, isNull]);\n return [\n isElement || isNull ? Element : (Component as TagComponent),\n propsRef.current,\n ];\n};\n\n/**\n * Simple wrapper around the `useAsComponent` when we want to use it in a context where\n * we cannot apply a hook easily.\n */\nexport const AsComponent = ({\n as,\n children,\n ...props\n}: React.PropsWithChildren<{ as: AsPropType }>): React.JSX.Element => {\n const [Component, asProps] = useAsComponent(as);\n return (\n <Component {...asProps} {...props}>\n {children}\n </Component>\n );\n};\n\n/** Checks if we can pass a `ref` prop to the given component. */\nexport const hasRefProp = (Component: AsPropType): boolean => {\n if (!Component) {\n return false;\n }\n if (typeof Component === 'string') {\n return true;\n }\n if (isValidElementType(Component)) {\n return isForwardRef(React.createElement(Component));\n }\n return isForwardRef(Component);\n};\n", "import * as React from 'react';\n\ninterface UseSmoothAnchorLink<T> {\n onClick?: React.MouseEventHandler<T>;\n href?: string;\n isEnabled?: boolean;\n}\n\n/**\n * Uses smooth scrolling for a link if it has a href starting with `#`\n *\n * @deprecated \u2013 this doesn't work well with routing libraries like react-router\n */\nexport const useSmoothAnchorLink = <T extends HTMLElement = HTMLAnchorElement>({\n onClick,\n href,\n isEnabled = true,\n}: UseSmoothAnchorLink<T>): React.MouseEventHandler<T> | undefined =>\n // While for the regular elements there is no need to memoize `onClick`,\n // as the Link can have a custom Component, there is no guarantee that another\n // component would need it to be memoized, so we memoize it here anyway.\n React.useMemo(\n () =>\n isEnabled && href?.[0] === '#'\n ? (event: React.MouseEvent<T>) => {\n const element = document.getElementById(\n href.substring(1),\n );\n if (element) {\n // Without `setTimeout`, the browser will pause for a few ms\n // before scrolling to the element.\n setTimeout(() => {\n // Remove the id to avoid the page scrolling when\n // the URL hash is updated. The goal is to update the URL\n // without triggering the default behavior of the browser.\n // `history.pushState` does not properly work with React Router.\n const originalId = element.id;\n element.removeAttribute('id');\n location.hash = href;\n // Restore the original id\n element.id = originalId;\n });\n\n // Scroll to the element\n element.scrollIntoView({\n behavior: 'smooth',\n });\n event.preventDefault();\n }\n if (onClick) {\n onClick(event);\n }\n }\n : onClick,\n [href, isEnabled, onClick],\n );\n", "interface ExternalProps {\n rel: 'noopener' | 'noopener noreferrer';\n target: '_blank';\n}\n\nexport const getExternalProps = (href?: string): ExternalProps => {\n const externalProps: ExternalProps = {\n rel: 'noopener noreferrer',\n target: '_blank',\n };\n\n // \"noreferrer\" is here to avoid leaking information to other website on the origin of the redirection\n // But when we are in the same website, we don't really care about that\n // Having it by default is also counter productive if we want to know if a user is visiting a page\n // because they clicked on \"view similar logs\" for instance\n try {\n if (href) {\n // new URL is here to detect if the href provided includes the same hostname\n // like https://app.datadoghq.com/logs\n const url = new URL(href, window.location.href);\n if (url.hostname === window.location.hostname) {\n // noreferrer is added by default and only if the 2 hostnames match, we disable it\n externalProps.rel = 'noopener';\n }\n }\n } catch (e) {\n // new URL can throw\n }\n\n return externalProps;\n};\n", "import type { Assign, WithRequired } from '@lib/types';\nimport * as React from 'react';\n\nimport { createLogger } from './create-logger';\n\ntype Type = 'misuse' | 'deprecation' | 'expiration';\n\nconst logger = createLogger('component-warning');\n\nexport interface ComponentWarning {\n componentName: string;\n type?: Type;\n message: string;\n shouldWarn?: boolean;\n /**\n * Sample rate for production logging (0-100).\n * 100 = 100% of warnings are logged (default), 5 = 5%, etc.\n * Only affects production logging \u2014 dev console.warn and onWarning\n * context callbacks are not sampled.\n */\n sampleRate?: number;\n}\n\ninterface StricterComponentWarning extends ComponentWarning {\n shouldWarn: boolean;\n sampleRate?: number;\n}\n\nfunction componentWarning({\n componentName,\n type = 'misuse',\n message,\n shouldWarn = true,\n sampleRate = 100,\n}: ComponentWarning) {\n if (!shouldWarn) {\n return;\n }\n const messagePrefix = '\uD83C\uDF1E\uD83C\uDF19\uD83E\uDDD9\u200D\u2642\uFE0F [DRUIDS Warning]';\n const finalMessage = `${messagePrefix} <${componentName}> ${message}`;\n\n if (IS_PROD) {\n // Sample rate only applies to production logging to reduce volume\n if (Math.random() * 100 > sampleRate) {\n return;\n }\n logger.warn(finalMessage, {\n druids: {\n component: componentName,\n type,\n },\n });\n } else {\n console.warn(finalMessage);\n }\n}\n\ntype OnWarningContextType =\n | undefined\n | ((options: ComponentWarning, key: symbol) => void);\n\n/**\n * Context that provides a callback that would be called when warnings appear\n * or disappear, with a unique key provided to match the warnings with their\n * component instances.\n */\nexport const OnWarningContext: React.Context<OnWarningContextType> =\n React.createContext<OnWarningContextType>(undefined);\n\nexport function useComponentWarning({\n componentName,\n type = 'misuse',\n message,\n shouldWarn,\n sampleRate,\n}: StricterComponentWarning): void {\n const onWarning = React.useContext(OnWarningContext);\n React.useEffect(() => {\n if (!shouldWarn) {\n return;\n }\n componentWarning({\n componentName,\n type,\n message,\n shouldWarn,\n sampleRate,\n });\n if (!onWarning) {\n return;\n }\n // We're using a symbol to get a unique reference that would be used to\n // identify the instance of component, allowing discarding the warnings\n // that are no longer necessary.\n const key = Symbol(`${componentName} ${type}`);\n onWarning(\n { componentName, type, message, shouldWarn, sampleRate },\n key,\n );\n return () => {\n onWarning(\n {\n componentName,\n type,\n message,\n // We need to remove the warnings on a cleanup step, so using\n // an explicit `false` here.\n shouldWarn: false,\n },\n key,\n );\n };\n }, [onWarning, componentName, type, message, shouldWarn, sampleRate]);\n}\n\n// Using overloads to make the message required only on one of the callbacks.\nexport function useComponentWarningCallback(\n options: Assign<ComponentWarning, { message?: never }>,\n): (options: WithRequired<Partial<ComponentWarning>, 'message'>) => void;\nexport function useComponentWarningCallback(\n options: Assign<ComponentWarning, { message: string }>,\n): (options?: Partial<ComponentWarning>) => void;\n/** A hook that returns a `componentWarning` callback */\nexport function useComponentWarningCallback({\n componentName: sharedComponentName,\n type: sharedType = 'misuse',\n message: sharedMessage,\n shouldWarn: sharedShouldWarn = true,\n sampleRate: sharedSampleRate,\n}: Assign<ComponentWarning, { message?: string }>): (\n options: Partial<ComponentWarning>,\n) => void {\n const onWarning = React.useContext(OnWarningContext);\n // We always use the same symbol for the callback-type warning, and won't\n // update it when anything changes.\n const [key] = React.useState(() =>\n Symbol(`${sharedComponentName} ${sharedType}`),\n );\n // Discarding the warning on unmount.\n React.useEffect(() => {\n if (!onWarning) {\n return;\n }\n return () => {\n onWarning(\n {\n // When removing the warning, we only really care about the\n // `shouldWarn`, so in this case we can omit most fields.\n componentName: '',\n message: '',\n // We need to remove the warnings on a cleanup step, so using\n // an explicit `false` here.\n shouldWarn: false,\n },\n key,\n );\n };\n }, [onWarning, key]);\n return React.useCallback(\n (options?: Partial<ComponentWarning>) => {\n const {\n componentName = sharedComponentName,\n type = sharedType,\n message = sharedMessage!, // Overloads guarantee it would exist.\n shouldWarn: localShouldWarn = true,\n sampleRate = sharedSampleRate,\n } = options || {};\n const shouldWarn = sharedShouldWarn && localShouldWarn;\n componentWarning({\n componentName,\n type,\n message,\n shouldWarn,\n sampleRate,\n });\n if (!onWarning) {\n return;\n }\n onWarning(\n { componentName, type, message, shouldWarn, sampleRate },\n key,\n );\n },\n [\n sharedComponentName,\n sharedShouldWarn,\n sharedMessage,\n sharedType,\n sharedSampleRate,\n onWarning,\n key,\n ],\n );\n}\n", "type AnyFunction = (...args: any[]) => any;\n\n/**\n * Ensures the function is returning 'void' only.\n */\ntype ExpectFunctionReturningVoid<T extends AnyFunction> =\n ReturnType<T> extends void ? T : never;\n\n/**\n * Filter an object properties to keep only functions.\n */\ntype PickFunctionProperties<G extends { [key: string]: unknown }> = {\n [K in keyof G]: G[K] extends AnyFunction ? G[K] : never;\n};\n\n/**\n * This type represents the global variable available until the SDK is loaded.\n */\ntype SnippetGlobal = {\n onReady(cb: () => void, isInitCallback?: boolean): void;\n};\n\nexport function createShimmer<SdkGlobal extends SnippetGlobal>(\n globalName: string,\n) {\n type SdkGlobalFunctions = PickFunctionProperties<SdkGlobal>;\n\n /**\n * Return the global variable associated to the shimmer.\n */\n function getGlobal() {\n return getOrCreateGlobal<SdkGlobal>(globalName);\n }\n\n /**\n * Execute the callback when the SDK is ready. The callback will be executed immediately if the\n * SDK is already ready. The callback will be executed with the SDK global variable (public API)\n * as the first argument.\n */\n function onReady(\n callback: (sdkGlobal: SdkGlobal) => void,\n isInitCallback: boolean = false,\n ) {\n getGlobal()?.onReady(() => {\n callback(\n // When onReady is called, we are sure to have the full SDK global API.\n getGlobal() as SdkGlobal,\n );\n }, isInitCallback);\n }\n\n return {\n /**\n * Shim a function that can be executed asynchronously. The function should return `void`,\n * and will be executed when the SDK is ready.\n */\n shimFunction<FunctionName extends keyof SdkGlobalFunctions>(\n functionName: FunctionName,\n ): ExpectFunctionReturningVoid<SdkGlobalFunctions[FunctionName]> {\n return ((...args: any[]) => {\n onReady((sdkGlobal) => {\n const globalFunction = sdkGlobal[functionName] as\n | AnyFunction\n | undefined;\n globalFunction?.(...args);\n }, functionName === 'init');\n }) as any;\n },\n\n /**\n * Shim a 'getter' function that needs to be executed synchronously because its result will\n * be used. The shimmed function will return `undefined` if the SDK is not ready yet.\n */\n shimGetFunction<FunctionName extends keyof SdkGlobal>(\n functionName: FunctionName,\n ): () => ReturnType<SdkGlobalFunctions[FunctionName]> | undefined {\n return (...args) => {\n const global = getGlobal();\n const globalFunction = (global as SdkGlobal)[functionName] as\n | AnyFunction\n | undefined;\n return globalFunction?.(...args);\n };\n },\n\n onReady,\n\n getSdkGlobal() {\n const global = getGlobal();\n return 'init' in global ? (global as SdkGlobal) : undefined;\n },\n };\n}\n\n// Limit the callback queue to avoid to many memory leaks when the Browser SDK fails to load somehow\n// (ex: blocked by an adblocker). Keep the first callbacks, because they are likely more important\n// (calls to .init(), ...) than other ones.\nconst CALLBACK_QUEUE_LIMIT = 1000;\n\nfunction getOrCreateGlobal<SdkGlobal extends SnippetGlobal>(\n globalName: string,\n): SdkGlobal | SnippetGlobal {\n if (!(globalThis as any)[globalName]) {\n const callbackQueue: Array<() => void> = [];\n let warningShown = false;\n\n // The Browser SDK will pick up any callback array defined as a \"q\" property of its global, and\n // execute them once the actual global is properly defined.\n (globalThis as any)[globalName] = {\n q: callbackQueue,\n onReady(callback: () => void, isInitCallback: boolean = false) {\n // The init callback has to run first and ignore the queue size.\n if (isInitCallback) {\n callbackQueue.unshift(callback);\n } else if (callbackQueue.length < CALLBACK_QUEUE_LIMIT) {\n callbackQueue.push(callback);\n } else if (!warningShown) {\n let message = `Browser SDK ${globalName} callback queue limit reached.`;\n if (IS_HOT) {\n message +=\n ' This is because the Browser SDK is disabled while using hotdog. To enable it, right click on the hotdog icon and check \"Enable the Browser SDK while hotdog is active\".';\n }\n console.warn(message);\n warningShown = true;\n }\n },\n };\n }\n\n return (globalThis as any)[globalName];\n}\n", "import type {\n LogsGlobal,\n Logger,\n LoggerConfiguration,\n} from '@lib/browser-logs-package';\nimport type { LogStatus } from '@lib/log-status/constants';\n\nimport { createShimmer } from './shim-utils';\n\nconst { shimFunction, shimGetFunction, onReady } =\n createShimmer<LogsGlobal>('DD_LOGS');\n\nexport enum LogHandler {\n http = 'http',\n console = 'console',\n silent = 'silent',\n}\n\nabstract class LoggerShimBase {\n log(message: string, context?: object, status?: LogStatus) {\n this.withLogger((logger) => logger.log(message, context, status));\n }\n\n debug(message: string, context?: object) {\n this.withLogger((logger) => logger.debug(message, context));\n }\n\n info(message: string, context?: object) {\n this.withLogger((logger) => logger.info(message, context));\n }\n\n warn(message: string, context?: object) {\n this.withLogger((logger) => logger.warn(message, context));\n }\n\n error(message: string, context?: object, error?: Error) {\n this.withLogger((logger) => logger.error(message, context, error));\n }\n\n setHandler(handler: LogHandler | LogHandler[]) {\n this.withLogger((logger) => logger.setHandler(handler));\n }\n\n setLevel(level: LogStatus) {\n this.withLogger((logger) => logger.setLevel(level));\n }\n\n protected abstract getLogger(logsGlobal: LogsGlobal): Logger;\n\n withLogger(cb: (logger: Logger) => void) {\n onReady((logsGlobal) => {\n cb(this.getLogger(logsGlobal));\n });\n }\n}\n\nclass NamedLoggerShim extends LoggerShimBase {\n logger?: Logger;\n name: string;\n configuration?: LoggerConfiguration;\n\n constructor(name: string, configuration?: LoggerConfiguration) {\n super();\n this.name = name;\n this.configuration = configuration;\n }\n\n getLogger(logsGlobal: LogsGlobal) {\n if (!this.logger) {\n this.logger = logsGlobal.createLogger(\n this.name,\n this.configuration,\n );\n }\n return this.logger;\n }\n}\n\nclass DefaultLoggerShim extends LoggerShimBase {\n getLogger(logsGlobal: LogsGlobal) {\n return logsGlobal.logger;\n }\n}\n\nexport const logsShim = {\n init: shimFunction('init'),\n\n setGlobalContext: shimFunction('setGlobalContext'),\n setGlobalContextProperty: shimFunction('setGlobalContextProperty'),\n getGlobalContext: shimGetFunction('getGlobalContext'),\n removeGlobalContextProperty: shimFunction('removeGlobalContextProperty'),\n clearGlobalContext: shimFunction('clearGlobalContext'),\n\n getInternalContext: shimGetFunction('getInternalContext'),\n getInitConfiguration: shimGetFunction('getInitConfiguration'),\n\n logger: new DefaultLoggerShim(),\n\n createLogger: (name: string, configuration?: LoggerConfiguration) => {\n return new NamedLoggerShim(name, configuration);\n },\n};\n", "import type { DatadogRum } from '@lib/browser-rum-package';\n\nimport { createShimmer } from './shim-utils';\n\nexport interface DurationVitalReference {\n __dd_vital_reference: true;\n}\n\ninterface DurationVitalStart {\n name: string;\n startTimestamp: number;\n context?: object;\n description?: string;\n}\n\nconst vitalsByName = new Map<string, DurationVitalStart>();\nconst vitalsByRef = new WeakMap<DurationVitalReference, DurationVitalStart>();\n\nconst { shimFunction, shimGetFunction, onReady, getSdkGlobal } =\n createShimmer<DatadogRum>('DD_RUM');\n\n// Most of the RUM API calls are actually executed when RUM is \"started\", meaning it's initialized\n// and has a View (both `init()` and `startView()` are called). Calls before that are queued and\n// executed when the SDK is ready. The SDK queue is [limited to 500][1] to avoid memory leaks in\n// case the RUM is never started.\n//\n// There are a lot of feature flag evaluations before RUM is started. Right now, I observe around\n// 1500 calls to `addFeatureFlagEvaluation`, so we reach the limit of the queue, and some\n// evaluations are dropped.\n//\n// To work around this issue, we store the feature flag evaluations in a Map to effectively\n// de-duplicate them, and only when the SDK is ready, we call `addFeatureFlagEvaluation` for each of\n// them. This limits the number of `addFeatureFlagEvaluation` calls to the number of unique feature\n// flags, which is around 300 currently.\n//\n// To improve the situation, we might increase the SDK queue limit, or offer a way to add multiple\n// feature flag evaluations in a single call.\n//\n// [1]: https://github.com/DataDog/browser-sdk/blob/fe72ec092ca93c612b6941ab891689b34584ade2/packages/core/src/tools/boundedBuffer.ts#L3\nconst earlyFeatureFlagEvaluations = new Map<string, unknown>();\n\nonReady((rumGlobal) => {\n earlyFeatureFlagEvaluations.forEach((value, key) => {\n rumGlobal.addFeatureFlagEvaluation(key, value);\n });\n});\n\nexport const rumShim = {\n init: shimFunction('init'),\n\n setGlobalContext: shimFunction('setGlobalContext'),\n setGlobalContextProperty: shimFunction('setGlobalContextProperty'),\n getGlobalContext: shimGetFunction('getGlobalContext'),\n removeGlobalContextProperty: shimFunction('removeGlobalContextProperty'),\n clearGlobalContext: shimFunction('clearGlobalContext'),\n setViewName: shimFunction('setViewName'),\n setViewContext: shimFunction('setViewContext'),\n setViewContextProperty: shimFunction('setViewContextProperty'),\n\n addAction: shimFunction('addAction'),\n addError: shimFunction('addError'),\n addTiming: shimFunction('addTiming'),\n\n setUser: shimFunction('setUser'),\n getUser: shimGetFunction('getUser'),\n setUserProperty: shimFunction('setUserProperty'),\n removeUserProperty: shimFunction('removeUserProperty'),\n clearUser: shimFunction('clearUser'),\n\n setAccount: shimFunction('setAccount'),\n getAccount: shimFunction('getAccount'),\n setAccountProperty: shimFunction('setAccountProperty'),\n removeAccountProperty: shimFunction('removeAccountProperty'),\n clearAccount: shimFunction('clearAccount'),\n\n getInternalContext: shimGetFunction('getInternalContext'),\n getInitConfiguration: shimGetFunction('getInitConfiguration'),\n\n startSessionReplayRecording: shimFunction('startSessionReplayRecording'),\n stopSessionReplayRecording: shimFunction('stopSessionReplayRecording'),\n\n startView: shimFunction('startView'),\n\n startFeatureOperation: shimFunction('startFeatureOperation'),\n succeedFeatureOperation: shimFunction('succeedFeatureOperation'),\n failFeatureOperation: shimFunction('failFeatureOperation'),\n\n addFeatureFlagEvaluation: (key: string, value: unknown) => {\n const rumGlobal = getSdkGlobal();\n if (!rumGlobal) {\n earlyFeatureFlagEvaluations.set(key, value);\n } else {\n rumGlobal.addFeatureFlagEvaluation(key, value);\n }\n },\n\n startDurationVital: (\n name: string,\n options: { context?: object; description?: string } = {},\n ): DurationVitalReference => {\n const vital: DurationVitalStart = {\n name,\n startTimestamp: new Date().getTime(),\n context: options.context,\n description: options.description,\n };\n\n const reference: DurationVitalReference = {\n __dd_vital_reference: true,\n };\n\n vitalsByName.set(name, vital);\n vitalsByRef.set(reference, vital);\n\n return reference;\n },\n stopDurationVital: (\n nameOrRef: string | DurationVitalReference,\n options: { context?: object; description?: string } = {},\n ) => {\n const vitalStart =\n typeof nameOrRef === 'string'\n ? vitalsByName.get(nameOrRef)\n : vitalsByRef.get(nameOrRef);\n\n if (!vitalStart) {\n return;\n }\n\n const stopTimestamp = new Date().getTime();\n\n onReady((rumGlobal) => {\n rumGlobal.addDurationVital?.(vitalStart.name, {\n context: { ...vitalStart.context, ...options.context },\n description: options.description ?? vitalStart.description,\n duration: stopTimestamp - vitalStart.startTimestamp,\n startTime: vitalStart.startTimestamp,\n });\n });\n\n if (typeof nameOrRef === 'string') {\n vitalsByName.delete(nameOrRef);\n } else {\n vitalsByRef.delete(nameOrRef);\n }\n },\n addDurationVital: shimFunction('addDurationVital'),\n};\n", "import { logsShim } from '@lib/browser-sdk-shims';\n\nconst team = 'designops';\n\nenum LogSeverity {\n error = 'error',\n warn = 'warn',\n info = 'info',\n debug = 'debug',\n}\n\nenum LogHandler {\n http = 'http',\n console = 'console',\n silent = 'silent',\n}\n\nlet handler = LogHandler.http;\nlet level = LogSeverity.debug;\nif (!IS_PROD) {\n level = LogSeverity.warn;\n handler = LogHandler.console;\n}\n\nexport const createLogger = (\n component: string = 'undefined',\n context: Record<string, unknown> = {},\n): ReturnType<typeof logsShim.createLogger> =>\n logsShim.createLogger(`${team}.${component}`, {\n handler,\n level,\n context: {\n team,\n component,\n ...context,\n },\n });\n", "import classNames from 'classnames';\nimport * as React from 'react';\n\nimport { Spacing } from '#layout/Spacing';\nimport type { MarginProps } from '#lib/components-helpers';\n\nimport styles from './horizontal-separator.module.css';\n\nexport const BLOCK: string = styles.HorizontalSeparator as string;\n\nexport interface HorizontalSeparatorProps extends MarginProps {\n /** Extra HTML class attribute(s) to apply */\n className?: string;\n\n /** Optional width */\n width?: number | string;\n}\n\n/**\n * Horizontal divider between two distinct sections of content\n *\n * [View in DRUIDS style guide \u2197](https://druids.us1.prod.dog/components/layout/HorizontalSeparator?ref=jsdoc)\n */\nexport const HorizontalSeparator: React.FunctionComponent<\n HorizontalSeparatorProps\n> = ({\n className,\n margin,\n marginY = margin ?? 'lg',\n width,\n ...marginProps\n}) => {\n return (\n <Spacing\n margin={margin}\n marginY={marginY}\n {...marginProps}\n style={width ? { width } : undefined}\n as=\"hr\"\n className={classNames(styles.HorizontalSeparator, className)}\n />\n );\n};\n", "import classNames from 'classnames';\nimport * as React from 'react';\n\nimport { useComponentWarningCallback } from '#internals/component-warning';\nimport type { MarginProps, PaddingProps } from '#lib/components-helpers';\nimport { handleHelpersClassNames } from '#lib/components-helpers';\nimport type { AsPropType } from '#lib/misc/use-as-component';\nimport { useAsComponent } from '#lib/misc/use-as-component';\n\nexport interface SpacingCommonProps\n extends MarginProps,\n PaddingProps,\n React.HTMLAttributes<\n HTMLElementTagNameMap[keyof HTMLElementTagNameMap]\n > {\n /** Extra HTML class attribute(s) to apply */\n className?: string;\n\n /** By default the component would try to patch the child's className, if `as` is passed, then the wrapper would be created. */\n as?: AsPropType;\n}\nexport interface SpacingWrapperProps {\n as: AsPropType;\n children?: React.ReactNode;\n}\n\nexport interface SpacingPatcherProps {\n as?: never;\n children?: React.ReactElement | null;\n}\n\n// Making sure we either have a single element as children without `as`,\n// or multiple children with an explicit `as`.\nexport type SpacingProps = SpacingCommonProps &\n (SpacingWrapperProps | SpacingPatcherProps);\n\n/**\n * Utility component for adding margins around elements without having to write CSS\n *\n * [View in DRUIDS style guide \u2197](https://druids.us1.prod.dog/components/layout/Spacing?ref=jsdoc)\n */\nexport const Spacing: React.FunctionComponent<SpacingProps> = ({\n className,\n as,\n children,\n ...props\n}) => {\n const [helperClassNames, otherProps] = handleHelpersClassNames(props, [\n 'margin',\n 'padding',\n ]);\n const spacingClasses = classNames(helperClassNames, className);\n const [Component] = useAsComponent(\n as || (React.isValidElement(children) ? children : React.Fragment),\n );\n\n const sendWarning = useComponentWarningCallback({\n componentName: 'Spacing',\n });\n\n // While the types and the condition should be safe, keeping this just in case.\n if (!as && !React.isValidElement(children)) {\n if (React.Children.count(children) !== 1) {\n sendWarning({\n message: `The <Spacing> component was not applied. It accepts only 1 child, but you\u2019re passing in ${React.Children.count(\n children,\n )} children.`,\n });\n } else if (!React.isValidElement(children)) {\n sendWarning({\n message: `The <Spacing> component was not applied. It should wrap a valid React element but here it was wrapping:\\n${children}`,\n });\n } else {\n sendWarning({\n message: `The <Spacing> component was not applied for unknown reasons. Here are your children:\\n${children}`,\n });\n }\n }\n\n if (!as && (children === null || children === undefined)) {\n return null;\n }\n\n return (\n <Component className={spacingClasses} {...otherProps}>\n {!as && React.isValidElement(children)\n ? (children as React.ReactElement<any>).props.children\n : children}\n </Component>\n );\n};\n", "import React from 'react';\n\nimport {\n DEFAULT_CONTEXT_VALUE,\n GlobalThemePreferenceContext,\n} from './_context/global-theme-preference.context';\nimport type { GlobalThemePreferenceContextValue } from './use-global-theme-preference.types';\n\n/**\n * Hook that returns the global theme preference context value.\n * Must be used within a GlobalThemePreferenceProvider.\n *\n * @returns Object containing the current preference and setter function\n */\nexport const useGlobalThemePreference =\n (): GlobalThemePreferenceContextValue => {\n const context =\n React.useContext(GlobalThemePreferenceContext) ??\n DEFAULT_CONTEXT_VALUE;\n\n return context;\n };\n\nexport type {\n GlobalThemePreferenceContextValue,\n ThemePreference,\n ThemePreferenceInput,\n} from './use-global-theme-preference.types';\n", "import React from 'react';\n\nimport { SavedThemes } from '#lib/color/theme/theme.constants';\n\nimport type { GlobalThemePreferenceContextValue } from '../use-global-theme-preference.types';\n\n/**\n * React context that stores the global theme preference state.\n * Provides access to the current theme preference and a function to update it.\n * Should be consumed via `useGlobalThemePreference` hook.\n * @internal\n */\nexport const GlobalThemePreferenceContext: React.Context<\n GlobalThemePreferenceContextValue | undefined\n> = React.createContext<GlobalThemePreferenceContextValue | undefined>(\n undefined,\n);\n\nexport const DEFAULT_CONTEXT_VALUE: GlobalThemePreferenceContextValue = {\n preference: SavedThemes.light,\n setPreference: () => {},\n};\n", "/**\n * The different themes supported by Datadog\n */\nexport enum Themes {\n dark = 'dark',\n light = 'light',\n}\n\n/**\n * Values that can be saved in cookie\n */\nexport enum SavedThemes {\n dark = 'dark',\n light = 'light',\n system = 'system',\n}\n\n/** ClassName for defining the scope of the themed CSS variables. */\nexport const DRUIDS_THEME_ROOT = 'druids-theme-root';\nexport const DRUIDS_CONTRAST_SYSTEM = 'druids-contrast--system';\nexport const DRUIDS_CONTRAST_DEFAULT = 'druids-contrast--default';\nexport const DRUIDS_CONTRAST_HIGH = 'druids-contrast--high';\nexport const DRUIDS_DIFFERENTIATE_INHERIT = 'druids-differentiate--inherit';\n", "export type Units =\n | \"em\"\n | \"ex\"\n | \"%\"\n | \"px\"\n | \"cm\"\n | \"mm\"\n | \"in\"\n | \"pt\"\n | \"pc\"\n | \"ch\"\n | \"rem\"\n | \"vh\"\n | \"vw\"\n | \"vmin\"\n | \"vmax\";\n\nconst listOfSupportedUnits: Units[] = [\n \"em\",\n \"ex\",\n \"%\",\n \"px\",\n \"cm\",\n \"mm\",\n \"in\",\n \"pt\",\n \"pc\",\n \"ch\",\n \"rem\",\n \"vh\",\n \"vw\",\n \"vmin\",\n \"vmax\",\n];\n\ntype Directions = \"width\" | \"height\";\n\nconst listOfSupportedDirections: Directions[] = [\"width\", \"height\"];\n\nexport type ExposedBreakpoint =\n | [number, number]\n | [number, number, Units]\n | [number, number, { unit?: Units; direction?: Directions }];\n\nexport interface ExposedBreakpoints {\n [key: string]: ExposedBreakpoint;\n}\n\nexport type Breakpoint = [number, number, Units, Directions];\n\nexport interface Breakpoints {\n [breakpoint: string]: Breakpoint;\n}\n\nexport const sanitize = (inBreakpoints: ExposedBreakpoints): Breakpoints => {\n return Object.keys(inBreakpoints).reduce<Breakpoints>((breakpoints, breakpointName) => {\n const breakpoint = inBreakpoints[breakpointName];\n\n if (!Array.isArray(breakpoint) || breakpoint.length <= 1) {\n return breakpoints;\n }\n\n const [supposedMin, supposedMax, options, ...rest] = breakpoint;\n if (rest.length > 0) {\n const error = new Error(`The following fields \"${rest}\" have been ignored`);\n console.error(error);\n }\n\n if (typeof supposedMin !== \"number\" || typeof supposedMax !== \"number\") {\n return breakpoints;\n }\n\n let supposedUnit: Units | undefined;\n let supposedDirection: Directions | undefined;\n if (typeof options === \"string\") {\n supposedUnit = options;\n } else if (typeof options === \"object\") {\n supposedDirection = options.direction;\n supposedUnit = options.unit;\n }\n\n const min = Math.min(supposedMin, supposedMax);\n const max = Math.max(supposedMin, supposedMax);\n const unit = supposedUnit && listOfSupportedUnits.includes(supposedUnit) ? supposedUnit : \"px\";\n const direction =\n supposedDirection && listOfSupportedDirections.includes(supposedDirection) ? supposedDirection : \"width\";\n\n breakpoints[breakpointName] = [min, max, unit, direction];\n breakpoints[`${breakpointName}Up`] = [min, Infinity, unit, direction];\n breakpoints[`${breakpointName}Down`] = [0, max, unit, direction];\n\n return breakpoints;\n }, {});\n};\n", "import * as React from \"react\";\n\nimport { sanitize, ExposedBreakpoints, Breakpoints } from \"./sanitize\";\n\nconst defaultBreakpoints: ExposedBreakpoints = {\n xs: [0, 575, \"px\"], // Extra small devices (portrait phones)\n sm: [576, 767, \"px\"], // Small devices (landscape phones)\n md: [768, 991, \"px\"], // Medium devices (tablets)\n lg: [992, 1199, \"px\"], // Large devices (desktops)\n xl: [1200, Infinity, \"px\"], // Extra large devices (large desktops)\n};\n\nexport const BreakpointsContext: React.Context<Breakpoints> = React.createContext<Breakpoints>(\n sanitize(defaultBreakpoints),\n);\n\ninterface BreakpointsProviderProps {\n breakpoints?: ExposedBreakpoints;\n additionalBreakpoints?: ExposedBreakpoints;\n}\n\nexport const BreakpointsProvider: React.FunctionComponent<React.PropsWithChildren<BreakpointsProviderProps>> = ({\n breakpoints = defaultBreakpoints,\n additionalBreakpoints,\n children,\n}) => {\n return (\n <BreakpointsContext.Provider\n value={sanitize({\n ...breakpoints,\n ...additionalBreakpoints,\n })}\n >\n {children}\n </BreakpointsContext.Provider>\n );\n};\n\nBreakpointsProvider.displayName = \"BreakpointsProvider\";\n", "import { Breakpoint } from \"./sanitize\";\n\nexport const fromBreakpointToMedia = (breakpoint: Breakpoint): string => {\n const mediaList: string[] = [];\n const [minValue, maxValue, unit, direction] = breakpoint;\n let str;\n\n // Min value\n if (minValue !== 0) {\n str = `${minValue}${unit}`;\n mediaList.push(`(min-${direction}:${str})`);\n }\n\n // Max value\n if (maxValue !== Infinity) {\n str = `${maxValue}${unit}`;\n mediaList.push(`(max-${direction}:${str})`);\n }\n\n return \" \" + mediaList.join(\" and \");\n};\n", "import * as React from \"react\";\n\nexport const useMediaQuery = (mediaQuery: string): boolean => {\n const mediaQueryList = React.useMemo(() => matchMedia(mediaQuery), [mediaQuery]);\n const [isShown, setIsShown] = React.useState<boolean>(mediaQueryList.matches);\n\n React.useLayoutEffect(() => {\n setIsShown(mediaQueryList.matches);\n const listener = (event: MediaQueryListEvent) => {\n // Those are important updates, so we don't want to use transitions on them\n setIsShown(event.matches);\n };\n\n // cannot use addEventListener for IE 11 and safari 13-\n mediaQueryList.addListener(listener);\n return () => {\n mediaQueryList.removeListener(listener);\n };\n }, [mediaQueryList]);\n\n return isShown;\n};\n", "import * as React from \"react\";\n\nimport { BreakpointsContext } from \"./BreakpointsContext\";\n\nimport { mediaQueryBuilder } from \"./mediaQueryBuilder\";\n\nimport { useMediaQuery } from \"./useMediaQuery\";\n\nexport const useBreakpoint = (on?: string): boolean => {\n const breakpoints = React.useContext(BreakpointsContext);\n const toMediaQuery = React.useMemo(() => mediaQueryBuilder(breakpoints), [breakpoints]);\n\n const mediaQuery = React.useMemo(() => toMediaQuery(on), [toMediaQuery, on]);\n\n return useMediaQuery(mediaQuery || \"-\");\n};\n", "import { Breakpoints } from \"./sanitize\";\nimport { fromBreakpointToMedia } from \"./fromBreakpointToMedia\";\n\nexport const mediaQueryBuilder =\n (breakpoints: Breakpoints) =>\n (on = \"\"): string => {\n if (!on) {\n return \"\";\n }\n const rawBreakpointNames = on.split(\" \");\n const filteredBreakpoints = rawBreakpointNames.map((breakpointName) => breakpoints[breakpointName]).filter(Boolean);\n const mediaQuery = filteredBreakpoints\n .map((breakpoint) => fromBreakpointToMedia(breakpoint))\n .filter(Boolean)\n .join(\",\");\n if (!mediaQuery) {\n const isUniqBreakpoint = rawBreakpointNames.length === 1;\n console.error(\n `\"${rawBreakpointNames.join('\", \"')}\" ${isUniqBreakpoint ? \"is\" : \"are\"}n't ${\n isUniqBreakpoint ? \"a \" : \"\"\n }valid breakpoint${isUniqBreakpoint ? \"\" : \"s\"}`,\n );\n }\n return mediaQuery;\n };\n", "import * as React from \"react\";\n\nimport { useBreakpoint } from \"./useBreakpoint\";\nimport { useMediaQuery } from \"./useMediaQuery\";\n\nexport type OnlyProps<OtherProps = Record<string, never>> = OtherProps & {\n matchMedia?: string;\n on?: string;\n as?: string | React.ComponentType<OtherProps>;\n};\n\nexport function Only<OtherProps = Record<string, never>>({\n matchMedia,\n on,\n as,\n children,\n ...props\n}: React.PropsWithChildren<OnlyProps<OtherProps>>): React.ReactElement | null {\n const matchOn = useBreakpoint(on);\n const matchQuery = useMediaQuery(matchMedia || \"-\");\n const isShown = matchOn || matchQuery;\n\n if (!isShown) {\n return null;\n }\n\n return React.createElement(\n // @ts-expect-error – this is a complex type\n as || React.Fragment,\n as ? (props as OtherProps) : undefined,\n children,\n );\n}\n", "import { useMediaQuery } from '@blocz/react-responsive';\nimport React from 'react';\n\nimport { Themes } from '#lib/color/theme/theme.constants';\nimport { getTheme } from '#lib/color/theme';\nimport type { ThemePreference } from '#lib/color/use-global-theme-preference';\nimport { useFollowingState } from '#lib/misc/use-following-state';\n\n// We need to import the context from the private file\n// eslint-disable-next-line datadog/no-private-files\nimport { GlobalThemePreferenceContext } from '../use-global-theme-preference/_context/global-theme-preference.context';\n\nimport {\n EmptyGlobalThemePreferenceContext,\n ThemeContext,\n} from './_context/theme-context';\nimport type { UseThemeValue } from './use-theme.types';\n\n/**\n * Hook that returns the current theme based on context and system preferences.\n * Automatically detects system color scheme when preference is set to 'system'.\n * Uses local theme context if available, otherwise falls back to global theme preference.\n *\n * @returns Object containing the resolved theme (light or dark)\n */\nexport const useTheme = (): UseThemeValue => {\n const localThemeContext = React.useContext(ThemeContext);\n const globalThemePreferenceContext = React.useContext(\n // If we are in a local theme context, we need to use the empty context\n // to avoid subscribing to the global theme preference context.\n localThemeContext\n ? EmptyGlobalThemePreferenceContext\n : GlobalThemePreferenceContext,\n );\n\n // Get the preference from either local or global context\n const preference: ThemePreference =\n localThemeContext?.preference ??\n globalThemePreferenceContext?.preference ??\n 'light';\n\n // Subscribe to media query of the color scheme preference only if the preference is 'system'\n const isSystemDark = useMediaQuery(\n preference === 'system' ? '(prefers-color-scheme: dark)' : 'not all',\n );\n\n // Determine the actual theme based on preference and system detection\n const baseTheme = React.useMemo(() => {\n if (preference === 'system') {\n return isSystemDark ? Themes.dark : Themes.light;\n }\n return preference === 'dark' ? Themes.dark : Themes.light;\n }, [preference, isSystemDark]);\n\n // Keep a local theme state to follow legacy DOM class toggles (setBodyTheme).\n // Once legacy usage is removed and only the new preference API is used,\n // we can drop this state and return the derived baseTheme directly.\n const [theme, setTheme] = useFollowingState(baseTheme);\n\n useBodyClassNameObserver({\n setTheme,\n isLocalThemeContext: !!localThemeContext,\n });\n\n return { theme };\n};\n\nexport type {\n ThemeContextValue,\n ThemeValue,\n ThemeValueInput,\n ThemeProviderProps,\n UseThemeValue,\n} from './use-theme.types';\n\n/**\n * Observe body class changes and reflect them in the local theme state.\n *\n * Why this lives here:\n * - Legacy code updates only the body class (visual theme), not the saved preference.\n * - The DOM class cannot tell if the source preference was 'system' or explicit.\n * - So, we only sync the effective theme value here, and we do not touch preference.\n *\n * Behavior:\n * - When the body class changes, read the current theme and push it to state.\n * - This keeps components using useTheme in sync with legacy setBodyTheme toggles.\n *\n * @internal\n * @deprecated Temporary bridge for legacy setBodyTheme calls. Remove when all code\n * uses the new theme APIs and no longer toggles theme via body class.\n */\nfunction useBodyClassNameObserver({\n setTheme,\n isLocalThemeContext,\n}: {\n setTheme: (theme: Themes) => void;\n isLocalThemeContext: boolean;\n}): void {\n React.useEffect(() => {\n // If local theme context is present, we do not want to subscribe to body class changes.\n if (isLocalThemeContext) {\n return;\n }\n\n // Immediately sync with current body class state to handle race conditions\n // where the body class was already changed before this observer was set up.\n // Only sync if there's an explicit theme class set (not just the default).\n const hasExplicitThemeClass =\n document.body.classList.contains('dark-mode') ||\n document.body.classList.contains('light-mode');\n\n if (hasExplicitThemeClass) {\n const currentTheme = getTheme();\n setTheme(currentTheme);\n }\n\n // Keep the local theme in sync with the body class.\n // We do not update any saved preference here, only the visual theme value.\n const observer = new MutationObserver(() => {\n // Detect current theme from body class names\n const updatedTheme = getTheme();\n\n setTheme(updatedTheme);\n });\n\n observer.observe(document.body, {\n attributes: true,\n attributeFilter: ['class'],\n });\n\n return () => {\n observer.disconnect();\n };\n }, [setTheme, isLocalThemeContext]);\n}\n", "import * as React from 'react';\n\n/**\n * The goal of this function is to have a state\n * that follows a prop\n */\nexport function useFollowingState<Value>(\n externalValue: Value,\n { doesUpdateInRender = false }: { doesUpdateInRender?: boolean } = {},\n): [Value, React.Dispatch<React.SetStateAction<Value>>] {\n const [innerState, setInnerState] = React.useState<Value>(externalValue);\n\n // By default, we are using `useEffect`. But this creates 2 renders in this component and all children.\n // But React concurrent allows us to skip updates in children if the set state is done in render (which is the case for useMemo). It'll also bypass the useEffect of this component during the re-render.\n // So it'd be faster & more performant\n // To note: we use `useMemo` to check when variables update\n const useFn = doesUpdateInRender ? React.useMemo : React.useEffect;\n\n useFn(() => {\n setInnerState(externalValue);\n }, [externalValue]);\n return [innerState, setInnerState];\n}\n", "import React from 'react';\n\nimport type { GlobalThemePreferenceContextValue } from '#lib/color/use-global-theme-preference';\n\nimport type { ThemeContextValue } from '../use-theme.types';\n\nexport const ThemeContext: React.Context<ThemeContextValue | undefined> =\n React.createContext<ThemeContextValue | undefined>(undefined);\n\n// Used for conditional context subscription; will never change.\nexport const EmptyThemeContext: React.Context<ThemeContextValue | undefined> =\n React.createContext<ThemeContextValue | undefined>(undefined);\n\nexport const EmptyGlobalThemePreferenceContext: React.Context<\n GlobalThemePreferenceContextValue | undefined\n> = React.createContext<GlobalThemePreferenceContextValue | undefined>(\n undefined,\n);\n", "/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n", "import Cookies from 'js-cookie';\n\nconst CookiesApi: ReturnType<typeof Cookies.withAttributes> =\n Cookies.withAttributes({\n secure: true,\n sameSite: 'strict',\n });\n\nexport default CookiesApi;\n", "/**\n * Hook and a function that retrieves the browser scrollbar width.\n * Helpful when we need to catch the cases when the scrollbars are overlayed,\n * and thus have a zero width.\n *\n * How it works:\n *\n * 1. We create a single checker element which we would use\n * to check the browser scrollbar width.\n * 2. We use inline CSS to position this element in a way it won't cover anything.\n * 3. We enforse an overflow with a `overflow-y`.\n * 4. We then use a `useDimensionsSpy` to monitor its size.\n */\n\nimport * as React from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\n\nconst CHECKER_ID = 'druids_scrollbarChecker';\n// We need to have set width & height to some degree for proper layout stuff,\n// then we hide the element so it doesn't affect the layout.\nconst CHECKER_CSS = `\n overflow-y: scroll;\n width: 50px;\n height: 50px;\n\n position: absolute;\n clip: rect(0, 0, 0, 0);\n top: 0;\n left: 0;\n visibility: hidden;\n`;\n\n// Store this outside so we would be sure we're always using only one checker.\nlet checker: HTMLElement | null = null;\nfunction getChecker(): HTMLElement {\n if (!checker) {\n const div = document.createElement('div');\n div.setAttribute('id', CHECKER_ID);\n div.style.cssText = CHECKER_CSS;\n document.body.appendChild(div);\n checker = div;\n }\n return checker;\n}\n\nlet scrollbarsWidth = 0;\n\n// A function, may be useful outside of a Component context\nexport function getScrollbarsWidth(): number {\n const { offsetWidth, scrollWidth } = getChecker();\n // Math.max is there just in case something would go wrong in order not to\n // get a negative value\n scrollbarsWidth = Math.max(0, offsetWidth - scrollWidth);\n\n return scrollbarsWidth;\n}\n\nlet observer: ResizeObserver | null = null;\n// Keep the scrollbars width up to date\nfunction startScrollbarWidthObserver(): void {\n if (observer) {\n return;\n }\n observer = new ResizeObserver(getScrollbarsWidth);\n observer.observe(getChecker());\n}\n\nexport function useScrollbarsWidth(): number {\n const [width, setWidth] = React.useState(scrollbarsWidth);\n\n React.useEffect(() => {\n startScrollbarWidthObserver();\n\n const obs = new ResizeObserver(() => {\n setWidth(scrollbarsWidth);\n });\n obs.observe(getChecker());\n return () => {\n obs.disconnect();\n };\n }, []);\n\n return width;\n}\n", "import {\n getPreferredColorScheme,\n ColorScheme,\n} from '#lib/color/preferred-color-scheme';\nimport { useGlobalThemePreference } from '#lib/color/use-global-theme-preference';\nimport { useTheme as useThemeNew } from '#lib/color/use-theme';\n\nimport {\n setOverriddenCookieSavedThemes,\n getSavedThemeFromCookie,\n saveThemeInCookie,\n getIsSavedThemeOverridden,\n} from '../_utils/theme.cookie';\nimport {\n getColorSchemeMeta,\n applyScrollbarsClassAndStyle,\n} from '../_utils/theme.utils';\nimport type { ThemePreference } from '../use-global-theme-preference';\n\nimport { Themes, SavedThemes, DRUIDS_THEME_ROOT } from './theme.constants';\n\nexport const THEME_TOGGLE_KEYBOARD_SHORTCUT = 'ctrl+alt+d';\n\n// #region saved theme in cookie\n\n/**\n * Save theme in cookie\n * @param {SavedThemes} theme\n * @deprecated Use `useGlobalThemePreference` from `@druids/ui/lib/color/use-global-theme-preference` to persist the user's theme preference.\n */\nexport const saveTheme = (theme: SavedThemes): void => {\n saveThemeInCookie(theme);\n};\n\n/**\n * Saves the given theme in a cookie for re-use across page reloads\n * @deprecated Use `useGlobalThemePreference` from `@druids/ui/lib/color/use-global-theme-preference` to persist and broadcast theme updates.\n */\nexport const saveActiveTheme = (theme: SavedThemes): void => {\n saveTheme(theme);\n setThemeClassNameFromCookie();\n};\n\n// #endregion\n\n// #region visual themes\n\nexport const getThemeFromSavedTheme = (\n savedTheme: SavedThemes | ThemePreference,\n): Themes => {\n if (savedTheme === SavedThemes.light) {\n return Themes.light;\n }\n\n if (savedTheme === SavedThemes.dark) {\n return Themes.dark;\n }\n\n const preferredColorScheme = getPreferredColorScheme();\n switch (preferredColorScheme) {\n case ColorScheme.noPreference:\n case ColorScheme.light:\n return Themes.light;\n case ColorScheme.dark:\n return Themes.dark;\n }\n};\n\n/**\n * Gets the currently selected theme by checking Datadog's user setting\n * or the browser user's preference when no setting is found\n * @deprecated Use `useTheme` from `@druids/ui/lib/color/use-theme` or `useGlobalThemePreference`\n * from `@druids/ui/lib/color/use-global-theme-preference` to derive the active theme.\n */\nexport const getThemeFromCookie = (): Themes => {\n const savedTheme = getSavedThemeFromCookie();\n return getThemeFromSavedTheme(savedTheme);\n};\n\n/*\n * Map of the theme name to its className part, different from ThemeClassNames,\n * as it contains only a single className that can be used with `classList`.\n */\n// This file defines the variable, so it needs to be able to reference it\n// eslint-disable-next-line datadog/no-literal-druids-theme-classnames\nconst ThemeClassNameMap: Record<Themes, string> = {\n dark: 'dark-mode',\n light: 'light-mode',\n};\n\n/**\n * The full classNames associated with the themes.\n * Also contains DRUIDS_THEME_ROOT className.\n */\nexport const ThemeClassNames = Object.fromEntries(\n Object.entries(ThemeClassNameMap).map(([key, value]) => [\n key,\n `${DRUIDS_THEME_ROOT} ${value}`,\n ]),\n) as typeof ThemeClassNameMap;\n\nconst ALL_THEME_CLASSES = [\n ...ThemeClassNames.dark.split(' '),\n ...ThemeClassNames.light.split(' '),\n];\n\n/**\n * Checks if a className string contains any theme classes.\n * @param className - The className string to check.\n * @returns `true` if the className string contains any theme classes, `false` otherwise.\n */\nexport const classNamesContainsThemeClasses = (className?: string): boolean => {\n if (!className) {\n return false;\n }\n\n // Split by whitespace for exact matching to avoid false positives\n // with BEM-style classes like \"my-popover--dark-mode-toggle\"\n const classNames = className.split(/\\s+/);\n return ALL_THEME_CLASSES.some((cls) => classNames.includes(cls));\n};\n\n/**\n * Gets the currently selected theme by body's className\n * @deprecated Use `useTheme` from `@druids/ui/lib/color/use-theme` to read the active theme value.\n */\nexport const getTheme = (): Themes => {\n if (document.body.classList.contains(ThemeClassNameMap[Themes.dark])) {\n return Themes.dark;\n }\n return Themes.light;\n};\n\n/**\n * Set the visual theme class on the body\n * @deprecated Use `useGlobalThemePreference` or `ThemeProvider` to update the theme in a managed way.\n */\nexport const setBodyTheme = (theme: Themes): void => {\n // later we will use a theme.ts util for this\n Object.values(ThemeClassNameMap).forEach((classNameValue) => {\n if (classNameValue !== ThemeClassNameMap[theme]) {\n document.body.classList.remove(classNameValue);\n }\n });\n\n document.body.classList.add(ThemeClassNameMap[theme]);\n // Apply dark mode to native elements, like inputs\n getColorSchemeMeta().content = theme === Themes.light ? 'light' : 'dark';\n applyScrollbarsClassAndStyle();\n};\n\n/**\n * Sets the theme globally via a CSS class on the body\n * @deprecated Use `useGlobalThemePreference` from `@druids/ui/lib/color/use-global-theme-preference` to update the global theme preference instead.\n */\nexport const setThemeClassNameFromCookie = (): void => {\n const theme = getThemeFromCookie();\n // Keep the theme if the cookie is gathered from a different source. (like URL)\n if (getIsSavedThemeOverridden()) {\n setBodyTheme(theme);\n } else {\n setBodyTheme(\n // when in an iFrame, we shouldn't be able to load the theme from the cookie\n // to always have login forms in the corp website in light mode.\n window.location !== window.parent.location ? Themes.light : theme,\n );\n }\n};\n\n/**\n * @deprecated Use `useTheme` from `@druids/ui/lib/color/use-theme` for the new theme system.\n */\nexport const useTheme = (): [Themes, (theme: Themes) => void] => {\n const newThemeMechanismValue = useThemeNew();\n const globalThemePreference = useGlobalThemePreference();\n\n return [\n newThemeMechanismValue.theme === 'dark' ? Themes.dark : Themes.light,\n (theme: Themes) => {\n const savedTheme =\n theme === Themes.light ? SavedThemes.light : SavedThemes.dark;\n\n globalThemePreference.setPreference(savedTheme);\n },\n ];\n};\n\n/**\n * @deprecated Use `ThemeProvider` from `@druids/ui/misc/ThemeProvider` to control local theme overrides.\n */\nexport const setSavedThemeOverride = (\n override: Themes | SavedThemes | ThemePreference,\n): void => {\n // themes are just light/dark so they are compatible as saved themes\n setOverriddenCookieSavedThemes(override as SavedThemes);\n};\n\n// #endregion\n", "import { createContext } from 'react';\n\nimport { Themes } from './theme.constants';\n\n/**\n * @deprecated Subscribe with `useTheme` from `@druids/ui/lib/color/use-theme` instead of consuming this context directly.\n */\nexport const ThemeContext: React.Context<Themes> = createContext<Themes>(\n Themes.light,\n);\n", "import * as React from 'react';\n\nimport { useIsMountedRef } from '../use-is-mounted-ref/use-is-mounted-ref';\n\n/**\n * Like `React.useState`, but only applies the setter if\n * the component itself is mounted, preventing noop issue.\n * Before you consider using it, consider looking if you could\n * properly cancel the async call that causes the issue on unmount,\n * as this would be a better solution than using this hook in most cases.\n * @param initialState - The initial state value, similar to the parameter for `useState`.\n *\n * @returns An array with the current state and a safe state setter function, similar to `useState`.\n */\nexport const useSafeState: typeof React.useState = <S>(initialState?: S) => {\n // Just in case, making the initial state `true`, as we only care about\n // the unmounted-after-mounted case.\n const isMountedRef = useIsMountedRef(true);\n const [value, setValue] = React.useState(initialState);\n const safeSetValue = React.useCallback<typeof setValue>(\n (setterArg) => {\n if (isMountedRef.current) {\n setValue(setterArg);\n }\n },\n [isMountedRef],\n );\n return [value, safeSetValue] as [typeof value, typeof safeSetValue];\n};\n", "import * as React from 'react';\n\n/**\n * Returns a react ref with a `current` attribute that will\n * be truthy as long as the component is mounted.\n * A common use case is to avoid setting state after an async\n * operation, on an unmounted component. e.g.:\n *\n * ```js\n * const [data, setData] = useState();\n * const isMountedRef = useIsMountedRef();\n * return (\n * <button onClick={async () => {\n * const response = await fetchData();\n * // component might be unmounted here\n * if (isMountedRef.current) {\n * setData(response)\n * }\n * }}\n * )\n * ```\n */\nexport const useIsMountedRef = (initialState = false) => {\n const isMountedRef = React.useRef(initialState);\n\n React.useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n // The ref value should not be updated outside of this hook\n return isMountedRef as React.RefObject<boolean>;\n};\n", "import { useDeepMemo } from '@lib/hooks/use-deep-memo';\nimport { useSafeState } from '@lib/hooks/use-safe-state';\nimport * as React from 'react';\n\nimport { useFollowingState } from '#lib/misc/use-following-state';\n\nimport { useElevationContext } from './ElevationContext';\n\nexport { ElevationProvider } from './ElevationContext';\n\n/**\n * List of default elevation types, used as the base value, reducing\n * the chance of conflicts with existing z-index values in the code.\n * Uses the names from the legacy less `@elevation` group of properties,\n * intended to only be used whenever we need to make sure the component would\n * have _at least_ a certain elevation when used in legacy context which could\n * have a related `z-index` value defined without relying on `useElevation`.\n */\nexport const LEGACY_ELEVATIONS = {\n contentHeader: 90,\n navBackground: 100, // Same as @elevation-higher\n sidePanel: 210,\n navBackgroundActive: 300,\n navSubmenu: 310,\n popover: 1000, // Same as @elevation-highest\n top: 10000,\n};\n\n// If no `legacyElevation` passed, we should start from `100`,\n// making it possible to use the 1-99 range for local elevation.\nexport const STARTING_ELEVATION = 100;\n\n// We need to use the global mount count in order to filter out the elements\n// which we're using the elevation of: otherwise, due to children mounting\n// before parents, thus having their effects run earlier, we could get a\n// situation where a parent would have a bigger z-index than child if they're\n// mounted at the same time for some reason.\nlet globalMountCount = 0;\n\nconst DEFAULT_ELEVATION_GROUP = '';\n\ntype EventsToIsolate = 'esc' | 'mod+z' | 'shift+mod+z';\n\ninterface ElevationItem {\n elevation: number;\n mountCount: number;\n stackName?: string;\n eventsToIsolate?: EventsToIsolate[];\n}\n\nconst createEmptyGroup = () => new Map<Object, ElevationItem>();\n\nconst elevationGroups: Record<string, ReturnType<typeof createEmptyGroup>> = {\n [DEFAULT_ELEVATION_GROUP]: createEmptyGroup(),\n};\n\n/**\n * Internal hook that returns the current elevation group ID from context.\n * Returns the stack ID from ElevationProvider if available, otherwise returns the default group.\n * @internal\n */\nconst useElevationGroupId = (): string => {\n const context = useElevationContext();\n return context?.stackId ?? DEFAULT_ELEVATION_GROUP;\n};\n\n/**\n * Hook to check if the given stack exists in the current elevation context.\n * Automatically uses the elevation group from context if available.\n */\nexport const useIsInElevationStack = (stack: string): boolean => {\n const groupId = useElevationGroupId();\n const elevationGroup = elevationGroups[groupId];\n if (!elevationGroup) {\n return false;\n }\n return Boolean(\n [...elevationGroup.values()].find(\n ({ stackName }) => stackName === stack,\n ),\n );\n};\n\nexport interface UseElevation {\n /** Should we create a new automatic elevation layer? Would return `undefined` when `false` */\n isEnabled: boolean;\n\n /**\n * The value corresponding to the legacy `@elevation` less variables.\n * @deprecated Use only when migrating legacy code that relies on z-index\n * not handled by `useElevation`.\n */\n legacyElevation?: keyof typeof LEGACY_ELEVATIONS;\n\n /**\n * Defines a named stack with a certain size, making it so all the\n * elements sharing that stack would have a single value in the elevation\n * context, bumping the next elements' `z-index` with its size value.\n */\n stack?: {\n name: string;\n size: number;\n };\n\n /**\n * Set of events whose effects should only apply if the current element\n * is the topmost one to accept them.\n *\n * When included, we return a callback, shouldAcceptEvent, which takes an\n * event and returns true if there's no higher element in the stack that\n * would accept that event.\n */\n eventsToIsolate?: EventsToIsolate[];\n}\n\ninterface UseElevationReturn {\n /**\n * A style object containing the automatically generated `zIndex` value.\n * **Do not** adjust it after receiving it from the hook.\n */\n style?: { zIndex: number };\n /**\n * A callback that can be used to conditionally enable or disable the hook,\n * can be used for cases like `Tooltip`, where the nature of the tooltip is\n * dynamic.\n */\n setIsEnabled: React.Dispatch<React.SetStateAction<boolean>>;\n\n /**\n * Takes an event and returns whether this element is the\n * topmost one to accept it at the moment. If the event is\n * not included in eventsToIsolate, it will always return\n * true.\n */\n shouldAcceptEvent: (event: EventsToIsolate) => boolean;\n}\n\n/**\n * Hook for dynamic z-index values in mount/enabling order.\n * Returns the style with the applied `z-index` or `undefined` when disabled.\n *\n * When used within an ElevationProvider, automatically uses that context's stack,\n * ensuring child elements are properly elevated above their parents.\n */\nexport const useElevation = ({\n isEnabled: isEnabledOption,\n stack,\n legacyElevation,\n eventsToIsolate: eventsToIsolateProp,\n}: UseElevation): UseElevationReturn => {\n const { name: stackName, size: stackSize } = stack || { size: 0 };\n const customElevationGroup = useElevationGroupId();\n\n const [isEnabled, setIsEnabled] = useFollowingState(isEnabledOption);\n\n // Using safe state, as the cleanup can potentially happen when unmounting,\n // while in other cases we'd need to modify the value on cleanup as well.\n const [currentElevation, setCurrentElevation] = useSafeState<\n number | undefined\n >();\n\n // In order to properly catch the mount order, we need to follow the enabling immediately, while we don't care if it would be incorrect while disabling dynamically.\n const isEverEnabled = isEnabledOption || isEnabled;\n // We need to assign this outside of an effect, so it would be calculated\n // in the order things are rendered, not mounted.\n const currentMountCount = React.useMemo(\n () => (isEverEnabled ? globalMountCount++ : undefined),\n [isEverEnabled],\n );\n\n const eventsToIsolate = useDeepMemo(eventsToIsolateProp);\n const shouldAcceptEventRef = React.useRef<\n (event: EventsToIsolate) => boolean\n >(() => isEnabled);\n const guardedShouldAcceptEvent = React.useCallback(\n (event: EventsToIsolate) => shouldAcceptEventRef.current(event),\n [],\n );\n\n // In order to properly clean-up after the unmount we have to use an effect.\n React.useEffect(() => {\n if (!isEnabled || currentMountCount === undefined) {\n return;\n }\n\n // Using a reference to an object as a unique map key.\n const id = {};\n const defaultElevation = legacyElevation\n ? LEGACY_ELEVATIONS[legacyElevation]\n : STARTING_ELEVATION;\n\n let elevationGroup = elevationGroups[customElevationGroup];\n if (!elevationGroup) {\n elevationGroup = createEmptyGroup();\n elevationGroups[customElevationGroup] = elevationGroup;\n }\n\n // Getting the values from the map, keeping only those that were\n // mounted before the current item, as well as filtering out or choosing\n // the named stacks.\n const knownStacks: Set<string> = new Set();\n const validElevations: ElevationItem[] = [];\n let prevElevation: number | undefined;\n let isStackValue = false;\n for (const elevationItem of elevationGroup.values()) {\n const {\n mountCount,\n stackName: itemStackName,\n elevation: itemElevation,\n } = elevationItem;\n\n // Keeping only those items that were mounted before the current.\n if (mountCount >= currentMountCount) {\n continue;\n }\n\n if (itemStackName) {\n // If the stack value is in the same stack, use it right away.\n if (itemStackName === stackName) {\n prevElevation = itemElevation;\n isStackValue = true;\n break;\n }\n // If we already have a value from the stack, skip the new ones.\n if (knownStacks.has(itemStackName)) {\n continue;\n }\n knownStacks.add(itemStackName);\n }\n\n validElevations.push(elevationItem);\n }\n // If we did not find an existing stack value, use the largest valid value.\n if (!isStackValue) {\n prevElevation = validElevations.sort(\n (a, b) => b.elevation - a.elevation,\n )[0]?.elevation;\n }\n\n const newElevation = isStackValue\n ? // If we found the previous value of the same named stack, use it.\n prevElevation!\n : // Otherwise, use the bumped up prev elevation or the default one,\n // adding the stack size if it is present, to make the following\n // items follow it.\n Math.max((prevElevation ?? -1) + 1, defaultElevation) + stackSize;\n\n // Adding the current item to the map, and updating the state.\n elevationGroup.set(id, {\n elevation: newElevation,\n mountCount: currentMountCount,\n stackName,\n eventsToIsolate,\n });\n\n // If we have a defined stack size, account for it, so all our items in\n // the stack would start from the lowest value.\n setCurrentElevation(newElevation - stackSize);\n\n shouldAcceptEventRef.current = (event: EventsToIsolate) => {\n // disabled elements should not accept any events\n if (!isEnabled) {\n return false;\n }\n if (!eventsToIsolate?.includes(event)) {\n return true;\n }\n\n const groupMembers = elevationGroup\n ? [...elevationGroup.entries()]\n : [];\n\n // we iterate in reverse order as a slight optimization, since it's\n // more likely that the last element will be the highest\n for (let i = groupMembers.length - 1; i >= 0; i--) {\n const [memberId, member] = groupMembers[i]!;\n if (\n memberId !== id &&\n member.eventsToIsolate &&\n member.eventsToIsolate.includes(event) &&\n member.elevation > newElevation\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n // Cleaning up: if any of the dependencies change and on unmount we need\n // to remove the current item from the map.\n return () => {\n setCurrentElevation(undefined);\n\n if (elevationGroup) {\n elevationGroup.delete(id);\n }\n };\n }, [\n isEnabled,\n legacyElevation,\n currentMountCount,\n setCurrentElevation,\n customElevationGroup,\n stackName,\n stackSize,\n eventsToIsolate,\n ]);\n\n // Returns the final value if mounted and enabled, undefined otherwise.\n const style = currentElevation ? { zIndex: currentElevation } : undefined;\n return {\n style,\n setIsEnabled,\n shouldAcceptEvent: guardedShouldAcceptEvent,\n };\n};\n", "import * as React from 'react';\n\ninterface ElevationContextValue {\n /**\n * A unique identifier for this elevation stack.\n * Used to isolate different stacking contexts.\n */\n stackId: string;\n}\n\nconst ElevationContext = React.createContext<ElevationContextValue | undefined>(\n undefined,\n);\n\n/**\n * Internal hook to access the current elevation context.\n * @internal\n */\nexport const useElevationContext = (): ElevationContextValue | undefined => {\n return React.useContext(ElevationContext);\n};\n\nexport interface ElevationProviderProps {\n /**\n * Identifier for this elevation stack.\n * Use the same ID when multiple components need to share the same stack.\n */\n stackId: string;\n children: React.ReactNode;\n}\n\n/**\n * Provider component that establishes a new elevation stacking context.\n * All descendants using `useElevation` will be isolated within this stack\n * and automatically elevated above their parent.\n *\n * Use cases:\n * - Creating isolated stacking contexts for overlays (modals, sidepanels, popovers)\n * - Ensuring descendant interactive elements render above their containers\n * - Preventing z-index conflicts between different overlay systems\n *\n * @example\n * ```tsx\n * <ElevationProvider stackId=\"my-modal\">\n * <Modal>\n * <Select /> {/* Automatically elevated above Modal *\\/}\n * </Modal>\n * </ElevationProvider>\n * ```\n */\nexport const ElevationProvider = ({\n stackId,\n children,\n}: ElevationProviderProps): React.ReactElement => {\n const value = React.useMemo(() => ({ stackId }), [stackId]);\n\n return (\n <ElevationContext.Provider value={value}>\n {children}\n </ElevationContext.Provider>\n );\n};\n", "// TODO: move to @druids/ui/lib/element\n\n/**\n * Create a div with the given id and add it as a child of <body>\n *\n * @param id - id of the div to be created\n * @param shouldPrepend - if true, the element becomes the first child of <body>, otherwise it becomes the last child\n */\nconst getOrCreatePortalTarget = (id: string, shouldPrepend = false) => {\n let node = document.getElementById(id);\n if (!node) {\n node = document.createElement('div');\n node.id = id;\n document.body[shouldPrepend ? 'prepend' : 'appendChild'](node);\n }\n return node;\n};\n\nexport const PORTAL_CONTAINER_ID = 'druids_portal';\nlet target: HTMLElement | null;\n\n/**\n * Get the element reference for the druids portal div.\n *\n * @returns HTMLElement of druids portal in the document body.\n */\nexport const getPortalTarget = (): HTMLElement => {\n if (!target || !target.parentElement) {\n target = getOrCreatePortalTarget(PORTAL_CONTAINER_ID);\n }\n\n return target;\n};\n\nexport const FIRST_FOCUSABLE_PORTAL_CONTAINER_ID = 'first_focusable_portal';\nlet firstFocusableTarget: HTMLElement | null;\n\n/**\n * Get the element reference for a druids portal div that is inserted directly after\n * the body tag, so it becomes the first focusable element in the document. This is used primarily\n * by the SkipLink component.\n *\n * @returns HTMLElement of druids portal in the document body.\n */\nexport const getFirstFocusablePortalTarget = (): HTMLElement => {\n if (!firstFocusableTarget || !firstFocusableTarget.parentElement) {\n firstFocusableTarget = getOrCreatePortalTarget(\n FIRST_FOCUSABLE_PORTAL_CONTAINER_ID,\n true,\n );\n }\n\n return firstFocusableTarget;\n};\n\nexport const TETHER_PORTAL_CONTAINER_ID = 'tether_portal';\nlet tetherTarget: HTMLElement | null;\n\n/**\n * Get the element reference for the tether portal div.\n * We create a separate portal target for tether for performance reasons.\n * Tether renders tether-elements into the container that are long living.\n * Having them mount into a separate container prevents dynamically portaled\n * elements from triggering reflows of tether items.\n *\n * @returns HTMLElement of tether portal in the document body.\n */\nexport const getTetherPortalTarget = (): HTMLElement => {\n if (!tetherTarget || !tetherTarget.parentElement) {\n tetherTarget = getOrCreatePortalTarget(TETHER_PORTAL_CONTAINER_ID);\n }\n\n return tetherTarget;\n};\n", "import * as React from 'react';\n\n/** Tests children of a component with a `tester`, stops on the first truthful test. */\nexport const testChildren = (\n children: React.ReactNode,\n tester: (children: React.ReactNode) => boolean,\n): boolean => {\n if (!children) {\n return false;\n }\n let result = false;\n const array = React.Children.toArray(children);\n for (let index = 0; index < array.length; index++) {\n const element = array[index];\n result = tester(element);\n if (result) {\n return result;\n }\n if (!element || !(element as React.ReactElement).props) {\n continue;\n }\n result = testChildren(\n (element as React.ReactElement<any>).props.children,\n tester,\n );\n if (result) {\n return result;\n }\n }\n return result;\n};\n", "import * as React from 'react';\n\n/**\n * Get the previous props or state\n * https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\n */\nexport function usePrevious<T>(value: T): T | undefined {\n const ref = React.useRef<T>(undefined);\n\n React.useEffect(() => {\n ref.current = value;\n });\n\n return ref.current;\n}\n", "import { useMediaQuery } from '@blocz/react-responsive';\nimport classNames from 'classnames';\nimport React from 'react';\n\nimport { Themes } from '#lib/color/theme/theme.constants';\nimport {\n ThemeClassNames,\n ThemeContext as LegacyThemeContext,\n} from '#lib/color/theme';\nimport type { ThemePreference } from '#lib/color/use-global-theme-preference';\nimport { useAsComponent } from '#lib/misc/use-as-component';\n\n// We need to import the context from the private file\n// eslint-disable-next-line datadog/no-private-files\nimport { GlobalThemePreferenceContext } from '../../lib/color/use-global-theme-preference/_context/global-theme-preference.context';\n// eslint-disable-next-line datadog/no-private-files\nimport {\n EmptyGlobalThemePreferenceContext,\n EmptyThemeContext,\n ThemeContext,\n} from '../../lib/color/use-theme/_context/theme-context';\nimport type {\n ThemeProviderProps,\n ThemeValueInput,\n} from '../../lib/color/use-theme/use-theme.types';\n\nconst normalizeThemeValueInput = (theme: ThemeValueInput): Themes => {\n if (theme === Themes.dark) {\n return Themes.dark;\n }\n\n return Themes.light;\n};\n\n/**\n * Provider component that manages theme context for its children.\n * Can force a specific theme or use the global theme preference.\n *\n * @param props - The component props\n * @param props.children - The children components to wrap with theme context\n * @param props.forcedTheme - The theme to force, or 'global' to use global theme preference\n * @param props.hasWrapper - Whether to render a wrapper element with the theme class (default: true)\n * @param props.as - The wrapper element to use (default: 'div')\n * @returns JSX element with theme context provider and optionally a wrapper with the theme class name\n */\nexport const ThemeProvider = ({\n children,\n forcedTheme,\n hasWrapper = true,\n as = 'div',\n ...restProps\n}: React.PropsWithChildren<ThemeProviderProps>): React.JSX.Element => {\n // Check if there's a parent ThemeContext to potentially inherit from.\n // We don't need to subscribe if we're forcing a specific theme value.\n const isSpecificThemeForced = forcedTheme && forcedTheme !== 'global';\n const parentThemeContext = React.useContext(\n isSpecificThemeForced ? EmptyThemeContext : ThemeContext,\n );\n\n // If we don't have a forced theme and there's no parent context,\n // this is the root context and should use global theme preference.\n const isRootContext = !forcedTheme && !parentThemeContext;\n const shouldUseGlobalTheme = forcedTheme === 'global' || isRootContext;\n\n const globalThemePreferenceContext = React.useContext(\n // Using a conditional context, making it so we won't subscribe to\n // any context if the value is enforced via a prop.\n shouldUseGlobalTheme\n ? GlobalThemePreferenceContext\n : EmptyGlobalThemePreferenceContext,\n );\n\n const globalPreference = globalThemePreferenceContext?.preference;\n\n // Determine which preference we'll actually use\n const effectivePreference: ThemePreference | undefined =\n isSpecificThemeForced\n ? undefined // specific theme forced, no preference needed\n : parentThemeContext && !shouldUseGlobalTheme\n ? parentThemeContext.preference\n : globalPreference;\n\n // Only subscribe to system preference when needed\n const isSystemDark = useMediaQuery(\n effectivePreference === 'system'\n ? '(prefers-color-scheme: dark)'\n : 'not all',\n );\n\n const forcedThemeValue = React.useMemo<Themes | undefined>(() => {\n if (!isSpecificThemeForced) {\n return undefined;\n }\n\n return normalizeThemeValueInput(forcedTheme);\n }, [forcedTheme, isSpecificThemeForced]);\n\n // We need to get the theme for the class name of the wrapper element.\n const theme = React.useMemo(() => {\n // If forcing a specific theme, use that.\n if (forcedThemeValue) {\n return forcedThemeValue;\n }\n\n // Resolve preference (including 'system') to concrete theme\n if (effectivePreference === 'system') {\n return isSystemDark ? Themes.dark : Themes.light;\n }\n\n return effectivePreference === 'dark' ? Themes.dark : Themes.light;\n }, [forcedThemeValue, effectivePreference, isSystemDark]);\n\n const preference = React.useMemo<ThemePreference>(() => {\n // If forcing a specific theme, derive preference from it.\n if (forcedThemeValue) {\n return forcedThemeValue === Themes.light ? 'light' : 'dark';\n }\n\n // Use the effective preference we already calculated\n return effectivePreference ?? 'light';\n }, [forcedThemeValue, effectivePreference]);\n\n const contextValue = React.useMemo(() => {\n return {\n preference,\n };\n }, [preference]);\n\n const [WrapperComponent] = useAsComponent(as);\n\n return (\n // Wrap with both the new ThemeContext and the legacy ThemeContext\n // to ensure backward compatibility with components using the legacy ThemeContext.\n <LegacyThemeContext.Provider value={theme}>\n <ThemeContext.Provider value={contextValue}>\n {hasWrapper ? (\n <WrapperComponent\n {...restProps}\n className={classNames(\n forcedTheme && ThemeClassNames[theme],\n restProps.className,\n )}\n >\n {children}\n </WrapperComponent>\n ) : (\n children\n )}\n </ThemeContext.Provider>\n </LegacyThemeContext.Provider>\n );\n};\n\nexport type { ThemeProviderProps };\n", "import classNames from 'classnames';\nimport * as React from 'react';\n\nimport { ExternalLinkIcon } from '#icons/ExternalLink';\nimport { focusVisible } from '#lib/accessibility/focusVisible/focus-visible';\nimport type { ExtraDOMProps, MarginProps } from '#lib/components-helpers';\nimport { handleHelpersClassNames } from '#lib/components-helpers';\nimport { useAsComponent, hasRefProp } from '#lib/misc/use-as-component';\nimport { useSmoothAnchorLink } from '#lib/routing/use-smooth-anchor-link';\nimport { useTextContextSize } from '#lib/size/use-text-context-size';\nimport { adjustSize } from '#lib/size';\n\nimport { getExternalProps } from './link.utils';\nimport './link.less';\n\nexport const BLOCK = 'druids_nav_link';\n\ntype LinkPickedProps = Pick<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n 'role' | 'download' | 'children'\n>;\n\nexport const LINK_TYPES = [\n 'default',\n 'plain',\n 'color-on-hover',\n 'no-class-names',\n] as const;\nexport type LinkTypes = (typeof LINK_TYPES)[number];\n\nexport const LINK_SIZES = ['xxs', 'xs', 'sm', 'md', 'lg', 'xl'] as const;\nexport type LinkSizes = (typeof LINK_SIZES)[number];\n\nexport interface LinkProps extends LinkPickedProps, MarginProps, ExtraDOMProps {\n /** URL of the link */\n href?: string;\n\n /** Does the link open in a new tab? Setting it to \"true\" automatically adds target=\"_blank\", rel=\"noopener noreferrer\" (or rel=\"noopener\" if on the same website), and an external icon (unless disabled). */\n isExternal?: boolean;\n\n /** If the link isExternal, should an ExternalLink icon be appended? */\n hasExternalIcon?: boolean;\n\n /** Size, according to standard \u201CT-shirt\u201D sizes, excluding the largest sizes */\n size?: LinkSizes;\n\n /** onclick handler */\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** onclick handler for non-default mouse buttons, see [MDN](https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onauxclick) */\n onAuxClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Title to display on hover */\n title?: string;\n\n /** Should the link be colored at all times (the default), \"plain\" (inherited color, no hover styling), or only colored on hover? */\n linkType?: LinkTypes;\n\n /** When `true`, scroll to the linked anchor on the same page with a smooth transition */\n hasSmoothAnchorLink?: boolean;\n\n /** Extra HTML class attribute(s) to apply */\n className?: string;\n\n /** Allow the Link to be rendered as an alternate component, typically a [react-router](https://www.npmjs.com/package/react-router) link. (Use react-router links like this instead of directly to ensure the correct styling is always applied, including hover and active states.) */\n component?:\n | React.ReactElement\n | React.ComponentType<{ href?: string; isExternal?: boolean }>;\n\n /** Should the Link expand to fill 100% of its container\u2019s width? */\n isFullWidth?: boolean;\n\n /** Makes the link `inline` instead of an `inline-block`. */\n isInline?: boolean;\n\n /** [Ref](https://reactjs.org/docs/refs-and-the-dom.html) for the element */\n innerRef?: React.Ref<HTMLAnchorElement | HTMLButtonElement>;\n\n /** Can the Link be quiet in an appropriate context? */\n canBeQuiet?: boolean;\n}\n\n/**\n * Displays a URL as clickable `<a>` text, with the option to show that it points outside of Datadog or opens in new tab\n *\n * \uD83D\uDEA8 When inside the Datadog SPA, always import the [SPA version](https://spa-docs.us1.prod.dog/navigation/SPALink) instead. It\u2019ll work out-of-the-box with our routing library. But the 2 APIs aren\u2019t 1-1, so check the [differences](https://spa-docs.us1.prod.dog/navigation/SpaLink#differences-between-druids-link-and-spalink) beforehand \uD83D\uDEA8\n *\n * [View in DRUIDS style guide \u2197](https://druids.us1.prod.dog/components/nav/Link?ref=jsdoc)\n */\nexport const Link: React.FunctionComponent<LinkProps> = ({\n title = null,\n size: sizeProp,\n children,\n linkType = 'default',\n isExternal = false,\n isFullWidth = false,\n isInline = false,\n role,\n onClick: onClickProp,\n hasExternalIcon = true,\n hasSmoothAnchorLink = false,\n className,\n component,\n download,\n href,\n innerRef,\n ariaAttrs,\n dataAttrs,\n canBeQuiet = true,\n ...props\n}) => {\n focusVisible();\n\n // Not using the `linkSizes` as we might want to inherit the bigger sizes\n const sizeContext = useTextContextSize('md');\n const size = sizeProp || sizeContext;\n const [helperClassNames, restProps] = handleHelpersClassNames(props, [\n 'margin',\n ]);\n\n const onClick = useSmoothAnchorLink({\n onClick: onClickProp,\n href,\n isEnabled: hasSmoothAnchorLink,\n });\n\n const [Component, { href: hrefFromComponentProp }] = useAsComponent(\n component || 'a',\n );\n\n const baseProps = {\n href: href ?? hrefFromComponentProp,\n className: classNames(\n {\n [`${BLOCK}--is-full-width`]: isFullWidth,\n [`${BLOCK}--is-inline`]: isInline,\n [`${BLOCK}--is-never-quiet`]: !canBeQuiet,\n },\n linkType !== 'no-class-names'\n ? [BLOCK, `${BLOCK}--${size}`, `${BLOCK}--${linkType}`]\n : [],\n helperClassNames,\n className,\n ),\n onClick,\n role: role || undefined,\n title: title || undefined,\n download,\n ref: hasRefProp(Component) ? innerRef : undefined,\n };\n\n const externalProps = getExternalProps(href);\n\n const finalProps = {\n ...restProps,\n ...baseProps,\n ...dataAttrs,\n ...ariaAttrs,\n ...(isExternal ? externalProps : undefined),\n };\n\n return (\n <Component {...finalProps}>\n {children}\n {isExternal && hasExternalIcon ? (\n <ExternalLinkIcon\n size={adjustSize(size, -1)}\n className={`${BLOCK}__icon`}\n title=\"\"\n />\n ) : null}\n </Component>\n );\n};\n", "import * as React from 'react';\n\nimport type { IconComponent } from '#icons/Icon';\nimport { Icon } from '#icons/Icon';\n\nimport icon from './external-link.svg?sprite';\n\nexport const ExternalLinkIcon: IconComponent = (props) => (\n <Icon\n {...props}\n icon={icon}\n // Icons made with our template are designed to be consistent with one another in sizing, weight, etc. We don\u2019t want `isScaledDown` to have any effect for these. Once all icons use the template, we\u2019ll remove the prop altogether.\n isScaledDown={false}\n />\n);\n", "import classNames from 'classnames';\nimport * as React from 'react';\n\nimport type {\n PaddingProps,\n MarginProps,\n ExtraDOMProps,\n} from '#lib/components-helpers';\nimport { handleHelpersClassNames } from '#lib/components-helpers';\nimport { useTextContextSize } from '#lib/size/use-text-context-size';\nimport type { ImageProps } from '#misc/Image';\nimport { Image } from '#misc/Image';\nimport type { SIZES, STATUS_LEVELS } from '#ui-constants';\n\nimport './icon.less';\n\nconst BLOCK = 'druids_icons_icon';\n\ntype ICON_LEVELS = Exclude<STATUS_LEVELS, 'default'>;\ntype ICON_VARIANTS = 'inherit' | 'icon' | 'iconSecondary' | 'text' | 'knockout';\n\nexport interface IconProps extends PaddingProps, MarginProps {\n /** Size, according to standard \u201CT-shirt\u201D sizes. `inherit` uses the inherited CSS `font-size`. */\n size?: SIZES | 'inherit';\n /** @if IS_PRIVATE@deprecated **Will be removed once all icons use the [template](#icon-principles). For those icons, it\u2019s hardcoded to never take effect.** @endifIn most cases, icons are slightly taller than text for better weight and optical alignment. But in rare cases, they need to be smaller and share the same height as text. In general, only use this prop when the icon sits directly inside a bordered container. */\n isScaledDown?: boolean;\n /** Extra HTML class attribute(s) to apply */\n className?: string;\n /** Additional CSS styles to inject inline */\n style?: React.CSSProperties;\n /** HTML `title` to display on hover. (This is set to the icon\u2019s name by default. Set it to empty by specifying `title=\"\"` when the icon appears inside another component with its own hover state, like a `<Button>`, or when the icon is a trigger for a `<Tooltip>` or similar element.) */\n title?: string;\n /** The icon\u2019s aria label */\n ariaLabel?: string;\n /** The icon\u2019s aria role for accessibility */\n role?: string;\n /** A level to set the color of the icon. This works only when the icon content is from the DRUIDS icon library. */\n level?: ICON_LEVELS;\n /** A variant to set the color of the icon. This works only when the icon content is from the DRUIDS icon library. */\n iconVariant?: ICON_VARIANTS;\n /** A custom string to set the color of the icon. This takes precedence over `level` and works only when the icon content is from the DRUIDS icon library. */\n fill?: string;\n /** Special prop used in contexts where the icon needs to change on hover */\n isHovered?: boolean;\n /** Vertically centers the icon when using with inline text */\n hasInlineCentering?: boolean;\n // extra data attributes\n dataAttrs?: ExtraDOMProps['dataAttrs'];\n /**\n * @deprecated\n * TODO: remove this prop\n * Rendered children\n */\n children?: React.ReactNode;\n}\n\nexport type IconComponent = React.FunctionComponent<IconProps>;\n\nexport interface IconWrapperProps extends IconProps {\n /** Content of the icon. It can either be an `SvgIcon` from the DRUIDS icon library or a direct path to an SVG. For direct SVG paths, use `[\"light theme path\", \"dark theme path\"]` to automatically support the dark theme (DRUIDS icons support theming automatically). */\n icon:\n | React.ComponentType<React.SVGAttributes<SVGElement>>\n | React.ReactElement<unknown>\n | SvgIcon\n | ImageProps['src'];\n\n /**\n * @deprecated\n * TODO: remove this prop\n * Rendered children\n */\n children?: React.ReactNode;\n}\n\nconst COLORS_BY_LEVELS: { [key in ICON_LEVELS]: string } = {\n danger: 'var(--ui-status-danger)',\n success: 'var(--ui-status-success)',\n warning: 'var(--ui-status-warning)',\n};\n\nconst COLORS_BY_VARIANTS: { [key in ICON_VARIANTS]: string } = {\n inherit: '',\n icon: 'var(--ui-icon)',\n iconSecondary: 'var(--ui-icon-secondary)',\n text: 'var(--ui-text)',\n knockout: 'var(--ui-text-knockout)',\n};\n\nexport const Icon: React.FunctionComponent<IconWrapperProps> = ({\n icon,\n title,\n ariaLabel,\n role,\n size: sizeProp,\n isScaledDown = false,\n className,\n fill,\n level,\n iconVariant = 'inherit',\n isHovered,\n children,\n dataAttrs,\n style: styleProp,\n hasInlineCentering = false,\n ...marginProps\n}) => {\n const style = {};\n const sizeContext = useTextContextSize('md');\n const size = sizeProp || sizeContext;\n const [helperClassNames] = handleHelpersClassNames(marginProps, [\n 'margin',\n 'padding',\n ]);\n\n const getColor = () => {\n if (fill) {\n return fill;\n }\n\n if (level) {\n return COLORS_BY_LEVELS[level];\n }\n\n if (iconVariant) {\n return COLORS_BY_VARIANTS[iconVariant];\n }\n\n return '';\n };\n\n const props = {\n className: classNames(\n BLOCK,\n `${BLOCK}--${size}`,\n {\n [`${BLOCK}--is-scaled-down`]: isScaledDown,\n [`${BLOCK}--has-inline-centering`]: hasInlineCentering,\n },\n helperClassNames,\n className,\n ),\n style: { ...style, ...styleProp },\n 'aria-label': ariaLabel,\n 'aria-hidden': !title && !ariaLabel,\n role,\n };\n\n if (isStringOrArray(icon)) {\n return <Image {...props} title={title} src={icon} loading=\"lazy\" />;\n }\n\n if (typeof icon === 'function') {\n const Component = icon;\n return <Component {...props} />;\n }\n\n // When <Icon /> is used in JS, we cannot assure icon will be defined\n if (!icon) {\n return null;\n }\n\n if (React.isValidElement(icon)) {\n return (\n <svg {...props}>\n {title && <title>{title}</title>}\n {icon}\n </svg>\n );\n }\n\n return (\n <svg {...props} {...dataAttrs}>\n {title && <title>{title}</title>}\n {children}\n <use xlinkHref={`#${icon.id}`} fill={getColor()} />\n </svg>\n );\n};\n\n// This custom typeguard is needed as the regular `Array.isArray` won't work\n// properly if the input is `readonly`.\nconst isStringOrArray = (\n input: unknown,\n): input is string | any[] | readonly any[] =>\n typeof input === 'string' || Array.isArray(input);\n", "// eslint-disable import/export\nimport * as React from 'react';\n\nimport { ORDERED_SIZES } from '#ui-constants';\nimport type { SIZES } from '#ui-constants';\n\ninterface TextContextProps {\n size?: SIZES;\n}\n\nexport const TextContext: React.Context<TextContextProps> =\n React.createContext<TextContextProps>({});\n\n// Hook to seek for TextContext, use the current size\n// and optionally match it against allowed SIZES\nexport function useTextContextSize(fallbackSize: SIZES): SIZES;\nexport function useTextContextSize<T extends ReadonlyArray<SIZES>>(\n fallbackSize: SIZES,\n allowedSizes: T,\n): Extract<keyof T, SIZES>;\nexport function useTextContextSize(\n fallbackSize: SIZES,\n allowedSizes: ReadonlyArray<SIZES> = ORDERED_SIZES,\n): SIZES {\n const context = React.useContext(TextContext);\n if (context && context.size && allowedSizes.includes(context.size)) {\n return context.size;\n }\n return fallbackSize;\n}\n", "import classNames from 'classnames';\nimport * as React from 'react';\n\nimport { useTheme } from '#lib/color/use-theme';\nimport type { MarginProps } from '#lib/components-helpers';\nimport { handleHelpersClassNames } from '#lib/components-helpers';\n\nimport './image.less';\n\nconst BLOCK = 'druids_misc_image';\n\ntype Src = string | PngImage | SvgPath;\n\nfunction defineThemedSrc<T>(src: T | readonly [T, T]) {\n return Array.isArray(src) ? src : ([src, src] as const);\n}\n\nexport interface ImageProps\n extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src'>,\n MarginProps {\n /** path of the image, either \"path\" or [\"light theme path\", \"dark theme path\"] */\n src: Src | readonly [srcLight: Src, srcDark: Src];\n /** path of the Retina (@2x) image, if present, either \"path\" or [\"light theme path\", \"dark theme path\"] */\n retinaSrc?: Src | readonly [srcLight: Src, srcDark: Src];\n /** Special prop used in contexts where the image needs to change on hover */\n isHovered?: boolean;\n /** define lazy-loading behavior, missing from react-dom types */\n loading?: 'eager' | 'lazy';\n /** [Ref](https://reactjs.org/docs/refs-and-the-dom.html) for the element */\n innerRef?: React.Ref<HTMLImageElement>;\n /** Extra HTML class attribute(s) to apply */\n className?: string;\n}\n\n/**\n * Displays an HTML `<img>` element, with built-in support for theming and @2x variants\n *\n * [View in DRUIDS style guide \u2197](https://druids.us1.prod.dog/components/misc/Image?ref=jsdoc)\n */\nexport const Image: React.FunctionComponent<ImageProps> = ({\n src: srcProp,\n retinaSrc: retinaSrcProp,\n isHovered,\n className,\n innerRef,\n ...props\n}) => {\n const [helperClassNames, extraProps] = handleHelpersClassNames(props, [\n 'margin',\n ]);\n\n const { theme } = useTheme();\n const isDarkTheme = theme === 'dark';\n\n const themedSrc = defineThemedSrc(srcProp);\n const themedRetinaSrc = defineThemedSrc<Src | undefined>(retinaSrcProp);\n\n const src = isDarkTheme ? themedSrc[1] : themedSrc[0];\n\n const retinaSrc = isDarkTheme ? themedRetinaSrc[1] : themedRetinaSrc[0];\n const srcSet =\n retinaSrc !== undefined ? `${src} 1x, ${retinaSrc} 2x` : undefined;\n\n return (\n <img\n className={classNames(BLOCK, helperClassNames, className)}\n {...extraProps}\n ref={innerRef}\n src={src as string}\n srcSet={srcSet}\n />\n );\n};\n", "export default \"\"", "import type { SIZES } from '#ui-constants';\nimport { SPACING_VALUES, ORDERED_SIZES } from '#ui-constants';\n\n/** Returns the smaller of a set of supplied SIZES */\nexport const minSize = (...values: Array<SIZES>): SIZES | undefined =>\n ORDERED_SIZES[\n Math.min(...values.map((value) => ORDERED_SIZES.indexOf(value)))\n ];\n\n/** Returns the larger of a set of supplied SIZES */\nexport const maxSize = (...values: Array<SIZES>): SIZES | undefined =>\n ORDERED_SIZES[\n Math.max(...values.map((value) => ORDERED_SIZES.indexOf(value)))\n ];\n\n/** Clamps a given SIZES value between the given min and max values */\nexport const clampSize = <T extends SIZES>(min: T, value: SIZES, max: T) =>\n minSize(max, maxSize(min, value) as SIZES) as T;\n\n/** Clamps a given SIZES value between the first and last items in a given SIZES array */\nexport const clampSizeToSubset = <\n T extends Array<SIZES> | ReadonlyArray<SIZES>,\n>(\n value: SIZES,\n subset: T,\n): T[number] =>\n clampSize(minSize(...subset) as SIZES, value, maxSize(...subset) as SIZES);\n\n/** Adjusts a given SIZES value to other SIZES values without going out of bounds */\nexport const adjustSize = (value: SIZES, modifier: number): SIZES | undefined =>\n ORDERED_SIZES[\n Math.min(\n ORDERED_SIZES.length - 1,\n Math.max(0, ORDERED_SIZES.indexOf(value) + modifier),\n )\n ];\n\n/**\n * Shortcut for the type containing a list of spacing value keys\n */\n// TODO: remove the 0 as we have `none` now\nexport type SpacingValue = 0 | keyof typeof SPACING_VALUES;\n\nexport const ORDERED_SPACING_VALUES: string[] = Object.keys(SPACING_VALUES);\n\n/**\n * Gets the value in px to use with inline styles\n */\nexport const getSpacingInPx = (\n spacing?: SpacingValue | null,\n): string | undefined =>\n spacing !== null && spacing !== undefined\n ? `${spacing ? SPACING_VALUES[spacing] : 0}px`\n : undefined;\n", "import classNames from 'classnames';\nimport isArray from 'lodash/isArray';\nimport * as React from 'react';\n\nimport { Spacing } from '#layout/Spacing';\nimport { useTextContextSize } from '#lib/size/use-text-context-size';\nimport type { KeycapVariant } from '#typography/Keycap';\nimport { Keycap } from '#typography/Keycap';\nimport { Text } from '#typography/Text';\nimport type { TextVariant } from '#typography/Text';\n\nimport styles from './keyboard-shortcut.module.css';\n\nconst KEYBOARD_SHORTCUT_SIZES = ['xs', 'sm', 'md', 'lg'] as const;\n\nexport interface KeyboardShortcutProps {\n /** size of keycaps */\n size?: (typeof KEYBOARD_SHORTCUT_SIZES)[number];\n /** Predefined style variants */\n variant?: KeycapVariant;\n /** Extra HTML class attribute(s) to apply */\n className?: string;\n /** keys in the shortcut sequence */\n keys: Array<string[] | string>;\n /** Should the keycaps have their border removed? */\n isBorderless?: boolean;\n ariaAttrs?: React.AriaAttributes;\n}\n\nconst TextVariantMap: Record<KeycapVariant, TextVariant> = {\n default: 'default',\n secondary: 'secondary',\n tertiary: 'tertiary',\n knockout: 'knockout',\n 'secondary-knockout': 'knockout',\n disabled: 'disabled',\n};\n\n/**\n * Represents a specific key or combination of keys from a keyboard or other text entry device using the `<kbd>` HTML element\n *\n * [View in DRUIDS style guide \u2197](https://druids.us1.prod.dog/components/typography/KeyboardShortcut?ref=jsdoc)\n */\nexport const KeyboardShortcut: React.FunctionComponent<\n KeyboardShortcutProps\n> = ({\n className,\n variant = 'default',\n keys,\n size: sizeProp,\n ariaAttrs,\n isBorderless = false,\n}) => {\n const sizeContext = useTextContextSize('md', KEYBOARD_SHORTCUT_SIZES);\n const size = sizeProp || sizeContext;\n\n return (\n <span\n className={className}\n style={{ whiteSpace: 'nowrap' }}\n {...ariaAttrs}\n >\n {keys.map((key, index, array) => (\n <React.Fragment key={index}>\n {isArray(key) ? (\n key.map((k, keyIndex) => (\n <Spacing\n key={k}\n marginLeft={keyIndex === 0 ? undefined : 'xs'}\n >\n <Keycap\n variant={variant}\n size={size}\n keycap={k}\n isBorderless={isBorderless}\n />\n </Spacing>\n ))\n ) : (\n <Keycap\n variant={variant}\n size={size}\n keycap={key}\n isBorderless={isBorderless}\n />\n )}\n {index !== array.length - 1 && (\n <Text\n size={size}\n isMonospace\n variant={TextVariantMap[variant]}\n className={classNames(\n styles.Separator,\n variant === 'default' && styles.DefaultColor,\n )}\n >\n +\n </Text>\n )}\n </React.Fragment>\n ))}\n </span>\n );\n};\n", "import classNames from 'classnames';\nimport * as React from 'react';\n\nimport { isMac } from '#lib/browser/is-mac';\nimport { useTextContextSize } from '#lib/size/use-text-context-size';\n\nimport styles from './keycap.module.css';\n\nexport type KeycapVariant =\n | 'default'\n | 'knockout'\n | 'secondary'\n | 'tertiary'\n | 'secondary-knockout'\n | 'disabled';\n\nconst KEYCAP_SIZES = ['xs', 'sm', 'md', 'lg'] as const;\n\ninterface KeycapProps {\n size?: (typeof KEYCAP_SIZES)[number];\n variant?: KeycapVariant;\n /** Extra HTML class attribute(s) to apply */\n className?: string;\n /** The key to render, which will be sentence-cased (e.g., \u201CL\u201D or \u201CEsc\u201D). On Macs, `alt` will render as \u201COpt\u201D and `mod`/`cmd`/`\u2318` will render as \u201C\u2318.\u201D On non-Macs, `mod`/`cmd`/`\u2318` will render as \u201CCtrl.\u201D */\n keycap: string;\n /** Should the keycap have its border removed? */\n isBorderless?: boolean;\n}\n\nconst map: Record<string, string | undefined> = {\n alt: isMac() ? 'opt' : 'alt',\n mod: isMac() ? '\u2318' : 'ctrl',\n cmd: isMac() ? '\u2318' : 'ctrl',\n '\u2318': isMac() ? '\u2318' : 'ctrl',\n};\n\n/**\n * Full keycap names. Used for better screen-reader announcements\n */\nconst keycapNames: Record<string, string | undefined> = {\n alt: isMac() ? 'Option' : 'Alt',\n mod: isMac() ? '\u2318' : 'Ctrl',\n cmd: isMac() ? '\u2318' : 'Ctrl',\n '\u2318': isMac() ? '\u2318' : 'Ctrl',\n};\n\nexport const keycapName = (keycap: string): string =>\n keycapNames[keycap.toLowerCase()] || keycap;\n\nexport const Keycap: React.FunctionComponent<KeycapProps> = ({\n className,\n keycap,\n variant = 'default',\n size: sizeProp,\n isBorderless = false,\n}) => {\n const sizeContext = useTextContextSize('md', KEYCAP_SIZES);\n const size = sizeProp || sizeContext;\n const keycapWord = keycap.toLowerCase();\n const isArrowKey = ['\u2191', '\u2193', '\u2190', '\u2192'].includes(keycapWord);\n const isCmdKey = ['mod', 'cmd', '\u2318'].includes(keycapWord) && isMac();\n\n return (\n <kbd\n className={classNames(\n styles.Keycap,\n { [`${styles.Keycap}--${size}`]: size },\n { [`${styles.Keycap}--${variant}`]: variant },\n isCmdKey && styles.isCmdKey,\n isArrowKey && styles.isArrowKey,\n isBorderless && styles.isBorderless,\n className,\n )}\n aria-label={keycapName(keycap)}\n >\n {map[keycapWord] || keycapWord}\n </kbd>\n );\n};\n", "import { detect } from 'detect-browser';\n\nexport const isMac = (): boolean => {\n const browser = detect();\n return Boolean(browser && browser.os === 'Mac OS');\n};\n", "import classNames from 'classnames';\nimport * as React from 'react';\n\nimport type { MarginProps } from '#lib/components-helpers';\nimport { handleHelpersClassNames } from '#lib/components-helpers';\nimport type { AsPropType } from '#lib/misc/use-as-component';\nimport { useAsComponent } from '#lib/misc/use-as-component';\nimport {\n useTextContextSize,\n TextContext,\n} from '#lib/size/use-text-context-size';\nimport type { SIZES } from '#ui-constants';\n\nimport './text.less';\n\nexport const BLOCK = 'druids_typography_text';\n\n// Here and below we're creating types from ordered arrays, as this allows us to\n// get the types properly in the docs for API tables and playgrounds.\n// If at one point parsing would properly get those, we could keep only the\n// types (unless the arrays would be useful for other purposes).\nexport const ORDERED_TEXT_VARIANTS = [\n 'default',\n 'secondary',\n 'tertiary',\n 'knockout',\n 'success',\n 'warning',\n 'danger',\n 'disabled',\n] as const;\nexport type TextVariant = (typeof ORDERED_TEXT_VARIANTS)[number];\n\nexport const ORDERED_TEXT_WEIGHTS = ['normal', 'bold', 'thin'] as const;\nexport type TextWeight = (typeof ORDERED_TEXT_WEIGHTS)[number];\n\nexport const ORDERED_TEXT_ALIGNS = ['left', 'center', 'right'] as const;\nexport type TextAlign = (typeof ORDERED_TEXT_ALIGNS)[number];\n\nexport const ORDERED_TEXT_TRANSFORMS = [\n 'none',\n 'lowercase',\n 'uppercase',\n 'capitalize',\n] as const;\nexport type TextTransform = (typeof ORDERED_TEXT_TRANSFORMS)[number];\n\nexport const ORDERED_OVERFLOW_WRAPS = [\n 'normal',\n 'anywhere',\n 'break-word',\n] as const;\nexport type OverflowWrap = (typeof ORDERED_OVERFLOW_WRAPS)[number];\n\nexport const ORDERED_WHITE_SPACES = [\n 'normal',\n 'nowrap',\n 'pre',\n 'pre-wrap',\n 'pre-line',\n 'break-spaces',\n] as const;\nexport type WhiteSpace = (typeof ORDERED_WHITE_SPACES)[number];\n\nexport interface TextProps\n extends React.HTMLAttributes<\n HTMLElementTagNameMap[keyof HTMLElementTagNameMap]\n >,\n MarginProps {\n /** Size, according to standard \u201CT-shirt\u201D sizes */\n size?: SIZES | 'inherit';\n /** Extra HTML class attribute(s) to apply */\n className?: string;\n /** Predefined style variants */\n variant?: TextVariant;\n /** Font weight for the text */\n weight?: TextWeight;\n /** is it italic */\n isItalic?: boolean;\n /** is it monospace */\n isMonospace?: boolean;\n /** Is the text truncated with an ellipsis if it can\u2019t fit in the available space? */\n hasEllipsis?: boolean;\n /** the html element or a component that's gonna be used */\n as?: AsPropType;\n /** text content alignment */\n align?: TextAlign;\n /** title */\n title?: string;\n /** text-transform */\n textTransform?: TextTransform;\n /** overflow-wrap (more modern `word-break`) */\n overflowWrap?: OverflowWrap;\n /** Controls the white-space behavior */\n whiteSpace?: WhiteSpace;\n /** Should have inherit behavior by default */\n shouldInherit?: boolean;\n /** Optional ref for the element */\n innerRef?: React.Ref<HTMLElement | null>;\n /** Should the element reset the editorial copy context? */\n shouldResetEditorialCopyContext?: boolean;\n\n id?: string;\n}\n\n/**\n * Displays basic text using standard DRUIDS typography\n *\n * [View in DRUIDS style guide \u2197](https://druids.us1.prod.dog/components/typography/Text?ref=jsdoc)\n */\nexport const Text: React.FunctionComponent<TextProps> = ({\n shouldInherit,\n children,\n size: sizeProp,\n variant = shouldInherit ? undefined : 'default',\n weight = shouldInherit ? undefined : 'normal',\n isItalic = false,\n isMonospace = false,\n hasEllipsis = false,\n as = 'span',\n align = shouldInherit ? undefined : 'left',\n innerRef,\n className,\n textTransform,\n overflowWrap,\n whiteSpace,\n shouldResetEditorialCopyContext,\n ...props\n}) => {\n const [helperClassNames, otherProps] = handleHelpersClassNames(props, [\n 'margin',\n ]);\n\n // Inherit text size from possible <Text>, <Paragraph> parent.\n const contextSize = useTextContextSize('md');\n const [Component] = useAsComponent(as);\n const size = sizeProp === 'inherit' ? undefined : sizeProp || contextSize;\n return (\n <TextContext.Provider value={React.useMemo(() => ({ size }), [size])}>\n <Component\n className={classNames(\n BLOCK,\n {\n [`${BLOCK}--${size}`]: size,\n [`${BLOCK}--${variant}`]: variant,\n [`${BLOCK}--${weight}`]: weight,\n [`${BLOCK}--${align}`]: align,\n [`${BLOCK}--is-italic`]: isItalic,\n [`${BLOCK}--is-monospace`]: isMonospace,\n [`${BLOCK}--has-ellipsis`]: hasEllipsis,\n [`${BLOCK}--ws-${whiteSpace}`]: whiteSpace,\n [`${BLOCK}--${textTransform}`]: textTransform,\n [`${BLOCK}--ow-${overflowWrap}`]: overflowWrap,\n [`${BLOCK}--not-editorial-copy`]:\n shouldResetEditorialCopyContext,\n },\n helperClassNames,\n className,\n )}\n ref={innerRef}\n {...otherProps}\n >\n {children}\n </Component>\n </TextContext.Provider>\n );\n};\n", "import * as React from 'react';\nimport type { Instance as TippyInstance } from 'tippy.js';\n\nexport interface UseEscapeDismissalOptions {\n /** The Tippy instance to control */\n tippyInstance: TippyInstance | undefined;\n /**\n * Whether escape dismissal is enabled\n * @default true\n */\n isEnabled?: boolean;\n}\n\nexport interface UseEscapeDismissalReturn {\n /** Call this in onShow to start listening for Escape */\n startListeningToEsc: () => void;\n /** Call this in onHide to stop listening for Escape */\n stopListeningToEsc: () => void;\n}\n\n/**\n * Hook to handle Escape key dismissal for tooltips (WCAG 1.4.13 compliance).\n *\n * Uses capture phase to ensure the handler runs before other components\n * (like FocusGroup) that may stop propagation.\n *\n * @internal\n */\nexport const useEscapeDismissal = ({\n tippyInstance,\n isEnabled = true,\n}: UseEscapeDismissalOptions): UseEscapeDismissalReturn => {\n const handleEscapeKey = React.useCallback(\n (event: KeyboardEvent) => {\n if (event.key === 'Escape' && tippyInstance) {\n event.preventDefault();\n event.stopPropagation();\n tippyInstance.hide();\n }\n },\n [tippyInstance],\n );\n\n const startListeningToEsc = React.useCallback(() => {\n if (!isEnabled) {\n return;\n }\n\n // Use capture phase to handle Escape before other components (like FocusGroup) can stop propagation\n document.addEventListener('keydown', handleEscapeKey, true);\n }, [isEnabled, handleEscapeKey]);\n\n const stopListeningToEsc = React.useCallback(() => {\n if (!isEnabled) {\n return;\n }\n\n document.removeEventListener('keydown', handleEscapeKey, true);\n }, [isEnabled, handleEscapeKey]);\n\n return { startListeningToEsc, stopListeningToEsc };\n};\n", "import classNames from 'classnames';\nimport * as React from 'react';\n\nimport type { MarginProps, LockupProps } from '#lib/components-helpers';\nimport { handleHelpersClassNames } from '#lib/components-helpers';\nimport type { AsPropType } from '#lib/misc/use-as-component';\nimport { useAsComponent } from '#lib/misc/use-as-component';\nimport type { FORM_SIZES } from '#ui-constants';\n\nimport { GroupContext, useGroupContext } from './GroupContext';\nimport './group.less';\n\nconst BLOCK = 'druids_form_group';\n\nexport interface GroupProps\n extends MarginProps,\n LockupProps,\n React.HTMLAttributes<\n HTMLElementTagNameMap[keyof HTMLElementTagNameMap]\n > {\n /** Size of all the group's elements, according to standard \u201CT-shirt\u201D sizes */\n size?: FORM_SIZES;\n\n /** Should the group fill 100% of its container's width? (The Group will grow if it contains an `<InputText>`, `<TextArea>`, `<SearchBarSkeleton>`, or `<LegacyAutoComplete>`. Otherwise, this prop will have no visible effect.) */\n isFullWidth?: boolean;\n\n /** Extra HTML class attribute(s) to apply */\n className?: string;\n\n /** The direction of the items in the group */\n direction?: 'vertical' | 'horizontal';\n\n /** Should the props override the values coming from other Groups */\n shouldOverrideContext?: boolean;\n\n /** How should the items be aligned */\n align?: 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline';\n\n /** Disable the negative margin reset on adjacent items */\n hasNoItemMargins?: boolean;\n\n /**\n * Component to render the group with\n * (the component must accept `className` prop)\n */\n as?: AsPropType;\n\n /** Optional ref for the element */\n innerRef?: React.Ref<HTMLElement | null>;\n}\n\n/**\n * Joins multiple DRUIDS form (or form-like) components in a horizontal or vertical lockup by adding square corners where they touch each other\n *\n * [View in DRUIDS style guide \u2197](https://druids.us1.prod.dog/components/form/Group?ref=jsdoc)\n */\nexport const Group: React.FunctionComponent<GroupProps> = ({\n children,\n size: sizeProp = 'md',\n isFullWidth = false,\n className,\n direction = 'horizontal',\n shouldOverrideContext,\n align = 'center',\n hasNoItemMargins = false,\n as = 'div',\n innerRef,\n ...props\n}) => {\n const [Component] = useAsComponent(as);\n\n const [helperClassNames, otherProps] = handleHelpersClassNames(props, [\n 'margin',\n 'lockups',\n ]);\n\n const { size: contextSize } = useGroupContext();\n const isNested = Boolean(contextSize);\n // If we have a `shouldOverrideContext`, we always use the `sizeProp`,\n // otherwise we first try the `contextSize`.\n const size = (shouldOverrideContext && sizeProp) || contextSize || sizeProp;\n const contextValue = React.useMemo(() => ({ size }), [size]);\n\n return (\n <Component\n ref={innerRef}\n role=\"group\"\n {...otherProps}\n className={classNames(\n BLOCK,\n `${BLOCK}--${direction}`,\n {\n [`${BLOCK}--is-full-width`]: isFullWidth,\n [`${BLOCK}--is-nested`]: isNested,\n [`${BLOCK}--align-${align}`]: align !== 'center',\n [`${BLOCK}--no-margins`]: hasNoItemMargins,\n },\n helperClassNames,\n className,\n )}\n >\n <GroupContext.Provider value={contextValue}>\n {children}\n </GroupContext.Provider>\n </Component>\n );\n};\n", "import { createContext, useContext } from 'react';\n\nimport type { FORM_SIZES } from '#ui-constants';\n\nexport interface GroupContextProps {\n size?: FORM_SIZES;\n}\n\nexport const GroupContext: React.Context<GroupContextProps> =\n createContext<GroupContextProps>({});\n\nexport const useGroupContext = (): GroupContextProps =>\n useContext(GroupContext);\n", "import { createContext, useContext } from 'react';\n\nexport interface InputFocusContextProps {\n isFocused?: boolean;\n}\n\nexport const InputFocusContext: React.Context<InputFocusContextProps> =\n createContext<InputFocusContextProps>({});\n\nexport const useInputFocusContext = (): InputFocusContextProps =>\n useContext(InputFocusContext);\n", "import * as React from 'react';\n\nexport type StrictElementReferer =\n | HTMLElement\n | React.RefObject<HTMLElement | null>\n | React.MutableRefObject<HTMLElement | null>;\n\nexport type ElementReferer = Window | Document | null | StrictElementReferer;\n\nexport const getElementFromReferer = (\n elementReferer?: ElementReferer,\n defaultElement: Window | Document | null = document,\n): Window | Document | HTMLElement | null => {\n if (!elementReferer) {\n return defaultElement;\n }\n if (elementReferer instanceof Document) {\n return document;\n }\n if (elementReferer instanceof Window) {\n return window;\n }\n if (elementReferer instanceof HTMLElement) {\n return elementReferer;\n }\n return elementReferer.current || defaultElement;\n};\n\nexport const useElementFromReferer = (\n elementReferer?: ElementReferer,\n defaultElement: Window | Document | null = document,\n): Window | Document | HTMLElement | null => {\n const [element, setElement] =\n React.useState<ReturnType<typeof getElementFromReferer>>(null);\n\n // This is disabled because we want to run the effect at every render\n // Because the element contained in the ref can change at every render\n // eslint-disable-next-line react-hooks/exhaustive-deps\n React.useLayoutEffect(() => {\n const newElement = getElementFromReferer(\n elementReferer,\n defaultElement,\n );\n // Even if in theory React isn\u2019t suppose to re-render if the 2 values are the same, it sometimes does re-render (like for the initial value). And this can cause infinite loops, at least in tests\n if (newElement !== element) {\n setElement(newElement);\n }\n });\n\n return element;\n};\n", "import { useElementFromReferer } from '@lib/hooks/element-referer';\nimport * as React from 'react';\n\nimport { adjustColorBrightness } from '#lib/color/adjust-color-brightness';\nimport { getBrightness, isBright } from '#lib/color/get-contrasted-color';\nimport { getValueForCSSVar } from '#lib/color/get-value-for-css-var';\nimport { getUnderlyingColor } from '#lib/color/theme-color';\nimport { useTheme } from '#lib/color/use-theme';\nimport type { ThemeValue } from '#lib/color/use-theme';\n\nimport { CSS_VARIABLE_REGEX, isCSSVariable } from '../is-css-variable';\n\nexport type ColorOverride =\n | string\n | [colorInLightTheme: string, colorInDarkTheme: string];\n\nexport interface CustomColorProps {\n /** Custom background color, which takes precedence over `level`. It accepts [CSS variables](../../foundations/color#global-themed-colors) or an array of 2 colors, for the light and dark themes, respectively. */\n backgroundColor?: ColorOverride;\n /** Custom text color, which only is used when `backgroundColor` also is set. It accepts [CSS variables](../../foundations/color#global-themed-colors) or an array of 2 colors, for the light and dark themes, respectively. (If `textColor` is not set but `backgroundColor` _is_, a light or dark text color will automatically be applied depending on the brightness of `backgroundColor`.) */\n textColor?: ColorOverride;\n /** Custom border color, which takes precedence over `level`. It accepts [CSS variables](../../foundations/color#global-themed-colors) or an array of 2 colors, for the light and dark themes, respectively. */\n borderColor?: ColorOverride;\n}\n\nfunction getThemedColors<T>(color: T | [T, T]) {\n return Array.isArray(color) ? color : ([color, color] as const);\n}\n\ntype ThemedColorValues = {\n textColor: string | undefined;\n backgroundColor: string | undefined;\n backgroundHoverColor: string | undefined;\n borderColor: string | undefined;\n};\n\nfunction computeThemedColorValues(\n textColorProp: ColorOverride | undefined,\n backgroundColorProp: ColorOverride | undefined,\n borderColorProp: ColorOverride | undefined,\n element: HTMLElement | null,\n theme: ThemeValue,\n): ThemedColorValues {\n const themedTextColors = getThemedColors<string | undefined>(textColorProp);\n const themedBackgroundColors = getThemedColors<string | undefined>(\n backgroundColorProp,\n );\n const themedBorderColors = getThemedColors<string | undefined>(\n borderColorProp,\n );\n\n const isLightTheme = theme === 'light';\n const themeIndex = isLightTheme ? 0 : 1;\n\n const activeThemeBackgroundColor = themedBackgroundColors[themeIndex];\n const activeThemeTextColor = themedTextColors[themeIndex];\n const activeThemeBorderColor = themedBorderColors[themeIndex];\n\n let backgroundColor = activeThemeBackgroundColor;\n let backgroundHoverColor;\n\n if (backgroundColorProp && backgroundColor) {\n // If backgroundColorProp is a known CSS var, it is converted to a hex\n const match = backgroundColor.match(CSS_VARIABLE_REGEX);\n if (match?.[1]) {\n backgroundColor =\n getValueForCSSVar(match[1], element || undefined).trim() ||\n backgroundColor;\n }\n // Do not try adjusting a `var()`.\n if (!isCSSVariable(backgroundColor)) {\n // If backgroundColorProp is set, a hover color value is computed\n backgroundHoverColor = adjustColorBrightness(\n isLightTheme ? 'darker' : 'brighter',\n isLightTheme ? 0.2 : 0.5,\n backgroundColor,\n true,\n );\n }\n }\n\n let textColor = activeThemeTextColor;\n if (!textColorProp) {\n // If textColorProp is not set, a value is created to contrast computed background color\n textColor = getUnderlyingColor(\n // If backgroundColor is undefined, we fallback to `@ui-text--dark`\n backgroundColor &&\n // If backgroundColor is a CSS variable, ideally, we'd want to\n // use the dark color, but for historical reasons, we use the\n // light color.\n !isCSSVariable(backgroundColor) &&\n isBright(backgroundColor)\n ? '@ui-text--light'\n : '@ui-text--dark',\n );\n }\n\n return {\n textColor: backgroundColorProp ? textColor : undefined, // Text color styles are only returned if backgroundColorProp is set\n backgroundColor,\n backgroundHoverColor,\n borderColor: activeThemeBorderColor,\n };\n}\n\ninterface CustomColorStylesProps<ComponentName extends string> {\n ref: React.MutableRefObject<\n HTMLElement | HTMLSpanElement | HTMLButtonElement | null\n >;\n /** The name of the component used in the CSS properties */\n componentName: ComponentName;\n /** The custom text color */\n textColor: ColorOverride | undefined;\n /** The custom background color */\n backgroundColor: ColorOverride | undefined;\n /** The custom border color */\n borderColor?: ColorOverride | undefined;\n /** Whether the custom color styles are enabled */\n isEnabled?: boolean;\n /** If background is white, should we apply dark text on hover instead of dark bg? */\n hasTextHoverOnWhite?: boolean;\n /**\n * When true, CSS variables are resolved from document.body instead of the\n * component's ref element. Use this for portal-based components where theme\n * classes may not be applied to the portal element during the render phase.\n */\n useBodyForCSSVars?: boolean;\n}\n\ntype CustomColorStyles<N extends string> = Partial<\n Record<\n | `--${N}-custom-text-color`\n | `--${N}-custom-text-color-hover`\n | `--${N}-custom-background-color`\n | `--${N}-custom-background-color-hover`\n | `--${N}-custom-border-color`\n | `--${N}-custom-border-color-hover`,\n string | undefined\n >\n>;\n\n/**\n * Generate custom background, text, and hover colors for theme-able components.\n * Simply place these custom styles at the top level element of your component,\n * then use the returned CSS properties in your stylesheet however you like.\n *\n * @param ref The element that is being styled\n * @param componentName The name of the component used in the CSS properties\n * @param textColor The user set text color\n * @param backgroundColor The user set background color\n * @returns custom React.CSSProperties style object (should be memoized)\n *\n * @example\n * Component definition:\n * ```ts\n export const Badge = () => {\n const customStyles = useCustomColorStyles(\n ref,\n 'badge',\n textColorProp,\n bgColorProp\n );\n return <div style={bgColorProp ? customStyles : undefined} />;\n };\n * ```\n * Component implementation:\n * ```tsx\n <Badge\n label=\"Pink badge\"\n icon={WatchdogIcon}\n backgroundColor=\"var(--ui-interaction-callout)\"\n />\n * ```\n * Returned CSS properties object:\n * ```sh\n {\n --badge-custom-text-color: #ffffff;\n --badge-custom-background-color: #ff0099;\n --badge-custom-background-color-hover: rgb(237, 0, 142);\n }\n * ```\n */\nexport const useCustomColorStyles = <ComponentName extends string = string>({\n ref,\n componentName,\n textColor,\n backgroundColor,\n borderColor,\n isEnabled = true,\n hasTextHoverOnWhite = false,\n useBodyForCSSVars = false,\n}: CustomColorStylesProps<ComponentName>): CustomColorStyles<ComponentName> => {\n const element = useElementFromReferer(ref, null) as HTMLElement | null;\n const { theme } = useTheme();\n\n return React.useMemo(() => {\n if (!isEnabled) {\n return {};\n }\n // Avoid unnecessary computations\n if (!textColor && !backgroundColor) {\n return {};\n }\n\n // Use document.body for CSS variable resolution when useBodyForCSSVars\n // is true. This is needed for portal-based components where theme classes\n // may not be applied to the portal element during the render phase.\n const elementForCSSVars = useBodyForCSSVars ? document.body : element;\n\n const computedTheme = computeThemedColorValues(\n textColor,\n backgroundColor,\n borderColor,\n elementForCSSVars,\n theme,\n );\n\n const result: CustomColorStyles<ComponentName> = {};\n\n // TS template literal types don't seem to work when declaring an object\n // literal; setting the props after having declared an empty object as\n // a work-around.\n result[`--${componentName}-custom-text-color`] =\n computedTheme.textColor;\n result[`--${componentName}-custom-background-color`] =\n computedTheme.backgroundColor;\n result[`--${componentName}-custom-background-color-hover`] =\n computedTheme.backgroundHoverColor;\n result[`--${componentName}-custom-border-color`] =\n computedTheme.borderColor;\n\n // apply a darker text color on hover instead\n if (\n hasTextHoverOnWhite &&\n computedTheme.backgroundColor &&\n getBrightness(computedTheme.backgroundColor) === 1\n ) {\n result[`--${componentName}-custom-background-color-hover`] =\n computedTheme.backgroundColor;\n result[\n `--${componentName}-custom-text-color-hover`\n ] = `color-mix(in srgb, var(--${componentName}-custom-text-color) 75%, var(--ui-text))`;\n result[\n `--${componentName}-custom-border-color-hover`\n ] = `color-mix(in srgb, var(--${componentName}-custom-text-color) 75%, var(--ui-text))`;\n }\n\n return result;\n }, [\n isEnabled,\n backgroundColor,\n componentName,\n element,\n textColor,\n theme,\n useBodyForCSSVars,\n borderColor,\n hasTextHoverOnWhite,\n ]);\n};\n", "const parseNumber = (color, len) => {\n\tif (typeof color !== 'number') return;\n\n\t// hex3: #c93 -> #cc9933\n\tif (len === 3) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: (((color >> 8) & 0xf) | ((color >> 4) & 0xf0)) / 255,\n\t\t\tg: (((color >> 4) & 0xf) | (color & 0xf0)) / 255,\n\t\t\tb: ((color & 0xf) | ((color << 4) & 0xf0)) / 255\n\t\t};\n\t}\n\n\t// hex4: #c931 -> #cc993311\n\tif (len === 4) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: (((color >> 12) & 0xf) | ((color >> 8) & 0xf0)) / 255,\n\t\t\tg: (((color >> 8) & 0xf) | ((color >> 4) & 0xf0)) / 255,\n\t\t\tb: (((color >> 4) & 0xf) | (color & 0xf0)) / 255,\n\t\t\talpha: ((color & 0xf) | ((color << 4) & 0xf0)) / 255\n\t\t};\n\t}\n\n\t// hex6: #f0f1f2\n\tif (len === 6) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: ((color >> 16) & 0xff) / 255,\n\t\t\tg: ((color >> 8) & 0xff) / 255,\n\t\t\tb: (color & 0xff) / 255\n\t\t};\n\t}\n\n\t// hex8: #f0f1f2ff\n\tif (len === 8) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: ((color >> 24) & 0xff) / 255,\n\t\t\tg: ((color >> 16) & 0xff) / 255,\n\t\t\tb: ((color >> 8) & 0xff) / 255,\n\t\t\talpha: (color & 0xff) / 255\n\t\t};\n\t}\n};\n\nexport default parseNumber;\n", "const named = {\n\taliceblue: 0xf0f8ff,\n\tantiquewhite: 0xfaebd7,\n\taqua: 0x00ffff,\n\taquamarine: 0x7fffd4,\n\tazure: 0xf0ffff,\n\tbeige: 0xf5f5dc,\n\tbisque: 0xffe4c4,\n\tblack: 0x000000,\n\tblanchedalmond: 0xffebcd,\n\tblue: 0x0000ff,\n\tblueviolet: 0x8a2be2,\n\tbrown: 0xa52a2a,\n\tburlywood: 0xdeb887,\n\tcadetblue: 0x5f9ea0,\n\tchartreuse: 0x7fff00,\n\tchocolate: 0xd2691e,\n\tcoral: 0xff7f50,\n\tcornflowerblue: 0x6495ed,\n\tcornsilk: 0xfff8dc,\n\tcrimson: 0xdc143c,\n\tcyan: 0x00ffff,\n\tdarkblue: 0x00008b,\n\tdarkcyan: 0x008b8b,\n\tdarkgoldenrod: 0xb8860b,\n\tdarkgray: 0xa9a9a9,\n\tdarkgreen: 0x006400,\n\tdarkgrey: 0xa9a9a9,\n\tdarkkhaki: 0xbdb76b,\n\tdarkmagenta: 0x8b008b,\n\tdarkolivegreen: 0x556b2f,\n\tdarkorange: 0xff8c00,\n\tdarkorchid: 0x9932cc,\n\tdarkred: 0x8b0000,\n\tdarksalmon: 0xe9967a,\n\tdarkseagreen: 0x8fbc8f,\n\tdarkslateblue: 0x483d8b,\n\tdarkslategray: 0x2f4f4f,\n\tdarkslategrey: 0x2f4f4f,\n\tdarkturquoise: 0x00ced1,\n\tdarkviolet: 0x9400d3,\n\tdeeppink: 0xff1493,\n\tdeepskyblue: 0x00bfff,\n\tdimgray: 0x696969,\n\tdimgrey: 0x696969,\n\tdodgerblue: 0x1e90ff,\n\tfirebrick: 0xb22222,\n\tfloralwhite: 0xfffaf0,\n\tforestgreen: 0x228b22,\n\tfuchsia: 0xff00ff,\n\tgainsboro: 0xdcdcdc,\n\tghostwhite: 0xf8f8ff,\n\tgold: 0xffd700,\n\tgoldenrod: 0xdaa520,\n\tgray: 0x808080,\n\tgreen: 0x008000,\n\tgreenyellow: 0xadff2f,\n\tgrey: 0x808080,\n\thoneydew: 0xf0fff0,\n\thotpink: 0xff69b4,\n\tindianred: 0xcd5c5c,\n\tindigo: 0x4b0082,\n\tivory: 0xfffff0,\n\tkhaki: 0xf0e68c,\n\tlavender: 0xe6e6fa,\n\tlavenderblush: 0xfff0f5,\n\tlawngreen: 0x7cfc00,\n\tlemonchiffon: 0xfffacd,\n\tlightblue: 0xadd8e6,\n\tlightcoral: 0xf08080,\n\tlightcyan: 0xe0ffff,\n\tlightgoldenrodyellow: 0xfafad2,\n\tlightgray: 0xd3d3d3,\n\tlightgreen: 0x90ee90,\n\tlightgrey: 0xd3d3d3,\n\tlightpink: 0xffb6c1,\n\tlightsalmon: 0xffa07a,\n\tlightseagreen: 0x20b2aa,\n\tlightskyblue: 0x87cefa,\n\tlightslategray: 0x778899,\n\tlightslategrey: 0x778899,\n\tlightsteelblue: 0xb0c4de,\n\tlightyellow: 0xffffe0,\n\tlime: 0x00ff00,\n\tlimegreen: 0x32cd32,\n\tlinen: 0xfaf0e6,\n\tmagenta: 0xff00ff,\n\tmaroon: 0x800000,\n\tmediumaquamarine: 0x66cdaa,\n\tmediumblue: 0x0000cd,\n\tmediumorchid: 0xba55d3,\n\tmediumpurple: 0x9370db,\n\tmediumseagreen: 0x3cb371,\n\tmediumslateblue: 0x7b68ee,\n\tmediumspringgreen: 0x00fa9a,\n\tmediumturquoise: 0x48d1cc,\n\tmediumvioletred: 0xc71585,\n\tmidnightblue: 0x191970,\n\tmintcream: 0xf5fffa,\n\tmistyrose: 0xffe4e1,\n\tmoccasin: 0xffe4b5,\n\tnavajowhite: 0xffdead,\n\tnavy: 0x000080,\n\toldlace: 0xfdf5e6,\n\tolive: 0x808000,\n\tolivedrab: 0x6b8e23,\n\torange: 0xffa500,\n\torangered: 0xff4500,\n\torchid: 0xda70d6,\n\tpalegoldenrod: 0xeee8aa,\n\tpalegreen: 0x98fb98,\n\tpaleturquoise: 0xafeeee,\n\tpalevioletred: 0xdb7093,\n\tpapayawhip: 0xffefd5,\n\tpeachpuff: 0xffdab9,\n\tperu: 0xcd853f,\n\tpink: 0xffc0cb,\n\tplum: 0xdda0dd,\n\tpowderblue: 0xb0e0e6,\n\tpurple: 0x800080,\n\n\t// Added in CSS Colors Level 4:\n\t// https://drafts.csswg.org/css-color/#changes-from-3\n\trebeccapurple: 0x663399,\n\n\tred: 0xff0000,\n\trosybrown: 0xbc8f8f,\n\troyalblue: 0x4169e1,\n\tsaddlebrown: 0x8b4513,\n\tsalmon: 0xfa8072,\n\tsandybrown: 0xf4a460,\n\tseagreen: 0x2e8b57,\n\tseashell: 0xfff5ee,\n\tsienna: 0xa0522d,\n\tsilver: 0xc0c0c0,\n\tskyblue: 0x87ceeb,\n\tslateblue: 0x6a5acd,\n\tslategray: 0x708090,\n\tslategrey: 0x708090,\n\tsnow: 0xfffafa,\n\tspringgreen: 0x00ff7f,\n\tsteelblue: 0x4682b4,\n\ttan: 0xd2b48c,\n\tteal: 0x008080,\n\tthistle: 0xd8bfd8,\n\ttomato: 0xff6347,\n\tturquoise: 0x40e0d0,\n\tviolet: 0xee82ee,\n\twheat: 0xf5deb3,\n\twhite: 0xffffff,\n\twhitesmoke: 0xf5f5f5,\n\tyellow: 0xffff00,\n\tyellowgreen: 0x9acd32\n};\n\nexport default named;\n", "import parseNumber from './parseNumber.js';\nimport named from '../colors/named.js';\n\n// Also supports the `transparent` color as defined in:\n// https://drafts.csswg.org/css-color/#transparent-black\nconst parseNamed = color => {\n\treturn parseNumber(named[color.toLowerCase()], 6);\n};\n\nexport default parseNamed;\n", "import parseNumber from './parseNumber.js';\n\nconst hex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i;\n\nconst parseHex = color => {\n\tlet match;\n\t// eslint-disable-next-line no-cond-assign\n\treturn (match = color.match(hex))\n\t\t? parseNumber(parseInt(match[1], 16), match[1].length)\n\t\t: undefined;\n};\n\nexport default parseHex;\n", "/*\n\tBasic building blocks for color regexes\n\t---------------------------------------\n\n\tThese regexes are expressed as strings\n\tto be interpolated in the color regexes.\n */\n\n// <number>\nexport const num = '([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)';\n\n// <number> or 'none'\nexport const num_none = `(?:${num}|none)`;\n\n// <percentage>\nexport const per = `${num}%`;\n\n// <percent> or 'none'\nexport const per_none = `(?:${num}%|none)`;\n\n// <number-percentage> (<alpha-value>)\nexport const num_per = `(?:${num}%|${num})`;\n\n// <number-percentage> (<alpha-value>) or 'none'\nexport const num_per_none = `(?:${num}%|${num}|none)`;\n\n// <hue>\nexport const hue = `(?:${num}(deg|grad|rad|turn)|${num})`;\n\n// <hue> or 'none'\nexport const hue_none = `(?:${num}(deg|grad|rad|turn)|${num}|none)`;\n\nexport const c = `\\\\s*,\\\\s*`; // comma\nexport const so = '\\\\s*'; // space, optional\nexport const s = `\\\\s+`; // space\n\nexport const rx_num_per_none = new RegExp('^' + num_per_none + '$');\n", "import { num, per, num_per, c } from '../util/regex.js';\n\n/*\n\trgb() regular expressions for legacy format\n\tReference: https://drafts.csswg.org/css-color/#rgb-functions\n */\nconst rgb_num_old = new RegExp(\n\t`^rgba?\\\\(\\\\s*${num}${c}${num}${c}${num}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst rgb_per_old = new RegExp(\n\t`^rgba?\\\\(\\\\s*${per}${c}${per}${c}${per}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst parseRgbLegacy = color => {\n\tlet res = { mode: 'rgb' };\n\tlet match;\n\tif ((match = color.match(rgb_num_old))) {\n\t\tif (match[1] !== undefined) {\n\t\t\tres.r = match[1] / 255;\n\t\t}\n\t\tif (match[2] !== undefined) {\n\t\t\tres.g = match[2] / 255;\n\t\t}\n\t\tif (match[3] !== undefined) {\n\t\t\tres.b = match[3] / 255;\n\t\t}\n\t} else if ((match = color.match(rgb_per_old))) {\n\t\tif (match[1] !== undefined) {\n\t\t\tres.r = match[1] / 100;\n\t\t}\n\t\tif (match[2] !== undefined) {\n\t\t\tres.g = match[2] / 100;\n\t\t}\n\t\tif (match[3] !== undefined) {\n\t\t\tres.b = match[3] / 100;\n\t\t}\n\t} else {\n\t\treturn undefined;\n\t}\n\n\tif (match[4] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, match[4] / 100));\n\t} else if (match[5] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, +match[5]));\n\t}\n\n\treturn res;\n};\n\nexport default parseRgbLegacy;\n", "import parse from './parse.js';\n\nconst prepare = (color, mode) =>\n\tcolor === undefined\n\t\t? undefined\n\t\t: typeof color !== 'object'\n\t\t? parse(color)\n\t\t: color.mode !== undefined\n\t\t? color\n\t\t: mode\n\t\t? { ...color, mode }\n\t\t: undefined;\n\nexport default prepare;\n", "import { converters } from './modes.js';\nimport prepare from './_prepare.js';\n\nconst converter =\n\t(target_mode = 'rgb') =>\n\tcolor =>\n\t\t(color = prepare(color, target_mode)) !== undefined\n\t\t\t? // if the color's mode corresponds to our target mode\n\t\t\t color.mode === target_mode\n\t\t\t\t? // then just return the color\n\t\t\t\t color\n\t\t\t\t: // otherwise check to see if we have a dedicated\n\t\t\t\t// converter for the target mode\n\t\t\t\tconverters[color.mode][target_mode]\n\t\t\t\t? // and return its result...\n\t\t\t\t converters[color.mode][target_mode](color)\n\t\t\t\t: // ...otherwise pass through RGB as an intermediary step.\n\t\t\t\t// if the target mode is RGB...\n\t\t\t\ttarget_mode === 'rgb'\n\t\t\t\t? // just return the RGB\n\t\t\t\t converters[color.mode].rgb(color)\n\t\t\t\t: // otherwise convert color.mode -> RGB -> target_mode\n\t\t\t\t converters.rgb[target_mode](converters[color.mode].rgb(color))\n\t\t\t: undefined;\n\nexport default converter;\n", "import converter from './converter.js';\n\nconst converters = {};\nconst modes = {};\n\nconst parsers = [];\nconst colorProfiles = {};\n\nconst identity = v => v;\n\nconst useMode = definition => {\n\tconverters[definition.mode] = {\n\t\t...converters[definition.mode],\n\t\t...definition.toMode\n\t};\n\n\tObject.keys(definition.fromMode || {}).forEach(k => {\n\t\tif (!converters[k]) {\n\t\t\tconverters[k] = {};\n\t\t}\n\t\tconverters[k][definition.mode] = definition.fromMode[k];\n\t});\n\n\t// Color space channel ranges\n\tif (!definition.ranges) {\n\t\tdefinition.ranges = {};\n\t}\n\n\tif (!definition.difference) {\n\t\tdefinition.difference = {};\n\t}\n\n\tdefinition.channels.forEach(channel => {\n\t\t// undefined channel ranges default to the [0, 1] interval\n\t\tif (definition.ranges[channel] === undefined) {\n\t\t\tdefinition.ranges[channel] = [0, 1];\n\t\t}\n\n\t\tif (!definition.interpolate[channel]) {\n\t\t\tthrow new Error(`Missing interpolator for: ${channel}`);\n\t\t}\n\n\t\tif (typeof definition.interpolate[channel] === 'function') {\n\t\t\tdefinition.interpolate[channel] = {\n\t\t\t\tuse: definition.interpolate[channel]\n\t\t\t};\n\t\t}\n\n\t\tif (!definition.interpolate[channel].fixup) {\n\t\t\tdefinition.interpolate[channel].fixup = identity;\n\t\t}\n\t});\n\n\tmodes[definition.mode] = definition;\n\t(definition.parse || []).forEach(parser => {\n\t\tuseParser(parser, definition.mode);\n\t});\n\n\treturn converter(definition.mode);\n};\n\nconst getMode = mode => modes[mode];\n\nconst useParser = (parser, mode) => {\n\tif (typeof parser === 'string') {\n\t\tif (!mode) {\n\t\t\tthrow new Error(`'mode' required when 'parser' is a string`);\n\t\t}\n\t\tcolorProfiles[parser] = mode;\n\t} else if (typeof parser === 'function') {\n\t\tif (parsers.indexOf(parser) < 0) {\n\t\t\tparsers.push(parser);\n\t\t}\n\t}\n};\n\nconst removeParser = parser => {\n\tif (typeof parser === 'string') {\n\t\tdelete colorProfiles[parser];\n\t} else if (typeof parser === 'function') {\n\t\tconst idx = parsers.indexOf(parser);\n\t\tif (idx > 0) {\n\t\t\tparsers.splice(idx, 1);\n\t\t}\n\t}\n};\n\nexport {\n\tuseMode,\n\tgetMode,\n\tuseParser,\n\tremoveParser,\n\tconverters,\n\tparsers,\n\tcolorProfiles\n};\n", "import { parsers, colorProfiles, getMode } from './modes.js';\n\n/* eslint-disable-next-line no-control-regex */\nconst IdentStartCodePoint = /[^\\x00-\\x7F]|[a-zA-Z_]/;\n\n/* eslint-disable-next-line no-control-regex */\nconst IdentCodePoint = /[^\\x00-\\x7F]|[-\\w]/;\n\nexport const Tok = {\n\tFunction: 'function',\n\tIdent: 'ident',\n\tNumber: 'number',\n\tPercentage: 'percentage',\n\tParenClose: ')',\n\tNone: 'none',\n\tHue: 'hue',\n\tAlpha: 'alpha'\n};\n\nlet _i = 0;\n\n/*\n\t4.3.10. Check if three code points would start a number\n\thttps://drafts.csswg.org/css-syntax/#starts-with-a-number\n */\nfunction is_num(chars) {\n\tlet ch = chars[_i];\n\tlet ch1 = chars[_i + 1];\n\tif (ch === '-' || ch === '+') {\n\t\treturn /\\d/.test(ch1) || (ch1 === '.' && /\\d/.test(chars[_i + 2]));\n\t}\n\tif (ch === '.') {\n\t\treturn /\\d/.test(ch1);\n\t}\n\treturn /\\d/.test(ch);\n}\n\n/*\n\tCheck if the stream starts with an identifier.\n */\n\nfunction is_ident(chars) {\n\tif (_i >= chars.length) {\n\t\treturn false;\n\t}\n\tlet ch = chars[_i];\n\tif (IdentStartCodePoint.test(ch)) {\n\t\treturn true;\n\t}\n\tif (ch === '-') {\n\t\tif (chars.length - _i < 2) {\n\t\t\treturn false;\n\t\t}\n\t\tlet ch1 = chars[_i + 1];\n\t\tif (ch1 === '-' || IdentStartCodePoint.test(ch1)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\treturn false;\n}\n\n/*\n\t4.3.3. Consume a numeric token\n\thttps://drafts.csswg.org/css-syntax/#consume-numeric-token\n */\n\nconst huenits = {\n\tdeg: 1,\n\trad: 180 / Math.PI,\n\tgrad: 9 / 10,\n\tturn: 360\n};\n\nfunction num(chars) {\n\tlet value = '';\n\tif (chars[_i] === '-' || chars[_i] === '+') {\n\t\tvalue += chars[_i++];\n\t}\n\tvalue += digits(chars);\n\tif (chars[_i] === '.' && /\\d/.test(chars[_i + 1])) {\n\t\tvalue += chars[_i++] + digits(chars);\n\t}\n\tif (chars[_i] === 'e' || chars[_i] === 'E') {\n\t\tif (\n\t\t\t(chars[_i + 1] === '-' || chars[_i + 1] === '+') &&\n\t\t\t/\\d/.test(chars[_i + 2])\n\t\t) {\n\t\t\tvalue += chars[_i++] + chars[_i++] + digits(chars);\n\t\t} else if (/\\d/.test(chars[_i + 1])) {\n\t\t\tvalue += chars[_i++] + digits(chars);\n\t\t}\n\t}\n\tif (is_ident(chars)) {\n\t\tlet id = ident(chars);\n\t\tif (id === 'deg' || id === 'rad' || id === 'turn' || id === 'grad') {\n\t\t\treturn { type: Tok.Hue, value: value * huenits[id] };\n\t\t}\n\t\treturn undefined;\n\t}\n\tif (chars[_i] === '%') {\n\t\t_i++;\n\t\treturn { type: Tok.Percentage, value: +value };\n\t}\n\treturn { type: Tok.Number, value: +value };\n}\n\n/*\n\tConsume digits.\n */\nfunction digits(chars) {\n\tlet v = '';\n\twhile (/\\d/.test(chars[_i])) {\n\t\tv += chars[_i++];\n\t}\n\treturn v;\n}\n\n/*\n\tConsume an identifier.\n */\nfunction ident(chars) {\n\tlet v = '';\n\twhile (_i < chars.length && IdentCodePoint.test(chars[_i])) {\n\t\tv += chars[_i++];\n\t}\n\treturn v;\n}\n\n/*\n\tConsume an ident-like token.\n */\nfunction identlike(chars) {\n\tlet v = ident(chars);\n\tif (chars[_i] === '(') {\n\t\t_i++;\n\t\treturn { type: Tok.Function, value: v };\n\t}\n\tif (v === 'none') {\n\t\treturn { type: Tok.None, value: undefined };\n\t}\n\treturn { type: Tok.Ident, value: v };\n}\n\nexport function tokenize(str = '') {\n\tlet chars = str.trim();\n\tlet tokens = [];\n\tlet ch;\n\n\t/* reset counter */\n\t_i = 0;\n\n\twhile (_i < chars.length) {\n\t\tch = chars[_i++];\n\n\t\t/*\n\t\t\tConsume whitespace without emitting it\n\t\t */\n\t\tif (ch === '\\n' || ch === '\\t' || ch === ' ') {\n\t\t\twhile (\n\t\t\t\t_i < chars.length &&\n\t\t\t\t(chars[_i] === '\\n' || chars[_i] === '\\t' || chars[_i] === ' ')\n\t\t\t) {\n\t\t\t\t_i++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ch === ',') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === ')') {\n\t\t\ttokens.push({ type: Tok.ParenClose });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ch === '+') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '-') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (is_ident(chars)) {\n\t\t\t\ttokens.push({ type: Tok.Ident, value: ident(chars) });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '.') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '/') {\n\t\t\twhile (\n\t\t\t\t_i < chars.length &&\n\t\t\t\t(chars[_i] === '\\n' || chars[_i] === '\\t' || chars[_i] === ' ')\n\t\t\t) {\n\t\t\t\t_i++;\n\t\t\t}\n\t\t\tlet alpha;\n\t\t\tif (is_num(chars)) {\n\t\t\t\talpha = num(chars);\n\t\t\t\tif (alpha.type !== Tok.Hue) {\n\t\t\t\t\ttokens.push({ type: Tok.Alpha, value: alpha });\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (is_ident(chars)) {\n\t\t\t\tif (ident(chars) === 'none') {\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\ttype: Tok.Alpha,\n\t\t\t\t\t\tvalue: { type: Tok.None, value: undefined }\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (/\\d/.test(ch)) {\n\t\t\t_i--;\n\t\t\ttokens.push(num(chars));\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (IdentStartCodePoint.test(ch)) {\n\t\t\t_i--;\n\t\t\ttokens.push(identlike(chars));\n\t\t\tcontinue;\n\t\t}\n\n\t\t/*\n\t\t\tTreat everything not already handled as an error.\n\t\t */\n\t\treturn undefined;\n\t}\n\n\treturn tokens;\n}\n\nexport function parseColorSyntax(tokens) {\n\ttokens._i = 0;\n\tlet token = tokens[tokens._i++];\n\tif (!token || token.type !== Tok.Function || token.value !== 'color') {\n\t\treturn undefined;\n\t}\n\ttoken = tokens[tokens._i++];\n\tif (token.type !== Tok.Ident) {\n\t\treturn undefined;\n\t}\n\tconst mode = colorProfiles[token.value];\n\tif (!mode) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode };\n\tconst coords = consumeCoords(tokens, false);\n\tif (!coords) {\n\t\treturn undefined;\n\t}\n\tconst channels = getMode(mode).channels;\n\tfor (let ii = 0, c, ch; ii < channels.length; ii++) {\n\t\tc = coords[ii];\n\t\tch = channels[ii];\n\t\tif (c.type !== Tok.None) {\n\t\t\tres[ch] = c.type === Tok.Number ? c.value : c.value / 100;\n\t\t\tif (ch === 'alpha') {\n\t\t\t\tres[ch] = Math.max(0, Math.min(1, res[ch]));\n\t\t\t}\n\t\t}\n\t}\n\treturn res;\n}\n\nfunction consumeCoords(tokens, includeHue) {\n\tconst coords = [];\n\tlet token;\n\twhile (tokens._i < tokens.length) {\n\t\ttoken = tokens[tokens._i++];\n\t\tif (\n\t\t\ttoken.type === Tok.None ||\n\t\t\ttoken.type === Tok.Number ||\n\t\t\ttoken.type === Tok.Alpha ||\n\t\t\ttoken.type === Tok.Percentage ||\n\t\t\t(includeHue && token.type === Tok.Hue)\n\t\t) {\n\t\t\tcoords.push(token);\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.type === Tok.ParenClose) {\n\t\t\tif (tokens._i < tokens.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tif (coords.length < 3 || coords.length > 4) {\n\t\treturn undefined;\n\t}\n\n\tif (coords.length === 4) {\n\t\tif (coords[3].type !== Tok.Alpha) {\n\t\t\treturn undefined;\n\t\t}\n\t\tcoords[3] = coords[3].value;\n\t}\n\tif (coords.length === 3) {\n\t\tcoords.push({ type: Tok.None, value: undefined });\n\t}\n\n\treturn coords.every(c => c.type !== Tok.Alpha) ? coords : undefined;\n}\n\nexport function parseModernSyntax(tokens, includeHue) {\n\ttokens._i = 0;\n\tlet token = tokens[tokens._i++];\n\tif (!token || token.type !== Tok.Function) {\n\t\treturn undefined;\n\t}\n\tlet coords = consumeCoords(tokens, includeHue);\n\tif (!coords) {\n\t\treturn undefined;\n\t}\n\tcoords.unshift(token.value);\n\treturn coords;\n}\n\nconst parse = color => {\n\tif (typeof color !== 'string') {\n\t\treturn undefined;\n\t}\n\tconst tokens = tokenize(color);\n\tconst parsed = tokens ? parseModernSyntax(tokens, true) : undefined;\n\tlet result = undefined;\n\tlet i = 0;\n\tlet len = parsers.length;\n\twhile (i < len) {\n\t\tif ((result = parsers[i++](color, parsed)) !== undefined) {\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn tokens ? parseColorSyntax(tokens) : undefined;\n};\n\nexport default parse;\n", "import { Tok } from '../parse.js';\n\nfunction parseRgb(color, parsed) {\n\tif (!parsed || (parsed[0] !== 'rgb' && parsed[0] !== 'rgba')) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'rgb' };\n\tconst [, r, g, b, alpha] = parsed;\n\tif (r.type === Tok.Hue || g.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (r.type !== Tok.None) {\n\t\tres.r = r.type === Tok.Number ? r.value / 255 : r.value / 100;\n\t}\n\tif (g.type !== Tok.None) {\n\t\tres.g = g.type === Tok.Number ? g.value / 255 : g.value / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value / 255 : b.value / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseRgb;\n", "const parseTransparent = c =>\n\tc === 'transparent'\n\t\t? { mode: 'rgb', r: 0, g: 0, b: 0, alpha: 0 }\n\t\t: undefined;\n\nexport default parseTransparent;\n", "const lerp = (a, b, t) => a + t * (b - a);\nconst unlerp = (a, b, v) => (v - a) / (b - a);\n\nconst blerp = (a00, a01, a10, a11, tx, ty) => {\n\treturn lerp(lerp(a00, a01, tx), lerp(a10, a11, tx), ty);\n};\n\nconst trilerp = (\n\ta000,\n\ta010,\n\ta100,\n\ta110,\n\ta001,\n\ta011,\n\ta101,\n\ta111,\n\ttx,\n\tty,\n\ttz\n) => {\n\treturn lerp(\n\t\tblerp(a000, a010, a100, a110, tx, ty),\n\t\tblerp(a001, a011, a101, a111, tx, ty),\n\t\ttz\n\t);\n};\n\nexport { lerp, blerp, trilerp, unlerp };\n", "const get_classes = arr => {\n\tlet classes = [];\n\tfor (let i = 0; i < arr.length - 1; i++) {\n\t\tlet a = arr[i];\n\t\tlet b = arr[i + 1];\n\t\tif (a === undefined && b === undefined) {\n\t\t\tclasses.push(undefined);\n\t\t} else if (a !== undefined && b !== undefined) {\n\t\t\tclasses.push([a, b]);\n\t\t} else {\n\t\t\tclasses.push(a !== undefined ? [a, a] : [b, b]);\n\t\t}\n\t}\n\treturn classes;\n};\n\nconst interpolatorPiecewise = interpolator => arr => {\n\tlet classes = get_classes(arr);\n\treturn t => {\n\t\tlet cls = t * classes.length;\n\t\tlet idx = t >= 1 ? classes.length - 1 : Math.max(Math.floor(cls), 0);\n\t\tlet pair = classes[idx];\n\t\treturn pair === undefined\n\t\t\t? undefined\n\t\t\t: interpolator(pair[0], pair[1], cls - idx);\n\t};\n};\n\nexport { interpolatorPiecewise };\n", "import { lerp } from './lerp.js';\nimport { interpolatorPiecewise } from './piecewise.js';\n\nexport const interpolatorLinear = interpolatorPiecewise(lerp);\n", "const fixupAlpha = arr => {\n\tlet some_defined = false;\n\tlet res = arr.map(v => {\n\t\tif (v !== undefined) {\n\t\t\tsome_defined = true;\n\t\t\treturn v;\n\t\t}\n\t\treturn 1;\n\t});\n\treturn some_defined ? res : arr;\n};\n\nexport { fixupAlpha };\n", "import parseNamed from './parseNamed.js';\nimport parseHex from './parseHex.js';\nimport parseRgbLegacy from './parseRgbLegacy.js';\nimport parseRgb from './parseRgb.js';\nimport parseTransparent from './parseTransparent.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\n/*\n\tsRGB color space\n */\n\nconst definition = {\n\tmode: 'rgb',\n\tchannels: ['r', 'g', 'b', 'alpha'],\n\tparse: [\n\t\tparseRgb,\n\t\tparseHex,\n\t\tparseRgbLegacy,\n\t\tparseNamed,\n\t\tparseTransparent,\n\t\t'srgb'\n\t],\n\tserialize: 'srgb',\n\tinterpolate: {\n\t\tr: interpolatorLinear,\n\t\tg: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\tgamut: true,\n\twhite: { r: 1, g: 1, b: 1 },\n\tblack: { r: 0, g: 0, b: 0 }\n};\n\nexport default definition;\n", "/*\n\tConvert A98 RGB values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf\n*/\n\nconst linearize = (v = 0) => Math.pow(Math.abs(v), 563 / 256) * Math.sign(v);\n\nconst convertA98ToXyz65 = a98 => {\n\tlet r = linearize(a98.r);\n\tlet g = linearize(a98.g);\n\tlet b = linearize(a98.b);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.5766690429101305 * r +\n\t\t\t0.1855582379065463 * g +\n\t\t\t0.1882286462349947 * b,\n\t\ty:\n\t\t\t0.297344975250536 * r +\n\t\t\t0.6273635662554661 * g +\n\t\t\t0.0752914584939979 * b,\n\t\tz:\n\t\t\t0.0270313613864123 * r +\n\t\t\t0.0706888525358272 * g +\n\t\t\t0.9913375368376386 * b\n\t};\n\tif (a98.alpha !== undefined) {\n\t\tres.alpha = a98.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertA98ToXyz65;\n", "/*\n\tConvert CIE XYZ D65 values to A98 RGB\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst gamma = v => Math.pow(Math.abs(v), 256 / 563) * Math.sign(v);\n\nconst convertXyz65ToA98 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'a98',\n\t\tr: gamma(\n\t\t\tx * 2.0415879038107465 -\n\t\t\t\ty * 0.5650069742788597 -\n\t\t\t\t0.3447313507783297 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.9692436362808798 +\n\t\t\t\ty * 1.8759675015077206 +\n\t\t\t\t0.0415550574071756 * z\n\t\t),\n\t\tb: gamma(\n\t\t\tx * 0.0134442806320312 -\n\t\t\t\ty * 0.1183623922310184 +\n\t\t\t\t1.0151749943912058 * z\n\t\t)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToA98;\n", "const fn = (c = 0) => {\n\tconst abs = Math.abs(c);\n\tif (abs <= 0.04045) {\n\t\treturn c / 12.92;\n\t}\n\treturn (Math.sign(c) || 1) * Math.pow((abs + 0.055) / 1.055, 2.4);\n};\n\nconst convertRgbToLrgb = ({ r, g, b, alpha }) => {\n\tlet res = {\n\t\tmode: 'lrgb',\n\t\tr: fn(r),\n\t\tg: fn(g),\n\t\tb: fn(b)\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToLrgb;\n", "/*\n\tConvert sRGB values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://observablehq.com/@danburzo/color-matrix-calculator\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertRgbToXyz65 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.4123907992659593 * r +\n\t\t\t0.357584339383878 * g +\n\t\t\t0.1804807884018343 * b,\n\t\ty:\n\t\t\t0.2126390058715102 * r +\n\t\t\t0.715168678767756 * g +\n\t\t\t0.0721923153607337 * b,\n\t\tz:\n\t\t\t0.0193308187155918 * r +\n\t\t\t0.119194779794626 * g +\n\t\t\t0.9505321522496607 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToXyz65;\n", "const fn = (c = 0) => {\n\tconst abs = Math.abs(c);\n\tif (abs > 0.0031308) {\n\t\treturn (Math.sign(c) || 1) * (1.055 * Math.pow(abs, 1 / 2.4) - 0.055);\n\t}\n\treturn c * 12.92;\n};\n\nconst convertLrgbToRgb = ({ r, g, b, alpha }, mode = 'rgb') => {\n\tlet res = {\n\t\tmode,\n\t\tr: fn(r),\n\t\tg: fn(g),\n\t\tb: fn(b)\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLrgbToRgb;\n", "/*\n\tCIE XYZ D65 values to sRGB.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://observablehq.com/@danburzo/color-matrix-calculator\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz65ToRgb = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb({\n\t\tr:\n\t\t\tx * 3.2409699419045226 -\n\t\t\ty * 1.5373831775700939 -\n\t\t\t0.4986107602930034 * z,\n\t\tg:\n\t\t\tx * -0.9692436362808796 +\n\t\t\ty * 1.8759675015077204 +\n\t\t\t0.0415550574071756 * z,\n\t\tb:\n\t\t\tx * 0.0556300796969936 -\n\t\t\ty * 0.2039769588889765 +\n\t\t\t1.0569715142428784 * z\n\t});\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToRgb;\n", "import rgb from '../rgb/definition.js';\n\nimport convertA98ToXyz65 from './convertA98ToXyz65.js';\nimport convertXyz65ToA98 from './convertXyz65ToA98.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'a98',\n\tparse: ['a98-rgb'],\n\tserialize: 'a98-rgb',\n\n\tfromMode: {\n\t\trgb: color => convertXyz65ToA98(convertRgbToXyz65(color)),\n\t\txyz65: convertXyz65ToA98\n\t},\n\n\ttoMode: {\n\t\trgb: color => convertXyz65ToRgb(convertA98ToXyz65(color)),\n\t\txyz65: convertA98ToXyz65\n\t}\n};\n\nexport default definition;\n", "const normalizeHue = hue => ((hue = hue % 360) < 0 ? hue + 360 : hue);\n\nexport default normalizeHue;\n", "import normalizeHue from '../util/normalizeHue.js';\n\nconst hue = (hues, fn) => {\n\treturn hues\n\t\t.map((hue, idx, arr) => {\n\t\t\tif (hue === undefined) {\n\t\t\t\treturn hue;\n\t\t\t}\n\t\t\tlet normalized = normalizeHue(hue);\n\t\t\tif (idx === 0 || hues[idx - 1] === undefined) {\n\t\t\t\treturn normalized;\n\t\t\t}\n\t\t\treturn fn(normalized - normalizeHue(arr[idx - 1]));\n\t\t})\n\t\t.reduce((acc, curr) => {\n\t\t\tif (\n\t\t\t\t!acc.length ||\n\t\t\t\tcurr === undefined ||\n\t\t\t\tacc[acc.length - 1] === undefined\n\t\t\t) {\n\t\t\t\tacc.push(curr);\n\t\t\t\treturn acc;\n\t\t\t}\n\t\t\tacc.push(curr + acc[acc.length - 1]);\n\t\t\treturn acc;\n\t\t}, []);\n};\n\nconst fixupHueShorter = arr =>\n\thue(arr, d => (Math.abs(d) <= 180 ? d : d - 360 * Math.sign(d)));\nconst fixupHueLonger = arr =>\n\thue(arr, d => (Math.abs(d) >= 180 || d === 0 ? d : d - 360 * Math.sign(d)));\nconst fixupHueIncreasing = arr => hue(arr, d => (d >= 0 ? d : d + 360));\nconst fixupHueDecreasing = arr => hue(arr, d => (d <= 0 ? d : d - 360));\n\nexport {\n\tfixupHueShorter,\n\tfixupHueLonger,\n\tfixupHueIncreasing,\n\tfixupHueDecreasing\n};\n", "export const M = [-0.14861, 1.78277, -0.29227, -0.90649, 1.97294, 0];\n\nexport const degToRad = Math.PI / 180;\nexport const radToDeg = 180 / Math.PI;\n", "/*\n\tConvert a RGB color to the Cubehelix HSL color space.\n\n\tThis computation is not present in Green's paper:\n\thttps://arxiv.org/pdf/1108.5083.pdf\n\n\t...but can be derived from the inverse, HSL to RGB conversion.\n\n\tIt matches the math in Mike Bostock's D3 implementation:\n\n\thttps://github.com/d3/d3-color/blob/master/src/cubehelix.js\n */\n\nimport { radToDeg, M } from './constants.js';\n\nlet DE = M[3] * M[4];\nlet BE = M[1] * M[4];\nlet BCAD = M[1] * M[2] - M[0] * M[3];\n\nconst convertRgbToCubehelix = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet l = (BCAD * b + r * DE - g * BE) / (BCAD + DE - BE);\n\tlet x = b - l;\n\tlet y = (M[4] * (g - l) - M[2] * x) / M[3];\n\n\tlet res = {\n\t\tmode: 'cubehelix',\n\t\tl: l,\n\t\ts:\n\t\t\tl === 0 || l === 1\n\t\t\t\t? undefined\n\t\t\t\t: Math.sqrt(x * x + y * y) / (M[4] * l * (1 - l))\n\t};\n\n\tif (res.s) res.h = Math.atan2(y, x) * radToDeg - 120;\n\tif (alpha !== undefined) res.alpha = alpha;\n\n\treturn res;\n};\n\nexport default convertRgbToCubehelix;\n", "import { degToRad, M } from './constants.js';\n\nconst convertCubehelixToRgb = ({ h, s, l, alpha }) => {\n\tlet res = { mode: 'rgb' };\n\n\th = (h === undefined ? 0 : h + 120) * degToRad;\n\tif (l === undefined) l = 0;\n\n\tlet amp = s === undefined ? 0 : s * l * (1 - l);\n\n\tlet cosh = Math.cos(h);\n\tlet sinh = Math.sin(h);\n\n\tres.r = l + amp * (M[0] * cosh + M[1] * sinh);\n\tres.g = l + amp * (M[2] * cosh + M[3] * sinh);\n\tres.b = l + amp * (M[4] * cosh + M[5] * sinh);\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertCubehelixToRgb;\n", "import { getMode } from './modes.js';\nimport converter from './converter.js';\nimport normalizeHue from './util/normalizeHue.js';\n\nconst differenceHueSaturation = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined || !std.s || !smp.s) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tlet dH = Math.sin((((smp_h - std_h + 360) / 2) * Math.PI) / 180);\n\treturn 2 * Math.sqrt(std.s * smp.s) * dH;\n};\n\nconst differenceHueNaive = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tif (Math.abs(smp_h - std_h) > 180) {\n\t\t// todo should this be normalized once again?\n\t\treturn std_h - (smp_h - 360 * Math.sign(smp_h - std_h));\n\t}\n\treturn smp_h - std_h;\n};\n\nconst differenceHueChroma = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined || !std.c || !smp.c) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tlet dH = Math.sin((((smp_h - std_h + 360) / 2) * Math.PI) / 180);\n\treturn 2 * Math.sqrt(std.c * smp.c) * dH;\n};\n\nconst differenceEuclidean = (mode = 'rgb', weights = [1, 1, 1, 0]) => {\n\tlet def = getMode(mode);\n\tlet channels = def.channels;\n\tlet diffs = def.difference;\n\tlet conv = converter(mode);\n\treturn (std, smp) => {\n\t\tlet ConvStd = conv(std);\n\t\tlet ConvSmp = conv(smp);\n\t\treturn Math.sqrt(\n\t\t\tchannels.reduce((sum, k, idx) => {\n\t\t\t\tlet delta = diffs[k]\n\t\t\t\t\t? diffs[k](ConvStd, ConvSmp)\n\t\t\t\t\t: ConvStd[k] - ConvSmp[k];\n\t\t\t\treturn (\n\t\t\t\t\tsum +\n\t\t\t\t\t(weights[idx] || 0) * Math.pow(isNaN(delta) ? 0 : delta, 2)\n\t\t\t\t);\n\t\t\t}, 0)\n\t\t);\n\t};\n};\n\nconst differenceCie76 = () => differenceEuclidean('lab65');\n\nconst differenceCie94 = (kL = 1, K1 = 0.045, K2 = 0.015) => {\n\tlet lab = converter('lab65');\n\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\n\t\t// Extract Lab values, and compute Chroma\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\tlet dL2 = Math.pow(lStd - lSmp, 2);\n\t\tlet dC2 = Math.pow(cStd - cSmp, 2);\n\t\tlet dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2;\n\n\t\treturn Math.sqrt(\n\t\t\tdL2 / Math.pow(kL, 2) +\n\t\t\t\tdC2 / Math.pow(1 + K1 * cStd, 2) +\n\t\t\t\tdH2 / Math.pow(1 + K2 * cStd, 2)\n\t\t);\n\t};\n};\n\n/*\n\tCIEDE2000 color difference, original Matlab implementation by Gaurav Sharma\n\tBased on \"The CIEDE2000 Color-Difference Formula: Implementation Notes, Supplementary Test Data, and Mathematical Observations\" \n\tby Gaurav Sharma, Wencheng Wu, Edul N. Dalal in Color Research and Application, vol. 30. No. 1, pp. 21-30, February 2005.\n\thttp://www2.ece.rochester.edu/~gsharma/ciede2000/\n */\n\nconst differenceCiede2000 = (Kl = 1, Kc = 1, Kh = 1) => {\n\tlet lab = converter('lab65');\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\tlet cAvg = (cStd + cSmp) / 2;\n\n\t\tlet G =\n\t\t\t0.5 *\n\t\t\t(1 -\n\t\t\t\tMath.sqrt(\n\t\t\t\t\tMath.pow(cAvg, 7) / (Math.pow(cAvg, 7) + Math.pow(25, 7))\n\t\t\t\t));\n\n\t\tlet apStd = aStd * (1 + G);\n\t\tlet apSmp = aSmp * (1 + G);\n\n\t\tlet cpStd = Math.sqrt(apStd * apStd + bStd * bStd);\n\t\tlet cpSmp = Math.sqrt(apSmp * apSmp + bSmp * bSmp);\n\n\t\tlet hpStd =\n\t\t\tMath.abs(apStd) + Math.abs(bStd) === 0\n\t\t\t\t? 0\n\t\t\t\t: Math.atan2(bStd, apStd);\n\t\thpStd += (hpStd < 0) * 2 * Math.PI;\n\n\t\tlet hpSmp =\n\t\t\tMath.abs(apSmp) + Math.abs(bSmp) === 0\n\t\t\t\t? 0\n\t\t\t\t: Math.atan2(bSmp, apSmp);\n\t\thpSmp += (hpSmp < 0) * 2 * Math.PI;\n\n\t\tlet dL = lSmp - lStd;\n\t\tlet dC = cpSmp - cpStd;\n\n\t\tlet dhp = cpStd * cpSmp === 0 ? 0 : hpSmp - hpStd;\n\t\tdhp -= (dhp > Math.PI) * 2 * Math.PI;\n\t\tdhp += (dhp < -Math.PI) * 2 * Math.PI;\n\n\t\tlet dH = 2 * Math.sqrt(cpStd * cpSmp) * Math.sin(dhp / 2);\n\n\t\tlet Lp = (lStd + lSmp) / 2;\n\t\tlet Cp = (cpStd + cpSmp) / 2;\n\n\t\tlet hp;\n\t\tif (cpStd * cpSmp === 0) {\n\t\t\thp = hpStd + hpSmp;\n\t\t} else {\n\t\t\thp = (hpStd + hpSmp) / 2;\n\t\t\thp -= (Math.abs(hpStd - hpSmp) > Math.PI) * Math.PI;\n\t\t\thp += (hp < 0) * 2 * Math.PI;\n\t\t}\n\n\t\tlet Lpm50 = Math.pow(Lp - 50, 2);\n\t\tlet T =\n\t\t\t1 -\n\t\t\t0.17 * Math.cos(hp - Math.PI / 6) +\n\t\t\t0.24 * Math.cos(2 * hp) +\n\t\t\t0.32 * Math.cos(3 * hp + Math.PI / 30) -\n\t\t\t0.2 * Math.cos(4 * hp - (63 * Math.PI) / 180);\n\n\t\tlet Sl = 1 + (0.015 * Lpm50) / Math.sqrt(20 + Lpm50);\n\t\tlet Sc = 1 + 0.045 * Cp;\n\t\tlet Sh = 1 + 0.015 * Cp * T;\n\n\t\tlet deltaTheta =\n\t\t\t((30 * Math.PI) / 180) *\n\t\t\tMath.exp(-1 * Math.pow(((180 / Math.PI) * hp - 275) / 25, 2));\n\t\tlet Rc =\n\t\t\t2 *\n\t\t\tMath.sqrt(Math.pow(Cp, 7) / (Math.pow(Cp, 7) + Math.pow(25, 7)));\n\n\t\tlet Rt = -1 * Math.sin(2 * deltaTheta) * Rc;\n\n\t\treturn Math.sqrt(\n\t\t\tMath.pow(dL / (Kl * Sl), 2) +\n\t\t\t\tMath.pow(dC / (Kc * Sc), 2) +\n\t\t\t\tMath.pow(dH / (Kh * Sh), 2) +\n\t\t\t\t(((Rt * dC) / (Kc * Sc)) * dH) / (Kh * Sh)\n\t\t);\n\t};\n};\n\n/*\n\tCMC (l:c) difference formula\n\n\tReferences:\n\t\thttps://en.wikipedia.org/wiki/Color_difference#CMC_l:c_(1984)\n\t\thttp://www.brucelindbloom.com/index.html?Eqn_DeltaE_CMC.html\n */\nconst differenceCmc = (l = 1, c = 1) => {\n\tlet lab = converter('lab65');\n\n\t/*\n\t\tComparte two colors:\n\t\tstd - standard (first) color\n\t\tsmp - sample (second) color\n\t */\n\treturn (std, smp) => {\n\t\t// convert standard color to Lab\n\t\tlet LabStd = lab(std);\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\n\t\t// Obtain hue/chroma\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\t\tlet hStd = Math.atan2(bStd, aStd);\n\t\thStd = hStd + 2 * Math.PI * (hStd < 0);\n\n\t\t// convert sample color to Lab, obtain LCh\n\t\tlet LabSmp = lab(smp);\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\n\t\t// Obtain chroma\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\t// lightness delta squared\n\t\tlet dL2 = Math.pow(lStd - lSmp, 2);\n\n\t\t// chroma delta squared\n\t\tlet dC2 = Math.pow(cStd - cSmp, 2);\n\n\t\t// hue delta squared\n\t\tlet dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2;\n\n\t\tlet F = Math.sqrt(Math.pow(cStd, 4) / (Math.pow(cStd, 4) + 1900));\n\t\tlet T =\n\t\t\thStd >= (164 / 180) * Math.PI && hStd <= (345 / 180) * Math.PI\n\t\t\t\t? 0.56 + Math.abs(0.2 * Math.cos(hStd + (168 / 180) * Math.PI))\n\t\t\t\t: 0.36 + Math.abs(0.4 * Math.cos(hStd + (35 / 180) * Math.PI));\n\n\t\tlet Sl = lStd < 16 ? 0.511 : (0.040975 * lStd) / (1 + 0.01765 * lStd);\n\t\tlet Sc = (0.0638 * cStd) / (1 + 0.0131 * cStd) + 0.638;\n\t\tlet Sh = Sc * (F * T + 1 - F);\n\n\t\treturn Math.sqrt(\n\t\t\tdL2 / Math.pow(l * Sl, 2) +\n\t\t\t\tdC2 / Math.pow(c * Sc, 2) +\n\t\t\t\tdH2 / Math.pow(Sh, 2)\n\t\t);\n\t};\n};\n\n/*\n\n\tHyAB color difference formula, introduced in:\n\n\t\tAbasi S, Amani Tehran M, Fairchild MD. \n\t\t\"Distance metrics for very large color differences.\"\n\t\tColor Res Appl. 2019; 1\u201316. \n\t\thttps://doi.org/10.1002/col.22451\n\n\tPDF available at:\n\t\n\t\thttp://markfairchild.org/PDFs/PAP40.pdf\n */\nconst differenceHyab = () => {\n\tlet lab = converter('lab65');\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\t\tlet dL = LabStd.l - LabSmp.l;\n\t\tlet dA = LabStd.a - LabSmp.a;\n\t\tlet dB = LabStd.b - LabSmp.b;\n\t\treturn Math.abs(dL) + Math.sqrt(dA * dA + dB * dB);\n\t};\n};\n\n/*\n\t\"Measuring perceived color difference using YIQ NTSC\n\ttransmission color space in mobile applications\"\n\t\t\n\t\tby Yuriy Kotsarenko, Fernando Ramos in:\n\t\tProgramaci\u00F3n Matem\u00E1tica y Software (2010) \n\n\tAvailable at:\n\t\t\n\t\thttp://www.progmat.uaem.mx:8080/artVol2Num2/Articulo3Vol2Num2.pdf\n */\nconst differenceKotsarenkoRamos = () =>\n\tdifferenceEuclidean('yiq', [0.5053, 0.299, 0.1957]);\n\n/*\n\t\u0394E_ITP, as defined in Rec. ITU-R BT.2124:\n\n\thttps://www.itu.int/rec/R-REC-BT.2124/en\n*/\nconst differenceItp = () =>\n\tdifferenceEuclidean('itp', [518400, 129600, 518400]);\n\nexport {\n\tdifferenceHueChroma,\n\tdifferenceHueSaturation,\n\tdifferenceHueNaive,\n\tdifferenceEuclidean,\n\tdifferenceCie76,\n\tdifferenceCie94,\n\tdifferenceCiede2000,\n\tdifferenceCmc,\n\tdifferenceHyab,\n\tdifferenceKotsarenkoRamos,\n\tdifferenceItp\n};\n", "import converter from './converter.js';\nimport { getMode } from './modes.js';\n\nconst averageAngle = val => {\n\t// See: https://en.wikipedia.org/wiki/Mean_of_circular_quantities\n\tlet sum = val.reduce(\n\t\t(sum, val) => {\n\t\t\tif (val !== undefined) {\n\t\t\t\tlet rad = (val * Math.PI) / 180;\n\t\t\t\tsum.sin += Math.sin(rad);\n\t\t\t\tsum.cos += Math.cos(rad);\n\t\t\t}\n\t\t\treturn sum;\n\t\t},\n\t\t{ sin: 0, cos: 0 }\n\t);\n\tlet angle = (Math.atan2(sum.sin, sum.cos) * 180) / Math.PI;\n\treturn angle < 0 ? 360 + angle : angle;\n};\n\nconst averageNumber = val => {\n\tlet a = val.filter(v => v !== undefined);\n\treturn a.length ? a.reduce((sum, v) => sum + v, 0) / a.length : undefined;\n};\n\nconst isfn = o => typeof o === 'function';\n\nfunction average(colors, mode = 'rgb', overrides) {\n\tlet def = getMode(mode);\n\tlet cc = colors.map(converter(mode));\n\treturn def.channels.reduce(\n\t\t(res, ch) => {\n\t\t\tlet arr = cc.map(c => c[ch]).filter(val => val !== undefined);\n\t\t\tif (arr.length) {\n\t\t\t\tlet fn;\n\t\t\t\tif (isfn(overrides)) {\n\t\t\t\t\tfn = overrides;\n\t\t\t\t} else if (overrides && isfn(overrides[ch])) {\n\t\t\t\t\tfn = overrides[ch];\n\t\t\t\t} else if (def.average && isfn(def.average[ch])) {\n\t\t\t\t\tfn = def.average[ch];\n\t\t\t\t} else {\n\t\t\t\t\tfn = averageNumber;\n\t\t\t\t}\n\t\t\t\tres[ch] = fn(arr, ch);\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t{ mode }\n\t);\n}\n\nexport { average, averageAngle, averageNumber };\n", "/* \n\tDave Green's Cubehelix\n\t----------------------\n\n\tGreen, D. A., 2011, \"A colour scheme for the display of astronomical intensity images\", \n\tBulletin of the Astronomical Society of India, 39, 289. (2011BASI...39..289G at ADS.) \n\n\thttps://www.mrao.cam.ac.uk/%7Edag/CUBEHELIX/\n\thttps://arxiv.org/pdf/1108.5083.pdf\n\n\tAlthough Cubehelix was defined to be a method to obtain a colour scheme,\n\tit actually contains a definition of a colour space, as identified by \n\tMike Bostock and implemented in D3.js.\n\n\tGreen's paper introduces the following terminology:\n\n\t* \ta `lightness` dimension in the interval [0, 1] \n\t\ton which we interpolate to obtain the colour scheme\n\t*\ta `start` colour that is analogous to a Hue in HSL space\n\t*\ta number of `rotations` around the Hue cylinder.\n\t*\ta `hue` parameter which should more appropriately be called `saturation`\n\t\n\tAs such, the original definition of the Cubehelix scheme is actually an\n\tinterpolation between two colors in the Cubehelix space:\n\n\tH: start \t\t\t\tH: start + 360 * rotations\n\tS: hue \t\t\t->\t\tS: hue\n\tL: 0\t\t\t\t\tL: 1\n\n\tWe can therefore extend the interpolation to any two colors in this space,\n\twith a variable Saturation and a Lightness interval other than the fixed 0 -> 1.\n*/\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport convertRgbToCubehelix from './convertRgbToCubehelix.js';\nimport convertCubehelixToRgb from './convertCubehelixToRgb.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'cubehelix',\n\tchannels: ['h', 's', 'l', 'alpha'],\n\tparse: ['--cubehelix'],\n\tserialize: '--cubehelix',\n\n\tranges: {\n\t\th: [0, 360],\n\t\ts: [0, 4.614],\n\t\tl: [0, 1]\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToCubehelix\n\t},\n\n\ttoMode: {\n\t\trgb: convertCubehelixToRgb\n\t},\n\n\tinterpolate: {\n\t\th: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupHueShorter\n\t\t},\n\t\ts: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\n/* \n\tReferences: \n\t\t* https://drafts.csswg.org/css-color/#lab-to-lch\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n*/\nconst convertLabToLch = ({ l, a, b, alpha }, mode = 'lch') => {\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet c = Math.sqrt(a * a + b * b);\n\tlet res = { mode, l, c };\n\tif (c) res.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLabToLch;\n", "/* \n\tReferences: \n\t\t* https://drafts.csswg.org/css-color/#lch-to-lab\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n*/\nconst convertLchToLab = ({ l, c, h, alpha }, mode = 'lab') => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode,\n\t\tl,\n\t\ta: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tb: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLchToLab;\n", "export const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n", "/*\n\tThe XYZ tristimulus values (white point)\n\tof standard illuminants for the CIE 1931 2\u00B0 \n\tstandard observer.\n\n\tSee: https://en.wikipedia.org/wiki/Standard_illuminant\n */\n\nexport const D50 = {\n\tX: 0.3457 / 0.3585,\n\tY: 1,\n\tZ: (1 - 0.3457 - 0.3585) / 0.3585\n};\n\nexport const D65 = {\n\tX: 0.3127 / 0.329,\n\tY: 1,\n\tZ: (1 - 0.3127 - 0.329) / 0.329\n};\n\nexport const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n", "import { k, e } from '../xyz65/constants.js';\nimport { D65 } from '../constants.js';\n\nlet fn = v => (Math.pow(v, 3) > e ? Math.pow(v, 3) : (116 * v - 16) / k);\n\nconst convertLab65ToXyz65 = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\n\tlet fy = (l + 16) / 116;\n\tlet fx = a / 500 + fy;\n\tlet fz = fy - b / 200;\n\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx: fn(fx) * D65.X,\n\t\ty: fn(fy) * D65.Y,\n\t\tz: fn(fz) * D65.Z\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLab65ToXyz65;\n", "import convertLab65ToXyz65 from './convertLab65ToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst convertLab65ToRgb = lab => convertXyz65ToRgb(convertLab65ToXyz65(lab));\n\nexport default convertLab65ToRgb;\n", "import { k, e } from '../xyz65/constants.js';\nimport { D65 } from '../constants.js';\n\nconst f = value => (value > e ? Math.cbrt(value) : (k * value + 16) / 116);\n\nconst convertXyz65ToLab65 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet f0 = f(x / D65.X);\n\tlet f1 = f(y / D65.Y);\n\tlet f2 = f(z / D65.Z);\n\n\tlet res = {\n\t\tmode: 'lab65',\n\t\tl: 116 * f1 - 16,\n\t\ta: 500 * (f0 - f1),\n\t\tb: 200 * (f1 - f2)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToLab65;\n", "import convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToLab65 from './convertXyz65ToLab65.js';\n\nconst convertRgbToLab65 = rgb => {\n\tlet res = convertXyz65ToLab65(convertRgbToXyz65(rgb));\n\n\t// Fixes achromatic RGB colors having a _slight_ chroma due to floating-point errors\n\t// and approximated computations in sRGB <-> CIELab.\n\t// See: https://github.com/d3/d3-color/pull/46\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToLab65;\n", "export const kE = 1;\nexport const kCH = 1;\nexport const \u03B8 = (26 / 180) * Math.PI;\nexport const cos\u03B8 = Math.cos(\u03B8);\nexport const sin\u03B8 = Math.sin(\u03B8);\nexport const factor = 100 / Math.log(139 / 100); // ~ 303.67\n", "import { kCH, kE, sin\u03B8, cos\u03B8, \u03B8, factor } from './constants.js';\n\n/*\n\tConvert DIN99o LCh to CIELab D65\n\t--------------------------------\n */\n\nconst convertDlchToLab65 = ({ l, c, h, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (c === undefined) c = 0;\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'lab65',\n\t\tl: (Math.exp((l * kE) / factor) - 1) / 0.0039\n\t};\n\n\tlet G = (Math.exp(0.0435 * c * kCH * kE) - 1) / 0.075;\n\tlet e = G * Math.cos((h / 180) * Math.PI - \u03B8);\n\tlet f = G * Math.sin((h / 180) * Math.PI - \u03B8);\n\tres.a = e * cos\u03B8 - (f / 0.83) * sin\u03B8;\n\tres.b = e * sin\u03B8 + (f / 0.83) * cos\u03B8;\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertDlchToLab65;\n", "import { kCH, kE, sin\u03B8, cos\u03B8, \u03B8, factor } from './constants.js';\nimport normalizeHue from '../util/normalizeHue.js';\n\n/*\n\tConvert CIELab D65 to DIN99o LCh\n\t================================\n */\n\nconst convertLab65ToDlch = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet e = a * cos\u03B8 + b * sin\u03B8;\n\tlet f = 0.83 * (b * cos\u03B8 - a * sin\u03B8);\n\tlet G = Math.sqrt(e * e + f * f);\n\tlet res = {\n\t\tmode: 'dlch',\n\t\tl: (factor / kE) * Math.log(1 + 0.0039 * l),\n\t\tc: Math.log(1 + 0.075 * G) / (0.0435 * kCH * kE)\n\t};\n\n\tif (res.c) {\n\t\tres.h = normalizeHue(((Math.atan2(f, e) + \u03B8) / Math.PI) * 180);\n\t}\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLab65ToDlch;\n", "import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\nimport convertDlchToLab65 from '../dlch/convertDlchToLab65.js';\nimport convertLab65ToDlch from '../dlch/convertLab65ToDlch.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst convertDlabToLab65 = c => convertDlchToLab65(convertLabToLch(c, 'dlch'));\nconst convertLab65ToDlab = c => convertLchToLab(convertLab65ToDlch(c), 'dlab');\n\nconst definition = {\n\tmode: 'dlab',\n\n\tparse: ['--din99o-lab'],\n\tserialize: '--din99o-lab',\n\n\ttoMode: {\n\t\tlab65: convertDlabToLab65,\n\t\trgb: c => convertLab65ToRgb(convertDlabToLab65(c))\n\t},\n\n\tfromMode: {\n\t\tlab65: convertLab65ToDlab,\n\t\trgb: c => convertLab65ToDlab(convertRgbToLab65(c))\n\t},\n\n\tchannels: ['l', 'a', 'b', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-40.09, 45.501],\n\t\tb: [-40.469, 44.344]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t}\n};\n\nexport default definition;\n", "import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertDlchToLab65 from './convertDlchToLab65.js';\nimport convertLab65ToDlch from './convertLab65ToDlch.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'dlch',\n\n\tparse: ['--din99o-lch'],\n\tserialize: '--din99o-lch',\n\n\ttoMode: {\n\t\tlab65: convertDlchToLab65,\n\t\tdlab: c => convertLchToLab(c, 'dlab'),\n\t\trgb: c => convertLab65ToRgb(convertDlchToLab65(c))\n\t},\n\n\tfromMode: {\n\t\tlab65: convertLab65ToDlch,\n\t\tdlab: c => convertLabToLch(c, 'dlch'),\n\t\trgb: c => convertLab65ToDlch(convertRgbToLab65(c))\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 51.484],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\tc: interpolatorLinear,\n\t\th: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupHueShorter\n\t\t},\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHsiToRgb({ h, s, i, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (i === undefined) i = 0;\n\tlet f = Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tg: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tb: i * (1 - s)\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tg: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tb: i * (1 - s)\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = {\n\t\t\t\tr: i * (1 - s),\n\t\t\t\tg: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tb: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = {\n\t\t\t\tr: i * (1 - s),\n\t\t\t\tg: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tb: i * (1 + s * (3 / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tg: i * (1 - s),\n\t\t\t\tb: i * (1 + s * (3 / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tg: i * (1 - s),\n\t\t\t\tb: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: i * (1 - s), g: i * (1 - s), b: i * (1 - s) };\n\t}\n\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsi({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsi',\n\t\ts: r + g + b === 0 ? 0 : 1 - (3 * m) / (r + g + b),\n\t\ti: (r + g + b) / 3\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "import convertHsiToRgb from './convertHsiToRgb.js';\nimport convertRgbToHsi from './convertRgbToHsi.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsi',\n\n\ttoMode: {\n\t\trgb: convertHsiToRgb\n\t},\n\n\tparse: ['--hsi'],\n\tserialize: '--hsi',\n\n\tfromMode: {\n\t\trgb: convertRgbToHsi\n\t},\n\n\tchannels: ['h', 's', 'i', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\ti: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHslToRgb({ h, s, l, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (l === undefined) l = 0;\n\tlet m1 = l + s * (l < 0.5 ? l : 1 - l);\n\tlet m2 = m1 - (m1 - l) * 2 * Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = { r: m1, g: m2, b: 2 * l - m1 };\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = { r: m2, g: m1, b: 2 * l - m1 };\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = { r: 2 * l - m1, g: m1, b: m2 };\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = { r: 2 * l - m1, g: m2, b: m1 };\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = { r: m2, g: 2 * l - m1, b: m1 };\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = { r: m1, g: 2 * l - m1, b: m2 };\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: 2 * l - m1, g: 2 * l - m1, b: 2 * l - m1 };\n\t}\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsl({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsl',\n\t\ts: M === m ? 0 : (M - m) / (1 - Math.abs(M + m - 1)),\n\t\tl: 0.5 * (M + m)\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "const hueToDeg = (val, unit) => {\n\tswitch (unit) {\n\t\tcase 'deg':\n\t\t\treturn +val;\n\t\tcase 'rad':\n\t\t\treturn (val / Math.PI) * 180;\n\t\tcase 'grad':\n\t\t\treturn (val / 10) * 9;\n\t\tcase 'turn':\n\t\t\treturn val * 360;\n\t}\n};\n\nexport default hueToDeg;\n", "import hueToDeg from '../util/hue.js';\nimport { hue, per, num_per, c } from '../util/regex.js';\n\n/*\n\thsl() regular expressions for legacy format\n\tReference: https://drafts.csswg.org/css-color/#the-hsl-notation\n */\nconst hsl_old = new RegExp(\n\t`^hsla?\\\\(\\\\s*${hue}${c}${per}${c}${per}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst parseHslLegacy = color => {\n\tlet match = color.match(hsl_old);\n\tif (!match) return;\n\tlet res = { mode: 'hsl' };\n\n\tif (match[3] !== undefined) {\n\t\tres.h = +match[3];\n\t} else if (match[1] !== undefined && match[2] !== undefined) {\n\t\tres.h = hueToDeg(match[1], match[2]);\n\t}\n\n\tif (match[4] !== undefined) {\n\t\tres.s = Math.min(Math.max(0, match[4] / 100), 1);\n\t}\n\n\tif (match[5] !== undefined) {\n\t\tres.l = Math.min(Math.max(0, match[5] / 100), 1);\n\t}\n\n\tif (match[6] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, match[6] / 100));\n\t} else if (match[7] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, +match[7]));\n\t}\n\treturn res;\n};\n\nexport default parseHslLegacy;\n", "import { Tok } from '../parse.js';\n\nfunction parseHsl(color, parsed) {\n\tif (!parsed || (parsed[0] !== 'hsl' && parsed[0] !== 'hsla')) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'hsl' };\n\tconst [, h, s, l, alpha] = parsed;\n\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\n\tif (s.type !== Tok.None) {\n\t\tif (s.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.s = s.value / 100;\n\t}\n\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = l.value / 100;\n\t}\n\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseHsl;\n", "import convertHslToRgb from './convertHslToRgb.js';\nimport convertRgbToHsl from './convertRgbToHsl.js';\nimport parseHslLegacy from './parseHslLegacy.js';\nimport parseHsl from './parseHsl.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsl',\n\n\ttoMode: {\n\t\trgb: convertHslToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToHsl\n\t},\n\n\tchannels: ['h', 's', 'l', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tparse: [parseHsl, parseHslLegacy],\n\tserialize: c =>\n\t\t`hsl(${c.h !== undefined ? c.h : 'none'} ${\n\t\t\tc.s !== undefined ? c.s * 100 + '%' : 'none'\n\t\t} ${c.l !== undefined ? c.l * 100 + '%' : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHsvToRgb({ h, s, v, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (v === undefined) v = 0;\n\tlet f = Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = { r: v, g: v * (1 - s * f), b: v * (1 - s) };\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = { r: v * (1 - s * f), g: v, b: v * (1 - s) };\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = { r: v * (1 - s), g: v, b: v * (1 - s * f) };\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = { r: v * (1 - s), g: v * (1 - s * f), b: v };\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = { r: v * (1 - s * f), g: v * (1 - s), b: v };\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = { r: v, g: v * (1 - s), b: v * (1 - s * f) };\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: v * (1 - s), g: v * (1 - s), b: v * (1 - s) };\n\t}\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsv({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsv',\n\t\ts: M === 0 ? 0 : 1 - m / M,\n\t\tv: M\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n", "import convertHsvToRgb from './convertHsvToRgb.js';\nimport convertRgbToHsv from './convertRgbToHsv.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsv',\n\n\ttoMode: {\n\t\trgb: convertHsvToRgb\n\t},\n\n\tparse: ['--hsv'],\n\tserialize: '--hsv',\n\n\tfromMode: {\n\t\trgb: convertRgbToHsv\n\t},\n\n\tchannels: ['h', 's', 'v', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\tv: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "/*\n\tHWB to RGB converter\n\t--------------------\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#hwb-to-rgb\n\t\t* https://en.wikipedia.org/wiki/HWB_color_model\n\t\t* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf\n */\n\nimport convertHsvToRgb from '../hsv/convertHsvToRgb.js';\n\nexport default function convertHwbToRgb({ h, w, b, alpha }) {\n\tif (w === undefined) w = 0;\n\tif (b === undefined) b = 0;\n\t// normalize w + b to 1\n\tif (w + b > 1) {\n\t\tlet s = w + b;\n\t\tw /= s;\n\t\tb /= s;\n\t}\n\treturn convertHsvToRgb({\n\t\th: h,\n\t\ts: b === 1 ? 1 : 1 - w / (1 - b),\n\t\tv: 1 - b,\n\t\talpha: alpha\n\t});\n}\n", "/*\n\tRGB to HWB converter\n\t--------------------\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#hwb-to-rgb\n\t\t* https://en.wikipedia.org/wiki/HWB_color_model\n\t\t* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf\n */\n\nimport convertRgbToHsv from '../hsv/convertRgbToHsv.js';\n\nexport default function convertRgbToHwb(rgba) {\n\tlet hsv = convertRgbToHsv(rgba);\n\tif (hsv === undefined) return undefined;\n\tlet s = hsv.s !== undefined ? hsv.s : 0;\n\tlet v = hsv.v !== undefined ? hsv.v : 0;\n\tlet res = {\n\t\tmode: 'hwb',\n\t\tw: (1 - s) * v,\n\t\tb: 1 - v\n\t};\n\tif (hsv.h !== undefined) res.h = hsv.h;\n\tif (hsv.alpha !== undefined) res.alpha = hsv.alpha;\n\treturn res;\n}\n", "import { Tok } from '../parse.js';\n\nfunction ParseHwb(color, parsed) {\n\tif (!parsed || parsed[0] !== 'hwb') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'hwb' };\n\tconst [, h, w, b, alpha] = parsed;\n\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\n\tif (w.type !== Tok.None) {\n\t\tif (w.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.w = w.value / 100;\n\t}\n\n\tif (b.type !== Tok.None) {\n\t\tif (b.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.b = b.value / 100;\n\t}\n\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default ParseHwb;\n", "import convertHwbToRgb from './convertHwbToRgb.js';\nimport convertRgbToHwb from './convertRgbToHwb.js';\nimport parseHwb from './parseHwb.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueNaive } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hwb',\n\n\ttoMode: {\n\t\trgb: convertHwbToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToHwb\n\t},\n\n\tchannels: ['h', 'w', 'b', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tparse: [parseHwb],\n\tserialize: c =>\n\t\t`hwb(${c.h !== undefined ? c.h : 'none'} ${\n\t\t\tc.w !== undefined ? c.w * 100 + '%' : 'none'\n\t\t} ${c.b !== undefined ? c.b * 100 + '%' : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tw: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueNaive\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "/*\n\thttps://en.wikipedia.org/wiki/Transfer_functions_in_imaging\n*/\n\nexport const M1 = 0.1593017578125;\nexport const M2 = 78.84375;\nexport const C1 = 0.8359375;\nexport const C2 = 18.8515625;\nexport const C3 = 18.6875;\n\n/*\n\tPerceptual Quantizer, as defined in Rec. BT 2100-2 (2018)\n\n\t* https://www.itu.int/rec/R-REC-BT.2100-2-201807-I/en\n\t* https://en.wikipedia.org/wiki/Perceptual_quantizer\n*/\n\n/* PQ EOTF, defined for `v` in [0,1]. */\nexport function transferPqDecode(v) {\n\tif (v < 0) return 0;\n\tconst c = Math.pow(v, 1 / M2);\n\treturn 1e4 * Math.pow(Math.max(0, c - C1) / (C2 - C3 * c), 1 / M1);\n}\n\n/* PQ EOTF^-1, defined for `v` in [0, 1e4]. */\nexport function transferPqEncode(v) {\n\tif (v < 0) return 0;\n\tconst c = Math.pow(v / 1e4, M1);\n\treturn Math.pow((C1 + C2 * c) / (1 + C3 * c), M2);\n}\n", "import { YW } from '../hdr/constants.js';\nimport { transferPqDecode } from '../hdr/transfer.js';\n\nconst toRel = c => Math.max(c / YW, 0);\n\nconst convertItpToXyz65 = ({ i, t, p, alpha }) => {\n\tif (i === undefined) i = 0;\n\tif (t === undefined) t = 0;\n\tif (p === undefined) p = 0;\n\n\tconst l = transferPqDecode(\n\t\ti + 0.008609037037932761 * t + 0.11102962500302593 * p\n\t);\n\tconst m = transferPqDecode(\n\t\ti - 0.00860903703793275 * t - 0.11102962500302599 * p\n\t);\n\tconst s = transferPqDecode(\n\t\ti + 0.5600313357106791 * t - 0.32062717498731885 * p\n\t);\n\n\tconst res = {\n\t\tmode: 'xyz65',\n\t\tx: toRel(\n\t\t\t2.0701522183894219 * l -\n\t\t\t\t1.3263473389671556 * m +\n\t\t\t\t0.2066510476294051 * s\n\t\t),\n\t\ty: toRel(\n\t\t\t0.3647385209748074 * l +\n\t\t\t\t0.680566024947227 * m -\n\t\t\t\t0.0453045459220346 * s\n\t\t),\n\t\tz: toRel(\n\t\t\t-0.049747207535812 * l -\n\t\t\t\t0.0492609666966138 * m +\n\t\t\t\t1.1880659249923042 * s\n\t\t)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertItpToXyz65;\n", "import { YW } from '../hdr/constants.js';\nimport { transferPqEncode } from '../hdr/transfer.js';\n\nconst toAbs = (c = 0) => Math.max(c * YW, 0);\n\nconst convertXyz65ToItp = ({ x, y, z, alpha }) => {\n\tconst absX = toAbs(x);\n\tconst absY = toAbs(y);\n\tconst absZ = toAbs(z);\n\tconst l = transferPqEncode(\n\t\t0.3592832590121217 * absX +\n\t\t\t0.6976051147779502 * absY -\n\t\t\t0.0358915932320289 * absZ\n\t);\n\tconst m = transferPqEncode(\n\t\t-0.1920808463704995 * absX +\n\t\t\t1.1004767970374323 * absY +\n\t\t\t0.0753748658519118 * absZ\n\t);\n\tconst s = transferPqEncode(\n\t\t0.0070797844607477 * absX +\n\t\t\t0.0748396662186366 * absY +\n\t\t\t0.8433265453898765 * absZ\n\t);\n\n\tconst i = 0.5 * l + 0.5 * m;\n\tconst t = 1.61376953125 * l - 3.323486328125 * m + 1.709716796875 * s;\n\tconst p = 4.378173828125 * l - 4.24560546875 * m - 0.132568359375 * s;\n\n\tconst res = { mode: 'itp', i, t, p };\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToItp;\n", "import { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport convertItpToXyz65 from './convertItpToXyz65.js';\nimport convertXyz65ToItp from './convertXyz65ToItp.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\n/*\n ICtCp (or ITP) color space, as defined in ITU-R Recommendation BT.2100.\n\n ICtCp is drafted to be supported in CSS within\n [CSS Color HDR Module Level 1](https://drafts.csswg.org/css-color-hdr/#ICtCp) spec.\n*/\n\nconst definition = {\n\tmode: 'itp',\n\tchannels: ['i', 't', 'p', 'alpha'],\n\tparse: ['--ictcp'],\n\tserialize: '--ictcp',\n\n\ttoMode: {\n\t\txyz65: convertItpToXyz65,\n\t\trgb: color => convertXyz65ToRgb(convertItpToXyz65(color))\n\t},\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToItp,\n\t\trgb: color => convertXyz65ToItp(convertRgbToXyz65(color))\n\t},\n\n\tranges: {\n\t\ti: [0, 0.581],\n\t\tt: [-0.369, 0.272],\n\t\tp: [-0.164, 0.331]\n\t},\n\n\tinterpolate: {\n\t\ti: interpolatorLinear,\n\t\tt: interpolatorLinear,\n\t\tp: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "import { M1 as n, C1, C2, C3 } from '../hdr/transfer.js';\nconst p = 134.03437499999998; // = 1.7 * 2523 / Math.pow(2, 5);\nconst d0 = 1.6295499532821566e-11;\n\n/* \n\tThe encoding function is derived from Perceptual Quantizer.\n*/\nconst jabPqEncode = v => {\n\tif (v < 0) return 0;\n\tlet vn = Math.pow(v / 10000, n);\n\treturn Math.pow((C1 + C2 * vn) / (1 + C3 * vn), p);\n};\n\n// Convert to Absolute XYZ\nconst abs = (v = 0) => Math.max(v * 203, 0);\n\nconst convertXyz65ToJab = ({ x, y, z, alpha }) => {\n\tx = abs(x);\n\ty = abs(y);\n\tz = abs(z);\n\n\tlet xp = 1.15 * x - 0.15 * z;\n\tlet yp = 0.66 * y + 0.34 * x;\n\n\tlet l = jabPqEncode(0.41478972 * xp + 0.579999 * yp + 0.014648 * z);\n\tlet m = jabPqEncode(-0.20151 * xp + 1.120649 * yp + 0.0531008 * z);\n\tlet s = jabPqEncode(-0.0166008 * xp + 0.2648 * yp + 0.6684799 * z);\n\n\tlet i = (l + m) / 2;\n\n\tlet res = {\n\t\tmode: 'jab',\n\t\tj: (0.44 * i) / (1 - 0.56 * i) - d0,\n\t\ta: 3.524 * l - 4.066708 * m + 0.542708 * s,\n\t\tb: 0.199076 * l + 1.096799 * m - 1.295875 * s\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToJab;\n", "import { M1 as n, C1, C2, C3 } from '../hdr/transfer.js';\nconst p = 134.03437499999998; // = 1.7 * 2523 / Math.pow(2, 5);\nconst d0 = 1.6295499532821566e-11;\n\n/* \n\tThe encoding function is derived from Perceptual Quantizer.\n*/\nconst jabPqDecode = v => {\n\tif (v < 0) return 0;\n\tlet vp = Math.pow(v, 1 / p);\n\treturn 10000 * Math.pow((C1 - vp) / (C3 * vp - C2), 1 / n);\n};\n\nconst rel = v => v / 203;\n\nconst convertJabToXyz65 = ({ j, a, b, alpha }) => {\n\tif (j === undefined) j = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet i = (j + d0) / (0.44 + 0.56 * (j + d0));\n\n\tlet l = jabPqDecode(i + 0.13860504 * a + 0.058047316 * b);\n\tlet m = jabPqDecode(i - 0.13860504 * a - 0.058047316 * b);\n\tlet s = jabPqDecode(i - 0.096019242 * a - 0.8118919 * b);\n\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx: rel(\n\t\t\t1.661373024652174 * l -\n\t\t\t\t0.914523081304348 * m +\n\t\t\t\t0.23136208173913045 * s\n\t\t),\n\t\ty: rel(\n\t\t\t-0.3250758611844533 * l +\n\t\t\t\t1.571847026732543 * m -\n\t\t\t\t0.21825383453227928 * s\n\t\t),\n\t\tz: rel(-0.090982811 * l - 0.31272829 * m + 1.5227666 * s)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertJabToXyz65;\n", "/*\n\tConvert sRGB to JzAzBz.\n\n\tFor achromatic sRGB colors, adjust the equivalent JzAzBz color\n\tto be achromatic as well, insteading of having a very slight chroma.\n */\n\nimport convertXyz65ToJab from './convertXyz65ToJab.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\n\nconst convertRgbToJab = rgb => {\n\tlet res = convertXyz65ToJab(convertRgbToXyz65(rgb));\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToJab;\n", "import convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\nimport convertJabToXyz65 from './convertJabToXyz65.js';\n\nconst convertJabToRgb = color => convertXyz65ToRgb(convertJabToXyz65(color));\n\nexport default convertJabToRgb;\n", "/*\n\tThe JzAzBz color space.\n\n\tBased on:\n\n\tMuhammad Safdar, Guihua Cui, Youn Jin Kim, and Ming Ronnier Luo, \n\t\"Perceptually uniform color space for image signals \n\tincluding high dynamic range and wide gamut,\" \n\tOpt. Express 25, 15131-15151 (2017) \n\n\thttps://doi.org/10.1364/OE.25.015131\n */\n\nimport convertXyz65ToJab from './convertXyz65ToJab.js';\nimport convertJabToXyz65 from './convertJabToXyz65.js';\nimport convertRgbToJab from './convertRgbToJab.js';\nimport convertJabToRgb from './convertJabToRgb.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'jab',\n\tchannels: ['j', 'a', 'b', 'alpha'],\n\n\tparse: ['--jzazbz'],\n\tserialize: '--jzazbz',\n\n\tfromMode: {\n\t\trgb: convertRgbToJab,\n\t\txyz65: convertXyz65ToJab\n\t},\n\n\ttoMode: {\n\t\trgb: convertJabToRgb,\n\t\txyz65: convertJabToXyz65\n\t},\n\n\tranges: {\n\t\tj: [0, 0.222],\n\t\ta: [-0.109, 0.129],\n\t\tb: [-0.185, 0.134]\n\t},\n\n\tinterpolate: {\n\t\tj: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\nconst convertJabToJch = ({ j, a, b, alpha }) => {\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet c = Math.sqrt(a * a + b * b);\n\tlet res = {\n\t\tmode: 'jch',\n\t\tj,\n\t\tc\n\t};\n\tif (c) {\n\t\tres.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertJabToJch;\n", "const convertJchToJab = ({ j, c, h, alpha }) => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'jab',\n\t\tj,\n\t\ta: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tb: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertJchToJab;\n", "import convertJabToJch from './convertJabToJch.js';\nimport convertJchToJab from './convertJchToJab.js';\nimport convertJabToRgb from '../jab/convertJabToRgb.js';\nimport convertRgbToJab from '../jab/convertRgbToJab.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'jch',\n\n\tparse: ['--jzczhz'],\n\tserialize: '--jzczhz',\n\n\ttoMode: {\n\t\tjab: convertJchToJab,\n\t\trgb: c => convertJabToRgb(convertJchToJab(c))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertJabToJch(convertRgbToJab(c)),\n\t\tjab: convertJabToJch\n\t},\n\n\tchannels: ['j', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tj: [0, 0.221],\n\t\tc: [0, 0.19],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tj: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "export const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n", "import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nlet fn = v => (Math.pow(v, 3) > e ? Math.pow(v, 3) : (116 * v - 16) / k);\n\nconst convertLabToXyz50 = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet fy = (l + 16) / 116;\n\tlet fx = a / 500 + fy;\n\tlet fz = fy - b / 200;\n\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx: fn(fx) * D50.X,\n\t\ty: fn(fy) * D50.Y,\n\t\tz: fn(fz) * D50.Z\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLabToXyz50;\n", "/*\n\tCIE XYZ D50 values to sRGB.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz50ToRgb = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb({\n\t\tr:\n\t\t\tx * 3.1341359569958707 -\n\t\t\ty * 1.6173863321612538 -\n\t\t\t0.4906619460083532 * z,\n\t\tg:\n\t\t\tx * -0.978795502912089 +\n\t\t\ty * 1.916254567259524 +\n\t\t\t0.03344273116131949 * z,\n\t\tb:\n\t\t\tx * 0.07195537988411677 -\n\t\t\ty * 0.2289768264158322 +\n\t\t\t1.405386058324125 * z\n\t});\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToRgb;\n", "import convertLabToXyz50 from './convertLabToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\n\nconst convertLabToRgb = lab => convertXyz50ToRgb(convertLabToXyz50(lab));\n\nexport default convertLabToRgb;\n", "/*\n\tConvert sRGB values to CIE XYZ D50\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertRgbToXyz50 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t0.436065742824811 * r +\n\t\t\t0.3851514688337912 * g +\n\t\t\t0.14307845442264197 * b,\n\t\ty:\n\t\t\t0.22249319175623702 * r +\n\t\t\t0.7168870538238823 * g +\n\t\t\t0.06061979053616537 * b,\n\t\tz:\n\t\t\t0.013923904500943465 * r +\n\t\t\t0.09708128566574634 * g +\n\t\t\t0.7140993584005155 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToXyz50;\n", "import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nconst f = value => (value > e ? Math.cbrt(value) : (k * value + 16) / 116);\n\nconst convertXyz50ToLab = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet f0 = f(x / D50.X);\n\tlet f1 = f(y / D50.Y);\n\tlet f2 = f(z / D50.Z);\n\n\tlet res = {\n\t\tmode: 'lab',\n\t\tl: 116 * f1 - 16,\n\t\ta: 500 * (f0 - f1),\n\t\tb: 200 * (f1 - f2)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz50ToLab;\n", "import convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\nimport convertXyz50ToLab from './convertXyz50ToLab.js';\n\nconst convertRgbToLab = rgb => {\n\tlet res = convertXyz50ToLab(convertRgbToXyz50(rgb));\n\n\t// Fixes achromatic RGB colors having a _slight_ chroma due to floating-point errors\n\t// and approximated computations in sRGB <-> CIELab.\n\t// See: https://github.com/d3/d3-color/pull/46\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToLab;\n", "import { Tok } from '../parse.js';\n\nfunction parseLab(color, parsed) {\n\tif (!parsed || parsed[0] !== 'lab') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'lab' };\n\tconst [, l, a, b, alpha] = parsed;\n\tif (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (l.type !== Tok.None) {\n\t\tres.l = Math.min(Math.max(0, l.value), 100);\n\t}\n\tif (a.type !== Tok.None) {\n\t\tres.a = a.type === Tok.Number ? a.value : (a.value * 125) / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value : (b.value * 125) / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseLab;\n", "import convertLabToRgb from './convertLabToRgb.js';\nimport convertLabToXyz50 from './convertLabToXyz50.js';\nimport convertRgbToLab from './convertRgbToLab.js';\nimport convertXyz50ToLab from './convertXyz50ToLab.js';\nimport parseLab from './parseLab.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'lab',\n\n\ttoMode: {\n\t\txyz50: convertLabToXyz50,\n\t\trgb: convertLabToRgb\n\t},\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToLab,\n\t\trgb: convertRgbToLab\n\t},\n\n\tchannels: ['l', 'a', 'b', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-100, 100],\n\t\tb: [-100, 100]\n\t},\n\n\tparse: [parseLab],\n\tserialize: c =>\n\t\t`lab(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.a !== undefined ? c.a : 'none'\n\t\t} ${c.b !== undefined ? c.b : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "import convertLab65ToRgb from './convertLab65ToRgb.js';\nimport convertLab65ToXyz65 from './convertLab65ToXyz65.js';\nimport convertRgbToLab65 from './convertRgbToLab65.js';\nimport convertXyz65ToLab65 from './convertXyz65ToLab65.js';\nimport lab from '../lab/definition.js';\n\nconst definition = {\n\t...lab,\n\tmode: 'lab65',\n\n\tparse: ['--lab-d65'],\n\tserialize: '--lab-d65',\n\n\ttoMode: {\n\t\txyz65: convertLab65ToXyz65,\n\t\trgb: convertLab65ToRgb\n\t},\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToLab65,\n\t\trgb: convertRgbToLab65\n\t},\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-86.182, 98.234],\n\t\tb: [-107.86, 94.477]\n\t}\n};\n\nexport default definition;\n", "import { Tok } from '../parse.js';\n\nfunction parseLch(color, parsed) {\n\tif (!parsed || parsed[0] !== 'lch') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'lch' };\n\tconst [, l, c, h, alpha] = parsed;\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = Math.min(Math.max(0, l.value), 100);\n\t}\n\tif (c.type !== Tok.None) {\n\t\tres.c = Math.max(\n\t\t\t0,\n\t\t\tc.type === Tok.Number ? c.value : (c.value * 150) / 100\n\t\t);\n\t}\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseLch;\n", "import convertLabToLch from './convertLabToLch.js';\nimport convertLchToLab from './convertLchToLab.js';\nimport convertLabToRgb from '../lab/convertLabToRgb.js';\nimport convertRgbToLab from '../lab/convertRgbToLab.js';\nimport parseLch from './parseLch.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'lch',\n\n\ttoMode: {\n\t\tlab: convertLchToLab,\n\t\trgb: c => convertLabToRgb(convertLchToLab(c))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToLab(c)),\n\t\tlab: convertLabToLch\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 150],\n\t\th: [0, 360]\n\t},\n\n\tparse: [parseLch],\n\tserialize: c =>\n\t\t`lch(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.c !== undefined ? c.c : 'none'\n\t\t} ${c.h !== undefined ? c.h : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\nimport lch from '../lch/definition.js';\n\nconst definition = {\n\t...lch,\n\tmode: 'lch65',\n\n\tparse: ['--lch-d65'],\n\tserialize: '--lch-d65',\n\n\ttoMode: {\n\t\tlab65: c => convertLchToLab(c, 'lab65'),\n\t\trgb: c => convertLab65ToRgb(convertLchToLab(c, 'lab65'))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToLab65(c), 'lch65'),\n\t\tlab65: c => convertLabToLch(c, 'lch65')\n\t},\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 133.807],\n\t\th: [0, 360]\n\t}\n};\n\nexport default definition;\n", "import normalizeHue from '../util/normalizeHue.js';\n\nconst convertLuvToLchuv = ({ l, u, v, alpha }) => {\n\tif (u === undefined) u = 0;\n\tif (v === undefined) v = 0;\n\tlet c = Math.sqrt(u * u + v * v);\n\tlet res = {\n\t\tmode: 'lchuv',\n\t\tl: l,\n\t\tc: c\n\t};\n\tif (c) {\n\t\tres.h = normalizeHue((Math.atan2(v, u) * 180) / Math.PI);\n\t}\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertLuvToLchuv;\n", "const convertLchuvToLuv = ({ l, c, h, alpha }) => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'luv',\n\t\tl: l,\n\t\tu: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tv: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertLchuvToLuv;\n", "import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nexport const u_fn = (x, y, z) => (4 * x) / (x + 15 * y + 3 * z);\nexport const v_fn = (x, y, z) => (9 * y) / (x + 15 * y + 3 * z);\n\nexport const un = u_fn(D50.X, D50.Y, D50.Z);\nexport const vn = v_fn(D50.X, D50.Y, D50.Z);\n\nconst l_fn = value => (value <= e ? k * value : 116 * Math.cbrt(value) - 16);\n\nconst convertXyz50ToLuv = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet l = l_fn(y / D50.Y);\n\tlet u = u_fn(x, y, z);\n\tlet v = v_fn(x, y, z);\n\n\t// guard against NaNs produced by `xyz(0 0 0)` black\n\tif (!isFinite(u) || !isFinite(v)) {\n\t\tl = u = v = 0;\n\t} else {\n\t\tu = 13 * l * (u - un);\n\t\tv = 13 * l * (v - vn);\n\t}\n\n\tlet res = {\n\t\tmode: 'luv',\n\t\tl,\n\t\tu,\n\t\tv\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz50ToLuv;\n", "import { k } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nexport const u_fn = (x, y, z) => (4 * x) / (x + 15 * y + 3 * z);\nexport const v_fn = (x, y, z) => (9 * y) / (x + 15 * y + 3 * z);\n\nexport const un = u_fn(D50.X, D50.Y, D50.Z);\nexport const vn = v_fn(D50.X, D50.Y, D50.Z);\n\nconst convertLuvToXyz50 = ({ l, u, v, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (l === 0) {\n\t\treturn { mode: 'xyz50', x: 0, y: 0, z: 0 };\n\t}\n\n\tif (u === undefined) u = 0;\n\tif (v === undefined) v = 0;\n\n\tlet up = u / (13 * l) + un;\n\tlet vp = v / (13 * l) + vn;\n\tlet y = D50.Y * (l <= 8 ? l / k : Math.pow((l + 16) / 116, 3));\n\tlet x = (y * (9 * up)) / (4 * vp);\n\tlet z = (y * (12 - 3 * up - 20 * vp)) / (4 * vp);\n\n\tlet res = { mode: 'xyz50', x, y, z };\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLuvToXyz50;\n", "/*\n\tCIELChuv color space\n\t--------------------\n\n\tReference: \n\n\t\thttps://en.wikipedia.org/wiki/CIELUV\n */\n\nimport convertLuvToLchuv from './convertLuvToLchuv.js';\nimport convertLchuvToLuv from './convertLchuvToLuv.js';\nimport convertXyz50ToLuv from '../luv/convertXyz50ToLuv.js';\nimport convertLuvToXyz50 from '../luv/convertLuvToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst convertRgbToLchuv = rgb =>\n\tconvertLuvToLchuv(convertXyz50ToLuv(convertRgbToXyz50(rgb)));\nconst convertLchuvToRgb = lchuv =>\n\tconvertXyz50ToRgb(convertLuvToXyz50(convertLchuvToLuv(lchuv)));\n\nconst definition = {\n\tmode: 'lchuv',\n\n\ttoMode: {\n\t\tluv: convertLchuvToLuv,\n\t\trgb: convertLchuvToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToLchuv,\n\t\tluv: convertLuvToLchuv\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tparse: ['--lchuv'],\n\tserialize: '--lchuv',\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 176.956],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n", "import rgb from '../rgb/definition.js';\nimport convertRgbToLrgb from './convertRgbToLrgb.js';\nimport convertLrgbToRgb from './convertLrgbToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'lrgb',\n\n\ttoMode: {\n\t\trgb: convertLrgbToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToLrgb\n\t},\n\n\tparse: ['srgb-linear'],\n\tserialize: 'srgb-linear'\n};\n\nexport default definition;\n", "/*\n\tCIELUV color space\n\t------------------\n\n\tReference: \n\n\t\thttps://en.wikipedia.org/wiki/CIELUV\n */\n\nimport convertXyz50ToLuv from './convertXyz50ToLuv.js';\nimport convertLuvToXyz50 from './convertLuvToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'luv',\n\n\ttoMode: {\n\t\txyz50: convertLuvToXyz50,\n\t\trgb: luv => convertXyz50ToRgb(convertLuvToXyz50(luv))\n\t},\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToLuv,\n\t\trgb: rgb => convertXyz50ToLuv(convertRgbToXyz50(rgb))\n\t},\n\n\tchannels: ['l', 'u', 'v', 'alpha'],\n\n\tparse: ['--luv'],\n\tserialize: '--luv',\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tu: [-84.936, 175.042],\n\t\tv: [-125.882, 87.243]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\tu: interpolatorLinear,\n\t\tv: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "const convertLrgbToOklab = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet L = Math.cbrt(\n\t\t0.41222147079999993 * r + 0.5363325363 * g + 0.0514459929 * b\n\t);\n\tlet M = Math.cbrt(\n\t\t0.2119034981999999 * r + 0.6806995450999999 * g + 0.1073969566 * b\n\t);\n\tlet S = Math.cbrt(\n\t\t0.08830246189999998 * r + 0.2817188376 * g + 0.6299787005000002 * b\n\t);\n\n\tlet res = {\n\t\tmode: 'oklab',\n\t\tl: 0.2104542553 * L + 0.793617785 * M - 0.0040720468 * S,\n\t\ta: 1.9779984951 * L - 2.428592205 * M + 0.4505937099 * S,\n\t\tb: 0.0259040371 * L + 0.7827717662 * M - 0.808675766 * S\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLrgbToOklab;\n", "import convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\nimport convertLrgbToOklab from './convertLrgbToOklab.js';\n\nconst convertRgbToOklab = rgb => {\n\tlet res = convertLrgbToOklab(convertRgbToLrgb(rgb));\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToOklab;\n", "const convertOklabToLrgb = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet L = Math.pow(\n\t\tl * 0.99999999845051981432 +\n\t\t\t0.39633779217376785678 * a +\n\t\t\t0.21580375806075880339 * b,\n\t\t3\n\t);\n\tlet M = Math.pow(\n\t\tl * 1.0000000088817607767 -\n\t\t\t0.1055613423236563494 * a -\n\t\t\t0.063854174771705903402 * b,\n\t\t3\n\t);\n\tlet S = Math.pow(\n\t\tl * 1.0000000546724109177 -\n\t\t\t0.089484182094965759684 * a -\n\t\t\t1.2914855378640917399 * b,\n\t\t3\n\t);\n\n\tlet res = {\n\t\tmode: 'lrgb',\n\t\tr:\n\t\t\t+4.076741661347994 * L -\n\t\t\t3.307711590408193 * M +\n\t\t\t0.230969928729428 * S,\n\t\tg:\n\t\t\t-1.2684380040921763 * L +\n\t\t\t2.6097574006633715 * M -\n\t\t\t0.3413193963102197 * S,\n\t\tb:\n\t\t\t-0.004196086541837188 * L -\n\t\t\t0.7034186144594493 * M +\n\t\t\t1.7076147009309444 * S\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertOklabToLrgb;\n", "import convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\nimport convertOklabToLrgb from './convertOklabToLrgb.js';\n\nconst convertOklabToRgb = c => convertLrgbToRgb(convertOklabToLrgb(c));\n\nexport default convertOklabToRgb;\n", "/*\n\tAdapted from code by Bj\u00F6rn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\n\nexport function toe(x) {\n\tconst k_1 = 0.206;\n\tconst k_2 = 0.03;\n\tconst k_3 = (1 + k_1) / (1 + k_2);\n\treturn (\n\t\t0.5 *\n\t\t(k_3 * x -\n\t\t\tk_1 +\n\t\t\tMath.sqrt((k_3 * x - k_1) * (k_3 * x - k_1) + 4 * k_2 * k_3 * x))\n\t);\n}\n\nexport function toe_inv(x) {\n\tconst k_1 = 0.206;\n\tconst k_2 = 0.03;\n\tconst k_3 = (1 + k_1) / (1 + k_2);\n\treturn (x * x + k_1 * x) / (k_3 * (x + k_2));\n}\n\n// Finds the maximum saturation possible for a given hue that fits in sRGB\n// Saturation here is defined as S = C/L\n// a and b must be normalized so a^2 + b^2 == 1\nfunction compute_max_saturation(a, b) {\n\t// Max saturation will be when one of r, g or b goes below zero.\n\n\t// Select different coefficients depending on which component goes below zero first\n\tlet k0, k1, k2, k3, k4, wl, wm, ws;\n\n\tif (-1.88170328 * a - 0.80936493 * b > 1) {\n\t\t// Red component\n\t\tk0 = +1.19086277;\n\t\tk1 = +1.76576728;\n\t\tk2 = +0.59662641;\n\t\tk3 = +0.75515197;\n\t\tk4 = +0.56771245;\n\t\twl = +4.0767416621;\n\t\twm = -3.3077115913;\n\t\tws = +0.2309699292;\n\t} else if (1.81444104 * a - 1.19445276 * b > 1) {\n\t\t// Green component\n\t\tk0 = +0.73956515;\n\t\tk1 = -0.45954404;\n\t\tk2 = +0.08285427;\n\t\tk3 = +0.1254107;\n\t\tk4 = +0.14503204;\n\t\twl = -1.2684380046;\n\t\twm = +2.6097574011;\n\t\tws = -0.3413193965;\n\t} else {\n\t\t// Blue component\n\t\tk0 = +1.35733652;\n\t\tk1 = -0.00915799;\n\t\tk2 = -1.1513021;\n\t\tk3 = -0.50559606;\n\t\tk4 = +0.00692167;\n\t\twl = -0.0041960863;\n\t\twm = -0.7034186147;\n\t\tws = +1.707614701;\n\t}\n\n\t// Approximate max saturation using a polynomial:\n\tlet S = k0 + k1 * a + k2 * b + k3 * a * a + k4 * a * b;\n\n\t// Do one step Halley's method to get closer\n\t// this gives an error less than 10e6, except for some blue hues where the dS/dh is close to infinite\n\t// this should be sufficient for most applications, otherwise do two/three steps\n\n\tlet k_l = +0.3963377774 * a + 0.2158037573 * b;\n\tlet k_m = -0.1055613458 * a - 0.0638541728 * b;\n\tlet k_s = -0.0894841775 * a - 1.291485548 * b;\n\n\t{\n\t\tlet l_ = 1 + S * k_l;\n\t\tlet m_ = 1 + S * k_m;\n\t\tlet s_ = 1 + S * k_s;\n\n\t\tlet l = l_ * l_ * l_;\n\t\tlet m = m_ * m_ * m_;\n\t\tlet s = s_ * s_ * s_;\n\n\t\tlet l_dS = 3 * k_l * l_ * l_;\n\t\tlet m_dS = 3 * k_m * m_ * m_;\n\t\tlet s_dS = 3 * k_s * s_ * s_;\n\n\t\tlet l_dS2 = 6 * k_l * k_l * l_;\n\t\tlet m_dS2 = 6 * k_m * k_m * m_;\n\t\tlet s_dS2 = 6 * k_s * k_s * s_;\n\n\t\tlet f = wl * l + wm * m + ws * s;\n\t\tlet f1 = wl * l_dS + wm * m_dS + ws * s_dS;\n\t\tlet f2 = wl * l_dS2 + wm * m_dS2 + ws * s_dS2;\n\n\t\tS = S - (f * f1) / (f1 * f1 - 0.5 * f * f2);\n\t}\n\n\treturn S;\n}\n\nexport function find_cusp(a, b) {\n\t// First, find the maximum saturation (saturation S = C/L)\n\tlet S_cusp = compute_max_saturation(a, b);\n\n\t// Convert to linear sRGB to find the first point where at least one of r,g or b >= 1:\n\tlet rgb = convertOklabToLrgb({ l: 1, a: S_cusp * a, b: S_cusp * b });\n\tlet L_cusp = Math.cbrt(1 / Math.max(rgb.r, rgb.g, rgb.b));\n\tlet C_cusp = L_cusp * S_cusp;\n\n\treturn [L_cusp, C_cusp];\n}\n\n// Finds intersection of the line defined by\n// L = L0 * (1 - t) + t * L1;\n// C = t * C1;\n// a and b must be normalized so a^2 + b^2 == 1\nfunction find_gamut_intersection(a, b, L1, C1, L0, cusp = null) {\n\tif (!cusp) {\n\t\t// Find the cusp of the gamut triangle\n\t\tcusp = find_cusp(a, b);\n\t}\n\n\t// Find the intersection for upper and lower half seprately\n\tlet t;\n\tif ((L1 - L0) * cusp[1] - (cusp[0] - L0) * C1 <= 0) {\n\t\t// Lower half\n\n\t\tt = (cusp[1] * L0) / (C1 * cusp[0] + cusp[1] * (L0 - L1));\n\t} else {\n\t\t// Upper half\n\n\t\t// First intersect with triangle\n\t\tt = (cusp[1] * (L0 - 1)) / (C1 * (cusp[0] - 1) + cusp[1] * (L0 - L1));\n\n\t\t// Then one step Halley's method\n\t\t{\n\t\t\tlet dL = L1 - L0;\n\t\t\tlet dC = C1;\n\n\t\t\tlet k_l = +0.3963377774 * a + 0.2158037573 * b;\n\t\t\tlet k_m = -0.1055613458 * a - 0.0638541728 * b;\n\t\t\tlet k_s = -0.0894841775 * a - 1.291485548 * b;\n\n\t\t\tlet l_dt = dL + dC * k_l;\n\t\t\tlet m_dt = dL + dC * k_m;\n\t\t\tlet s_dt = dL + dC * k_s;\n\n\t\t\t// If higher accuracy is required, 2 or 3 iterations of the following block can be used:\n\t\t\t{\n\t\t\t\tlet L = L0 * (1 - t) + t * L1;\n\t\t\t\tlet C = t * C1;\n\n\t\t\t\tlet l_ = L + C * k_l;\n\t\t\t\tlet m_ = L + C * k_m;\n\t\t\t\tlet s_ = L + C * k_s;\n\n\t\t\t\tlet l = l_ * l_ * l_;\n\t\t\t\tlet m = m_ * m_ * m_;\n\t\t\t\tlet s = s_ * s_ * s_;\n\n\t\t\t\tlet ldt = 3 * l_dt * l_ * l_;\n\t\t\t\tlet mdt = 3 * m_dt * m_ * m_;\n\t\t\t\tlet sdt = 3 * s_dt * s_ * s_;\n\n\t\t\t\tlet ldt2 = 6 * l_dt * l_dt * l_;\n\t\t\t\tlet mdt2 = 6 * m_dt * m_dt * m_;\n\t\t\t\tlet sdt2 = 6 * s_dt * s_dt * s_;\n\n\t\t\t\tlet r =\n\t\t\t\t\t4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s - 1;\n\t\t\t\tlet r1 =\n\t\t\t\t\t4.0767416621 * ldt -\n\t\t\t\t\t3.3077115913 * mdt +\n\t\t\t\t\t0.2309699292 * sdt;\n\t\t\t\tlet r2 =\n\t\t\t\t\t4.0767416621 * ldt2 -\n\t\t\t\t\t3.3077115913 * mdt2 +\n\t\t\t\t\t0.2309699292 * sdt2;\n\n\t\t\t\tlet u_r = r1 / (r1 * r1 - 0.5 * r * r2);\n\t\t\t\tlet t_r = -r * u_r;\n\n\t\t\t\tlet g =\n\t\t\t\t\t-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s - 1;\n\t\t\t\tlet g1 =\n\t\t\t\t\t-1.2684380046 * ldt +\n\t\t\t\t\t2.6097574011 * mdt -\n\t\t\t\t\t0.3413193965 * sdt;\n\t\t\t\tlet g2 =\n\t\t\t\t\t-1.2684380046 * ldt2 +\n\t\t\t\t\t2.6097574011 * mdt2 -\n\t\t\t\t\t0.3413193965 * sdt2;\n\n\t\t\t\tlet u_g = g1 / (g1 * g1 - 0.5 * g * g2);\n\t\t\t\tlet t_g = -g * u_g;\n\n\t\t\t\tlet b =\n\t\t\t\t\t-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s - 1;\n\t\t\t\tlet b1 =\n\t\t\t\t\t-0.0041960863 * ldt -\n\t\t\t\t\t0.7034186147 * mdt +\n\t\t\t\t\t1.707614701 * sdt;\n\t\t\t\tlet b2 =\n\t\t\t\t\t-0.0041960863 * ldt2 -\n\t\t\t\t\t0.7034186147 * mdt2 +\n\t\t\t\t\t1.707614701 * sdt2;\n\n\t\t\t\tlet u_b = b1 / (b1 * b1 - 0.5 * b * b2);\n\t\t\t\tlet t_b = -b * u_b;\n\n\t\t\t\tt_r = u_r >= 0 ? t_r : 10e5;\n\t\t\t\tt_g = u_g >= 0 ? t_g : 10e5;\n\t\t\t\tt_b = u_b >= 0 ? t_b : 10e5;\n\n\t\t\t\tt += Math.min(t_r, Math.min(t_g, t_b));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn t;\n}\n\nexport function get_ST_max(a_, b_, cusp = null) {\n\tif (!cusp) {\n\t\tcusp = find_cusp(a_, b_);\n\t}\n\tlet L = cusp[0];\n\tlet C = cusp[1];\n\treturn [C / L, C / (1 - L)];\n}\n\nexport function get_ST_mid(a_, b_) {\n\tlet S =\n\t\t0.11516993 +\n\t\t1 /\n\t\t\t(+7.4477897 +\n\t\t\t\t4.1590124 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(-2.19557347 +\n\t\t\t\t\t\t1.75198401 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-2.13704948 -\n\t\t\t\t\t\t\t\t10.02301043 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(-4.24894561 +\n\t\t\t\t\t\t\t\t\t\t5.38770819 * b_ +\n\t\t\t\t\t\t\t\t\t\t4.69891013 * a_))));\n\n\tlet T =\n\t\t0.11239642 +\n\t\t1 /\n\t\t\t(+1.6132032 -\n\t\t\t\t0.68124379 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(+0.40370612 +\n\t\t\t\t\t\t0.90148123 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-0.27087943 +\n\t\t\t\t\t\t\t\t0.6122399 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(+0.00299215 -\n\t\t\t\t\t\t\t\t\t\t0.45399568 * b_ -\n\t\t\t\t\t\t\t\t\t\t0.14661872 * a_))));\n\n\treturn [S, T];\n}\n\nexport function get_Cs(L, a_, b_) {\n\tlet cusp = find_cusp(a_, b_);\n\n\tlet C_max = find_gamut_intersection(a_, b_, L, 1, L, cusp);\n\tlet ST_max = get_ST_max(a_, b_, cusp);\n\n\tlet S_mid =\n\t\t0.11516993 +\n\t\t1 /\n\t\t\t(+7.4477897 +\n\t\t\t\t4.1590124 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(-2.19557347 +\n\t\t\t\t\t\t1.75198401 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-2.13704948 -\n\t\t\t\t\t\t\t\t10.02301043 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(-4.24894561 +\n\t\t\t\t\t\t\t\t\t\t5.38770819 * b_ +\n\t\t\t\t\t\t\t\t\t\t4.69891013 * a_))));\n\n\tlet T_mid =\n\t\t0.11239642 +\n\t\t1 /\n\t\t\t(+1.6132032 -\n\t\t\t\t0.68124379 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(+0.40370612 +\n\t\t\t\t\t\t0.90148123 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-0.27087943 +\n\t\t\t\t\t\t\t\t0.6122399 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(+0.00299215 -\n\t\t\t\t\t\t\t\t\t\t0.45399568 * b_ -\n\t\t\t\t\t\t\t\t\t\t0.14661872 * a_))));\n\n\tlet k = C_max / Math.min(L * ST_max[0], (1 - L) * ST_max[1]);\n\n\tlet C_a = L * S_mid;\n\tlet C_b = (1 - L) * T_mid;\n\tlet C_mid =\n\t\t0.9 *\n\t\tk *\n\t\tMath.sqrt(\n\t\t\tMath.sqrt(\n\t\t\t\t1 / (1 / (C_a * C_a * C_a * C_a) + 1 / (C_b * C_b * C_b * C_b))\n\t\t\t)\n\t\t);\n\n\tC_a = L * 0.4;\n\tC_b = (1 - L) * 0.8;\n\tlet C_0 = Math.sqrt(1 / (1 / (C_a * C_a) + 1 / (C_b * C_b)));\n\treturn [C_0, C_mid, C_max];\n}\n", "/*\n\tAdapted from code by Bj\u00F6rn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport normalizeHue from '../util/normalizeHue.js';\nimport { get_Cs, toe } from './helpers.js';\n\nexport default function convertOklabToOkhsl(lab) {\n\tconst l = lab.l !== undefined ? lab.l : 0;\n\tconst a = lab.a !== undefined ? lab.a : 0;\n\tconst b = lab.b !== undefined ? lab.b : 0;\n\n\tconst ret = { mode: 'okhsl', l: toe(l) };\n\n\tif (lab.alpha !== undefined) {\n\t\tret.alpha = lab.alpha;\n\t}\n\tlet c = Math.sqrt(a * a + b * b);\n\tif (!c) {\n\t\tret.s = 0;\n\t\treturn ret;\n\t}\n\tlet [C_0, C_mid, C_max] = get_Cs(l, a / c, b / c);\n\tlet s;\n\tif (c < C_mid) {\n\t\tlet k_0 = 0;\n\t\tlet k_1 = 0.8 * C_0;\n\t\tlet k_2 = 1 - k_1 / C_mid;\n\t\tlet t = (c - k_0) / (k_1 + k_2 * (c - k_0));\n\t\ts = t * 0.8;\n\t} else {\n\t\tlet k_0 = C_mid;\n\t\tlet k_1 = (0.2 * C_mid * C_mid * 1.25 * 1.25) / C_0;\n\t\tlet k_2 = 1 - k_1 / (C_max - C_mid);\n\t\tlet t = (c - k_0) / (k_1 + k_2 * (c - k_0));\n\t\ts = 0.8 + 0.2 * t;\n\t}\n\tif (s) {\n\t\tret.s = s;\n\t\tret.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\treturn ret;\n}\n", "/*\n\tAdapted from code by Bj\u00F6rn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport { toe_inv, get_Cs } from './helpers.js';\n\nexport default function convertOkhslToOklab(hsl) {\n\tlet h = hsl.h !== undefined ? hsl.h : 0;\n\tlet s = hsl.s !== undefined ? hsl.s : 0;\n\tlet l = hsl.l !== undefined ? hsl.l : 0;\n\n\tconst ret = { mode: 'oklab', l: toe_inv(l) };\n\n\tif (hsl.alpha !== undefined) {\n\t\tret.alpha = hsl.alpha;\n\t}\n\n\tif (!s || l === 1) {\n\t\tret.a = ret.b = 0;\n\t\treturn ret;\n\t}\n\n\tlet a_ = Math.cos((h / 180) * Math.PI);\n\tlet b_ = Math.sin((h / 180) * Math.PI);\n\tlet [C_0, C_mid, C_max] = get_Cs(ret.l, a_, b_);\n\tlet t, k_0, k_1, k_2;\n\tif (s < 0.8) {\n\t\tt = 1.25 * s;\n\t\tk_0 = 0;\n\t\tk_1 = 0.8 * C_0;\n\t\tk_2 = 1 - k_1 / C_mid;\n\t} else {\n\t\tt = 5 * (s - 0.8);\n\t\tk_0 = C_mid;\n\t\tk_1 = (0.2 * C_mid * C_mid * 1.25 * 1.25) / C_0;\n\t\tk_2 = 1 - k_1 / (C_max - C_mid);\n\t}\n\tlet C = k_0 + (t * k_1) / (1 - k_2 * t);\n\tret.a = C * a_;\n\tret.b = C * b_;\n\n\treturn ret;\n}\n", "import convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertOklabToOkhsl from './convertOklabToOkhsl.js';\nimport convertOkhslToOklab from './convertOkhslToOklab.js';\n\nimport modeHsl from '../hsl/definition.js';\n\nconst modeOkhsl = {\n\t...modeHsl,\n\tmode: 'okhsl',\n\tchannels: ['h', 's', 'l', 'alpha'],\n\tparse: ['--okhsl'],\n\tserialize: '--okhsl',\n\tfromMode: {\n\t\toklab: convertOklabToOkhsl,\n\t\trgb: c => convertOklabToOkhsl(convertRgbToOklab(c))\n\t},\n\ttoMode: {\n\t\toklab: convertOkhslToOklab,\n\t\trgb: c => convertOklabToRgb(convertOkhslToOklab(c))\n\t}\n};\n\nexport default modeOkhsl;\n", "/*\n\tAdapted from code by Bj\u00F6rn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport normalizeHue from '../util/normalizeHue.js';\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\nimport { get_ST_max, toe_inv, toe } from '../okhsl/helpers.js';\n\nexport default function convertOklabToOkhsv(lab) {\n\tlet l = lab.l !== undefined ? lab.l : 0;\n\tlet a = lab.a !== undefined ? lab.a : 0;\n\tlet b = lab.b !== undefined ? lab.b : 0;\n\n\tlet c = Math.sqrt(a * a + b * b);\n\n\t// TODO: c = 0\n\tlet a_ = c ? a / c : 1;\n\tlet b_ = c ? b / c : 1;\n\n\tlet [S_max, T] = get_ST_max(a_, b_);\n\tlet S_0 = 0.5;\n\tlet k = 1 - S_0 / S_max;\n\n\tlet t = T / (c + l * T);\n\tlet L_v = t * l;\n\tlet C_v = t * c;\n\n\tlet L_vt = toe_inv(L_v);\n\tlet C_vt = (C_v * L_vt) / L_v;\n\n\tlet rgb_scale = convertOklabToLrgb({ l: L_vt, a: a_ * C_vt, b: b_ * C_vt });\n\tlet scale_L = Math.cbrt(\n\t\t1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0)\n\t);\n\n\tl = l / scale_L;\n\tc = ((c / scale_L) * toe(l)) / l;\n\tl = toe(l);\n\n\tconst ret = {\n\t\tmode: 'okhsv',\n\t\ts: c ? ((S_0 + T) * C_v) / (T * S_0 + T * k * C_v) : 0,\n\t\tv: l ? l / L_v : 0\n\t};\n\tif (ret.s) {\n\t\tret.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\tif (lab.alpha !== undefined) {\n\t\tret.alpha = lab.alpha;\n\t}\n\treturn ret;\n}\n", "/*\n\tCopyright (c) 2021 Bj\u00F6rn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\nimport { get_ST_max, toe_inv } from '../okhsl/helpers.js';\n\nexport default function convertOkhsvToOklab(hsv) {\n\tconst ret = { mode: 'oklab' };\n\tif (hsv.alpha !== undefined) {\n\t\tret.alpha = hsv.alpha;\n\t}\n\n\tconst h = hsv.h !== undefined ? hsv.h : 0;\n\tconst s = hsv.s !== undefined ? hsv.s : 0;\n\tconst v = hsv.v !== undefined ? hsv.v : 0;\n\n\tconst a_ = Math.cos((h / 180) * Math.PI);\n\tconst b_ = Math.sin((h / 180) * Math.PI);\n\n\tconst [S_max, T] = get_ST_max(a_, b_);\n\tconst S_0 = 0.5;\n\tconst k = 1 - S_0 / S_max;\n\tconst L_v = 1 - (s * S_0) / (S_0 + T - T * k * s);\n\tconst C_v = (s * T * S_0) / (S_0 + T - T * k * s);\n\n\tconst L_vt = toe_inv(L_v);\n\tconst C_vt = (C_v * L_vt) / L_v;\n\tconst rgb_scale = convertOklabToLrgb({\n\t\tl: L_vt,\n\t\ta: a_ * C_vt,\n\t\tb: b_ * C_vt\n\t});\n\tconst scale_L = Math.cbrt(\n\t\t1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0)\n\t);\n\n\tconst L_new = toe_inv(v * L_v);\n\tconst C = (C_v * L_new) / L_v;\n\n\tret.l = L_new * scale_L;\n\tret.a = C * a_ * scale_L;\n\tret.b = C * b_ * scale_L;\n\n\treturn ret;\n}\n", "import convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertOklabToOkhsv from './convertOklabToOkhsv.js';\nimport convertOkhsvToOklab from './convertOkhsvToOklab.js';\n\nimport modeHsv from '../hsv/definition.js';\n\nconst modeOkhsv = {\n\t...modeHsv,\n\tmode: 'okhsv',\n\tchannels: ['h', 's', 'v', 'alpha'],\n\tparse: ['--okhsv'],\n\tserialize: '--okhsv',\n\tfromMode: {\n\t\toklab: convertOklabToOkhsv,\n\t\trgb: c => convertOklabToOkhsv(convertRgbToOklab(c))\n\t},\n\ttoMode: {\n\t\toklab: convertOkhsvToOklab,\n\t\trgb: c => convertOklabToRgb(convertOkhsvToOklab(c))\n\t}\n};\n\nexport default modeOkhsv;\n", "import { Tok } from '../parse.js';\n\nfunction parseOklab(color, parsed) {\n\tif (!parsed || parsed[0] !== 'oklab') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'oklab' };\n\tconst [, l, a, b, alpha] = parsed;\n\tif (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (l.type !== Tok.None) {\n\t\tres.l = Math.min(\n\t\t\tMath.max(0, l.type === Tok.Number ? l.value : l.value / 100),\n\t\t\t1\n\t\t);\n\t}\n\tif (a.type !== Tok.None) {\n\t\tres.a = a.type === Tok.Number ? a.value : (a.value * 0.4) / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value : (b.value * 0.4) / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseOklab;\n", "import convertOklabToLrgb from './convertOklabToLrgb.js';\nimport convertLrgbToOklab from './convertLrgbToOklab.js';\nimport convertRgbToOklab from './convertRgbToOklab.js';\nimport convertOklabToRgb from './convertOklabToRgb.js';\nimport parseOklab from './parseOklab.js';\n\nimport lab from '../lab/definition.js';\n\n/*\n\tOklab, a perceptual color space for image processing by Bj\u00F6rn Ottosson\n\tReference: https://bottosson.github.io/posts/oklab/\n */\n\nconst definition = {\n\t...lab,\n\tmode: 'oklab',\n\n\ttoMode: {\n\t\tlrgb: convertOklabToLrgb,\n\t\trgb: convertOklabToRgb\n\t},\n\n\tfromMode: {\n\t\tlrgb: convertLrgbToOklab,\n\t\trgb: convertRgbToOklab\n\t},\n\n\tranges: {\n\t\tl: [0, 1],\n\t\ta: [-0.4, 0.4],\n\t\tb: [-0.4, 0.4]\n\t},\n\n\tparse: [parseOklab],\n\tserialize: c =>\n\t\t`oklab(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.a !== undefined ? c.a : 'none'\n\t\t} ${c.b !== undefined ? c.b : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`\n};\n\nexport default definition;\n", "import { Tok } from '../parse.js';\n\nfunction parseOklch(color, parsed) {\n\tif (!parsed || parsed[0] !== 'oklch') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'oklch' };\n\tconst [, l, c, h, alpha] = parsed;\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = Math.min(\n\t\t\tMath.max(0, l.type === Tok.Number ? l.value : l.value / 100),\n\t\t\t1\n\t\t);\n\t}\n\tif (c.type !== Tok.None) {\n\t\tres.c = Math.max(\n\t\t\t0,\n\t\t\tc.type === Tok.Number ? c.value : (c.value * 0.4) / 100\n\t\t);\n\t}\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseOklch;\n", "import lch from '../lch/definition.js';\nimport convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport parseOklch from './parseOklch.js';\n\nconst definition = {\n\t...lch,\n\tmode: 'oklch',\n\n\ttoMode: {\n\t\toklab: c => convertLchToLab(c, 'oklab'),\n\t\trgb: c => convertOklabToRgb(convertLchToLab(c, 'oklab'))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToOklab(c), 'oklch'),\n\t\toklab: c => convertLabToLch(c, 'oklch')\n\t},\n\n\tparse: [parseOklch],\n\tserialize: c =>\n\t\t`oklch(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.c !== undefined ? c.c : 'none'\n\t\t} ${c.h !== undefined ? c.h : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tranges: {\n\t\tl: [0, 1],\n\t\tc: [0, 0.4],\n\t\th: [0, 360]\n\t}\n};\n\nexport default definition;\n", "/*\n\tConvert Display P3 values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertP3ToXyz65 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.486570948648216 * r +\n\t\t\t0.265667693169093 * g +\n\t\t\t0.1982172852343625 * b,\n\t\ty:\n\t\t\t0.2289745640697487 * r +\n\t\t\t0.6917385218365062 * g +\n\t\t\t0.079286914093745 * b,\n\t\tz: 0.0 * r + 0.0451133818589026 * g + 1.043944368900976 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertP3ToXyz65;\n", "/*\n\tCIE XYZ D65 values to Display P3.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz65ToP3 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb(\n\t\t{\n\t\t\tr:\n\t\t\t\tx * 2.4934969119414263 -\n\t\t\t\ty * 0.9313836179191242 -\n\t\t\t\t0.402710784450717 * z,\n\t\t\tg:\n\t\t\t\tx * -0.8294889695615749 +\n\t\t\t\ty * 1.7626640603183465 +\n\t\t\t\t0.0236246858419436 * z,\n\t\t\tb:\n\t\t\t\tx * 0.0358458302437845 -\n\t\t\t\ty * 0.0761723892680418 +\n\t\t\t\t0.9568845240076871 * z\n\t\t},\n\t\t'p3'\n\t);\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToP3;\n", "import rgb from '../rgb/definition.js';\nimport convertP3ToXyz65 from './convertP3ToXyz65.js';\nimport convertXyz65ToP3 from './convertXyz65ToP3.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'p3',\n\tparse: ['display-p3'],\n\tserialize: 'display-p3',\n\n\tfromMode: {\n\t\trgb: color => convertXyz65ToP3(convertRgbToXyz65(color)),\n\t\txyz65: convertXyz65ToP3\n\t},\n\n\ttoMode: {\n\t\trgb: color => convertXyz65ToRgb(convertP3ToXyz65(color)),\n\t\txyz65: convertP3ToXyz65\n\t}\n};\n\nexport default definition;\n", "/*\n\tConvert CIE XYZ D50 values to ProPhoto RGB\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst gamma = v => {\n\tlet abs = Math.abs(v);\n\tif (abs >= 1 / 512) {\n\t\treturn Math.sign(v) * Math.pow(abs, 1 / 1.8);\n\t}\n\treturn 16 * v;\n};\n\nconst convertXyz50ToProphoto = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'prophoto',\n\t\tr: gamma(\n\t\t\tx * 1.3457868816471585 -\n\t\t\t\ty * 0.2555720873797946 -\n\t\t\t\t0.0511018649755453 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.5446307051249019 +\n\t\t\t\ty * 1.5082477428451466 +\n\t\t\t\t0.0205274474364214 * z\n\t\t),\n\t\tb: gamma(x * 0.0 + y * 0.0 + 1.2119675456389452 * z)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToProphoto;\n", "/*\n\tConvert ProPhoto RGB values to CIE XYZ D50\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs >= 16 / 512) {\n\t\treturn Math.sign(v) * Math.pow(abs, 1.8);\n\t}\n\treturn v / 16;\n};\n\nconst convertProphotoToXyz50 = prophoto => {\n\tlet r = linearize(prophoto.r);\n\tlet g = linearize(prophoto.g);\n\tlet b = linearize(prophoto.b);\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t0.7977666449006423 * r +\n\t\t\t0.1351812974005331 * g +\n\t\t\t0.0313477341283922 * b,\n\t\ty:\n\t\t\t0.2880748288194013 * r +\n\t\t\t0.7118352342418731 * g +\n\t\t\t0.0000899369387256 * b,\n\t\tz: 0 * r + 0 * g + 0.8251046025104602 * b\n\t};\n\tif (prophoto.alpha !== undefined) {\n\t\tres.alpha = prophoto.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertProphotoToXyz50;\n", "import rgb from '../rgb/definition.js';\n\nimport convertXyz50ToProphoto from './convertXyz50ToProphoto.js';\nimport convertProphotoToXyz50 from './convertProphotoToXyz50.js';\n\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\n/*\n\tProPhoto RGB Color space\n\n\tReferences:\n\t\t* https://en.wikipedia.org/wiki/ProPhoto_RGB_color_space\n */\n\nconst definition = {\n\t...rgb,\n\tmode: 'prophoto',\n\tparse: ['prophoto-rgb'],\n\tserialize: 'prophoto-rgb',\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToProphoto,\n\t\trgb: color => convertXyz50ToProphoto(convertRgbToXyz50(color))\n\t},\n\n\ttoMode: {\n\t\txyz50: convertProphotoToXyz50,\n\t\trgb: color => convertXyz50ToRgb(convertProphotoToXyz50(color))\n\t}\n};\n\nexport default definition;\n", "/*\n\tConvert CIE XYZ D65 values to Rec. 2020\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.itu.int/rec/R-REC-BT.2020/en\n*/\n\nconst \u03B1 = 1.09929682680944;\nconst \u03B2 = 0.018053968510807;\nconst gamma = v => {\n\tconst abs = Math.abs(v);\n\tif (abs > \u03B2) {\n\t\treturn (Math.sign(v) || 1) * (\u03B1 * Math.pow(abs, 0.45) - (\u03B1 - 1));\n\t}\n\treturn 4.5 * v;\n};\n\nconst convertXyz65ToRec2020 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'rec2020',\n\t\tr: gamma(\n\t\t\tx * 1.7166511879712683 -\n\t\t\t\ty * 0.3556707837763925 -\n\t\t\t\t0.2533662813736599 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.6666843518324893 +\n\t\t\t\ty * 1.6164812366349395 +\n\t\t\t\t0.0157685458139111 * z\n\t\t),\n\t\tb: gamma(\n\t\t\tx * 0.0176398574453108 -\n\t\t\t\ty * 0.0427706132578085 +\n\t\t\t\t0.9421031212354739 * z\n\t\t)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToRec2020;\n", "/*\n\tConvert Rec. 2020 values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.itu.int/rec/R-REC-BT.2020/en\n*/\n\nconst \u03B1 = 1.09929682680944;\nconst \u03B2 = 0.018053968510807;\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs < \u03B2 * 4.5) {\n\t\treturn v / 4.5;\n\t}\n\treturn (Math.sign(v) || 1) * Math.pow((abs + \u03B1 - 1) / \u03B1, 1 / 0.45);\n};\n\nconst convertRec2020ToXyz65 = rec2020 => {\n\tlet r = linearize(rec2020.r);\n\tlet g = linearize(rec2020.g);\n\tlet b = linearize(rec2020.b);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.6369580483012911 * r +\n\t\t\t0.1446169035862083 * g +\n\t\t\t0.1688809751641721 * b,\n\t\ty:\n\t\t\t0.262700212011267 * r +\n\t\t\t0.6779980715188708 * g +\n\t\t\t0.059301716469862 * b,\n\t\tz: 0 * r + 0.0280726930490874 * g + 1.0609850577107909 * b\n\t};\n\tif (rec2020.alpha !== undefined) {\n\t\tres.alpha = rec2020.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRec2020ToXyz65;\n", "import rgb from '../rgb/definition.js';\n\nimport convertXyz65ToRec2020 from './convertXyz65ToRec2020.js';\nimport convertRec2020ToXyz65 from './convertRec2020ToXyz65.js';\n\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'rec2020',\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToRec2020,\n\t\trgb: color => convertXyz65ToRec2020(convertRgbToXyz65(color))\n\t},\n\n\ttoMode: {\n\t\txyz65: convertRec2020ToXyz65,\n\t\trgb: color => convertXyz65ToRgb(convertRec2020ToXyz65(color))\n\t},\n\n\tparse: ['rec2020'],\n\tserialize: 'rec2020'\n};\n\nexport default definition;\n", "export const bias = 0.00379307325527544933;\nexport const bias_cbrt = Math.cbrt(bias);\n", "import convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\nimport { bias, bias_cbrt } from './constants.js';\n\nconst transfer = v => Math.cbrt(v) - bias_cbrt;\n\nconst convertRgbToXyb = color => {\n\tconst { r, g, b, alpha } = convertRgbToLrgb(color);\n\tconst l = transfer(0.3 * r + 0.622 * g + 0.078 * b + bias);\n\tconst m = transfer(0.23 * r + 0.692 * g + 0.078 * b + bias);\n\tconst s = transfer(\n\t\t0.24342268924547819 * r +\n\t\t\t0.20476744424496821 * g +\n\t\t\t0.5518098665095536 * b +\n\t\t\tbias\n\t);\n\tconst res = {\n\t\tmode: 'xyb',\n\t\tx: (l - m) / 2,\n\t\ty: (l + m) / 2,\n\t\t/* Apply default chroma from luma (subtract Y from B) */\n\t\tb: s - (l + m) / 2\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToXyb;\n", "import convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\nimport { bias, bias_cbrt } from './constants.js';\n\nconst transfer = v => Math.pow(v + bias_cbrt, 3);\n\nconst convertXybToRgb = ({ x, y, b, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (b === undefined) b = 0;\n\tconst l = transfer(x + y) - bias;\n\tconst m = transfer(y - x) - bias;\n\t/* Account for chroma from luma: add Y back to B */\n\tconst s = transfer(b + y) - bias;\n\n\tconst res = convertLrgbToRgb({\n\t\tr:\n\t\t\t11.031566904639861 * l -\n\t\t\t9.866943908131562 * m -\n\t\t\t0.16462299650829934 * s,\n\t\tg:\n\t\t\t-3.2541473810744237 * l +\n\t\t\t4.418770377582723 * m -\n\t\t\t0.16462299650829934 * s,\n\t\tb:\n\t\t\t-3.6588512867136815 * l +\n\t\t\t2.7129230459360922 * m +\n\t\t\t1.9459282407775895 * s\n\t});\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertXybToRgb;\n", "import { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport convertRgbToXyb from './convertRgbToXyb.js';\nimport convertXybToRgb from './convertXybToRgb.js';\n\n/*\n\tThe XYB color space, used in JPEG XL.\n\tReference: https://ds.jpeg.org/whitepapers/jpeg-xl-whitepaper.pdf\n*/\n\nconst definition = {\n\tmode: 'xyb',\n\tchannels: ['x', 'y', 'b', 'alpha'],\n\tparse: ['--xyb'],\n\tserialize: '--xyb',\n\n\ttoMode: {\n\t\trgb: convertXybToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyb\n\t},\n\n\tranges: {\n\t\tx: [-0.0154, 0.0281],\n\t\ty: [0, 0.8453],\n\t\tb: [-0.2778, 0.388]\n\t},\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "/*\n\tThe XYZ D50 color space\n\t-----------------------\n */\n\nimport convertXyz50ToRgb from './convertXyz50ToRgb.js';\nimport convertXyz50ToLab from '../lab/convertXyz50ToLab.js';\nimport convertRgbToXyz50 from './convertRgbToXyz50.js';\nimport convertLabToXyz50 from '../lab/convertLabToXyz50.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'xyz50',\n\tparse: ['xyz-d50'],\n\tserialize: 'xyz-d50',\n\n\ttoMode: {\n\t\trgb: convertXyz50ToRgb,\n\t\tlab: convertXyz50ToLab\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyz50,\n\t\tlab: convertLabToXyz50\n\t},\n\n\tchannels: ['x', 'y', 'z', 'alpha'],\n\n\tranges: {\n\t\tx: [0, 0.964],\n\t\ty: [0, 0.999],\n\t\tz: [0, 0.825]\n\t},\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tz: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "/*\n\tChromatic adaptation of CIE XYZ from D65 to D50 white point\n\tusing the Bradford method.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\t\n*/\n\nconst convertXyz65ToXyz50 = xyz65 => {\n\tlet { x, y, z, alpha } = xyz65;\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t1.0479298208405488 * x +\n\t\t\t0.0229467933410191 * y -\n\t\t\t0.0501922295431356 * z,\n\t\ty:\n\t\t\t0.0296278156881593 * x +\n\t\t\t0.990434484573249 * y -\n\t\t\t0.0170738250293851 * z,\n\t\tz:\n\t\t\t-0.0092430581525912 * x +\n\t\t\t0.0150551448965779 * y +\n\t\t\t0.7518742899580008 * z\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToXyz50;\n", "/*\n\tChromatic adaptation of CIE XYZ from D50 to D65 white point\n\tusing the Bradford method.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\t\n*/\n\nconst convertXyz50ToXyz65 = xyz50 => {\n\tlet { x, y, z, alpha } = xyz50;\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.9554734527042182 * x -\n\t\t\t0.0230985368742614 * y +\n\t\t\t0.0632593086610217 * z,\n\t\ty:\n\t\t\t-0.0283697069632081 * x +\n\t\t\t1.0099954580058226 * y +\n\t\t\t0.021041398966943 * z,\n\t\tz:\n\t\t\t0.0123140016883199 * x -\n\t\t\t0.0205076964334779 * y +\n\t\t\t1.3303659366080753 * z\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToXyz65;\n", "/*\n\tThe XYZ D65 color space\n\t-----------------------\n */\n\nimport convertXyz65ToRgb from './convertXyz65ToRgb.js';\nimport convertRgbToXyz65 from './convertRgbToXyz65.js';\n\nimport convertXyz65ToXyz50 from './convertXyz65ToXyz50.js';\nimport convertXyz50ToXyz65 from './convertXyz50ToXyz65.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'xyz65',\n\n\ttoMode: {\n\t\trgb: convertXyz65ToRgb,\n\t\txyz50: convertXyz65ToXyz50\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyz65,\n\t\txyz50: convertXyz50ToXyz65\n\t},\n\n\tranges: {\n\t\tx: [0, 0.95],\n\t\ty: [0, 1],\n\t\tz: [0, 1.088]\n\t},\n\n\tchannels: ['x', 'y', 'z', 'alpha'],\n\n\tparse: ['xyz', 'xyz-d65'],\n\tserialize: 'xyz-d65',\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tz: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "const convertRgbToYiq = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tconst res = {\n\t\tmode: 'yiq',\n\t\ty: 0.29889531 * r + 0.58662247 * g + 0.11448223 * b,\n\t\ti: 0.59597799 * r - 0.2741761 * g - 0.32180189 * b,\n\t\tq: 0.21147017 * r - 0.52261711 * g + 0.31114694 * b\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToYiq;\n", "const convertYiqToRgb = ({ y, i, q, alpha }) => {\n\tif (y === undefined) y = 0;\n\tif (i === undefined) i = 0;\n\tif (q === undefined) q = 0;\n\tconst res = {\n\t\tmode: 'rgb',\n\t\tr: y + 0.95608445 * i + 0.6208885 * q,\n\t\tg: y - 0.27137664 * i - 0.6486059 * q,\n\t\tb: y - 1.10561724 * i + 1.70250126 * q\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertYiqToRgb;\n", "import convertRgbToYiq from './convertRgbToYiq.js';\nimport convertYiqToRgb from './convertYiqToRgb.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\n/*\n\tYIQ Color Space\n\n\tReferences\n\t----------\n\n\tWikipedia:\n\t\thttps://en.wikipedia.org/wiki/YIQ\n\n\t\"Measuring perceived color difference using YIQ NTSC\n\ttransmission color space in mobile applications\"\n\t\t\n\t\tby Yuriy Kotsarenko, Fernando Ramos in:\n\t\tProgramaci\u00F3n Matem\u00E1tica y Software (2010) \n\n\tAvailable at:\n\t\t\n\t\thttp://www.progmat.uaem.mx:8080/artVol2Num2/Articulo3Vol2Num2.pdf\n */\n\nconst definition = {\n\tmode: 'yiq',\n\n\ttoMode: {\n\t\trgb: convertYiqToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToYiq\n\t},\n\n\tchannels: ['y', 'i', 'q', 'alpha'],\n\n\tparse: ['--yiq'],\n\tserialize: '--yiq',\n\n\tranges: {\n\t\ti: [-0.595, 0.595],\n\t\tq: [-0.522, 0.522]\n\t},\n\n\tinterpolate: {\n\t\ty: interpolatorLinear,\n\t\ti: interpolatorLinear,\n\t\tq: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n", "// From: https://github.com/d3/d3-format/issues/32\n\nconst r = (value, precision) =>\n\tMath.round(value * (precision = Math.pow(10, precision))) / precision;\n\nconst round =\n\t(precision = 4) =>\n\tvalue =>\n\t\ttypeof value === 'number' ? r(value, precision) : value;\n\nexport default round;\n", "import converter from './converter.js';\nimport round from './round.js';\nimport prepare from './_prepare.js';\nimport { getMode } from './modes.js';\n\nlet twoDecimals = round(2);\n\nconst clamp = value => Math.max(0, Math.min(1, value || 0));\nconst fixup = value => Math.round(clamp(value) * 255);\n\nconst rgb = converter('rgb');\nconst hsl = converter('hsl');\n\nexport const serializeHex = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet r = fixup(color.r);\n\tlet g = fixup(color.g);\n\tlet b = fixup(color.b);\n\n\treturn '#' + ((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1);\n};\n\nexport const serializeHex8 = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet a = fixup(color.alpha !== undefined ? color.alpha : 1);\n\treturn serializeHex(color) + ((1 << 8) | a).toString(16).slice(1);\n};\n\nexport const serializeRgb = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet r = fixup(color.r);\n\tlet g = fixup(color.g);\n\tlet b = fixup(color.b);\n\n\tif (color.alpha === undefined || color.alpha === 1) {\n\t\t// opaque color\n\t\treturn `rgb(${r}, ${g}, ${b})`;\n\t} else {\n\t\t// transparent color\n\t\treturn `rgba(${r}, ${g}, ${b}, ${twoDecimals(clamp(color.alpha))})`;\n\t}\n};\n\nexport const serializeHsl = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst h = twoDecimals(color.h || 0);\n\tconst s = twoDecimals(clamp(color.s) * 100) + '%';\n\tconst l = twoDecimals(clamp(color.l) * 100) + '%';\n\n\tif (color.alpha === undefined || color.alpha === 1) {\n\t\t// opaque color\n\t\treturn `hsl(${h}, ${s}, ${l})`;\n\t} else {\n\t\t// transparent color\n\t\treturn `hsla(${h}, ${s}, ${l}, ${twoDecimals(clamp(color.alpha))})`;\n\t}\n};\n\nexport const formatCss = c => {\n\tconst color = prepare(c);\n\tif (!color) {\n\t\treturn undefined;\n\t}\n\tconst def = getMode(color.mode);\n\tif (!def.serialize || typeof def.serialize === 'string') {\n\t\tlet res = `color(${def.serialize || `--${color.mode}`} `;\n\t\tdef.channels.forEach((ch, i) => {\n\t\t\tif (ch !== 'alpha') {\n\t\t\t\tres +=\n\t\t\t\t\t(i ? ' ' : '') +\n\t\t\t\t\t(color[ch] !== undefined ? color[ch] : 'none');\n\t\t\t}\n\t\t});\n\t\tif (color.alpha !== undefined && color.alpha < 1) {\n\t\t\tres += ` / ${color.alpha}`;\n\t\t}\n\t\treturn res + ')';\n\t}\n\tif (typeof def.serialize === 'function') {\n\t\treturn def.serialize(color);\n\t}\n\treturn undefined;\n};\n\nexport const formatHex = c => serializeHex(rgb(c));\nexport const formatHex8 = c => serializeHex8(rgb(c));\nexport const formatRgb = c => serializeRgb(rgb(c));\nexport const formatHsl = c => serializeHsl(hsl(c));\n", "// Color space definitions\nimport modeA98 from './a98/definition.js';\nimport modeCubehelix from './cubehelix/definition.js';\nimport modeDlab from './dlab/definition.js';\nimport modeDlch from './dlch/definition.js';\nimport modeHsi from './hsi/definition.js';\nimport modeHsl from './hsl/definition.js';\nimport modeHsv from './hsv/definition.js';\nimport modeHwb from './hwb/definition.js';\nimport modeItp from './itp/definition.js';\nimport modeJab from './jab/definition.js';\nimport modeJch from './jch/definition.js';\nimport modeLab from './lab/definition.js';\nimport modeLab65 from './lab65/definition.js';\nimport modeLch from './lch/definition.js';\nimport modeLch65 from './lch65/definition.js';\nimport modeLchuv from './lchuv/definition.js';\nimport modeLrgb from './lrgb/definition.js';\nimport modeLuv from './luv/definition.js';\nimport modeOkhsl from './okhsl/modeOkhsl.js';\nimport modeOkhsv from './okhsv/modeOkhsv.js';\nimport modeOklab from './oklab/definition.js';\nimport modeOklch from './oklch/definition.js';\nimport modeP3 from './p3/definition.js';\nimport modeProphoto from './prophoto/definition.js';\nimport modeRec2020 from './rec2020/definition.js';\nimport modeRgb from './rgb/definition.js';\nimport modeXyb from './xyb/definition.js';\nimport modeXyz50 from './xyz50/definition.js';\nimport modeXyz65 from './xyz65/definition.js';\nimport modeYiq from './yiq/definition.js';\nimport { useMode } from './modes.js';\n\nexport { default as converter } from './converter.js';\n\nexport {\n\tserializeHex,\n\tserializeHex8,\n\tserializeRgb,\n\tserializeHsl,\n\tformatHex,\n\tformatHex8,\n\tformatRgb,\n\tformatHsl,\n\tformatCss\n} from './formatter.js';\n\nexport { default as colorsNamed } from './colors/named.js';\nexport { default as blend } from './blend.js';\nexport { default as random } from './random.js';\n\nexport {\n\tfixupHueShorter,\n\tfixupHueLonger,\n\tfixupHueIncreasing,\n\tfixupHueDecreasing\n} from './fixup/hue.js';\n\nexport { fixupAlpha } from './fixup/alpha.js';\n\nexport {\n\tmapper,\n\tmapAlphaMultiply,\n\tmapAlphaDivide,\n\tmapTransferLinear,\n\tmapTransferGamma\n} from './map.js';\n\nexport { average, averageAngle, averageNumber } from './average.js';\n\nexport { default as round } from './round.js';\nexport {\n\tinterpolate,\n\tinterpolateWith,\n\tinterpolateWithPremultipliedAlpha\n} from './interpolate/interpolate.js';\n\nexport { interpolatorLinear } from './interpolate/linear.js';\n\nexport { interpolatorPiecewise } from './interpolate/piecewise.js';\n\nexport {\n\tinterpolatorSplineBasis,\n\tinterpolatorSplineBasisClosed\n} from './interpolate/splineBasis.js';\n\nexport {\n\tinterpolatorSplineNatural,\n\tinterpolatorSplineNaturalClosed\n} from './interpolate/splineNatural.js';\n\nexport {\n\tinterpolatorSplineMonotone,\n\tinterpolatorSplineMonotone2,\n\tinterpolatorSplineMonotoneClosed\n} from './interpolate/splineMonotone.js';\n\nexport { lerp, unlerp, blerp, trilerp } from './interpolate/lerp.js';\nexport { default as samples } from './samples.js';\nexport {\n\tdisplayable,\n\tinGamut,\n\tclampRgb,\n\tclampChroma,\n\tclampGamut,\n\ttoGamut\n} from './clamp.js';\nexport { default as nearest } from './nearest.js';\nexport { useMode, getMode, useParser, removeParser } from './modes.js';\nexport { default as parse } from './parse.js';\n\nexport {\n\tdifferenceEuclidean,\n\tdifferenceCie76,\n\tdifferenceCie94,\n\tdifferenceCiede2000,\n\tdifferenceCmc,\n\tdifferenceHyab,\n\tdifferenceHueSaturation,\n\tdifferenceHueChroma,\n\tdifferenceHueNaive,\n\tdifferenceKotsarenkoRamos,\n\tdifferenceItp\n} from './difference.js';\n\nexport {\n\tfilterBrightness,\n\tfilterContrast,\n\tfilterSepia,\n\tfilterInvert,\n\tfilterSaturate,\n\tfilterGrayscale,\n\tfilterHueRotate\n} from './filter.js';\n\nexport {\n\tfilterDeficiencyProt,\n\tfilterDeficiencyDeuter,\n\tfilterDeficiencyTrit\n} from './deficiency.js';\n\n// Easings\nexport { default as easingMidpoint } from './easing/midpoint.js';\nexport {\n\teasingSmoothstep,\n\teasingSmoothstepInverse\n} from './easing/smoothstep.js';\nexport { default as easingSmootherstep } from './easing/smootherstep.js';\nexport { default as easingInOutSine } from './easing/inOutSine.js';\nexport { default as easingGamma } from './easing/gamma.js';\n\nexport {\n\tluminance as wcagLuminance,\n\tcontrast as wcagContrast\n} from './wcag.js';\n\nexport { default as parseHsl } from './hsl/parseHsl.js';\nexport { default as parseHwb } from './hwb/parseHwb.js';\nexport { default as parseLab } from './lab/parseLab.js';\nexport { default as parseLch } from './lch/parseLch.js';\nexport { default as parseNamed } from './rgb/parseNamed.js';\nexport { default as parseTransparent } from './rgb/parseTransparent.js';\nexport { default as parseHex } from './rgb/parseHex.js';\nexport { default as parseRgb } from './rgb/parseRgb.js';\nexport { default as parseHslLegacy } from './hsl/parseHslLegacy.js';\nexport { default as parseRgbLegacy } from './rgb/parseRgbLegacy.js';\nexport { default as parseOklab } from './oklab/parseOklab.js';\nexport { default as parseOklch } from './oklch/parseOklch.js';\n\nexport { default as convertA98ToXyz65 } from './a98/convertA98ToXyz65.js';\nexport { default as convertCubehelixToRgb } from './cubehelix/convertCubehelixToRgb.js';\nexport { default as convertDlchToLab65 } from './dlch/convertDlchToLab65.js';\nexport { default as convertHsiToRgb } from './hsi/convertHsiToRgb.js';\nexport { default as convertHslToRgb } from './hsl/convertHslToRgb.js';\nexport { default as convertHsvToRgb } from './hsv/convertHsvToRgb.js';\nexport { default as convertHwbToRgb } from './hwb/convertHwbToRgb.js';\nexport { default as convertItpToXyz65 } from './itp/convertItpToXyz65.js';\nexport { default as convertJabToJch } from './jch/convertJabToJch.js';\nexport { default as convertJabToRgb } from './jab/convertJabToRgb.js';\nexport { default as convertJabToXyz65 } from './jab/convertJabToXyz65.js';\nexport { default as convertJchToJab } from './jch/convertJchToJab.js';\nexport { default as convertLab65ToDlch } from './dlch/convertLab65ToDlch.js';\nexport { default as convertLab65ToRgb } from './lab65/convertLab65ToRgb.js';\nexport { default as convertLab65ToXyz65 } from './lab65/convertLab65ToXyz65.js';\nexport { default as convertLabToLch } from './lch/convertLabToLch.js';\nexport { default as convertLabToRgb } from './lab/convertLabToRgb.js';\nexport { default as convertLabToXyz50 } from './lab/convertLabToXyz50.js';\nexport { default as convertLchToLab } from './lch/convertLchToLab.js';\nexport { default as convertLchuvToLuv } from './lchuv/convertLchuvToLuv.js';\nexport { default as convertLrgbToOklab } from './oklab/convertLrgbToOklab.js';\nexport { default as convertLrgbToRgb } from './lrgb/convertLrgbToRgb.js';\nexport { default as convertLuvToLchuv } from './lchuv/convertLuvToLchuv.js';\nexport { default as convertLuvToXyz50 } from './luv/convertLuvToXyz50.js';\nexport { default as convertOkhslToOklab } from './okhsl/convertOkhslToOklab.js';\nexport { default as convertOkhsvToOklab } from './okhsv/convertOkhsvToOklab.js';\nexport { default as convertOklabToLrgb } from './oklab/convertOklabToLrgb.js';\nexport { default as convertOklabToOkhsl } from './okhsl/convertOklabToOkhsl.js';\nexport { default as convertOklabToOkhsv } from './okhsv/convertOklabToOkhsv.js';\nexport { default as convertOklabToRgb } from './oklab/convertOklabToRgb.js';\nexport { default as convertP3ToXyz65 } from './p3/convertP3ToXyz65.js';\nexport { default as convertProphotoToXyz50 } from './prophoto/convertProphotoToXyz50.js';\nexport { default as convertRec2020ToXyz65 } from './rec2020/convertRec2020ToXyz65.js';\nexport { default as convertRgbToCubehelix } from './cubehelix/convertRgbToCubehelix.js';\nexport { default as convertRgbToHsi } from './hsi/convertRgbToHsi.js';\nexport { default as convertRgbToHsl } from './hsl/convertRgbToHsl.js';\nexport { default as convertRgbToHsv } from './hsv/convertRgbToHsv.js';\nexport { default as convertRgbToHwb } from './hwb/convertRgbToHwb.js';\nexport { default as convertRgbToJab } from './jab/convertRgbToJab.js';\nexport { default as convertRgbToLab } from './lab/convertRgbToLab.js';\nexport { default as convertRgbToLab65 } from './lab65/convertRgbToLab65.js';\nexport { default as convertRgbToLrgb } from './lrgb/convertRgbToLrgb.js';\nexport { default as convertRgbToOklab } from './oklab/convertRgbToOklab.js';\nexport { default as convertRgbToXyb } from './xyb/convertRgbToXyb.js';\nexport { default as convertRgbToXyz50 } from './xyz50/convertRgbToXyz50.js';\nexport { default as convertRgbToXyz65 } from './xyz65/convertRgbToXyz65.js';\nexport { default as convertRgbToYiq } from './yiq/convertRgbToYiq.js';\nexport { default as convertXybToRgb } from './xyb/convertXybToRgb.js';\nexport { default as convertXyz50ToLab } from './lab/convertXyz50ToLab.js';\nexport { default as convertXyz50ToLuv } from './luv/convertXyz50ToLuv.js';\nexport { default as convertXyz50ToProphoto } from './prophoto/convertXyz50ToProphoto.js';\nexport { default as convertXyz50ToRgb } from './xyz50/convertXyz50ToRgb.js';\nexport { default as convertXyz50ToXyz65 } from './xyz65/convertXyz50ToXyz65.js';\nexport { default as convertXyz65ToA98 } from './a98/convertXyz65ToA98.js';\nexport { default as convertXyz65ToItp } from './itp/convertXyz65ToItp.js';\nexport { default as convertXyz65ToJab } from './jab/convertXyz65ToJab.js';\nexport { default as convertXyz65ToLab65 } from './lab65/convertXyz65ToLab65.js';\nexport { default as convertXyz65ToP3 } from './p3/convertXyz65ToP3.js';\nexport { default as convertXyz65ToRec2020 } from './rec2020/convertXyz65ToRec2020.js';\nexport { default as convertXyz65ToRgb } from './xyz65/convertXyz65ToRgb.js';\nexport { default as convertXyz65ToXyz50 } from './xyz65/convertXyz65ToXyz50.js';\nexport { default as convertYiqToRgb } from './yiq/convertYiqToRgb.js';\n\nexport {\n\tmodeA98,\n\tmodeCubehelix,\n\tmodeDlab,\n\tmodeDlch,\n\tmodeHsi,\n\tmodeHsl,\n\tmodeHsv,\n\tmodeHwb,\n\tmodeItp,\n\tmodeJab,\n\tmodeJch,\n\tmodeLab,\n\tmodeLab65,\n\tmodeLch,\n\tmodeLch65,\n\tmodeLchuv,\n\tmodeLrgb,\n\tmodeLuv,\n\tmodeOkhsl,\n\tmodeOkhsv,\n\tmodeOklab,\n\tmodeOklch,\n\tmodeP3,\n\tmodeProphoto,\n\tmodeRec2020,\n\tmodeRgb,\n\tmodeXyb,\n\tmodeXyz50,\n\tmodeXyz65,\n\tmodeYiq\n};\n\nexport const a98 = useMode(modeA98);\nexport const cubehelix = useMode(modeCubehelix);\nexport const dlab = useMode(modeDlab);\nexport const dlch = useMode(modeDlch);\nexport const hsi = useMode(modeHsi);\nexport const hsl = useMode(modeHsl);\nexport const hsv = useMode(modeHsv);\nexport const hwb = useMode(modeHwb);\nexport const itp = useMode(modeItp);\nexport const jab = useMode(modeJab);\nexport const jch = useMode(modeJch);\nexport const lab = useMode(modeLab);\nexport const lab65 = useMode(modeLab65);\nexport const lch = useMode(modeLch);\nexport const lch65 = useMode(modeLch65);\nexport const lchuv = useMode(modeLchuv);\nexport const lrgb = useMode(modeLrgb);\nexport const luv = useMode(modeLuv);\nexport const okhsl = useMode(modeOkhsl);\nexport const okhsv = useMode(modeOkhsv);\nexport const oklab = useMode(modeOklab);\nexport const oklch = useMode(modeOklch);\nexport const p3 = useMode(modeP3);\nexport const prophoto = useMode(modeProphoto);\nexport const rec2020 = useMode(modeRec2020);\nexport const rgb = useMode(modeRgb);\nexport const xyb = useMode(modeXyb);\nexport const xyz50 = useMode(modeXyz50);\nexport const xyz65 = useMode(modeXyz65);\nexport const yiq = useMode(modeYiq);\n", "export const CSS_VARIABLE_REGEX: RegExp = /var\\(([\\w-]+)\\)/;\n\nexport const isCSSVariable = (color: string): boolean =>\n CSS_VARIABLE_REGEX.test(color);\n", "import type { Lch, Rgb, Color, Mode } from 'culori';\nimport { converter } from 'culori';\n\nimport { createLogger } from '#internals/create-logger';\n\nimport { isCSSVariable } from '../is-css-variable';\n\nconst logger = createLogger('parseColor');\n\nconst parseColor = <T extends Color>(mode: Mode, color: string) => {\n const trimmedColor = color.trim();\n\n if (isCSSVariable(trimmedColor)) {\n logger.info('Try to parse CSS variable', {\n color: trimmedColor,\n });\n return undefined;\n }\n\n const parse = converter(mode);\n const parsedColor = parse(trimmedColor);\n\n if (!parsedColor) {\n logger.info('Invalid color', {\n color: trimmedColor,\n });\n }\n\n return parsedColor as T | undefined;\n};\n\nexport const parseRgb = (color: string): Rgb | undefined =>\n parseColor('rgb', color);\n\nexport const parseHcl = (color: string): Lch | undefined =>\n parseColor('lch', color);\n", "import { formatRgb } from 'culori';\n\nimport { parseHcl, parseRgb } from '../parse-color';\n\nconst DARKER_BASE_EXPONENT = 0.7;\nconst BRIGHTER_BASE_EXPONENT = 1 / DARKER_BASE_EXPONENT;\n\n/**\n * Whether the function will make the passed color swatch brighter or darker\n */\n\nexport type AdjustmentType = 'darker' | 'brighter';\n\n/*\n\nBrighter:\n\nconst brighter = function(amount) {\n amount = amount == null ? 1 / 0.7 : Math.pow(1 / 0.7, amount);\n return new Rgb(this.r * amount, this.g * amount, this.b * amount, this.opacity);\n}\n\nconst darker = function(amount) {\n amount = amount == null ? 0.7 : Math.pow(0.7, amount);\n return new Rgb(this.r * amount, this.g * amount, this.b * amount, this.opacity);\n}\n */\n\n/**\n * Getting darkened / lightened color swatch from original swatch value\n */\nexport const adjustColorBrightness = (\n brightness: AdjustmentType,\n amount: number,\n color: string,\n autoAdjustToColorLightness: boolean = false,\n): string => {\n const rgbColor = parseRgb(color);\n if (!rgbColor) {\n return formatRgb({\n r: 0,\n g: 0,\n b: 0,\n alpha: 1,\n mode: 'rgb',\n });\n }\n\n let correctionFactor = 1;\n\n if (autoAdjustToColorLightness) {\n const hclColor = parseHcl(color);\n\n if (hclColor) {\n correctionFactor = Math.exp(-hclColor.l / 10) * 10 + 1;\n }\n }\n\n const multiplyingFactor =\n (brightness === 'darker'\n ? DARKER_BASE_EXPONENT\n : BRIGHTER_BASE_EXPONENT) **\n (amount * correctionFactor);\n\n return formatRgb({\n r: rgbColor.r * multiplyingFactor,\n g: rgbColor.g * multiplyingFactor,\n b: rgbColor.b * multiplyingFactor,\n alpha: rgbColor.alpha,\n mode: 'rgb',\n });\n};\n", "import { rumShim } from '@lib/browser-sdk-shims';\n\nconst team = 'designops';\n\nexport const addError: typeof rumShim.addError = (error, context) =>\n rumShim.addError(\n error,\n Object.assign({ team }, context ? { druids: context } : undefined),\n );\nexport const addAction: typeof rumShim.addAction = (name, context) =>\n rumShim.addAction(\n name,\n Object.assign({ team }, context ? { druids: context } : undefined),\n );\n\nexport const startDurationVital: typeof rumShim.startDurationVital = (\n name,\n options = {},\n) =>\n rumShim.startDurationVital(name, {\n ...options,\n context: { team, ...options.context },\n });\n\nexport const stopDurationVital: typeof rumShim.stopDurationVital = (\n name,\n options = {},\n) => {\n return rumShim.stopDurationVital(name, {\n ...options,\n context: { team, ...options.context },\n });\n};\n", "{\n \"_comment\": [\n \"Do not edit directly, this file is generated from:\",\n \"- packages/druids/ui/tokens/src/semantic/color.tokens.json\",\n \"- packages/druids/ui/tokens/src/underlying/color.tokens.json\",\n \"Run `yarn design-tokens:build` to regenerate\"\n ],\n \"underlying\": {\n \"@ui-text--light\": \"#1c2b34\",\n \"@ui-text--dark\": \"#ffffff\",\n \"@ui-dataviz-blue--light\": \"#3598ec\",\n \"@ui-dataviz-blue--dark\": \"#6b9cc8\",\n \"@neutral--light\": \"#ffffff\",\n \"@neutral--dark\": \"#1d1c1f\",\n \"@gray-25--light\": \"#f9fafb\",\n \"@gray-25--dark\": \"#222126\",\n \"@gray-50--light\": \"#eff1f5\",\n \"@gray-50--dark\": \"#272626\",\n \"@gray-75--light\": \"#e2e5ed\",\n \"@gray-75--dark\": \"#2c2b2b\",\n \"@gray-100--light\": \"#d1d6e6\",\n \"@gray-100--dark\": \"#3b393d\",\n \"@gray-125--light\": \"#c2c8dd\",\n \"@gray-125--dark\": \"#424045\",\n \"@gray-150--light\": \"#b4bcd4\",\n \"@gray-150--dark\": \"#49474d\",\n \"@gray-175--light\": \"#a9b1c7\",\n \"@gray-175--dark\": \"#56535a\",\n \"@gray-200--light\": \"#9da4b9\",\n \"@gray-200--dark\": \"#65626a\",\n \"@gray-300--light\": \"#828ba4\",\n \"@gray-300--dark\": \"#726e77\",\n \"@gray-400--light\": \"#6a7287\",\n \"@gray-400--dark\": \"#858387\",\n \"@gray-500--light\": \"#585f70\",\n \"@gray-500--dark\": \"#a19fa3\",\n \"@gray-600--light\": \"#464b59\",\n \"@gray-600--dark\": \"#bebbc0\",\n \"@gray-700--light\": \"#373b46\",\n \"@gray-700--dark\": \"#d4d1d6\",\n \"@gray-800--light\": \"#242931\",\n \"@gray-800--dark\": \"#e6e4e7\",\n \"@blue-100--light\": \"#f3f9fc\",\n \"@blue-100--dark\": \"#091222\",\n \"@blue-200--light\": \"#eaf6fc\",\n \"@blue-200--dark\": \"#09245b\",\n \"@blue-300--light\": \"#71b8e7\",\n \"@blue-300--dark\": \"#2471bf\",\n \"@blue-400--light\": \"#4e91d1\",\n \"@blue-400--dark\": \"#3d8bd0\",\n \"@blue-500--light\": \"#006bc2\",\n \"@blue-500--dark\": \"#579fdd\",\n \"@blue-600--light\": \"#0953bf\",\n \"@blue-600--dark\": \"#7ab5ea\",\n \"@blue-700--light\": \"#0b0f8b\",\n \"@blue-700--dark\": \"#a4cef7\",\n \"@red-100--light\": \"#fdebed\",\n \"@red-100--dark\": \"#2f0a0f\",\n \"@red-200--light\": \"#fbd6db\",\n \"@red-200--dark\": \"#5e151e\",\n \"@red-300--light\": \"#fc9da8\",\n \"@red-300--dark\": \"#7c1d29\",\n \"@red-400--light\": \"#f66f78\",\n \"@red-400--dark\": \"#a62536\",\n \"@red-500--light\": \"#eb364b\",\n \"@red-500--dark\": \"#d33043\",\n \"@red-600--light\": \"#bc2b3c\",\n \"@red-600--dark\": \"#eb364b\",\n \"@red-700--light\": \"#922c35\",\n \"@red-700--dark\": \"#ed4f61\",\n \"@amber-100--light\": \"#fff6e3\",\n \"@amber-100--dark\": \"#332408\",\n \"@amber-200--light\": \"#ffe6a2\",\n \"@amber-200--dark\": \"#664811\",\n \"@amber-300--light\": \"#fecf60\",\n \"@amber-300--dark\": \"#8b6217\",\n \"@amber-400--light\": \"#fcc028\",\n \"@amber-400--dark\": \"#b27e1e\",\n \"@amber-500--light\": \"#f99d02\",\n \"@amber-500--dark\": \"#cc9022\",\n \"@amber-600--light\": \"#f27c00\",\n \"@amber-600--dark\": \"#e5a226\",\n \"@amber-700--light\": \"#de5f0c\",\n \"@amber-700--dark\": \"#fec866\",\n \"@yellow-100--light\": \"#fffbe5\",\n \"@yellow-100--dark\": \"#282106\",\n \"@yellow-200--light\": \"#fff8d0\",\n \"@yellow-200--dark\": \"#463a0d\",\n \"@yellow-300--light\": \"#fff5ba\",\n \"@yellow-300--dark\": \"#66540f\",\n \"@yellow-400--light\": \"#ffec8a\",\n \"@yellow-400--dark\": \"#a68716\",\n \"@yellow-500--light\": \"#ffdf52\",\n \"@yellow-500--dark\": \"#f1c724\",\n \"@yellow-600--light\": \"#facc00\",\n \"@yellow-600--dark\": \"#ebcf61\",\n \"@yellow-700--light\": \"#cc9419\",\n \"@yellow-700--dark\": \"#e9d68e\",\n \"@green-100--light\": \"#ecf9ef\",\n \"@green-100--dark\": \"#0d2714\",\n \"@green-200--light\": \"#d9f3e0\",\n \"@green-200--dark\": \"#133a1d\",\n \"@green-300--light\": \"#96dda2\",\n \"@green-300--dark\": \"#1e592c\",\n \"@green-400--light\": \"#70d182\",\n \"@green-400--dark\": \"#297a3e\",\n \"@green-500--light\": \"#41c464\",\n \"@green-500--dark\": \"#349c50\",\n \"@green-600--light\": \"#39b15d\",\n \"@green-600--dark\": \"#40ab5e\",\n \"@green-700--light\": \"#2a7e41\",\n \"@green-700--dark\": \"#52b76d\",\n \"@purple-100--light\": \"#f2ecfc\",\n \"@purple-100--dark\": \"#22053e\",\n \"@purple-200--light\": \"#e6d6f9\",\n \"@purple-200--dark\": \"#320e51\",\n \"@purple-300--light\": \"#cbb1ed\",\n \"@purple-300--dark\": \"#401a69\",\n \"@purple-400--light\": \"#b48fe1\",\n \"@purple-400--dark\": \"#561d8c\",\n \"@purple-500--light\": \"#9364cd\",\n \"@purple-500--dark\": \"#67309e\",\n \"@purple-600--light\": \"#632ca6\",\n \"@purple-600--dark\": \"#7c3eb9\",\n \"@purple-700--light\": \"#451481\",\n \"@purple-700--dark\": \"#a26dd8\",\n \"@pink-100--light\": \"#fff7fc\",\n \"@pink-100--dark\": \"#240015\",\n \"@pink-200--light\": \"#fff2fa\",\n \"@pink-200--dark\": \"#33001e\",\n \"@pink-300--light\": \"#ffe6f5\",\n \"@pink-300--dark\": \"#461230\",\n \"@pink-400--light\": \"#ffb3e0\",\n \"@pink-400--dark\": \"#66003d\",\n \"@pink-500--light\": \"#ff0099\",\n \"@pink-500--dark\": \"#e50089\",\n \"@pink-600--light\": \"#af0069\",\n \"@pink-600--dark\": \"#f572b3\",\n \"@pink-700--light\": \"#660036\",\n \"@pink-700--dark\": \"#ef94c3\",\n \"@indigo-100--light\": \"#f0f2ff\",\n \"@indigo-100--dark\": \"#080a1a\",\n \"@indigo-200--light\": \"#d9deff\",\n \"@indigo-200--dark\": \"#1d2140\",\n \"@indigo-300--light\": \"#b0b7eb\",\n \"@indigo-300--dark\": \"#2e3566\",\n \"@indigo-400--light\": \"#8792e0\",\n \"@indigo-400--dark\": \"#3f4ca5\",\n \"@indigo-500--light\": \"#5e6dd6\",\n \"@indigo-500--dark\": \"#5e6dd6\",\n \"@indigo-600--light\": \"#3f4ca5\",\n \"@indigo-600--dark\": \"#8792e0\",\n \"@indigo-700--light\": \"#2e3566\",\n \"@indigo-700--dark\": \"#b0b7eb\",\n \"@indigo-800--light\": \"#1d2140\",\n \"@indigo-800--dark\": \"#d9deff\",\n \"@indigo-900--light\": \"#080a1a\",\n \"@indigo-900--dark\": \"#f0f2ff\",\n \"@opacity-ui-text--light\": \"98%\",\n \"@opacity-ui-text--dark\": \"76%\",\n \"@opacity-ui-text-secondary--light\": \"68%\",\n \"@opacity-ui-text-secondary--dark\": \"51%\",\n \"@opacity-ui-text-tertiary--light\": \"50%\",\n \"@opacity-ui-text-tertiary--dark\": \"38%\",\n \"@opacity-ui-text-disabled--light\": \"35%\",\n \"@opacity-ui-text-disabled--dark\": \"24%\",\n \"@opacity-ui-icon--light\": \"66%\",\n \"@opacity-ui-icon--dark\": \"48%\",\n \"@opacity-ui-icon-secondary--light\": \"46%\",\n \"@opacity-ui-icon-secondary--dark\": \"34%\"\n },\n \"light\": {\n \"--ui-background\": \"#ffffff\",\n \"--ui-background-secondary\": \"#f9fafb\",\n \"--ui-background-tertiary\": \"#e2e5ed\",\n \"--ui-background-elevated\": \"#ffffff\",\n \"--ui-background-shade\": \"#464b59\",\n \"--ui-background-shade-faded\": \"rgba(55, 59, 70, 0.9)\",\n \"--ui-border\": \"#e2e5ed\",\n \"--ui-border-elevated\": \"transparent\",\n \"--ui-placeholder\": \"rgba(226, 229, 237, 0.5)\",\n \"--ui-ai-background-primary\": \"#f0f2ff\",\n \"--ui-ai-background-secondary\": \"#d9deff\",\n \"--ui-text\": \"rgba(28, 43, 52, 0.98)\",\n \"--ui-text-secondary\": \"rgba(28, 43, 52, 0.68)\",\n \"--ui-text-tertiary\": \"rgba(28, 43, 52, 0.5)\",\n \"--ui-text-disabled\": \"rgba(28, 43, 52, 0.35)\",\n \"--ui-text-knockout\": \"#ffffff\",\n \"--ui-text-on-border\": \"rgba(28, 43, 52, 0.68)\",\n \"--ui-icon\": \"rgba(28, 43, 52, 0.66)\",\n \"--ui-icon-secondary\": \"rgba(28, 43, 52, 0.46)\",\n \"--ui-ai-primary\": \"#5e6dd6\",\n \"--ui-interaction-primary\": \"#006bc2\",\n \"--ui-interaction-primary-contrast\": \"#0953bf\",\n \"--ui-interaction-secondary\": \"#eaf6fc\",\n \"--ui-interaction-secondary-contrast\": \"#d4ecf9\",\n \"--ui-interaction-callout\": \"#ff0099\",\n \"--ui-interaction-callout-contrast\": \"#fff2fa\",\n \"--ui-status-danger\": \"#eb364b\",\n \"--ui-status-danger-contrast\": \"#bc2b3c\",\n \"--ui-status-danger-soft\": \"#fdebed\",\n \"--ui-status-warning\": \"#f99d02\",\n \"--ui-status-warning-contrast\": \"#c15800\",\n \"--ui-status-warning-soft\": \"#fff6e3\",\n \"--ui-status-success\": \"#41c464\",\n \"--ui-status-success-contrast\": \"#2a7e41\",\n \"--ui-status-success-soft\": \"#ecf9ef\",\n \"--ui-status-other\": \"#828ba4\",\n \"--ui-status-other-contrast\": \"#585f70\",\n \"--ui-status-other-soft\": \"#eff1f5\",\n \"--ui-status-in-progress\": \"#9364cd\",\n \"--ui-status-in-progress-contrast\": \"#632ca6\",\n \"--ui-status-in-progress-soft\": \"#f2ecfc\",\n \"--ui-dataviz-blue\": \"#3598ec\",\n \"--ui-dataviz-graph-axis\": \"rgba(28, 43, 52, 0.98)\",\n \"--ui-dataviz-graph-axis-text-underlay\": \"rgba(255, 255, 255, 0.85)\",\n \"--ui-dataviz-graph-disabled-series\": \"#c2c8dd\",\n \"--ui-brand\": \"#632ca6\",\n \"--ui-brand-contrast\": \"#451481\",\n \"--ui-shadow-strength\": \"rgba(36, 41, 49, 0.25)\",\n \"--ui-important\": \"#facc00\",\n \"--ui-important-contrast\": \"#cc9419\",\n \"--ui-code-background\": \"rgba(88, 95, 112, 0.05)\",\n \"--ui-code-selection-background\": \"#E2E5ED\",\n \"--ui-code-text\": \"#1C2B34\",\n \"--ui-code-delimiter\": \"#D97E00\",\n \"--ui-code-boolean\": \"#6B37AB\",\n \"--ui-code-function\": \"#2C63DB\",\n \"--ui-code-string\": \"#038043\",\n \"--ui-code-keyword\": \"#E01B73\",\n \"--ui-code-operator\": \"#008645\",\n \"--ui-code-comment\": \"#6A7287\"\n },\n \"dark\": {\n \"--ui-background\": \"#1d1c1f\",\n \"--ui-background-secondary\": \"#222126\",\n \"--ui-background-tertiary\": \"#3b393d\",\n \"--ui-background-elevated\": \"#222126\",\n \"--ui-background-shade\": \"#3b393d\",\n \"--ui-background-shade-faded\": \"rgba(101, 98, 106, 0.9)\",\n \"--ui-border\": \"#3b393d\",\n \"--ui-border-elevated\": \"#272626\",\n \"--ui-placeholder\": \"rgba(44, 43, 43, 0.75)\",\n \"--ui-ai-background-primary\": \"#080a1a\",\n \"--ui-ai-background-secondary\": \"#1d2140\",\n \"--ui-text\": \"rgba(255, 255, 255, 0.76)\",\n \"--ui-text-secondary\": \"rgba(255, 255, 255, 0.51)\",\n \"--ui-text-tertiary\": \"rgba(255, 255, 255, 0.38)\",\n \"--ui-text-disabled\": \"rgba(255, 255, 255, 0.24)\",\n \"--ui-text-knockout\": \"#ffffff\",\n \"--ui-text-on-border\": \"rgba(255, 255, 255, 0.51)\",\n \"--ui-icon\": \"rgba(255, 255, 255, 0.48)\",\n \"--ui-icon-secondary\": \"rgba(255, 255, 255, 0.34)\",\n \"--ui-ai-primary\": \"#5e6dd6\",\n \"--ui-interaction-primary\": \"#3d8bd0\",\n \"--ui-interaction-primary-contrast\": \"#579fdd\",\n \"--ui-interaction-secondary\": \"#091222\",\n \"--ui-interaction-secondary-contrast\": \"#0e1d36\",\n \"--ui-interaction-callout\": \"#e50089\",\n \"--ui-interaction-callout-contrast\": \"#33001e\",\n \"--ui-status-danger\": \"#d33043\",\n \"--ui-status-danger-contrast\": \"#eb364b\",\n \"--ui-status-danger-soft\": \"#2f0a0f\",\n \"--ui-status-warning\": \"#cc9022\",\n \"--ui-status-warning-contrast\": \"#e5a226\",\n \"--ui-status-warning-soft\": \"#332408\",\n \"--ui-status-success\": \"#349c50\",\n \"--ui-status-success-contrast\": \"#52b76d\",\n \"--ui-status-success-soft\": \"#0d2714\",\n \"--ui-status-other\": \"#65626a\",\n \"--ui-status-other-contrast\": \"#858387\",\n \"--ui-status-other-soft\": \"#2c2b2b\",\n \"--ui-status-in-progress\": \"#67309e\",\n \"--ui-status-in-progress-contrast\": \"#7c3eb9\",\n \"--ui-status-in-progress-soft\": \"#22053e\",\n \"--ui-dataviz-blue\": \"#6b9cc8\",\n \"--ui-dataviz-graph-axis\": \"rgba(255, 255, 255, 0.76)\",\n \"--ui-dataviz-graph-axis-text-underlay\": \"rgba(29, 28, 31, 0.85)\",\n \"--ui-dataviz-graph-disabled-series\": \"#2c2b2b\",\n \"--ui-brand\": \"#561d8c\",\n \"--ui-brand-contrast\": \"#67309e\",\n \"--ui-shadow-strength\": \"rgba(9, 9, 11, 0.88)\",\n \"--ui-important\": \"#ebcf61\",\n \"--ui-important-contrast\": \"#e9d68e\",\n \"--ui-code-background\": \"rgba(255, 255, 255, 0.05)\",\n \"--ui-code-selection-background\": \"#3B393D\",\n \"--ui-code-text\": \"#E6E6E6\",\n \"--ui-code-delimiter\": \"#FEC866\",\n \"--ui-code-boolean\": \"#C48CFF\",\n \"--ui-code-function\": \"#5BCEFF\",\n \"--ui-code-string\": \"#43D698\",\n \"--ui-code-keyword\": \"#FF80B6\",\n \"--ui-code-operator\": \"#41EBA4\",\n \"--ui-code-comment\": \"#8F969A\"\n },\n \"lightContrast\": {\n \"--ui-border\": \"#6a7287\",\n \"--ui-border-elevated\": \"#9da4b9\",\n \"--ui-text\": \"#000\",\n \"--ui-text-secondary\": \"#373b46\",\n \"--ui-text-tertiary\": \"#6a7287\",\n \"--ui-text-disabled\": \"#585f70\",\n \"--ui-text-on-border\": \"#FFF\",\n \"--ui-icon\": \"#080b0d\",\n \"--ui-icon-secondary\": \"#000\",\n \"--ui-interaction-primary\": \"#0953bf\",\n \"--ui-interaction-primary-contrast\": \"#0b0f8b\",\n \"--ui-interaction-secondary\": \"#d4ecf9\",\n \"--ui-interaction-secondary-contrast\": \"#c2e5f8\",\n \"--ui-status-danger\": \"#922c35\",\n \"--ui-status-warning\": \"#de5f0c\",\n \"--ui-status-success\": \"#2a7e41\",\n \"--ui-status-other\": \"#585f70\",\n \"--ui-status-in-progress\": \"#632ca6\",\n \"--ui-shadow-strength\": \"rgba(36, 41, 49, 0.5)\"\n },\n \"darkContrast\": {\n \"--ui-border\": \"#a19fa3\",\n \"--ui-border-elevated\": \"#726e77\",\n \"--ui-text\": \"#FFF\",\n \"--ui-text-secondary\": \"#e6e4e7\",\n \"--ui-text-tertiary\": \"#a19fa3\",\n \"--ui-text-disabled\": \"#d4d1d6\",\n \"--ui-text-on-border\": \"#000\",\n \"--ui-icon\": \"#FFF\",\n \"--ui-icon-secondary\": \"#FFF\",\n \"--ui-interaction-primary\": \"#2471bf\",\n \"--ui-interaction-secondary\": \"#0e1d36\",\n \"--ui-interaction-secondary-contrast\": \"#09245b\",\n \"--ui-status-danger\": \"#a62536\",\n \"--ui-status-warning\": \"#b27e1e\",\n \"--ui-status-success\": \"#297a3e\",\n \"--ui-status-other\": \"#3b393d\",\n \"--ui-status-in-progress\": \"#7c3eb9\",\n \"--ui-shadow-strength\": \"rgba(9, 9, 11, 1)\"\n }\n}\n", "import themeColors from '@lib/design-tokens/theme-colors.json';\n\nimport type { Themes } from '#lib/color/theme';\nimport type { ThemeValue } from '#lib/color/use-theme';\nimport { useTheme } from '#lib/color/use-theme';\n\ntype ThemeColorDictionary = typeof themeColors;\n\nexport type ThemeColor =\n | keyof ThemeColorDictionary['light']\n | keyof ThemeColorDictionary['dark'];\n\nexport type UnderlyingColor = keyof ThemeColorDictionary['underlying'];\n\n/**\n * @param color The name of a CSS variable that represents a theme color (e.g. '--ui-background')\n * @param theme Which version of the variable should be retrieved?\n */\nexport const getThemeColor = (\n color: ThemeColor,\n theme: Themes | ThemeValue,\n): string => {\n return themeColors[theme][color];\n};\n\nexport const getUnderlyingColor = (color: UnderlyingColor): string => {\n return themeColors.underlying[color];\n};\n\nexport const useThemeColor = (color: ThemeColor): string => {\n const { theme } = useTheme();\n return themeColors[theme][color];\n};\n", "import type { Assign, Brand } from '@lib/types';\nimport type { Rgb } from 'culori';\n\n// TODO: rename this file \"contrast.ts\"\nimport { addError } from '#internals/rum-agent';\nimport { isCSSVariable } from '#lib/color/is-css-variable';\nimport { simpleAlphaComposite } from '#lib/color/simple-alpha-composite';\nimport { getThemeColor } from '#lib/color/theme-color';\nimport { Themes } from '#lib/color/theme';\n\nimport { parseRgb } from '../parse-color';\n\n/**\n * Implementation based on WCAG 2.2\n * https://www.w3.org/TR/WCAG22/#dfn-relative-luminance\n *\n * For the sRGB colorspace, the relative luminance of a color is defined as L = 0.2126 * R + 0.7152 * G + 0.0722 * B\n * where R, G and B are defined as:\n *\n * if RsRGB <= 0.04045 then R = RsRGB/12.92 else R = ((RsRGB+0.055)/1.055) ^ 2.4\n * if GsRGB <= 0.04045 then G = GsRGB/12.92 else G = ((GsRGB+0.055)/1.055) ^ 2.4\n * if BsRGB <= 0.04045 then B = BsRGB/12.92 else B = ((BsRGB+0.055)/1.055) ^ 2.4\n * and RsRGB, GsRGB, and BsRGB are defined as:\n *\n * RsRGB = R8bit/255\n * GsRGB = G8bit/255\n * BsRGB = B8bit/255\n *\n * The \"^\" character is the exponentiation operator. (Formula taken from [sRGB] and [IEC-4WD]).\n */\n\n/**\n * Returns color brightness score - a number between 0 and 1\n *\n * Brightness score source:\n * https://www.w3.org/TR/WCAG22/#dfn-relative-luminance\n *\n * It translates colors into linear-lighting RGB color space, undoing the gamma encoding of sRGB space.\n * Then it multiplies each channel with a coefficient to take into account human perception of brightness.\n */\nexport function getBrightness(color: string | Rgb): number {\n const convert = (x: number) =>\n x <= 0.04045 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n\n const rgb = typeof color === 'string' ? parseRgb(color) : color;\n\n if (!rgb) {\n return NaN;\n }\n\n if (rgb.alpha === 0) {\n return NaN;\n }\n\n return (\n 0.2126 * convert(rgb.r) +\n 0.7152 * convert(rgb.g) +\n 0.0722 * convert(rgb.b)\n );\n}\n\n/**\n * Returns if a color is bright or not using `getBrightness()` score\n */\nexport function isBright(color: string): boolean {\n // Subtract 0.05 from 0.5, because WCAG contrast ratio is defined as\n // (L1 + 0.05) / (L2 + 0.05), where L1 and L2 are brightness scores.\n // 0.05 stands for minimum brightness of the screen which is never\n // truly black due to highlighting\n return getBrightness(color) >= 0.45;\n}\n\ntype WCAG2_CONTRAST_RATIO = Brand<number, 'WCAG2_CONTRAST_RATIO'>; // In WCAG3, the contrast algorithm is changed, so this is to make contrast ratio future proof in the codebase\n\nexport function wcag2(\n ratio: number | 'aa' | 'aa-large' | 'aaa' | 'aaa-large',\n): WCAG2_CONTRAST_RATIO {\n if (ratio === 'aa') {\n return wcag2(4.5);\n }\n if (ratio === 'aa-large') {\n return wcag2(3);\n }\n if (ratio === 'aaa') {\n return wcag2(7);\n }\n if (ratio === 'aaa-large') {\n return wcag2(4.5);\n }\n\n return ratio as WCAG2_CONTRAST_RATIO;\n}\n\n/** A computer screen is never truly black (brightness = 0) due to highlighting */\nconst MINIMUM_BRIGHTNESS = 0.05;\n\n/**\n * WCAG contrast ratio is defined as (L1 + 0.05) / (L2 + 0.05),\n * where L1 and L2 are brightness scores.\n * - L1 is the score for the lighter color\n * - L2 is the score for the darker color\n *\n * WCAG 2.2 requires a contrast ratio of at least\n * - 3:1 for graphics and user interface components (such as form input borders).\n * WCAG Level AAA requires a contrast ratio of at least\n * - 7.0:1 for normal text\n * - 4.5:1 for large text\n * Standard: https://webaim.org/resources/contrastchecker/\n * Formula: https://www.w3.org/TR/WCAG22/#dfn-contrast-ratio\n *\n * This function also applies compositing of alpha colors, like described in the CSS colors v6 but this isn\u2019t part of WCAG 2.2.\n * See https://drafts.csswg.org/css-color-6/#contrast-transparency\n */\nexport function getContrastRatio({\n foregroundColor,\n backgroundColor,\n ambientColor,\n}: {\n foregroundColor: string;\n backgroundColor: string;\n ambientColor?: string;\n}): WCAG2_CONTRAST_RATIO {\n let foregroundColorRgb = !isCSSVariable(foregroundColor)\n ? parseRgb(foregroundColor)\n : undefined;\n let backgroundColorRgb = !isCSSVariable(backgroundColor)\n ? parseRgb(backgroundColor)\n : undefined;\n\n if (!foregroundColorRgb) {\n return NaN as WCAG2_CONTRAST_RATIO;\n }\n if (!backgroundColorRgb) {\n return NaN as WCAG2_CONTRAST_RATIO;\n }\n\n if (\n foregroundColorRgb.alpha !== 1 &&\n foregroundColorRgb.alpha !== undefined\n ) {\n if (\n backgroundColorRgb.alpha !== 1 &&\n backgroundColorRgb.alpha !== undefined\n ) {\n if (!ambientColor) {\n addError(\n 'backgroundColor should have alpha=1 or an ambient color should be set',\n {\n backgroundColor,\n },\n );\n backgroundColorRgb.alpha = 1; // mutate it\n } else {\n const ambientColorRgb = parseRgb(ambientColor);\n if (!ambientColorRgb) {\n throw new Error(`Invalid color: ${ambientColor}`);\n }\n if (\n ambientColorRgb.alpha !== 1 &&\n ambientColorRgb.alpha !== undefined\n ) {\n addError(\n 'When ambient color is used, it needs to have an alpha of 1',\n {\n ambientColor,\n },\n );\n ambientColorRgb.alpha = 1; // mutate it\n }\n backgroundColorRgb = simpleAlphaComposite({\n color: backgroundColorRgb,\n backdropColor: ambientColorRgb,\n });\n }\n }\n foregroundColorRgb = simpleAlphaComposite({\n color: foregroundColorRgb,\n backdropColor: backgroundColorRgb,\n });\n }\n\n const foregroundScore = getBrightness(foregroundColorRgb);\n const backgroundScore = getBrightness(backgroundColorRgb);\n\n const l1 = Math.max(foregroundScore, backgroundScore);\n const l2 = Math.min(foregroundScore, backgroundScore);\n\n return wcag2((l1 + MINIMUM_BRIGHTNESS) / (l2 + MINIMUM_BRIGHTNESS));\n}\n\n/**\n * Returns the appropriate contrasted color for a specific background color\n */\nexport function getContrastedColor(\n backgroundColor: string,\n colorForBrightBackground: string,\n colorForDarkBackground: string,\n): string {\n return !isCSSVariable(backgroundColor) && isBright(backgroundColor)\n ? colorForBrightBackground\n : colorForDarkBackground;\n}\n\ninterface PickContrastedColorOptions {\n /**\n * Reference color, will be used either as a background or as a foreground color (depends on `role` but inverted)\n * when computing the colors from the `choices`\n */\n against: string;\n /** List of possible colors to pick from when choosing the color with the highest contrast compared to the `against` color */\n choices: string[];\n /** If background color(s) are transparent, an `ambientColor` can be set to properly apply color composition */\n ambientColor?: string;\n /** Role of the colors from the possible `choices` */\n role?: 'foreground' | 'background';\n /**\n * When set, the **1st color** matching at least this contrast ratio will be returned.\n * If no choice matches, black & white will be automatically added to the list of choices.\n *\n * If not set, the color with the **highest** contrast will be returned.\n */\n minimumContrastRatio?: WCAG2_CONTRAST_RATIO;\n}\n\nexport function pickContrastedColor(\n args: Omit<PickContrastedColorOptions, 'minimumContrastRatio'>,\n): string;\nexport function pickContrastedColor(\n args: Assign<\n PickContrastedColorOptions,\n { minimumContrastRatio: WCAG2_CONTRAST_RATIO }\n >,\n): string | undefined;\n/**\n * @experimental\n */\nexport function pickContrastedColor({\n against,\n choices,\n ambientColor,\n role = 'foreground',\n minimumContrastRatio = wcag2(0),\n}: PickContrastedColorOptions): string | undefined {\n let colorsToTry = choices;\n if (minimumContrastRatio !== 0) {\n colorsToTry = [\n ...choices,\n // Add our variants for black & white\n getThemeColor('--ui-background', Themes.light),\n getThemeColor('--ui-background', Themes.dark),\n // For extremes, also consider the true black & white\n '#fff',\n '#000',\n ];\n }\n\n let max = 0;\n let savedColor: string | undefined;\n for (const color of colorsToTry) {\n const ratio =\n role === 'foreground'\n ? getContrastRatio({\n foregroundColor: color,\n backgroundColor: against,\n ambientColor,\n })\n : getContrastRatio({\n foregroundColor: against,\n backgroundColor: color,\n ambientColor,\n });\n\n if (ratio >= minimumContrastRatio && ratio > max) {\n if (minimumContrastRatio !== 0) {\n return color;\n }\n\n max = ratio;\n savedColor = color;\n }\n }\n\n if (max !== 0) {\n return savedColor;\n }\n\n addError('Couldn\u2019t find a suitable color for this contrast', {\n against,\n choices,\n ambientColor,\n role,\n minimumContrastRatio,\n });\n\n return;\n}\n", "/**\n * @param {string} cssVar\n * getValueForCSSVar returns the current value for a given CSS \"variable\"\n * (CSS custom property).\n * Examples:\n * getValueForCSSVar('--ui-text') returns \"rgba(28, 43, 52, 0.98)\" in\n * light mode and \"rgba(255, 255, 255, 0.76)\" in dark mode.\n * getValueForCSSVar('--ui-interaction-primary') returns \"#006bc2\" in\n * light mode and \"#579fdd\" in dark mode.\n */\nexport function getValueForCSSVar(\n cssVar: string,\n element: string | HTMLElement = document.body,\n): string {\n return getComputedStyle(\n typeof element === 'string'\n ? document.querySelector(element) || document.body\n : element,\n )\n .getPropertyValue(cssVar)\n .trim(); // trim unwanted trailing whitespaces that come from CSS formatting in devlocal\n}\n", "import classNames from 'classnames';\nimport * as React from 'react';\n\nimport { createLogger } from '#internals/create-logger';\nimport type { MarginProps } from '#lib/components-helpers';\nimport { handleHelpersClassNames } from '#lib/components-helpers';\nimport { useTextContextSize } from '#lib/size/use-text-context-size';\nimport type { SIZES } from '#ui-constants';\n\nimport styles from './loading-indicator.module.css';\n\nconst logger = createLogger('LoadingIndicator', {\n component: 'LoadingIndicator',\n});\n\n// TODO: replace with package detect-browser\nconst isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\nexport interface LoadingIndicatorProps extends MarginProps {\n /** Loading indicator size */\n size?: SIZES | 'inherit';\n /** @experimental Should it have a \u201Cregular\u201D appearance or an AI-specific one? */\n variant?: 'default' | 'ai';\n /** Should we freeze the animation? */\n isAnimated?: boolean;\n /** Extra HTML class attribute(s) to apply */\n className?: string;\n /** Should the LoadingIndicator appear with \u201Cknockout\u201D styling? (For use when it sits atop a colored background.) */\n isKnockout?: boolean;\n /** Delay before displaying the LoadingIndicator (in ms) */\n delay?: 200 | 500;\n}\n\nconst MAX_DURATION = 10000; // 10s\n\n/**\n * Spinner indicating that non-text content is loading\n *\n * [View in DRUIDS style guide \u2197](https://druids.us1.prod.dog/components/misc/LoadingIndicator?ref=jsdoc)\n */\nexport const LoadingIndicator: React.FunctionComponent<\n LoadingIndicatorProps\n> = ({\n size: sizeProp,\n variant = 'default',\n isAnimated = true,\n className,\n isKnockout,\n delay = 0,\n ...marginProps\n}) => {\n const [helperClassNames] = handleHelpersClassNames(marginProps, ['margin']);\n\n const sizeContext = useTextContextSize('md');\n const size = sizeProp || sizeContext;\n\n const hasDelay = delay > 0;\n\n // If the LoadingIndicator is displayed for more than 10s, report an error to DD via RUM\n React.useEffect(() => {\n // Don't log in test environments.\n if (IS_TEST) {\n return;\n }\n // Sample at 5% to reduce log volume\n const shouldSample = Math.random() * 100 < 5;\n if (!shouldSample) {\n return;\n }\n\n const now = Date.now();\n\n const timeoutId = window.setTimeout(() => {\n // Don't use addError on purpose to avoid triggering people's default monitors about errors in their pages\n logger.error('Long loading detected (more than 10s)');\n }, MAX_DURATION);\n\n return () => {\n window.clearTimeout(timeoutId);\n\n const duration = Date.now() - now;\n // Don't log if the duration is less than the max duration.\n if (duration < MAX_DURATION) {\n return;\n }\n // Logging the full duration alongside the error is useful as a way\n // to know how long the loading indicator was displayed for.\n // If this was not logged after an error, that would mean the\n // loading never finished.\n logger.info(\n `LoadingIndicator was displayed for ${duration / 1000}s`,\n {\n duration,\n },\n );\n };\n }, []);\n\n return (\n <div\n className={classNames(\n styles.LoadingIndicator,\n variant !== 'default' && styles[`variant--${variant}`],\n isKnockout && styles.isKnockout,\n hasDelay && styles.hasDelay,\n helperClassNames,\n className,\n )}\n role=\"progressbar\"\n aria-busy=\"true\"\n aria-valuetext=\"Loading\"\n aria-label=\"Loading\"\n style={\n hasDelay\n ? {\n '--loading-indicator-delay': `${delay}ms`,\n }\n : undefined\n }\n >\n <div\n className={classNames(\n styles.Rotating,\n size !== 'inherit' && styles[`Rotating--${size}`],\n !isSafari && isAnimated && styles.isAnimated,\n )}\n >\n <svg\n className={styles.Svg}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 32 32\"\n >\n <path\n className={styles.Background}\n d=\"M16,0C7.16,0,0,7.16,0,16s7.16,16,16,16s16-7.16,16-16S24.84,0,16,0z M16,26.5c-5.799,0-10.5-4.701-10.5-10.5S10.201,5.5,16,5.5S26.5,10.201,26.5,16S21.799,26.5,16,26.5z\"\n />\n <path\n className={classNames(\n styles.Foreground,\n // on safari, having the rotation on the wrapping div causes an issue due to sub-pixels\n // it doesn\u2019t appear when it is applied on this path but it causes a performance issue\n // (as the transform on SVG nodes aren't computed by the GPU but the CPU)\n isSafari && isAnimated && styles.isAnimated,\n )}\n d=\"M16,0v4v1.5c5.799,0,10.5,4.701,10.5,10.5H28h4C32,7.163,24.837,0,16,0z\"\n />\n </svg>\n </div>\n </div>\n );\n};\n", "import classNames from 'classnames';\nimport * as React from 'react';\n\nimport type { MarginProps } from '#lib/components-helpers';\nimport { formattedMaxCount } from '#lib/number/formatted-max-count';\nimport { Text } from '#typography/Text';\n\nimport styles from './feature-status-label.module.css';\n\nconst BLOCK = 'druids_pills_feature-status-label';\n\nexport type FEATURE_STATUSES = 'coming soon' | 'preview' | 'new';\n\ninterface FeatureStatusLabelProps extends MarginProps {\n /** Status of the feature to display in the label @if IS_PRIVATE . Product lifecycle definitions are owned by the Product Ops team; read more on [Confluence](https://datadoghq.atlassian.net/wiki/spaces/PM/pages/3310617880/Updated+Product+Lifecycle+Datadog) @endif */\n status: FEATURE_STATUSES;\n\n /** Should the label appear with \u201Cknockout\u201D styling? (For use when it sits inside a selected/hovered entity that has a colored background.) */\n isKnockout?: boolean;\n\n /** Should the label appear with disabled styling? (For use when it sits inside a disabled entity.) */\n isDisabled?: boolean;\n\n /** Extra HTML class attribute(s) to apply */\n className?: string;\n\n /** The formatted count to show before the status, capped at the `maxCount` */\n count?: number;\n\n /** The maximum `count` that should be rendered before truncating it */\n maxCount?: number;\n}\n\n/**\n * Indicates that a UI element is part of a preview or new feature\n *\n * [View in DRUIDS style guide \u2197](https://druids.us1.prod.dog/components/pills/FeatureStatusLabel?ref=jsdoc)\n */\nexport const FeatureStatusLabel: React.FunctionComponent<\n FeatureStatusLabelProps\n> = ({\n status,\n isKnockout = false,\n isDisabled = false,\n className,\n count,\n maxCount,\n ...marginProps\n}) => (\n <Text\n {...marginProps}\n weight=\"bold\"\n textTransform=\"uppercase\"\n shouldInherit\n size=\"xs\"\n className={classNames(\n BLOCK,\n styles.FeatureStatusLabel,\n isKnockout && styles.isKnockout,\n isDisabled && styles.isDisabled,\n className,\n )}\n >\n {[count && formattedMaxCount(count, maxCount), status]\n .filter((element) => element !== undefined)\n .join(' ')}\n </Text>\n);\n", "export interface FormatterOptions {\n willDiscardTrailingZeros: boolean;\n hasThousandsSeparator: boolean;\n shouldFormatInBinary: boolean;\n}\n\nexport const defaultFormatterOptions: FormatterOptions = {\n willDiscardTrailingZeros: false,\n hasThousandsSeparator: false,\n shouldFormatInBinary: false,\n};\n", "import { addError } from '#internals/rum-agent';\nimport type { FormattedNumberType } from '#lib/number/formatted-number/formatted-number.types';\nimport type { FormatterOptions } from '#lib/number/formatter-options';\nimport { defaultFormatterOptions } from '#lib/number/formatter-options';\n\nconst K = 1000;\nconst KIB = 1024;\n\nconst NBSP = '\\u00a0';\n/**\n * Number formatting using 1000^k metric unit system (or 1024^k binary unit system), support arbitrary prefixes `units`\n * Format any number using compatible prefixes and display always 3 digits\n * @param value number\n * @param reference number\n * @param units is a Map of prefix index to prefix representation\n * @param maxDecimals is a way to truncate the resulting value to only display a given number of decimals (0, 1 or 2)\n */\nexport function formatUnitSystem(\n value: number,\n reference: number = value,\n units: Map<number, string>,\n maxDecimals: 0 | 1 | 2 = 2,\n inOptions?: Partial<FormatterOptions>,\n): FormattedNumberType {\n let normalizedValue = value;\n let normalizedReference = reference;\n\n const {\n willDiscardTrailingZeros,\n hasThousandsSeparator,\n shouldFormatInBinary,\n } = {\n ...defaultFormatterOptions,\n ...inOptions,\n };\n\n // Special \"0\" case, where we want only one digit\n if (normalizedValue === 0) {\n return {\n value: '0',\n unit: units.get(0) || '',\n hasInternalSpace: false,\n };\n }\n\n if (normalizedReference === 0) {\n return {\n value: '0',\n unit: units.get(0) || '',\n hasInternalSpace: false,\n };\n }\n\n const k = shouldFormatInBinary ? KIB : K;\n let unitIndex = Math.floor(\n Math.log(Math.abs(normalizedReference)) / Math.log(k),\n );\n\n if (\n normalizedReference >= K * KIB ** unitIndex &&\n normalizedReference < KIB ** (unitIndex + 1)\n ) {\n // XXX: this is covering values that, once normalized, would have 4 digits\n // e.g. for [1000, 1024[, we want to display 1KiB instead of 1xxxB\n unitIndex++;\n normalizedValue = KIB ** unitIndex;\n normalizedReference = KIB ** unitIndex;\n }\n\n let outOfBound: undefined | 'top' | 'bottom';\n if (!units.has(unitIndex)) {\n const availableIndexes = units.keys();\n if (unitIndex > 0) {\n // We are \"too big\", use the biggest available unit\n unitIndex = Math.max(...availableIndexes);\n outOfBound = 'top';\n } else {\n // We are \"too small\", use the smallest available unit\n unitIndex = Math.min(...availableIndexes);\n outOfBound = 'bottom';\n }\n }\n\n // We also need to update the reference to display the right amount of digits;\n // Useful for bytes as we need to divide by 1024 for instance.\n normalizedReference *= (K / k) ** unitIndex;\n // Number of digits in the integer representation\n const numberDigits =\n Math.floor(Math.log10(Math.abs(normalizedReference))) + 1;\n // Number of decimals to display, computed in a way to always have 3 digits\n let precision = Math.min(maxDecimals, 3 * (1 + unitIndex) - numberDigits);\n\n // If we are outside the bounds of the available prefixes\n // Best-effort display, will probably take more space but at least the value is right\n if (outOfBound) {\n if (outOfBound === 'top') {\n // We are already too big, no need for decimals\n precision = 0;\n } else {\n precision = 3 * (1 + unitIndex) - numberDigits - 2;\n // If we are really too small, switch to a \"< 0.01\" representation\n if (precision > maxDecimals) {\n return {\n value: `<${NBSP}${10 ** (-1 * maxDecimals)}`,\n unit: units.get(unitIndex) || '',\n hasInternalSpace: false,\n };\n }\n }\n }\n\n // Ensure precision is within valid range (0-20) for toLocaleString\n // FIXME: the algotithm above shouldn't be generating negative precision\n if (precision < 0) {\n precision = 0;\n } else if (precision > 20) {\n precision = 20;\n }\n\n const numberResult = normalizedValue / k ** unitIndex;\n let stringResult = numberResult.toFixed(precision);\n\n // To investigate on error `RangeError: minimumFractionDigits value is out of range`\n const logError = (category: string, error: Error) => {\n addError(error, {\n category,\n value: normalizedValue,\n reference: normalizedReference,\n maxDecimals,\n options: inOptions,\n numberResult,\n precision,\n });\n };\n\n if (hasThousandsSeparator) {\n try {\n stringResult = numberResult.toLocaleString('en-US', {\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n });\n } catch (error) {\n logError('hasThousandsSeparator', error);\n\n stringResult = numberResult.toLocaleString('en-US');\n }\n }\n\n if (willDiscardTrailingZeros) {\n try {\n stringResult = numberResult.toLocaleString('en-US', {\n minimumFractionDigits: 0,\n maximumFractionDigits: precision,\n });\n } catch (error) {\n logError('willDiscardTrailingZeros', error);\n\n stringResult = numberResult.toLocaleString('en-US', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n });\n }\n }\n\n return {\n value: stringResult,\n unit: units.get(unitIndex) || '',\n hasInternalSpace: false,\n };\n}\n", "import { formatUnitSystem } from '#lib/number/format-unit-system';\nimport type { FormattedNumberType } from '#lib/number/formatted-number/formatted-number.types';\nimport type { FormatterOptions } from '#lib/number/formatter-options';\nimport { defaultFormatterOptions } from '#lib/number/formatter-options';\n\n// SI unit prefixes\nconst unit = new Map([\n [0, ''],\n [1, 'k'],\n [2, 'M'],\n [3, 'G'],\n [4, 'T'],\n [5, 'P'],\n]);\n\n// format any number using only multiple SI prefixes and displaying always 3 digits\nexport function formatBigFloat(\n value: number,\n reference?: number,\n maxDecimals?: 0 | 1 | 2,\n inOptions?: Partial<FormatterOptions>,\n): FormattedNumberType {\n const options = { ...defaultFormatterOptions, ...inOptions };\n return formatUnitSystem(value, reference, unit, maxDecimals, options);\n}\n", "import { formatUnitSystem } from '#lib/number/format-unit-system';\nimport type { FormattedNumberType } from '#lib/number/formatted-number/formatted-number.types';\n\n// Binary unit prefixes\nconst units = new Map([\n [0, 'B'],\n [1, 'KiB'], // kibibyte\n [2, 'MiB'], // mebibyte\n [3, 'GiB'], // gibibyte\n [4, 'TiB'], // tebibyte\n [5, 'PiB'], // pebibyte\n]);\n\n// format any number using binary prefixes and displaying always 3 digits\nexport function formatByteBinary(\n value: number,\n reference?: number,\n maxDecimals?: 0 | 1 | 2,\n): FormattedNumberType & {\n hasInternalSpace: boolean;\n} {\n return {\n ...formatUnitSystem(value, reference, units, maxDecimals, {\n shouldFormatInBinary: true,\n }),\n hasInternalSpace: true,\n };\n}\n", "import { formatUnitSystem } from '#lib/number/format-unit-system';\nimport type { FormattedNumberType } from '#lib/number/formatted-number/formatted-number.types';\n\n// SI unit prefixes\nconst units = new Map([\n [0, 'B'],\n [1, 'KB'], // kilobytes\n [2, 'MB'], // megabytes\n [3, 'GB'], // gigabytes\n [4, 'TB'], // terabytes\n [5, 'PB'], // petabytes\n]);\n\n// format any number using SI prefixes and displaying always 3 digits\nexport function formatByteDecimal(\n value: number,\n reference?: number,\n maxDecimals?: 0 | 1 | 2,\n): FormattedNumberType & {\n hasInternalSpace: boolean;\n} {\n return {\n ...formatUnitSystem(value, reference, units, maxDecimals),\n hasInternalSpace: true,\n };\n}\n", "import { formatUnitSystem } from '#lib/number/format-unit-system';\nimport type { FormattedNumberType } from '#lib/number/formatted-number/formatted-number.types';\nimport type { FormatterOptions } from '#lib/number/formatter-options';\nimport { defaultFormatterOptions } from '#lib/number/formatter-options';\n\n// nanoseconds multiplier units\nconst units = new Map([\n [0, 'ns'],\n [1, '\u03BCs'],\n [2, 'ms'],\n [3, 's'],\n]);\n\nconst MINUTE_NS = 60 * 1e9;\nconst HOUR_NS = 60 * MINUTE_NS;\nconst DAY_NS = 24 * HOUR_NS;\nconst MONTH_NS = 30 * DAY_NS;\nconst YEAR_NS = 365 * DAY_NS;\n\n// format duration, if you pass reference, the formatting will be done according to its value\nexport function formatDuration(\n value: number,\n reference?: number,\n maxDecimals: 0 | 1 | 2 = 2,\n inOptions?: Partial<FormatterOptions>,\n): FormattedNumberType[] {\n const options = { ...defaultFormatterOptions, ...inOptions };\n const { willDiscardTrailingZeros } = options;\n\n let ref = reference;\n if (ref === undefined) {\n ref = value;\n }\n\n // Standard metric formatting for short durations\n if (ref < MINUTE_NS) {\n return [\n {\n ...formatUnitSystem(value, ref, units, maxDecimals, options),\n hasInternalSpace: false,\n },\n ];\n }\n\n let remainder = value;\n\n // Above, use more natural minutes and hours\n const years = remainder / YEAR_NS;\n if (years > 1) {\n remainder -= years * YEAR_NS;\n }\n\n const months = remainder / MONTH_NS;\n if (months > 1) {\n remainder -= months * MONTH_NS;\n }\n\n const days = remainder / DAY_NS;\n if (days > 1) {\n remainder -= days * DAY_NS;\n }\n\n const hours = Math.floor(remainder / HOUR_NS);\n remainder -= hours * HOUR_NS;\n const minutes = Math.floor(remainder / MINUTE_NS);\n remainder -= minutes * MINUTE_NS;\n const seconds = Math.floor(remainder / 1e9);\n\n if (ref < HOUR_NS) {\n if (seconds === 0 && willDiscardTrailingZeros) {\n return [\n { value: `${minutes}`, unit: 'm', hasInternalSpace: false },\n ];\n } else {\n return [\n { value: `${minutes}`, unit: 'm', hasInternalSpace: false },\n { value: `${seconds}`, unit: 's', hasInternalSpace: false },\n ];\n }\n }\n if (ref < DAY_NS) {\n if (minutes === 0 && willDiscardTrailingZeros) {\n return [{ value: `${hours}`, unit: 'h', hasInternalSpace: false }];\n } else {\n return [\n { value: `${hours}`, unit: 'h', hasInternalSpace: false },\n { value: `${minutes}`, unit: 'm', hasInternalSpace: false },\n ];\n }\n }\n if (ref < MONTH_NS) {\n return [{ value: days.toFixed(1), unit: 'd', hasInternalSpace: false }];\n }\n if (ref < YEAR_NS) {\n return [\n { value: months.toFixed(1), unit: 'mo', hasInternalSpace: false },\n ];\n }\n return [{ value: years.toFixed(1), unit: 'y', hasInternalSpace: false }];\n}\n", "import { formatUnitSystem } from '#lib/number/format-unit-system';\nimport type { FormattedNumberType } from '#lib/number/formatted-number/formatted-number.types';\nimport type { FormatterOptions } from '#lib/number/formatter-options';\nimport { defaultFormatterOptions } from '#lib/number/formatter-options';\n\n// SI unit prefixes\nconst units = new Map([\n [-4, 'p'],\n [-3, 'n'],\n [-2, '\u03BC'],\n [-1, 'm'],\n [0, ''],\n [1, 'k'],\n [2, 'M'],\n [3, 'G'],\n [4, 'T'],\n [5, 'P'],\n]);\n\n// format any number using SI prefixes and displaying always 3 digits\nexport function formatFloat(\n value: number,\n reference?: number,\n maxDecimals?: 0 | 1 | 2,\n inOptions?: Partial<FormatterOptions>,\n): FormattedNumberType & {\n hasInternalSpace: boolean;\n} {\n const options = { ...defaultFormatterOptions, ...inOptions };\n return formatUnitSystem(value, reference, units, maxDecimals, options);\n}\n", "import { formatUnitSystem } from '#lib/number/format-unit-system';\nimport type { FormattedNumberType } from '#lib/number/formatted-number/formatted-number.types';\nimport type { FormatterOptions } from '#lib/number/formatter-options';\n\n// SI unit prefixes\nconst units = new Map([\n [-4, 'p'],\n [-3, 'n'],\n [-2, '\u03BC'],\n [-1, 'm'],\n [0, ''],\n [1, 'K'], // k thousands\n [2, 'M'], // M millions\n [3, 'B'], // B billions\n [4, 'T'], // T trillions\n [5, 'Q'], // Q quadrillions\n]);\n\n// format any number using SI prefixes and displaying always 3 digits\nexport function formatHuman(\n value: number,\n reference?: number,\n maxDecimals?: 0 | 1 | 2,\n inOptions?: Partial<FormatterOptions>,\n): FormattedNumberType {\n const options = { ...inOptions, hasThousandsSeparator: true };\n return formatUnitSystem(value, reference, units, maxDecimals, options);\n}\n", "import { formatFloat } from '#lib/number/format-float';\nimport type { FormatterOptions } from '#lib/number/formatter-options';\nimport { defaultFormatterOptions } from '#lib/number/formatter-options';\n\n// Format integer by grouping them\nexport function formatInteger(\n value: number,\n reference?: number,\n maxDecimals?: 0 | 1 | 2,\n inOptions?: Partial<FormatterOptions>,\n): ReturnType<typeof formatFloat> {\n const options = { ...defaultFormatterOptions, ...inOptions };\n let ref = reference === undefined ? value : reference;\n\n // As an integer, the minimal precision has to be no decimal under 1 (ie. the formatting of 1e2)\n ref = Math.max(1e2, Math.abs(ref));\n\n return formatFloat(value, ref, maxDecimals, options);\n}\n", "import { createLogger } from '#internals/create-logger';\nimport type { FormattedNumberType } from '#lib/number/formatted-number/formatted-number.types';\n\nconst NBSP = '\\u00a0';\n\nconst logger = createLogger('formatRate()');\n\n/**\n * Nicely format a value as a percentage\n * @param value a ratio (0.2 === 20%)\n * @param reference\n * @param willDiscardTrailingZeros if true, trailing zeros will be discarded\n */\nexport function formatRate(\n value: number,\n maxDecimals: 0 | 1 | 2 = 2,\n willDiscardTrailingZeros: boolean = false,\n): FormattedNumberType {\n // No space between value and percent sign. https://en.m.wikipedia.org/wiki/Percent_sign#Spacing\n const hasInternalSpace = false;\n\n const p = 100 * value;\n if (value === 0) {\n return { value: '0', unit: '%', hasInternalSpace };\n }\n if (value <= 1.0005 && value >= 0.9995) {\n return { value: '100', unit: '%', hasInternalSpace };\n }\n\n // Helper to format the value with optional trailing zero removal\n const formatValue = (val: number, decimals: number): string => {\n let stringResult = val.toFixed(decimals);\n if (willDiscardTrailingZeros) {\n try {\n stringResult = val.toLocaleString('en-US', {\n minimumFractionDigits: 0,\n maximumFractionDigits: decimals,\n });\n } catch (error) {\n logger.error('Failed to discard trailing zeros', {\n error,\n value: stringResult,\n });\n\n stringResult = val.toLocaleString('en-US', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n });\n }\n }\n\n return stringResult;\n };\n\n if (value >= 0.1) {\n return {\n value: formatValue(p, Math.min(1, maxDecimals)),\n unit: '%',\n hasInternalSpace,\n };\n }\n if (value >= 0.01) {\n return {\n value: formatValue(p, Math.min(2, maxDecimals)),\n unit: '%',\n hasInternalSpace,\n };\n }\n if (maxDecimals === 0) {\n return { value: `<${NBSP}1`, unit: '%', hasInternalSpace };\n }\n if (value >= 0.001) {\n return {\n value: formatValue(p, Math.min(2, maxDecimals)),\n unit: '%',\n hasInternalSpace,\n };\n }\n\n return { value: `<${NBSP}0.1`, unit: '%', hasInternalSpace };\n}\n", "import { formatBigFloat } from '#lib/number/format-big-float';\nimport { formatByteBinary } from '#lib/number/format-byte-binary';\nimport { formatByteDecimal } from '#lib/number/format-byte-decimal';\nimport { formatDuration } from '#lib/number/format-duration';\nimport { formatFloat } from '#lib/number/format-float';\nimport { formatHuman } from '#lib/number/format-human';\nimport { formatInteger } from '#lib/number/format-integer';\nimport { formatRate } from '#lib/number/format-rate';\nimport type { FormattedNumberType } from '#lib/number/formatted-number/formatted-number.types';\nimport type { FormatterOptions } from '#lib/number/formatter-options';\nimport { defaultFormatterOptions } from '#lib/number/formatter-options';\n\n/**\n * Wrap results in a `Formatted` class, allowing to distinguish value from unit\n * Prefer the usage of FormattedNumber when possible, since a `Formatted` instance isn't a valid React element\n */\nexport type FormatTypes =\n | 'human'\n | 'integer'\n | 'float'\n | 'bigFloat'\n | 'duration'\n | 'rate'\n | 'byte'\n | 'byteDecimal';\n\n/**\n * formatNumber help formatting numbers consistently\n * it returns an array of FormattedNumberType [{value: number, unit:string} , ...]\n * e.g.,\n * \u2022 4min 27sec will be served [{value: 4, unit: 'min'}, {value: 27, unit:'sec'}]\n *\n * @param type Number type to format to\n * @param value The value to convert\n * @param ref The reference value - if given, `value` will be formatted as the reference would.\n * @param maxDecimals 0, 1, 2\n * @param options {\n * *** - willDiscardTrailingZeros will forcefully remove 0 and the decimal separator if trailing.\n * This option is meant to be used for graphing, or in non tabular view as it will change the number of character of the output.\n * Ex:\n * '10.0s' => '10s'\n * '2.50s' => '2.5s'\n * '3.00s' => '3s'\n *\n * @returns {FormattedNumberType[]} to give to formatted-number-to-string\n */\n\nexport function formatNumber(\n type: FormatTypes,\n value: number,\n ref?: number,\n maxDecimals?: 0 | 1 | 2,\n inOptions?: Partial<FormatterOptions>,\n): FormattedNumberType[] {\n const options = { ...defaultFormatterOptions, ...inOptions };\n\n switch (type) {\n case 'human':\n return [formatHuman(value, ref, maxDecimals, inOptions)];\n\n case 'byte':\n return [formatByteBinary(value, ref, maxDecimals)];\n\n case 'byteDecimal':\n return [formatByteDecimal(value, ref, maxDecimals)];\n\n case 'integer':\n return [formatInteger(value, ref, maxDecimals, options)];\n\n case 'float':\n return [formatFloat(value, ref, maxDecimals, options)];\n\n case 'bigFloat':\n return [formatBigFloat(value, ref, maxDecimals, options)];\n\n case 'duration':\n return formatDuration(value, ref, maxDecimals, options);\n\n case 'rate':\n return [\n formatRate(\n value,\n maxDecimals,\n options.willDiscardTrailingZeros,\n ),\n ];\n }\n}\n", "import { formatNumber } from '#lib/number/format-number';\nimport type { FormattedNumberType } from '#lib/number/formatted-number/formatted-number.types';\n\nexport const DEFAULT_MAX_COUNT = 99;\n\n/**\n * Generate a formatted count value with unit and plus sign if max count value is surpassed\n * @param count The current count to be formatted\n * @param maxCount The amount at which the count should be capped\n * @returns Formatted string with count value, unit, and conditional plus sign\n */\nexport const formattedMaxCount = (\n count = 0,\n maxCount: number = DEFAULT_MAX_COUNT,\n maxDecimals?: 0 | 1 | 2,\n): string => {\n const isMaxCountSurpassed = count > maxCount;\n const [formattedData] = formatNumber(\n 'integer',\n Math.min(count, maxCount),\n undefined,\n maxDecimals,\n ) as [FormattedNumberType];\n return `${formattedData.value}${formattedData.unit}${\n isMaxCountSurpassed ? '+' : ''\n }`;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["require_Case", "__commonJSMin", "exports", "module", "unicodes", "s", "prefix", "basicSymbols", "baseLowerCase", "baseUpperCase", "improperInTitle", "regexps", "symbols", "lowers", "uppers", "impropers", "re", "_", "fill", "deapostrophe", "m", "next", "pascal", "upper", "holey", "before", "acronym", "caps", "Case", "i", "l", "type", "fn", "types", "border", "letter", "small", "p", "names", "abbreviations", "prelude", "name", "abbr", "abbrAndSpace", "define", "require_classnames", "__commonJSMin", "exports", "module", "hasOwn", "nativeCodeString", "classNames", "classes", "i", "arg", "argType", "inner", "key", "require_react_fast_compare", "__commonJSMin", "exports", "module", "hasElementType", "hasMap", "hasSet", "hasArrayBuffer", "equal", "a", "b", "length", "i", "keys", "it", "error", "require_isArray", "__commonJSMin", "exports", "module", "isArray", "require_trimmedEndIndex", "__commonJSMin", "exports", "module", "reWhitespace", "trimmedEndIndex", "string", "index", "require_baseTrim", "__commonJSMin", "exports", "module", "trimmedEndIndex", "reTrimStart", "baseTrim", "string", "require_isObject", "__commonJSMin", "exports", "module", "isObject", "value", "type", "require_freeGlobal", "__commonJSMin", "exports", "module", "freeGlobal", "require_root", "__commonJSMin", "exports", "module", "freeGlobal", "freeSelf", "root", "require_Symbol", "__commonJSMin", "exports", "module", "root", "Symbol", "require_getRawTag", "__commonJSMin", "exports", "module", "Symbol", "objectProto", "hasOwnProperty", "nativeObjectToString", "symToStringTag", "getRawTag", "value", "isOwn", "tag", "unmasked", "result", "require_objectToString", "__commonJSMin", "exports", "module", "objectProto", "nativeObjectToString", "objectToString", "value", "require_baseGetTag", "__commonJSMin", "exports", "module", "Symbol", "getRawTag", "objectToString", "nullTag", "undefinedTag", "symToStringTag", "baseGetTag", "value", "require_isObjectLike", "__commonJSMin", "exports", "module", "isObjectLike", "value", "require_isSymbol", "__commonJSMin", "exports", "module", "baseGetTag", "isObjectLike", "symbolTag", "isSymbol", "value", "require_toNumber", "__commonJSMin", "exports", "module", "baseTrim", "isObject", "isSymbol", "NAN", "reIsBadHex", "reIsBinary", "reIsOctal", "freeParseInt", "toNumber", "value", "other", "isBinary", "require_toFinite", "__commonJSMin", "exports", "module", "toNumber", "INFINITY", "MAX_INTEGER", "toFinite", "value", "sign", "require_toInteger", "__commonJSMin", "exports", "module", "toFinite", "toInteger", "value", "result", "remainder", "require_before", "__commonJSMin", "exports", "module", "toInteger", "FUNC_ERROR_TEXT", "before", "n", "func", "result", "require_once", "__commonJSMin", "exports", "module", "before", "once", "func", "require_react_is_production_min", "__commonJSMin", "exports", "b", "c", "d", "e", "f", "g", "h", "k", "l", "m", "n", "p", "q", "t", "u", "v", "a", "r", "require_react_is", "__commonJSMin", "exports", "module", "require_horizontal_separator", "__commonJSMin", "require_detect_browser", "__commonJSMin", "exports", "__spreadArrays", "s", "i", "il", "r", "k", "a", "j", "jl", "BrowserInfo", "name", "version", "os", "NodeInfo", "BotInfo", "SEARCHBOX_UA_REGEX", "SEARCHBOT_OS_REGEX", "REQUIRED_VERSION_PARTS", "userAgentRules", "operatingSystemRules", "detect", "userAgent", "parseUserAgent", "getNodeVersion", "ua", "matchedRule", "matched", "_a", "browser", "regex", "uaMatch", "match", "versionParts", "createVersionParts", "detectOS", "ii", "count", "isNode", "output", "require_keycap", "__commonJSMin", "require_keyboard_shortcut", "__commonJSMin", "require_loading_indicator", "__commonJSMin", "require_feature_status_label", "__commonJSMin", "import_case", "import_classnames", "React", "MapShim", "getIndex", "arr", "key", "result", "entry", "index", "class_1", "value", "entries", "callback", "ctx", "_i", "_a", "isBrowser", "global$1", "requestAnimationFrame$1", "trailingTimeout", "throttle", "delay", "leadingCall", "trailingCall", "lastCallTime", "resolvePending", "proxy", "timeoutCallback", "timeStamp", "REFRESH_DELAY", "transitionKeys", "mutationObserverSupported", "ResizeObserverController", "observer", "observers", "changesDetected", "activeObservers", "_b", "propertyName", "isReflowProperty", "defineConfigurable", "target", "props", "getWindowOf", "ownerGlobal", "emptyRect", "createRectInit", "toFloat", "getBordersSize", "styles", "positions", "size", "position", "getPaddings", "paddings", "positions_1", "getSVGContentRect", "bbox", "getHTMLElementContentRect", "clientWidth", "clientHeight", "horizPad", "vertPad", "width", "height", "isDocumentElement", "vertScrollbar", "horizScrollbar", "isSVGGraphicsElement", "getContentRect", "createReadOnlyRect", "x", "y", "Constr", "rect", "ResizeObservation", "ResizeObserverEntry", "rectInit", "contentRect", "ResizeObserverSPI", "controller", "callbackCtx", "observations", "_this", "observation", "ResizeObserver", "method", "ResizeObserver_es_default", "import_react_fast_compare", "useMemo", "useRef", "useDeepMemo", "value", "previousValueRef", "previousValue", "isEqual", "top", "bottom", "right", "left", "auto", "basePlacements", "start", "end", "clippingParents", "viewport", "popper", "reference", "variationPlacements", "acc", "placement", "placements", "beforeRead", "read", "afterRead", "beforeMain", "main", "afterMain", "beforeWrite", "write", "afterWrite", "modifierPhases", "getNodeName", "element", "getWindow", "node", "ownerDocument", "isElement", "node", "OwnElement", "getWindow", "isHTMLElement", "isShadowRoot", "applyStyles", "_ref", "state", "name", "style", "attributes", "element", "isHTMLElement", "getNodeName", "value", "effect", "_ref2", "initialStyles", "styleProperties", "property", "attribute", "applyStyles_default", "getBasePlacement", "placement", "max", "min", "round", "getUAString", "uaData", "item", "isLayoutViewport", "getUAString", "getBoundingClientRect", "element", "includeScale", "isFixedStrategy", "clientRect", "scaleX", "scaleY", "isHTMLElement", "round", "_ref", "isElement", "getWindow", "visualViewport", "addVisualOffsets", "isLayoutViewport", "x", "y", "width", "height", "getLayoutRect", "element", "clientRect", "getBoundingClientRect", "width", "height", "contains", "parent", "child", "rootNode", "isShadowRoot", "next", "getComputedStyle", "element", "getWindow", "isTableElement", "element", "getNodeName", "getDocumentElement", "element", "isElement", "getParentNode", "element", "getNodeName", "isShadowRoot", "getDocumentElement", "getTrueOffsetParent", "element", "isHTMLElement", "getComputedStyle", "getContainingBlock", "isFirefox", "getUAString", "isIE", "elementCss", "currentNode", "getParentNode", "isShadowRoot", "getNodeName", "css", "getOffsetParent", "window", "getWindow", "offsetParent", "isTableElement", "getMainAxisFromPlacement", "placement", "within", "min", "value", "max", "withinMaxClamp", "v", "getFreshSideObject", "mergePaddingObject", "paddingObject", "getFreshSideObject", "expandToHashMap", "value", "keys", "hashMap", "key", "toPaddingObject", "padding", "state", "mergePaddingObject", "expandToHashMap", "basePlacements", "arrow", "_ref", "_state$modifiersData$", "name", "options", "arrowElement", "popperOffsets", "basePlacement", "getBasePlacement", "axis", "getMainAxisFromPlacement", "isVertical", "left", "right", "len", "paddingObject", "arrowRect", "getLayoutRect", "minProp", "top", "maxProp", "bottom", "endDiff", "startDiff", "arrowOffsetParent", "getOffsetParent", "clientSize", "centerToReference", "min", "max", "center", "offset", "within", "axisProp", "effect", "_ref2", "_options$element", "contains", "arrow_default", "getVariation", "placement", "unsetSides", "roundOffsetsByDPR", "_ref", "win", "x", "y", "dpr", "round", "mapToStyles", "_ref2", "_Object$assign2", "popper", "popperRect", "placement", "variation", "offsets", "position", "gpuAcceleration", "adaptive", "roundOffsets", "isFixed", "_offsets$x", "_offsets$y", "_ref3", "hasX", "hasY", "sideX", "left", "sideY", "top", "offsetParent", "getOffsetParent", "heightProp", "widthProp", "getWindow", "getDocumentElement", "getComputedStyle", "right", "end", "bottom", "offsetY", "offsetX", "commonStyles", "_ref4", "_Object$assign", "computeStyles", "_ref5", "state", "options", "_options$gpuAccelerat", "_options$adaptive", "_options$roundOffsets", "getBasePlacement", "getVariation", "computeStyles_default", "passive", "effect", "_ref", "state", "instance", "options", "_options$scroll", "scroll", "_options$resize", "resize", "window", "getWindow", "scrollParents", "scrollParent", "eventListeners_default", "hash", "getOppositePlacement", "placement", "matched", "hash", "getOppositeVariationPlacement", "placement", "matched", "getWindowScroll", "node", "win", "getWindow", "scrollLeft", "scrollTop", "getWindowScrollBarX", "element", "getBoundingClientRect", "getDocumentElement", "getWindowScroll", "getViewportRect", "element", "strategy", "win", "getWindow", "html", "getDocumentElement", "visualViewport", "width", "height", "x", "y", "layoutViewport", "isLayoutViewport", "getWindowScrollBarX", "getDocumentRect", "element", "_element$ownerDocumen", "html", "getDocumentElement", "winScroll", "getWindowScroll", "body", "width", "max", "height", "x", "getWindowScrollBarX", "y", "getComputedStyle", "isScrollParent", "element", "_getComputedStyle", "getComputedStyle", "overflow", "overflowX", "overflowY", "getScrollParent", "node", "getNodeName", "isHTMLElement", "isScrollParent", "getParentNode", "listScrollParents", "element", "list", "_element$ownerDocumen", "scrollParent", "getScrollParent", "isBody", "win", "getWindow", "target", "isScrollParent", "updatedList", "getParentNode", "rectToClientRect", "rect", "getInnerBoundingClientRect", "element", "strategy", "rect", "getBoundingClientRect", "getClientRectFromMixedType", "clippingParent", "viewport", "rectToClientRect", "getViewportRect", "isElement", "getDocumentRect", "getDocumentElement", "getClippingParents", "clippingParents", "listScrollParents", "getParentNode", "canEscapeClipping", "getComputedStyle", "clipperElement", "isHTMLElement", "getOffsetParent", "contains", "getNodeName", "getClippingRect", "boundary", "rootBoundary", "mainClippingParents", "firstClippingParent", "clippingRect", "accRect", "max", "min", "computeOffsets", "_ref", "reference", "element", "placement", "basePlacement", "getBasePlacement", "variation", "getVariation", "commonX", "commonY", "offsets", "top", "bottom", "right", "left", "mainAxis", "getMainAxisFromPlacement", "len", "start", "end", "detectOverflow", "state", "options", "_options", "_options$placement", "placement", "_options$strategy", "strategy", "_options$boundary", "boundary", "clippingParents", "_options$rootBoundary", "rootBoundary", "viewport", "_options$elementConte", "elementContext", "popper", "_options$altBoundary", "altBoundary", "_options$padding", "padding", "paddingObject", "mergePaddingObject", "expandToHashMap", "basePlacements", "altContext", "reference", "popperRect", "element", "clippingClientRect", "getClippingRect", "isElement", "getDocumentElement", "referenceClientRect", "getBoundingClientRect", "popperOffsets", "computeOffsets", "popperClientRect", "rectToClientRect", "elementClientRect", "overflowOffsets", "offsetData", "offset", "key", "multiply", "right", "bottom", "axis", "top", "computeAutoPlacement", "state", "options", "_options", "placement", "boundary", "rootBoundary", "padding", "flipVariations", "_options$allowedAutoP", "allowedAutoPlacements", "placements", "variation", "getVariation", "variationPlacements", "basePlacements", "allowedPlacements", "overflows", "acc", "detectOverflow", "getBasePlacement", "a", "b", "getExpandedFallbackPlacements", "placement", "getBasePlacement", "auto", "oppositePlacement", "getOppositePlacement", "getOppositeVariationPlacement", "flip", "_ref", "state", "options", "name", "_options$mainAxis", "checkMainAxis", "_options$altAxis", "checkAltAxis", "specifiedFallbackPlacements", "padding", "boundary", "rootBoundary", "altBoundary", "_options$flipVariatio", "flipVariations", "allowedAutoPlacements", "preferredPlacement", "basePlacement", "isBasePlacement", "fallbackPlacements", "placements", "acc", "computeAutoPlacement", "referenceRect", "popperRect", "checksMap", "makeFallbackChecks", "firstFittingPlacement", "i", "_basePlacement", "isStartVariation", "getVariation", "start", "isVertical", "top", "bottom", "len", "overflow", "detectOverflow", "mainVariationSide", "right", "left", "altVariationSide", "checks", "check", "numberOfChecks", "_loop", "_i", "fittingPlacement", "_ret", "flip_default", "getSideOffsets", "overflow", "rect", "preventedOffsets", "isAnySideFullyClipped", "top", "right", "bottom", "left", "side", "hide", "_ref", "state", "name", "referenceRect", "popperRect", "referenceOverflow", "detectOverflow", "popperAltOverflow", "referenceClippingOffsets", "popperEscapeOffsets", "isReferenceHidden", "hasPopperEscaped", "hide_default", "distanceAndSkiddingToXY", "placement", "rects", "offset", "basePlacement", "getBasePlacement", "invertDistance", "left", "top", "_ref", "skidding", "distance", "right", "_ref2", "state", "options", "name", "_options$offset", "data", "placements", "acc", "_data$state$placement", "x", "y", "offset_default", "popperOffsets", "_ref", "state", "name", "computeOffsets", "popperOffsets_default", "getAltAxis", "axis", "preventOverflow", "_ref", "state", "options", "name", "_options$mainAxis", "checkMainAxis", "_options$altAxis", "checkAltAxis", "boundary", "rootBoundary", "altBoundary", "padding", "_options$tether", "tether", "_options$tetherOffset", "tetherOffset", "overflow", "detectOverflow", "basePlacement", "getBasePlacement", "variation", "getVariation", "isBasePlacement", "mainAxis", "getMainAxisFromPlacement", "altAxis", "getAltAxis", "popperOffsets", "referenceRect", "popperRect", "tetherOffsetValue", "normalizedTetherOffsetValue", "offsetModifierState", "data", "_offsetModifierState$", "mainSide", "top", "left", "altSide", "bottom", "right", "len", "offset", "min", "max", "additive", "minLen", "start", "maxLen", "arrowElement", "arrowRect", "getLayoutRect", "arrowPaddingObject", "getFreshSideObject", "arrowPaddingMin", "arrowPaddingMax", "arrowLen", "within", "minOffset", "maxOffset", "arrowOffsetParent", "getOffsetParent", "clientOffset", "offsetModifierValue", "tetherMin", "tetherMax", "preventedOffset", "_offsetModifierState$2", "_mainSide", "_altSide", "_offset", "_len", "_min", "_max", "isOriginSide", "_offsetModifierValue", "_tetherMin", "_tetherMax", "_preventedOffset", "withinMaxClamp", "preventOverflow_default", "getHTMLElementScroll", "element", "getNodeScroll", "node", "getWindow", "isHTMLElement", "getWindowScroll", "getHTMLElementScroll", "isElementScaled", "element", "rect", "scaleX", "round", "scaleY", "getCompositeRect", "elementOrVirtualElement", "offsetParent", "isFixed", "isOffsetParentAnElement", "isHTMLElement", "offsetParentIsScaled", "documentElement", "getDocumentElement", "getBoundingClientRect", "scroll", "offsets", "getNodeName", "isScrollParent", "getNodeScroll", "getWindowScrollBarX", "order", "modifiers", "map", "visited", "result", "modifier", "sort", "requires", "dep", "depModifier", "orderModifiers", "orderedModifiers", "modifierPhases", "acc", "phase", "debounce", "fn", "pending", "resolve", "mergeByName", "modifiers", "merged", "current", "existing", "key", "DEFAULT_OPTIONS", "areValidElements", "_len", "args", "_key", "element", "popperGenerator", "generatorOptions", "_generatorOptions", "_generatorOptions$def", "defaultModifiers", "_generatorOptions$def2", "defaultOptions", "reference", "popper", "options", "state", "effectCleanupFns", "isDestroyed", "instance", "setOptionsAction", "cleanupModifierEffects", "isElement", "listScrollParents", "orderedModifiers", "orderModifiers", "mergeByName", "m", "runModifierEffects", "_state$elements", "getCompositeRect", "getOffsetParent", "getLayoutRect", "modifier", "index", "_state$orderedModifie", "fn", "_state$orderedModifie2", "_options", "name", "debounce", "resolve", "_ref", "_ref$options", "effect", "cleanupFn", "noopFn", "defaultModifiers", "eventListeners_default", "popperOffsets_default", "computeStyles_default", "applyStyles_default", "offset_default", "flip_default", "preventOverflow_default", "arrow_default", "hide_default", "createPopper", "popperGenerator", "BOX_CLASS", "CONTENT_CLASS", "BACKDROP_CLASS", "ARROW_CLASS", "SVG_ARROW_CLASS", "TOUCH_OPTIONS", "passive", "capture", "TIPPY_DEFAULT_APPEND_TO", "document", "body", "getValueAtIndexOrReturn", "value", "index", "defaultValue", "Array", "isArray", "v", "isType", "type", "str", "toString", "call", "indexOf", "invokeWithArgsOrReturn", "args", "debounce", "fn", "ms", "timeout", "arg", "clearTimeout", "setTimeout", "splitBySpaces", "value", "split", "filter", "Boolean", "normalizeToArray", "concat", "pushIfUnique", "arr", "indexOf", "push", "unique", "item", "index", "getBasePlacement", "placement", "arrayFrom", "slice", "call", "removeUndefinedProps", "obj", "Object", "keys", "reduce", "acc", "key", "undefined", "div", "document", "createElement", "isElement", "some", "type", "isType", "isNodeList", "isMouseEvent", "isReferenceElement", "_tippy", "reference", "getArrayOfElements", "Array", "isArray", "querySelectorAll", "setTransitionDuration", "els", "forEach", "el", "style", "transitionDuration", "setVisibilityState", "state", "setAttribute", "getOwnerDocument", "elementOrElements", "_element$ownerDocumen", "_normalizeToArray", "element", "ownerDocument", "body", "isCursorOutsideInteractiveBorder", "popperTreeData", "event", "clientX", "clientY", "every", "_ref", "popperRect", "popperState", "props", "interactiveBorder", "basePlacement", "offsetData", "modifiersData", "offset", "topDistance", "top", "y", "bottomDistance", "bottom", "leftDistance", "left", "x", "rightDistance", "right", "exceedsTop", "exceedsBottom", "exceedsLeft", "exceedsRight", "updateTransitionEndListener", "box", "action", "listener", "method", "actualContains", "parent", "child", "target", "_target$getRootNode", "contains", "getRootNode", "host", "currentInput", "isTouch", "lastMouseMoveTime", "onDocumentTouchStart", "window", "performance", "addEventListener", "onDocumentMouseMove", "now", "removeEventListener", "onWindowBlur", "activeElement", "instance", "blur", "isVisible", "bindGlobalEventListeners", "TOUCH_OPTIONS", "isBrowser", "isIE11", "msCrypto", "pluginProps", "animateFill", "followCursor", "inlinePositioning", "sticky", "renderProps", "allowHTML", "animation", "arrow", "content", "inertia", "maxWidth", "role", "theme", "zIndex", "defaultProps", "appendTo", "TIPPY_DEFAULT_APPEND_TO", "aria", "expanded", "delay", "duration", "getReferenceClientRect", "hideOnClick", "ignoreAttributes", "interactive", "interactiveBorder", "interactiveDebounce", "moveTransition", "offset", "onAfterUpdate", "onBeforeUpdate", "onCreate", "onDestroy", "onHidden", "onHide", "onMount", "onShow", "onShown", "onTrigger", "onUntrigger", "onClickOutside", "placement", "plugins", "popperOptions", "render", "showOnCreate", "touch", "trigger", "triggerTarget", "defaultKeys", "Object", "keys", "setDefaultProps", "partialProps", "forEach", "key", "getExtendedPassedProps", "passedProps", "reduce", "acc", "plugin", "name", "defaultValue", "_name", "undefined", "getDataAttributeProps", "reference", "propKeys", "props", "valueAsString", "getAttribute", "trim", "JSON", "parse", "evaluateProps", "out", "invokeWithArgsOrReturn", "innerHTML", "dangerouslySetInnerHTML", "element", "html", "createArrowElement", "value", "arrow", "div", "className", "ARROW_CLASS", "SVG_ARROW_CLASS", "isElement", "appendChild", "setContent", "content", "props", "allowHTML", "textContent", "getChildren", "popper", "box", "firstElementChild", "boxChildren", "arrayFrom", "children", "find", "node", "classList", "contains", "CONTENT_CLASS", "backdrop", "BACKDROP_CLASS", "render", "instance", "BOX_CLASS", "setAttribute", "onUpdate", "prevProps", "nextProps", "_getChildren", "theme", "removeAttribute", "animation", "inertia", "style", "maxWidth", "role", "removeChild", "$$tippy", "idCounter", "mouseMoveListeners", "mountedInstances", "createTippy", "reference", "passedProps", "evaluateProps", "defaultProps", "getExtendedPassedProps", "removeUndefinedProps", "showTimeout", "hideTimeout", "scheduleHideAnimationFrame", "isVisibleFromClick", "didHideDueToDocumentMouseDown", "didTouchMove", "ignoreOnFirstUpdate", "lastTriggerEvent", "currentTransitionEndListener", "onFirstUpdate", "listeners", "debouncedOnMouseMove", "debounce", "onMouseMove", "interactiveDebounce", "currentTarget", "id", "popperInstance", "plugins", "unique", "state", "isEnabled", "isVisible", "isDestroyed", "isMounted", "isShown", "clearDelayTimeouts", "setProps", "show", "hide", "hideWithInteractivity", "enable", "disable", "unmount", "destroy", "_props$render", "_tippy", "pluginsHooks", "map", "plugin", "fn", "hasAriaExpanded", "hasAttribute", "addListeners", "handleAriaExpandedAttribute", "handleStyles", "invokeHook", "showOnCreate", "scheduleShow", "addEventListener", "interactive", "trigger", "indexOf", "getDocument", "getNormalizedTouchSettings", "touch", "Array", "isArray", "getIsCustomTouchBehavior", "getIsDefaultRenderFn", "_instance$props$rende", "getCurrentTarget", "parent", "parentNode", "getOwnerDocument", "document", "getDefaultTemplateChildren", "getDelay", "isShow", "currentInput", "isTouch", "type", "getValueAtIndexOrReturn", "delay", "fromHide", "pointerEvents", "zIndex", "hook", "args", "shouldInvokePropsHook", "forEach", "pluginHooks", "_instance$props", "handleAriaContentAttribute", "aria", "attr", "nodes", "normalizeToArray", "triggerTarget", "currentValue", "getAttribute", "nextValue", "replace", "trim", "expanded", "cleanupInteractiveMouseListeners", "removeEventListener", "filter", "listener", "onDocumentPress", "event", "actualTarget", "composedPath", "target", "actualContains", "some", "el", "hideOnClick", "setTimeout", "removeDocumentPress", "onTouchMove", "onTouchStart", "addDocumentPress", "doc", "TOUCH_OPTIONS", "onTransitionedOut", "duration", "callback", "onTransitionEnd", "onTransitionedIn", "updateTransitionEndListener", "on", "eventType", "handler", "options", "push", "onTrigger", "passive", "onMouseLeave", "splitBySpaces", "isIE11", "onBlurOrFocusOut", "removeListeners", "_ref", "_lastTriggerEvent", "shouldScheduleClickHide", "isEventListenerStopped", "wasFocused", "isMouseEvent", "scheduleHide", "isCursorOverReferenceOrPopper", "popperTreeData", "getNestedPopperTree", "concat", "_instance$popperInsta", "popperRect", "getBoundingClientRect", "popperState", "Boolean", "isCursorOutsideInteractiveBorder", "shouldBail", "relatedTarget", "createPopperInstance", "destroyPopperInstance", "_instance$props2", "popperOptions", "placement", "offset", "getReferenceClientRect", "moveTransition", "computedReference", "contextElement", "tippyModifier", "name", "enabled", "phase", "requires", "_ref2", "_getDefaultTemplateCh", "attributes", "modifiers", "padding", "top", "bottom", "left", "right", "adaptive", "createPopper", "mount", "appendTo", "TIPPY_DEFAULT_APPEND_TO", "invokeWithArgsOrReturn", "querySelectorAll", "_getNormalizedTouchSe", "touchValue", "touchDelay", "requestAnimationFrame", "clearTimeout", "cancelAnimationFrame", "partialProps", "ignoreAttributes", "nestedPopper", "forceUpdate", "isAlreadyVisible", "isDisabled", "isTouchAndTouchDisabled", "onShow", "visibility", "transition", "_getDefaultTemplateCh2", "setTransitionDuration", "_instance$popperInsta2", "offsetHeight", "_getDefaultTemplateCh3", "setVisibilityState", "pushIfUnique", "isAlreadyHidden", "onHide", "_getDefaultTemplateCh4", "i", "tippy", "targets", "optionalProps", "bindGlobalEventListeners", "elements", "getArrayOfElements", "isSingleContentElement", "isMoreThanOneReferenceElement", "instances", "reduce", "acc", "setDefaultProps", "applyStylesModifier", "applyStyles", "effect", "_ref", "state", "initialStyles", "popper", "position", "options", "strategy", "left", "top", "margin", "arrow", "reference", "Object", "assign", "elements", "style", "styles", "tippy", "setDefaultProps", "render", "isBrowser", "window", "document", "preserveRef", "ref", "node", "hasOwnProperty", "call", "current", "ssrSafeCreateDiv", "createElement", "toDataAttributes", "attrs", "dataAttrs", "placement", "referenceHidden", "escaped", "deepEqual", "x", "y", "Object", "keys", "length", "prop", "uniqueByShape", "arr", "output", "forEach", "item", "find", "outputItem", "push", "deepPreserveProps", "instanceProps", "componentProps", "_instanceProps$popper", "_componentProps$poppe", "popperOptions", "modifiers", "useIsomorphicLayoutEffect", "useLayoutEffect", "useEffect", "useMutableBox", "initialValue", "useRef", "updateClassName", "box", "action", "classNames", "split", "name", "classList", "classNamePlugin", "defaultValue", "fn", "instance", "popper", "firstElementChild", "isDefaultRenderFn", "_instance$props$rende", "props", "render", "$$tippy", "add", "className", "remove", "onCreate", "onBeforeUpdate", "onAfterUpdate", "TippyGenerator", "tippy", "Tippy", "_ref", "children", "content", "visible", "singleton", "reference", "_ref$disabled", "disabled", "_ref$ignoreAttributes", "ignoreAttributes", "__source", "__self", "restOfNativeProps", "_objectWithoutPropertiesLoose", "isControlledMode", "undefined", "isSingletonMode", "_useState", "useState", "mounted", "setMounted", "_useState2", "setAttrs", "_useState3", "singletonContent", "setSingletonContent", "mutableBox", "container", "renders", "trigger", "hideOnClick", "computedProps", "plugins", "data", "onTrigger", "event", "_ref2", "currentTarget", "state", "$$activeSingletonInstance", "deps", "concat", "type", "element", "disable", "show", "hook", "destroy", "cleanup", "_instance$popperInsta", "setProps", "popperInstance", "forceUpdate", "enable", "hide", "_instance$props$poppe", "filter", "_ref3", "enabled", "phase", "requires", "_ref4", "_state$modifiersData", "hideData", "modifiersData", "isReferenceHidden", "hasPopperEscaped", "attributes", "React", "cloneElement", "createPortal", "forwardRef", "Tippy", "defaultProps", "_ref", "ref", "children", "props", "_objectWithoutPropertiesLoose", "React", "cloneElement", "node", "preserveRef", "index", "forwardRef", "TippyGenerator", "tippy", "import_classnames", "import_isArray", "React", "import_classnames", "React", "import_once", "applyFocusVisiblePolyfill", "scope", "hadKeyboardEvent", "hadFocusVisibleRecently", "hadFocusVisibleRecentlyTimeout", "inputTypesWhitelist", "isValidFocusTarget", "el", "focusTriggersKeyboardModality", "type", "tagName", "getAncestorFromTarget", "FOCUS_VISIBLE_TARGET", "FOCUS_VISIBLE_ANCESTOR", "addFocusVisibleClass", "targetAncestor", "removeFocusVisibleClass", "onKeyDown", "e", "onPointerDown", "onFocus", "onBlur", "onVisibilityChange", "addInitialPointerMoveListeners", "onInitialPointerMove", "removeInitialPointerMoveListeners", "event", "focusVisible", "once", "applyFocusVisiblePolyfill", "import_classnames", "TOOLTIP_DELAYS", "ANIMATION_DURATIONS", "ORDERED_SIZES", "ORDERED_FORM_SIZES", "SPACING_VALUES", "ORDERED_SPACING_SIZES", "ORDERED_SIZES", "MARGIN_BASE_CLASS", "PADDING_BASE_CLASS", "LOCKUP_BASE_CLASS", "BORDER_BASE_CLASS", "BORDER_PROPS", "getScore", "value", "handleHelpersClassNames", "props", "classNamesToApply", "marginProps", "paddingProps", "lockupProps", "borderProps", "rest", "splitHelperProps", "helperClassNames", "otherProps", "marginX", "marginY", "margin", "marginLeft", "marginTop", "marginRight", "marginBottom", "mTop", "mBottom", "mLeft", "mRight", "paddingX", "paddingY", "padding", "paddingLeft", "paddingTop", "paddingRight", "paddingBottom", "pTop", "pBottom", "pLeft", "pRight", "hasLeftLockup", "hasRightLockup", "hasTopLockup", "hasBottomLockup", "hasFullLockup", "hasBorder", "hasBorderX", "hasBorderY", "hasBorderTop", "hasBorderBottom", "hasBorderLeft", "hasBorderRight", "borderCount", "classNames", "MARGIN_PROPS", "PADDING_PROPS", "LOCKUP_PROPS", "result", "key", "keyAsMargin", "keyAsPadding", "keyAsLockup", "keyAsBorder", "restKey", "import_classnames", "import_react_is", "React", "useAsComponent", "Component", "isElement", "isNull", "props", "propsRef", "ClonedComponent", "newProps", "classNames", "type", "Element", "hasRefProp", "Component", "React", "useSmoothAnchorLink", "onClick", "href", "isEnabled", "event", "element", "originalId", "getExternalProps", "href", "externalProps", "BLOCK", "Action", "hrefProp", "isDisabled", "isActive", "hoverStyle", "underline", "cursor", "level", "as", "type", "className", "onClickProp", "children", "isExternal", "hasSmoothAnchorLink", "shouldInherit", "innerRef", "dataAttrs", "ariaAttrs", "ariaLabel", "onMouseEnter", "rest", "helperClassNames", "props", "handleHelpersClassNames", "Component", "hrefAs", "onClickAs", "useAsComponent", "href", "onClick", "useSmoothAnchorLink", "event", "isBasic", "focusVisible", "externalProps", "getExternalProps", "classNames", "React", "createShimmer", "globalName", "getGlobal", "getOrCreateGlobal", "onReady", "callback", "isInitCallback", "functionName", "args", "sdkGlobal", "globalFunction", "global", "CALLBACK_QUEUE_LIMIT", "callbackQueue", "warningShown", "message", "shimFunction", "shimGetFunction", "onReady", "createShimmer", "LoggerShimBase", "message", "context", "status", "logger", "error", "handler", "level", "cb", "onReady", "logsGlobal", "NamedLoggerShim", "name", "configuration", "__publicField", "DefaultLoggerShim", "logsShim", "shimFunction", "shimGetFunction", "vitalsByName", "vitalsByRef", "shimFunction", "shimGetFunction", "onReady", "getSdkGlobal", "createShimmer", "earlyFeatureFlagEvaluations", "rumGlobal", "value", "key", "rumShim", "name", "options", "vital", "reference", "nameOrRef", "vitalStart", "stopTimestamp", "team", "handler", "level", "createLogger", "component", "context", "logsShim", "team", "logger", "createLogger", "componentWarning", "componentName", "type", "message", "shouldWarn", "sampleRate", "finalMessage", "OnWarningContext", "useComponentWarning", "onWarning", "key", "useComponentWarningCallback", "sharedComponentName", "sharedType", "sharedMessage", "sharedShouldWarn", "sharedSampleRate", "options", "localShouldWarn", "import_classnames", "React", "import_classnames", "React", "Spacing", "className", "as", "children", "props", "helperClassNames", "otherProps", "handleHelpersClassNames", "spacingClasses", "classNames", "Component", "useAsComponent", "sendWarning", "useComponentWarningCallback", "import_horizontal_separator", "BLOCK", "styles", "HorizontalSeparator", "className", "margin", "marginY", "width", "marginProps", "Spacing", "classNames", "React", "React", "DRUIDS_THEME_ROOT", "GlobalThemePreferenceContext", "React", "DEFAULT_CONTEXT_VALUE", "listOfSupportedUnits", "listOfSupportedDirections", "sanitize", "inBreakpoints", "Object", "keys", "reduce", "breakpoints", "breakpointName", "breakpoint", "Array", "isArray", "length", "supposedUnit", "supposedDirection", "supposedMin", "supposedMax", "options", "rest", "slice", "error", "Error", "console", "direction", "unit", "min", "Math", "max", "includes", "Infinity", "defaultBreakpoints", "xs", "sm", "md", "lg", "xl", "BreakpointsContext", "createContext", "BreakpointsProvider", "_ref", "_ref$breakpoints", "children", "React", "Provider", "value", "_extends", "additionalBreakpoints", "displayName", "useMediaQuery", "mediaQuery", "mediaQueryList", "useMemo", "matchMedia", "_React$useState", "useState", "matches", "isShown", "setIsShown", "useLayoutEffect", "listener", "event", "addListener", "removeListener", "React", "React", "useFollowingState", "externalValue", "doesUpdateInRender", "innerState", "setInnerState", "React", "ThemeContext", "EmptyThemeContext", "EmptyGlobalThemePreferenceContext", "useTheme", "localThemeContext", "React", "ThemeContext", "globalThemePreferenceContext", "EmptyGlobalThemePreferenceContext", "GlobalThemePreferenceContext", "preference", "isSystemDark", "c", "baseTheme", "theme", "setTheme", "useFollowingState", "useBodyClassNameObserver", "isLocalThemeContext", "currentTheme", "getTheme", "observer", "updatedTheme", "assign", "target", "i", "source", "key", "defaultConverter", "value", "init", "converter", "defaultAttributes", "set", "name", "attributes", "stringifiedAttributes", "attributeName", "get", "cookies", "jar", "parts", "found", "api", "CookiesApi", "api", "React", "ThemeClassNameMap", "ThemeClassNames", "key", "value", "DRUIDS_THEME_ROOT", "ALL_THEME_CLASSES", "getTheme", "ThemeClassNameMap", "createContext", "ThemeContext", "createContext", "React", "React", "useIsMountedRef", "initialState", "isMountedRef", "useSafeState", "initialState", "isMountedRef", "useIsMountedRef", "value", "setValue", "safeSetValue", "setterArg", "React", "React", "ElevationContext", "useElevationContext", "LEGACY_ELEVATIONS", "STARTING_ELEVATION", "globalMountCount", "DEFAULT_ELEVATION_GROUP", "createEmptyGroup", "elevationGroups", "useElevationGroupId", "useElevationContext", "useElevation", "isEnabledOption", "stack", "legacyElevation", "eventsToIsolateProp", "stackName", "stackSize", "customElevationGroup", "useElevationGroupId", "isEnabled", "setIsEnabled", "useFollowingState", "currentElevation", "setCurrentElevation", "useSafeState", "isEverEnabled", "currentMountCount", "globalMountCount", "eventsToIsolate", "useDeepMemo", "shouldAcceptEventRef", "guardedShouldAcceptEvent", "event", "id", "defaultElevation", "LEGACY_ELEVATIONS", "STARTING_ELEVATION", "elevationGroup", "elevationGroups", "createEmptyGroup", "knownStacks", "validElevations", "prevElevation", "isStackValue", "elevationItem", "mountCount", "itemStackName", "itemElevation", "a", "b", "newElevation", "groupMembers", "i", "memberId", "member", "getOrCreatePortalTarget", "id", "shouldPrepend", "node", "PORTAL_CONTAINER_ID", "target", "getPortalTarget", "React", "testChildren", "children", "tester", "result", "array", "index", "element", "React", "usePrevious", "value", "ref", "import_classnames", "React", "normalizeThemeValueInput", "theme", "ThemeProvider", "children", "forcedTheme", "hasWrapper", "as", "restProps", "isSpecificThemeForced", "parentThemeContext", "React", "EmptyThemeContext", "ThemeContext", "shouldUseGlobalTheme", "globalPreference", "GlobalThemePreferenceContext", "EmptyGlobalThemePreferenceContext", "effectivePreference", "isSystemDark", "c", "forcedThemeValue", "preference", "contextValue", "WrapperComponent", "useAsComponent", "classNames", "ThemeClassNames", "import_classnames", "React", "React", "import_classnames", "React", "React", "TextContext", "useTextContextSize", "fallbackSize", "allowedSizes", "ORDERED_SIZES", "context", "import_classnames", "React", "BLOCK", "defineThemedSrc", "src", "Image", "srcProp", "retinaSrcProp", "isHovered", "className", "innerRef", "props", "helperClassNames", "extraProps", "handleHelpersClassNames", "theme", "useTheme", "isDarkTheme", "themedSrc", "themedRetinaSrc", "retinaSrc", "srcSet", "classNames", "BLOCK", "COLORS_BY_LEVELS", "COLORS_BY_VARIANTS", "Icon", "icon", "title", "ariaLabel", "role", "sizeProp", "isScaledDown", "className", "fill", "level", "iconVariant", "isHovered", "children", "dataAttrs", "styleProp", "hasInlineCentering", "marginProps", "style", "sizeContext", "useTextContextSize", "size", "helperClassNames", "handleHelpersClassNames", "getColor", "props", "classNames", "isStringOrArray", "Image", "input", "external_link_default", "ExternalLinkIcon", "props", "Icon", "external_link_default", "adjustSize", "value", "modifier", "ORDERED_SIZES", "ORDERED_SPACING_VALUES", "SPACING_VALUES", "BLOCK", "Link", "title", "sizeProp", "children", "linkType", "isExternal", "isFullWidth", "isInline", "role", "onClickProp", "hasExternalIcon", "hasSmoothAnchorLink", "className", "component", "download", "href", "innerRef", "ariaAttrs", "dataAttrs", "canBeQuiet", "props", "focusVisible", "sizeContext", "useTextContextSize", "size", "helperClassNames", "restProps", "handleHelpersClassNames", "onClick", "useSmoothAnchorLink", "Component", "hrefFromComponentProp", "useAsComponent", "baseProps", "classNames", "BLOCK", "hasRefProp", "externalProps", "getExternalProps", "finalProps", "ExternalLinkIcon", "adjustSize", "import_classnames", "import_isArray", "React", "import_classnames", "React", "import_detect_browser", "isMac", "browser", "import_keycap", "KEYCAP_SIZES", "map", "isMac", "keycapNames", "keycapName", "keycap", "Keycap", "className", "variant", "sizeProp", "isBorderless", "sizeContext", "useTextContextSize", "size", "keycapWord", "isArrowKey", "isCmdKey", "classNames", "styles", "import_classnames", "React", "BLOCK", "Text", "shouldInherit", "children", "sizeProp", "variant", "weight", "isItalic", "isMonospace", "hasEllipsis", "as", "align", "innerRef", "className", "textTransform", "overflowWrap", "whiteSpace", "shouldResetEditorialCopyContext", "props", "helperClassNames", "otherProps", "handleHelpersClassNames", "contextSize", "useTextContextSize", "Component", "useAsComponent", "size", "TextContext", "classNames", "BLOCK", "import_keyboard_shortcut", "KEYBOARD_SHORTCUT_SIZES", "TextVariantMap", "KeyboardShortcut", "className", "variant", "keys", "sizeProp", "ariaAttrs", "isBorderless", "sizeContext", "useTextContextSize", "size", "key", "index", "array", "isArray", "k", "keyIndex", "Spacing", "Keycap", "Text", "classNames", "styles", "React", "useEscapeDismissal", "tippyInstance", "isEnabled", "handleEscapeKey", "event", "startListeningToEsc", "stopListeningToEsc", "squeezeContainer", "wrapperElement", "measuredElement", "originalHeight", "bottomRange", "topRange", "mid", "originalMaxWidth", "BLOCK", "TIPPY_OPTIONS", "getPortalTarget", "DEFAULT_OFFSET", "TooltipContext", "ActionWithRef", "props", "ref", "Action", "Tooltip", "content", "placement", "maxWidth", "display", "delay", "isAnimated", "shouldShowOnEnabled", "isOpen", "className", "tooltipClassName", "children", "shouldMergeNestedTooltips", "isInteractive", "isEnabledProp", "onShowProp", "onHideProp", "asProp", "reference", "triggerTarget", "hasHoverEmphasis", "hasArrow", "offset", "shouldLookLikePopover", "maxNumberOfLines", "shouldBalanceText", "shortcut", "shortcutProps", "getReferenceClientRect", "wrapperRef", "childOriginalDescribedByRef", "needsManualAriaDescribedBy", "useComponentWarning", "hasLinkInContent", "testChildren", "child", "Link", "TagName", "tippyInstance", "setTippyInstance", "isOpenRef", "startListeningToEsc", "stopListeningToEsc", "useEscapeDismissal", "hideTooltip", "parentContent", "setParentEnabled", "onMount", "instance", "wrapper", "wrapperDescribedBy", "originalDescribedBy", "combined", "tippyBox", "tippyContent", "elevationStyle", "setIsEnabled", "useElevation", "onShow", "focusedElement", "closestTooltipWrapper", "onHide", "memoizedShortcut", "useDeepMemo", "memoizedShortcutProps", "isEnabled", "prevIsEnabled", "usePrevious", "setEnabled", "shouldEnable", "wrapperClassName", "classNames", "combinedContent", "innerContent", "keyboardShortcutElement", "KeyboardShortcut", "Spacing", "HorizontalSeparator", "contextValue", "tippy_react_esm_default", "ThemeClassNames", "ThemeProvider", "isArray", "TOOLTIP_DELAYS", "ANIMATION_DURATIONS", "node", "import_classnames", "React", "createContext", "useContext", "GroupContext", "useGroupContext", "createContext", "useContext", "InputFocusContext", "useInputFocusContext", "React", "getElementFromReferer", "elementReferer", "defaultElement", "useElementFromReferer", "element", "setElement", "newElement", "React", "parseNumber", "color", "len", "parseNumber_default", "named", "named_default", "parseNamed", "color", "parseNumber_default", "named_default", "parseNamed_default", "hex", "parseHex", "color", "match", "parseNumber_default", "parseHex_default", "num", "num_none", "per", "per_none", "num_per", "num_per_none", "hue", "hue_none", "c", "rx_num_per_none", "num_per_none", "rgb_num_old", "num", "c", "num_per", "rgb_per_old", "per", "parseRgbLegacy", "color", "res", "match", "parseRgbLegacy_default", "prepare", "color", "mode", "parse_default", "prepare_default", "converter", "target_mode", "color", "prepare_default", "converters", "converter_default", "converters", "modes", "parsers", "colorProfiles", "identity", "v", "useMode", "definition", "k", "channel", "parser", "useParser", "converter_default", "getMode", "mode", "IdentStartCodePoint", "IdentCodePoint", "Tok", "_i", "is_num", "chars", "ch", "ch1", "is_ident", "huenits", "num", "value", "digits", "id", "ident", "v", "identlike", "tokenize", "str", "tokens", "alpha", "parseColorSyntax", "token", "mode", "colorProfiles", "res", "coords", "consumeCoords", "channels", "getMode", "ii", "c", "includeHue", "parseModernSyntax", "parse", "color", "parsed", "result", "i", "len", "parsers", "parse_default", "parseRgb", "color", "parsed", "res", "r", "g", "b", "alpha", "Tok", "parseRgb_default", "parseTransparent", "c", "parseTransparent_default", "lerp", "a", "b", "t", "get_classes", "arr", "classes", "i", "a", "b", "interpolatorPiecewise", "interpolator", "t", "cls", "idx", "pair", "interpolatorLinear", "interpolatorPiecewise", "lerp", "fixupAlpha", "arr", "some_defined", "res", "v", "definition", "parseRgb_default", "parseHex_default", "parseRgbLegacy_default", "parseNamed_default", "parseTransparent_default", "interpolatorLinear", "fixupAlpha", "definition_default", "linearize", "v", "convertA98ToXyz65", "a98", "r", "g", "b", "res", "convertA98ToXyz65_default", "gamma", "v", "convertXyz65ToA98", "x", "y", "z", "alpha", "res", "convertXyz65ToA98_default", "fn", "c", "abs", "convertRgbToLrgb", "r", "g", "b", "alpha", "res", "convertRgbToLrgb_default", "convertRgbToXyz65", "rgb", "r", "g", "b", "alpha", "convertRgbToLrgb_default", "res", "convertRgbToXyz65_default", "fn", "c", "abs", "convertLrgbToRgb", "r", "g", "b", "alpha", "mode", "res", "convertLrgbToRgb_default", "convertXyz65ToRgb", "x", "y", "z", "alpha", "res", "convertLrgbToRgb_default", "convertXyz65ToRgb_default", "definition", "definition_default", "color", "convertXyz65ToA98_default", "convertRgbToXyz65_default", "convertXyz65ToRgb_default", "convertA98ToXyz65_default", "normalizeHue", "hue", "normalizeHue_default", "hue", "hues", "fn", "idx", "arr", "normalized", "normalizeHue_default", "acc", "curr", "fixupHueShorter", "d", "M", "degToRad", "radToDeg", "DE", "M", "BE", "BCAD", "convertRgbToCubehelix", "r", "g", "b", "alpha", "l", "x", "y", "res", "radToDeg", "convertRgbToCubehelix_default", "convertCubehelixToRgb", "h", "s", "l", "alpha", "res", "degToRad", "amp", "cosh", "sinh", "M", "convertCubehelixToRgb_default", "differenceHueSaturation", "std", "smp", "std_h", "normalizeHue_default", "smp_h", "dH", "differenceHueNaive", "differenceHueChroma", "averageAngle", "val", "sum", "rad", "angle", "definition", "convertRgbToCubehelix_default", "convertCubehelixToRgb_default", "interpolatorLinear", "fixupHueShorter", "fixupAlpha", "differenceHueSaturation", "averageAngle", "definition_default", "convertLabToLch", "l", "a", "b", "alpha", "mode", "c", "res", "normalizeHue_default", "convertLabToLch_default", "convertLchToLab", "l", "c", "h", "alpha", "mode", "res", "convertLchToLab_default", "k", "e", "D50", "D65", "k", "e", "fn", "v", "e", "k", "convertLab65ToXyz65", "l", "a", "b", "alpha", "fy", "fx", "fz", "res", "D65", "convertLab65ToXyz65_default", "convertLab65ToRgb", "lab", "convertXyz65ToRgb_default", "convertLab65ToXyz65_default", "convertLab65ToRgb_default", "f", "value", "e", "k", "convertXyz65ToLab65", "x", "y", "z", "alpha", "f0", "D65", "f1", "f2", "res", "convertXyz65ToLab65_default", "convertRgbToLab65", "rgb", "res", "convertXyz65ToLab65_default", "convertRgbToXyz65_default", "convertRgbToLab65_default", "\u03B8", "cos\u03B8", "sin\u03B8", "factor", "convertDlchToLab65", "l", "c", "h", "alpha", "res", "factor", "G", "e", "\u03B8", "f", "cos\u03B8", "sin\u03B8", "convertDlchToLab65_default", "convertLab65ToDlch", "l", "a", "b", "alpha", "e", "cos\u03B8", "sin\u03B8", "f", "G", "res", "factor", "normalizeHue_default", "\u03B8", "convertLab65ToDlch_default", "convertDlabToLab65", "c", "convertDlchToLab65_default", "convertLabToLch_default", "convertLab65ToDlab", "convertLchToLab_default", "convertLab65ToDlch_default", "definition", "convertLab65ToRgb_default", "convertRgbToLab65_default", "interpolatorLinear", "fixupAlpha", "definition_default", "definition", "convertDlchToLab65_default", "c", "convertLchToLab_default", "convertLab65ToRgb_default", "convertLab65ToDlch_default", "convertLabToLch_default", "convertRgbToLab65_default", "interpolatorLinear", "fixupHueShorter", "fixupAlpha", "differenceHueChroma", "averageAngle", "definition_default", "convertHsiToRgb", "h", "s", "i", "alpha", "normalizeHue_default", "f", "res", "convertRgbToHsi", "r", "g", "b", "alpha", "M", "m", "res", "definition", "convertHsiToRgb", "convertRgbToHsi", "interpolatorLinear", "fixupHueShorter", "fixupAlpha", "differenceHueSaturation", "averageAngle", "definition_default", "convertHslToRgb", "h", "s", "l", "alpha", "normalizeHue_default", "m1", "m2", "res", "convertRgbToHsl", "r", "g", "b", "alpha", "M", "m", "res", "hueToDeg", "val", "unit", "hue_default", "hsl_old", "hue", "c", "per", "num_per", "parseHslLegacy", "color", "match", "res", "hue_default", "parseHslLegacy_default", "parseHsl", "color", "parsed", "res", "h", "s", "l", "alpha", "Tok", "parseHsl_default", "definition", "convertHslToRgb", "convertRgbToHsl", "parseHsl_default", "parseHslLegacy_default", "c", "interpolatorLinear", "fixupHueShorter", "fixupAlpha", "differenceHueSaturation", "averageAngle", "definition_default", "convertHsvToRgb", "h", "s", "v", "alpha", "normalizeHue_default", "f", "res", "convertRgbToHsv", "r", "g", "b", "alpha", "M", "m", "res", "definition", "convertHsvToRgb", "convertRgbToHsv", "interpolatorLinear", "fixupHueShorter", "fixupAlpha", "differenceHueSaturation", "averageAngle", "definition_default", "convertHwbToRgb", "h", "w", "b", "alpha", "s", "convertHsvToRgb", "convertRgbToHwb", "rgba", "hsv", "convertRgbToHsv", "s", "v", "res", "ParseHwb", "color", "parsed", "res", "h", "w", "b", "alpha", "Tok", "parseHwb_default", "definition", "convertHwbToRgb", "convertRgbToHwb", "parseHwb_default", "c", "interpolatorLinear", "fixupHueShorter", "fixupAlpha", "differenceHueNaive", "averageAngle", "definition_default", "M1", "M2", "C1", "C2", "C3", "transferPqDecode", "v", "c", "transferPqEncode", "toRel", "c", "convertItpToXyz65", "i", "p", "alpha", "l", "transferPqDecode", "m", "s", "res", "convertItpToXyz65_default", "toAbs", "c", "convertXyz65ToItp", "x", "y", "z", "alpha", "absX", "absY", "absZ", "l", "transferPqEncode", "m", "s", "i", "t", "p", "res", "convertXyz65ToItp_default", "definition", "convertItpToXyz65_default", "color", "convertXyz65ToRgb_default", "convertXyz65ToItp_default", "convertRgbToXyz65_default", "interpolatorLinear", "fixupAlpha", "definition_default", "p", "d0", "jabPqEncode", "v", "vn", "M1", "C1", "C2", "C3", "abs", "convertXyz65ToJab", "x", "y", "z", "alpha", "xp", "yp", "l", "m", "s", "i", "res", "convertXyz65ToJab_default", "p", "d0", "jabPqDecode", "v", "vp", "C1", "C3", "C2", "M1", "rel", "convertJabToXyz65", "j", "a", "b", "alpha", "i", "l", "m", "res", "convertJabToXyz65_default", "convertRgbToJab", "rgb", "res", "convertXyz65ToJab_default", "convertRgbToXyz65_default", "convertRgbToJab_default", "convertJabToRgb", "color", "convertXyz65ToRgb_default", "convertJabToXyz65_default", "convertJabToRgb_default", "definition", "convertRgbToJab_default", "convertXyz65ToJab_default", "convertJabToRgb_default", "convertJabToXyz65_default", "interpolatorLinear", "fixupAlpha", "definition_default", "convertJabToJch", "j", "a", "b", "alpha", "c", "res", "normalizeHue_default", "convertJabToJch_default", "convertJchToJab", "j", "c", "h", "alpha", "res", "convertJchToJab_default", "definition", "convertJchToJab_default", "c", "convertJabToRgb_default", "convertJabToJch_default", "convertRgbToJab_default", "interpolatorLinear", "fixupHueShorter", "fixupAlpha", "differenceHueChroma", "averageAngle", "definition_default", "k", "e", "fn", "v", "e", "k", "convertLabToXyz50", "l", "a", "b", "alpha", "fy", "fx", "fz", "res", "D50", "convertLabToXyz50_default", "convertXyz50ToRgb", "x", "y", "z", "alpha", "res", "convertLrgbToRgb_default", "convertXyz50ToRgb_default", "convertLabToRgb", "lab", "convertXyz50ToRgb_default", "convertLabToXyz50_default", "convertLabToRgb_default", "convertRgbToXyz50", "rgb", "r", "g", "b", "alpha", "convertRgbToLrgb_default", "res", "convertRgbToXyz50_default", "f", "value", "e", "k", "convertXyz50ToLab", "x", "y", "z", "alpha", "f0", "D50", "f1", "f2", "res", "convertXyz50ToLab_default", "convertRgbToLab", "rgb", "res", "convertXyz50ToLab_default", "convertRgbToXyz50_default", "convertRgbToLab_default", "parseLab", "color", "parsed", "res", "l", "a", "b", "alpha", "Tok", "parseLab_default", "definition", "convertLabToXyz50_default", "convertLabToRgb_default", "convertXyz50ToLab_default", "convertRgbToLab_default", "parseLab_default", "c", "interpolatorLinear", "fixupAlpha", "definition_default", "definition", "definition_default", "convertLab65ToXyz65_default", "convertLab65ToRgb_default", "convertXyz65ToLab65_default", "convertRgbToLab65_default", "parseLch", "color", "parsed", "res", "l", "c", "h", "alpha", "Tok", "parseLch_default", "definition", "convertLchToLab_default", "c", "convertLabToRgb_default", "convertLabToLch_default", "convertRgbToLab_default", "parseLch_default", "interpolatorLinear", "fixupHueShorter", "fixupAlpha", "differenceHueChroma", "averageAngle", "definition_default", "definition", "definition_default", "c", "convertLchToLab_default", "convertLab65ToRgb_default", "convertLabToLch_default", "convertRgbToLab65_default", "convertLuvToLchuv", "l", "u", "v", "alpha", "c", "res", "normalizeHue_default", "convertLuvToLchuv_default", "convertLchuvToLuv", "l", "c", "h", "alpha", "res", "convertLchuvToLuv_default", "u_fn", "x", "y", "z", "v_fn", "un", "D50", "vn", "l_fn", "value", "e", "k", "convertXyz50ToLuv", "alpha", "l", "u", "v", "res", "convertXyz50ToLuv_default", "u_fn", "x", "y", "z", "v_fn", "un", "D50", "vn", "convertLuvToXyz50", "l", "u", "v", "alpha", "up", "vp", "k", "res", "convertLuvToXyz50_default", "convertRgbToLchuv", "rgb", "convertLuvToLchuv_default", "convertXyz50ToLuv_default", "convertRgbToXyz50_default", "convertLchuvToRgb", "lchuv", "convertXyz50ToRgb_default", "convertLuvToXyz50_default", "convertLchuvToLuv_default", "definition", "interpolatorLinear", "fixupHueShorter", "fixupAlpha", "differenceHueChroma", "averageAngle", "definition_default", "definition", "definition_default", "convertLrgbToRgb_default", "convertRgbToLrgb_default", "definition", "convertLuvToXyz50_default", "luv", "convertXyz50ToRgb_default", "convertXyz50ToLuv_default", "rgb", "convertRgbToXyz50_default", "interpolatorLinear", "fixupAlpha", "definition_default", "convertLrgbToOklab", "r", "g", "b", "alpha", "L", "M", "S", "res", "convertLrgbToOklab_default", "convertRgbToOklab", "rgb", "res", "convertLrgbToOklab_default", "convertRgbToLrgb_default", "convertRgbToOklab_default", "convertOklabToLrgb", "l", "a", "b", "alpha", "L", "M", "S", "res", "convertOklabToLrgb_default", "convertOklabToRgb", "c", "convertLrgbToRgb_default", "convertOklabToLrgb_default", "convertOklabToRgb_default", "toe", "x", "k_3", "toe_inv", "compute_max_saturation", "a", "b", "k0", "k1", "k2", "k3", "k4", "wl", "wm", "ws", "S", "k_l", "k_m", "k_s", "l_", "m_", "s_", "l", "m", "s", "l_dS", "m_dS", "s_dS", "l_dS2", "m_dS2", "s_dS2", "f", "f1", "f2", "find_cusp", "S_cusp", "rgb", "convertOklabToLrgb_default", "L_cusp", "C_cusp", "find_gamut_intersection", "L1", "C1", "L0", "cusp", "t", "dL", "dC", "l_dt", "m_dt", "s_dt", "L", "C", "ldt", "mdt", "sdt", "ldt2", "mdt2", "sdt2", "r", "r1", "r2", "u_r", "t_r", "g", "g1", "g2", "u_g", "t_g", "b1", "b2", "u_b", "t_b", "get_ST_max", "a_", "b_", "get_Cs", "L", "a_", "b_", "cusp", "find_cusp", "C_max", "find_gamut_intersection", "ST_max", "get_ST_max", "S_mid", "T_mid", "k", "C_a", "C_b", "C_mid", "convertOklabToOkhsl", "lab", "l", "a", "b", "ret", "toe", "c", "C_0", "C_mid", "C_max", "get_Cs", "s", "k_0", "k_1", "k_2", "normalizeHue_default", "convertOkhslToOklab", "hsl", "h", "s", "l", "ret", "toe_inv", "a_", "b_", "C_0", "C_mid", "C_max", "get_Cs", "t", "k_0", "k_1", "k_2", "C", "modeOkhsl", "definition_default", "convertOklabToOkhsl", "c", "convertRgbToOklab_default", "convertOkhslToOklab", "convertOklabToRgb_default", "modeOkhsl_default", "convertOklabToOkhsv", "lab", "l", "a", "b", "c", "a_", "b_", "S_max", "T", "get_ST_max", "S_0", "k", "t", "L_v", "C_v", "L_vt", "toe_inv", "C_vt", "rgb_scale", "convertOklabToLrgb_default", "scale_L", "toe", "ret", "normalizeHue_default", "convertOkhsvToOklab", "hsv", "ret", "h", "s", "v", "a_", "b_", "S_max", "T", "get_ST_max", "S_0", "k", "L_v", "C_v", "L_vt", "toe_inv", "C_vt", "rgb_scale", "convertOklabToLrgb_default", "scale_L", "L_new", "C", "modeOkhsv", "definition_default", "convertOklabToOkhsv", "c", "convertRgbToOklab_default", "convertOkhsvToOklab", "convertOklabToRgb_default", "modeOkhsv_default", "parseOklab", "color", "parsed", "res", "l", "a", "b", "alpha", "Tok", "parseOklab_default", "definition", "definition_default", "convertOklabToLrgb_default", "convertOklabToRgb_default", "convertLrgbToOklab_default", "convertRgbToOklab_default", "parseOklab_default", "c", "parseOklch", "color", "parsed", "res", "l", "c", "h", "alpha", "Tok", "parseOklch_default", "definition", "definition_default", "c", "convertLchToLab_default", "convertOklabToRgb_default", "convertLabToLch_default", "convertRgbToOklab_default", "parseOklch_default", "convertP3ToXyz65", "rgb", "r", "g", "b", "alpha", "convertRgbToLrgb_default", "res", "convertP3ToXyz65_default", "convertXyz65ToP3", "x", "y", "z", "alpha", "res", "convertLrgbToRgb_default", "convertXyz65ToP3_default", "definition", "definition_default", "color", "convertXyz65ToP3_default", "convertRgbToXyz65_default", "convertXyz65ToRgb_default", "convertP3ToXyz65_default", "gamma", "v", "abs", "convertXyz50ToProphoto", "x", "y", "z", "alpha", "res", "convertXyz50ToProphoto_default", "linearize", "v", "abs", "convertProphotoToXyz50", "prophoto", "r", "g", "b", "res", "convertProphotoToXyz50_default", "definition", "definition_default", "convertXyz50ToProphoto_default", "color", "convertRgbToXyz50_default", "convertProphotoToXyz50_default", "convertXyz50ToRgb_default", "\u03B1", "\u03B2", "gamma", "v", "abs", "convertXyz65ToRec2020", "x", "y", "z", "alpha", "res", "convertXyz65ToRec2020_default", "\u03B1", "\u03B2", "linearize", "v", "abs", "convertRec2020ToXyz65", "rec2020", "r", "g", "b", "res", "convertRec2020ToXyz65_default", "definition", "definition_default", "convertXyz65ToRec2020_default", "color", "convertRgbToXyz65_default", "convertRec2020ToXyz65_default", "convertXyz65ToRgb_default", "bias", "bias_cbrt", "transfer", "v", "bias_cbrt", "convertRgbToXyb", "color", "r", "g", "b", "alpha", "convertRgbToLrgb_default", "l", "bias", "m", "res", "convertRgbToXyb_default", "transfer", "v", "bias_cbrt", "convertXybToRgb", "x", "y", "b", "alpha", "l", "bias", "m", "s", "res", "convertLrgbToRgb_default", "convertXybToRgb_default", "definition", "convertXybToRgb_default", "convertRgbToXyb_default", "interpolatorLinear", "fixupAlpha", "definition_default", "definition", "convertXyz50ToRgb_default", "convertXyz50ToLab_default", "convertRgbToXyz50_default", "convertLabToXyz50_default", "interpolatorLinear", "fixupAlpha", "definition_default", "convertXyz65ToXyz50", "xyz65", "x", "y", "z", "alpha", "res", "convertXyz65ToXyz50_default", "convertXyz50ToXyz65", "xyz50", "x", "y", "z", "alpha", "res", "convertXyz50ToXyz65_default", "definition", "convertXyz65ToRgb_default", "convertXyz65ToXyz50_default", "convertRgbToXyz65_default", "convertXyz50ToXyz65_default", "interpolatorLinear", "fixupAlpha", "definition_default", "convertRgbToYiq", "r", "g", "b", "alpha", "res", "convertRgbToYiq_default", "convertYiqToRgb", "y", "i", "q", "alpha", "res", "convertYiqToRgb_default", "definition", "convertYiqToRgb_default", "convertRgbToYiq_default", "interpolatorLinear", "fixupAlpha", "definition_default", "r", "value", "precision", "round", "round_default", "twoDecimals", "round_default", "clamp", "value", "fixup", "rgb", "converter_default", "hsl", "serializeRgb", "color", "r", "fixup", "g", "b", "twoDecimals", "clamp", "formatRgb", "c", "serializeRgb", "rgb", "a98", "useMode", "definition_default", "cubehelix", "dlab", "dlch", "hsi", "hsl", "hsv", "hwb", "itp", "jab", "jch", "lab", "lab65", "lch", "lch65", "lchuv", "lrgb", "luv", "okhsl", "modeOkhsl_default", "okhsv", "modeOkhsv_default", "oklab", "oklch", "p3", "prophoto", "rec2020", "rgb", "xyb", "xyz50", "xyz65", "yiq", "CSS_VARIABLE_REGEX", "isCSSVariable", "color", "logger", "createLogger", "parseColor", "mode", "color", "trimmedColor", "isCSSVariable", "parsedColor", "converter_default", "parseRgb", "parseHcl", "DARKER_BASE_EXPONENT", "BRIGHTER_BASE_EXPONENT", "adjustColorBrightness", "brightness", "amount", "color", "autoAdjustToColorLightness", "rgbColor", "parseRgb", "formatRgb", "correctionFactor", "hclColor", "parseHcl", "multiplyingFactor", "team", "addError", "error", "context", "rumShim", "theme_colors_default", "getUnderlyingColor", "color", "theme_colors_default", "getBrightness", "color", "convert", "x", "rgb", "parseRgb", "isBright", "getValueForCSSVar", "cssVar", "element", "getThemedColors", "color", "computeThemedColorValues", "textColorProp", "backgroundColorProp", "borderColorProp", "element", "theme", "themedTextColors", "themedBackgroundColors", "themedBorderColors", "isLightTheme", "themeIndex", "activeThemeBackgroundColor", "activeThemeTextColor", "activeThemeBorderColor", "backgroundColor", "backgroundHoverColor", "match", "CSS_VARIABLE_REGEX", "getValueForCSSVar", "isCSSVariable", "adjustColorBrightness", "textColor", "getUnderlyingColor", "isBright", "useCustomColorStyles", "ref", "componentName", "borderColor", "isEnabled", "hasTextHoverOnWhite", "useBodyForCSSVars", "useElementFromReferer", "useTheme", "elementForCSSVars", "computedTheme", "result", "getBrightness", "import_classnames", "React", "import_loading_indicator", "logger", "createLogger", "isSafari", "MAX_DURATION", "LoadingIndicator", "sizeProp", "variant", "isAnimated", "className", "isKnockout", "delay", "marginProps", "helperClassNames", "handleHelpersClassNames", "sizeContext", "useTextContextSize", "size", "hasDelay", "now", "timeoutId", "duration", "classNames", "styles", "import_classnames", "React", "defaultFormatterOptions", "K", "KIB", "NBSP", "formatUnitSystem", "value", "reference", "units", "maxDecimals", "inOptions", "normalizedValue", "normalizedReference", "willDiscardTrailingZeros", "hasThousandsSeparator", "shouldFormatInBinary", "defaultFormatterOptions", "k", "unitIndex", "outOfBound", "availableIndexes", "numberDigits", "precision", "numberResult", "stringResult", "logError", "category", "error", "addError", "unit", "formatBigFloat", "value", "reference", "maxDecimals", "inOptions", "options", "defaultFormatterOptions", "formatUnitSystem", "units", "formatByteBinary", "value", "reference", "maxDecimals", "formatUnitSystem", "units", "formatByteDecimal", "value", "reference", "maxDecimals", "formatUnitSystem", "units", "MINUTE_NS", "HOUR_NS", "DAY_NS", "MONTH_NS", "YEAR_NS", "formatDuration", "value", "reference", "maxDecimals", "inOptions", "options", "defaultFormatterOptions", "willDiscardTrailingZeros", "ref", "formatUnitSystem", "remainder", "years", "months", "days", "hours", "minutes", "seconds", "units", "formatFloat", "value", "reference", "maxDecimals", "inOptions", "options", "defaultFormatterOptions", "formatUnitSystem", "units", "formatHuman", "value", "reference", "maxDecimals", "inOptions", "options", "formatUnitSystem", "formatInteger", "value", "reference", "maxDecimals", "inOptions", "options", "defaultFormatterOptions", "ref", "formatFloat", "NBSP", "logger", "createLogger", "formatRate", "value", "maxDecimals", "willDiscardTrailingZeros", "p", "formatValue", "val", "decimals", "stringResult", "error", "formatNumber", "type", "value", "ref", "maxDecimals", "inOptions", "options", "defaultFormatterOptions", "formatHuman", "formatByteBinary", "formatByteDecimal", "formatInteger", "formatFloat", "formatBigFloat", "formatDuration", "formatRate", "DEFAULT_MAX_COUNT", "formattedMaxCount", "count", "maxCount", "maxDecimals", "isMaxCountSurpassed", "formattedData", "formatNumber", "import_feature_status_label", "BLOCK", "FeatureStatusLabel", "status", "isKnockout", "isDisabled", "className", "count", "maxCount", "marginProps", "Text", "classNames", "styles", "formattedMaxCount", "element", "BLOCK", "formatShortcutForA11y", "keys", "key", "keycapName", "getIconElement", "Icon", "position", "isScaledDown", "size", "hasHoveredState", "iconProps", "isSpaced", "classNames", "Button", "className", "sizeProp", "component", "href", "isExternal", "level", "iconProp", "iconRightProp", "isPrimary", "isBorderless", "isDangerouslyNaked", "isNaked", "isSoft", "isShade", "isFullWidth", "isActive", "isHovered", "isLoading", "isDisabledProp", "featureStatus", "type", "title", "label", "isTitleCased", "canBeQuiet", "autoFocus", "hasEllipsisWithTooltip", "hasEllipsis", "innerRef", "ariaAttrs", "dataAttrs", "ariaLabel", "paddingX", "paddingLeft", "paddingRight", "customStyle", "shortcut", "shortcutDisplayProp", "tooltip", "tooltipProps", "otherProps", "useComponentWarning", "isDisabled", "isHoveredByMouse", "setIsHoveredByMouse", "isActiveByMouse", "setIsActiveByMouse", "localRef", "ref", "hasPaddings", "helperClassNames", "other", "handleHelpersClassNames", "groupContextSize", "useGroupContext", "isFocused", "useInputFocusContext", "isPrimaryOrFocusedContext", "shouldIconBeKnockedOut", "contextSize", "useTextContextSize", "ORDERED_FORM_SIZES", "iconLeft", "iconRight", "LoadingIndicator", "labelWithCorrectedCase", "labelCase", "Case", "hasIconOnly", "shortcutDisplay", "shouldHaveTooltip", "hasTooltipHelper", "contentSpanId", "inlineShortcut", "KeyboardShortcut", "contentRef", "nonIconContent", "customStyles", "useCustomColorStyles", "isCustomBgDark", "isBright", "featureStatusLabel", "FeatureStatusLabel", "leftSpacer", "rightSpacer", "featureSpacer", "focusVisible", "shortcutText", "hasIconMinWidth", "hasTwoIconsMinWidth", "isTooltipUsedAsAriaLabel", "props", "disabledTooltipHelperRef", "disabledTooltipHelper", "buttonContent", "buttonElement", "Link", "isOverflowing", "setIsOverflowing", "contentNode", "contentObserver", "ResizeObserver_es_default", "entries", "entry", "isNowOverflowing", "tooltipContent", "Tooltip"]
|
|
7
|
+
}
|