From 3b30a5312eab117e7de8acb13e873537094668f0 Mon Sep 17 00:00:00 2001 From: ImCoolNowRight Date: Wed, 23 Oct 2024 20:35:01 +0000 Subject: [PATCH] deploy: 11d236824e7aa7051260ac6e41308fad19eb3793 --- ...crollWrapper-mdx.0c8e88dd.iframe.bundle.js | 19 +- ...lWrapper-mdx.0c8e88dd.iframe.bundle.js.map | 1 + ...lWrapper-mdx.5de9f842.iframe.bundle.js.map | 1 - ...lWrapper-stories.7ae49e1b.iframe.bundle.js | 6 +- ...pper-stories.7ae49e1b.iframe.bundle.js.map | 2 +- iframe.html | 4 +- index.json | 2 +- ...undle.js => main.1e40b216.iframe.bundle.js | 24 +- main.1e40b216.iframe.bundle.js.map | 1 + main.f80f06c1.iframe.bundle.js.map | 1 - ...ithLongPress-mdx.005470d9.iframe.bundle.js | 738 ++++++++++++++++++ ...ongPress-mdx.005470d9.iframe.bundle.js.map | 1 + ...ongPress-stories.b806bbe8.iframe.bundle.js | 443 +++++++++++ ...ress-stories.b806bbe8.iframe.bundle.js.map | 1 + project.json | 2 +- ... => runtime~main.b6c83c68.iframe.bundle.js | 4 +- runtime~main.b6c83c68.iframe.bundle.js.map | 1 + runtime~main.d60110f8.iframe.bundle.js.map | 1 - sb-addons/storybook-6/manager-bundle.js | 2 +- 19 files changed, 1223 insertions(+), 31 deletions(-) rename components-ScrollWrapper-ScrollWrapper-mdx.5de9f842.iframe.bundle.js => components-ScrollWrapper-ScrollWrapper-mdx.0c8e88dd.iframe.bundle.js (98%) create mode 100644 components-ScrollWrapper-ScrollWrapper-mdx.0c8e88dd.iframe.bundle.js.map delete mode 100644 components-ScrollWrapper-ScrollWrapper-mdx.5de9f842.iframe.bundle.js.map rename components-ScrollWrapper-ScrollWrapper-stories.074b5b28.iframe.bundle.js => components-ScrollWrapper-ScrollWrapper-stories.7ae49e1b.iframe.bundle.js (99%) rename components-ScrollWrapper-ScrollWrapper-stories.074b5b28.iframe.bundle.js.map => components-ScrollWrapper-ScrollWrapper-stories.7ae49e1b.iframe.bundle.js.map (59%) rename main.f80f06c1.iframe.bundle.js => main.1e40b216.iframe.bundle.js (99%) create mode 100644 main.1e40b216.iframe.bundle.js.map delete mode 100644 main.f80f06c1.iframe.bundle.js.map create mode 100644 mixins-withLongPress-withLongPress-mdx.005470d9.iframe.bundle.js create mode 100644 mixins-withLongPress-withLongPress-mdx.005470d9.iframe.bundle.js.map create mode 100644 mixins-withLongPress-withLongPress-stories.b806bbe8.iframe.bundle.js create mode 100644 mixins-withLongPress-withLongPress-stories.b806bbe8.iframe.bundle.js.map rename runtime~main.d60110f8.iframe.bundle.js => runtime~main.b6c83c68.iframe.bundle.js (63%) create mode 100644 runtime~main.b6c83c68.iframe.bundle.js.map delete mode 100644 runtime~main.d60110f8.iframe.bundle.js.map diff --git a/components-ScrollWrapper-ScrollWrapper-mdx.5de9f842.iframe.bundle.js b/components-ScrollWrapper-ScrollWrapper-mdx.0c8e88dd.iframe.bundle.js similarity index 98% rename from components-ScrollWrapper-ScrollWrapper-mdx.5de9f842.iframe.bundle.js rename to components-ScrollWrapper-ScrollWrapper-mdx.0c8e88dd.iframe.bundle.js index 63c50ae1d..f0a2aa9b5 100644 --- a/components-ScrollWrapper-ScrollWrapper-mdx.5de9f842.iframe.bundle.js +++ b/components-ScrollWrapper-ScrollWrapper-mdx.0c8e88dd.iframe.bundle.js @@ -368,19 +368,6 @@ function _createMdxContent(props) { children: ["Event fired via ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { children: "fireAncestors" }), ", is triggered when scroll reaches the top or bottom of the scroll boundaries."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "signals", - children: "Signals" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "onupattop", - children: "onUpAtTop" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Fired when user is at the top of the content within the ScrollWrapper and presses up again." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "ondownatbottom", - children: "onDownAtBottom" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Fired when user is at the bottom of the content within the ScrollWrapper and presses down again." })] }); } @@ -1071,7 +1058,7 @@ var ScrollWrapper = /*#__PURE__*/function (_Base) { this._updateFadeContainer(); } } else { - this.signal('onDownAtBottom'); + return false; } } }, { @@ -1098,7 +1085,7 @@ var ScrollWrapper = /*#__PURE__*/function (_Base) { this._updateFadeContainer(); } } else { - this.signal('onUpAtTop'); + return false; } } }, { @@ -1574,4 +1561,4 @@ module.exports = webpackEmptyContext; /***/ }) }]); -//# sourceMappingURL=components-ScrollWrapper-ScrollWrapper-mdx.5de9f842.iframe.bundle.js.map \ No newline at end of file +//# sourceMappingURL=components-ScrollWrapper-ScrollWrapper-mdx.0c8e88dd.iframe.bundle.js.map \ No newline at end of file diff --git a/components-ScrollWrapper-ScrollWrapper-mdx.0c8e88dd.iframe.bundle.js.map b/components-ScrollWrapper-ScrollWrapper-mdx.0c8e88dd.iframe.bundle.js.map new file mode 100644 index 000000000..248dd7c34 --- /dev/null +++ b/components-ScrollWrapper-ScrollWrapper-mdx.0c8e88dd.iframe.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"components-ScrollWrapper-ScrollWrapper-mdx.0c8e88dd.iframe.bundle.js","mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AChXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAOA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAtDA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;;;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4DA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAKA;AACA;AACA;AAIA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;;AAKA;AACA;;AAGA;AACA;;AAEA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AAEA;AACA;AAKA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AApBA;AACA;AAAA;AAAA;AAAA;AAvXA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAYA;AAAA;AAAA;AAAA;AAGA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;;;;;;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;AC/OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.mdx","webpack://lightning-ui-docs/../../../node_modules/@storybook/addon-docs/node_modules/@mdx-js/react/lib/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Surface/Surface.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Surface/Surface.js","webpack://lightning-ui-docs/../../../node_modules/@storybook/core/dist/components/ sync","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollSlider.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollSlider.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js","webpack://lightning-ui-docs/../../../node_modules/memoizerific/ sync"],"sourcesContent":["\nimport React from 'react';\n\n/*prettier-ignore*/\n/*\nCopyright 2023 Comcast Cable Communications Management, LLC\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nSPDX-License-Identifier: Apache-2.0\n\\*/\nimport {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from \"react/jsx-runtime\";\nimport {useMDXComponents as _provideComponents} from \"/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-docs/dist/shims/mdx-react-shim.mjs\";\nimport {Meta, Title} from '@storybook/blocks';\nimport {DocsLink} from '../../docs/utils';\nimport * as ScrollWrapperStories from './ScrollWrapper.stories';\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n p: \"p\",\n pre: \"pre\",\n table: \"table\",\n tbody: \"tbody\",\n td: \"td\",\n th: \"th\",\n thead: \"thead\",\n tr: \"tr\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [\"\\n\", \"\\n\", \"\\n\", _jsx(Meta, {\n of: ScrollWrapperStories\n }), \"\\n\", _jsx(Title, {}), \"\\n\", _jsx(_components.p, {\n children: \"A scrollable container for text content.\"\n }), \"\\n\", _jsx(_components.h2, {\n id: \"source\",\n children: \"Source\"\n }), \"\\n\", _jsx(_components.p, {\n children: _jsx(_components.a, {\n href: \"https://github.com/rdkcentral/Lightning-UI-Components/blob/develop/packages/@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.js\",\n rel: \"nofollow\",\n children: \"https://github.com/rdkcentral/Lightning-UI-Components/blob/develop/packages/@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.js\"\n })\n }), \"\\n\", _jsx(_components.h2, {\n id: \"usage\",\n children: \"Usage\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"ScrollWrapper\"\n }), \" requires both \", _jsx(_components.code, {\n children: \"w\"\n }), \" and \", _jsx(_components.code, {\n children: \"h\"\n }), \" to be set.\"]\n }), \"\\n\", _jsx(_components.pre, {\n children: _jsx(_components.code, {\n className: \"language-js\",\n children: \"import { ScrollWrapper } from '@lightningjs/ui-components';\\n\\nclass Example extends lng.Component {\\n static _template() {\\n return {\\n ScrollWrapper: {\\n type: ScrollWrapper,\\n h: 450,\\n w: 600,\\n content: 'Text content long enough to scroll vertically'\\n }\\n };\\n }\\n}\\n\"\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Alternatively, an array of components and \", _jsx(_components.code, {\n children: \"style\"\n }), \" keys may be provided as \", _jsx(_components.code, {\n children: \"content\"\n }), \".\\nStyles provided here will override those set by the theme for it's section of text:\"]\n }), \"\\n\", _jsx(_components.pre, {\n children: _jsx(_components.code, {\n className: \"language-js\",\n children: \"import { ScrollWrapper } from '@lightningjs/ui-components';\\n\\nclass Example extends lng.Component {\\n static _template() {\\n return {\\n ScrollWrapper: {\\n type: ScrollWrapper,\\n h: 450,\\n w: 600,\\n content: [\\n {\\n text: 'Text Heading',\\n style: {\\n fontStyle: 'italic',\\n alignContent: 'center'\\n }\\n },\\n {\\n text: 'Text content long enough to scroll vertically'\\n }\\n ]\\n }\\n };\\n }\\n}\\n\"\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The \", _jsx(_components.code, {\n children: \"h\"\n }), \" and \", _jsx(_components.code, {\n children: \"w\"\n }), \" properties will determine the viewable box for \", _jsx(_components.code, {\n children: \"ScrollWrapper\"\n }), \".\\nWhen focused, \", _jsx(_components.code, {\n children: \"ScrollWrapper\"\n }), \" will display a scroll bar to the right of the content\\nand up/down scrolling will be handled.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The amount of scrolling per keypress is determined via the \", _jsx(_components.code, {\n children: \"scrollStep\"\n }), \" property.\\nChange it to allow smaller or larger scroll steps per keypress.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"If the array of items contains rows/columns with different heights and/or widths set\\nautoResizeWidth and autoResizeHeight to true so that the scroll bar is of the appropriate height.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Additionally, \", _jsx(_components.code, {\n children: \"ScrollWrapper\"\n }), \" supports \", _jsx(_components.code, {\n children: \"autoScroll\"\n }), \" flag, which will auto scroll the content.\\nThe delay to start is set via \", _jsx(_components.code, {\n children: \"autoScrollDelay\"\n }), \" and speed via \", _jsx(_components.code, {\n children: \"autoScrollSpeed\"\n }), \" both in ms.\\nYou can also hide the scrollBar by setting \", _jsx(_components.code, {\n children: \"showScrollBar\"\n }), \" to \", _jsx(_components.code, {\n children: \"false\"\n }), \".\"]\n }), \"\\n\", _jsx(_components.h2, {\n id: \"api\",\n children: \"API\"\n }), \"\\n\", _jsx(_components.h3, {\n id: \"properties\",\n children: \"Properties\"\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: \"name\"\n }), _jsx(_components.th, {\n children: \"type\"\n }), _jsx(_components.th, {\n children: \"required\"\n }), _jsx(_components.th, {\n children: \"default\"\n }), _jsx(_components.th, {\n children: \"description\"\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"autoScroll\"\n }), _jsx(_components.td, {\n children: \"boolean\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"whether or not to auto scroll the content\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"autoScrollDelay\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"2000\"\n }), _jsx(_components.td, {\n children: \"delay, in ms, before auto scroll starts\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"autoScrollSpeed\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"200\"\n }), _jsx(_components.td, {\n children: \"time delay, in ms, before each scroll step\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"content\"\n }), _jsx(_components.td, {\n children: \"string|array\"\n }), _jsx(_components.td, {\n children: \"true\"\n }), _jsx(_components.td, {\n children: \"-\"\n }), _jsx(_components.td, {\n children: \"Content is items that are viewable in the container. It can be an array of strings or an array of lightning elements that can be patched in\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"fadeContent\"\n }), _jsx(_components.td, {\n children: \"boolean\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"true\"\n }), _jsx(_components.td, {\n children: \"fade out content at the bottom of the ScrollWrapper\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"flexDirection\"\n }), _jsx(_components.td, {\n children: \"string\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"column\"\n }), _jsx(_components.td, {\n children: \"determines the direction items are placed in flexContainer\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"scrollDuration\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"0.2\"\n }), _jsx(_components.td, {\n children: \"animation duration for the scroll\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"scrollStep\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"10\"\n }), _jsx(_components.td, {\n children: \"how many pixels to scroll by on every up/down keypress\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"shouldWrap\"\n }), _jsx(_components.td, {\n children: \"boolean\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"determines if items should wrap around ScrollContainer\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"showScrollBar\"\n }), _jsx(_components.td, {\n children: \"boolean\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"true\"\n }), _jsx(_components.td, {\n children: \"show the scroll bar when focused\"\n })]\n })]\n })]\n }), \"\\n\", _jsx(_components.h3, {\n id: \"style-properties\",\n children: \"Style Properties\"\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: \"name\"\n }), _jsx(_components.th, {\n children: \"type\"\n }), _jsx(_components.th, {\n children: \"description\"\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"contentMarginLeft\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"spacing to the left of the scrollable content\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"contentMarginTop\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"spacing above the scrollable content\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"fadeHeight\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsxs(_components.td, {\n children: [\"height of FadeOut shader displayed at bottom of scroll wrapper (when \", _jsx(_components.code, {\n children: \"fadeContent\"\n }), \" property is \", _jsx(_components.code, {\n children: \"true\"\n }), \")\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"scroll\"\n }), _jsx(_components.td, {\n children: _jsx(DocsLink, {\n id: \"lng.Transition\"\n })\n }), _jsx(_components.td, {\n children: \"transition to apply when scrolling\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"sliderMarginLeft\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"spacing to the left of the scroll slider\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"textStyle\"\n }), _jsx(_components.td, {\n children: \"object\"\n }), _jsxs(_components.td, {\n children: [\"Default style of text to be displayed. Object should come from the current theme or contain any properties that the \", _jsx(_components.a, {\n href: \"https://lightningjs.io/docs/#/lightning-core-reference/RenderEngine/Textures/Text?id=properties\",\n rel: \"nofollow\",\n children: \"Lightning text texture supports\"\n }), \".\"]\n })]\n })]\n })]\n }), \"\\n\", _jsx(_components.h3, {\n id: \"methods\",\n children: \"Methods\"\n }), \"\\n\", _jsx(_components.h4, {\n id: \"resetscroll-void\",\n children: \"resetScroll(): void\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Resets the \", _jsx(_components.code, {\n children: \"y\"\n }), \" value of both the content and the scroll bar.\"]\n }), \"\\n\", _jsx(_components.h3, {\n id: \"events\",\n children: \"Events\"\n }), \"\\n\", _jsx(_components.h4, {\n id: \"scrollchangedendupenddown-this\",\n children: \"$scrollChanged('endUp'|'endDown', this)\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Event fired via \", _jsx(_components.code, {\n children: \"fireAncestors\"\n }), \", is triggered when scroll reaches the top or bottom of the scroll boundaries.\"]\n })]\n });\n}\nexport default function MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\n","/**\n * @typedef {import('mdx/types.js').MDXComponents} MDXComponents\n * @typedef {import('react').Component<{}, {}, unknown>} Component\n * @typedef {import('react').ReactNode} ReactNode\n */\n\n/**\n * @callback MergeComponents\n * Custom merge function.\n * @param {Readonly} currentComponents\n * Current components from the context.\n * @returns {MDXComponents}\n * Additional components.\n *\n * @typedef Props\n * Configuration for `MDXProvider`.\n * @property {ReactNode | null | undefined} [children]\n * Children (optional).\n * @property {Readonly | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @property {boolean | null | undefined} [disableParentContext=false]\n * Turn off outer component context (default: `false`).\n */\n\nimport React from 'react'\n\n/** @type {Readonly} */\nconst emptyComponents = {}\n\nconst MDXContext = React.createContext(emptyComponents)\n\n/**\n * Get current components from the MDX Context.\n *\n * @param {Readonly | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @returns {MDXComponents}\n * Current components.\n */\nexport function useMDXComponents(components) {\n const contextComponents = React.useContext(MDXContext)\n\n // Memoize to avoid unnecessary top-level context changes\n return React.useMemo(\n function () {\n // Custom merge via a function prop\n if (typeof components === 'function') {\n return components(contextComponents)\n }\n\n return {...contextComponents, ...components}\n },\n [contextComponents, components]\n )\n}\n\n/**\n * Provider for MDX context.\n *\n * @param {Readonly} properties\n * Properties.\n * @returns {JSX.Element}\n * Element.\n * @satisfies {Component}\n */\nexport function MDXProvider(properties) {\n /** @type {Readonly} */\n let allComponents\n\n if (properties.disableParentContext) {\n allComponents =\n typeof properties.components === 'function'\n ? properties.components(emptyComponents)\n : properties.components || emptyComponents\n } else {\n allComponents = useMDXComponents(properties.components)\n }\n\n return React.createElement(\n MDXContext.Provider,\n {value: allComponents},\n properties.children\n )\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n backgroundColor: theme.color.interactiveNeutral,\n radius: theme.radius.md,\n animation: {}\n});\n\nexport const tone = theme => ({\n inverse: {\n backgroundColor: theme.color.interactiveInverse\n }\n});\n\nexport const mode = theme => ({\n focused: {\n backgroundColor: theme.color.interactiveNeutralFocus,\n tone: {\n inverse: {\n backgroundColor: theme.color.interactiveInverseFocus\n }\n }\n },\n disabled: {\n backgroundColor: theme.color.fillNeutralDisabled\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getMaxRoundRadius } from '../../utils';\nimport Base from '../Base';\nimport * as styles from './Surface.styles';\nimport lng from '@lightningjs/core';\n\nexport default class Surface extends Base {\n static _template() {\n return {\n Background: {}\n };\n }\n\n static get __componentName() {\n return 'Surface';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get properties() {\n return [];\n }\n\n static get tags() {\n return ['Background'];\n }\n\n get innerH() {\n return this.h;\n }\n\n get innerW() {\n return this.w;\n }\n\n _update() {\n this._updateLayout();\n this._updateScale();\n }\n\n _updateLayout() {\n this._Background.patch({\n texture: lng.Tools.getRoundRect(\n this.innerW - 2, // Reference the underscored values here in cause the h or w getters need to be overwritten for alignment - see Tile\n this.innerH - 2,\n getMaxRoundRadius(this.style.radius, this.w, this.h),\n 0,\n null,\n true,\n this.style.backgroundColor\n )\n });\n }\n\n _updateScale() {\n const scale = this._isFocusedMode\n ? this.getFocusScale(this.w, this.h)\n : this.getUnfocusScale(this.w, this.h);\n\n this.applySmooth(this, { scale }, { scale: [scale, this.style.animation] });\n }\n}\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = \"../../../node_modules/@storybook/core/dist/components sync recursive\";\nmodule.exports = webpackEmptyContext;","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n textStyle: theme.typography.body2,\n fadeHeight: 100,\n scroll: {\n timingFunction: 'linear',\n duration: theme.animation.duration.xfast\n },\n contentMarginTop: theme.spacer.md,\n contentMarginLeft: theme.spacer.xl,\n sliderMarginLeft: theme.spacer.lg + theme.spacer.xxs\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { base as scrollWrapperBase } from './ScrollWrapper.styles';\n\nexport const base = theme => {\n const { scroll } = scrollWrapperBase(theme);\n return {\n progressBar: { animation: scroll },\n circleAnimation: scroll\n };\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport Slider from '../Slider';\nimport * as styles from './ScrollSlider.styles';\n\nexport default class ScrollSlider extends Slider {\n static get __componentName() {\n return 'ScrollSlider';\n }\n\n static get __themeStyle() {\n return styles;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport Base from '../Base';\nimport * as styles from './ScrollWrapper.styles';\nimport TextBox from '../TextBox';\nimport ScrollSlider from './ScrollSlider';\n\nexport default class ScrollWrapper extends Base {\n static get __themeStyle() {\n return styles;\n }\n\n static _template() {\n return {\n clipping: true,\n FadeContainer: {\n ScrollContainer: {\n w: w => w,\n wordWrap: true\n }\n },\n Slider: {\n type: ScrollSlider,\n vertical: true,\n signals: {\n onSizeChange: '_updateScrollContainerSize'\n },\n announce: ' '\n }\n };\n }\n\n static get __componentName() {\n return 'ScrollWrapper';\n }\n\n static get properties() {\n return [\n 'autoScroll',\n 'autoScrollDelay',\n 'autoScrollSpeed',\n 'content',\n 'fadeContent',\n 'scrollDuration',\n 'scrollStep',\n 'showScrollBar',\n 'shouldWrap',\n 'flexDirection'\n ];\n }\n\n static get tags() {\n return [\n 'FadeContainer',\n 'Slider',\n {\n name: 'ScrollContainer',\n path: 'FadeContainer.ScrollContainer'\n },\n {\n name: 'ScrollableText',\n path: 'ScrollContainer.ScrollableText'\n }\n ];\n }\n\n _construct() {\n super._construct();\n this._scrollStep = 10;\n this._shouldWrap = false;\n this._flexDirection = 'column';\n this._fadeContent = true;\n this._sliderWidth = 0;\n }\n\n _afterTextBoxUpdate(textBox) {\n // NOTE: this does get called every time ScrollWrapper updates (ex. on each scroll change)\n if (this._prevW !== textBox.finalW || this._prevH !== textBox.finalH) {\n this._prevW = textBox.finalW;\n this._prevH = textBox.finalH;\n this._updateScrollWrapperLayout();\n this._updateAlpha();\n }\n }\n\n _resetFlexContainer() {\n this._FadeContainer.patch({ ScrollContainer: undefined });\n this._FadeContainer.patch({\n ScrollContainer: { w: w => w, wordWrap: true }\n });\n }\n\n _update() {\n if (this._contentChanged) {\n this._resetFlexContainer();\n this._updateAutoScroll();\n }\n this._updateScrollContainer();\n this._updateScrollWrapperLayout();\n this._updateAlpha();\n }\n\n _updateAutoScroll() {\n this.resetScroll();\n this._setupAutoScroll();\n this._contentChanged = false;\n }\n\n _updateScrollWrapperLayout() {\n this._ScrollContainer.patch({\n w: this._contentWidth\n });\n this._updateFadeContainer();\n this._updateSlider();\n }\n\n _updateAlpha() {\n this._Slider.smooth = {\n alpha: this.showScrollBar && this._isFocusedMode ? 1 : 0\n };\n }\n\n _updateFadeContainer() {\n const isScrollable = this._ScrollContainer.finalH > this.h;\n const shouldFade =\n this.fadeContent && isScrollable && !this._isEndContentVisible;\n\n this._FadeContainer.patch({\n h: this.h,\n w: this._contentWidth,\n y: this.style.contentMarginTop,\n x: this.style.contentMarginLeft,\n rtt: true,\n shader: shouldFade\n ? {\n type: lng.shaders.FadeOut,\n bottom: this.style.fadeHeight\n }\n : undefined\n });\n }\n\n _scrollContainerLoaded({ h }) {\n this._ScrollContainer.h = h;\n this._updateScrollWrapperLayout();\n }\n\n _updateScrollContainer() {\n if (!this.content) return;\n\n if (typeof this.content === 'string') {\n this._ScrollContainer.patch({\n flex: { direction: 'column' },\n ScrollableText: {\n h: 0,\n w: this._contentWidth,\n type: TextBox,\n content: this.content,\n style: {\n textStyle: {\n ...this.style.textStyle,\n wordWrap: true,\n wordWrapWidth: this._contentWidth\n }\n },\n signals: {\n textBoxChanged: '_scrollContainerLoaded'\n },\n onAfterUpdate: this._afterTextBoxUpdate.bind(this)\n }\n });\n } else if (Array.isArray(this.content)) {\n const content = {};\n this.content.forEach((item, index) => {\n const id = `ScrollText${index}`;\n content[id] = {\n w: this._contentWidth,\n ...item\n };\n if (item.text) {\n content[id] = {\n type: TextBox,\n content: item.text,\n style: {\n textStyle: {\n ...this.style.textStyle,\n ...item.style,\n wordWrap: true,\n wordWrapWidth: this._contentWidth\n }\n },\n onAfterUpdate: this._afterTextBoxUpdate.bind(this)\n };\n }\n });\n this._ScrollContainer.patch({\n flex: { direction: this.flexDirection, wrap: this.shouldWrap },\n ...content\n });\n }\n }\n\n _scrollDown() {\n const hasContentToScrollTo =\n this._scrollContainerY + this._ScrollContainer.finalH > this.renderHeight;\n if (hasContentToScrollTo) {\n const targetY = this._scrollContainerY - this.scrollStep;\n const canScrollByStepLength =\n targetY + this._ScrollContainer.finalH > this.renderHeight;\n const scrollEndY =\n this.renderHeight -\n this._ScrollContainer.finalH -\n this.style.contentMarginTop;\n\n this._ScrollContainer.patch({\n smooth: {\n y: [\n canScrollByStepLength ? targetY : scrollEndY,\n this._scrollAnimation\n ]\n }\n });\n\n const hasScrolledToEnd =\n this._scrollContainerY + this._ScrollContainer.finalH <= this.h;\n\n if (hasScrolledToEnd) {\n this._isEndContentVisible = true;\n this._autoScrollComplete = true;\n this.fireAncestors('$scrollChanged', 'endDown', this);\n this._updateFadeContainer();\n }\n } else {\n return false;\n }\n }\n\n _scrollUp() {\n const canScrollUp = this._scrollContainerY < 0;\n\n if (canScrollUp) {\n const targetY = this._scrollContainerY + this.scrollStep;\n const canScrollByStepLength = targetY < 0;\n\n this._ScrollContainer.patch({\n smooth: {\n y: [canScrollByStepLength ? targetY : 0, this._scrollAnimation]\n }\n });\n\n const isScrollable =\n this._scrollContainerY + this._ScrollContainer.finalH >\n this.renderHeight;\n if (isScrollable) {\n this._autoScrollComplete = false;\n }\n\n if (this._scrollContainerY >= 0) {\n this.fireAncestors('$scrollChanged', 'endUp', this);\n }\n\n if (this._isEndContentVisible) {\n this._isEndContentVisible = false;\n this._updateFadeContainer();\n }\n } else {\n return false;\n }\n }\n\n resetScroll() {\n this._ScrollContainer.y = 0;\n this._Slider.value = 0;\n this._ScrollContainer.transition('y').finish();\n delete this._ScrollContainer._transitions;\n this._autoScrollComplete = false;\n }\n\n _setAutoScroll(val) {\n if (this._autoScroll !== val) {\n this._autoScroll = val;\n }\n this._setupAutoScroll();\n return val;\n }\n\n _setupAutoScroll() {\n clearTimeout(this._startAutoScroll);\n clearTimeout(this._performAutoScrollTimer);\n\n if (this.autoScroll) {\n this._startAutoScroll = setTimeout(\n () => this._performAutoScroll(),\n isNaN(this.autoScrollDelay) ? 2000 : this.autoScrollDelay\n );\n }\n }\n\n _performAutoScroll() {\n if (this.autoScroll && !this._autoScrollComplete) {\n this._Slider._handleDown();\n this._performAutoScrollTimer = setTimeout(\n () => this._performAutoScroll(),\n isNaN(this.autoScrollSpeed) ? 200 : this.autoScrollSpeed\n );\n }\n }\n\n _setContent(content) {\n if (content !== this._content && this.enabled) {\n this._contentChanged = true;\n }\n return content;\n }\n\n _updateScrollContainerSize(slider) {\n if (this._sliderWidth !== slider._Container.h) {\n this._sliderWidth = slider._Container.h;\n this._updateScrollContainer();\n }\n }\n\n _updateSlider() {\n // height of off-screen items that can be scrolled to\n const scrollHeight = Math.max(\n this._ScrollContainer.finalH - this.renderHeight,\n 0\n );\n\n // number of steps to scroll to the bottom of ScrollContainer\n const contentScrollSteps =\n scrollHeight > 0 ? Math.ceil(scrollHeight / this.scrollStep) : 1;\n\n // max value of slider\n const sliderMax = this.renderHeight;\n\n // distance slider should move on each key press\n const sliderStep =\n contentScrollSteps > 0 ? sliderMax / contentScrollSteps : sliderMax;\n\n // Ensure _Slider and required properties exist\n if (this._Slider) {\n // This is a vertical slider, so w is actually controlling the height\n this._Slider.patch({\n x: this.w - this._sliderWidth,\n w: sliderMax,\n min: 0,\n max: sliderMax,\n step: sliderStep,\n onUp: this._scrollUp.bind(this),\n onDown: this._scrollDown.bind(this)\n });\n }\n }\n\n get _contentWidth() {\n return (\n this.w -\n this.style.contentMarginLeft -\n this.style.sliderMarginLeft -\n this._sliderWidth\n );\n }\n\n get _scrollContainerY() {\n return this._ScrollContainer.transition('y').targetValue;\n }\n\n get _scrollAnimation() {\n const duration = isNaN(this.scrollDuration)\n ? this.style.scroll.duration\n : this.scrollDuration;\n return {\n ...this.style.scroll,\n duration\n };\n }\n\n _getFocused() {\n return this._Slider;\n }\n\n set announce(announce) {\n super.announce = announce;\n }\n\n get announce() {\n if (this._announce) {\n return this._announce;\n }\n\n if (Array.isArray(this.content)) {\n if (\n this._ScrollContainer &&\n this._ScrollContainer.children &&\n this._ScrollContainer.children.length\n ) {\n return this._ScrollContainer.children.map(item => item.announce);\n } else {\n return this.content.map(item => item.announce || item.text);\n }\n }\n return this.content;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport { default as ScrollWrapperComponent } from '.';\nimport Tile from '../Tile';\nimport { createModeControl } from '../../docs/utils';\nimport TextBox from '../TextBox/TextBox';\n\nconst terms = `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Id aliquet risus feugiat in ante metus dictum. Pretium fusce id velit ut tortor pretium viverra suspendisse. Pharetra convallis posuere morbi leo urna. Nunc sed velit dignissim sodales. Feugiat scelerisque varius morbi enim nunc faucibus a pellentesque sit. Facilisis gravida neque convallis a cras semper auctor. Pellentesque pulvinar pellentesque habitant morbi tristique. Non tellus orci ac auctor augue mauris. Semper feugiat nibh sed pulvinar proin gravida hendrerit lectus. Amet risus nullam eget felis eget nunc. Auctor urna nunc id cursus metus aliquam eleifend mi in. Integer malesuada nunc vel risus commodo viverra maecenas accumsan lacus. Hac habitasse platea dictumst vestibulum rhoncus est pellentesque elit ullamcorper. Ac felis donec et odio pellentesque. Semper auctor neque vitae tempus quam pellentesque nec nam aliquam. Sit amet risus nullam eget felis eget.\n\nMi proin sed libero enim sed faucibus. Arcu vitae elementum curabitur vitae nunc sed velit. Volutpat blandit aliquam etiam erat velit. In nulla posuere sollicitudin aliquam ultrices sagittis orci a scelerisque. Tristique risus nec feugiat in. Urna nec tincidunt praesent semper feugiat nibh sed pulvinar proin. Dolor magna eget est lorem ipsum dolor sit amet consectetur. Eget est lorem ipsum dolor sit amet consectetur. At tellus at urna condimentum mattis pellentesque id. Maecenas accumsan lacus vel facilisis. Metus dictum at tempor commodo ullamcorper a lacus. Pellentesque pulvinar pellentesque habitant morbi tristique senectus. Tempor nec feugiat nisl pretium fusce id velit ut.`;\n\nexport default {\n title: 'Components/ScrollWrapper'\n};\n\nconst sharedArgs = {\n autoScroll: false,\n autoScrollDelay: 2000,\n autoScrollSpeed: 200,\n fadeContent: true,\n scrollDuration: 0.2,\n scrollStep: 10,\n showScrollBar: true,\n mode: 'focused'\n};\n\nconst sharedArgTypes = {\n ...createModeControl({\n options: ['unfocused', 'focused'],\n summaryValue: false\n }),\n autoScroll: {\n control: 'boolean',\n description: 'Whether or not to auto scroll the content',\n type: 'boolean',\n table: {\n defaultValue: { summary: false }\n }\n },\n autoScrollDelay: {\n control: 'number',\n description: 'Delay, in ms, before auto scroll starts',\n type: 'number',\n table: {\n defaultValue: { summary: 2000 }\n }\n },\n autoScrollSpeed: {\n control: 'number',\n description: 'Time delay, in ms, before each scroll step',\n type: 'number',\n table: {\n defaultValue: { summary: 2000 }\n }\n },\n fadeContent: {\n control: 'boolean',\n description: 'Fade out content at the bottom of the ScrollWrapper',\n type: 'boolean',\n table: {\n defaultValue: { summary: true }\n }\n },\n scrollDuration: {\n control: 'number',\n description: 'Animation duration for the scroll',\n type: 'number',\n table: {\n defaultValue: { summary: 0.2 }\n }\n },\n scrollStep: {\n control: 'number',\n description: 'How many pixels to scroll by on every up/down keypress',\n type: 'number',\n table: {\n defaultValue: { summary: 10 }\n }\n },\n showScrollBar: {\n control: 'boolean',\n description: 'Show the scroll bar when focused ',\n type: 'boolean',\n table: {\n defaultValue: { summary: true }\n }\n }\n};\n\nexport const Basic = args =>\n class Basic extends lng.Component {\n static _template() {\n return {\n ScrollWrapper: {\n type: ScrollWrapperComponent,\n h: 448,\n w: 796,\n content: terms,\n signals: {\n scrollChanged: true\n }\n }\n };\n }\n\n $scrollChanged(type) {\n args.scrollChanged && args.scrollChanged(type);\n }\n };\n\nBasic.args = sharedArgs;\nBasic.argTypes = sharedArgTypes;\nBasic.parameters = {\n storyDetails: 'The ScrollWrapper content property is set as a string.'\n};\n\nexport const TextArray = args =>\n class TextArray extends lng.Component {\n static _template() {\n return {\n ScrollWrapper: {\n type: ScrollWrapperComponent,\n h: 450,\n w: 600,\n wordWrap: true,\n content: [\n {\n text: 'Text Heading',\n style: {\n fontFace: 'XfinityBrownBold',\n alignContent: 'center'\n }\n },\n {\n text: terms,\n style: {\n alignContent: 'left',\n fontSize: '30'\n }\n }\n ],\n signals: {\n scrollChanged: true\n }\n }\n };\n }\n\n $scrollChanged(type) {\n args.scrollChanged(type);\n }\n };\n\nTextArray.args = sharedArgs;\nTextArray.argTypes = sharedArgTypes;\nTextArray.parameters = {\n storyDetails:\n 'The ScrollWrapper content property is set as an array of text objects. See the InlineContent documentation for more details on these types of objects.'\n};\n\nexport const ObjectArray = args =>\n class ObjectArray extends lng.Component {\n static _template() {\n return {\n ScrollWrapper: {\n type: ScrollWrapperComponent,\n h: 764,\n w: 1200,\n shouldWrap: true, // determines if items should wrap around ScrollContainer\n flexDirection: 'row', //determines the direction items are placed in flexContainer\n content: Array.from(Array(6)).map(() => ({\n shader: {\n type: lng.shaders.RoundedRectangle,\n radius: 16\n },\n type: Tile,\n rect: true,\n w: 308,\n h: 400,\n color: 0xf53e3e45,\n flexItem: {\n margin: 24\n },\n Text: {\n type: TextBox,\n x: 20,\n y: 10,\n content:\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Id aliquet risus feugiat in ante metus dictum. Pretium fusce id velit ut tortor pretium viverra suspendisse. Pharetra convallis posuere morbi leo urna.',\n style: {\n textStyle: {\n fontSize: 27,\n lineHeight: null,\n maxLines: 0,\n textAlign: 'left',\n verticalAlign: 'middle',\n wordWrapWidth: 270\n }\n },\n shader: {\n type: lng.shaders.RoundedRectangle,\n radius: 0\n }\n }\n })),\n signals: {\n scrollChanged: true\n }\n }\n };\n }\n\n $scrollChanged(type) {\n args.scrollChanged(type);\n }\n };\n\nObjectArray.args = sharedArgs;\nObjectArray.argTypes = sharedArgTypes;\nObjectArray.parameters = {\n storyDetails:\n 'The ScrollWrapper content property is set as an array of Lightning elements.'\n};\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = \"../../../node_modules/memoizerific sync recursive\";\nmodule.exports = webpackEmptyContext;"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/components-ScrollWrapper-ScrollWrapper-mdx.5de9f842.iframe.bundle.js.map b/components-ScrollWrapper-ScrollWrapper-mdx.5de9f842.iframe.bundle.js.map deleted file mode 100644 index 02eb3bae0..000000000 --- a/components-ScrollWrapper-ScrollWrapper-mdx.5de9f842.iframe.bundle.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"components-ScrollWrapper-ScrollWrapper-mdx.5de9f842.iframe.bundle.js","mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC7XA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAOA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAtDA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;;;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4DA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAKA;AACA;AACA;AAIA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;;AAKA;AACA;;AAGA;AACA;;AAEA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AAEA;AACA;AAKA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AApBA;AACA;AAAA;AAAA;AAAA;AAvXA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAYA;AAAA;AAAA;AAAA;AAGA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;;;;;;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;AC/OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.mdx","webpack://lightning-ui-docs/../../../node_modules/@storybook/addon-docs/node_modules/@mdx-js/react/lib/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Surface/Surface.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Surface/Surface.js","webpack://lightning-ui-docs/../../../node_modules/@storybook/core/dist/components/ sync","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollSlider.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollSlider.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js","webpack://lightning-ui-docs/../../../node_modules/memoizerific/ sync"],"sourcesContent":["\nimport React from 'react';\n\n/*prettier-ignore*/\n/*\nCopyright 2023 Comcast Cable Communications Management, LLC\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nSPDX-License-Identifier: Apache-2.0\n\\*/\nimport {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from \"react/jsx-runtime\";\nimport {useMDXComponents as _provideComponents} from \"/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-docs/dist/shims/mdx-react-shim.mjs\";\nimport {Meta, Title} from '@storybook/blocks';\nimport {DocsLink} from '../../docs/utils';\nimport * as ScrollWrapperStories from './ScrollWrapper.stories';\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n p: \"p\",\n pre: \"pre\",\n table: \"table\",\n tbody: \"tbody\",\n td: \"td\",\n th: \"th\",\n thead: \"thead\",\n tr: \"tr\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [\"\\n\", \"\\n\", \"\\n\", _jsx(Meta, {\n of: ScrollWrapperStories\n }), \"\\n\", _jsx(Title, {}), \"\\n\", _jsx(_components.p, {\n children: \"A scrollable container for text content.\"\n }), \"\\n\", _jsx(_components.h2, {\n id: \"source\",\n children: \"Source\"\n }), \"\\n\", _jsx(_components.p, {\n children: _jsx(_components.a, {\n href: \"https://github.com/rdkcentral/Lightning-UI-Components/blob/develop/packages/@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.js\",\n rel: \"nofollow\",\n children: \"https://github.com/rdkcentral/Lightning-UI-Components/blob/develop/packages/@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.js\"\n })\n }), \"\\n\", _jsx(_components.h2, {\n id: \"usage\",\n children: \"Usage\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"ScrollWrapper\"\n }), \" requires both \", _jsx(_components.code, {\n children: \"w\"\n }), \" and \", _jsx(_components.code, {\n children: \"h\"\n }), \" to be set.\"]\n }), \"\\n\", _jsx(_components.pre, {\n children: _jsx(_components.code, {\n className: \"language-js\",\n children: \"import { ScrollWrapper } from '@lightningjs/ui-components';\\n\\nclass Example extends lng.Component {\\n static _template() {\\n return {\\n ScrollWrapper: {\\n type: ScrollWrapper,\\n h: 450,\\n w: 600,\\n content: 'Text content long enough to scroll vertically'\\n }\\n };\\n }\\n}\\n\"\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Alternatively, an array of components and \", _jsx(_components.code, {\n children: \"style\"\n }), \" keys may be provided as \", _jsx(_components.code, {\n children: \"content\"\n }), \".\\nStyles provided here will override those set by the theme for it's section of text:\"]\n }), \"\\n\", _jsx(_components.pre, {\n children: _jsx(_components.code, {\n className: \"language-js\",\n children: \"import { ScrollWrapper } from '@lightningjs/ui-components';\\n\\nclass Example extends lng.Component {\\n static _template() {\\n return {\\n ScrollWrapper: {\\n type: ScrollWrapper,\\n h: 450,\\n w: 600,\\n content: [\\n {\\n text: 'Text Heading',\\n style: {\\n fontStyle: 'italic',\\n alignContent: 'center'\\n }\\n },\\n {\\n text: 'Text content long enough to scroll vertically'\\n }\\n ]\\n }\\n };\\n }\\n}\\n\"\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The \", _jsx(_components.code, {\n children: \"h\"\n }), \" and \", _jsx(_components.code, {\n children: \"w\"\n }), \" properties will determine the viewable box for \", _jsx(_components.code, {\n children: \"ScrollWrapper\"\n }), \".\\nWhen focused, \", _jsx(_components.code, {\n children: \"ScrollWrapper\"\n }), \" will display a scroll bar to the right of the content\\nand up/down scrolling will be handled.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The amount of scrolling per keypress is determined via the \", _jsx(_components.code, {\n children: \"scrollStep\"\n }), \" property.\\nChange it to allow smaller or larger scroll steps per keypress.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"If the array of items contains rows/columns with different heights and/or widths set\\nautoResizeWidth and autoResizeHeight to true so that the scroll bar is of the appropriate height.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Additionally, \", _jsx(_components.code, {\n children: \"ScrollWrapper\"\n }), \" supports \", _jsx(_components.code, {\n children: \"autoScroll\"\n }), \" flag, which will auto scroll the content.\\nThe delay to start is set via \", _jsx(_components.code, {\n children: \"autoScrollDelay\"\n }), \" and speed via \", _jsx(_components.code, {\n children: \"autoScrollSpeed\"\n }), \" both in ms.\\nYou can also hide the scrollBar by setting \", _jsx(_components.code, {\n children: \"showScrollBar\"\n }), \" to \", _jsx(_components.code, {\n children: \"false\"\n }), \".\"]\n }), \"\\n\", _jsx(_components.h2, {\n id: \"api\",\n children: \"API\"\n }), \"\\n\", _jsx(_components.h3, {\n id: \"properties\",\n children: \"Properties\"\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: \"name\"\n }), _jsx(_components.th, {\n children: \"type\"\n }), _jsx(_components.th, {\n children: \"required\"\n }), _jsx(_components.th, {\n children: \"default\"\n }), _jsx(_components.th, {\n children: \"description\"\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"autoScroll\"\n }), _jsx(_components.td, {\n children: \"boolean\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"whether or not to auto scroll the content\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"autoScrollDelay\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"2000\"\n }), _jsx(_components.td, {\n children: \"delay, in ms, before auto scroll starts\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"autoScrollSpeed\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"200\"\n }), _jsx(_components.td, {\n children: \"time delay, in ms, before each scroll step\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"content\"\n }), _jsx(_components.td, {\n children: \"string|array\"\n }), _jsx(_components.td, {\n children: \"true\"\n }), _jsx(_components.td, {\n children: \"-\"\n }), _jsx(_components.td, {\n children: \"Content is items that are viewable in the container. It can be an array of strings or an array of lightning elements that can be patched in\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"fadeContent\"\n }), _jsx(_components.td, {\n children: \"boolean\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"true\"\n }), _jsx(_components.td, {\n children: \"fade out content at the bottom of the ScrollWrapper\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"flexDirection\"\n }), _jsx(_components.td, {\n children: \"string\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"column\"\n }), _jsx(_components.td, {\n children: \"determines the direction items are placed in flexContainer\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"scrollDuration\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"0.2\"\n }), _jsx(_components.td, {\n children: \"animation duration for the scroll\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"scrollStep\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"10\"\n }), _jsx(_components.td, {\n children: \"how many pixels to scroll by on every up/down keypress\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"shouldWrap\"\n }), _jsx(_components.td, {\n children: \"boolean\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"determines if items should wrap around ScrollContainer\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"showScrollBar\"\n }), _jsx(_components.td, {\n children: \"boolean\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"true\"\n }), _jsx(_components.td, {\n children: \"show the scroll bar when focused\"\n })]\n })]\n })]\n }), \"\\n\", _jsx(_components.h3, {\n id: \"style-properties\",\n children: \"Style Properties\"\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: \"name\"\n }), _jsx(_components.th, {\n children: \"type\"\n }), _jsx(_components.th, {\n children: \"description\"\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"contentMarginLeft\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"spacing to the left of the scrollable content\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"contentMarginTop\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"spacing above the scrollable content\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"fadeHeight\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsxs(_components.td, {\n children: [\"height of FadeOut shader displayed at bottom of scroll wrapper (when \", _jsx(_components.code, {\n children: \"fadeContent\"\n }), \" property is \", _jsx(_components.code, {\n children: \"true\"\n }), \")\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"scroll\"\n }), _jsx(_components.td, {\n children: _jsx(DocsLink, {\n id: \"lng.Transition\"\n })\n }), _jsx(_components.td, {\n children: \"transition to apply when scrolling\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"sliderMarginLeft\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"spacing to the left of the scroll slider\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"textStyle\"\n }), _jsx(_components.td, {\n children: \"object\"\n }), _jsxs(_components.td, {\n children: [\"Default style of text to be displayed. Object should come from the current theme or contain any properties that the \", _jsx(_components.a, {\n href: \"https://lightningjs.io/docs/#/lightning-core-reference/RenderEngine/Textures/Text?id=properties\",\n rel: \"nofollow\",\n children: \"Lightning text texture supports\"\n }), \".\"]\n })]\n })]\n })]\n }), \"\\n\", _jsx(_components.h3, {\n id: \"methods\",\n children: \"Methods\"\n }), \"\\n\", _jsx(_components.h4, {\n id: \"resetscroll-void\",\n children: \"resetScroll(): void\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Resets the \", _jsx(_components.code, {\n children: \"y\"\n }), \" value of both the content and the scroll bar.\"]\n }), \"\\n\", _jsx(_components.h3, {\n id: \"events\",\n children: \"Events\"\n }), \"\\n\", _jsx(_components.h4, {\n id: \"scrollchangedendupenddown-this\",\n children: \"$scrollChanged('endUp'|'endDown', this)\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Event fired via \", _jsx(_components.code, {\n children: \"fireAncestors\"\n }), \", is triggered when scroll reaches the top or bottom of the scroll boundaries.\"]\n }), \"\\n\", _jsx(_components.h3, {\n id: \"signals\",\n children: \"Signals\"\n }), \"\\n\", _jsx(_components.h4, {\n id: \"onupattop\",\n children: \"onUpAtTop\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Fired when user is at the top of the content within the ScrollWrapper and presses up again.\"\n }), \"\\n\", _jsx(_components.h4, {\n id: \"ondownatbottom\",\n children: \"onDownAtBottom\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Fired when user is at the bottom of the content within the ScrollWrapper and presses down again.\"\n })]\n });\n}\nexport default function MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\n","/**\n * @typedef {import('mdx/types.js').MDXComponents} MDXComponents\n * @typedef {import('react').Component<{}, {}, unknown>} Component\n * @typedef {import('react').ReactNode} ReactNode\n */\n\n/**\n * @callback MergeComponents\n * Custom merge function.\n * @param {Readonly} currentComponents\n * Current components from the context.\n * @returns {MDXComponents}\n * Additional components.\n *\n * @typedef Props\n * Configuration for `MDXProvider`.\n * @property {ReactNode | null | undefined} [children]\n * Children (optional).\n * @property {Readonly | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @property {boolean | null | undefined} [disableParentContext=false]\n * Turn off outer component context (default: `false`).\n */\n\nimport React from 'react'\n\n/** @type {Readonly} */\nconst emptyComponents = {}\n\nconst MDXContext = React.createContext(emptyComponents)\n\n/**\n * Get current components from the MDX Context.\n *\n * @param {Readonly | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @returns {MDXComponents}\n * Current components.\n */\nexport function useMDXComponents(components) {\n const contextComponents = React.useContext(MDXContext)\n\n // Memoize to avoid unnecessary top-level context changes\n return React.useMemo(\n function () {\n // Custom merge via a function prop\n if (typeof components === 'function') {\n return components(contextComponents)\n }\n\n return {...contextComponents, ...components}\n },\n [contextComponents, components]\n )\n}\n\n/**\n * Provider for MDX context.\n *\n * @param {Readonly} properties\n * Properties.\n * @returns {JSX.Element}\n * Element.\n * @satisfies {Component}\n */\nexport function MDXProvider(properties) {\n /** @type {Readonly} */\n let allComponents\n\n if (properties.disableParentContext) {\n allComponents =\n typeof properties.components === 'function'\n ? properties.components(emptyComponents)\n : properties.components || emptyComponents\n } else {\n allComponents = useMDXComponents(properties.components)\n }\n\n return React.createElement(\n MDXContext.Provider,\n {value: allComponents},\n properties.children\n )\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n backgroundColor: theme.color.interactiveNeutral,\n radius: theme.radius.md,\n animation: {}\n});\n\nexport const tone = theme => ({\n inverse: {\n backgroundColor: theme.color.interactiveInverse\n }\n});\n\nexport const mode = theme => ({\n focused: {\n backgroundColor: theme.color.interactiveNeutralFocus,\n tone: {\n inverse: {\n backgroundColor: theme.color.interactiveInverseFocus\n }\n }\n },\n disabled: {\n backgroundColor: theme.color.fillNeutralDisabled\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getMaxRoundRadius } from '../../utils';\nimport Base from '../Base';\nimport * as styles from './Surface.styles';\nimport lng from '@lightningjs/core';\n\nexport default class Surface extends Base {\n static _template() {\n return {\n Background: {}\n };\n }\n\n static get __componentName() {\n return 'Surface';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get properties() {\n return [];\n }\n\n static get tags() {\n return ['Background'];\n }\n\n get innerH() {\n return this.h;\n }\n\n get innerW() {\n return this.w;\n }\n\n _update() {\n this._updateLayout();\n this._updateScale();\n }\n\n _updateLayout() {\n this._Background.patch({\n texture: lng.Tools.getRoundRect(\n this.innerW - 2, // Reference the underscored values here in cause the h or w getters need to be overwritten for alignment - see Tile\n this.innerH - 2,\n getMaxRoundRadius(this.style.radius, this.w, this.h),\n 0,\n null,\n true,\n this.style.backgroundColor\n )\n });\n }\n\n _updateScale() {\n const scale = this._isFocusedMode\n ? this.getFocusScale(this.w, this.h)\n : this.getUnfocusScale(this.w, this.h);\n\n this.applySmooth(this, { scale }, { scale: [scale, this.style.animation] });\n }\n}\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = \"../../../node_modules/@storybook/core/dist/components sync recursive\";\nmodule.exports = webpackEmptyContext;","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n textStyle: theme.typography.body2,\n fadeHeight: 100,\n scroll: {\n timingFunction: 'linear',\n duration: theme.animation.duration.xfast\n },\n contentMarginTop: theme.spacer.md,\n contentMarginLeft: theme.spacer.xl,\n sliderMarginLeft: theme.spacer.lg + theme.spacer.xxs\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { base as scrollWrapperBase } from './ScrollWrapper.styles';\n\nexport const base = theme => {\n const { scroll } = scrollWrapperBase(theme);\n return {\n progressBar: { animation: scroll },\n circleAnimation: scroll\n };\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport Slider from '../Slider';\nimport * as styles from './ScrollSlider.styles';\n\nexport default class ScrollSlider extends Slider {\n static get __componentName() {\n return 'ScrollSlider';\n }\n\n static get __themeStyle() {\n return styles;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport Base from '../Base';\nimport * as styles from './ScrollWrapper.styles';\nimport TextBox from '../TextBox';\nimport ScrollSlider from './ScrollSlider';\n\nexport default class ScrollWrapper extends Base {\n static get __themeStyle() {\n return styles;\n }\n\n static _template() {\n return {\n clipping: true,\n FadeContainer: {\n ScrollContainer: {\n w: w => w,\n wordWrap: true\n }\n },\n Slider: {\n type: ScrollSlider,\n vertical: true,\n signals: {\n onSizeChange: '_updateScrollContainerSize'\n },\n announce: ' '\n }\n };\n }\n\n static get __componentName() {\n return 'ScrollWrapper';\n }\n\n static get properties() {\n return [\n 'autoScroll',\n 'autoScrollDelay',\n 'autoScrollSpeed',\n 'content',\n 'fadeContent',\n 'scrollDuration',\n 'scrollStep',\n 'showScrollBar',\n 'shouldWrap',\n 'flexDirection'\n ];\n }\n\n static get tags() {\n return [\n 'FadeContainer',\n 'Slider',\n {\n name: 'ScrollContainer',\n path: 'FadeContainer.ScrollContainer'\n },\n {\n name: 'ScrollableText',\n path: 'ScrollContainer.ScrollableText'\n }\n ];\n }\n\n _construct() {\n super._construct();\n this._scrollStep = 10;\n this._shouldWrap = false;\n this._flexDirection = 'column';\n this._fadeContent = true;\n this._sliderWidth = 0;\n }\n\n _afterTextBoxUpdate(textBox) {\n // NOTE: this does get called every time ScrollWrapper updates (ex. on each scroll change)\n if (this._prevW !== textBox.finalW || this._prevH !== textBox.finalH) {\n this._prevW = textBox.finalW;\n this._prevH = textBox.finalH;\n this._updateScrollWrapperLayout();\n this._updateAlpha();\n }\n }\n\n _resetFlexContainer() {\n this._FadeContainer.patch({ ScrollContainer: undefined });\n this._FadeContainer.patch({\n ScrollContainer: { w: w => w, wordWrap: true }\n });\n }\n\n _update() {\n if (this._contentChanged) {\n this._resetFlexContainer();\n this._updateAutoScroll();\n }\n this._updateScrollContainer();\n this._updateScrollWrapperLayout();\n this._updateAlpha();\n }\n\n _updateAutoScroll() {\n this.resetScroll();\n this._setupAutoScroll();\n this._contentChanged = false;\n }\n\n _updateScrollWrapperLayout() {\n this._ScrollContainer.patch({\n w: this._contentWidth\n });\n this._updateFadeContainer();\n this._updateSlider();\n }\n\n _updateAlpha() {\n this._Slider.smooth = {\n alpha: this.showScrollBar && this._isFocusedMode ? 1 : 0\n };\n }\n\n _updateFadeContainer() {\n const isScrollable = this._ScrollContainer.finalH > this.h;\n const shouldFade =\n this.fadeContent && isScrollable && !this._isEndContentVisible;\n\n this._FadeContainer.patch({\n h: this.h,\n w: this._contentWidth,\n y: this.style.contentMarginTop,\n x: this.style.contentMarginLeft,\n rtt: true,\n shader: shouldFade\n ? {\n type: lng.shaders.FadeOut,\n bottom: this.style.fadeHeight\n }\n : undefined\n });\n }\n\n _scrollContainerLoaded({ h }) {\n this._ScrollContainer.h = h;\n this._updateScrollWrapperLayout();\n }\n\n _updateScrollContainer() {\n if (!this.content) return;\n\n if (typeof this.content === 'string') {\n this._ScrollContainer.patch({\n flex: { direction: 'column' },\n ScrollableText: {\n h: 0,\n w: this._contentWidth,\n type: TextBox,\n content: this.content,\n style: {\n textStyle: {\n ...this.style.textStyle,\n wordWrap: true,\n wordWrapWidth: this._contentWidth\n }\n },\n signals: {\n textBoxChanged: '_scrollContainerLoaded'\n },\n onAfterUpdate: this._afterTextBoxUpdate.bind(this)\n }\n });\n } else if (Array.isArray(this.content)) {\n const content = {};\n this.content.forEach((item, index) => {\n const id = `ScrollText${index}`;\n content[id] = {\n w: this._contentWidth,\n ...item\n };\n if (item.text) {\n content[id] = {\n type: TextBox,\n content: item.text,\n style: {\n textStyle: {\n ...this.style.textStyle,\n ...item.style,\n wordWrap: true,\n wordWrapWidth: this._contentWidth\n }\n },\n onAfterUpdate: this._afterTextBoxUpdate.bind(this)\n };\n }\n });\n this._ScrollContainer.patch({\n flex: { direction: this.flexDirection, wrap: this.shouldWrap },\n ...content\n });\n }\n }\n\n _scrollDown() {\n const hasContentToScrollTo =\n this._scrollContainerY + this._ScrollContainer.finalH > this.renderHeight;\n if (hasContentToScrollTo) {\n const targetY = this._scrollContainerY - this.scrollStep;\n const canScrollByStepLength =\n targetY + this._ScrollContainer.finalH > this.renderHeight;\n const scrollEndY =\n this.renderHeight -\n this._ScrollContainer.finalH -\n this.style.contentMarginTop;\n\n this._ScrollContainer.patch({\n smooth: {\n y: [\n canScrollByStepLength ? targetY : scrollEndY,\n this._scrollAnimation\n ]\n }\n });\n\n const hasScrolledToEnd =\n this._scrollContainerY + this._ScrollContainer.finalH <= this.h;\n\n if (hasScrolledToEnd) {\n this._isEndContentVisible = true;\n this._autoScrollComplete = true;\n this.fireAncestors('$scrollChanged', 'endDown', this);\n this._updateFadeContainer();\n }\n } else {\n this.signal('onDownAtBottom');\n }\n }\n\n _scrollUp() {\n const canScrollUp = this._scrollContainerY < 0;\n\n if (canScrollUp) {\n const targetY = this._scrollContainerY + this.scrollStep;\n const canScrollByStepLength = targetY < 0;\n\n this._ScrollContainer.patch({\n smooth: {\n y: [canScrollByStepLength ? targetY : 0, this._scrollAnimation]\n }\n });\n\n const isScrollable =\n this._scrollContainerY + this._ScrollContainer.finalH >\n this.renderHeight;\n if (isScrollable) {\n this._autoScrollComplete = false;\n }\n\n if (this._scrollContainerY >= 0) {\n this.fireAncestors('$scrollChanged', 'endUp', this);\n }\n\n if (this._isEndContentVisible) {\n this._isEndContentVisible = false;\n this._updateFadeContainer();\n }\n } else {\n this.signal('onUpAtTop');\n }\n }\n\n resetScroll() {\n this._ScrollContainer.y = 0;\n this._Slider.value = 0;\n this._ScrollContainer.transition('y').finish();\n delete this._ScrollContainer._transitions;\n this._autoScrollComplete = false;\n }\n\n _setAutoScroll(val) {\n if (this._autoScroll !== val) {\n this._autoScroll = val;\n }\n this._setupAutoScroll();\n return val;\n }\n\n _setupAutoScroll() {\n clearTimeout(this._startAutoScroll);\n clearTimeout(this._performAutoScrollTimer);\n\n if (this.autoScroll) {\n this._startAutoScroll = setTimeout(\n () => this._performAutoScroll(),\n isNaN(this.autoScrollDelay) ? 2000 : this.autoScrollDelay\n );\n }\n }\n\n _performAutoScroll() {\n if (this.autoScroll && !this._autoScrollComplete) {\n this._Slider._handleDown();\n this._performAutoScrollTimer = setTimeout(\n () => this._performAutoScroll(),\n isNaN(this.autoScrollSpeed) ? 200 : this.autoScrollSpeed\n );\n }\n }\n\n _setContent(content) {\n if (content !== this._content && this.enabled) {\n this._contentChanged = true;\n }\n return content;\n }\n\n _updateScrollContainerSize(slider) {\n if (this._sliderWidth !== slider._Container.h) {\n this._sliderWidth = slider._Container.h;\n this._updateScrollContainer();\n }\n }\n\n _updateSlider() {\n // height of off-screen items that can be scrolled to\n const scrollHeight = Math.max(\n this._ScrollContainer.finalH - this.renderHeight,\n 0\n );\n\n // number of steps to scroll to the bottom of ScrollContainer\n const contentScrollSteps =\n scrollHeight > 0 ? Math.ceil(scrollHeight / this.scrollStep) : 1;\n\n // max value of slider\n const sliderMax = this.renderHeight;\n\n // distance slider should move on each key press\n const sliderStep =\n contentScrollSteps > 0 ? sliderMax / contentScrollSteps : sliderMax;\n\n // Ensure _Slider and required properties exist\n if (this._Slider) {\n // This is a vertical slider, so w is actually controlling the height\n this._Slider.patch({\n x: this.w - this._sliderWidth,\n w: sliderMax,\n min: 0,\n max: sliderMax,\n step: sliderStep,\n onUp: this._scrollUp.bind(this),\n onDown: this._scrollDown.bind(this)\n });\n }\n }\n\n get _contentWidth() {\n return (\n this.w -\n this.style.contentMarginLeft -\n this.style.sliderMarginLeft -\n this._sliderWidth\n );\n }\n\n get _scrollContainerY() {\n return this._ScrollContainer.transition('y').targetValue;\n }\n\n get _scrollAnimation() {\n const duration = isNaN(this.scrollDuration)\n ? this.style.scroll.duration\n : this.scrollDuration;\n return {\n ...this.style.scroll,\n duration\n };\n }\n\n _getFocused() {\n return this._Slider;\n }\n\n set announce(announce) {\n super.announce = announce;\n }\n\n get announce() {\n if (this._announce) {\n return this._announce;\n }\n\n if (Array.isArray(this.content)) {\n if (\n this._ScrollContainer &&\n this._ScrollContainer.children &&\n this._ScrollContainer.children.length\n ) {\n return this._ScrollContainer.children.map(item => item.announce);\n } else {\n return this.content.map(item => item.announce || item.text);\n }\n }\n return this.content;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport { default as ScrollWrapperComponent } from '.';\nimport Tile from '../Tile';\nimport { createModeControl } from '../../docs/utils';\nimport TextBox from '../TextBox/TextBox';\n\nconst terms = `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Id aliquet risus feugiat in ante metus dictum. Pretium fusce id velit ut tortor pretium viverra suspendisse. Pharetra convallis posuere morbi leo urna. Nunc sed velit dignissim sodales. Feugiat scelerisque varius morbi enim nunc faucibus a pellentesque sit. Facilisis gravida neque convallis a cras semper auctor. Pellentesque pulvinar pellentesque habitant morbi tristique. Non tellus orci ac auctor augue mauris. Semper feugiat nibh sed pulvinar proin gravida hendrerit lectus. Amet risus nullam eget felis eget nunc. Auctor urna nunc id cursus metus aliquam eleifend mi in. Integer malesuada nunc vel risus commodo viverra maecenas accumsan lacus. Hac habitasse platea dictumst vestibulum rhoncus est pellentesque elit ullamcorper. Ac felis donec et odio pellentesque. Semper auctor neque vitae tempus quam pellentesque nec nam aliquam. Sit amet risus nullam eget felis eget.\n\nMi proin sed libero enim sed faucibus. Arcu vitae elementum curabitur vitae nunc sed velit. Volutpat blandit aliquam etiam erat velit. In nulla posuere sollicitudin aliquam ultrices sagittis orci a scelerisque. Tristique risus nec feugiat in. Urna nec tincidunt praesent semper feugiat nibh sed pulvinar proin. Dolor magna eget est lorem ipsum dolor sit amet consectetur. Eget est lorem ipsum dolor sit amet consectetur. At tellus at urna condimentum mattis pellentesque id. Maecenas accumsan lacus vel facilisis. Metus dictum at tempor commodo ullamcorper a lacus. Pellentesque pulvinar pellentesque habitant morbi tristique senectus. Tempor nec feugiat nisl pretium fusce id velit ut.`;\n\nexport default {\n title: 'Components/ScrollWrapper'\n};\n\nconst sharedArgs = {\n autoScroll: false,\n autoScrollDelay: 2000,\n autoScrollSpeed: 200,\n fadeContent: true,\n scrollDuration: 0.2,\n scrollStep: 10,\n showScrollBar: true,\n mode: 'focused'\n};\n\nconst sharedArgTypes = {\n ...createModeControl({\n options: ['unfocused', 'focused'],\n summaryValue: false\n }),\n autoScroll: {\n control: 'boolean',\n description: 'Whether or not to auto scroll the content',\n type: 'boolean',\n table: {\n defaultValue: { summary: false }\n }\n },\n autoScrollDelay: {\n control: 'number',\n description: 'Delay, in ms, before auto scroll starts',\n type: 'number',\n table: {\n defaultValue: { summary: 2000 }\n }\n },\n autoScrollSpeed: {\n control: 'number',\n description: 'Time delay, in ms, before each scroll step',\n type: 'number',\n table: {\n defaultValue: { summary: 2000 }\n }\n },\n fadeContent: {\n control: 'boolean',\n description: 'Fade out content at the bottom of the ScrollWrapper',\n type: 'boolean',\n table: {\n defaultValue: { summary: true }\n }\n },\n scrollDuration: {\n control: 'number',\n description: 'Animation duration for the scroll',\n type: 'number',\n table: {\n defaultValue: { summary: 0.2 }\n }\n },\n scrollStep: {\n control: 'number',\n description: 'How many pixels to scroll by on every up/down keypress',\n type: 'number',\n table: {\n defaultValue: { summary: 10 }\n }\n },\n showScrollBar: {\n control: 'boolean',\n description: 'Show the scroll bar when focused ',\n type: 'boolean',\n table: {\n defaultValue: { summary: true }\n }\n }\n};\n\nexport const Basic = args =>\n class Basic extends lng.Component {\n static _template() {\n return {\n ScrollWrapper: {\n type: ScrollWrapperComponent,\n h: 448,\n w: 796,\n content: terms,\n signals: {\n scrollChanged: true\n }\n }\n };\n }\n\n $scrollChanged(type) {\n args.scrollChanged && args.scrollChanged(type);\n }\n };\n\nBasic.args = sharedArgs;\nBasic.argTypes = sharedArgTypes;\nBasic.parameters = {\n storyDetails: 'The ScrollWrapper content property is set as a string.'\n};\n\nexport const TextArray = args =>\n class TextArray extends lng.Component {\n static _template() {\n return {\n ScrollWrapper: {\n type: ScrollWrapperComponent,\n h: 450,\n w: 600,\n wordWrap: true,\n content: [\n {\n text: 'Text Heading',\n style: {\n fontFace: 'XfinityBrownBold',\n alignContent: 'center'\n }\n },\n {\n text: terms,\n style: {\n alignContent: 'left',\n fontSize: '30'\n }\n }\n ],\n signals: {\n scrollChanged: true\n }\n }\n };\n }\n\n $scrollChanged(type) {\n args.scrollChanged(type);\n }\n };\n\nTextArray.args = sharedArgs;\nTextArray.argTypes = sharedArgTypes;\nTextArray.parameters = {\n storyDetails:\n 'The ScrollWrapper content property is set as an array of text objects. See the InlineContent documentation for more details on these types of objects.'\n};\n\nexport const ObjectArray = args =>\n class ObjectArray extends lng.Component {\n static _template() {\n return {\n ScrollWrapper: {\n type: ScrollWrapperComponent,\n h: 764,\n w: 1200,\n shouldWrap: true, // determines if items should wrap around ScrollContainer\n flexDirection: 'row', //determines the direction items are placed in flexContainer\n content: Array.from(Array(6)).map(() => ({\n shader: {\n type: lng.shaders.RoundedRectangle,\n radius: 16\n },\n type: Tile,\n rect: true,\n w: 308,\n h: 400,\n color: 0xf53e3e45,\n flexItem: {\n margin: 24\n },\n Text: {\n type: TextBox,\n x: 20,\n y: 10,\n content:\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Id aliquet risus feugiat in ante metus dictum. Pretium fusce id velit ut tortor pretium viverra suspendisse. Pharetra convallis posuere morbi leo urna.',\n style: {\n textStyle: {\n fontSize: 27,\n lineHeight: null,\n maxLines: 0,\n textAlign: 'left',\n verticalAlign: 'middle',\n wordWrapWidth: 270\n }\n },\n shader: {\n type: lng.shaders.RoundedRectangle,\n radius: 0\n }\n }\n })),\n signals: {\n scrollChanged: true\n }\n }\n };\n }\n\n $scrollChanged(type) {\n args.scrollChanged(type);\n }\n };\n\nObjectArray.args = sharedArgs;\nObjectArray.argTypes = sharedArgTypes;\nObjectArray.parameters = {\n storyDetails:\n 'The ScrollWrapper content property is set as an array of Lightning elements.'\n};\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = \"../../../node_modules/memoizerific sync recursive\";\nmodule.exports = webpackEmptyContext;"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/components-ScrollWrapper-ScrollWrapper-stories.074b5b28.iframe.bundle.js b/components-ScrollWrapper-ScrollWrapper-stories.7ae49e1b.iframe.bundle.js similarity index 99% rename from components-ScrollWrapper-ScrollWrapper-stories.074b5b28.iframe.bundle.js rename to components-ScrollWrapper-ScrollWrapper-stories.7ae49e1b.iframe.bundle.js index 3c4b9ed6b..afbe91094 100644 --- a/components-ScrollWrapper-ScrollWrapper-stories.074b5b28.iframe.bundle.js +++ b/components-ScrollWrapper-ScrollWrapper-stories.7ae49e1b.iframe.bundle.js @@ -558,7 +558,7 @@ var ScrollWrapper = /*#__PURE__*/function (_Base) { this._updateFadeContainer(); } } else { - this.signal('onDownAtBottom'); + return false; } } }, { @@ -585,7 +585,7 @@ var ScrollWrapper = /*#__PURE__*/function (_Base) { this._updateFadeContainer(); } } else { - this.signal('onUpAtTop'); + return false; } } }, { @@ -1046,4 +1046,4 @@ ObjectArray.parameters = { /***/ }) }]); -//# sourceMappingURL=components-ScrollWrapper-ScrollWrapper-stories.074b5b28.iframe.bundle.js.map \ No newline at end of file +//# sourceMappingURL=components-ScrollWrapper-ScrollWrapper-stories.7ae49e1b.iframe.bundle.js.map \ No newline at end of file diff --git a/components-ScrollWrapper-ScrollWrapper-stories.074b5b28.iframe.bundle.js.map b/components-ScrollWrapper-ScrollWrapper-stories.7ae49e1b.iframe.bundle.js.map similarity index 59% rename from components-ScrollWrapper-ScrollWrapper-stories.074b5b28.iframe.bundle.js.map rename to components-ScrollWrapper-ScrollWrapper-stories.7ae49e1b.iframe.bundle.js.map index 1dfb6a2ef..7e35efd0c 100644 --- a/components-ScrollWrapper-ScrollWrapper-stories.074b5b28.iframe.bundle.js.map +++ b/components-ScrollWrapper-ScrollWrapper-stories.7ae49e1b.iframe.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"components-ScrollWrapper-ScrollWrapper-stories.074b5b28.iframe.bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAOA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAtDA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4DA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAKA;AACA;AACA;AAIA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;;AAKA;AACA;;AAGA;AACA;;AAEA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AAEA;AACA;AAKA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AApBA;AACA;AAAA;AAAA;AAAA;AAvXA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAYA;AAAA;AAAA;AAAA;AAGA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;;;;;;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sources":["webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Surface/Surface.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Surface/Surface.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollSlider.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollSlider.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js"],"sourcesContent":["/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n backgroundColor: theme.color.interactiveNeutral,\n radius: theme.radius.md,\n animation: {}\n});\n\nexport const tone = theme => ({\n inverse: {\n backgroundColor: theme.color.interactiveInverse\n }\n});\n\nexport const mode = theme => ({\n focused: {\n backgroundColor: theme.color.interactiveNeutralFocus,\n tone: {\n inverse: {\n backgroundColor: theme.color.interactiveInverseFocus\n }\n }\n },\n disabled: {\n backgroundColor: theme.color.fillNeutralDisabled\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getMaxRoundRadius } from '../../utils';\nimport Base from '../Base';\nimport * as styles from './Surface.styles';\nimport lng from '@lightningjs/core';\n\nexport default class Surface extends Base {\n static _template() {\n return {\n Background: {}\n };\n }\n\n static get __componentName() {\n return 'Surface';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get properties() {\n return [];\n }\n\n static get tags() {\n return ['Background'];\n }\n\n get innerH() {\n return this.h;\n }\n\n get innerW() {\n return this.w;\n }\n\n _update() {\n this._updateLayout();\n this._updateScale();\n }\n\n _updateLayout() {\n this._Background.patch({\n texture: lng.Tools.getRoundRect(\n this.innerW - 2, // Reference the underscored values here in cause the h or w getters need to be overwritten for alignment - see Tile\n this.innerH - 2,\n getMaxRoundRadius(this.style.radius, this.w, this.h),\n 0,\n null,\n true,\n this.style.backgroundColor\n )\n });\n }\n\n _updateScale() {\n const scale = this._isFocusedMode\n ? this.getFocusScale(this.w, this.h)\n : this.getUnfocusScale(this.w, this.h);\n\n this.applySmooth(this, { scale }, { scale: [scale, this.style.animation] });\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n textStyle: theme.typography.body2,\n fadeHeight: 100,\n scroll: {\n timingFunction: 'linear',\n duration: theme.animation.duration.xfast\n },\n contentMarginTop: theme.spacer.md,\n contentMarginLeft: theme.spacer.xl,\n sliderMarginLeft: theme.spacer.lg + theme.spacer.xxs\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { base as scrollWrapperBase } from './ScrollWrapper.styles';\n\nexport const base = theme => {\n const { scroll } = scrollWrapperBase(theme);\n return {\n progressBar: { animation: scroll },\n circleAnimation: scroll\n };\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport Slider from '../Slider';\nimport * as styles from './ScrollSlider.styles';\n\nexport default class ScrollSlider extends Slider {\n static get __componentName() {\n return 'ScrollSlider';\n }\n\n static get __themeStyle() {\n return styles;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport Base from '../Base';\nimport * as styles from './ScrollWrapper.styles';\nimport TextBox from '../TextBox';\nimport ScrollSlider from './ScrollSlider';\n\nexport default class ScrollWrapper extends Base {\n static get __themeStyle() {\n return styles;\n }\n\n static _template() {\n return {\n clipping: true,\n FadeContainer: {\n ScrollContainer: {\n w: w => w,\n wordWrap: true\n }\n },\n Slider: {\n type: ScrollSlider,\n vertical: true,\n signals: {\n onSizeChange: '_updateScrollContainerSize'\n },\n announce: ' '\n }\n };\n }\n\n static get __componentName() {\n return 'ScrollWrapper';\n }\n\n static get properties() {\n return [\n 'autoScroll',\n 'autoScrollDelay',\n 'autoScrollSpeed',\n 'content',\n 'fadeContent',\n 'scrollDuration',\n 'scrollStep',\n 'showScrollBar',\n 'shouldWrap',\n 'flexDirection'\n ];\n }\n\n static get tags() {\n return [\n 'FadeContainer',\n 'Slider',\n {\n name: 'ScrollContainer',\n path: 'FadeContainer.ScrollContainer'\n },\n {\n name: 'ScrollableText',\n path: 'ScrollContainer.ScrollableText'\n }\n ];\n }\n\n _construct() {\n super._construct();\n this._scrollStep = 10;\n this._shouldWrap = false;\n this._flexDirection = 'column';\n this._fadeContent = true;\n this._sliderWidth = 0;\n }\n\n _afterTextBoxUpdate(textBox) {\n // NOTE: this does get called every time ScrollWrapper updates (ex. on each scroll change)\n if (this._prevW !== textBox.finalW || this._prevH !== textBox.finalH) {\n this._prevW = textBox.finalW;\n this._prevH = textBox.finalH;\n this._updateScrollWrapperLayout();\n this._updateAlpha();\n }\n }\n\n _resetFlexContainer() {\n this._FadeContainer.patch({ ScrollContainer: undefined });\n this._FadeContainer.patch({\n ScrollContainer: { w: w => w, wordWrap: true }\n });\n }\n\n _update() {\n if (this._contentChanged) {\n this._resetFlexContainer();\n this._updateAutoScroll();\n }\n this._updateScrollContainer();\n this._updateScrollWrapperLayout();\n this._updateAlpha();\n }\n\n _updateAutoScroll() {\n this.resetScroll();\n this._setupAutoScroll();\n this._contentChanged = false;\n }\n\n _updateScrollWrapperLayout() {\n this._ScrollContainer.patch({\n w: this._contentWidth\n });\n this._updateFadeContainer();\n this._updateSlider();\n }\n\n _updateAlpha() {\n this._Slider.smooth = {\n alpha: this.showScrollBar && this._isFocusedMode ? 1 : 0\n };\n }\n\n _updateFadeContainer() {\n const isScrollable = this._ScrollContainer.finalH > this.h;\n const shouldFade =\n this.fadeContent && isScrollable && !this._isEndContentVisible;\n\n this._FadeContainer.patch({\n h: this.h,\n w: this._contentWidth,\n y: this.style.contentMarginTop,\n x: this.style.contentMarginLeft,\n rtt: true,\n shader: shouldFade\n ? {\n type: lng.shaders.FadeOut,\n bottom: this.style.fadeHeight\n }\n : undefined\n });\n }\n\n _scrollContainerLoaded({ h }) {\n this._ScrollContainer.h = h;\n this._updateScrollWrapperLayout();\n }\n\n _updateScrollContainer() {\n if (!this.content) return;\n\n if (typeof this.content === 'string') {\n this._ScrollContainer.patch({\n flex: { direction: 'column' },\n ScrollableText: {\n h: 0,\n w: this._contentWidth,\n type: TextBox,\n content: this.content,\n style: {\n textStyle: {\n ...this.style.textStyle,\n wordWrap: true,\n wordWrapWidth: this._contentWidth\n }\n },\n signals: {\n textBoxChanged: '_scrollContainerLoaded'\n },\n onAfterUpdate: this._afterTextBoxUpdate.bind(this)\n }\n });\n } else if (Array.isArray(this.content)) {\n const content = {};\n this.content.forEach((item, index) => {\n const id = `ScrollText${index}`;\n content[id] = {\n w: this._contentWidth,\n ...item\n };\n if (item.text) {\n content[id] = {\n type: TextBox,\n content: item.text,\n style: {\n textStyle: {\n ...this.style.textStyle,\n ...item.style,\n wordWrap: true,\n wordWrapWidth: this._contentWidth\n }\n },\n onAfterUpdate: this._afterTextBoxUpdate.bind(this)\n };\n }\n });\n this._ScrollContainer.patch({\n flex: { direction: this.flexDirection, wrap: this.shouldWrap },\n ...content\n });\n }\n }\n\n _scrollDown() {\n const hasContentToScrollTo =\n this._scrollContainerY + this._ScrollContainer.finalH > this.renderHeight;\n if (hasContentToScrollTo) {\n const targetY = this._scrollContainerY - this.scrollStep;\n const canScrollByStepLength =\n targetY + this._ScrollContainer.finalH > this.renderHeight;\n const scrollEndY =\n this.renderHeight -\n this._ScrollContainer.finalH -\n this.style.contentMarginTop;\n\n this._ScrollContainer.patch({\n smooth: {\n y: [\n canScrollByStepLength ? targetY : scrollEndY,\n this._scrollAnimation\n ]\n }\n });\n\n const hasScrolledToEnd =\n this._scrollContainerY + this._ScrollContainer.finalH <= this.h;\n\n if (hasScrolledToEnd) {\n this._isEndContentVisible = true;\n this._autoScrollComplete = true;\n this.fireAncestors('$scrollChanged', 'endDown', this);\n this._updateFadeContainer();\n }\n } else {\n this.signal('onDownAtBottom');\n }\n }\n\n _scrollUp() {\n const canScrollUp = this._scrollContainerY < 0;\n\n if (canScrollUp) {\n const targetY = this._scrollContainerY + this.scrollStep;\n const canScrollByStepLength = targetY < 0;\n\n this._ScrollContainer.patch({\n smooth: {\n y: [canScrollByStepLength ? targetY : 0, this._scrollAnimation]\n }\n });\n\n const isScrollable =\n this._scrollContainerY + this._ScrollContainer.finalH >\n this.renderHeight;\n if (isScrollable) {\n this._autoScrollComplete = false;\n }\n\n if (this._scrollContainerY >= 0) {\n this.fireAncestors('$scrollChanged', 'endUp', this);\n }\n\n if (this._isEndContentVisible) {\n this._isEndContentVisible = false;\n this._updateFadeContainer();\n }\n } else {\n this.signal('onUpAtTop');\n }\n }\n\n resetScroll() {\n this._ScrollContainer.y = 0;\n this._Slider.value = 0;\n this._ScrollContainer.transition('y').finish();\n delete this._ScrollContainer._transitions;\n this._autoScrollComplete = false;\n }\n\n _setAutoScroll(val) {\n if (this._autoScroll !== val) {\n this._autoScroll = val;\n }\n this._setupAutoScroll();\n return val;\n }\n\n _setupAutoScroll() {\n clearTimeout(this._startAutoScroll);\n clearTimeout(this._performAutoScrollTimer);\n\n if (this.autoScroll) {\n this._startAutoScroll = setTimeout(\n () => this._performAutoScroll(),\n isNaN(this.autoScrollDelay) ? 2000 : this.autoScrollDelay\n );\n }\n }\n\n _performAutoScroll() {\n if (this.autoScroll && !this._autoScrollComplete) {\n this._Slider._handleDown();\n this._performAutoScrollTimer = setTimeout(\n () => this._performAutoScroll(),\n isNaN(this.autoScrollSpeed) ? 200 : this.autoScrollSpeed\n );\n }\n }\n\n _setContent(content) {\n if (content !== this._content && this.enabled) {\n this._contentChanged = true;\n }\n return content;\n }\n\n _updateScrollContainerSize(slider) {\n if (this._sliderWidth !== slider._Container.h) {\n this._sliderWidth = slider._Container.h;\n this._updateScrollContainer();\n }\n }\n\n _updateSlider() {\n // height of off-screen items that can be scrolled to\n const scrollHeight = Math.max(\n this._ScrollContainer.finalH - this.renderHeight,\n 0\n );\n\n // number of steps to scroll to the bottom of ScrollContainer\n const contentScrollSteps =\n scrollHeight > 0 ? Math.ceil(scrollHeight / this.scrollStep) : 1;\n\n // max value of slider\n const sliderMax = this.renderHeight;\n\n // distance slider should move on each key press\n const sliderStep =\n contentScrollSteps > 0 ? sliderMax / contentScrollSteps : sliderMax;\n\n // Ensure _Slider and required properties exist\n if (this._Slider) {\n // This is a vertical slider, so w is actually controlling the height\n this._Slider.patch({\n x: this.w - this._sliderWidth,\n w: sliderMax,\n min: 0,\n max: sliderMax,\n step: sliderStep,\n onUp: this._scrollUp.bind(this),\n onDown: this._scrollDown.bind(this)\n });\n }\n }\n\n get _contentWidth() {\n return (\n this.w -\n this.style.contentMarginLeft -\n this.style.sliderMarginLeft -\n this._sliderWidth\n );\n }\n\n get _scrollContainerY() {\n return this._ScrollContainer.transition('y').targetValue;\n }\n\n get _scrollAnimation() {\n const duration = isNaN(this.scrollDuration)\n ? this.style.scroll.duration\n : this.scrollDuration;\n return {\n ...this.style.scroll,\n duration\n };\n }\n\n _getFocused() {\n return this._Slider;\n }\n\n set announce(announce) {\n super.announce = announce;\n }\n\n get announce() {\n if (this._announce) {\n return this._announce;\n }\n\n if (Array.isArray(this.content)) {\n if (\n this._ScrollContainer &&\n this._ScrollContainer.children &&\n this._ScrollContainer.children.length\n ) {\n return this._ScrollContainer.children.map(item => item.announce);\n } else {\n return this.content.map(item => item.announce || item.text);\n }\n }\n return this.content;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport { default as ScrollWrapperComponent } from '.';\nimport Tile from '../Tile';\nimport { createModeControl } from '../../docs/utils';\nimport TextBox from '../TextBox/TextBox';\n\nconst terms = `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Id aliquet risus feugiat in ante metus dictum. Pretium fusce id velit ut tortor pretium viverra suspendisse. Pharetra convallis posuere morbi leo urna. Nunc sed velit dignissim sodales. Feugiat scelerisque varius morbi enim nunc faucibus a pellentesque sit. Facilisis gravida neque convallis a cras semper auctor. Pellentesque pulvinar pellentesque habitant morbi tristique. Non tellus orci ac auctor augue mauris. Semper feugiat nibh sed pulvinar proin gravida hendrerit lectus. Amet risus nullam eget felis eget nunc. Auctor urna nunc id cursus metus aliquam eleifend mi in. Integer malesuada nunc vel risus commodo viverra maecenas accumsan lacus. Hac habitasse platea dictumst vestibulum rhoncus est pellentesque elit ullamcorper. Ac felis donec et odio pellentesque. Semper auctor neque vitae tempus quam pellentesque nec nam aliquam. Sit amet risus nullam eget felis eget.\n\nMi proin sed libero enim sed faucibus. Arcu vitae elementum curabitur vitae nunc sed velit. Volutpat blandit aliquam etiam erat velit. In nulla posuere sollicitudin aliquam ultrices sagittis orci a scelerisque. Tristique risus nec feugiat in. Urna nec tincidunt praesent semper feugiat nibh sed pulvinar proin. Dolor magna eget est lorem ipsum dolor sit amet consectetur. Eget est lorem ipsum dolor sit amet consectetur. At tellus at urna condimentum mattis pellentesque id. Maecenas accumsan lacus vel facilisis. Metus dictum at tempor commodo ullamcorper a lacus. Pellentesque pulvinar pellentesque habitant morbi tristique senectus. Tempor nec feugiat nisl pretium fusce id velit ut.`;\n\nexport default {\n title: 'Components/ScrollWrapper'\n};\n\nconst sharedArgs = {\n autoScroll: false,\n autoScrollDelay: 2000,\n autoScrollSpeed: 200,\n fadeContent: true,\n scrollDuration: 0.2,\n scrollStep: 10,\n showScrollBar: true,\n mode: 'focused'\n};\n\nconst sharedArgTypes = {\n ...createModeControl({\n options: ['unfocused', 'focused'],\n summaryValue: false\n }),\n autoScroll: {\n control: 'boolean',\n description: 'Whether or not to auto scroll the content',\n type: 'boolean',\n table: {\n defaultValue: { summary: false }\n }\n },\n autoScrollDelay: {\n control: 'number',\n description: 'Delay, in ms, before auto scroll starts',\n type: 'number',\n table: {\n defaultValue: { summary: 2000 }\n }\n },\n autoScrollSpeed: {\n control: 'number',\n description: 'Time delay, in ms, before each scroll step',\n type: 'number',\n table: {\n defaultValue: { summary: 2000 }\n }\n },\n fadeContent: {\n control: 'boolean',\n description: 'Fade out content at the bottom of the ScrollWrapper',\n type: 'boolean',\n table: {\n defaultValue: { summary: true }\n }\n },\n scrollDuration: {\n control: 'number',\n description: 'Animation duration for the scroll',\n type: 'number',\n table: {\n defaultValue: { summary: 0.2 }\n }\n },\n scrollStep: {\n control: 'number',\n description: 'How many pixels to scroll by on every up/down keypress',\n type: 'number',\n table: {\n defaultValue: { summary: 10 }\n }\n },\n showScrollBar: {\n control: 'boolean',\n description: 'Show the scroll bar when focused ',\n type: 'boolean',\n table: {\n defaultValue: { summary: true }\n }\n }\n};\n\nexport const Basic = args =>\n class Basic extends lng.Component {\n static _template() {\n return {\n ScrollWrapper: {\n type: ScrollWrapperComponent,\n h: 448,\n w: 796,\n content: terms,\n signals: {\n scrollChanged: true\n }\n }\n };\n }\n\n $scrollChanged(type) {\n args.scrollChanged && args.scrollChanged(type);\n }\n };\n\nBasic.args = sharedArgs;\nBasic.argTypes = sharedArgTypes;\nBasic.parameters = {\n storyDetails: 'The ScrollWrapper content property is set as a string.'\n};\n\nexport const TextArray = args =>\n class TextArray extends lng.Component {\n static _template() {\n return {\n ScrollWrapper: {\n type: ScrollWrapperComponent,\n h: 450,\n w: 600,\n wordWrap: true,\n content: [\n {\n text: 'Text Heading',\n style: {\n fontFace: 'XfinityBrownBold',\n alignContent: 'center'\n }\n },\n {\n text: terms,\n style: {\n alignContent: 'left',\n fontSize: '30'\n }\n }\n ],\n signals: {\n scrollChanged: true\n }\n }\n };\n }\n\n $scrollChanged(type) {\n args.scrollChanged(type);\n }\n };\n\nTextArray.args = sharedArgs;\nTextArray.argTypes = sharedArgTypes;\nTextArray.parameters = {\n storyDetails:\n 'The ScrollWrapper content property is set as an array of text objects. See the InlineContent documentation for more details on these types of objects.'\n};\n\nexport const ObjectArray = args =>\n class ObjectArray extends lng.Component {\n static _template() {\n return {\n ScrollWrapper: {\n type: ScrollWrapperComponent,\n h: 764,\n w: 1200,\n shouldWrap: true, // determines if items should wrap around ScrollContainer\n flexDirection: 'row', //determines the direction items are placed in flexContainer\n content: Array.from(Array(6)).map(() => ({\n shader: {\n type: lng.shaders.RoundedRectangle,\n radius: 16\n },\n type: Tile,\n rect: true,\n w: 308,\n h: 400,\n color: 0xf53e3e45,\n flexItem: {\n margin: 24\n },\n Text: {\n type: TextBox,\n x: 20,\n y: 10,\n content:\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Id aliquet risus feugiat in ante metus dictum. Pretium fusce id velit ut tortor pretium viverra suspendisse. Pharetra convallis posuere morbi leo urna.',\n style: {\n textStyle: {\n fontSize: 27,\n lineHeight: null,\n maxLines: 0,\n textAlign: 'left',\n verticalAlign: 'middle',\n wordWrapWidth: 270\n }\n },\n shader: {\n type: lng.shaders.RoundedRectangle,\n radius: 0\n }\n }\n })),\n signals: {\n scrollChanged: true\n }\n }\n };\n }\n\n $scrollChanged(type) {\n args.scrollChanged(type);\n }\n };\n\nObjectArray.args = sharedArgs;\nObjectArray.argTypes = sharedArgTypes;\nObjectArray.parameters = {\n storyDetails:\n 'The ScrollWrapper content property is set as an array of Lightning elements.'\n};\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"components-ScrollWrapper-ScrollWrapper-stories.7ae49e1b.iframe.bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAOA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAtDA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4DA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAKA;AACA;AACA;AAIA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;;AAKA;AACA;;AAGA;AACA;;AAEA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AAEA;AACA;AAKA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AApBA;AACA;AAAA;AAAA;AAAA;AAvXA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAYA;AAAA;AAAA;AAAA;AAGA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;;;;;;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sources":["webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Surface/Surface.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Surface/Surface.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollSlider.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollSlider.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js"],"sourcesContent":["/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n backgroundColor: theme.color.interactiveNeutral,\n radius: theme.radius.md,\n animation: {}\n});\n\nexport const tone = theme => ({\n inverse: {\n backgroundColor: theme.color.interactiveInverse\n }\n});\n\nexport const mode = theme => ({\n focused: {\n backgroundColor: theme.color.interactiveNeutralFocus,\n tone: {\n inverse: {\n backgroundColor: theme.color.interactiveInverseFocus\n }\n }\n },\n disabled: {\n backgroundColor: theme.color.fillNeutralDisabled\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getMaxRoundRadius } from '../../utils';\nimport Base from '../Base';\nimport * as styles from './Surface.styles';\nimport lng from '@lightningjs/core';\n\nexport default class Surface extends Base {\n static _template() {\n return {\n Background: {}\n };\n }\n\n static get __componentName() {\n return 'Surface';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get properties() {\n return [];\n }\n\n static get tags() {\n return ['Background'];\n }\n\n get innerH() {\n return this.h;\n }\n\n get innerW() {\n return this.w;\n }\n\n _update() {\n this._updateLayout();\n this._updateScale();\n }\n\n _updateLayout() {\n this._Background.patch({\n texture: lng.Tools.getRoundRect(\n this.innerW - 2, // Reference the underscored values here in cause the h or w getters need to be overwritten for alignment - see Tile\n this.innerH - 2,\n getMaxRoundRadius(this.style.radius, this.w, this.h),\n 0,\n null,\n true,\n this.style.backgroundColor\n )\n });\n }\n\n _updateScale() {\n const scale = this._isFocusedMode\n ? this.getFocusScale(this.w, this.h)\n : this.getUnfocusScale(this.w, this.h);\n\n this.applySmooth(this, { scale }, { scale: [scale, this.style.animation] });\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n textStyle: theme.typography.body2,\n fadeHeight: 100,\n scroll: {\n timingFunction: 'linear',\n duration: theme.animation.duration.xfast\n },\n contentMarginTop: theme.spacer.md,\n contentMarginLeft: theme.spacer.xl,\n sliderMarginLeft: theme.spacer.lg + theme.spacer.xxs\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { base as scrollWrapperBase } from './ScrollWrapper.styles';\n\nexport const base = theme => {\n const { scroll } = scrollWrapperBase(theme);\n return {\n progressBar: { animation: scroll },\n circleAnimation: scroll\n };\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport Slider from '../Slider';\nimport * as styles from './ScrollSlider.styles';\n\nexport default class ScrollSlider extends Slider {\n static get __componentName() {\n return 'ScrollSlider';\n }\n\n static get __themeStyle() {\n return styles;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport Base from '../Base';\nimport * as styles from './ScrollWrapper.styles';\nimport TextBox from '../TextBox';\nimport ScrollSlider from './ScrollSlider';\n\nexport default class ScrollWrapper extends Base {\n static get __themeStyle() {\n return styles;\n }\n\n static _template() {\n return {\n clipping: true,\n FadeContainer: {\n ScrollContainer: {\n w: w => w,\n wordWrap: true\n }\n },\n Slider: {\n type: ScrollSlider,\n vertical: true,\n signals: {\n onSizeChange: '_updateScrollContainerSize'\n },\n announce: ' '\n }\n };\n }\n\n static get __componentName() {\n return 'ScrollWrapper';\n }\n\n static get properties() {\n return [\n 'autoScroll',\n 'autoScrollDelay',\n 'autoScrollSpeed',\n 'content',\n 'fadeContent',\n 'scrollDuration',\n 'scrollStep',\n 'showScrollBar',\n 'shouldWrap',\n 'flexDirection'\n ];\n }\n\n static get tags() {\n return [\n 'FadeContainer',\n 'Slider',\n {\n name: 'ScrollContainer',\n path: 'FadeContainer.ScrollContainer'\n },\n {\n name: 'ScrollableText',\n path: 'ScrollContainer.ScrollableText'\n }\n ];\n }\n\n _construct() {\n super._construct();\n this._scrollStep = 10;\n this._shouldWrap = false;\n this._flexDirection = 'column';\n this._fadeContent = true;\n this._sliderWidth = 0;\n }\n\n _afterTextBoxUpdate(textBox) {\n // NOTE: this does get called every time ScrollWrapper updates (ex. on each scroll change)\n if (this._prevW !== textBox.finalW || this._prevH !== textBox.finalH) {\n this._prevW = textBox.finalW;\n this._prevH = textBox.finalH;\n this._updateScrollWrapperLayout();\n this._updateAlpha();\n }\n }\n\n _resetFlexContainer() {\n this._FadeContainer.patch({ ScrollContainer: undefined });\n this._FadeContainer.patch({\n ScrollContainer: { w: w => w, wordWrap: true }\n });\n }\n\n _update() {\n if (this._contentChanged) {\n this._resetFlexContainer();\n this._updateAutoScroll();\n }\n this._updateScrollContainer();\n this._updateScrollWrapperLayout();\n this._updateAlpha();\n }\n\n _updateAutoScroll() {\n this.resetScroll();\n this._setupAutoScroll();\n this._contentChanged = false;\n }\n\n _updateScrollWrapperLayout() {\n this._ScrollContainer.patch({\n w: this._contentWidth\n });\n this._updateFadeContainer();\n this._updateSlider();\n }\n\n _updateAlpha() {\n this._Slider.smooth = {\n alpha: this.showScrollBar && this._isFocusedMode ? 1 : 0\n };\n }\n\n _updateFadeContainer() {\n const isScrollable = this._ScrollContainer.finalH > this.h;\n const shouldFade =\n this.fadeContent && isScrollable && !this._isEndContentVisible;\n\n this._FadeContainer.patch({\n h: this.h,\n w: this._contentWidth,\n y: this.style.contentMarginTop,\n x: this.style.contentMarginLeft,\n rtt: true,\n shader: shouldFade\n ? {\n type: lng.shaders.FadeOut,\n bottom: this.style.fadeHeight\n }\n : undefined\n });\n }\n\n _scrollContainerLoaded({ h }) {\n this._ScrollContainer.h = h;\n this._updateScrollWrapperLayout();\n }\n\n _updateScrollContainer() {\n if (!this.content) return;\n\n if (typeof this.content === 'string') {\n this._ScrollContainer.patch({\n flex: { direction: 'column' },\n ScrollableText: {\n h: 0,\n w: this._contentWidth,\n type: TextBox,\n content: this.content,\n style: {\n textStyle: {\n ...this.style.textStyle,\n wordWrap: true,\n wordWrapWidth: this._contentWidth\n }\n },\n signals: {\n textBoxChanged: '_scrollContainerLoaded'\n },\n onAfterUpdate: this._afterTextBoxUpdate.bind(this)\n }\n });\n } else if (Array.isArray(this.content)) {\n const content = {};\n this.content.forEach((item, index) => {\n const id = `ScrollText${index}`;\n content[id] = {\n w: this._contentWidth,\n ...item\n };\n if (item.text) {\n content[id] = {\n type: TextBox,\n content: item.text,\n style: {\n textStyle: {\n ...this.style.textStyle,\n ...item.style,\n wordWrap: true,\n wordWrapWidth: this._contentWidth\n }\n },\n onAfterUpdate: this._afterTextBoxUpdate.bind(this)\n };\n }\n });\n this._ScrollContainer.patch({\n flex: { direction: this.flexDirection, wrap: this.shouldWrap },\n ...content\n });\n }\n }\n\n _scrollDown() {\n const hasContentToScrollTo =\n this._scrollContainerY + this._ScrollContainer.finalH > this.renderHeight;\n if (hasContentToScrollTo) {\n const targetY = this._scrollContainerY - this.scrollStep;\n const canScrollByStepLength =\n targetY + this._ScrollContainer.finalH > this.renderHeight;\n const scrollEndY =\n this.renderHeight -\n this._ScrollContainer.finalH -\n this.style.contentMarginTop;\n\n this._ScrollContainer.patch({\n smooth: {\n y: [\n canScrollByStepLength ? targetY : scrollEndY,\n this._scrollAnimation\n ]\n }\n });\n\n const hasScrolledToEnd =\n this._scrollContainerY + this._ScrollContainer.finalH <= this.h;\n\n if (hasScrolledToEnd) {\n this._isEndContentVisible = true;\n this._autoScrollComplete = true;\n this.fireAncestors('$scrollChanged', 'endDown', this);\n this._updateFadeContainer();\n }\n } else {\n return false;\n }\n }\n\n _scrollUp() {\n const canScrollUp = this._scrollContainerY < 0;\n\n if (canScrollUp) {\n const targetY = this._scrollContainerY + this.scrollStep;\n const canScrollByStepLength = targetY < 0;\n\n this._ScrollContainer.patch({\n smooth: {\n y: [canScrollByStepLength ? targetY : 0, this._scrollAnimation]\n }\n });\n\n const isScrollable =\n this._scrollContainerY + this._ScrollContainer.finalH >\n this.renderHeight;\n if (isScrollable) {\n this._autoScrollComplete = false;\n }\n\n if (this._scrollContainerY >= 0) {\n this.fireAncestors('$scrollChanged', 'endUp', this);\n }\n\n if (this._isEndContentVisible) {\n this._isEndContentVisible = false;\n this._updateFadeContainer();\n }\n } else {\n return false;\n }\n }\n\n resetScroll() {\n this._ScrollContainer.y = 0;\n this._Slider.value = 0;\n this._ScrollContainer.transition('y').finish();\n delete this._ScrollContainer._transitions;\n this._autoScrollComplete = false;\n }\n\n _setAutoScroll(val) {\n if (this._autoScroll !== val) {\n this._autoScroll = val;\n }\n this._setupAutoScroll();\n return val;\n }\n\n _setupAutoScroll() {\n clearTimeout(this._startAutoScroll);\n clearTimeout(this._performAutoScrollTimer);\n\n if (this.autoScroll) {\n this._startAutoScroll = setTimeout(\n () => this._performAutoScroll(),\n isNaN(this.autoScrollDelay) ? 2000 : this.autoScrollDelay\n );\n }\n }\n\n _performAutoScroll() {\n if (this.autoScroll && !this._autoScrollComplete) {\n this._Slider._handleDown();\n this._performAutoScrollTimer = setTimeout(\n () => this._performAutoScroll(),\n isNaN(this.autoScrollSpeed) ? 200 : this.autoScrollSpeed\n );\n }\n }\n\n _setContent(content) {\n if (content !== this._content && this.enabled) {\n this._contentChanged = true;\n }\n return content;\n }\n\n _updateScrollContainerSize(slider) {\n if (this._sliderWidth !== slider._Container.h) {\n this._sliderWidth = slider._Container.h;\n this._updateScrollContainer();\n }\n }\n\n _updateSlider() {\n // height of off-screen items that can be scrolled to\n const scrollHeight = Math.max(\n this._ScrollContainer.finalH - this.renderHeight,\n 0\n );\n\n // number of steps to scroll to the bottom of ScrollContainer\n const contentScrollSteps =\n scrollHeight > 0 ? Math.ceil(scrollHeight / this.scrollStep) : 1;\n\n // max value of slider\n const sliderMax = this.renderHeight;\n\n // distance slider should move on each key press\n const sliderStep =\n contentScrollSteps > 0 ? sliderMax / contentScrollSteps : sliderMax;\n\n // Ensure _Slider and required properties exist\n if (this._Slider) {\n // This is a vertical slider, so w is actually controlling the height\n this._Slider.patch({\n x: this.w - this._sliderWidth,\n w: sliderMax,\n min: 0,\n max: sliderMax,\n step: sliderStep,\n onUp: this._scrollUp.bind(this),\n onDown: this._scrollDown.bind(this)\n });\n }\n }\n\n get _contentWidth() {\n return (\n this.w -\n this.style.contentMarginLeft -\n this.style.sliderMarginLeft -\n this._sliderWidth\n );\n }\n\n get _scrollContainerY() {\n return this._ScrollContainer.transition('y').targetValue;\n }\n\n get _scrollAnimation() {\n const duration = isNaN(this.scrollDuration)\n ? this.style.scroll.duration\n : this.scrollDuration;\n return {\n ...this.style.scroll,\n duration\n };\n }\n\n _getFocused() {\n return this._Slider;\n }\n\n set announce(announce) {\n super.announce = announce;\n }\n\n get announce() {\n if (this._announce) {\n return this._announce;\n }\n\n if (Array.isArray(this.content)) {\n if (\n this._ScrollContainer &&\n this._ScrollContainer.children &&\n this._ScrollContainer.children.length\n ) {\n return this._ScrollContainer.children.map(item => item.announce);\n } else {\n return this.content.map(item => item.announce || item.text);\n }\n }\n return this.content;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport { default as ScrollWrapperComponent } from '.';\nimport Tile from '../Tile';\nimport { createModeControl } from '../../docs/utils';\nimport TextBox from '../TextBox/TextBox';\n\nconst terms = `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Id aliquet risus feugiat in ante metus dictum. Pretium fusce id velit ut tortor pretium viverra suspendisse. Pharetra convallis posuere morbi leo urna. Nunc sed velit dignissim sodales. Feugiat scelerisque varius morbi enim nunc faucibus a pellentesque sit. Facilisis gravida neque convallis a cras semper auctor. Pellentesque pulvinar pellentesque habitant morbi tristique. Non tellus orci ac auctor augue mauris. Semper feugiat nibh sed pulvinar proin gravida hendrerit lectus. Amet risus nullam eget felis eget nunc. Auctor urna nunc id cursus metus aliquam eleifend mi in. Integer malesuada nunc vel risus commodo viverra maecenas accumsan lacus. Hac habitasse platea dictumst vestibulum rhoncus est pellentesque elit ullamcorper. Ac felis donec et odio pellentesque. Semper auctor neque vitae tempus quam pellentesque nec nam aliquam. Sit amet risus nullam eget felis eget.\n\nMi proin sed libero enim sed faucibus. Arcu vitae elementum curabitur vitae nunc sed velit. Volutpat blandit aliquam etiam erat velit. In nulla posuere sollicitudin aliquam ultrices sagittis orci a scelerisque. Tristique risus nec feugiat in. Urna nec tincidunt praesent semper feugiat nibh sed pulvinar proin. Dolor magna eget est lorem ipsum dolor sit amet consectetur. Eget est lorem ipsum dolor sit amet consectetur. At tellus at urna condimentum mattis pellentesque id. Maecenas accumsan lacus vel facilisis. Metus dictum at tempor commodo ullamcorper a lacus. Pellentesque pulvinar pellentesque habitant morbi tristique senectus. Tempor nec feugiat nisl pretium fusce id velit ut.`;\n\nexport default {\n title: 'Components/ScrollWrapper'\n};\n\nconst sharedArgs = {\n autoScroll: false,\n autoScrollDelay: 2000,\n autoScrollSpeed: 200,\n fadeContent: true,\n scrollDuration: 0.2,\n scrollStep: 10,\n showScrollBar: true,\n mode: 'focused'\n};\n\nconst sharedArgTypes = {\n ...createModeControl({\n options: ['unfocused', 'focused'],\n summaryValue: false\n }),\n autoScroll: {\n control: 'boolean',\n description: 'Whether or not to auto scroll the content',\n type: 'boolean',\n table: {\n defaultValue: { summary: false }\n }\n },\n autoScrollDelay: {\n control: 'number',\n description: 'Delay, in ms, before auto scroll starts',\n type: 'number',\n table: {\n defaultValue: { summary: 2000 }\n }\n },\n autoScrollSpeed: {\n control: 'number',\n description: 'Time delay, in ms, before each scroll step',\n type: 'number',\n table: {\n defaultValue: { summary: 2000 }\n }\n },\n fadeContent: {\n control: 'boolean',\n description: 'Fade out content at the bottom of the ScrollWrapper',\n type: 'boolean',\n table: {\n defaultValue: { summary: true }\n }\n },\n scrollDuration: {\n control: 'number',\n description: 'Animation duration for the scroll',\n type: 'number',\n table: {\n defaultValue: { summary: 0.2 }\n }\n },\n scrollStep: {\n control: 'number',\n description: 'How many pixels to scroll by on every up/down keypress',\n type: 'number',\n table: {\n defaultValue: { summary: 10 }\n }\n },\n showScrollBar: {\n control: 'boolean',\n description: 'Show the scroll bar when focused ',\n type: 'boolean',\n table: {\n defaultValue: { summary: true }\n }\n }\n};\n\nexport const Basic = args =>\n class Basic extends lng.Component {\n static _template() {\n return {\n ScrollWrapper: {\n type: ScrollWrapperComponent,\n h: 448,\n w: 796,\n content: terms,\n signals: {\n scrollChanged: true\n }\n }\n };\n }\n\n $scrollChanged(type) {\n args.scrollChanged && args.scrollChanged(type);\n }\n };\n\nBasic.args = sharedArgs;\nBasic.argTypes = sharedArgTypes;\nBasic.parameters = {\n storyDetails: 'The ScrollWrapper content property is set as a string.'\n};\n\nexport const TextArray = args =>\n class TextArray extends lng.Component {\n static _template() {\n return {\n ScrollWrapper: {\n type: ScrollWrapperComponent,\n h: 450,\n w: 600,\n wordWrap: true,\n content: [\n {\n text: 'Text Heading',\n style: {\n fontFace: 'XfinityBrownBold',\n alignContent: 'center'\n }\n },\n {\n text: terms,\n style: {\n alignContent: 'left',\n fontSize: '30'\n }\n }\n ],\n signals: {\n scrollChanged: true\n }\n }\n };\n }\n\n $scrollChanged(type) {\n args.scrollChanged(type);\n }\n };\n\nTextArray.args = sharedArgs;\nTextArray.argTypes = sharedArgTypes;\nTextArray.parameters = {\n storyDetails:\n 'The ScrollWrapper content property is set as an array of text objects. See the InlineContent documentation for more details on these types of objects.'\n};\n\nexport const ObjectArray = args =>\n class ObjectArray extends lng.Component {\n static _template() {\n return {\n ScrollWrapper: {\n type: ScrollWrapperComponent,\n h: 764,\n w: 1200,\n shouldWrap: true, // determines if items should wrap around ScrollContainer\n flexDirection: 'row', //determines the direction items are placed in flexContainer\n content: Array.from(Array(6)).map(() => ({\n shader: {\n type: lng.shaders.RoundedRectangle,\n radius: 16\n },\n type: Tile,\n rect: true,\n w: 308,\n h: 400,\n color: 0xf53e3e45,\n flexItem: {\n margin: 24\n },\n Text: {\n type: TextBox,\n x: 20,\n y: 10,\n content:\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Id aliquet risus feugiat in ante metus dictum. Pretium fusce id velit ut tortor pretium viverra suspendisse. Pharetra convallis posuere morbi leo urna.',\n style: {\n textStyle: {\n fontSize: 27,\n lineHeight: null,\n maxLines: 0,\n textAlign: 'left',\n verticalAlign: 'middle',\n wordWrapWidth: 270\n }\n },\n shader: {\n type: lng.shaders.RoundedRectangle,\n radius: 0\n }\n }\n })),\n signals: {\n scrollChanged: true\n }\n }\n };\n }\n\n $scrollChanged(type) {\n args.scrollChanged(type);\n }\n };\n\nObjectArray.args = sharedArgs;\nObjectArray.argTypes = sharedArgTypes;\nObjectArray.parameters = {\n storyDetails:\n 'The ScrollWrapper content property is set as an array of Lightning elements.'\n};\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/iframe.html b/iframe.html index bdb267b7a..c0fda0bf8 100644 --- a/iframe.html +++ b/iframe.html @@ -523,8 +523,8 @@ window['TAGS_OPTIONS'] = {"dev-only":{"excludeFromDocsStories":true},"docs-only":{"excludeFromSidebar":true},"test-only":{"excludeFromSidebar":true,"excludeFromDocsStories":true}}; \ No newline at end of file + import './main.1e40b216.iframe.bundle.js'; \ No newline at end of file diff --git a/index.json b/index.json index 5f7da37d0..4a8036513 100644 --- a/index.json +++ b/index.json @@ -1 +1 @@ -{"v":5,"entries":{"docs-introduction--docs":{"id":"docs-introduction--docs","title":"Docs/Introduction","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/Introduction.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-read-me--docs":{"id":"docs-read-me--docs","title":"Docs/ Read Me","name":"Docs","importPath":"./src/Readme.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-contributing--docs":{"id":"docs-contributing--docs","title":"Docs / Contributing","name":"Docs","importPath":"./src/Contributing.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-lightning-resources--docs":{"id":"docs-lightning-resources--docs","title":"Docs/Lightning Resources","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/LightningResources.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-lightning-community-guide--docs":{"id":"docs-lightning-community-guide--docs","title":"Docs/Lightning Community Guide","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/LightningCommunityGuide.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-overview--docs":{"id":"docs-theming-overview--docs","title":"Docs / Theming / Overview","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/Theming.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-component-config--docs":{"id":"docs-theming-component-config--docs","title":"Docs / Theming / Component Config","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingComponentConfig.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-tones--docs":{"id":"docs-theming-tones--docs","title":"Docs / Theming / Tones","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingTone.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-modes--docs":{"id":"docs-theming-modes--docs","title":"Docs / Theming / Modes","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingMode.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-extensions--docs":{"id":"docs-theming-extensions--docs","title":"Docs / Theming/ Extensions","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingExtensions.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-subtheming--docs":{"id":"docs-theming-subtheming--docs","title":"Docs / Theming/ Subtheming","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingSubTheming.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-use-in-storybook--docs":{"id":"docs-theming-use-in-storybook--docs","title":"Docs / Theming/ Use in Storybook","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingStorybook.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-theme-properties--docs":{"id":"docs-theming-theme-properties--docs","title":"Docs / Theming/ Theme Properties","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingAttributes.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-hierarchy--docs":{"id":"docs-theming-hierarchy--docs","title":"Docs / Theming/ Hierarchy","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingHierarchy.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-tutorial--docs":{"id":"docs-theming-tutorial--docs","title":"Docs / Theming/ Tutorial","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingTutorial.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-overview--docs":{"id":"docs-unit-testing-overview--docs","title":"Docs / Unit Testing / Overview","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/Overview.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-test-renderer-create--docs":{"id":"docs-unit-testing-test-renderer-create--docs","title":"Docs / Unit Testing / Test Renderer / create","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/TestRenderer/create.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-test-renderer-tojson--docs":{"id":"docs-unit-testing-test-renderer-tojson--docs","title":"Docs / Unit Testing / Test Renderer / toJSON","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/TestRenderer/toJSON.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-test-utils-makecreatecomponent--docs":{"id":"docs-unit-testing-test-utils-makecreatecomponent--docs","title":"Docs / Unit Testing / Test Utils / makeCreateComponent ","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/makeCreateComponent.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-test-utils-completeanimation--docs":{"id":"docs-unit-testing-test-utils-completeanimation--docs","title":"Docs / Unit Testing / Test Utils / completeAnimation","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/completeAnimation.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-test-utils-fastforward--docs":{"id":"docs-unit-testing-test-utils-fastforward--docs","title":"Docs / Unit Testing / Test Utils / fastForward","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/fastForward.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-test-utils-nexttick--docs":{"id":"docs-unit-testing-test-utils-nexttick--docs","title":"Docs / Unit Testing / Test Utils / nextTick","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/nextTick.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-base-component--docs":{"id":"docs-base-component--docs","title":"Docs/Base Component","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/Base.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-storybook-structure--docs":{"id":"docs-storybook-structure--docs","title":"Docs/Storybook Structure","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/Storybook.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"collections-theming-tokens--theming-tokens":{"type":"story","id":"collections-theming-tokens--theming-tokens","name":"Theming Tokens","title":"Collections/Theming Tokens","importPath":"../../@lightningjs/ui-components/src/docs/ThemingFoundations.stories.js","tags":["dev","test"]},"utilities-withannouncer--docs":{"id":"utilities-withannouncer--docs","title":"Utilities/withAnnouncer","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withannouncer--basic":{"type":"story","id":"utilities-withannouncer--basic","name":"Basic","title":"Utilities/withAnnouncer","importPath":"../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.stories.js","componentPath":"../../@lightningjs/ui-components/src/mixins/withAnnouncer","tags":["dev","test"]},"utilities-withannouncer--with-default-abbreviations":{"type":"story","id":"utilities-withannouncer--with-default-abbreviations","name":"With Default Abbreviations","title":"Utilities/withAnnouncer","importPath":"../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.stories.js","componentPath":"../../@lightningjs/ui-components/src/mixins/withAnnouncer","tags":["dev","test"]},"utilities-withclasscache--docs":{"id":"utilities-withclasscache--docs","title":"Utilities/withClassCache","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withClassCache/withClassCache.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"utilities-withedititems--docs":{"id":"utilities-withedititems--docs","title":"Utilities/withEditItems","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withEditItems/withEditItems.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withEditItems/withEditItems.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withedititems--with-edit-items":{"type":"story","id":"utilities-withedititems--with-edit-items","name":"withEditItems","title":"Utilities/withEditItems","importPath":"../../@lightningjs/ui-components/src/mixins/withEditItems/withEditItems.stories.js","tags":["dev","test"]},"utilities-withhandlekey--docs":{"id":"utilities-withhandlekey--docs","title":"Utilities/withHandleKey","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withHandleKey/withHandleKey.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withHandleKey/withHandleKey.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withhandlekey--with-handle-key":{"type":"story","id":"utilities-withhandlekey--with-handle-key","name":"withHandleKey","title":"Utilities/withHandleKey","importPath":"../../@lightningjs/ui-components/src/mixins/withHandleKey/withHandleKey.stories.js","tags":["dev","test"]},"utilities-withlayout--docs":{"id":"utilities-withlayout--docs","title":"Utilities/withLayout","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withLayout/withLayout.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withLayout/withLayout.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withlayout--with-layout":{"type":"story","id":"utilities-withlayout--with-layout","name":"withLayout","title":"Utilities/withLayout","importPath":"../../@lightningjs/ui-components/src/mixins/withLayout/withLayout.stories.js","tags":["dev","test"]},"utilities-withmarqueesync--docs":{"id":"utilities-withmarqueesync--docs","title":"Utilities/withMarqueeSync","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withmarqueesync--basic":{"type":"story","id":"utilities-withmarqueesync--basic","name":"withMarqueeSync","title":"Utilities/withMarqueeSync","importPath":"../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.stories.js","tags":["dev","test"]},"utilities-withselections--docs":{"id":"utilities-withselections--docs","title":"Utilities/withSelections","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withSelections/withSelections.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withSelections/withSelections.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withselections--with-selections":{"type":"story","id":"utilities-withselections--with-selections","name":"withSelections","title":"Utilities/withSelections","importPath":"../../@lightningjs/ui-components/src/mixins/withSelections/withSelections.stories.js","tags":["dev","test"]},"utilities-withtags--docs":{"id":"utilities-withtags--docs","title":"Utilities/withTags","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withTags/withTags.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withTags/withTags.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withtags--with-tags":{"type":"story","id":"utilities-withtags--with-tags","name":"withTags","title":"Utilities/withTags","importPath":"../../@lightningjs/ui-components/src/mixins/withTags/withTags.stories.js","tags":["dev","test"]},"utilities-withthemestyles--docs":{"id":"utilities-withthemestyles--docs","title":"Utilities/withThemeStyles","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withThemeStyles/withThemeStyles.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withThemeStyles/withThemeStyles.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withthemestyles--with-theme-styles":{"type":"story","id":"utilities-withthemestyles--with-theme-styles","name":"withThemeStyles","title":"Utilities/withThemeStyles","importPath":"../../@lightningjs/ui-components/src/mixins/withThemeStyles/withThemeStyles.stories.js","tags":["dev","test"]},"utilities-withupdates--docs":{"id":"utilities-withupdates--docs","title":"Utilities/withUpdates","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withUpdates/withUpdates.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withUpdates/withUpdates.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withupdates--with-updates":{"type":"story","id":"utilities-withupdates--with-updates","name":"withUpdates","title":"Utilities/withUpdates","importPath":"../../@lightningjs/ui-components/src/mixins/withUpdates/withUpdates.stories.js","tags":["dev","test"]},"components-artwork--docs":{"id":"components-artwork--docs","title":"Components/Artwork","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Artwork/Artwork.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Artwork/Artwork.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-artwork--artwork":{"type":"story","id":"components-artwork--artwork","name":"Artwork","title":"Components/Artwork","importPath":"../../@lightningjs/ui-components/src/components/Artwork/Artwork.stories.js","tags":["dev","test"]},"components-badge--docs":{"id":"components-badge--docs","title":"Components/Badge","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Badge/Badge.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-badge--text":{"type":"story","id":"components-badge--text","name":"Text","title":"Components/Badge","importPath":"../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js","tags":["dev","test"]},"components-badge--icon-svg":{"type":"story","id":"components-badge--icon-svg","name":"Icon SVG","title":"Components/Badge","importPath":"../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js","tags":["dev","test"]},"components-badge--icon-png":{"type":"story","id":"components-badge--icon-png","name":"Icon PNG","title":"Components/Badge","importPath":"../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js","tags":["dev","test"]},"components-badge--text-with-icon":{"type":"story","id":"components-badge--text-with-icon","name":"Text With Icon","title":"Components/Badge","importPath":"../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js","tags":["dev","test"]},"components-button--docs":{"id":"components-button--docs","title":"Components / Button","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Button/Button.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Button/Button.stories.js"],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-button-button--button":{"type":"story","id":"components-button-button--button","name":"Button","title":"Components/Button/Button","importPath":"../../@lightningjs/ui-components/src/components/Button/Button.stories.js","tags":["dev","test"]},"components-button-buttonsmall--button-small":{"type":"story","id":"components-button-buttonsmall--button-small","name":"ButtonSmall","title":"Components/Button/ButtonSmall","importPath":"../../@lightningjs/ui-components/src/components/Button/ButtonSmall.stories.js","tags":["dev","test"]},"components-card--docs":{"id":"components-card--docs","title":"Components/Card","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Card/Card.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Card/Card.stories.js"],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-card-card--card":{"type":"story","id":"components-card-card--card","name":"Card","title":"Components/Card/Card","importPath":"../../@lightningjs/ui-components/src/components/Card/Card.stories.js","tags":["dev","test"]},"components-card-cardradio--docs":{"id":"components-card-cardradio--docs","title":"Components/Card/CardRadio","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Card/CardRadio.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Card/CardRadio.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-card-cardradio--card-radio":{"type":"story","id":"components-card-cardradio--card-radio","name":"CardRadio","title":"Components/Card/CardRadio","importPath":"../../@lightningjs/ui-components/src/components/Card/CardRadio.stories.js","tags":["dev","test"]},"components-card-cardsection--docs":{"id":"components-card-cardsection--docs","title":"Components/Card/CardSection","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Card/CardSection.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Card/CardSection.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-card-cardsection--card-section":{"type":"story","id":"components-card-cardsection--card-section","name":"CardSection","title":"Components/Card/CardSection","importPath":"../../@lightningjs/ui-components/src/components/Card/CardSection.stories.js","tags":["dev","test"]},"components-card-cardtitle--docs":{"id":"components-card-cardtitle--docs","title":"Components/Card/CardTitle","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Card/CardTitle.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Card/CardTitle.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-card-cardtitle--card-title":{"type":"story","id":"components-card-cardtitle--card-title","name":"CardTitle","title":"Components/Card/CardTitle","importPath":"../../@lightningjs/ui-components/src/components/Card/CardTitle.stories.js","tags":["dev","test"]},"components-cardcontent-cardcontent--docs":{"id":"components-cardcontent-cardcontent--docs","title":"Components/CardContent/CardContent","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/CardContent/CardContent.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/CardContent/CardContent.stories.js","../../@lightningjs/ui-components/src/components/Card/Card.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-cardcontent-cardcontent--card-content":{"type":"story","id":"components-cardcontent-cardcontent--card-content","name":"CardContent","title":"Components/CardContent/CardContent","importPath":"../../@lightningjs/ui-components/src/components/CardContent/CardContent.stories.js","tags":["dev","test"]},"components-cardcontent-cardcontenthorizontal--card-content-horizontal":{"type":"story","id":"components-cardcontent-cardcontenthorizontal--card-content-horizontal","name":"CardContentHorizontal","title":"Components/CardContent/CardContentHorizontal","importPath":"../../@lightningjs/ui-components/src/components/CardContent/CardContentHorizontal.stories.js","tags":["dev","test"]},"components-cardcontent-cardcontenthorizontallarge--card-content-horizontal-large":{"type":"story","id":"components-cardcontent-cardcontenthorizontallarge--card-content-horizontal-large","name":"CardContentHorizontalLarge","title":"Components/CardContent/CardContentHorizontalLarge","importPath":"../../@lightningjs/ui-components/src/components/CardContent/CardContentHorizontalLarge.stories.js","tags":["dev","test"]},"components-cardcontent-cardcontentvertical--card-content-vertical":{"type":"story","id":"components-cardcontent-cardcontentvertical--card-content-vertical","name":"CardContentVertical","title":"Components/CardContent/CardContentVertical","importPath":"../../@lightningjs/ui-components/src/components/CardContent/CardContentVertical.stories.js","tags":["dev","test"]},"components-cardcontent-cardcontentverticalsmall--card-content-vertical-small":{"type":"story","id":"components-cardcontent-cardcontentverticalsmall--card-content-vertical-small","name":"CardContentVerticalSmall","title":"Components/CardContent/CardContentVerticalSmall","importPath":"../../@lightningjs/ui-components/src/components/CardContent/CardContentVerticalSmall.stories.js","tags":["dev","test"]},"components-checkboxes--docs":{"id":"components-checkboxes--docs","title":"Components/Checkboxes","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Checkbox/Checkbox.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Checkbox/Checkbox.stories.js"],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-checkboxes-checkbox--checkbox":{"type":"story","id":"components-checkboxes-checkbox--checkbox","name":"Checkbox","title":"Components/Checkboxes/Checkbox","importPath":"../../@lightningjs/ui-components/src/components/Checkbox/Checkbox.stories.js","tags":["dev","test"]},"components-checkboxes-checkboxsmall--checkbox-small":{"type":"story","id":"components-checkboxes-checkboxsmall--checkbox-small","name":"CheckboxSmall","title":"Components/Checkboxes/CheckboxSmall","importPath":"../../@lightningjs/ui-components/src/components/Checkbox/CheckboxSmall.stories.js","tags":["dev","test"]},"components-column--docs":{"id":"components-column--docs","title":"Components/Column","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Column/Column.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-column--column":{"type":"story","id":"components-column--column","name":"Column","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--multi-column":{"type":"story","id":"components-column--multi-column","name":"Multi Column","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--plinko":{"type":"story","id":"components-column--plinko","name":"Plinko","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--varying-item-height":{"type":"story","id":"components-column--varying-item-height","name":"Varying Item Height","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--expandable-height-items":{"type":"story","id":"components-column--expandable-height-items","name":"Expandable Height Items","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--expandable-height-rows":{"type":"story","id":"components-column--expandable-height-rows","name":"Expandable Height Rows","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--skip-focus":{"type":"story","id":"components-column--skip-focus","name":"Skip Focus","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--on-screen-effect":{"type":"story","id":"components-column--on-screen-effect","name":"On Screen Effect","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--sticky-title":{"type":"story","id":"components-column--sticky-title","name":"Sticky Title","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--centered-in-parent":{"type":"story","id":"components-column--centered-in-parent","name":"Centered In Parent","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--skip-plinko":{"type":"story","id":"components-column--skip-plinko","name":"Skip Plinko","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--lazy-up-count":{"type":"story","id":"components-column--lazy-up-count","name":"Lazy Up Count","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--adding-items":{"type":"story","id":"components-column--adding-items","name":"Adding Items","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--removing-items":{"type":"story","id":"components-column--removing-items","name":"Removing Items","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-control--docs":{"id":"components-control--docs","title":"Components/Control","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Control/Control.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-control-control--control":{"type":"story","id":"components-control-control--control","name":"Control","title":"Components/Control/Control","importPath":"../../@lightningjs/ui-components/src/components/Control/Control.stories.js","tags":["dev","test"]},"components-control-controlsmall--control-small":{"type":"story","id":"components-control-controlsmall--control-small","name":"ControlSmall","title":"Components/Control/ControlSmall","importPath":"../../@lightningjs/ui-components/src/components/Control/ControlSmall.stories.js","tags":["dev","test"]},"components-controlrow--docs":{"id":"components-controlrow--docs","title":"Components/ControlRow","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-controlrow--basic":{"type":"story","id":"components-controlrow--basic","name":"Basic","title":"Components/ControlRow","importPath":"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.stories.js","tags":["dev","test"]},"components-controlrow--lazy-loading":{"type":"story","id":"components-controlrow--lazy-loading","name":"Lazy Loading","title":"Components/ControlRow","importPath":"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.stories.js","tags":["dev","test"]},"components-controlrow--adding-and-removing":{"type":"story","id":"components-controlrow--adding-and-removing","name":"Adding And Removing","title":"Components/ControlRow","importPath":"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.stories.js","tags":["dev","test"]},"components-focusmanager--docs":{"id":"components-focusmanager--docs","title":"Components/FocusManager","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-focusmanager--basic":{"type":"story","id":"components-focusmanager--basic","name":"Basic","title":"Components/FocusManager","importPath":"../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.stories.js","tags":["dev","test"]},"components-gradient--docs":{"id":"components-gradient--docs","title":"Components/Gradient","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Gradient/Gradient.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Gradient/Gradient.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-gradient--gradient":{"type":"story","id":"components-gradient--gradient","name":"Gradient","title":"Components/Gradient","importPath":"../../@lightningjs/ui-components/src/components/Gradient/Gradient.stories.js","tags":["dev","test"]},"components-gridoverlay--docs":{"id":"components-gridoverlay--docs","title":"Components/GridOverlay","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-gridoverlay--grid-overlay":{"type":"story","id":"components-gridoverlay--grid-overlay","name":"GridOverlay","title":"Components/GridOverlay","importPath":"../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.stories.js","tags":["dev","test"]},"components-icon--docs":{"id":"components-icon--docs","title":"Components/Icon","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Icon/Icon.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Icon/Icon.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-icon--png":{"type":"story","id":"components-icon--png","name":"PNG","title":"Components/Icon","importPath":"../../@lightningjs/ui-components/src/components/Icon/Icon.stories.js","tags":["dev","test"]},"components-icon--svg":{"type":"story","id":"components-icon--svg","name":"SVG","title":"Components/Icon","importPath":"../../@lightningjs/ui-components/src/components/Icon/Icon.stories.js","tags":["dev","test"]},"components-inlinecontent--docs":{"id":"components-inlinecontent--docs","title":"Components/InlineContent","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-inlinecontent--basic":{"type":"story","id":"components-inlinecontent--basic","name":"Basic","title":"Components/InlineContent","importPath":"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js","tags":["dev","test"]},"components-inlinecontent--with-new-lines":{"type":"story","id":"components-inlinecontent--with-new-lines","name":"With New Lines","title":"Components/InlineContent","importPath":"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js","tags":["dev","test"]},"components-inlinecontent--with-parsing":{"type":"story","id":"components-inlinecontent--with-parsing","name":"With Parsing","title":"Components/InlineContent","importPath":"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js","tags":["dev","test"]},"components-inlinecontent--with-truncation":{"type":"story","id":"components-inlinecontent--with-truncation","name":"With Truncation","title":"Components/InlineContent","importPath":"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js","tags":["dev","test"]},"components-inlinecontent--with-strike-through":{"type":"story","id":"components-inlinecontent--with-strike-through","name":"With Strike Through","title":"Components/InlineContent","importPath":"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js","tags":["dev","test"]},"components-input--docs":{"id":"components-input--docs","title":"Components/Input","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Input/Input.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Input/Input.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-input--input":{"type":"story","id":"components-input--input","name":"Input","title":"Components/Input","importPath":"../../@lightningjs/ui-components/src/components/Input/Input.stories.js","tags":["dev","test"]},"components-key--docs":{"id":"components-key--docs","title":"Components/Key","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Key/Key.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Key/Key.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-key--basic":{"type":"story","id":"components-key--basic","name":"Basic","title":"Components/Key","importPath":"../../@lightningjs/ui-components/src/components/Key/Key.stories.js","tags":["dev","test"]},"components-key--key-icon":{"type":"story","id":"components-key--key-icon","name":"Key Icon","title":"Components/Key","importPath":"../../@lightningjs/ui-components/src/components/Key/Key.stories.js","tags":["dev","test"]},"components-keyboard--docs":{"id":"components-keyboard--docs","title":"Components/Keyboard","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/Keyboard.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-keyboard-keyboard--keyboard":{"type":"story","id":"components-keyboard-keyboard--keyboard","name":"Keyboard","title":"Components/Keyboard/Keyboard","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/Keyboard.stories.js","tags":["dev","test"]},"components-keyboard-keyboardemail--keyboard-email":{"type":"story","id":"components-keyboard-keyboardemail--keyboard-email","name":"KeyboardEmail","title":"Components/Keyboard/KeyboardEmail","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardEmail.stories.js","tags":["dev","test"]},"components-keyboard-keyboardfullscreen--keyboard-fullscreen":{"type":"story","id":"components-keyboard-keyboardfullscreen--keyboard-fullscreen","name":"KeyboardFullscreen","title":"Components/Keyboard/KeyboardFullscreen","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardFullscreen.stories.js","tags":["dev","test"]},"components-keyboard-keyboardinput--input-with-qwerty":{"type":"story","id":"components-keyboard-keyboardinput--input-with-qwerty","name":"Input With Qwerty","title":"Components/Keyboard/KeyboardInput","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardInput.stories.js","tags":["dev","test"]},"components-keyboard-keyboardinput--input-with-email":{"type":"story","id":"components-keyboard-keyboardinput--input-with-email","name":"Input With Email","title":"Components/Keyboard/KeyboardInput","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardInput.stories.js","tags":["dev","test"]},"components-keyboard-keyboardnumbers--keyboard-numbers":{"type":"story","id":"components-keyboard-keyboardnumbers--keyboard-numbers","name":"KeyboardNumbers","title":"Components/Keyboard/KeyboardNumbers","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardNumbers.stories.js","tags":["dev","test"]},"components-keyboard-keyboardqwerty--keyboard-qwerty":{"type":"story","id":"components-keyboard-keyboardqwerty--keyboard-qwerty","name":"KeyboardQwerty","title":"Components/Keyboard/KeyboardQwerty","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardQwerty.stories.js","tags":["dev","test"]},"components-keyboard-keyboardsearch--keyboard-search":{"type":"story","id":"components-keyboard-keyboardsearch--keyboard-search","name":"KeyboardSearch","title":"Components/Keyboard/KeyboardSearch","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardSearch.stories.js","tags":["dev","test"]},"components-knob--docs":{"id":"components-knob--docs","title":"Components/Knob","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Knob/Knob.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Knob/Knob.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-knob--knob":{"type":"story","id":"components-knob--knob","name":"Knob","title":"Components/Knob","importPath":"../../@lightningjs/ui-components/src/components/Knob/Knob.stories.js","tags":["dev","test"]},"components-label--docs":{"id":"components-label--docs","title":"Components/Label","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Label/Label.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Label/Label.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-label--label":{"type":"story","id":"components-label--label","name":"Label","title":"Components/Label","importPath":"../../@lightningjs/ui-components/src/components/Label/Label.stories.js","tags":["dev","test"]},"components-listitem-listitem--docs":{"id":"components-listitem-listitem--docs","title":"Components/ListItem/ListItem","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/ListItem/ListItem.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/ListItem/ListItem.stories.js","../../@lightningjs/ui-components/src/components/Button/Button.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-listitem-listitem--list-item":{"type":"story","id":"components-listitem-listitem--list-item","name":"ListItem","title":"Components/ListItem/ListItem","importPath":"../../@lightningjs/ui-components/src/components/ListItem/ListItem.stories.js","tags":["dev","test"]},"components-listitem-listitempicker--docs":{"id":"components-listitem-listitempicker--docs","title":"Components/ListItem/ListItemPicker","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/ListItem/ListItemPicker.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/ListItem/ListItemPicker.stories.js","../../@lightningjs/ui-components/src/components/ListItem/ListItem.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-listitem-listitempicker--list-item-picker":{"type":"story","id":"components-listitem-listitempicker--list-item-picker","name":"ListItemPicker","title":"Components/ListItem/ListItemPicker","importPath":"../../@lightningjs/ui-components/src/components/ListItem/ListItemPicker.stories.js","tags":["dev","test"]},"components-listitem-listitemslider--docs":{"id":"components-listitem-listitemslider--docs","title":"Components/ListItem/ListItemSlider","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/ListItem/ListItemSlider.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Slider/Slider.stories.js","../../@lightningjs/ui-components/src/components/ListItem/ListItem.stories.js","../../@lightningjs/ui-components/src/components/ListItem/ListItemSlider.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-listitem-listitemslider--list-item-slider":{"type":"story","id":"components-listitem-listitemslider--list-item-slider","name":"ListItemSlider","title":"Components/ListItem/ListItemSlider","importPath":"../../@lightningjs/ui-components/src/components/ListItem/ListItemSlider.stories.js","tags":["dev","test"]},"components-marquee--docs":{"id":"components-marquee--docs","title":"Components/Marquee","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Marquee/Marquee.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Marquee/Marquee.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-marquee--marquee":{"type":"story","id":"components-marquee--marquee","name":"Marquee","title":"Components/Marquee","importPath":"../../@lightningjs/ui-components/src/components/Marquee/Marquee.stories.js","tags":["dev","test"]},"components-marquee--centered-text":{"type":"story","id":"components-marquee--centered-text","name":"Centered Text","title":"Components/Marquee","importPath":"../../@lightningjs/ui-components/src/components/Marquee/Marquee.stories.js","tags":["dev","test"]},"components-metadatabase--docs":{"id":"components-metadatabase--docs","title":"Components/MetadataBase","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/MetadataBase/MetadataBase.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/MetadataBase/MetadataBase.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-metadatabase--metadata-base":{"type":"story","id":"components-metadatabase--metadata-base","name":"MetadataBase","title":"Components/MetadataBase","importPath":"../../@lightningjs/ui-components/src/components/MetadataBase/MetadataBase.stories.js","tags":["dev","test"]},"components-metadatacard--docs":{"id":"components-metadatacard--docs","title":"Components/MetadataCard","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/MetadataCard/MetadataCard.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/MetadataCard/MetadataCard.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-metadatacard--metadata-card":{"type":"story","id":"components-metadatacard--metadata-card","name":"MetadataCard","title":"Components/MetadataCard","importPath":"../../@lightningjs/ui-components/src/components/MetadataCard/MetadataCard.stories.js","tags":["dev","test"]},"components-metadatacardcontent--docs":{"id":"components-metadatacardcontent--docs","title":"Components/MetadataCardContent","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/MetadataCardContent/MetadataCardContent.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/MetadataCardContent/MetadataCardContent.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-metadatacardcontent--metadata-card-content":{"type":"story","id":"components-metadatacardcontent--metadata-card-content","name":"MetadataCardContent","title":"Components/MetadataCardContent","importPath":"../../@lightningjs/ui-components/src/components/MetadataCardContent/MetadataCardContent.stories.js","tags":["dev","test"]},"components-metadatatile--docs":{"id":"components-metadatatile--docs","title":"Components/MetadataTile","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/MetadataTile/MetadataTile.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/MetadataTile/MetadataTile.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-metadatatile--metadata-tile":{"type":"story","id":"components-metadatatile--metadata-tile","name":"MetadataTile","title":"Components/MetadataTile","importPath":"../../@lightningjs/ui-components/src/components/MetadataTile/MetadataTile.stories.js","tags":["dev","test"]},"components-navigationmanager--docs":{"id":"components-navigationmanager--docs","title":"Components/NavigationManager","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-navigationmanager--row":{"type":"story","id":"components-navigationmanager--row","name":"Row","title":"Components/NavigationManager","importPath":"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.stories.js","tags":["dev","test"]},"components-navigationmanager--column":{"type":"story","id":"components-navigationmanager--column","name":"Column","title":"Components/NavigationManager","importPath":"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.stories.js","tags":["dev","test"]},"components-navigationmanager--column-of-rows":{"type":"story","id":"components-navigationmanager--column-of-rows","name":"Column Of Rows","title":"Components/NavigationManager","importPath":"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.stories.js","tags":["dev","test"]},"components-progressbar--docs":{"id":"components-progressbar--docs","title":"Components/ProgressBar","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/ProgressBar/ProgressBar.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/ProgressBar/ProgressBar.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-progressbar--progress-bar":{"type":"story","id":"components-progressbar--progress-bar","name":"ProgressBar","title":"Components/ProgressBar","importPath":"../../@lightningjs/ui-components/src/components/ProgressBar/ProgressBar.stories.js","tags":["dev","test"]},"components-provider--docs":{"id":"components-provider--docs","title":"Components/Provider","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Provider/Provider.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Provider/Provider.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-provider--provider":{"type":"story","id":"components-provider--provider","name":"Provider","title":"Components/Provider","importPath":"../../@lightningjs/ui-components/src/components/Provider/Provider.stories.js","tags":["dev","test"]},"components-provider--with-custom-icon-size":{"type":"story","id":"components-provider--with-custom-icon-size","name":"With Custom Icon Size","title":"Components/Provider","importPath":"../../@lightningjs/ui-components/src/components/Provider/Provider.stories.js","tags":["dev","test"]},"components-radio--docs":{"id":"components-radio--docs","title":"Components/Radio","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Radio/Radio.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Radio/Radio.stories.js"],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-radio-radio--radio":{"type":"story","id":"components-radio-radio--radio","name":"Radio","title":"Components/Radio/Radio","importPath":"../../@lightningjs/ui-components/src/components/Radio/Radio.stories.js","tags":["dev","test"]},"components-radio-radiosmall--radio-small":{"type":"story","id":"components-radio-radiosmall--radio-small","name":"RadioSmall","title":"Components/Radio/RadioSmall","importPath":"../../@lightningjs/ui-components/src/components/Radio/RadioSmall.stories.js","tags":["dev","test"]},"components-row--docs":{"id":"components-row--docs","title":"Components/Row","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Row/Row.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-row--row":{"type":"story","id":"components-row--row","name":"Row","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--focus-height-change":{"type":"story","id":"components-row--focus-height-change","name":"Focus Height Change","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--varying-item-width":{"type":"story","id":"components-row--varying-item-width","name":"Varying Item Width","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--expandable-width":{"type":"story","id":"components-row--expandable-width","name":"Expandable Width","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--centered-in-parent":{"type":"story","id":"components-row--centered-in-parent","name":"Centered In Parent","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--plinko":{"type":"story","id":"components-row--plinko","name":"Plinko","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--skip-focus":{"type":"story","id":"components-row--skip-focus","name":"Skip Focus","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--lazy-scroll-indexes":{"type":"story","id":"components-row--lazy-scroll-indexes","name":"Lazy Scroll Indexes","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--adding-items":{"type":"story","id":"components-row--adding-items","name":"Adding Items","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--lazy-up-count":{"type":"story","id":"components-row--lazy-up-count","name":"Lazy Up Count","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--removing-items":{"type":"story","id":"components-row--removing-items","name":"Removing Items","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-scrollwrapper--docs":{"id":"components-scrollwrapper--docs","title":"Components/ScrollWrapper","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-scrollwrapper--basic":{"type":"story","id":"components-scrollwrapper--basic","name":"Basic","title":"Components/ScrollWrapper","importPath":"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js","tags":["dev","test"]},"components-scrollwrapper--text-array":{"type":"story","id":"components-scrollwrapper--text-array","name":"Text Array","title":"Components/ScrollWrapper","importPath":"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js","tags":["dev","test"]},"components-scrollwrapper--object-array":{"type":"story","id":"components-scrollwrapper--object-array","name":"Object Array","title":"Components/ScrollWrapper","importPath":"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js","tags":["dev","test"]},"components-shadow--docs":{"id":"components-shadow--docs","title":"Components/Shadow","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Shadow/Shadow.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Shadow/Shadow.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-shadow--shadow":{"type":"story","id":"components-shadow--shadow","name":"Shadow","title":"Components/Shadow","importPath":"../../@lightningjs/ui-components/src/components/Shadow/Shadow.stories.js","tags":["dev","test"]},"components-slider--docs":{"id":"components-slider--docs","title":"Components/Slider","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Slider/Slider.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Slider/Slider.stories.js"],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-slider-slider--basic":{"type":"story","id":"components-slider-slider--basic","name":"Basic","title":"Components/Slider/Slider","importPath":"../../@lightningjs/ui-components/src/components/Slider/Slider.stories.js","tags":["dev","test"]},"components-slider-slider--signal-handling":{"type":"story","id":"components-slider-slider--signal-handling","name":"Signal Handling","title":"Components/Slider/Slider","importPath":"../../@lightningjs/ui-components/src/components/Slider/Slider.stories.js","tags":["dev","test"]},"components-slider-sliderlarge--basic":{"type":"story","id":"components-slider-sliderlarge--basic","name":"Basic","title":"Components/Slider/SliderLarge","importPath":"../../@lightningjs/ui-components/src/components/Slider/SliderLarge.stories.js","tags":["dev","test"]},"components-slider-sliderlarge--signal-handling-large":{"type":"story","id":"components-slider-sliderlarge--signal-handling-large","name":"Signal Handling Large","title":"Components/Slider/SliderLarge","importPath":"../../@lightningjs/ui-components/src/components/Slider/SliderLarge.stories.js","tags":["dev","test"]},"components-surface--docs":{"id":"components-surface--docs","title":"Components/Surface","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Surface/Surface.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Surface/Surface.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-surface--surface":{"type":"story","id":"components-surface--surface","name":"Surface","title":"Components/Surface","importPath":"../../@lightningjs/ui-components/src/components/Surface/Surface.stories.js","tags":["dev","test"]},"components-tab--docs":{"id":"components-tab--docs","title":"Components/Tab","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/TabBar/Tab.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/TabBar/Tab.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-tab--tab":{"type":"story","id":"components-tab--tab","name":"Tab","title":"Components/Tab","importPath":"../../@lightningjs/ui-components/src/components/TabBar/Tab.stories.js","tags":["dev","test"]},"components-tabbar--docs":{"id":"components-tabbar--docs","title":"Components/TabBar","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/TabBar/TabBar.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/TabBar/TabBar.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-tabbar--basic":{"type":"story","id":"components-tabbar--basic","name":"Basic","title":"Components/TabBar","importPath":"../../@lightningjs/ui-components/src/components/TabBar/TabBar.stories.js","tags":["dev","test"]},"components-tabbar--custom-tabs":{"type":"story","id":"components-tabbar--custom-tabs","name":"Custom Tabs","title":"Components/TabBar","importPath":"../../@lightningjs/ui-components/src/components/TabBar/TabBar.stories.js","tags":["dev","test"]},"components-tabbar--multiple-rows":{"type":"story","id":"components-tabbar--multiple-rows","name":"Multiple Rows","title":"Components/TabBar","importPath":"../../@lightningjs/ui-components/src/components/TabBar/TabBar.stories.js","tags":["dev","test"]},"components-textbox--docs":{"id":"components-textbox--docs","title":"Components/TextBox","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/TextBox/TextBox.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-textbox--basic":{"type":"story","id":"components-textbox--basic","name":"Basic","title":"Components/TextBox","importPath":"../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js","tags":["dev","test"]},"components-textbox--with-inline-content-array":{"type":"story","id":"components-textbox--with-inline-content-array","name":"With Inline Content Array","title":"Components/TextBox","importPath":"../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js","tags":["dev","test"]},"components-textbox--with-inline-content-string":{"type":"story","id":"components-textbox--with-inline-content-string","name":"With Inline Content String","title":"Components/TextBox","importPath":"../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js","tags":["dev","test"]},"components-textbox--with-inline-content-truncation":{"type":"story","id":"components-textbox--with-inline-content-truncation","name":"With Inline Content Truncation","title":"Components/TextBox","importPath":"../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js","tags":["dev","test"]},"components-tile--docs":{"id":"components-tile--docs","title":"Components/Tile","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Tile/Tile.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Tile/Tile.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-tile--tile":{"type":"story","id":"components-tile--tile","name":"Tile","title":"Components/Tile","importPath":"../../@lightningjs/ui-components/src/components/Tile/Tile.stories.js","tags":["dev","test"]},"components-titlerow--docs":{"id":"components-titlerow--docs","title":"Components/TitleRow","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/TitleRow/TitleRow.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/TitleRow/TitleRow.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-titlerow--title-row":{"type":"story","id":"components-titlerow--title-row","name":"TitleRow","title":"Components/TitleRow","importPath":"../../@lightningjs/ui-components/src/components/TitleRow/TitleRow.stories.js","tags":["dev","test"]},"components-toggle--docs":{"id":"components-toggle--docs","title":"Components/Toggle","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Toggle/Toggle.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Toggle/Toggle.stories.js"],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-toggle-toggle--toggle":{"type":"story","id":"components-toggle-toggle--toggle","name":"Toggle","title":"Components/Toggle/Toggle","importPath":"../../@lightningjs/ui-components/src/components/Toggle/Toggle.stories.js","tags":["dev","test"]},"components-toggle-togglesmall--toggle-small":{"type":"story","id":"components-toggle-togglesmall--toggle-small","name":"ToggleSmall","title":"Components/Toggle/ToggleSmall","importPath":"../../@lightningjs/ui-components/src/components/Toggle/ToggleSmall.stories.js","tags":["dev","test"]},"components-tooltip--docs":{"id":"components-tooltip--docs","title":"Components/Tooltip","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-tooltip--basic":{"type":"story","id":"components-tooltip--basic","name":"Basic","title":"Components/Tooltip","importPath":"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.stories.js","tags":["dev","test"]},"components-tooltip--long-title":{"type":"story","id":"components-tooltip--long-title","name":"Long Title","title":"Components/Tooltip","importPath":"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.stories.js","tags":["dev","test"]},"components-tooltip--with-button":{"type":"story","id":"components-tooltip--with-button","name":"With Button","title":"Components/Tooltip","importPath":"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.stories.js","tags":["dev","test"]}}} +{"v":5,"entries":{"docs-introduction--docs":{"id":"docs-introduction--docs","title":"Docs/Introduction","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/Introduction.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-read-me--docs":{"id":"docs-read-me--docs","title":"Docs/ Read Me","name":"Docs","importPath":"./src/Readme.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-contributing--docs":{"id":"docs-contributing--docs","title":"Docs / Contributing","name":"Docs","importPath":"./src/Contributing.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-lightning-resources--docs":{"id":"docs-lightning-resources--docs","title":"Docs/Lightning Resources","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/LightningResources.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-lightning-community-guide--docs":{"id":"docs-lightning-community-guide--docs","title":"Docs/Lightning Community Guide","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/LightningCommunityGuide.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-overview--docs":{"id":"docs-theming-overview--docs","title":"Docs / Theming / Overview","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/Theming.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-component-config--docs":{"id":"docs-theming-component-config--docs","title":"Docs / Theming / Component Config","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingComponentConfig.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-tones--docs":{"id":"docs-theming-tones--docs","title":"Docs / Theming / Tones","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingTone.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-modes--docs":{"id":"docs-theming-modes--docs","title":"Docs / Theming / Modes","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingMode.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-extensions--docs":{"id":"docs-theming-extensions--docs","title":"Docs / Theming/ Extensions","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingExtensions.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-subtheming--docs":{"id":"docs-theming-subtheming--docs","title":"Docs / Theming/ Subtheming","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingSubTheming.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-use-in-storybook--docs":{"id":"docs-theming-use-in-storybook--docs","title":"Docs / Theming/ Use in Storybook","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingStorybook.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-theme-properties--docs":{"id":"docs-theming-theme-properties--docs","title":"Docs / Theming/ Theme Properties","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingAttributes.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-hierarchy--docs":{"id":"docs-theming-hierarchy--docs","title":"Docs / Theming/ Hierarchy","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingHierarchy.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-theming-tutorial--docs":{"id":"docs-theming-tutorial--docs","title":"Docs / Theming/ Tutorial","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/ThemingTutorial.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-overview--docs":{"id":"docs-unit-testing-overview--docs","title":"Docs / Unit Testing / Overview","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/Overview.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-test-renderer-create--docs":{"id":"docs-unit-testing-test-renderer-create--docs","title":"Docs / Unit Testing / Test Renderer / create","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/TestRenderer/create.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-test-renderer-tojson--docs":{"id":"docs-unit-testing-test-renderer-tojson--docs","title":"Docs / Unit Testing / Test Renderer / toJSON","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/TestRenderer/toJSON.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-test-utils-makecreatecomponent--docs":{"id":"docs-unit-testing-test-utils-makecreatecomponent--docs","title":"Docs / Unit Testing / Test Utils / makeCreateComponent ","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/makeCreateComponent.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-test-utils-completeanimation--docs":{"id":"docs-unit-testing-test-utils-completeanimation--docs","title":"Docs / Unit Testing / Test Utils / completeAnimation","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/completeAnimation.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-test-utils-fastforward--docs":{"id":"docs-unit-testing-test-utils-fastforward--docs","title":"Docs / Unit Testing / Test Utils / fastForward","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/fastForward.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-unit-testing-test-utils-nexttick--docs":{"id":"docs-unit-testing-test-utils-nexttick--docs","title":"Docs / Unit Testing / Test Utils / nextTick","name":"Docs","importPath":"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/nextTick.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-base-component--docs":{"id":"docs-base-component--docs","title":"Docs/Base Component","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/Base.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"docs-storybook-structure--docs":{"id":"docs-storybook-structure--docs","title":"Docs/Storybook Structure","name":"Docs","importPath":"../../@lightningjs/ui-components/src/docs/Storybook.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"collections-theming-tokens--theming-tokens":{"type":"story","id":"collections-theming-tokens--theming-tokens","name":"Theming Tokens","title":"Collections/Theming Tokens","importPath":"../../@lightningjs/ui-components/src/docs/ThemingFoundations.stories.js","tags":["dev","test"]},"utilities-withannouncer--docs":{"id":"utilities-withannouncer--docs","title":"Utilities/withAnnouncer","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withannouncer--basic":{"type":"story","id":"utilities-withannouncer--basic","name":"Basic","title":"Utilities/withAnnouncer","importPath":"../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.stories.js","componentPath":"../../@lightningjs/ui-components/src/mixins/withAnnouncer","tags":["dev","test"]},"utilities-withannouncer--with-default-abbreviations":{"type":"story","id":"utilities-withannouncer--with-default-abbreviations","name":"With Default Abbreviations","title":"Utilities/withAnnouncer","importPath":"../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.stories.js","componentPath":"../../@lightningjs/ui-components/src/mixins/withAnnouncer","tags":["dev","test"]},"utilities-withclasscache--docs":{"id":"utilities-withclasscache--docs","title":"Utilities/withClassCache","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withClassCache/withClassCache.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"utilities-withedititems--docs":{"id":"utilities-withedititems--docs","title":"Utilities/withEditItems","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withEditItems/withEditItems.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withEditItems/withEditItems.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withedititems--with-edit-items":{"type":"story","id":"utilities-withedititems--with-edit-items","name":"withEditItems","title":"Utilities/withEditItems","importPath":"../../@lightningjs/ui-components/src/mixins/withEditItems/withEditItems.stories.js","tags":["dev","test"]},"utilities-withhandlekey--docs":{"id":"utilities-withhandlekey--docs","title":"Utilities/withHandleKey","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withHandleKey/withHandleKey.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withHandleKey/withHandleKey.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withhandlekey--with-handle-key":{"type":"story","id":"utilities-withhandlekey--with-handle-key","name":"withHandleKey","title":"Utilities/withHandleKey","importPath":"../../@lightningjs/ui-components/src/mixins/withHandleKey/withHandleKey.stories.js","tags":["dev","test"]},"utilities-withlayout--docs":{"id":"utilities-withlayout--docs","title":"Utilities/withLayout","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withLayout/withLayout.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withLayout/withLayout.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withlayout--with-layout":{"type":"story","id":"utilities-withlayout--with-layout","name":"withLayout","title":"Utilities/withLayout","importPath":"../../@lightningjs/ui-components/src/mixins/withLayout/withLayout.stories.js","tags":["dev","test"]},"utilities-withlongpress--docs":{"id":"utilities-withlongpress--docs","title":"Utilities/withLongPress","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withlongpress--with-long-press":{"type":"story","id":"utilities-withlongpress--with-long-press","name":"withLongPress","title":"Utilities/withLongPress","importPath":"../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.stories.js","tags":["dev","test"]},"utilities-withmarqueesync--docs":{"id":"utilities-withmarqueesync--docs","title":"Utilities/withMarqueeSync","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withmarqueesync--basic":{"type":"story","id":"utilities-withmarqueesync--basic","name":"withMarqueeSync","title":"Utilities/withMarqueeSync","importPath":"../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.stories.js","tags":["dev","test"]},"utilities-withselections--docs":{"id":"utilities-withselections--docs","title":"Utilities/withSelections","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withSelections/withSelections.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withSelections/withSelections.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withselections--with-selections":{"type":"story","id":"utilities-withselections--with-selections","name":"withSelections","title":"Utilities/withSelections","importPath":"../../@lightningjs/ui-components/src/mixins/withSelections/withSelections.stories.js","tags":["dev","test"]},"utilities-withtags--docs":{"id":"utilities-withtags--docs","title":"Utilities/withTags","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withTags/withTags.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withTags/withTags.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withtags--with-tags":{"type":"story","id":"utilities-withtags--with-tags","name":"withTags","title":"Utilities/withTags","importPath":"../../@lightningjs/ui-components/src/mixins/withTags/withTags.stories.js","tags":["dev","test"]},"utilities-withthemestyles--docs":{"id":"utilities-withthemestyles--docs","title":"Utilities/withThemeStyles","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withThemeStyles/withThemeStyles.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withThemeStyles/withThemeStyles.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withthemestyles--with-theme-styles":{"type":"story","id":"utilities-withthemestyles--with-theme-styles","name":"withThemeStyles","title":"Utilities/withThemeStyles","importPath":"../../@lightningjs/ui-components/src/mixins/withThemeStyles/withThemeStyles.stories.js","tags":["dev","test"]},"utilities-withupdates--docs":{"id":"utilities-withupdates--docs","title":"Utilities/withUpdates","name":"Docs","importPath":"../../@lightningjs/ui-components/src/mixins/withUpdates/withUpdates.mdx","storiesImports":["../../@lightningjs/ui-components/src/mixins/withUpdates/withUpdates.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"utilities-withupdates--with-updates":{"type":"story","id":"utilities-withupdates--with-updates","name":"withUpdates","title":"Utilities/withUpdates","importPath":"../../@lightningjs/ui-components/src/mixins/withUpdates/withUpdates.stories.js","tags":["dev","test"]},"components-artwork--docs":{"id":"components-artwork--docs","title":"Components/Artwork","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Artwork/Artwork.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Artwork/Artwork.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-artwork--artwork":{"type":"story","id":"components-artwork--artwork","name":"Artwork","title":"Components/Artwork","importPath":"../../@lightningjs/ui-components/src/components/Artwork/Artwork.stories.js","tags":["dev","test"]},"components-badge--docs":{"id":"components-badge--docs","title":"Components/Badge","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Badge/Badge.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-badge--text":{"type":"story","id":"components-badge--text","name":"Text","title":"Components/Badge","importPath":"../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js","tags":["dev","test"]},"components-badge--icon-svg":{"type":"story","id":"components-badge--icon-svg","name":"Icon SVG","title":"Components/Badge","importPath":"../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js","tags":["dev","test"]},"components-badge--icon-png":{"type":"story","id":"components-badge--icon-png","name":"Icon PNG","title":"Components/Badge","importPath":"../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js","tags":["dev","test"]},"components-badge--text-with-icon":{"type":"story","id":"components-badge--text-with-icon","name":"Text With Icon","title":"Components/Badge","importPath":"../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js","tags":["dev","test"]},"components-button--docs":{"id":"components-button--docs","title":"Components / Button","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Button/Button.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Button/Button.stories.js"],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-button-button--button":{"type":"story","id":"components-button-button--button","name":"Button","title":"Components/Button/Button","importPath":"../../@lightningjs/ui-components/src/components/Button/Button.stories.js","tags":["dev","test"]},"components-button-buttonsmall--button-small":{"type":"story","id":"components-button-buttonsmall--button-small","name":"ButtonSmall","title":"Components/Button/ButtonSmall","importPath":"../../@lightningjs/ui-components/src/components/Button/ButtonSmall.stories.js","tags":["dev","test"]},"components-card--docs":{"id":"components-card--docs","title":"Components/Card","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Card/Card.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Card/Card.stories.js"],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-card-card--card":{"type":"story","id":"components-card-card--card","name":"Card","title":"Components/Card/Card","importPath":"../../@lightningjs/ui-components/src/components/Card/Card.stories.js","tags":["dev","test"]},"components-card-cardradio--docs":{"id":"components-card-cardradio--docs","title":"Components/Card/CardRadio","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Card/CardRadio.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Card/CardRadio.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-card-cardradio--card-radio":{"type":"story","id":"components-card-cardradio--card-radio","name":"CardRadio","title":"Components/Card/CardRadio","importPath":"../../@lightningjs/ui-components/src/components/Card/CardRadio.stories.js","tags":["dev","test"]},"components-card-cardsection--docs":{"id":"components-card-cardsection--docs","title":"Components/Card/CardSection","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Card/CardSection.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Card/CardSection.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-card-cardsection--card-section":{"type":"story","id":"components-card-cardsection--card-section","name":"CardSection","title":"Components/Card/CardSection","importPath":"../../@lightningjs/ui-components/src/components/Card/CardSection.stories.js","tags":["dev","test"]},"components-card-cardtitle--docs":{"id":"components-card-cardtitle--docs","title":"Components/Card/CardTitle","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Card/CardTitle.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Card/CardTitle.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-card-cardtitle--card-title":{"type":"story","id":"components-card-cardtitle--card-title","name":"CardTitle","title":"Components/Card/CardTitle","importPath":"../../@lightningjs/ui-components/src/components/Card/CardTitle.stories.js","tags":["dev","test"]},"components-cardcontent-cardcontent--docs":{"id":"components-cardcontent-cardcontent--docs","title":"Components/CardContent/CardContent","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/CardContent/CardContent.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/CardContent/CardContent.stories.js","../../@lightningjs/ui-components/src/components/Card/Card.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-cardcontent-cardcontent--card-content":{"type":"story","id":"components-cardcontent-cardcontent--card-content","name":"CardContent","title":"Components/CardContent/CardContent","importPath":"../../@lightningjs/ui-components/src/components/CardContent/CardContent.stories.js","tags":["dev","test"]},"components-cardcontent-cardcontenthorizontal--card-content-horizontal":{"type":"story","id":"components-cardcontent-cardcontenthorizontal--card-content-horizontal","name":"CardContentHorizontal","title":"Components/CardContent/CardContentHorizontal","importPath":"../../@lightningjs/ui-components/src/components/CardContent/CardContentHorizontal.stories.js","tags":["dev","test"]},"components-cardcontent-cardcontenthorizontallarge--card-content-horizontal-large":{"type":"story","id":"components-cardcontent-cardcontenthorizontallarge--card-content-horizontal-large","name":"CardContentHorizontalLarge","title":"Components/CardContent/CardContentHorizontalLarge","importPath":"../../@lightningjs/ui-components/src/components/CardContent/CardContentHorizontalLarge.stories.js","tags":["dev","test"]},"components-cardcontent-cardcontentvertical--card-content-vertical":{"type":"story","id":"components-cardcontent-cardcontentvertical--card-content-vertical","name":"CardContentVertical","title":"Components/CardContent/CardContentVertical","importPath":"../../@lightningjs/ui-components/src/components/CardContent/CardContentVertical.stories.js","tags":["dev","test"]},"components-cardcontent-cardcontentverticalsmall--card-content-vertical-small":{"type":"story","id":"components-cardcontent-cardcontentverticalsmall--card-content-vertical-small","name":"CardContentVerticalSmall","title":"Components/CardContent/CardContentVerticalSmall","importPath":"../../@lightningjs/ui-components/src/components/CardContent/CardContentVerticalSmall.stories.js","tags":["dev","test"]},"components-checkboxes--docs":{"id":"components-checkboxes--docs","title":"Components/Checkboxes","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Checkbox/Checkbox.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Checkbox/Checkbox.stories.js"],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-checkboxes-checkbox--checkbox":{"type":"story","id":"components-checkboxes-checkbox--checkbox","name":"Checkbox","title":"Components/Checkboxes/Checkbox","importPath":"../../@lightningjs/ui-components/src/components/Checkbox/Checkbox.stories.js","tags":["dev","test"]},"components-checkboxes-checkboxsmall--checkbox-small":{"type":"story","id":"components-checkboxes-checkboxsmall--checkbox-small","name":"CheckboxSmall","title":"Components/Checkboxes/CheckboxSmall","importPath":"../../@lightningjs/ui-components/src/components/Checkbox/CheckboxSmall.stories.js","tags":["dev","test"]},"components-column--docs":{"id":"components-column--docs","title":"Components/Column","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Column/Column.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-column--column":{"type":"story","id":"components-column--column","name":"Column","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--multi-column":{"type":"story","id":"components-column--multi-column","name":"Multi Column","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--plinko":{"type":"story","id":"components-column--plinko","name":"Plinko","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--varying-item-height":{"type":"story","id":"components-column--varying-item-height","name":"Varying Item Height","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--expandable-height-items":{"type":"story","id":"components-column--expandable-height-items","name":"Expandable Height Items","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--expandable-height-rows":{"type":"story","id":"components-column--expandable-height-rows","name":"Expandable Height Rows","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--skip-focus":{"type":"story","id":"components-column--skip-focus","name":"Skip Focus","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--on-screen-effect":{"type":"story","id":"components-column--on-screen-effect","name":"On Screen Effect","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--sticky-title":{"type":"story","id":"components-column--sticky-title","name":"Sticky Title","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--centered-in-parent":{"type":"story","id":"components-column--centered-in-parent","name":"Centered In Parent","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--skip-plinko":{"type":"story","id":"components-column--skip-plinko","name":"Skip Plinko","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--lazy-up-count":{"type":"story","id":"components-column--lazy-up-count","name":"Lazy Up Count","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--adding-items":{"type":"story","id":"components-column--adding-items","name":"Adding Items","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-column--removing-items":{"type":"story","id":"components-column--removing-items","name":"Removing Items","title":"Components/Column","importPath":"../../@lightningjs/ui-components/src/components/Column/Column.stories.js","tags":["dev","test"]},"components-control--docs":{"id":"components-control--docs","title":"Components/Control","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Control/Control.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-control-control--control":{"type":"story","id":"components-control-control--control","name":"Control","title":"Components/Control/Control","importPath":"../../@lightningjs/ui-components/src/components/Control/Control.stories.js","tags":["dev","test"]},"components-control-controlsmall--control-small":{"type":"story","id":"components-control-controlsmall--control-small","name":"ControlSmall","title":"Components/Control/ControlSmall","importPath":"../../@lightningjs/ui-components/src/components/Control/ControlSmall.stories.js","tags":["dev","test"]},"components-controlrow--docs":{"id":"components-controlrow--docs","title":"Components/ControlRow","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-controlrow--basic":{"type":"story","id":"components-controlrow--basic","name":"Basic","title":"Components/ControlRow","importPath":"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.stories.js","tags":["dev","test"]},"components-controlrow--lazy-loading":{"type":"story","id":"components-controlrow--lazy-loading","name":"Lazy Loading","title":"Components/ControlRow","importPath":"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.stories.js","tags":["dev","test"]},"components-controlrow--adding-and-removing":{"type":"story","id":"components-controlrow--adding-and-removing","name":"Adding And Removing","title":"Components/ControlRow","importPath":"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.stories.js","tags":["dev","test"]},"components-focusmanager--docs":{"id":"components-focusmanager--docs","title":"Components/FocusManager","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-focusmanager--basic":{"type":"story","id":"components-focusmanager--basic","name":"Basic","title":"Components/FocusManager","importPath":"../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.stories.js","tags":["dev","test"]},"components-gradient--docs":{"id":"components-gradient--docs","title":"Components/Gradient","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Gradient/Gradient.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Gradient/Gradient.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-gradient--gradient":{"type":"story","id":"components-gradient--gradient","name":"Gradient","title":"Components/Gradient","importPath":"../../@lightningjs/ui-components/src/components/Gradient/Gradient.stories.js","tags":["dev","test"]},"components-gridoverlay--docs":{"id":"components-gridoverlay--docs","title":"Components/GridOverlay","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-gridoverlay--grid-overlay":{"type":"story","id":"components-gridoverlay--grid-overlay","name":"GridOverlay","title":"Components/GridOverlay","importPath":"../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.stories.js","tags":["dev","test"]},"components-icon--docs":{"id":"components-icon--docs","title":"Components/Icon","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Icon/Icon.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Icon/Icon.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-icon--png":{"type":"story","id":"components-icon--png","name":"PNG","title":"Components/Icon","importPath":"../../@lightningjs/ui-components/src/components/Icon/Icon.stories.js","tags":["dev","test"]},"components-icon--svg":{"type":"story","id":"components-icon--svg","name":"SVG","title":"Components/Icon","importPath":"../../@lightningjs/ui-components/src/components/Icon/Icon.stories.js","tags":["dev","test"]},"components-inlinecontent--docs":{"id":"components-inlinecontent--docs","title":"Components/InlineContent","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-inlinecontent--basic":{"type":"story","id":"components-inlinecontent--basic","name":"Basic","title":"Components/InlineContent","importPath":"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js","tags":["dev","test"]},"components-inlinecontent--with-new-lines":{"type":"story","id":"components-inlinecontent--with-new-lines","name":"With New Lines","title":"Components/InlineContent","importPath":"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js","tags":["dev","test"]},"components-inlinecontent--with-parsing":{"type":"story","id":"components-inlinecontent--with-parsing","name":"With Parsing","title":"Components/InlineContent","importPath":"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js","tags":["dev","test"]},"components-inlinecontent--with-truncation":{"type":"story","id":"components-inlinecontent--with-truncation","name":"With Truncation","title":"Components/InlineContent","importPath":"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js","tags":["dev","test"]},"components-inlinecontent--with-strike-through":{"type":"story","id":"components-inlinecontent--with-strike-through","name":"With Strike Through","title":"Components/InlineContent","importPath":"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js","tags":["dev","test"]},"components-input--docs":{"id":"components-input--docs","title":"Components/Input","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Input/Input.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Input/Input.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-input--input":{"type":"story","id":"components-input--input","name":"Input","title":"Components/Input","importPath":"../../@lightningjs/ui-components/src/components/Input/Input.stories.js","tags":["dev","test"]},"components-key--docs":{"id":"components-key--docs","title":"Components/Key","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Key/Key.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Key/Key.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-key--basic":{"type":"story","id":"components-key--basic","name":"Basic","title":"Components/Key","importPath":"../../@lightningjs/ui-components/src/components/Key/Key.stories.js","tags":["dev","test"]},"components-key--key-icon":{"type":"story","id":"components-key--key-icon","name":"Key Icon","title":"Components/Key","importPath":"../../@lightningjs/ui-components/src/components/Key/Key.stories.js","tags":["dev","test"]},"components-keyboard--docs":{"id":"components-keyboard--docs","title":"Components/Keyboard","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/Keyboard.mdx","storiesImports":[],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-keyboard-keyboard--keyboard":{"type":"story","id":"components-keyboard-keyboard--keyboard","name":"Keyboard","title":"Components/Keyboard/Keyboard","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/Keyboard.stories.js","tags":["dev","test"]},"components-keyboard-keyboardemail--keyboard-email":{"type":"story","id":"components-keyboard-keyboardemail--keyboard-email","name":"KeyboardEmail","title":"Components/Keyboard/KeyboardEmail","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardEmail.stories.js","tags":["dev","test"]},"components-keyboard-keyboardfullscreen--keyboard-fullscreen":{"type":"story","id":"components-keyboard-keyboardfullscreen--keyboard-fullscreen","name":"KeyboardFullscreen","title":"Components/Keyboard/KeyboardFullscreen","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardFullscreen.stories.js","tags":["dev","test"]},"components-keyboard-keyboardinput--input-with-qwerty":{"type":"story","id":"components-keyboard-keyboardinput--input-with-qwerty","name":"Input With Qwerty","title":"Components/Keyboard/KeyboardInput","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardInput.stories.js","tags":["dev","test"]},"components-keyboard-keyboardinput--input-with-email":{"type":"story","id":"components-keyboard-keyboardinput--input-with-email","name":"Input With Email","title":"Components/Keyboard/KeyboardInput","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardInput.stories.js","tags":["dev","test"]},"components-keyboard-keyboardnumbers--keyboard-numbers":{"type":"story","id":"components-keyboard-keyboardnumbers--keyboard-numbers","name":"KeyboardNumbers","title":"Components/Keyboard/KeyboardNumbers","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardNumbers.stories.js","tags":["dev","test"]},"components-keyboard-keyboardqwerty--keyboard-qwerty":{"type":"story","id":"components-keyboard-keyboardqwerty--keyboard-qwerty","name":"KeyboardQwerty","title":"Components/Keyboard/KeyboardQwerty","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardQwerty.stories.js","tags":["dev","test"]},"components-keyboard-keyboardsearch--keyboard-search":{"type":"story","id":"components-keyboard-keyboardsearch--keyboard-search","name":"KeyboardSearch","title":"Components/Keyboard/KeyboardSearch","importPath":"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardSearch.stories.js","tags":["dev","test"]},"components-knob--docs":{"id":"components-knob--docs","title":"Components/Knob","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Knob/Knob.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Knob/Knob.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-knob--knob":{"type":"story","id":"components-knob--knob","name":"Knob","title":"Components/Knob","importPath":"../../@lightningjs/ui-components/src/components/Knob/Knob.stories.js","tags":["dev","test"]},"components-label--docs":{"id":"components-label--docs","title":"Components/Label","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Label/Label.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Label/Label.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-label--label":{"type":"story","id":"components-label--label","name":"Label","title":"Components/Label","importPath":"../../@lightningjs/ui-components/src/components/Label/Label.stories.js","tags":["dev","test"]},"components-listitem-listitem--docs":{"id":"components-listitem-listitem--docs","title":"Components/ListItem/ListItem","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/ListItem/ListItem.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/ListItem/ListItem.stories.js","../../@lightningjs/ui-components/src/components/Button/Button.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-listitem-listitem--list-item":{"type":"story","id":"components-listitem-listitem--list-item","name":"ListItem","title":"Components/ListItem/ListItem","importPath":"../../@lightningjs/ui-components/src/components/ListItem/ListItem.stories.js","tags":["dev","test"]},"components-listitem-listitempicker--docs":{"id":"components-listitem-listitempicker--docs","title":"Components/ListItem/ListItemPicker","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/ListItem/ListItemPicker.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/ListItem/ListItemPicker.stories.js","../../@lightningjs/ui-components/src/components/ListItem/ListItem.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-listitem-listitempicker--list-item-picker":{"type":"story","id":"components-listitem-listitempicker--list-item-picker","name":"ListItemPicker","title":"Components/ListItem/ListItemPicker","importPath":"../../@lightningjs/ui-components/src/components/ListItem/ListItemPicker.stories.js","tags":["dev","test"]},"components-listitem-listitemslider--docs":{"id":"components-listitem-listitemslider--docs","title":"Components/ListItem/ListItemSlider","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/ListItem/ListItemSlider.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Slider/Slider.stories.js","../../@lightningjs/ui-components/src/components/ListItem/ListItem.stories.js","../../@lightningjs/ui-components/src/components/ListItem/ListItemSlider.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-listitem-listitemslider--list-item-slider":{"type":"story","id":"components-listitem-listitemslider--list-item-slider","name":"ListItemSlider","title":"Components/ListItem/ListItemSlider","importPath":"../../@lightningjs/ui-components/src/components/ListItem/ListItemSlider.stories.js","tags":["dev","test"]},"components-marquee--docs":{"id":"components-marquee--docs","title":"Components/Marquee","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Marquee/Marquee.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Marquee/Marquee.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-marquee--marquee":{"type":"story","id":"components-marquee--marquee","name":"Marquee","title":"Components/Marquee","importPath":"../../@lightningjs/ui-components/src/components/Marquee/Marquee.stories.js","tags":["dev","test"]},"components-marquee--centered-text":{"type":"story","id":"components-marquee--centered-text","name":"Centered Text","title":"Components/Marquee","importPath":"../../@lightningjs/ui-components/src/components/Marquee/Marquee.stories.js","tags":["dev","test"]},"components-metadatabase--docs":{"id":"components-metadatabase--docs","title":"Components/MetadataBase","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/MetadataBase/MetadataBase.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/MetadataBase/MetadataBase.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-metadatabase--metadata-base":{"type":"story","id":"components-metadatabase--metadata-base","name":"MetadataBase","title":"Components/MetadataBase","importPath":"../../@lightningjs/ui-components/src/components/MetadataBase/MetadataBase.stories.js","tags":["dev","test"]},"components-metadatacard--docs":{"id":"components-metadatacard--docs","title":"Components/MetadataCard","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/MetadataCard/MetadataCard.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/MetadataCard/MetadataCard.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-metadatacard--metadata-card":{"type":"story","id":"components-metadatacard--metadata-card","name":"MetadataCard","title":"Components/MetadataCard","importPath":"../../@lightningjs/ui-components/src/components/MetadataCard/MetadataCard.stories.js","tags":["dev","test"]},"components-metadatacardcontent--docs":{"id":"components-metadatacardcontent--docs","title":"Components/MetadataCardContent","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/MetadataCardContent/MetadataCardContent.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/MetadataCardContent/MetadataCardContent.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-metadatacardcontent--metadata-card-content":{"type":"story","id":"components-metadatacardcontent--metadata-card-content","name":"MetadataCardContent","title":"Components/MetadataCardContent","importPath":"../../@lightningjs/ui-components/src/components/MetadataCardContent/MetadataCardContent.stories.js","tags":["dev","test"]},"components-metadatatile--docs":{"id":"components-metadatatile--docs","title":"Components/MetadataTile","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/MetadataTile/MetadataTile.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/MetadataTile/MetadataTile.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-metadatatile--metadata-tile":{"type":"story","id":"components-metadatatile--metadata-tile","name":"MetadataTile","title":"Components/MetadataTile","importPath":"../../@lightningjs/ui-components/src/components/MetadataTile/MetadataTile.stories.js","tags":["dev","test"]},"components-navigationmanager--docs":{"id":"components-navigationmanager--docs","title":"Components/NavigationManager","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-navigationmanager--row":{"type":"story","id":"components-navigationmanager--row","name":"Row","title":"Components/NavigationManager","importPath":"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.stories.js","tags":["dev","test"]},"components-navigationmanager--column":{"type":"story","id":"components-navigationmanager--column","name":"Column","title":"Components/NavigationManager","importPath":"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.stories.js","tags":["dev","test"]},"components-navigationmanager--column-of-rows":{"type":"story","id":"components-navigationmanager--column-of-rows","name":"Column Of Rows","title":"Components/NavigationManager","importPath":"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.stories.js","tags":["dev","test"]},"components-progressbar--docs":{"id":"components-progressbar--docs","title":"Components/ProgressBar","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/ProgressBar/ProgressBar.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/ProgressBar/ProgressBar.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-progressbar--progress-bar":{"type":"story","id":"components-progressbar--progress-bar","name":"ProgressBar","title":"Components/ProgressBar","importPath":"../../@lightningjs/ui-components/src/components/ProgressBar/ProgressBar.stories.js","tags":["dev","test"]},"components-provider--docs":{"id":"components-provider--docs","title":"Components/Provider","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Provider/Provider.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Provider/Provider.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-provider--provider":{"type":"story","id":"components-provider--provider","name":"Provider","title":"Components/Provider","importPath":"../../@lightningjs/ui-components/src/components/Provider/Provider.stories.js","tags":["dev","test"]},"components-provider--with-custom-icon-size":{"type":"story","id":"components-provider--with-custom-icon-size","name":"With Custom Icon Size","title":"Components/Provider","importPath":"../../@lightningjs/ui-components/src/components/Provider/Provider.stories.js","tags":["dev","test"]},"components-radio--docs":{"id":"components-radio--docs","title":"Components/Radio","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Radio/Radio.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Radio/Radio.stories.js"],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-radio-radio--radio":{"type":"story","id":"components-radio-radio--radio","name":"Radio","title":"Components/Radio/Radio","importPath":"../../@lightningjs/ui-components/src/components/Radio/Radio.stories.js","tags":["dev","test"]},"components-radio-radiosmall--radio-small":{"type":"story","id":"components-radio-radiosmall--radio-small","name":"RadioSmall","title":"Components/Radio/RadioSmall","importPath":"../../@lightningjs/ui-components/src/components/Radio/RadioSmall.stories.js","tags":["dev","test"]},"components-row--docs":{"id":"components-row--docs","title":"Components/Row","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Row/Row.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-row--row":{"type":"story","id":"components-row--row","name":"Row","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--focus-height-change":{"type":"story","id":"components-row--focus-height-change","name":"Focus Height Change","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--varying-item-width":{"type":"story","id":"components-row--varying-item-width","name":"Varying Item Width","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--expandable-width":{"type":"story","id":"components-row--expandable-width","name":"Expandable Width","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--centered-in-parent":{"type":"story","id":"components-row--centered-in-parent","name":"Centered In Parent","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--plinko":{"type":"story","id":"components-row--plinko","name":"Plinko","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--skip-focus":{"type":"story","id":"components-row--skip-focus","name":"Skip Focus","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--lazy-scroll-indexes":{"type":"story","id":"components-row--lazy-scroll-indexes","name":"Lazy Scroll Indexes","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--adding-items":{"type":"story","id":"components-row--adding-items","name":"Adding Items","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--lazy-up-count":{"type":"story","id":"components-row--lazy-up-count","name":"Lazy Up Count","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-row--removing-items":{"type":"story","id":"components-row--removing-items","name":"Removing Items","title":"Components/Row","importPath":"../../@lightningjs/ui-components/src/components/Row/Row.stories.js","tags":["dev","test"]},"components-scrollwrapper--docs":{"id":"components-scrollwrapper--docs","title":"Components/ScrollWrapper","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-scrollwrapper--basic":{"type":"story","id":"components-scrollwrapper--basic","name":"Basic","title":"Components/ScrollWrapper","importPath":"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js","tags":["dev","test"]},"components-scrollwrapper--text-array":{"type":"story","id":"components-scrollwrapper--text-array","name":"Text Array","title":"Components/ScrollWrapper","importPath":"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js","tags":["dev","test"]},"components-scrollwrapper--object-array":{"type":"story","id":"components-scrollwrapper--object-array","name":"Object Array","title":"Components/ScrollWrapper","importPath":"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js","tags":["dev","test"]},"components-shadow--docs":{"id":"components-shadow--docs","title":"Components/Shadow","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Shadow/Shadow.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Shadow/Shadow.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-shadow--shadow":{"type":"story","id":"components-shadow--shadow","name":"Shadow","title":"Components/Shadow","importPath":"../../@lightningjs/ui-components/src/components/Shadow/Shadow.stories.js","tags":["dev","test"]},"components-slider--docs":{"id":"components-slider--docs","title":"Components/Slider","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Slider/Slider.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Slider/Slider.stories.js"],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-slider-slider--basic":{"type":"story","id":"components-slider-slider--basic","name":"Basic","title":"Components/Slider/Slider","importPath":"../../@lightningjs/ui-components/src/components/Slider/Slider.stories.js","tags":["dev","test"]},"components-slider-slider--signal-handling":{"type":"story","id":"components-slider-slider--signal-handling","name":"Signal Handling","title":"Components/Slider/Slider","importPath":"../../@lightningjs/ui-components/src/components/Slider/Slider.stories.js","tags":["dev","test"]},"components-slider-sliderlarge--basic":{"type":"story","id":"components-slider-sliderlarge--basic","name":"Basic","title":"Components/Slider/SliderLarge","importPath":"../../@lightningjs/ui-components/src/components/Slider/SliderLarge.stories.js","tags":["dev","test"]},"components-slider-sliderlarge--signal-handling-large":{"type":"story","id":"components-slider-sliderlarge--signal-handling-large","name":"Signal Handling Large","title":"Components/Slider/SliderLarge","importPath":"../../@lightningjs/ui-components/src/components/Slider/SliderLarge.stories.js","tags":["dev","test"]},"components-surface--docs":{"id":"components-surface--docs","title":"Components/Surface","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Surface/Surface.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Surface/Surface.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-surface--surface":{"type":"story","id":"components-surface--surface","name":"Surface","title":"Components/Surface","importPath":"../../@lightningjs/ui-components/src/components/Surface/Surface.stories.js","tags":["dev","test"]},"components-tab--docs":{"id":"components-tab--docs","title":"Components/Tab","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/TabBar/Tab.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/TabBar/Tab.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-tab--tab":{"type":"story","id":"components-tab--tab","name":"Tab","title":"Components/Tab","importPath":"../../@lightningjs/ui-components/src/components/TabBar/Tab.stories.js","tags":["dev","test"]},"components-tabbar--docs":{"id":"components-tabbar--docs","title":"Components/TabBar","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/TabBar/TabBar.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/TabBar/TabBar.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-tabbar--basic":{"type":"story","id":"components-tabbar--basic","name":"Basic","title":"Components/TabBar","importPath":"../../@lightningjs/ui-components/src/components/TabBar/TabBar.stories.js","tags":["dev","test"]},"components-tabbar--custom-tabs":{"type":"story","id":"components-tabbar--custom-tabs","name":"Custom Tabs","title":"Components/TabBar","importPath":"../../@lightningjs/ui-components/src/components/TabBar/TabBar.stories.js","tags":["dev","test"]},"components-tabbar--multiple-rows":{"type":"story","id":"components-tabbar--multiple-rows","name":"Multiple Rows","title":"Components/TabBar","importPath":"../../@lightningjs/ui-components/src/components/TabBar/TabBar.stories.js","tags":["dev","test"]},"components-textbox--docs":{"id":"components-textbox--docs","title":"Components/TextBox","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/TextBox/TextBox.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-textbox--basic":{"type":"story","id":"components-textbox--basic","name":"Basic","title":"Components/TextBox","importPath":"../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js","tags":["dev","test"]},"components-textbox--with-inline-content-array":{"type":"story","id":"components-textbox--with-inline-content-array","name":"With Inline Content Array","title":"Components/TextBox","importPath":"../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js","tags":["dev","test"]},"components-textbox--with-inline-content-string":{"type":"story","id":"components-textbox--with-inline-content-string","name":"With Inline Content String","title":"Components/TextBox","importPath":"../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js","tags":["dev","test"]},"components-textbox--with-inline-content-truncation":{"type":"story","id":"components-textbox--with-inline-content-truncation","name":"With Inline Content Truncation","title":"Components/TextBox","importPath":"../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js","tags":["dev","test"]},"components-tile--docs":{"id":"components-tile--docs","title":"Components/Tile","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Tile/Tile.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Tile/Tile.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-tile--tile":{"type":"story","id":"components-tile--tile","name":"Tile","title":"Components/Tile","importPath":"../../@lightningjs/ui-components/src/components/Tile/Tile.stories.js","tags":["dev","test"]},"components-titlerow--docs":{"id":"components-titlerow--docs","title":"Components/TitleRow","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/TitleRow/TitleRow.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/TitleRow/TitleRow.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-titlerow--title-row":{"type":"story","id":"components-titlerow--title-row","name":"TitleRow","title":"Components/TitleRow","importPath":"../../@lightningjs/ui-components/src/components/TitleRow/TitleRow.stories.js","tags":["dev","test"]},"components-toggle--docs":{"id":"components-toggle--docs","title":"Components/Toggle","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Toggle/Toggle.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Toggle/Toggle.stories.js"],"type":"docs","tags":["dev","test","unattached-mdx"]},"components-toggle-toggle--toggle":{"type":"story","id":"components-toggle-toggle--toggle","name":"Toggle","title":"Components/Toggle/Toggle","importPath":"../../@lightningjs/ui-components/src/components/Toggle/Toggle.stories.js","tags":["dev","test"]},"components-toggle-togglesmall--toggle-small":{"type":"story","id":"components-toggle-togglesmall--toggle-small","name":"ToggleSmall","title":"Components/Toggle/ToggleSmall","importPath":"../../@lightningjs/ui-components/src/components/Toggle/ToggleSmall.stories.js","tags":["dev","test"]},"components-tooltip--docs":{"id":"components-tooltip--docs","title":"Components/Tooltip","name":"Docs","importPath":"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.mdx","storiesImports":["../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.stories.js"],"type":"docs","tags":["dev","test","attached-mdx"]},"components-tooltip--basic":{"type":"story","id":"components-tooltip--basic","name":"Basic","title":"Components/Tooltip","importPath":"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.stories.js","tags":["dev","test"]},"components-tooltip--long-title":{"type":"story","id":"components-tooltip--long-title","name":"Long Title","title":"Components/Tooltip","importPath":"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.stories.js","tags":["dev","test"]},"components-tooltip--with-button":{"type":"story","id":"components-tooltip--with-button","name":"With Button","title":"Components/Tooltip","importPath":"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.stories.js","tags":["dev","test"]}}} diff --git a/main.f80f06c1.iframe.bundle.js b/main.1e40b216.iframe.bundle.js similarity index 99% rename from main.f80f06c1.iframe.bundle.js rename to main.1e40b216.iframe.bundle.js index 604445961..e75c5b8b1 100644 --- a/main.f80f06c1.iframe.bundle.js +++ b/main.1e40b216.iframe.bundle.js @@ -11928,6 +11928,14 @@ var map = { 8527, 4433 ], + "./mixins/withLongPress/withLongPress.mdx": [ + "../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.mdx", + 5600, + 7679, + 1930, + 8527, + 3195 + ], "./mixins/withMarqueeSync/withMarqueeSync.mdx": [ "../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.mdx", 5600, @@ -12761,6 +12769,20 @@ var map = { 8527, 4563 ], + "./mixins/withLongPress/withLongPress.stories": [ + "../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.stories.js", + 7679, + 1930, + 8527, + 4877 + ], + "./mixins/withLongPress/withLongPress.stories.js": [ + "../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.stories.js", + 7679, + 1930, + 8527, + 4877 + ], "./mixins/withMarqueeSync/withMarqueeSync.stories": [ "../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.stories.js", 1909 @@ -13012,4 +13034,4 @@ module.exports = __STORYBOOK_MODULE_PREVIEW_API__; /******/ var __webpack_exports__ = __webpack_require__.O(); /******/ } ]); -//# sourceMappingURL=main.f80f06c1.iframe.bundle.js.map \ No newline at end of file +//# sourceMappingURL=main.1e40b216.iframe.bundle.js.map \ No newline at end of file diff --git a/main.1e40b216.iframe.bundle.js.map b/main.1e40b216.iframe.bundle.js.map new file mode 100644 index 000000000..678ee284c --- /dev/null +++ b/main.1e40b216.iframe.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.1e40b216.iframe.bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AACA;AACA;AASA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AALA;AACA;AAAA;AAAA;AAAA;AA5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAOA;AANA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AAMA;AAGA;AAAA;AAAA;AAGA;AAGA;AAEA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;;AAIA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA3QA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AA8PA;;;;;;;;;;;;;;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AArGA;AACA;AAAA;AAAA;AAuGA;AACA;AAKA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;;;;;;;;;;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAKA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;;AAGA;AACA;AACA;AACA;AAAA;AAEA;;AAIA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AApLA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AALA;AACA;AAAA;AAAA;AAAA;AAWA;AACA;AAAA;AALA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAAA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAKA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAAA;AAAA;AAQA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAMA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AApcA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AA8bA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAXA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAGA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAGA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AAEA;AAAA;AAEA;AAEA;AAAA;AAEA;AAAA;;;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+CA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAzDA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AA5CA;AA8DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgJA;AACA;AAMA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAxUA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAOA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAOA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAOA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAOA;AAAA;AACA;AACA;AAFA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AA3IA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;;AAEA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAGA;AAGA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AAEA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAIA;AAEA;AACA;AAIA;AAGA;AAAA;AACA;AAEA;AACA;AAGA;AAAA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA3BA;AACA;AAAA;AAAA;AAAA;AAhfA;AAWA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyDA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AALA;AACA;AAAA;AAAA;AAAA;AArQA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AAUA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAKA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAEA;AAIA;AAKA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AAEA;AAOA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAOA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAMA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAMA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAzgBA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAWA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAUA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AAEA;AAMA;AACA;AACA;AAEA;AAOA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AA9NA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAIA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AAQA;AACA;AAAA;AAPA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AAEA;AAMA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AACA;AAAA;AAAA;AAAA;AAhUA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAQA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAGA;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AAEA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC7VA;AAAA;AAAA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AA/BA;AAAA;AAAA;AAgCA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAfA;AAAA;AAAA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAxBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AA7BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AANA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AAFA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AA3BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AArCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwCA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAGA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AASA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;;;;;;;;;AC5aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AAGA;AACA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAFA;AAIA;AAGA;AACA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;AC9MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAhBA;AAmBA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;AC1FA;AAAA;AAAA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAFA;AAGA;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AAIA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AAGA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAPA;AAAA;AAQA;AAAA;AAAA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAOA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AAAA;AANA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AA/BA;AACA;AAAA;AAAA;AAgCA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AArBA;AACA;AAAA;AAAA;AAsBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;;AAEA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AAIA;AAGA;AAKA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAQA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAKA;AAAA;AAJA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AACA;AAOA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AAOA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAKA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAKA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAKA;AAKA;AAIA;AACA;AACA;AACA;;;;ACnyBA;AAEA;AAEA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAOA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AAQA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAOA;AAEA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAQA;AACA;AAAA;AALA;AACA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAbA;AACA;AAAA;AAAA;AAAA;AAgBA;AAMA;AACA;AAMA;AAEA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAIA;AAIA;AAIA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAOA;;AAEA;AAKA;AACA;;AAEA;AACA;;AAOA;AACA;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAOA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAAA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAAA;AASA;AACA;AACA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAmBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAeA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAfA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAeA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAlKA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAsJA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AAAA;AACA;AACA;AAKA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAKA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AAAA;AASA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA7GA;AACA;AAAA;AAAA;AA8GA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAQA;AAQA;AAAA;AAAA;AA1CA;AA6CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAQA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAMA;AAOA;AACA;AAEA;AAAA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAKA;AAJA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAGA;AAEA;AAEA;AAEA;AAGA;AAMA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAJA;AAAA;AAAA;AAAA;AAQA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAJA;AAAA;AAAA;AAAA;AAQA;AAEA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAQA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAAA;AAHA;AACA;AAAA;AACA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC14BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAGA;AAKA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAMA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAMA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;;AAEA;AAGA;AADA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAvDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AA6CA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAOA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACvQA;AAAA;AAAA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;;;;;;;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACx1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvBA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA","sources":["webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Badge/Badge.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Badge/Badge.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withLayout/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withExtensions/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Base/Base.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Column/Column.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Column/Column.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Icon/Icon.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Icon/Icon.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Marquee/Marquee.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Marquee/Marquee.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Row/Row.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Row/Row.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/TextBox/TextBox.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/TextBox/TextBox.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/metrics.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/events.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components-theme-base/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/fonts.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/constants.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/theme-manager.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/logger.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/global-update-manager/GlobalUpdateManager.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withAnnouncer/Speech.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withAnnouncer/abbreviations.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withAnnouncer/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withHandleKey/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withTags/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withThemeStyles/utils.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withThemeStyles/cache.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withThemeStyles/StyleManager.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withThemeStyles/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withUpdates/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/shaders/FadeShader.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/textures/CustomImageTexture.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/utils/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/pool/index.js","webpack://lightning-ui-docs/./.storybook/utils/registerEvents.js","webpack://lightning-ui-docs/./index.js","webpack://lightning-ui-docs/./.storybook/addons/decorators/withLightning.js","webpack://lightning-ui-docs/./.storybook/preview.js","webpack://lightning-ui-docs/../../../node_modules/@storybook/core/dist/theming/ sync","webpack://lightning-ui-docs/../../@lightningjs/ui-components-test-utils/src/docs/ lazy ^\\.\\/.*$ include: (?678b","webpack://lightning-ui-docs/../../@lightningjs/ui-components-test-utils/src/docs/ lazy ^\\.\\/.*$ include: (","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/ lazy ^\\.\\/.*$ include: (","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/ lazy ^\\.\\/.*$ include: (?cb14","webpack://lightning-ui-docs/./src/ lazy ^\\.\\/.*$ include: (","webpack://lightning-ui-docs/./storybook-stories.js","webpack://lightning-ui-docs/./storybook-config-entry.js","webpack://lightning-ui-docs/external var \"__STORYBOOK_MODULE_CHANNELS__\"","webpack://lightning-ui-docs/external var \"__STORYBOOK_MODULE_CLIENT_LOGGER__\"","webpack://lightning-ui-docs/external var \"__STORYBOOK_MODULE_CORE_EVENTS_PREVIEW_ERRORS__\"","webpack://lightning-ui-docs/external var \"__STORYBOOK_MODULE_CORE_EVENTS__\"","webpack://lightning-ui-docs/external var \"__STORYBOOK_MODULE_GLOBAL__\"","webpack://lightning-ui-docs/external var \"__STORYBOOK_MODULE_PREVIEW_API__\""],"sourcesContent":["/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => {\n return {\n contentSpacing: theme.spacer.xs,\n offsetY: 1,\n paddingX: theme.spacer.md,\n paddingY: theme.spacer.xs,\n radius: theme.radius.sm,\n strokeWidth: theme.stroke.sm,\n textStyle: {\n ...theme.typography.tag1,\n textAlign: 'center'\n }\n };\n};\n\nexport const tone = theme => ({\n neutral: {\n backgroundColor: theme.color.fillInverseSecondary,\n iconColor: theme.color.textNeutral,\n textStyle: { textColor: theme.color.textNeutral },\n strokeColor: theme.color.strokeNeutralSecondary\n },\n inverse: {\n backgroundColor: theme.color.fillNeutralSecondary,\n iconColor: theme.color.textInverse,\n textStyle: { textColor: theme.color.textInverse },\n strokeColor: theme.color.strokeInverseSecondary\n },\n brand: {\n backgroundColor: theme.color.fillBrand,\n iconColor: theme.color.textNeutral,\n textStyle: { textColor: theme.color.textNeutral },\n strokeColor: theme.color.strokeInverseSecondary\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport Base from '../Base';\nimport Icon from '../Icon';\nimport { getHexColor, getMaxRoundRadius } from '../../utils';\nimport * as styles from './Badge.styles';\nimport lng from '@lightningjs/core';\n\nexport default class Badge extends Base {\n static _template() {\n return {\n Text: {\n mountY: 0.5\n },\n Icon: {\n type: Icon,\n mountY: 0.5,\n signals: {\n itemChanged: '_updateLayout'\n }\n }\n };\n }\n\n static get __componentName() {\n return 'Badge';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get properties() {\n return ['title', 'icon', 'iconAlign', 'iconWidth', 'iconHeight'];\n }\n\n static get tags() {\n return ['Background', 'Text', 'Icon'];\n }\n\n _init() {\n this._Text.on('txLoaded', this._updateLayout.bind(this));\n super._init();\n }\n\n _update() {\n this._updateText();\n this._updateIcon();\n this._updateLayout();\n this._updateVisibility();\n }\n\n _updateVisibility() {\n this.alpha = this.title || this.icon ? 1 : 0;\n }\n\n _updateLayout() {\n this._updateWidth();\n this._updateBackground();\n this._updatePositions();\n this.signal('loadedBadge', this);\n }\n\n _updateBackground() {\n const height =\n Math.max(this._Text.renderHeight, this._Icon.h) + this.style.paddingY * 2;\n\n this.patch({\n h: height,\n texture: lng.Tools.getRoundRect(\n this.w,\n height,\n getMaxRoundRadius(this.style.radius, this.w, height),\n this.style.strokeWidth,\n this.style.strokeColor,\n true,\n this.style.backgroundColor\n )\n });\n }\n\n _updateText() {\n if (this._Text) {\n this._Text.patch({\n text: {\n ...this.style.textStyle,\n text: this.title || ''\n }\n });\n }\n }\n\n _updateIcon() {\n this._Icon.patch({\n icon: this.icon,\n w: this.iconWidth,\n h: this.iconHeight,\n style: {\n color: getHexColor(this.style.iconColor)\n }\n });\n }\n\n _updateWidth() {\n let width = 0;\n if (this.title && this.icon) {\n width =\n this._Text.renderWidth +\n this._Icon.finalW +\n this.style.contentSpacing +\n this.style.paddingX * 2;\n } else if (this.title) {\n width = this._Text.renderWidth + this.style.paddingX * 2;\n } else if (this.icon) {\n width = this._Icon.finalW + this.style.paddingX * 2;\n }\n\n this.w = width;\n }\n\n _updatePositions() {\n this._Icon.y = this.h / 2;\n\n if (this.iconAlign === 'left' && this.title && this.icon) {\n this._Icon.x = this.style.paddingX;\n this._Text.x =\n this._Icon.x + this._Icon.finalW + this.style.contentSpacing;\n } else if (this.iconAlign === 'right' && this.title && this.icon) {\n this._Text.x = this.style.paddingX;\n this._Icon.x =\n this._Text.x + this._Text.renderWidth + this.style.contentSpacing;\n } else {\n this._Text.x = this.style.paddingX;\n this._Icon.x = this.style.paddingX;\n }\n\n this._Text.y = this._h / 2 + this.style.offsetY;\n }\n\n _getIconHeight() {\n if (this.icon) {\n return !this._Icon.finalH && this._Text\n ? this._Text.text.lineHeight\n : this._Icon.finalH;\n }\n return 0;\n }\n\n set announce(announce) {\n super.announce = announce;\n }\n\n get announce() {\n return this._announce || this.title;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport context from '../../globals/context/index';\nimport { stringifyCompare, getDimensions } from '../../utils';\n\nexport default function withLayout(Base) {\n return class extends Base {\n _construct() {\n super._construct && super._construct();\n this._previousDimensionData = null; // Store the previous dimension data to compare next time _updateItemLayout is called\n }\n\n get itemLayout() {\n return this._itemLayout;\n }\n\n set itemLayout(v) {\n const componentName =\n this.constructor._componentName || this.constructor.name;\n let itemLayout;\n if (v) {\n itemLayout = JSON.parse(\n JSON.stringify(v, (k, v) => {\n if (k !== 'circle' && v < 0) {\n context.error(\n `itemLayout for ${componentName} received an invalid value of ${v} for ${k}`\n );\n return;\n } else if (k === 'circle') {\n return Boolean(v);\n }\n return v;\n })\n );\n }\n\n if (!stringifyCompare(this._itemLayout, itemLayout)) {\n if (itemLayout && !itemLayout.upCount) {\n this._originalW = this.w;\n this._originalH = this.h;\n this._itemLayout = {\n w: this._originalW,\n h: this._originalH,\n ...itemLayout\n };\n } else {\n this._itemLayout = itemLayout;\n }\n\n this._updateItemLayout();\n }\n }\n\n _allowUpdate() {\n const {\n w = '',\n h = '',\n circle = '',\n ratioX = '',\n ratioY = '',\n upCount = ''\n } = this._itemLayout || {};\n // Store a string representation of all values from previous update to compare and decide if layout should change\n const layoutString =\n Object.values(context.theme.layout).join('') +\n `${w}${h}${circle ? 1 : 0}${ratioX}${ratioY}${upCount}`;\n if (layoutString !== this._previousDimensionData) {\n this._previousDimensionData = layoutString;\n return true;\n }\n return false;\n }\n\n _updateItemLayout() {\n if (!this._allowUpdate()) return;\n const { w, h } = getDimensions(this.theme, this._itemLayout);\n if (h || w) {\n // If there is not enough information passed in args to calculate item size\n const width = context.theme.layout.screenW;\n const height = context.theme.layout.screenH;\n const calculatedWidth = w || h * (width / height);\n const calculatedHeight = h || w * (height / width);\n this.w =\n this._itemLayout && this._itemLayout.circle\n ? calculatedHeight\n : calculatedWidth; // Width must be set first in order for Cards to be displayed properly\n this.h = calculatedHeight;\n if (this._itemLayout && this._itemLayout.circle && this.style.radius) {\n this._circleSet = true;\n this._originalRadius = this.style.radius;\n this.style = {\n ...this.style,\n radius: calculatedHeight / 2\n };\n } else if (this._circleSet) {\n // Restore to it's original state\n this.style = {\n ...this.style,\n radius: this._originalRadius\n };\n this._originalRadius = undefined;\n this._circleSet = false;\n }\n this.queueRequestUpdate && this.queueRequestUpdate();\n this.fireAncestors('$itemChanged');\n }\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport context from '../../globals/context/index';\n\nconst SUFFIX = '__original';\n\nexport default function withExtensions(Base) {\n if (Base.prototype.constructor._withExtensionsApplied) {\n return Base;\n }\n return class extends Base {\n static get name() {\n return Base.name;\n }\n\n static get __componentName() {\n if (!super.__componentName) {\n throw new Error(\n `A valid static __componentName property is required for theming to work properly. Please add this to the ${this.constructor.name} class.`\n );\n }\n return super.__componentName;\n }\n\n static get _withExtensionsApplied() {\n // Extensions should only be applied once per class. This prevents it running multiple times. Ex. Surface -> Tile\n return true;\n }\n\n /**\n * Climb the prototype chain to establish what component's extension rules this component should also inherit\n * @returns {set} // set of strings\n */\n get _prototypeChain() {\n if (this.__prototypeChain) return this.__prototypeChain;\n const prototypeChain = new Set();\n let proto = this;\n do {\n proto = Object.getPrototypeOf(proto);\n if (null !== proto && typeof proto === 'object') {\n try {\n if (proto.constructor.__componentName)\n prototypeChain.add(proto.constructor.__componentName);\n } catch (error) {\n // Catch error when __componentName is not set in Base component\n }\n }\n } while (proto);\n this.__prototypeChain = prototypeChain;\n return prototypeChain;\n }\n\n /**\n * Get all valid extensions from the current theme\n * @returns {object[]} // Array of objects\n */\n get _extensions() {\n const extensions = context && context.theme && context.theme.extensions;\n if (\n !extensions ||\n !Array.isArray(extensions) ||\n (Array.isArray(extensions) && !extensions.length)\n )\n return [];\n return (\n extensions\n .filter(\n ({ targetComponent, extension }) =>\n (typeof targetComponent === 'string' ||\n Array.isArray(targetComponent)) &&\n typeof extension === 'function'\n )\n .slice()\n .reverse() || [] // Array is reversed to ensure extensions are executed in the proper order top -> bottom\n );\n }\n\n /**\n * Get all extensions to apply to this component\n * @return {class[]} // Array of classes\n */\n get _componentExtensions() {\n return this._extensions\n .filter(({ targetComponent }) => {\n // check to see if extension should be applied to this component\n if (typeof targetComponent === 'string') {\n return (\n targetComponent === this.constructor.__componentName ||\n this._prototypeChain.has(targetComponent)\n );\n } else if (Array.isArray(targetComponent)) {\n return targetComponent.find(pattern => {\n if (pattern.startsWith('/') && pattern.endsWith('/')) {\n const ComponentRegExp = new RegExp(pattern.slice(1, -1));\n return Array.from(this._prototypeChain).some(name =>\n ComponentRegExp.test(name)\n );\n } else {\n return this._prototypeChain.has(pattern);\n }\n });\n }\n return false;\n })\n .reduce((acc, { extension }) => {\n acc.push(extension);\n return acc;\n }, []);\n }\n\n /**\n * Check if theme extension mixins have already been applied\n * @return {boolean}\n */\n get _extensionApplied() {\n return (\n this._currentComponentExtensionLength === this._appliedExtensionLength\n );\n }\n\n _construct() {\n this._appliedExtensionLength = 0; // After the extensions are applied we store the length of all to determine later on if they have been applied before\n this._extendedList = {};\n this._extensionInstance = {}; // This will hold the extension instance once created\n this._setupExtensionBound = this._setupExtension.bind(this);\n context.on('themeUpdate', this._setupExtensionBound);\n this._currentComponentExtensionLength =\n this._calculateComponentExtensionLength();\n this._createExtension();\n super._construct();\n }\n\n _detach() {\n super._detach();\n context.off('themeUpdate', this._setupExtensionBound);\n }\n\n _setupExtension() {\n this._currentComponentExtensionLength =\n this._calculateComponentExtensionLength();\n this._createExtension.call(this);\n }\n\n _resetComponent() {\n this._extensionInstance._extensionCleanup &&\n this._extensionInstance._extensionCleanup.call(this);\n\n (Object.keys(this._extendedList) || []).forEach(prop => {\n delete this[prop];\n delete this[prop + SUFFIX];\n });\n\n this._extensionInstance = {};\n this._extendedList = {};\n }\n\n _calculateComponentExtensionLength() {\n const extensionLength = this._componentExtensions.reduce(\n (acc, extensionMixin) => {\n acc += extensionMixin.toString().length;\n return acc;\n },\n 0\n );\n return extensionLength;\n }\n\n _createExtension() {\n if (this._extensionApplied) return;\n this._resetComponent();\n const ExtendedClass = this._createExtensionClass();\n const instance = new ExtendedClass();\n this._extendedList = this._createExtensionAliases(instance);\n this._extensionInstance = instance;\n this._setComponentAliases(this._extendedList);\n }\n\n /**\n * Create the extension class\n * @return {class}\n */\n _createExtensionClass() {\n /**\n *\n * This class will sit at the bottom of the prototype stack and redirect all calls to the original to prevent an infinite loop\n *\n */\n function ExtensionBase() {}\n\n /** Create a new class the represents the extensions */\n const ExtendedClass = this._componentExtensions.reduce(\n (acc, extension) => {\n // Get the length of the extension and store the value. This will be used to determine if the mixin has been changed and needs to be re-applied\n return extension(acc);\n },\n ExtensionBase\n );\n\n // Store the length of the extension to be applied\n this._appliedExtensionLength = this._calculateComponentExtensionLength();\n\n return ExtendedClass;\n }\n\n _createExtensionAliases(obj) {\n // Find the prototype to be replaced\n let baseProto = obj;\n for (let i = 0; i < this._componentExtensions.length + 1; i++) {\n baseProto = Object.getPrototypeOf(baseProto);\n }\n\n /**\n * We will create alias for all the methods, getters, setters that will be overwritten by the extension layer\n * Create a list of properties to alias\n */\n\n const extended = {};\n\n const extensionOverrides = this._componentExtensions.reduce(\n (acc, extension) => {\n const extensionClass = new extension(class FakeClass {});\n const instance = new extensionClass();\n // Get the descriptors\n const originalComponentDescriptors = Object.getOwnPropertyDescriptors(\n Object.getPrototypeOf(instance)\n );\n Object.keys(originalComponentDescriptors).forEach(prop => {\n if (['constructor'].includes(prop)) return;\n if (\n originalComponentDescriptors[prop].get ||\n originalComponentDescriptors[prop].set\n ) {\n extended[prop] = { type: 'accessor' };\n acc[prop] = {\n get: function () {\n return this[prop + SUFFIX];\n },\n set: function (v) {\n this[prop + SUFFIX] = v;\n }\n };\n return;\n }\n extended[prop] = { type: 'method' };\n acc[prop] = {\n value: function () {\n this[prop + SUFFIX] && this[prop + SUFFIX]();\n }\n };\n });\n return acc;\n },\n {}\n );\n\n Object.defineProperties(baseProto, extensionOverrides);\n Object.setPrototypeOf(baseProto, this); // Set the bottom level prototype === the component\n\n return extended;\n }\n\n _setComponentAliases(aliasObj) {\n Object.keys(aliasObj).forEach(prop => {\n // Create an alias for the existing component property to save the original value\n this[prop + SUFFIX] = this[prop];\n if (aliasObj[prop].type === 'method') {\n this[prop] = this._extensionInstance[prop];\n } else if (aliasObj[prop].type === 'accessor') {\n Object.defineProperty(this, prop, {\n configurable: true, // Allow accessors to be updated on theme change\n get() {\n return this._extensionInstance[prop];\n },\n set(v) {\n this._extensionInstance[prop] = v;\n }\n });\n }\n });\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport context from '../../globals/context/index';\nimport withUpdates from '../../mixins/withUpdates';\nimport withTags from '../../mixins/withTags';\nimport withHandleKey from '../../mixins/withHandleKey';\nimport withLayout from '../../mixins/withLayout';\nimport withThemeStyles from '../../mixins/withThemeStyles';\nimport withExtensions from '../../mixins/withExtensions';\nimport { isComponentOnScreen } from '../../utils';\n\nclass Base extends lng.Component {\n static get __componentName() {\n return 'Base';\n }\n\n _construct() {\n this.constructor.__componentName; // Check that __componentName is set\n this.skipPlinko = false;\n this.centerInParent = false;\n if (!this.loaded) this.loaded = Promise.resolve(); // By default this is a resolved promise. Components can use _resetLoadedPromise if they require the functionality\n }\n\n _init() {\n this.queueRequestUpdate();\n }\n\n _resetLoadedPromise() {\n this.loaded = new Promise((resolve, reject) => {\n this._resolveLoadedPromise = resolve;\n this._rejectLoadedPromise = reject;\n });\n }\n\n _update() {}\n\n _focus() {\n this._updateShouldSmooth();\n this.queueRequestUpdate();\n }\n\n _unfocus() {\n this.queueRequestUpdate();\n }\n\n _updateShouldSmooth() {\n if (this.shouldSmooth === undefined) this.shouldSmooth = true;\n }\n\n /**\n * This method accepts a target component, patch object, and optional smooth object.\n * If the component is visible, it will smooth in the smooth object, or fall back to\n * the patch object, if not it will apply the patch.\n *\n * @param {component reference} ref tag ref of target component\n * @param {object} patch object of properties to patch to target\n * @param {object} smooth object of properties to smooth to target\n */\n applySmooth(ref, patch, smooth) {\n if (this.shouldSmooth) {\n ref.smooth = smooth || patch;\n } else {\n ref.patch(patch);\n }\n }\n\n // keep announce methods out of the update lifecycle (do not put in properties array)\n // announce methods do not need to re-render component\n get announce() {\n return this._announce;\n }\n\n set announce(announce) {\n this._announce = announce;\n }\n\n get announceContext() {\n return this._announceContext;\n }\n\n set announceContext(announce) {\n this._announceContext = announce;\n }\n\n get shouldSmooth() {\n return this._shouldSmooth;\n }\n\n set shouldSmooth(shouldSmooth) {\n this._shouldSmooth = shouldSmooth;\n }\n\n get _isDisabledMode() {\n return this.mode === 'disabled';\n }\n\n get _isUnfocusedMode() {\n return this.mode === 'unfocused';\n }\n\n get _isFocusedMode() {\n return this.mode === 'focused';\n }\n\n isFullyOnScreen(offsets) {\n return isComponentOnScreen(this, offsets);\n }\n\n getFocusScale() {\n return context.theme.layout.focusScale;\n }\n\n getUnfocusScale() {\n return 1;\n }\n}\n\nfunction withMixins(baseComponent) {\n return withExtensions(\n withLayout(\n withThemeStyles(withUpdates(withTags(withHandleKey(baseComponent))))\n )\n );\n}\n\nexport default withMixins(Base);\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n itemSpacing: theme.layout.gutterY,\n scrollIndex: 0,\n itemTransition: {\n ...theme.animation.standardEntrance,\n duration: theme.animation.duration.fast\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport NavigationManager from '../NavigationManager';\nimport { getY } from '../../utils';\nimport * as styles from './Column.styles';\n\nexport default class Column extends NavigationManager {\n static get __componentName() {\n return 'Column';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static _template() {\n return {\n ...super._template(),\n direction: 'column'\n };\n }\n\n _isOnScreenForScrolling(child) {\n if (!child) return false;\n\n const y = getY(child);\n if (!Number.isFinite(y)) return false;\n const itemsTransitionY = this.getTransitionYTargetValue();\n const columnY = this.core.renderContext.py;\n let itemY = columnY + itemsTransitionY + y;\n let yModifier;\n\n // This section here takes the difference between a possible target value\n // and subtracts it from the current child x. That value then is subtracted from the initial\n // itemX value calculated on the core renderContext px value to more accurately\n // calculate the item's location on screen when it's own x value will be updating.\n if (child.transition('y')) {\n yModifier = child.y - child.transition('y').targetValue;\n itemY = itemY - yModifier;\n }\n return itemY >= columnY && itemY + child.h <= columnY + this.h;\n }\n\n _shouldScroll() {\n if (this.alwaysScroll) {\n return true;\n }\n let shouldScroll = false;\n if (!this.neverScroll) {\n const isCompletelyOnScreen = this._isOnScreenForScrolling(this.selected);\n const lastChild = this.Items.childList.last;\n shouldScroll =\n lastChild &&\n (this.shouldScrollUp() ||\n this.shouldScrollDown() ||\n !isCompletelyOnScreen);\n }\n\n if (this.selectedIndex < this.scrollIndex) {\n shouldScroll = false;\n }\n\n return shouldScroll;\n }\n\n _getScrollY() {\n let itemsContainerY;\n let itemIndex = this.selectedIndex - this.scrollIndex;\n itemIndex = itemIndex < 0 ? 0 : itemIndex;\n if (itemIndex === this._firstFocusableIndex()) {\n itemIndex = 0;\n }\n\n if (this.Items.children[itemIndex]) {\n itemsContainerY = this.Items.children[itemIndex].transition('y')\n ? -this.Items.children[itemIndex].transition('y').targetValue +\n this.itemPosY\n : -this.Items.children[itemIndex].y + this.itemPosY;\n }\n\n return itemsContainerY;\n }\n\n _render(next, prev) {\n this._prevLastScrollIndex = this._lastScrollIndex;\n\n if (\n this.plinko &&\n prev &&\n prev.selected &&\n !(this.items.indexOf(prev) === 0 && prev.skipPlinko)\n ) {\n const prevPlinko = this.checkSkipPlinko(prev, next);\n next.selectedIndex = this._getIndexOfItemNear(next, prevPlinko || prev);\n } else if (next && !next.selectedIndex) {\n next.selectedIndex = 0;\n }\n\n let itemsContainerY;\n if (!this.Items.children.length) {\n itemsContainerY = this.itemPosY;\n } else if (this._shouldScroll()) {\n itemsContainerY = this._getScrollY();\n }\n\n if (itemsContainerY !== undefined) {\n this.updatePositionOnAxis(this.Items, itemsContainerY);\n }\n\n this.onScreenEffect(this.onScreenItems);\n }\n\n _performRender() {\n this._render(this.selected, this.prevSelected);\n }\n\n checkSkipPlinko(prev, next) {\n // If previous doesn't have skip plinko or previous is the first or last item\n if (\n !prev ||\n !prev.skipPlinko ||\n [0, this.items.length - 1].includes(this.items.indexOf(prev))\n ) {\n return null;\n }\n\n const prevIndex = this.items.indexOf(prev);\n const direction = prevIndex - this.items.indexOf(next);\n const up = direction > 0;\n\n // Grab all items below prev if up or all items before prev if down\n const prevItems = up\n ? this.items.slice(prevIndex).map(i => ({\n skipPlinko: i.skipPlinko,\n index: this.items.indexOf(i)\n }))\n : this.items\n .slice(0, prevIndex + 1)\n .map(i => ({\n skipPlinko: i.skipPlinko,\n index: this.items.indexOf(i)\n }))\n .reverse();\n\n // first item that has skipPlinko but the previous does not\n // Start at the index prev\n const endOfMultiSkipPlinkos = prevItems.find(\n i => i.skipPlinko && !this.items[i.index + direction].skipPlinko\n );\n const prevPlinkoIndex = endOfMultiSkipPlinkos\n ? endOfMultiSkipPlinkos.index + direction\n : prevIndex + direction; // +/- 1, item index before prev\n\n return this.items[prevPlinkoIndex];\n }\n\n get _itemsY() {\n return getY(this.Items);\n }\n\n $removeItem(item) {\n if (item) {\n const wasSelected = item === this.selected;\n this.Items.childList.remove(item);\n this.queueRequestUpdate();\n\n if (wasSelected || this.selectedIndex >= this.items.length) {\n // eslint-disable-next-line no-self-assign\n this.selectedIndex = this._selectedIndex;\n }\n\n if (!this.items.length) {\n this.fireAncestors('$columnEmpty');\n }\n }\n }\n\n $columnChanged() {\n this.queueRequestUpdate();\n }\n\n _isOnScreen(child) {\n if (!child) return false;\n\n return this._isComponentVerticallyVisible(child);\n }\n\n // can be overridden\n onScreenEffect() {}\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * FocusManager Component\n *\n * Container to set focus on elements with key[Up/Down] or key[Left/Right]\n */\nimport Base from '../Base';\nimport {\n getX,\n getY,\n isComponentOnScreen,\n getShortestDistance\n} from '../../utils';\n\nexport default class FocusManager extends Base {\n static get __componentName() {\n return 'FocusManager';\n }\n\n static get tags() {\n return ['Items'];\n }\n\n static get properties() {\n return ['direction', 'wrapSelected'];\n }\n\n _construct() {\n super._construct();\n this._selectedIndex = 0;\n this._itemPosX = 0;\n this._itemPosY = 0;\n this.direction = this.direction || 'row';\n }\n\n _init() {\n this._checkSkipFocus();\n }\n\n get Items() {\n if (!this.tag('Items')) {\n this.patch({ Items: {} });\n }\n return this._Items;\n }\n\n _setDirection(direction) {\n const state = {\n none: 'None',\n column: 'Column',\n row: 'Row'\n }[direction];\n\n if (state) {\n this._setState(state);\n }\n return direction;\n }\n\n _getItems() {\n return this._Items.children;\n }\n\n get items() {\n return this.Items.children;\n }\n\n set items(items) {\n this._resetItems();\n this._selectedIndex = 0;\n this.appendItems(items);\n this._checkSkipFocus();\n }\n\n set itemPosX(x) {\n this.Items.x = this._itemPosX = x;\n }\n\n get itemPosX() {\n return this._itemPosX;\n }\n\n set itemPosY(y) {\n this.Items.y = this._itemPosY = y;\n }\n\n get itemPosY() {\n return this._itemPosY;\n }\n\n _resetItems() {\n this.Items.childList.clear();\n this.Items.patch({\n w: 0,\n h: 0,\n x: this.itemPosX,\n y: this.itemPosY\n });\n\n // This fixes an issue when trying to call set items if there are already items held in _lazyItems.\n // Going to follow up on a review of this feature.\n if (this._lazyItems) {\n this._lazyItems = null;\n }\n }\n\n _appendLazyItem(item) {\n this.appendItems([item]);\n }\n\n appendItems(items = []) {\n this.Items.childList.a(items);\n this._refocus();\n }\n\n appendItemsAt(items = [], idx) {\n const addIndex = Number.isInteger(idx) ? idx : this.Items.children.length;\n this.shouldSmooth = false;\n this._lastAppendedIdx = addIndex;\n\n items.forEach((item, itemIdx) => {\n this.Items.childList.addAt(\n {\n ...item,\n parentFocus: this.hasFocus()\n },\n addIndex + itemIdx\n );\n });\n\n if (this.selectedIndex >= this._lastAppendedIdx) {\n this._selectedIndex += items.length;\n }\n\n this.requestUpdate();\n this._refocus();\n }\n\n prependItems(items) {\n this.appendItemsAt(items, 0);\n }\n\n removeItemAt(index) {\n this.shouldSmooth = false;\n this.Items.childList.removeAt(index);\n\n if (\n this.selectedIndex > index ||\n this.selectedIndex === this.Items.children.length\n ) {\n this._selectedIndex--;\n }\n\n this.requestUpdate();\n this._refocus();\n }\n\n _checkSkipFocus() {\n // If the first item has skip focus when appended get the next focusable item\n const initialSelection = this.Items.children[this.selectedIndex];\n if (initialSelection && initialSelection.skipFocus) {\n this.selectNext(false);\n }\n }\n\n get selected() {\n return this.Items.children[this.selectedIndex];\n }\n\n get selectedIndex() {\n return this._selectedIndex;\n }\n\n set selectedIndex(index) {\n this.prevSelected = this.selected;\n if (\n !this.Items.children.length ||\n !this.Items.children[index] ||\n !this.Items.children[index].skipFocus\n ) {\n if (index !== this._selectedIndex) {\n this._selectedIndex = index;\n }\n if (this.selected) {\n this._selectedChange(this.selected, this.prevSelected);\n }\n // Don't call refocus until after a new render in case of a situation like Plinko nav\n // where we don't want to focus the previously selected item and need to get the new one first\n this._refocus();\n }\n }\n\n _selectedChange(selected, prevSelected) {\n this._render(selected, prevSelected);\n this.signal('selectedChange', selected, prevSelected);\n }\n\n // Override\n _render() {}\n\n _firstFocusableIndex() {\n if (!this.items.length) return 0;\n const firstItem = this.items\n .reduce((acc, item, idx) => {\n if (!item.skipFocus) {\n acc.push({ ...item, originalIdx: idx });\n }\n return acc;\n }, [])\n .shift();\n\n return firstItem.originalIdx;\n }\n\n _lastFocusableIndex() {\n if (!this.items.length) return 0;\n const lastItem = this.items\n .reduce((acc, item, idx) => {\n if (!item.skipFocus) {\n acc.push({ ...item, originalIdx: idx });\n }\n return acc;\n }, [])\n .pop();\n\n return lastItem.originalIdx;\n }\n\n selectPrevious() {\n this.shouldSmooth = true;\n const hasFocusable = !!(this.items || []).filter(i => !i.skipFocus).length;\n if ((this.selectedIndex === 0 && !this.wrapSelected) || !hasFocusable) {\n return false;\n }\n\n const previousItemIndex = this.items\n .map(item => !!item.skipFocus)\n .lastIndexOf(false, this._selectedIndex - 1);\n\n if (previousItemIndex > -1) {\n this.selectedIndex = previousItemIndex;\n return true;\n } else if (this.wrapSelected) {\n this.selectedIndex = this._lastFocusableIndex();\n return true;\n }\n return false;\n }\n\n selectNext(shouldSmoothOverride) {\n if (this._lazyItems && this._lazyItems.length) {\n this._appendLazyItem(this._lazyItems.splice(0, 1)[0]);\n }\n this.shouldSmooth = shouldSmoothOverride ?? true;\n\n const hasFocusable = !!(this.items || []).filter(i => !i.skipFocus).length;\n if (\n (this.selectedIndex === this.Items.children.length - 1 &&\n !this.wrapSelected) ||\n !hasFocusable\n ) {\n return false;\n }\n\n const nextIndex = this.items.findIndex(\n (item, idx) => !item.skipFocus && idx > this._selectedIndex\n );\n\n if (nextIndex > -1) {\n this.selectedIndex = nextIndex;\n return true;\n } else if (this.wrapSelected) {\n this.selectedIndex = this._firstFocusableIndex();\n return true;\n }\n return false;\n }\n\n _getIndexOfItemNear(selected, prev) {\n const prevItem = prev.selected;\n\n if (!selected || !selected.items || !selected.items.length || !prevItem) {\n return 0;\n }\n\n const [itemX, itemY] = prevItem.core.getAbsoluteCoords(0, 0);\n const prevMiddle = [itemX + prevItem.w / 2, itemY + prevItem.h / 2];\n\n // Get all item center points from selected\n const selectedCoordArray = selected.items\n .map((item, index) => {\n return {\n index,\n distance: !item.skipFocus\n ? getShortestDistance(prevMiddle, item)\n : null\n };\n })\n .filter(item => {\n // Remove all indexes that don't have a distance (skipFocus)\n return null !== item.distance;\n })\n .sort(function (a, b) {\n return a.distance - b.distance;\n });\n return selectedCoordArray[0].index;\n }\n\n /**\n * TODO: Update Base to remove the focus/unfocus calls and add a second \"BaseComponent\" that does have them\n *\n * Layout Components (Column, Row, BoardRows, etc.) would extend only Base,\n * need to confirm this applies to InlineContnet and ScrollWrapper??\n * Element/Pattern Components (Tile, Badge, etc.) would extend \"BaseComponent\" that does have focus/unfocus overrides\n */\n _focus() {\n super._focus();\n this.items.forEach(item => (item.parentFocus = true));\n }\n _unfocus() {\n super._unfocus();\n this.items.forEach(item => (item.parentFocus = false));\n }\n\n _updateShouldSmooth() {}\n\n _getFocused() {\n const { selected } = this;\n // Make sure we're focused on a component\n if (selected) {\n if (selected.focusRef) {\n return selected.tag(selected.focusRef);\n } else if (selected.cparent) {\n return selected;\n }\n }\n return this;\n }\n\n _updateTransitionTarget(element, property, newValue) {\n if (\n element &&\n element.transition(property) &&\n !element.transition(property).isRunning() &&\n element.transition(property).targetValue !== newValue\n ) {\n element.transition(property).updateTargetValue(newValue);\n }\n }\n\n /**\n * Return list of items that are currently fully and partially on screen\n * @returns {Array} Array of matching lng.Component objects or empty array\n */\n get onScreenItems() {\n return this.Items.children.filter(child => this._isOnScreen(child));\n }\n\n _isOnScreenCompletely(child) {\n // 'isFullyOnScreen' method has been added to the Base class.\n // in case child does _not_ extend Base, 'isComponentOnScreen'\n // from the 'util' module will be invoked. The same method is\n // invoked by Base class\n return child.isFullyOnScreen\n ? child.isFullyOnScreen()\n : isComponentOnScreen(child);\n }\n\n get fullyOnScreenItems() {\n return this.Items.children.reduce((rv, item) => {\n if (item instanceof FocusManager) {\n return [\n ...rv,\n ...item.Items.children.filter(this._isOnScreenCompletely)\n ];\n } else if (this._isOnScreenCompletely(item)) {\n return [...rv, item];\n } else {\n return rv;\n }\n }, []);\n }\n\n _isOnScreen() {\n throw new Error(\"'_isOnScreen' must be implemented by 'row'/'column'\");\n }\n\n _isComponentHorizontallyVisible(child) {\n // get child's destination X; If child is moving to a destination,\n // get the value of where child will end up\n const x = getX(child);\n if (!Number.isFinite(x)) return false;\n\n // to calculate the target absolute X position of the item, we need to use\n // 1) the entire component's absolute position,\n // 2) the target animation value of the items container, and\n // 3) the target value of the item itself\n const transitionX = this.getTransitionXTargetValue();\n // get absolute position of FocusManager on screen\n const px = this.core.renderContext.px;\n const itemX = px + transitionX + x;\n\n // _scissor consists of [ left position (x), top position (y), width, height ]\n const [leftBounds = null, , clipWidth = null] = this.core._scissor || [];\n const stageW = this.stage.w / this.stage.getRenderPrecision();\n const { w } = child;\n\n const withinLeftStageBounds = itemX >= 0;\n const withinRightStageBounds = itemX + w <= stageW;\n // short circuit\n if (!withinLeftStageBounds || !withinRightStageBounds) return false;\n\n let withinLeftClippingBounds = true;\n let withinRightClippingBounds = true;\n if (Number.isFinite(leftBounds)) {\n withinLeftClippingBounds =\n Math.round(itemX + w) >= Math.round(leftBounds);\n withinRightClippingBounds =\n Math.round(itemX) <= Math.round(leftBounds + clipWidth);\n }\n\n return withinLeftClippingBounds && withinRightClippingBounds;\n }\n\n _isComponentVerticallyVisible(child) {\n // get child's destination Y; If child is moving to a destination,\n // get the value of where child will end up\n const y = getY(child);\n if (!Number.isFinite(y)) return false;\n\n // to calculate the target absolute Y position of the item, we need to use\n // 1) the entire component's absolute position,\n // 2) the target animation value of the items container, and\n // 3) the target value of the item itself\n const transitionY = this.getTransitionYTargetValue();\n\n // get absolute position of FocusManager on screen\n const py = this.core.renderContext.py;\n\n // _scissor consists of [ left position (x), top position (y), width, height ]\n const [, topBounds = null, , clipHeight = null] = this.core._scissor || [];\n const { h } = child;\n\n const itemY = py + transitionY + y;\n const stageH = this.stage.h / this.stage.getRenderPrecision();\n const withinTopStageBounds = itemY + h >= 0;\n const withingBottomStageBounds = itemY <= stageH;\n\n // short circuit\n if (!withinTopStageBounds || !withingBottomStageBounds) return false;\n\n let withinTopClippingBounds = true;\n let withinBottomClippingBounds = true;\n if (Number.isFinite(topBounds)) {\n withinTopClippingBounds = Math.round(itemY + h) > Math.round(topBounds);\n withinBottomClippingBounds =\n Math.round(itemY) < Math.round(topBounds + clipHeight);\n }\n\n return withinTopClippingBounds && withinBottomClippingBounds;\n }\n\n getTransitionXTargetValue() {\n return this.Items.transition('x').targetValue;\n }\n\n getTransitionYTargetValue() {\n return this.Items.transition('y').targetValue;\n }\n\n static _states() {\n return [\n class None extends this {},\n class Row extends this {\n _handleLeft() {\n return typeof this.onLeft === 'function'\n ? this.onLeft(this)\n : this.selectPrevious();\n }\n\n _handleRight() {\n return typeof this.onRight === 'function'\n ? this.onRight(this)\n : this.selectNext();\n }\n },\n\n class Column extends this {\n _handleUp() {\n return typeof this.onUp === 'function'\n ? this.onUp(this)\n : this.selectPrevious();\n }\n\n _handleDown() {\n return typeof this.onDown === 'function'\n ? this.onDown(this)\n : this.selectNext();\n }\n }\n ];\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n propertyTextStyle: {\n ...theme.typography.headline1,\n textColor: theme.color.textNeutral\n },\n valueTextStyle: {\n ...theme.typography.body1,\n textColor: theme.color.textNeutral\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport Base from '../Base';\nimport context from '../../globals/context/index';\nimport Column from '../Column';\nimport Row from '../Row';\nimport TextBox from '../TextBox';\nimport { getWidthByColumnSpan } from '../../utils';\nimport * as styles from './GridOverlay.styles';\n\nclass Spacer extends Base {\n static get __componentName() {\n return 'Spacer';\n }\n\n static _template() {\n return {\n Line: {\n h: Spacer._lineThickness,\n rect: true,\n mountY: 0.5,\n TickLeft: {\n ...Spacer._tick,\n x: Spacer._lineThickness * -1\n },\n TickRight: Spacer._tick\n }\n };\n }\n\n static get properties() {\n return ['lineColor'];\n }\n\n static get tags() {\n return ['Line', 'TickLeft', 'TickRight'];\n }\n\n static get _lineThickness() {\n return 3;\n }\n\n static get _tickLength() {\n return 25;\n }\n\n static get _tick() {\n return {\n rect: true,\n mountY: 0.5,\n w: Spacer._lineThickness,\n h: Spacer._tickLength,\n y: Spacer._lineThickness / 2\n };\n }\n\n _update() {\n this._Line.w = this.w;\n this._TickRight.x = this._Line.w;\n\n if (this.lineColor) {\n this._Line.color =\n this._TickLeft.color =\n this._TickRight.color =\n this.lineColor;\n }\n\n this.rotation = this.vertical ? Math.PI / 2 : 0;\n this.signal('spacerLoaded');\n }\n}\n\nexport default class GridOverlay extends Base {\n static get __componentName() {\n return 'GridOverlay';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static _template() {\n const textRow = {\n type: Row,\n autoResizeHeight: true,\n Items: {\n Property: {\n type: TextBox,\n signals: {\n textBoxChanged: '_update'\n }\n },\n Value: {\n type: TextBox,\n signals: {\n textBoxChanged: '_update'\n },\n centerInParent: true\n }\n }\n };\n\n return {\n Columns: {\n alpha: 0.001,\n type: Row\n },\n Margins: {\n alpha: 0.001,\n Horizontal: {\n Left: {\n type: Spacer,\n signals: {\n spacerLoaded: '_update'\n }\n },\n Right: {\n type: Spacer,\n signals: {\n spacerLoaded: '_update'\n }\n }\n },\n Vertical: {\n Top: { type: Spacer, vertical: true }\n }\n },\n Safe: {\n alpha: 0.001,\n Horizontal: {\n Left: {\n type: Spacer,\n signals: {\n spacerLoaded: '_update'\n }\n },\n Right: {\n type: Spacer,\n signals: {\n spacerLoaded: '_update'\n }\n }\n },\n Vertical: {\n Top: { type: Spacer, vertical: true },\n Bottom: { type: Spacer, vertical: true }\n }\n },\n Gutters: {\n alpha: 0.001,\n Horizontal: {\n type: Spacer,\n signals: {\n spacerLoaded: '_update'\n }\n }\n },\n TextPanel: {\n alpha: 0.001,\n type: Column,\n autoResizeHeight: true,\n Items: {\n ScreenW: textRow,\n ScreenH: textRow,\n ColumnCount: textRow,\n MarginX: textRow,\n MarginY: textRow,\n GutterX: textRow,\n GutterY: textRow,\n Safe: textRow\n }\n }\n };\n }\n\n static get properties() {\n return [\n 'showColumns',\n 'showMargins',\n 'showSafe',\n 'showGutters',\n 'showText'\n ];\n }\n\n static get tags() {\n return [\n 'Columns',\n 'Margins',\n { name: 'MarginHorizontal', path: 'Margins.Horizontal' },\n { name: 'MarginLeft', path: 'Margins.Horizontal.Left' },\n { name: 'MarginRight', path: 'Margins.Horizontal.Right' },\n { name: 'MarginVertical', path: 'Margins.Vertical' },\n { name: 'MarginTop', path: 'Margins.Vertical.Top' },\n 'Safe',\n { name: 'SafeHorizontal', path: 'Safe.Horizontal' },\n { name: 'SafeLeft', path: 'Safe.Horizontal.Left' },\n { name: 'SafeRight', path: 'Safe.Horizontal.Right' },\n { name: 'SafeVertical', path: 'Safe.Vertical' },\n { name: 'SafeTop', path: 'Safe.Vertical.Top' },\n { name: 'SafeBottom', path: 'Safe.Vertical.Bottom' },\n 'Gutters',\n { name: 'GutterHorizontal', path: 'Gutters.Horizontal' },\n 'TextPanel',\n { name: 'TextScreenW', path: 'TextPanel.Items.ScreenW' },\n { name: 'TextScreenH', path: 'TextPanel.Items.ScreenH' },\n { name: 'TextColumnCount', path: 'TextPanel.Items.ColumnCount' },\n { name: 'TextMarginX', path: 'TextPanel.Items.MarginX' },\n { name: 'TextMarginY', path: 'TextPanel.Items.MarginY' },\n { name: 'TextGutterX', path: 'TextPanel.Items.GutterX' },\n { name: 'TextGutterY', path: 'TextPanel.Items.GutterY' },\n { name: 'TextSafe', path: 'TextPanel.Items.Safe' }\n ];\n }\n\n _construct() {\n super._construct();\n this._showColumns =\n this._showMargins =\n this._showSafe =\n this._showGutters =\n this._showText =\n true;\n }\n\n _update() {\n this._updateGlobalThemeProps();\n this._updateMargins();\n this._updateSafe();\n this._updateColumns();\n this._updateGutters();\n this._updateText();\n this._updateVisibility();\n }\n\n _updateVisibility() {\n this._Columns.smooth = { alpha: Number(this.showColumns) };\n this._Margins.smooth = { alpha: Number(this.showMargins) };\n this._Safe.smooth = { alpha: Number(this.showSafe) };\n this._Gutters.smooth = { alpha: Number(this.showGutters) };\n this._TextPanel.smooth = { alpha: Number(this.showText) };\n }\n\n _updateGlobalThemeProps() {\n const { layout, color } = context.theme;\n const {\n screenW,\n screenH,\n columnCount,\n marginX,\n marginY,\n gutterX,\n gutterY,\n safe\n } = layout;\n\n this._screenW = screenW;\n this._screenH = screenH;\n this._columnCount = columnCount;\n this._marginX = marginX;\n this._marginY = marginY;\n this._safe = safe;\n this._gutterX = gutterX;\n this._gutterY = gutterY;\n\n this._columnColor = color.interactiveNeutralFocusSoft;\n this._marginColor = color.green;\n this._safeColor = color.red;\n this._gutterColor = color.blue;\n }\n\n _updateMargins() {\n const marginPatch = { lineColor: this._marginColor };\n\n // Horizontal\n const marginHorizontalPatch = { ...marginPatch, w: this._marginX };\n this._MarginHorizontal.y = this._screenH / 2;\n this._MarginLeft.patch(marginHorizontalPatch);\n this._MarginRight.patch(marginHorizontalPatch);\n this._MarginRight.x = this._screenW - this._marginX;\n\n // Vertical\n const marginVerticalPatch = { ...marginPatch, w: this._marginY };\n this._MarginVertical.x = this._marginX - marginVerticalPatch.w / 2;\n this._MarginTop.patch(marginVerticalPatch);\n this._MarginTop.patch(marginVerticalPatch);\n this._MarginTop.y = marginVerticalPatch.w / 2;\n }\n\n _updateSafe() {\n const safePatch = { lineColor: this._safeColor, w: this._safe };\n\n // Horizontal\n this._SafeHorizontal.y = this._screenH / 4;\n this._SafeLeft.patch(safePatch);\n this._SafeRight.patch(safePatch);\n this._SafeRight.x = this._screenW - this._safe;\n\n // Vertical\n this._SafeVertical.x = (this._screenW - safePatch.w) / 2;\n this._SafeVertical.y = safePatch.w / 2;\n this._SafeTop.patch(safePatch);\n this._SafeBottom.patch(safePatch);\n this._SafeBottom.y = this._screenH - this._safe;\n }\n\n _updateColumns() {\n this._Columns.patch({\n w: this._screenW,\n h: this._screenH,\n x: this._marginX,\n style: {\n itemSpacing: this._gutterX\n },\n items: this._columnRects\n });\n }\n\n get _columnRects() {\n return Array.apply(null, { length: this._columnCount }).map(() => ({\n rect: true,\n w: getWidthByColumnSpan(this.theme, 1),\n h: this._screenH,\n color: this._columnColor\n }));\n }\n\n _updateGutters() {\n const gutterPatch = { lineColor: this._gutterColor, w: this._gutterY };\n\n // Horizontal\n this._GutterHorizontal.patch({\n ...gutterPatch,\n x: (this._screenW - gutterPatch.w) / 2,\n y: this._screenH / 4\n });\n }\n\n _updatePropertyTextStyle(textPanelName, color) {\n // clone the object so as not to mutate it\n const style = { textStyle: { ...this.style.propertyTextStyle } };\n if (color) {\n style.textStyle.textColor = color;\n }\n textPanelName.Items.tag('Property').style = style;\n }\n\n _updateValueTextStyle(textPanelName) {\n textPanelName.Items.tag('Value').style = {\n textStyle: this.style.valueTextStyle\n };\n }\n\n _updateText() {\n const prop = 'Property';\n const val = 'Value';\n\n this._TextPanel.x =\n this._screenW - this._marginX - getWidthByColumnSpan(this.theme, 3);\n this._TextPanel.y = this._safe;\n\n this._TextScreenW.Items.tag(prop).content = 'Screen Width';\n this._TextScreenW.Items.tag(val).content = `${this._screenW}px`;\n this._updatePropertyTextStyle(this._TextScreenW);\n this._updateValueTextStyle(this._TextScreenW);\n\n this._TextScreenH.Items.tag(prop).content = 'Screen Height';\n this._TextScreenH.Items.tag(val).content = `${this._screenH}px`;\n this._updatePropertyTextStyle(this._TextScreenH);\n this._updateValueTextStyle(this._TextScreenH);\n\n this._TextColumnCount.Items.tag(prop).content = 'Columns';\n this._TextColumnCount.Items.tag(val).content = `${\n this._columnCount\n }, ${Math.round(getWidthByColumnSpan(this.theme, 1))}px each`;\n this._updatePropertyTextStyle(this._TextColumnCount);\n this._updateValueTextStyle(this._TextColumnCount);\n\n this._TextMarginX.Items.tag(prop).content = 'Margin-X';\n this._TextMarginX.Items.tag(val).content = `${this._marginX}px`;\n this._updatePropertyTextStyle(this._TextMarginX, this._marginColor);\n this._updateValueTextStyle(this._TextMarginX);\n\n this._TextMarginY.Items.tag(prop).content = 'Margin-Y';\n this._TextMarginY.Items.tag(val).content = `${this._marginY}px`;\n this._updatePropertyTextStyle(this._TextMarginY, this._marginColor);\n this._updateValueTextStyle(this._TextMarginY);\n\n this._TextGutterX.Items.tag(prop).content = 'Gutter-X';\n this._TextGutterX.Items.tag(val).content = `${this._gutterX}px`;\n this._updatePropertyTextStyle(this._TextGutterX, this._gutterColor);\n this._updateValueTextStyle(this._TextGutterX);\n\n this._TextGutterY.Items.tag(prop).content = 'Gutter-Y';\n this._TextGutterY.Items.tag(val).content = `${this._gutterY}px`;\n this._updatePropertyTextStyle(this._TextGutterY, this._gutterColor);\n this._updateValueTextStyle(this._TextGutterY);\n\n this._TextSafe.Items.tag(prop).content = 'Safe';\n this._TextSafe.Items.tag(val).content = `${this._safe}px`;\n this._updatePropertyTextStyle(this._TextSafe, this._safeColor);\n this._updateValueTextStyle(this._TextSafe);\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const tone = theme => ({\n neutral: { color: theme.color.fillNeutral },\n inverse: { color: theme.color.fillInverse },\n brand: { color: theme.color.fillBrand }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport Base from '../Base';\nimport * as styles from './Icon.styles';\nimport context from '../../globals/context/index';\nimport { getValidColor } from '../../utils';\nimport CustomImageTexture from '../../textures/CustomImageTexture';\n\n/**\n * Icon component that displays different types of icons, supporting SVGs and images.\n * @extends Base\n */\nexport default class Icon extends Base {\n /**\n * Returns the name of the component for theming support.\n * @returns {string} The name of the component.\n */\n static get __componentName() {\n return 'Icon';\n }\n\n /**\n * Returns the theme styles for the Icon component.\n * @returns {object} The theme styles object.\n */\n static get __themeStyle() {\n return styles;\n }\n\n /**\n * Returns the list of properties that can be set on the Icon component. Used by withUpdates\n * @returns {Array} An array of property names.\n */\n static get properties() {\n return ['icon', 'fixed', 'color'];\n }\n\n _init() {\n /**\n * Event listener for the 'txLoaded' event to handle icon texture loading.\n *\n * @listens 'txLoaded'\n */\n this.on('txLoaded', () => {\n if (!this.fixed) {\n this._notify.bind(this)(); // Notify parent component of the item change if not fixed.\n }\n });\n\n /**\n * Event listener for the 'txError' event to handle icon texture loading errors.\n *\n * @listens 'txError'\n * @param {Error} error - The error object containing information about the loading error.\n */\n this.on('txError', this._handleTxtError.bind(this));\n }\n\n /**\n * Returns the color to be used for the icon.\n *\n * @private\n * @returns {string} The color value.\n */\n _getColor() {\n return this._color || this.style.color;\n }\n\n /**\n * Notifies the parent and ancestors of item changes in the Icon component.\n *\n * @private\n */\n _notify() {\n this.w = this.finalW;\n this.h = this.finalH;\n this.signal('itemChanged', this); // Emit 'itemChanged' signal to notify parent.\n this.fireAncestors('$itemChanged'); // Emit '$itemChanged' signal to notify ancestors.\n }\n\n /**\n * Handles the error when loading the icon texture.\n *\n * @private\n * @param {Error} error - The error object containing information about the loading error.\n */\n _handleTxtError() {\n context.error(`Unable to load icon ${this._icon}`);\n this._icon = null;\n this.texture = null;\n }\n\n /**\n * Updates the Icon component based on the provided icon.\n *\n * @private\n */\n _update() {\n if (!this._icon) {\n this.texture = null; // If there's no icon, clear the texture.\n return;\n }\n this.patch(this._iconPatch); // Apply the icon patch.\n }\n\n /**\n * Generates the patch based on the icon type (SVG, image, etc.) and other properties.\n *\n * @private\n * @returns {object} The patch object to update the Icon component.\n */\n get _iconPatch() {\n const [isSvgTag, isSvgURI] = [/^$/, /\\.svg$/].map(regex =>\n RegExp.prototype.test.bind(regex)\n );\n let texture;\n const svgTag = isSvgTag(this.icon);\n const svgURI = isSvgURI(this.icon);\n\n if (svgTag) {\n texture = lng.Tools.getSvgTexture(\n `data:image/svg+xml,${encodeURIComponent(this.icon)}`,\n this.w,\n this.h\n );\n } else if (svgURI) {\n texture = lng.Tools.getSvgTexture(this.icon, this.w, this.h);\n } else {\n texture = {\n type: CustomImageTexture,\n w: this.w,\n h: this.h,\n src: this.icon\n };\n }\n\n const color = getValidColor(this._color || this.style.color);\n const shader =\n this.radius || this.style.radius\n ? {\n radius: this.radius || this.style.radius,\n type: lng.shaders.RoundedRectangle\n }\n : undefined;\n\n return {\n texture,\n shader,\n ...(color\n ? { colorUl: color, colorUr: color, colorBl: color, colorBr: color }\n : {})\n };\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n textY: 0,\n iconWidth: theme.spacer.xxl + theme.spacer.xs,\n iconHeight: theme.spacer.xxl + theme.spacer.xs,\n contentSpacing: theme.spacer.md,\n marginBottom: 0,\n strikethroughRatio: 0.08,\n strikethroughColor: theme.color.textNeutral,\n textStyle: {\n ...theme.typography.body1\n },\n maxLines: 1,\n justify: 'flex-start'\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\nimport lng from '@lightningjs/core';\nimport Icon from '../Icon';\nimport Badge from '../Badge';\nimport { parseInlineContent, flatten, measureTextWidth } from '../../utils';\nimport Base from '../Base';\nimport * as styles from './InlineContent.styles';\n\nconst isText = item => typeof item === 'string' || !!item.text;\nconst isIcon = item => !!item.icon;\nconst isBadge = item => !!item.badge;\n\nexport default class InlineContent extends Base {\n static get properties() {\n return [\n 'content',\n 'contentProperties',\n 'badgeY',\n 'badgeProperties',\n 'justify',\n 'contentWrap',\n 'customStyleMappings',\n 'maxLines',\n 'maxLinesSuffix'\n ];\n }\n\n static get __componentName() {\n return 'InlineContent';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get aliasStyles() {\n return [\n { prev: 'iconH', curr: 'iconHeight' },\n { prev: 'iconW', curr: 'iconWidth' }\n ];\n }\n\n _construct() {\n super._construct();\n // use the same default value as Lightning's Text Texture default\n this._maxLinesSuffix = '..';\n }\n\n _update() {\n this._updateContent();\n this._waitForComponentLoad();\n }\n\n _updateContent() {\n this.childList.clear();\n\n // if wrapping with max lines, hide content until it has rerendered with maxLines and truncation calculated\n if (this._shouldTruncate) {\n this.alpha = 0.001;\n }\n if (this._parsedContent && this._parsedContent.length) {\n this.patch({\n flex: {\n direction: 'row',\n wrap: !!this.contentWrap,\n justifyContent:\n this.justify != undefined ? this.justify : this.style.justify\n }\n });\n\n this._parsedContent.forEach((item, index) => {\n const isLast = index === this._parsedContent.length - 1;\n const base = {\n flexItem: {\n ...this.contentProperties,\n marginBottom: isLast ? 0 : this._marginBottom,\n marginRight: isLast\n ? 0\n : this.contentProperties.marginRight || this.style.contentSpacing\n }\n };\n\n // text not separated by icons/badges are grouped together\n if (isText(item)) {\n const nextItem = this._parsedContent[index + 1];\n if (\n (nextItem && isText(nextItem)) ||\n (this.contentWrap &&\n nextItem &&\n nextItem.newline &&\n this._parsedContent[index + 2] &&\n isText(this._parsedContent[index + 2]))\n ) {\n base.flexItem.marginRight = 0;\n }\n this.childList.a(this._createText(base, item));\n } else if (isIcon(item)) {\n this.childList.a(this._createIcon(base, item));\n } else if (isBadge(item)) {\n this.childList.a(this._createBadge(base, item.badge));\n } else if (item.newline && this.contentWrap) {\n this.childList.a({ h: 0, w: this.w });\n }\n });\n }\n }\n\n _waitForComponentLoad() {\n if (this.children.length) {\n Promise.all(\n this.children.map(\n child =>\n new Promise(resolve => {\n // resolve immediately for new line elements since they do not render a texture\n if (child.h === 0 && child.w === this.w) {\n resolve();\n } else {\n child.on('txLoaded', resolve);\n }\n })\n )\n ).finally(() => this._contentLoaded());\n } else {\n this.h = 0;\n this._contentLoaded();\n }\n }\n\n _notifyAncestors() {\n this.fireAncestors('$loadedInlineContent', this);\n this.signal('loadedInlineContent', this.finalW, this.multiLineHeight);\n }\n\n _contentLoaded() {\n // TODO: FIX --figure out an alternative to using setTimeout\n // perhaps have to wait until Lightning Flexboxes can emit a signal (like textures) when they've finished loading\n if (this.children.length) {\n setTimeout(() => {\n this.multiLineHeight = this.finalH;\n if (\n this.flex &&\n this.flex._layout &&\n this.flex._layout._lineLayouter &&\n this.flex._layout._lineLayouter._lines\n ) {\n let totalHeight = 0;\n this.flex._layout._lineLayouter._lines.forEach(line => {\n totalHeight += Object.entries(line.items)\n .slice(line.startIndex, line.endIndex + 1)\n .sort((a, b) => {\n return b[1].h - a[1].h;\n })[0][1].h;\n });\n this.multiLineHeight = totalHeight;\n\n if (this._shouldTruncate) {\n this._renderMaxLines();\n }\n\n this._notifyAncestors();\n } else {\n this._contentLoaded();\n }\n }, 10);\n } else {\n this._notifyAncestors();\n }\n }\n\n _renderMaxLines() {\n const childrenDimensions = this._calcChildrenDimensions();\n\n this.childList.clear();\n let renderedLastElement = false;\n childrenDimensions.forEach((child, index) => {\n if (renderedLastElement) {\n return;\n }\n\n const nextChild = childrenDimensions[index + 1];\n\n if (!nextChild) {\n this.childList.add(child.component);\n return;\n }\n\n const isOnLastLine = child.line === this.maxLines;\n\n const isLastBeforeMaxLines =\n isOnLastLine && nextChild.line > this.maxLines;\n\n const canRenderLastWithSuffix =\n isLastBeforeMaxLines && child.hasSpaceForSuffix;\n\n const isLastWithSpaceForSuffix =\n isOnLastLine && child.hasSpaceForSuffix && !nextChild.hasSpaceForSuffix;\n\n /**\n * This is the last element to render, with a suffix, if the element is:\n * - the last element to render (and has not reached the maxLines yet)\n * - the last element that fits within maxLines, including with the width of the maxLinesSuffix appended to it\n */\n const isLast =\n !nextChild || canRenderLastWithSuffix || isLastWithSpaceForSuffix;\n\n if (child.line <= this.maxLines) {\n if (isLast && index !== childrenDimensions.length - 1) {\n this.childList.add(this._addSuffix(child));\n renderedLastElement = true;\n } else {\n this.childList.add(child.component);\n }\n }\n });\n this.alpha = 1;\n }\n\n _calcChildrenDimensions() {\n const suffixW = measureTextWidth({\n ...this.style.textStyle,\n text: this.maxLinesSuffix\n });\n let contentEndX = 0;\n let line = 1;\n\n return this.children.reduce((acc, child) => {\n const component = child;\n let type, content, w;\n const isNewLineElement = child.w == this.w && child.h === 0;\n\n if (isNewLineElement) {\n line++;\n contentEndX = 0;\n const data = {\n type: 'linebreak',\n component,\n content,\n line,\n hasSpaceForSuffix: true\n };\n\n acc.push(data);\n return acc;\n }\n\n if (isText(child)) {\n type = 'text';\n content = child.text.text;\n w = child.texture.getRenderWidth();\n } else if (isIcon(child)) {\n type = 'icon';\n w = child.w;\n } else if (child.constructor.__componentName === 'Badge') {\n type = 'badge';\n w = child.w;\n }\n\n contentEndX += w;\n contentEndX += child.flexItem.marginRight;\n\n if (Math.ceil(contentEndX) >= this.w) {\n line++;\n contentEndX = w;\n }\n\n const hasSpaceForSuffix = Math.ceil(contentEndX) + suffixW <= this.w;\n\n const data = {\n type,\n component,\n content,\n line,\n hasSpaceForSuffix\n };\n\n acc.push(data);\n return acc;\n }, []);\n }\n\n _addSuffix({ type, component, content }) {\n const negatedRightMargin = component.flexItem.marginRight * -1;\n let suffix;\n if (type === 'text') {\n // We need to grab the current styling of the text to ensure that any\n // custom styling is applied to the suffix\n const { fontFace, fontSize, fontStyle, lineHeight, verticalAlign } =\n component.text;\n suffix = this._createText(\n { flexItem: this.contentProperties },\n {\n text: `${content.trim()}${this.maxLinesSuffix}`,\n style: {\n fontFace,\n fontSize,\n fontStyle,\n lineHeight,\n verticalAlign\n }\n }\n );\n } else {\n this.childList.add(component);\n suffix = this._createText(\n {\n flexItem: {\n ...this.contentProperties,\n marginLeft: negatedRightMargin\n }\n },\n this.maxLinesSuffix\n );\n }\n return suffix;\n }\n\n _createIcon(base, iconProps) {\n const y =\n (this.textHeight > this.style.textStyle.lineHeight\n ? this.textHeight\n : this.style.textStyle.lineHeight) - this.style.iconHeight;\n return {\n ...base,\n type: Icon,\n y: y,\n w: this.style.iconWidth,\n h: this.style.iconHeight,\n signals: {\n itemChanged: '_updateIconPosition'\n },\n ...iconProps\n };\n }\n\n _createText(base, text) {\n const textOverrideStyles =\n typeof text.style === 'string'\n ? this.customStyleMappings[text.style]\n : text.style;\n const textComponent = {\n ...base,\n y: this.textY !== undefined ? this.textY : this.style.textY,\n h:\n textOverrideStyles?.lineHeight ||\n textOverrideStyles?.fontSize ||\n this.textHeight,\n text: {\n ...this.style.textStyle,\n ...textOverrideStyles,\n text: text.text || text\n }\n };\n if (textOverrideStyles?.textDecoration === 'line-through') {\n const textWidth = measureTextWidth({\n ...this.style.textStyle,\n ...textOverrideStyles,\n text: text.text || text\n });\n const strikethroughLine = {\n rect: true,\n w: textWidth,\n color:\n this.style.strikethroughColor ||\n textOverrideStyles?.textColor ||\n this.style.textStyle.textColor,\n h: textComponent.h * this.style.strikethroughRatio,\n y: textComponent.h / 2,\n mountY: 1\n };\n return {\n type: lng.Component,\n w: textWidth + textComponent.flexItem.marginRight,\n h: textComponent.h,\n children: [{ ...textComponent }, { ...strikethroughLine }]\n };\n }\n return textComponent;\n }\n\n _createBadge(base, badge) {\n return {\n ...base,\n y: this.badgeY || 0,\n ...this.badgeProperties,\n type: Badge,\n title: badge,\n signals: {\n loadedBadge: '_loadedBadge'\n }\n };\n }\n\n _updateIconPosition(icon) {\n icon.y = this.style.textStyle.lineHeight - icon.h;\n }\n\n _loadedBadge(badge) {\n if (this.badgeY === undefined) {\n badge.y = this.style.textStyle.lineHeight - badge.h;\n }\n }\n\n /**\n * RegEx Lookbehinds do not work in WPE Browser, but we want the space\n * at the end of the previous string to prevent weird wrapping,\n * so we need to separate on spaces, then re-attach to the previous string\n *\n * @param { array } parsedContent\n *\n * @return { array }\n */\n _formatSpaces(parsedContent) {\n // retain the white space next to the appropriate word, then filter by the empty string,\n // otherwise all whitespace is stripped and the flexItem's marginRight adds its own space\n // which can be a different space size than the text would apply between words\n const whitespace = /(.+?\\s+)/;\n return flatten(\n (parsedContent || []).reduce((acc, item) => {\n let parsed = item;\n if (isText(item)) {\n if (typeof item === 'object') {\n const formattedWords = item.text\n .split(whitespace) // split after whitespace character (which adds empty strings)\n .map(word => word && { ...item, text: word }); // check for empty string before adding\n acc.push(...formattedWords);\n return acc;\n }\n parsed = item.split(whitespace);\n }\n acc.push(parsed);\n return acc;\n }, [])\n )\n .map((item, index, arr) => {\n if (item === ' ') return false;\n if (arr[index + 1] === ' ') return item + ' ';\n return item;\n })\n .filter(Boolean);\n }\n\n _setContent(content) {\n if (content !== this._content) {\n this._content = content;\n let parsedContent = this._content;\n if (content && !Array.isArray(content)) {\n parsedContent = parseInlineContent(content);\n }\n\n this._parsedContent = this._formatSpaces(parsedContent);\n }\n return content;\n }\n\n _setBadgeProperties(badgeProperties) {\n if (typeof badgeProperties === 'object') {\n return badgeProperties;\n }\n }\n\n _getBadgeProperties() {\n return this._badgeProperties || {};\n }\n\n _setContentProperties(contentProperties) {\n if (typeof contentProperties === 'object') {\n return contentProperties;\n }\n }\n\n _getContentProperties() {\n return this._contentProperties || {};\n }\n\n _setCustomStyleMappings(customStyleMappings) {\n if (typeof customStyleMappings === 'object') {\n return customStyleMappings;\n }\n }\n\n _getCustomStyleMappings() {\n return this._customStyleMappings || {};\n }\n\n _setMaxLines(maxLines) {\n // only accept positive numbers\n // round down any decimals to whole numbers\n return maxLines >= 1 ? Math.floor(maxLines) : 0;\n }\n\n get textHeight() {\n return this.style.textStyle.lineHeight || this.style.textStyle.fontSize;\n }\n\n get _marginBottom() {\n if (this.contentProperties.marginBottom !== undefined) {\n return this.contentProperties.marginBottom;\n }\n if (this.style.marginBottom) {\n return this.style.marginBottom;\n }\n return 0;\n }\n\n get _shouldTruncate() {\n return this.contentWrap && this.maxLines;\n }\n\n set announce(announce) {\n super.announce = announce;\n }\n\n get announce() {\n if (this._announce) {\n return this._announce;\n }\n const announce =\n this._parsedContent &&\n this._parsedContent.reduce((announce, item) => {\n if (typeof item === 'string') {\n announce += item;\n } else if (item.announce) {\n announce += item.announce;\n } else if (item.text) {\n announce += item.text;\n if (item.style?.textDecoration === 'line-through') {\n announce += 'strikethrough';\n }\n } else if (item.title) {\n announce += item.title;\n } else if (item.badge) {\n announce += item.badge;\n }\n return announce + ' ';\n }, '');\n return announce ? announce.replace(/\\s+(?=\\s)|\\s$/g, '') : '';\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n fadeWidth: 100,\n offset: theme.spacer.xxl,\n shouldSmooth: false,\n textStyle: theme.typography.body1\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport * as styles from './Marquee.styles';\nimport FadeShader from '../../shaders/FadeShader';\nimport utils from '../../utils';\nimport Base from '../Base';\n\nexport default class Marquee extends Base {\n static _template() {\n return {\n ContentClipper: {\n boundsMargin: [], // overwrite boundsMargin so text won't de-render if moved offscreen\n ContentBox: {\n Content: {},\n ContentLoopTexture: {}\n }\n }\n };\n }\n\n static get __componentName() {\n return 'Marquee';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get tags() {\n return [\n 'ContentClipper',\n {\n name: 'ContentBox',\n path: 'ContentClipper.ContentBox'\n },\n {\n name: 'Content',\n path: 'ContentClipper.ContentBox.Content'\n },\n {\n name: 'ContentLoopTexture',\n path: 'ContentClipper.ContentBox.ContentLoopTexture'\n }\n ];\n }\n\n static get properties() {\n return [\n 'autoStart',\n 'title',\n 'contentTexture',\n 'color',\n 'centerAlign',\n 'delay',\n 'repeat',\n 'overrideLoopX'\n ];\n }\n\n static get aliasStyles() {\n return [{ prev: 'fadeW', curr: 'fadeWidth' }];\n }\n\n _construct() {\n super._construct();\n this._scrolling = false;\n this._autoStart = false;\n this._centerAlign = false;\n }\n\n _init() {\n this._Content.on('txLoaded', this._updateContentTexture.bind(this));\n super._init();\n }\n\n _updateContentTexture() {\n const restartScrolling = this._restartScrolling;\n this.stopScrolling();\n\n if (!this._currentTexture.h) {\n this._ContentClipper.h =\n this._currentTexture.text && this._currentTexture.text.lineHeight\n ? this._currentTexture.text.lineHeight\n : this._Content.finalH;\n }\n // in case the metadata width gets larger on focus and the text goes from being clipped to not\n if (this._shouldClip) {\n this._updateShader();\n } else {\n this._ContentClipper.shader = null;\n this._positionTexture();\n }\n\n restartScrolling && this.startScrolling();\n this.signal('marqueeContentLoaded');\n }\n\n _update() {\n this._updateColor();\n this._updateTexture();\n this._updateShader();\n this._restartScrolling && this.startScrolling();\n }\n\n get _restartScrolling() {\n return this.autoStart || this._scrolling || this._shouldTryScrolling;\n }\n\n _updateColor() {\n if (this.color) {\n this._Content.smooth = { color: utils.getValidColor(this.color) };\n }\n }\n\n get _currentTexture() {\n return this._Content.text || this._Content.texture || {};\n }\n\n _updateTexture() {\n const content = { rtt: true };\n if (this.contentTexture) {\n content.texture = this.contentTexture;\n } else if (this.title) {\n content.text = {\n ...this.style.textStyle,\n ...this.title,\n text: this.textContent\n };\n }\n\n this.patch({\n ContentClipper: {\n w: this.w + 14,\n ContentBox: {\n Content: content,\n ContentLoopTexture: {}\n }\n }\n });\n this.signal('marqueeContentLoaded'); // TODO: Check if this extra signal is needed since the txLoaded event should emit it already?\n }\n\n _updateShader() {\n this._ContentClipper.patch({\n w: this.w > 0 ? this.w + this.style.fadeWidth / 2 : 0,\n shader: {\n type: FadeShader,\n positionLeft: 0,\n positionRight: this.style.fadeWidth\n },\n rtt: true\n });\n }\n\n _updateAnimation() {\n this._scrollAnimation && this._scrollAnimation.stopNow();\n this._scrollAnimation = this.animation({\n duration: this._loopWidth / 50,\n delay: isNaN(this.delay) ? 1.5 : this.delay,\n repeat: isNaN(this.repeat) ? -1 : this.repeat,\n actions: [\n {\n t: 'ContentBox',\n p: 'x',\n v: {\n sm: 0,\n 0: { v: 0 },\n 0.5: { v: -(this._loopWidth + this.style.offset) }\n }\n },\n {\n t: 'ContentClipper',\n p: 'shader.positionLeft',\n v: {\n sm: 0,\n 0: { v: 0 },\n 0.1: { v: this.style.fadeWidth },\n 0.4: { v: this.style.fadeWidth },\n 0.5: { v: 0 }\n }\n }\n ]\n });\n }\n\n _positionTexture() {\n const x = this._shouldCenter() ? (this.w - this._textRenderedW) / 2 : 0;\n if (this.style.shouldSmooth) {\n this._ContentBox.smooth = { x };\n } else {\n this._ContentBox.x = x;\n }\n }\n\n startScrolling() {\n this._Content.off('txLoaded', this.startScrolling.bind(this));\n\n this._shouldTryScrolling = true;\n if (this._textRenderedW === 0) {\n // can switch to .once in LUI5.0 requiring higher Lightning Core version\n this._Content.on('txLoaded', this.startScrolling.bind(this));\n }\n if (this._shouldClip) {\n this._scrolling = true;\n this._ContentLoopTexture.x = this._loopWidth + this.style.offset;\n this._ContentLoopTexture.texture = this._Content.getTexture();\n this._updateAnimation();\n this._scrollAnimation.start();\n } else {\n this._scrolling = false;\n }\n }\n\n stopScrolling() {\n this._shouldTryScrolling = false;\n this._scrolling = false;\n if (this._scrollAnimation) {\n this._scrollAnimation.stopNow();\n this._ContentLoopTexture.texture = null;\n }\n }\n\n get _shouldClip() {\n // using fadeWidth / 4 so that if something like the last character is slightly\n // faded out but still visible, we don't unnecessarily scroll\n return this._textRenderedW > this.w - this.style.fadeWidth / 4;\n }\n\n _shouldCenter() {\n return (\n this._centerAlign ||\n (this._Content.text && this._Content.text.textAlign === 'center')\n );\n }\n\n _setAutoStart(autoStart) {\n // if the component is changed from autoStarting to not,\n // cancel the current scrolling behavior,\n // otherwise the component can continue to scroll from its previous state\n if (this.autoStart && !autoStart) {\n // Calling this ensures that the animation is stopped, and the texture\n // is properly positioned if it needs to be centered. Otherwise, if it\n // is un-clipped text, it is positioned at 0.\n this._updateContentTexture();\n }\n return autoStart;\n }\n\n _setCenterAlign(center) {\n // The Content texture needs to be updated if centerAlign\n // is changed, but we need the new value first.\n this._centerAlign = center;\n this._updateContentTexture();\n return center;\n }\n\n get textContent() {\n return this.title?.text ?? this.title ?? '';\n }\n\n get _loopWidth() {\n return this.overrideLoopX || this._textRenderedW;\n }\n\n get _textRenderedW() {\n return this._Content.renderWidth;\n }\n\n set announce(announce) {\n super.announce = announce;\n }\n\n get announce() {\n return this._announce || (this.title && this.title.text);\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n alwaysScroll: false,\n itemSpacing: theme.layout.gutterX,\n itemTransition: theme.animation.utility,\n neverScroll: false,\n scrollIndex: 0\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport FocusManager from '../FocusManager';\nimport { getX, getY, getH, getW, max, watchForUpdates } from '../../utils';\nimport * as styles from './NavigationManager.styles';\n\nconst directionPropNames = {\n row: {\n axis: 'x',\n crossAxis: 'y',\n lengthDimension: 'w',\n crossDimension: 'h',\n innerLengthDimension: 'innerW',\n innerCrossDimension: 'innerH'\n },\n column: {\n axis: 'y',\n crossAxis: 'x',\n lengthDimension: 'h',\n crossDimension: 'w',\n innerLengthDimension: 'innerH',\n innerCrossDimension: 'innerW'\n }\n};\n\nexport default class NavigationManager extends FocusManager {\n static get __componentName() {\n return 'NavigationManager';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get properties() {\n return [\n ...super.properties,\n 'alwaysScroll',\n 'neverScroll',\n 'scrollIndex',\n 'autoResizeWidth',\n 'autoResizeHeight',\n 'lazyUpCount',\n 'lazyUpCountBuffer',\n 'waitForDimensions'\n ];\n }\n\n _construct() {\n super._construct();\n this.shouldSmooth = false;\n this._lazyUpCountBuffer = 2;\n }\n\n _init() {\n const { lengthDimension, axis } = this._directionPropNames;\n\n if (!this[lengthDimension]) {\n this._initComponentSize();\n }\n\n this.Items.transition(axis).on(\n 'finish',\n this._transitionListener.bind(this)\n );\n\n super._init();\n }\n\n _initComponentSize() {\n const { lengthDimension } = this._directionPropNames;\n if (\n this?.parent.parent instanceof NavigationManager &&\n this?.parent.parent[lengthDimension]\n ) {\n // component is a child item in a NavigationManager (or subclass of NavigationManager)\n this[lengthDimension] = this.parent.parent[lengthDimension];\n } else {\n // find closest parent in render tree with lengthDimension property set(w for Row, h for Column)\n let parent = this.parent;\n while (parent && !parent[lengthDimension]) {\n parent = parent.parent;\n }\n this[lengthDimension] =\n (parent && parent[lengthDimension]) ||\n this.stage.h / this.stage.getRenderPrecision();\n }\n }\n\n _update() {\n this._updateLayout();\n }\n\n _updateLayout() {\n const { lengthDimension, crossDimension, crossAxis, innerCrossDimension } =\n this._directionPropNames;\n let nextPosition = 0;\n let maxCrossDimensionSize = 0;\n let maxInnerCrossDimensionSize = 0;\n const childrenToCenter = [];\n const loadingChildren = [];\n\n for (let i = 0; i < this.Items.children.length; i++) {\n const child = this.Items.children[i];\n\n if (child.requestEarlyUpdate) {\n const updateDidRun = child.requestEarlyUpdate();\n if (!updateDidRun && (child.w === 0 || child.h === 0)) {\n child._updateLayout && child._updateLayout();\n }\n }\n const childCrossDimensionSize = this._calcCrossDimensionSize(child);\n\n if (\n this.waitForDimensions &&\n (!childCrossDimensionSize || !child[lengthDimension])\n ) {\n loadingChildren.push(child);\n }\n\n maxCrossDimensionSize = max(\n maxCrossDimensionSize,\n childCrossDimensionSize\n );\n maxInnerCrossDimensionSize = max(\n maxInnerCrossDimensionSize,\n child[innerCrossDimension] || 0\n );\n\n this.updatePositionOnAxis(child, nextPosition);\n\n nextPosition += child[lengthDimension];\n\n if (i < this.Items.children.length - 1) {\n const extraItemSpacing = child.extraItemSpacing || 0;\n nextPosition += this.style.itemSpacing + extraItemSpacing;\n }\n\n if (child.centerInParent) {\n // if the child is another NavigationManager, check the cross dimension size of the item container\n const childCrossDimensionSize =\n (child.Items && child.Items[crossDimension]) || child[crossDimension];\n // only center the child if it is within the bounds of this NavigationManager\n // center based off innerCrossDimension in cases where elements with\n // innerCrossDimension exist in Items (ex. Tile with metadata)\n if (\n childCrossDimensionSize < this[crossDimension] ||\n !this.Items[innerCrossDimension]\n ) {\n childrenToCenter.push({ childIdx: i, childCrossDimensionSize });\n }\n } else {\n child[crossAxis] = 0;\n }\n }\n\n const itemChanged =\n this.Items[crossDimension] !== maxCrossDimensionSize ||\n this.Items[lengthDimension] !== nextPosition;\n\n if (this.waitForDimensions) {\n this.Items.alpha = loadingChildren.length ? 0.001 : 1;\n }\n\n this.Items.patch({\n [crossDimension]: maxCrossDimensionSize,\n [innerCrossDimension]:\n maxInnerCrossDimensionSize || maxCrossDimensionSize,\n [lengthDimension]: nextPosition + (this._totalAddedWidth || 0)\n });\n\n this._autoResize();\n this._centerItemsInParent(childrenToCenter);\n this._updateLastScrollIndex();\n\n if (itemChanged) {\n this._performRender();\n this.fireAncestors('$itemChanged');\n }\n }\n\n _centerItemsInParent(items) {\n const { crossDimension, crossAxis, innerCrossDimension } =\n this._directionPropNames;\n if (items.length) {\n const sizes = [\n this.Items[crossDimension],\n this.Items[innerCrossDimension]\n ];\n // If a subclass of NavigationManager only contains a row or column of items:\n // then also consider the h or w of that component when centering items .\n // Subclasses that add other components outside of the Items array (ex. TitleRow)\n // likely increase the h or w of the component and centering should be with respect to only the Items element.\n if (this.children.length === 1) {\n sizes.push(this[crossDimension]);\n }\n\n const crossDimensionSize = Math.max(...sizes);\n items.forEach(({ childIdx, childCrossDimensionSize }) => {\n this.Items.children[childIdx][crossAxis] =\n (crossDimensionSize - childCrossDimensionSize) / 2;\n });\n }\n }\n\n _autoResize() {\n if (this.autoResizeWidth) {\n this.w = this.Items.w;\n }\n if (this.autoResizeHeight) {\n this.h = this.Items.h;\n }\n }\n\n _updateLastScrollIndex() {\n const { axis, lengthDimension } = this._directionPropNames;\n if (this.alwaysScroll) {\n this._lastScrollIndex = this.Items.children.length - 1;\n return;\n }\n\n const itemPos = this._isRow ? this.itemPosX : this.itemPosY;\n const scrollOffset =\n (this.Items.children[this.scrollIndex] || {\n [axis]: 0\n })[axis] + itemPos;\n const lastChild = this.Items.childList.last;\n const endOfLastChild = lastChild\n ? this._calcAxisPosition(lastChild) + lastChild[lengthDimension]\n : 0;\n if (endOfLastChild > this[lengthDimension]) {\n let lastScrollIndex;\n for (let i = this.Items.children.length - 1; i >= 0; i--) {\n const childPosition = this._calcAxisPosition(this.Items.children[i]);\n const canScrollToChild =\n childPosition + this[lengthDimension] - scrollOffset > endOfLastChild;\n if (canScrollToChild) {\n lastScrollIndex = i;\n } else {\n break;\n }\n }\n this._lastScrollIndex = lastScrollIndex;\n return;\n }\n\n // TODO: This conditional originated in Column (prior to NavigationManager refactor).\n // What scenario would this ever be true?\n // Add a comment to describe it when that is identified.\n if (this._lastScrollIndex > this.items.length) {\n this._lastScrollIndex = this.items.length - 1;\n }\n }\n\n _calcCrossDimensionSize(comp) {\n if (this._isRow) {\n return getH(comp);\n }\n\n if (this._isColumn) {\n return getW(comp);\n }\n }\n\n _calcAxisPosition(comp) {\n if (this._isRow) {\n return getX(comp);\n }\n\n if (this._isColumn) {\n return getY(comp);\n }\n }\n\n _transitionListener() {\n this.shouldSmooth = false;\n this.transitionDone();\n }\n\n _withAfterUpdate(element) {\n return watchForUpdates({\n element,\n watchProps: [\n this._directionPropNames.crossAxis,\n 'w',\n 'h',\n 'innerW',\n 'innerH'\n ],\n sideEffect: this.queueRequestUpdate.bind(this)\n });\n }\n\n // can be overwritten\n _performRender() {}\n\n _appendItem(item, shouldSmoothOverride) {\n this.shouldSmooth = shouldSmoothOverride ?? false;\n item.parentFocus = this.hasFocus();\n item = this.Items.childList.a(item);\n\n const { crossDimension } = this._directionPropNames;\n // do not set a h/w if the item already has one defined\n // as this will trigger withThemeStyles's dimension \"setByUser\" flag\n if (!item[crossDimension]) {\n const itemCrossSize = this._isRow ? this.renderHeight : this.renderWidth;\n item[crossDimension] = item[crossDimension] || itemCrossSize;\n }\n\n item = this._withAfterUpdate(item);\n return item;\n }\n\n _appendLazyItem(item) {\n const { lengthDimension, axis } = this._directionPropNames;\n const lastChild = this._Items.children[this.items.length - 1];\n const nextPosition =\n lastChild[lengthDimension] +\n lastChild[axis] +\n (lastChild.extraItemSpacing || 0) +\n this.style.itemSpacing;\n\n const appended = this._appendItem(item, true);\n\n // Update w/o recalculating whole layout\n appended[axis] = nextPosition;\n this._Items[lengthDimension] += nextPosition + item[lengthDimension];\n }\n\n $itemChanged() {\n this.queueRequestUpdate();\n }\n\n appendItems(items = []) {\n this.shouldSmooth = false;\n\n if (this._lazyItems) {\n this._lazyItems.push(...items);\n return;\n }\n\n if (items.length > this.lazyUpCount + this.lazyUpCountBuffer) {\n this._lazyItems = items.splice(this.lazyUpCount + this.lazyUpCountBuffer);\n }\n items.forEach(item => this._appendItem(item));\n\n this.requestUpdate();\n this._refocus();\n }\n\n appendItemsAt(items = [], idx) {\n if (this._lazyItems && idx > this.items.length - 1) {\n const addAtIdx = idx - this.items.length;\n this._lazyItems.splice(addAtIdx, 0, ...items);\n return;\n }\n\n const { crossDimension, lengthDimension, innerLengthDimension } =\n this._directionPropNames;\n const addIndex = Number.isInteger(idx) ? idx : this.Items.children.length;\n this.shouldSmooth = false;\n this._lastAppendedIdx = addIndex;\n this._totalAddedLength = 0;\n\n items.forEach((item, itemIdx) => {\n const newItem = {\n ...this._withAfterUpdate(item),\n parentFocus: this.hasFocus()\n };\n // do not set a h/w if the item already has one defined\n // as this will trigger withThemeStyles's dimension \"setByUser\" flag\n if (!item[crossDimension]) {\n newItem[crossDimension] =\n item[crossDimension] || this.Items[crossDimension];\n }\n this.Items.childList.addAt(newItem, addIndex + itemIdx);\n const itemLength =\n item[lengthDimension] || item[innerLengthDimension] || 0;\n const extraItemSpacing = item.extraItemSpacing || 0;\n this._totalAddedLength +=\n itemLength + this.style.itemSpacing + extraItemSpacing;\n });\n\n if (this.selectedIndex >= this._lastAppendedIdx) {\n this._selectedPastAdded = true;\n this._selectedIndex += items.length;\n }\n\n this.requestUpdate();\n this._refocus();\n }\n\n updatePositionOnAxis(item, position) {\n const { axis } = this._directionPropNames;\n this.applySmooth(\n item,\n { [axis]: position },\n { [axis]: [position, this.style.itemTransition] }\n );\n\n if (!this.shouldSmooth) {\n this._updateTransitionTarget(item, axis, position);\n }\n }\n\n scrollTo(index, duration = this.style.itemTransition.duration * 100) {\n if (index == undefined) {\n return;\n }\n\n if (duration === 0) {\n this.selectedIndex = index;\n return;\n }\n\n for (let i = 0; i !== Math.abs(this.selectedIndex - index); i++) {\n setTimeout(() => {\n this.selectedIndex > index ? this.selectPrevious() : this.selectNext();\n }, duration * i);\n }\n }\n\n // can be overridden\n transitionDone() {}\n\n shouldScrollLeft() {\n return this._isRow && this._canScrollBack;\n }\n\n shouldScrollRight() {\n return this._isRow && this._canScrollNext;\n }\n\n shouldScrollUp() {\n return this._isColumn && this._canScrollBack;\n }\n\n shouldScrollDown() {\n return this._isColumn && this._canScrollNext;\n }\n\n get _directionPropNames() {\n return directionPropNames[this.direction];\n }\n\n get _canScrollBack() {\n let shouldScroll = false;\n\n if (this._lastScrollIndex) {\n shouldScroll = this.selectedIndex < this._lastScrollIndex;\n if (\n this._prevLastScrollIndex !== undefined &&\n this._prevLastScrollIndex !== this._lastScrollIndex\n ) {\n shouldScroll = true;\n }\n } else {\n shouldScroll = this.selectedIndex >= this.scrollIndex;\n }\n\n const itemsStartCoord = this._isRow ? this._itemsX : this._itemsY;\n return (\n itemsStartCoord < (this._isRow ? this.itemPosX : this.itemPosY) &&\n shouldScroll\n );\n }\n\n get _canScrollNext() {\n const { axis, lengthDimension } = this._directionPropNames;\n const lastChild = this.Items.childList.last;\n let endOfItemsPosition;\n\n if (this._isRow) {\n endOfItemsPosition = Math.abs(this._itemsX - this.w);\n }\n if (this._isColumn) {\n endOfItemsPosition = Math.abs(this._itemsY - this.h);\n }\n\n return (\n this.selectedIndex > this.scrollIndex &&\n // end of Items container < end of last item\n endOfItemsPosition < lastChild[axis] + lastChild[lengthDimension]\n );\n }\n\n get _isColumn() {\n return this.direction === 'column';\n }\n\n get _isRow() {\n return this.direction === 'row';\n }\n\n get _itemsX() {\n return getX(this.Items);\n }\n\n get _itemsY() {\n return getY(this.Items);\n }\n\n _getAlwaysScroll() {\n return this._alwaysScroll !== undefined\n ? this._alwaysScroll\n : this.style.alwaysScroll;\n }\n\n _getNeverScroll() {\n if (this.alwaysScroll) {\n return false;\n }\n return this._neverScroll !== undefined\n ? this._neverScroll\n : this.style.neverScroll;\n }\n\n _setScrollIndex(index) {\n return index >= 0 ? index : 0;\n }\n\n _getScrollIndex() {\n return this._scrollIndex !== undefined\n ? this._scrollIndex\n : this.style.scrollIndex;\n }\n\n _setLazyUpCountBuffer(buffer) {\n if (buffer < 0) {\n console.warn(\n 'lazyUpCountBuffer must be greater than or equal to 0. Setting to 0.'\n );\n buffer = 0;\n }\n return buffer;\n }\n\n isFullyOnScreen({ offsetX = 0, offsetY = 0 } = {}) {\n // if the NavigationManager is nested in another Focus Manager\n // (like a Row inside of a Column),\n // the `isComponentOnScreen` method needs to account for\n // how much the Items container is moving as it scrolls\n const focusmanager = this.parent?.parent;\n if (focusmanager instanceof FocusManager) {\n offsetX += focusmanager.Items.transition('x').targetValue || 0;\n offsetY += focusmanager.Items.transition('y').targetValue || 0;\n }\n return super.isFullyOnScreen({ offsetX, offsetY });\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n itemSpacing: theme.layout.gutterX,\n scrollIndex: 0,\n alwaysScroll: false,\n neverScroll: false,\n itemTransition: {\n ...theme.animation.standardEntrance,\n duration: theme.animation.duration.fast\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport NavigationManager from '../NavigationManager';\nimport * as styles from './Row.styles';\nimport { getX } from '../../utils';\n\nexport default class Row extends NavigationManager {\n static get __componentName() {\n return 'Row';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static _template() {\n return {\n ...super._template(),\n direction: 'row'\n };\n }\n\n static get properties() {\n return [\n ...super.properties,\n 'lazyScroll',\n 'startLazyScrollIndex',\n 'stopLazyScrollIndex'\n ];\n }\n\n // Since this is a Row, scrolling should be done only when focused item (this.selected) is fully visible horizontally\n // as scrolling is happening along X axis. So, if we have a row that has height greater than screen's height, it still\n // can scroll. Method below the '_isComponentHorizontallyVisible' does not take \"full\" visibility into an account.\n // At the same time, 'isFullyOnScreen' method on the Base class or utils method checks that element is fully visible\n // both vertically and horizontally.\n // At a later time, we should investigate this further.\n _isOnScreenForScrolling(child) {\n if (!child) return false;\n\n const x = getX(child);\n if (!Number.isFinite(x)) return false;\n const itemsTransitionX = this.getTransitionXTargetValue();\n const rowX = this.core.renderContext.px;\n let itemX = rowX + itemsTransitionX + x;\n let xModifier;\n\n // This section here takes the difference between a possible target value\n // and subtracts it from the current child x. That value then is subtracted from the initial\n // itemX value calculated on the core renderContext px value to more accurately\n // calculate the item's location on screen when it's own x value will be updating.\n if (child.transition('x')) {\n xModifier = child.x - child.transition('x').targetValue;\n itemX = itemX - xModifier;\n }\n return itemX >= rowX && itemX + child.w <= rowX + this.w;\n }\n\n _shouldScroll() {\n const prevIndex = this.Items.childList.getIndex(this.prevSelected);\n if (\n this.alwaysScroll ||\n (this.lazyScroll &&\n (this.selectedIndex < this.startLazyScrollIndex ||\n this.selectedIndex > this.stopLazyScrollIndex ||\n (prevIndex < this.startLazyScrollIndex &&\n this.selectedIndex === this.startLazyScrollIndex) ||\n (prevIndex > this.stopLazyScrollIndex &&\n this.selectedIndex === this.stopLazyScrollIndex)))\n ) {\n return true;\n }\n\n let shouldScroll = this._selectedPastAdded;\n if (!shouldScroll && !this.neverScroll) {\n const isCompletelyOnScreen = this._isOnScreenForScrolling(this.selected);\n\n if (this.lazyScroll) {\n shouldScroll = !isCompletelyOnScreen;\n } else {\n const lastChild = this.Items.childList.last;\n shouldScroll =\n lastChild &&\n (this.shouldScrollLeft() ||\n this.shouldScrollRight() ||\n !isCompletelyOnScreen);\n }\n }\n return shouldScroll;\n }\n\n _getPrependedOffset() {\n this._selectedPastAdded = false;\n return this.Items.x - this._totalAddedWidth;\n }\n\n _getLazyScrollX(prev) {\n const prevIndex = this.Items.childList.getIndex(this.prevSelected);\n if (this._selectedPastAdded) {\n return this._getPrependedOffset();\n }\n\n if (this.selectedIndex <= this.startLazyScrollIndex) {\n // if navigating on items before start lazy scroll index, use normal scroll logic\n return this._getScrollX();\n } else if (\n this.selectedIndex >= this.stopLazyScrollIndex &&\n this.selectedIndex < prevIndex\n ) {\n // if navigating left on items after stop lazy scroll index\n const currItemsX = this.Items.x;\n\n return (\n currItemsX +\n (this.prevSelected.w +\n this.style.itemSpacing +\n (this.selected.extraItemSpacing || 0))\n );\n } else if (prev && this.selectedIndex > this.stopLazyScrollIndex) {\n // if navigating right on items after stop lazy scroll index\n const prevX = prev.x;\n\n return (\n -prevX +\n this.prevSelected.w +\n this.style.itemSpacing +\n (this.selected.extraItemSpacing || 0) +\n this.itemPosX\n );\n } else if (prev) {\n // otherwise, no start/stop indexes, perform normal lazy scroll\n let itemsContainerX;\n const prevIndex = this.Items.childList.getIndex(prev);\n\n const selectedX = this.selected.x;\n\n if (prevIndex === -1) {\n // No matches found in childList, start set x to 0\n return;\n }\n if (prevIndex > this.selectedIndex) {\n itemsContainerX = -selectedX + this.itemPosX;\n } else if (prevIndex < this.selectedIndex) {\n itemsContainerX = this.w - selectedX - this.selected.w;\n }\n\n return itemsContainerX;\n }\n // if no prev item or start/stop index, default to normal scroll logic\n return this._getScrollX();\n }\n\n _getScrollX() {\n if (this._selectedPastAdded) {\n return this._getPrependedOffset();\n }\n let itemsContainerX;\n let itemIndex = this.selectedIndex - this.scrollIndex;\n itemIndex = itemIndex < 0 ? 0 : itemIndex;\n if (itemIndex === this._firstFocusableIndex()) {\n itemIndex = 0;\n }\n\n if (this.Items.children[itemIndex]) {\n itemsContainerX = this.Items.children[itemIndex].transition('x')\n ? -this.Items.children[itemIndex].transition('x').targetValue +\n this.itemPosX\n : -this.Items.children[itemIndex].x + this.itemPosX;\n }\n\n return itemsContainerX;\n }\n\n _render(next, prev) {\n if (this.plinko && prev && prev.selected) {\n next.selectedIndex = this._getIndexOfItemNear(next, prev);\n }\n\n this._prevLastScrollIndex = this._lastScrollIndex;\n\n let itemsContainerX;\n if (!this.Items.children.length) {\n itemsContainerX = this.itemPosX;\n } else if (this._shouldScroll()) {\n itemsContainerX =\n this.lazyScroll && prev\n ? this._getLazyScrollX(prev)\n : this._getScrollX();\n }\n\n if (itemsContainerX !== undefined) {\n this.updatePositionOnAxis(this.Items, itemsContainerX);\n }\n\n this.onScreenEffect(this.onScreenItems);\n }\n\n _performRender() {\n this._render(this.selected, this.prevSelected);\n }\n\n _isOnScreen(child) {\n if (!child) return false;\n\n return this._isComponentHorizontallyVisible(child);\n }\n\n // can be overridden\n onScreenEffect() {}\n\n get _totalAddedWidth() {\n return this._totalAddedLength;\n }\n\n _getLazyScroll() {\n if (this.alwaysScroll) {\n return false;\n }\n return this._lazyScroll !== undefined\n ? this._lazyScroll\n : this.style.lazyScroll;\n }\n\n _getNeverScroll() {\n if (this.alwaysScroll || this.lazyScroll) {\n return false;\n }\n return this._neverScroll !== undefined\n ? this._neverScroll\n : this.style.neverScroll;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n offsetY: theme.spacer.xxs,\n offsetX: 0,\n textStyle: theme.typography.body1\n});\n\nexport const tone = theme => ({\n neutral: {\n textStyle: { textColor: theme.color.fillNeutral }\n },\n inverse: {\n textStyle: { textColor: theme.color.fillInverse }\n },\n brand: {\n textStyle: { textColor: theme.color.fillBrand }\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport * as styles from './TextBox.styles';\nimport Base from '../Base';\nimport InlineContent from '../InlineContent';\nimport Marquee from '../Marquee';\nimport context from '../../globals/context/index';\nimport utils from '../../utils';\n\n/**\n *\n * Get defaults directly from @lightningjs/core to ensure correct fallback values\n *\n */\nconst lightningTextDefaults = Object.entries(\n Object.getOwnPropertyDescriptors(lng.textures.TextTexture.prototype)\n).reduce((acc, [prop]) => {\n const value = lng.textures.TextTexture.prototype[prop];\n if (prop.startsWith('_') || ['undefined', 'function'].includes(typeof value))\n return acc;\n return {\n [prop]: value,\n ...acc\n };\n}, {});\n\nexport default class TextBox extends Base {\n static _template() {\n return {\n alpha: 0.001\n };\n }\n\n static get __componentName() {\n return 'TextBox';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get tags() {\n return ['InlineContent', 'Marquee', 'Text'];\n }\n\n static get properties() {\n return [\n ...InlineContent.properties,\n 'content',\n 'fixed',\n 'marquee',\n 'marqueeProps',\n 'hideOnLoad'\n ];\n }\n\n _setDimensions(w, h) {\n let width = w;\n let height = h;\n if (!this._isInlineContent) {\n width = this._Text.texture.getRenderWidth();\n height = this._Text.texture.getRenderHeight();\n }\n\n const sizeChanged = this.w !== width || this.h !== height;\n\n if (width && height && sizeChanged) {\n this.h = height;\n if (!this.fixed) {\n this.w = width;\n }\n\n // Position updates can produce flash of poorly positioned content, hide the element until measurements are made.\n if (!this.hideOnLoad && this.alpha < 1) {\n this.alpha = 1;\n }\n\n this._notifyAncestors();\n }\n }\n\n _setContent(content) {\n this._isInlineContent = false;\n if (Array.isArray(content) || utils.isMarkupString(content)) {\n this._isInlineContent = true;\n }\n if ('string' !== typeof content && !this._isInlineContent) {\n return '';\n }\n return content;\n }\n\n get title() {\n return this._content;\n }\n\n _notifyAncestors(w = this.w, h = this.h) {\n this.fireAncestors('$itemChanged');\n this.signal('textBoxChanged', { w, h });\n }\n\n _construct() {\n super._construct();\n this._marqueeContentListenerAttached = false;\n this._marqueeOverrideLoopX = undefined;\n this._resetMarqueePromise();\n }\n\n _update() {\n if (!this.content) {\n // If content is not defined hide the component, but do NOT set visibility\n // as a parent component may need to control that (i.e. Control Button)\n\n // guard to make sure _notifyAncestors is not called numerous times for components like Input\n if (this._Text || this._InlineContent) {\n this.w = this.h = 0;\n this._notifyAncestors(); // need to alert parents that the width and height are now 0\n // makes sure that elements are removed\n this._updateMarquee();\n this.patch({ Text: undefined, InlineContent: undefined });\n }\n\n return;\n }\n this._isInlineContent ? this._updateInlineContent() : this._updateText();\n this._updateMarquee();\n }\n\n _updateInlineContent() {\n this.patch({ Text: undefined });\n\n const inlineContentPatch = InlineContent.properties.reduce(\n (acc, prop) => {\n if (this[prop] != undefined) {\n acc[prop] = this[prop];\n }\n return acc;\n },\n // ensure all styles are passed down as well\n {\n style: {\n ...this.style,\n textStyle: this._textStyleSet\n }\n }\n );\n\n if (this._textStyleSet.wordWrapWidth) {\n inlineContentPatch.w = this._textStyleSet.wordWrapWidth;\n inlineContentPatch.rtt = true;\n }\n if (this._textStyleSet.maxLines) {\n inlineContentPatch.maxLines = this._textStyleSet.maxLines;\n }\n if (this._textStyleSet.maxLinesSuffix) {\n inlineContentPatch.maxLinesSuffix = this._textStyleSet.maxLinesSuffix;\n }\n\n this.patch({\n alpha: 1,\n InlineContent: {\n type: InlineContent,\n w: this.w,\n ...inlineContentPatch,\n signals: {\n loadedInlineContent: '_setDimensions'\n }\n }\n });\n }\n\n _updateText() {\n this.patch({ InlineContent: undefined });\n\n if (!this._Text) {\n this.patch({ Text: {} });\n this._Text.on('txLoaded', this._setDimensions.bind(this));\n }\n\n const fontStyle = this._textStyleSet;\n\n if (this._Text) {\n this._Text.patch({\n y: this.style.offsetY,\n x: this.style.offsetX,\n text: {\n ...lightningTextDefaults, // order matters this should always be first\n ...fontStyle\n }\n });\n }\n }\n\n // keep this out of the update lifecycle\n set marqueeOverrideLoopX(v) {\n this._marqueeOverrideLoopX = v;\n if (this._Marquee) this._Marquee.overrideLoopX = this._marqueeOverrideLoopX;\n this._resolveAwaitMarqueeOverrideX();\n }\n\n get marqueeOverrideLoopX() {\n return this._marqueeOverrideLoopX;\n }\n\n _resetMarqueePromise() {\n this._awaitMarqueeOverrideX = new Promise((resolve, reject) => {\n this._resolveAwaitMarqueeOverrideX = resolve;\n this._rejectAwaitMarqueeOverrideX = reject;\n });\n }\n\n _loadedMarqueeContent() {\n this.signal('willMarquee', this._Marquee);\n }\n\n _updateMarquee() {\n if (this._Marquee && !this.marquee) {\n this._toggleMarquee(this._contentTag);\n }\n\n if (this.marquee) {\n this._resetMarqueePromise();\n const marqueePatch = {\n ...this.marqueeProps,\n w: this._textStyleSet.wordWrapWidth || this.w,\n h: this.h,\n y: this.style.offsetY,\n x: this.style.offsetX,\n signals: {\n marqueeContentLoaded: '_loadedMarqueeContent'\n }\n };\n\n if (!this._Marquee) {\n marqueePatch.type = Marquee;\n }\n\n if (this._isInlineContent) {\n this._InlineContent.w = 0; // ensure we're copying the full, unwrapped inlineContent\n marqueePatch.title = undefined;\n marqueePatch.contentTexture = this._contentTag.getTexture();\n marqueePatch.w = this._textStyleSet.wordWrapWidth || this.w;\n } else {\n marqueePatch.contentTexture = undefined;\n marqueePatch.title = {\n text: this._contentTag.text.text,\n ...this._textStyleSet,\n wordWrapWidth: 0, // ensures that the text will marquee and not wrap\n maxLines: 1\n };\n }\n\n this.patch({\n Marquee: marqueePatch\n });\n if (!this._marqueeContentListenerAttached) {\n this._marqueeContentListenerAttached = true;\n }\n if ('undefined' !== typeof this._marqueeOverrideLoopX) {\n this._awaitMarqueeOverrideX.then(() => {\n this._toggleMarquee(this._contentTag);\n });\n } else {\n this._toggleMarquee(this._contentTag);\n }\n }\n }\n\n _getMarqueeProps() {\n return this._marqueeProps ?? {};\n }\n\n get _textStyleSet() {\n const fontStyle = {\n ...this.theme.typography.body1,\n ...(null !== this.style.textStyle &&\n 'object' === typeof this.style.textStyle &&\n Object.keys(this.style.textStyle)\n ? this.style.textStyle\n : this.theme.typography[this.style.textStyle])\n };\n\n this.constructor.properties.forEach(prop => {\n if ('fontStyle' !== prop && 'undefined' !== typeof this[`_${prop}`]) {\n const key = 'content' === prop ? 'text' : prop;\n fontStyle[key] = this[`_${prop}`];\n }\n });\n\n if (\n this.w &&\n !this._isInlineContent &&\n !this.style.textStyle.wordWrapWidth &&\n this.fixed\n ) {\n fontStyle.wordWrapWidth = this.w;\n }\n\n return fontStyle;\n }\n\n get _contentTag() {\n return this._isInlineContent ? this._InlineContent : this._Text;\n }\n\n _toggleMarquee(contentTag) {\n // do not just return if there is no contentTag, we may still need to alpha the Marquee\n if (this.marquee) {\n if (contentTag) {\n contentTag.alpha = 0.001;\n }\n if (this._Marquee) {\n this._Marquee.alpha = 1;\n this._Marquee.startScrolling();\n }\n } else {\n if (contentTag) {\n contentTag.alpha = 1;\n }\n if (this._Marquee) {\n this._Marquee.alpha = 0.001;\n this._Marquee.stopScrolling();\n }\n }\n }\n\n toggleMarquee() {\n this._toggleMarquee(this._contentTag);\n }\n\n get announce() {\n return (\n this._announce ||\n (this._isInlineContent && this._InlineContent\n ? this._InlineContent.announce\n : this.content)\n );\n }\n\n set announce(announce) {\n super.announce = announce;\n }\n\n set smooth(v) {\n context.warn(\n 'warning: value smoothing is known to cause bugs with the TextBox - patch updated values instead.'\n );\n super.smooth = v;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport logger from './logger';\nclass Metrics {\n constructor() {\n this._keyMetricsCallback = undefined;\n }\n\n get keyMetricsCallback() {\n return this._keyMetricsCallback;\n }\n\n set keyMetricsCallback(value) {\n if (-1 < ['undefined', 'function'].indexOf(typeof value)) {\n this._keyMetricsCallback = value;\n return;\n }\n logger.warn(\n `context keyMetricsCallback expected a function. Received ${typeof value}`\n );\n }\n}\n\nconst metricsInstance = new Metrics();\n\nexport { metricsInstance as default, Metrics };\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\n\nconst eventEmitterInstance = new lng.EventEmitter();\n\nexport default eventEmitterInstance;\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport default {\n name: 'Base Lightning TV',\n alpha: {\n primary: 1,\n secondary: 0.7,\n tertiary: 0.1,\n inactive: 0.5,\n full: 1,\n none: 0,\n alpha1: 0.1,\n alpha2: 0.3,\n alpha3: 0.5,\n alpha4: 0.7,\n alpha5: 0.9\n },\n animation: {\n duration: {\n none: 0,\n xfast: 0.1,\n fast: 0.25,\n normal: 0.5,\n slow: 0.75,\n xslow: 0.9\n },\n delay: {\n none: 0,\n xfast: 0.01,\n fast: 0.025,\n normal: 0.05,\n slow: 0.075,\n xslow: 0.09\n },\n expressive: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n expressiveEntrance: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n expressiveExit: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n standard: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n standardEntrance: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n standardExit: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n utility: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n utilityEntrance: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n utilityExit: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n }\n },\n asset: {\n arrowLeft:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAGKADAAQAAAABAAAAGAAAAADiNXWtAAAAi0lEQVRIDWNgGAWjIfD//38JID5Fk5AAGqwKxPeA+D/VLQCaaQLEr0CGgwBVLQCa5wbEn0EGwwDVLAAaGA3Ev2AGw2iqWAA0rBiI/8EMRaYptgBoWDeygehsci1gIlcjWfqArqZdEMFcBLSEdpGMZAntkimSJbTLaEiW0K6oQLKEdoUdzJJRemiHAAD4n+yzPWCs7QAAAABJRU5ErkJggg==',\n arrowRight:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAGKADAAQAAAABAAAAGAAAAADiNXWtAAAAg0lEQVRIDWNgGAWjIYArBP7//38KiCVwyVMsDjQcBO4BsSrFhmEzAGw8hHgFpEywqaFIDMkCEPMzELtRZCC6ZjQLQNxfQByNro5sPhYLQEL/gLiYbEORNeKwACbcDVPLBGMMOhrmVDSapkFE00imaTKlaUajaVFB28Ju0CXrUQfhDAEAEgHss6NhpLQAAAAASUVORK5CYII=',\n backspaceOutline:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAAAXNSR0IArs4c6QAACmpJREFUeF7tnVmoZUcVhv/feY4gBEVEH/KgCCZxCK2itNo4xQQH+kUN0TjEiDGKKBqnaExwBjUaR6KY+NQgiQkOMSYhYEScIopGJOqDE2hHjfP0y4p1Oqdv33v2qr32Prv2Paug6Ye7Vu2qv75TtWvtGohMqUBAAQZ80zUVQAKUEIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypfPsAJJ0NYC92XRHKPB3AAfLv18BuBLAFSR/NKZWswJI0vkA3jCmILsw75sAvIfkR8eo22wAknQSgMvGEGFD8vwxgFeQvGrI+s4CIEnHAPgugHsMWfkNzevDAM4i+Z8h6t88QJLuXOB5yBAVzjxuVeBaAM8ieXNUjzkAdAmA50Yrmv5HKPATACeQ/GNEm6YBkvRyANblZhpHAXsfekpkOGsWIEmPAHA9gDuOo13mWhS4gOSZfdVoEiBJ9wFwA4D7961Y+lUpsK/v7KxVgL4K4ElOCS4l+Uyn7a41k3Q0gMcC2ANgH4CHV1T2OyStx69OzQEk6TwAZztr8lMAx5P8s9N+Y8wk2cTjfQDu66z080h+zml7yKwpgCSdCOByZyX+BuBRJH/otN84M0kWN/s0gOc4Kv8Nko922B1m0gxAkh4I4AcVwcL9JA/UVnjT7CXdHYD9yEzfVUkAjib5uxqNmgCoBAu/CeBhzsJ/kORZTtuNN5Nk70bXAZ0Hy59G8qIawVoB6LMAnu8suE3tH0/y3077NAMg6esAuoaoC0la7M2dJgdI0ssAXOgs8W8BHEvS/s9UoYCkdwN4bYfL5STto7U7TQpQZbDQehzreawHylSpgKSTAVza4XYDyeNqsp4MoB7BwteQfH9N5dL2NgWK3l0vyAdJWhDXnSYBSNLtANh3GO/KwgMk97trlYbbKiDJPpzea5U8JKuYqDIeql0kvQPAG5352ZLMR5L8q9M+zXZQYFcAJOnJAL7sbGWLMFuk2SLOmYIKzB6gEiz8HoB7O7U4meQXnLZp1qGApD8BuOcsh7AewcL3kuyadg4OjSSbhRxH0j4BjJok2Ufga0j+YdQHlcznDlBNsPAa+xpP8r/rEHbxjAKPbRuyHvKFY0Ik6QUALOprPfIT1gHRbAGSdDoA77aSX5Zg4e8nhGfx6FEgWoJn8Zy1QCTplq5vjc3NwnoEC/eQ/HYD8IwC0TbwrA2i2QHUI1h4JskLGoJnUIhWwLMWiGYFkCSLMX2t5WDhlneeLm5Dw5kDntEhkmRhEVvesWNqZgiTdC6AN3W1Svn72oOFkuxF+WcVIQUrai+IKuA5BBHJ453auc1mA1AJFn7Jsf7EKj9ZsLBHw1ZDtI5neAmaBUBzCxaO2cBj5u2FZtlO0l8A3K3ZIaxHsPB8kt5vYn00c/mM0dBj5OmqzAqjOQDUfLBwJ32HbPAh84pCM5seSNJLAHzcWeFJgoVdZRui4YfIo6ucff8uyVY03LW5IawyWPgvW5u77mChV/QIABFfb/kidk0CVKbDth3Huw35dJLeniqiV2/fniDYx1f7vlWTeoUFah6wZQhrqwcqwUKbrtsaH0+6mOQpHsOpbXpCVFPstcJjBZNkmzHv0swQJultAN7iVO375TyafzjtJzcbEaK1w9McQJXBQlvvYmtsfjE5FZUFGAGiSeBpCqDKYKFtmX0qya9Utl0z5gNCNBk8BSA7CtiODNwxjf4trEew8BySNtTNOg0A0aTwtARQTbDQeh3rfawXmn0KQDQ5PC0B9EkAL3LSkAD9X6hWALIJzJ3mNoSdS9I7U3NyuX6zQO+zKOzkEEmaHqDSFdpZM97tOfkSfRvvk0LUDEAFIgseetf85DS+AYgk/bPr1NvRZ2HLg4ektwI4xzmgZCBxYohaBMjWPeenDOcvaIvZ2oez5gAqQ5mtLbb3oa4z+Bb6nTHW1UP92vFIr54vzJ8BcGplGdYKkSRbCXGHSWdh2z1ckp1taGccroxyFt9cznG4iGuDqFmASk9kZxxakNGTckHZBBA1DVCB6BMAXuwhyA4VmGL/+05l6zlsbdt7DJmXU0uXmSQ7JvD2zQ1hiwJJsotRvlVxXO87SU5+heUYDT5Gni5KVhg1D1DphWqCjOYy6RlAYzb0mHn3gWkWABWIaoKMubHwSBpGebGWZNdc2vmUO6a1BhJXFUSSff/yLuOYamvzzwEcVfFr7tWwPXqi6uN2PXWYG0C1Qca1n8RaDlewl3kPRL3gWXo/XBwo1dXWdk/a3jEOnJoVQGUoqw0yvpLkh7oUHvLvTohC8FRANBo8pT3sxLeVJ/M2M4QtiVYTZJzkNPoOiAaBxwHRqPDMFqBS8Jog4yT3YewA0aDwrIBodHhmDVApvG0mtO3PnjTJjTxbIBoFnm0gWgs8pQ06lxY3N4QtCWZBRgPDezdnHvPr+alV2EiaL0DlF2Dbn20bdB40XtHwQ5nOHqAC0SyCjEM1Wkv57AqACkRvBvB2p7hrDzI6yzU7s90EUPNBxtnR4SjwrgGo9EK1Qca8cM4ByU4mkuz++F93ZHELyZX3iW31n+S+sKWZWfNBxkCbNeUq6ekArugo1I0kH1xT8EkBKj1R80HGGkFbtZVkZ3bb2d2r0tUkn1hTh8kBKhB9DMBLnQWfJMjoLFuTZpJsO/ONAB7UUcBLSHqvX781q1YAqg0yfoDkq5psrQYLJeldAF7nKFr1x+wmACq9kAUZLazvvTV4P8kDDlE22kTSQ4uuK9dCF5HuR/I3NYI1A1CBaB+AK50VsAMj7TJeixNl2kYBSccCsB/ZMQ6Brif5GIfdYSZNAVQg8rzsLSphl/Hapby2LDZTUaBcq/56ALb1fOVxLkuinULy4loRmwOoQGQX7T7DWZnPk3y203bXmkl6AIA91isDOBGADV3e1HsJbasA1QYZvUKl3fYKPI2knXFQnZoEqPRCNUHG6oqnwyEFLiJ5Wl89mgWoQFQTZOyrwSb7WUztcSRtu0+v1DRABaKPADijV+3SaZUCNgE5geTNEZnmAFBtkDGix6b4Xld2BNvJcaHUPEClF6oNMoZE2eXOtm3q1ZFha1mfWQBUINoL4Kqurbm7vPEj1bOAqx3udW0kk62+swGoQHQ2gPOGFGAD8roJgF0t+qkx6jorgApElwE4aQwxZp6n3YNxsPyzA7yst/4iSdvEMFqaHUCjKZEZ91IgAeolWzotFEiAkoWQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnT+H0jPT81J3xWWAAAAAElFTkSuQmCC',\n check:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAOCAYAAAAi2ky3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACtSURBVHgBvdPdDcIgEAfwoy8Nb45QN3AGF2s36Ahu4gpuIDoBfSgfpdoTlCbEWEMh6T8hFzjyg5AAkBHOcQe5UWqspRx435sDpMYj6IYQwwVSEiJ2MKVUBWuzLSLl2HL+uxmNCGFO8yaL7RHxve6qRZoAuS4hxac8735elWVx7jrtMKL1o0Gcat9jhExHSukN/kUIFZ7MpDRtzE1isDRkAUtDvrA8ZI597FUf8gWH9P0b4gko9wAAAABJRU5ErkJggg=='\n },\n color: {\n white: ['#ffffff', 1],\n black: ['#000000', 1],\n grey: ['#929096', 1],\n red: ['#e74c3c', 1],\n orange: ['#dc7633', 1],\n yellow: ['#f7dc6f', 1],\n green: ['#2Ecc71', 1],\n blue: ['#93a9fd', 1],\n purple: ['#663399', 1],\n palette: {\n 'grey-05': ['#f8f7fa', 1],\n 'grey-40': ['#929096', 1],\n 'grey-70': ['#48474b', 1],\n 'grey-90': ['#181819', 1],\n 'blue-20': ['#becffe', 1],\n 'blue-40': ['#93a9fd', 1],\n 'blue-90': ['#000033', 1]\n },\n material: ['#181819', 1],\n materialBrand: ['#000033', 1],\n overlay: ['#181819', 0.7],\n textNeutral: ['#f8f7fa', 1],\n textNeutralSecondary: ['#f8f7fa', 0.7],\n textNeutralTertiary: ['#f8f7fa', 0.1],\n textNeutralDisabled: ['#f8f7fa', 0.5],\n textInverse: ['#181819', 1],\n textInverseSecondary: ['#181819', 0.7],\n textInverseTertiary: ['#181819', 0.1],\n textInverseDisabled: ['#181819', 0.5],\n textBrand: ['#93a9fd', 1],\n textBrandSecondary: ['#93a9fd', 0.7],\n textBrandTertiary: ['#93a9fd', 0.1],\n textBrandDisabled: ['#93a9fd', 0.5],\n textPositive: ['#2Ecc71', 1],\n textNegative: ['#e74c3c', 1],\n textInfo: ['#93a9fd', 1],\n textCaution: ['#dc7633', 1],\n fillTransparent: ['#ffffff', 0],\n fillNeutral: ['#f8f7fa', 1],\n fillNeutralSecondary: ['#f8f7fa', 0.7],\n fillNeutralTertiary: ['#f8f7fa', 0.1],\n fillNeutralDisabled: ['#f8f7fa', 0.5],\n fillInverse: ['#181819', 1],\n fillInverseSecondary: ['#181819', 0.7],\n fillInverseTertiary: ['#181819', 0.1],\n fillInverseDisabled: ['#181819', 0.5],\n fillBrand: ['#93a9fd', 1],\n fillBrandSecondary: ['#93a9fd', 0.7],\n fillBrandTertiary: ['#93a9fd', 0.1],\n fillBrandDisabled: ['#93a9fd', 0.5],\n fillPositive: ['#2Ecc71', 1],\n fillNegative: ['#e74c3c', 1],\n fillInfo: ['#93a9fd', 1],\n fillCaution: ['#dc7633', 1],\n strokeNeutral: ['#f8f7fa', 1],\n strokeNeutralSecondary: ['#f8f7fa', 0.7],\n strokeNeutralTertiary: ['#f8f7fa', 0.1],\n strokeNeutralDisabled: ['#f8f7fa', 0.5],\n strokeInverse: ['#181819', 1],\n strokeInverseSecondary: ['#181819', 0.7],\n strokeInverseTertiary: ['#181819', 0.1],\n strokeInverseDisabled: ['#181819', 0.5],\n strokeBrand: ['#93a9fd', 1],\n strokeBrandSecondary: ['#93a9fd', 0.7],\n strokeBrandTertiary: ['#93a9fd', 0.1],\n strokeBrandDisabled: ['#93a9fd', 0.5],\n strokePositive: ['#2Ecc71', 1],\n strokeNegative: ['#e74c3c', 1],\n strokeInfo: ['#93a9fd', 1],\n strokeCaution: ['#dc7633', 1],\n interactiveNeutral: ['#ffffff', 0.1],\n interactiveNeutralFocus: ['#ffffff', 1],\n interactiveNeutralFocusSoft: ['#ffffff', 0.1],\n interactiveInverse: ['#48474b', undefined],\n interactiveInverseFocus: ['#48474b', 1],\n interactiveInverseFocusSoft: ['#48474b', 0.1],\n interactiveBrand: ['#becffe', 0.1],\n interactiveBrandFocus: ['#becffe', 1],\n interactiveBrandFocusSoft: ['#becffe', 0.1],\n shadowNeutral: ['#000000', 0.7],\n shadowNeutralFocus: ['#000000', 0.7],\n shadowNeutralFocusSoft: ['#000000', 0.7],\n shadowNeutralText: ['#000000', 1],\n shadowInverse: ['#000000', 0.7],\n shadowInverseFocus: ['#000000', 0.7],\n shadowInverseFocusSoft: ['#000000', 0.7],\n shadowInverseText: ['#000000', 1],\n shadowBrand: ['#000000', 0.7],\n shadowBrandFocus: ['#000000', 0.7],\n shadowBrandFocusSoft: ['#000000', 0.7],\n shadowBrandText: ['#000000', 1]\n },\n componentConfig: {\n Keyboard: {\n style: {\n keyProps: {\n delete: {\n title: null,\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAAAXNSR0IArs4c6QAACmpJREFUeF7tnVmoZUcVhv/feY4gBEVEH/KgCCZxCK2itNo4xQQH+kUN0TjEiDGKKBqnaExwBjUaR6KY+NQgiQkOMSYhYEScIopGJOqDE2hHjfP0y4p1Oqdv33v2qr32Prv2Paug6Ye7Vu2qv75TtWvtGohMqUBAAQZ80zUVQAKUEIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypfPsAJJ0NYC92XRHKPB3AAfLv18BuBLAFSR/NKZWswJI0vkA3jCmILsw75sAvIfkR8eo22wAknQSgMvGEGFD8vwxgFeQvGrI+s4CIEnHAPgugHsMWfkNzevDAM4i+Z8h6t88QJLuXOB5yBAVzjxuVeBaAM8ieXNUjzkAdAmA50Yrmv5HKPATACeQ/GNEm6YBkvRyANblZhpHAXsfekpkOGsWIEmPAHA9gDuOo13mWhS4gOSZfdVoEiBJ9wFwA4D7961Y+lUpsK/v7KxVgL4K4ElOCS4l+Uyn7a41k3Q0gMcC2ANgH4CHV1T2OyStx69OzQEk6TwAZztr8lMAx5P8s9N+Y8wk2cTjfQDu66z080h+zml7yKwpgCSdCOByZyX+BuBRJH/otN84M0kWN/s0gOc4Kv8Nko922B1m0gxAkh4I4AcVwcL9JA/UVnjT7CXdHYD9yEzfVUkAjib5uxqNmgCoBAu/CeBhzsJ/kORZTtuNN5Nk70bXAZ0Hy59G8qIawVoB6LMAnu8suE3tH0/y3077NAMg6esAuoaoC0la7M2dJgdI0ssAXOgs8W8BHEvS/s9UoYCkdwN4bYfL5STto7U7TQpQZbDQehzreawHylSpgKSTAVza4XYDyeNqsp4MoB7BwteQfH9N5dL2NgWK3l0vyAdJWhDXnSYBSNLtANh3GO/KwgMk97trlYbbKiDJPpzea5U8JKuYqDIeql0kvQPAG5352ZLMR5L8q9M+zXZQYFcAJOnJAL7sbGWLMFuk2SLOmYIKzB6gEiz8HoB7O7U4meQXnLZp1qGApD8BuOcsh7AewcL3kuyadg4OjSSbhRxH0j4BjJok2Ufga0j+YdQHlcznDlBNsPAa+xpP8r/rEHbxjAKPbRuyHvKFY0Ik6QUALOprPfIT1gHRbAGSdDoA77aSX5Zg4e8nhGfx6FEgWoJn8Zy1QCTplq5vjc3NwnoEC/eQ/HYD8IwC0TbwrA2i2QHUI1h4JskLGoJnUIhWwLMWiGYFkCSLMX2t5WDhlneeLm5Dw5kDntEhkmRhEVvesWNqZgiTdC6AN3W1Svn72oOFkuxF+WcVIQUrai+IKuA5BBHJ453auc1mA1AJFn7Jsf7EKj9ZsLBHw1ZDtI5neAmaBUBzCxaO2cBj5u2FZtlO0l8A3K3ZIaxHsPB8kt5vYn00c/mM0dBj5OmqzAqjOQDUfLBwJ32HbPAh84pCM5seSNJLAHzcWeFJgoVdZRui4YfIo6ucff8uyVY03LW5IawyWPgvW5u77mChV/QIABFfb/kidk0CVKbDth3Huw35dJLeniqiV2/fniDYx1f7vlWTeoUFah6wZQhrqwcqwUKbrtsaH0+6mOQpHsOpbXpCVFPstcJjBZNkmzHv0swQJultAN7iVO375TyafzjtJzcbEaK1w9McQJXBQlvvYmtsfjE5FZUFGAGiSeBpCqDKYKFtmX0qya9Utl0z5gNCNBk8BSA7CtiODNwxjf4trEew8BySNtTNOg0A0aTwtARQTbDQeh3rfawXmn0KQDQ5PC0B9EkAL3LSkAD9X6hWALIJzJ3mNoSdS9I7U3NyuX6zQO+zKOzkEEmaHqDSFdpZM97tOfkSfRvvk0LUDEAFIgseetf85DS+AYgk/bPr1NvRZ2HLg4ektwI4xzmgZCBxYohaBMjWPeenDOcvaIvZ2oez5gAqQ5mtLbb3oa4z+Bb6nTHW1UP92vFIr54vzJ8BcGplGdYKkSRbCXGHSWdh2z1ckp1taGccroxyFt9cznG4iGuDqFmASk9kZxxakNGTckHZBBA1DVCB6BMAXuwhyA4VmGL/+05l6zlsbdt7DJmXU0uXmSQ7JvD2zQ1hiwJJsotRvlVxXO87SU5+heUYDT5Gni5KVhg1D1DphWqCjOYy6RlAYzb0mHn3gWkWABWIaoKMubHwSBpGebGWZNdc2vmUO6a1BhJXFUSSff/yLuOYamvzzwEcVfFr7tWwPXqi6uN2PXWYG0C1Qca1n8RaDlewl3kPRL3gWXo/XBwo1dXWdk/a3jEOnJoVQGUoqw0yvpLkh7oUHvLvTohC8FRANBo8pT3sxLeVJ/M2M4QtiVYTZJzkNPoOiAaBxwHRqPDMFqBS8Jog4yT3YewA0aDwrIBodHhmDVApvG0mtO3PnjTJjTxbIBoFnm0gWgs8pQ06lxY3N4QtCWZBRgPDezdnHvPr+alV2EiaL0DlF2Dbn20bdB40XtHwQ5nOHqAC0SyCjEM1Wkv57AqACkRvBvB2p7hrDzI6yzU7s90EUPNBxtnR4SjwrgGo9EK1Qca8cM4ByU4mkuz++F93ZHELyZX3iW31n+S+sKWZWfNBxkCbNeUq6ekArugo1I0kH1xT8EkBKj1R80HGGkFbtZVkZ3bb2d2r0tUkn1hTh8kBKhB9DMBLnQWfJMjoLFuTZpJsO/ONAB7UUcBLSHqvX781q1YAqg0yfoDkq5psrQYLJeldAF7nKFr1x+wmACq9kAUZLazvvTV4P8kDDlE22kTSQ4uuK9dCF5HuR/I3NYI1A1CBaB+AK50VsAMj7TJeixNl2kYBSccCsB/ZMQ6Brif5GIfdYSZNAVQg8rzsLSphl/Hapby2LDZTUaBcq/56ALb1fOVxLkuinULy4loRmwOoQGQX7T7DWZnPk3y203bXmkl6AIA91isDOBGADV3e1HsJbasA1QYZvUKl3fYKPI2knXFQnZoEqPRCNUHG6oqnwyEFLiJ5Wl89mgWoQFQTZOyrwSb7WUztcSRtu0+v1DRABaKPADijV+3SaZUCNgE5geTNEZnmAFBtkDGix6b4Xld2BNvJcaHUPEClF6oNMoZE2eXOtm3q1ZFha1mfWQBUINoL4Kqurbm7vPEj1bOAqx3udW0kk62+swGoQHQ2gPOGFGAD8roJgF0t+qkx6jorgApElwE4aQwxZp6n3YNxsPyzA7yst/4iSdvEMFqaHUCjKZEZ91IgAeolWzotFEiAkoWQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnT+H0jPT81J3xWWAAAAAElFTkSuQmCC'\n }\n }\n }\n }\n },\n font: [],\n layout: {\n columnCount: 10,\n focusScale: 1.2,\n gutterX: 20,\n gutterY: 20,\n marginX: 150,\n marginY: 150,\n safe: 50,\n screenW: 1920,\n screenH: 1080\n },\n radius: { none: 0, xs: 2, sm: 4, md: 8, lg: 16, xl: 24 },\n spacer: {\n none: 0,\n xxs: 2,\n xs: 4,\n sm: 8,\n md: 10,\n lg: 20,\n xl: 30,\n xxl: 40,\n xxxl: 50\n },\n stroke: { none: 0, sm: 2, md: 4, lg: 6, xl: 8 },\n typography: {\n display1: {\n fontFamily: 'Arial',\n fontSize: 75,\n lineHeight: 85,\n fontStyle: '500',\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n display2: {\n fontFamily: 'Arial',\n fontSize: 50,\n lineHeight: 60,\n fontStyle: '500',\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n headline1: {\n fontFamily: 'Arial',\n fontSize: 35,\n fontStyle: '500',\n lineHeight: 48,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n headline2: {\n fontFamily: 'Arial',\n fontSize: 30,\n fontStyle: '500',\n lineHeight: 40,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n headline3: {\n fontFamily: 'Arial',\n fontSize: 25,\n fontStyle: '500',\n lineHeight: 36,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n body1: {\n fontFamily: 'Arial',\n fontSize: 25,\n fontStyle: '300',\n lineHeight: 40,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n body2: {\n fontFamily: 'Arial',\n fontSize: 22,\n fontStyle: '300',\n lineHeight: 32,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n body3: {\n fontFamily: 'Arial',\n fontSize: 20,\n fontStyle: '300',\n lineHeight: 32,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n button1: {\n fontFamily: 'Arial',\n fontSize: 25,\n fontStyle: '500',\n lineHeight: 32,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n button2: {\n fontFamily: 'Arial',\n fontSize: 20,\n fontStyle: '500',\n lineHeight: 32,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n callout1: {\n fontFamily: 'Arial',\n fontSize: 20,\n fontStyle: '500',\n lineHeight: 32,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n caption1: {\n fontFamily: 'Arial',\n fontSize: 15,\n fontStyle: '500',\n lineHeight: 24,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n tag1: {\n fontFamily: 'Arial',\n fontSize: 20,\n fontStyle: '500',\n lineHeight: 24,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n footnote1: {\n fontFamily: 'Arial',\n fontSize: 22,\n fontStyle: '300',\n lineHeight: 30,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n }\n }\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport logger from './logger';\n\nlet customFontFaces = [];\n\n/**\n * Function to get a list of all custom fonts that have been loaded using the FontFace Web API from the theme\n * @return {Array}\n */\nexport function getCustomFontFaces() {\n return customFontFaces;\n}\n\n/**\n * Function to load all the fonts from the theme\n */\nexport const fontLoader = fonts => {\n const promises = [];\n // Loop through all fonts in the array and attempt to load them using the FontFace Web API\n for (let i = 0; i < fonts.length; i++) {\n const { family, src, descriptors } = fonts[i];\n // If url(s) are specified format them according to the spec https://developer.mozilla.org/en-US/docs/Web/API/FontFace\n const fontSrc =\n src && Array.isArray(src) && src.length\n ? // loop through each string and format it in a way that's readable for the FontFace API\n src\n .map(url => {\n // if the url is a local font then the src is just the string provided in the array\n // otherwise, format the url string like url()\n return url.substr(0, 5) === 'local' ? url : `url(${url})`; // Local system fonts are supported by passing a string starting with local. ex local(Impact)\n })\n .join(',')\n : 'url(' + src + ')';\n const fontFace = new FontFace(family, fontSrc, descriptors || {});\n logger.info('Loading font', family);\n document.fonts.add(fontFace);\n // Push all pending promises into an array, theme manager will wait on everything to resolve before triggering another update cycle\n promises.push(\n new Promise(resolve => {\n fontFace\n .load()\n .then(() => {\n customFontFaces.push(fontFace);\n resolve(family);\n })\n .catch(err => {\n resolve(new Error(`${family}: ${err.message}`)); // Even if a font fails to load resolve it with an error so the theme doesn't fail to update all other values\n });\n })\n );\n }\n return Promise.all(promises).then(fontsLoaded => {\n // After the promise has resolved log the appropriate success and error messages\n const loaded = fontsLoaded\n .filter(font => !(font instanceof Error))\n .join(', ');\n\n if (loaded) {\n logger.log(`Fonts loaded: ${loaded}`);\n }\n\n const failed = fontsLoaded\n .filter(font => font instanceof Error)\n .map(item => item.message)\n .join(', ');\n\n if (failed) {\n logger.error(`Unable to load fonts: ${failed}`);\n }\n });\n};\n\n/**\n * Async function to remove all the fonts loaded by the theme. Useful if a theme is switched at runtime\n */\nexport const cleanupFonts = async fonts => {\n if (document.fonts && 'delete' in document.fonts) {\n if (!customFontFaces.length) return;\n customFontFaces = customFontFaces.filter(fontFace => {\n if (!fonts.find(font => font.family === fontFace.family)) {\n logger.info('Removing font', fontFace.family);\n document.fonts.delete(fontFace);\n return false;\n } else {\n return fontFace;\n }\n });\n } else {\n logger.info('Unable to remove manually-added fonts');\n }\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const THEME_KEY_REPLACER = {\n fontFamily: 'fontFace'\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n clone,\n getValFromObjPath,\n getHexColor,\n getValidColor\n} from '../../utils/index';\nimport baseTheme from '@lightningjs/ui-components-theme-base';\nimport logger from './logger';\nimport events from './events';\nimport { fontLoader, cleanupFonts } from './fonts';\nimport { THEME_KEY_REPLACER } from './constants';\n\nconst merge = {\n all: objArray => {\n let result = {};\n for (let i = 0; i < objArray.length; i++) {\n result = clone(result, objArray[i]);\n }\n return result;\n }\n};\n\nconst base64Cache = [];\n\nconst isSubTheme = themeName => 'subTheme' === themeName.slice(0, 8);\n\n/**\n * Extracts the MIME type from a Data URI.\n *\n * @param {string} dataUri - The Data URI string.\n * @returns {string|null} The extracted MIME type, or null if not found.\n */\nfunction getMimeTypeFromDataUri(dataUri) {\n const matches = dataUri.match(/^data:(.*?);base64,/);\n if (matches && matches.length === 2) {\n return matches[1];\n }\n return null;\n}\n\n/**\n * Checks if a string represents a Base64-encoded image and extracts the MIME type.\n *\n * @param {string} str - The string to check.\n * @returns {{ isImage: boolean, mimeType: string|null }} An object indicating whether the string is an image and the extracted MIME type.\n */\nfunction checkBase64EncodedImage(str) {\n const regex = /^data:image\\/(jpeg|jpg|png|gif);base64,/;\n const isImage = regex.test(str);\n const mimeType = isImage ? getMimeTypeFromDataUri(str.match(regex)[0]) : null;\n\n return {\n isImage,\n mimeType\n };\n}\n\n/**\n * Converts a Base64-encoded image to a Blob URL.\n * Note: Make sure to handle potential memory leaks caused by the browser's image caching.\n *\n * @param {string} base64String - The Base64-encoded image string.\n * @param {string} mimeType - The MIME type of the image.\n * @returns {string|null} The Blob URL representing the converted image, or null if conversion fails.\n */\nfunction base64ToBlobURL(base64String, mimeType) {\n const byteCharacters = atob(\n base64String.substring(base64String.indexOf(',') + 1)\n );\n const byteArrays = [];\n\n try {\n for (let offset = 0; offset < byteCharacters.length; offset += 512) {\n const slice = byteCharacters.slice(offset, offset + 512);\n const byteNumbers = new Array(slice.length);\n\n for (let i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n\n const byteArray = new Uint8Array(byteNumbers);\n byteArrays.push(byteArray);\n }\n\n const blob = new Blob(byteArrays, { type: mimeType });\n const blobURL = URL.createObjectURL(blob);\n\n return blobURL;\n } catch (error) {\n logger.info('Unable to convert base64 image to URL');\n return null;\n }\n}\n\nclass ThemeManager {\n constructor() {\n this._cache = new Map();\n if (typeof window === 'undefined') return;\n if (!window.LUI) {\n window.LUI = {};\n }\n if (!window.LUI.themeManagerInstances) {\n window.LUI.themeManagerInstances = [{ themeManager: this, events }];\n } else {\n window.LUI.themeManagerInstances.push({ themeManager: this, events });\n }\n }\n\n // Handle separate instances of context across the application and keep them in sync\n _setCache(key, payload) {\n if (typeof window === 'undefined') return;\n window.LUI.themeManagerInstances.forEach(({ themeManager }) => {\n if (themeManager) themeManager._cache.set(key, payload);\n });\n }\n\n _deleteCache(key) {\n if (typeof window === 'undefined') return;\n window.LUI.themeManagerInstances.forEach(({ themeManager }) => {\n if (themeManager) themeManager._cache.delete(key);\n });\n }\n\n _emit(key, payload) {\n if (typeof window === 'undefined') return;\n window.LUI.themeManagerInstances.forEach(({ events }) => {\n events.emit(key, payload);\n });\n }\n\n getTheme() {\n if (this._cache.has('theme')) {\n return this._cache.get('theme');\n }\n\n const theme = this._processTheme.call(this);\n this._setCache('theme', theme);\n return theme;\n }\n\n async setTheme(themeConfig) {\n let value;\n if (Array.isArray(themeConfig)) {\n value = merge.all(themeConfig);\n } else {\n value = themeConfig;\n }\n\n if ('object' !== typeof value || null === value) {\n logger.warn(`context theme expected an object. Received ${typeof value}`);\n return;\n }\n\n this._clearCache();\n const theme = this._processTheme.call(this, [value], value.extensions);\n this._setCache('theme', theme);\n await cleanupFonts(theme.font);\n if (theme.font && theme.font.length) {\n await this._loadFonts(theme.font);\n }\n this._refreshSubThemes();\n this._emit('themeExtensionsUpdate');\n this._emit('themeUpdate'); // Notify components that an update cycle is required\n return theme;\n }\n\n getSubTheme(subThemeName) {\n if (this._cache.has(`subTheme${subThemeName}`)) {\n return this._cache.get(`subTheme${subThemeName}`).result;\n }\n return;\n }\n\n async setSubTheme(subThemeName, value, triggerUpdate = true) {\n if (!subThemeName) {\n logger.warn('Sub theme name not specified');\n return;\n }\n if ('string' !== typeof subThemeName) {\n logger.warn(\n `Sub theme name must be a string. Received an ${typeof subThemeName}`\n );\n return;\n }\n if ('object' !== typeof value || !Object.keys(value).length) {\n logger.warn(\n `Could not set subTheme ${subThemeName}, value should be an object with properties. Received an ${typeof value}`\n );\n return;\n }\n const globalTheme = this.getTheme();\n const subTheme = this._processTheme.call(this, [globalTheme, value]);\n if (subTheme.font && subTheme.font.length) {\n await this._loadFonts(subTheme.font);\n }\n this._setCache(`subTheme${subThemeName}`, {\n original: value,\n result: subTheme\n });\n\n if (triggerUpdate) this._emit(`themeUpdate${subThemeName}`);\n return subTheme;\n }\n\n _refreshSubThemes() {\n // Triggered when global theme is updated\n [...this._cache.keys()].forEach(key => {\n if ('string' === typeof key && isSubTheme(key)) {\n const cache = this._cache.get(key);\n if (cache.original)\n this.updateSubTheme(key.replace(/^subTheme/, ''), cache.original);\n }\n });\n }\n\n async _loadFonts(fontArray) {\n try {\n await fontLoader(fontArray);\n } catch (err) {\n logger.error(`Unable to load font: ${err}`);\n }\n }\n\n /**\n * Merge values with current theme\n */\n async updateTheme(themeConfig) {\n let value;\n if (Array.isArray(themeConfig)) {\n value = merge.all(themeConfig);\n } else {\n value = themeConfig;\n }\n\n let currentTheme = {};\n\n if (this._cache.has('theme')) {\n currentTheme = this._cache.get('theme');\n }\n this._clearCache();\n const theme = this._processTheme.call(\n this,\n [currentTheme, value],\n value.extensions || currentTheme.extensions\n );\n this._setCache('theme', theme);\n if (theme.font && theme.font.length) {\n await this._loadFonts(theme.font);\n }\n this._refreshSubThemes();\n if (value.extensions) this._emit('themeExtensionsUpdate');\n this._emit('themeUpdate'); // Notify components that an update cycle is required\n return theme;\n }\n\n _clearCache() {\n // Clean up any base64 image that were converted to blobs using createObjectURL\n base64Cache.filter(image => {\n if (window.URL && typeof window.URL.revokeObjectURL === 'function')\n URL.revokeObjectURL(image);\n return false;\n });\n\n this._cache.forEach((value, key) => {\n if ('string' !== typeof key || !isSubTheme(key)) {\n this._deleteCache(key);\n }\n });\n // Regenerate sub themes\n this._cache.forEach((value, key) => {\n if ('string' === typeof key && isSubTheme(key)) {\n this.setSubTheme(key.replace('subTheme', ''), value.original, false); // Dont trigger the update...the parent theme will trigger\n }\n });\n }\n\n async updateSubTheme(subThemeName, value, triggerUpdate = true) {\n if (!subThemeName) {\n logger.warn('Sub theme name not specified');\n return;\n }\n if ('object' !== typeof value || !Object.keys(value).length) {\n logger.warn(\n `Could not update subTheme ${subThemeName} due to invalid value`\n );\n return;\n }\n\n const globalTheme = this.getTheme();\n let currentTheme = {};\n\n if (this._cache.has(`subTheme${subThemeName}`)) {\n currentTheme = this._cache.get(`subTheme${subThemeName}`).original;\n }\n\n const subTheme = this._processTheme.call(this, [\n globalTheme,\n currentTheme,\n value\n ]);\n\n if (subTheme.font && subTheme.font.length) {\n await this._loadFonts(subTheme.font);\n }\n\n this._setCache(`subTheme${subThemeName}`, {\n original: clone(currentTheme, value),\n result: subTheme\n });\n\n if (triggerUpdate) this._emit(`themeUpdate${subThemeName}`);\n\n return subTheme;\n }\n\n removeSubTheme(subThemeName) {\n if (this._cache.has(`subTheme${subThemeName}`)) {\n this._deleteCache(`subTheme${subThemeName}`);\n }\n this._emit(`themeUpdate${subThemeName}`);\n }\n\n _getComponentUUID(id) {\n return `componentStyle${id}`;\n }\n\n _processTheme(themeArray = [], extensions) {\n if (!Array.isArray(themeArray)) {\n throw new Error(\n `context processTheme expected an array. Received ${typeof themeArray}`\n );\n }\n\n const theme = merge.all([baseTheme, ...themeArray]);\n\n // Parse all colors in theme\n const themeFunctions = {};\n const themeString = JSON.stringify(theme, (key, originalValue) => {\n let value = originalValue;\n // Replacer\n if (value && typeof value === 'object') {\n const replacement = originalValue;\n for (var k in value) {\n if (Object.hasOwnProperty.call(value, k) && THEME_KEY_REPLACER[k]) {\n replacement[k && THEME_KEY_REPLACER[k]] = value[k];\n delete replacement[k]; // Removes the original key that was replaced. example: fontFamily is replaced by fontFace so fontFamily is removed from the theme\n }\n }\n\n value = replacement;\n }\n // Base64 encoded values can cause memory leaks convert to an image\n const { isImage, mimeType } = checkBase64EncodedImage(value);\n if (\n window.URL &&\n typeof window.URL.createObjectURL === 'function' &&\n isImage\n ) {\n // base64Cache\n try {\n const blobURL = base64ToBlobURL(value, mimeType);\n base64Cache.push(blobURL);\n return blobURL;\n } catch (error) {\n return value;\n }\n }\n\n if (\n Array.isArray(value) &&\n 2 === value.length &&\n !value[0].targetComponent &&\n value[0].length &&\n typeof value[0] === 'string' &&\n value[0].substr(0, 1) === '#' &&\n typeof value[1] === 'number'\n ) {\n // Better check to filter out extensions?\n return getHexColor(value[0], value[1]);\n } else if (\n 'extensions' === key ||\n 'function' === typeof value ||\n ('object' === typeof value &&\n value !== null &&\n 'Object' !== value.constructor.name &&\n !Array.isArray(value))\n ) {\n // Functions will not stringify, they will be merged after\n themeFunctions[key] = value;\n return;\n } else if ('string' === typeof value && value.includes('theme.')) {\n const themeValue = getValFromObjPath({ theme }, value);\n if (themeValue) {\n return themeValue;\n } else {\n return value;\n }\n } else {\n const validColor = getValidColor(value);\n if (validColor) {\n return validColor;\n }\n return value;\n }\n });\n\n return { ...JSON.parse(themeString), ...themeFunctions, extensions };\n }\n}\n\nconst themeManagerInstance = new ThemeManager();\n\nexport { themeManagerInstance as default, ThemeManager };\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { capitalizeFirstLetter } from '../../utils';\nimport logger from './logger';\nimport metrics from './metrics';\nimport events from './events';\nimport themeManager from './theme-manager';\n\n/**\n * Class to create a context object. Context is a singleton that will hold settings and logic to be used across all Lightning UI components.\n */\n\n/**\n * @typedef ThemeObject\n * @type {any}\n */\nclass Context {\n /**\n * @type {ThemeObject}\n */\n get theme() {\n return themeManager.getTheme();\n }\n /**\n * theme cannot be set directly\n */\n set theme(value) {\n logger.warn(\n 'Context.theme must be set using context.setTheme or context.updateTheme'\n );\n }\n /**\n * @type {object}\n */\n get keyMetricsCallback() {\n return metrics.keyMetricsCallback;\n }\n /**\n * keyMetricsCallback cannot be set directly\n */\n set keyMetricsCallback(value) {\n logger.warn(\n 'Context.keyMetricsCallback must be set using context.setKeyMetricsCallback'\n );\n }\n /**\n * @type {boolean}\n */\n get debug() {\n return logger.debug;\n }\n\n set debug(value) {\n logger.debug = value;\n }\n /**\n * @type {function}\n * @param {string} name\n * @param {function} callback\n */\n on() {\n return events.on(...arguments);\n }\n /**\n * @type {function}\n */\n off() {\n return events.off(...arguments);\n }\n /**\n * @type {function}\n * @param {string} name\n * @param {string|object|number|boolean} payload\n */\n emit() {\n return events.emit(...arguments);\n }\n /**\n * @property {function}\n * @return {void}\n */\n log(...args) {\n logger.log(...args);\n }\n /**\n * @property {function}\n * @return {void}\n */\n info(...args) {\n logger.info(...args);\n }\n /**\n * @property {function}\n * @return {void}\n */\n warn(...args) {\n logger.warn(...args);\n }\n /**\n * @property {function}\n * @return {void}\n */\n error(...args) {\n logger.error(args);\n }\n /**\n * @property {object|array}\n * @return {object}\n */\n setTheme(value) {\n return themeManager.setTheme(value);\n }\n /**\n * @property {object|array}}\n * @return {object}\n */\n updateTheme(value) {\n return themeManager.updateTheme(value);\n }\n /**\n * @property {string}\n * @return {object}\n */\n getSubTheme(subThemeName) {\n return themeManager.getSubTheme(subThemeName);\n }\n /**\n * Expects an object where properties are child theme names. Values will be merged with the global themeManager.\n * @property {object}\n */\n setSubThemes(subThemesObj) {\n if ('object' !== typeof subThemesObj) {\n logger.warn('subThemes must be an object');\n return;\n }\n for (const subTheme in subThemesObj) {\n themeManager.setSubTheme(subTheme, subThemesObj[subTheme]);\n }\n }\n /**\n * @property {string}\n * @return {object}\n */\n setSubTheme(subThemeName, value) {\n return themeManager.setSubTheme(subThemeName, value);\n }\n /**\n * @property {string}\n * @return {object}\n */\n updateSubTheme(subThemeName, value) {\n return themeManager.updateSubTheme(subThemeName, value);\n }\n /**\n * @property {string}\n * @return {void}\n */\n removeSubTheme(subThemeName) {\n themeManager.removeSubTheme(subThemeName);\n }\n /**\n * @property {function}\n * @return {void}\n */\n setLogCallback(value) {\n logger.logCallback = value;\n }\n /**\n * @property {function}\n * @return {void}\n */\n setKeyMetricsCallback(value) {\n metrics.keyMetricsCallback = value;\n }\n /**\n * @property {function}\n * @return {object}\n */\n config(config = {}) {\n const configKeys = Object.keys(config);\n for (let i = 0; i < configKeys.length; i++) {\n const setMethod = this['set' + capitalizeFirstLetter(configKeys[i])];\n if (setMethod) {\n setMethod(config[configKeys[i]]);\n }\n }\n return this;\n }\n}\n\nconst contextInstance = new Context();\n\nexport { contextInstance as default, Context };\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nclass Logger {\n constructor() {\n this._logCallback = undefined;\n this._prefix = 'LightningUI';\n this._debug = false;\n }\n\n get debug() {\n return this._debug;\n }\n\n set debug(value) {\n this._debug = Boolean(value);\n }\n\n get logCallback() {\n return this._logCallback;\n }\n\n set logCallback(value) {\n if ('function' !== typeof value) {\n this.warn(\n `logCallback value must be a function, instead received ${typeof value}`\n );\n return;\n }\n this._logCallback = value;\n }\n\n log(...args) {\n if (this._logCallback) {\n this._logCallback({ level: 'log', payload: args });\n }\n if (this.debug) {\n // eslint-disable-next-line\n console.log(this._prefix, ...args);\n }\n }\n\n info(...args) {\n if (this._logCallback) {\n this._logCallback({ level: 'info', payload: args });\n }\n if (this.debug) {\n // eslint-disable-next-line\n console.info(this._prefix, ...args);\n }\n }\n\n warn(...args) {\n if (this._logCallback) {\n this._logCallback({ level: 'warn', payload: args });\n }\n if (this.debug) {\n console.warn(this._prefix, ...args);\n }\n }\n\n error(...args) {\n if (this._logCallback) {\n this._logCallback({ level: 'error', payload: args });\n }\n if (this.debug) {\n console.error(this._prefix, ...args);\n }\n }\n}\n\nconst loggerInstance = new Logger();\n\nexport { loggerInstance as default, Logger };\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport context from '../context';\n\nclass GlobalUpdateManager {\n constructor() {\n this._updateThemeSet = new Set();\n this._requestUpdateSet = new Set();\n this._timeout = null;\n this._runUpdatesTimeoutHandler = this._runUpdatesTimeoutHandler.bind(this);\n }\n\n _runUpdatesTimeoutHandler() {\n this._timeout = null;\n this._updateThemeSet.forEach(component => {\n try {\n component._updateThemeComponent();\n } catch (e) {\n context.error('Error updating component themes', e);\n }\n });\n this._updateThemeSet.clear();\n\n this._requestUpdateSet.forEach(component => {\n try {\n component.requestUpdate();\n } catch (e) {\n context.error('Error updating component', e);\n }\n });\n this._requestUpdateSet.clear();\n }\n\n /**\n * Force all updates now\n *\n * @returns\n */\n flush() {\n // If there is no timeout then there is definately nothing to update\n if (!this._timeout) return;\n clearTimeout(this._timeout);\n this._runUpdatesTimeoutHandler();\n }\n\n addUpdateTheme(component) {\n this._updateThemeSet.add(component);\n if (!this._timeout) {\n this._timeout = setTimeout(this._runUpdatesTimeoutHandler, 0);\n }\n }\n\n deleteUpdateTheme(component) {\n // Don't bother checking and clearing the timeout if one is active\n // Not worth the overhead. More than likely it needs to run again anyway.\n this._updateThemeSet.delete(component);\n }\n\n addRequestUpdate(component) {\n this._requestUpdateSet.add(component);\n if (!this._timeout) {\n this._timeout = setTimeout(this._runUpdatesTimeoutHandler, 0);\n }\n }\n\n deleteRequestUpdate(component) {\n // See note in deleteRequestUpdate()\n this._requestUpdateSet.delete(component);\n }\n\n hasQueuedRequestFor(component) {\n return this._requestUpdateSet.has(component);\n }\n}\n\nexport const updateManager = new GlobalUpdateManager();\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/* global SpeechSynthesisErrorEvent */\nfunction flattenStrings(series = []) {\n const flattenedSeries = [];\n\n for (var i = 0; i < series.length; i++) {\n if (typeof series[i] === 'string' && !series[i].includes('PAUSE-')) {\n flattenedSeries.push(series[i]);\n } else {\n break;\n }\n }\n // add a \"word boundary\" to ensure the Announcer doesn't automatically try to\n // interpret strings that look like dates but are not actually dates\n // for example, if \"Rising Sun\" and \"1993\" are meant to be two separate lines,\n // when read together, \"Sun 1993\" is interpretted as \"Sunday 1993\"\n return [flattenedSeries.join(',\\b ')].concat(series.slice(i));\n}\n\nfunction delay(pause) {\n return new Promise(resolve => {\n setTimeout(resolve, pause);\n });\n}\n\n/**\n * Speak a string\n *\n * @param {string} phrase Phrase to speak\n * @param {SpeechSynthesisUtterance[]} utterances An array which the new SpeechSynthesisUtterance instance representing this utterance will be appended\n * @return {Promise} Promise resolved when the utterance has finished speaking, and rejected if there's an error\n */\nfunction speak(phrase, utterances, lang = 'en-US') {\n const synth = window.speechSynthesis;\n return new Promise((resolve, reject) => {\n const utterance = new SpeechSynthesisUtterance(phrase);\n utterance.lang = lang;\n utterance.onend = () => {\n resolve();\n };\n utterance.onerror = e => {\n reject(e);\n };\n utterances.push(utterance);\n synth.speak(utterance);\n });\n}\n\nfunction speakSeries(series, lang, root = true) {\n const synth = window.speechSynthesis;\n const remainingPhrases = flattenStrings(\n Array.isArray(series) ? series : [series]\n );\n const nestedSeriesResults = [];\n /*\n We hold this array of SpeechSynthesisUtterances in order to prevent them from being\n garbage collected prematurely on STB hardware which can cause the 'onend' events of\n utterances to not fire consistently.\n */\n const utterances = [];\n let active = true;\n\n const seriesChain = (async () => {\n try {\n while (active && remainingPhrases.length) {\n const phrase = await Promise.resolve(remainingPhrases.shift());\n if (!active) {\n // Exit\n // Need to check this after the await in case it was cancelled in between\n break;\n } else if (typeof phrase === 'string' && phrase.includes('PAUSE-')) {\n // Pause it\n let pause = phrase.split('PAUSE-')[1] * 1000;\n if (isNaN(pause)) {\n pause = 0;\n }\n await delay(pause);\n } else if (typeof phrase === 'string' && phrase.length) {\n // Speak it\n const totalRetries = 3;\n let retriesLeft = totalRetries;\n while (active && retriesLeft > 0) {\n try {\n await speak(phrase, utterances, lang);\n retriesLeft = 0;\n } catch (e) {\n // eslint-disable-next-line no-undef\n if (e instanceof SpeechSynthesisErrorEvent) {\n if (e.error === 'network') {\n retriesLeft--;\n console.warn(\n `Speech synthesis network error. Retries left: ${retriesLeft}`\n );\n await delay(500 * (totalRetries - retriesLeft));\n } else if (\n e.error === 'canceled' ||\n e.error === 'interrupted'\n ) {\n // Cancel or interrupt error (ignore)\n retriesLeft = 0;\n } else {\n throw new Error(`SpeechSynthesisErrorEvent: ${e.error}`);\n }\n } else {\n throw e;\n }\n }\n }\n } else if (typeof phrase === 'function') {\n const seriesResult = speakSeries(phrase(), lang, false);\n nestedSeriesResults.push(seriesResult);\n await seriesResult.series;\n } else if (Array.isArray(phrase)) {\n // Speak it (recursively)\n const seriesResult = speakSeries(phrase, lang, false);\n nestedSeriesResults.push(seriesResult);\n await seriesResult.series;\n }\n }\n } finally {\n active = false;\n }\n })();\n return {\n series: seriesChain,\n get active() {\n return active;\n },\n append: toSpeak => {\n remainingPhrases.push(toSpeak);\n },\n cancel: () => {\n if (!active) {\n return;\n }\n if (root) {\n synth.cancel();\n }\n nestedSeriesResults.forEach(nestedSeriesResults => {\n nestedSeriesResults.cancel();\n });\n active = false;\n }\n };\n}\n\nlet currentSeries;\nexport default function (toSpeak, lang) {\n currentSeries && currentSeries.cancel();\n currentSeries = speakSeries(toSpeak, lang);\n return currentSeries;\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Don't wrap patterns with word boundaries (\\b) or set any RegExp flags.\n// Each pattern will be wrapped with \\b and use the global (g) flag when created as a capture group in combined pattern.\nconst defaultAbbreviations = [\n { pattern: 'TV-14', replacer: 'Rated TV-14' },\n { pattern: 'CC', replacer: 'Closed Captions available' },\n { pattern: 'HD', replacer: 'High Definition available' },\n { pattern: /ENG(?!\\+)/, replacer: 'English Available' },\n { pattern: /ENG\\+ES/, replacer: 'Available in English and Spanish' },\n { pattern: 'AD', replacer: 'Audio Description available' },\n { pattern: 'RT', replacer: 'Rotten Tomatoes' },\n {\n pattern: /(S)+(\\d+)+(E)+(\\d+)+/,\n replacer: (match, p1, p2, p3, p4) => `Season ${p2} Episode ${p4}`\n }\n];\n\nexport const defaultAbbrevConfig = generateAbbrevConfig(defaultAbbreviations);\n\nfunction wrapWithBoundary(str) {\n return `\\\\b${str}\\\\b`;\n}\n\nfunction getNumberOfCaptureGroups(regExp) {\n return new RegExp(regExp.toString() + '|').exec('').length - 1;\n}\n\n/**\n * @typedef {object} AbbreviationConfig\n * @property {object} abbreviationsPattern - combined RegExp pattern of all abbreviations separated into capture groups\n * @property {object} stringPatternMap - object to look up replacers values based on string matches (uses matched string to look up)\n * @property {object} regExpPatternMap - object to look up replacers values based on RegExp matches (uses index of matched capture group to look up)\n */\n\n/**\n * Generates abbreviation config object to be passed to withAnnouncer for abbreviation translation\n * @param {object[]} abbreviations - array of custom abbreviation objects to generate config off of\n * @param {string|object} abbreviations[].pattern - pattern to match abbreviation\n * @param {string|function} abbreviations[].replacer - string or RegEx replacer function to replace matched abbreviation with\n * @param {boolean} extendDefault - if true, extend the default abbreviations config with custom abbreviations\n * @returns {AbbreviationConfig} - configuration that may be passed to withAnnouncer as abbreviations in options parameter\n */\nexport function generateAbbrevConfig(\n abbreviations = defaultAbbreviations,\n extendDefault\n) {\n const abbrev = extendDefault\n ? [...defaultAbbreviations, ...abbreviations]\n : abbreviations;\n const stringPatternMap = {}; // map of exact strings to the associated replacer\n const regExpPatternMap = {}; // map of RegExp patterns to the associated replacer\n let abbreviationsPattern = ''; // string of final RegExp pattern with each pattern as a capture group\n let patternGroupOffset = 0; // incremented for each capture group found in RegExp patterns passed in\n\n // If the pattern is a RegExp pattern: key RegExp pattern with its index in passed in abbreviations array parameter.\n // The capture group for this pattern will be at this position (idx) in the combined RegExp pattern.\n // When a string is matched, the index of the matched capture group can be used to look up the correct replacer.\n //\n // Else (the pattern is a string): it can be keyed by it's pattern.\n // When a string is matched, the string matcher can be used to look up the correct replacer.\n abbrev.forEach(({ pattern, replacer }, idx) => {\n let stringPattern;\n if (pattern instanceof RegExp) {\n const patternMapIdx = idx + patternGroupOffset;\n regExpPatternMap[patternMapIdx] = { pattern, replacer };\n stringPattern = wrapWithBoundary(pattern.source);\n patternGroupOffset += getNumberOfCaptureGroups(pattern);\n } else {\n stringPatternMap[pattern] = { replacer };\n stringPattern = wrapWithBoundary(pattern);\n }\n\n // create single string for final RegExp - each pattern will be a capture group\n abbreviationsPattern =\n abbreviationsPattern === ''\n ? `(${stringPattern})`\n : `${abbreviationsPattern}|(${stringPattern})`;\n });\n\n abbreviationsPattern = new RegExp(abbreviationsPattern, 'g');\n return { abbreviationsPattern, stringPatternMap, regExpPatternMap };\n}\n\n/**\n * Translates abbreviations in a string into their associated words\n * @param {string} phrase - phrase to be translated\n * @param {object} - abbreviationsPattern, stringPatternMap and regExpPatternMap\n * @returns {string} - phrase where abbreviations have been replaced with words\n */\nexport const translateAbbrev = (phrase, translationConfig) => {\n const { abbreviationsPattern, stringPatternMap, regExpPatternMap } =\n translationConfig;\n\n const translated = phrase.replace(\n abbreviationsPattern,\n (matched, ...args) => {\n // replace exact string match with replacement string\n if (stringPatternMap[matched]) {\n return stringPatternMap[matched].replacer;\n }\n\n // else match was found using a more complex RegExp pattern\n // find replacer by index of matching capture group\n const patternIdx = args.findIndex(arg => !!arg);\n const { pattern, replacer } = regExpPatternMap[patternIdx];\n\n // replace matched string with replacer string\n if (typeof replacer === 'string') {\n return replacer;\n }\n\n // use replace again for replacer function it can utilize substring matches in its scope\n if (typeof replacer === 'function') {\n return matched.replace(pattern, replacer);\n }\n }\n );\n return translated;\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport Speech from './Speech';\nimport { translateAbbrev } from './abbreviations';\nimport { debounce } from '../../utils';\n\nexport { generateAbbrevConfig, defaultAbbrevConfig } from './abbreviations';\n\nconst fiveMinutes = 300 * 1000;\n\nfunction elmName(elm) {\n return elm.ref || elm.constructor.name;\n}\n\nconst defaultOptions = {\n voiceOutDelay: 500,\n abbreviationsConfig: {}\n};\n\nexport default function withAnnouncer(Base, speak = Speech, options = {}) {\n const announcerOptions = { ...defaultOptions, ...options };\n\n return class extends Base {\n _construct() {\n this._announceEndedTimeout;\n this._currentlySpeaking = '';\n super._construct && super._construct();\n }\n\n _voiceOut(toAnnounce) {\n if (this._voiceOutDisabled) {\n return;\n }\n let toSpeak = toAnnounce;\n if (announcerOptions.abbreviationsConfig.abbreviationsPattern) {\n toSpeak = Array.isArray(toAnnounce)\n ? toAnnounce.map(phrase =>\n translateAbbrev(phrase, announcerOptions.abbreviationsConfig)\n )\n : translateAbbrev(toAnnounce, announcerOptions.abbreviationsConfig);\n }\n const speech = speak(toSpeak, options.language);\n // event using speech synthesis api promise\n if (speech && speech.series) {\n speech.series.then(() => {\n this.stage.emit('announceEnded');\n });\n }\n\n // event in case speech synthesis api is flakey,\n // assume the ammount of time it takes to read each word\n const toAnnounceStr = Array.isArray(toSpeak)\n ? toSpeak.concat().join(' ')\n : toSpeak;\n const toAnnounceWords = toAnnounceStr.split(' ');\n const timeoutDelay =\n toAnnounceWords.length * announcerOptions.voiceOutDelay;\n clearTimeout(this._announceEndedTimeout);\n this._announceEndedTimeout = setTimeout(() => {\n this.stage.emit('announceTimeoutEnded');\n }, timeoutDelay);\n\n return speech;\n }\n\n _build() {\n super._build && super._build();\n\n this._debounceAnnounceFocusChanges = debounce(\n this._announceFocusChanges.bind(this),\n Number.isInteger(this.announcerFocusDebounce)\n ? this.announcerFocusDebounce\n : 400\n );\n\n this.announcerTimeout = Number.isInteger(this.announcerTimeout)\n ? this.announcerTimeout\n : fiveMinutes;\n\n this._resetFocusTimer = debounce(() => {\n // Reset focus path for full announce\n this._lastFocusPath = undefined;\n }, this.announcerTimeout);\n }\n\n _firstEnable() {\n super._firstEnable && super._firstEnable();\n\n // Lightning only calls Focus Change on second focus\n this._focusChange();\n }\n\n _disable() {\n clearTimeout(this._announceEndedTimeout);\n this.stage.emit('announceEnded');\n this.stage.emit('announceTimeoutEnded');\n }\n\n set announcerEnabled(val) {\n this._announcerEnabled = val;\n this._focusChange();\n }\n\n get announcerEnabled() {\n return this._announcerEnabled;\n }\n\n _focusChange() {\n if (!this._resetFocusTimer) {\n return;\n }\n\n this._resetFocusTimer();\n this.$announcerCancel();\n this._debounceAnnounceFocusChanges();\n }\n\n _announceFocusChanges() {\n const focusPath = this.application.focusPath || [];\n const lastFocusPath = this._lastFocusPath || [];\n const loaded = focusPath.every(elm => !elm.loading);\n const focusDiff = focusPath.filter(elm => !lastFocusPath.includes(elm));\n\n if (!loaded) {\n this._debounceAnnounceFocusChanges();\n return;\n }\n\n this._lastFocusPath = focusPath.slice(0);\n // Provide hook for focus diff for things like TextBanner\n this.focusDiffHook = focusDiff;\n\n if (!this.announcerEnabled) {\n return;\n }\n\n let toAnnounce = focusDiff.reduce((acc, elm) => {\n if (elm.announce) {\n acc.push([elmName(elm), 'Announce', elm.announce]);\n } else if (elm.title) {\n acc.push([elmName(elm), 'Title', elm.title || '']);\n }\n return acc;\n }, []);\n\n focusDiff.reverse().reduce((acc, elm) => {\n if (elm.announceContext) {\n acc.push([elmName(elm), 'Context', elm.announceContext]);\n } else {\n acc.push([elmName(elm), 'No Context', '']);\n }\n return acc;\n }, toAnnounce);\n\n if (this.debug) {\n console.table(toAnnounce);\n }\n\n toAnnounce = toAnnounce.reduce((acc, a) => {\n const txt = a[2];\n txt && acc.push(txt);\n return acc;\n }, []);\n\n if (toAnnounce.length) {\n this.$announcerCancel();\n this._currentlySpeaking = this._voiceOut(\n toAnnounce.reduce((acc, val) => acc.concat(val), [])\n );\n }\n }\n\n $announce(toAnnounce, { append = false, notification = false } = {}) {\n if (!toAnnounce || !toAnnounce.trim().length) {\n return;\n }\n if (this.announcerEnabled) {\n this._debounceAnnounceFocusChanges.flush();\n if (\n append &&\n this._currentlySpeaking &&\n this._currentlySpeaking.active\n ) {\n this._currentlySpeaking.append(toAnnounce);\n } else {\n this.$announcerCancel();\n this._currentlySpeaking = this._voiceOut(toAnnounce);\n }\n\n if (notification) {\n this._voiceOutDisabled = true;\n this._currentlySpeaking.series.finally(() => {\n this._voiceOutDisabled = false;\n this.$announcerRefresh();\n });\n }\n }\n }\n\n $announcerCancel() {\n this._currentlySpeaking && this._currentlySpeaking.cancel();\n }\n\n $announcerRefresh(depth) {\n if (depth) {\n this._lastFocusPath = this._lastFocusPath.slice(0, depth);\n } else {\n this._lastFocusPath = undefined;\n }\n this._resetFocusTimer();\n this._focusChange();\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport context from '../../globals/context/index';\n\nexport default function withHandleKey(Base) {\n return class extends Base {\n static get name() {\n return Base.name;\n }\n\n _handleKey(keyEvent) {\n return this._processEvent(keyEvent);\n }\n\n _handleKeyRelease(keyEvent) {\n return this._processEvent(keyEvent, 'Release');\n }\n\n _processEvent(keyEvent, suffix = '') {\n const keyMap = this.stage.application.__keymap || {};\n let key = keyMap[keyEvent.keyCode];\n if (!key) {\n key = keyEvent.key;\n }\n if (key && typeof this[`on${key}${suffix}`] === 'function') {\n this._invokeKeyPayloadCallback(key + suffix);\n return this[`on${key}${suffix}`].call(this, this, keyEvent);\n }\n return false;\n }\n\n _invokeKeyPayloadCallback(key) {\n if (\n this.metricsPayload &&\n typeof context.keyMetricsCallback === 'function'\n ) {\n context.keyMetricsCallback(key, this.metricsPayload);\n }\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nfunction getPropertyDescriptor(path) {\n return {\n get() {\n return this.tag(path);\n },\n configurable: true,\n enumerable: true\n };\n}\n\nexport default function withTags(Base) {\n return class extends Base {\n static get name() {\n return Base.name;\n }\n\n _construct() {\n const prototype = Object.getPrototypeOf(this);\n if (!prototype._withTagsInitialized) {\n const tags = this.constructor.tags || [];\n tags.forEach(tag => {\n if (typeof tag === 'object') {\n var { name, path } = tag;\n } else {\n var name = tag; // eslint-disable-line no-redeclare\n var path = tag; // eslint-disable-line no-redeclare\n }\n const key = '_' + name;\n const descriptor = getPropertyDescriptor(path);\n Object.defineProperty(prototype, key, descriptor);\n });\n prototype._withTagsInitialized = true;\n }\n super._construct && super._construct();\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { clone, getValFromObjPath, getHexColor } from '../../utils';\nimport log from '../../globals/context/logger';\n\n/**\nGiven a character, return its ASCII value multiplied by its position.\n *\n@param {string} char - The character to process.\n@param {number} index - The position of the character in the string.\n@returns {number} - The ASCII value of the character multiplied by its position.\n */\nexport const getCharacterValue = (char, index) => {\n return char.charCodeAt(0) * (index + 1);\n};\n\n/**\n * Recursively sorts an object by its keys. If an object has nested objects as values,\n * it will sort those nested objects as well.\n *\n * @param {Object} obj - The object to be sorted.\n * @returns {Object} A new object that is a sorted version of the input object.\n */\nexport const sortObject = obj => {\n const sortedObj = {};\n Object.keys(obj)\n .sort()\n .forEach(key => {\n if (\n typeof obj[key] === 'object' &&\n obj[key] !== null &&\n !Array.isArray(obj[key])\n ) {\n sortedObj[key] = sortObject(obj[key]); // Recursive call for nested objects\n } else {\n sortedObj[key] = obj[key];\n }\n });\n return sortedObj;\n};\n\n/**\nGiven an object, return a sum of the ASCII values of all characters in its\nJSON stringified representation, each multiplied by its position.\n*\n@param {object} obj - The object to process.\n@returns {number} - The sum of ASCII values, each multiplied by its position.\n*/\nexport const getCharacterSum = obj => {\n const sortedObj = sortObject(obj);\n const str = JSON.stringify(sortedObj).replace(/[{}:\",\\s]/g, ''); // Remove brackets, colons, and whitespace\n let sum = 0;\n for (let i = 0; i < str.length; i++) {\n sum += getCharacterValue(str[i], i);\n }\n return sum;\n};\n\n/**\nGiven an object, return a \"hash\" of the object, which is a combination of\nthe length of its JSON stringified representation and the sum of the ASCII\nvalues of all characters in that string, each multiplied by its position.\n*\n@param {object} obj - The object to process.\n@returns {string} - The hash of the object.\n*/\nexport const getHash = obj => {\n const str = JSON.stringify(obj);\n return str.length + '-' + getCharacterSum(obj);\n};\n\n/**\n * Recursively executes functions within an object or array structure, passing them a given context.\n * @param {Function|Object|Array} objOrFunction - The object, array, or function to process.\n * @param {*} theme - The context to pass to any encountered functions.\n * @returns {*} The processed structure with functions executed.\n */\nexport function executeWithContextRecursive(objOrFunction, theme) {\n if (typeof objOrFunction === 'function') {\n // If the input is a function, execute it with the theme as a parameter\n const result = objOrFunction(theme);\n return executeWithContextRecursive(result, theme);\n } else if (Array.isArray(objOrFunction)) {\n // If the input is an array, iterate through its elements and apply the function recursively.\n return objOrFunction.map(item => executeWithContextRecursive(item, theme));\n } else if (typeof objOrFunction === 'object' && objOrFunction !== null) {\n // If the input is an object (and not null), iterate through its properties and apply the function recursively.\n const result = {};\n for (const key in objOrFunction) {\n if (objOrFunction.hasOwnProperty(key)) {\n result[key] = executeWithContextRecursive(objOrFunction[key], theme);\n }\n }\n return result;\n } else {\n // Return the value as is if it's neither a function, an object, nor an array.\n return objOrFunction;\n }\n}\n\n/**\n * Checks if a value is a plain object.\n *\n * @param {*} value - The value to check.\n * @returns {boolean} - True if the value is a plain object, false otherwise.\n */\nexport function isPlainObject(value) {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof Date) &&\n !(value instanceof RegExp) &&\n !(value instanceof Function) &&\n !(value instanceof Error)\n );\n}\n\n/**\n * Returns the subTheme property of the first parent object that has one, or undefined if none exist.\n *\n * @param {object} obj - The object to search for a subTheme property.\n * @returns {(String | Undefined)} - The value of the subTheme property, or undefined if none exists.\n */\nexport const getSubTheme = obj => {\n while (obj && (!obj.subTheme || typeof obj.subTheme !== 'string')) {\n obj = obj.p;\n }\n return obj ? obj.subTheme : undefined;\n};\n\n/**\n * Returns the component configuration object for the given object based on its prototype chain.\n *\n * @param {object} obj - The object to get the component configuration for.\n * @returns {object} - The component configuration object.\n */\nexport const getComponentConfig = obj => {\n if (!isPlainObject(obj)) return {};\n return obj?.theme?.componentConfig?.[obj.constructor.__componentName] || {};\n};\n\n/**\n * Returns an array of the names of all components in the prototype chain of the given object.\n * @param {object} obj - The object to get the prototype chain from.\n * @returns {string[]} - An array of component names.\n */\nexport const getPrototypeChain = obj => {\n if (!isPlainObject(obj)) return [];\n const prototypeChain = new Set();\n let proto = obj;\n\n if (obj.constructor && obj.constructor.__componentName) {\n prototypeChain.add(obj.constructor.__componentName);\n }\n\n /**\n * Traverse the prototype chain and add component names to the set\n */\n do {\n proto = Object.getPrototypeOf(proto);\n if (proto !== null && typeof proto === 'object') {\n // Add only components that support theming\n if (proto.constructor.__componentName) {\n prototypeChain.add(proto.constructor.__componentName);\n }\n }\n } while (proto);\n\n // Convert the set to an array and return it\n return Array.from(prototypeChain);\n};\n\n/**\n * Recursively removes properties from an object that are themselves empty objects.\n * Does not remove arrays, non-plain objects, or non-empty objects.\n *\n * @param {Object} obj - The object to clean of empty objects.\n * @returns {Object} The cleaned object.\n */\nexport function removeEmptyObjects(obj) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && isPlainObject(obj[key])) {\n removeEmptyObjects(obj[key]); // Recurse into the object\n\n // After recursion, if the object is empty, delete it from the parent\n if (Object.keys(obj[key]).length === 0) {\n delete obj[key];\n }\n }\n }\n\n return obj; // Always return obj, even if it's empty\n}\n\n// This map will store hashes of objects to detect duplicates.\n\nexport function createSharedReferences(obj = {}) {\n const seenObjects = new Map();\n\n // Generates a hash for an object.\n // Sorting keys ensures consistent hash regardless of property order.\n function hash(object) {\n return JSON.stringify(object, Object.keys(object).sort());\n }\n\n function process(currentObj) {\n for (const key in currentObj) {\n if (currentObj.hasOwnProperty(key)) {\n const value = currentObj[key];\n if (typeof value === 'object' && value !== null) {\n // Ensure it's an object\n const valueHash = hash(value);\n if (seenObjects.has(valueHash)) {\n // If we've seen this object before, replace the current reference\n // with the original reference.\n currentObj[key] = seenObjects.get(valueHash);\n } else {\n seenObjects.set(valueHash, value);\n process(value); // Recursively process this object\n }\n }\n }\n }\n }\n\n process(obj);\n\n return obj;\n}\n\n/**\n * Combines the provided properties and returns a list of unique properties.\n *\n * @param {string[]} defaultProps - Default property names.\n * @param {Object} additionalProps - Object whose keys are additional property names.\n * @param {string[]} subProps - Sub property names.\n * @returns {string[]} - Array of unique property names.\n */\nexport function getUniqueProperties(defaultProps = []) {\n if (!Array.isArray(defaultProps)) {\n throw new TypeError('Expected defaultProps to be an array of strings.');\n }\n\n return [...new Set(defaultProps)];\n}\n\n/**\n * Generate the payload by cloning and merging multiple objects.\n *\n * @param {Object} base - The base object to start with.\n * @param {Object} defaultStyle - Default styles provided by the user.\n * @param {string} toneItem - The current tone being processed.\n * @param {string} modeItem - The current mode being processed.\n * @param {Object} tone - Tone configurations.\n * @param {Object} mode - Mode configurations.\n * @returns {Object} - The merged payload.\n */\nexport function generatePayload(\n base,\n defaultStyle,\n toneItem,\n modeItem,\n tone,\n mode\n) {\n let payload = clone(defaultStyle, base);\n payload = clone(payload, tone?.[toneItem]);\n payload = clone(payload, mode?.[modeItem]);\n payload = clone(payload, tone?.[toneItem]?.mode?.[modeItem] || {});\n payload = clone(payload, mode?.[modeItem]?.tone?.[toneItem] || {});\n return payload;\n}\n\n/**\n * Recursively searches for and returns all the property keys nested within the specified key in the object.\n *\n * @param {Object} obj - The object to search through.\n * @param {string} keyToFind - The key whose nested keys are to be found.\n * @returns {string[]} An array containing all nested property keys under the specified key.\n */\nfunction findNestedKeys(obj, keyToFind) {\n const nestedKeys = [];\n\n /**\n * Inner function to recursively search for nested keys.\n *\n * @param {Object} obj - The nested object to search through.\n */\n function searchNestedKeys(obj) {\n if (typeof obj === 'object' && obj !== null) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n nestedKeys.push(key); // Add the nested key to the array\n }\n }\n }\n }\n\n /**\n * Outer function to initiate search when the specified key is found.\n *\n * @param {Object} obj - The object to search through.\n */\n function searchForKey(obj) {\n if (typeof obj === 'object' && obj !== null) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (key === keyToFind) {\n searchNestedKeys(obj[key]); // Start searching for nested keys\n break; // Once the specified key is found, we don't need to look further at this level\n }\n searchForKey(obj[key]); // Continue searching for the specified key\n }\n }\n }\n }\n\n searchForKey(obj); // Initialize the search with the object\n return nestedKeys; // Return the array of nested keys\n}\n\n/**\n * Generates a solution based on the provided configurations.\n *\n * @param {Object} options - The configuration options for generating the solution.\n * @param {Object} [options.base={}] - Base object.\n * @param {Object} [options.tone={}] - Tone configurations.\n * @param {Object} [options.mode={}] - Mode configurations.\n * @param {Object} [options.defaultStyle={}] - Default styles provided by the user.\n * @returns {Object} - The generated solution with shared references and merged identical properties.\n */\nexport const generateSolution = (\n { base = {}, tone = {}, mode = {}, defaultStyle = {} },\n modeKeys = [],\n toneKeys = []\n) => {\n const solution = {};\n\n const uniqueModes = getUniqueProperties([\n 'focused',\n 'disabled',\n ...modeKeys,\n 'unfocused' // Unfocused must be at the end for proper fallback since base === 'unfocused' in many cases\n ]);\n\n const uniqueTones = getUniqueProperties([\n 'neutral',\n 'inverse',\n 'brand',\n ...toneKeys\n ]);\n\n for (const modeItem of uniqueModes) {\n for (const toneItem of uniqueTones) {\n const payload = generatePayload(\n base,\n defaultStyle,\n toneItem,\n modeItem,\n tone,\n mode\n );\n solution[`${modeItem}_${toneItem}`] = payload;\n }\n }\n\n return solution;\n};\n\nconst DEFAULT_KEYS = [\n // ORDER MATTERS\n 'unfocused_neutral',\n 'unfocused_inverse',\n 'unfocused_brand',\n 'focused_neutral',\n 'focused_inverse',\n 'focused_brand',\n 'disabled_neutral',\n 'disabled_inverse',\n 'disabled_brand'\n];\n\n/**\n * Enforce a contract on an input object by ensuring that it contains a set of specified keys\n * and, if not, substituting them with values from fallback keys in a predefined order.\n *\n * @param {Object} inputObj - The input object to enforce the contract on.\n * @returns {Object} - An object that adheres to the contract, with missing keys replaced by fallback values.\n */\nexport function enforceContract(inputObj) {\n const result = {};\n for (const key of [...DEFAULT_KEYS, ...Object.keys(inputObj)]) {\n if (!inputObj.hasOwnProperty(key)) {\n // Find the first fallback property that exists in inputObj\n const fallbackKey = DEFAULT_KEYS.find(fallback =>\n inputObj.hasOwnProperty(fallback)\n );\n if (fallbackKey) {\n const fallback = inputObj[fallbackKey];\n result[key] = typeof fallback !== 'object' ? {} : fallback;\n } else {\n result[key] = {};\n }\n } else {\n if (typeof inputObj[key] !== 'object') {\n // If the value is not an object, replace it with an empty object\n result[key] = {};\n } else {\n result[key] = inputObj[key];\n }\n }\n }\n return result;\n}\n\n/**\n * Generates the source style object for a given component by merging base, mode, and tone styles from the component's style chain\n * @param {object} component - The component for which to generate the style source\n * @returns {object} - The source style object for the component\n */\nexport const generateComponentStyleSource = ({\n theme = {},\n styleChain = [],\n inlineStyle = {},\n alias = []\n} = {}) => {\n if (typeof theme !== 'object') {\n throw new Error('Expected theme to be an object');\n }\n\n if (!Array.isArray(styleChain)) {\n throw new Error('Expected styleChain to be an array');\n }\n\n if (typeof inlineStyle !== 'object') {\n throw new Error('Expected inlineStyle to be an object');\n }\n\n if (!Array.isArray(alias)) {\n throw new Error('Expected alias to be an array');\n }\n\n /**\n * Component default styles\n */\n const componentDefault = styleChain.map(({ style }) => {\n if (\n typeof style === 'object' &&\n !style.base &&\n !style.mode &&\n !style.tone &&\n !style.default\n ) {\n return { base: style };\n } else {\n const { base = {}, mode = {}, tone = {} } = style;\n\n let componentConfigDefaultStyle;\n if (style) {\n const defaultStyle = JSON.parse(JSON.stringify(style));\n delete defaultStyle.base;\n delete defaultStyle.tone;\n delete defaultStyle.mode;\n componentConfigDefaultStyle = defaultStyle; // Anything in the root level of style\n }\n\n return {\n defaultStyle: componentConfigDefaultStyle || {},\n base,\n mode,\n tone\n };\n }\n });\n\n /**\n * Local / Instance level styles\n * DefaultStyle will apply to the next level in the hierarchy\n */\n let localDefaultStyle;\n if (inlineStyle) {\n const defaultStyle = JSON.parse(JSON.stringify(inlineStyle));\n delete defaultStyle.base;\n delete defaultStyle.tone;\n delete defaultStyle.mode;\n localDefaultStyle = defaultStyle; // Anything in the root level of style\n }\n\n const local = {\n defaultStyle: localDefaultStyle || {},\n base: inlineStyle?.base || {},\n mode: inlineStyle?.mode || {},\n tone: inlineStyle?.tone || {}\n };\n\n // Merge all the styles together into one array to loop\n const merged = [...componentDefault, local];\n\n // Execute all style functions with the theme\n const parsedStyles = merged.map(style => {\n return executeWithContextRecursive(style, theme);\n });\n\n // Find all the keys that are in mode/tone as well as nested under mode and tone this will help generate the final solution\n const modeKeys = findNestedKeys(parsedStyles, 'mode');\n const toneKeys = findNestedKeys(parsedStyles, 'tone');\n\n // Merge all the styles together into one object\n const solution = parsedStyles.reduce((acc, style) => {\n return clone(acc, generateSolution(style, modeKeys, toneKeys));\n }, {});\n\n const final = formatStyleObj(\n removeEmptyObjects(colorParser({ theme }, solution)) || {},\n alias\n );\n\n const cleanObj = createSharedReferences(final);\n\n return enforceContract(cleanObj);\n};\n\n/**\n * Parse and process a style object to replace theme strings and process color arrays.\n * @param {object} targetObject - In most cases, this will be a theme object.\n * @param {object} styleObj - The input style object to be processed.\n * @returns {object} The processed style object with theme strings replaced and color arrays processed.\n */\nexport const colorParser = (targetObject, styleObj) => {\n // Check if targetObject is an object\n if (typeof targetObject !== 'object' || targetObject === null) {\n throw new TypeError('targetObject must be an object.');\n }\n\n // Check if styleObj is an object\n if (typeof styleObj !== 'object' || styleObj === null) {\n throw new TypeError('styleObj must be an object.');\n }\n\n // Process style object and remove unnecessary properties\n const processedStyle = JSON.stringify(styleObj, (_, value) => {\n if (-1 < ['tone', 'mode'].indexOf(_)) return value; // Remove any tone/mode or mode/tone properties as they have already been processed\n\n // Handle theme strings, e.g., 'theme.radius.md'\n if (typeof value === 'string' && value.startsWith('theme.')) {\n // Retrieve the value from the target object using the theme path\n return getValFromObjPath(targetObject, value); // If no theme value exists, the property will be removed\n }\n\n function isValidColor(num) {\n return num >= 0 && num <= 0xffffffff;\n }\n\n // Handle color arrays, e.g., ['#663399', 1] or [255, 0.5]\n if (\n Array.isArray(value) &&\n value.length === 2 &&\n ((typeof value[0] === 'string' && value[0].startsWith('#')) ||\n (typeof value[0] === 'number' && isValidColor(value[0]))) &&\n typeof value[1] === 'number'\n ) {\n // Return processed hex color or the original value if processing fails\n return getHexColor(value[0], value[1]) || value;\n }\n\n // Return all other values as-is\n return value;\n });\n\n return JSON.parse(processedStyle || {});\n};\n\n/**\n * Generates the final style object for a component using its style source.\n * @param {object} component - The component for which to generate a style object.\n * @param {object} componentStyleSource - The style source object for the component.\n * @returns {object} - The generated style object.\n */\nexport const generateStyle = (component, componentStyleSource = {}) => {\n if (!isPlainObject(component)) return {};\n const { mode = 'unfocused', tone = 'neutral' } = component;\n return (\n componentStyleSource[`${mode}_${tone}`] ||\n componentStyleSource['unfocused_neutral'] ||\n {}\n );\n};\n\n/**\n * Generates a name by concatenating the names of constructors in the prototype chain.\n * @param {object} obj - The object for which to generate the name.\n * @returns {string} - The generated name.\n */\nexport function generateNameFromPrototypeChain(obj, name = '') {\n if (!obj) return name;\n const proto = Object.getPrototypeOf(obj);\n if (!proto || !proto.constructor) return name;\n const componentName = `${name ? name + '.' : ''}${\n proto?.constructor?.__componentName || ''\n }`\n .replace(/\\.*$/, '')\n .trim();\n const result = generateNameFromPrototypeChain(proto, componentName);\n return result;\n}\n/**\n * Creates a cache object to store the results of getStyleChainMemoized function calls.\n * @type {object}\n */\nconst styleChainCache = {};\n\n/**\n * Flush the memoization cache for styleChain\n *\n */\nexport const clearStyleChainCache = () => {\n for (const key in styleChainCache) {\n if (styleChainCache.hasOwnProperty(key)) {\n delete styleChainCache[key];\n }\n }\n};\n\n/**\n * Memoized version of getStyleChain function. Retrieves the style chain for a component by traversing its prototype chain.\n * @param {object} componentObj - The component object to get the style chain from.\n * @returns {{ style: (object | function) }[]} - An array of style objects containing either an object of styles or a function to return an object of styles.\n */\nexport const getStyleChainMemoized = componentObj => {\n /**\n * Create a cache key based on the stringified component object.\n * @type {string}\n */\n\n const cacheKey = generateNameFromPrototypeChain(componentObj);\n\n // Check if the result is already in the cache\n if (styleChainCache[cacheKey]) {\n return styleChainCache[cacheKey];\n }\n\n /**\n * Compute the style chain using the getStyleChain function.\n * @type {{ style: (object | function) }[]}\n */\n const styleChain = getStyleChain(componentObj);\n\n // Cache the result for future use\n styleChainCache[cacheKey] = styleChain;\n\n // Return the style chain\n return styleChain;\n};\n\n/**\n * Traverse up the prototype chain to create an array of all the styles that are present in the Components ancestors\n * @param {object} componentObj - The component object to get the style chain from.\n * @returns {{ style: (object | function) }[]} - An array of style objects containing either an object of styles or a function to return an object of styles.\n */\nexport const getStyleChain = componentObj => {\n const styleMap = new Map(); // Use a Map to store styles as JSON strings\n let proto;\n\n do {\n proto = !proto ? componentObj : Object.getPrototypeOf(proto);\n if (proto?.constructor === Object) break; // Stop traversing the prototype chain if we reach the Object prototype\n if (\n proto &&\n typeof proto === 'object' &&\n proto.hasOwnProperty('constructor')\n ) {\n // ComponentConfig Level\n const { style: componentConfigStyle } = getComponentConfig(proto);\n if (Object.keys(componentConfigStyle || {}).length) {\n if (!styleMap.has(componentConfigStyle)) {\n styleMap.set(componentConfigStyle, { style: componentConfigStyle });\n }\n }\n\n // Access the __themeStyle property from the current prototype's constructor\n const themeStyle =\n proto.constructor.hasOwnProperty('__themeStyle') &&\n proto.constructor.__themeStyle;\n\n if (Object.keys(themeStyle || {}).length) {\n if (!styleMap.has(themeStyle)) {\n styleMap.set(themeStyle, { style: { ...themeStyle } });\n }\n } else if (typeof themeStyle === 'function') {\n // If the style is a function, add it to the styleMap\n if (!styleMap.has(themeStyle)) {\n styleMap.set(themeStyle, { style: themeStyle });\n }\n }\n\n // Access the __mixinStyle property from the current prototype's constructor\n const mixinStyle =\n proto.constructor.hasOwnProperty('__mixinStyle') &&\n proto.constructor.__mixinStyle;\n\n if (Object.keys(mixinStyle || {}).length) {\n if (!styleMap.has(mixinStyle)) {\n styleMap.set(mixinStyle, { style: mixinStyle });\n }\n }\n }\n } while (proto);\n\n // Convert the values of the Map (unique styles) back to an array\n const uniqueStyles = Array.from(styleMap.values());\n\n // Return an array of unique style objects with a \"style\" property\n return uniqueStyles.map(style => style).reverse();\n};\n\n/**\n * Formats a style object by applying a series of formatter functions.\n *\n * @param {object} originalObj - The original style object to be formatted.\n * @param {array} [aliasStyles=[]] - An array of alias styles to be used during formatting.\n * @returns {object} The formatted style object after applying all formatter functions.\n */\nexport const formatStyleObj = (originalObj, aliasStyles = []) => {\n if (typeof originalObj !== 'object' || originalObj === null) {\n throw new Error('The originalObj parameter must be an object.');\n }\n\n const formatters = new Set();\n\n // Adding a key-value pair to the 'formatters' Set.\n // This pattern is used so more formatters can be easily added if required at a later time\n formatters.add([replaceAliasValues, [aliasStyles]]);\n\n // Generating an array from the 'formatters' Set\n const formattersArray = Array.from(formatters);\n\n // Using reduce to apply functions from 'formattersArray' to 'finalStyle'\n // Each function takes 'obj' (initially 'finalStyle') as input and applies transformations\n // The result of the previous function is passed as input to the next function\n // The final transformed style is assigned to 'this._style'\n return formattersArray.reduce(\n (obj, [func, args]) => func(obj, ...args),\n originalObj\n );\n};\n\n/**\n * Replaces alias values in the provided style object with their corresponding aliases.\n * @param {object} value - The style object to process.\n * @param {Array} [aliasStyles=[]] - Optional array of alias styles to apply.\n * @returns {object} The style object with alias values replaced.\n */\nexport const replaceAliasValues = (value, aliasStyles = []) => {\n if (typeof value !== 'object' || value === null) {\n throw new Error('Value must be an object');\n }\n\n if (!Array.isArray(aliasStyles)) {\n throw new Error('Alias styles must be an array');\n }\n\n let str = JSON.stringify(value);\n const aliasProps = [\n { prev: 'height', curr: 'h', skipWarn: true },\n { prev: 'width', curr: 'w', skipWarn: true },\n ...(aliasStyles || [])\n ];\n\n aliasProps.forEach(alias => {\n if (\n alias &&\n typeof alias.prev === 'string' &&\n typeof alias.curr === 'string'\n ) {\n !alias.skipWarn &&\n str.search(`\"${alias.prev}\":`) >= 0 &&\n log.warn(\n `The style property \"${alias.prev}\" is deprecated and will be removed in a future release. Please use \"${alias.curr}\" instead.`\n );\n str = str.replace(\n new RegExp(`\"${alias.prev}\":`, 'gi'),\n `\"${alias.curr}\":`\n );\n }\n });\n return JSON.parse(str);\n};\n","import context from '../../globals/context/index';\n\nconst themeStyleCache = new Map();\n\ncontext.on('themeUpdate', () => {\n themeStyleCache.clear();\n});\n\nexport default themeStyleCache;\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n generateComponentStyleSource,\n getStyleChainMemoized,\n clearStyleChainCache,\n generateStyle,\n getHash\n} from './utils';\nimport context from '../../globals/context/index';\nimport { clone } from '../../utils/index';\nimport cache from './cache';\nimport lng from '@lightningjs/core';\n\nexport default class StyleManager extends lng.EventEmitter {\n /**\n * Create a Style Manager instance.\n * @param {object} options - The options object.\n * @param {object} options.component - The LightningJS component instance.\n */\n constructor({ component = {} } = {}) {\n super(...arguments);\n this.init(component);\n }\n\n init(component) {\n this.isActive = true;\n this.component = component;\n this.setupListeners();\n this._style = {}; // This will be the source of truth for the style manager\n // Initial update is not debounced\n this.update();\n }\n\n setupListeners() {\n // Bind the _onThemeUpdate method to the current instance of the StyleManager class.\n this._boundThemeUpdate = this._onThemeUpdate.bind(this);\n this._hasSubTheme = Boolean(this.component._targetSubTheme);\n if (!this.component._targetSubTheme) {\n context.on('themeUpdate', this._boundThemeUpdate);\n } else {\n context.on(\n `themeUpdate${this.component._targetSubTheme}`,\n this._boundThemeUpdate\n );\n }\n }\n\n clearListeners() {\n // Bind the _onThemeUpdate method to the current instance of the StyleManager class.\n if (!this._boundThemeUpdate) return;\n if (!this.component._targetSubTheme) {\n context.off('themeUpdate', this._boundThemeUpdate);\n } else {\n context.off(\n `themeUpdate${this.component._targetSubTheme}`,\n this._boundThemeUpdate\n );\n }\n }\n\n /**\n * Destroy the Style Manager instance and remove the themeUpdate event listener.\n */\n destroy() {\n this.isActive = false;\n this._cleanupCache();\n // Remove event listeners and subscriptions\n this.clearListeners();\n // Set references to null\n this._styleCache = null;\n this._boundThemeUpdate = null;\n this.component = null;\n }\n\n /**\n * Handler for the themeUpdate event. Clears the cache and updates the component's style.\n * @private\n */\n _onThemeUpdate() {\n clearStyleChainCache();\n this.clearSourceCache();\n this.clearStyleCache();\n this.update();\n }\n\n /**\n * Clears the style chain cache.\n */\n clearStyleChainCache() {\n clearStyleChainCache();\n }\n\n /**\n * Clears the source cache.\n */\n clearSourceCache() {\n if (!this.component) return;\n const sourceKey = this._generateCacheKey('styleSource');\n this._removeCache(sourceKey);\n }\n\n /**\n * Clears the style cache.\n */\n clearStyleCache() {\n if (!this.component) return;\n const { tone, mode } = this.component;\n const styleKey = this._generateCacheKey(`style_${mode}_${tone}`);\n cache.delete(styleKey);\n }\n\n /**\n * Generates a cache key.\n * @param {string} name - The name of the cache.\n * @returns {string} - The generated cache key.\n */\n _generateCacheKey(name) {\n const cacheKey = [\n name,\n this.component._targetSubTheme,\n this.component.constructor.__componentName,\n this._customStyleHash\n ]\n .filter(Boolean)\n .join('_');\n return cacheKey;\n }\n\n /**\n * Adds a cache.\n * @param {string} name - The name of the cache.\n * @param {object} payload - The payload of the cache.\n */\n _addCache(name, payload) {\n const key = this._generateCacheKey(name);\n const existing = cache.get(key);\n cache.set(key, {\n ids: [...new Set([...(existing?.ids || []), this.component.__id])], // Add current id and remove duplicates\n payload\n });\n }\n\n /**\n * Called when component is destroyed\n */\n _cleanupCache() {\n if (!this.component) return;\n cache.forEach(({ ids, payload }, name) => {\n const removeIndex = ids && ids.length && ids.indexOf(this.component.__id);\n if (removeIndex > -1 && ids.length > 1) {\n cache.set(name, {\n ids: ids.slice(0, removeIndex).concat(ids.slice(removeIndex + 1)),\n payload\n });\n } else if (removeIndex > -1) {\n cache.delete(name);\n }\n });\n }\n\n /**\n * Removes a cache.\n * @param {string} name - The name of the cache.\n */\n _removeCache(name) {\n cache.delete(name);\n }\n\n /**\n * Gets a cache.\n * @param {string} name - The name of the cache.\n * @returns {object|boolean} - The cache or false if the component has inline styles.\n */\n _getCache(name) {\n const key = this._generateCacheKey(name);\n return cache.get(key);\n }\n\n /**\n * Updates the component's style based on changes in tone, mode, theme, and `_componentLevelStyle`.\n * Clears the style cache if tone or mode have changed, and clears the source cache if `_componentLevelStyle` has changed.\n * Generates the component's style source and style objects, saves them to the cache, and emits a `styleUpdate` event with the updated style.\n * @returns {Promise}\n */\n update() {\n if (!this.component) return;\n\n const { mode, tone } = this.component;\n\n try {\n // Attempt to fetch style source from cache\n let styleSource = this._getCache('styleSource')?.payload;\n\n if (!styleSource) {\n // Style source does not exist so it will need to be generated. We attempt to run this function only when necessary for optimal performance\n styleSource = generateComponentStyleSource({\n alias: this.component.constructor.aliasStyles,\n inlineStyle: this.component._componentLevelStyle,\n styleChain: getStyleChainMemoized(this.component),\n theme: this.component.theme\n });\n\n this._addCache('styleSource', styleSource);\n }\n\n // Attempt to fetch style from cache\n let style = this._getCache(`style_${mode}_${tone}`)?.payload;\n\n if (!style) {\n // Style does not exist so will also need to be generated\n style = generateStyle(this.component, styleSource);\n this._addCache(`style_${mode}_${tone}`, style);\n }\n\n this._style = style;\n this.emit('styleUpdate', this.style);\n } catch (error) {\n context.error('styleManager: ', error.message);\n }\n }\n\n /**\n * Accessors\n */\n set style(v) {\n context.warn('styleManager: Cannot mutate style directly');\n }\n\n get style() {\n return this._style;\n }\n\n set props(v) {\n context.warn('styleManager: Cannot mutate props directly');\n }\n\n get props() {\n return Object.keys(this.component._componentConfig).reduce((acc, key) => {\n if (!['base', 'tone', 'mode', 'style', 'styleConfig'].includes(key)) {\n acc[key] = this.component._componentConfig[key];\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Simple check to see if this component can leverage caching. Components using .style cannot use the cache at this time\n */\n get _customStyleHash() {\n const hasCustomStyle =\n Boolean(\n Object.keys(this.component.constructor.__mixinStyle || {}).length\n ) ||\n Boolean(Object.keys(this.component._componentLevelStyle || {}).length);\n\n if (hasCustomStyle) {\n return getHash(\n clone(\n this.component.constructor.__mixinStyle || {},\n this.component._componentLevelStyle || {}\n )\n );\n }\n\n return undefined;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport StyleManager from './StyleManager';\nimport { updateManager } from '../../globals/global-update-manager/GlobalUpdateManager';\nimport context from '../../globals/context';\nimport { getComponentConfig, getSubTheme } from './utils';\nimport { capitalizeFirstLetter } from '../../utils';\n\n/**\n * Merges two objects based on the following rules:\n * 1. If a key exists in both objects, use the value from the second object.\n * 2. If a key exists in the first object but not in the second, set the value to undefined.\n * 3. If a key exists in the second object but not in the first, include it in the result.\n * 4. Maintain the structure of the first object and augment it with extra keys from the second object.\n *\n * @param {Object|Array} firstObj - The first object, providing the structure to match.\n * @param {Object|Array} secondObj - The second object, whose values take precedence.\n * @returns {Object|Array} A new object with a merged structure and values.\n */\nfunction mergeObjectsWithSecondDominant(firstObj, secondObj) {\n if (firstObj !== null && typeof firstObj === 'object') {\n if (Array.isArray(firstObj)) {\n return firstObj.map((item, index) =>\n mergeObjectsWithSecondDominant(\n item,\n Array.isArray(secondObj) ? secondObj[index] : undefined\n )\n );\n } else {\n const result = {};\n // Combine keys from both objects to ensure all keys are covered\n const allKeys = new Set([\n ...Object.keys(firstObj),\n ...Object.keys(secondObj)\n ]);\n allKeys.forEach(key => {\n // Recurse for nested objects or arrays\n if (typeof firstObj[key] === 'object' && firstObj[key] !== null) {\n result[key] = mergeObjectsWithSecondDominant(\n firstObj[key],\n secondObj[key] || {}\n );\n } else if (\n typeof secondObj[key] === 'object' &&\n secondObj[key] !== null\n ) {\n result[key] = mergeObjectsWithSecondDominant(\n firstObj[key] || {},\n secondObj[key]\n );\n } else {\n // Use value from the second object if available, else set to undefined\n result[key] = secondObj.hasOwnProperty(key)\n ? secondObj[key]\n : undefined;\n }\n });\n return result;\n }\n } else {\n // Return non-object values directly\n return firstObj;\n }\n}\n\n/**\n * A higher-order function that returns a class with theme styles.\n * @param {function} Base - The base class to extend.\n * @param {object} mixinStyle - The mixin style to add to the component.\n * @returns {function} A class that extends the base class with theme styles.\n */\nexport default function withThemeStyles(Base, mixinStyle = {}) {\n return class extends Base {\n _construct() {\n if (this._withThemeStylesSetupComplete) {\n // Make sure this runs ony once if being used on a component that extends another component that is utilizing withThemeStyles\n super._construct();\n return;\n }\n\n this._hSetByUser = false;\n this._wSetByUser = false;\n\n this._styleManager = new StyleManager({ component: this });\n this._style = this._styleManager.style; // Set the style for the first time. After this is will be updated by events\n this._updatePropDefaults();\n this._styleManager.on('styleUpdate', () => {\n this._style = this._styleManager.style;\n this._updatePropDefaults();\n this.queueThemeUpdate();\n });\n this._withThemeStylesSetupComplete = true;\n super._construct(); // Important that this is called at the bottom to ensure that withThemeStyles is only initialized once per component to prevent potential memory leaks\n }\n\n /**\n * Checks for subThemes on _setup lifecycle event to allow the component to traverse the tree to find child theme properties.\n * @private\n * @returns {void}\n */\n _setup() {\n super._setup && super._setup();\n this._targetSubTheme = getSubTheme(this);\n if (this._targetSubTheme) {\n this._styleManager.clearListeners();\n this._styleManager.setupListeners();\n this._styleManager.clearStyleChainCache();\n this._styleManager.clearStyleCache();\n this._styleManager.clearSourceCache();\n this._styleManager.update();\n }\n }\n\n /**\n * Updates the default properties of the component based on the current theme.\n * It compares the previous component configuration properties with the current style manager properties,\n * and updates the component's properties accordingly. If the properties are unchanged, no action is taken.\n * This method is crucial for ensuring the component's properties are synchronized with the theme.\n */\n _updatePropDefaults() {\n // If the current properties are the same as the previous configuration, no update is needed\n\n if (\n !Object.keys(this._styleManager.props).length ||\n JSON.stringify(this._styleManager.props) ===\n JSON.stringify(this._prevComponentConfigProps)\n ) {\n return;\n }\n\n // Compare current properties with previous configuration and get the payload\n const payload = this._prevComponentConfigProps\n ? mergeObjectsWithSecondDominant(\n this._prevComponentConfigProps || {},\n this._styleManager.props || {}\n )\n : this._styleManager.props || {};\n\n // Store a deep copy of the current properties for future comparison\n this._prevComponentConfigProps =\n this._styleManager.props &&\n JSON.parse(JSON.stringify(this._styleManager.props));\n\n // This will be used by withUpdates to set defaults\n this.__componentConfigProps = payload;\n }\n\n /**\n * On component attach, ensures the StyleManager has been reinitialized if it was previously destroyed in detach.\n * @private\n * @returns {void}\n */\n _attach() {\n super._attach();\n if (!this._styleManager.isActive) {\n this._styleManager.init(this);\n }\n }\n\n /**\n * Detaches the component and destroys the style manager.\n * @private\n * @returns {void}\n */\n _detach() {\n super._detach();\n this._styleManager.destroy();\n }\n\n /**\n * Updates the mode to 'unfocused' when the component is unfocused.\n * @private\n * @internal\n * @returns {void}\n */\n _unfocus() {\n if (this._isFocusedMode) this.mode = 'unfocused';\n super._unfocus();\n }\n\n /**\n * Updates the mode to 'focused' when the component is focused.\n * @private\n * @returns {void}\n */\n _focus() {\n if (!this._isDisabledMode) this.mode = 'focused';\n super._focus();\n }\n\n /**\n * Checks if dimensions need updating, and updates if necessary.\n * Fixes mount issues if height is controlled by a component's style alone.\n * Setters for w/h will set the wSetByUser and hSetByUser flag to block this functionality and allow customization.\n * @private\n * @returns {void}\n */\n _checkDimensionUpdates() {\n let dimensionUpdateRequired = false;\n\n if (!this._wSetByUser && this.style.w && this._w !== this.style.w) {\n this._w = this.style.w;\n dimensionUpdateRequired = true;\n }\n\n if (!this._hSetByUser && this.style.h && this._h !== this.style.h) {\n this._h = this.style.h;\n dimensionUpdateRequired = true;\n }\n\n if (dimensionUpdateRequired) {\n this._updateDimensions();\n }\n }\n\n /**\n * Called by the update manager to trigger the _update lifecycle.\n * If `queueRequestUpdate` is undefined, then it's OK to call `_update()` directly because\n * the component does not have the `withUpdates` mixin, and hence `requestUpdate()` will not be defined either.\n * This check allows this mixin to work without `withUpdates`.\n * @private\n * @returns {void}\n */\n _updateThemeComponent() {\n if (!this.style) return;\n if (!this._isAttached()) return;\n this._checkDimensionUpdates();\n this.queueRequestUpdate\n ? this.queueRequestUpdate()\n : this._update && this._update();\n this._updateItemLayout && this._updateItemLayout();\n }\n\n /**\n * Queues component for update by the Global Update Manager.\n * @returns {void}\n */\n queueThemeUpdate() {\n updateManager.addUpdateTheme(this);\n }\n\n static get name() {\n return Base.name;\n }\n\n static get __componentName() {\n if (!super.__componentName) {\n throw new Error(\n `A valid static __componentName property is required for theming to work properly. Please add this to the ${this.constructor.name} class.`\n );\n }\n return super.__componentName;\n }\n\n static get __mixinStyle() {\n return mixinStyle;\n }\n\n /**\n * Reference to the global theme\n * @return {object}\n */\n get theme() {\n const subTheme =\n this._targetSubTheme && context.getSubTheme(this._targetSubTheme);\n return subTheme || context.theme;\n }\n\n /**\n * Set component level styles\n * @param {object} v - The styles to set, mode, and tone are not allowed\n */\n set style(v) {\n if (Object.prototype.toString.call(v) !== '[object Object]') {\n context.error('style must be an object');\n return;\n }\n this._componentLevelStyle = v;\n this._styleManager.clearStyleCache();\n this._styleManager.update();\n }\n\n /**\n * Get component level styles\n * @return {object}\n */\n get style() {\n return this._style;\n }\n\n /**\n * Get component level styles\n * @return {object}\n */\n get _componentStyle() {\n /** No longer supported */\n context.info(\n '_componentStyle will soon be deprecated. Please use Component.style'\n );\n return this._style;\n }\n\n /**\n * Set component styleConfig\n * @param {object} v - Special configuration rules to override styles\n */\n set styleConfig(v) {\n context.info(\n 'style config is deprecated. Please use style = { base: {}, tone: {}, mode: {} }'\n );\n this._styleConfig = v;\n this._styleManager.update();\n }\n\n /**\n * Get component styleConfig\n * @return {object}\n */\n get styleConfig() {\n return this._styleConfig;\n }\n\n /**\n * Theme configuration for overrides and defaults\n * @return {object}\n */\n get _componentConfig() {\n return getComponentConfig(this);\n }\n\n /**\n * Get the mode property\n * @return {string}\n */\n get mode() {\n return this._mode || this._componentConfig?.mode || 'unfocused';\n }\n\n /**\n * Set the mode property\n * @param {string} v - The mode value to set\n */\n set mode(v) {\n if (typeof v !== 'string' || this._mode === v) return;\n this._mode = v;\n const event = this[`on${capitalizeFirstLetter(v)}`];\n if (event && typeof event === 'function') event.call(this);\n this._styleManager.update();\n }\n\n /**\n * Get the tone property\n * @return {string}\n */\n get tone() {\n return this._tone || this._componentConfig.tone || 'neutral';\n }\n\n /**\n * Set the tone property\n * @param {string} value - The tone value to set\n */\n set tone(v) {\n if (typeof v !== 'string' || this._tone === v) return;\n this._tone = v;\n this._styleManager.update();\n }\n\n /**\n * Allow for w to be overwritten by user if also in component's style file\n * @return {number}\n */\n get w() {\n return (this._wSetByUser && this._w) || this.style?.w || 0;\n }\n\n /**\n * Set the w property\n * @param {number} v - The w value to set\n */\n set w(v) {\n if (this._w === v) return;\n super.w = v;\n this._wSetByUser = true;\n this._updateThemeComponent();\n }\n\n /**\n * Get the h property\n * @return {number}\n */\n get h() {\n return (this._hSetByUser && this._h) || this.style?.h || this._h || 0;\n }\n\n /**\n * Set the h property\n * @param {number} v - The h value to set\n */\n set h(v) {\n if (this._h === v) return;\n super.h = v;\n this._hSetByUser = true;\n this._updateThemeComponent();\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport context from '../../globals/context';\nimport { updateManager } from '../../globals/global-update-manager/GlobalUpdateManager';\nimport { clone } from '../../utils';\n\nfunction capital(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n// Merge the componentConfigProp with the prop value\nfunction mergeProps(componentConfigProp, prop) {\n let result = prop;\n if (\n typeof componentConfigProp === 'object' &&\n Object.keys(componentConfigProp).length &&\n typeof prop === 'object'\n ) {\n result = clone(componentConfigProp, prop);\n }\n\n return result ?? componentConfigProp;\n}\n\nfunction getPropertyDescriptor(name, key) {\n return {\n get() {\n const customGetter = this[`_get${capital(name)}`];\n if (customGetter && typeof customGetter === 'function') {\n const value = customGetter.call(this, this[key]);\n this[key] = value || this.__componentConfigProps?.[name]; // Defaults can also be set from withThemeStyles if used\n return mergeProps(this.__componentConfigProps?.[name], value);\n }\n\n return mergeProps(this.__componentConfigProps?.[name], this[key]); // Defaults can also be set from withThemeStyles if used\n },\n set(value) {\n const oldValue = this[key];\n if (value !== oldValue) {\n const changeHandler = this[`_set${capital(name)}`];\n if (changeHandler && typeof changeHandler === 'function') {\n value = changeHandler.call(this, value);\n }\n\n const newValue = key === 'style' ? clone(this[key], value) : value;\n\n if (\n typeof this[key] === 'object' &&\n this[key] !== null &&\n this[key].style\n ) {\n // If the property is for a nested component, recursively combine it with the component's existing styles, ensuring that any styles defined in componentConfig are also applied.\n const style = clone(this[key].style, value.style || {});\n newValue.style = style;\n }\n\n this[key] = newValue;\n this.queueRequestUpdate();\n }\n },\n configurable: true,\n enumerable: true\n };\n}\n\nfunction getAliasPropertyDescriptor(prev, curr) {\n const deprecationWarning = `The property \"${prev}\" is deprecated and will be removed in a future release. Please use \"${curr}\" instead.`;\n return {\n get() {\n console.warn(deprecationWarning);\n return this[curr];\n },\n set(value) {\n console.warn(deprecationWarning);\n this[curr] = value;\n }\n };\n}\n\nexport default function withUpdates(Base) {\n return class extends Base {\n static get name() {\n return Base.name;\n }\n\n _construct() {\n const prototype = Object.getPrototypeOf(this);\n if (!prototype._withUpdatesInitialized) {\n // create custom accessors and mutators for the props in the properties array\n const props = this.constructor.properties || [];\n props.forEach(name => {\n const key = '_' + name;\n const descriptor = getPropertyDescriptor(name, key);\n if (descriptor !== undefined) {\n Object.defineProperty(prototype, name, descriptor);\n }\n });\n\n // create custom accessors and mutators that map the props in the alias array to\n // the props in the properties array (and use the getters/setters defined above)\n const aliasProps = this.constructor.aliasProperties || [];\n aliasProps.forEach(alias => {\n if (\n alias &&\n typeof alias.prev === 'string' &&\n typeof alias.curr === 'string'\n ) {\n const descriptor = getAliasPropertyDescriptor(\n alias.prev,\n alias.curr\n );\n if (descriptor !== undefined) {\n Object.defineProperty(prototype, alias.prev, descriptor);\n }\n }\n });\n\n prototype._withUpdatesInitialized = true;\n }\n\n this._whenEnabled = new Promise(resolve => {\n this._whenEnabledResolver = resolve;\n });\n\n super._construct && super._construct();\n }\n\n queueRequestUpdate() {\n if (!this._isAttached()) return;\n updateManager.addRequestUpdate(this);\n }\n\n _firstEnable() {\n this._readyForUpdates = true;\n this._whenEnabledResolver();\n updateManager.deleteRequestUpdate(this);\n this.requestUpdate();\n super._firstEnable && super._firstEnable();\n }\n\n requestEarlyUpdate() {\n this._readyForUpdates = true;\n if (updateManager.hasQueuedRequestFor(this)) {\n updateManager.deleteRequestUpdate(this);\n // method also triggers ready for updates\n this._readyForUpdates = true;\n this.requestUpdate();\n return true;\n }\n return false;\n }\n\n _detach() {\n super._detach();\n updateManager.deleteRequestUpdate(this);\n }\n\n /**\n * Request an immediate component update.\n *\n * @remarks\n * Except for when calling `super._update()` from a `_update()`\n * implementation, call this instead of calling `_update()` directly\n *\n * @param {boolean} force If set, bypasses the '_readyForUpdates' check\n */\n requestUpdate(force = false) {\n if (this._readyForUpdates || force) {\n const result = this._update();\n if (typeof result === 'object' && result !== null && result.catch) {\n // This is a promise, make sure to capture any errors\n result.catch(e => {\n context.error(\n `asyncronous _update() error in '${this.constructor.__componentName}'`,\n this,\n e\n );\n });\n }\n }\n }\n\n logPropTable() {\n console.table(this._propTable);\n }\n\n get _propTable() {\n return this.constructor.properties.reduce((acc, prop) => {\n acc[prop] = this[prop];\n return acc;\n }, {});\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\n\nexport default class FadeShader extends lng.shaders.WebGLDefaultShader {\n constructor(context) {\n super(context);\n this._margin = { left: 0, right: 0 };\n }\n\n set positionLeft(v) {\n this._positionLeft = v;\n }\n\n set positionRight(v) {\n this._positionRight = v;\n }\n\n setupUniforms(operation) {\n super.setupUniforms(operation);\n const owner = operation.shaderOwner;\n\n if (this._positionLeft === 0) {\n this._positionLeft = 0.001;\n }\n if (this._positionRight === 0) {\n this._positionRight = 0.001;\n }\n\n const renderPrecision = this.ctx.stage.getRenderPrecision();\n this._setUniform(\n 'margin',\n [\n this._positionLeft * renderPrecision,\n this._positionRight * renderPrecision\n ],\n this.gl.uniform1fv\n );\n this._setUniform(\n 'resolution',\n new Float32Array([\n owner._w * renderPrecision,\n owner._h * renderPrecision\n ]),\n this.gl.uniform2fv\n );\n }\n}\n\nFadeShader.fragmentShaderSource = `\n #ifdef GL_ES\n # ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n # else\n precision lowp float;\n # endif\n #endif\n\n #define PI 3.14159265359\n\n varying vec2 vTextureCoord;\n varying vec4 vColor;\n\n uniform sampler2D uSampler;\n uniform vec2 resolution;\n uniform float margin[2];\n\n void main() {\n vec4 color = texture2D(uSampler, vTextureCoord) * vColor;\n vec2 halfRes = 0.5 * resolution.xy;\n vec2 point = vTextureCoord.xy * resolution;\n\n\n vec2 pos1 = vec2(point.x, point.y);\n vec2 pos2 = pos1;\n pos2.x += margin[0];\n\n vec2 d = pos2 - pos1;\n float t = dot(pos1, d) / dot(d, d);\n t = smoothstep(0.0, 1.0, clamp(t, 0.0, 1.0));\n\n vec2 pos3 = vec2(vTextureCoord.x * resolution.x, vTextureCoord.y);\n pos3.x -= resolution.x - margin[1];\n vec2 pos4 = vec2(vTextureCoord.x + margin[1], vTextureCoord.y);\n\n vec2 d2 = pos4 - pos3;\n float t2 = dot(pos3, d2) / dot(d2, d2);\n t2 = smoothstep(0.0, 1.0, clamp(t2, 0.0, 1.0));\n\n color = mix(vec4(0.0), color, t);\n color = mix(color, vec4(0.0), t2);\n\n gl_FragColor = color;\n }\n`;\n","import lng from '@lightningjs/core';\n\n/**\n * Represents an image texture that supports loading blob images and SVG strings without using web workers.\n */\n\n/**\n * Checks the file type based on the given string.\n * @param {string} str - The input string to check.\n * @returns {string} The file type.\n */\nfunction checkFileType(str) {\n if (str.startsWith(' {\n canvas.width = w;\n canvas.height = h;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n cb(null, { source: canvas, w, h });\n };\n img.onerror = err => {\n cb(err);\n };\n\n // On the PS4 platform setting the `crossOrigin` attribute on images\n // can cause CORS failures.\n if (!lng.Utils.isPS4) {\n img.crossOrigin = 'Anonymous';\n }\n\n img.src = url;\n}\n\n/**\n * Loads an image from the given source.\n * @param {object} params - The parameters object.\n * @param {string} params.src - The source URL of the image.\n * @param {function} cb - The callback function.\n * @returns {function} A cancel callback function.\n */\nfunction imageLoader({ src }, cb) {\n const image = new Image();\n\n // On the PS4 platform setting the `crossOrigin` attribute on\n // images can cause CORS failures.\n if (!(src.substr(0, 5) == 'data:') && !lng.Utils.isPS4) {\n image.crossOrigin = 'Anonymous';\n }\n image.onerror = function () {\n // Ignore error message when cancelled.\n if (image.src) {\n return cb('Image load error');\n }\n };\n image.onload = function () {\n cb(null, {\n source: image,\n renderInfo: { src: src, compressed: false },\n hasAlpha: true\n });\n };\n\n image.src = src;\n\n return function () {\n // Cancel Callback\n image.onerror = null;\n image.onload = null;\n image.removeAttribute('src');\n };\n}\n\n/**\n * Represents an image texture.\n */\nexport default class CustomImageTexture extends lng.Texture {\n /**\n * Creates a new ImageTexture instance.\n * @param {object} stage - The stage object.\n */\n constructor(stage) {\n super(stage);\n\n this._src = undefined;\n this._hasAlpha = false;\n }\n\n /**\n * Gets the source URL of the image.\n * @returns {string} The source URL.\n */\n get src() {\n return this._src;\n }\n\n /**\n * Sets the source URL of the image.\n * @param {string} v - The source URL.\n */\n set src(v) {\n if (this._src !== v) {\n this._src = v;\n this._changed();\n }\n }\n\n /**\n * Gets the flag indicating whether the image has an alpha channel.\n * @returns {boolean} The flag value.\n */\n get hasAlpha() {\n return this._hasAlpha;\n }\n\n /**\n * Sets the flag indicating whether the image has an alpha channel.\n * @param {boolean} v - The flag value.\n */\n set hasAlpha(v) {\n if (this._hasAlpha !== v) {\n this._hasAlpha = v;\n this._changed();\n }\n }\n\n /**\n * Gets the width of the image.\n * @returns {number} The width value.\n */\n get w() {\n return this._w;\n }\n\n /**\n * Sets the width of the image.\n * @param {number} l - The width value.\n */\n set w(l) {\n this._w = l;\n this._changed();\n }\n\n /**\n * Gets the height of the image.\n * @returns {number} The height value.\n */\n get h() {\n return this._h;\n }\n\n /**\n * Sets the height of the image.\n * @param {number} l - The height value.\n */\n set h(l) {\n this._h = l;\n this._changed();\n }\n\n /**\n * Checks if the image texture is valid.\n * @returns {boolean} True if valid, otherwise false.\n */\n _getIsValid() {\n return !!this._src;\n }\n\n /**\n * Gets the lookup ID of the image texture.\n * @returns {string} The lookup ID.\n */\n _getLookupId() {\n return this._src;\n }\n\n /**\n * Gets the source loader function for the image texture.\n * @returns {function} The source loader function.\n */\n _getSourceLoader() {\n const w = this._w;\n const h = this._h;\n let src = this._src;\n const hasAlpha = this._hasAlpha;\n if (this.stage.getOption('srcBasePath')) {\n const fc = src.charCodeAt(0);\n if (\n src.indexOf('//') === -1 &&\n ((fc >= 65 && fc <= 90) || (fc >= 97 && fc <= 122) || fc == 46)\n ) {\n // Alphabetical or dot: prepend base path.\n src = this.stage.getOption('srcBasePath') + src;\n }\n }\n\n return cb => {\n const fileType = checkFileType(src);\n switch (fileType) {\n case 'SVG':\n return createSvg(\n cb,\n this.stage,\n `data:image/svg+xml,${encodeURIComponent(src)}`,\n w,\n h\n );\n\n case 'Blob':\n return imageLoader({ src }, cb);\n default:\n return this.stage.platform.loadSrcTexture(\n { src: src, hasAlpha: hasAlpha },\n cb\n );\n }\n };\n }\n\n /**\n * Gets the non-default properties of the image texture.\n * @returns {object} The non-default properties.\n */\n getNonDefaults() {\n const obj = super.getNonDefaults();\n if (this._src) {\n obj.src = this._src;\n }\n return obj;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport logger from '../globals/context/logger';\n\n/**\n *\n * Layout Utils\n *\n */\n\n/**\n * Copyright (c) 2009-2012 Jeremy Ashkenas, DocumentCloud\n * Licensed under the MIT License\n * Copyright (c) 2012-2018 The Debounce Contributors. See CONTRIBUTORS\n * Licensed under the MIT License\n */\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear'\n * that is a function which will clear the timer to prevent previously scheduled executions.\n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {function} function to wrap\n * @param {number} timeout in ms (`100`)\n * @param {boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nexport function debounce(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n }\n\n var debounced = function () {\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function () {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n debounced.flush = function () {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n\n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n}\n\nexport function getEuclideanDistance(xA, yA, xB, yB) {\n const xDiff = xA - xB;\n const yDiff = yA - yB;\n return Math.sqrt(Math.pow(xDiff, 2) + Math.sqrt(Math.pow(yDiff, 2)));\n}\n\n/**\n * Returns the shortest distance between a coordinate and a corner or center of an element.\n * @param {[number, number]} coordinate\n * @param {Element} element\n *\n * @return {number} shortest distance between a coordinate and a corner or center of an element.\n */\nexport function getShortestDistance(coordinate, element) {\n const [xA, yA] = coordinate;\n const [xB, yB] = element.core ? element.core.getAbsoluteCoords(0, 0) : [0, 0];\n\n const distanceToStart = getEuclideanDistance(xA, yA, xB, yB);\n const distanceToMiddle = getEuclideanDistance(\n xA,\n yA,\n xB + element.w / 2,\n yB + element.h / 2\n );\n const distanceToEnd = getEuclideanDistance(\n xA,\n yA,\n xB + element.w,\n yB + element.h\n );\n\n return Math.min(distanceToStart, distanceToMiddle, distanceToEnd);\n}\n\nexport function isComponentOnScreen(component, offsets = {}) {\n if (!component) return false;\n\n const {\n w,\n h,\n core: { renderContext: { px, py }, _scissor: scissor = [] } = {}\n } = component;\n const stageH = component.stage.h / component.stage.getRenderPrecision();\n const stageW = component.stage.w / component.stage.getRenderPrecision();\n\n let finalX = px;\n let finalY = py;\n // keep track of the different between the the absolute world position and relative position\n const relativeOffsetX = px - component.x;\n const relativeOffsetY = py - component.y;\n const offsetX = offsets.offsetX - relativeOffsetX || 0;\n const offsetY = offsets.offsetY - relativeOffsetY || 0;\n // if the current component is animating, apply the relative offset to the transition value\n if (component.transition('x')) {\n finalX = px - component.x + component.transition('x').targetValue;\n }\n if (component.transition('y')) {\n finalY = py - component.y + component.transition('y').targetValue;\n }\n // apply any offset passed into the function\n // this is mainly used to parent components that are transitioning,\n // like in the case of Rows nested inside of Columns where the Rows themselves do not animate,\n // but their parent container does\n finalX += offsetX;\n finalY += offsetY;\n\n const wVis = finalX >= 0 && finalX + w <= stageW;\n const hVis = finalY >= 0 && finalY + h <= stageH;\n\n if (!wVis || !hVis) return false;\n\n if (scissor && scissor.length) {\n const [\n leftBounds = null,\n topBounds = null,\n clipWidth = null,\n clipHeight = null\n ] = scissor;\n\n const withinLeftClippingBounds =\n Math.round(finalX + w) >= Math.round(leftBounds);\n const withinRightClippingBounds =\n Math.round(finalX) <= Math.round(leftBounds + clipWidth);\n const withinTopClippingBounds =\n Math.round(finalY + h) >= Math.round(topBounds);\n const withinBottomClippingBounds =\n Math.round(finalY + h) <= Math.round(topBounds + clipHeight);\n\n return (\n withinLeftClippingBounds &&\n withinRightClippingBounds &&\n withinTopClippingBounds &&\n withinBottomClippingBounds\n );\n }\n\n return true;\n}\n\n/**\n * Returns the width of an item based on upCount.\n *\n * @param {number} upCount\n * @returns {number}\n */\nexport function getWidthByUpCount(theme, upCount = 1) {\n const screenW = theme.layout.screenW;\n const columnCount = theme.layout.columnCount;\n const marginX = theme.layout.marginX;\n const gutterX = theme.layout.gutterX;\n\n if (upCount < 1 || upCount > columnCount) {\n console.error(\n `Column expects a number between 1 & ${columnCount}. Received ${upCount}`\n );\n return;\n }\n\n // the screen width, minus the margin x on each side\n const columnWidth = screenW - marginX * 2;\n // the total space of column gaps in between items\n const columnGapTotal = (upCount - 1) * gutterX;\n // the remaining amount of space left for all items\n const totalColumnsWidth = columnWidth - columnGapTotal;\n // the width of each item in that remaining width\n return totalColumnsWidth / upCount;\n}\n\n/**\n * Returns the width of an item based on how many columns to span.\n *\n * @param {number} columnSpan\n * @returns {number}\n */\nexport function getWidthByColumnSpan(theme, columnSpan) {\n const columnCount = theme.layout.columnCount;\n const gutterX = theme.layout.gutterX;\n\n return (\n getWidthByUpCount(theme, columnCount) * columnSpan +\n gutterX * (columnSpan - 1)\n );\n}\n\n/**\n * Returns the x position of a specified column number based on the theme's columnCount.\n *\n * @param {number} column\n * @returns {number}\n */\nexport function getColumnX(theme, column = 1) {\n const columnCount = theme.layout.columnCount;\n const marginX = theme.layout.marginX;\n const gutterX = theme.layout.gutterX;\n\n return marginX + (getWidthByUpCount(theme, columnCount) + gutterX) * column;\n}\n\n/**\n * Determines the width and height of an item based off the data passed into the item\n * (either all necessary parameters to calculate the dimensions dynamically,\n * OR all the necessary parameters to hard set the dimensions).\n *\n * @param { object } obj\n * @param { object } fallback\n *\n * @return { { number, number } }\n */\nexport function getDimensions(theme, obj = {}, fallback = {}) {\n const { w, h, ratioX, ratioY, upCount } = obj;\n const fallbackW = fallback.w || 0;\n const fallbackH = fallback.h || 0;\n let dimensions = {};\n\n // hard set width and height values were passed in and should override other params\n if (w && h) {\n dimensions = {\n w,\n h: h\n };\n } else if (h && ratioX && ratioY) {\n // hard set height and ratio values were passed in, meaning the row has items with mixed ratios, so the width needs to be calculated\n dimensions = {\n w: Math.round((h * ratioX) / ratioY),\n h: h\n };\n // calculate dynamic width and height based off item ratios\n } else if (ratioX && ratioY && upCount) {\n dimensions = getItemRatioDimensions(theme, ratioX, ratioY, upCount);\n } else if (h && upCount) {\n // calculate dynamic width based off a row upcount and a given height\n dimensions = {\n w: Math.round(getWidthByUpCount(theme, upCount)),\n h: h\n };\n } else if (h) {\n dimensions = {\n w: fallbackW,\n h: h\n };\n } else if (w) {\n dimensions = {\n w: w,\n h: fallbackH\n };\n } else {\n // not enough information was provided to properly size the component\n dimensions = {\n w: fallbackW,\n h: fallbackH\n };\n }\n\n dimensions = {\n ...dimensions,\n ratioX,\n ratioY,\n upCount\n };\n\n return dimensions;\n}\n\n/**\n * Calculates the width and height of an item based off the given ratios\n * and number of columns across the screen that should be visible before peaking\n *\n * @param { number } ratioX\n * @param { number } ratioY\n * @param { number } upCount\n *\n * @return { { number, number } }\n */\nexport function getItemRatioDimensions(theme, ratioX, ratioY, upCount) {\n let w, h;\n\n if (ratioX && ratioY && upCount) {\n w = Math.round(getWidthByUpCount(theme, upCount));\n h = Math.round((w / ratioX) * ratioY);\n } else {\n w = 0;\n h = 0;\n }\n return { w, h };\n}\n\n/**\n * /Layout utils\n */\n\nexport function getAspectRatioW(h, ratio = '16:9', seperator = ':') {\n const [ratioW, ratioH] = ratio.split(seperator);\n return h * (ratioW / ratioH);\n}\n\nexport function getAspectRatioH(w, ratio = '16:9', seperator = ':') {\n const [ratioW, ratioH] = ratio.split(seperator);\n return w / (ratioW / ratioH);\n}\n\n/**\n * Combines rgb hex string and alpha into argb hexadecimal number\n * @param {string|number} hex - 6 alphanumeric characters between 0-f or argb hexadecimal number\n * @param {number} [alpha] - number between 0-1 (0 is invisible, 1 is opaque)\n */\nexport function getHexColor(hex, alpha = 1) {\n if (!hex) {\n return 0x00;\n }\n\n if (typeof hex === 'number') {\n hex = hex.toString(16).slice(2);\n }\n\n hex = hex.replace('#', '');\n\n const hexAlpha = Math.round(alpha * 255).toString(16);\n const str = `0x${hexAlpha}${hex}`;\n return Number(str);\n}\n\n/**\n * Returns valid string of HEX color\n *\n * @param {string} color\n * @param {boolean} fill\n */\nexport function getValidColor(color) {\n if (typeof color === 'string' || typeof color === 'number') {\n if (/^0x[0-9a-fA-F]{8}/g.test(color)) {\n // User enters a valid 0x00000000 hex code\n return Number(color);\n } else if (/^#[0-9a-fA-F]{6}/g.test(color)) {\n // User enters valid #000000 hex code\n return getHexColor(color.substr(1, 6));\n } else if (typeof color === 'string' && /^[0-9]{8,10}/g.test(color)) {\n return parseInt(color);\n } else if (\n typeof color === 'number' &&\n /^[0-9]{8,10}/g.test(color.toString())\n ) {\n return color;\n } else if (typeof color === 'string' && color.indexOf('rgba') > -1) {\n return rgba2argb(color);\n } else if (typeof color === 'string' && color.indexOf('rgb') > -1) {\n const rgba = [...color.replace(/rgb\\(|\\)/g, '').split(','), '255'];\n return lng.StageUtils.getArgbNumber(rgba);\n }\n }\n return null;\n}\n\nfunction simplifyFraction([numerator, denominator]) {\n for (let i = numerator; i > 0; i--) {\n if (!(numerator % i) && !(denominator % i)) {\n return [numerator / i, denominator / i];\n }\n }\n}\n\n/**\n * Reduce a fraction represented as a string\n * @param {string} - a reprentation of a fraction in this format 16/9\n * @return {string} - a reduced representation of the fraction\n */\nexport function reduceFraction(string) {\n return simplifyFraction(string.split('/').map(n => +n)).join('/');\n}\n\n/**\n * Gets the value at `path` of `object`.\n * @param {object} object\n * @param {string|Array} path\n * @return {*} value if exists else undefined\n */\nexport const getValFromObjPath = (object, path) => {\n if (typeof path === 'string')\n path = path.split('.').filter(key => key.length);\n return path.reduce((dive, key) => dive && dive[key], object);\n};\n\n/**\n * Lightning uses ARGB values, use this function\n * to convert know color to Lightning value\n * https://ifpb.github.io/javascript-guide/ecma/expression-and-operator/argb.html\n */\nexport function rgba2argb(rgbaStr) {\n const rgba = rgbaStr.replace(/rgba\\(|\\)/g, '').split(',');\n // Multiple Alpha Value\n rgba[3] = rgba[3] * 255;\n return lng.StageUtils.getArgbNumber(rgba);\n}\n\nexport function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function lowercaseFirstLetter(string) {\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n/**\n * Helpers for lng.Tools.getRoundRect\n */\nexport const RoundRect = {\n /**\n * Returns a value that will render as the given width (w)\n * when passed to lng.Tools.getRoundRect\n * @param {number} w - px value for expected width\n * @param {*} options\n * @param {number} options.padding - px value for both left and right padding\n * @param {number} options.paddingLeft - px value for left padding, overrides options.padding\n * @param {number} options.paddingRight - px value for right padding, overrides options.padding\n * @param {number} options.strokeWidth - px value for stroke width\n */\n getWidth(w, options = {}) {\n const { padding, paddingLeft, paddingRight, strokeWidth } = {\n padding: 0,\n paddingLeft: 0,\n paddingRight: 0,\n strokeWidth: 0,\n ...options\n };\n\n if (!w) return 0;\n\n return (\n w - (paddingLeft || padding) - (paddingRight || padding) - strokeWidth\n );\n },\n /**\n * Returns a value that will render as the given height (h)\n * when passed to lng.Tools.getRoundRect\n * @param {number} h - px value for expected width\n * @param {*} options\n * @param {number} options.padding - px value for both bottom and top padding\n * @param {number} options.paddingBottom - px value for bottom padding, overrides options.padding\n * @param {number} options.paddingTop - px value for top padding, overrides options.padding\n * @param {number} options.strokeWidth - px value for stroke width\n */\n getHeight(h, options = {}) {\n const { padding, paddingBottom, paddingTop, strokeWidth } = {\n padding: 0,\n paddingBottom: 0,\n paddingTop: 0,\n strokeWidth: 0,\n ...options\n };\n\n if (!h) return 0;\n\n return (\n h - (paddingBottom || padding) - (paddingTop || padding) - strokeWidth\n );\n }\n};\n\n/**\n * Merges two objects together and returns the duplicate.\n *\n * @param {object} target - object to be cloned\n * @param {object} [object] - secondary object to merge into clone\n */\nexport function clone(target, object) {\n // Make sure getters and setters are applied correctly\n const _clone = Object.create(Object.getPrototypeOf(target));\n Object.defineProperties(_clone, Object.getOwnPropertyDescriptors(target));\n if (!object || target === object) return _clone;\n\n for (const key in object) {\n const value = object[key];\n if (target.hasOwnProperty(key)) {\n _clone[key] = getMergeValue(key, target, object);\n } else {\n _clone[key] = value;\n }\n }\n\n return _clone;\n}\n\nfunction getMergeValue(key, target, object) {\n const targetVal = target[key];\n const objectVal = object[key];\n const targetValType = typeof targetVal;\n const objectValType = typeof objectVal;\n\n if (\n targetValType !== objectValType ||\n objectValType === 'function' ||\n Array.isArray(objectVal)\n ) {\n return objectVal;\n }\n\n if (objectVal && objectValType === 'object') {\n return clone(targetVal, objectVal);\n }\n\n return objectVal;\n}\n\n/**\n * Returns the rendered width of a given text texture\n * @param {object} text - text texture properties\n * @param {string} text.text - text value\n * @param {string} text.fontStyle - css font-style property\n * @param {(string|number)} text.fontWeight - css font-weight property\n * @param {string} [fontSize=0] - css font-size property (in px)\n * @param {string} [text.fontFamily=sans-serif] - css font-weight property\n * @param {string} text.fontFace - alias for fontFamily\n *\n * @return {number} text width\n * */\nexport function measureTextWidth(text = {}) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const {\n fontStyle,\n fontWeight,\n fontSize,\n fontFamily = text.fontFace || 'sans-serif'\n } = text;\n const fontCss = [\n fontStyle,\n fontWeight,\n fontSize ? `${fontSize}px` : '0',\n `'${fontFamily}'`\n ]\n .filter(Boolean)\n .join(' ');\n ctx.font = fontCss;\n const textMetrics = ctx.measureText(text.text || '');\n\n return Math.round(textMetrics.width);\n}\n\n/**\n * Returns first argument that is a number. Useful for finding ARGB numbers. Does not convert strings to numbers\n * @param {...*} number - maybe a number\n **/\nexport function getFirstNumber(...numbers) {\n return numbers.find(Number.isFinite);\n}\n\n/**\n * Naively looks for dimensional prop (i.e. w, h, x, y, etc.), first searching for\n * a transition target value then defaulting to the current set value\n * @param {string} prop - property key\n * @param {lng.Component} component - Lightning component to operate against\n */\nexport function getDimension(prop, component) {\n if (!component) return 0;\n\n const transition = component.transition(prop);\n if (transition.isRunning()) return transition.targetValue;\n\n let renderProp = prop;\n if (prop === 'w') {\n renderProp = 'renderWidth';\n } else if (prop === 'h') {\n renderProp = 'renderHeight';\n }\n return component[renderProp] || component[prop];\n}\n\nexport const getX = component => getDimension('x', component);\nexport const getY = component => getDimension('y', component);\nexport const getW = component => getDimension('w', component);\nexport const getH = component => getDimension('h', component);\n\n/**\n * Array.prototype.flat() is not supported in WPE Browser\n *\n * @param {array} arr\n *\n * @return {array}\n */\nexport function flatten(arr) {\n return arr.reduce(\n (flat, toFlatten) =>\n flat.concat(Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten),\n []\n );\n}\n\nexport function objectPropertyOf(object, path) {\n return path.reduce(\n (obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined),\n object\n );\n}\n\nexport function stringifyCompare(objA, objB) {\n return JSON.stringify(objA) === JSON.stringify(objB);\n}\n\nexport function delayForAnimation(callback, delay = 16) {\n setTimeout(callback, delay);\n}\n\nexport function downloadFile(content, fileName, contentType) {\n const validContentTypes = ['plain', 'json'];\n if (!validContentTypes.includes(contentType)) {\n contentType = 'plain';\n }\n const dataStr =\n `data:text/${contentType};charset=utf-8,` +\n encodeURIComponent(JSON.stringify(content));\n const dlAnchorElem = document.createElement('a');\n dlAnchorElem.setAttribute('href', dataStr);\n dlAnchorElem.setAttribute('download', fileName);\n dlAnchorElem.click();\n}\n\nexport const degreesToRadians = deg => deg * (Math.PI / 180);\n\n/**\n *\n * Markup utils\n *\n */\n\nconst MARKUP_STRING_PATTERN = /({ICON.*?}|{BADGE:.*?}|{NEWLINE}|{TEXT:.*?})/g;\n\nexport function isMarkupString(str = '') {\n if (typeof str !== 'string') {\n return false;\n }\n return MARKUP_STRING_PATTERN.test(str);\n}\n\n/**\n * Returns an array of strings and icon, badge, newline, and text objects from a string using the syntax:\n * 'This is an {ICON:|<url>} and {BADGE:<title>} badge test with a {NEWLINE} newline and {TEXT:<text>|<style>}.'\n *\n * i.e. 'This is an {ICON:settings|./assets/icons/settings.png} icon and {BADGE:HD} badge with a{NEWLINE} and {TEXT:red text|red}.'\n * would create the array:\n * [\n * 'This is an ',\n * { icon: './assets/icons/settings.png', title: 'settings' },\n * ' icon and ',\n * { badge: 'HD' },\n * ' badge with a',\n * { newline: true },\n * ' and ',\n * { text: 'red text', style: 'red' },\n * '.'\n * ]\n *\n * @param {(string|object)} str\n *\n * @return {array}\n */\nexport function parseInlineContent(str = '') {\n const content = [];\n if ((str && typeof str === 'string') || str.text) {\n const string = typeof str === 'string' ? str : str.text;\n const iconRegEx = /^{ICON:(.*?)?\\|(.*?)?}$/g;\n const badgeRegEx = /^{BADGE:(.*?)}$/g;\n const newlineRegEx = /^{NEWLINE}$/g;\n const textRegEx = /^{TEXT:(.*?)?\\|(.*?)?}$/g;\n\n const splitStr = string.split(MARKUP_STRING_PATTERN);\n\n if (splitStr && splitStr.length) {\n splitStr.forEach(item => {\n let formattedItem = item;\n const badge = badgeRegEx.exec(item);\n const icon = iconRegEx.exec(item);\n const newline = newlineRegEx.exec(item);\n const text = textRegEx.exec(item);\n\n if (badge && badge[1]) {\n formattedItem = { badge: badge[1] };\n } else if (icon && icon[1]) {\n formattedItem = { title: icon[1], icon: icon[2] || icon[1] };\n } else if (newline) {\n formattedItem = { newline: true };\n } else if (text && text[1]) {\n formattedItem = { text: text[1], style: text[2] };\n }\n content.push(formattedItem);\n });\n }\n }\n return content;\n}\n\n/**\n * Given any number of arguments, returns the greatest number passed to the function.\n * If no valid numbers are passed in (ex. NaN, undefined, null), `undefined` will be returned.\n * @param {...*} arguments Any number of arguments may be passed into the function.\n *\n * @return {number|undefined} The greatest number passed in as an argument or `undefined` if no valid number was passed in.\n */\nexport function max() {\n if (!arguments) {\n return;\n }\n\n const args = Array.from(arguments).filter(arg => !isNaN(arg) && arg != null);\n\n if (!args.length) {\n return;\n }\n\n return Math.max(...args);\n}\n\n/**\n * Abstracts logic for conditionally forcing a zIndex Context on a component so that\n * any child components with zIndex are relative to it, and not the global zIndex context.\n * @param {lng.Component} component\n * @param {number} zOffset\n */\nexport function createConditionalZContext(component, zOffset) {\n if (!component.zIndex && typeof zOffset !== 'undefined' && zOffset !== 0) {\n component.forceZIndexContext = true;\n component.zIndex = 0;\n }\n}\n\n/**\n * Runs a side effect function when any values of specified properties on an element change.\n * @param {object} options - defines the `element`, `watchProps`, and `sideEffect` options\n * @param {lng.Element} options.element - Lightning element on which property changes will watched\n * @param {String[]} options.watchProps - properties that when their value changes a side effect function is invoked\n * @param {function} options.sideEffect - function to be invoked when a watched property's value changes\n * @returns {lng.Element}\n */\nexport function watchForUpdates({\n element,\n watchProps = [],\n sideEffect = () => {}\n}) {\n if (!element?.isElement) {\n logger.error(\n `watchForUpdates: Expected a Lightning Element passed to element parameter, received ${typeof element}`\n );\n }\n\n const initialOnAfterUpdate = element.__core?._onAfterUpdate;\n\n element.onAfterUpdate = function (element) {\n let hasChanged = false;\n\n watchProps.forEach(prop => {\n if (element.transition(prop) && element.transition(prop).isRunning()) {\n return;\n }\n\n const prevValueKey = `__watchPrev${prop}`;\n const nextValue = element[prop];\n\n if (nextValue !== element[prevValueKey]) {\n element[prevValueKey] = nextValue;\n hasChanged = true;\n }\n });\n\n if (hasChanged) {\n sideEffect();\n }\n\n // if an element already has an onAfterUpdate function, preserve that behavior\n if (initialOnAfterUpdate) {\n initialOnAfterUpdate(element);\n }\n }.bind(this);\n\n return element;\n}\n\n/**\n * Given a Lightning text alignment option (left, right, center),\n * return the Lightning flexbox equivalent.\n *\n * @param {string} align\n * @returns {string}\n */\nexport function convertTextAlignToFlexJustify(align) {\n switch (align) {\n case 'left':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'right':\n return 'flex-end';\n default:\n // if there is no alignment passed in, the Lightning Text default is \"left\"\n console.warn(\n `Expected \"textAlign\" values are \"left,\" \"center,\" and \"right,\" but instead, ${align} was received and will fall back to \"left.\"`\n );\n return 'flex-start';\n }\n}\n\n/**\n * Prevents user input radius from inverting.\n *\n * @param {number} user input radius\n * @param {number} width\n * @param {number} height\n * @param {number} offset\n * @return {number} max radius for object before border begins to invert\n */\nexport function getMaxRoundRadius(radius, width, height, offset = 0) {\n const maxRadius = r =>\n Math.max(0, Math.min(r, Math.min(width, height) / 2) + offset);\n return Array.isArray(radius)\n ? radius.map(r => Number(maxRadius(r)) || 0)\n : Number(maxRadius(radius)) || 0;\n}\n\nconst utils = {\n isMarkupString,\n capitalizeFirstLetter,\n degreesToRadians,\n downloadFile,\n delayForAnimation,\n stringifyCompare,\n objectPropertyOf,\n flatten,\n getDimension,\n getFirstNumber,\n measureTextWidth,\n clone,\n getMergeValue,\n RoundRect,\n rgba2argb,\n getValFromObjPath,\n reduceFraction,\n getValidColor,\n getHexColor,\n getAspectRatioH,\n getAspectRatioW,\n getWidthByUpCount,\n getDimensions,\n getWidthByColumnSpan,\n createConditionalZContext,\n watchForUpdates,\n convertTextAlignToFlexJustify,\n getMaxRoundRadius\n};\n\nexport default utils;\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\nCreate a Lightning Object pool and then get the component from the pool.\n\nBy default we create two objects, with expectations that one is used at a time\n\nLearn more about object pools\nhttps://egghead.io/blog/object-pool-design-pattern\n*/\n\nconst pools = new Map();\n\nfunction get(key) {\n if (pools.has(key)) {\n const pool = pools.get(key);\n let index = pool.index;\n\n if (index >= pool.components.length) {\n index = 0;\n }\n pool.index = index + 1;\n\n return pool.components[index];\n }\n\n return false;\n}\n\nfunction clear() {\n pools.clear();\n}\n\nfunction create({ name, component, stage, size = 2 }) {\n if (pools.has(name)) {\n return get(name);\n }\n\n component = component || { type: name };\n const components = [];\n for (let i = 0; i < size; i++) {\n components.push(stage.c(component));\n }\n\n pools.set(name, {\n index: 0,\n components\n });\n\n return get(name);\n}\n\nexport default {\n get,\n create,\n clear\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { context } from '@lightningjs/ui-components/src';\n\n// creates an array of extensions\n// added to the theme by setTheme in themeSelect\n// const extensions = [];\n\nexport const themeSelectFromMessageEvent = event => {\n themeSelect(event.data.theme);\n};\n// called in ThemePicker\nexport const themeSelect = theme => {\n if (!theme) return;\n let targetTheme;\n switch (theme) {\n // Insert other themes to swap to here\n // Can also utilize the \"extensions\" array above to add to the theme\n default:\n targetTheme = {};\n break;\n }\n return targetTheme.name && context.theme.name !== targetTheme.name\n ? context.setTheme(targetTheme)\n : Promise.resolve();\n};\n\n// registers all window events needed on load\n// called in preview.js file\nexport const registerEventListeners = () => {\n // logger and stores themes\n context.debug = true;\n context.on('themeUpdate', () => {\n window.parent.postMessage('themeSet', '*');\n });\n\n // Prevent scrolling when navigating with arrows on canvas\n window.addEventListener(\n 'keydown',\n function (e) {\n if (\n ['Space', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].indexOf(\n e.code\n ) > -1\n ) {\n e.preventDefault();\n }\n },\n false\n );\n context.storybookCustomTheme = JSON.parse(JSON.stringify(context.theme));\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport 'lightningInspect';\nimport {\n withAnnouncer,\n Speech,\n pool,\n context\n} from '@lightningjs/ui-components/src';\nimport { themeSelectFromMessageEvent } from './.storybook/utils/registerEvents';\n\n/**\n * creates the Lightning App and attaches it to the DOM for use in Storybook\n * @returns Lightning App\n */\nexport const createApp = parameters => {\n // Make sure app is only created once if path=/story\n if (window.top.location.search.indexOf('path=/docs/') <= -1) {\n if (window.APP) return window.APP;\n }\n\n pool.clear();\n\n const announcerOptions = {\n language: 'en-US',\n ...parameters.announcerOptions\n };\n\n const appParams = {\n stage: {\n w: 1280,\n h: 720,\n precision: 2 / 3,\n canvas2d: false,\n useImageWorker: false,\n inspector: false,\n defaultFontFace: 'XfinityStandardMedium',\n fontSharp: {\n precision: 2 / 3,\n fontSize: 12\n }\n },\n debug: true\n };\n\n window.CONTEXT = context; // Used by addons\n\n window.APP = new (class LightningUIApp extends withAnnouncer(\n lng.Application,\n Speech,\n announcerOptions\n ) {\n _construct() {\n this.announcerTimeout = 15 * 1000;\n }\n\n _attach() {\n window.addEventListener('message', themeSelectFromMessageEvent, false);\n }\n\n $storyChanged() {\n this.emit('storyChanged');\n }\n\n _getFocused() {\n return ((this.childList.first || {}).childList || {}).first || this;\n }\n })(appParams);\n document.body.appendChild(window.APP.stage.getCanvas());\n return window.APP;\n};\n\nexport const clearInspector = () => {\n // Clear any lightning inspector info\n if (document.querySelectorAll('[type=StoryApp]').length > 1) {\n const div = document.querySelector('[type=StoryApp]');\n div && div.parentNode.remove();\n }\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n GridOverlay,\n context,\n utils,\n TextBox\n} from '@lightningjs/ui-components/src';\nimport { createApp, clearInspector } from '../../../index';\n\nlet previousID = null;\nlet remountProps = {};\n\n/**\n * returns true if any of the following are true\n * - if the selected story changed\n * - parameters.remountAll is true on the story\n * - an arg changes an its associated argType has a remount property set to true\n * @returns boolean of if the story component should remount\n */\nfunction shouldTriggerUpdate({ id, args, argTypes, parameters }) {\n const storyChanged = previousID !== id;\n let triggerUpdate = storyChanged;\n previousID = id;\n\n // create remountProps object to track which props should trigger remounting\n if (storyChanged) {\n remountProps = {};\n if (parameters.remountAll) {\n // track all props except mode for triggering remount\n Object.keys(args).forEach(key => {\n if (key === 'mode') {\n return;\n }\n remountProps[key] = args[key];\n });\n } else {\n // track only props with truthy remount property on their associated argType\n Object.keys(argTypes).forEach(key => {\n if (argTypes[key].remount) {\n remountProps[key] = args[key];\n }\n });\n }\n }\n\n // evaluate if any props tracked in remountProps changed and should trigger a remount\n Object.keys(remountProps).forEach(key => {\n if (remountProps[key] !== args[key]) {\n triggerUpdate = true;\n remountProps[key] = args[key];\n }\n });\n\n return triggerUpdate;\n}\n\n/** creates a global decorator that creates a single instance of the Lightning app */\n\nexport const withLightning = (\n StoryComponent,\n { id, args, argTypes, parameters, globals }\n) => {\n /**\n * the Lightning Element in the 'dom'\n */\n const app = createApp({ theme: globals.LUITheme });\n clearInspector();\n app.announcerEnabled = globals.announce;\n app.debug = globals.announce;\n // toggle stage color\n !globals.stageColor\n ? app.stage.setClearColor(utils.getValidColor('#21232A'))\n : app.stage.setClearColor(utils.getValidColor('#cccccc'));\n\n // // If an update is required patch in the new child element\n if (shouldTriggerUpdate({ id, args, argTypes, parameters })) {\n app.childList.clear();\n app.childList.a({\n StoryComponent: {\n type: class extends StoryComponent() {\n static _states() {\n return [\n class ModeUnfocusState extends this {\n _getFocused() {\n return this;\n }\n },\n class ModeFocusState extends this {\n _getFocused() {\n return this.componentTarget; // Text Element\n }\n }\n ];\n }\n // FIXME: Assess what config.optimization.minimize is doing different in production vs develop - this was prior to v7 upgrade\n get componentTarget() {\n // using this check on type Element because production vs develop build issue\n return this.childList.first instanceof lng.Component\n ? this.childList.first\n : this;\n }\n _init() {\n if (this.componentTarget) {\n // Notify application every time the style is updated. Used for componentStyles panel\n this.componentTarget.on('styleUpdated', () => {\n //FIXME: why are we setting this time out here and in setup?\n setTimeout(() => {\n this.fireAncestors('$storyChanged');\n });\n });\n }\n super._init();\n this._refocus(); // Force Lightning to reset focus\n }\n _setup() {\n // This ensures the component has its args before the first update cycle.\n if (Object.keys(args).length) {\n const argsToPatch = {};\n for (const prop in args) {\n // Apply arguments from controls\n const propValue =\n 'undefined' !== typeof args[prop]\n ? args[prop]\n : parameters.argTypes[prop].defaultValue;\n if (!parameters.argActions || !parameters.argActions[prop]) {\n argsToPatch[prop] = propValue;\n }\n }\n this.componentTarget.patch({\n ...argsToPatch\n });\n }\n\n setTimeout(() => {\n this.fireAncestors('$storyChanged');\n });\n }\n },\n w: w => w,\n h: h => h,\n x: context.theme.layout.marginX,\n y: context.theme.layout.marginY\n }\n });\n app._refocus();\n }\n\n // sets mode\n app\n .tag('StoryComponent')\n ._setState(\n !args.mode || (args.mode && args.mode === 'focused')\n ? 'ModeFocusState'\n : 'ModeUnfocusState'\n );\n //forces position update on theme change instead of just when triggerUpdate is true\n context.on('themeUpdate', () => {\n app.tag('StoryComponent') &&\n app.tag('StoryComponent').patch(\n parameters.storyDetails\n ? {\n x: context.theme.layout.marginX\n }\n : {\n x: context.theme.layout.marginX,\n y: context.theme.layout.marginY\n }\n );\n });\n if (!app.tag('GridOverlay')) {\n app.childList.a({ GridOverlay: { type: GridOverlay, zIndex: 100 } });\n }\n app.tag('GridOverlay').patch({\n // do not render this on top of the actual GridOverlay component's story\n alpha: id.includes('gridoverlay')\n ? 0\n : parseFloat(globals['GridOverlay-alpha']),\n showColumns: globals['GridOverlay-toggle-showColumns'] === 'true',\n showMargins: globals['GridOverlay-toggle-showMargins'] === 'true',\n showSafe: globals['GridOverlay-toggle-showSafe'] === 'true',\n showGutters: globals['GridOverlay-toggle-showGutters'] === 'true',\n showText: globals['GridOverlay-toggle-showText'] === 'true'\n });\n\n // add optional story description to the canvas\n if (parameters.storyDetails) {\n if (!app.tag('StoryDetails')) {\n const StoryDetails = {\n StoryDetails: {\n type: TextBox,\n content: parameters.storyDetails,\n style: {\n textStyle: {\n wordWrapWidth:\n context.theme.layout.screenW - context.theme.spacer.sm * 2\n }\n },\n x: context.theme.spacer.sm,\n y: context.theme.spacer.sm,\n onAfterUpdate: ({ y, h }) => {\n if (h > context.theme.layout.marginY) {\n app.tag('StoryComponent').y = y + h + context.theme.spacer.xl;\n }\n }\n }\n };\n app.childList.a(StoryDetails);\n }\n\n app.tag('StoryDetails').patch({ content: parameters.storyDetails });\n }\n\n /**\n * the first child under StoryComponent\n */\n const LightningUIComponent = app.tag('StoryComponent').childList.first;\n\n if (LightningUIComponent && Object.keys(args).length) {\n for (const prop in args) {\n // Apply arguments from controls\n const propValue =\n 'undefined' !== typeof args[prop]\n ? args[prop]\n : parameters.argTypes[prop].defaultValue;\n if (!parameters.argActions || !parameters.argActions[prop]) {\n LightningUIComponent[prop] = propValue;\n }\n }\n }\n // applying argAction\n if (\n LightningUIComponent &&\n parameters.argActions &&\n Object.keys(parameters.argActions).length\n ) {\n for (const prop in parameters.argActions) {\n if ('function' === typeof parameters.argActions[prop]) {\n try {\n parameters.argActions[prop](args[prop], app.tag('StoryComponent'));\n } catch (err) {\n console.error('unable to apply argAction for ' + prop);\n }\n }\n }\n return app.getCanvas();\n }\n return app.stage.getCanvas();\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// these two lines need to be in this order\n// to wait until the inspector is enabled before attaching it\nimport { withLightning } from './addons/decorators/withLightning';\nimport { registerEventListeners, themeSelect } from './utils/registerEvents';\nimport { themes } from '@storybook/theming';\n\n// loads window event listeners\nregisterEventListeners();\n/**\n * custom global props that can be accessed in decorators and add-ons\n * globalTypes can only be set in preview.js\n * @see https://storybook.js.org/docs/react/essentials/toolbars-and-globals#globals\n */\nconst preview = {\n parameters: {\n actions: { argTypesRegex: '^on.*' },\n backgrounds: {\n disable: true\n },\n controls: {\n hideNoControlsWarning: true,\n expanded: true,\n sort: 'requiredFirst'\n },\n docs: {\n theme: themes.dark,\n argTypes: {\n sort: 'alpha',\n exclude: ['mode']\n }\n },\n options: {\n /** NOTE: v7 storySort must be self-contained function & no reference to outside variables\n https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#v7-style-story-sort\n */\n storySort: {\n method: 'alphabetical',\n order: [\n 'Docs',\n [\n 'Introduction',\n 'Read Me',\n 'Base',\n 'Contributing',\n 'Lightning Resources',\n 'Lightning Community Guide',\n 'Theming',\n [\n 'Overview',\n 'Component Config',\n 'Tones',\n 'Modes',\n 'Extensions',\n 'Subtheming',\n 'Use in Storybook',\n 'Theme Properties',\n '*'\n ],\n 'Unit Testing',\n [\n 'Overview',\n 'Test Renderer',\n 'Test Utils',\n ['makeCreateComponent', '*']\n ]\n ],\n 'Collections',\n 'Utilities',\n 'Components',\n 'Patterns',\n 'Templates'\n ]\n }\n }\n },\n globalTypes: {\n LUITheme: {\n name: 'Theme',\n description: 'Theme select',\n defaultValue: 'base'\n },\n 'GridOverlay-alpha': {\n defaultValue: '0'\n },\n 'GridOverlay-toggle-showColumns': {\n defaultValue: 'true'\n },\n 'GridOverlay-toggle-showMargins': {\n defaultValue: 'false'\n },\n 'GridOverlay-toggle-showSafe': {\n defaultValue: 'false'\n },\n 'GridOverlay-toggle-showGutters': {\n defaultValue: 'false'\n },\n 'GridOverlay-toggle-showText': {\n defaultValue: 'false'\n },\n announce: {\n defaultValue: false\n },\n stageColor: {\n defaultValue: false\n }\n },\n decorators: [withLightning],\n loaders: [\n async ({ globals }) => {\n await themeSelect(globals.LUITheme);\n return;\n }\n ]\n};\nexport default preview;\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = \"../../../node_modules/@storybook/core/dist/theming sync recursive\";\nmodule.exports = webpackEmptyContext;","var map = {\n\t\"./Overview.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/Overview.mdx\",\n\t\t5600,\n\t\t9436\n\t],\n\t\"./TestRenderer/create.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/TestRenderer/create.mdx\",\n\t\t5600,\n\t\t7557\n\t],\n\t\"./TestRenderer/toJSON.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/TestRenderer/toJSON.mdx\",\n\t\t5600,\n\t\t2012\n\t],\n\t\"./TestUtils/completeAnimation.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/completeAnimation.mdx\",\n\t\t5600,\n\t\t9738\n\t],\n\t\"./TestUtils/fastForward.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/fastForward.mdx\",\n\t\t5600,\n\t\t4942\n\t],\n\t\"./TestUtils/makeCreateComponent.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/makeCreateComponent.mdx\",\n\t\t5600,\n\t\t1200\n\t],\n\t\"./TestUtils/nextTick.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/nextTick.mdx\",\n\t\t5600,\n\t\t9221\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = \"../../@lightningjs/ui-components-test-utils/src/docs lazy recursive ^\\\\.\\\\/.*$ include: (?%21.*node_modules)(?:\\\\/@lightningjs\\\\/ui-components-test-utils\\\\/src\\\\/docs(?:\\\\/(?%21\\\\.)(?:(?:(?%21(?:^%7C\\\\/)\\\\.).)*?)\\\\/%7C\\\\/%7C$)(?%21\\\\.)(?=.)[^/]*?\\\\.mdx)$\";\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./Overview.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/Overview.mdx\",\n\t\t5600,\n\t\t9436\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = \"../../@lightningjs/ui-components-test-utils/src/docs lazy recursive ^\\\\.\\\\/.*$ include: (?%21.*node_modules)(?:\\\\/@lightningjs\\\\/ui-components-test-utils\\\\/src\\\\/docs\\\\/(?%21\\\\.)(?=.)[^/]*?\\\\.mdx)$\";\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./components/Artwork/Artwork.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Artwork/Artwork.mdx\",\n\t\t5600,\n\t\t1930,\n\t\t3121\n\t],\n\t\"./components/Badge/Badge.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Badge/Badge.mdx\",\n\t\t5600,\n\t\t1185\n\t],\n\t\"./components/Button/Button.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Button/Button.mdx\",\n\t\t5600,\n\t\t463\n\t],\n\t\"./components/Card/Card.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/Card.mdx\",\n\t\t5600,\n\t\t8007\n\t],\n\t\"./components/Card/CardRadio.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardRadio.mdx\",\n\t\t5600,\n\t\t3878,\n\t\t9172\n\t],\n\t\"./components/Card/CardSection.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardSection.mdx\",\n\t\t5600,\n\t\t3878,\n\t\t7972\n\t],\n\t\"./components/Card/CardTitle.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardTitle.mdx\",\n\t\t5600,\n\t\t3878,\n\t\t9983\n\t],\n\t\"./components/CardContent/CardContent.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContent.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t5225\n\t],\n\t\"./components/Checkbox/Checkbox.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Checkbox/Checkbox.mdx\",\n\t\t5600,\n\t\t669\n\t],\n\t\"./components/Column/Column.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Column/Column.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t2341,\n\t\t6243\n\t],\n\t\"./components/Control/Control.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Control/Control.mdx\",\n\t\t5600,\n\t\t4165\n\t],\n\t\"./components/ControlRow/ControlRow.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t1323,\n\t\t1735,\n\t\t8237\n\t],\n\t\"./components/FocusManager/FocusManager.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t7633\n\t],\n\t\"./components/Gradient/Gradient.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Gradient/Gradient.mdx\",\n\t\t5600,\n\t\t9367\n\t],\n\t\"./components/GridOverlay/GridOverlay.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.mdx\",\n\t\t5600,\n\t\t9153\n\t],\n\t\"./components/Icon/Icon.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Icon/Icon.mdx\",\n\t\t5600,\n\t\t3901\n\t],\n\t\"./components/InlineContent/InlineContent.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.mdx\",\n\t\t5600,\n\t\t377\n\t],\n\t\"./components/Input/Input.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Input/Input.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t2363,\n\t\t8593\n\t],\n\t\"./components/Key/Key.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Key/Key.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t3069,\n\t\t8901\n\t],\n\t\"./components/Keyboard/Keyboard.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/Keyboard.mdx\",\n\t\t5600,\n\t\t8613\n\t],\n\t\"./components/Knob/Knob.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Knob/Knob.mdx\",\n\t\t5600,\n\t\t3211\n\t],\n\t\"./components/Label/Label.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Label/Label.mdx\",\n\t\t5600,\n\t\t8601\n\t],\n\t\"./components/ListItem/ListItem.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItem.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t2067,\n\t\t9529\n\t],\n\t\"./components/ListItem/ListItemPicker.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItemPicker.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t2067,\n\t\t5316,\n\t\t6391\n\t],\n\t\"./components/ListItem/ListItemSlider.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItemSlider.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t4042,\n\t\t2067,\n\t\t3245,\n\t\t5146\n\t],\n\t\"./components/Marquee/Marquee.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Marquee/Marquee.mdx\",\n\t\t5600,\n\t\t8189\n\t],\n\t\"./components/MetadataBase/MetadataBase.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataBase/MetadataBase.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t6923\n\t],\n\t\"./components/MetadataCard/MetadataCard.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataCard/MetadataCard.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t3645\n\t],\n\t\"./components/MetadataCardContent/MetadataCardContent.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataCardContent/MetadataCardContent.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t6915,\n\t\t7365\n\t],\n\t\"./components/MetadataTile/MetadataTile.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataTile/MetadataTile.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t4077\n\t],\n\t\"./components/NavigationManager/NavigationManager.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t8965\n\t],\n\t\"./components/ProgressBar/ProgressBar.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ProgressBar/ProgressBar.mdx\",\n\t\t5600,\n\t\t7809\n\t],\n\t\"./components/Provider/Provider.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Provider/Provider.mdx\",\n\t\t5600,\n\t\t997\n\t],\n\t\"./components/Radio/Radio.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Radio/Radio.mdx\",\n\t\t5600,\n\t\t8225\n\t],\n\t\"./components/Row/Row.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Row/Row.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t1323,\n\t\t6361\n\t],\n\t\"./components/ScrollWrapper/ScrollWrapper.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4042,\n\t\t1137\n\t],\n\t\"./components/Shadow/Shadow.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Shadow/Shadow.mdx\",\n\t\t5600,\n\t\t3879\n\t],\n\t\"./components/Slider/Slider.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Slider/Slider.mdx\",\n\t\t5600,\n\t\t7525\n\t],\n\t\"./components/Surface/Surface.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Surface/Surface.mdx\",\n\t\t5600,\n\t\t8057\n\t],\n\t\"./components/TabBar/Tab.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TabBar/Tab.mdx\",\n\t\t5600,\n\t\t9023,\n\t\t4996\n\t],\n\t\"./components/TabBar/TabBar.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TabBar/TabBar.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t9023,\n\t\t643\n\t],\n\t\"./components/TextBox/TextBox.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TextBox/TextBox.mdx\",\n\t\t5600,\n\t\t3865\n\t],\n\t\"./components/Tile/Tile.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Tile/Tile.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3963\n\t],\n\t\"./components/TitleRow/TitleRow.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TitleRow/TitleRow.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t1323,\n\t\t6739\n\t],\n\t\"./components/Toggle/Toggle.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Toggle/Toggle.mdx\",\n\t\t5600,\n\t\t7043\n\t],\n\t\"./components/Tooltip/Tooltip.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t2833\n\t],\n\t\"./docs/Base.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/Base.mdx\",\n\t\t5600,\n\t\t9382\n\t],\n\t\"./docs/Introduction.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/Introduction.mdx\",\n\t\t5600,\n\t\t3485\n\t],\n\t\"./docs/LightningCommunityGuide.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/LightningCommunityGuide.mdx\",\n\t\t5600,\n\t\t2000\n\t],\n\t\"./docs/LightningResources.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/LightningResources.mdx\",\n\t\t5600,\n\t\t6636\n\t],\n\t\"./docs/Storybook.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/Storybook.mdx\",\n\t\t5600,\n\t\t879\n\t],\n\t\"./docs/Theming.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/Theming.mdx\",\n\t\t5600,\n\t\t6681\n\t],\n\t\"./docs/ThemingAttributes.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingAttributes.mdx\",\n\t\t5600,\n\t\t7538\n\t],\n\t\"./docs/ThemingComponentConfig.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingComponentConfig.mdx\",\n\t\t5600,\n\t\t696\n\t],\n\t\"./docs/ThemingExtensions.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingExtensions.mdx\",\n\t\t5600,\n\t\t2851\n\t],\n\t\"./docs/ThemingHierarchy.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingHierarchy.mdx\",\n\t\t5600,\n\t\t7190\n\t],\n\t\"./docs/ThemingMode.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingMode.mdx\",\n\t\t5600,\n\t\t7468\n\t],\n\t\"./docs/ThemingStorybook.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingStorybook.mdx\",\n\t\t5600,\n\t\t8543\n\t],\n\t\"./docs/ThemingSubTheming.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingSubTheming.mdx\",\n\t\t5600,\n\t\t4713\n\t],\n\t\"./docs/ThemingTone.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingTone.mdx\",\n\t\t5600,\n\t\t8773\n\t],\n\t\"./docs/ThemingTutorial.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingTutorial.mdx\",\n\t\t5600,\n\t\t6711\n\t],\n\t\"./mixins/withAnnouncer/withAnnouncer.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t5715\n\t],\n\t\"./mixins/withClassCache/withClassCache.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withClassCache/withClassCache.mdx\",\n\t\t5600,\n\t\t1105\n\t],\n\t\"./mixins/withEditItems/withEditItems.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withEditItems/withEditItems.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t1323,\n\t\t2555\n\t],\n\t\"./mixins/withHandleKey/withHandleKey.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withHandleKey/withHandleKey.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3515\n\t],\n\t\"./mixins/withLayout/withLayout.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withLayout/withLayout.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4433\n\t],\n\t\"./mixins/withLongPress/withLongPress.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3195\n\t],\n\t\"./mixins/withMarqueeSync/withMarqueeSync.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.mdx\",\n\t\t5600,\n\t\t1587\n\t],\n\t\"./mixins/withSelections/withSelections.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withSelections/withSelections.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t5675\n\t],\n\t\"./mixins/withTags/withTags.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withTags/withTags.mdx\",\n\t\t5600,\n\t\t8651\n\t],\n\t\"./mixins/withThemeStyles/withThemeStyles.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withThemeStyles/withThemeStyles.mdx\",\n\t\t5600,\n\t\t4947\n\t],\n\t\"./mixins/withUpdates/withUpdates.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withUpdates/withUpdates.mdx\",\n\t\t5600,\n\t\t4899\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = \"../../@lightningjs/ui-components/src lazy recursive ^\\\\.\\\\/.*$ include: (?%21.*node_modules)(?:\\\\/@lightningjs\\\\/ui-components\\\\/src(?:\\\\/(?%21\\\\.)(?:(?:(?%21(?:^%7C\\\\/)\\\\.).)*?)\\\\/%7C\\\\/%7C$)(?%21\\\\.)(?=.)[^/]*?\\\\.mdx)$\";\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./components/Artwork/Artwork.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Artwork/Artwork.stories.js\",\n\t\t1930,\n\t\t5139\n\t],\n\t\"./components/Artwork/Artwork.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Artwork/Artwork.stories.js\",\n\t\t1930,\n\t\t5139\n\t],\n\t\"./components/Badge/Badge.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js\",\n\t\t291\n\t],\n\t\"./components/Badge/Badge.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js\",\n\t\t291\n\t],\n\t\"./components/Button/Button.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Button/Button.stories.js\",\n\t\t5338,\n\t\t7721\n\t],\n\t\"./components/Button/Button.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Button/Button.stories.js\",\n\t\t5338,\n\t\t7721\n\t],\n\t\"./components/Button/ButtonSmall.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Button/ButtonSmall.stories.js\",\n\t\t5338,\n\t\t6610\n\t],\n\t\"./components/Button/ButtonSmall.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Button/ButtonSmall.stories.js\",\n\t\t5338,\n\t\t6610\n\t],\n\t\"./components/Card/Card.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/Card.stories.js\",\n\t\t3878,\n\t\t2513\n\t],\n\t\"./components/Card/Card.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/Card.stories.js\",\n\t\t3878,\n\t\t2513\n\t],\n\t\"./components/Card/CardRadio.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardRadio.stories.js\",\n\t\t3878,\n\t\t9134\n\t],\n\t\"./components/Card/CardRadio.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardRadio.stories.js\",\n\t\t3878,\n\t\t9134\n\t],\n\t\"./components/Card/CardSection.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardSection.stories.js\",\n\t\t3878,\n\t\t5278\n\t],\n\t\"./components/Card/CardSection.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardSection.stories.js\",\n\t\t3878,\n\t\t5278\n\t],\n\t\"./components/Card/CardTitle.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardTitle.stories.js\",\n\t\t3878,\n\t\t1977\n\t],\n\t\"./components/Card/CardTitle.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardTitle.stories.js\",\n\t\t3878,\n\t\t1977\n\t],\n\t\"./components/CardContent/CardContent.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContent.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11\n\t],\n\t\"./components/CardContent/CardContent.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContent.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11\n\t],\n\t\"./components/CardContent/CardContentHorizontal.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentHorizontal.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t5367\n\t],\n\t\"./components/CardContent/CardContentHorizontal.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentHorizontal.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t5367\n\t],\n\t\"./components/CardContent/CardContentHorizontalLarge.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentHorizontalLarge.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t9856\n\t],\n\t\"./components/CardContent/CardContentHorizontalLarge.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentHorizontalLarge.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t9856\n\t],\n\t\"./components/CardContent/CardContentVertical.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentVertical.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t4485\n\t],\n\t\"./components/CardContent/CardContentVertical.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentVertical.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t4485\n\t],\n\t\"./components/CardContent/CardContentVerticalSmall.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentVerticalSmall.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t238\n\t],\n\t\"./components/CardContent/CardContentVerticalSmall.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentVerticalSmall.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t238\n\t],\n\t\"./components/Checkbox/Checkbox.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Checkbox/Checkbox.stories.js\",\n\t\t6151\n\t],\n\t\"./components/Checkbox/Checkbox.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Checkbox/Checkbox.stories.js\",\n\t\t6151\n\t],\n\t\"./components/Checkbox/CheckboxSmall.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Checkbox/CheckboxSmall.stories.js\",\n\t\t8040\n\t],\n\t\"./components/Checkbox/CheckboxSmall.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Checkbox/CheckboxSmall.stories.js\",\n\t\t8040\n\t],\n\t\"./components/Column/Column.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Column/Column.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t2341\n\t],\n\t\"./components/Column/Column.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Column/Column.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t2341\n\t],\n\t\"./components/Control/Control.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Control/Control.stories.js\",\n\t\t5338,\n\t\t6095\n\t],\n\t\"./components/Control/Control.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Control/Control.stories.js\",\n\t\t5338,\n\t\t6095\n\t],\n\t\"./components/Control/ControlSmall.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Control/ControlSmall.stories.js\",\n\t\t5338,\n\t\t1735,\n\t\t2368\n\t],\n\t\"./components/Control/ControlSmall.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Control/ControlSmall.stories.js\",\n\t\t5338,\n\t\t1735,\n\t\t2368\n\t],\n\t\"./components/ControlRow/ControlRow.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t1323,\n\t\t1735,\n\t\t4759\n\t],\n\t\"./components/ControlRow/ControlRow.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t1323,\n\t\t1735,\n\t\t4759\n\t],\n\t\"./components/FocusManager/FocusManager.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.stories.js\",\n\t\t5338,\n\t\t9251\n\t],\n\t\"./components/FocusManager/FocusManager.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.stories.js\",\n\t\t5338,\n\t\t9251\n\t],\n\t\"./components/Gradient/Gradient.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Gradient/Gradient.stories.js\",\n\t\t289\n\t],\n\t\"./components/Gradient/Gradient.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Gradient/Gradient.stories.js\",\n\t\t289\n\t],\n\t\"./components/GridOverlay/GridOverlay.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.stories.js\",\n\t\t4179\n\t],\n\t\"./components/GridOverlay/GridOverlay.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.stories.js\",\n\t\t4179\n\t],\n\t\"./components/Icon/Icon.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Icon/Icon.stories.js\",\n\t\t8311\n\t],\n\t\"./components/Icon/Icon.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Icon/Icon.stories.js\",\n\t\t8311\n\t],\n\t\"./components/InlineContent/InlineContent.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js\",\n\t\t9627\n\t],\n\t\"./components/InlineContent/InlineContent.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js\",\n\t\t9627\n\t],\n\t\"./components/Input/Input.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Input/Input.stories.js\",\n\t\t5338,\n\t\t2363,\n\t\t6115\n\t],\n\t\"./components/Input/Input.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Input/Input.stories.js\",\n\t\t5338,\n\t\t2363,\n\t\t6115\n\t],\n\t\"./components/Key/Key.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Key/Key.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t2639\n\t],\n\t\"./components/Key/Key.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Key/Key.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t2639\n\t],\n\t\"./components/Keyboard/Keyboard.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/Keyboard.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575\n\t],\n\t\"./components/Keyboard/Keyboard.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/Keyboard.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575\n\t],\n\t\"./components/Keyboard/KeyboardEmail.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardEmail.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t1677\n\t],\n\t\"./components/Keyboard/KeyboardEmail.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardEmail.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t1677\n\t],\n\t\"./components/Keyboard/KeyboardFullscreen.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardFullscreen.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t8892\n\t],\n\t\"./components/Keyboard/KeyboardFullscreen.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardFullscreen.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t8892\n\t],\n\t\"./components/Keyboard/KeyboardInput.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardInput.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t2363,\n\t\t2649\n\t],\n\t\"./components/Keyboard/KeyboardInput.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardInput.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t2363,\n\t\t2649\n\t],\n\t\"./components/Keyboard/KeyboardNumbers.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardNumbers.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t6691\n\t],\n\t\"./components/Keyboard/KeyboardNumbers.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardNumbers.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t6691\n\t],\n\t\"./components/Keyboard/KeyboardQwerty.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardQwerty.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t8035\n\t],\n\t\"./components/Keyboard/KeyboardQwerty.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardQwerty.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t8035\n\t],\n\t\"./components/Keyboard/KeyboardSearch.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardSearch.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t2643\n\t],\n\t\"./components/Keyboard/KeyboardSearch.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardSearch.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t2643\n\t],\n\t\"./components/Knob/Knob.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Knob/Knob.stories.js\",\n\t\t1661\n\t],\n\t\"./components/Knob/Knob.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Knob/Knob.stories.js\",\n\t\t1661\n\t],\n\t\"./components/Label/Label.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Label/Label.stories.js\",\n\t\t6747\n\t],\n\t\"./components/Label/Label.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Label/Label.stories.js\",\n\t\t6747\n\t],\n\t\"./components/ListItem/ListItem.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItem.stories.js\",\n\t\t5338,\n\t\t2067,\n\t\t4827\n\t],\n\t\"./components/ListItem/ListItem.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItem.stories.js\",\n\t\t5338,\n\t\t2067,\n\t\t4827\n\t],\n\t\"./components/ListItem/ListItemPicker.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItemPicker.stories.js\",\n\t\t5338,\n\t\t5316,\n\t\t5137\n\t],\n\t\"./components/ListItem/ListItemPicker.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItemPicker.stories.js\",\n\t\t5338,\n\t\t5316,\n\t\t5137\n\t],\n\t\"./components/ListItem/ListItemSlider.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItemSlider.stories.js\",\n\t\t5338,\n\t\t4042,\n\t\t3245,\n\t\t4188\n\t],\n\t\"./components/ListItem/ListItemSlider.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItemSlider.stories.js\",\n\t\t5338,\n\t\t4042,\n\t\t3245,\n\t\t4188\n\t],\n\t\"./components/Marquee/Marquee.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Marquee/Marquee.stories.js\",\n\t\t6423\n\t],\n\t\"./components/Marquee/Marquee.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Marquee/Marquee.stories.js\",\n\t\t6423\n\t],\n\t\"./components/MetadataBase/MetadataBase.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataBase/MetadataBase.stories.js\",\n\t\t7679,\n\t\t9725\n\t],\n\t\"./components/MetadataBase/MetadataBase.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataBase/MetadataBase.stories.js\",\n\t\t7679,\n\t\t9725\n\t],\n\t\"./components/MetadataCard/MetadataCard.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataCard/MetadataCard.stories.js\",\n\t\t7679,\n\t\t1655\n\t],\n\t\"./components/MetadataCard/MetadataCard.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataCard/MetadataCard.stories.js\",\n\t\t7679,\n\t\t1655\n\t],\n\t\"./components/MetadataCardContent/MetadataCardContent.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataCardContent/MetadataCardContent.stories.js\",\n\t\t7679,\n\t\t6915,\n\t\t287\n\t],\n\t\"./components/MetadataCardContent/MetadataCardContent.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataCardContent/MetadataCardContent.stories.js\",\n\t\t7679,\n\t\t6915,\n\t\t287\n\t],\n\t\"./components/MetadataTile/MetadataTile.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataTile/MetadataTile.stories.js\",\n\t\t7679,\n\t\t983\n\t],\n\t\"./components/MetadataTile/MetadataTile.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataTile/MetadataTile.stories.js\",\n\t\t7679,\n\t\t983\n\t],\n\t\"./components/NavigationManager/NavigationManager.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.stories.js\",\n\t\t5338,\n\t\t7807\n\t],\n\t\"./components/NavigationManager/NavigationManager.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.stories.js\",\n\t\t5338,\n\t\t7807\n\t],\n\t\"./components/ProgressBar/ProgressBar.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ProgressBar/ProgressBar.stories.js\",\n\t\t5427\n\t],\n\t\"./components/ProgressBar/ProgressBar.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ProgressBar/ProgressBar.stories.js\",\n\t\t5427\n\t],\n\t\"./components/Provider/Provider.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Provider/Provider.stories.js\",\n\t\t3327\n\t],\n\t\"./components/Provider/Provider.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Provider/Provider.stories.js\",\n\t\t3327\n\t],\n\t\"./components/Radio/Radio.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Radio/Radio.stories.js\",\n\t\t547\n\t],\n\t\"./components/Radio/Radio.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Radio/Radio.stories.js\",\n\t\t547\n\t],\n\t\"./components/Radio/RadioSmall.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Radio/RadioSmall.stories.js\",\n\t\t2932\n\t],\n\t\"./components/Radio/RadioSmall.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Radio/RadioSmall.stories.js\",\n\t\t2932\n\t],\n\t\"./components/Row/Row.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Row/Row.stories.js\",\n\t\t5338,\n\t\t1323\n\t],\n\t\"./components/Row/Row.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Row/Row.stories.js\",\n\t\t5338,\n\t\t1323\n\t],\n\t\"./components/ScrollWrapper/ScrollWrapper.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4042,\n\t\t7987\n\t],\n\t\"./components/ScrollWrapper/ScrollWrapper.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4042,\n\t\t7987\n\t],\n\t\"./components/Shadow/Shadow.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Shadow/Shadow.stories.js\",\n\t\t3153\n\t],\n\t\"./components/Shadow/Shadow.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Shadow/Shadow.stories.js\",\n\t\t3153\n\t],\n\t\"./components/Slider/Slider.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Slider/Slider.stories.js\",\n\t\t4042,\n\t\t3375\n\t],\n\t\"./components/Slider/Slider.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Slider/Slider.stories.js\",\n\t\t4042,\n\t\t3375\n\t],\n\t\"./components/Slider/SliderLarge.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Slider/SliderLarge.stories.js\",\n\t\t4042,\n\t\t8232\n\t],\n\t\"./components/Slider/SliderLarge.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Slider/SliderLarge.stories.js\",\n\t\t4042,\n\t\t8232\n\t],\n\t\"./components/Surface/Surface.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Surface/Surface.stories.js\",\n\t\t7771\n\t],\n\t\"./components/Surface/Surface.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Surface/Surface.stories.js\",\n\t\t7771\n\t],\n\t\"./components/TabBar/Tab.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TabBar/Tab.stories.js\",\n\t\t9023,\n\t\t46\n\t],\n\t\"./components/TabBar/Tab.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TabBar/Tab.stories.js\",\n\t\t9023,\n\t\t46\n\t],\n\t\"./components/TabBar/TabBar.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TabBar/TabBar.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t9023,\n\t\t8197\n\t],\n\t\"./components/TabBar/TabBar.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TabBar/TabBar.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t9023,\n\t\t8197\n\t],\n\t\"./components/TextBox/TextBox.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js\",\n\t\t8027\n\t],\n\t\"./components/TextBox/TextBox.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js\",\n\t\t8027\n\t],\n\t\"./components/Tile/Tile.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Tile/Tile.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t2877\n\t],\n\t\"./components/Tile/Tile.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Tile/Tile.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t2877\n\t],\n\t\"./components/TitleRow/TitleRow.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TitleRow/TitleRow.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t1323,\n\t\t9861\n\t],\n\t\"./components/TitleRow/TitleRow.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TitleRow/TitleRow.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t1323,\n\t\t9861\n\t],\n\t\"./components/Toggle/Toggle.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Toggle/Toggle.stories.js\",\n\t\t7061\n\t],\n\t\"./components/Toggle/Toggle.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Toggle/Toggle.stories.js\",\n\t\t7061\n\t],\n\t\"./components/Toggle/ToggleSmall.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Toggle/ToggleSmall.stories.js\",\n\t\t5358\n\t],\n\t\"./components/Toggle/ToggleSmall.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Toggle/ToggleSmall.stories.js\",\n\t\t5358\n\t],\n\t\"./components/Tooltip/Tooltip.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.stories.js\",\n\t\t5338,\n\t\t9459\n\t],\n\t\"./components/Tooltip/Tooltip.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.stories.js\",\n\t\t5338,\n\t\t9459\n\t],\n\t\"./docs/ThemingFoundations.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingFoundations.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t6491\n\t],\n\t\"./docs/ThemingFoundations.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingFoundations.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t6491\n\t],\n\t\"./mixins/withAnnouncer/withAnnouncer.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.stories.js\",\n\t\t5338,\n\t\t133\n\t],\n\t\"./mixins/withAnnouncer/withAnnouncer.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.stories.js\",\n\t\t5338,\n\t\t133\n\t],\n\t\"./mixins/withEditItems/withEditItems.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withEditItems/withEditItems.stories.js\",\n\t\t5338,\n\t\t1323,\n\t\t3597\n\t],\n\t\"./mixins/withEditItems/withEditItems.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withEditItems/withEditItems.stories.js\",\n\t\t5338,\n\t\t1323,\n\t\t3597\n\t],\n\t\"./mixins/withHandleKey/withHandleKey.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withHandleKey/withHandleKey.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4637\n\t],\n\t\"./mixins/withHandleKey/withHandleKey.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withHandleKey/withHandleKey.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4637\n\t],\n\t\"./mixins/withLayout/withLayout.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withLayout/withLayout.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4563\n\t],\n\t\"./mixins/withLayout/withLayout.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withLayout/withLayout.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4563\n\t],\n\t\"./mixins/withLongPress/withLongPress.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4877\n\t],\n\t\"./mixins/withLongPress/withLongPress.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4877\n\t],\n\t\"./mixins/withMarqueeSync/withMarqueeSync.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.stories.js\",\n\t\t1909\n\t],\n\t\"./mixins/withMarqueeSync/withMarqueeSync.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.stories.js\",\n\t\t1909\n\t],\n\t\"./mixins/withSelections/withSelections.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withSelections/withSelections.stories.js\",\n\t\t5338,\n\t\t8477\n\t],\n\t\"./mixins/withSelections/withSelections.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withSelections/withSelections.stories.js\",\n\t\t5338,\n\t\t8477\n\t],\n\t\"./mixins/withTags/withTags.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withTags/withTags.stories.js\",\n\t\t6282\n\t],\n\t\"./mixins/withTags/withTags.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withTags/withTags.stories.js\",\n\t\t6282\n\t],\n\t\"./mixins/withThemeStyles/withThemeStyles.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withThemeStyles/withThemeStyles.stories.js\",\n\t\t9285\n\t],\n\t\"./mixins/withThemeStyles/withThemeStyles.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withThemeStyles/withThemeStyles.stories.js\",\n\t\t9285\n\t],\n\t\"./mixins/withUpdates/withUpdates.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withUpdates/withUpdates.stories.js\",\n\t\t8853\n\t],\n\t\"./mixins/withUpdates/withUpdates.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withUpdates/withUpdates.stories.js\",\n\t\t8853\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = \"../../@lightningjs/ui-components/src lazy recursive ^\\\\.\\\\/.*$ include: (?%21.*node_modules)(?:\\\\/@lightningjs\\\\/ui-components\\\\/src(?:\\\\/(?%21\\\\.)(?:(?:(?%21(?:^%7C\\\\/)\\\\.).)*?)\\\\/%7C\\\\/%7C$)(?%21\\\\.)(?=.)[^/]*?\\\\.stories\\\\.(js%7Cjsx%7Cts%7Ctsx))$\";\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./Contributing.mdx\": [\n\t\t\"./src/Contributing.mdx\",\n\t\t5600,\n\t\t4073\n\t],\n\t\"./Readme.mdx\": [\n\t\t\"./src/Readme.mdx\",\n\t\t5600,\n\t\t7511\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = \"./src lazy recursive ^\\\\.\\\\/.*$ include: (?%21.*node_modules)(?:\\\\/src\\\\/(?%21\\\\.)(?=.)[^/]*?\\\\.mdx)$\";\nmodule.exports = webpackAsyncContext;","const pipeline = (x) => x();\n\nconst importers = [\n async (path) => {\n if (!/^\\.[\\\\/](?:src\\/(?!\\.)(?=.)[^/]*?\\.mdx)$/.exec(path)) {\n return;\n }\n \n const pathRemainder = path.substring(6);\n return import(\n /* webpackChunkName: \"[request]\" */\n /* webpackInclude: /(?!.*node_modules)(?:\\/src\\/(?!\\.)(?=.)[^/]*?\\.mdx)$/ */\n './src/' + pathRemainder\n );\n }\n ,\n async (path) => {\n if (!/^(?:\\.\\.\\/\\.\\.\\/@lightningjs\\/ui-components\\/src(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.mdx)$/.exec(path)) {\n return;\n }\n \n const pathRemainder = path.substring(37);\n return import(\n /* webpackChunkName: \"[request]\" */\n /* webpackInclude: /(?!.*node_modules)(?:\\/@lightningjs\\/ui-components\\/src(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.mdx)$/ */\n '../../@lightningjs/ui-components/src/' + pathRemainder\n );\n }\n ,\n async (path) => {\n if (!/^(?:\\.\\.\\/\\.\\.\\/@lightningjs\\/ui-components\\/src(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.stories\\.(js|jsx|ts|tsx))$/.exec(path)) {\n return;\n }\n \n const pathRemainder = path.substring(37);\n return import(\n /* webpackChunkName: \"[request]\" */\n /* webpackInclude: /(?!.*node_modules)(?:\\/@lightningjs\\/ui-components\\/src(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.stories\\.(js|jsx|ts|tsx))$/ */\n '../../@lightningjs/ui-components/src/' + pathRemainder\n );\n }\n ,\n async (path) => {\n if (!/^(?:\\.\\.\\/\\.\\.\\/@lightningjs\\/ui-components-test-utils\\/src\\/docs\\/(?!\\.)(?=.)[^/]*?\\.mdx)$/.exec(path)) {\n return;\n }\n \n const pathRemainder = path.substring(53);\n return import(\n /* webpackChunkName: \"[request]\" */\n /* webpackInclude: /(?!.*node_modules)(?:\\/@lightningjs\\/ui-components-test-utils\\/src\\/docs\\/(?!\\.)(?=.)[^/]*?\\.mdx)$/ */\n '../../@lightningjs/ui-components-test-utils/src/docs/' + pathRemainder\n );\n }\n ,\n async (path) => {\n if (!/^(?:\\.\\.\\/\\.\\.\\/@lightningjs\\/ui-components-test-utils\\/src\\/docs(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.mdx)$/.exec(path)) {\n return;\n }\n \n const pathRemainder = path.substring(53);\n return import(\n /* webpackChunkName: \"[request]\" */\n /* webpackInclude: /(?!.*node_modules)(?:\\/@lightningjs\\/ui-components-test-utils\\/src\\/docs(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.mdx)$/ */\n '../../@lightningjs/ui-components-test-utils/src/docs/' + pathRemainder\n );\n }\n \n];\n\nexport async function importFn(path) {\n for (let i = 0; i < importers.length; i++) {\n const moduleExports = await pipeline(() => importers[i](path));\n if (moduleExports) {\n return moduleExports;\n }\n }\n}","import { global } from '@storybook/global';\n\nimport { ClientApi, PreviewWeb, addons, composeConfigs } from 'storybook/internal/preview-api';\nimport { createBrowserChannel } from 'storybook/internal/channels';\n\nimport { importFn } from './storybook-stories.js';\n\nconst getProjectAnnotations = () =>\ncomposeConfigs([require('/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/html/dist/entry-preview.mjs'),require('/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/html/dist/entry-preview-docs.mjs'),require('/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-essentials/dist/actions/preview.mjs'),require('/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-essentials/dist/highlight/preview.mjs'),require('/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-docs/dist/preview.mjs'),require('/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/packages/apps/lightning-ui-docs/.storybook/preview.js'),]);\n\nconst channel = createBrowserChannel({ page: 'preview' });\naddons.setChannel(channel);\n\nif (global.CONFIG_TYPE === 'DEVELOPMENT'){\nwindow.__STORYBOOK_SERVER_CHANNEL__ = channel;\n}\n\nconst preview = new PreviewWeb(importFn, getProjectAnnotations);\n\nwindow.__STORYBOOK_PREVIEW__ = preview;\nwindow.__STORYBOOK_STORY_STORE__ = preview.storyStore;\nwindow.__STORYBOOK_ADDONS_CHANNEL__ = channel;\n\nif (import.meta.webpackHot) {\nimport.meta.webpackHot.accept('./storybook-stories.js', () => {\n// importFn has changed so we need to patch the new one in\npreview.onStoriesChanged({ importFn });\n});\n\nimport.meta.webpackHot.accept(['/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/html/dist/entry-preview.mjs','/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/html/dist/entry-preview-docs.mjs','/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-essentials/dist/actions/preview.mjs','/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-essentials/dist/highlight/preview.mjs','/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-docs/dist/preview.mjs','/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/packages/apps/lightning-ui-docs/.storybook/preview.js',], () => {\n// getProjectAnnotations has changed so we need to patch the new one in\npreview.onGetProjectAnnotationsChanged({ getProjectAnnotations });\n});\n}","module.exports = __STORYBOOK_MODULE_CHANNELS__;","module.exports = __STORYBOOK_MODULE_CLIENT_LOGGER__;","module.exports = __STORYBOOK_MODULE_CORE_EVENTS_PREVIEW_ERRORS__;","module.exports = __STORYBOOK_MODULE_CORE_EVENTS__;","module.exports = __STORYBOOK_MODULE_GLOBAL__;","module.exports = __STORYBOOK_MODULE_PREVIEW_API__;"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/main.f80f06c1.iframe.bundle.js.map b/main.f80f06c1.iframe.bundle.js.map deleted file mode 100644 index 8b83b172a..000000000 --- a/main.f80f06c1.iframe.bundle.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"main.f80f06c1.iframe.bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AACA;AACA;AASA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AALA;AACA;AAAA;AAAA;AAAA;AA5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAOA;AANA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AAMA;AAGA;AAAA;AAAA;AAGA;AAGA;AAEA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;;AAIA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA3QA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AA8PA;;;;;;;;;;;;;;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AArGA;AACA;AAAA;AAAA;AAuGA;AACA;AAKA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;;;;;;;;;;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAKA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;;AAGA;AACA;AACA;AACA;AAAA;AAEA;;AAIA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AApLA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AALA;AACA;AAAA;AAAA;AAAA;AAWA;AACA;AAAA;AALA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAAA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAKA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAAA;AAAA;AAQA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAMA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AApcA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AA8bA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAXA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAGA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAGA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AAEA;AAAA;AAEA;AAEA;AAAA;AAEA;AAAA;;;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+CA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAzDA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AA5CA;AA8DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgJA;AACA;AAMA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAxUA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAOA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAOA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAOA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAOA;AAAA;AACA;AACA;AAFA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AA3IA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;;AAEA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAGA;AAGA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AAEA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAIA;AAEA;AACA;AAIA;AAGA;AAAA;AACA;AAEA;AACA;AAGA;AAAA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA3BA;AACA;AAAA;AAAA;AAAA;AAhfA;AAWA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyDA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AALA;AACA;AAAA;AAAA;AAAA;AArQA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AAUA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAKA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAEA;AAIA;AAKA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AAEA;AAOA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAOA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAMA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAMA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAzgBA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAWA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAUA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AAEA;AAMA;AACA;AACA;AAEA;AAOA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AA9NA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAIA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AAQA;AACA;AAAA;AAPA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AAEA;AAMA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AACA;AAAA;AAAA;AAAA;AAhUA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAQA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAGA;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AAEA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC7VA;AAAA;AAAA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AA/BA;AAAA;AAAA;AAgCA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAfA;AAAA;AAAA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAxBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AA7BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AANA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AAFA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AA3BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AArCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwCA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAGA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AASA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;;;;;;;;;AC5aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AAGA;AACA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAFA;AAIA;AAGA;AACA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;AC9MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAhBA;AAmBA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;AC1FA;AAAA;AAAA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAFA;AAGA;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AAIA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AAGA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAPA;AAAA;AAQA;AAAA;AAAA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAOA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AAAA;AANA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AA/BA;AACA;AAAA;AAAA;AAgCA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AArBA;AACA;AAAA;AAAA;AAsBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;;AAEA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AAIA;AAGA;AAKA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAQA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAKA;AAAA;AAJA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AACA;AAOA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AAOA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAKA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAKA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAKA;AAKA;AAIA;AACA;AACA;AACA;;;;ACnyBA;AAEA;AAEA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAOA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AAQA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAOA;AAEA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAQA;AACA;AAAA;AALA;AACA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAbA;AACA;AAAA;AAAA;AAAA;AAgBA;AAMA;AACA;AAMA;AAEA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAIA;AAIA;AAIA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAOA;;AAEA;AAKA;AACA;;AAEA;AACA;;AAOA;AACA;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAOA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAAA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAAA;AASA;AACA;AACA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAmBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAeA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAfA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAeA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAlKA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAsJA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AAAA;AACA;AACA;AAKA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAKA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AAAA;AASA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA7GA;AACA;AAAA;AAAA;AA8GA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAQA;AAQA;AAAA;AAAA;AA1CA;AA6CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAQA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAMA;AAOA;AACA;AAEA;AAAA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAKA;AAJA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAGA;AAEA;AAEA;AAEA;AAGA;AAMA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAJA;AAAA;AAAA;AAAA;AAQA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAJA;AAAA;AAAA;AAAA;AAQA;AAEA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAQA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAAA;AAHA;AACA;AAAA;AACA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC14BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAGA;AAKA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAMA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAMA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;;AAEA;AAGA;AADA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAvDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AA6CA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAOA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACvQA;AAAA;AAAA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;;;;;;;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC7bA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC10BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvBA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA","sources":["webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Badge/Badge.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Badge/Badge.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withLayout/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withExtensions/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Base/Base.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Column/Column.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Column/Column.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Icon/Icon.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Icon/Icon.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Marquee/Marquee.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Marquee/Marquee.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Row/Row.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Row/Row.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/TextBox/TextBox.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/TextBox/TextBox.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/metrics.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/events.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components-theme-base/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/fonts.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/constants.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/theme-manager.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/context/logger.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/global-update-manager/GlobalUpdateManager.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withAnnouncer/Speech.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withAnnouncer/abbreviations.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withAnnouncer/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withHandleKey/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withTags/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withThemeStyles/utils.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withThemeStyles/cache.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withThemeStyles/StyleManager.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withThemeStyles/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withUpdates/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/shaders/FadeShader.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/textures/CustomImageTexture.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/utils/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/globals/pool/index.js","webpack://lightning-ui-docs/./.storybook/utils/registerEvents.js","webpack://lightning-ui-docs/./index.js","webpack://lightning-ui-docs/./.storybook/addons/decorators/withLightning.js","webpack://lightning-ui-docs/./.storybook/preview.js","webpack://lightning-ui-docs/../../../node_modules/@storybook/core/dist/theming/ sync","webpack://lightning-ui-docs/../../@lightningjs/ui-components-test-utils/src/docs/ lazy ^\\.\\/.*$ include: (?678b","webpack://lightning-ui-docs/../../@lightningjs/ui-components-test-utils/src/docs/ lazy ^\\.\\/.*$ include: (","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/ lazy ^\\.\\/.*$ include: (","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/ lazy ^\\.\\/.*$ include: (?cb14","webpack://lightning-ui-docs/./src/ lazy ^\\.\\/.*$ include: (","webpack://lightning-ui-docs/./storybook-stories.js","webpack://lightning-ui-docs/./storybook-config-entry.js","webpack://lightning-ui-docs/external var \"__STORYBOOK_MODULE_CHANNELS__\"","webpack://lightning-ui-docs/external var \"__STORYBOOK_MODULE_CLIENT_LOGGER__\"","webpack://lightning-ui-docs/external var \"__STORYBOOK_MODULE_CORE_EVENTS_PREVIEW_ERRORS__\"","webpack://lightning-ui-docs/external var \"__STORYBOOK_MODULE_CORE_EVENTS__\"","webpack://lightning-ui-docs/external var \"__STORYBOOK_MODULE_GLOBAL__\"","webpack://lightning-ui-docs/external var \"__STORYBOOK_MODULE_PREVIEW_API__\""],"sourcesContent":["/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => {\n return {\n contentSpacing: theme.spacer.xs,\n offsetY: 1,\n paddingX: theme.spacer.md,\n paddingY: theme.spacer.xs,\n radius: theme.radius.sm,\n strokeWidth: theme.stroke.sm,\n textStyle: {\n ...theme.typography.tag1,\n textAlign: 'center'\n }\n };\n};\n\nexport const tone = theme => ({\n neutral: {\n backgroundColor: theme.color.fillInverseSecondary,\n iconColor: theme.color.textNeutral,\n textStyle: { textColor: theme.color.textNeutral },\n strokeColor: theme.color.strokeNeutralSecondary\n },\n inverse: {\n backgroundColor: theme.color.fillNeutralSecondary,\n iconColor: theme.color.textInverse,\n textStyle: { textColor: theme.color.textInverse },\n strokeColor: theme.color.strokeInverseSecondary\n },\n brand: {\n backgroundColor: theme.color.fillBrand,\n iconColor: theme.color.textNeutral,\n textStyle: { textColor: theme.color.textNeutral },\n strokeColor: theme.color.strokeInverseSecondary\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport Base from '../Base';\nimport Icon from '../Icon';\nimport { getHexColor, getMaxRoundRadius } from '../../utils';\nimport * as styles from './Badge.styles';\nimport lng from '@lightningjs/core';\n\nexport default class Badge extends Base {\n static _template() {\n return {\n Text: {\n mountY: 0.5\n },\n Icon: {\n type: Icon,\n mountY: 0.5,\n signals: {\n itemChanged: '_updateLayout'\n }\n }\n };\n }\n\n static get __componentName() {\n return 'Badge';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get properties() {\n return ['title', 'icon', 'iconAlign', 'iconWidth', 'iconHeight'];\n }\n\n static get tags() {\n return ['Background', 'Text', 'Icon'];\n }\n\n _init() {\n this._Text.on('txLoaded', this._updateLayout.bind(this));\n super._init();\n }\n\n _update() {\n this._updateText();\n this._updateIcon();\n this._updateLayout();\n this._updateVisibility();\n }\n\n _updateVisibility() {\n this.alpha = this.title || this.icon ? 1 : 0;\n }\n\n _updateLayout() {\n this._updateWidth();\n this._updateBackground();\n this._updatePositions();\n this.signal('loadedBadge', this);\n }\n\n _updateBackground() {\n const height =\n Math.max(this._Text.renderHeight, this._Icon.h) + this.style.paddingY * 2;\n\n this.patch({\n h: height,\n texture: lng.Tools.getRoundRect(\n this.w,\n height,\n getMaxRoundRadius(this.style.radius, this.w, height),\n this.style.strokeWidth,\n this.style.strokeColor,\n true,\n this.style.backgroundColor\n )\n });\n }\n\n _updateText() {\n if (this._Text) {\n this._Text.patch({\n text: {\n ...this.style.textStyle,\n text: this.title || ''\n }\n });\n }\n }\n\n _updateIcon() {\n this._Icon.patch({\n icon: this.icon,\n w: this.iconWidth,\n h: this.iconHeight,\n style: {\n color: getHexColor(this.style.iconColor)\n }\n });\n }\n\n _updateWidth() {\n let width = 0;\n if (this.title && this.icon) {\n width =\n this._Text.renderWidth +\n this._Icon.finalW +\n this.style.contentSpacing +\n this.style.paddingX * 2;\n } else if (this.title) {\n width = this._Text.renderWidth + this.style.paddingX * 2;\n } else if (this.icon) {\n width = this._Icon.finalW + this.style.paddingX * 2;\n }\n\n this.w = width;\n }\n\n _updatePositions() {\n this._Icon.y = this.h / 2;\n\n if (this.iconAlign === 'left' && this.title && this.icon) {\n this._Icon.x = this.style.paddingX;\n this._Text.x =\n this._Icon.x + this._Icon.finalW + this.style.contentSpacing;\n } else if (this.iconAlign === 'right' && this.title && this.icon) {\n this._Text.x = this.style.paddingX;\n this._Icon.x =\n this._Text.x + this._Text.renderWidth + this.style.contentSpacing;\n } else {\n this._Text.x = this.style.paddingX;\n this._Icon.x = this.style.paddingX;\n }\n\n this._Text.y = this._h / 2 + this.style.offsetY;\n }\n\n _getIconHeight() {\n if (this.icon) {\n return !this._Icon.finalH && this._Text\n ? this._Text.text.lineHeight\n : this._Icon.finalH;\n }\n return 0;\n }\n\n set announce(announce) {\n super.announce = announce;\n }\n\n get announce() {\n return this._announce || this.title;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport context from '../../globals/context/index';\nimport { stringifyCompare, getDimensions } from '../../utils';\n\nexport default function withLayout(Base) {\n return class extends Base {\n _construct() {\n super._construct && super._construct();\n this._previousDimensionData = null; // Store the previous dimension data to compare next time _updateItemLayout is called\n }\n\n get itemLayout() {\n return this._itemLayout;\n }\n\n set itemLayout(v) {\n const componentName =\n this.constructor._componentName || this.constructor.name;\n let itemLayout;\n if (v) {\n itemLayout = JSON.parse(\n JSON.stringify(v, (k, v) => {\n if (k !== 'circle' && v < 0) {\n context.error(\n `itemLayout for ${componentName} received an invalid value of ${v} for ${k}`\n );\n return;\n } else if (k === 'circle') {\n return Boolean(v);\n }\n return v;\n })\n );\n }\n\n if (!stringifyCompare(this._itemLayout, itemLayout)) {\n if (itemLayout && !itemLayout.upCount) {\n this._originalW = this.w;\n this._originalH = this.h;\n this._itemLayout = {\n w: this._originalW,\n h: this._originalH,\n ...itemLayout\n };\n } else {\n this._itemLayout = itemLayout;\n }\n\n this._updateItemLayout();\n }\n }\n\n _allowUpdate() {\n const {\n w = '',\n h = '',\n circle = '',\n ratioX = '',\n ratioY = '',\n upCount = ''\n } = this._itemLayout || {};\n // Store a string representation of all values from previous update to compare and decide if layout should change\n const layoutString =\n Object.values(context.theme.layout).join('') +\n `${w}${h}${circle ? 1 : 0}${ratioX}${ratioY}${upCount}`;\n if (layoutString !== this._previousDimensionData) {\n this._previousDimensionData = layoutString;\n return true;\n }\n return false;\n }\n\n _updateItemLayout() {\n if (!this._allowUpdate()) return;\n const { w, h } = getDimensions(this.theme, this._itemLayout);\n if (h || w) {\n // If there is not enough information passed in args to calculate item size\n const width = context.theme.layout.screenW;\n const height = context.theme.layout.screenH;\n const calculatedWidth = w || h * (width / height);\n const calculatedHeight = h || w * (height / width);\n this.w =\n this._itemLayout && this._itemLayout.circle\n ? calculatedHeight\n : calculatedWidth; // Width must be set first in order for Cards to be displayed properly\n this.h = calculatedHeight;\n if (this._itemLayout && this._itemLayout.circle && this.style.radius) {\n this._circleSet = true;\n this._originalRadius = this.style.radius;\n this.style = {\n ...this.style,\n radius: calculatedHeight / 2\n };\n } else if (this._circleSet) {\n // Restore to it's original state\n this.style = {\n ...this.style,\n radius: this._originalRadius\n };\n this._originalRadius = undefined;\n this._circleSet = false;\n }\n this.queueRequestUpdate && this.queueRequestUpdate();\n this.fireAncestors('$itemChanged');\n }\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport context from '../../globals/context/index';\n\nconst SUFFIX = '__original';\n\nexport default function withExtensions(Base) {\n if (Base.prototype.constructor._withExtensionsApplied) {\n return Base;\n }\n return class extends Base {\n static get name() {\n return Base.name;\n }\n\n static get __componentName() {\n if (!super.__componentName) {\n throw new Error(\n `A valid static __componentName property is required for theming to work properly. Please add this to the ${this.constructor.name} class.`\n );\n }\n return super.__componentName;\n }\n\n static get _withExtensionsApplied() {\n // Extensions should only be applied once per class. This prevents it running multiple times. Ex. Surface -> Tile\n return true;\n }\n\n /**\n * Climb the prototype chain to establish what component's extension rules this component should also inherit\n * @returns {set} // set of strings\n */\n get _prototypeChain() {\n if (this.__prototypeChain) return this.__prototypeChain;\n const prototypeChain = new Set();\n let proto = this;\n do {\n proto = Object.getPrototypeOf(proto);\n if (null !== proto && typeof proto === 'object') {\n try {\n if (proto.constructor.__componentName)\n prototypeChain.add(proto.constructor.__componentName);\n } catch (error) {\n // Catch error when __componentName is not set in Base component\n }\n }\n } while (proto);\n this.__prototypeChain = prototypeChain;\n return prototypeChain;\n }\n\n /**\n * Get all valid extensions from the current theme\n * @returns {object[]} // Array of objects\n */\n get _extensions() {\n const extensions = context && context.theme && context.theme.extensions;\n if (\n !extensions ||\n !Array.isArray(extensions) ||\n (Array.isArray(extensions) && !extensions.length)\n )\n return [];\n return (\n extensions\n .filter(\n ({ targetComponent, extension }) =>\n (typeof targetComponent === 'string' ||\n Array.isArray(targetComponent)) &&\n typeof extension === 'function'\n )\n .slice()\n .reverse() || [] // Array is reversed to ensure extensions are executed in the proper order top -> bottom\n );\n }\n\n /**\n * Get all extensions to apply to this component\n * @return {class[]} // Array of classes\n */\n get _componentExtensions() {\n return this._extensions\n .filter(({ targetComponent }) => {\n // check to see if extension should be applied to this component\n if (typeof targetComponent === 'string') {\n return (\n targetComponent === this.constructor.__componentName ||\n this._prototypeChain.has(targetComponent)\n );\n } else if (Array.isArray(targetComponent)) {\n return targetComponent.find(pattern => {\n if (pattern.startsWith('/') && pattern.endsWith('/')) {\n const ComponentRegExp = new RegExp(pattern.slice(1, -1));\n return Array.from(this._prototypeChain).some(name =>\n ComponentRegExp.test(name)\n );\n } else {\n return this._prototypeChain.has(pattern);\n }\n });\n }\n return false;\n })\n .reduce((acc, { extension }) => {\n acc.push(extension);\n return acc;\n }, []);\n }\n\n /**\n * Check if theme extension mixins have already been applied\n * @return {boolean}\n */\n get _extensionApplied() {\n return (\n this._currentComponentExtensionLength === this._appliedExtensionLength\n );\n }\n\n _construct() {\n this._appliedExtensionLength = 0; // After the extensions are applied we store the length of all to determine later on if they have been applied before\n this._extendedList = {};\n this._extensionInstance = {}; // This will hold the extension instance once created\n this._setupExtensionBound = this._setupExtension.bind(this);\n context.on('themeUpdate', this._setupExtensionBound);\n this._currentComponentExtensionLength =\n this._calculateComponentExtensionLength();\n this._createExtension();\n super._construct();\n }\n\n _detach() {\n super._detach();\n context.off('themeUpdate', this._setupExtensionBound);\n }\n\n _setupExtension() {\n this._currentComponentExtensionLength =\n this._calculateComponentExtensionLength();\n this._createExtension.call(this);\n }\n\n _resetComponent() {\n this._extensionInstance._extensionCleanup &&\n this._extensionInstance._extensionCleanup.call(this);\n\n (Object.keys(this._extendedList) || []).forEach(prop => {\n delete this[prop];\n delete this[prop + SUFFIX];\n });\n\n this._extensionInstance = {};\n this._extendedList = {};\n }\n\n _calculateComponentExtensionLength() {\n const extensionLength = this._componentExtensions.reduce(\n (acc, extensionMixin) => {\n acc += extensionMixin.toString().length;\n return acc;\n },\n 0\n );\n return extensionLength;\n }\n\n _createExtension() {\n if (this._extensionApplied) return;\n this._resetComponent();\n const ExtendedClass = this._createExtensionClass();\n const instance = new ExtendedClass();\n this._extendedList = this._createExtensionAliases(instance);\n this._extensionInstance = instance;\n this._setComponentAliases(this._extendedList);\n }\n\n /**\n * Create the extension class\n * @return {class}\n */\n _createExtensionClass() {\n /**\n *\n * This class will sit at the bottom of the prototype stack and redirect all calls to the original to prevent an infinite loop\n *\n */\n function ExtensionBase() {}\n\n /** Create a new class the represents the extensions */\n const ExtendedClass = this._componentExtensions.reduce(\n (acc, extension) => {\n // Get the length of the extension and store the value. This will be used to determine if the mixin has been changed and needs to be re-applied\n return extension(acc);\n },\n ExtensionBase\n );\n\n // Store the length of the extension to be applied\n this._appliedExtensionLength = this._calculateComponentExtensionLength();\n\n return ExtendedClass;\n }\n\n _createExtensionAliases(obj) {\n // Find the prototype to be replaced\n let baseProto = obj;\n for (let i = 0; i < this._componentExtensions.length + 1; i++) {\n baseProto = Object.getPrototypeOf(baseProto);\n }\n\n /**\n * We will create alias for all the methods, getters, setters that will be overwritten by the extension layer\n * Create a list of properties to alias\n */\n\n const extended = {};\n\n const extensionOverrides = this._componentExtensions.reduce(\n (acc, extension) => {\n const extensionClass = new extension(class FakeClass {});\n const instance = new extensionClass();\n // Get the descriptors\n const originalComponentDescriptors = Object.getOwnPropertyDescriptors(\n Object.getPrototypeOf(instance)\n );\n Object.keys(originalComponentDescriptors).forEach(prop => {\n if (['constructor'].includes(prop)) return;\n if (\n originalComponentDescriptors[prop].get ||\n originalComponentDescriptors[prop].set\n ) {\n extended[prop] = { type: 'accessor' };\n acc[prop] = {\n get: function () {\n return this[prop + SUFFIX];\n },\n set: function (v) {\n this[prop + SUFFIX] = v;\n }\n };\n return;\n }\n extended[prop] = { type: 'method' };\n acc[prop] = {\n value: function () {\n this[prop + SUFFIX] && this[prop + SUFFIX]();\n }\n };\n });\n return acc;\n },\n {}\n );\n\n Object.defineProperties(baseProto, extensionOverrides);\n Object.setPrototypeOf(baseProto, this); // Set the bottom level prototype === the component\n\n return extended;\n }\n\n _setComponentAliases(aliasObj) {\n Object.keys(aliasObj).forEach(prop => {\n // Create an alias for the existing component property to save the original value\n this[prop + SUFFIX] = this[prop];\n if (aliasObj[prop].type === 'method') {\n this[prop] = this._extensionInstance[prop];\n } else if (aliasObj[prop].type === 'accessor') {\n Object.defineProperty(this, prop, {\n configurable: true, // Allow accessors to be updated on theme change\n get() {\n return this._extensionInstance[prop];\n },\n set(v) {\n this._extensionInstance[prop] = v;\n }\n });\n }\n });\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport context from '../../globals/context/index';\nimport withUpdates from '../../mixins/withUpdates';\nimport withTags from '../../mixins/withTags';\nimport withHandleKey from '../../mixins/withHandleKey';\nimport withLayout from '../../mixins/withLayout';\nimport withThemeStyles from '../../mixins/withThemeStyles';\nimport withExtensions from '../../mixins/withExtensions';\nimport { isComponentOnScreen } from '../../utils';\n\nclass Base extends lng.Component {\n static get __componentName() {\n return 'Base';\n }\n\n _construct() {\n this.constructor.__componentName; // Check that __componentName is set\n this.skipPlinko = false;\n this.centerInParent = false;\n if (!this.loaded) this.loaded = Promise.resolve(); // By default this is a resolved promise. Components can use _resetLoadedPromise if they require the functionality\n }\n\n _init() {\n this.queueRequestUpdate();\n }\n\n _resetLoadedPromise() {\n this.loaded = new Promise((resolve, reject) => {\n this._resolveLoadedPromise = resolve;\n this._rejectLoadedPromise = reject;\n });\n }\n\n _update() {}\n\n _focus() {\n this._updateShouldSmooth();\n this.queueRequestUpdate();\n }\n\n _unfocus() {\n this.queueRequestUpdate();\n }\n\n _updateShouldSmooth() {\n if (this.shouldSmooth === undefined) this.shouldSmooth = true;\n }\n\n /**\n * This method accepts a target component, patch object, and optional smooth object.\n * If the component is visible, it will smooth in the smooth object, or fall back to\n * the patch object, if not it will apply the patch.\n *\n * @param {component reference} ref tag ref of target component\n * @param {object} patch object of properties to patch to target\n * @param {object} smooth object of properties to smooth to target\n */\n applySmooth(ref, patch, smooth) {\n if (this.shouldSmooth) {\n ref.smooth = smooth || patch;\n } else {\n ref.patch(patch);\n }\n }\n\n // keep announce methods out of the update lifecycle (do not put in properties array)\n // announce methods do not need to re-render component\n get announce() {\n return this._announce;\n }\n\n set announce(announce) {\n this._announce = announce;\n }\n\n get announceContext() {\n return this._announceContext;\n }\n\n set announceContext(announce) {\n this._announceContext = announce;\n }\n\n get shouldSmooth() {\n return this._shouldSmooth;\n }\n\n set shouldSmooth(shouldSmooth) {\n this._shouldSmooth = shouldSmooth;\n }\n\n get _isDisabledMode() {\n return this.mode === 'disabled';\n }\n\n get _isUnfocusedMode() {\n return this.mode === 'unfocused';\n }\n\n get _isFocusedMode() {\n return this.mode === 'focused';\n }\n\n isFullyOnScreen(offsets) {\n return isComponentOnScreen(this, offsets);\n }\n\n getFocusScale() {\n return context.theme.layout.focusScale;\n }\n\n getUnfocusScale() {\n return 1;\n }\n}\n\nfunction withMixins(baseComponent) {\n return withExtensions(\n withLayout(\n withThemeStyles(withUpdates(withTags(withHandleKey(baseComponent))))\n )\n );\n}\n\nexport default withMixins(Base);\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n itemSpacing: theme.layout.gutterY,\n scrollIndex: 0,\n itemTransition: {\n ...theme.animation.standardEntrance,\n duration: theme.animation.duration.fast\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport NavigationManager from '../NavigationManager';\nimport { getY } from '../../utils';\nimport * as styles from './Column.styles';\n\nexport default class Column extends NavigationManager {\n static get __componentName() {\n return 'Column';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static _template() {\n return {\n ...super._template(),\n direction: 'column'\n };\n }\n\n _isOnScreenForScrolling(child) {\n if (!child) return false;\n\n const y = getY(child);\n if (!Number.isFinite(y)) return false;\n const itemsTransitionY = this.getTransitionYTargetValue();\n const columnY = this.core.renderContext.py;\n let itemY = columnY + itemsTransitionY + y;\n let yModifier;\n\n // This section here takes the difference between a possible target value\n // and subtracts it from the current child x. That value then is subtracted from the initial\n // itemX value calculated on the core renderContext px value to more accurately\n // calculate the item's location on screen when it's own x value will be updating.\n if (child.transition('y')) {\n yModifier = child.y - child.transition('y').targetValue;\n itemY = itemY - yModifier;\n }\n return itemY >= columnY && itemY + child.h <= columnY + this.h;\n }\n\n _shouldScroll() {\n if (this.alwaysScroll) {\n return true;\n }\n let shouldScroll = false;\n if (!this.neverScroll) {\n const isCompletelyOnScreen = this._isOnScreenForScrolling(this.selected);\n const lastChild = this.Items.childList.last;\n shouldScroll =\n lastChild &&\n (this.shouldScrollUp() ||\n this.shouldScrollDown() ||\n !isCompletelyOnScreen);\n }\n\n if (this.selectedIndex < this.scrollIndex) {\n shouldScroll = false;\n }\n\n return shouldScroll;\n }\n\n _getScrollY() {\n let itemsContainerY;\n let itemIndex = this.selectedIndex - this.scrollIndex;\n itemIndex = itemIndex < 0 ? 0 : itemIndex;\n if (itemIndex === this._firstFocusableIndex()) {\n itemIndex = 0;\n }\n\n if (this.Items.children[itemIndex]) {\n itemsContainerY = this.Items.children[itemIndex].transition('y')\n ? -this.Items.children[itemIndex].transition('y').targetValue +\n this.itemPosY\n : -this.Items.children[itemIndex].y + this.itemPosY;\n }\n\n return itemsContainerY;\n }\n\n _render(next, prev) {\n this._prevLastScrollIndex = this._lastScrollIndex;\n\n if (\n this.plinko &&\n prev &&\n prev.selected &&\n !(this.items.indexOf(prev) === 0 && prev.skipPlinko)\n ) {\n const prevPlinko = this.checkSkipPlinko(prev, next);\n next.selectedIndex = this._getIndexOfItemNear(next, prevPlinko || prev);\n } else if (next && !next.selectedIndex) {\n next.selectedIndex = 0;\n }\n\n let itemsContainerY;\n if (!this.Items.children.length) {\n itemsContainerY = this.itemPosY;\n } else if (this._shouldScroll()) {\n itemsContainerY = this._getScrollY();\n }\n\n if (itemsContainerY !== undefined) {\n this.updatePositionOnAxis(this.Items, itemsContainerY);\n }\n\n this.onScreenEffect(this.onScreenItems);\n }\n\n _performRender() {\n this._render(this.selected, this.prevSelected);\n }\n\n checkSkipPlinko(prev, next) {\n // If previous doesn't have skip plinko or previous is the first or last item\n if (\n !prev ||\n !prev.skipPlinko ||\n [0, this.items.length - 1].includes(this.items.indexOf(prev))\n ) {\n return null;\n }\n\n const prevIndex = this.items.indexOf(prev);\n const direction = prevIndex - this.items.indexOf(next);\n const up = direction > 0;\n\n // Grab all items below prev if up or all items before prev if down\n const prevItems = up\n ? this.items.slice(prevIndex).map(i => ({\n skipPlinko: i.skipPlinko,\n index: this.items.indexOf(i)\n }))\n : this.items\n .slice(0, prevIndex + 1)\n .map(i => ({\n skipPlinko: i.skipPlinko,\n index: this.items.indexOf(i)\n }))\n .reverse();\n\n // first item that has skipPlinko but the previous does not\n // Start at the index prev\n const endOfMultiSkipPlinkos = prevItems.find(\n i => i.skipPlinko && !this.items[i.index + direction].skipPlinko\n );\n const prevPlinkoIndex = endOfMultiSkipPlinkos\n ? endOfMultiSkipPlinkos.index + direction\n : prevIndex + direction; // +/- 1, item index before prev\n\n return this.items[prevPlinkoIndex];\n }\n\n get _itemsY() {\n return getY(this.Items);\n }\n\n $removeItem(item) {\n if (item) {\n const wasSelected = item === this.selected;\n this.Items.childList.remove(item);\n this.queueRequestUpdate();\n\n if (wasSelected || this.selectedIndex >= this.items.length) {\n // eslint-disable-next-line no-self-assign\n this.selectedIndex = this._selectedIndex;\n }\n\n if (!this.items.length) {\n this.fireAncestors('$columnEmpty');\n }\n }\n }\n\n $columnChanged() {\n this.queueRequestUpdate();\n }\n\n _isOnScreen(child) {\n if (!child) return false;\n\n return this._isComponentVerticallyVisible(child);\n }\n\n // can be overridden\n onScreenEffect() {}\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * FocusManager Component\n *\n * Container to set focus on elements with key[Up/Down] or key[Left/Right]\n */\nimport Base from '../Base';\nimport {\n getX,\n getY,\n isComponentOnScreen,\n getShortestDistance\n} from '../../utils';\n\nexport default class FocusManager extends Base {\n static get __componentName() {\n return 'FocusManager';\n }\n\n static get tags() {\n return ['Items'];\n }\n\n static get properties() {\n return ['direction', 'wrapSelected'];\n }\n\n _construct() {\n super._construct();\n this._selectedIndex = 0;\n this._itemPosX = 0;\n this._itemPosY = 0;\n this.direction = this.direction || 'row';\n }\n\n _init() {\n this._checkSkipFocus();\n }\n\n get Items() {\n if (!this.tag('Items')) {\n this.patch({ Items: {} });\n }\n return this._Items;\n }\n\n _setDirection(direction) {\n const state = {\n none: 'None',\n column: 'Column',\n row: 'Row'\n }[direction];\n\n if (state) {\n this._setState(state);\n }\n return direction;\n }\n\n _getItems() {\n return this._Items.children;\n }\n\n get items() {\n return this.Items.children;\n }\n\n set items(items) {\n this._resetItems();\n this._selectedIndex = 0;\n this.appendItems(items);\n this._checkSkipFocus();\n }\n\n set itemPosX(x) {\n this.Items.x = this._itemPosX = x;\n }\n\n get itemPosX() {\n return this._itemPosX;\n }\n\n set itemPosY(y) {\n this.Items.y = this._itemPosY = y;\n }\n\n get itemPosY() {\n return this._itemPosY;\n }\n\n _resetItems() {\n this.Items.childList.clear();\n this.Items.patch({\n w: 0,\n h: 0,\n x: this.itemPosX,\n y: this.itemPosY\n });\n\n // This fixes an issue when trying to call set items if there are already items held in _lazyItems.\n // Going to follow up on a review of this feature.\n if (this._lazyItems) {\n this._lazyItems = null;\n }\n }\n\n _appendLazyItem(item) {\n this.appendItems([item]);\n }\n\n appendItems(items = []) {\n this.Items.childList.a(items);\n this._refocus();\n }\n\n appendItemsAt(items = [], idx) {\n const addIndex = Number.isInteger(idx) ? idx : this.Items.children.length;\n this.shouldSmooth = false;\n this._lastAppendedIdx = addIndex;\n\n items.forEach((item, itemIdx) => {\n this.Items.childList.addAt(\n {\n ...item,\n parentFocus: this.hasFocus()\n },\n addIndex + itemIdx\n );\n });\n\n if (this.selectedIndex >= this._lastAppendedIdx) {\n this._selectedIndex += items.length;\n }\n\n this.requestUpdate();\n this._refocus();\n }\n\n prependItems(items) {\n this.appendItemsAt(items, 0);\n }\n\n removeItemAt(index) {\n this.shouldSmooth = false;\n this.Items.childList.removeAt(index);\n\n if (\n this.selectedIndex > index ||\n this.selectedIndex === this.Items.children.length\n ) {\n this._selectedIndex--;\n }\n\n this.requestUpdate();\n this._refocus();\n }\n\n _checkSkipFocus() {\n // If the first item has skip focus when appended get the next focusable item\n const initialSelection = this.Items.children[this.selectedIndex];\n if (initialSelection && initialSelection.skipFocus) {\n this.selectNext(false);\n }\n }\n\n get selected() {\n return this.Items.children[this.selectedIndex];\n }\n\n get selectedIndex() {\n return this._selectedIndex;\n }\n\n set selectedIndex(index) {\n this.prevSelected = this.selected;\n if (\n !this.Items.children.length ||\n !this.Items.children[index] ||\n !this.Items.children[index].skipFocus\n ) {\n if (index !== this._selectedIndex) {\n this._selectedIndex = index;\n }\n if (this.selected) {\n this._selectedChange(this.selected, this.prevSelected);\n }\n // Don't call refocus until after a new render in case of a situation like Plinko nav\n // where we don't want to focus the previously selected item and need to get the new one first\n this._refocus();\n }\n }\n\n _selectedChange(selected, prevSelected) {\n this._render(selected, prevSelected);\n this.signal('selectedChange', selected, prevSelected);\n }\n\n // Override\n _render() {}\n\n _firstFocusableIndex() {\n if (!this.items.length) return 0;\n const firstItem = this.items\n .reduce((acc, item, idx) => {\n if (!item.skipFocus) {\n acc.push({ ...item, originalIdx: idx });\n }\n return acc;\n }, [])\n .shift();\n\n return firstItem.originalIdx;\n }\n\n _lastFocusableIndex() {\n if (!this.items.length) return 0;\n const lastItem = this.items\n .reduce((acc, item, idx) => {\n if (!item.skipFocus) {\n acc.push({ ...item, originalIdx: idx });\n }\n return acc;\n }, [])\n .pop();\n\n return lastItem.originalIdx;\n }\n\n selectPrevious() {\n this.shouldSmooth = true;\n const hasFocusable = !!(this.items || []).filter(i => !i.skipFocus).length;\n if ((this.selectedIndex === 0 && !this.wrapSelected) || !hasFocusable) {\n return false;\n }\n\n const previousItemIndex = this.items\n .map(item => !!item.skipFocus)\n .lastIndexOf(false, this._selectedIndex - 1);\n\n if (previousItemIndex > -1) {\n this.selectedIndex = previousItemIndex;\n return true;\n } else if (this.wrapSelected) {\n this.selectedIndex = this._lastFocusableIndex();\n return true;\n }\n return false;\n }\n\n selectNext(shouldSmoothOverride) {\n if (this._lazyItems && this._lazyItems.length) {\n this._appendLazyItem(this._lazyItems.splice(0, 1)[0]);\n }\n this.shouldSmooth = shouldSmoothOverride ?? true;\n\n const hasFocusable = !!(this.items || []).filter(i => !i.skipFocus).length;\n if (\n (this.selectedIndex === this.Items.children.length - 1 &&\n !this.wrapSelected) ||\n !hasFocusable\n ) {\n return false;\n }\n\n const nextIndex = this.items.findIndex(\n (item, idx) => !item.skipFocus && idx > this._selectedIndex\n );\n\n if (nextIndex > -1) {\n this.selectedIndex = nextIndex;\n return true;\n } else if (this.wrapSelected) {\n this.selectedIndex = this._firstFocusableIndex();\n return true;\n }\n return false;\n }\n\n _getIndexOfItemNear(selected, prev) {\n const prevItem = prev.selected;\n\n if (!selected || !selected.items || !selected.items.length || !prevItem) {\n return 0;\n }\n\n const [itemX, itemY] = prevItem.core.getAbsoluteCoords(0, 0);\n const prevMiddle = [itemX + prevItem.w / 2, itemY + prevItem.h / 2];\n\n // Get all item center points from selected\n const selectedCoordArray = selected.items\n .map((item, index) => {\n return {\n index,\n distance: !item.skipFocus\n ? getShortestDistance(prevMiddle, item)\n : null\n };\n })\n .filter(item => {\n // Remove all indexes that don't have a distance (skipFocus)\n return null !== item.distance;\n })\n .sort(function (a, b) {\n return a.distance - b.distance;\n });\n return selectedCoordArray[0].index;\n }\n\n /**\n * TODO: Update Base to remove the focus/unfocus calls and add a second \"BaseComponent\" that does have them\n *\n * Layout Components (Column, Row, BoardRows, etc.) would extend only Base,\n * need to confirm this applies to InlineContnet and ScrollWrapper??\n * Element/Pattern Components (Tile, Badge, etc.) would extend \"BaseComponent\" that does have focus/unfocus overrides\n */\n _focus() {\n super._focus();\n this.items.forEach(item => (item.parentFocus = true));\n }\n _unfocus() {\n super._unfocus();\n this.items.forEach(item => (item.parentFocus = false));\n }\n\n _updateShouldSmooth() {}\n\n _getFocused() {\n const { selected } = this;\n // Make sure we're focused on a component\n if (selected) {\n if (selected.focusRef) {\n return selected.tag(selected.focusRef);\n } else if (selected.cparent) {\n return selected;\n }\n }\n return this;\n }\n\n _updateTransitionTarget(element, property, newValue) {\n if (\n element &&\n element.transition(property) &&\n !element.transition(property).isRunning() &&\n element.transition(property).targetValue !== newValue\n ) {\n element.transition(property).updateTargetValue(newValue);\n }\n }\n\n /**\n * Return list of items that are currently fully and partially on screen\n * @returns {Array} Array of matching lng.Component objects or empty array\n */\n get onScreenItems() {\n return this.Items.children.filter(child => this._isOnScreen(child));\n }\n\n _isOnScreenCompletely(child) {\n // 'isFullyOnScreen' method has been added to the Base class.\n // in case child does _not_ extend Base, 'isComponentOnScreen'\n // from the 'util' module will be invoked. The same method is\n // invoked by Base class\n return child.isFullyOnScreen\n ? child.isFullyOnScreen()\n : isComponentOnScreen(child);\n }\n\n get fullyOnScreenItems() {\n return this.Items.children.reduce((rv, item) => {\n if (item instanceof FocusManager) {\n return [\n ...rv,\n ...item.Items.children.filter(this._isOnScreenCompletely)\n ];\n } else if (this._isOnScreenCompletely(item)) {\n return [...rv, item];\n } else {\n return rv;\n }\n }, []);\n }\n\n _isOnScreen() {\n throw new Error(\"'_isOnScreen' must be implemented by 'row'/'column'\");\n }\n\n _isComponentHorizontallyVisible(child) {\n // get child's destination X; If child is moving to a destination,\n // get the value of where child will end up\n const x = getX(child);\n if (!Number.isFinite(x)) return false;\n\n // to calculate the target absolute X position of the item, we need to use\n // 1) the entire component's absolute position,\n // 2) the target animation value of the items container, and\n // 3) the target value of the item itself\n const transitionX = this.getTransitionXTargetValue();\n // get absolute position of FocusManager on screen\n const px = this.core.renderContext.px;\n const itemX = px + transitionX + x;\n\n // _scissor consists of [ left position (x), top position (y), width, height ]\n const [leftBounds = null, , clipWidth = null] = this.core._scissor || [];\n const stageW = this.stage.w / this.stage.getRenderPrecision();\n const { w } = child;\n\n const withinLeftStageBounds = itemX >= 0;\n const withinRightStageBounds = itemX + w <= stageW;\n // short circuit\n if (!withinLeftStageBounds || !withinRightStageBounds) return false;\n\n let withinLeftClippingBounds = true;\n let withinRightClippingBounds = true;\n if (Number.isFinite(leftBounds)) {\n withinLeftClippingBounds =\n Math.round(itemX + w) >= Math.round(leftBounds);\n withinRightClippingBounds =\n Math.round(itemX) <= Math.round(leftBounds + clipWidth);\n }\n\n return withinLeftClippingBounds && withinRightClippingBounds;\n }\n\n _isComponentVerticallyVisible(child) {\n // get child's destination Y; If child is moving to a destination,\n // get the value of where child will end up\n const y = getY(child);\n if (!Number.isFinite(y)) return false;\n\n // to calculate the target absolute Y position of the item, we need to use\n // 1) the entire component's absolute position,\n // 2) the target animation value of the items container, and\n // 3) the target value of the item itself\n const transitionY = this.getTransitionYTargetValue();\n\n // get absolute position of FocusManager on screen\n const py = this.core.renderContext.py;\n\n // _scissor consists of [ left position (x), top position (y), width, height ]\n const [, topBounds = null, , clipHeight = null] = this.core._scissor || [];\n const { h } = child;\n\n const itemY = py + transitionY + y;\n const stageH = this.stage.h / this.stage.getRenderPrecision();\n const withinTopStageBounds = itemY + h >= 0;\n const withingBottomStageBounds = itemY <= stageH;\n\n // short circuit\n if (!withinTopStageBounds || !withingBottomStageBounds) return false;\n\n let withinTopClippingBounds = true;\n let withinBottomClippingBounds = true;\n if (Number.isFinite(topBounds)) {\n withinTopClippingBounds = Math.round(itemY + h) > Math.round(topBounds);\n withinBottomClippingBounds =\n Math.round(itemY) < Math.round(topBounds + clipHeight);\n }\n\n return withinTopClippingBounds && withinBottomClippingBounds;\n }\n\n getTransitionXTargetValue() {\n return this.Items.transition('x').targetValue;\n }\n\n getTransitionYTargetValue() {\n return this.Items.transition('y').targetValue;\n }\n\n static _states() {\n return [\n class None extends this {},\n class Row extends this {\n _handleLeft() {\n return typeof this.onLeft === 'function'\n ? this.onLeft(this)\n : this.selectPrevious();\n }\n\n _handleRight() {\n return typeof this.onRight === 'function'\n ? this.onRight(this)\n : this.selectNext();\n }\n },\n\n class Column extends this {\n _handleUp() {\n return typeof this.onUp === 'function'\n ? this.onUp(this)\n : this.selectPrevious();\n }\n\n _handleDown() {\n return typeof this.onDown === 'function'\n ? this.onDown(this)\n : this.selectNext();\n }\n }\n ];\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n propertyTextStyle: {\n ...theme.typography.headline1,\n textColor: theme.color.textNeutral\n },\n valueTextStyle: {\n ...theme.typography.body1,\n textColor: theme.color.textNeutral\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport Base from '../Base';\nimport context from '../../globals/context/index';\nimport Column from '../Column';\nimport Row from '../Row';\nimport TextBox from '../TextBox';\nimport { getWidthByColumnSpan } from '../../utils';\nimport * as styles from './GridOverlay.styles';\n\nclass Spacer extends Base {\n static get __componentName() {\n return 'Spacer';\n }\n\n static _template() {\n return {\n Line: {\n h: Spacer._lineThickness,\n rect: true,\n mountY: 0.5,\n TickLeft: {\n ...Spacer._tick,\n x: Spacer._lineThickness * -1\n },\n TickRight: Spacer._tick\n }\n };\n }\n\n static get properties() {\n return ['lineColor'];\n }\n\n static get tags() {\n return ['Line', 'TickLeft', 'TickRight'];\n }\n\n static get _lineThickness() {\n return 3;\n }\n\n static get _tickLength() {\n return 25;\n }\n\n static get _tick() {\n return {\n rect: true,\n mountY: 0.5,\n w: Spacer._lineThickness,\n h: Spacer._tickLength,\n y: Spacer._lineThickness / 2\n };\n }\n\n _update() {\n this._Line.w = this.w;\n this._TickRight.x = this._Line.w;\n\n if (this.lineColor) {\n this._Line.color =\n this._TickLeft.color =\n this._TickRight.color =\n this.lineColor;\n }\n\n this.rotation = this.vertical ? Math.PI / 2 : 0;\n this.signal('spacerLoaded');\n }\n}\n\nexport default class GridOverlay extends Base {\n static get __componentName() {\n return 'GridOverlay';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static _template() {\n const textRow = {\n type: Row,\n autoResizeHeight: true,\n Items: {\n Property: {\n type: TextBox,\n signals: {\n textBoxChanged: '_update'\n }\n },\n Value: {\n type: TextBox,\n signals: {\n textBoxChanged: '_update'\n },\n centerInParent: true\n }\n }\n };\n\n return {\n Columns: {\n alpha: 0.001,\n type: Row\n },\n Margins: {\n alpha: 0.001,\n Horizontal: {\n Left: {\n type: Spacer,\n signals: {\n spacerLoaded: '_update'\n }\n },\n Right: {\n type: Spacer,\n signals: {\n spacerLoaded: '_update'\n }\n }\n },\n Vertical: {\n Top: { type: Spacer, vertical: true }\n }\n },\n Safe: {\n alpha: 0.001,\n Horizontal: {\n Left: {\n type: Spacer,\n signals: {\n spacerLoaded: '_update'\n }\n },\n Right: {\n type: Spacer,\n signals: {\n spacerLoaded: '_update'\n }\n }\n },\n Vertical: {\n Top: { type: Spacer, vertical: true },\n Bottom: { type: Spacer, vertical: true }\n }\n },\n Gutters: {\n alpha: 0.001,\n Horizontal: {\n type: Spacer,\n signals: {\n spacerLoaded: '_update'\n }\n }\n },\n TextPanel: {\n alpha: 0.001,\n type: Column,\n autoResizeHeight: true,\n Items: {\n ScreenW: textRow,\n ScreenH: textRow,\n ColumnCount: textRow,\n MarginX: textRow,\n MarginY: textRow,\n GutterX: textRow,\n GutterY: textRow,\n Safe: textRow\n }\n }\n };\n }\n\n static get properties() {\n return [\n 'showColumns',\n 'showMargins',\n 'showSafe',\n 'showGutters',\n 'showText'\n ];\n }\n\n static get tags() {\n return [\n 'Columns',\n 'Margins',\n { name: 'MarginHorizontal', path: 'Margins.Horizontal' },\n { name: 'MarginLeft', path: 'Margins.Horizontal.Left' },\n { name: 'MarginRight', path: 'Margins.Horizontal.Right' },\n { name: 'MarginVertical', path: 'Margins.Vertical' },\n { name: 'MarginTop', path: 'Margins.Vertical.Top' },\n 'Safe',\n { name: 'SafeHorizontal', path: 'Safe.Horizontal' },\n { name: 'SafeLeft', path: 'Safe.Horizontal.Left' },\n { name: 'SafeRight', path: 'Safe.Horizontal.Right' },\n { name: 'SafeVertical', path: 'Safe.Vertical' },\n { name: 'SafeTop', path: 'Safe.Vertical.Top' },\n { name: 'SafeBottom', path: 'Safe.Vertical.Bottom' },\n 'Gutters',\n { name: 'GutterHorizontal', path: 'Gutters.Horizontal' },\n 'TextPanel',\n { name: 'TextScreenW', path: 'TextPanel.Items.ScreenW' },\n { name: 'TextScreenH', path: 'TextPanel.Items.ScreenH' },\n { name: 'TextColumnCount', path: 'TextPanel.Items.ColumnCount' },\n { name: 'TextMarginX', path: 'TextPanel.Items.MarginX' },\n { name: 'TextMarginY', path: 'TextPanel.Items.MarginY' },\n { name: 'TextGutterX', path: 'TextPanel.Items.GutterX' },\n { name: 'TextGutterY', path: 'TextPanel.Items.GutterY' },\n { name: 'TextSafe', path: 'TextPanel.Items.Safe' }\n ];\n }\n\n _construct() {\n super._construct();\n this._showColumns =\n this._showMargins =\n this._showSafe =\n this._showGutters =\n this._showText =\n true;\n }\n\n _update() {\n this._updateGlobalThemeProps();\n this._updateMargins();\n this._updateSafe();\n this._updateColumns();\n this._updateGutters();\n this._updateText();\n this._updateVisibility();\n }\n\n _updateVisibility() {\n this._Columns.smooth = { alpha: Number(this.showColumns) };\n this._Margins.smooth = { alpha: Number(this.showMargins) };\n this._Safe.smooth = { alpha: Number(this.showSafe) };\n this._Gutters.smooth = { alpha: Number(this.showGutters) };\n this._TextPanel.smooth = { alpha: Number(this.showText) };\n }\n\n _updateGlobalThemeProps() {\n const { layout, color } = context.theme;\n const {\n screenW,\n screenH,\n columnCount,\n marginX,\n marginY,\n gutterX,\n gutterY,\n safe\n } = layout;\n\n this._screenW = screenW;\n this._screenH = screenH;\n this._columnCount = columnCount;\n this._marginX = marginX;\n this._marginY = marginY;\n this._safe = safe;\n this._gutterX = gutterX;\n this._gutterY = gutterY;\n\n this._columnColor = color.interactiveNeutralFocusSoft;\n this._marginColor = color.green;\n this._safeColor = color.red;\n this._gutterColor = color.blue;\n }\n\n _updateMargins() {\n const marginPatch = { lineColor: this._marginColor };\n\n // Horizontal\n const marginHorizontalPatch = { ...marginPatch, w: this._marginX };\n this._MarginHorizontal.y = this._screenH / 2;\n this._MarginLeft.patch(marginHorizontalPatch);\n this._MarginRight.patch(marginHorizontalPatch);\n this._MarginRight.x = this._screenW - this._marginX;\n\n // Vertical\n const marginVerticalPatch = { ...marginPatch, w: this._marginY };\n this._MarginVertical.x = this._marginX - marginVerticalPatch.w / 2;\n this._MarginTop.patch(marginVerticalPatch);\n this._MarginTop.patch(marginVerticalPatch);\n this._MarginTop.y = marginVerticalPatch.w / 2;\n }\n\n _updateSafe() {\n const safePatch = { lineColor: this._safeColor, w: this._safe };\n\n // Horizontal\n this._SafeHorizontal.y = this._screenH / 4;\n this._SafeLeft.patch(safePatch);\n this._SafeRight.patch(safePatch);\n this._SafeRight.x = this._screenW - this._safe;\n\n // Vertical\n this._SafeVertical.x = (this._screenW - safePatch.w) / 2;\n this._SafeVertical.y = safePatch.w / 2;\n this._SafeTop.patch(safePatch);\n this._SafeBottom.patch(safePatch);\n this._SafeBottom.y = this._screenH - this._safe;\n }\n\n _updateColumns() {\n this._Columns.patch({\n w: this._screenW,\n h: this._screenH,\n x: this._marginX,\n style: {\n itemSpacing: this._gutterX\n },\n items: this._columnRects\n });\n }\n\n get _columnRects() {\n return Array.apply(null, { length: this._columnCount }).map(() => ({\n rect: true,\n w: getWidthByColumnSpan(this.theme, 1),\n h: this._screenH,\n color: this._columnColor\n }));\n }\n\n _updateGutters() {\n const gutterPatch = { lineColor: this._gutterColor, w: this._gutterY };\n\n // Horizontal\n this._GutterHorizontal.patch({\n ...gutterPatch,\n x: (this._screenW - gutterPatch.w) / 2,\n y: this._screenH / 4\n });\n }\n\n _updatePropertyTextStyle(textPanelName, color) {\n // clone the object so as not to mutate it\n const style = { textStyle: { ...this.style.propertyTextStyle } };\n if (color) {\n style.textStyle.textColor = color;\n }\n textPanelName.Items.tag('Property').style = style;\n }\n\n _updateValueTextStyle(textPanelName) {\n textPanelName.Items.tag('Value').style = {\n textStyle: this.style.valueTextStyle\n };\n }\n\n _updateText() {\n const prop = 'Property';\n const val = 'Value';\n\n this._TextPanel.x =\n this._screenW - this._marginX - getWidthByColumnSpan(this.theme, 3);\n this._TextPanel.y = this._safe;\n\n this._TextScreenW.Items.tag(prop).content = 'Screen Width';\n this._TextScreenW.Items.tag(val).content = `${this._screenW}px`;\n this._updatePropertyTextStyle(this._TextScreenW);\n this._updateValueTextStyle(this._TextScreenW);\n\n this._TextScreenH.Items.tag(prop).content = 'Screen Height';\n this._TextScreenH.Items.tag(val).content = `${this._screenH}px`;\n this._updatePropertyTextStyle(this._TextScreenH);\n this._updateValueTextStyle(this._TextScreenH);\n\n this._TextColumnCount.Items.tag(prop).content = 'Columns';\n this._TextColumnCount.Items.tag(val).content = `${\n this._columnCount\n }, ${Math.round(getWidthByColumnSpan(this.theme, 1))}px each`;\n this._updatePropertyTextStyle(this._TextColumnCount);\n this._updateValueTextStyle(this._TextColumnCount);\n\n this._TextMarginX.Items.tag(prop).content = 'Margin-X';\n this._TextMarginX.Items.tag(val).content = `${this._marginX}px`;\n this._updatePropertyTextStyle(this._TextMarginX, this._marginColor);\n this._updateValueTextStyle(this._TextMarginX);\n\n this._TextMarginY.Items.tag(prop).content = 'Margin-Y';\n this._TextMarginY.Items.tag(val).content = `${this._marginY}px`;\n this._updatePropertyTextStyle(this._TextMarginY, this._marginColor);\n this._updateValueTextStyle(this._TextMarginY);\n\n this._TextGutterX.Items.tag(prop).content = 'Gutter-X';\n this._TextGutterX.Items.tag(val).content = `${this._gutterX}px`;\n this._updatePropertyTextStyle(this._TextGutterX, this._gutterColor);\n this._updateValueTextStyle(this._TextGutterX);\n\n this._TextGutterY.Items.tag(prop).content = 'Gutter-Y';\n this._TextGutterY.Items.tag(val).content = `${this._gutterY}px`;\n this._updatePropertyTextStyle(this._TextGutterY, this._gutterColor);\n this._updateValueTextStyle(this._TextGutterY);\n\n this._TextSafe.Items.tag(prop).content = 'Safe';\n this._TextSafe.Items.tag(val).content = `${this._safe}px`;\n this._updatePropertyTextStyle(this._TextSafe, this._safeColor);\n this._updateValueTextStyle(this._TextSafe);\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const tone = theme => ({\n neutral: { color: theme.color.fillNeutral },\n inverse: { color: theme.color.fillInverse },\n brand: { color: theme.color.fillBrand }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport Base from '../Base';\nimport * as styles from './Icon.styles';\nimport context from '../../globals/context/index';\nimport { getValidColor } from '../../utils';\nimport CustomImageTexture from '../../textures/CustomImageTexture';\n\n/**\n * Icon component that displays different types of icons, supporting SVGs and images.\n * @extends Base\n */\nexport default class Icon extends Base {\n /**\n * Returns the name of the component for theming support.\n * @returns {string} The name of the component.\n */\n static get __componentName() {\n return 'Icon';\n }\n\n /**\n * Returns the theme styles for the Icon component.\n * @returns {object} The theme styles object.\n */\n static get __themeStyle() {\n return styles;\n }\n\n /**\n * Returns the list of properties that can be set on the Icon component. Used by withUpdates\n * @returns {Array} An array of property names.\n */\n static get properties() {\n return ['icon', 'fixed', 'color'];\n }\n\n _init() {\n /**\n * Event listener for the 'txLoaded' event to handle icon texture loading.\n *\n * @listens 'txLoaded'\n */\n this.on('txLoaded', () => {\n if (!this.fixed) {\n this._notify.bind(this)(); // Notify parent component of the item change if not fixed.\n }\n });\n\n /**\n * Event listener for the 'txError' event to handle icon texture loading errors.\n *\n * @listens 'txError'\n * @param {Error} error - The error object containing information about the loading error.\n */\n this.on('txError', this._handleTxtError.bind(this));\n }\n\n /**\n * Returns the color to be used for the icon.\n *\n * @private\n * @returns {string} The color value.\n */\n _getColor() {\n return this._color || this.style.color;\n }\n\n /**\n * Notifies the parent and ancestors of item changes in the Icon component.\n *\n * @private\n */\n _notify() {\n this.w = this.finalW;\n this.h = this.finalH;\n this.signal('itemChanged', this); // Emit 'itemChanged' signal to notify parent.\n this.fireAncestors('$itemChanged'); // Emit '$itemChanged' signal to notify ancestors.\n }\n\n /**\n * Handles the error when loading the icon texture.\n *\n * @private\n * @param {Error} error - The error object containing information about the loading error.\n */\n _handleTxtError() {\n context.error(`Unable to load icon ${this._icon}`);\n this._icon = null;\n this.texture = null;\n }\n\n /**\n * Updates the Icon component based on the provided icon.\n *\n * @private\n */\n _update() {\n if (!this._icon) {\n this.texture = null; // If there's no icon, clear the texture.\n return;\n }\n this.patch(this._iconPatch); // Apply the icon patch.\n }\n\n /**\n * Generates the patch based on the icon type (SVG, image, etc.) and other properties.\n *\n * @private\n * @returns {object} The patch object to update the Icon component.\n */\n get _iconPatch() {\n const [isSvgTag, isSvgURI] = [/^<svg.*<\\/svg>$/, /\\.svg$/].map(regex =>\n RegExp.prototype.test.bind(regex)\n );\n let texture;\n const svgTag = isSvgTag(this.icon);\n const svgURI = isSvgURI(this.icon);\n\n if (svgTag) {\n texture = lng.Tools.getSvgTexture(\n `data:image/svg+xml,${encodeURIComponent(this.icon)}`,\n this.w,\n this.h\n );\n } else if (svgURI) {\n texture = lng.Tools.getSvgTexture(this.icon, this.w, this.h);\n } else {\n texture = {\n type: CustomImageTexture,\n w: this.w,\n h: this.h,\n src: this.icon\n };\n }\n\n const color = getValidColor(this._color || this.style.color);\n const shader =\n this.radius || this.style.radius\n ? {\n radius: this.radius || this.style.radius,\n type: lng.shaders.RoundedRectangle\n }\n : undefined;\n\n return {\n texture,\n shader,\n ...(color\n ? { colorUl: color, colorUr: color, colorBl: color, colorBr: color }\n : {})\n };\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n textY: 0,\n iconWidth: theme.spacer.xxl + theme.spacer.xs,\n iconHeight: theme.spacer.xxl + theme.spacer.xs,\n contentSpacing: theme.spacer.md,\n marginBottom: 0,\n strikethroughRatio: 0.08,\n strikethroughColor: theme.color.textNeutral,\n textStyle: {\n ...theme.typography.body1\n },\n maxLines: 1,\n justify: 'flex-start'\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\nimport lng from '@lightningjs/core';\nimport Icon from '../Icon';\nimport Badge from '../Badge';\nimport { parseInlineContent, flatten, measureTextWidth } from '../../utils';\nimport Base from '../Base';\nimport * as styles from './InlineContent.styles';\n\nconst isText = item => typeof item === 'string' || !!item.text;\nconst isIcon = item => !!item.icon;\nconst isBadge = item => !!item.badge;\n\nexport default class InlineContent extends Base {\n static get properties() {\n return [\n 'content',\n 'contentProperties',\n 'badgeY',\n 'badgeProperties',\n 'justify',\n 'contentWrap',\n 'customStyleMappings',\n 'maxLines',\n 'maxLinesSuffix'\n ];\n }\n\n static get __componentName() {\n return 'InlineContent';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get aliasStyles() {\n return [\n { prev: 'iconH', curr: 'iconHeight' },\n { prev: 'iconW', curr: 'iconWidth' }\n ];\n }\n\n _construct() {\n super._construct();\n // use the same default value as Lightning's Text Texture default\n this._maxLinesSuffix = '..';\n }\n\n _update() {\n this._updateContent();\n this._waitForComponentLoad();\n }\n\n _updateContent() {\n this.childList.clear();\n\n // if wrapping with max lines, hide content until it has rerendered with maxLines and truncation calculated\n if (this._shouldTruncate) {\n this.alpha = 0.001;\n }\n if (this._parsedContent && this._parsedContent.length) {\n this.patch({\n flex: {\n direction: 'row',\n wrap: !!this.contentWrap,\n justifyContent:\n this.justify != undefined ? this.justify : this.style.justify\n }\n });\n\n this._parsedContent.forEach((item, index) => {\n const isLast = index === this._parsedContent.length - 1;\n const base = {\n flexItem: {\n ...this.contentProperties,\n marginBottom: isLast ? 0 : this._marginBottom,\n marginRight: isLast\n ? 0\n : this.contentProperties.marginRight || this.style.contentSpacing\n }\n };\n\n // text not separated by icons/badges are grouped together\n if (isText(item)) {\n const nextItem = this._parsedContent[index + 1];\n if (\n (nextItem && isText(nextItem)) ||\n (this.contentWrap &&\n nextItem &&\n nextItem.newline &&\n this._parsedContent[index + 2] &&\n isText(this._parsedContent[index + 2]))\n ) {\n base.flexItem.marginRight = 0;\n }\n this.childList.a(this._createText(base, item));\n } else if (isIcon(item)) {\n this.childList.a(this._createIcon(base, item));\n } else if (isBadge(item)) {\n this.childList.a(this._createBadge(base, item.badge));\n } else if (item.newline && this.contentWrap) {\n this.childList.a({ h: 0, w: this.w });\n }\n });\n }\n }\n\n _waitForComponentLoad() {\n if (this.children.length) {\n Promise.all(\n this.children.map(\n child =>\n new Promise(resolve => {\n // resolve immediately for new line elements since they do not render a texture\n if (child.h === 0 && child.w === this.w) {\n resolve();\n } else {\n child.on('txLoaded', resolve);\n }\n })\n )\n ).finally(() => this._contentLoaded());\n } else {\n this.h = 0;\n this._contentLoaded();\n }\n }\n\n _notifyAncestors() {\n this.fireAncestors('$loadedInlineContent', this);\n this.signal('loadedInlineContent', this.finalW, this.multiLineHeight);\n }\n\n _contentLoaded() {\n // TODO: FIX --figure out an alternative to using setTimeout\n // perhaps have to wait until Lightning Flexboxes can emit a signal (like textures) when they've finished loading\n if (this.children.length) {\n setTimeout(() => {\n this.multiLineHeight = this.finalH;\n if (\n this.flex &&\n this.flex._layout &&\n this.flex._layout._lineLayouter &&\n this.flex._layout._lineLayouter._lines\n ) {\n let totalHeight = 0;\n this.flex._layout._lineLayouter._lines.forEach(line => {\n totalHeight += Object.entries(line.items)\n .slice(line.startIndex, line.endIndex + 1)\n .sort((a, b) => {\n return b[1].h - a[1].h;\n })[0][1].h;\n });\n this.multiLineHeight = totalHeight;\n\n if (this._shouldTruncate) {\n this._renderMaxLines();\n }\n\n this._notifyAncestors();\n } else {\n this._contentLoaded();\n }\n }, 10);\n } else {\n this._notifyAncestors();\n }\n }\n\n _renderMaxLines() {\n const childrenDimensions = this._calcChildrenDimensions();\n\n this.childList.clear();\n let renderedLastElement = false;\n childrenDimensions.forEach((child, index) => {\n if (renderedLastElement) {\n return;\n }\n\n const nextChild = childrenDimensions[index + 1];\n\n if (!nextChild) {\n this.childList.add(child.component);\n return;\n }\n\n const isOnLastLine = child.line === this.maxLines;\n\n const isLastBeforeMaxLines =\n isOnLastLine && nextChild.line > this.maxLines;\n\n const canRenderLastWithSuffix =\n isLastBeforeMaxLines && child.hasSpaceForSuffix;\n\n const isLastWithSpaceForSuffix =\n isOnLastLine && child.hasSpaceForSuffix && !nextChild.hasSpaceForSuffix;\n\n /**\n * This is the last element to render, with a suffix, if the element is:\n * - the last element to render (and has not reached the maxLines yet)\n * - the last element that fits within maxLines, including with the width of the maxLinesSuffix appended to it\n */\n const isLast =\n !nextChild || canRenderLastWithSuffix || isLastWithSpaceForSuffix;\n\n if (child.line <= this.maxLines) {\n if (isLast && index !== childrenDimensions.length - 1) {\n this.childList.add(this._addSuffix(child));\n renderedLastElement = true;\n } else {\n this.childList.add(child.component);\n }\n }\n });\n this.alpha = 1;\n }\n\n _calcChildrenDimensions() {\n const suffixW = measureTextWidth({\n ...this.style.textStyle,\n text: this.maxLinesSuffix\n });\n let contentEndX = 0;\n let line = 1;\n\n return this.children.reduce((acc, child) => {\n const component = child;\n let type, content, w;\n const isNewLineElement = child.w == this.w && child.h === 0;\n\n if (isNewLineElement) {\n line++;\n contentEndX = 0;\n const data = {\n type: 'linebreak',\n component,\n content,\n line,\n hasSpaceForSuffix: true\n };\n\n acc.push(data);\n return acc;\n }\n\n if (isText(child)) {\n type = 'text';\n content = child.text.text;\n w = child.texture.getRenderWidth();\n } else if (isIcon(child)) {\n type = 'icon';\n w = child.w;\n } else if (child.constructor.__componentName === 'Badge') {\n type = 'badge';\n w = child.w;\n }\n\n contentEndX += w;\n contentEndX += child.flexItem.marginRight;\n\n if (Math.ceil(contentEndX) >= this.w) {\n line++;\n contentEndX = w;\n }\n\n const hasSpaceForSuffix = Math.ceil(contentEndX) + suffixW <= this.w;\n\n const data = {\n type,\n component,\n content,\n line,\n hasSpaceForSuffix\n };\n\n acc.push(data);\n return acc;\n }, []);\n }\n\n _addSuffix({ type, component, content }) {\n const negatedRightMargin = component.flexItem.marginRight * -1;\n let suffix;\n if (type === 'text') {\n // We need to grab the current styling of the text to ensure that any\n // custom styling is applied to the suffix\n const { fontFace, fontSize, fontStyle, lineHeight, verticalAlign } =\n component.text;\n suffix = this._createText(\n { flexItem: this.contentProperties },\n {\n text: `${content.trim()}${this.maxLinesSuffix}`,\n style: {\n fontFace,\n fontSize,\n fontStyle,\n lineHeight,\n verticalAlign\n }\n }\n );\n } else {\n this.childList.add(component);\n suffix = this._createText(\n {\n flexItem: {\n ...this.contentProperties,\n marginLeft: negatedRightMargin\n }\n },\n this.maxLinesSuffix\n );\n }\n return suffix;\n }\n\n _createIcon(base, iconProps) {\n const y =\n (this.textHeight > this.style.textStyle.lineHeight\n ? this.textHeight\n : this.style.textStyle.lineHeight) - this.style.iconHeight;\n return {\n ...base,\n type: Icon,\n y: y,\n w: this.style.iconWidth,\n h: this.style.iconHeight,\n signals: {\n itemChanged: '_updateIconPosition'\n },\n ...iconProps\n };\n }\n\n _createText(base, text) {\n const textOverrideStyles =\n typeof text.style === 'string'\n ? this.customStyleMappings[text.style]\n : text.style;\n const textComponent = {\n ...base,\n y: this.textY !== undefined ? this.textY : this.style.textY,\n h:\n textOverrideStyles?.lineHeight ||\n textOverrideStyles?.fontSize ||\n this.textHeight,\n text: {\n ...this.style.textStyle,\n ...textOverrideStyles,\n text: text.text || text\n }\n };\n if (textOverrideStyles?.textDecoration === 'line-through') {\n const textWidth = measureTextWidth({\n ...this.style.textStyle,\n ...textOverrideStyles,\n text: text.text || text\n });\n const strikethroughLine = {\n rect: true,\n w: textWidth,\n color:\n this.style.strikethroughColor ||\n textOverrideStyles?.textColor ||\n this.style.textStyle.textColor,\n h: textComponent.h * this.style.strikethroughRatio,\n y: textComponent.h / 2,\n mountY: 1\n };\n return {\n type: lng.Component,\n w: textWidth + textComponent.flexItem.marginRight,\n h: textComponent.h,\n children: [{ ...textComponent }, { ...strikethroughLine }]\n };\n }\n return textComponent;\n }\n\n _createBadge(base, badge) {\n return {\n ...base,\n y: this.badgeY || 0,\n ...this.badgeProperties,\n type: Badge,\n title: badge,\n signals: {\n loadedBadge: '_loadedBadge'\n }\n };\n }\n\n _updateIconPosition(icon) {\n icon.y = this.style.textStyle.lineHeight - icon.h;\n }\n\n _loadedBadge(badge) {\n if (this.badgeY === undefined) {\n badge.y = this.style.textStyle.lineHeight - badge.h;\n }\n }\n\n /**\n * RegEx Lookbehinds do not work in WPE Browser, but we want the space\n * at the end of the previous string to prevent weird wrapping,\n * so we need to separate on spaces, then re-attach to the previous string\n *\n * @param { array } parsedContent\n *\n * @return { array }\n */\n _formatSpaces(parsedContent) {\n // retain the white space next to the appropriate word, then filter by the empty string,\n // otherwise all whitespace is stripped and the flexItem's marginRight adds its own space\n // which can be a different space size than the text would apply between words\n const whitespace = /(.+?\\s+)/;\n return flatten(\n (parsedContent || []).reduce((acc, item) => {\n let parsed = item;\n if (isText(item)) {\n if (typeof item === 'object') {\n const formattedWords = item.text\n .split(whitespace) // split after whitespace character (which adds empty strings)\n .map(word => word && { ...item, text: word }); // check for empty string before adding\n acc.push(...formattedWords);\n return acc;\n }\n parsed = item.split(whitespace);\n }\n acc.push(parsed);\n return acc;\n }, [])\n )\n .map((item, index, arr) => {\n if (item === ' ') return false;\n if (arr[index + 1] === ' ') return item + ' ';\n return item;\n })\n .filter(Boolean);\n }\n\n _setContent(content) {\n if (content !== this._content) {\n this._content = content;\n let parsedContent = this._content;\n if (content && !Array.isArray(content)) {\n parsedContent = parseInlineContent(content);\n }\n\n this._parsedContent = this._formatSpaces(parsedContent);\n }\n return content;\n }\n\n _setBadgeProperties(badgeProperties) {\n if (typeof badgeProperties === 'object') {\n return badgeProperties;\n }\n }\n\n _getBadgeProperties() {\n return this._badgeProperties || {};\n }\n\n _setContentProperties(contentProperties) {\n if (typeof contentProperties === 'object') {\n return contentProperties;\n }\n }\n\n _getContentProperties() {\n return this._contentProperties || {};\n }\n\n _setCustomStyleMappings(customStyleMappings) {\n if (typeof customStyleMappings === 'object') {\n return customStyleMappings;\n }\n }\n\n _getCustomStyleMappings() {\n return this._customStyleMappings || {};\n }\n\n _setMaxLines(maxLines) {\n // only accept positive numbers\n // round down any decimals to whole numbers\n return maxLines >= 1 ? Math.floor(maxLines) : 0;\n }\n\n get textHeight() {\n return this.style.textStyle.lineHeight || this.style.textStyle.fontSize;\n }\n\n get _marginBottom() {\n if (this.contentProperties.marginBottom !== undefined) {\n return this.contentProperties.marginBottom;\n }\n if (this.style.marginBottom) {\n return this.style.marginBottom;\n }\n return 0;\n }\n\n get _shouldTruncate() {\n return this.contentWrap && this.maxLines;\n }\n\n set announce(announce) {\n super.announce = announce;\n }\n\n get announce() {\n if (this._announce) {\n return this._announce;\n }\n const announce =\n this._parsedContent &&\n this._parsedContent.reduce((announce, item) => {\n if (typeof item === 'string') {\n announce += item;\n } else if (item.announce) {\n announce += item.announce;\n } else if (item.text) {\n announce += item.text;\n if (item.style?.textDecoration === 'line-through') {\n announce += 'strikethrough';\n }\n } else if (item.title) {\n announce += item.title;\n } else if (item.badge) {\n announce += item.badge;\n }\n return announce + ' ';\n }, '');\n return announce ? announce.replace(/\\s+(?=\\s)|\\s$/g, '') : '';\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n fadeWidth: 100,\n offset: theme.spacer.xxl,\n shouldSmooth: false,\n textStyle: theme.typography.body1\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport * as styles from './Marquee.styles';\nimport FadeShader from '../../shaders/FadeShader';\nimport utils from '../../utils';\nimport Base from '../Base';\n\nexport default class Marquee extends Base {\n static _template() {\n return {\n ContentClipper: {\n boundsMargin: [], // overwrite boundsMargin so text won't de-render if moved offscreen\n ContentBox: {\n Content: {},\n ContentLoopTexture: {}\n }\n }\n };\n }\n\n static get __componentName() {\n return 'Marquee';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get tags() {\n return [\n 'ContentClipper',\n {\n name: 'ContentBox',\n path: 'ContentClipper.ContentBox'\n },\n {\n name: 'Content',\n path: 'ContentClipper.ContentBox.Content'\n },\n {\n name: 'ContentLoopTexture',\n path: 'ContentClipper.ContentBox.ContentLoopTexture'\n }\n ];\n }\n\n static get properties() {\n return [\n 'autoStart',\n 'title',\n 'contentTexture',\n 'color',\n 'centerAlign',\n 'delay',\n 'repeat',\n 'overrideLoopX'\n ];\n }\n\n static get aliasStyles() {\n return [{ prev: 'fadeW', curr: 'fadeWidth' }];\n }\n\n _construct() {\n super._construct();\n this._scrolling = false;\n this._autoStart = false;\n this._centerAlign = false;\n }\n\n _init() {\n this._Content.on('txLoaded', this._updateContentTexture.bind(this));\n super._init();\n }\n\n _updateContentTexture() {\n const restartScrolling = this._restartScrolling;\n this.stopScrolling();\n\n if (!this._currentTexture.h) {\n this._ContentClipper.h =\n this._currentTexture.text && this._currentTexture.text.lineHeight\n ? this._currentTexture.text.lineHeight\n : this._Content.finalH;\n }\n // in case the metadata width gets larger on focus and the text goes from being clipped to not\n if (this._shouldClip) {\n this._updateShader();\n } else {\n this._ContentClipper.shader = null;\n this._positionTexture();\n }\n\n restartScrolling && this.startScrolling();\n this.signal('marqueeContentLoaded');\n }\n\n _update() {\n this._updateColor();\n this._updateTexture();\n this._updateShader();\n this._restartScrolling && this.startScrolling();\n }\n\n get _restartScrolling() {\n return this.autoStart || this._scrolling || this._shouldTryScrolling;\n }\n\n _updateColor() {\n if (this.color) {\n this._Content.smooth = { color: utils.getValidColor(this.color) };\n }\n }\n\n get _currentTexture() {\n return this._Content.text || this._Content.texture || {};\n }\n\n _updateTexture() {\n const content = { rtt: true };\n if (this.contentTexture) {\n content.texture = this.contentTexture;\n } else if (this.title) {\n content.text = {\n ...this.style.textStyle,\n ...this.title,\n text: this.textContent\n };\n }\n\n this.patch({\n ContentClipper: {\n w: this.w + 14,\n ContentBox: {\n Content: content,\n ContentLoopTexture: {}\n }\n }\n });\n this.signal('marqueeContentLoaded'); // TODO: Check if this extra signal is needed since the txLoaded event should emit it already?\n }\n\n _updateShader() {\n this._ContentClipper.patch({\n w: this.w > 0 ? this.w + this.style.fadeWidth / 2 : 0,\n shader: {\n type: FadeShader,\n positionLeft: 0,\n positionRight: this.style.fadeWidth\n },\n rtt: true\n });\n }\n\n _updateAnimation() {\n this._scrollAnimation && this._scrollAnimation.stopNow();\n this._scrollAnimation = this.animation({\n duration: this._loopWidth / 50,\n delay: isNaN(this.delay) ? 1.5 : this.delay,\n repeat: isNaN(this.repeat) ? -1 : this.repeat,\n actions: [\n {\n t: 'ContentBox',\n p: 'x',\n v: {\n sm: 0,\n 0: { v: 0 },\n 0.5: { v: -(this._loopWidth + this.style.offset) }\n }\n },\n {\n t: 'ContentClipper',\n p: 'shader.positionLeft',\n v: {\n sm: 0,\n 0: { v: 0 },\n 0.1: { v: this.style.fadeWidth },\n 0.4: { v: this.style.fadeWidth },\n 0.5: { v: 0 }\n }\n }\n ]\n });\n }\n\n _positionTexture() {\n const x = this._shouldCenter() ? (this.w - this._textRenderedW) / 2 : 0;\n if (this.style.shouldSmooth) {\n this._ContentBox.smooth = { x };\n } else {\n this._ContentBox.x = x;\n }\n }\n\n startScrolling() {\n this._Content.off('txLoaded', this.startScrolling.bind(this));\n\n this._shouldTryScrolling = true;\n if (this._textRenderedW === 0) {\n // can switch to .once in LUI5.0 requiring higher Lightning Core version\n this._Content.on('txLoaded', this.startScrolling.bind(this));\n }\n if (this._shouldClip) {\n this._scrolling = true;\n this._ContentLoopTexture.x = this._loopWidth + this.style.offset;\n this._ContentLoopTexture.texture = this._Content.getTexture();\n this._updateAnimation();\n this._scrollAnimation.start();\n } else {\n this._scrolling = false;\n }\n }\n\n stopScrolling() {\n this._shouldTryScrolling = false;\n this._scrolling = false;\n if (this._scrollAnimation) {\n this._scrollAnimation.stopNow();\n this._ContentLoopTexture.texture = null;\n }\n }\n\n get _shouldClip() {\n // using fadeWidth / 4 so that if something like the last character is slightly\n // faded out but still visible, we don't unnecessarily scroll\n return this._textRenderedW > this.w - this.style.fadeWidth / 4;\n }\n\n _shouldCenter() {\n return (\n this._centerAlign ||\n (this._Content.text && this._Content.text.textAlign === 'center')\n );\n }\n\n _setAutoStart(autoStart) {\n // if the component is changed from autoStarting to not,\n // cancel the current scrolling behavior,\n // otherwise the component can continue to scroll from its previous state\n if (this.autoStart && !autoStart) {\n // Calling this ensures that the animation is stopped, and the texture\n // is properly positioned if it needs to be centered. Otherwise, if it\n // is un-clipped text, it is positioned at 0.\n this._updateContentTexture();\n }\n return autoStart;\n }\n\n _setCenterAlign(center) {\n // The Content texture needs to be updated if centerAlign\n // is changed, but we need the new value first.\n this._centerAlign = center;\n this._updateContentTexture();\n return center;\n }\n\n get textContent() {\n return this.title?.text ?? this.title ?? '';\n }\n\n get _loopWidth() {\n return this.overrideLoopX || this._textRenderedW;\n }\n\n get _textRenderedW() {\n return this._Content.renderWidth;\n }\n\n set announce(announce) {\n super.announce = announce;\n }\n\n get announce() {\n return this._announce || (this.title && this.title.text);\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n alwaysScroll: false,\n itemSpacing: theme.layout.gutterX,\n itemTransition: theme.animation.utility,\n neverScroll: false,\n scrollIndex: 0\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport FocusManager from '../FocusManager';\nimport { getX, getY, getH, getW, max, watchForUpdates } from '../../utils';\nimport * as styles from './NavigationManager.styles';\n\nconst directionPropNames = {\n row: {\n axis: 'x',\n crossAxis: 'y',\n lengthDimension: 'w',\n crossDimension: 'h',\n innerLengthDimension: 'innerW',\n innerCrossDimension: 'innerH'\n },\n column: {\n axis: 'y',\n crossAxis: 'x',\n lengthDimension: 'h',\n crossDimension: 'w',\n innerLengthDimension: 'innerH',\n innerCrossDimension: 'innerW'\n }\n};\n\nexport default class NavigationManager extends FocusManager {\n static get __componentName() {\n return 'NavigationManager';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get properties() {\n return [\n ...super.properties,\n 'alwaysScroll',\n 'neverScroll',\n 'scrollIndex',\n 'autoResizeWidth',\n 'autoResizeHeight',\n 'lazyUpCount',\n 'lazyUpCountBuffer',\n 'waitForDimensions'\n ];\n }\n\n _construct() {\n super._construct();\n this.shouldSmooth = false;\n this._lazyUpCountBuffer = 2;\n }\n\n _init() {\n const { lengthDimension, axis } = this._directionPropNames;\n\n if (!this[lengthDimension]) {\n this._initComponentSize();\n }\n\n this.Items.transition(axis).on(\n 'finish',\n this._transitionListener.bind(this)\n );\n\n super._init();\n }\n\n _initComponentSize() {\n const { lengthDimension } = this._directionPropNames;\n if (\n this?.parent.parent instanceof NavigationManager &&\n this?.parent.parent[lengthDimension]\n ) {\n // component is a child item in a NavigationManager (or subclass of NavigationManager)\n this[lengthDimension] = this.parent.parent[lengthDimension];\n } else {\n // find closest parent in render tree with lengthDimension property set(w for Row, h for Column)\n let parent = this.parent;\n while (parent && !parent[lengthDimension]) {\n parent = parent.parent;\n }\n this[lengthDimension] =\n (parent && parent[lengthDimension]) ||\n this.stage.h / this.stage.getRenderPrecision();\n }\n }\n\n _update() {\n this._updateLayout();\n }\n\n _updateLayout() {\n const { lengthDimension, crossDimension, crossAxis, innerCrossDimension } =\n this._directionPropNames;\n let nextPosition = 0;\n let maxCrossDimensionSize = 0;\n let maxInnerCrossDimensionSize = 0;\n const childrenToCenter = [];\n const loadingChildren = [];\n\n for (let i = 0; i < this.Items.children.length; i++) {\n const child = this.Items.children[i];\n\n if (child.requestEarlyUpdate) {\n const updateDidRun = child.requestEarlyUpdate();\n if (!updateDidRun && (child.w === 0 || child.h === 0)) {\n child._updateLayout && child._updateLayout();\n }\n }\n const childCrossDimensionSize = this._calcCrossDimensionSize(child);\n\n if (\n this.waitForDimensions &&\n (!childCrossDimensionSize || !child[lengthDimension])\n ) {\n loadingChildren.push(child);\n }\n\n maxCrossDimensionSize = max(\n maxCrossDimensionSize,\n childCrossDimensionSize\n );\n maxInnerCrossDimensionSize = max(\n maxInnerCrossDimensionSize,\n child[innerCrossDimension] || 0\n );\n\n this.updatePositionOnAxis(child, nextPosition);\n\n nextPosition += child[lengthDimension];\n\n if (i < this.Items.children.length - 1) {\n const extraItemSpacing = child.extraItemSpacing || 0;\n nextPosition += this.style.itemSpacing + extraItemSpacing;\n }\n\n if (child.centerInParent) {\n // if the child is another NavigationManager, check the cross dimension size of the item container\n const childCrossDimensionSize =\n (child.Items && child.Items[crossDimension]) || child[crossDimension];\n // only center the child if it is within the bounds of this NavigationManager\n // center based off innerCrossDimension in cases where elements with\n // innerCrossDimension exist in Items (ex. Tile with metadata)\n if (\n childCrossDimensionSize < this[crossDimension] ||\n !this.Items[innerCrossDimension]\n ) {\n childrenToCenter.push({ childIdx: i, childCrossDimensionSize });\n }\n } else {\n child[crossAxis] = 0;\n }\n }\n\n const itemChanged =\n this.Items[crossDimension] !== maxCrossDimensionSize ||\n this.Items[lengthDimension] !== nextPosition;\n\n if (this.waitForDimensions) {\n this.Items.alpha = loadingChildren.length ? 0.001 : 1;\n }\n\n this.Items.patch({\n [crossDimension]: maxCrossDimensionSize,\n [innerCrossDimension]:\n maxInnerCrossDimensionSize || maxCrossDimensionSize,\n [lengthDimension]: nextPosition + (this._totalAddedWidth || 0)\n });\n\n this._autoResize();\n this._centerItemsInParent(childrenToCenter);\n this._updateLastScrollIndex();\n\n if (itemChanged) {\n this._performRender();\n this.fireAncestors('$itemChanged');\n }\n }\n\n _centerItemsInParent(items) {\n const { crossDimension, crossAxis, innerCrossDimension } =\n this._directionPropNames;\n if (items.length) {\n const sizes = [\n this.Items[crossDimension],\n this.Items[innerCrossDimension]\n ];\n // If a subclass of NavigationManager only contains a row or column of items:\n // then also consider the h or w of that component when centering items .\n // Subclasses that add other components outside of the Items array (ex. TitleRow)\n // likely increase the h or w of the component and centering should be with respect to only the Items element.\n if (this.children.length === 1) {\n sizes.push(this[crossDimension]);\n }\n\n const crossDimensionSize = Math.max(...sizes);\n items.forEach(({ childIdx, childCrossDimensionSize }) => {\n this.Items.children[childIdx][crossAxis] =\n (crossDimensionSize - childCrossDimensionSize) / 2;\n });\n }\n }\n\n _autoResize() {\n if (this.autoResizeWidth) {\n this.w = this.Items.w;\n }\n if (this.autoResizeHeight) {\n this.h = this.Items.h;\n }\n }\n\n _updateLastScrollIndex() {\n const { axis, lengthDimension } = this._directionPropNames;\n if (this.alwaysScroll) {\n this._lastScrollIndex = this.Items.children.length - 1;\n return;\n }\n\n const itemPos = this._isRow ? this.itemPosX : this.itemPosY;\n const scrollOffset =\n (this.Items.children[this.scrollIndex] || {\n [axis]: 0\n })[axis] + itemPos;\n const lastChild = this.Items.childList.last;\n const endOfLastChild = lastChild\n ? this._calcAxisPosition(lastChild) + lastChild[lengthDimension]\n : 0;\n if (endOfLastChild > this[lengthDimension]) {\n let lastScrollIndex;\n for (let i = this.Items.children.length - 1; i >= 0; i--) {\n const childPosition = this._calcAxisPosition(this.Items.children[i]);\n const canScrollToChild =\n childPosition + this[lengthDimension] - scrollOffset > endOfLastChild;\n if (canScrollToChild) {\n lastScrollIndex = i;\n } else {\n break;\n }\n }\n this._lastScrollIndex = lastScrollIndex;\n return;\n }\n\n // TODO: This conditional originated in Column (prior to NavigationManager refactor).\n // What scenario would this ever be true?\n // Add a comment to describe it when that is identified.\n if (this._lastScrollIndex > this.items.length) {\n this._lastScrollIndex = this.items.length - 1;\n }\n }\n\n _calcCrossDimensionSize(comp) {\n if (this._isRow) {\n return getH(comp);\n }\n\n if (this._isColumn) {\n return getW(comp);\n }\n }\n\n _calcAxisPosition(comp) {\n if (this._isRow) {\n return getX(comp);\n }\n\n if (this._isColumn) {\n return getY(comp);\n }\n }\n\n _transitionListener() {\n this.shouldSmooth = false;\n this.transitionDone();\n }\n\n _withAfterUpdate(element) {\n return watchForUpdates({\n element,\n watchProps: [\n this._directionPropNames.crossAxis,\n 'w',\n 'h',\n 'innerW',\n 'innerH'\n ],\n sideEffect: this.queueRequestUpdate.bind(this)\n });\n }\n\n // can be overwritten\n _performRender() {}\n\n _appendItem(item, shouldSmoothOverride) {\n this.shouldSmooth = shouldSmoothOverride ?? false;\n item.parentFocus = this.hasFocus();\n item = this.Items.childList.a(item);\n\n const { crossDimension } = this._directionPropNames;\n // do not set a h/w if the item already has one defined\n // as this will trigger withThemeStyles's dimension \"setByUser\" flag\n if (!item[crossDimension]) {\n const itemCrossSize = this._isRow ? this.renderHeight : this.renderWidth;\n item[crossDimension] = item[crossDimension] || itemCrossSize;\n }\n\n item = this._withAfterUpdate(item);\n return item;\n }\n\n _appendLazyItem(item) {\n const { lengthDimension, axis } = this._directionPropNames;\n const lastChild = this._Items.children[this.items.length - 1];\n const nextPosition =\n lastChild[lengthDimension] +\n lastChild[axis] +\n (lastChild.extraItemSpacing || 0) +\n this.style.itemSpacing;\n\n const appended = this._appendItem(item, true);\n\n // Update w/o recalculating whole layout\n appended[axis] = nextPosition;\n this._Items[lengthDimension] += nextPosition + item[lengthDimension];\n }\n\n $itemChanged() {\n this.queueRequestUpdate();\n }\n\n appendItems(items = []) {\n this.shouldSmooth = false;\n\n if (this._lazyItems) {\n this._lazyItems.push(...items);\n return;\n }\n\n if (items.length > this.lazyUpCount + this.lazyUpCountBuffer) {\n this._lazyItems = items.splice(this.lazyUpCount + this.lazyUpCountBuffer);\n }\n items.forEach(item => this._appendItem(item));\n\n this.requestUpdate();\n this._refocus();\n }\n\n appendItemsAt(items = [], idx) {\n if (this._lazyItems && idx > this.items.length - 1) {\n const addAtIdx = idx - this.items.length;\n this._lazyItems.splice(addAtIdx, 0, ...items);\n return;\n }\n\n const { crossDimension, lengthDimension, innerLengthDimension } =\n this._directionPropNames;\n const addIndex = Number.isInteger(idx) ? idx : this.Items.children.length;\n this.shouldSmooth = false;\n this._lastAppendedIdx = addIndex;\n this._totalAddedLength = 0;\n\n items.forEach((item, itemIdx) => {\n const newItem = {\n ...this._withAfterUpdate(item),\n parentFocus: this.hasFocus()\n };\n // do not set a h/w if the item already has one defined\n // as this will trigger withThemeStyles's dimension \"setByUser\" flag\n if (!item[crossDimension]) {\n newItem[crossDimension] =\n item[crossDimension] || this.Items[crossDimension];\n }\n this.Items.childList.addAt(newItem, addIndex + itemIdx);\n const itemLength =\n item[lengthDimension] || item[innerLengthDimension] || 0;\n const extraItemSpacing = item.extraItemSpacing || 0;\n this._totalAddedLength +=\n itemLength + this.style.itemSpacing + extraItemSpacing;\n });\n\n if (this.selectedIndex >= this._lastAppendedIdx) {\n this._selectedPastAdded = true;\n this._selectedIndex += items.length;\n }\n\n this.requestUpdate();\n this._refocus();\n }\n\n updatePositionOnAxis(item, position) {\n const { axis } = this._directionPropNames;\n this.applySmooth(\n item,\n { [axis]: position },\n { [axis]: [position, this.style.itemTransition] }\n );\n\n if (!this.shouldSmooth) {\n this._updateTransitionTarget(item, axis, position);\n }\n }\n\n scrollTo(index, duration = this.style.itemTransition.duration * 100) {\n if (index == undefined) {\n return;\n }\n\n if (duration === 0) {\n this.selectedIndex = index;\n return;\n }\n\n for (let i = 0; i !== Math.abs(this.selectedIndex - index); i++) {\n setTimeout(() => {\n this.selectedIndex > index ? this.selectPrevious() : this.selectNext();\n }, duration * i);\n }\n }\n\n // can be overridden\n transitionDone() {}\n\n shouldScrollLeft() {\n return this._isRow && this._canScrollBack;\n }\n\n shouldScrollRight() {\n return this._isRow && this._canScrollNext;\n }\n\n shouldScrollUp() {\n return this._isColumn && this._canScrollBack;\n }\n\n shouldScrollDown() {\n return this._isColumn && this._canScrollNext;\n }\n\n get _directionPropNames() {\n return directionPropNames[this.direction];\n }\n\n get _canScrollBack() {\n let shouldScroll = false;\n\n if (this._lastScrollIndex) {\n shouldScroll = this.selectedIndex < this._lastScrollIndex;\n if (\n this._prevLastScrollIndex !== undefined &&\n this._prevLastScrollIndex !== this._lastScrollIndex\n ) {\n shouldScroll = true;\n }\n } else {\n shouldScroll = this.selectedIndex >= this.scrollIndex;\n }\n\n const itemsStartCoord = this._isRow ? this._itemsX : this._itemsY;\n return (\n itemsStartCoord < (this._isRow ? this.itemPosX : this.itemPosY) &&\n shouldScroll\n );\n }\n\n get _canScrollNext() {\n const { axis, lengthDimension } = this._directionPropNames;\n const lastChild = this.Items.childList.last;\n let endOfItemsPosition;\n\n if (this._isRow) {\n endOfItemsPosition = Math.abs(this._itemsX - this.w);\n }\n if (this._isColumn) {\n endOfItemsPosition = Math.abs(this._itemsY - this.h);\n }\n\n return (\n this.selectedIndex > this.scrollIndex &&\n // end of Items container < end of last item\n endOfItemsPosition < lastChild[axis] + lastChild[lengthDimension]\n );\n }\n\n get _isColumn() {\n return this.direction === 'column';\n }\n\n get _isRow() {\n return this.direction === 'row';\n }\n\n get _itemsX() {\n return getX(this.Items);\n }\n\n get _itemsY() {\n return getY(this.Items);\n }\n\n _getAlwaysScroll() {\n return this._alwaysScroll !== undefined\n ? this._alwaysScroll\n : this.style.alwaysScroll;\n }\n\n _getNeverScroll() {\n if (this.alwaysScroll) {\n return false;\n }\n return this._neverScroll !== undefined\n ? this._neverScroll\n : this.style.neverScroll;\n }\n\n _setScrollIndex(index) {\n return index >= 0 ? index : 0;\n }\n\n _getScrollIndex() {\n return this._scrollIndex !== undefined\n ? this._scrollIndex\n : this.style.scrollIndex;\n }\n\n _setLazyUpCountBuffer(buffer) {\n if (buffer < 0) {\n console.warn(\n 'lazyUpCountBuffer must be greater than or equal to 0. Setting to 0.'\n );\n buffer = 0;\n }\n return buffer;\n }\n\n isFullyOnScreen({ offsetX = 0, offsetY = 0 } = {}) {\n // if the NavigationManager is nested in another Focus Manager\n // (like a Row inside of a Column),\n // the `isComponentOnScreen` method needs to account for\n // how much the Items container is moving as it scrolls\n const focusmanager = this.parent?.parent;\n if (focusmanager instanceof FocusManager) {\n offsetX += focusmanager.Items.transition('x').targetValue || 0;\n offsetY += focusmanager.Items.transition('y').targetValue || 0;\n }\n return super.isFullyOnScreen({ offsetX, offsetY });\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n itemSpacing: theme.layout.gutterX,\n scrollIndex: 0,\n alwaysScroll: false,\n neverScroll: false,\n itemTransition: {\n ...theme.animation.standardEntrance,\n duration: theme.animation.duration.fast\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport NavigationManager from '../NavigationManager';\nimport * as styles from './Row.styles';\nimport { getX } from '../../utils';\n\nexport default class Row extends NavigationManager {\n static get __componentName() {\n return 'Row';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static _template() {\n return {\n ...super._template(),\n direction: 'row'\n };\n }\n\n static get properties() {\n return [\n ...super.properties,\n 'lazyScroll',\n 'startLazyScrollIndex',\n 'stopLazyScrollIndex'\n ];\n }\n\n // Since this is a Row, scrolling should be done only when focused item (this.selected) is fully visible horizontally\n // as scrolling is happening along X axis. So, if we have a row that has height greater than screen's height, it still\n // can scroll. Method below the '_isComponentHorizontallyVisible' does not take \"full\" visibility into an account.\n // At the same time, 'isFullyOnScreen' method on the Base class or utils method checks that element is fully visible\n // both vertically and horizontally.\n // At a later time, we should investigate this further.\n _isOnScreenForScrolling(child) {\n if (!child) return false;\n\n const x = getX(child);\n if (!Number.isFinite(x)) return false;\n const itemsTransitionX = this.getTransitionXTargetValue();\n const rowX = this.core.renderContext.px;\n let itemX = rowX + itemsTransitionX + x;\n let xModifier;\n\n // This section here takes the difference between a possible target value\n // and subtracts it from the current child x. That value then is subtracted from the initial\n // itemX value calculated on the core renderContext px value to more accurately\n // calculate the item's location on screen when it's own x value will be updating.\n if (child.transition('x')) {\n xModifier = child.x - child.transition('x').targetValue;\n itemX = itemX - xModifier;\n }\n return itemX >= rowX && itemX + child.w <= rowX + this.w;\n }\n\n _shouldScroll() {\n const prevIndex = this.Items.childList.getIndex(this.prevSelected);\n if (\n this.alwaysScroll ||\n (this.lazyScroll &&\n (this.selectedIndex < this.startLazyScrollIndex ||\n this.selectedIndex > this.stopLazyScrollIndex ||\n (prevIndex < this.startLazyScrollIndex &&\n this.selectedIndex === this.startLazyScrollIndex) ||\n (prevIndex > this.stopLazyScrollIndex &&\n this.selectedIndex === this.stopLazyScrollIndex)))\n ) {\n return true;\n }\n\n let shouldScroll = this._selectedPastAdded;\n if (!shouldScroll && !this.neverScroll) {\n const isCompletelyOnScreen = this._isOnScreenForScrolling(this.selected);\n\n if (this.lazyScroll) {\n shouldScroll = !isCompletelyOnScreen;\n } else {\n const lastChild = this.Items.childList.last;\n shouldScroll =\n lastChild &&\n (this.shouldScrollLeft() ||\n this.shouldScrollRight() ||\n !isCompletelyOnScreen);\n }\n }\n return shouldScroll;\n }\n\n _getPrependedOffset() {\n this._selectedPastAdded = false;\n return this.Items.x - this._totalAddedWidth;\n }\n\n _getLazyScrollX(prev) {\n const prevIndex = this.Items.childList.getIndex(this.prevSelected);\n if (this._selectedPastAdded) {\n return this._getPrependedOffset();\n }\n\n if (this.selectedIndex <= this.startLazyScrollIndex) {\n // if navigating on items before start lazy scroll index, use normal scroll logic\n return this._getScrollX();\n } else if (\n this.selectedIndex >= this.stopLazyScrollIndex &&\n this.selectedIndex < prevIndex\n ) {\n // if navigating left on items after stop lazy scroll index\n const currItemsX = this.Items.x;\n\n return (\n currItemsX +\n (this.prevSelected.w +\n this.style.itemSpacing +\n (this.selected.extraItemSpacing || 0))\n );\n } else if (prev && this.selectedIndex > this.stopLazyScrollIndex) {\n // if navigating right on items after stop lazy scroll index\n const prevX = prev.x;\n\n return (\n -prevX +\n this.prevSelected.w +\n this.style.itemSpacing +\n (this.selected.extraItemSpacing || 0) +\n this.itemPosX\n );\n } else if (prev) {\n // otherwise, no start/stop indexes, perform normal lazy scroll\n let itemsContainerX;\n const prevIndex = this.Items.childList.getIndex(prev);\n\n const selectedX = this.selected.x;\n\n if (prevIndex === -1) {\n // No matches found in childList, start set x to 0\n return;\n }\n if (prevIndex > this.selectedIndex) {\n itemsContainerX = -selectedX + this.itemPosX;\n } else if (prevIndex < this.selectedIndex) {\n itemsContainerX = this.w - selectedX - this.selected.w;\n }\n\n return itemsContainerX;\n }\n // if no prev item or start/stop index, default to normal scroll logic\n return this._getScrollX();\n }\n\n _getScrollX() {\n if (this._selectedPastAdded) {\n return this._getPrependedOffset();\n }\n let itemsContainerX;\n let itemIndex = this.selectedIndex - this.scrollIndex;\n itemIndex = itemIndex < 0 ? 0 : itemIndex;\n if (itemIndex === this._firstFocusableIndex()) {\n itemIndex = 0;\n }\n\n if (this.Items.children[itemIndex]) {\n itemsContainerX = this.Items.children[itemIndex].transition('x')\n ? -this.Items.children[itemIndex].transition('x').targetValue +\n this.itemPosX\n : -this.Items.children[itemIndex].x + this.itemPosX;\n }\n\n return itemsContainerX;\n }\n\n _render(next, prev) {\n if (this.plinko && prev && prev.selected) {\n next.selectedIndex = this._getIndexOfItemNear(next, prev);\n }\n\n this._prevLastScrollIndex = this._lastScrollIndex;\n\n let itemsContainerX;\n if (!this.Items.children.length) {\n itemsContainerX = this.itemPosX;\n } else if (this._shouldScroll()) {\n itemsContainerX =\n this.lazyScroll && prev\n ? this._getLazyScrollX(prev)\n : this._getScrollX();\n }\n\n if (itemsContainerX !== undefined) {\n this.updatePositionOnAxis(this.Items, itemsContainerX);\n }\n\n this.onScreenEffect(this.onScreenItems);\n }\n\n _performRender() {\n this._render(this.selected, this.prevSelected);\n }\n\n _isOnScreen(child) {\n if (!child) return false;\n\n return this._isComponentHorizontallyVisible(child);\n }\n\n // can be overridden\n onScreenEffect() {}\n\n get _totalAddedWidth() {\n return this._totalAddedLength;\n }\n\n _getLazyScroll() {\n if (this.alwaysScroll) {\n return false;\n }\n return this._lazyScroll !== undefined\n ? this._lazyScroll\n : this.style.lazyScroll;\n }\n\n _getNeverScroll() {\n if (this.alwaysScroll || this.lazyScroll) {\n return false;\n }\n return this._neverScroll !== undefined\n ? this._neverScroll\n : this.style.neverScroll;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n offsetY: theme.spacer.xxs,\n offsetX: 0,\n textStyle: theme.typography.body1\n});\n\nexport const tone = theme => ({\n neutral: {\n textStyle: { textColor: theme.color.fillNeutral }\n },\n inverse: {\n textStyle: { textColor: theme.color.fillInverse }\n },\n brand: {\n textStyle: { textColor: theme.color.fillBrand }\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport * as styles from './TextBox.styles';\nimport Base from '../Base';\nimport InlineContent from '../InlineContent';\nimport Marquee from '../Marquee';\nimport context from '../../globals/context/index';\nimport utils from '../../utils';\n\n/**\n *\n * Get defaults directly from @lightningjs/core to ensure correct fallback values\n *\n */\nconst lightningTextDefaults = Object.entries(\n Object.getOwnPropertyDescriptors(lng.textures.TextTexture.prototype)\n).reduce((acc, [prop]) => {\n const value = lng.textures.TextTexture.prototype[prop];\n if (prop.startsWith('_') || ['undefined', 'function'].includes(typeof value))\n return acc;\n return {\n [prop]: value,\n ...acc\n };\n}, {});\n\nexport default class TextBox extends Base {\n static _template() {\n return {\n alpha: 0.001\n };\n }\n\n static get __componentName() {\n return 'TextBox';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get tags() {\n return ['InlineContent', 'Marquee', 'Text'];\n }\n\n static get properties() {\n return [\n ...InlineContent.properties,\n 'content',\n 'fixed',\n 'marquee',\n 'marqueeProps',\n 'hideOnLoad'\n ];\n }\n\n _setDimensions(w, h) {\n let width = w;\n let height = h;\n if (!this._isInlineContent) {\n width = this._Text.texture.getRenderWidth();\n height = this._Text.texture.getRenderHeight();\n }\n\n const sizeChanged = this.w !== width || this.h !== height;\n\n if (width && height && sizeChanged) {\n this.h = height;\n if (!this.fixed) {\n this.w = width;\n }\n\n // Position updates can produce flash of poorly positioned content, hide the element until measurements are made.\n if (!this.hideOnLoad && this.alpha < 1) {\n this.alpha = 1;\n }\n\n this._notifyAncestors();\n }\n }\n\n _setContent(content) {\n this._isInlineContent = false;\n if (Array.isArray(content) || utils.isMarkupString(content)) {\n this._isInlineContent = true;\n }\n if ('string' !== typeof content && !this._isInlineContent) {\n return '';\n }\n return content;\n }\n\n get title() {\n return this._content;\n }\n\n _notifyAncestors(w = this.w, h = this.h) {\n this.fireAncestors('$itemChanged');\n this.signal('textBoxChanged', { w, h });\n }\n\n _construct() {\n super._construct();\n this._marqueeContentListenerAttached = false;\n this._marqueeOverrideLoopX = undefined;\n this._resetMarqueePromise();\n }\n\n _update() {\n if (!this.content) {\n // If content is not defined hide the component, but do NOT set visibility\n // as a parent component may need to control that (i.e. Control Button)\n\n // guard to make sure _notifyAncestors is not called numerous times for components like Input\n if (this._Text || this._InlineContent) {\n this.w = this.h = 0;\n this._notifyAncestors(); // need to alert parents that the width and height are now 0\n // makes sure that elements are removed\n this._updateMarquee();\n this.patch({ Text: undefined, InlineContent: undefined });\n }\n\n return;\n }\n this._isInlineContent ? this._updateInlineContent() : this._updateText();\n this._updateMarquee();\n }\n\n _updateInlineContent() {\n this.patch({ Text: undefined });\n\n const inlineContentPatch = InlineContent.properties.reduce(\n (acc, prop) => {\n if (this[prop] != undefined) {\n acc[prop] = this[prop];\n }\n return acc;\n },\n // ensure all styles are passed down as well\n {\n style: {\n ...this.style,\n textStyle: this._textStyleSet\n }\n }\n );\n\n if (this._textStyleSet.wordWrapWidth) {\n inlineContentPatch.w = this._textStyleSet.wordWrapWidth;\n inlineContentPatch.rtt = true;\n }\n if (this._textStyleSet.maxLines) {\n inlineContentPatch.maxLines = this._textStyleSet.maxLines;\n }\n if (this._textStyleSet.maxLinesSuffix) {\n inlineContentPatch.maxLinesSuffix = this._textStyleSet.maxLinesSuffix;\n }\n\n this.patch({\n alpha: 1,\n InlineContent: {\n type: InlineContent,\n w: this.w,\n ...inlineContentPatch,\n signals: {\n loadedInlineContent: '_setDimensions'\n }\n }\n });\n }\n\n _updateText() {\n this.patch({ InlineContent: undefined });\n\n if (!this._Text) {\n this.patch({ Text: {} });\n this._Text.on('txLoaded', this._setDimensions.bind(this));\n }\n\n const fontStyle = this._textStyleSet;\n\n if (this._Text) {\n this._Text.patch({\n y: this.style.offsetY,\n x: this.style.offsetX,\n text: {\n ...lightningTextDefaults, // order matters this should always be first\n ...fontStyle\n }\n });\n }\n }\n\n // keep this out of the update lifecycle\n set marqueeOverrideLoopX(v) {\n this._marqueeOverrideLoopX = v;\n if (this._Marquee) this._Marquee.overrideLoopX = this._marqueeOverrideLoopX;\n this._resolveAwaitMarqueeOverrideX();\n }\n\n get marqueeOverrideLoopX() {\n return this._marqueeOverrideLoopX;\n }\n\n _resetMarqueePromise() {\n this._awaitMarqueeOverrideX = new Promise((resolve, reject) => {\n this._resolveAwaitMarqueeOverrideX = resolve;\n this._rejectAwaitMarqueeOverrideX = reject;\n });\n }\n\n _loadedMarqueeContent() {\n this.signal('willMarquee', this._Marquee);\n }\n\n _updateMarquee() {\n if (this._Marquee && !this.marquee) {\n this._toggleMarquee(this._contentTag);\n }\n\n if (this.marquee) {\n this._resetMarqueePromise();\n const marqueePatch = {\n ...this.marqueeProps,\n w: this._textStyleSet.wordWrapWidth || this.w,\n h: this.h,\n y: this.style.offsetY,\n x: this.style.offsetX,\n signals: {\n marqueeContentLoaded: '_loadedMarqueeContent'\n }\n };\n\n if (!this._Marquee) {\n marqueePatch.type = Marquee;\n }\n\n if (this._isInlineContent) {\n this._InlineContent.w = 0; // ensure we're copying the full, unwrapped inlineContent\n marqueePatch.title = undefined;\n marqueePatch.contentTexture = this._contentTag.getTexture();\n marqueePatch.w = this._textStyleSet.wordWrapWidth || this.w;\n } else {\n marqueePatch.contentTexture = undefined;\n marqueePatch.title = {\n text: this._contentTag.text.text,\n ...this._textStyleSet,\n wordWrapWidth: 0, // ensures that the text will marquee and not wrap\n maxLines: 1\n };\n }\n\n this.patch({\n Marquee: marqueePatch\n });\n if (!this._marqueeContentListenerAttached) {\n this._marqueeContentListenerAttached = true;\n }\n if ('undefined' !== typeof this._marqueeOverrideLoopX) {\n this._awaitMarqueeOverrideX.then(() => {\n this._toggleMarquee(this._contentTag);\n });\n } else {\n this._toggleMarquee(this._contentTag);\n }\n }\n }\n\n _getMarqueeProps() {\n return this._marqueeProps ?? {};\n }\n\n get _textStyleSet() {\n const fontStyle = {\n ...this.theme.typography.body1,\n ...(null !== this.style.textStyle &&\n 'object' === typeof this.style.textStyle &&\n Object.keys(this.style.textStyle)\n ? this.style.textStyle\n : this.theme.typography[this.style.textStyle])\n };\n\n this.constructor.properties.forEach(prop => {\n if ('fontStyle' !== prop && 'undefined' !== typeof this[`_${prop}`]) {\n const key = 'content' === prop ? 'text' : prop;\n fontStyle[key] = this[`_${prop}`];\n }\n });\n\n if (\n this.w &&\n !this._isInlineContent &&\n !this.style.textStyle.wordWrapWidth &&\n this.fixed\n ) {\n fontStyle.wordWrapWidth = this.w;\n }\n\n return fontStyle;\n }\n\n get _contentTag() {\n return this._isInlineContent ? this._InlineContent : this._Text;\n }\n\n _toggleMarquee(contentTag) {\n // do not just return if there is no contentTag, we may still need to alpha the Marquee\n if (this.marquee) {\n if (contentTag) {\n contentTag.alpha = 0.001;\n }\n if (this._Marquee) {\n this._Marquee.alpha = 1;\n this._Marquee.startScrolling();\n }\n } else {\n if (contentTag) {\n contentTag.alpha = 1;\n }\n if (this._Marquee) {\n this._Marquee.alpha = 0.001;\n this._Marquee.stopScrolling();\n }\n }\n }\n\n toggleMarquee() {\n this._toggleMarquee(this._contentTag);\n }\n\n get announce() {\n return (\n this._announce ||\n (this._isInlineContent && this._InlineContent\n ? this._InlineContent.announce\n : this.content)\n );\n }\n\n set announce(announce) {\n super.announce = announce;\n }\n\n set smooth(v) {\n context.warn(\n 'warning: value smoothing is known to cause bugs with the TextBox - patch updated values instead.'\n );\n super.smooth = v;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport logger from './logger';\nclass Metrics {\n constructor() {\n this._keyMetricsCallback = undefined;\n }\n\n get keyMetricsCallback() {\n return this._keyMetricsCallback;\n }\n\n set keyMetricsCallback(value) {\n if (-1 < ['undefined', 'function'].indexOf(typeof value)) {\n this._keyMetricsCallback = value;\n return;\n }\n logger.warn(\n `context keyMetricsCallback expected a function. Received ${typeof value}`\n );\n }\n}\n\nconst metricsInstance = new Metrics();\n\nexport { metricsInstance as default, Metrics };\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\n\nconst eventEmitterInstance = new lng.EventEmitter();\n\nexport default eventEmitterInstance;\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport default {\n name: 'Base Lightning TV',\n alpha: {\n primary: 1,\n secondary: 0.7,\n tertiary: 0.1,\n inactive: 0.5,\n full: 1,\n none: 0,\n alpha1: 0.1,\n alpha2: 0.3,\n alpha3: 0.5,\n alpha4: 0.7,\n alpha5: 0.9\n },\n animation: {\n duration: {\n none: 0,\n xfast: 0.1,\n fast: 0.25,\n normal: 0.5,\n slow: 0.75,\n xslow: 0.9\n },\n delay: {\n none: 0,\n xfast: 0.01,\n fast: 0.025,\n normal: 0.05,\n slow: 0.075,\n xslow: 0.09\n },\n expressive: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n expressiveEntrance: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n expressiveExit: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n standard: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n standardEntrance: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n standardExit: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n utility: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n utilityEntrance: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n },\n utilityExit: {\n timingFunction: 'cubic-bezier(0, 0, 1, 1)',\n delay: 0,\n duration: 0.25\n }\n },\n asset: {\n arrowLeft:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAGKADAAQAAAABAAAAGAAAAADiNXWtAAAAi0lEQVRIDWNgGAWjIfD//38JID5Fk5AAGqwKxPeA+D/VLQCaaQLEr0CGgwBVLQCa5wbEn0EGwwDVLAAaGA3Ev2AGw2iqWAA0rBiI/8EMRaYptgBoWDeygehsci1gIlcjWfqArqZdEMFcBLSEdpGMZAntkimSJbTLaEiW0K6oQLKEdoUdzJJRemiHAAD4n+yzPWCs7QAAAABJRU5ErkJggg==',\n arrowRight:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAGKADAAQAAAABAAAAGAAAAADiNXWtAAAAg0lEQVRIDWNgGAWjIYArBP7//38KiCVwyVMsDjQcBO4BsSrFhmEzAGw8hHgFpEywqaFIDMkCEPMzELtRZCC6ZjQLQNxfQByNro5sPhYLQEL/gLiYbEORNeKwACbcDVPLBGMMOhrmVDSapkFE00imaTKlaUajaVFB28Ju0CXrUQfhDAEAEgHss6NhpLQAAAAASUVORK5CYII=',\n backspaceOutline:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAAAXNSR0IArs4c6QAACmpJREFUeF7tnVmoZUcVhv/feY4gBEVEH/KgCCZxCK2itNo4xQQH+kUN0TjEiDGKKBqnaExwBjUaR6KY+NQgiQkOMSYhYEScIopGJOqDE2hHjfP0y4p1Oqdv33v2qr32Prv2Paug6Ye7Vu2qv75TtWvtGohMqUBAAQZ80zUVQAKUEIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypfPsAJJ0NYC92XRHKPB3AAfLv18BuBLAFSR/NKZWswJI0vkA3jCmILsw75sAvIfkR8eo22wAknQSgMvGEGFD8vwxgFeQvGrI+s4CIEnHAPgugHsMWfkNzevDAM4i+Z8h6t88QJLuXOB5yBAVzjxuVeBaAM8ieXNUjzkAdAmA50Yrmv5HKPATACeQ/GNEm6YBkvRyANblZhpHAXsfekpkOGsWIEmPAHA9gDuOo13mWhS4gOSZfdVoEiBJ9wFwA4D7961Y+lUpsK/v7KxVgL4K4ElOCS4l+Uyn7a41k3Q0gMcC2ANgH4CHV1T2OyStx69OzQEk6TwAZztr8lMAx5P8s9N+Y8wk2cTjfQDu66z080h+zml7yKwpgCSdCOByZyX+BuBRJH/otN84M0kWN/s0gOc4Kv8Nko922B1m0gxAkh4I4AcVwcL9JA/UVnjT7CXdHYD9yEzfVUkAjib5uxqNmgCoBAu/CeBhzsJ/kORZTtuNN5Nk70bXAZ0Hy59G8qIawVoB6LMAnu8suE3tH0/y3077NAMg6esAuoaoC0la7M2dJgdI0ssAXOgs8W8BHEvS/s9UoYCkdwN4bYfL5STto7U7TQpQZbDQehzreawHylSpgKSTAVza4XYDyeNqsp4MoB7BwteQfH9N5dL2NgWK3l0vyAdJWhDXnSYBSNLtANh3GO/KwgMk97trlYbbKiDJPpzea5U8JKuYqDIeql0kvQPAG5352ZLMR5L8q9M+zXZQYFcAJOnJAL7sbGWLMFuk2SLOmYIKzB6gEiz8HoB7O7U4meQXnLZp1qGApD8BuOcsh7AewcL3kuyadg4OjSSbhRxH0j4BjJok2Ufga0j+YdQHlcznDlBNsPAa+xpP8r/rEHbxjAKPbRuyHvKFY0Ik6QUALOprPfIT1gHRbAGSdDoA77aSX5Zg4e8nhGfx6FEgWoJn8Zy1QCTplq5vjc3NwnoEC/eQ/HYD8IwC0TbwrA2i2QHUI1h4JskLGoJnUIhWwLMWiGYFkCSLMX2t5WDhlneeLm5Dw5kDntEhkmRhEVvesWNqZgiTdC6AN3W1Svn72oOFkuxF+WcVIQUrai+IKuA5BBHJ453auc1mA1AJFn7Jsf7EKj9ZsLBHw1ZDtI5neAmaBUBzCxaO2cBj5u2FZtlO0l8A3K3ZIaxHsPB8kt5vYn00c/mM0dBj5OmqzAqjOQDUfLBwJ32HbPAh84pCM5seSNJLAHzcWeFJgoVdZRui4YfIo6ucff8uyVY03LW5IawyWPgvW5u77mChV/QIABFfb/kidk0CVKbDth3Huw35dJLeniqiV2/fniDYx1f7vlWTeoUFah6wZQhrqwcqwUKbrtsaH0+6mOQpHsOpbXpCVFPstcJjBZNkmzHv0swQJultAN7iVO375TyafzjtJzcbEaK1w9McQJXBQlvvYmtsfjE5FZUFGAGiSeBpCqDKYKFtmX0qya9Utl0z5gNCNBk8BSA7CtiODNwxjf4trEew8BySNtTNOg0A0aTwtARQTbDQeh3rfawXmn0KQDQ5PC0B9EkAL3LSkAD9X6hWALIJzJ3mNoSdS9I7U3NyuX6zQO+zKOzkEEmaHqDSFdpZM97tOfkSfRvvk0LUDEAFIgseetf85DS+AYgk/bPr1NvRZ2HLg4ektwI4xzmgZCBxYohaBMjWPeenDOcvaIvZ2oez5gAqQ5mtLbb3oa4z+Bb6nTHW1UP92vFIr54vzJ8BcGplGdYKkSRbCXGHSWdh2z1ckp1taGccroxyFt9cznG4iGuDqFmASk9kZxxakNGTckHZBBA1DVCB6BMAXuwhyA4VmGL/+05l6zlsbdt7DJmXU0uXmSQ7JvD2zQ1hiwJJsotRvlVxXO87SU5+heUYDT5Gni5KVhg1D1DphWqCjOYy6RlAYzb0mHn3gWkWABWIaoKMubHwSBpGebGWZNdc2vmUO6a1BhJXFUSSff/yLuOYamvzzwEcVfFr7tWwPXqi6uN2PXWYG0C1Qca1n8RaDlewl3kPRL3gWXo/XBwo1dXWdk/a3jEOnJoVQGUoqw0yvpLkh7oUHvLvTohC8FRANBo8pT3sxLeVJ/M2M4QtiVYTZJzkNPoOiAaBxwHRqPDMFqBS8Jog4yT3YewA0aDwrIBodHhmDVApvG0mtO3PnjTJjTxbIBoFnm0gWgs8pQ06lxY3N4QtCWZBRgPDezdnHvPr+alV2EiaL0DlF2Dbn20bdB40XtHwQ5nOHqAC0SyCjEM1Wkv57AqACkRvBvB2p7hrDzI6yzU7s90EUPNBxtnR4SjwrgGo9EK1Qca8cM4ByU4mkuz++F93ZHELyZX3iW31n+S+sKWZWfNBxkCbNeUq6ekArugo1I0kH1xT8EkBKj1R80HGGkFbtZVkZ3bb2d2r0tUkn1hTh8kBKhB9DMBLnQWfJMjoLFuTZpJsO/ONAB7UUcBLSHqvX781q1YAqg0yfoDkq5psrQYLJeldAF7nKFr1x+wmACq9kAUZLazvvTV4P8kDDlE22kTSQ4uuK9dCF5HuR/I3NYI1A1CBaB+AK50VsAMj7TJeixNl2kYBSccCsB/ZMQ6Brif5GIfdYSZNAVQg8rzsLSphl/Hapby2LDZTUaBcq/56ALb1fOVxLkuinULy4loRmwOoQGQX7T7DWZnPk3y203bXmkl6AIA91isDOBGADV3e1HsJbasA1QYZvUKl3fYKPI2knXFQnZoEqPRCNUHG6oqnwyEFLiJ5Wl89mgWoQFQTZOyrwSb7WUztcSRtu0+v1DRABaKPADijV+3SaZUCNgE5geTNEZnmAFBtkDGix6b4Xld2BNvJcaHUPEClF6oNMoZE2eXOtm3q1ZFha1mfWQBUINoL4Kqurbm7vPEj1bOAqx3udW0kk62+swGoQHQ2gPOGFGAD8roJgF0t+qkx6jorgApElwE4aQwxZp6n3YNxsPyzA7yst/4iSdvEMFqaHUCjKZEZ91IgAeolWzotFEiAkoWQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnT+H0jPT81J3xWWAAAAAElFTkSuQmCC',\n check:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAOCAYAAAAi2ky3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACtSURBVHgBvdPdDcIgEAfwoy8Nb45QN3AGF2s36Ahu4gpuIDoBfSgfpdoTlCbEWEMh6T8hFzjyg5AAkBHOcQe5UWqspRx435sDpMYj6IYQwwVSEiJ2MKVUBWuzLSLl2HL+uxmNCGFO8yaL7RHxve6qRZoAuS4hxac8735elWVx7jrtMKL1o0Gcat9jhExHSukN/kUIFZ7MpDRtzE1isDRkAUtDvrA8ZI597FUf8gWH9P0b4gko9wAAAABJRU5ErkJggg=='\n },\n color: {\n white: ['#ffffff', 1],\n black: ['#000000', 1],\n grey: ['#929096', 1],\n red: ['#e74c3c', 1],\n orange: ['#dc7633', 1],\n yellow: ['#f7dc6f', 1],\n green: ['#2Ecc71', 1],\n blue: ['#93a9fd', 1],\n purple: ['#663399', 1],\n palette: {\n 'grey-05': ['#f8f7fa', 1],\n 'grey-40': ['#929096', 1],\n 'grey-70': ['#48474b', 1],\n 'grey-90': ['#181819', 1],\n 'blue-20': ['#becffe', 1],\n 'blue-40': ['#93a9fd', 1],\n 'blue-90': ['#000033', 1]\n },\n material: ['#181819', 1],\n materialBrand: ['#000033', 1],\n overlay: ['#181819', 0.7],\n textNeutral: ['#f8f7fa', 1],\n textNeutralSecondary: ['#f8f7fa', 0.7],\n textNeutralTertiary: ['#f8f7fa', 0.1],\n textNeutralDisabled: ['#f8f7fa', 0.5],\n textInverse: ['#181819', 1],\n textInverseSecondary: ['#181819', 0.7],\n textInverseTertiary: ['#181819', 0.1],\n textInverseDisabled: ['#181819', 0.5],\n textBrand: ['#93a9fd', 1],\n textBrandSecondary: ['#93a9fd', 0.7],\n textBrandTertiary: ['#93a9fd', 0.1],\n textBrandDisabled: ['#93a9fd', 0.5],\n textPositive: ['#2Ecc71', 1],\n textNegative: ['#e74c3c', 1],\n textInfo: ['#93a9fd', 1],\n textCaution: ['#dc7633', 1],\n fillTransparent: ['#ffffff', 0],\n fillNeutral: ['#f8f7fa', 1],\n fillNeutralSecondary: ['#f8f7fa', 0.7],\n fillNeutralTertiary: ['#f8f7fa', 0.1],\n fillNeutralDisabled: ['#f8f7fa', 0.5],\n fillInverse: ['#181819', 1],\n fillInverseSecondary: ['#181819', 0.7],\n fillInverseTertiary: ['#181819', 0.1],\n fillInverseDisabled: ['#181819', 0.5],\n fillBrand: ['#93a9fd', 1],\n fillBrandSecondary: ['#93a9fd', 0.7],\n fillBrandTertiary: ['#93a9fd', 0.1],\n fillBrandDisabled: ['#93a9fd', 0.5],\n fillPositive: ['#2Ecc71', 1],\n fillNegative: ['#e74c3c', 1],\n fillInfo: ['#93a9fd', 1],\n fillCaution: ['#dc7633', 1],\n strokeNeutral: ['#f8f7fa', 1],\n strokeNeutralSecondary: ['#f8f7fa', 0.7],\n strokeNeutralTertiary: ['#f8f7fa', 0.1],\n strokeNeutralDisabled: ['#f8f7fa', 0.5],\n strokeInverse: ['#181819', 1],\n strokeInverseSecondary: ['#181819', 0.7],\n strokeInverseTertiary: ['#181819', 0.1],\n strokeInverseDisabled: ['#181819', 0.5],\n strokeBrand: ['#93a9fd', 1],\n strokeBrandSecondary: ['#93a9fd', 0.7],\n strokeBrandTertiary: ['#93a9fd', 0.1],\n strokeBrandDisabled: ['#93a9fd', 0.5],\n strokePositive: ['#2Ecc71', 1],\n strokeNegative: ['#e74c3c', 1],\n strokeInfo: ['#93a9fd', 1],\n strokeCaution: ['#dc7633', 1],\n interactiveNeutral: ['#ffffff', 0.1],\n interactiveNeutralFocus: ['#ffffff', 1],\n interactiveNeutralFocusSoft: ['#ffffff', 0.1],\n interactiveInverse: ['#48474b', undefined],\n interactiveInverseFocus: ['#48474b', 1],\n interactiveInverseFocusSoft: ['#48474b', 0.1],\n interactiveBrand: ['#becffe', 0.1],\n interactiveBrandFocus: ['#becffe', 1],\n interactiveBrandFocusSoft: ['#becffe', 0.1],\n shadowNeutral: ['#000000', 0.7],\n shadowNeutralFocus: ['#000000', 0.7],\n shadowNeutralFocusSoft: ['#000000', 0.7],\n shadowNeutralText: ['#000000', 1],\n shadowInverse: ['#000000', 0.7],\n shadowInverseFocus: ['#000000', 0.7],\n shadowInverseFocusSoft: ['#000000', 0.7],\n shadowInverseText: ['#000000', 1],\n shadowBrand: ['#000000', 0.7],\n shadowBrandFocus: ['#000000', 0.7],\n shadowBrandFocusSoft: ['#000000', 0.7],\n shadowBrandText: ['#000000', 1]\n },\n componentConfig: {\n Keyboard: {\n style: {\n keyProps: {\n delete: {\n title: null,\n icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAAAXNSR0IArs4c6QAACmpJREFUeF7tnVmoZUcVhv/feY4gBEVEH/KgCCZxCK2itNo4xQQH+kUN0TjEiDGKKBqnaExwBjUaR6KY+NQgiQkOMSYhYEScIopGJOqDE2hHjfP0y4p1Oqdv33v2qr32Prv2Paug6Ye7Vu2qv75TtWvtGohMqUBAAQZ80zUVQAKUEIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypXMClAyEFEiAQvKlcwKUDIQUSIBC8qVzApQMhBRIgELypfPsAJJ0NYC92XRHKPB3AAfLv18BuBLAFSR/NKZWswJI0vkA3jCmILsw75sAvIfkR8eo22wAknQSgMvGEGFD8vwxgFeQvGrI+s4CIEnHAPgugHsMWfkNzevDAM4i+Z8h6t88QJLuXOB5yBAVzjxuVeBaAM8ieXNUjzkAdAmA50Yrmv5HKPATACeQ/GNEm6YBkvRyANblZhpHAXsfekpkOGsWIEmPAHA9gDuOo13mWhS4gOSZfdVoEiBJ9wFwA4D7961Y+lUpsK/v7KxVgL4K4ElOCS4l+Uyn7a41k3Q0gMcC2ANgH4CHV1T2OyStx69OzQEk6TwAZztr8lMAx5P8s9N+Y8wk2cTjfQDu66z080h+zml7yKwpgCSdCOByZyX+BuBRJH/otN84M0kWN/s0gOc4Kv8Nko922B1m0gxAkh4I4AcVwcL9JA/UVnjT7CXdHYD9yEzfVUkAjib5uxqNmgCoBAu/CeBhzsJ/kORZTtuNN5Nk70bXAZ0Hy59G8qIawVoB6LMAnu8suE3tH0/y3077NAMg6esAuoaoC0la7M2dJgdI0ssAXOgs8W8BHEvS/s9UoYCkdwN4bYfL5STto7U7TQpQZbDQehzreawHylSpgKSTAVza4XYDyeNqsp4MoB7BwteQfH9N5dL2NgWK3l0vyAdJWhDXnSYBSNLtANh3GO/KwgMk97trlYbbKiDJPpzea5U8JKuYqDIeql0kvQPAG5352ZLMR5L8q9M+zXZQYFcAJOnJAL7sbGWLMFuk2SLOmYIKzB6gEiz8HoB7O7U4meQXnLZp1qGApD8BuOcsh7AewcL3kuyadg4OjSSbhRxH0j4BjJok2Ufga0j+YdQHlcznDlBNsPAa+xpP8r/rEHbxjAKPbRuyHvKFY0Ik6QUALOprPfIT1gHRbAGSdDoA77aSX5Zg4e8nhGfx6FEgWoJn8Zy1QCTplq5vjc3NwnoEC/eQ/HYD8IwC0TbwrA2i2QHUI1h4JskLGoJnUIhWwLMWiGYFkCSLMX2t5WDhlneeLm5Dw5kDntEhkmRhEVvesWNqZgiTdC6AN3W1Svn72oOFkuxF+WcVIQUrai+IKuA5BBHJ453auc1mA1AJFn7Jsf7EKj9ZsLBHw1ZDtI5neAmaBUBzCxaO2cBj5u2FZtlO0l8A3K3ZIaxHsPB8kt5vYn00c/mM0dBj5OmqzAqjOQDUfLBwJ32HbPAh84pCM5seSNJLAHzcWeFJgoVdZRui4YfIo6ucff8uyVY03LW5IawyWPgvW5u77mChV/QIABFfb/kidk0CVKbDth3Huw35dJLeniqiV2/fniDYx1f7vlWTeoUFah6wZQhrqwcqwUKbrtsaH0+6mOQpHsOpbXpCVFPstcJjBZNkmzHv0swQJultAN7iVO375TyafzjtJzcbEaK1w9McQJXBQlvvYmtsfjE5FZUFGAGiSeBpCqDKYKFtmX0qya9Utl0z5gNCNBk8BSA7CtiODNwxjf4trEew8BySNtTNOg0A0aTwtARQTbDQeh3rfawXmn0KQDQ5PC0B9EkAL3LSkAD9X6hWALIJzJ3mNoSdS9I7U3NyuX6zQO+zKOzkEEmaHqDSFdpZM97tOfkSfRvvk0LUDEAFIgseetf85DS+AYgk/bPr1NvRZ2HLg4ektwI4xzmgZCBxYohaBMjWPeenDOcvaIvZ2oez5gAqQ5mtLbb3oa4z+Bb6nTHW1UP92vFIr54vzJ8BcGplGdYKkSRbCXGHSWdh2z1ckp1taGccroxyFt9cznG4iGuDqFmASk9kZxxakNGTckHZBBA1DVCB6BMAXuwhyA4VmGL/+05l6zlsbdt7DJmXU0uXmSQ7JvD2zQ1hiwJJsotRvlVxXO87SU5+heUYDT5Gni5KVhg1D1DphWqCjOYy6RlAYzb0mHn3gWkWABWIaoKMubHwSBpGebGWZNdc2vmUO6a1BhJXFUSSff/yLuOYamvzzwEcVfFr7tWwPXqi6uN2PXWYG0C1Qca1n8RaDlewl3kPRL3gWXo/XBwo1dXWdk/a3jEOnJoVQGUoqw0yvpLkh7oUHvLvTohC8FRANBo8pT3sxLeVJ/M2M4QtiVYTZJzkNPoOiAaBxwHRqPDMFqBS8Jog4yT3YewA0aDwrIBodHhmDVApvG0mtO3PnjTJjTxbIBoFnm0gWgs8pQ06lxY3N4QtCWZBRgPDezdnHvPr+alV2EiaL0DlF2Dbn20bdB40XtHwQ5nOHqAC0SyCjEM1Wkv57AqACkRvBvB2p7hrDzI6yzU7s90EUPNBxtnR4SjwrgGo9EK1Qca8cM4ByU4mkuz++F93ZHELyZX3iW31n+S+sKWZWfNBxkCbNeUq6ekArugo1I0kH1xT8EkBKj1R80HGGkFbtZVkZ3bb2d2r0tUkn1hTh8kBKhB9DMBLnQWfJMjoLFuTZpJsO/ONAB7UUcBLSHqvX781q1YAqg0yfoDkq5psrQYLJeldAF7nKFr1x+wmACq9kAUZLazvvTV4P8kDDlE22kTSQ4uuK9dCF5HuR/I3NYI1A1CBaB+AK50VsAMj7TJeixNl2kYBSccCsB/ZMQ6Brif5GIfdYSZNAVQg8rzsLSphl/Hapby2LDZTUaBcq/56ALb1fOVxLkuinULy4loRmwOoQGQX7T7DWZnPk3y203bXmkl6AIA91isDOBGADV3e1HsJbasA1QYZvUKl3fYKPI2knXFQnZoEqPRCNUHG6oqnwyEFLiJ5Wl89mgWoQFQTZOyrwSb7WUztcSRtu0+v1DRABaKPADijV+3SaZUCNgE5geTNEZnmAFBtkDGix6b4Xld2BNvJcaHUPEClF6oNMoZE2eXOtm3q1ZFha1mfWQBUINoL4Kqurbm7vPEj1bOAqx3udW0kk62+swGoQHQ2gPOGFGAD8roJgF0t+qkx6jorgApElwE4aQwxZp6n3YNxsPyzA7yst/4iSdvEMFqaHUCjKZEZ91IgAeolWzotFEiAkoWQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnROgJKBkAIJUEi+dE6AkoGQAglQSL50ToCSgZACCVBIvnT+H0jPT81J3xWWAAAAAElFTkSuQmCC'\n }\n }\n }\n }\n },\n font: [],\n layout: {\n columnCount: 10,\n focusScale: 1.2,\n gutterX: 20,\n gutterY: 20,\n marginX: 150,\n marginY: 150,\n safe: 50,\n screenW: 1920,\n screenH: 1080\n },\n radius: { none: 0, xs: 2, sm: 4, md: 8, lg: 16, xl: 24 },\n spacer: {\n none: 0,\n xxs: 2,\n xs: 4,\n sm: 8,\n md: 10,\n lg: 20,\n xl: 30,\n xxl: 40,\n xxxl: 50\n },\n stroke: { none: 0, sm: 2, md: 4, lg: 6, xl: 8 },\n typography: {\n display1: {\n fontFamily: 'Arial',\n fontSize: 75,\n lineHeight: 85,\n fontStyle: '500',\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n display2: {\n fontFamily: 'Arial',\n fontSize: 50,\n lineHeight: 60,\n fontStyle: '500',\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n headline1: {\n fontFamily: 'Arial',\n fontSize: 35,\n fontStyle: '500',\n lineHeight: 48,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n headline2: {\n fontFamily: 'Arial',\n fontSize: 30,\n fontStyle: '500',\n lineHeight: 40,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n headline3: {\n fontFamily: 'Arial',\n fontSize: 25,\n fontStyle: '500',\n lineHeight: 36,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n body1: {\n fontFamily: 'Arial',\n fontSize: 25,\n fontStyle: '300',\n lineHeight: 40,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n body2: {\n fontFamily: 'Arial',\n fontSize: 22,\n fontStyle: '300',\n lineHeight: 32,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n body3: {\n fontFamily: 'Arial',\n fontSize: 20,\n fontStyle: '300',\n lineHeight: 32,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n button1: {\n fontFamily: 'Arial',\n fontSize: 25,\n fontStyle: '500',\n lineHeight: 32,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n button2: {\n fontFamily: 'Arial',\n fontSize: 20,\n fontStyle: '500',\n lineHeight: 32,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n callout1: {\n fontFamily: 'Arial',\n fontSize: 20,\n fontStyle: '500',\n lineHeight: 32,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n caption1: {\n fontFamily: 'Arial',\n fontSize: 15,\n fontStyle: '500',\n lineHeight: 24,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n tag1: {\n fontFamily: 'Arial',\n fontSize: 20,\n fontStyle: '500',\n lineHeight: 24,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n },\n footnote1: {\n fontFamily: 'Arial',\n fontSize: 22,\n fontStyle: '300',\n lineHeight: 30,\n verticalAlign: 'middle',\n textBaseline: 'bottom'\n }\n }\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport logger from './logger';\n\nlet customFontFaces = [];\n\n/**\n * Function to get a list of all custom fonts that have been loaded using the FontFace Web API from the theme\n * @return {Array}\n */\nexport function getCustomFontFaces() {\n return customFontFaces;\n}\n\n/**\n * Function to load all the fonts from the theme\n */\nexport const fontLoader = fonts => {\n const promises = [];\n // Loop through all fonts in the array and attempt to load them using the FontFace Web API\n for (let i = 0; i < fonts.length; i++) {\n const { family, src, descriptors } = fonts[i];\n // If url(s) are specified format them according to the spec https://developer.mozilla.org/en-US/docs/Web/API/FontFace\n const fontSrc =\n src && Array.isArray(src) && src.length\n ? // loop through each string and format it in a way that's readable for the FontFace API\n src\n .map(url => {\n // if the url is a local font then the src is just the string provided in the array\n // otherwise, format the url string like url(<urlString>)\n return url.substr(0, 5) === 'local' ? url : `url(${url})`; // Local system fonts are supported by passing a string starting with local. ex local(Impact)\n })\n .join(',')\n : 'url(' + src + ')';\n const fontFace = new FontFace(family, fontSrc, descriptors || {});\n logger.info('Loading font', family);\n document.fonts.add(fontFace);\n // Push all pending promises into an array, theme manager will wait on everything to resolve before triggering another update cycle\n promises.push(\n new Promise(resolve => {\n fontFace\n .load()\n .then(() => {\n customFontFaces.push(fontFace);\n resolve(family);\n })\n .catch(err => {\n resolve(new Error(`${family}: ${err.message}`)); // Even if a font fails to load resolve it with an error so the theme doesn't fail to update all other values\n });\n })\n );\n }\n return Promise.all(promises).then(fontsLoaded => {\n // After the promise has resolved log the appropriate success and error messages\n const loaded = fontsLoaded\n .filter(font => !(font instanceof Error))\n .join(', ');\n\n if (loaded) {\n logger.log(`Fonts loaded: ${loaded}`);\n }\n\n const failed = fontsLoaded\n .filter(font => font instanceof Error)\n .map(item => item.message)\n .join(', ');\n\n if (failed) {\n logger.error(`Unable to load fonts: ${failed}`);\n }\n });\n};\n\n/**\n * Async function to remove all the fonts loaded by the theme. Useful if a theme is switched at runtime\n */\nexport const cleanupFonts = async fonts => {\n if (document.fonts && 'delete' in document.fonts) {\n if (!customFontFaces.length) return;\n customFontFaces = customFontFaces.filter(fontFace => {\n if (!fonts.find(font => font.family === fontFace.family)) {\n logger.info('Removing font', fontFace.family);\n document.fonts.delete(fontFace);\n return false;\n } else {\n return fontFace;\n }\n });\n } else {\n logger.info('Unable to remove manually-added fonts');\n }\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const THEME_KEY_REPLACER = {\n fontFamily: 'fontFace'\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n clone,\n getValFromObjPath,\n getHexColor,\n getValidColor\n} from '../../utils/index';\nimport baseTheme from '@lightningjs/ui-components-theme-base';\nimport logger from './logger';\nimport events from './events';\nimport { fontLoader, cleanupFonts } from './fonts';\nimport { THEME_KEY_REPLACER } from './constants';\n\nconst merge = {\n all: objArray => {\n let result = {};\n for (let i = 0; i < objArray.length; i++) {\n result = clone(result, objArray[i]);\n }\n return result;\n }\n};\n\nconst base64Cache = [];\n\nconst isSubTheme = themeName => 'subTheme' === themeName.slice(0, 8);\n\n/**\n * Extracts the MIME type from a Data URI.\n *\n * @param {string} dataUri - The Data URI string.\n * @returns {string|null} The extracted MIME type, or null if not found.\n */\nfunction getMimeTypeFromDataUri(dataUri) {\n const matches = dataUri.match(/^data:(.*?);base64,/);\n if (matches && matches.length === 2) {\n return matches[1];\n }\n return null;\n}\n\n/**\n * Checks if a string represents a Base64-encoded image and extracts the MIME type.\n *\n * @param {string} str - The string to check.\n * @returns {{ isImage: boolean, mimeType: string|null }} An object indicating whether the string is an image and the extracted MIME type.\n */\nfunction checkBase64EncodedImage(str) {\n const regex = /^data:image\\/(jpeg|jpg|png|gif);base64,/;\n const isImage = regex.test(str);\n const mimeType = isImage ? getMimeTypeFromDataUri(str.match(regex)[0]) : null;\n\n return {\n isImage,\n mimeType\n };\n}\n\n/**\n * Converts a Base64-encoded image to a Blob URL.\n * Note: Make sure to handle potential memory leaks caused by the browser's image caching.\n *\n * @param {string} base64String - The Base64-encoded image string.\n * @param {string} mimeType - The MIME type of the image.\n * @returns {string|null} The Blob URL representing the converted image, or null if conversion fails.\n */\nfunction base64ToBlobURL(base64String, mimeType) {\n const byteCharacters = atob(\n base64String.substring(base64String.indexOf(',') + 1)\n );\n const byteArrays = [];\n\n try {\n for (let offset = 0; offset < byteCharacters.length; offset += 512) {\n const slice = byteCharacters.slice(offset, offset + 512);\n const byteNumbers = new Array(slice.length);\n\n for (let i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n\n const byteArray = new Uint8Array(byteNumbers);\n byteArrays.push(byteArray);\n }\n\n const blob = new Blob(byteArrays, { type: mimeType });\n const blobURL = URL.createObjectURL(blob);\n\n return blobURL;\n } catch (error) {\n logger.info('Unable to convert base64 image to URL');\n return null;\n }\n}\n\nclass ThemeManager {\n constructor() {\n this._cache = new Map();\n if (typeof window === 'undefined') return;\n if (!window.LUI) {\n window.LUI = {};\n }\n if (!window.LUI.themeManagerInstances) {\n window.LUI.themeManagerInstances = [{ themeManager: this, events }];\n } else {\n window.LUI.themeManagerInstances.push({ themeManager: this, events });\n }\n }\n\n // Handle separate instances of context across the application and keep them in sync\n _setCache(key, payload) {\n if (typeof window === 'undefined') return;\n window.LUI.themeManagerInstances.forEach(({ themeManager }) => {\n if (themeManager) themeManager._cache.set(key, payload);\n });\n }\n\n _deleteCache(key) {\n if (typeof window === 'undefined') return;\n window.LUI.themeManagerInstances.forEach(({ themeManager }) => {\n if (themeManager) themeManager._cache.delete(key);\n });\n }\n\n _emit(key, payload) {\n if (typeof window === 'undefined') return;\n window.LUI.themeManagerInstances.forEach(({ events }) => {\n events.emit(key, payload);\n });\n }\n\n getTheme() {\n if (this._cache.has('theme')) {\n return this._cache.get('theme');\n }\n\n const theme = this._processTheme.call(this);\n this._setCache('theme', theme);\n return theme;\n }\n\n async setTheme(themeConfig) {\n let value;\n if (Array.isArray(themeConfig)) {\n value = merge.all(themeConfig);\n } else {\n value = themeConfig;\n }\n\n if ('object' !== typeof value || null === value) {\n logger.warn(`context theme expected an object. Received ${typeof value}`);\n return;\n }\n\n this._clearCache();\n const theme = this._processTheme.call(this, [value], value.extensions);\n this._setCache('theme', theme);\n await cleanupFonts(theme.font);\n if (theme.font && theme.font.length) {\n await this._loadFonts(theme.font);\n }\n this._refreshSubThemes();\n this._emit('themeExtensionsUpdate');\n this._emit('themeUpdate'); // Notify components that an update cycle is required\n return theme;\n }\n\n getSubTheme(subThemeName) {\n if (this._cache.has(`subTheme${subThemeName}`)) {\n return this._cache.get(`subTheme${subThemeName}`).result;\n }\n return;\n }\n\n async setSubTheme(subThemeName, value, triggerUpdate = true) {\n if (!subThemeName) {\n logger.warn('Sub theme name not specified');\n return;\n }\n if ('string' !== typeof subThemeName) {\n logger.warn(\n `Sub theme name must be a string. Received an ${typeof subThemeName}`\n );\n return;\n }\n if ('object' !== typeof value || !Object.keys(value).length) {\n logger.warn(\n `Could not set subTheme ${subThemeName}, value should be an object with properties. Received an ${typeof value}`\n );\n return;\n }\n const globalTheme = this.getTheme();\n const subTheme = this._processTheme.call(this, [globalTheme, value]);\n if (subTheme.font && subTheme.font.length) {\n await this._loadFonts(subTheme.font);\n }\n this._setCache(`subTheme${subThemeName}`, {\n original: value,\n result: subTheme\n });\n\n if (triggerUpdate) this._emit(`themeUpdate${subThemeName}`);\n return subTheme;\n }\n\n _refreshSubThemes() {\n // Triggered when global theme is updated\n [...this._cache.keys()].forEach(key => {\n if ('string' === typeof key && isSubTheme(key)) {\n const cache = this._cache.get(key);\n if (cache.original)\n this.updateSubTheme(key.replace(/^subTheme/, ''), cache.original);\n }\n });\n }\n\n async _loadFonts(fontArray) {\n try {\n await fontLoader(fontArray);\n } catch (err) {\n logger.error(`Unable to load font: ${err}`);\n }\n }\n\n /**\n * Merge values with current theme\n */\n async updateTheme(themeConfig) {\n let value;\n if (Array.isArray(themeConfig)) {\n value = merge.all(themeConfig);\n } else {\n value = themeConfig;\n }\n\n let currentTheme = {};\n\n if (this._cache.has('theme')) {\n currentTheme = this._cache.get('theme');\n }\n this._clearCache();\n const theme = this._processTheme.call(\n this,\n [currentTheme, value],\n value.extensions || currentTheme.extensions\n );\n this._setCache('theme', theme);\n if (theme.font && theme.font.length) {\n await this._loadFonts(theme.font);\n }\n this._refreshSubThemes();\n if (value.extensions) this._emit('themeExtensionsUpdate');\n this._emit('themeUpdate'); // Notify components that an update cycle is required\n return theme;\n }\n\n _clearCache() {\n // Clean up any base64 image that were converted to blobs using createObjectURL\n base64Cache.filter(image => {\n if (window.URL && typeof window.URL.revokeObjectURL === 'function')\n URL.revokeObjectURL(image);\n return false;\n });\n\n this._cache.forEach((value, key) => {\n if ('string' !== typeof key || !isSubTheme(key)) {\n this._deleteCache(key);\n }\n });\n // Regenerate sub themes\n this._cache.forEach((value, key) => {\n if ('string' === typeof key && isSubTheme(key)) {\n this.setSubTheme(key.replace('subTheme', ''), value.original, false); // Dont trigger the update...the parent theme will trigger\n }\n });\n }\n\n async updateSubTheme(subThemeName, value, triggerUpdate = true) {\n if (!subThemeName) {\n logger.warn('Sub theme name not specified');\n return;\n }\n if ('object' !== typeof value || !Object.keys(value).length) {\n logger.warn(\n `Could not update subTheme ${subThemeName} due to invalid value`\n );\n return;\n }\n\n const globalTheme = this.getTheme();\n let currentTheme = {};\n\n if (this._cache.has(`subTheme${subThemeName}`)) {\n currentTheme = this._cache.get(`subTheme${subThemeName}`).original;\n }\n\n const subTheme = this._processTheme.call(this, [\n globalTheme,\n currentTheme,\n value\n ]);\n\n if (subTheme.font && subTheme.font.length) {\n await this._loadFonts(subTheme.font);\n }\n\n this._setCache(`subTheme${subThemeName}`, {\n original: clone(currentTheme, value),\n result: subTheme\n });\n\n if (triggerUpdate) this._emit(`themeUpdate${subThemeName}`);\n\n return subTheme;\n }\n\n removeSubTheme(subThemeName) {\n if (this._cache.has(`subTheme${subThemeName}`)) {\n this._deleteCache(`subTheme${subThemeName}`);\n }\n this._emit(`themeUpdate${subThemeName}`);\n }\n\n _getComponentUUID(id) {\n return `componentStyle${id}`;\n }\n\n _processTheme(themeArray = [], extensions) {\n if (!Array.isArray(themeArray)) {\n throw new Error(\n `context processTheme expected an array. Received ${typeof themeArray}`\n );\n }\n\n const theme = merge.all([baseTheme, ...themeArray]);\n\n // Parse all colors in theme\n const themeFunctions = {};\n const themeString = JSON.stringify(theme, (key, originalValue) => {\n let value = originalValue;\n // Replacer\n if (value && typeof value === 'object') {\n const replacement = originalValue;\n for (var k in value) {\n if (Object.hasOwnProperty.call(value, k) && THEME_KEY_REPLACER[k]) {\n replacement[k && THEME_KEY_REPLACER[k]] = value[k];\n delete replacement[k]; // Removes the original key that was replaced. example: fontFamily is replaced by fontFace so fontFamily is removed from the theme\n }\n }\n\n value = replacement;\n }\n // Base64 encoded values can cause memory leaks convert to an image\n const { isImage, mimeType } = checkBase64EncodedImage(value);\n if (\n window.URL &&\n typeof window.URL.createObjectURL === 'function' &&\n isImage\n ) {\n // base64Cache\n try {\n const blobURL = base64ToBlobURL(value, mimeType);\n base64Cache.push(blobURL);\n return blobURL;\n } catch (error) {\n return value;\n }\n }\n\n if (\n Array.isArray(value) &&\n 2 === value.length &&\n !value[0].targetComponent &&\n value[0].length &&\n typeof value[0] === 'string' &&\n value[0].substr(0, 1) === '#' &&\n typeof value[1] === 'number'\n ) {\n // Better check to filter out extensions?\n return getHexColor(value[0], value[1]);\n } else if (\n 'extensions' === key ||\n 'function' === typeof value ||\n ('object' === typeof value &&\n value !== null &&\n 'Object' !== value.constructor.name &&\n !Array.isArray(value))\n ) {\n // Functions will not stringify, they will be merged after\n themeFunctions[key] = value;\n return;\n } else if ('string' === typeof value && value.includes('theme.')) {\n const themeValue = getValFromObjPath({ theme }, value);\n if (themeValue) {\n return themeValue;\n } else {\n return value;\n }\n } else {\n const validColor = getValidColor(value);\n if (validColor) {\n return validColor;\n }\n return value;\n }\n });\n\n return { ...JSON.parse(themeString), ...themeFunctions, extensions };\n }\n}\n\nconst themeManagerInstance = new ThemeManager();\n\nexport { themeManagerInstance as default, ThemeManager };\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { capitalizeFirstLetter } from '../../utils';\nimport logger from './logger';\nimport metrics from './metrics';\nimport events from './events';\nimport themeManager from './theme-manager';\n\n/**\n * Class to create a context object. Context is a singleton that will hold settings and logic to be used across all Lightning UI components.\n */\n\n/**\n * @typedef ThemeObject\n * @type {any}\n */\nclass Context {\n /**\n * @type {ThemeObject}\n */\n get theme() {\n return themeManager.getTheme();\n }\n /**\n * theme cannot be set directly\n */\n set theme(value) {\n logger.warn(\n 'Context.theme must be set using context.setTheme or context.updateTheme'\n );\n }\n /**\n * @type {object}\n */\n get keyMetricsCallback() {\n return metrics.keyMetricsCallback;\n }\n /**\n * keyMetricsCallback cannot be set directly\n */\n set keyMetricsCallback(value) {\n logger.warn(\n 'Context.keyMetricsCallback must be set using context.setKeyMetricsCallback'\n );\n }\n /**\n * @type {boolean}\n */\n get debug() {\n return logger.debug;\n }\n\n set debug(value) {\n logger.debug = value;\n }\n /**\n * @type {function}\n * @param {string} name\n * @param {function} callback\n */\n on() {\n return events.on(...arguments);\n }\n /**\n * @type {function}\n */\n off() {\n return events.off(...arguments);\n }\n /**\n * @type {function}\n * @param {string} name\n * @param {string|object|number|boolean} payload\n */\n emit() {\n return events.emit(...arguments);\n }\n /**\n * @property {function}\n * @return {void}\n */\n log(...args) {\n logger.log(...args);\n }\n /**\n * @property {function}\n * @return {void}\n */\n info(...args) {\n logger.info(...args);\n }\n /**\n * @property {function}\n * @return {void}\n */\n warn(...args) {\n logger.warn(...args);\n }\n /**\n * @property {function}\n * @return {void}\n */\n error(...args) {\n logger.error(args);\n }\n /**\n * @property {object|array}\n * @return {object}\n */\n setTheme(value) {\n return themeManager.setTheme(value);\n }\n /**\n * @property {object|array}}\n * @return {object}\n */\n updateTheme(value) {\n return themeManager.updateTheme(value);\n }\n /**\n * @property {string}\n * @return {object}\n */\n getSubTheme(subThemeName) {\n return themeManager.getSubTheme(subThemeName);\n }\n /**\n * Expects an object where properties are child theme names. Values will be merged with the global themeManager.\n * @property {object}\n */\n setSubThemes(subThemesObj) {\n if ('object' !== typeof subThemesObj) {\n logger.warn('subThemes must be an object');\n return;\n }\n for (const subTheme in subThemesObj) {\n themeManager.setSubTheme(subTheme, subThemesObj[subTheme]);\n }\n }\n /**\n * @property {string}\n * @return {object}\n */\n setSubTheme(subThemeName, value) {\n return themeManager.setSubTheme(subThemeName, value);\n }\n /**\n * @property {string}\n * @return {object}\n */\n updateSubTheme(subThemeName, value) {\n return themeManager.updateSubTheme(subThemeName, value);\n }\n /**\n * @property {string}\n * @return {void}\n */\n removeSubTheme(subThemeName) {\n themeManager.removeSubTheme(subThemeName);\n }\n /**\n * @property {function}\n * @return {void}\n */\n setLogCallback(value) {\n logger.logCallback = value;\n }\n /**\n * @property {function}\n * @return {void}\n */\n setKeyMetricsCallback(value) {\n metrics.keyMetricsCallback = value;\n }\n /**\n * @property {function}\n * @return {object}\n */\n config(config = {}) {\n const configKeys = Object.keys(config);\n for (let i = 0; i < configKeys.length; i++) {\n const setMethod = this['set' + capitalizeFirstLetter(configKeys[i])];\n if (setMethod) {\n setMethod(config[configKeys[i]]);\n }\n }\n return this;\n }\n}\n\nconst contextInstance = new Context();\n\nexport { contextInstance as default, Context };\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nclass Logger {\n constructor() {\n this._logCallback = undefined;\n this._prefix = 'LightningUI';\n this._debug = false;\n }\n\n get debug() {\n return this._debug;\n }\n\n set debug(value) {\n this._debug = Boolean(value);\n }\n\n get logCallback() {\n return this._logCallback;\n }\n\n set logCallback(value) {\n if ('function' !== typeof value) {\n this.warn(\n `logCallback value must be a function, instead received ${typeof value}`\n );\n return;\n }\n this._logCallback = value;\n }\n\n log(...args) {\n if (this._logCallback) {\n this._logCallback({ level: 'log', payload: args });\n }\n if (this.debug) {\n // eslint-disable-next-line\n console.log(this._prefix, ...args);\n }\n }\n\n info(...args) {\n if (this._logCallback) {\n this._logCallback({ level: 'info', payload: args });\n }\n if (this.debug) {\n // eslint-disable-next-line\n console.info(this._prefix, ...args);\n }\n }\n\n warn(...args) {\n if (this._logCallback) {\n this._logCallback({ level: 'warn', payload: args });\n }\n if (this.debug) {\n console.warn(this._prefix, ...args);\n }\n }\n\n error(...args) {\n if (this._logCallback) {\n this._logCallback({ level: 'error', payload: args });\n }\n if (this.debug) {\n console.error(this._prefix, ...args);\n }\n }\n}\n\nconst loggerInstance = new Logger();\n\nexport { loggerInstance as default, Logger };\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport context from '../context';\n\nclass GlobalUpdateManager {\n constructor() {\n this._updateThemeSet = new Set();\n this._requestUpdateSet = new Set();\n this._timeout = null;\n this._runUpdatesTimeoutHandler = this._runUpdatesTimeoutHandler.bind(this);\n }\n\n _runUpdatesTimeoutHandler() {\n this._timeout = null;\n this._updateThemeSet.forEach(component => {\n try {\n component._updateThemeComponent();\n } catch (e) {\n context.error('Error updating component themes', e);\n }\n });\n this._updateThemeSet.clear();\n\n this._requestUpdateSet.forEach(component => {\n try {\n component.requestUpdate();\n } catch (e) {\n context.error('Error updating component', e);\n }\n });\n this._requestUpdateSet.clear();\n }\n\n /**\n * Force all updates now\n *\n * @returns\n */\n flush() {\n // If there is no timeout then there is definately nothing to update\n if (!this._timeout) return;\n clearTimeout(this._timeout);\n this._runUpdatesTimeoutHandler();\n }\n\n addUpdateTheme(component) {\n this._updateThemeSet.add(component);\n if (!this._timeout) {\n this._timeout = setTimeout(this._runUpdatesTimeoutHandler, 0);\n }\n }\n\n deleteUpdateTheme(component) {\n // Don't bother checking and clearing the timeout if one is active\n // Not worth the overhead. More than likely it needs to run again anyway.\n this._updateThemeSet.delete(component);\n }\n\n addRequestUpdate(component) {\n this._requestUpdateSet.add(component);\n if (!this._timeout) {\n this._timeout = setTimeout(this._runUpdatesTimeoutHandler, 0);\n }\n }\n\n deleteRequestUpdate(component) {\n // See note in deleteRequestUpdate()\n this._requestUpdateSet.delete(component);\n }\n\n hasQueuedRequestFor(component) {\n return this._requestUpdateSet.has(component);\n }\n}\n\nexport const updateManager = new GlobalUpdateManager();\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/* global SpeechSynthesisErrorEvent */\nfunction flattenStrings(series = []) {\n const flattenedSeries = [];\n\n for (var i = 0; i < series.length; i++) {\n if (typeof series[i] === 'string' && !series[i].includes('PAUSE-')) {\n flattenedSeries.push(series[i]);\n } else {\n break;\n }\n }\n // add a \"word boundary\" to ensure the Announcer doesn't automatically try to\n // interpret strings that look like dates but are not actually dates\n // for example, if \"Rising Sun\" and \"1993\" are meant to be two separate lines,\n // when read together, \"Sun 1993\" is interpretted as \"Sunday 1993\"\n return [flattenedSeries.join(',\\b ')].concat(series.slice(i));\n}\n\nfunction delay(pause) {\n return new Promise(resolve => {\n setTimeout(resolve, pause);\n });\n}\n\n/**\n * Speak a string\n *\n * @param {string} phrase Phrase to speak\n * @param {SpeechSynthesisUtterance[]} utterances An array which the new SpeechSynthesisUtterance instance representing this utterance will be appended\n * @return {Promise<void>} Promise resolved when the utterance has finished speaking, and rejected if there's an error\n */\nfunction speak(phrase, utterances, lang = 'en-US') {\n const synth = window.speechSynthesis;\n return new Promise((resolve, reject) => {\n const utterance = new SpeechSynthesisUtterance(phrase);\n utterance.lang = lang;\n utterance.onend = () => {\n resolve();\n };\n utterance.onerror = e => {\n reject(e);\n };\n utterances.push(utterance);\n synth.speak(utterance);\n });\n}\n\nfunction speakSeries(series, lang, root = true) {\n const synth = window.speechSynthesis;\n const remainingPhrases = flattenStrings(\n Array.isArray(series) ? series : [series]\n );\n const nestedSeriesResults = [];\n /*\n We hold this array of SpeechSynthesisUtterances in order to prevent them from being\n garbage collected prematurely on STB hardware which can cause the 'onend' events of\n utterances to not fire consistently.\n */\n const utterances = [];\n let active = true;\n\n const seriesChain = (async () => {\n try {\n while (active && remainingPhrases.length) {\n const phrase = await Promise.resolve(remainingPhrases.shift());\n if (!active) {\n // Exit\n // Need to check this after the await in case it was cancelled in between\n break;\n } else if (typeof phrase === 'string' && phrase.includes('PAUSE-')) {\n // Pause it\n let pause = phrase.split('PAUSE-')[1] * 1000;\n if (isNaN(pause)) {\n pause = 0;\n }\n await delay(pause);\n } else if (typeof phrase === 'string' && phrase.length) {\n // Speak it\n const totalRetries = 3;\n let retriesLeft = totalRetries;\n while (active && retriesLeft > 0) {\n try {\n await speak(phrase, utterances, lang);\n retriesLeft = 0;\n } catch (e) {\n // eslint-disable-next-line no-undef\n if (e instanceof SpeechSynthesisErrorEvent) {\n if (e.error === 'network') {\n retriesLeft--;\n console.warn(\n `Speech synthesis network error. Retries left: ${retriesLeft}`\n );\n await delay(500 * (totalRetries - retriesLeft));\n } else if (\n e.error === 'canceled' ||\n e.error === 'interrupted'\n ) {\n // Cancel or interrupt error (ignore)\n retriesLeft = 0;\n } else {\n throw new Error(`SpeechSynthesisErrorEvent: ${e.error}`);\n }\n } else {\n throw e;\n }\n }\n }\n } else if (typeof phrase === 'function') {\n const seriesResult = speakSeries(phrase(), lang, false);\n nestedSeriesResults.push(seriesResult);\n await seriesResult.series;\n } else if (Array.isArray(phrase)) {\n // Speak it (recursively)\n const seriesResult = speakSeries(phrase, lang, false);\n nestedSeriesResults.push(seriesResult);\n await seriesResult.series;\n }\n }\n } finally {\n active = false;\n }\n })();\n return {\n series: seriesChain,\n get active() {\n return active;\n },\n append: toSpeak => {\n remainingPhrases.push(toSpeak);\n },\n cancel: () => {\n if (!active) {\n return;\n }\n if (root) {\n synth.cancel();\n }\n nestedSeriesResults.forEach(nestedSeriesResults => {\n nestedSeriesResults.cancel();\n });\n active = false;\n }\n };\n}\n\nlet currentSeries;\nexport default function (toSpeak, lang) {\n currentSeries && currentSeries.cancel();\n currentSeries = speakSeries(toSpeak, lang);\n return currentSeries;\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Don't wrap patterns with word boundaries (\\b) or set any RegExp flags.\n// Each pattern will be wrapped with \\b and use the global (g) flag when created as a capture group in combined pattern.\nconst defaultAbbreviations = [\n { pattern: 'TV-14', replacer: 'Rated TV-14' },\n { pattern: 'CC', replacer: 'Closed Captions available' },\n { pattern: 'HD', replacer: 'High Definition available' },\n { pattern: /ENG(?!\\+)/, replacer: 'English Available' },\n { pattern: /ENG\\+ES/, replacer: 'Available in English and Spanish' },\n { pattern: 'AD', replacer: 'Audio Description available' },\n { pattern: 'RT', replacer: 'Rotten Tomatoes' },\n {\n pattern: /(S)+(\\d+)+(E)+(\\d+)+/,\n replacer: (match, p1, p2, p3, p4) => `Season ${p2} Episode ${p4}`\n }\n];\n\nexport const defaultAbbrevConfig = generateAbbrevConfig(defaultAbbreviations);\n\nfunction wrapWithBoundary(str) {\n return `\\\\b${str}\\\\b`;\n}\n\nfunction getNumberOfCaptureGroups(regExp) {\n return new RegExp(regExp.toString() + '|').exec('').length - 1;\n}\n\n/**\n * @typedef {object} AbbreviationConfig\n * @property {object} abbreviationsPattern - combined RegExp pattern of all abbreviations separated into capture groups\n * @property {object} stringPatternMap - object to look up replacers values based on string matches (uses matched string to look up)\n * @property {object} regExpPatternMap - object to look up replacers values based on RegExp matches (uses index of matched capture group to look up)\n */\n\n/**\n * Generates abbreviation config object to be passed to withAnnouncer for abbreviation translation\n * @param {object[]} abbreviations - array of custom abbreviation objects to generate config off of\n * @param {string|object} abbreviations[].pattern - pattern to match abbreviation\n * @param {string|function} abbreviations[].replacer - string or RegEx replacer function to replace matched abbreviation with\n * @param {boolean} extendDefault - if true, extend the default abbreviations config with custom abbreviations\n * @returns {AbbreviationConfig} - configuration that may be passed to withAnnouncer as abbreviations in options parameter\n */\nexport function generateAbbrevConfig(\n abbreviations = defaultAbbreviations,\n extendDefault\n) {\n const abbrev = extendDefault\n ? [...defaultAbbreviations, ...abbreviations]\n : abbreviations;\n const stringPatternMap = {}; // map of exact strings to the associated replacer\n const regExpPatternMap = {}; // map of RegExp patterns to the associated replacer\n let abbreviationsPattern = ''; // string of final RegExp pattern with each pattern as a capture group\n let patternGroupOffset = 0; // incremented for each capture group found in RegExp patterns passed in\n\n // If the pattern is a RegExp pattern: key RegExp pattern with its index in passed in abbreviations array parameter.\n // The capture group for this pattern will be at this position (idx) in the combined RegExp pattern.\n // When a string is matched, the index of the matched capture group can be used to look up the correct replacer.\n //\n // Else (the pattern is a string): it can be keyed by it's pattern.\n // When a string is matched, the string matcher can be used to look up the correct replacer.\n abbrev.forEach(({ pattern, replacer }, idx) => {\n let stringPattern;\n if (pattern instanceof RegExp) {\n const patternMapIdx = idx + patternGroupOffset;\n regExpPatternMap[patternMapIdx] = { pattern, replacer };\n stringPattern = wrapWithBoundary(pattern.source);\n patternGroupOffset += getNumberOfCaptureGroups(pattern);\n } else {\n stringPatternMap[pattern] = { replacer };\n stringPattern = wrapWithBoundary(pattern);\n }\n\n // create single string for final RegExp - each pattern will be a capture group\n abbreviationsPattern =\n abbreviationsPattern === ''\n ? `(${stringPattern})`\n : `${abbreviationsPattern}|(${stringPattern})`;\n });\n\n abbreviationsPattern = new RegExp(abbreviationsPattern, 'g');\n return { abbreviationsPattern, stringPatternMap, regExpPatternMap };\n}\n\n/**\n * Translates abbreviations in a string into their associated words\n * @param {string} phrase - phrase to be translated\n * @param {object} - abbreviationsPattern, stringPatternMap and regExpPatternMap\n * @returns {string} - phrase where abbreviations have been replaced with words\n */\nexport const translateAbbrev = (phrase, translationConfig) => {\n const { abbreviationsPattern, stringPatternMap, regExpPatternMap } =\n translationConfig;\n\n const translated = phrase.replace(\n abbreviationsPattern,\n (matched, ...args) => {\n // replace exact string match with replacement string\n if (stringPatternMap[matched]) {\n return stringPatternMap[matched].replacer;\n }\n\n // else match was found using a more complex RegExp pattern\n // find replacer by index of matching capture group\n const patternIdx = args.findIndex(arg => !!arg);\n const { pattern, replacer } = regExpPatternMap[patternIdx];\n\n // replace matched string with replacer string\n if (typeof replacer === 'string') {\n return replacer;\n }\n\n // use replace again for replacer function it can utilize substring matches in its scope\n if (typeof replacer === 'function') {\n return matched.replace(pattern, replacer);\n }\n }\n );\n return translated;\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport Speech from './Speech';\nimport { translateAbbrev } from './abbreviations';\nimport { debounce } from '../../utils';\n\nexport { generateAbbrevConfig, defaultAbbrevConfig } from './abbreviations';\n\nconst fiveMinutes = 300 * 1000;\n\nfunction elmName(elm) {\n return elm.ref || elm.constructor.name;\n}\n\nconst defaultOptions = {\n voiceOutDelay: 500,\n abbreviationsConfig: {}\n};\n\nexport default function withAnnouncer(Base, speak = Speech, options = {}) {\n const announcerOptions = { ...defaultOptions, ...options };\n\n return class extends Base {\n _construct() {\n this._announceEndedTimeout;\n this._currentlySpeaking = '';\n super._construct && super._construct();\n }\n\n _voiceOut(toAnnounce) {\n if (this._voiceOutDisabled) {\n return;\n }\n let toSpeak = toAnnounce;\n if (announcerOptions.abbreviationsConfig.abbreviationsPattern) {\n toSpeak = Array.isArray(toAnnounce)\n ? toAnnounce.map(phrase =>\n translateAbbrev(phrase, announcerOptions.abbreviationsConfig)\n )\n : translateAbbrev(toAnnounce, announcerOptions.abbreviationsConfig);\n }\n const speech = speak(toSpeak, options.language);\n // event using speech synthesis api promise\n if (speech && speech.series) {\n speech.series.then(() => {\n this.stage.emit('announceEnded');\n });\n }\n\n // event in case speech synthesis api is flakey,\n // assume the ammount of time it takes to read each word\n const toAnnounceStr = Array.isArray(toSpeak)\n ? toSpeak.concat().join(' ')\n : toSpeak;\n const toAnnounceWords = toAnnounceStr.split(' ');\n const timeoutDelay =\n toAnnounceWords.length * announcerOptions.voiceOutDelay;\n clearTimeout(this._announceEndedTimeout);\n this._announceEndedTimeout = setTimeout(() => {\n this.stage.emit('announceTimeoutEnded');\n }, timeoutDelay);\n\n return speech;\n }\n\n _build() {\n super._build && super._build();\n\n this._debounceAnnounceFocusChanges = debounce(\n this._announceFocusChanges.bind(this),\n Number.isInteger(this.announcerFocusDebounce)\n ? this.announcerFocusDebounce\n : 400\n );\n\n this.announcerTimeout = Number.isInteger(this.announcerTimeout)\n ? this.announcerTimeout\n : fiveMinutes;\n\n this._resetFocusTimer = debounce(() => {\n // Reset focus path for full announce\n this._lastFocusPath = undefined;\n }, this.announcerTimeout);\n }\n\n _firstEnable() {\n super._firstEnable && super._firstEnable();\n\n // Lightning only calls Focus Change on second focus\n this._focusChange();\n }\n\n _disable() {\n clearTimeout(this._announceEndedTimeout);\n this.stage.emit('announceEnded');\n this.stage.emit('announceTimeoutEnded');\n }\n\n set announcerEnabled(val) {\n this._announcerEnabled = val;\n this._focusChange();\n }\n\n get announcerEnabled() {\n return this._announcerEnabled;\n }\n\n _focusChange() {\n if (!this._resetFocusTimer) {\n return;\n }\n\n this._resetFocusTimer();\n this.$announcerCancel();\n this._debounceAnnounceFocusChanges();\n }\n\n _announceFocusChanges() {\n const focusPath = this.application.focusPath || [];\n const lastFocusPath = this._lastFocusPath || [];\n const loaded = focusPath.every(elm => !elm.loading);\n const focusDiff = focusPath.filter(elm => !lastFocusPath.includes(elm));\n\n if (!loaded) {\n this._debounceAnnounceFocusChanges();\n return;\n }\n\n this._lastFocusPath = focusPath.slice(0);\n // Provide hook for focus diff for things like TextBanner\n this.focusDiffHook = focusDiff;\n\n if (!this.announcerEnabled) {\n return;\n }\n\n let toAnnounce = focusDiff.reduce((acc, elm) => {\n if (elm.announce) {\n acc.push([elmName(elm), 'Announce', elm.announce]);\n } else if (elm.title) {\n acc.push([elmName(elm), 'Title', elm.title || '']);\n }\n return acc;\n }, []);\n\n focusDiff.reverse().reduce((acc, elm) => {\n if (elm.announceContext) {\n acc.push([elmName(elm), 'Context', elm.announceContext]);\n } else {\n acc.push([elmName(elm), 'No Context', '']);\n }\n return acc;\n }, toAnnounce);\n\n if (this.debug) {\n console.table(toAnnounce);\n }\n\n toAnnounce = toAnnounce.reduce((acc, a) => {\n const txt = a[2];\n txt && acc.push(txt);\n return acc;\n }, []);\n\n if (toAnnounce.length) {\n this.$announcerCancel();\n this._currentlySpeaking = this._voiceOut(\n toAnnounce.reduce((acc, val) => acc.concat(val), [])\n );\n }\n }\n\n $announce(toAnnounce, { append = false, notification = false } = {}) {\n if (!toAnnounce || !toAnnounce.trim().length) {\n return;\n }\n if (this.announcerEnabled) {\n this._debounceAnnounceFocusChanges.flush();\n if (\n append &&\n this._currentlySpeaking &&\n this._currentlySpeaking.active\n ) {\n this._currentlySpeaking.append(toAnnounce);\n } else {\n this.$announcerCancel();\n this._currentlySpeaking = this._voiceOut(toAnnounce);\n }\n\n if (notification) {\n this._voiceOutDisabled = true;\n this._currentlySpeaking.series.finally(() => {\n this._voiceOutDisabled = false;\n this.$announcerRefresh();\n });\n }\n }\n }\n\n $announcerCancel() {\n this._currentlySpeaking && this._currentlySpeaking.cancel();\n }\n\n $announcerRefresh(depth) {\n if (depth) {\n this._lastFocusPath = this._lastFocusPath.slice(0, depth);\n } else {\n this._lastFocusPath = undefined;\n }\n this._resetFocusTimer();\n this._focusChange();\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport context from '../../globals/context/index';\n\nexport default function withHandleKey(Base) {\n return class extends Base {\n static get name() {\n return Base.name;\n }\n\n _handleKey(keyEvent) {\n return this._processEvent(keyEvent);\n }\n\n _handleKeyRelease(keyEvent) {\n return this._processEvent(keyEvent, 'Release');\n }\n\n _processEvent(keyEvent, suffix = '') {\n const keyMap = this.stage.application.__keymap || {};\n let key = keyMap[keyEvent.keyCode];\n if (!key) {\n key = keyEvent.key;\n }\n if (key && typeof this[`on${key}${suffix}`] === 'function') {\n this._invokeKeyPayloadCallback(key + suffix);\n return this[`on${key}${suffix}`].call(this, this, keyEvent);\n }\n return false;\n }\n\n _invokeKeyPayloadCallback(key) {\n if (\n this.metricsPayload &&\n typeof context.keyMetricsCallback === 'function'\n ) {\n context.keyMetricsCallback(key, this.metricsPayload);\n }\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nfunction getPropertyDescriptor(path) {\n return {\n get() {\n return this.tag(path);\n },\n configurable: true,\n enumerable: true\n };\n}\n\nexport default function withTags(Base) {\n return class extends Base {\n static get name() {\n return Base.name;\n }\n\n _construct() {\n const prototype = Object.getPrototypeOf(this);\n if (!prototype._withTagsInitialized) {\n const tags = this.constructor.tags || [];\n tags.forEach(tag => {\n if (typeof tag === 'object') {\n var { name, path } = tag;\n } else {\n var name = tag; // eslint-disable-line no-redeclare\n var path = tag; // eslint-disable-line no-redeclare\n }\n const key = '_' + name;\n const descriptor = getPropertyDescriptor(path);\n Object.defineProperty(prototype, key, descriptor);\n });\n prototype._withTagsInitialized = true;\n }\n super._construct && super._construct();\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { clone, getValFromObjPath, getHexColor } from '../../utils';\nimport log from '../../globals/context/logger';\n\n/**\nGiven a character, return its ASCII value multiplied by its position.\n *\n@param {string} char - The character to process.\n@param {number} index - The position of the character in the string.\n@returns {number} - The ASCII value of the character multiplied by its position.\n */\nexport const getCharacterValue = (char, index) => {\n return char.charCodeAt(0) * (index + 1);\n};\n\n/**\n * Recursively sorts an object by its keys. If an object has nested objects as values,\n * it will sort those nested objects as well.\n *\n * @param {Object} obj - The object to be sorted.\n * @returns {Object} A new object that is a sorted version of the input object.\n */\nexport const sortObject = obj => {\n const sortedObj = {};\n Object.keys(obj)\n .sort()\n .forEach(key => {\n if (\n typeof obj[key] === 'object' &&\n obj[key] !== null &&\n !Array.isArray(obj[key])\n ) {\n sortedObj[key] = sortObject(obj[key]); // Recursive call for nested objects\n } else {\n sortedObj[key] = obj[key];\n }\n });\n return sortedObj;\n};\n\n/**\nGiven an object, return a sum of the ASCII values of all characters in its\nJSON stringified representation, each multiplied by its position.\n*\n@param {object} obj - The object to process.\n@returns {number} - The sum of ASCII values, each multiplied by its position.\n*/\nexport const getCharacterSum = obj => {\n const sortedObj = sortObject(obj);\n const str = JSON.stringify(sortedObj).replace(/[{}:\",\\s]/g, ''); // Remove brackets, colons, and whitespace\n let sum = 0;\n for (let i = 0; i < str.length; i++) {\n sum += getCharacterValue(str[i], i);\n }\n return sum;\n};\n\n/**\nGiven an object, return a \"hash\" of the object, which is a combination of\nthe length of its JSON stringified representation and the sum of the ASCII\nvalues of all characters in that string, each multiplied by its position.\n*\n@param {object} obj - The object to process.\n@returns {string} - The hash of the object.\n*/\nexport const getHash = obj => {\n const str = JSON.stringify(obj);\n return str.length + '-' + getCharacterSum(obj);\n};\n\n/**\n * Recursively executes functions within an object or array structure, passing them a given context.\n * @param {Function|Object|Array} objOrFunction - The object, array, or function to process.\n * @param {*} theme - The context to pass to any encountered functions.\n * @returns {*} The processed structure with functions executed.\n */\nexport function executeWithContextRecursive(objOrFunction, theme) {\n if (typeof objOrFunction === 'function') {\n // If the input is a function, execute it with the theme as a parameter\n const result = objOrFunction(theme);\n return executeWithContextRecursive(result, theme);\n } else if (Array.isArray(objOrFunction)) {\n // If the input is an array, iterate through its elements and apply the function recursively.\n return objOrFunction.map(item => executeWithContextRecursive(item, theme));\n } else if (typeof objOrFunction === 'object' && objOrFunction !== null) {\n // If the input is an object (and not null), iterate through its properties and apply the function recursively.\n const result = {};\n for (const key in objOrFunction) {\n if (objOrFunction.hasOwnProperty(key)) {\n result[key] = executeWithContextRecursive(objOrFunction[key], theme);\n }\n }\n return result;\n } else {\n // Return the value as is if it's neither a function, an object, nor an array.\n return objOrFunction;\n }\n}\n\n/**\n * Checks if a value is a plain object.\n *\n * @param {*} value - The value to check.\n * @returns {boolean} - True if the value is a plain object, false otherwise.\n */\nexport function isPlainObject(value) {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof Date) &&\n !(value instanceof RegExp) &&\n !(value instanceof Function) &&\n !(value instanceof Error)\n );\n}\n\n/**\n * Returns the subTheme property of the first parent object that has one, or undefined if none exist.\n *\n * @param {object} obj - The object to search for a subTheme property.\n * @returns {(String | Undefined)} - The value of the subTheme property, or undefined if none exists.\n */\nexport const getSubTheme = obj => {\n while (obj && (!obj.subTheme || typeof obj.subTheme !== 'string')) {\n obj = obj.p;\n }\n return obj ? obj.subTheme : undefined;\n};\n\n/**\n * Returns the component configuration object for the given object based on its prototype chain.\n *\n * @param {object} obj - The object to get the component configuration for.\n * @returns {object} - The component configuration object.\n */\nexport const getComponentConfig = obj => {\n if (!isPlainObject(obj)) return {};\n return obj?.theme?.componentConfig?.[obj.constructor.__componentName] || {};\n};\n\n/**\n * Returns an array of the names of all components in the prototype chain of the given object.\n * @param {object} obj - The object to get the prototype chain from.\n * @returns {string[]} - An array of component names.\n */\nexport const getPrototypeChain = obj => {\n if (!isPlainObject(obj)) return [];\n const prototypeChain = new Set();\n let proto = obj;\n\n if (obj.constructor && obj.constructor.__componentName) {\n prototypeChain.add(obj.constructor.__componentName);\n }\n\n /**\n * Traverse the prototype chain and add component names to the set\n */\n do {\n proto = Object.getPrototypeOf(proto);\n if (proto !== null && typeof proto === 'object') {\n // Add only components that support theming\n if (proto.constructor.__componentName) {\n prototypeChain.add(proto.constructor.__componentName);\n }\n }\n } while (proto);\n\n // Convert the set to an array and return it\n return Array.from(prototypeChain);\n};\n\n/**\n * Recursively removes properties from an object that are themselves empty objects.\n * Does not remove arrays, non-plain objects, or non-empty objects.\n *\n * @param {Object} obj - The object to clean of empty objects.\n * @returns {Object} The cleaned object.\n */\nexport function removeEmptyObjects(obj) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && isPlainObject(obj[key])) {\n removeEmptyObjects(obj[key]); // Recurse into the object\n\n // After recursion, if the object is empty, delete it from the parent\n if (Object.keys(obj[key]).length === 0) {\n delete obj[key];\n }\n }\n }\n\n return obj; // Always return obj, even if it's empty\n}\n\n// This map will store hashes of objects to detect duplicates.\n\nexport function createSharedReferences(obj = {}) {\n const seenObjects = new Map();\n\n // Generates a hash for an object.\n // Sorting keys ensures consistent hash regardless of property order.\n function hash(object) {\n return JSON.stringify(object, Object.keys(object).sort());\n }\n\n function process(currentObj) {\n for (const key in currentObj) {\n if (currentObj.hasOwnProperty(key)) {\n const value = currentObj[key];\n if (typeof value === 'object' && value !== null) {\n // Ensure it's an object\n const valueHash = hash(value);\n if (seenObjects.has(valueHash)) {\n // If we've seen this object before, replace the current reference\n // with the original reference.\n currentObj[key] = seenObjects.get(valueHash);\n } else {\n seenObjects.set(valueHash, value);\n process(value); // Recursively process this object\n }\n }\n }\n }\n }\n\n process(obj);\n\n return obj;\n}\n\n/**\n * Combines the provided properties and returns a list of unique properties.\n *\n * @param {string[]} defaultProps - Default property names.\n * @param {Object} additionalProps - Object whose keys are additional property names.\n * @param {string[]} subProps - Sub property names.\n * @returns {string[]} - Array of unique property names.\n */\nexport function getUniqueProperties(defaultProps = []) {\n if (!Array.isArray(defaultProps)) {\n throw new TypeError('Expected defaultProps to be an array of strings.');\n }\n\n return [...new Set(defaultProps)];\n}\n\n/**\n * Generate the payload by cloning and merging multiple objects.\n *\n * @param {Object} base - The base object to start with.\n * @param {Object} defaultStyle - Default styles provided by the user.\n * @param {string} toneItem - The current tone being processed.\n * @param {string} modeItem - The current mode being processed.\n * @param {Object} tone - Tone configurations.\n * @param {Object} mode - Mode configurations.\n * @returns {Object} - The merged payload.\n */\nexport function generatePayload(\n base,\n defaultStyle,\n toneItem,\n modeItem,\n tone,\n mode\n) {\n let payload = clone(defaultStyle, base);\n payload = clone(payload, tone?.[toneItem]);\n payload = clone(payload, mode?.[modeItem]);\n payload = clone(payload, tone?.[toneItem]?.mode?.[modeItem] || {});\n payload = clone(payload, mode?.[modeItem]?.tone?.[toneItem] || {});\n return payload;\n}\n\n/**\n * Recursively searches for and returns all the property keys nested within the specified key in the object.\n *\n * @param {Object} obj - The object to search through.\n * @param {string} keyToFind - The key whose nested keys are to be found.\n * @returns {string[]} An array containing all nested property keys under the specified key.\n */\nfunction findNestedKeys(obj, keyToFind) {\n const nestedKeys = [];\n\n /**\n * Inner function to recursively search for nested keys.\n *\n * @param {Object} obj - The nested object to search through.\n */\n function searchNestedKeys(obj) {\n if (typeof obj === 'object' && obj !== null) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n nestedKeys.push(key); // Add the nested key to the array\n }\n }\n }\n }\n\n /**\n * Outer function to initiate search when the specified key is found.\n *\n * @param {Object} obj - The object to search through.\n */\n function searchForKey(obj) {\n if (typeof obj === 'object' && obj !== null) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (key === keyToFind) {\n searchNestedKeys(obj[key]); // Start searching for nested keys\n break; // Once the specified key is found, we don't need to look further at this level\n }\n searchForKey(obj[key]); // Continue searching for the specified key\n }\n }\n }\n }\n\n searchForKey(obj); // Initialize the search with the object\n return nestedKeys; // Return the array of nested keys\n}\n\n/**\n * Generates a solution based on the provided configurations.\n *\n * @param {Object} options - The configuration options for generating the solution.\n * @param {Object} [options.base={}] - Base object.\n * @param {Object} [options.tone={}] - Tone configurations.\n * @param {Object} [options.mode={}] - Mode configurations.\n * @param {Object} [options.defaultStyle={}] - Default styles provided by the user.\n * @returns {Object} - The generated solution with shared references and merged identical properties.\n */\nexport const generateSolution = (\n { base = {}, tone = {}, mode = {}, defaultStyle = {} },\n modeKeys = [],\n toneKeys = []\n) => {\n const solution = {};\n\n const uniqueModes = getUniqueProperties([\n 'focused',\n 'disabled',\n ...modeKeys,\n 'unfocused' // Unfocused must be at the end for proper fallback since base === 'unfocused' in many cases\n ]);\n\n const uniqueTones = getUniqueProperties([\n 'neutral',\n 'inverse',\n 'brand',\n ...toneKeys\n ]);\n\n for (const modeItem of uniqueModes) {\n for (const toneItem of uniqueTones) {\n const payload = generatePayload(\n base,\n defaultStyle,\n toneItem,\n modeItem,\n tone,\n mode\n );\n solution[`${modeItem}_${toneItem}`] = payload;\n }\n }\n\n return solution;\n};\n\nconst DEFAULT_KEYS = [\n // ORDER MATTERS\n 'unfocused_neutral',\n 'unfocused_inverse',\n 'unfocused_brand',\n 'focused_neutral',\n 'focused_inverse',\n 'focused_brand',\n 'disabled_neutral',\n 'disabled_inverse',\n 'disabled_brand'\n];\n\n/**\n * Enforce a contract on an input object by ensuring that it contains a set of specified keys\n * and, if not, substituting them with values from fallback keys in a predefined order.\n *\n * @param {Object} inputObj - The input object to enforce the contract on.\n * @returns {Object} - An object that adheres to the contract, with missing keys replaced by fallback values.\n */\nexport function enforceContract(inputObj) {\n const result = {};\n for (const key of [...DEFAULT_KEYS, ...Object.keys(inputObj)]) {\n if (!inputObj.hasOwnProperty(key)) {\n // Find the first fallback property that exists in inputObj\n const fallbackKey = DEFAULT_KEYS.find(fallback =>\n inputObj.hasOwnProperty(fallback)\n );\n if (fallbackKey) {\n const fallback = inputObj[fallbackKey];\n result[key] = typeof fallback !== 'object' ? {} : fallback;\n } else {\n result[key] = {};\n }\n } else {\n if (typeof inputObj[key] !== 'object') {\n // If the value is not an object, replace it with an empty object\n result[key] = {};\n } else {\n result[key] = inputObj[key];\n }\n }\n }\n return result;\n}\n\n/**\n * Generates the source style object for a given component by merging base, mode, and tone styles from the component's style chain\n * @param {object} component - The component for which to generate the style source\n * @returns {object} - The source style object for the component\n */\nexport const generateComponentStyleSource = ({\n theme = {},\n styleChain = [],\n inlineStyle = {},\n alias = []\n} = {}) => {\n if (typeof theme !== 'object') {\n throw new Error('Expected theme to be an object');\n }\n\n if (!Array.isArray(styleChain)) {\n throw new Error('Expected styleChain to be an array');\n }\n\n if (typeof inlineStyle !== 'object') {\n throw new Error('Expected inlineStyle to be an object');\n }\n\n if (!Array.isArray(alias)) {\n throw new Error('Expected alias to be an array');\n }\n\n /**\n * Component default styles\n */\n const componentDefault = styleChain.map(({ style }) => {\n if (\n typeof style === 'object' &&\n !style.base &&\n !style.mode &&\n !style.tone &&\n !style.default\n ) {\n return { base: style };\n } else {\n const { base = {}, mode = {}, tone = {} } = style;\n\n let componentConfigDefaultStyle;\n if (style) {\n const defaultStyle = JSON.parse(JSON.stringify(style));\n delete defaultStyle.base;\n delete defaultStyle.tone;\n delete defaultStyle.mode;\n componentConfigDefaultStyle = defaultStyle; // Anything in the root level of style\n }\n\n return {\n defaultStyle: componentConfigDefaultStyle || {},\n base,\n mode,\n tone\n };\n }\n });\n\n /**\n * Local / Instance level styles\n * DefaultStyle will apply to the next level in the hierarchy\n */\n let localDefaultStyle;\n if (inlineStyle) {\n const defaultStyle = JSON.parse(JSON.stringify(inlineStyle));\n delete defaultStyle.base;\n delete defaultStyle.tone;\n delete defaultStyle.mode;\n localDefaultStyle = defaultStyle; // Anything in the root level of style\n }\n\n const local = {\n defaultStyle: localDefaultStyle || {},\n base: inlineStyle?.base || {},\n mode: inlineStyle?.mode || {},\n tone: inlineStyle?.tone || {}\n };\n\n // Merge all the styles together into one array to loop\n const merged = [...componentDefault, local];\n\n // Execute all style functions with the theme\n const parsedStyles = merged.map(style => {\n return executeWithContextRecursive(style, theme);\n });\n\n // Find all the keys that are in mode/tone as well as nested under mode and tone this will help generate the final solution\n const modeKeys = findNestedKeys(parsedStyles, 'mode');\n const toneKeys = findNestedKeys(parsedStyles, 'tone');\n\n // Merge all the styles together into one object\n const solution = parsedStyles.reduce((acc, style) => {\n return clone(acc, generateSolution(style, modeKeys, toneKeys));\n }, {});\n\n const final = formatStyleObj(\n removeEmptyObjects(colorParser({ theme }, solution)) || {},\n alias\n );\n\n const cleanObj = createSharedReferences(final);\n\n return enforceContract(cleanObj);\n};\n\n/**\n * Parse and process a style object to replace theme strings and process color arrays.\n * @param {object} targetObject - In most cases, this will be a theme object.\n * @param {object} styleObj - The input style object to be processed.\n * @returns {object} The processed style object with theme strings replaced and color arrays processed.\n */\nexport const colorParser = (targetObject, styleObj) => {\n // Check if targetObject is an object\n if (typeof targetObject !== 'object' || targetObject === null) {\n throw new TypeError('targetObject must be an object.');\n }\n\n // Check if styleObj is an object\n if (typeof styleObj !== 'object' || styleObj === null) {\n throw new TypeError('styleObj must be an object.');\n }\n\n // Process style object and remove unnecessary properties\n const processedStyle = JSON.stringify(styleObj, (_, value) => {\n if (-1 < ['tone', 'mode'].indexOf(_)) return value; // Remove any tone/mode or mode/tone properties as they have already been processed\n\n // Handle theme strings, e.g., 'theme.radius.md'\n if (typeof value === 'string' && value.startsWith('theme.')) {\n // Retrieve the value from the target object using the theme path\n return getValFromObjPath(targetObject, value); // If no theme value exists, the property will be removed\n }\n\n function isValidColor(num) {\n return num >= 0 && num <= 0xffffffff;\n }\n\n // Handle color arrays, e.g., ['#663399', 1] or [255, 0.5]\n if (\n Array.isArray(value) &&\n value.length === 2 &&\n ((typeof value[0] === 'string' && value[0].startsWith('#')) ||\n (typeof value[0] === 'number' && isValidColor(value[0]))) &&\n typeof value[1] === 'number'\n ) {\n // Return processed hex color or the original value if processing fails\n return getHexColor(value[0], value[1]) || value;\n }\n\n // Return all other values as-is\n return value;\n });\n\n return JSON.parse(processedStyle || {});\n};\n\n/**\n * Generates the final style object for a component using its style source.\n * @param {object} component - The component for which to generate a style object.\n * @param {object} componentStyleSource - The style source object for the component.\n * @returns {object} - The generated style object.\n */\nexport const generateStyle = (component, componentStyleSource = {}) => {\n if (!isPlainObject(component)) return {};\n const { mode = 'unfocused', tone = 'neutral' } = component;\n return (\n componentStyleSource[`${mode}_${tone}`] ||\n componentStyleSource['unfocused_neutral'] ||\n {}\n );\n};\n\n/**\n * Generates a name by concatenating the names of constructors in the prototype chain.\n * @param {object} obj - The object for which to generate the name.\n * @returns {string} - The generated name.\n */\nexport function generateNameFromPrototypeChain(obj, name = '') {\n if (!obj) return name;\n const proto = Object.getPrototypeOf(obj);\n if (!proto || !proto.constructor) return name;\n const componentName = `${name ? name + '.' : ''}${\n proto?.constructor?.__componentName || ''\n }`\n .replace(/\\.*$/, '')\n .trim();\n const result = generateNameFromPrototypeChain(proto, componentName);\n return result;\n}\n/**\n * Creates a cache object to store the results of getStyleChainMemoized function calls.\n * @type {object}\n */\nconst styleChainCache = {};\n\n/**\n * Flush the memoization cache for styleChain\n *\n */\nexport const clearStyleChainCache = () => {\n for (const key in styleChainCache) {\n if (styleChainCache.hasOwnProperty(key)) {\n delete styleChainCache[key];\n }\n }\n};\n\n/**\n * Memoized version of getStyleChain function. Retrieves the style chain for a component by traversing its prototype chain.\n * @param {object} componentObj - The component object to get the style chain from.\n * @returns {{ style: (object | function) }[]} - An array of style objects containing either an object of styles or a function to return an object of styles.\n */\nexport const getStyleChainMemoized = componentObj => {\n /**\n * Create a cache key based on the stringified component object.\n * @type {string}\n */\n\n const cacheKey = generateNameFromPrototypeChain(componentObj);\n\n // Check if the result is already in the cache\n if (styleChainCache[cacheKey]) {\n return styleChainCache[cacheKey];\n }\n\n /**\n * Compute the style chain using the getStyleChain function.\n * @type {{ style: (object | function) }[]}\n */\n const styleChain = getStyleChain(componentObj);\n\n // Cache the result for future use\n styleChainCache[cacheKey] = styleChain;\n\n // Return the style chain\n return styleChain;\n};\n\n/**\n * Traverse up the prototype chain to create an array of all the styles that are present in the Components ancestors\n * @param {object} componentObj - The component object to get the style chain from.\n * @returns {{ style: (object | function) }[]} - An array of style objects containing either an object of styles or a function to return an object of styles.\n */\nexport const getStyleChain = componentObj => {\n const styleMap = new Map(); // Use a Map to store styles as JSON strings\n let proto;\n\n do {\n proto = !proto ? componentObj : Object.getPrototypeOf(proto);\n if (proto?.constructor === Object) break; // Stop traversing the prototype chain if we reach the Object prototype\n if (\n proto &&\n typeof proto === 'object' &&\n proto.hasOwnProperty('constructor')\n ) {\n // ComponentConfig Level\n const { style: componentConfigStyle } = getComponentConfig(proto);\n if (Object.keys(componentConfigStyle || {}).length) {\n if (!styleMap.has(componentConfigStyle)) {\n styleMap.set(componentConfigStyle, { style: componentConfigStyle });\n }\n }\n\n // Access the __themeStyle property from the current prototype's constructor\n const themeStyle =\n proto.constructor.hasOwnProperty('__themeStyle') &&\n proto.constructor.__themeStyle;\n\n if (Object.keys(themeStyle || {}).length) {\n if (!styleMap.has(themeStyle)) {\n styleMap.set(themeStyle, { style: { ...themeStyle } });\n }\n } else if (typeof themeStyle === 'function') {\n // If the style is a function, add it to the styleMap\n if (!styleMap.has(themeStyle)) {\n styleMap.set(themeStyle, { style: themeStyle });\n }\n }\n\n // Access the __mixinStyle property from the current prototype's constructor\n const mixinStyle =\n proto.constructor.hasOwnProperty('__mixinStyle') &&\n proto.constructor.__mixinStyle;\n\n if (Object.keys(mixinStyle || {}).length) {\n if (!styleMap.has(mixinStyle)) {\n styleMap.set(mixinStyle, { style: mixinStyle });\n }\n }\n }\n } while (proto);\n\n // Convert the values of the Map (unique styles) back to an array\n const uniqueStyles = Array.from(styleMap.values());\n\n // Return an array of unique style objects with a \"style\" property\n return uniqueStyles.map(style => style).reverse();\n};\n\n/**\n * Formats a style object by applying a series of formatter functions.\n *\n * @param {object} originalObj - The original style object to be formatted.\n * @param {array} [aliasStyles=[]] - An array of alias styles to be used during formatting.\n * @returns {object} The formatted style object after applying all formatter functions.\n */\nexport const formatStyleObj = (originalObj, aliasStyles = []) => {\n if (typeof originalObj !== 'object' || originalObj === null) {\n throw new Error('The originalObj parameter must be an object.');\n }\n\n const formatters = new Set();\n\n // Adding a key-value pair to the 'formatters' Set.\n // This pattern is used so more formatters can be easily added if required at a later time\n formatters.add([replaceAliasValues, [aliasStyles]]);\n\n // Generating an array from the 'formatters' Set\n const formattersArray = Array.from(formatters);\n\n // Using reduce to apply functions from 'formattersArray' to 'finalStyle'\n // Each function takes 'obj' (initially 'finalStyle') as input and applies transformations\n // The result of the previous function is passed as input to the next function\n // The final transformed style is assigned to 'this._style'\n return formattersArray.reduce(\n (obj, [func, args]) => func(obj, ...args),\n originalObj\n );\n};\n\n/**\n * Replaces alias values in the provided style object with their corresponding aliases.\n * @param {object} value - The style object to process.\n * @param {Array<Object>} [aliasStyles=[]] - Optional array of alias styles to apply.\n * @returns {object} The style object with alias values replaced.\n */\nexport const replaceAliasValues = (value, aliasStyles = []) => {\n if (typeof value !== 'object' || value === null) {\n throw new Error('Value must be an object');\n }\n\n if (!Array.isArray(aliasStyles)) {\n throw new Error('Alias styles must be an array');\n }\n\n let str = JSON.stringify(value);\n const aliasProps = [\n { prev: 'height', curr: 'h', skipWarn: true },\n { prev: 'width', curr: 'w', skipWarn: true },\n ...(aliasStyles || [])\n ];\n\n aliasProps.forEach(alias => {\n if (\n alias &&\n typeof alias.prev === 'string' &&\n typeof alias.curr === 'string'\n ) {\n !alias.skipWarn &&\n str.search(`\"${alias.prev}\":`) >= 0 &&\n log.warn(\n `The style property \"${alias.prev}\" is deprecated and will be removed in a future release. Please use \"${alias.curr}\" instead.`\n );\n str = str.replace(\n new RegExp(`\"${alias.prev}\":`, 'gi'),\n `\"${alias.curr}\":`\n );\n }\n });\n return JSON.parse(str);\n};\n","import context from '../../globals/context/index';\n\nconst themeStyleCache = new Map();\n\ncontext.on('themeUpdate', () => {\n themeStyleCache.clear();\n});\n\nexport default themeStyleCache;\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n generateComponentStyleSource,\n getStyleChainMemoized,\n clearStyleChainCache,\n generateStyle,\n getHash\n} from './utils';\nimport context from '../../globals/context/index';\nimport { clone } from '../../utils/index';\nimport cache from './cache';\nimport lng from '@lightningjs/core';\n\nexport default class StyleManager extends lng.EventEmitter {\n /**\n * Create a Style Manager instance.\n * @param {object} options - The options object.\n * @param {object} options.component - The LightningJS component instance.\n */\n constructor({ component = {} } = {}) {\n super(...arguments);\n this.init(component);\n }\n\n init(component) {\n this.isActive = true;\n this.component = component;\n this.setupListeners();\n this._style = {}; // This will be the source of truth for the style manager\n // Initial update is not debounced\n this.update();\n }\n\n setupListeners() {\n // Bind the _onThemeUpdate method to the current instance of the StyleManager class.\n this._boundThemeUpdate = this._onThemeUpdate.bind(this);\n this._hasSubTheme = Boolean(this.component._targetSubTheme);\n if (!this.component._targetSubTheme) {\n context.on('themeUpdate', this._boundThemeUpdate);\n } else {\n context.on(\n `themeUpdate${this.component._targetSubTheme}`,\n this._boundThemeUpdate\n );\n }\n }\n\n clearListeners() {\n // Bind the _onThemeUpdate method to the current instance of the StyleManager class.\n if (!this._boundThemeUpdate) return;\n if (!this.component._targetSubTheme) {\n context.off('themeUpdate', this._boundThemeUpdate);\n } else {\n context.off(\n `themeUpdate${this.component._targetSubTheme}`,\n this._boundThemeUpdate\n );\n }\n }\n\n /**\n * Destroy the Style Manager instance and remove the themeUpdate event listener.\n */\n destroy() {\n this.isActive = false;\n this._cleanupCache();\n // Remove event listeners and subscriptions\n this.clearListeners();\n // Set references to null\n this._styleCache = null;\n this._boundThemeUpdate = null;\n this.component = null;\n }\n\n /**\n * Handler for the themeUpdate event. Clears the cache and updates the component's style.\n * @private\n */\n _onThemeUpdate() {\n clearStyleChainCache();\n this.clearSourceCache();\n this.clearStyleCache();\n this.update();\n }\n\n /**\n * Clears the style chain cache.\n */\n clearStyleChainCache() {\n clearStyleChainCache();\n }\n\n /**\n * Clears the source cache.\n */\n clearSourceCache() {\n if (!this.component) return;\n const sourceKey = this._generateCacheKey('styleSource');\n this._removeCache(sourceKey);\n }\n\n /**\n * Clears the style cache.\n */\n clearStyleCache() {\n if (!this.component) return;\n const { tone, mode } = this.component;\n const styleKey = this._generateCacheKey(`style_${mode}_${tone}`);\n cache.delete(styleKey);\n }\n\n /**\n * Generates a cache key.\n * @param {string} name - The name of the cache.\n * @returns {string} - The generated cache key.\n */\n _generateCacheKey(name) {\n const cacheKey = [\n name,\n this.component._targetSubTheme,\n this.component.constructor.__componentName,\n this._customStyleHash\n ]\n .filter(Boolean)\n .join('_');\n return cacheKey;\n }\n\n /**\n * Adds a cache.\n * @param {string} name - The name of the cache.\n * @param {object} payload - The payload of the cache.\n */\n _addCache(name, payload) {\n const key = this._generateCacheKey(name);\n const existing = cache.get(key);\n cache.set(key, {\n ids: [...new Set([...(existing?.ids || []), this.component.__id])], // Add current id and remove duplicates\n payload\n });\n }\n\n /**\n * Called when component is destroyed\n */\n _cleanupCache() {\n if (!this.component) return;\n cache.forEach(({ ids, payload }, name) => {\n const removeIndex = ids && ids.length && ids.indexOf(this.component.__id);\n if (removeIndex > -1 && ids.length > 1) {\n cache.set(name, {\n ids: ids.slice(0, removeIndex).concat(ids.slice(removeIndex + 1)),\n payload\n });\n } else if (removeIndex > -1) {\n cache.delete(name);\n }\n });\n }\n\n /**\n * Removes a cache.\n * @param {string} name - The name of the cache.\n */\n _removeCache(name) {\n cache.delete(name);\n }\n\n /**\n * Gets a cache.\n * @param {string} name - The name of the cache.\n * @returns {object|boolean} - The cache or false if the component has inline styles.\n */\n _getCache(name) {\n const key = this._generateCacheKey(name);\n return cache.get(key);\n }\n\n /**\n * Updates the component's style based on changes in tone, mode, theme, and `_componentLevelStyle`.\n * Clears the style cache if tone or mode have changed, and clears the source cache if `_componentLevelStyle` has changed.\n * Generates the component's style source and style objects, saves them to the cache, and emits a `styleUpdate` event with the updated style.\n * @returns {Promise<void>}\n */\n update() {\n if (!this.component) return;\n\n const { mode, tone } = this.component;\n\n try {\n // Attempt to fetch style source from cache\n let styleSource = this._getCache('styleSource')?.payload;\n\n if (!styleSource) {\n // Style source does not exist so it will need to be generated. We attempt to run this function only when necessary for optimal performance\n styleSource = generateComponentStyleSource({\n alias: this.component.constructor.aliasStyles,\n inlineStyle: this.component._componentLevelStyle,\n styleChain: getStyleChainMemoized(this.component),\n theme: this.component.theme\n });\n\n this._addCache('styleSource', styleSource);\n }\n\n // Attempt to fetch style from cache\n let style = this._getCache(`style_${mode}_${tone}`)?.payload;\n\n if (!style) {\n // Style does not exist so will also need to be generated\n style = generateStyle(this.component, styleSource);\n this._addCache(`style_${mode}_${tone}`, style);\n }\n\n this._style = style;\n this.emit('styleUpdate', this.style);\n } catch (error) {\n context.error('styleManager: ', error.message);\n }\n }\n\n /**\n * Accessors\n */\n set style(v) {\n context.warn('styleManager: Cannot mutate style directly');\n }\n\n get style() {\n return this._style;\n }\n\n set props(v) {\n context.warn('styleManager: Cannot mutate props directly');\n }\n\n get props() {\n return Object.keys(this.component._componentConfig).reduce((acc, key) => {\n if (!['base', 'tone', 'mode', 'style', 'styleConfig'].includes(key)) {\n acc[key] = this.component._componentConfig[key];\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Simple check to see if this component can leverage caching. Components using .style cannot use the cache at this time\n */\n get _customStyleHash() {\n const hasCustomStyle =\n Boolean(\n Object.keys(this.component.constructor.__mixinStyle || {}).length\n ) ||\n Boolean(Object.keys(this.component._componentLevelStyle || {}).length);\n\n if (hasCustomStyle) {\n return getHash(\n clone(\n this.component.constructor.__mixinStyle || {},\n this.component._componentLevelStyle || {}\n )\n );\n }\n\n return undefined;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport StyleManager from './StyleManager';\nimport { updateManager } from '../../globals/global-update-manager/GlobalUpdateManager';\nimport context from '../../globals/context';\nimport { getComponentConfig, getSubTheme } from './utils';\nimport { capitalizeFirstLetter } from '../../utils';\n\n/**\n * Merges two objects based on the following rules:\n * 1. If a key exists in both objects, use the value from the second object.\n * 2. If a key exists in the first object but not in the second, set the value to undefined.\n * 3. If a key exists in the second object but not in the first, include it in the result.\n * 4. Maintain the structure of the first object and augment it with extra keys from the second object.\n *\n * @param {Object|Array} firstObj - The first object, providing the structure to match.\n * @param {Object|Array} secondObj - The second object, whose values take precedence.\n * @returns {Object|Array} A new object with a merged structure and values.\n */\nfunction mergeObjectsWithSecondDominant(firstObj, secondObj) {\n if (firstObj !== null && typeof firstObj === 'object') {\n if (Array.isArray(firstObj)) {\n return firstObj.map((item, index) =>\n mergeObjectsWithSecondDominant(\n item,\n Array.isArray(secondObj) ? secondObj[index] : undefined\n )\n );\n } else {\n const result = {};\n // Combine keys from both objects to ensure all keys are covered\n const allKeys = new Set([\n ...Object.keys(firstObj),\n ...Object.keys(secondObj)\n ]);\n allKeys.forEach(key => {\n // Recurse for nested objects or arrays\n if (typeof firstObj[key] === 'object' && firstObj[key] !== null) {\n result[key] = mergeObjectsWithSecondDominant(\n firstObj[key],\n secondObj[key] || {}\n );\n } else if (\n typeof secondObj[key] === 'object' &&\n secondObj[key] !== null\n ) {\n result[key] = mergeObjectsWithSecondDominant(\n firstObj[key] || {},\n secondObj[key]\n );\n } else {\n // Use value from the second object if available, else set to undefined\n result[key] = secondObj.hasOwnProperty(key)\n ? secondObj[key]\n : undefined;\n }\n });\n return result;\n }\n } else {\n // Return non-object values directly\n return firstObj;\n }\n}\n\n/**\n * A higher-order function that returns a class with theme styles.\n * @param {function} Base - The base class to extend.\n * @param {object} mixinStyle - The mixin style to add to the component.\n * @returns {function} A class that extends the base class with theme styles.\n */\nexport default function withThemeStyles(Base, mixinStyle = {}) {\n return class extends Base {\n _construct() {\n if (this._withThemeStylesSetupComplete) {\n // Make sure this runs ony once if being used on a component that extends another component that is utilizing withThemeStyles\n super._construct();\n return;\n }\n\n this._hSetByUser = false;\n this._wSetByUser = false;\n\n this._styleManager = new StyleManager({ component: this });\n this._style = this._styleManager.style; // Set the style for the first time. After this is will be updated by events\n this._updatePropDefaults();\n this._styleManager.on('styleUpdate', () => {\n this._style = this._styleManager.style;\n this._updatePropDefaults();\n this.queueThemeUpdate();\n });\n this._withThemeStylesSetupComplete = true;\n super._construct(); // Important that this is called at the bottom to ensure that withThemeStyles is only initialized once per component to prevent potential memory leaks\n }\n\n /**\n * Checks for subThemes on _setup lifecycle event to allow the component to traverse the tree to find child theme properties.\n * @private\n * @returns {void}\n */\n _setup() {\n super._setup && super._setup();\n this._targetSubTheme = getSubTheme(this);\n if (this._targetSubTheme) {\n this._styleManager.clearListeners();\n this._styleManager.setupListeners();\n this._styleManager.clearStyleChainCache();\n this._styleManager.clearStyleCache();\n this._styleManager.clearSourceCache();\n this._styleManager.update();\n }\n }\n\n /**\n * Updates the default properties of the component based on the current theme.\n * It compares the previous component configuration properties with the current style manager properties,\n * and updates the component's properties accordingly. If the properties are unchanged, no action is taken.\n * This method is crucial for ensuring the component's properties are synchronized with the theme.\n */\n _updatePropDefaults() {\n // If the current properties are the same as the previous configuration, no update is needed\n\n if (\n !Object.keys(this._styleManager.props).length ||\n JSON.stringify(this._styleManager.props) ===\n JSON.stringify(this._prevComponentConfigProps)\n ) {\n return;\n }\n\n // Compare current properties with previous configuration and get the payload\n const payload = this._prevComponentConfigProps\n ? mergeObjectsWithSecondDominant(\n this._prevComponentConfigProps || {},\n this._styleManager.props || {}\n )\n : this._styleManager.props || {};\n\n // Store a deep copy of the current properties for future comparison\n this._prevComponentConfigProps =\n this._styleManager.props &&\n JSON.parse(JSON.stringify(this._styleManager.props));\n\n // This will be used by withUpdates to set defaults\n this.__componentConfigProps = payload;\n }\n\n /**\n * On component attach, ensures the StyleManager has been reinitialized if it was previously destroyed in detach.\n * @private\n * @returns {void}\n */\n _attach() {\n super._attach();\n if (!this._styleManager.isActive) {\n this._styleManager.init(this);\n }\n }\n\n /**\n * Detaches the component and destroys the style manager.\n * @private\n * @returns {void}\n */\n _detach() {\n super._detach();\n this._styleManager.destroy();\n }\n\n /**\n * Updates the mode to 'unfocused' when the component is unfocused.\n * @private\n * @internal\n * @returns {void}\n */\n _unfocus() {\n if (this._isFocusedMode) this.mode = 'unfocused';\n super._unfocus();\n }\n\n /**\n * Updates the mode to 'focused' when the component is focused.\n * @private\n * @returns {void}\n */\n _focus() {\n if (!this._isDisabledMode) this.mode = 'focused';\n super._focus();\n }\n\n /**\n * Checks if dimensions need updating, and updates if necessary.\n * Fixes mount issues if height is controlled by a component's style alone.\n * Setters for w/h will set the wSetByUser and hSetByUser flag to block this functionality and allow customization.\n * @private\n * @returns {void}\n */\n _checkDimensionUpdates() {\n let dimensionUpdateRequired = false;\n\n if (!this._wSetByUser && this.style.w && this._w !== this.style.w) {\n this._w = this.style.w;\n dimensionUpdateRequired = true;\n }\n\n if (!this._hSetByUser && this.style.h && this._h !== this.style.h) {\n this._h = this.style.h;\n dimensionUpdateRequired = true;\n }\n\n if (dimensionUpdateRequired) {\n this._updateDimensions();\n }\n }\n\n /**\n * Called by the update manager to trigger the _update lifecycle.\n * If `queueRequestUpdate` is undefined, then it's OK to call `_update()` directly because\n * the component does not have the `withUpdates` mixin, and hence `requestUpdate()` will not be defined either.\n * This check allows this mixin to work without `withUpdates`.\n * @private\n * @returns {void}\n */\n _updateThemeComponent() {\n if (!this.style) return;\n if (!this._isAttached()) return;\n this._checkDimensionUpdates();\n this.queueRequestUpdate\n ? this.queueRequestUpdate()\n : this._update && this._update();\n this._updateItemLayout && this._updateItemLayout();\n }\n\n /**\n * Queues component for update by the Global Update Manager.\n * @returns {void}\n */\n queueThemeUpdate() {\n updateManager.addUpdateTheme(this);\n }\n\n static get name() {\n return Base.name;\n }\n\n static get __componentName() {\n if (!super.__componentName) {\n throw new Error(\n `A valid static __componentName property is required for theming to work properly. Please add this to the ${this.constructor.name} class.`\n );\n }\n return super.__componentName;\n }\n\n static get __mixinStyle() {\n return mixinStyle;\n }\n\n /**\n * Reference to the global theme\n * @return {object}\n */\n get theme() {\n const subTheme =\n this._targetSubTheme && context.getSubTheme(this._targetSubTheme);\n return subTheme || context.theme;\n }\n\n /**\n * Set component level styles\n * @param {object} v - The styles to set, mode, and tone are not allowed\n */\n set style(v) {\n if (Object.prototype.toString.call(v) !== '[object Object]') {\n context.error('style must be an object');\n return;\n }\n this._componentLevelStyle = v;\n this._styleManager.clearStyleCache();\n this._styleManager.update();\n }\n\n /**\n * Get component level styles\n * @return {object}\n */\n get style() {\n return this._style;\n }\n\n /**\n * Get component level styles\n * @return {object}\n */\n get _componentStyle() {\n /** No longer supported */\n context.info(\n '_componentStyle will soon be deprecated. Please use Component.style'\n );\n return this._style;\n }\n\n /**\n * Set component styleConfig\n * @param {object} v - Special configuration rules to override styles\n */\n set styleConfig(v) {\n context.info(\n 'style config is deprecated. Please use style = { base: {}, tone: {}, mode: {} }'\n );\n this._styleConfig = v;\n this._styleManager.update();\n }\n\n /**\n * Get component styleConfig\n * @return {object}\n */\n get styleConfig() {\n return this._styleConfig;\n }\n\n /**\n * Theme configuration for overrides and defaults\n * @return {object}\n */\n get _componentConfig() {\n return getComponentConfig(this);\n }\n\n /**\n * Get the mode property\n * @return {string}\n */\n get mode() {\n return this._mode || this._componentConfig?.mode || 'unfocused';\n }\n\n /**\n * Set the mode property\n * @param {string} v - The mode value to set\n */\n set mode(v) {\n if (typeof v !== 'string' || this._mode === v) return;\n this._mode = v;\n const event = this[`on${capitalizeFirstLetter(v)}`];\n if (event && typeof event === 'function') event.call(this);\n this._styleManager.update();\n }\n\n /**\n * Get the tone property\n * @return {string}\n */\n get tone() {\n return this._tone || this._componentConfig.tone || 'neutral';\n }\n\n /**\n * Set the tone property\n * @param {string} value - The tone value to set\n */\n set tone(v) {\n if (typeof v !== 'string' || this._tone === v) return;\n this._tone = v;\n this._styleManager.update();\n }\n\n /**\n * Allow for w to be overwritten by user if also in component's style file\n * @return {number}\n */\n get w() {\n return (this._wSetByUser && this._w) || this.style?.w || 0;\n }\n\n /**\n * Set the w property\n * @param {number} v - The w value to set\n */\n set w(v) {\n if (this._w === v) return;\n super.w = v;\n this._wSetByUser = true;\n this._updateThemeComponent();\n }\n\n /**\n * Get the h property\n * @return {number}\n */\n get h() {\n return (this._hSetByUser && this._h) || this.style?.h || this._h || 0;\n }\n\n /**\n * Set the h property\n * @param {number} v - The h value to set\n */\n set h(v) {\n if (this._h === v) return;\n super.h = v;\n this._hSetByUser = true;\n this._updateThemeComponent();\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport context from '../../globals/context';\nimport { updateManager } from '../../globals/global-update-manager/GlobalUpdateManager';\nimport { clone } from '../../utils';\n\nfunction capital(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n// Merge the componentConfigProp with the prop value\nfunction mergeProps(componentConfigProp, prop) {\n let result = prop;\n if (\n typeof componentConfigProp === 'object' &&\n Object.keys(componentConfigProp).length &&\n typeof prop === 'object'\n ) {\n result = clone(componentConfigProp, prop);\n }\n\n return result ?? componentConfigProp;\n}\n\nfunction getPropertyDescriptor(name, key) {\n return {\n get() {\n const customGetter = this[`_get${capital(name)}`];\n if (customGetter && typeof customGetter === 'function') {\n const value = customGetter.call(this, this[key]);\n this[key] = value || this.__componentConfigProps?.[name]; // Defaults can also be set from withThemeStyles if used\n return mergeProps(this.__componentConfigProps?.[name], value);\n }\n\n return mergeProps(this.__componentConfigProps?.[name], this[key]); // Defaults can also be set from withThemeStyles if used\n },\n set(value) {\n const oldValue = this[key];\n if (value !== oldValue) {\n const changeHandler = this[`_set${capital(name)}`];\n if (changeHandler && typeof changeHandler === 'function') {\n value = changeHandler.call(this, value);\n }\n\n const newValue = key === 'style' ? clone(this[key], value) : value;\n\n if (\n typeof this[key] === 'object' &&\n this[key] !== null &&\n this[key].style\n ) {\n // If the property is for a nested component, recursively combine it with the component's existing styles, ensuring that any styles defined in componentConfig are also applied.\n const style = clone(this[key].style, value.style || {});\n newValue.style = style;\n }\n\n this[key] = newValue;\n this.queueRequestUpdate();\n }\n },\n configurable: true,\n enumerable: true\n };\n}\n\nfunction getAliasPropertyDescriptor(prev, curr) {\n const deprecationWarning = `The property \"${prev}\" is deprecated and will be removed in a future release. Please use \"${curr}\" instead.`;\n return {\n get() {\n console.warn(deprecationWarning);\n return this[curr];\n },\n set(value) {\n console.warn(deprecationWarning);\n this[curr] = value;\n }\n };\n}\n\nexport default function withUpdates(Base) {\n return class extends Base {\n static get name() {\n return Base.name;\n }\n\n _construct() {\n const prototype = Object.getPrototypeOf(this);\n if (!prototype._withUpdatesInitialized) {\n // create custom accessors and mutators for the props in the properties array\n const props = this.constructor.properties || [];\n props.forEach(name => {\n const key = '_' + name;\n const descriptor = getPropertyDescriptor(name, key);\n if (descriptor !== undefined) {\n Object.defineProperty(prototype, name, descriptor);\n }\n });\n\n // create custom accessors and mutators that map the props in the alias array to\n // the props in the properties array (and use the getters/setters defined above)\n const aliasProps = this.constructor.aliasProperties || [];\n aliasProps.forEach(alias => {\n if (\n alias &&\n typeof alias.prev === 'string' &&\n typeof alias.curr === 'string'\n ) {\n const descriptor = getAliasPropertyDescriptor(\n alias.prev,\n alias.curr\n );\n if (descriptor !== undefined) {\n Object.defineProperty(prototype, alias.prev, descriptor);\n }\n }\n });\n\n prototype._withUpdatesInitialized = true;\n }\n\n this._whenEnabled = new Promise(resolve => {\n this._whenEnabledResolver = resolve;\n });\n\n super._construct && super._construct();\n }\n\n queueRequestUpdate() {\n if (!this._isAttached()) return;\n updateManager.addRequestUpdate(this);\n }\n\n _firstEnable() {\n this._readyForUpdates = true;\n this._whenEnabledResolver();\n updateManager.deleteRequestUpdate(this);\n this.requestUpdate();\n super._firstEnable && super._firstEnable();\n }\n\n requestEarlyUpdate() {\n this._readyForUpdates = true;\n if (updateManager.hasQueuedRequestFor(this)) {\n updateManager.deleteRequestUpdate(this);\n // method also triggers ready for updates\n this._readyForUpdates = true;\n this.requestUpdate();\n return true;\n }\n return false;\n }\n\n _detach() {\n super._detach();\n updateManager.deleteRequestUpdate(this);\n }\n\n /**\n * Request an immediate component update.\n *\n * @remarks\n * Except for when calling `super._update()` from a `_update()`\n * implementation, call this instead of calling `_update()` directly\n *\n * @param {boolean} force If set, bypasses the '_readyForUpdates' check\n */\n requestUpdate(force = false) {\n if (this._readyForUpdates || force) {\n const result = this._update();\n if (typeof result === 'object' && result !== null && result.catch) {\n // This is a promise, make sure to capture any errors\n result.catch(e => {\n context.error(\n `asyncronous _update() error in '${this.constructor.__componentName}'`,\n this,\n e\n );\n });\n }\n }\n }\n\n logPropTable() {\n console.table(this._propTable);\n }\n\n get _propTable() {\n return this.constructor.properties.reduce((acc, prop) => {\n acc[prop] = this[prop];\n return acc;\n }, {});\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\n\nexport default class FadeShader extends lng.shaders.WebGLDefaultShader {\n constructor(context) {\n super(context);\n this._margin = { left: 0, right: 0 };\n }\n\n set positionLeft(v) {\n this._positionLeft = v;\n }\n\n set positionRight(v) {\n this._positionRight = v;\n }\n\n setupUniforms(operation) {\n super.setupUniforms(operation);\n const owner = operation.shaderOwner;\n\n if (this._positionLeft === 0) {\n this._positionLeft = 0.001;\n }\n if (this._positionRight === 0) {\n this._positionRight = 0.001;\n }\n\n const renderPrecision = this.ctx.stage.getRenderPrecision();\n this._setUniform(\n 'margin',\n [\n this._positionLeft * renderPrecision,\n this._positionRight * renderPrecision\n ],\n this.gl.uniform1fv\n );\n this._setUniform(\n 'resolution',\n new Float32Array([\n owner._w * renderPrecision,\n owner._h * renderPrecision\n ]),\n this.gl.uniform2fv\n );\n }\n}\n\nFadeShader.fragmentShaderSource = `\n #ifdef GL_ES\n # ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n # else\n precision lowp float;\n # endif\n #endif\n\n #define PI 3.14159265359\n\n varying vec2 vTextureCoord;\n varying vec4 vColor;\n\n uniform sampler2D uSampler;\n uniform vec2 resolution;\n uniform float margin[2];\n\n void main() {\n vec4 color = texture2D(uSampler, vTextureCoord) * vColor;\n vec2 halfRes = 0.5 * resolution.xy;\n vec2 point = vTextureCoord.xy * resolution;\n\n\n vec2 pos1 = vec2(point.x, point.y);\n vec2 pos2 = pos1;\n pos2.x += margin[0];\n\n vec2 d = pos2 - pos1;\n float t = dot(pos1, d) / dot(d, d);\n t = smoothstep(0.0, 1.0, clamp(t, 0.0, 1.0));\n\n vec2 pos3 = vec2(vTextureCoord.x * resolution.x, vTextureCoord.y);\n pos3.x -= resolution.x - margin[1];\n vec2 pos4 = vec2(vTextureCoord.x + margin[1], vTextureCoord.y);\n\n vec2 d2 = pos4 - pos3;\n float t2 = dot(pos3, d2) / dot(d2, d2);\n t2 = smoothstep(0.0, 1.0, clamp(t2, 0.0, 1.0));\n\n color = mix(vec4(0.0), color, t);\n color = mix(color, vec4(0.0), t2);\n\n gl_FragColor = color;\n }\n`;\n","import lng from '@lightningjs/core';\n\n/**\n * Represents an image texture that supports loading blob images and SVG strings without using web workers.\n */\n\n/**\n * Checks the file type based on the given string.\n * @param {string} str - The input string to check.\n * @returns {string} The file type.\n */\nfunction checkFileType(str) {\n if (str.startsWith('<svg')) {\n return 'SVG';\n } else if (str.startsWith('blob:')) {\n return 'Blob';\n } else if (/\\.(jpeg|jpg|gif|png|svg)$/i.test(str)) {\n return 'Image';\n } else {\n return 'Unknown';\n }\n}\n\n/**\n * Creates an SVG canvas.\n * @param {function} cb - The callback function.\n * @param {object} stage - The stage object.\n * @param {string} url - The URL of the SVG.\n * @param {number} w - The width of the canvas.\n * @param {number} h - The height of the canvas.\n */\nfunction createSvg(cb, stage, url, w, h) {\n const canvas = stage.platform.getDrawingCanvas();\n const ctx = canvas.getContext('2d');\n ctx.imageSmoothingEnabled = true;\n\n const img = new Image();\n img.onload = () => {\n canvas.width = w;\n canvas.height = h;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n cb(null, { source: canvas, w, h });\n };\n img.onerror = err => {\n cb(err);\n };\n\n // On the PS4 platform setting the `crossOrigin` attribute on images\n // can cause CORS failures.\n if (!lng.Utils.isPS4) {\n img.crossOrigin = 'Anonymous';\n }\n\n img.src = url;\n}\n\n/**\n * Loads an image from the given source.\n * @param {object} params - The parameters object.\n * @param {string} params.src - The source URL of the image.\n * @param {function} cb - The callback function.\n * @returns {function} A cancel callback function.\n */\nfunction imageLoader({ src }, cb) {\n const image = new Image();\n\n // On the PS4 platform setting the `crossOrigin` attribute on\n // images can cause CORS failures.\n if (!(src.substr(0, 5) == 'data:') && !lng.Utils.isPS4) {\n image.crossOrigin = 'Anonymous';\n }\n image.onerror = function () {\n // Ignore error message when cancelled.\n if (image.src) {\n return cb('Image load error');\n }\n };\n image.onload = function () {\n cb(null, {\n source: image,\n renderInfo: { src: src, compressed: false },\n hasAlpha: true\n });\n };\n\n image.src = src;\n\n return function () {\n // Cancel Callback\n image.onerror = null;\n image.onload = null;\n image.removeAttribute('src');\n };\n}\n\n/**\n * Represents an image texture.\n */\nexport default class CustomImageTexture extends lng.Texture {\n /**\n * Creates a new ImageTexture instance.\n * @param {object} stage - The stage object.\n */\n constructor(stage) {\n super(stage);\n\n this._src = undefined;\n this._hasAlpha = false;\n }\n\n /**\n * Gets the source URL of the image.\n * @returns {string} The source URL.\n */\n get src() {\n return this._src;\n }\n\n /**\n * Sets the source URL of the image.\n * @param {string} v - The source URL.\n */\n set src(v) {\n if (this._src !== v) {\n this._src = v;\n this._changed();\n }\n }\n\n /**\n * Gets the flag indicating whether the image has an alpha channel.\n * @returns {boolean} The flag value.\n */\n get hasAlpha() {\n return this._hasAlpha;\n }\n\n /**\n * Sets the flag indicating whether the image has an alpha channel.\n * @param {boolean} v - The flag value.\n */\n set hasAlpha(v) {\n if (this._hasAlpha !== v) {\n this._hasAlpha = v;\n this._changed();\n }\n }\n\n /**\n * Gets the width of the image.\n * @returns {number} The width value.\n */\n get w() {\n return this._w;\n }\n\n /**\n * Sets the width of the image.\n * @param {number} l - The width value.\n */\n set w(l) {\n this._w = l;\n this._changed();\n }\n\n /**\n * Gets the height of the image.\n * @returns {number} The height value.\n */\n get h() {\n return this._h;\n }\n\n /**\n * Sets the height of the image.\n * @param {number} l - The height value.\n */\n set h(l) {\n this._h = l;\n this._changed();\n }\n\n /**\n * Checks if the image texture is valid.\n * @returns {boolean} True if valid, otherwise false.\n */\n _getIsValid() {\n return !!this._src;\n }\n\n /**\n * Gets the lookup ID of the image texture.\n * @returns {string} The lookup ID.\n */\n _getLookupId() {\n return this._src;\n }\n\n /**\n * Gets the source loader function for the image texture.\n * @returns {function} The source loader function.\n */\n _getSourceLoader() {\n const w = this._w;\n const h = this._h;\n let src = this._src;\n const hasAlpha = this._hasAlpha;\n if (this.stage.getOption('srcBasePath')) {\n const fc = src.charCodeAt(0);\n if (\n src.indexOf('//') === -1 &&\n ((fc >= 65 && fc <= 90) || (fc >= 97 && fc <= 122) || fc == 46)\n ) {\n // Alphabetical or dot: prepend base path.\n src = this.stage.getOption('srcBasePath') + src;\n }\n }\n\n return cb => {\n const fileType = checkFileType(src);\n switch (fileType) {\n case 'SVG':\n return createSvg(\n cb,\n this.stage,\n `data:image/svg+xml,${encodeURIComponent(src)}`,\n w,\n h\n );\n\n case 'Blob':\n return imageLoader({ src }, cb);\n default:\n return this.stage.platform.loadSrcTexture(\n { src: src, hasAlpha: hasAlpha },\n cb\n );\n }\n };\n }\n\n /**\n * Gets the non-default properties of the image texture.\n * @returns {object} The non-default properties.\n */\n getNonDefaults() {\n const obj = super.getNonDefaults();\n if (this._src) {\n obj.src = this._src;\n }\n return obj;\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport logger from '../globals/context/logger';\n\n/**\n *\n * Layout Utils\n *\n */\n\n/**\n * Copyright (c) 2009-2012 Jeremy Ashkenas, DocumentCloud\n * Licensed under the MIT License\n * Copyright (c) 2012-2018 The Debounce Contributors. See CONTRIBUTORS\n * Licensed under the MIT License\n */\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear'\n * that is a function which will clear the timer to prevent previously scheduled executions.\n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {function} function to wrap\n * @param {number} timeout in ms (`100`)\n * @param {boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nexport function debounce(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n }\n\n var debounced = function () {\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function () {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n debounced.flush = function () {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n\n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n}\n\nexport function getEuclideanDistance(xA, yA, xB, yB) {\n const xDiff = xA - xB;\n const yDiff = yA - yB;\n return Math.sqrt(Math.pow(xDiff, 2) + Math.sqrt(Math.pow(yDiff, 2)));\n}\n\n/**\n * Returns the shortest distance between a coordinate and a corner or center of an element.\n * @param {[number, number]} coordinate\n * @param {Element} element\n *\n * @return {number} shortest distance between a coordinate and a corner or center of an element.\n */\nexport function getShortestDistance(coordinate, element) {\n const [xA, yA] = coordinate;\n const [xB, yB] = element.core ? element.core.getAbsoluteCoords(0, 0) : [0, 0];\n\n const distanceToStart = getEuclideanDistance(xA, yA, xB, yB);\n const distanceToMiddle = getEuclideanDistance(\n xA,\n yA,\n xB + element.w / 2,\n yB + element.h / 2\n );\n const distanceToEnd = getEuclideanDistance(\n xA,\n yA,\n xB + element.w,\n yB + element.h\n );\n\n return Math.min(distanceToStart, distanceToMiddle, distanceToEnd);\n}\n\nexport function isComponentOnScreen(component, offsets = {}) {\n if (!component) return false;\n\n const {\n w,\n h,\n core: { renderContext: { px, py }, _scissor: scissor = [] } = {}\n } = component;\n const stageH = component.stage.h / component.stage.getRenderPrecision();\n const stageW = component.stage.w / component.stage.getRenderPrecision();\n\n let finalX = px;\n let finalY = py;\n // keep track of the different between the the absolute world position and relative position\n const relativeOffsetX = px - component.x;\n const relativeOffsetY = py - component.y;\n const offsetX = offsets.offsetX - relativeOffsetX || 0;\n const offsetY = offsets.offsetY - relativeOffsetY || 0;\n // if the current component is animating, apply the relative offset to the transition value\n if (component.transition('x')) {\n finalX = px - component.x + component.transition('x').targetValue;\n }\n if (component.transition('y')) {\n finalY = py - component.y + component.transition('y').targetValue;\n }\n // apply any offset passed into the function\n // this is mainly used to parent components that are transitioning,\n // like in the case of Rows nested inside of Columns where the Rows themselves do not animate,\n // but their parent container does\n finalX += offsetX;\n finalY += offsetY;\n\n const wVis = finalX >= 0 && finalX + w <= stageW;\n const hVis = finalY >= 0 && finalY + h <= stageH;\n\n if (!wVis || !hVis) return false;\n\n if (scissor && scissor.length) {\n const [\n leftBounds = null,\n topBounds = null,\n clipWidth = null,\n clipHeight = null\n ] = scissor;\n\n const withinLeftClippingBounds =\n Math.round(finalX + w) >= Math.round(leftBounds);\n const withinRightClippingBounds =\n Math.round(finalX) <= Math.round(leftBounds + clipWidth);\n const withinTopClippingBounds =\n Math.round(finalY + h) >= Math.round(topBounds);\n const withinBottomClippingBounds =\n Math.round(finalY + h) <= Math.round(topBounds + clipHeight);\n\n return (\n withinLeftClippingBounds &&\n withinRightClippingBounds &&\n withinTopClippingBounds &&\n withinBottomClippingBounds\n );\n }\n\n return true;\n}\n\n/**\n * Returns the width of an item based on upCount.\n *\n * @param {number} upCount\n * @returns {number}\n */\nexport function getWidthByUpCount(theme, upCount = 1) {\n const screenW = theme.layout.screenW;\n const columnCount = theme.layout.columnCount;\n const marginX = theme.layout.marginX;\n const gutterX = theme.layout.gutterX;\n\n if (upCount < 1 || upCount > columnCount) {\n console.error(\n `Column expects a number between 1 & ${columnCount}. Received ${upCount}`\n );\n return;\n }\n\n // the screen width, minus the margin x on each side\n const columnWidth = screenW - marginX * 2;\n // the total space of column gaps in between items\n const columnGapTotal = (upCount - 1) * gutterX;\n // the remaining amount of space left for all items\n const totalColumnsWidth = columnWidth - columnGapTotal;\n // the width of each item in that remaining width\n return totalColumnsWidth / upCount;\n}\n\n/**\n * Returns the width of an item based on how many columns to span.\n *\n * @param {number} columnSpan\n * @returns {number}\n */\nexport function getWidthByColumnSpan(theme, columnSpan) {\n const columnCount = theme.layout.columnCount;\n const gutterX = theme.layout.gutterX;\n\n return (\n getWidthByUpCount(theme, columnCount) * columnSpan +\n gutterX * (columnSpan - 1)\n );\n}\n\n/**\n * Returns the x position of a specified column number based on the theme's columnCount.\n *\n * @param {number} column\n * @returns {number}\n */\nexport function getColumnX(theme, column = 1) {\n const columnCount = theme.layout.columnCount;\n const marginX = theme.layout.marginX;\n const gutterX = theme.layout.gutterX;\n\n return marginX + (getWidthByUpCount(theme, columnCount) + gutterX) * column;\n}\n\n/**\n * Determines the width and height of an item based off the data passed into the item\n * (either all necessary parameters to calculate the dimensions dynamically,\n * OR all the necessary parameters to hard set the dimensions).\n *\n * @param { object } obj\n * @param { object } fallback\n *\n * @return { { number, number } }\n */\nexport function getDimensions(theme, obj = {}, fallback = {}) {\n const { w, h, ratioX, ratioY, upCount } = obj;\n const fallbackW = fallback.w || 0;\n const fallbackH = fallback.h || 0;\n let dimensions = {};\n\n // hard set width and height values were passed in and should override other params\n if (w && h) {\n dimensions = {\n w,\n h: h\n };\n } else if (h && ratioX && ratioY) {\n // hard set height and ratio values were passed in, meaning the row has items with mixed ratios, so the width needs to be calculated\n dimensions = {\n w: Math.round((h * ratioX) / ratioY),\n h: h\n };\n // calculate dynamic width and height based off item ratios\n } else if (ratioX && ratioY && upCount) {\n dimensions = getItemRatioDimensions(theme, ratioX, ratioY, upCount);\n } else if (h && upCount) {\n // calculate dynamic width based off a row upcount and a given height\n dimensions = {\n w: Math.round(getWidthByUpCount(theme, upCount)),\n h: h\n };\n } else if (h) {\n dimensions = {\n w: fallbackW,\n h: h\n };\n } else if (w) {\n dimensions = {\n w: w,\n h: fallbackH\n };\n } else {\n // not enough information was provided to properly size the component\n dimensions = {\n w: fallbackW,\n h: fallbackH\n };\n }\n\n dimensions = {\n ...dimensions,\n ratioX,\n ratioY,\n upCount\n };\n\n return dimensions;\n}\n\n/**\n * Calculates the width and height of an item based off the given ratios\n * and number of columns across the screen that should be visible before peaking\n *\n * @param { number } ratioX\n * @param { number } ratioY\n * @param { number } upCount\n *\n * @return { { number, number } }\n */\nexport function getItemRatioDimensions(theme, ratioX, ratioY, upCount) {\n let w, h;\n\n if (ratioX && ratioY && upCount) {\n w = Math.round(getWidthByUpCount(theme, upCount));\n h = Math.round((w / ratioX) * ratioY);\n } else {\n w = 0;\n h = 0;\n }\n return { w, h };\n}\n\n/**\n * /Layout utils\n */\n\nexport function getAspectRatioW(h, ratio = '16:9', seperator = ':') {\n const [ratioW, ratioH] = ratio.split(seperator);\n return h * (ratioW / ratioH);\n}\n\nexport function getAspectRatioH(w, ratio = '16:9', seperator = ':') {\n const [ratioW, ratioH] = ratio.split(seperator);\n return w / (ratioW / ratioH);\n}\n\n/**\n * Combines rgb hex string and alpha into argb hexadecimal number\n * @param {string|number} hex - 6 alphanumeric characters between 0-f or argb hexadecimal number\n * @param {number} [alpha] - number between 0-1 (0 is invisible, 1 is opaque)\n */\nexport function getHexColor(hex, alpha = 1) {\n if (!hex) {\n return 0x00;\n }\n\n if (typeof hex === 'number') {\n hex = hex.toString(16).slice(2);\n }\n\n hex = hex.replace('#', '');\n\n const hexAlpha = Math.round(alpha * 255).toString(16);\n const str = `0x${hexAlpha}${hex}`;\n return Number(str);\n}\n\n/**\n * Returns valid string of HEX color\n *\n * @param {string} color\n * @param {boolean} fill\n */\nexport function getValidColor(color) {\n if (typeof color === 'string' || typeof color === 'number') {\n if (/^0x[0-9a-fA-F]{8}/g.test(color)) {\n // User enters a valid 0x00000000 hex code\n return Number(color);\n } else if (/^#[0-9a-fA-F]{6}/g.test(color)) {\n // User enters valid #000000 hex code\n return getHexColor(color.substr(1, 6));\n } else if (typeof color === 'string' && /^[0-9]{8,10}/g.test(color)) {\n return parseInt(color);\n } else if (\n typeof color === 'number' &&\n /^[0-9]{8,10}/g.test(color.toString())\n ) {\n return color;\n } else if (typeof color === 'string' && color.indexOf('rgba') > -1) {\n return rgba2argb(color);\n } else if (typeof color === 'string' && color.indexOf('rgb') > -1) {\n const rgba = [...color.replace(/rgb\\(|\\)/g, '').split(','), '255'];\n return lng.StageUtils.getArgbNumber(rgba);\n }\n }\n return null;\n}\n\nfunction simplifyFraction([numerator, denominator]) {\n for (let i = numerator; i > 0; i--) {\n if (!(numerator % i) && !(denominator % i)) {\n return [numerator / i, denominator / i];\n }\n }\n}\n\n/**\n * Reduce a fraction represented as a string\n * @param {string} - a reprentation of a fraction in this format 16/9\n * @return {string} - a reduced representation of the fraction\n */\nexport function reduceFraction(string) {\n return simplifyFraction(string.split('/').map(n => +n)).join('/');\n}\n\n/**\n * Gets the value at `path` of `object`.\n * @param {object} object\n * @param {string|Array} path\n * @return {*} value if exists else undefined\n */\nexport const getValFromObjPath = (object, path) => {\n if (typeof path === 'string')\n path = path.split('.').filter(key => key.length);\n return path.reduce((dive, key) => dive && dive[key], object);\n};\n\n/**\n * Lightning uses ARGB values, use this function\n * to convert know color to Lightning value\n * https://ifpb.github.io/javascript-guide/ecma/expression-and-operator/argb.html\n */\nexport function rgba2argb(rgbaStr) {\n const rgba = rgbaStr.replace(/rgba\\(|\\)/g, '').split(',');\n // Multiple Alpha Value\n rgba[3] = rgba[3] * 255;\n return lng.StageUtils.getArgbNumber(rgba);\n}\n\nexport function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function lowercaseFirstLetter(string) {\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n/**\n * Helpers for lng.Tools.getRoundRect\n */\nexport const RoundRect = {\n /**\n * Returns a value that will render as the given width (w)\n * when passed to lng.Tools.getRoundRect\n * @param {number} w - px value for expected width\n * @param {*} options\n * @param {number} options.padding - px value for both left and right padding\n * @param {number} options.paddingLeft - px value for left padding, overrides options.padding\n * @param {number} options.paddingRight - px value for right padding, overrides options.padding\n * @param {number} options.strokeWidth - px value for stroke width\n */\n getWidth(w, options = {}) {\n const { padding, paddingLeft, paddingRight, strokeWidth } = {\n padding: 0,\n paddingLeft: 0,\n paddingRight: 0,\n strokeWidth: 0,\n ...options\n };\n\n if (!w) return 0;\n\n return (\n w - (paddingLeft || padding) - (paddingRight || padding) - strokeWidth\n );\n },\n /**\n * Returns a value that will render as the given height (h)\n * when passed to lng.Tools.getRoundRect\n * @param {number} h - px value for expected width\n * @param {*} options\n * @param {number} options.padding - px value for both bottom and top padding\n * @param {number} options.paddingBottom - px value for bottom padding, overrides options.padding\n * @param {number} options.paddingTop - px value for top padding, overrides options.padding\n * @param {number} options.strokeWidth - px value for stroke width\n */\n getHeight(h, options = {}) {\n const { padding, paddingBottom, paddingTop, strokeWidth } = {\n padding: 0,\n paddingBottom: 0,\n paddingTop: 0,\n strokeWidth: 0,\n ...options\n };\n\n if (!h) return 0;\n\n return (\n h - (paddingBottom || padding) - (paddingTop || padding) - strokeWidth\n );\n }\n};\n\n/**\n * Merges two objects together and returns the duplicate.\n *\n * @param {object} target - object to be cloned\n * @param {object} [object] - secondary object to merge into clone\n */\nexport function clone(target, object) {\n // Make sure getters and setters are applied correctly\n const _clone = Object.create(Object.getPrototypeOf(target));\n Object.defineProperties(_clone, Object.getOwnPropertyDescriptors(target));\n if (!object || target === object) return _clone;\n\n for (const key in object) {\n const value = object[key];\n if (target.hasOwnProperty(key)) {\n _clone[key] = getMergeValue(key, target, object);\n } else {\n _clone[key] = value;\n }\n }\n\n return _clone;\n}\n\nfunction getMergeValue(key, target, object) {\n const targetVal = target[key];\n const objectVal = object[key];\n const targetValType = typeof targetVal;\n const objectValType = typeof objectVal;\n\n if (\n targetValType !== objectValType ||\n objectValType === 'function' ||\n Array.isArray(objectVal)\n ) {\n return objectVal;\n }\n\n if (objectVal && objectValType === 'object') {\n return clone(targetVal, objectVal);\n }\n\n return objectVal;\n}\n\n/**\n * Returns the rendered width of a given text texture\n * @param {object} text - text texture properties\n * @param {string} text.text - text value\n * @param {string} text.fontStyle - css font-style property\n * @param {(string|number)} text.fontWeight - css font-weight property\n * @param {string} [fontSize=0] - css font-size property (in px)\n * @param {string} [text.fontFamily=sans-serif] - css font-weight property\n * @param {string} text.fontFace - alias for fontFamily\n *\n * @return {number} text width\n * */\nexport function measureTextWidth(text = {}) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const {\n fontStyle,\n fontWeight,\n fontSize,\n fontFamily = text.fontFace || 'sans-serif'\n } = text;\n const fontCss = [\n fontStyle,\n fontWeight,\n fontSize ? `${fontSize}px` : '0',\n `'${fontFamily}'`\n ]\n .filter(Boolean)\n .join(' ');\n ctx.font = fontCss;\n const textMetrics = ctx.measureText(text.text || '');\n\n return Math.round(textMetrics.width);\n}\n\n/**\n * Returns first argument that is a number. Useful for finding ARGB numbers. Does not convert strings to numbers\n * @param {...*} number - maybe a number\n **/\nexport function getFirstNumber(...numbers) {\n return numbers.find(Number.isFinite);\n}\n\n/**\n * Naively looks for dimensional prop (i.e. w, h, x, y, etc.), first searching for\n * a transition target value then defaulting to the current set value\n * @param {string} prop - property key\n * @param {lng.Component} component - Lightning component to operate against\n */\nexport function getDimension(prop, component) {\n if (!component) return 0;\n\n const transition = component.transition(prop);\n if (transition.isRunning()) return transition.targetValue;\n\n let renderProp = prop;\n if (prop === 'w') {\n renderProp = 'renderWidth';\n } else if (prop === 'h') {\n renderProp = 'renderHeight';\n }\n return component[renderProp] || component[prop];\n}\n\nexport const getX = component => getDimension('x', component);\nexport const getY = component => getDimension('y', component);\nexport const getW = component => getDimension('w', component);\nexport const getH = component => getDimension('h', component);\n\n/**\n * Array.prototype.flat() is not supported in WPE Browser\n *\n * @param {array} arr\n *\n * @return {array}\n */\nexport function flatten(arr) {\n return arr.reduce(\n (flat, toFlatten) =>\n flat.concat(Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten),\n []\n );\n}\n\nexport function objectPropertyOf(object, path) {\n return path.reduce(\n (obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined),\n object\n );\n}\n\nexport function stringifyCompare(objA, objB) {\n return JSON.stringify(objA) === JSON.stringify(objB);\n}\n\nexport function delayForAnimation(callback, delay = 16) {\n setTimeout(callback, delay);\n}\n\nexport function downloadFile(content, fileName, contentType) {\n const validContentTypes = ['plain', 'json'];\n if (!validContentTypes.includes(contentType)) {\n contentType = 'plain';\n }\n const dataStr =\n `data:text/${contentType};charset=utf-8,` +\n encodeURIComponent(JSON.stringify(content));\n const dlAnchorElem = document.createElement('a');\n dlAnchorElem.setAttribute('href', dataStr);\n dlAnchorElem.setAttribute('download', fileName);\n dlAnchorElem.click();\n}\n\nexport const degreesToRadians = deg => deg * (Math.PI / 180);\n\n/**\n *\n * Markup utils\n *\n */\n\nconst MARKUP_STRING_PATTERN = /({ICON.*?}|{BADGE:.*?}|{NEWLINE}|{TEXT:.*?})/g;\n\nexport function isMarkupString(str = '') {\n if (typeof str !== 'string') {\n return false;\n }\n return MARKUP_STRING_PATTERN.test(str);\n}\n\n/**\n * Returns an array of strings and icon, badge, newline, and text objects from a string using the syntax:\n * 'This is an {ICON:<title>|<url>} and {BADGE:<title>} badge test with a {NEWLINE} newline and {TEXT:<text>|<style>}.'\n *\n * i.e. 'This is an {ICON:settings|./assets/icons/settings.png} icon and {BADGE:HD} badge with a{NEWLINE} and {TEXT:red text|red}.'\n * would create the array:\n * [\n * 'This is an ',\n * { icon: './assets/icons/settings.png', title: 'settings' },\n * ' icon and ',\n * { badge: 'HD' },\n * ' badge with a',\n * { newline: true },\n * ' and ',\n * { text: 'red text', style: 'red' },\n * '.'\n * ]\n *\n * @param {(string|object)} str\n *\n * @return {array}\n */\nexport function parseInlineContent(str = '') {\n const content = [];\n if ((str && typeof str === 'string') || str.text) {\n const string = typeof str === 'string' ? str : str.text;\n const iconRegEx = /^{ICON:(.*?)?\\|(.*?)?}$/g;\n const badgeRegEx = /^{BADGE:(.*?)}$/g;\n const newlineRegEx = /^{NEWLINE}$/g;\n const textRegEx = /^{TEXT:(.*?)?\\|(.*?)?}$/g;\n\n const splitStr = string.split(MARKUP_STRING_PATTERN);\n\n if (splitStr && splitStr.length) {\n splitStr.forEach(item => {\n let formattedItem = item;\n const badge = badgeRegEx.exec(item);\n const icon = iconRegEx.exec(item);\n const newline = newlineRegEx.exec(item);\n const text = textRegEx.exec(item);\n\n if (badge && badge[1]) {\n formattedItem = { badge: badge[1] };\n } else if (icon && icon[1]) {\n formattedItem = { title: icon[1], icon: icon[2] || icon[1] };\n } else if (newline) {\n formattedItem = { newline: true };\n } else if (text && text[1]) {\n formattedItem = { text: text[1], style: text[2] };\n }\n content.push(formattedItem);\n });\n }\n }\n return content;\n}\n\n/**\n * Given any number of arguments, returns the greatest number passed to the function.\n * If no valid numbers are passed in (ex. NaN, undefined, null), `undefined` will be returned.\n * @param {...*} arguments Any number of arguments may be passed into the function.\n *\n * @return {number|undefined} The greatest number passed in as an argument or `undefined` if no valid number was passed in.\n */\nexport function max() {\n if (!arguments) {\n return;\n }\n\n const args = Array.from(arguments).filter(arg => !isNaN(arg) && arg != null);\n\n if (!args.length) {\n return;\n }\n\n return Math.max(...args);\n}\n\n/**\n * Abstracts logic for conditionally forcing a zIndex Context on a component so that\n * any child components with zIndex are relative to it, and not the global zIndex context.\n * @param {lng.Component} component\n * @param {number} zOffset\n */\nexport function createConditionalZContext(component, zOffset) {\n if (!component.zIndex && typeof zOffset !== 'undefined' && zOffset !== 0) {\n component.forceZIndexContext = true;\n component.zIndex = 0;\n }\n}\n\n/**\n * Runs a side effect function when any values of specified properties on an element change.\n * @param {object} options - defines the `element`, `watchProps`, and `sideEffect` options\n * @param {lng.Element} options.element - Lightning element on which property changes will watched\n * @param {String[]} options.watchProps - properties that when their value changes a side effect function is invoked\n * @param {function} options.sideEffect - function to be invoked when a watched property's value changes\n * @returns {lng.Element}\n */\nexport function watchForUpdates({\n element,\n watchProps = [],\n sideEffect = () => {}\n}) {\n if (!element?.isElement) {\n logger.error(\n `watchForUpdates: Expected a Lightning Element passed to element parameter, received ${typeof element}`\n );\n }\n\n const initialOnAfterUpdate = element.__core?._onAfterUpdate;\n\n element.onAfterUpdate = function (element) {\n let hasChanged = false;\n\n watchProps.forEach(prop => {\n if (element.transition(prop) && element.transition(prop).isRunning()) {\n return;\n }\n\n const prevValueKey = `__watchPrev${prop}`;\n const nextValue = element[prop];\n\n if (nextValue !== element[prevValueKey]) {\n element[prevValueKey] = nextValue;\n hasChanged = true;\n }\n });\n\n if (hasChanged) {\n sideEffect();\n }\n\n // if an element already has an onAfterUpdate function, preserve that behavior\n if (initialOnAfterUpdate) {\n initialOnAfterUpdate(element);\n }\n }.bind(this);\n\n return element;\n}\n\n/**\n * Given a Lightning text alignment option (left, right, center),\n * return the Lightning flexbox equivalent.\n *\n * @param {string} align\n * @returns {string}\n */\nexport function convertTextAlignToFlexJustify(align) {\n switch (align) {\n case 'left':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'right':\n return 'flex-end';\n default:\n // if there is no alignment passed in, the Lightning Text default is \"left\"\n console.warn(\n `Expected \"textAlign\" values are \"left,\" \"center,\" and \"right,\" but instead, ${align} was received and will fall back to \"left.\"`\n );\n return 'flex-start';\n }\n}\n\n/**\n * Prevents user input radius from inverting.\n *\n * @param {number} user input radius\n * @param {number} width\n * @param {number} height\n * @param {number} offset\n * @return {number} max radius for object before border begins to invert\n */\nexport function getMaxRoundRadius(radius, width, height, offset = 0) {\n const maxRadius = r =>\n Math.max(0, Math.min(r, Math.min(width, height) / 2) + offset);\n return Array.isArray(radius)\n ? radius.map(r => Number(maxRadius(r)) || 0)\n : Number(maxRadius(radius)) || 0;\n}\n\nconst utils = {\n isMarkupString,\n capitalizeFirstLetter,\n degreesToRadians,\n downloadFile,\n delayForAnimation,\n stringifyCompare,\n objectPropertyOf,\n flatten,\n getDimension,\n getFirstNumber,\n measureTextWidth,\n clone,\n getMergeValue,\n RoundRect,\n rgba2argb,\n getValFromObjPath,\n reduceFraction,\n getValidColor,\n getHexColor,\n getAspectRatioH,\n getAspectRatioW,\n getWidthByUpCount,\n getDimensions,\n getWidthByColumnSpan,\n createConditionalZContext,\n watchForUpdates,\n convertTextAlignToFlexJustify,\n getMaxRoundRadius\n};\n\nexport default utils;\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\nCreate a Lightning Object pool and then get the component from the pool.\n\nBy default we create two objects, with expectations that one is used at a time\n\nLearn more about object pools\nhttps://egghead.io/blog/object-pool-design-pattern\n*/\n\nconst pools = new Map();\n\nfunction get(key) {\n if (pools.has(key)) {\n const pool = pools.get(key);\n let index = pool.index;\n\n if (index >= pool.components.length) {\n index = 0;\n }\n pool.index = index + 1;\n\n return pool.components[index];\n }\n\n return false;\n}\n\nfunction clear() {\n pools.clear();\n}\n\nfunction create({ name, component, stage, size = 2 }) {\n if (pools.has(name)) {\n return get(name);\n }\n\n component = component || { type: name };\n const components = [];\n for (let i = 0; i < size; i++) {\n components.push(stage.c(component));\n }\n\n pools.set(name, {\n index: 0,\n components\n });\n\n return get(name);\n}\n\nexport default {\n get,\n create,\n clear\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { context } from '@lightningjs/ui-components/src';\n\n// creates an array of extensions\n// added to the theme by setTheme in themeSelect\n// const extensions = [];\n\nexport const themeSelectFromMessageEvent = event => {\n themeSelect(event.data.theme);\n};\n// called in ThemePicker\nexport const themeSelect = theme => {\n if (!theme) return;\n let targetTheme;\n switch (theme) {\n // Insert other themes to swap to here\n // Can also utilize the \"extensions\" array above to add to the theme\n default:\n targetTheme = {};\n break;\n }\n return targetTheme.name && context.theme.name !== targetTheme.name\n ? context.setTheme(targetTheme)\n : Promise.resolve();\n};\n\n// registers all window events needed on load\n// called in preview.js file\nexport const registerEventListeners = () => {\n // logger and stores themes\n context.debug = true;\n context.on('themeUpdate', () => {\n window.parent.postMessage('themeSet', '*');\n });\n\n // Prevent scrolling when navigating with arrows on canvas\n window.addEventListener(\n 'keydown',\n function (e) {\n if (\n ['Space', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].indexOf(\n e.code\n ) > -1\n ) {\n e.preventDefault();\n }\n },\n false\n );\n context.storybookCustomTheme = JSON.parse(JSON.stringify(context.theme));\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport 'lightningInspect';\nimport {\n withAnnouncer,\n Speech,\n pool,\n context\n} from '@lightningjs/ui-components/src';\nimport { themeSelectFromMessageEvent } from './.storybook/utils/registerEvents';\n\n/**\n * creates the Lightning App and attaches it to the DOM for use in Storybook\n * @returns Lightning App\n */\nexport const createApp = parameters => {\n // Make sure app is only created once if path=/story\n if (window.top.location.search.indexOf('path=/docs/') <= -1) {\n if (window.APP) return window.APP;\n }\n\n pool.clear();\n\n const announcerOptions = {\n language: 'en-US',\n ...parameters.announcerOptions\n };\n\n const appParams = {\n stage: {\n w: 1280,\n h: 720,\n precision: 2 / 3,\n canvas2d: false,\n useImageWorker: false,\n inspector: false,\n defaultFontFace: 'XfinityStandardMedium',\n fontSharp: {\n precision: 2 / 3,\n fontSize: 12\n }\n },\n debug: true\n };\n\n window.CONTEXT = context; // Used by addons\n\n window.APP = new (class LightningUIApp extends withAnnouncer(\n lng.Application,\n Speech,\n announcerOptions\n ) {\n _construct() {\n this.announcerTimeout = 15 * 1000;\n }\n\n _attach() {\n window.addEventListener('message', themeSelectFromMessageEvent, false);\n }\n\n $storyChanged() {\n this.emit('storyChanged');\n }\n\n _getFocused() {\n return ((this.childList.first || {}).childList || {}).first || this;\n }\n })(appParams);\n document.body.appendChild(window.APP.stage.getCanvas());\n return window.APP;\n};\n\nexport const clearInspector = () => {\n // Clear any lightning inspector info\n if (document.querySelectorAll('[type=StoryApp]').length > 1) {\n const div = document.querySelector('[type=StoryApp]');\n div && div.parentNode.remove();\n }\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n GridOverlay,\n context,\n utils,\n TextBox\n} from '@lightningjs/ui-components/src';\nimport { createApp, clearInspector } from '../../../index';\n\nlet previousID = null;\nlet remountProps = {};\n\n/**\n * returns true if any of the following are true\n * - if the selected story changed\n * - parameters.remountAll is true on the story\n * - an arg changes an its associated argType has a remount property set to true\n * @returns boolean of if the story component should remount\n */\nfunction shouldTriggerUpdate({ id, args, argTypes, parameters }) {\n const storyChanged = previousID !== id;\n let triggerUpdate = storyChanged;\n previousID = id;\n\n // create remountProps object to track which props should trigger remounting\n if (storyChanged) {\n remountProps = {};\n if (parameters.remountAll) {\n // track all props except mode for triggering remount\n Object.keys(args).forEach(key => {\n if (key === 'mode') {\n return;\n }\n remountProps[key] = args[key];\n });\n } else {\n // track only props with truthy remount property on their associated argType\n Object.keys(argTypes).forEach(key => {\n if (argTypes[key].remount) {\n remountProps[key] = args[key];\n }\n });\n }\n }\n\n // evaluate if any props tracked in remountProps changed and should trigger a remount\n Object.keys(remountProps).forEach(key => {\n if (remountProps[key] !== args[key]) {\n triggerUpdate = true;\n remountProps[key] = args[key];\n }\n });\n\n return triggerUpdate;\n}\n\n/** creates a global decorator that creates a single instance of the Lightning app */\n\nexport const withLightning = (\n StoryComponent,\n { id, args, argTypes, parameters, globals }\n) => {\n /**\n * the Lightning Element in the 'dom'\n */\n const app = createApp({ theme: globals.LUITheme });\n clearInspector();\n app.announcerEnabled = globals.announce;\n app.debug = globals.announce;\n // toggle stage color\n !globals.stageColor\n ? app.stage.setClearColor(utils.getValidColor('#21232A'))\n : app.stage.setClearColor(utils.getValidColor('#cccccc'));\n\n // // If an update is required patch in the new child element\n if (shouldTriggerUpdate({ id, args, argTypes, parameters })) {\n app.childList.clear();\n app.childList.a({\n StoryComponent: {\n type: class extends StoryComponent() {\n static _states() {\n return [\n class ModeUnfocusState extends this {\n _getFocused() {\n return this;\n }\n },\n class ModeFocusState extends this {\n _getFocused() {\n return this.componentTarget; // Text Element\n }\n }\n ];\n }\n // FIXME: Assess what config.optimization.minimize is doing different in production vs develop - this was prior to v7 upgrade\n get componentTarget() {\n // using this check on type Element because production vs develop build issue\n return this.childList.first instanceof lng.Component\n ? this.childList.first\n : this;\n }\n _init() {\n if (this.componentTarget) {\n // Notify application every time the style is updated. Used for componentStyles panel\n this.componentTarget.on('styleUpdated', () => {\n //FIXME: why are we setting this time out here and in setup?\n setTimeout(() => {\n this.fireAncestors('$storyChanged');\n });\n });\n }\n super._init();\n this._refocus(); // Force Lightning to reset focus\n }\n _setup() {\n // This ensures the component has its args before the first update cycle.\n if (Object.keys(args).length) {\n const argsToPatch = {};\n for (const prop in args) {\n // Apply arguments from controls\n const propValue =\n 'undefined' !== typeof args[prop]\n ? args[prop]\n : parameters.argTypes[prop].defaultValue;\n if (!parameters.argActions || !parameters.argActions[prop]) {\n argsToPatch[prop] = propValue;\n }\n }\n this.componentTarget.patch({\n ...argsToPatch\n });\n }\n\n setTimeout(() => {\n this.fireAncestors('$storyChanged');\n });\n }\n },\n w: w => w,\n h: h => h,\n x: context.theme.layout.marginX,\n y: context.theme.layout.marginY\n }\n });\n app._refocus();\n }\n\n // sets mode\n app\n .tag('StoryComponent')\n ._setState(\n !args.mode || (args.mode && args.mode === 'focused')\n ? 'ModeFocusState'\n : 'ModeUnfocusState'\n );\n //forces position update on theme change instead of just when triggerUpdate is true\n context.on('themeUpdate', () => {\n app.tag('StoryComponent') &&\n app.tag('StoryComponent').patch(\n parameters.storyDetails\n ? {\n x: context.theme.layout.marginX\n }\n : {\n x: context.theme.layout.marginX,\n y: context.theme.layout.marginY\n }\n );\n });\n if (!app.tag('GridOverlay')) {\n app.childList.a({ GridOverlay: { type: GridOverlay, zIndex: 100 } });\n }\n app.tag('GridOverlay').patch({\n // do not render this on top of the actual GridOverlay component's story\n alpha: id.includes('gridoverlay')\n ? 0\n : parseFloat(globals['GridOverlay-alpha']),\n showColumns: globals['GridOverlay-toggle-showColumns'] === 'true',\n showMargins: globals['GridOverlay-toggle-showMargins'] === 'true',\n showSafe: globals['GridOverlay-toggle-showSafe'] === 'true',\n showGutters: globals['GridOverlay-toggle-showGutters'] === 'true',\n showText: globals['GridOverlay-toggle-showText'] === 'true'\n });\n\n // add optional story description to the canvas\n if (parameters.storyDetails) {\n if (!app.tag('StoryDetails')) {\n const StoryDetails = {\n StoryDetails: {\n type: TextBox,\n content: parameters.storyDetails,\n style: {\n textStyle: {\n wordWrapWidth:\n context.theme.layout.screenW - context.theme.spacer.sm * 2\n }\n },\n x: context.theme.spacer.sm,\n y: context.theme.spacer.sm,\n onAfterUpdate: ({ y, h }) => {\n if (h > context.theme.layout.marginY) {\n app.tag('StoryComponent').y = y + h + context.theme.spacer.xl;\n }\n }\n }\n };\n app.childList.a(StoryDetails);\n }\n\n app.tag('StoryDetails').patch({ content: parameters.storyDetails });\n }\n\n /**\n * the first child under StoryComponent\n */\n const LightningUIComponent = app.tag('StoryComponent').childList.first;\n\n if (LightningUIComponent && Object.keys(args).length) {\n for (const prop in args) {\n // Apply arguments from controls\n const propValue =\n 'undefined' !== typeof args[prop]\n ? args[prop]\n : parameters.argTypes[prop].defaultValue;\n if (!parameters.argActions || !parameters.argActions[prop]) {\n LightningUIComponent[prop] = propValue;\n }\n }\n }\n // applying argAction\n if (\n LightningUIComponent &&\n parameters.argActions &&\n Object.keys(parameters.argActions).length\n ) {\n for (const prop in parameters.argActions) {\n if ('function' === typeof parameters.argActions[prop]) {\n try {\n parameters.argActions[prop](args[prop], app.tag('StoryComponent'));\n } catch (err) {\n console.error('unable to apply argAction for ' + prop);\n }\n }\n }\n return app.getCanvas();\n }\n return app.stage.getCanvas();\n};\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// these two lines need to be in this order\n// to wait until the inspector is enabled before attaching it\nimport { withLightning } from './addons/decorators/withLightning';\nimport { registerEventListeners, themeSelect } from './utils/registerEvents';\nimport { themes } from '@storybook/theming';\n\n// loads window event listeners\nregisterEventListeners();\n/**\n * custom global props that can be accessed in decorators and add-ons\n * globalTypes can only be set in preview.js\n * @see https://storybook.js.org/docs/react/essentials/toolbars-and-globals#globals\n */\nconst preview = {\n parameters: {\n actions: { argTypesRegex: '^on.*' },\n backgrounds: {\n disable: true\n },\n controls: {\n hideNoControlsWarning: true,\n expanded: true,\n sort: 'requiredFirst'\n },\n docs: {\n theme: themes.dark,\n argTypes: {\n sort: 'alpha',\n exclude: ['mode']\n }\n },\n options: {\n /** NOTE: v7 storySort must be self-contained function & no reference to outside variables\n https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#v7-style-story-sort\n */\n storySort: {\n method: 'alphabetical',\n order: [\n 'Docs',\n [\n 'Introduction',\n 'Read Me',\n 'Base',\n 'Contributing',\n 'Lightning Resources',\n 'Lightning Community Guide',\n 'Theming',\n [\n 'Overview',\n 'Component Config',\n 'Tones',\n 'Modes',\n 'Extensions',\n 'Subtheming',\n 'Use in Storybook',\n 'Theme Properties',\n '*'\n ],\n 'Unit Testing',\n [\n 'Overview',\n 'Test Renderer',\n 'Test Utils',\n ['makeCreateComponent', '*']\n ]\n ],\n 'Collections',\n 'Utilities',\n 'Components',\n 'Patterns',\n 'Templates'\n ]\n }\n }\n },\n globalTypes: {\n LUITheme: {\n name: 'Theme',\n description: 'Theme select',\n defaultValue: 'base'\n },\n 'GridOverlay-alpha': {\n defaultValue: '0'\n },\n 'GridOverlay-toggle-showColumns': {\n defaultValue: 'true'\n },\n 'GridOverlay-toggle-showMargins': {\n defaultValue: 'false'\n },\n 'GridOverlay-toggle-showSafe': {\n defaultValue: 'false'\n },\n 'GridOverlay-toggle-showGutters': {\n defaultValue: 'false'\n },\n 'GridOverlay-toggle-showText': {\n defaultValue: 'false'\n },\n announce: {\n defaultValue: false\n },\n stageColor: {\n defaultValue: false\n }\n },\n decorators: [withLightning],\n loaders: [\n async ({ globals }) => {\n await themeSelect(globals.LUITheme);\n return;\n }\n ]\n};\nexport default preview;\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = \"../../../node_modules/@storybook/core/dist/theming sync recursive\";\nmodule.exports = webpackEmptyContext;","var map = {\n\t\"./Overview.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/Overview.mdx\",\n\t\t5600,\n\t\t9436\n\t],\n\t\"./TestRenderer/create.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/TestRenderer/create.mdx\",\n\t\t5600,\n\t\t7557\n\t],\n\t\"./TestRenderer/toJSON.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/TestRenderer/toJSON.mdx\",\n\t\t5600,\n\t\t2012\n\t],\n\t\"./TestUtils/completeAnimation.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/completeAnimation.mdx\",\n\t\t5600,\n\t\t9738\n\t],\n\t\"./TestUtils/fastForward.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/fastForward.mdx\",\n\t\t5600,\n\t\t4942\n\t],\n\t\"./TestUtils/makeCreateComponent.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/makeCreateComponent.mdx\",\n\t\t5600,\n\t\t1200\n\t],\n\t\"./TestUtils/nextTick.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/TestUtils/nextTick.mdx\",\n\t\t5600,\n\t\t9221\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = \"../../@lightningjs/ui-components-test-utils/src/docs lazy recursive ^\\\\.\\\\/.*$ include: (?%21.*node_modules)(?:\\\\/@lightningjs\\\\/ui-components-test-utils\\\\/src\\\\/docs(?:\\\\/(?%21\\\\.)(?:(?:(?%21(?:^%7C\\\\/)\\\\.).)*?)\\\\/%7C\\\\/%7C$)(?%21\\\\.)(?=.)[^/]*?\\\\.mdx)$\";\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./Overview.mdx\": [\n\t\t\"../../@lightningjs/ui-components-test-utils/src/docs/Overview.mdx\",\n\t\t5600,\n\t\t9436\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = \"../../@lightningjs/ui-components-test-utils/src/docs lazy recursive ^\\\\.\\\\/.*$ include: (?%21.*node_modules)(?:\\\\/@lightningjs\\\\/ui-components-test-utils\\\\/src\\\\/docs\\\\/(?%21\\\\.)(?=.)[^/]*?\\\\.mdx)$\";\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./components/Artwork/Artwork.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Artwork/Artwork.mdx\",\n\t\t5600,\n\t\t1930,\n\t\t3121\n\t],\n\t\"./components/Badge/Badge.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Badge/Badge.mdx\",\n\t\t5600,\n\t\t1185\n\t],\n\t\"./components/Button/Button.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Button/Button.mdx\",\n\t\t5600,\n\t\t463\n\t],\n\t\"./components/Card/Card.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/Card.mdx\",\n\t\t5600,\n\t\t8007\n\t],\n\t\"./components/Card/CardRadio.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardRadio.mdx\",\n\t\t5600,\n\t\t3878,\n\t\t9172\n\t],\n\t\"./components/Card/CardSection.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardSection.mdx\",\n\t\t5600,\n\t\t3878,\n\t\t7972\n\t],\n\t\"./components/Card/CardTitle.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardTitle.mdx\",\n\t\t5600,\n\t\t3878,\n\t\t9983\n\t],\n\t\"./components/CardContent/CardContent.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContent.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t5225\n\t],\n\t\"./components/Checkbox/Checkbox.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Checkbox/Checkbox.mdx\",\n\t\t5600,\n\t\t669\n\t],\n\t\"./components/Column/Column.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Column/Column.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t2341,\n\t\t6243\n\t],\n\t\"./components/Control/Control.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Control/Control.mdx\",\n\t\t5600,\n\t\t4165\n\t],\n\t\"./components/ControlRow/ControlRow.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t1323,\n\t\t1735,\n\t\t8237\n\t],\n\t\"./components/FocusManager/FocusManager.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t7633\n\t],\n\t\"./components/Gradient/Gradient.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Gradient/Gradient.mdx\",\n\t\t5600,\n\t\t9367\n\t],\n\t\"./components/GridOverlay/GridOverlay.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.mdx\",\n\t\t5600,\n\t\t9153\n\t],\n\t\"./components/Icon/Icon.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Icon/Icon.mdx\",\n\t\t5600,\n\t\t3901\n\t],\n\t\"./components/InlineContent/InlineContent.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.mdx\",\n\t\t5600,\n\t\t377\n\t],\n\t\"./components/Input/Input.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Input/Input.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t2363,\n\t\t8593\n\t],\n\t\"./components/Key/Key.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Key/Key.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t3069,\n\t\t8901\n\t],\n\t\"./components/Keyboard/Keyboard.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/Keyboard.mdx\",\n\t\t5600,\n\t\t8613\n\t],\n\t\"./components/Knob/Knob.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Knob/Knob.mdx\",\n\t\t5600,\n\t\t3211\n\t],\n\t\"./components/Label/Label.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Label/Label.mdx\",\n\t\t5600,\n\t\t8601\n\t],\n\t\"./components/ListItem/ListItem.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItem.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t2067,\n\t\t9529\n\t],\n\t\"./components/ListItem/ListItemPicker.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItemPicker.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t2067,\n\t\t5316,\n\t\t6391\n\t],\n\t\"./components/ListItem/ListItemSlider.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItemSlider.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t4042,\n\t\t2067,\n\t\t3245,\n\t\t5146\n\t],\n\t\"./components/Marquee/Marquee.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Marquee/Marquee.mdx\",\n\t\t5600,\n\t\t8189\n\t],\n\t\"./components/MetadataBase/MetadataBase.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataBase/MetadataBase.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t6923\n\t],\n\t\"./components/MetadataCard/MetadataCard.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataCard/MetadataCard.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t3645\n\t],\n\t\"./components/MetadataCardContent/MetadataCardContent.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataCardContent/MetadataCardContent.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t6915,\n\t\t7365\n\t],\n\t\"./components/MetadataTile/MetadataTile.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataTile/MetadataTile.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t4077\n\t],\n\t\"./components/NavigationManager/NavigationManager.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t8965\n\t],\n\t\"./components/ProgressBar/ProgressBar.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ProgressBar/ProgressBar.mdx\",\n\t\t5600,\n\t\t7809\n\t],\n\t\"./components/Provider/Provider.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Provider/Provider.mdx\",\n\t\t5600,\n\t\t997\n\t],\n\t\"./components/Radio/Radio.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Radio/Radio.mdx\",\n\t\t5600,\n\t\t8225\n\t],\n\t\"./components/Row/Row.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Row/Row.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t1323,\n\t\t6361\n\t],\n\t\"./components/ScrollWrapper/ScrollWrapper.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4042,\n\t\t1137\n\t],\n\t\"./components/Shadow/Shadow.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Shadow/Shadow.mdx\",\n\t\t5600,\n\t\t3879\n\t],\n\t\"./components/Slider/Slider.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Slider/Slider.mdx\",\n\t\t5600,\n\t\t7525\n\t],\n\t\"./components/Surface/Surface.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Surface/Surface.mdx\",\n\t\t5600,\n\t\t8057\n\t],\n\t\"./components/TabBar/Tab.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TabBar/Tab.mdx\",\n\t\t5600,\n\t\t9023,\n\t\t4996\n\t],\n\t\"./components/TabBar/TabBar.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TabBar/TabBar.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t9023,\n\t\t643\n\t],\n\t\"./components/TextBox/TextBox.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TextBox/TextBox.mdx\",\n\t\t5600,\n\t\t3865\n\t],\n\t\"./components/Tile/Tile.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Tile/Tile.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3963\n\t],\n\t\"./components/TitleRow/TitleRow.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TitleRow/TitleRow.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t1323,\n\t\t6739\n\t],\n\t\"./components/Toggle/Toggle.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Toggle/Toggle.mdx\",\n\t\t5600,\n\t\t7043\n\t],\n\t\"./components/Tooltip/Tooltip.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t2833\n\t],\n\t\"./docs/Base.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/Base.mdx\",\n\t\t5600,\n\t\t9382\n\t],\n\t\"./docs/Introduction.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/Introduction.mdx\",\n\t\t5600,\n\t\t3485\n\t],\n\t\"./docs/LightningCommunityGuide.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/LightningCommunityGuide.mdx\",\n\t\t5600,\n\t\t2000\n\t],\n\t\"./docs/LightningResources.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/LightningResources.mdx\",\n\t\t5600,\n\t\t6636\n\t],\n\t\"./docs/Storybook.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/Storybook.mdx\",\n\t\t5600,\n\t\t879\n\t],\n\t\"./docs/Theming.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/Theming.mdx\",\n\t\t5600,\n\t\t6681\n\t],\n\t\"./docs/ThemingAttributes.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingAttributes.mdx\",\n\t\t5600,\n\t\t7538\n\t],\n\t\"./docs/ThemingComponentConfig.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingComponentConfig.mdx\",\n\t\t5600,\n\t\t696\n\t],\n\t\"./docs/ThemingExtensions.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingExtensions.mdx\",\n\t\t5600,\n\t\t2851\n\t],\n\t\"./docs/ThemingHierarchy.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingHierarchy.mdx\",\n\t\t5600,\n\t\t7190\n\t],\n\t\"./docs/ThemingMode.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingMode.mdx\",\n\t\t5600,\n\t\t7468\n\t],\n\t\"./docs/ThemingStorybook.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingStorybook.mdx\",\n\t\t5600,\n\t\t8543\n\t],\n\t\"./docs/ThemingSubTheming.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingSubTheming.mdx\",\n\t\t5600,\n\t\t4713\n\t],\n\t\"./docs/ThemingTone.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingTone.mdx\",\n\t\t5600,\n\t\t8773\n\t],\n\t\"./docs/ThemingTutorial.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingTutorial.mdx\",\n\t\t5600,\n\t\t6711\n\t],\n\t\"./mixins/withAnnouncer/withAnnouncer.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t5715\n\t],\n\t\"./mixins/withClassCache/withClassCache.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withClassCache/withClassCache.mdx\",\n\t\t5600,\n\t\t1105\n\t],\n\t\"./mixins/withEditItems/withEditItems.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withEditItems/withEditItems.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t1323,\n\t\t2555\n\t],\n\t\"./mixins/withHandleKey/withHandleKey.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withHandleKey/withHandleKey.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3515\n\t],\n\t\"./mixins/withLayout/withLayout.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withLayout/withLayout.mdx\",\n\t\t5600,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4433\n\t],\n\t\"./mixins/withMarqueeSync/withMarqueeSync.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.mdx\",\n\t\t5600,\n\t\t1587\n\t],\n\t\"./mixins/withSelections/withSelections.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withSelections/withSelections.mdx\",\n\t\t5600,\n\t\t5338,\n\t\t5675\n\t],\n\t\"./mixins/withTags/withTags.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withTags/withTags.mdx\",\n\t\t5600,\n\t\t8651\n\t],\n\t\"./mixins/withThemeStyles/withThemeStyles.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withThemeStyles/withThemeStyles.mdx\",\n\t\t5600,\n\t\t4947\n\t],\n\t\"./mixins/withUpdates/withUpdates.mdx\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withUpdates/withUpdates.mdx\",\n\t\t5600,\n\t\t4899\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = \"../../@lightningjs/ui-components/src lazy recursive ^\\\\.\\\\/.*$ include: (?%21.*node_modules)(?:\\\\/@lightningjs\\\\/ui-components\\\\/src(?:\\\\/(?%21\\\\.)(?:(?:(?%21(?:^%7C\\\\/)\\\\.).)*?)\\\\/%7C\\\\/%7C$)(?%21\\\\.)(?=.)[^/]*?\\\\.mdx)$\";\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./components/Artwork/Artwork.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Artwork/Artwork.stories.js\",\n\t\t1930,\n\t\t5139\n\t],\n\t\"./components/Artwork/Artwork.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Artwork/Artwork.stories.js\",\n\t\t1930,\n\t\t5139\n\t],\n\t\"./components/Badge/Badge.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js\",\n\t\t291\n\t],\n\t\"./components/Badge/Badge.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Badge/Badge.stories.js\",\n\t\t291\n\t],\n\t\"./components/Button/Button.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Button/Button.stories.js\",\n\t\t5338,\n\t\t7721\n\t],\n\t\"./components/Button/Button.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Button/Button.stories.js\",\n\t\t5338,\n\t\t7721\n\t],\n\t\"./components/Button/ButtonSmall.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Button/ButtonSmall.stories.js\",\n\t\t5338,\n\t\t6610\n\t],\n\t\"./components/Button/ButtonSmall.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Button/ButtonSmall.stories.js\",\n\t\t5338,\n\t\t6610\n\t],\n\t\"./components/Card/Card.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/Card.stories.js\",\n\t\t3878,\n\t\t2513\n\t],\n\t\"./components/Card/Card.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/Card.stories.js\",\n\t\t3878,\n\t\t2513\n\t],\n\t\"./components/Card/CardRadio.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardRadio.stories.js\",\n\t\t3878,\n\t\t9134\n\t],\n\t\"./components/Card/CardRadio.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardRadio.stories.js\",\n\t\t3878,\n\t\t9134\n\t],\n\t\"./components/Card/CardSection.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardSection.stories.js\",\n\t\t3878,\n\t\t5278\n\t],\n\t\"./components/Card/CardSection.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardSection.stories.js\",\n\t\t3878,\n\t\t5278\n\t],\n\t\"./components/Card/CardTitle.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardTitle.stories.js\",\n\t\t3878,\n\t\t1977\n\t],\n\t\"./components/Card/CardTitle.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Card/CardTitle.stories.js\",\n\t\t3878,\n\t\t1977\n\t],\n\t\"./components/CardContent/CardContent.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContent.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11\n\t],\n\t\"./components/CardContent/CardContent.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContent.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11\n\t],\n\t\"./components/CardContent/CardContentHorizontal.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentHorizontal.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t5367\n\t],\n\t\"./components/CardContent/CardContentHorizontal.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentHorizontal.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t5367\n\t],\n\t\"./components/CardContent/CardContentHorizontalLarge.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentHorizontalLarge.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t9856\n\t],\n\t\"./components/CardContent/CardContentHorizontalLarge.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentHorizontalLarge.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t9856\n\t],\n\t\"./components/CardContent/CardContentVertical.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentVertical.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t4485\n\t],\n\t\"./components/CardContent/CardContentVertical.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentVertical.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t4485\n\t],\n\t\"./components/CardContent/CardContentVerticalSmall.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentVerticalSmall.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t238\n\t],\n\t\"./components/CardContent/CardContentVerticalSmall.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/CardContent/CardContentVerticalSmall.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t3878,\n\t\t6915,\n\t\t11,\n\t\t238\n\t],\n\t\"./components/Checkbox/Checkbox.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Checkbox/Checkbox.stories.js\",\n\t\t6151\n\t],\n\t\"./components/Checkbox/Checkbox.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Checkbox/Checkbox.stories.js\",\n\t\t6151\n\t],\n\t\"./components/Checkbox/CheckboxSmall.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Checkbox/CheckboxSmall.stories.js\",\n\t\t8040\n\t],\n\t\"./components/Checkbox/CheckboxSmall.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Checkbox/CheckboxSmall.stories.js\",\n\t\t8040\n\t],\n\t\"./components/Column/Column.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Column/Column.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t2341\n\t],\n\t\"./components/Column/Column.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Column/Column.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t2341\n\t],\n\t\"./components/Control/Control.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Control/Control.stories.js\",\n\t\t5338,\n\t\t6095\n\t],\n\t\"./components/Control/Control.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Control/Control.stories.js\",\n\t\t5338,\n\t\t6095\n\t],\n\t\"./components/Control/ControlSmall.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Control/ControlSmall.stories.js\",\n\t\t5338,\n\t\t1735,\n\t\t2368\n\t],\n\t\"./components/Control/ControlSmall.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Control/ControlSmall.stories.js\",\n\t\t5338,\n\t\t1735,\n\t\t2368\n\t],\n\t\"./components/ControlRow/ControlRow.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t1323,\n\t\t1735,\n\t\t4759\n\t],\n\t\"./components/ControlRow/ControlRow.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ControlRow/ControlRow.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t1323,\n\t\t1735,\n\t\t4759\n\t],\n\t\"./components/FocusManager/FocusManager.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.stories.js\",\n\t\t5338,\n\t\t9251\n\t],\n\t\"./components/FocusManager/FocusManager.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/FocusManager/FocusManager.stories.js\",\n\t\t5338,\n\t\t9251\n\t],\n\t\"./components/Gradient/Gradient.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Gradient/Gradient.stories.js\",\n\t\t289\n\t],\n\t\"./components/Gradient/Gradient.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Gradient/Gradient.stories.js\",\n\t\t289\n\t],\n\t\"./components/GridOverlay/GridOverlay.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.stories.js\",\n\t\t4179\n\t],\n\t\"./components/GridOverlay/GridOverlay.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/GridOverlay/GridOverlay.stories.js\",\n\t\t4179\n\t],\n\t\"./components/Icon/Icon.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Icon/Icon.stories.js\",\n\t\t8311\n\t],\n\t\"./components/Icon/Icon.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Icon/Icon.stories.js\",\n\t\t8311\n\t],\n\t\"./components/InlineContent/InlineContent.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js\",\n\t\t9627\n\t],\n\t\"./components/InlineContent/InlineContent.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/InlineContent/InlineContent.stories.js\",\n\t\t9627\n\t],\n\t\"./components/Input/Input.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Input/Input.stories.js\",\n\t\t5338,\n\t\t2363,\n\t\t6115\n\t],\n\t\"./components/Input/Input.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Input/Input.stories.js\",\n\t\t5338,\n\t\t2363,\n\t\t6115\n\t],\n\t\"./components/Key/Key.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Key/Key.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t2639\n\t],\n\t\"./components/Key/Key.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Key/Key.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t2639\n\t],\n\t\"./components/Keyboard/Keyboard.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/Keyboard.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575\n\t],\n\t\"./components/Keyboard/Keyboard.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/Keyboard.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575\n\t],\n\t\"./components/Keyboard/KeyboardEmail.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardEmail.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t1677\n\t],\n\t\"./components/Keyboard/KeyboardEmail.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardEmail.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t1677\n\t],\n\t\"./components/Keyboard/KeyboardFullscreen.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardFullscreen.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t8892\n\t],\n\t\"./components/Keyboard/KeyboardFullscreen.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardFullscreen.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t8892\n\t],\n\t\"./components/Keyboard/KeyboardInput.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardInput.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t2363,\n\t\t2649\n\t],\n\t\"./components/Keyboard/KeyboardInput.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardInput.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t2363,\n\t\t2649\n\t],\n\t\"./components/Keyboard/KeyboardNumbers.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardNumbers.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t6691\n\t],\n\t\"./components/Keyboard/KeyboardNumbers.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardNumbers.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t6691\n\t],\n\t\"./components/Keyboard/KeyboardQwerty.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardQwerty.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t8035\n\t],\n\t\"./components/Keyboard/KeyboardQwerty.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardQwerty.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t8035\n\t],\n\t\"./components/Keyboard/KeyboardSearch.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardSearch.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t2643\n\t],\n\t\"./components/Keyboard/KeyboardSearch.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Keyboard/KeyboardSearch.stories.js\",\n\t\t5338,\n\t\t3069,\n\t\t8575,\n\t\t2643\n\t],\n\t\"./components/Knob/Knob.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Knob/Knob.stories.js\",\n\t\t1661\n\t],\n\t\"./components/Knob/Knob.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Knob/Knob.stories.js\",\n\t\t1661\n\t],\n\t\"./components/Label/Label.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Label/Label.stories.js\",\n\t\t6747\n\t],\n\t\"./components/Label/Label.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Label/Label.stories.js\",\n\t\t6747\n\t],\n\t\"./components/ListItem/ListItem.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItem.stories.js\",\n\t\t5338,\n\t\t2067,\n\t\t4827\n\t],\n\t\"./components/ListItem/ListItem.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItem.stories.js\",\n\t\t5338,\n\t\t2067,\n\t\t4827\n\t],\n\t\"./components/ListItem/ListItemPicker.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItemPicker.stories.js\",\n\t\t5338,\n\t\t5316,\n\t\t5137\n\t],\n\t\"./components/ListItem/ListItemPicker.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItemPicker.stories.js\",\n\t\t5338,\n\t\t5316,\n\t\t5137\n\t],\n\t\"./components/ListItem/ListItemSlider.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItemSlider.stories.js\",\n\t\t5338,\n\t\t4042,\n\t\t3245,\n\t\t4188\n\t],\n\t\"./components/ListItem/ListItemSlider.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ListItem/ListItemSlider.stories.js\",\n\t\t5338,\n\t\t4042,\n\t\t3245,\n\t\t4188\n\t],\n\t\"./components/Marquee/Marquee.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Marquee/Marquee.stories.js\",\n\t\t6423\n\t],\n\t\"./components/Marquee/Marquee.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Marquee/Marquee.stories.js\",\n\t\t6423\n\t],\n\t\"./components/MetadataBase/MetadataBase.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataBase/MetadataBase.stories.js\",\n\t\t7679,\n\t\t9725\n\t],\n\t\"./components/MetadataBase/MetadataBase.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataBase/MetadataBase.stories.js\",\n\t\t7679,\n\t\t9725\n\t],\n\t\"./components/MetadataCard/MetadataCard.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataCard/MetadataCard.stories.js\",\n\t\t7679,\n\t\t1655\n\t],\n\t\"./components/MetadataCard/MetadataCard.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataCard/MetadataCard.stories.js\",\n\t\t7679,\n\t\t1655\n\t],\n\t\"./components/MetadataCardContent/MetadataCardContent.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataCardContent/MetadataCardContent.stories.js\",\n\t\t7679,\n\t\t6915,\n\t\t287\n\t],\n\t\"./components/MetadataCardContent/MetadataCardContent.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataCardContent/MetadataCardContent.stories.js\",\n\t\t7679,\n\t\t6915,\n\t\t287\n\t],\n\t\"./components/MetadataTile/MetadataTile.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataTile/MetadataTile.stories.js\",\n\t\t7679,\n\t\t983\n\t],\n\t\"./components/MetadataTile/MetadataTile.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/MetadataTile/MetadataTile.stories.js\",\n\t\t7679,\n\t\t983\n\t],\n\t\"./components/NavigationManager/NavigationManager.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.stories.js\",\n\t\t5338,\n\t\t7807\n\t],\n\t\"./components/NavigationManager/NavigationManager.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/NavigationManager/NavigationManager.stories.js\",\n\t\t5338,\n\t\t7807\n\t],\n\t\"./components/ProgressBar/ProgressBar.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ProgressBar/ProgressBar.stories.js\",\n\t\t5427\n\t],\n\t\"./components/ProgressBar/ProgressBar.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ProgressBar/ProgressBar.stories.js\",\n\t\t5427\n\t],\n\t\"./components/Provider/Provider.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Provider/Provider.stories.js\",\n\t\t3327\n\t],\n\t\"./components/Provider/Provider.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Provider/Provider.stories.js\",\n\t\t3327\n\t],\n\t\"./components/Radio/Radio.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Radio/Radio.stories.js\",\n\t\t547\n\t],\n\t\"./components/Radio/Radio.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Radio/Radio.stories.js\",\n\t\t547\n\t],\n\t\"./components/Radio/RadioSmall.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Radio/RadioSmall.stories.js\",\n\t\t2932\n\t],\n\t\"./components/Radio/RadioSmall.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Radio/RadioSmall.stories.js\",\n\t\t2932\n\t],\n\t\"./components/Row/Row.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Row/Row.stories.js\",\n\t\t5338,\n\t\t1323\n\t],\n\t\"./components/Row/Row.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Row/Row.stories.js\",\n\t\t5338,\n\t\t1323\n\t],\n\t\"./components/ScrollWrapper/ScrollWrapper.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4042,\n\t\t7987\n\t],\n\t\"./components/ScrollWrapper/ScrollWrapper.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/ScrollWrapper/ScrollWrapper.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4042,\n\t\t7987\n\t],\n\t\"./components/Shadow/Shadow.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Shadow/Shadow.stories.js\",\n\t\t3153\n\t],\n\t\"./components/Shadow/Shadow.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Shadow/Shadow.stories.js\",\n\t\t3153\n\t],\n\t\"./components/Slider/Slider.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Slider/Slider.stories.js\",\n\t\t4042,\n\t\t3375\n\t],\n\t\"./components/Slider/Slider.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Slider/Slider.stories.js\",\n\t\t4042,\n\t\t3375\n\t],\n\t\"./components/Slider/SliderLarge.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Slider/SliderLarge.stories.js\",\n\t\t4042,\n\t\t8232\n\t],\n\t\"./components/Slider/SliderLarge.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Slider/SliderLarge.stories.js\",\n\t\t4042,\n\t\t8232\n\t],\n\t\"./components/Surface/Surface.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Surface/Surface.stories.js\",\n\t\t7771\n\t],\n\t\"./components/Surface/Surface.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Surface/Surface.stories.js\",\n\t\t7771\n\t],\n\t\"./components/TabBar/Tab.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TabBar/Tab.stories.js\",\n\t\t9023,\n\t\t46\n\t],\n\t\"./components/TabBar/Tab.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TabBar/Tab.stories.js\",\n\t\t9023,\n\t\t46\n\t],\n\t\"./components/TabBar/TabBar.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TabBar/TabBar.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t9023,\n\t\t8197\n\t],\n\t\"./components/TabBar/TabBar.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TabBar/TabBar.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t9023,\n\t\t8197\n\t],\n\t\"./components/TextBox/TextBox.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js\",\n\t\t8027\n\t],\n\t\"./components/TextBox/TextBox.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TextBox/TextBox.stories.js\",\n\t\t8027\n\t],\n\t\"./components/Tile/Tile.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Tile/Tile.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t2877\n\t],\n\t\"./components/Tile/Tile.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Tile/Tile.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t2877\n\t],\n\t\"./components/TitleRow/TitleRow.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TitleRow/TitleRow.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t1323,\n\t\t9861\n\t],\n\t\"./components/TitleRow/TitleRow.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/TitleRow/TitleRow.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t1323,\n\t\t9861\n\t],\n\t\"./components/Toggle/Toggle.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Toggle/Toggle.stories.js\",\n\t\t7061\n\t],\n\t\"./components/Toggle/Toggle.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Toggle/Toggle.stories.js\",\n\t\t7061\n\t],\n\t\"./components/Toggle/ToggleSmall.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Toggle/ToggleSmall.stories.js\",\n\t\t5358\n\t],\n\t\"./components/Toggle/ToggleSmall.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Toggle/ToggleSmall.stories.js\",\n\t\t5358\n\t],\n\t\"./components/Tooltip/Tooltip.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.stories.js\",\n\t\t5338,\n\t\t9459\n\t],\n\t\"./components/Tooltip/Tooltip.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/components/Tooltip/Tooltip.stories.js\",\n\t\t5338,\n\t\t9459\n\t],\n\t\"./docs/ThemingFoundations.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingFoundations.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t6491\n\t],\n\t\"./docs/ThemingFoundations.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/docs/ThemingFoundations.stories.js\",\n\t\t5338,\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t6491\n\t],\n\t\"./mixins/withAnnouncer/withAnnouncer.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.stories.js\",\n\t\t5338,\n\t\t133\n\t],\n\t\"./mixins/withAnnouncer/withAnnouncer.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withAnnouncer/withAnnouncer.stories.js\",\n\t\t5338,\n\t\t133\n\t],\n\t\"./mixins/withEditItems/withEditItems.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withEditItems/withEditItems.stories.js\",\n\t\t5338,\n\t\t1323,\n\t\t3597\n\t],\n\t\"./mixins/withEditItems/withEditItems.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withEditItems/withEditItems.stories.js\",\n\t\t5338,\n\t\t1323,\n\t\t3597\n\t],\n\t\"./mixins/withHandleKey/withHandleKey.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withHandleKey/withHandleKey.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4637\n\t],\n\t\"./mixins/withHandleKey/withHandleKey.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withHandleKey/withHandleKey.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4637\n\t],\n\t\"./mixins/withLayout/withLayout.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withLayout/withLayout.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4563\n\t],\n\t\"./mixins/withLayout/withLayout.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withLayout/withLayout.stories.js\",\n\t\t7679,\n\t\t1930,\n\t\t8527,\n\t\t4563\n\t],\n\t\"./mixins/withMarqueeSync/withMarqueeSync.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.stories.js\",\n\t\t1909\n\t],\n\t\"./mixins/withMarqueeSync/withMarqueeSync.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withMarqueeSync/withMarqueeSync.stories.js\",\n\t\t1909\n\t],\n\t\"./mixins/withSelections/withSelections.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withSelections/withSelections.stories.js\",\n\t\t5338,\n\t\t8477\n\t],\n\t\"./mixins/withSelections/withSelections.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withSelections/withSelections.stories.js\",\n\t\t5338,\n\t\t8477\n\t],\n\t\"./mixins/withTags/withTags.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withTags/withTags.stories.js\",\n\t\t6282\n\t],\n\t\"./mixins/withTags/withTags.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withTags/withTags.stories.js\",\n\t\t6282\n\t],\n\t\"./mixins/withThemeStyles/withThemeStyles.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withThemeStyles/withThemeStyles.stories.js\",\n\t\t9285\n\t],\n\t\"./mixins/withThemeStyles/withThemeStyles.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withThemeStyles/withThemeStyles.stories.js\",\n\t\t9285\n\t],\n\t\"./mixins/withUpdates/withUpdates.stories\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withUpdates/withUpdates.stories.js\",\n\t\t8853\n\t],\n\t\"./mixins/withUpdates/withUpdates.stories.js\": [\n\t\t\"../../@lightningjs/ui-components/src/mixins/withUpdates/withUpdates.stories.js\",\n\t\t8853\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = \"../../@lightningjs/ui-components/src lazy recursive ^\\\\.\\\\/.*$ include: (?%21.*node_modules)(?:\\\\/@lightningjs\\\\/ui-components\\\\/src(?:\\\\/(?%21\\\\.)(?:(?:(?%21(?:^%7C\\\\/)\\\\.).)*?)\\\\/%7C\\\\/%7C$)(?%21\\\\.)(?=.)[^/]*?\\\\.stories\\\\.(js%7Cjsx%7Cts%7Ctsx))$\";\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./Contributing.mdx\": [\n\t\t\"./src/Contributing.mdx\",\n\t\t5600,\n\t\t4073\n\t],\n\t\"./Readme.mdx\": [\n\t\t\"./src/Readme.mdx\",\n\t\t5600,\n\t\t7511\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = \"./src lazy recursive ^\\\\.\\\\/.*$ include: (?%21.*node_modules)(?:\\\\/src\\\\/(?%21\\\\.)(?=.)[^/]*?\\\\.mdx)$\";\nmodule.exports = webpackAsyncContext;","const pipeline = (x) => x();\n\nconst importers = [\n async (path) => {\n if (!/^\\.[\\\\/](?:src\\/(?!\\.)(?=.)[^/]*?\\.mdx)$/.exec(path)) {\n return;\n }\n \n const pathRemainder = path.substring(6);\n return import(\n /* webpackChunkName: \"[request]\" */\n /* webpackInclude: /(?!.*node_modules)(?:\\/src\\/(?!\\.)(?=.)[^/]*?\\.mdx)$/ */\n './src/' + pathRemainder\n );\n }\n ,\n async (path) => {\n if (!/^(?:\\.\\.\\/\\.\\.\\/@lightningjs\\/ui-components\\/src(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.mdx)$/.exec(path)) {\n return;\n }\n \n const pathRemainder = path.substring(37);\n return import(\n /* webpackChunkName: \"[request]\" */\n /* webpackInclude: /(?!.*node_modules)(?:\\/@lightningjs\\/ui-components\\/src(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.mdx)$/ */\n '../../@lightningjs/ui-components/src/' + pathRemainder\n );\n }\n ,\n async (path) => {\n if (!/^(?:\\.\\.\\/\\.\\.\\/@lightningjs\\/ui-components\\/src(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.stories\\.(js|jsx|ts|tsx))$/.exec(path)) {\n return;\n }\n \n const pathRemainder = path.substring(37);\n return import(\n /* webpackChunkName: \"[request]\" */\n /* webpackInclude: /(?!.*node_modules)(?:\\/@lightningjs\\/ui-components\\/src(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.stories\\.(js|jsx|ts|tsx))$/ */\n '../../@lightningjs/ui-components/src/' + pathRemainder\n );\n }\n ,\n async (path) => {\n if (!/^(?:\\.\\.\\/\\.\\.\\/@lightningjs\\/ui-components-test-utils\\/src\\/docs\\/(?!\\.)(?=.)[^/]*?\\.mdx)$/.exec(path)) {\n return;\n }\n \n const pathRemainder = path.substring(53);\n return import(\n /* webpackChunkName: \"[request]\" */\n /* webpackInclude: /(?!.*node_modules)(?:\\/@lightningjs\\/ui-components-test-utils\\/src\\/docs\\/(?!\\.)(?=.)[^/]*?\\.mdx)$/ */\n '../../@lightningjs/ui-components-test-utils/src/docs/' + pathRemainder\n );\n }\n ,\n async (path) => {\n if (!/^(?:\\.\\.\\/\\.\\.\\/@lightningjs\\/ui-components-test-utils\\/src\\/docs(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.mdx)$/.exec(path)) {\n return;\n }\n \n const pathRemainder = path.substring(53);\n return import(\n /* webpackChunkName: \"[request]\" */\n /* webpackInclude: /(?!.*node_modules)(?:\\/@lightningjs\\/ui-components-test-utils\\/src\\/docs(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.mdx)$/ */\n '../../@lightningjs/ui-components-test-utils/src/docs/' + pathRemainder\n );\n }\n \n];\n\nexport async function importFn(path) {\n for (let i = 0; i < importers.length; i++) {\n const moduleExports = await pipeline(() => importers[i](path));\n if (moduleExports) {\n return moduleExports;\n }\n }\n}","import { global } from '@storybook/global';\n\nimport { ClientApi, PreviewWeb, addons, composeConfigs } from 'storybook/internal/preview-api';\nimport { createBrowserChannel } from 'storybook/internal/channels';\n\nimport { importFn } from './storybook-stories.js';\n\nconst getProjectAnnotations = () =>\ncomposeConfigs([require('/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/html/dist/entry-preview.mjs'),require('/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/html/dist/entry-preview-docs.mjs'),require('/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-essentials/dist/actions/preview.mjs'),require('/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-essentials/dist/highlight/preview.mjs'),require('/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-docs/dist/preview.mjs'),require('/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/packages/apps/lightning-ui-docs/.storybook/preview.js'),]);\n\nconst channel = createBrowserChannel({ page: 'preview' });\naddons.setChannel(channel);\n\nif (global.CONFIG_TYPE === 'DEVELOPMENT'){\nwindow.__STORYBOOK_SERVER_CHANNEL__ = channel;\n}\n\nconst preview = new PreviewWeb(importFn, getProjectAnnotations);\n\nwindow.__STORYBOOK_PREVIEW__ = preview;\nwindow.__STORYBOOK_STORY_STORE__ = preview.storyStore;\nwindow.__STORYBOOK_ADDONS_CHANNEL__ = channel;\n\nif (import.meta.webpackHot) {\nimport.meta.webpackHot.accept('./storybook-stories.js', () => {\n// importFn has changed so we need to patch the new one in\npreview.onStoriesChanged({ importFn });\n});\n\nimport.meta.webpackHot.accept(['/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/html/dist/entry-preview.mjs','/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/html/dist/entry-preview-docs.mjs','/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-essentials/dist/actions/preview.mjs','/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-essentials/dist/highlight/preview.mjs','/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-docs/dist/preview.mjs','/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/packages/apps/lightning-ui-docs/.storybook/preview.js',], () => {\n// getProjectAnnotations has changed so we need to patch the new one in\npreview.onGetProjectAnnotationsChanged({ getProjectAnnotations });\n});\n}","module.exports = __STORYBOOK_MODULE_CHANNELS__;","module.exports = __STORYBOOK_MODULE_CLIENT_LOGGER__;","module.exports = __STORYBOOK_MODULE_CORE_EVENTS_PREVIEW_ERRORS__;","module.exports = __STORYBOOK_MODULE_CORE_EVENTS__;","module.exports = __STORYBOOK_MODULE_GLOBAL__;","module.exports = __STORYBOOK_MODULE_PREVIEW_API__;"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/mixins-withLongPress-withLongPress-mdx.005470d9.iframe.bundle.js b/mixins-withLongPress-withLongPress-mdx.005470d9.iframe.bundle.js new file mode 100644 index 000000000..e26be1e6c --- /dev/null +++ b/mixins-withLongPress-withLongPress-mdx.005470d9.iframe.bundle.js @@ -0,0 +1,738 @@ +(self["webpackChunklightning_ui_docs"] = self["webpackChunklightning_ui_docs"] || []).push([[3195,4877],{ + +/***/ "../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.mdx": +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MDXContent) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../../../node_modules/react/index.js"); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../../../node_modules/react/jsx-runtime.js"); +/* harmony import */ var _home_runner_work_Lightning_UI_Components_Lightning_UI_Components_node_modules_storybook_addon_docs_dist_shims_mdx_react_shim_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("../../../node_modules/@storybook/addon-docs/node_modules/@mdx-js/react/lib/index.js"); +/* harmony import */ var _storybook_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("../../../node_modules/@storybook/blocks/dist/index.mjs"); +/* harmony import */ var _withLongPress_stories__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.stories.js"); + + + +/*prettier-ignore*/ +/* +Copyright 2023 Comcast Cable Communications Management, LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +SPDX-License-Identifier: Apache-2.0 +\*/ + + + + +function _createMdxContent(props) { + const _components = { + a: "a", + code: "code", + h1: "h1", + h2: "h2", + h3: "h3", + h4: "h4", + p: "p", + pre: "pre", + table: "table", + tbody: "tbody", + td: "td", + th: "th", + thead: "thead", + tr: "tr", + ...(0,_home_runner_work_Lightning_UI_Components_Lightning_UI_Components_node_modules_storybook_addon_docs_dist_shims_mdx_react_shim_mjs__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), + ...props.components + }; + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: ["\n", "\n", "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_storybook_blocks__WEBPACK_IMPORTED_MODULE_3__/* .Meta */ .W8, { + of: _withLongPress_stories__WEBPACK_IMPORTED_MODULE_4__ + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h1, { + id: "withlongpress", + children: "withLongPress" + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { + children: ["The ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { + children: "withLongPress" + }), " mixin can be wrapped around a parent component to handle key events with a long press to trigger additional behaviors as desired."] + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { + id: "source", + children: "Source" + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { + href: "https://github.com/rdkcentral/Lightning-UI-Components/blob/develop/packages/@lightningjs/ui-components/src/mixins/withLongPress/index.js", + rel: "nofollow", + children: "https://github.com/rdkcentral/Lightning-UI-Components/blob/develop/packages/@lightningjs/ui-components/src/mixins/withLongPress/index.js" + }) + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { + id: "usage", + children: "Usage" + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { + children: "A consumer of this mixin must also supply a threshold property value in milliseconds to the element being wrapped to overwrite the default time of 2000ms." + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { + children: "The threshold property dictates how much time will pass in milliseconds before a secondary behavior gets triggered." + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { + className: "language-js", + children: "class Example extends lng.Component {\n static _template() {\n return {\n MyTile: {\n type: withLongPress(Tile),\n threshold: 4000\n }\n };\n }\n\n $longPressHit(keyValue) {\n console.log(`long press detected on key ${keyValue}`);\n }\n\n $longPressEnd(keyValue) {\n console.log(`long press ended on key ${keyValue}`);\n }\n}\n" + }) + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { + children: "Take a look at the preview above. Tile component is using the withLongPress mixin.\nIf you press any key and hold for the threshold time (2 seconds) on the tile, you should see a text notification that longpress was detected on the given key and a notification when it ends." + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { + id: "properties", + children: "Properties" + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { + children: "name" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { + children: "type" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { + children: "required" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { + children: "default" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { + children: "description" + })] + }) + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { + children: "continuousExecution" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { + children: "boolean" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { + children: "true" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { + children: "false" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { + children: "Will allow continuous execution of long press signal, on interval of threshold value, while keypress is held" + })] + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { + children: "threshold" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { + children: "number" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { + children: "false" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { + children: "2000" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { + children: "Number in milliseconds to indicate how much time should pass during key down to trigger a long press signal" + })] + })] + })] + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { + id: "fireancestors", + children: "FireAncestors" + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { + id: "longpresshit", + children: "$longPressHit" + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { + children: "Fired when a keydown event lasts longer than the threshold value provided (default 2000ms), it supplies the key value of the peypress event as an argument." + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { + id: "longpressend", + children: "$longPressEnd" + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { + children: "Fired from a keyup event occurs after a long press." + })] + }); +} +function MDXContent(props = {}) { + const {wrapper: MDXLayout} = { + ...(0,_home_runner_work_Lightning_UI_Components_Lightning_UI_Components_node_modules_storybook_addon_docs_dist_shims_mdx_react_shim_mjs__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), + ...props.components + }; + return MDXLayout ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(MDXLayout, { + ...props, + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_createMdxContent, { + ...props + }) + }) : _createMdxContent(props); +} + + +/***/ }), + +/***/ "../../../node_modules/@storybook/addon-docs/node_modules/@mdx-js/react/lib/index.js": +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ R: () => (/* binding */ useMDXComponents), +/* harmony export */ x: () => (/* binding */ MDXProvider) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../../../node_modules/react/index.js"); +/** + * @typedef {import('mdx/types.js').MDXComponents} MDXComponents + * @typedef {import('react').Component<{}, {}, unknown>} Component + * @typedef {import('react').ReactNode} ReactNode + */ + +/** + * @callback MergeComponents + * Custom merge function. + * @param {Readonly<MDXComponents>} currentComponents + * Current components from the context. + * @returns {MDXComponents} + * Additional components. + * + * @typedef Props + * Configuration for `MDXProvider`. + * @property {ReactNode | null | undefined} [children] + * Children (optional). + * @property {Readonly<MDXComponents> | MergeComponents | null | undefined} [components] + * Additional components to use or a function that creates them (optional). + * @property {boolean | null | undefined} [disableParentContext=false] + * Turn off outer component context (default: `false`). + */ + + + +/** @type {Readonly<MDXComponents>} */ +const emptyComponents = {} + +const MDXContext = react__WEBPACK_IMPORTED_MODULE_0__.createContext(emptyComponents) + +/** + * Get current components from the MDX Context. + * + * @param {Readonly<MDXComponents> | MergeComponents | null | undefined} [components] + * Additional components to use or a function that creates them (optional). + * @returns {MDXComponents} + * Current components. + */ +function useMDXComponents(components) { + const contextComponents = react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext) + + // Memoize to avoid unnecessary top-level context changes + return react__WEBPACK_IMPORTED_MODULE_0__.useMemo( + function () { + // Custom merge via a function prop + if (typeof components === 'function') { + return components(contextComponents) + } + + return {...contextComponents, ...components} + }, + [contextComponents, components] + ) +} + +/** + * Provider for MDX context. + * + * @param {Readonly<Props>} properties + * Properties. + * @returns {JSX.Element} + * Element. + * @satisfies {Component} + */ +function MDXProvider(properties) { + /** @type {Readonly<MDXComponents>} */ + let allComponents + + if (properties.disableParentContext) { + allComponents = + typeof properties.components === 'function' + ? properties.components(emptyComponents) + : properties.components || emptyComponents + } else { + allComponents = useMDXComponents(properties.components) + } + + return react__WEBPACK_IMPORTED_MODULE_0__.createElement( + MDXContext.Provider, + {value: allComponents}, + properties.children + ) +} + + +/***/ }), + +/***/ "../../@lightningjs/ui-components/src/components/Surface/Surface.js": +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ Surface) +}); + +// NAMESPACE OBJECT: ../../@lightningjs/ui-components/src/components/Surface/Surface.styles.js +var Surface_styles_namespaceObject = {}; +__webpack_require__.r(Surface_styles_namespaceObject); +__webpack_require__.d(Surface_styles_namespaceObject, { + base: () => (base), + mode: () => (mode), + tone: () => (tone) +}); + +// EXTERNAL MODULE: ../../@lightningjs/ui-components/src/utils/index.js +var utils = __webpack_require__("../../@lightningjs/ui-components/src/utils/index.js"); +// EXTERNAL MODULE: ../../@lightningjs/ui-components/src/components/Base/Base.js + 2 modules +var Base = __webpack_require__("../../@lightningjs/ui-components/src/components/Base/Base.js"); +;// CONCATENATED MODULE: ../../@lightningjs/ui-components/src/components/Surface/Surface.styles.js +/** + * Copyright 2023 Comcast Cable Communications Management, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +var base = function base(theme) { + return { + backgroundColor: theme.color.interactiveNeutral, + radius: theme.radius.md, + animation: {} + }; +}; +var tone = function tone(theme) { + return { + inverse: { + backgroundColor: theme.color.interactiveInverse + } + }; +}; +var mode = function mode(theme) { + return { + focused: { + backgroundColor: theme.color.interactiveNeutralFocus, + tone: { + inverse: { + backgroundColor: theme.color.interactiveInverseFocus + } + } + }, + disabled: { + backgroundColor: theme.color.fillNeutralDisabled + } + }; +}; +// EXTERNAL MODULE: ../../../node_modules/@lightningjs/core/dist/lightning.esm.js +var lightning_esm = __webpack_require__("../../../node_modules/@lightningjs/core/dist/lightning.esm.js"); +;// CONCATENATED MODULE: ../../@lightningjs/ui-components/src/components/Surface/Surface.js +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +/** + * Copyright 2023 Comcast Cable Communications Management, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + + + + + +var Surface = /*#__PURE__*/function (_Base) { + function Surface() { + _classCallCheck(this, Surface); + return _callSuper(this, Surface, arguments); + } + _inherits(Surface, _Base); + return _createClass(Surface, [{ + key: "innerH", + get: function get() { + return this.h; + } + }, { + key: "innerW", + get: function get() { + return this.w; + } + }, { + key: "_update", + value: function _update() { + this._updateLayout(); + this._updateScale(); + } + }, { + key: "_updateLayout", + value: function _updateLayout() { + this._Background.patch({ + texture: lightning_esm/* default */.A.Tools.getRoundRect(this.innerW - 2, + // Reference the underscored values here in cause the h or w getters need to be overwritten for alignment - see Tile + this.innerH - 2, (0,utils/* getMaxRoundRadius */.XG)(this.style.radius, this.w, this.h), 0, null, true, this.style.backgroundColor) + }); + } + }, { + key: "_updateScale", + value: function _updateScale() { + var scale = this._isFocusedMode ? this.getFocusScale(this.w, this.h) : this.getUnfocusScale(this.w, this.h); + this.applySmooth(this, { + scale: scale + }, { + scale: [scale, this.style.animation] + }); + } + }], [{ + key: "_template", + value: function _template() { + return { + Background: {} + }; + } + }, { + key: "__componentName", + get: function get() { + return 'Surface'; + } + }, { + key: "__themeStyle", + get: function get() { + return Surface_styles_namespaceObject; + } + }, { + key: "properties", + get: function get() { + return []; + } + }, { + key: "tags", + get: function get() { + return ['Background']; + } + }]); +}(Base/* default */.A); + + +/***/ }), + +/***/ "../../../node_modules/@storybook/core/dist/components sync recursive": +/***/ ((module) => { + +function webpackEmptyContext(req) { + var e = new Error("Cannot find module '" + req + "'"); + e.code = 'MODULE_NOT_FOUND'; + throw e; +} +webpackEmptyContext.keys = () => ([]); +webpackEmptyContext.resolve = webpackEmptyContext; +webpackEmptyContext.id = "../../../node_modules/@storybook/core/dist/components sync recursive"; +module.exports = webpackEmptyContext; + +/***/ }), + +/***/ "../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.stories.js": +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__webpack_require__.r(__webpack_exports__); + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + __namedExportsOrder: () => (/* binding */ __namedExportsOrder), + "default": () => (/* binding */ withLongPress_stories), + withLongPress: () => (/* binding */ withLongPress) +}); + +// EXTERNAL MODULE: ../../../node_modules/@lightningjs/core/dist/lightning.esm.js +var lightning_esm = __webpack_require__("../../../node_modules/@lightningjs/core/dist/lightning.esm.js"); +// EXTERNAL MODULE: ../../@lightningjs/ui-components/src/components/Tile/Tile.js + 1 modules +var Tile = __webpack_require__("../../@lightningjs/ui-components/src/components/Tile/Tile.js"); +;// CONCATENATED MODULE: ../../@lightningjs/ui-components/src/mixins/withLongPress/index.js +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _superPropGet(t, e, o, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; } +function _get() { return _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); } +function _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +/** + * Copyright 2023 Comcast Cable Communications Management, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +function withLongPress_withLongPress(Base) { + return /*#__PURE__*/function (_Base) { + function _class() { + _classCallCheck(this, _class); + return _callSuper(this, _class, arguments); + } + _inherits(_class, _Base); + return _createClass(_class, [{ + key: "threshold", + get: function get() { + return this._threshold; + }, + set: function set(value) { + this._threshold = value; + } + }, { + key: "continuousExecution", + set: function set(val) { + this._continuousExecution = val; + } + }, { + key: "_construct", + value: function _construct() { + this._pressedTimeStart = null; + this._hasExecuted = false; + this._threshold = 2000; + _superPropGet(_class, "_construct", this, 3)([]); + } + + /** + * this will handle only key down events + * it will grab a reference start time stamp and compare it to any subsequent key down events' timestamp values + * when we meet the set threshold time in seconds, we will execute a supplied callback method + * */ + }, { + key: "_handleKey", + value: function _handleKey(keyEvent) { + // capture the key event time stamp the first time through to use as a reference. + if (!this._firstPressed) { + this._firstPressed = this._pressedTimeStart = keyEvent.timeStamp; + _superPropGet(_class, "_handleKey", this, 3)([keyEvent]); + } + // check latest keyEvent time stamp against the start time stamp and see if the difference + // is greater than the threshold + if ( + // eslint-disable-next-line no-constant-condition + this._pressedTimeStart && keyEvent.timeStamp - this._pressedTimeStart >= this.threshold) { + // short circuit here if we only want to execute once before a key up event + if (!this._continuousExecution && this._hasExecuted) { + return; + } + this.fireAncestors('$longPressHit', keyEvent.key); + if (this._continuousExecution) { + this._pressedTimeStart += this.threshold; + } else { + this._hasExecuted = true; + this._pressedTimeStart = null; + } + } + } + + /** + * this will handle only key up events + * */ + }, { + key: "_handleKeyRelease", + value: function _handleKeyRelease(keyEvent) { + if (keyEvent.timeStamp - this._firstPressed >= this.threshold) { + this.fireAncestors('$longPressEnd', keyEvent.key); + } + this._firstPressed = null; + this._pressedTimeStart = null; + this._hasExecuted = false; + _superPropGet(_class, "_handleKeyRelease", this, 3)([keyEvent]); + } + }], [{ + key: "name", + get: function get() { + return Base.name; + } + }]); + }(Base); +} +// EXTERNAL MODULE: ../../@lightningjs/ui-components/src/components/TextBox/TextBox.js + 1 modules +var TextBox = __webpack_require__("../../@lightningjs/ui-components/src/components/TextBox/TextBox.js"); +;// CONCATENATED MODULE: ../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.stories.js +/** + * Copyright 2023 Comcast Cable Communications Management, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + + + + + +/* harmony default export */ const withLongPress_stories = ({ + title: 'Utilities/withLongPress' +}); +const withLongPress = args => { + class withLongPress extends lightning_esm/* default */.A.Component { + static _template() { + return { + Tile: { + type: withLongPress_withLongPress(Tile/* default */.A), + src: 'https://image.tmdb.org/t/p/w500/zHdQ6yaqDf3OQO5uhr0auAgwK6O.jpg', + w: 320, + h: 180, + threshold: args.threshold, + continuousExecution: args.continuousExecution + }, + Notification: { + y: 220, + type: TextBox/* default */.A, + style: { + textStyle: { + maxLines: 3 + } + }, + alpha: 0 + } + }; + } + _init() { + super._init(); + } + get _continuousExecution() { + return this.tag('Tile')._continuousExecution; + } + $longPressHit(data) { + this.tag('Notification').patch({ + content: `Long Press detected on ${data}` + }); + this.tag('Notification').setSmooth('alpha', 1); + !this._continuousExecution && setTimeout(() => { + this.tag('Notification').setSmooth('alpha', 0); + }, 2000); + } + $longPressEnd() { + this.tag('Notification').setSmooth('alpha', 0); + } + _getFocused() { + return this.tag('Tile'); + } + } + return withLongPress_withLongPress(withLongPress); +}; +withLongPress.storyName = 'withLongPress'; +withLongPress.args = { + threshold: 2000, + continuousExecution: false +}; +withLongPress.argTypes = { + threshold: { + control: { + type: 'number', + min: 1000 + }, + description: 'Time in ms to trigger long press', + table: { + defaultValue: { + summary: 2000 + } + } + }, + continuousExecution: { + control: { + type: 'boolean' + }, + description: 'execute long press action continuously when threshold is met again', + table: { + defaultValue: { + summary: false + } + } + } +}; +; +const __namedExportsOrder = ["withLongPress"]; +withLongPress.parameters = { + ...withLongPress.parameters, + docs: { + ...withLongPress.parameters?.docs, + source: { + originalSource: "args => {\n class withLongPress extends lng.Component {\n static _template() {\n return {\n Tile: {\n type: withLongPressMixin(Tile),\n src: 'https://image.tmdb.org/t/p/w500/zHdQ6yaqDf3OQO5uhr0auAgwK6O.jpg',\n w: 320,\n h: 180,\n threshold: args.threshold,\n continuousExecution: args.continuousExecution\n },\n Notification: {\n y: 220,\n type: TextBox,\n style: {\n textStyle: {\n maxLines: 3\n }\n },\n alpha: 0\n }\n };\n }\n _init() {\n super._init();\n }\n get _continuousExecution() {\n return this.tag('Tile')._continuousExecution;\n }\n $longPressHit(data) {\n this.tag('Notification').patch({\n content: `Long Press detected on ${data}`\n });\n this.tag('Notification').setSmooth('alpha', 1);\n !this._continuousExecution && setTimeout(() => {\n this.tag('Notification').setSmooth('alpha', 0);\n }, 2000);\n }\n $longPressEnd() {\n this.tag('Notification').setSmooth('alpha', 0);\n }\n _getFocused() {\n return this.tag('Tile');\n }\n }\n return withLongPressMixin(withLongPress);\n}", + ...withLongPress.parameters?.docs?.source + } + } +}; + +/***/ }), + +/***/ "../../../node_modules/memoizerific sync recursive": +/***/ ((module) => { + +function webpackEmptyContext(req) { + var e = new Error("Cannot find module '" + req + "'"); + e.code = 'MODULE_NOT_FOUND'; + throw e; +} +webpackEmptyContext.keys = () => ([]); +webpackEmptyContext.resolve = webpackEmptyContext; +webpackEmptyContext.id = "../../../node_modules/memoizerific sync recursive"; +module.exports = webpackEmptyContext; + +/***/ }) + +}]); +//# sourceMappingURL=mixins-withLongPress-withLongPress-mdx.005470d9.iframe.bundle.js.map \ No newline at end of file diff --git a/mixins-withLongPress-withLongPress-mdx.005470d9.iframe.bundle.js.map b/mixins-withLongPress-withLongPress-mdx.005470d9.iframe.bundle.js.map new file mode 100644 index 000000000..f1765793c --- /dev/null +++ b/mixins-withLongPress-withLongPress-mdx.005470d9.iframe.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mixins-withLongPress-withLongPress-mdx.005470d9.iframe.bundle.js","mappings":";;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAOA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAtDA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;;;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AACA;AAAA;AALA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAjEA;AACA;AAAA;AAAA;AAkEA;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.mdx","webpack://lightning-ui-docs/../../../node_modules/@storybook/addon-docs/node_modules/@mdx-js/react/lib/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Surface/Surface.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Surface/Surface.js","webpack://lightning-ui-docs/../../../node_modules/@storybook/core/dist/components/ sync","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withLongPress/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.stories.js","webpack://lightning-ui-docs/../../../node_modules/memoizerific/ sync"],"sourcesContent":["\nimport React from 'react';\n\n/*prettier-ignore*/\n/*\nCopyright 2023 Comcast Cable Communications Management, LLC\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nSPDX-License-Identifier: Apache-2.0\n\\*/\nimport {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from \"react/jsx-runtime\";\nimport {useMDXComponents as _provideComponents} from \"/home/runner/work/Lightning-UI-Components/Lightning-UI-Components/node_modules/@storybook/addon-docs/dist/shims/mdx-react-shim.mjs\";\nimport {Meta} from '@storybook/blocks';\nimport * as withLongPressStories from './withLongPress.stories';\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n p: \"p\",\n pre: \"pre\",\n table: \"table\",\n tbody: \"tbody\",\n td: \"td\",\n th: \"th\",\n thead: \"thead\",\n tr: \"tr\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [\"\\n\", \"\\n\", \"\\n\", _jsx(Meta, {\n of: withLongPressStories\n }), \"\\n\", _jsx(_components.h1, {\n id: \"withlongpress\",\n children: \"withLongPress\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The \", _jsx(_components.code, {\n children: \"withLongPress\"\n }), \" mixin can be wrapped around a parent component to handle key events with a long press to trigger additional behaviors as desired.\"]\n }), \"\\n\", _jsx(_components.h2, {\n id: \"source\",\n children: \"Source\"\n }), \"\\n\", _jsx(_components.p, {\n children: _jsx(_components.a, {\n href: \"https://github.com/rdkcentral/Lightning-UI-Components/blob/develop/packages/@lightningjs/ui-components/src/mixins/withLongPress/index.js\",\n rel: \"nofollow\",\n children: \"https://github.com/rdkcentral/Lightning-UI-Components/blob/develop/packages/@lightningjs/ui-components/src/mixins/withLongPress/index.js\"\n })\n }), \"\\n\", _jsx(_components.h2, {\n id: \"usage\",\n children: \"Usage\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"A consumer of this mixin must also supply a threshold property value in milliseconds to the element being wrapped to overwrite the default time of 2000ms.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"The threshold property dictates how much time will pass in milliseconds before a secondary behavior gets triggered.\"\n }), \"\\n\", _jsx(_components.pre, {\n children: _jsx(_components.code, {\n className: \"language-js\",\n children: \"class Example extends lng.Component {\\n static _template() {\\n return {\\n MyTile: {\\n type: withLongPress(Tile),\\n threshold: 4000\\n }\\n };\\n }\\n\\n $longPressHit(keyValue) {\\n console.log(`long press detected on key ${keyValue}`);\\n }\\n\\n $longPressEnd(keyValue) {\\n console.log(`long press ended on key ${keyValue}`);\\n }\\n}\\n\"\n })\n }), \"\\n\", _jsx(_components.p, {\n children: \"Take a look at the preview above. Tile component is using the withLongPress mixin.\\nIf you press any key and hold for the threshold time (2 seconds) on the tile, you should see a text notification that longpress was detected on the given key and a notification when it ends.\"\n }), \"\\n\", _jsx(_components.h3, {\n id: \"properties\",\n children: \"Properties\"\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: \"name\"\n }), _jsx(_components.th, {\n children: \"type\"\n }), _jsx(_components.th, {\n children: \"required\"\n }), _jsx(_components.th, {\n children: \"default\"\n }), _jsx(_components.th, {\n children: \"description\"\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"continuousExecution\"\n }), _jsx(_components.td, {\n children: \"boolean\"\n }), _jsx(_components.td, {\n children: \"true\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"Will allow continuous execution of long press signal, on interval of threshold value, while keypress is held\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"threshold\"\n }), _jsx(_components.td, {\n children: \"number\"\n }), _jsx(_components.td, {\n children: \"false\"\n }), _jsx(_components.td, {\n children: \"2000\"\n }), _jsx(_components.td, {\n children: \"Number in milliseconds to indicate how much time should pass during key down to trigger a long press signal\"\n })]\n })]\n })]\n }), \"\\n\", _jsx(_components.h3, {\n id: \"fireancestors\",\n children: \"FireAncestors\"\n }), \"\\n\", _jsx(_components.h4, {\n id: \"longpresshit\",\n children: \"$longPressHit\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Fired when a keydown event lasts longer than the threshold value provided (default 2000ms), it supplies the key value of the peypress event as an argument.\"\n }), \"\\n\", _jsx(_components.h4, {\n id: \"longpressend\",\n children: \"$longPressEnd\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Fired from a keyup event occurs after a long press.\"\n })]\n });\n}\nexport default function MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\n","/**\n * @typedef {import('mdx/types.js').MDXComponents} MDXComponents\n * @typedef {import('react').Component<{}, {}, unknown>} Component\n * @typedef {import('react').ReactNode} ReactNode\n */\n\n/**\n * @callback MergeComponents\n * Custom merge function.\n * @param {Readonly<MDXComponents>} currentComponents\n * Current components from the context.\n * @returns {MDXComponents}\n * Additional components.\n *\n * @typedef Props\n * Configuration for `MDXProvider`.\n * @property {ReactNode | null | undefined} [children]\n * Children (optional).\n * @property {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @property {boolean | null | undefined} [disableParentContext=false]\n * Turn off outer component context (default: `false`).\n */\n\nimport React from 'react'\n\n/** @type {Readonly<MDXComponents>} */\nconst emptyComponents = {}\n\nconst MDXContext = React.createContext(emptyComponents)\n\n/**\n * Get current components from the MDX Context.\n *\n * @param {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @returns {MDXComponents}\n * Current components.\n */\nexport function useMDXComponents(components) {\n const contextComponents = React.useContext(MDXContext)\n\n // Memoize to avoid unnecessary top-level context changes\n return React.useMemo(\n function () {\n // Custom merge via a function prop\n if (typeof components === 'function') {\n return components(contextComponents)\n }\n\n return {...contextComponents, ...components}\n },\n [contextComponents, components]\n )\n}\n\n/**\n * Provider for MDX context.\n *\n * @param {Readonly<Props>} properties\n * Properties.\n * @returns {JSX.Element}\n * Element.\n * @satisfies {Component}\n */\nexport function MDXProvider(properties) {\n /** @type {Readonly<MDXComponents>} */\n let allComponents\n\n if (properties.disableParentContext) {\n allComponents =\n typeof properties.components === 'function'\n ? properties.components(emptyComponents)\n : properties.components || emptyComponents\n } else {\n allComponents = useMDXComponents(properties.components)\n }\n\n return React.createElement(\n MDXContext.Provider,\n {value: allComponents},\n properties.children\n )\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n backgroundColor: theme.color.interactiveNeutral,\n radius: theme.radius.md,\n animation: {}\n});\n\nexport const tone = theme => ({\n inverse: {\n backgroundColor: theme.color.interactiveInverse\n }\n});\n\nexport const mode = theme => ({\n focused: {\n backgroundColor: theme.color.interactiveNeutralFocus,\n tone: {\n inverse: {\n backgroundColor: theme.color.interactiveInverseFocus\n }\n }\n },\n disabled: {\n backgroundColor: theme.color.fillNeutralDisabled\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getMaxRoundRadius } from '../../utils';\nimport Base from '../Base';\nimport * as styles from './Surface.styles';\nimport lng from '@lightningjs/core';\n\nexport default class Surface extends Base {\n static _template() {\n return {\n Background: {}\n };\n }\n\n static get __componentName() {\n return 'Surface';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get properties() {\n return [];\n }\n\n static get tags() {\n return ['Background'];\n }\n\n get innerH() {\n return this.h;\n }\n\n get innerW() {\n return this.w;\n }\n\n _update() {\n this._updateLayout();\n this._updateScale();\n }\n\n _updateLayout() {\n this._Background.patch({\n texture: lng.Tools.getRoundRect(\n this.innerW - 2, // Reference the underscored values here in cause the h or w getters need to be overwritten for alignment - see Tile\n this.innerH - 2,\n getMaxRoundRadius(this.style.radius, this.w, this.h),\n 0,\n null,\n true,\n this.style.backgroundColor\n )\n });\n }\n\n _updateScale() {\n const scale = this._isFocusedMode\n ? this.getFocusScale(this.w, this.h)\n : this.getUnfocusScale(this.w, this.h);\n\n this.applySmooth(this, { scale }, { scale: [scale, this.style.animation] });\n }\n}\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = \"../../../node_modules/@storybook/core/dist/components sync recursive\";\nmodule.exports = webpackEmptyContext;","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport default function withLongPress(Base) {\n return class extends Base {\n static get name() {\n return Base.name;\n }\n\n set threshold(value) {\n this._threshold = value;\n }\n\n get threshold() {\n return this._threshold;\n }\n\n set continuousExecution(val) {\n this._continuousExecution = val;\n }\n\n _construct() {\n this._pressedTimeStart = null;\n this._hasExecuted = false;\n this._threshold = 2000;\n super._construct();\n }\n\n /**\n * this will handle only key down events\n * it will grab a reference start time stamp and compare it to any subsequent key down events' timestamp values\n * when we meet the set threshold time in seconds, we will execute a supplied callback method\n * */\n _handleKey(keyEvent) {\n // capture the key event time stamp the first time through to use as a reference.\n if (!this._firstPressed) {\n this._firstPressed = this._pressedTimeStart = keyEvent.timeStamp;\n super._handleKey(keyEvent);\n }\n // check latest keyEvent time stamp against the start time stamp and see if the difference\n // is greater than the threshold\n if (\n // eslint-disable-next-line no-constant-condition\n this._pressedTimeStart &&\n keyEvent.timeStamp - this._pressedTimeStart >= this.threshold\n ) {\n // short circuit here if we only want to execute once before a key up event\n if (!this._continuousExecution && this._hasExecuted) {\n return;\n }\n this.fireAncestors('$longPressHit', keyEvent.key);\n if (this._continuousExecution) {\n this._pressedTimeStart += this.threshold;\n } else {\n this._hasExecuted = true;\n this._pressedTimeStart = null;\n }\n }\n }\n\n /**\n * this will handle only key up events\n * */\n _handleKeyRelease(keyEvent) {\n if (keyEvent.timeStamp - this._firstPressed >= this.threshold) {\n this.fireAncestors('$longPressEnd', keyEvent.key);\n }\n this._firstPressed = null;\n this._pressedTimeStart = null;\n this._hasExecuted = false;\n super._handleKeyRelease(keyEvent);\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport Tile from '../../components/Tile/Tile';\nimport withLongPressMixin from '.';\nimport TextBox from '../../components/TextBox';\n\nexport default {\n title: 'Utilities/withLongPress'\n};\n\nexport const withLongPress = args => {\n class withLongPress extends lng.Component {\n static _template() {\n return {\n Tile: {\n type: withLongPressMixin(Tile),\n src: 'https://image.tmdb.org/t/p/w500/zHdQ6yaqDf3OQO5uhr0auAgwK6O.jpg',\n w: 320,\n h: 180,\n threshold: args.threshold,\n continuousExecution: args.continuousExecution\n },\n Notification: {\n y: 220,\n type: TextBox,\n style: { textStyle: { maxLines: 3 } },\n alpha: 0\n }\n };\n }\n _init() {\n super._init();\n }\n\n get _continuousExecution() {\n return this.tag('Tile')._continuousExecution;\n }\n\n $longPressHit(data) {\n this.tag('Notification').patch({\n content: `Long Press detected on ${data}`\n });\n this.tag('Notification').setSmooth('alpha', 1);\n\n !this._continuousExecution &&\n setTimeout(() => {\n this.tag('Notification').setSmooth('alpha', 0);\n }, 2000);\n }\n\n $longPressEnd() {\n this.tag('Notification').setSmooth('alpha', 0);\n }\n\n _getFocused() {\n return this.tag('Tile');\n }\n }\n\n return withLongPressMixin(withLongPress);\n};\n\nwithLongPress.storyName = 'withLongPress';\n\nwithLongPress.args = {\n threshold: 2000,\n continuousExecution: false\n};\n\nwithLongPress.argTypes = {\n threshold: {\n control: { type: 'number', min: 1000 },\n description: 'Time in ms to trigger long press',\n table: { defaultValue: { summary: 2000 } }\n },\n continuousExecution: {\n control: { type: 'boolean' },\n description:\n 'execute long press action continuously when threshold is met again',\n table: { defaultValue: { summary: false } }\n }\n};\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = \"../../../node_modules/memoizerific sync recursive\";\nmodule.exports = webpackEmptyContext;"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/mixins-withLongPress-withLongPress-stories.b806bbe8.iframe.bundle.js b/mixins-withLongPress-withLongPress-stories.b806bbe8.iframe.bundle.js new file mode 100644 index 000000000..f0b271559 --- /dev/null +++ b/mixins-withLongPress-withLongPress-stories.b806bbe8.iframe.bundle.js @@ -0,0 +1,443 @@ +"use strict"; +(self["webpackChunklightning_ui_docs"] = self["webpackChunklightning_ui_docs"] || []).push([[4877],{ + +/***/ "../../@lightningjs/ui-components/src/components/Surface/Surface.js": +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + A: () => (/* binding */ Surface) +}); + +// NAMESPACE OBJECT: ../../@lightningjs/ui-components/src/components/Surface/Surface.styles.js +var Surface_styles_namespaceObject = {}; +__webpack_require__.r(Surface_styles_namespaceObject); +__webpack_require__.d(Surface_styles_namespaceObject, { + base: () => (base), + mode: () => (mode), + tone: () => (tone) +}); + +// EXTERNAL MODULE: ../../@lightningjs/ui-components/src/utils/index.js +var utils = __webpack_require__("../../@lightningjs/ui-components/src/utils/index.js"); +// EXTERNAL MODULE: ../../@lightningjs/ui-components/src/components/Base/Base.js + 2 modules +var Base = __webpack_require__("../../@lightningjs/ui-components/src/components/Base/Base.js"); +;// CONCATENATED MODULE: ../../@lightningjs/ui-components/src/components/Surface/Surface.styles.js +/** + * Copyright 2023 Comcast Cable Communications Management, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +var base = function base(theme) { + return { + backgroundColor: theme.color.interactiveNeutral, + radius: theme.radius.md, + animation: {} + }; +}; +var tone = function tone(theme) { + return { + inverse: { + backgroundColor: theme.color.interactiveInverse + } + }; +}; +var mode = function mode(theme) { + return { + focused: { + backgroundColor: theme.color.interactiveNeutralFocus, + tone: { + inverse: { + backgroundColor: theme.color.interactiveInverseFocus + } + } + }, + disabled: { + backgroundColor: theme.color.fillNeutralDisabled + } + }; +}; +// EXTERNAL MODULE: ../../../node_modules/@lightningjs/core/dist/lightning.esm.js +var lightning_esm = __webpack_require__("../../../node_modules/@lightningjs/core/dist/lightning.esm.js"); +;// CONCATENATED MODULE: ../../@lightningjs/ui-components/src/components/Surface/Surface.js +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +/** + * Copyright 2023 Comcast Cable Communications Management, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + + + + + +var Surface = /*#__PURE__*/function (_Base) { + function Surface() { + _classCallCheck(this, Surface); + return _callSuper(this, Surface, arguments); + } + _inherits(Surface, _Base); + return _createClass(Surface, [{ + key: "innerH", + get: function get() { + return this.h; + } + }, { + key: "innerW", + get: function get() { + return this.w; + } + }, { + key: "_update", + value: function _update() { + this._updateLayout(); + this._updateScale(); + } + }, { + key: "_updateLayout", + value: function _updateLayout() { + this._Background.patch({ + texture: lightning_esm/* default */.A.Tools.getRoundRect(this.innerW - 2, + // Reference the underscored values here in cause the h or w getters need to be overwritten for alignment - see Tile + this.innerH - 2, (0,utils/* getMaxRoundRadius */.XG)(this.style.radius, this.w, this.h), 0, null, true, this.style.backgroundColor) + }); + } + }, { + key: "_updateScale", + value: function _updateScale() { + var scale = this._isFocusedMode ? this.getFocusScale(this.w, this.h) : this.getUnfocusScale(this.w, this.h); + this.applySmooth(this, { + scale: scale + }, { + scale: [scale, this.style.animation] + }); + } + }], [{ + key: "_template", + value: function _template() { + return { + Background: {} + }; + } + }, { + key: "__componentName", + get: function get() { + return 'Surface'; + } + }, { + key: "__themeStyle", + get: function get() { + return Surface_styles_namespaceObject; + } + }, { + key: "properties", + get: function get() { + return []; + } + }, { + key: "tags", + get: function get() { + return ['Background']; + } + }]); +}(Base/* default */.A); + + +/***/ }), + +/***/ "../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.stories.js": +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +// ESM COMPAT FLAG +__webpack_require__.r(__webpack_exports__); + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + __namedExportsOrder: () => (/* binding */ __namedExportsOrder), + "default": () => (/* binding */ withLongPress_stories), + withLongPress: () => (/* binding */ withLongPress) +}); + +// EXTERNAL MODULE: ../../../node_modules/@lightningjs/core/dist/lightning.esm.js +var lightning_esm = __webpack_require__("../../../node_modules/@lightningjs/core/dist/lightning.esm.js"); +// EXTERNAL MODULE: ../../@lightningjs/ui-components/src/components/Tile/Tile.js + 1 modules +var Tile = __webpack_require__("../../@lightningjs/ui-components/src/components/Tile/Tile.js"); +;// CONCATENATED MODULE: ../../@lightningjs/ui-components/src/mixins/withLongPress/index.js +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _superPropGet(t, e, o, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; } +function _get() { return _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); } +function _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +/** + * Copyright 2023 Comcast Cable Communications Management, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +function withLongPress_withLongPress(Base) { + return /*#__PURE__*/function (_Base) { + function _class() { + _classCallCheck(this, _class); + return _callSuper(this, _class, arguments); + } + _inherits(_class, _Base); + return _createClass(_class, [{ + key: "threshold", + get: function get() { + return this._threshold; + }, + set: function set(value) { + this._threshold = value; + } + }, { + key: "continuousExecution", + set: function set(val) { + this._continuousExecution = val; + } + }, { + key: "_construct", + value: function _construct() { + this._pressedTimeStart = null; + this._hasExecuted = false; + this._threshold = 2000; + _superPropGet(_class, "_construct", this, 3)([]); + } + + /** + * this will handle only key down events + * it will grab a reference start time stamp and compare it to any subsequent key down events' timestamp values + * when we meet the set threshold time in seconds, we will execute a supplied callback method + * */ + }, { + key: "_handleKey", + value: function _handleKey(keyEvent) { + // capture the key event time stamp the first time through to use as a reference. + if (!this._firstPressed) { + this._firstPressed = this._pressedTimeStart = keyEvent.timeStamp; + _superPropGet(_class, "_handleKey", this, 3)([keyEvent]); + } + // check latest keyEvent time stamp against the start time stamp and see if the difference + // is greater than the threshold + if ( + // eslint-disable-next-line no-constant-condition + this._pressedTimeStart && keyEvent.timeStamp - this._pressedTimeStart >= this.threshold) { + // short circuit here if we only want to execute once before a key up event + if (!this._continuousExecution && this._hasExecuted) { + return; + } + this.fireAncestors('$longPressHit', keyEvent.key); + if (this._continuousExecution) { + this._pressedTimeStart += this.threshold; + } else { + this._hasExecuted = true; + this._pressedTimeStart = null; + } + } + } + + /** + * this will handle only key up events + * */ + }, { + key: "_handleKeyRelease", + value: function _handleKeyRelease(keyEvent) { + if (keyEvent.timeStamp - this._firstPressed >= this.threshold) { + this.fireAncestors('$longPressEnd', keyEvent.key); + } + this._firstPressed = null; + this._pressedTimeStart = null; + this._hasExecuted = false; + _superPropGet(_class, "_handleKeyRelease", this, 3)([keyEvent]); + } + }], [{ + key: "name", + get: function get() { + return Base.name; + } + }]); + }(Base); +} +// EXTERNAL MODULE: ../../@lightningjs/ui-components/src/components/TextBox/TextBox.js + 1 modules +var TextBox = __webpack_require__("../../@lightningjs/ui-components/src/components/TextBox/TextBox.js"); +;// CONCATENATED MODULE: ../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.stories.js +/** + * Copyright 2023 Comcast Cable Communications Management, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + + + + + +/* harmony default export */ const withLongPress_stories = ({ + title: 'Utilities/withLongPress' +}); +const withLongPress = args => { + class withLongPress extends lightning_esm/* default */.A.Component { + static _template() { + return { + Tile: { + type: withLongPress_withLongPress(Tile/* default */.A), + src: 'https://image.tmdb.org/t/p/w500/zHdQ6yaqDf3OQO5uhr0auAgwK6O.jpg', + w: 320, + h: 180, + threshold: args.threshold, + continuousExecution: args.continuousExecution + }, + Notification: { + y: 220, + type: TextBox/* default */.A, + style: { + textStyle: { + maxLines: 3 + } + }, + alpha: 0 + } + }; + } + _init() { + super._init(); + } + get _continuousExecution() { + return this.tag('Tile')._continuousExecution; + } + $longPressHit(data) { + this.tag('Notification').patch({ + content: `Long Press detected on ${data}` + }); + this.tag('Notification').setSmooth('alpha', 1); + !this._continuousExecution && setTimeout(() => { + this.tag('Notification').setSmooth('alpha', 0); + }, 2000); + } + $longPressEnd() { + this.tag('Notification').setSmooth('alpha', 0); + } + _getFocused() { + return this.tag('Tile'); + } + } + return withLongPress_withLongPress(withLongPress); +}; +withLongPress.storyName = 'withLongPress'; +withLongPress.args = { + threshold: 2000, + continuousExecution: false +}; +withLongPress.argTypes = { + threshold: { + control: { + type: 'number', + min: 1000 + }, + description: 'Time in ms to trigger long press', + table: { + defaultValue: { + summary: 2000 + } + } + }, + continuousExecution: { + control: { + type: 'boolean' + }, + description: 'execute long press action continuously when threshold is met again', + table: { + defaultValue: { + summary: false + } + } + } +}; +; +const __namedExportsOrder = ["withLongPress"]; +withLongPress.parameters = { + ...withLongPress.parameters, + docs: { + ...withLongPress.parameters?.docs, + source: { + originalSource: "args => {\n class withLongPress extends lng.Component {\n static _template() {\n return {\n Tile: {\n type: withLongPressMixin(Tile),\n src: 'https://image.tmdb.org/t/p/w500/zHdQ6yaqDf3OQO5uhr0auAgwK6O.jpg',\n w: 320,\n h: 180,\n threshold: args.threshold,\n continuousExecution: args.continuousExecution\n },\n Notification: {\n y: 220,\n type: TextBox,\n style: {\n textStyle: {\n maxLines: 3\n }\n },\n alpha: 0\n }\n };\n }\n _init() {\n super._init();\n }\n get _continuousExecution() {\n return this.tag('Tile')._continuousExecution;\n }\n $longPressHit(data) {\n this.tag('Notification').patch({\n content: `Long Press detected on ${data}`\n });\n this.tag('Notification').setSmooth('alpha', 1);\n !this._continuousExecution && setTimeout(() => {\n this.tag('Notification').setSmooth('alpha', 0);\n }, 2000);\n }\n $longPressEnd() {\n this.tag('Notification').setSmooth('alpha', 0);\n }\n _getFocused() {\n return this.tag('Tile');\n }\n }\n return withLongPressMixin(withLongPress);\n}", + ...withLongPress.parameters?.docs?.source + } + } +}; + +/***/ }) + +}]); +//# sourceMappingURL=mixins-withLongPress-withLongPress-stories.b806bbe8.iframe.bundle.js.map \ No newline at end of file diff --git a/mixins-withLongPress-withLongPress-stories.b806bbe8.iframe.bundle.js.map b/mixins-withLongPress-withLongPress-stories.b806bbe8.iframe.bundle.js.map new file mode 100644 index 000000000..320902c06 --- /dev/null +++ b/mixins-withLongPress-withLongPress-stories.b806bbe8.iframe.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mixins-withLongPress-withLongPress-stories.b806bbe8.iframe.bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAOA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAtDA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AACA;AAAA;AALA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAjEA;AACA;AAAA;AAAA;AAkEA;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sources":["webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Surface/Surface.styles.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/components/Surface/Surface.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withLongPress/index.js","webpack://lightning-ui-docs/../../@lightningjs/ui-components/src/mixins/withLongPress/withLongPress.stories.js"],"sourcesContent":["/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const base = theme => ({\n backgroundColor: theme.color.interactiveNeutral,\n radius: theme.radius.md,\n animation: {}\n});\n\nexport const tone = theme => ({\n inverse: {\n backgroundColor: theme.color.interactiveInverse\n }\n});\n\nexport const mode = theme => ({\n focused: {\n backgroundColor: theme.color.interactiveNeutralFocus,\n tone: {\n inverse: {\n backgroundColor: theme.color.interactiveInverseFocus\n }\n }\n },\n disabled: {\n backgroundColor: theme.color.fillNeutralDisabled\n }\n});\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getMaxRoundRadius } from '../../utils';\nimport Base from '../Base';\nimport * as styles from './Surface.styles';\nimport lng from '@lightningjs/core';\n\nexport default class Surface extends Base {\n static _template() {\n return {\n Background: {}\n };\n }\n\n static get __componentName() {\n return 'Surface';\n }\n\n static get __themeStyle() {\n return styles;\n }\n\n static get properties() {\n return [];\n }\n\n static get tags() {\n return ['Background'];\n }\n\n get innerH() {\n return this.h;\n }\n\n get innerW() {\n return this.w;\n }\n\n _update() {\n this._updateLayout();\n this._updateScale();\n }\n\n _updateLayout() {\n this._Background.patch({\n texture: lng.Tools.getRoundRect(\n this.innerW - 2, // Reference the underscored values here in cause the h or w getters need to be overwritten for alignment - see Tile\n this.innerH - 2,\n getMaxRoundRadius(this.style.radius, this.w, this.h),\n 0,\n null,\n true,\n this.style.backgroundColor\n )\n });\n }\n\n _updateScale() {\n const scale = this._isFocusedMode\n ? this.getFocusScale(this.w, this.h)\n : this.getUnfocusScale(this.w, this.h);\n\n this.applySmooth(this, { scale }, { scale: [scale, this.style.animation] });\n }\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport default function withLongPress(Base) {\n return class extends Base {\n static get name() {\n return Base.name;\n }\n\n set threshold(value) {\n this._threshold = value;\n }\n\n get threshold() {\n return this._threshold;\n }\n\n set continuousExecution(val) {\n this._continuousExecution = val;\n }\n\n _construct() {\n this._pressedTimeStart = null;\n this._hasExecuted = false;\n this._threshold = 2000;\n super._construct();\n }\n\n /**\n * this will handle only key down events\n * it will grab a reference start time stamp and compare it to any subsequent key down events' timestamp values\n * when we meet the set threshold time in seconds, we will execute a supplied callback method\n * */\n _handleKey(keyEvent) {\n // capture the key event time stamp the first time through to use as a reference.\n if (!this._firstPressed) {\n this._firstPressed = this._pressedTimeStart = keyEvent.timeStamp;\n super._handleKey(keyEvent);\n }\n // check latest keyEvent time stamp against the start time stamp and see if the difference\n // is greater than the threshold\n if (\n // eslint-disable-next-line no-constant-condition\n this._pressedTimeStart &&\n keyEvent.timeStamp - this._pressedTimeStart >= this.threshold\n ) {\n // short circuit here if we only want to execute once before a key up event\n if (!this._continuousExecution && this._hasExecuted) {\n return;\n }\n this.fireAncestors('$longPressHit', keyEvent.key);\n if (this._continuousExecution) {\n this._pressedTimeStart += this.threshold;\n } else {\n this._hasExecuted = true;\n this._pressedTimeStart = null;\n }\n }\n }\n\n /**\n * this will handle only key up events\n * */\n _handleKeyRelease(keyEvent) {\n if (keyEvent.timeStamp - this._firstPressed >= this.threshold) {\n this.fireAncestors('$longPressEnd', keyEvent.key);\n }\n this._firstPressed = null;\n this._pressedTimeStart = null;\n this._hasExecuted = false;\n super._handleKeyRelease(keyEvent);\n }\n };\n}\n","/**\n * Copyright 2023 Comcast Cable Communications Management, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport lng from '@lightningjs/core';\nimport Tile from '../../components/Tile/Tile';\nimport withLongPressMixin from '.';\nimport TextBox from '../../components/TextBox';\n\nexport default {\n title: 'Utilities/withLongPress'\n};\n\nexport const withLongPress = args => {\n class withLongPress extends lng.Component {\n static _template() {\n return {\n Tile: {\n type: withLongPressMixin(Tile),\n src: 'https://image.tmdb.org/t/p/w500/zHdQ6yaqDf3OQO5uhr0auAgwK6O.jpg',\n w: 320,\n h: 180,\n threshold: args.threshold,\n continuousExecution: args.continuousExecution\n },\n Notification: {\n y: 220,\n type: TextBox,\n style: { textStyle: { maxLines: 3 } },\n alpha: 0\n }\n };\n }\n _init() {\n super._init();\n }\n\n get _continuousExecution() {\n return this.tag('Tile')._continuousExecution;\n }\n\n $longPressHit(data) {\n this.tag('Notification').patch({\n content: `Long Press detected on ${data}`\n });\n this.tag('Notification').setSmooth('alpha', 1);\n\n !this._continuousExecution &&\n setTimeout(() => {\n this.tag('Notification').setSmooth('alpha', 0);\n }, 2000);\n }\n\n $longPressEnd() {\n this.tag('Notification').setSmooth('alpha', 0);\n }\n\n _getFocused() {\n return this.tag('Tile');\n }\n }\n\n return withLongPressMixin(withLongPress);\n};\n\nwithLongPress.storyName = 'withLongPress';\n\nwithLongPress.args = {\n threshold: 2000,\n continuousExecution: false\n};\n\nwithLongPress.argTypes = {\n threshold: {\n control: { type: 'number', min: 1000 },\n description: 'Time in ms to trigger long press',\n table: { defaultValue: { summary: 2000 } }\n },\n continuousExecution: {\n control: { type: 'boolean' },\n description:\n 'execute long press action continuously when threshold is met again',\n table: { defaultValue: { summary: false } }\n }\n};\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/project.json b/project.json index 78ce06210..c1a097f9d 100644 --- a/project.json +++ b/project.json @@ -1 +1 @@ -{"generatedAt":1728505136348,"hasCustomBabel":false,"hasCustomWebpack":true,"hasStaticDirs":true,"hasStorybookEslint":false,"refCount":0,"testPackages":{"babel-jest":"29.7.0"},"monorepo":"Workspaces","packageManager":{"type":"yarn","version":"3.2.3"},"preview":{"usesGlobals":true},"framework":{"name":"@storybook/html-webpack5","options":{}},"builder":"@storybook/builder-webpack5","renderer":"@storybook/html","portableStoriesFileCount":0,"storybookVersion":"8.3.2","storybookVersionSpecifier":"^8.2.9","language":"javascript","storybookPackages":{"@storybook/addon-actions":{"version":"8.3.2"},"@storybook/addon-designs":{"version":"8.0.3"},"@storybook/addon-interactions":{"version":"8.3.2"},"@storybook/addon-links":{"version":"8.3.2"},"@storybook/addon-mdx-gfm":{"version":"8.3.2"},"@storybook/addon-storysource":{"version":"8.3.2"},"@storybook/blocks":{"version":"8.3.2"},"@storybook/html":{"version":"8.3.2"},"@storybook/html-webpack5":{"version":"8.3.2"},"@storybook/manager-api":{"version":"8.3.2"},"@storybook/test":{"version":"8.3.2"},"@storybook/theming":{"version":"8.3.2"},"storybook":{"version":"8.3.2"}},"addons":{"@storybook/addon-essentials":{"options":{"backgrounds":false,"outline":false,"measure":false,"viewport":false},"version":"8.3.2"},"@storybook/addon-docs":{"version":"8.3.2"},"$SNIP/node_modules/@storybook/addon-designs":{"version":null},"$SNIP/node_modules/@storybook/addon-storysource":{"version":null},"@storybook/addon-webpack5-compiler-babel":{"version":"3.0.3"}}} +{"generatedAt":1729715686901,"hasCustomBabel":false,"hasCustomWebpack":true,"hasStaticDirs":true,"hasStorybookEslint":false,"refCount":0,"testPackages":{"babel-jest":"29.7.0"},"monorepo":"Workspaces","packageManager":{"type":"yarn","version":"3.2.3"},"preview":{"usesGlobals":true},"framework":{"name":"@storybook/html-webpack5","options":{}},"builder":"@storybook/builder-webpack5","renderer":"@storybook/html","portableStoriesFileCount":0,"storybookVersion":"8.3.2","storybookVersionSpecifier":"^8.2.9","language":"javascript","storybookPackages":{"@storybook/addon-actions":{"version":"8.3.2"},"@storybook/addon-designs":{"version":"8.0.3"},"@storybook/addon-interactions":{"version":"8.3.2"},"@storybook/addon-links":{"version":"8.3.2"},"@storybook/addon-mdx-gfm":{"version":"8.3.2"},"@storybook/addon-storysource":{"version":"8.3.2"},"@storybook/blocks":{"version":"8.3.2"},"@storybook/html":{"version":"8.3.2"},"@storybook/html-webpack5":{"version":"8.3.2"},"@storybook/manager-api":{"version":"8.3.2"},"@storybook/test":{"version":"8.3.2"},"@storybook/theming":{"version":"8.3.2"},"storybook":{"version":"8.3.2"}},"addons":{"@storybook/addon-essentials":{"options":{"backgrounds":false,"outline":false,"measure":false,"viewport":false},"version":"8.3.2"},"@storybook/addon-docs":{"version":"8.3.2"},"$SNIP/node_modules/@storybook/addon-designs":{"version":null},"$SNIP/node_modules/@storybook/addon-storysource":{"version":null},"@storybook/addon-webpack5-compiler-babel":{"version":"3.0.3"}}} diff --git a/runtime~main.d60110f8.iframe.bundle.js b/runtime~main.b6c83c68.iframe.bundle.js similarity index 63% rename from runtime~main.d60110f8.iframe.bundle.js rename to runtime~main.b6c83c68.iframe.bundle.js index 464cb9f6f..eaa3ea733 100644 --- a/runtime~main.d60110f8.iframe.bundle.js +++ b/runtime~main.b6c83c68.iframe.bundle.js @@ -112,7 +112,7 @@ /******/ // This function allow to reference async chunks /******/ __webpack_require__.u = (chunkId) => { /******/ // return url for filenames based on template -/******/ return "" + ({"11":"components-CardContent-CardContent-stories","46":"components-TabBar-Tab-stories","133":"mixins-withAnnouncer-withAnnouncer-stories","238":"components-CardContent-CardContentVerticalSmall-stories","287":"components-MetadataCardContent-MetadataCardContent-stories","289":"components-Gradient-Gradient-stories","291":"components-Badge-Badge-stories","377":"components-InlineContent-InlineContent-mdx","463":"components-Button-Button-mdx","547":"components-Radio-Radio-stories","643":"components-TabBar-TabBar-mdx","669":"components-Checkbox-Checkbox-mdx","696":"docs-ThemingComponentConfig-mdx","879":"docs-Storybook-mdx","983":"components-MetadataTile-MetadataTile-stories","997":"components-Provider-Provider-mdx","1105":"mixins-withClassCache-withClassCache-mdx","1137":"components-ScrollWrapper-ScrollWrapper-mdx","1185":"components-Badge-Badge-mdx","1200":"TestUtils-makeCreateComponent-mdx","1323":"components-Row-Row-stories","1587":"mixins-withMarqueeSync-withMarqueeSync-mdx","1655":"components-MetadataCard-MetadataCard-stories","1661":"components-Knob-Knob-stories","1677":"components-Keyboard-KeyboardEmail-stories","1909":"mixins-withMarqueeSync-withMarqueeSync-stories","1977":"components-Card-CardTitle-stories","2000":"docs-LightningCommunityGuide-mdx","2012":"TestRenderer-toJSON-mdx","2341":"components-Column-Column-stories","2368":"components-Control-ControlSmall-stories","2513":"components-Card-Card-stories","2555":"mixins-withEditItems-withEditItems-mdx","2639":"components-Key-Key-stories","2643":"components-Keyboard-KeyboardSearch-stories","2649":"components-Keyboard-KeyboardInput-stories","2833":"components-Tooltip-Tooltip-mdx","2851":"docs-ThemingExtensions-mdx","2877":"components-Tile-Tile-stories","2932":"components-Radio-RadioSmall-stories","3121":"components-Artwork-Artwork-mdx","3153":"components-Shadow-Shadow-stories","3211":"components-Knob-Knob-mdx","3327":"components-Provider-Provider-stories","3375":"components-Slider-Slider-stories","3485":"docs-Introduction-mdx","3515":"mixins-withHandleKey-withHandleKey-mdx","3597":"mixins-withEditItems-withEditItems-stories","3645":"components-MetadataCard-MetadataCard-mdx","3865":"components-TextBox-TextBox-mdx","3879":"components-Shadow-Shadow-mdx","3901":"components-Icon-Icon-mdx","3963":"components-Tile-Tile-mdx","4073":"Contributing-mdx","4077":"components-MetadataTile-MetadataTile-mdx","4165":"components-Control-Control-mdx","4179":"components-GridOverlay-GridOverlay-stories","4188":"components-ListItem-ListItemSlider-stories","4433":"mixins-withLayout-withLayout-mdx","4485":"components-CardContent-CardContentVertical-stories","4563":"mixins-withLayout-withLayout-stories","4637":"mixins-withHandleKey-withHandleKey-stories","4713":"docs-ThemingSubTheming-mdx","4759":"components-ControlRow-ControlRow-stories","4827":"components-ListItem-ListItem-stories","4899":"mixins-withUpdates-withUpdates-mdx","4942":"TestUtils-fastForward-mdx","4947":"mixins-withThemeStyles-withThemeStyles-mdx","4996":"components-TabBar-Tab-mdx","5137":"components-ListItem-ListItemPicker-stories","5139":"components-Artwork-Artwork-stories","5146":"components-ListItem-ListItemSlider-mdx","5225":"components-CardContent-CardContent-mdx","5278":"components-Card-CardSection-stories","5358":"components-Toggle-ToggleSmall-stories","5367":"components-CardContent-CardContentHorizontal-stories","5427":"components-ProgressBar-ProgressBar-stories","5675":"mixins-withSelections-withSelections-mdx","5715":"mixins-withAnnouncer-withAnnouncer-mdx","6095":"components-Control-Control-stories","6115":"components-Input-Input-stories","6151":"components-Checkbox-Checkbox-stories","6243":"components-Column-Column-mdx","6282":"mixins-withTags-withTags-stories","6361":"components-Row-Row-mdx","6391":"components-ListItem-ListItemPicker-mdx","6423":"components-Marquee-Marquee-stories","6491":"docs-ThemingFoundations-stories","6610":"components-Button-ButtonSmall-stories","6636":"docs-LightningResources-mdx","6681":"docs-Theming-mdx","6691":"components-Keyboard-KeyboardNumbers-stories","6711":"docs-ThemingTutorial-mdx","6739":"components-TitleRow-TitleRow-mdx","6747":"components-Label-Label-stories","6923":"components-MetadataBase-MetadataBase-mdx","7043":"components-Toggle-Toggle-mdx","7061":"components-Toggle-Toggle-stories","7190":"docs-ThemingHierarchy-mdx","7365":"components-MetadataCardContent-MetadataCardContent-mdx","7468":"docs-ThemingMode-mdx","7511":"Readme-mdx","7525":"components-Slider-Slider-mdx","7538":"docs-ThemingAttributes-mdx","7557":"TestRenderer-create-mdx","7633":"components-FocusManager-FocusManager-mdx","7721":"components-Button-Button-stories","7771":"components-Surface-Surface-stories","7807":"components-NavigationManager-NavigationManager-stories","7809":"components-ProgressBar-ProgressBar-mdx","7972":"components-Card-CardSection-mdx","7987":"components-ScrollWrapper-ScrollWrapper-stories","8007":"components-Card-Card-mdx","8027":"components-TextBox-TextBox-stories","8035":"components-Keyboard-KeyboardQwerty-stories","8040":"components-Checkbox-CheckboxSmall-stories","8057":"components-Surface-Surface-mdx","8189":"components-Marquee-Marquee-mdx","8197":"components-TabBar-TabBar-stories","8225":"components-Radio-Radio-mdx","8232":"components-Slider-SliderLarge-stories","8237":"components-ControlRow-ControlRow-mdx","8311":"components-Icon-Icon-stories","8477":"mixins-withSelections-withSelections-stories","8543":"docs-ThemingStorybook-mdx","8575":"components-Keyboard-Keyboard-stories","8593":"components-Input-Input-mdx","8601":"components-Label-Label-mdx","8613":"components-Keyboard-Keyboard-mdx","8651":"mixins-withTags-withTags-mdx","8773":"docs-ThemingTone-mdx","8853":"mixins-withUpdates-withUpdates-stories","8892":"components-Keyboard-KeyboardFullscreen-stories","8901":"components-Key-Key-mdx","8965":"components-NavigationManager-NavigationManager-mdx","9134":"components-Card-CardRadio-stories","9153":"components-GridOverlay-GridOverlay-mdx","9172":"components-Card-CardRadio-mdx","9221":"TestUtils-nextTick-mdx","9251":"components-FocusManager-FocusManager-stories","9285":"mixins-withThemeStyles-withThemeStyles-stories","9367":"components-Gradient-Gradient-mdx","9382":"docs-Base-mdx","9436":"Overview-mdx","9459":"components-Tooltip-Tooltip-stories","9529":"components-ListItem-ListItem-mdx","9627":"components-InlineContent-InlineContent-stories","9725":"components-MetadataBase-MetadataBase-stories","9738":"TestUtils-completeAnimation-mdx","9856":"components-CardContent-CardContentHorizontalLarge-stories","9861":"components-TitleRow-TitleRow-stories","9983":"components-Card-CardTitle-mdx"}[chunkId] || chunkId) + "." + {"11":"7340d708","46":"80bed314","133":"e45970bf","238":"1cd0fc71","287":"57577ab7","289":"0230aaff","291":"1271e49c","377":"d7e39587","451":"45b2e1e7","463":"ab1c45d5","547":"c6632518","643":"898cd962","669":"3a39b05b","696":"0245e6ba","814":"d550a67a","879":"8f4373bf","983":"78b22c75","997":"2b72071d","1105":"d8a556ae","1137":"5de9f842","1185":"ea938f3b","1200":"e568eba6","1323":"2626e0d9","1587":"60dfc90e","1655":"4cdf17ef","1661":"82df90b8","1677":"ef9f18fa","1735":"08f9a3dc","1909":"4f3a7f68","1930":"66127212","1977":"74c9ebb5","2000":"4c6285dc","2012":"a9c93388","2067":"dcef5479","2341":"5e0d8b4a","2363":"03cd08dc","2368":"263c04f6","2513":"fd3bc92b","2555":"5e447180","2639":"fa138353","2643":"ad8bb126","2649":"f2f140f0","2833":"0cd16b62","2851":"f11e9ded","2877":"54e9a9bd","2932":"3045a2e5","3069":"911ef580","3121":"cf2304c5","3153":"276c4756","3211":"ae0685ef","3245":"ab02e54a","3327":"2f88f38f","3375":"3540058a","3485":"e3bcd167","3515":"b7ddd5b6","3597":"411720ab","3645":"4013311a","3865":"fd48edf4","3878":"8aedeb0c","3879":"e55f2537","3901":"21835843","3963":"7f92799f","4042":"d02cd3a4","4073":"8e3ffa43","4077":"4594bf89","4165":"48a114db","4179":"e659ab37","4188":"6b00d2da","4433":"ab9b7e55","4485":"13281fae","4563":"29e02612","4637":"8a46887d","4713":"a9a8d162","4759":"59557b5f","4827":"7353bf37","4899":"4f5b68e2","4942":"9514408f","4947":"0e19affc","4996":"6b17b24d","5137":"c5a38b19","5139":"22d5af19","5146":"6075c785","5225":"911862c6","5278":"dde5f7a7","5316":"5e571007","5338":"865bde80","5358":"b9565aa1","5367":"e21fc63c","5427":"177a916b","5600":"fe4c6b9b","5675":"1f56d4fd","5715":"f15aeafe","6095":"2947683a","6115":"d0044a27","6151":"fa483ba8","6216":"02f1288e","6243":"3e38b2d7","6282":"e6c33a2a","6361":"3e89440b","6391":"80e50b9a","6423":"ce356893","6491":"bda5d467","6610":"dd931400","6636":"b5e3db47","6681":"0c90598f","6691":"c3d569f9","6711":"99152368","6739":"ee6d86e0","6747":"eb340225","6915":"3dc325ac","6923":"01176540","7043":"53095813","7061":"b446e200","7190":"ab9d2766","7365":"fab45d54","7468":"5d39690d","7511":"3693ba49","7525":"a251d126","7538":"5e8ce9d4","7557":"bf914332","7633":"604d1ffd","7679":"277f2729","7721":"99a41e89","7771":"135cd381","7807":"5d1cb242","7809":"7082cea9","7972":"e45c73d8","7987":"074b5b28","8007":"fbaca0b2","8027":"52ac7d58","8035":"42f961eb","8040":"3ebefcd6","8057":"676d6066","8189":"8ff2c96a","8197":"798ab902","8225":"50233240","8232":"1e173ab1","8237":"fbddf2bd","8311":"5503acae","8477":"317168bd","8527":"290bd0d6","8543":"2ef057bd","8575":"45edf842","8593":"c4edf56b","8601":"b6b22360","8613":"cd289b6e","8651":"d9d64d83","8773":"c6ef12e3","8853":"d1b2d691","8892":"2469a64d","8901":"33fd45db","8965":"c93794ac","9023":"cc93e729","9134":"b70c5d2a","9153":"0e32b7fd","9159":"c660b871","9172":"20ca8452","9221":"a45dfedd","9251":"790caf9f","9285":"57386a4f","9367":"9d8946a7","9382":"e6723ae4","9436":"e3b32967","9459":"0db74534","9529":"3d49bc29","9627":"c0371127","9725":"2d6b18e7","9738":"00401d5f","9856":"1d1b7fdb","9861":"117acebd","9983":"c8064a3a"}[chunkId] + ".iframe.bundle.js"; +/******/ return "" + ({"11":"components-CardContent-CardContent-stories","46":"components-TabBar-Tab-stories","133":"mixins-withAnnouncer-withAnnouncer-stories","238":"components-CardContent-CardContentVerticalSmall-stories","287":"components-MetadataCardContent-MetadataCardContent-stories","289":"components-Gradient-Gradient-stories","291":"components-Badge-Badge-stories","377":"components-InlineContent-InlineContent-mdx","463":"components-Button-Button-mdx","547":"components-Radio-Radio-stories","643":"components-TabBar-TabBar-mdx","669":"components-Checkbox-Checkbox-mdx","696":"docs-ThemingComponentConfig-mdx","879":"docs-Storybook-mdx","983":"components-MetadataTile-MetadataTile-stories","997":"components-Provider-Provider-mdx","1105":"mixins-withClassCache-withClassCache-mdx","1137":"components-ScrollWrapper-ScrollWrapper-mdx","1185":"components-Badge-Badge-mdx","1200":"TestUtils-makeCreateComponent-mdx","1323":"components-Row-Row-stories","1587":"mixins-withMarqueeSync-withMarqueeSync-mdx","1655":"components-MetadataCard-MetadataCard-stories","1661":"components-Knob-Knob-stories","1677":"components-Keyboard-KeyboardEmail-stories","1909":"mixins-withMarqueeSync-withMarqueeSync-stories","1977":"components-Card-CardTitle-stories","2000":"docs-LightningCommunityGuide-mdx","2012":"TestRenderer-toJSON-mdx","2341":"components-Column-Column-stories","2368":"components-Control-ControlSmall-stories","2513":"components-Card-Card-stories","2555":"mixins-withEditItems-withEditItems-mdx","2639":"components-Key-Key-stories","2643":"components-Keyboard-KeyboardSearch-stories","2649":"components-Keyboard-KeyboardInput-stories","2833":"components-Tooltip-Tooltip-mdx","2851":"docs-ThemingExtensions-mdx","2877":"components-Tile-Tile-stories","2932":"components-Radio-RadioSmall-stories","3121":"components-Artwork-Artwork-mdx","3153":"components-Shadow-Shadow-stories","3195":"mixins-withLongPress-withLongPress-mdx","3211":"components-Knob-Knob-mdx","3327":"components-Provider-Provider-stories","3375":"components-Slider-Slider-stories","3485":"docs-Introduction-mdx","3515":"mixins-withHandleKey-withHandleKey-mdx","3597":"mixins-withEditItems-withEditItems-stories","3645":"components-MetadataCard-MetadataCard-mdx","3865":"components-TextBox-TextBox-mdx","3879":"components-Shadow-Shadow-mdx","3901":"components-Icon-Icon-mdx","3963":"components-Tile-Tile-mdx","4073":"Contributing-mdx","4077":"components-MetadataTile-MetadataTile-mdx","4165":"components-Control-Control-mdx","4179":"components-GridOverlay-GridOverlay-stories","4188":"components-ListItem-ListItemSlider-stories","4433":"mixins-withLayout-withLayout-mdx","4485":"components-CardContent-CardContentVertical-stories","4563":"mixins-withLayout-withLayout-stories","4637":"mixins-withHandleKey-withHandleKey-stories","4713":"docs-ThemingSubTheming-mdx","4759":"components-ControlRow-ControlRow-stories","4827":"components-ListItem-ListItem-stories","4877":"mixins-withLongPress-withLongPress-stories","4899":"mixins-withUpdates-withUpdates-mdx","4942":"TestUtils-fastForward-mdx","4947":"mixins-withThemeStyles-withThemeStyles-mdx","4996":"components-TabBar-Tab-mdx","5137":"components-ListItem-ListItemPicker-stories","5139":"components-Artwork-Artwork-stories","5146":"components-ListItem-ListItemSlider-mdx","5225":"components-CardContent-CardContent-mdx","5278":"components-Card-CardSection-stories","5358":"components-Toggle-ToggleSmall-stories","5367":"components-CardContent-CardContentHorizontal-stories","5427":"components-ProgressBar-ProgressBar-stories","5675":"mixins-withSelections-withSelections-mdx","5715":"mixins-withAnnouncer-withAnnouncer-mdx","6095":"components-Control-Control-stories","6115":"components-Input-Input-stories","6151":"components-Checkbox-Checkbox-stories","6243":"components-Column-Column-mdx","6282":"mixins-withTags-withTags-stories","6361":"components-Row-Row-mdx","6391":"components-ListItem-ListItemPicker-mdx","6423":"components-Marquee-Marquee-stories","6491":"docs-ThemingFoundations-stories","6610":"components-Button-ButtonSmall-stories","6636":"docs-LightningResources-mdx","6681":"docs-Theming-mdx","6691":"components-Keyboard-KeyboardNumbers-stories","6711":"docs-ThemingTutorial-mdx","6739":"components-TitleRow-TitleRow-mdx","6747":"components-Label-Label-stories","6923":"components-MetadataBase-MetadataBase-mdx","7043":"components-Toggle-Toggle-mdx","7061":"components-Toggle-Toggle-stories","7190":"docs-ThemingHierarchy-mdx","7365":"components-MetadataCardContent-MetadataCardContent-mdx","7468":"docs-ThemingMode-mdx","7511":"Readme-mdx","7525":"components-Slider-Slider-mdx","7538":"docs-ThemingAttributes-mdx","7557":"TestRenderer-create-mdx","7633":"components-FocusManager-FocusManager-mdx","7721":"components-Button-Button-stories","7771":"components-Surface-Surface-stories","7807":"components-NavigationManager-NavigationManager-stories","7809":"components-ProgressBar-ProgressBar-mdx","7972":"components-Card-CardSection-mdx","7987":"components-ScrollWrapper-ScrollWrapper-stories","8007":"components-Card-Card-mdx","8027":"components-TextBox-TextBox-stories","8035":"components-Keyboard-KeyboardQwerty-stories","8040":"components-Checkbox-CheckboxSmall-stories","8057":"components-Surface-Surface-mdx","8189":"components-Marquee-Marquee-mdx","8197":"components-TabBar-TabBar-stories","8225":"components-Radio-Radio-mdx","8232":"components-Slider-SliderLarge-stories","8237":"components-ControlRow-ControlRow-mdx","8311":"components-Icon-Icon-stories","8477":"mixins-withSelections-withSelections-stories","8543":"docs-ThemingStorybook-mdx","8575":"components-Keyboard-Keyboard-stories","8593":"components-Input-Input-mdx","8601":"components-Label-Label-mdx","8613":"components-Keyboard-Keyboard-mdx","8651":"mixins-withTags-withTags-mdx","8773":"docs-ThemingTone-mdx","8853":"mixins-withUpdates-withUpdates-stories","8892":"components-Keyboard-KeyboardFullscreen-stories","8901":"components-Key-Key-mdx","8965":"components-NavigationManager-NavigationManager-mdx","9134":"components-Card-CardRadio-stories","9153":"components-GridOverlay-GridOverlay-mdx","9172":"components-Card-CardRadio-mdx","9221":"TestUtils-nextTick-mdx","9251":"components-FocusManager-FocusManager-stories","9285":"mixins-withThemeStyles-withThemeStyles-stories","9367":"components-Gradient-Gradient-mdx","9382":"docs-Base-mdx","9436":"Overview-mdx","9459":"components-Tooltip-Tooltip-stories","9529":"components-ListItem-ListItem-mdx","9627":"components-InlineContent-InlineContent-stories","9725":"components-MetadataBase-MetadataBase-stories","9738":"TestUtils-completeAnimation-mdx","9856":"components-CardContent-CardContentHorizontalLarge-stories","9861":"components-TitleRow-TitleRow-stories","9983":"components-Card-CardTitle-mdx"}[chunkId] || chunkId) + "." + {"11":"7340d708","46":"80bed314","133":"e45970bf","238":"1cd0fc71","287":"57577ab7","289":"0230aaff","291":"1271e49c","377":"d7e39587","451":"45b2e1e7","463":"ab1c45d5","547":"c6632518","643":"898cd962","669":"3a39b05b","696":"0245e6ba","814":"d550a67a","879":"8f4373bf","983":"78b22c75","997":"2b72071d","1105":"d8a556ae","1137":"0c8e88dd","1185":"ea938f3b","1200":"e568eba6","1323":"2626e0d9","1587":"60dfc90e","1655":"4cdf17ef","1661":"82df90b8","1677":"ef9f18fa","1735":"08f9a3dc","1909":"4f3a7f68","1930":"66127212","1977":"74c9ebb5","2000":"4c6285dc","2012":"a9c93388","2067":"dcef5479","2341":"5e0d8b4a","2363":"03cd08dc","2368":"263c04f6","2513":"fd3bc92b","2555":"5e447180","2639":"fa138353","2643":"ad8bb126","2649":"f2f140f0","2833":"0cd16b62","2851":"f11e9ded","2877":"54e9a9bd","2932":"3045a2e5","3069":"911ef580","3121":"cf2304c5","3153":"276c4756","3195":"005470d9","3211":"ae0685ef","3245":"ab02e54a","3327":"2f88f38f","3375":"3540058a","3485":"e3bcd167","3515":"b7ddd5b6","3597":"411720ab","3645":"4013311a","3865":"fd48edf4","3878":"8aedeb0c","3879":"e55f2537","3901":"21835843","3963":"7f92799f","4042":"d02cd3a4","4073":"8e3ffa43","4077":"4594bf89","4165":"48a114db","4179":"e659ab37","4188":"6b00d2da","4433":"ab9b7e55","4485":"13281fae","4563":"29e02612","4637":"8a46887d","4713":"a9a8d162","4759":"59557b5f","4827":"7353bf37","4877":"b806bbe8","4899":"4f5b68e2","4942":"9514408f","4947":"0e19affc","4996":"6b17b24d","5137":"c5a38b19","5139":"22d5af19","5146":"6075c785","5225":"911862c6","5278":"dde5f7a7","5316":"5e571007","5338":"865bde80","5358":"b9565aa1","5367":"e21fc63c","5427":"177a916b","5600":"fe4c6b9b","5675":"1f56d4fd","5715":"f15aeafe","6095":"2947683a","6115":"d0044a27","6151":"fa483ba8","6216":"02f1288e","6243":"3e38b2d7","6282":"e6c33a2a","6361":"3e89440b","6391":"80e50b9a","6423":"ce356893","6491":"bda5d467","6610":"dd931400","6636":"b5e3db47","6681":"0c90598f","6691":"c3d569f9","6711":"99152368","6739":"ee6d86e0","6747":"eb340225","6915":"3dc325ac","6923":"01176540","7043":"53095813","7061":"b446e200","7190":"ab9d2766","7365":"fab45d54","7468":"5d39690d","7511":"3693ba49","7525":"a251d126","7538":"5e8ce9d4","7557":"bf914332","7633":"604d1ffd","7679":"277f2729","7721":"99a41e89","7771":"135cd381","7807":"5d1cb242","7809":"7082cea9","7972":"e45c73d8","7987":"7ae49e1b","8007":"fbaca0b2","8027":"52ac7d58","8035":"42f961eb","8040":"3ebefcd6","8057":"676d6066","8189":"8ff2c96a","8197":"798ab902","8225":"50233240","8232":"1e173ab1","8237":"fbddf2bd","8311":"5503acae","8477":"317168bd","8527":"290bd0d6","8543":"2ef057bd","8575":"45edf842","8593":"c4edf56b","8601":"b6b22360","8613":"cd289b6e","8651":"d9d64d83","8773":"c6ef12e3","8853":"d1b2d691","8892":"2469a64d","8901":"33fd45db","8965":"c93794ac","9023":"cc93e729","9134":"b70c5d2a","9153":"0e32b7fd","9159":"c660b871","9172":"20ca8452","9221":"a45dfedd","9251":"790caf9f","9285":"57386a4f","9367":"9d8946a7","9382":"e6723ae4","9436":"e3b32967","9459":"0db74534","9529":"3d49bc29","9627":"c0371127","9725":"2d6b18e7","9738":"00401d5f","9856":"1d1b7fdb","9861":"117acebd","9983":"c8064a3a"}[chunkId] + ".iframe.bundle.js"; /******/ }; /******/ })(); /******/ @@ -304,4 +304,4 @@ /******/ /******/ })() ; -//# sourceMappingURL=runtime~main.d60110f8.iframe.bundle.js.map \ No newline at end of file +//# sourceMappingURL=runtime~main.b6c83c68.iframe.bundle.js.map \ No newline at end of file diff --git a/runtime~main.b6c83c68.iframe.bundle.js.map b/runtime~main.b6c83c68.iframe.bundle.js.map new file mode 100644 index 000000000..3ac3357bf --- /dev/null +++ b/runtime~main.b6c83c68.iframe.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime~main.b6c83c68.iframe.bundle.js","mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7BA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACRA;AACA;AACA;AACA;AACA;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACNA;AACA;AACA;AACA;AACA;;;;;ACJA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACrFA","sources":["webpack://lightning-ui-docs/webpack/bootstrap","webpack://lightning-ui-docs/webpack/runtime/amd options","webpack://lightning-ui-docs/webpack/runtime/chunk loaded","webpack://lightning-ui-docs/webpack/runtime/compat get default export","webpack://lightning-ui-docs/webpack/runtime/define property getters","webpack://lightning-ui-docs/webpack/runtime/ensure chunk","webpack://lightning-ui-docs/webpack/runtime/get javascript chunk filename","webpack://lightning-ui-docs/webpack/runtime/global","webpack://lightning-ui-docs/webpack/runtime/hasOwnProperty shorthand","webpack://lightning-ui-docs/webpack/runtime/load script","webpack://lightning-ui-docs/webpack/runtime/make namespace object","webpack://lightning-ui-docs/webpack/runtime/node module decorator","webpack://lightning-ui-docs/webpack/runtime/publicPath","webpack://lightning-ui-docs/webpack/runtime/jsonp chunk loading","webpack://lightning-ui-docs/webpack/runtime/nonce","webpack://lightning-ui-docs/webpack/before-startup","webpack://lightning-ui-docs/webpack/startup","webpack://lightning-ui-docs/webpack/after-startup"],"sourcesContent":["// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"11\":\"components-CardContent-CardContent-stories\",\"46\":\"components-TabBar-Tab-stories\",\"133\":\"mixins-withAnnouncer-withAnnouncer-stories\",\"238\":\"components-CardContent-CardContentVerticalSmall-stories\",\"287\":\"components-MetadataCardContent-MetadataCardContent-stories\",\"289\":\"components-Gradient-Gradient-stories\",\"291\":\"components-Badge-Badge-stories\",\"377\":\"components-InlineContent-InlineContent-mdx\",\"463\":\"components-Button-Button-mdx\",\"547\":\"components-Radio-Radio-stories\",\"643\":\"components-TabBar-TabBar-mdx\",\"669\":\"components-Checkbox-Checkbox-mdx\",\"696\":\"docs-ThemingComponentConfig-mdx\",\"879\":\"docs-Storybook-mdx\",\"983\":\"components-MetadataTile-MetadataTile-stories\",\"997\":\"components-Provider-Provider-mdx\",\"1105\":\"mixins-withClassCache-withClassCache-mdx\",\"1137\":\"components-ScrollWrapper-ScrollWrapper-mdx\",\"1185\":\"components-Badge-Badge-mdx\",\"1200\":\"TestUtils-makeCreateComponent-mdx\",\"1323\":\"components-Row-Row-stories\",\"1587\":\"mixins-withMarqueeSync-withMarqueeSync-mdx\",\"1655\":\"components-MetadataCard-MetadataCard-stories\",\"1661\":\"components-Knob-Knob-stories\",\"1677\":\"components-Keyboard-KeyboardEmail-stories\",\"1909\":\"mixins-withMarqueeSync-withMarqueeSync-stories\",\"1977\":\"components-Card-CardTitle-stories\",\"2000\":\"docs-LightningCommunityGuide-mdx\",\"2012\":\"TestRenderer-toJSON-mdx\",\"2341\":\"components-Column-Column-stories\",\"2368\":\"components-Control-ControlSmall-stories\",\"2513\":\"components-Card-Card-stories\",\"2555\":\"mixins-withEditItems-withEditItems-mdx\",\"2639\":\"components-Key-Key-stories\",\"2643\":\"components-Keyboard-KeyboardSearch-stories\",\"2649\":\"components-Keyboard-KeyboardInput-stories\",\"2833\":\"components-Tooltip-Tooltip-mdx\",\"2851\":\"docs-ThemingExtensions-mdx\",\"2877\":\"components-Tile-Tile-stories\",\"2932\":\"components-Radio-RadioSmall-stories\",\"3121\":\"components-Artwork-Artwork-mdx\",\"3153\":\"components-Shadow-Shadow-stories\",\"3195\":\"mixins-withLongPress-withLongPress-mdx\",\"3211\":\"components-Knob-Knob-mdx\",\"3327\":\"components-Provider-Provider-stories\",\"3375\":\"components-Slider-Slider-stories\",\"3485\":\"docs-Introduction-mdx\",\"3515\":\"mixins-withHandleKey-withHandleKey-mdx\",\"3597\":\"mixins-withEditItems-withEditItems-stories\",\"3645\":\"components-MetadataCard-MetadataCard-mdx\",\"3865\":\"components-TextBox-TextBox-mdx\",\"3879\":\"components-Shadow-Shadow-mdx\",\"3901\":\"components-Icon-Icon-mdx\",\"3963\":\"components-Tile-Tile-mdx\",\"4073\":\"Contributing-mdx\",\"4077\":\"components-MetadataTile-MetadataTile-mdx\",\"4165\":\"components-Control-Control-mdx\",\"4179\":\"components-GridOverlay-GridOverlay-stories\",\"4188\":\"components-ListItem-ListItemSlider-stories\",\"4433\":\"mixins-withLayout-withLayout-mdx\",\"4485\":\"components-CardContent-CardContentVertical-stories\",\"4563\":\"mixins-withLayout-withLayout-stories\",\"4637\":\"mixins-withHandleKey-withHandleKey-stories\",\"4713\":\"docs-ThemingSubTheming-mdx\",\"4759\":\"components-ControlRow-ControlRow-stories\",\"4827\":\"components-ListItem-ListItem-stories\",\"4877\":\"mixins-withLongPress-withLongPress-stories\",\"4899\":\"mixins-withUpdates-withUpdates-mdx\",\"4942\":\"TestUtils-fastForward-mdx\",\"4947\":\"mixins-withThemeStyles-withThemeStyles-mdx\",\"4996\":\"components-TabBar-Tab-mdx\",\"5137\":\"components-ListItem-ListItemPicker-stories\",\"5139\":\"components-Artwork-Artwork-stories\",\"5146\":\"components-ListItem-ListItemSlider-mdx\",\"5225\":\"components-CardContent-CardContent-mdx\",\"5278\":\"components-Card-CardSection-stories\",\"5358\":\"components-Toggle-ToggleSmall-stories\",\"5367\":\"components-CardContent-CardContentHorizontal-stories\",\"5427\":\"components-ProgressBar-ProgressBar-stories\",\"5675\":\"mixins-withSelections-withSelections-mdx\",\"5715\":\"mixins-withAnnouncer-withAnnouncer-mdx\",\"6095\":\"components-Control-Control-stories\",\"6115\":\"components-Input-Input-stories\",\"6151\":\"components-Checkbox-Checkbox-stories\",\"6243\":\"components-Column-Column-mdx\",\"6282\":\"mixins-withTags-withTags-stories\",\"6361\":\"components-Row-Row-mdx\",\"6391\":\"components-ListItem-ListItemPicker-mdx\",\"6423\":\"components-Marquee-Marquee-stories\",\"6491\":\"docs-ThemingFoundations-stories\",\"6610\":\"components-Button-ButtonSmall-stories\",\"6636\":\"docs-LightningResources-mdx\",\"6681\":\"docs-Theming-mdx\",\"6691\":\"components-Keyboard-KeyboardNumbers-stories\",\"6711\":\"docs-ThemingTutorial-mdx\",\"6739\":\"components-TitleRow-TitleRow-mdx\",\"6747\":\"components-Label-Label-stories\",\"6923\":\"components-MetadataBase-MetadataBase-mdx\",\"7043\":\"components-Toggle-Toggle-mdx\",\"7061\":\"components-Toggle-Toggle-stories\",\"7190\":\"docs-ThemingHierarchy-mdx\",\"7365\":\"components-MetadataCardContent-MetadataCardContent-mdx\",\"7468\":\"docs-ThemingMode-mdx\",\"7511\":\"Readme-mdx\",\"7525\":\"components-Slider-Slider-mdx\",\"7538\":\"docs-ThemingAttributes-mdx\",\"7557\":\"TestRenderer-create-mdx\",\"7633\":\"components-FocusManager-FocusManager-mdx\",\"7721\":\"components-Button-Button-stories\",\"7771\":\"components-Surface-Surface-stories\",\"7807\":\"components-NavigationManager-NavigationManager-stories\",\"7809\":\"components-ProgressBar-ProgressBar-mdx\",\"7972\":\"components-Card-CardSection-mdx\",\"7987\":\"components-ScrollWrapper-ScrollWrapper-stories\",\"8007\":\"components-Card-Card-mdx\",\"8027\":\"components-TextBox-TextBox-stories\",\"8035\":\"components-Keyboard-KeyboardQwerty-stories\",\"8040\":\"components-Checkbox-CheckboxSmall-stories\",\"8057\":\"components-Surface-Surface-mdx\",\"8189\":\"components-Marquee-Marquee-mdx\",\"8197\":\"components-TabBar-TabBar-stories\",\"8225\":\"components-Radio-Radio-mdx\",\"8232\":\"components-Slider-SliderLarge-stories\",\"8237\":\"components-ControlRow-ControlRow-mdx\",\"8311\":\"components-Icon-Icon-stories\",\"8477\":\"mixins-withSelections-withSelections-stories\",\"8543\":\"docs-ThemingStorybook-mdx\",\"8575\":\"components-Keyboard-Keyboard-stories\",\"8593\":\"components-Input-Input-mdx\",\"8601\":\"components-Label-Label-mdx\",\"8613\":\"components-Keyboard-Keyboard-mdx\",\"8651\":\"mixins-withTags-withTags-mdx\",\"8773\":\"docs-ThemingTone-mdx\",\"8853\":\"mixins-withUpdates-withUpdates-stories\",\"8892\":\"components-Keyboard-KeyboardFullscreen-stories\",\"8901\":\"components-Key-Key-mdx\",\"8965\":\"components-NavigationManager-NavigationManager-mdx\",\"9134\":\"components-Card-CardRadio-stories\",\"9153\":\"components-GridOverlay-GridOverlay-mdx\",\"9172\":\"components-Card-CardRadio-mdx\",\"9221\":\"TestUtils-nextTick-mdx\",\"9251\":\"components-FocusManager-FocusManager-stories\",\"9285\":\"mixins-withThemeStyles-withThemeStyles-stories\",\"9367\":\"components-Gradient-Gradient-mdx\",\"9382\":\"docs-Base-mdx\",\"9436\":\"Overview-mdx\",\"9459\":\"components-Tooltip-Tooltip-stories\",\"9529\":\"components-ListItem-ListItem-mdx\",\"9627\":\"components-InlineContent-InlineContent-stories\",\"9725\":\"components-MetadataBase-MetadataBase-stories\",\"9738\":\"TestUtils-completeAnimation-mdx\",\"9856\":\"components-CardContent-CardContentHorizontalLarge-stories\",\"9861\":\"components-TitleRow-TitleRow-stories\",\"9983\":\"components-Card-CardTitle-mdx\"}[chunkId] || chunkId) + \".\" + {\"11\":\"7340d708\",\"46\":\"80bed314\",\"133\":\"e45970bf\",\"238\":\"1cd0fc71\",\"287\":\"57577ab7\",\"289\":\"0230aaff\",\"291\":\"1271e49c\",\"377\":\"d7e39587\",\"451\":\"45b2e1e7\",\"463\":\"ab1c45d5\",\"547\":\"c6632518\",\"643\":\"898cd962\",\"669\":\"3a39b05b\",\"696\":\"0245e6ba\",\"814\":\"d550a67a\",\"879\":\"8f4373bf\",\"983\":\"78b22c75\",\"997\":\"2b72071d\",\"1105\":\"d8a556ae\",\"1137\":\"0c8e88dd\",\"1185\":\"ea938f3b\",\"1200\":\"e568eba6\",\"1323\":\"2626e0d9\",\"1587\":\"60dfc90e\",\"1655\":\"4cdf17ef\",\"1661\":\"82df90b8\",\"1677\":\"ef9f18fa\",\"1735\":\"08f9a3dc\",\"1909\":\"4f3a7f68\",\"1930\":\"66127212\",\"1977\":\"74c9ebb5\",\"2000\":\"4c6285dc\",\"2012\":\"a9c93388\",\"2067\":\"dcef5479\",\"2341\":\"5e0d8b4a\",\"2363\":\"03cd08dc\",\"2368\":\"263c04f6\",\"2513\":\"fd3bc92b\",\"2555\":\"5e447180\",\"2639\":\"fa138353\",\"2643\":\"ad8bb126\",\"2649\":\"f2f140f0\",\"2833\":\"0cd16b62\",\"2851\":\"f11e9ded\",\"2877\":\"54e9a9bd\",\"2932\":\"3045a2e5\",\"3069\":\"911ef580\",\"3121\":\"cf2304c5\",\"3153\":\"276c4756\",\"3195\":\"005470d9\",\"3211\":\"ae0685ef\",\"3245\":\"ab02e54a\",\"3327\":\"2f88f38f\",\"3375\":\"3540058a\",\"3485\":\"e3bcd167\",\"3515\":\"b7ddd5b6\",\"3597\":\"411720ab\",\"3645\":\"4013311a\",\"3865\":\"fd48edf4\",\"3878\":\"8aedeb0c\",\"3879\":\"e55f2537\",\"3901\":\"21835843\",\"3963\":\"7f92799f\",\"4042\":\"d02cd3a4\",\"4073\":\"8e3ffa43\",\"4077\":\"4594bf89\",\"4165\":\"48a114db\",\"4179\":\"e659ab37\",\"4188\":\"6b00d2da\",\"4433\":\"ab9b7e55\",\"4485\":\"13281fae\",\"4563\":\"29e02612\",\"4637\":\"8a46887d\",\"4713\":\"a9a8d162\",\"4759\":\"59557b5f\",\"4827\":\"7353bf37\",\"4877\":\"b806bbe8\",\"4899\":\"4f5b68e2\",\"4942\":\"9514408f\",\"4947\":\"0e19affc\",\"4996\":\"6b17b24d\",\"5137\":\"c5a38b19\",\"5139\":\"22d5af19\",\"5146\":\"6075c785\",\"5225\":\"911862c6\",\"5278\":\"dde5f7a7\",\"5316\":\"5e571007\",\"5338\":\"865bde80\",\"5358\":\"b9565aa1\",\"5367\":\"e21fc63c\",\"5427\":\"177a916b\",\"5600\":\"fe4c6b9b\",\"5675\":\"1f56d4fd\",\"5715\":\"f15aeafe\",\"6095\":\"2947683a\",\"6115\":\"d0044a27\",\"6151\":\"fa483ba8\",\"6216\":\"02f1288e\",\"6243\":\"3e38b2d7\",\"6282\":\"e6c33a2a\",\"6361\":\"3e89440b\",\"6391\":\"80e50b9a\",\"6423\":\"ce356893\",\"6491\":\"bda5d467\",\"6610\":\"dd931400\",\"6636\":\"b5e3db47\",\"6681\":\"0c90598f\",\"6691\":\"c3d569f9\",\"6711\":\"99152368\",\"6739\":\"ee6d86e0\",\"6747\":\"eb340225\",\"6915\":\"3dc325ac\",\"6923\":\"01176540\",\"7043\":\"53095813\",\"7061\":\"b446e200\",\"7190\":\"ab9d2766\",\"7365\":\"fab45d54\",\"7468\":\"5d39690d\",\"7511\":\"3693ba49\",\"7525\":\"a251d126\",\"7538\":\"5e8ce9d4\",\"7557\":\"bf914332\",\"7633\":\"604d1ffd\",\"7679\":\"277f2729\",\"7721\":\"99a41e89\",\"7771\":\"135cd381\",\"7807\":\"5d1cb242\",\"7809\":\"7082cea9\",\"7972\":\"e45c73d8\",\"7987\":\"7ae49e1b\",\"8007\":\"fbaca0b2\",\"8027\":\"52ac7d58\",\"8035\":\"42f961eb\",\"8040\":\"3ebefcd6\",\"8057\":\"676d6066\",\"8189\":\"8ff2c96a\",\"8197\":\"798ab902\",\"8225\":\"50233240\",\"8232\":\"1e173ab1\",\"8237\":\"fbddf2bd\",\"8311\":\"5503acae\",\"8477\":\"317168bd\",\"8527\":\"290bd0d6\",\"8543\":\"2ef057bd\",\"8575\":\"45edf842\",\"8593\":\"c4edf56b\",\"8601\":\"b6b22360\",\"8613\":\"cd289b6e\",\"8651\":\"d9d64d83\",\"8773\":\"c6ef12e3\",\"8853\":\"d1b2d691\",\"8892\":\"2469a64d\",\"8901\":\"33fd45db\",\"8965\":\"c93794ac\",\"9023\":\"cc93e729\",\"9134\":\"b70c5d2a\",\"9153\":\"0e32b7fd\",\"9159\":\"c660b871\",\"9172\":\"20ca8452\",\"9221\":\"a45dfedd\",\"9251\":\"790caf9f\",\"9285\":\"57386a4f\",\"9367\":\"9d8946a7\",\"9382\":\"e6723ae4\",\"9436\":\"e3b32967\",\"9459\":\"0db74534\",\"9529\":\"3d49bc29\",\"9627\":\"c0371127\",\"9725\":\"2d6b18e7\",\"9738\":\"00401d5f\",\"9856\":\"1d1b7fdb\",\"9861\":\"117acebd\",\"9983\":\"c8064a3a\"}[chunkId] + \".iframe.bundle.js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"lightning-ui-docs:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t5354: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(5354 != chunkId) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunklightning_ui_docs\"] = self[\"webpackChunklightning_ui_docs\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","","",""],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/runtime~main.d60110f8.iframe.bundle.js.map b/runtime~main.d60110f8.iframe.bundle.js.map deleted file mode 100644 index fa7e77e49..000000000 --- a/runtime~main.d60110f8.iframe.bundle.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"runtime~main.d60110f8.iframe.bundle.js","mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7BA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACRA;AACA;AACA;AACA;AACA;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACNA;AACA;AACA;AACA;AACA;;;;;ACJA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACrFA","sources":["webpack://lightning-ui-docs/webpack/bootstrap","webpack://lightning-ui-docs/webpack/runtime/amd options","webpack://lightning-ui-docs/webpack/runtime/chunk loaded","webpack://lightning-ui-docs/webpack/runtime/compat get default export","webpack://lightning-ui-docs/webpack/runtime/define property getters","webpack://lightning-ui-docs/webpack/runtime/ensure chunk","webpack://lightning-ui-docs/webpack/runtime/get javascript chunk filename","webpack://lightning-ui-docs/webpack/runtime/global","webpack://lightning-ui-docs/webpack/runtime/hasOwnProperty shorthand","webpack://lightning-ui-docs/webpack/runtime/load script","webpack://lightning-ui-docs/webpack/runtime/make namespace object","webpack://lightning-ui-docs/webpack/runtime/node module decorator","webpack://lightning-ui-docs/webpack/runtime/publicPath","webpack://lightning-ui-docs/webpack/runtime/jsonp chunk loading","webpack://lightning-ui-docs/webpack/runtime/nonce","webpack://lightning-ui-docs/webpack/before-startup","webpack://lightning-ui-docs/webpack/startup","webpack://lightning-ui-docs/webpack/after-startup"],"sourcesContent":["// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"11\":\"components-CardContent-CardContent-stories\",\"46\":\"components-TabBar-Tab-stories\",\"133\":\"mixins-withAnnouncer-withAnnouncer-stories\",\"238\":\"components-CardContent-CardContentVerticalSmall-stories\",\"287\":\"components-MetadataCardContent-MetadataCardContent-stories\",\"289\":\"components-Gradient-Gradient-stories\",\"291\":\"components-Badge-Badge-stories\",\"377\":\"components-InlineContent-InlineContent-mdx\",\"463\":\"components-Button-Button-mdx\",\"547\":\"components-Radio-Radio-stories\",\"643\":\"components-TabBar-TabBar-mdx\",\"669\":\"components-Checkbox-Checkbox-mdx\",\"696\":\"docs-ThemingComponentConfig-mdx\",\"879\":\"docs-Storybook-mdx\",\"983\":\"components-MetadataTile-MetadataTile-stories\",\"997\":\"components-Provider-Provider-mdx\",\"1105\":\"mixins-withClassCache-withClassCache-mdx\",\"1137\":\"components-ScrollWrapper-ScrollWrapper-mdx\",\"1185\":\"components-Badge-Badge-mdx\",\"1200\":\"TestUtils-makeCreateComponent-mdx\",\"1323\":\"components-Row-Row-stories\",\"1587\":\"mixins-withMarqueeSync-withMarqueeSync-mdx\",\"1655\":\"components-MetadataCard-MetadataCard-stories\",\"1661\":\"components-Knob-Knob-stories\",\"1677\":\"components-Keyboard-KeyboardEmail-stories\",\"1909\":\"mixins-withMarqueeSync-withMarqueeSync-stories\",\"1977\":\"components-Card-CardTitle-stories\",\"2000\":\"docs-LightningCommunityGuide-mdx\",\"2012\":\"TestRenderer-toJSON-mdx\",\"2341\":\"components-Column-Column-stories\",\"2368\":\"components-Control-ControlSmall-stories\",\"2513\":\"components-Card-Card-stories\",\"2555\":\"mixins-withEditItems-withEditItems-mdx\",\"2639\":\"components-Key-Key-stories\",\"2643\":\"components-Keyboard-KeyboardSearch-stories\",\"2649\":\"components-Keyboard-KeyboardInput-stories\",\"2833\":\"components-Tooltip-Tooltip-mdx\",\"2851\":\"docs-ThemingExtensions-mdx\",\"2877\":\"components-Tile-Tile-stories\",\"2932\":\"components-Radio-RadioSmall-stories\",\"3121\":\"components-Artwork-Artwork-mdx\",\"3153\":\"components-Shadow-Shadow-stories\",\"3211\":\"components-Knob-Knob-mdx\",\"3327\":\"components-Provider-Provider-stories\",\"3375\":\"components-Slider-Slider-stories\",\"3485\":\"docs-Introduction-mdx\",\"3515\":\"mixins-withHandleKey-withHandleKey-mdx\",\"3597\":\"mixins-withEditItems-withEditItems-stories\",\"3645\":\"components-MetadataCard-MetadataCard-mdx\",\"3865\":\"components-TextBox-TextBox-mdx\",\"3879\":\"components-Shadow-Shadow-mdx\",\"3901\":\"components-Icon-Icon-mdx\",\"3963\":\"components-Tile-Tile-mdx\",\"4073\":\"Contributing-mdx\",\"4077\":\"components-MetadataTile-MetadataTile-mdx\",\"4165\":\"components-Control-Control-mdx\",\"4179\":\"components-GridOverlay-GridOverlay-stories\",\"4188\":\"components-ListItem-ListItemSlider-stories\",\"4433\":\"mixins-withLayout-withLayout-mdx\",\"4485\":\"components-CardContent-CardContentVertical-stories\",\"4563\":\"mixins-withLayout-withLayout-stories\",\"4637\":\"mixins-withHandleKey-withHandleKey-stories\",\"4713\":\"docs-ThemingSubTheming-mdx\",\"4759\":\"components-ControlRow-ControlRow-stories\",\"4827\":\"components-ListItem-ListItem-stories\",\"4899\":\"mixins-withUpdates-withUpdates-mdx\",\"4942\":\"TestUtils-fastForward-mdx\",\"4947\":\"mixins-withThemeStyles-withThemeStyles-mdx\",\"4996\":\"components-TabBar-Tab-mdx\",\"5137\":\"components-ListItem-ListItemPicker-stories\",\"5139\":\"components-Artwork-Artwork-stories\",\"5146\":\"components-ListItem-ListItemSlider-mdx\",\"5225\":\"components-CardContent-CardContent-mdx\",\"5278\":\"components-Card-CardSection-stories\",\"5358\":\"components-Toggle-ToggleSmall-stories\",\"5367\":\"components-CardContent-CardContentHorizontal-stories\",\"5427\":\"components-ProgressBar-ProgressBar-stories\",\"5675\":\"mixins-withSelections-withSelections-mdx\",\"5715\":\"mixins-withAnnouncer-withAnnouncer-mdx\",\"6095\":\"components-Control-Control-stories\",\"6115\":\"components-Input-Input-stories\",\"6151\":\"components-Checkbox-Checkbox-stories\",\"6243\":\"components-Column-Column-mdx\",\"6282\":\"mixins-withTags-withTags-stories\",\"6361\":\"components-Row-Row-mdx\",\"6391\":\"components-ListItem-ListItemPicker-mdx\",\"6423\":\"components-Marquee-Marquee-stories\",\"6491\":\"docs-ThemingFoundations-stories\",\"6610\":\"components-Button-ButtonSmall-stories\",\"6636\":\"docs-LightningResources-mdx\",\"6681\":\"docs-Theming-mdx\",\"6691\":\"components-Keyboard-KeyboardNumbers-stories\",\"6711\":\"docs-ThemingTutorial-mdx\",\"6739\":\"components-TitleRow-TitleRow-mdx\",\"6747\":\"components-Label-Label-stories\",\"6923\":\"components-MetadataBase-MetadataBase-mdx\",\"7043\":\"components-Toggle-Toggle-mdx\",\"7061\":\"components-Toggle-Toggle-stories\",\"7190\":\"docs-ThemingHierarchy-mdx\",\"7365\":\"components-MetadataCardContent-MetadataCardContent-mdx\",\"7468\":\"docs-ThemingMode-mdx\",\"7511\":\"Readme-mdx\",\"7525\":\"components-Slider-Slider-mdx\",\"7538\":\"docs-ThemingAttributes-mdx\",\"7557\":\"TestRenderer-create-mdx\",\"7633\":\"components-FocusManager-FocusManager-mdx\",\"7721\":\"components-Button-Button-stories\",\"7771\":\"components-Surface-Surface-stories\",\"7807\":\"components-NavigationManager-NavigationManager-stories\",\"7809\":\"components-ProgressBar-ProgressBar-mdx\",\"7972\":\"components-Card-CardSection-mdx\",\"7987\":\"components-ScrollWrapper-ScrollWrapper-stories\",\"8007\":\"components-Card-Card-mdx\",\"8027\":\"components-TextBox-TextBox-stories\",\"8035\":\"components-Keyboard-KeyboardQwerty-stories\",\"8040\":\"components-Checkbox-CheckboxSmall-stories\",\"8057\":\"components-Surface-Surface-mdx\",\"8189\":\"components-Marquee-Marquee-mdx\",\"8197\":\"components-TabBar-TabBar-stories\",\"8225\":\"components-Radio-Radio-mdx\",\"8232\":\"components-Slider-SliderLarge-stories\",\"8237\":\"components-ControlRow-ControlRow-mdx\",\"8311\":\"components-Icon-Icon-stories\",\"8477\":\"mixins-withSelections-withSelections-stories\",\"8543\":\"docs-ThemingStorybook-mdx\",\"8575\":\"components-Keyboard-Keyboard-stories\",\"8593\":\"components-Input-Input-mdx\",\"8601\":\"components-Label-Label-mdx\",\"8613\":\"components-Keyboard-Keyboard-mdx\",\"8651\":\"mixins-withTags-withTags-mdx\",\"8773\":\"docs-ThemingTone-mdx\",\"8853\":\"mixins-withUpdates-withUpdates-stories\",\"8892\":\"components-Keyboard-KeyboardFullscreen-stories\",\"8901\":\"components-Key-Key-mdx\",\"8965\":\"components-NavigationManager-NavigationManager-mdx\",\"9134\":\"components-Card-CardRadio-stories\",\"9153\":\"components-GridOverlay-GridOverlay-mdx\",\"9172\":\"components-Card-CardRadio-mdx\",\"9221\":\"TestUtils-nextTick-mdx\",\"9251\":\"components-FocusManager-FocusManager-stories\",\"9285\":\"mixins-withThemeStyles-withThemeStyles-stories\",\"9367\":\"components-Gradient-Gradient-mdx\",\"9382\":\"docs-Base-mdx\",\"9436\":\"Overview-mdx\",\"9459\":\"components-Tooltip-Tooltip-stories\",\"9529\":\"components-ListItem-ListItem-mdx\",\"9627\":\"components-InlineContent-InlineContent-stories\",\"9725\":\"components-MetadataBase-MetadataBase-stories\",\"9738\":\"TestUtils-completeAnimation-mdx\",\"9856\":\"components-CardContent-CardContentHorizontalLarge-stories\",\"9861\":\"components-TitleRow-TitleRow-stories\",\"9983\":\"components-Card-CardTitle-mdx\"}[chunkId] || chunkId) + \".\" + {\"11\":\"7340d708\",\"46\":\"80bed314\",\"133\":\"e45970bf\",\"238\":\"1cd0fc71\",\"287\":\"57577ab7\",\"289\":\"0230aaff\",\"291\":\"1271e49c\",\"377\":\"d7e39587\",\"451\":\"45b2e1e7\",\"463\":\"ab1c45d5\",\"547\":\"c6632518\",\"643\":\"898cd962\",\"669\":\"3a39b05b\",\"696\":\"0245e6ba\",\"814\":\"d550a67a\",\"879\":\"8f4373bf\",\"983\":\"78b22c75\",\"997\":\"2b72071d\",\"1105\":\"d8a556ae\",\"1137\":\"5de9f842\",\"1185\":\"ea938f3b\",\"1200\":\"e568eba6\",\"1323\":\"2626e0d9\",\"1587\":\"60dfc90e\",\"1655\":\"4cdf17ef\",\"1661\":\"82df90b8\",\"1677\":\"ef9f18fa\",\"1735\":\"08f9a3dc\",\"1909\":\"4f3a7f68\",\"1930\":\"66127212\",\"1977\":\"74c9ebb5\",\"2000\":\"4c6285dc\",\"2012\":\"a9c93388\",\"2067\":\"dcef5479\",\"2341\":\"5e0d8b4a\",\"2363\":\"03cd08dc\",\"2368\":\"263c04f6\",\"2513\":\"fd3bc92b\",\"2555\":\"5e447180\",\"2639\":\"fa138353\",\"2643\":\"ad8bb126\",\"2649\":\"f2f140f0\",\"2833\":\"0cd16b62\",\"2851\":\"f11e9ded\",\"2877\":\"54e9a9bd\",\"2932\":\"3045a2e5\",\"3069\":\"911ef580\",\"3121\":\"cf2304c5\",\"3153\":\"276c4756\",\"3211\":\"ae0685ef\",\"3245\":\"ab02e54a\",\"3327\":\"2f88f38f\",\"3375\":\"3540058a\",\"3485\":\"e3bcd167\",\"3515\":\"b7ddd5b6\",\"3597\":\"411720ab\",\"3645\":\"4013311a\",\"3865\":\"fd48edf4\",\"3878\":\"8aedeb0c\",\"3879\":\"e55f2537\",\"3901\":\"21835843\",\"3963\":\"7f92799f\",\"4042\":\"d02cd3a4\",\"4073\":\"8e3ffa43\",\"4077\":\"4594bf89\",\"4165\":\"48a114db\",\"4179\":\"e659ab37\",\"4188\":\"6b00d2da\",\"4433\":\"ab9b7e55\",\"4485\":\"13281fae\",\"4563\":\"29e02612\",\"4637\":\"8a46887d\",\"4713\":\"a9a8d162\",\"4759\":\"59557b5f\",\"4827\":\"7353bf37\",\"4899\":\"4f5b68e2\",\"4942\":\"9514408f\",\"4947\":\"0e19affc\",\"4996\":\"6b17b24d\",\"5137\":\"c5a38b19\",\"5139\":\"22d5af19\",\"5146\":\"6075c785\",\"5225\":\"911862c6\",\"5278\":\"dde5f7a7\",\"5316\":\"5e571007\",\"5338\":\"865bde80\",\"5358\":\"b9565aa1\",\"5367\":\"e21fc63c\",\"5427\":\"177a916b\",\"5600\":\"fe4c6b9b\",\"5675\":\"1f56d4fd\",\"5715\":\"f15aeafe\",\"6095\":\"2947683a\",\"6115\":\"d0044a27\",\"6151\":\"fa483ba8\",\"6216\":\"02f1288e\",\"6243\":\"3e38b2d7\",\"6282\":\"e6c33a2a\",\"6361\":\"3e89440b\",\"6391\":\"80e50b9a\",\"6423\":\"ce356893\",\"6491\":\"bda5d467\",\"6610\":\"dd931400\",\"6636\":\"b5e3db47\",\"6681\":\"0c90598f\",\"6691\":\"c3d569f9\",\"6711\":\"99152368\",\"6739\":\"ee6d86e0\",\"6747\":\"eb340225\",\"6915\":\"3dc325ac\",\"6923\":\"01176540\",\"7043\":\"53095813\",\"7061\":\"b446e200\",\"7190\":\"ab9d2766\",\"7365\":\"fab45d54\",\"7468\":\"5d39690d\",\"7511\":\"3693ba49\",\"7525\":\"a251d126\",\"7538\":\"5e8ce9d4\",\"7557\":\"bf914332\",\"7633\":\"604d1ffd\",\"7679\":\"277f2729\",\"7721\":\"99a41e89\",\"7771\":\"135cd381\",\"7807\":\"5d1cb242\",\"7809\":\"7082cea9\",\"7972\":\"e45c73d8\",\"7987\":\"074b5b28\",\"8007\":\"fbaca0b2\",\"8027\":\"52ac7d58\",\"8035\":\"42f961eb\",\"8040\":\"3ebefcd6\",\"8057\":\"676d6066\",\"8189\":\"8ff2c96a\",\"8197\":\"798ab902\",\"8225\":\"50233240\",\"8232\":\"1e173ab1\",\"8237\":\"fbddf2bd\",\"8311\":\"5503acae\",\"8477\":\"317168bd\",\"8527\":\"290bd0d6\",\"8543\":\"2ef057bd\",\"8575\":\"45edf842\",\"8593\":\"c4edf56b\",\"8601\":\"b6b22360\",\"8613\":\"cd289b6e\",\"8651\":\"d9d64d83\",\"8773\":\"c6ef12e3\",\"8853\":\"d1b2d691\",\"8892\":\"2469a64d\",\"8901\":\"33fd45db\",\"8965\":\"c93794ac\",\"9023\":\"cc93e729\",\"9134\":\"b70c5d2a\",\"9153\":\"0e32b7fd\",\"9159\":\"c660b871\",\"9172\":\"20ca8452\",\"9221\":\"a45dfedd\",\"9251\":\"790caf9f\",\"9285\":\"57386a4f\",\"9367\":\"9d8946a7\",\"9382\":\"e6723ae4\",\"9436\":\"e3b32967\",\"9459\":\"0db74534\",\"9529\":\"3d49bc29\",\"9627\":\"c0371127\",\"9725\":\"2d6b18e7\",\"9738\":\"00401d5f\",\"9856\":\"1d1b7fdb\",\"9861\":\"117acebd\",\"9983\":\"c8064a3a\"}[chunkId] + \".iframe.bundle.js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"lightning-ui-docs:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t5354: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(5354 != chunkId) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunklightning_ui_docs\"] = self[\"webpackChunklightning_ui_docs\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","","",""],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/sb-addons/storybook-6/manager-bundle.js b/sb-addons/storybook-6/manager-bundle.js index 6e7996b20..87dd407b1 100644 --- a/sb-addons/storybook-6/manager-bundle.js +++ b/sb-addons/storybook-6/manager-bundle.js @@ -1,5 +1,5 @@ try{ -(()=>{var XC=Object.create;var qn=Object.defineProperty;var KC=Object.getOwnPropertyDescriptor;var JC=Object.getOwnPropertyNames;var QC=Object.getPrototypeOf,ZC=Object.prototype.hasOwnProperty;var Ft=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var Vt=(r,e)=>()=>(r&&(e=r(r=0)),e);var H=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),rr=(r,e)=>{for(var t in e)qn(r,t,{get:e[t],enumerable:!0})},cp=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of JC(e))!ZC.call(r,s)&&s!==t&&qn(r,s,{get:()=>e[s],enumerable:!(i=KC(e,s))||i.enumerable});return r};var ye=(r,e,t)=>(t=r!=null?XC(QC(r)):{},cp(e||!r||!r.__esModule?qn(t,"default",{value:r,enumerable:!0}):t,r)),e1=r=>cp(qn({},"__esModule",{value:!0}),r);var h=Vt(()=>{});var d=Vt(()=>{});var p=Vt(()=>{});var Rl={};rr(Rl,{Children:()=>Tl,Component:()=>ir,Fragment:()=>s1,Profiler:()=>n1,PureComponent:()=>o1,StrictMode:()=>a1,Suspense:()=>Cl,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:()=>l1,cloneElement:()=>Ue,createContext:()=>fi,createElement:()=>yp,createFactory:()=>u1,createRef:()=>c1,default:()=>z,forwardRef:()=>h1,isValidElement:()=>d1,lazy:()=>Al,memo:()=>hs,startTransition:()=>p1,unstable_act:()=>f1,useCallback:()=>ut,useContext:()=>El,useDebugValue:()=>g1,useDeferredValue:()=>m1,useEffect:()=>He,useId:()=>_1,useImperativeHandle:()=>y1,useInsertionEffect:()=>x1,useLayoutEffect:()=>Il,useMemo:()=>vr,useReducer:()=>b1,useRef:()=>Bt,useState:()=>Fe,useSyncExternalStore:()=>v1,useTransition:()=>S1,version:()=>w1});var z,Tl,ir,s1,n1,o1,a1,Cl,l1,Ue,fi,yp,u1,c1,h1,d1,Al,hs,p1,f1,ut,El,g1,m1,He,_1,y1,x1,Il,vr,b1,Bt,Fe,v1,S1,w1,Ge=Vt(()=>{h();d();p();z=__REACT__,{Children:Tl,Component:ir,Fragment:s1,Profiler:n1,PureComponent:o1,StrictMode:a1,Suspense:Cl,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:l1,cloneElement:Ue,createContext:fi,createElement:yp,createFactory:u1,createRef:c1,forwardRef:h1,isValidElement:d1,lazy:Al,memo:hs,startTransition:p1,unstable_act:f1,useCallback:ut,useContext:El,useDebugValue:g1,useDeferredValue:m1,useEffect:He,useId:_1,useImperativeHandle:y1,useInsertionEffect:x1,useLayoutEffect:Il,useMemo:vr,useReducer:b1,useRef:Bt,useState:Fe,useSyncExternalStore:v1,useTransition:S1,version:w1}=__REACT__});var Tp=H(Jn=>{"use strict";h();d();p();var T1=(Ge(),e1(Rl)),C1=Symbol.for("react.element"),A1=Symbol.for("react.fragment"),E1=Object.prototype.hasOwnProperty,I1=T1.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,R1={key:!0,ref:!0,__self:!0,__source:!0};function wp(r,e,t){var i,s={},n=null,o=null;t!==void 0&&(n=""+t),e.key!==void 0&&(n=""+e.key),e.ref!==void 0&&(o=e.ref);for(i in e)E1.call(e,i)&&!R1.hasOwnProperty(i)&&(s[i]=e[i]);if(r&&r.defaultProps)for(i in e=r.defaultProps,e)s[i]===void 0&&(s[i]=e[i]);return{$$typeof:C1,type:r,key:n,ref:o,props:s,_owner:I1.current}}Jn.Fragment=A1;Jn.jsx=wp;Jn.jsxs=wp});var Ce=H((RG,Cp)=>{"use strict";h();d();p();Cp.exports=Tp()});var Cf=H((lfe,Tf)=>{h();d();p();function oc(r,e,t){var i,s,n,o,a;e==null&&(e=100);function l(){var c=Date.now()-o;c<e&&c>=0?i=setTimeout(l,e-c):(i=null,t||(a=r.apply(n,s),n=s=null))}var u=function(){n=this,s=arguments,o=Date.now();var c=t&&!i;return i||(i=setTimeout(l,e)),c&&(a=r.apply(n,s),n=s=null),a};return u.clear=function(){i&&(clearTimeout(i),i=null)},u.flush=function(){i&&(a=r.apply(n,s),n=s=null,clearTimeout(i),i=null)},u}oc.debounce=oc;Tf.exports=oc});var $A,Rf,VA,Pf,GA,YA,Xr,XA,kf,Kt,lc,uc=Vt(()=>{h();d();p();$A=Object.create,Rf=Object.defineProperty,VA=Object.getOwnPropertyDescriptor,Pf=Object.getOwnPropertyNames,GA=Object.getPrototypeOf,YA=Object.prototype.hasOwnProperty,Xr=(r,e)=>function(){return e||(0,r[Pf(r)[0]])((e={exports:{}}).exports,e),e.exports},XA=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Pf(e))!YA.call(r,s)&&s!==t&&Rf(r,s,{get:()=>e[s],enumerable:!(i=VA(e,s))||i.enumerable});return r},kf=(r,e,t)=>(t=r!=null?$A(GA(r)):{},XA(e||!r||!r.__esModule?Rf(t,"default",{value:r,enumerable:!0}):t,r)),Kt=r=>`control-${r.replace(/\s+/g,"-")}`,lc=r=>`set-${r.replace(/\s+/g,"-")}`});var Hf={};rr(Hf,{A:()=>JA,ActionBar:()=>cc,AddonPanel:()=>QA,Badge:()=>ZA,Bar:()=>eE,Blockquote:()=>tE,Button:()=>Zo,ClipboardCode:()=>rE,Code:()=>Of,DL:()=>iE,Div:()=>sE,DocumentWrapper:()=>nE,EmptyTabContent:()=>Lf,ErrorFormatter:()=>Df,FlexBar:()=>hc,Form:()=>Rr,H1:()=>oE,H2:()=>dc,H3:()=>Ff,H4:()=>aE,H5:()=>lE,H6:()=>uE,HR:()=>cE,IconButton:()=>Kr,IconButtonSkeleton:()=>hE,Icons:()=>dE,Img:()=>pE,LI:()=>fE,Link:()=>Bf,ListItem:()=>gE,Loader:()=>Mf,Modal:()=>mE,OL:()=>_E,P:()=>yE,Placeholder:()=>xE,Pre:()=>bE,ResetWrapper:()=>Nf,ScrollArea:()=>vE,Separator:()=>SE,Spaced:()=>wE,Span:()=>TE,StorybookIcon:()=>CE,StorybookLogo:()=>AE,Symbols:()=>EE,SyntaxHighlighter:()=>pc,TT:()=>IE,TabBar:()=>RE,TabButton:()=>PE,TabWrapper:()=>kE,Table:()=>OE,Tabs:()=>LE,TabsState:()=>zf,TooltipLinkList:()=>DE,TooltipMessage:()=>FE,TooltipNote:()=>fc,UL:()=>BE,WithTooltip:()=>ea,WithTooltipPure:()=>jf,Zoom:()=>gc,codeCommon:()=>Ai,components:()=>mc,createCopyToClipboardFunction:()=>ME,default:()=>KA,getStoryHref:()=>Uf,icons:()=>NE,interleaveSeparators:()=>zE,nameSpaceClassNames:()=>_c,resetComponents:()=>jE,withReset:()=>Ei});var KA,JA,cc,QA,ZA,eE,tE,Zo,rE,Of,iE,sE,nE,Lf,Df,hc,Rr,oE,dc,Ff,aE,lE,uE,cE,Kr,hE,dE,pE,fE,Bf,gE,Mf,mE,_E,yE,xE,bE,Nf,vE,SE,wE,TE,CE,AE,EE,pc,IE,RE,PE,kE,OE,LE,zf,DE,FE,fc,BE,ea,jf,gc,Ai,mc,ME,Uf,NE,zE,_c,jE,Ei,ta=Vt(()=>{h();d();p();KA=__STORYBOOK_COMPONENTS__,{A:JA,ActionBar:cc,AddonPanel:QA,Badge:ZA,Bar:eE,Blockquote:tE,Button:Zo,ClipboardCode:rE,Code:Of,DL:iE,Div:sE,DocumentWrapper:nE,EmptyTabContent:Lf,ErrorFormatter:Df,FlexBar:hc,Form:Rr,H1:oE,H2:dc,H3:Ff,H4:aE,H5:lE,H6:uE,HR:cE,IconButton:Kr,IconButtonSkeleton:hE,Icons:dE,Img:pE,LI:fE,Link:Bf,ListItem:gE,Loader:Mf,Modal:mE,OL:_E,P:yE,Placeholder:xE,Pre:bE,ResetWrapper:Nf,ScrollArea:vE,Separator:SE,Spaced:wE,Span:TE,StorybookIcon:CE,StorybookLogo:AE,Symbols:EE,SyntaxHighlighter:pc,TT:IE,TabBar:RE,TabButton:PE,TabWrapper:kE,Table:OE,Tabs:LE,TabsState:zf,TooltipLinkList:DE,TooltipMessage:FE,TooltipNote:fc,UL:BE,WithTooltip:ea,WithTooltipPure:jf,Zoom:gc,codeCommon:Ai,components:mc,createCopyToClipboardFunction:ME,getStoryHref:Uf,icons:NE,interleaveSeparators:zE,nameSpaceClassNames:_c,resetComponents:jE,withReset:Ei}=__STORYBOOK_COMPONENTS__});var rge,ige,sge,nge,Wf,oge,age,qf,lge,uge,cge,hge,dge,pge,UE,$f,fge,gge,mge,_ge,J,yc,yge,Vf,xge,xc=Vt(()=>{h();d();p();rge=__STORYBOOK_THEMING__,{CacheProvider:ige,ClassNames:sge,Global:nge,ThemeProvider:Wf,background:oge,color:age,convert:qf,create:lge,createCache:uge,createGlobal:cge,createReset:hge,css:dge,darken:pge,ensure:UE,ignoreSsrWarning:$f,isPropValid:fge,jsx:gge,keyframes:mge,lighten:_ge,styled:J,themes:yc,typography:yge,useTheme:Vf,withTheme:xge}=__STORYBOOK_THEMING__});var Ume,Hme,Wme,ig,qme,$me,Vme,Gme,Yme,Xme,Kme,Jme,Qme,Zme,e_e,t_e,r_e,i_e,s_e,n_e,o_e,a_e,l_e,u_e,c_e,h_e,d_e,p_e,f_e,g_e,m_e,__e,y_e,x_e,b_e,v_e,S_e,w_e,T_e,C_e,A_e,E_e,I_e,R_e,P_e,k_e,O_e,L_e,sg,D_e,ng,Ac,F_e,B_e,og,M_e,N_e,z_e,j_e,U_e,H_e,W_e,q_e,$_e,V_e,G_e,Y_e,X_e,K_e,J_e,Q_e,Z_e,eye,tye,rye,iye,sye,nye,oye,aye,lye,uye,cye,hye,dye,pye,fye,gye,AI,mye,_ye,yye,xye,bye,vye,Sye,EI,II,wye,Tye,Cye,Aye,Eye,Iye,Rye,Pye,kye,Oye,Lye,Dye,Fye,Bye,Mye,Nye,zye,jye,Uye,Hye,Wye,qye,$ye,Vye,Gye,Yye,Xye,Kye,Jye,Qye,Zye,exe,txe,ag,rxe,ixe,sxe,nxe,oxe,axe,lxe,lg,uxe,cxe,hxe,dxe,pxe,fxe,gxe,mxe,_xe,yxe,xxe,bxe,vxe,Sxe,wxe,Txe,Cxe,Axe,Exe,Ixe,Rxe,Pxe,kxe,Oxe,Lxe,Dxe,Fxe,Bxe,Mxe,Nxe,zxe,jxe,Uxe,Hxe,Wxe,qxe,$xe,Vxe,Gxe,Yxe,Xxe,Kxe,Jxe,Qxe,Zxe,ebe,tbe,rbe,ibe,sbe,nbe,obe,abe,lbe,ube,cbe,hbe,dbe,pbe,fbe,gbe,ug,mbe,_be,ybe,xbe,bbe,vbe,Sbe,wbe,Tbe,Cbe,Abe,Ebe,Ibe,RI,Rbe,Pbe,kbe,Obe,Lbe,Dbe,Fbe,Bbe,Mbe,Nbe,PI,zbe,jbe,Ube,Hbe,Wbe,qbe,cg,hg,dg,$be,Ec=Vt(()=>{h();d();p();Ume=__STORYBOOK_ICONS__,{AccessibilityAltIcon:Hme,AccessibilityIcon:Wme,AddIcon:ig,AdminIcon:qme,AlertAltIcon:$me,AlertIcon:Vme,AlignLeftIcon:Gme,AlignRightIcon:Yme,AppleIcon:Xme,ArrowBottomLeftIcon:Kme,ArrowBottomRightIcon:Jme,ArrowDownIcon:Qme,ArrowLeftIcon:Zme,ArrowRightIcon:e_e,ArrowSolidDownIcon:t_e,ArrowSolidLeftIcon:r_e,ArrowSolidRightIcon:i_e,ArrowSolidUpIcon:s_e,ArrowTopLeftIcon:n_e,ArrowTopRightIcon:o_e,ArrowUpIcon:a_e,AzureDevOpsIcon:l_e,BackIcon:u_e,BasketIcon:c_e,BatchAcceptIcon:h_e,BatchDenyIcon:d_e,BeakerIcon:p_e,BellIcon:f_e,BitbucketIcon:g_e,BoldIcon:m_e,BookIcon:__e,BookmarkHollowIcon:y_e,BookmarkIcon:x_e,BottomBarIcon:b_e,BottomBarToggleIcon:v_e,BoxIcon:S_e,BranchIcon:w_e,BrowserIcon:T_e,ButtonIcon:C_e,CPUIcon:A_e,CalendarIcon:E_e,CameraIcon:I_e,CategoryIcon:R_e,CertificateIcon:P_e,ChangedIcon:k_e,ChatIcon:O_e,CheckIcon:L_e,ChevronDownIcon:sg,ChevronLeftIcon:D_e,ChevronRightIcon:ng,ChevronSmallDownIcon:Ac,ChevronSmallLeftIcon:F_e,ChevronSmallRightIcon:B_e,ChevronSmallUpIcon:og,ChevronUpIcon:M_e,ChromaticIcon:N_e,ChromeIcon:z_e,CircleHollowIcon:j_e,CircleIcon:U_e,ClearIcon:H_e,CloseAltIcon:W_e,CloseIcon:q_e,CloudHollowIcon:$_e,CloudIcon:V_e,CogIcon:G_e,CollapseIcon:Y_e,CommandIcon:X_e,CommentAddIcon:K_e,CommentIcon:J_e,CommentsIcon:Q_e,CommitIcon:Z_e,CompassIcon:eye,ComponentDrivenIcon:tye,ComponentIcon:rye,ContrastIcon:iye,ControlsIcon:sye,CopyIcon:nye,CreditIcon:oye,CrossIcon:aye,DashboardIcon:lye,DatabaseIcon:uye,DeleteIcon:cye,DiamondIcon:hye,DirectionIcon:dye,DiscordIcon:pye,DocChartIcon:fye,DocListIcon:gye,DocumentIcon:AI,DownloadIcon:mye,DragIcon:_ye,EditIcon:yye,EllipsisIcon:xye,EmailIcon:bye,ExpandAltIcon:vye,ExpandIcon:Sye,EyeCloseIcon:EI,EyeIcon:II,FaceHappyIcon:wye,FaceNeutralIcon:Tye,FaceSadIcon:Cye,FacebookIcon:Aye,FailedIcon:Eye,FastForwardIcon:Iye,FigmaIcon:Rye,FilterIcon:Pye,FlagIcon:kye,FolderIcon:Oye,FormIcon:Lye,GDriveIcon:Dye,GithubIcon:Fye,GitlabIcon:Bye,GlobeIcon:Mye,GoogleIcon:Nye,GraphBarIcon:zye,GraphLineIcon:jye,GraphqlIcon:Uye,GridAltIcon:Hye,GridIcon:Wye,GrowIcon:qye,HeartHollowIcon:$ye,HeartIcon:Vye,HomeIcon:Gye,HourglassIcon:Yye,InfoIcon:Xye,ItalicIcon:Kye,JumpToIcon:Jye,KeyIcon:Qye,LightningIcon:Zye,LightningOffIcon:exe,LinkBrokenIcon:txe,LinkIcon:ag,LinkedinIcon:rxe,LinuxIcon:ixe,ListOrderedIcon:sxe,ListUnorderedIcon:nxe,LocationIcon:oxe,LockIcon:axe,MarkdownIcon:lxe,MarkupIcon:lg,MediumIcon:uxe,MemoryIcon:cxe,MenuIcon:hxe,MergeIcon:dxe,MirrorIcon:pxe,MobileIcon:fxe,MoonIcon:gxe,NutIcon:mxe,OutboxIcon:_xe,OutlineIcon:yxe,PaintBrushIcon:xxe,PaperClipIcon:bxe,ParagraphIcon:vxe,PassedIcon:Sxe,PhoneIcon:wxe,PhotoDragIcon:Txe,PhotoIcon:Cxe,PinAltIcon:Axe,PinIcon:Exe,PlayBackIcon:Ixe,PlayIcon:Rxe,PlayNextIcon:Pxe,PlusIcon:kxe,PointerDefaultIcon:Oxe,PointerHandIcon:Lxe,PowerIcon:Dxe,PrintIcon:Fxe,ProceedIcon:Bxe,ProfileIcon:Mxe,PullRequestIcon:Nxe,QuestionIcon:zxe,RSSIcon:jxe,RedirectIcon:Uxe,ReduxIcon:Hxe,RefreshIcon:Wxe,ReplyIcon:qxe,RepoIcon:$xe,RequestChangeIcon:Vxe,RewindIcon:Gxe,RulerIcon:Yxe,SearchIcon:Xxe,ShareAltIcon:Kxe,ShareIcon:Jxe,ShieldIcon:Qxe,SideBySideIcon:Zxe,SidebarAltIcon:ebe,SidebarAltToggleIcon:tbe,SidebarIcon:rbe,SidebarToggleIcon:ibe,SpeakerIcon:sbe,StackedIcon:nbe,StarHollowIcon:obe,StarIcon:abe,StatusFailIcon:lbe,StatusPassIcon:ube,StatusWarnIcon:cbe,StickerIcon:hbe,StopAltIcon:dbe,StopIcon:pbe,StorybookIcon:fbe,StructureIcon:gbe,SubtractIcon:ug,SunIcon:mbe,SupportIcon:_be,SwitchAltIcon:ybe,SyncIcon:xbe,TabletIcon:bbe,ThumbsUpIcon:vbe,TimeIcon:Sbe,TimerIcon:wbe,TransferIcon:Tbe,TrashIcon:Cbe,TwitterIcon:Abe,TypeIcon:Ebe,UbuntuIcon:Ibe,UndoIcon:RI,UnfoldIcon:Rbe,UnlockIcon:Pbe,UnpinIcon:kbe,UploadIcon:Obe,UserAddIcon:Lbe,UserAltIcon:Dbe,UserIcon:Fbe,UsersIcon:Bbe,VSCodeIcon:Mbe,VerifiedIcon:Nbe,VideoIcon:PI,WandIcon:zbe,WatchIcon:jbe,WindowsIcon:Ube,WrenchIcon:Hbe,XIcon:Wbe,YoutubeIcon:qbe,ZoomIcon:cg,ZoomOutIcon:hg,ZoomResetIcon:dg,iconList:$be}=__STORYBOOK_ICONS__});var Pc=H((o0e,vg)=>{h();d();p();function qI(r,e){for(var t=-1,i=r==null?0:r.length,s=Array(i);++t<i;)s[t]=e(r[t],t,r);return s}vg.exports=qI});var wg=H((c0e,Sg)=>{h();d();p();function $I(){this.__data__=[],this.size=0}Sg.exports=$I});var aa=H((f0e,Tg)=>{h();d();p();function VI(r,e){return r===e||r!==r&&e!==e}Tg.exports=VI});var Xs=H((y0e,Cg)=>{h();d();p();var GI=aa();function YI(r,e){for(var t=r.length;t--;)if(GI(r[t][0],e))return t;return-1}Cg.exports=YI});var Eg=H((S0e,Ag)=>{h();d();p();var XI=Xs(),KI=Array.prototype,JI=KI.splice;function QI(r){var e=this.__data__,t=XI(e,r);if(t<0)return!1;var i=e.length-1;return t==i?e.pop():JI.call(e,t,1),--this.size,!0}Ag.exports=QI});var Rg=H((A0e,Ig)=>{h();d();p();var ZI=Xs();function eR(r){var e=this.__data__,t=ZI(e,r);return t<0?void 0:e[t][1]}Ig.exports=eR});var kg=H((P0e,Pg)=>{h();d();p();var tR=Xs();function rR(r){return tR(this.__data__,r)>-1}Pg.exports=rR});var Lg=H((D0e,Og)=>{h();d();p();var iR=Xs();function sR(r,e){var t=this.__data__,i=iR(t,r);return i<0?(++this.size,t.push([r,e])):t[i][1]=e,this}Og.exports=sR});var Ks=H((N0e,Dg)=>{h();d();p();var nR=wg(),oR=Eg(),aR=Rg(),lR=kg(),uR=Lg();function Pi(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Pi.prototype.clear=nR;Pi.prototype.delete=oR;Pi.prototype.get=aR;Pi.prototype.has=lR;Pi.prototype.set=uR;Dg.exports=Pi});var Bg=H((H0e,Fg)=>{h();d();p();var cR=Ks();function hR(){this.__data__=new cR,this.size=0}Fg.exports=hR});var Ng=H((V0e,Mg)=>{h();d();p();function dR(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}Mg.exports=dR});var jg=H((K0e,zg)=>{h();d();p();function pR(r){return this.__data__.get(r)}zg.exports=pR});var Hg=H((eve,Ug)=>{h();d();p();function fR(r){return this.__data__.has(r)}Ug.exports=fR});var kc=H((sve,Wg)=>{h();d();p();var gR=typeof window=="object"&&window&&window.Object===Object&&window;Wg.exports=gR});var Mt=H((lve,qg)=>{h();d();p();var mR=kc(),_R=typeof self=="object"&&self&&self.Object===Object&&self,yR=mR||_R||Function("return this")();qg.exports=yR});var ki=H((dve,$g)=>{h();d();p();var xR=Mt(),bR=xR.Symbol;$g.exports=bR});var Xg=H((mve,Yg)=>{h();d();p();var Vg=ki(),Gg=Object.prototype,vR=Gg.hasOwnProperty,SR=Gg.toString,Js=Vg?Vg.toStringTag:void 0;function wR(r){var e=vR.call(r,Js),t=r[Js];try{r[Js]=void 0;var i=!0}catch{}var s=SR.call(r);return i&&(e?r[Js]=t:delete r[Js]),s}Yg.exports=wR});var Jg=H((bve,Kg)=>{h();d();p();var TR=Object.prototype,CR=TR.toString;function AR(r){return CR.call(r)}Kg.exports=AR});var Oi=H((Tve,em)=>{h();d();p();var Qg=ki(),ER=Xg(),IR=Jg(),RR="[object Null]",PR="[object Undefined]",Zg=Qg?Qg.toStringTag:void 0;function kR(r){return r==null?r===void 0?PR:RR:Zg&&Zg in Object(r)?ER(r):IR(r)}em.exports=kR});var Jt=H((Ive,tm)=>{h();d();p();function OR(r){var e=typeof r;return r!=null&&(e=="object"||e=="function")}tm.exports=OR});var Oc=H((Ove,rm)=>{h();d();p();var LR=Oi(),DR=Jt(),FR="[object AsyncFunction]",BR="[object Function]",MR="[object GeneratorFunction]",NR="[object Proxy]";function zR(r){if(!DR(r))return!1;var e=LR(r);return e==BR||e==MR||e==FR||e==NR}rm.exports=zR});var sm=H((Bve,im)=>{h();d();p();var jR=Mt(),UR=jR["__core-js_shared__"];im.exports=UR});var am=H((jve,om)=>{h();d();p();var Lc=sm(),nm=function(){var r=/[^.]+$/.exec(Lc&&Lc.keys&&Lc.keys.IE_PROTO||"");return r?"Symbol(src)_1."+r:""}();function HR(r){return!!nm&&nm in r}om.exports=HR});var Dc=H((qve,lm)=>{h();d();p();var WR=Function.prototype,qR=WR.toString;function $R(r){if(r!=null){try{return qR.call(r)}catch{}try{return r+""}catch{}}return""}lm.exports=$R});var cm=H((Yve,um)=>{h();d();p();var VR=Oc(),GR=am(),YR=Jt(),XR=Dc(),KR=/[\\^$.*+?()[\]{}|]/g,JR=/^\[object .+?Constructor\]$/,QR=Function.prototype,ZR=Object.prototype,eP=QR.toString,tP=ZR.hasOwnProperty,rP=RegExp("^"+eP.call(tP).replace(KR,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function iP(r){if(!YR(r)||GR(r))return!1;var e=VR(r)?rP:JR;return e.test(XR(r))}um.exports=iP});var dm=H((Qve,hm)=>{h();d();p();function sP(r,e){return r?.[e]}hm.exports=sP});var Dr=H((rSe,pm)=>{h();d();p();var nP=cm(),oP=dm();function aP(r,e){var t=oP(r,e);return nP(t)?t:void 0}pm.exports=aP});var la=H((oSe,fm)=>{h();d();p();var lP=Dr(),uP=Mt(),cP=lP(uP,"Map");fm.exports=cP});var Qs=H((cSe,gm)=>{h();d();p();var hP=Dr(),dP=hP(Object,"create");gm.exports=dP});var ym=H((fSe,_m)=>{h();d();p();var mm=Qs();function pP(){this.__data__=mm?mm(null):{},this.size=0}_m.exports=pP});var bm=H((ySe,xm)=>{h();d();p();function fP(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}xm.exports=fP});var Sm=H((SSe,vm)=>{h();d();p();var gP=Qs(),mP="__lodash_hash_undefined__",_P=Object.prototype,yP=_P.hasOwnProperty;function xP(r){var e=this.__data__;if(gP){var t=e[r];return t===mP?void 0:t}return yP.call(e,r)?e[r]:void 0}vm.exports=xP});var Tm=H((ASe,wm)=>{h();d();p();var bP=Qs(),vP=Object.prototype,SP=vP.hasOwnProperty;function wP(r){var e=this.__data__;return bP?e[r]!==void 0:SP.call(e,r)}wm.exports=wP});var Am=H((PSe,Cm)=>{h();d();p();var TP=Qs(),CP="__lodash_hash_undefined__";function AP(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=TP&&e===void 0?CP:e,this}Cm.exports=AP});var Im=H((DSe,Em)=>{h();d();p();var EP=ym(),IP=bm(),RP=Sm(),PP=Tm(),kP=Am();function Li(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Li.prototype.clear=EP;Li.prototype.delete=IP;Li.prototype.get=RP;Li.prototype.has=PP;Li.prototype.set=kP;Em.exports=Li});var km=H((NSe,Pm)=>{h();d();p();var Rm=Im(),OP=Ks(),LP=la();function DP(){this.size=0,this.__data__={hash:new Rm,map:new(LP||OP),string:new Rm}}Pm.exports=DP});var Lm=H((HSe,Om)=>{h();d();p();function FP(r){var e=typeof r;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?r!=="__proto__":r===null}Om.exports=FP});var Zs=H((VSe,Dm)=>{h();d();p();var BP=Lm();function MP(r,e){var t=r.__data__;return BP(e)?t[typeof e=="string"?"string":"hash"]:t.map}Dm.exports=MP});var Bm=H((KSe,Fm)=>{h();d();p();var NP=Zs();function zP(r){var e=NP(this,r).delete(r);return this.size-=e?1:0,e}Fm.exports=zP});var Nm=H((ewe,Mm)=>{h();d();p();var jP=Zs();function UP(r){return jP(this,r).get(r)}Mm.exports=UP});var jm=H((swe,zm)=>{h();d();p();var HP=Zs();function WP(r){return HP(this,r).has(r)}zm.exports=WP});var Hm=H((lwe,Um)=>{h();d();p();var qP=Zs();function $P(r,e){var t=qP(this,r),i=t.size;return t.set(r,e),this.size+=t.size==i?0:1,this}Um.exports=$P});var ua=H((dwe,Wm)=>{h();d();p();var VP=km(),GP=Bm(),YP=Nm(),XP=jm(),KP=Hm();function Di(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Di.prototype.clear=VP;Di.prototype.delete=GP;Di.prototype.get=YP;Di.prototype.has=XP;Di.prototype.set=KP;Wm.exports=Di});var $m=H((mwe,qm)=>{h();d();p();var JP=Ks(),QP=la(),ZP=ua(),ek=200;function tk(r,e){var t=this.__data__;if(t instanceof JP){var i=t.__data__;if(!QP||i.length<ek-1)return i.push([r,e]),this.size=++t.size,this;t=this.__data__=new ZP(i)}return t.set(r,e),this.size=t.size,this}qm.exports=tk});var ca=H((bwe,Vm)=>{h();d();p();var rk=Ks(),ik=Bg(),sk=Ng(),nk=jg(),ok=Hg(),ak=$m();function Fi(r){var e=this.__data__=new rk(r);this.size=e.size}Fi.prototype.clear=ik;Fi.prototype.delete=sk;Fi.prototype.get=nk;Fi.prototype.has=ok;Fi.prototype.set=ak;Vm.exports=Fi});var Ym=H((Twe,Gm)=>{h();d();p();var lk="__lodash_hash_undefined__";function uk(r){return this.__data__.set(r,lk),this}Gm.exports=uk});var Km=H((Iwe,Xm)=>{h();d();p();function ck(r){return this.__data__.has(r)}Xm.exports=ck});var Fc=H((Owe,Jm)=>{h();d();p();var hk=ua(),dk=Ym(),pk=Km();function ha(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new hk;++e<t;)this.add(r[e])}ha.prototype.add=ha.prototype.push=dk;ha.prototype.has=pk;Jm.exports=ha});var Zm=H((Bwe,Qm)=>{h();d();p();function fk(r,e){for(var t=-1,i=r==null?0:r.length;++t<i;)if(e(r[t],t,r))return!0;return!1}Qm.exports=fk});var Bc=H((jwe,e_)=>{h();d();p();function gk(r,e){return r.has(e)}e_.exports=gk});var Mc=H((qwe,t_)=>{h();d();p();var mk=Fc(),_k=Zm(),yk=Bc(),xk=1,bk=2;function vk(r,e,t,i,s,n){var o=t&xk,a=r.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var u=n.get(r),c=n.get(e);if(u&&c)return u==e&&c==r;var g=-1,m=!0,y=t&bk?new mk:void 0;for(n.set(r,e),n.set(e,r);++g<a;){var b=r[g],C=e[g];if(i)var A=o?i(C,b,g,e,r,n):i(b,C,g,r,e,n);if(A!==void 0){if(A)continue;m=!1;break}if(y){if(!_k(e,function(T,R){if(!yk(y,R)&&(b===T||s(b,T,t,i,n)))return y.push(R)})){m=!1;break}}else if(!(b===C||s(b,C,t,i,n))){m=!1;break}}return n.delete(r),n.delete(e),m}t_.exports=vk});var Nc=H((Ywe,r_)=>{h();d();p();var Sk=Mt(),wk=Sk.Uint8Array;r_.exports=wk});var s_=H((Qwe,i_)=>{h();d();p();function Tk(r){var e=-1,t=Array(r.size);return r.forEach(function(i,s){t[++e]=[s,i]}),t}i_.exports=Tk});var da=H((rTe,n_)=>{h();d();p();function Ck(r){var e=-1,t=Array(r.size);return r.forEach(function(i){t[++e]=i}),t}n_.exports=Ck});var c_=H((oTe,u_)=>{h();d();p();var o_=ki(),a_=Nc(),Ak=aa(),Ek=Mc(),Ik=s_(),Rk=da(),Pk=1,kk=2,Ok="[object Boolean]",Lk="[object Date]",Dk="[object Error]",Fk="[object Map]",Bk="[object Number]",Mk="[object RegExp]",Nk="[object Set]",zk="[object String]",jk="[object Symbol]",Uk="[object ArrayBuffer]",Hk="[object DataView]",l_=o_?o_.prototype:void 0,zc=l_?l_.valueOf:void 0;function Wk(r,e,t,i,s,n,o){switch(t){case Hk:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return!1;r=r.buffer,e=e.buffer;case Uk:return!(r.byteLength!=e.byteLength||!n(new a_(r),new a_(e)));case Ok:case Lk:case Bk:return Ak(+r,+e);case Dk:return r.name==e.name&&r.message==e.message;case Mk:case zk:return r==e+"";case Fk:var a=Ik;case Nk:var l=i&Pk;if(a||(a=Rk),r.size!=e.size&&!l)return!1;var u=o.get(r);if(u)return u==e;i|=kk,o.set(r,e);var c=Ek(a(r),a(e),i,s,n,o);return o.delete(r),c;case jk:if(zc)return zc.call(r)==zc.call(e)}return!1}u_.exports=Wk});var jc=H((cTe,h_)=>{h();d();p();function qk(r,e){for(var t=-1,i=e.length,s=r.length;++t<i;)r[s+t]=e[t];return r}h_.exports=qk});var Qt=H((fTe,d_)=>{h();d();p();var $k=Array.isArray;d_.exports=$k});var Uc=H((yTe,p_)=>{h();d();p();var Vk=jc(),Gk=Qt();function Yk(r,e,t){var i=e(r);return Gk(r)?i:Vk(i,t(r))}p_.exports=Yk});var g_=H((STe,f_)=>{h();d();p();function Xk(r,e){for(var t=-1,i=r==null?0:r.length,s=0,n=[];++t<i;){var o=r[t];e(o,t,r)&&(n[s++]=o)}return n}f_.exports=Xk});var Hc=H((ATe,m_)=>{h();d();p();function Kk(){return[]}m_.exports=Kk});var pa=H((PTe,y_)=>{h();d();p();var Jk=g_(),Qk=Hc(),Zk=Object.prototype,eO=Zk.propertyIsEnumerable,__=Object.getOwnPropertySymbols,tO=__?function(r){return r==null?[]:(r=Object(r),Jk(__(r),function(e){return eO.call(r,e)}))}:Qk;y_.exports=tO});var b_=H((DTe,x_)=>{h();d();p();function rO(r,e){for(var t=-1,i=Array(r);++t<r;)i[t]=e(t);return i}x_.exports=rO});var Fr=H((NTe,v_)=>{h();d();p();function iO(r){return r!=null&&typeof r=="object"}v_.exports=iO});var w_=H((HTe,S_)=>{h();d();p();var sO=Oi(),nO=Fr(),oO="[object Arguments]";function aO(r){return nO(r)&&sO(r)==oO}S_.exports=aO});var Wc=H((VTe,A_)=>{h();d();p();var T_=w_(),lO=Fr(),C_=Object.prototype,uO=C_.hasOwnProperty,cO=C_.propertyIsEnumerable,hO=T_(function(){return arguments}())?T_:function(r){return lO(r)&&uO.call(r,"callee")&&!cO.call(r,"callee")};A_.exports=hO});var I_=H((KTe,E_)=>{h();d();p();function dO(){return!1}E_.exports=dO});var fa=H((en,Bi)=>{h();d();p();var pO=Mt(),fO=I_(),k_=typeof en=="object"&&en&&!en.nodeType&&en,R_=k_&&typeof Bi=="object"&&Bi&&!Bi.nodeType&&Bi,gO=R_&&R_.exports===k_,P_=gO?pO.Buffer:void 0,mO=P_?P_.isBuffer:void 0,_O=mO||fO;Bi.exports=_O});var ga=H((iCe,O_)=>{h();d();p();var yO=9007199254740991,xO=/^(?:0|[1-9]\d*)$/;function bO(r,e){var t=typeof r;return e=e??yO,!!e&&(t=="number"||t!="symbol"&&xO.test(r))&&r>-1&&r%1==0&&r<e}O_.exports=bO});var ma=H((aCe,L_)=>{h();d();p();var vO=9007199254740991;function SO(r){return typeof r=="number"&&r>-1&&r%1==0&&r<=vO}L_.exports=SO});var F_=H((hCe,D_)=>{h();d();p();var wO=Oi(),TO=ma(),CO=Fr(),AO="[object Arguments]",EO="[object Array]",IO="[object Boolean]",RO="[object Date]",PO="[object Error]",kO="[object Function]",OO="[object Map]",LO="[object Number]",DO="[object Object]",FO="[object RegExp]",BO="[object Set]",MO="[object String]",NO="[object WeakMap]",zO="[object ArrayBuffer]",jO="[object DataView]",UO="[object Float32Array]",HO="[object Float64Array]",WO="[object Int8Array]",qO="[object Int16Array]",$O="[object Int32Array]",VO="[object Uint8Array]",GO="[object Uint8ClampedArray]",YO="[object Uint16Array]",XO="[object Uint32Array]",Be={};Be[UO]=Be[HO]=Be[WO]=Be[qO]=Be[$O]=Be[VO]=Be[GO]=Be[YO]=Be[XO]=!0;Be[AO]=Be[EO]=Be[zO]=Be[IO]=Be[jO]=Be[RO]=Be[PO]=Be[kO]=Be[OO]=Be[LO]=Be[DO]=Be[FO]=Be[BO]=Be[MO]=Be[NO]=!1;function KO(r){return CO(r)&&TO(r.length)&&!!Be[wO(r)]}D_.exports=KO});var _a=H((gCe,B_)=>{h();d();p();function JO(r){return function(e){return r(e)}}B_.exports=JO});var ya=H((tn,Mi)=>{h();d();p();var QO=kc(),M_=typeof tn=="object"&&tn&&!tn.nodeType&&tn,rn=M_&&typeof Mi=="object"&&Mi&&!Mi.nodeType&&Mi,ZO=rn&&rn.exports===M_,qc=ZO&&QO.process,eL=function(){try{var r=rn&&rn.require&&rn.require("util").types;return r||qc&&qc.binding&&qc.binding("util")}catch{}}();Mi.exports=eL});var $c=H((SCe,j_)=>{h();d();p();var tL=F_(),rL=_a(),N_=ya(),z_=N_&&N_.isTypedArray,iL=z_?rL(z_):tL;j_.exports=iL});var Vc=H((ACe,U_)=>{h();d();p();var sL=b_(),nL=Wc(),oL=Qt(),aL=fa(),lL=ga(),uL=$c(),cL=Object.prototype,hL=cL.hasOwnProperty;function dL(r,e){var t=oL(r),i=!t&&nL(r),s=!t&&!i&&aL(r),n=!t&&!i&&!s&&uL(r),o=t||i||s||n,a=o?sL(r.length,String):[],l=a.length;for(var u in r)(e||hL.call(r,u))&&!(o&&(u=="length"||s&&(u=="offset"||u=="parent")||n&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||lL(u,l)))&&a.push(u);return a}U_.exports=dL});var xa=H((PCe,H_)=>{h();d();p();var pL=Object.prototype;function fL(r){var e=r&&r.constructor,t=typeof e=="function"&&e.prototype||pL;return r===t}H_.exports=fL});var Gc=H((DCe,W_)=>{h();d();p();function gL(r,e){return function(t){return r(e(t))}}W_.exports=gL});var $_=H((NCe,q_)=>{h();d();p();var mL=Gc(),_L=mL(Object.keys,Object);q_.exports=_L});var G_=H((HCe,V_)=>{h();d();p();var yL=xa(),xL=$_(),bL=Object.prototype,vL=bL.hasOwnProperty;function SL(r){if(!yL(r))return xL(r);var e=[];for(var t in Object(r))vL.call(r,t)&&t!="constructor"&&e.push(t);return e}V_.exports=SL});var Yc=H((VCe,Y_)=>{h();d();p();var wL=Oc(),TL=ma();function CL(r){return r!=null&&TL(r.length)&&!wL(r)}Y_.exports=CL});var sn=H((KCe,X_)=>{h();d();p();var AL=Vc(),EL=G_(),IL=Yc();function RL(r){return IL(r)?AL(r):EL(r)}X_.exports=RL});var Xc=H((e1e,K_)=>{h();d();p();var PL=Uc(),kL=pa(),OL=sn();function LL(r){return PL(r,OL,kL)}K_.exports=LL});var Z_=H((s1e,Q_)=>{h();d();p();var J_=Xc(),DL=1,FL=Object.prototype,BL=FL.hasOwnProperty;function ML(r,e,t,i,s,n){var o=t&DL,a=J_(r),l=a.length,u=J_(e),c=u.length;if(l!=c&&!o)return!1;for(var g=l;g--;){var m=a[g];if(!(o?m in e:BL.call(e,m)))return!1}var y=n.get(r),b=n.get(e);if(y&&b)return y==e&&b==r;var C=!0;n.set(r,e),n.set(e,r);for(var A=o;++g<l;){m=a[g];var T=r[m],R=e[m];if(i)var P=o?i(R,T,m,e,r,n):i(T,R,m,r,e,n);if(!(P===void 0?T===R||s(T,R,t,i,n):P)){C=!1;break}A||(A=m=="constructor")}if(C&&!A){var E=r.constructor,k=e.constructor;E!=k&&"constructor"in r&&"constructor"in e&&!(typeof E=="function"&&E instanceof E&&typeof k=="function"&&k instanceof k)&&(C=!1)}return n.delete(r),n.delete(e),C}Q_.exports=ML});var ty=H((l1e,ey)=>{h();d();p();var NL=Dr(),zL=Mt(),jL=NL(zL,"DataView");ey.exports=jL});var iy=H((d1e,ry)=>{h();d();p();var UL=Dr(),HL=Mt(),WL=UL(HL,"Promise");ry.exports=WL});var Kc=H((m1e,sy)=>{h();d();p();var qL=Dr(),$L=Mt(),VL=qL($L,"Set");sy.exports=VL});var oy=H((b1e,ny)=>{h();d();p();var GL=Dr(),YL=Mt(),XL=GL(YL,"WeakMap");ny.exports=XL});var nn=H((T1e,py)=>{h();d();p();var Jc=ty(),Qc=la(),Zc=iy(),eh=Kc(),th=oy(),dy=Oi(),Ni=Dc(),ay="[object Map]",KL="[object Object]",ly="[object Promise]",uy="[object Set]",cy="[object WeakMap]",hy="[object DataView]",JL=Ni(Jc),QL=Ni(Qc),ZL=Ni(Zc),eD=Ni(eh),tD=Ni(th),Qr=dy;(Jc&&Qr(new Jc(new ArrayBuffer(1)))!=hy||Qc&&Qr(new Qc)!=ay||Zc&&Qr(Zc.resolve())!=ly||eh&&Qr(new eh)!=uy||th&&Qr(new th)!=cy)&&(Qr=function(r){var e=dy(r),t=e==KL?r.constructor:void 0,i=t?Ni(t):"";if(i)switch(i){case JL:return hy;case QL:return ay;case ZL:return ly;case eD:return uy;case tD:return cy}return e});py.exports=Qr});var vy=H((I1e,by)=>{h();d();p();var rh=ca(),rD=Mc(),iD=c_(),sD=Z_(),fy=nn(),gy=Qt(),my=fa(),nD=$c(),oD=1,_y="[object Arguments]",yy="[object Array]",ba="[object Object]",aD=Object.prototype,xy=aD.hasOwnProperty;function lD(r,e,t,i,s,n){var o=gy(r),a=gy(e),l=o?yy:fy(r),u=a?yy:fy(e);l=l==_y?ba:l,u=u==_y?ba:u;var c=l==ba,g=u==ba,m=l==u;if(m&&my(r)){if(!my(e))return!1;o=!0,c=!1}if(m&&!c)return n||(n=new rh),o||nD(r)?rD(r,e,t,i,s,n):iD(r,e,l,t,i,s,n);if(!(t&oD)){var y=c&&xy.call(r,"__wrapped__"),b=g&&xy.call(e,"__wrapped__");if(y||b){var C=y?r.value():r,A=b?e.value():e;return n||(n=new rh),s(C,A,t,i,n)}}return m?(n||(n=new rh),sD(r,e,t,i,s,n)):!1}by.exports=lD});var ih=H((O1e,Ty)=>{h();d();p();var uD=vy(),Sy=Fr();function wy(r,e,t,i,s){return r===e?!0:r==null||e==null||!Sy(r)&&!Sy(e)?r!==r&&e!==e:uD(r,e,t,i,wy,s)}Ty.exports=wy});var Ay=H((B1e,Cy)=>{h();d();p();var cD=ca(),hD=ih(),dD=1,pD=2;function fD(r,e,t,i){var s=t.length,n=s,o=!i;if(r==null)return!n;for(r=Object(r);s--;){var a=t[s];if(o&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return!1}for(;++s<n;){a=t[s];var l=a[0],u=r[l],c=a[1];if(o&&a[2]){if(u===void 0&&!(l in r))return!1}else{var g=new cD;if(i)var m=i(u,c,l,r,e,g);if(!(m===void 0?hD(c,u,dD|pD,i,g):m))return!1}}return!0}Cy.exports=fD});var sh=H((j1e,Ey)=>{h();d();p();var gD=Jt();function mD(r){return r===r&&!gD(r)}Ey.exports=mD});var Ry=H((q1e,Iy)=>{h();d();p();var _D=sh(),yD=sn();function xD(r){for(var e=yD(r),t=e.length;t--;){var i=e[t],s=r[i];e[t]=[i,s,_D(s)]}return e}Iy.exports=xD});var nh=H((Y1e,Py)=>{h();d();p();function bD(r,e){return function(t){return t==null?!1:t[r]===e&&(e!==void 0||r in Object(t))}}Py.exports=bD});var Oy=H((Q1e,ky)=>{h();d();p();var vD=Ay(),SD=Ry(),wD=nh();function TD(r){var e=SD(r);return e.length==1&&e[0][2]?wD(e[0][0],e[0][1]):function(t){return t===r||vD(t,r,e)}}ky.exports=TD});var on=H((r2e,Ly)=>{h();d();p();var CD=Oi(),AD=Fr(),ED="[object Symbol]";function ID(r){return typeof r=="symbol"||AD(r)&&CD(r)==ED}Ly.exports=ID});var va=H((o2e,Dy)=>{h();d();p();var RD=Qt(),PD=on(),kD=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,OD=/^\w*$/;function LD(r,e){if(RD(r))return!1;var t=typeof r;return t=="number"||t=="symbol"||t=="boolean"||r==null||PD(r)?!0:OD.test(r)||!kD.test(r)||e!=null&&r in Object(e)}Dy.exports=LD});var My=H((c2e,By)=>{h();d();p();var Fy=ua(),DD="Expected a function";function oh(r,e){if(typeof r!="function"||e!=null&&typeof e!="function")throw new TypeError(DD);var t=function(){var i=arguments,s=e?e.apply(this,i):i[0],n=t.cache;if(n.has(s))return n.get(s);var o=r.apply(this,i);return t.cache=n.set(s,o)||n,o};return t.cache=new(oh.Cache||Fy),t}oh.Cache=Fy;By.exports=oh});var zy=H((f2e,Ny)=>{h();d();p();var FD=My(),BD=500;function MD(r){var e=FD(r,function(i){return t.size===BD&&t.clear(),i}),t=e.cache;return e}Ny.exports=MD});var Uy=H((y2e,jy)=>{h();d();p();var ND=zy(),zD=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,jD=/\\(\\)?/g,UD=ND(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(""),r.replace(zD,function(t,i,s,n){e.push(s?n.replace(jD,"$1"):i||t)}),e});jy.exports=UD});var Gy=H((S2e,Vy)=>{h();d();p();var Hy=ki(),HD=Pc(),WD=Qt(),qD=on(),$D=1/0,Wy=Hy?Hy.prototype:void 0,qy=Wy?Wy.toString:void 0;function $y(r){if(typeof r=="string")return r;if(WD(r))return HD(r,$y)+"";if(qD(r))return qy?qy.call(r):"";var e=r+"";return e=="0"&&1/r==-$D?"-0":e}Vy.exports=$y});var Xy=H((A2e,Yy)=>{h();d();p();var VD=Gy();function GD(r){return r==null?"":VD(r)}Yy.exports=GD});var an=H((P2e,Ky)=>{h();d();p();var YD=Qt(),XD=va(),KD=Uy(),JD=Xy();function QD(r,e){return YD(r)?r:XD(r,e)?[r]:KD(JD(r))}Ky.exports=QD});var zi=H((D2e,Jy)=>{h();d();p();var ZD=on(),eF=1/0;function tF(r){if(typeof r=="string"||ZD(r))return r;var e=r+"";return e=="0"&&1/r==-eF?"-0":e}Jy.exports=tF});var Sa=H((N2e,Qy)=>{h();d();p();var rF=an(),iF=zi();function sF(r,e){e=rF(e,r);for(var t=0,i=e.length;r!=null&&t<i;)r=r[iF(e[t++])];return t&&t==i?r:void 0}Qy.exports=sF});var ex=H((H2e,Zy)=>{h();d();p();var nF=Sa();function oF(r,e,t){var i=r==null?void 0:nF(r,e);return i===void 0?t:i}Zy.exports=oF});var rx=H((V2e,tx)=>{h();d();p();function aF(r,e){return r!=null&&e in Object(r)}tx.exports=aF});var sx=H((K2e,ix)=>{h();d();p();var lF=an(),uF=Wc(),cF=Qt(),hF=ga(),dF=ma(),pF=zi();function fF(r,e,t){e=lF(e,r);for(var i=-1,s=e.length,n=!1;++i<s;){var o=pF(e[i]);if(!(n=r!=null&&t(r,o)))break;r=r[o]}return n||++i!=s?n:(s=r==null?0:r.length,!!s&&dF(s)&&hF(o,s)&&(cF(r)||uF(r)))}ix.exports=fF});var ox=H((eAe,nx)=>{h();d();p();var gF=rx(),mF=sx();function _F(r,e){return r!=null&&mF(r,e,gF)}nx.exports=_F});var lx=H((sAe,ax)=>{h();d();p();var yF=ih(),xF=ex(),bF=ox(),vF=va(),SF=sh(),wF=nh(),TF=zi(),CF=1,AF=2;function EF(r,e){return vF(r)&&SF(e)?wF(TF(r),e):function(t){var i=xF(t,r);return i===void 0&&i===e?bF(t,r):yF(e,i,CF|AF)}}ax.exports=EF});var cx=H((lAe,ux)=>{h();d();p();function IF(r){return r}ux.exports=IF});var dx=H((dAe,hx)=>{h();d();p();function RF(r){return function(e){return e?.[r]}}hx.exports=RF});var fx=H((mAe,px)=>{h();d();p();var PF=Sa();function kF(r){return function(e){return PF(e,r)}}px.exports=kF});var mx=H((bAe,gx)=>{h();d();p();var OF=dx(),LF=fx(),DF=va(),FF=zi();function BF(r){return DF(r)?OF(FF(r)):LF(r)}gx.exports=BF});var yx=H((TAe,_x)=>{h();d();p();var MF=Oy(),NF=lx(),zF=cx(),jF=Qt(),UF=mx();function HF(r){return typeof r=="function"?r:r==null?zF:typeof r=="object"?jF(r)?NF(r[0],r[1]):MF(r):UF(r)}_x.exports=HF});var bx=H((IAe,xx)=>{h();d();p();var WF=Dr(),qF=function(){try{var r=WF(Object,"defineProperty");return r({},"",{}),r}catch{}}();xx.exports=qF});var ah=H((OAe,Sx)=>{h();d();p();var vx=bx();function $F(r,e,t){e=="__proto__"&&vx?vx(r,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):r[e]=t}Sx.exports=$F});var wa=H((BAe,wx)=>{h();d();p();var VF=ah(),GF=aa(),YF=Object.prototype,XF=YF.hasOwnProperty;function KF(r,e,t){var i=r[e];(!(XF.call(r,e)&&GF(i,t))||t===void 0&&!(e in r))&&VF(r,e,t)}wx.exports=KF});var Ax=H((jAe,Cx)=>{h();d();p();var JF=wa(),QF=an(),ZF=ga(),Tx=Jt(),eB=zi();function tB(r,e,t,i){if(!Tx(r))return r;e=QF(e,r);for(var s=-1,n=e.length,o=n-1,a=r;a!=null&&++s<n;){var l=eB(e[s]),u=t;if(l==="__proto__"||l==="constructor"||l==="prototype")return r;if(s!=o){var c=a[l];u=i?i(c,l,a):void 0,u===void 0&&(u=Tx(c)?c:ZF(e[s+1])?[]:{})}JF(a,l,u),a=a[l]}return r}Cx.exports=tB});var Ix=H((qAe,Ex)=>{h();d();p();var rB=Sa(),iB=Ax(),sB=an();function nB(r,e,t){for(var i=-1,s=e.length,n={};++i<s;){var o=e[i],a=rB(r,o);t(a,o)&&iB(n,sB(o,r),a)}return n}Ex.exports=nB});var lh=H((YAe,Rx)=>{h();d();p();var oB=Gc(),aB=oB(Object.getPrototypeOf,Object);Rx.exports=aB});var uh=H((QAe,Px)=>{h();d();p();var lB=jc(),uB=lh(),cB=pa(),hB=Hc(),dB=Object.getOwnPropertySymbols,pB=dB?function(r){for(var e=[];r;)lB(e,cB(r)),r=uB(r);return e}:hB;Px.exports=pB});var Ox=H((rEe,kx)=>{h();d();p();function fB(r){var e=[];if(r!=null)for(var t in Object(r))e.push(t);return e}kx.exports=fB});var Dx=H((oEe,Lx)=>{h();d();p();var gB=Jt(),mB=xa(),_B=Ox(),yB=Object.prototype,xB=yB.hasOwnProperty;function bB(r){if(!gB(r))return _B(r);var e=mB(r),t=[];for(var i in r)i=="constructor"&&(e||!xB.call(r,i))||t.push(i);return t}Lx.exports=bB});var Ta=H((cEe,Fx)=>{h();d();p();var vB=Vc(),SB=Dx(),wB=Yc();function TB(r){return wB(r)?vB(r,!0):SB(r)}Fx.exports=TB});var ch=H((fEe,Bx)=>{h();d();p();var CB=Uc(),AB=uh(),EB=Ta();function IB(r){return CB(r,EB,AB)}Bx.exports=IB});var Nx=H((yEe,Mx)=>{h();d();p();var RB=Pc(),PB=yx(),kB=Ix(),OB=ch();function LB(r,e){if(r==null)return{};var t=RB(OB(r),function(i){return[i]});return e=PB(e),kB(r,t,function(i,s){return e(i,s[0])})}Mx.exports=LB});var Gx=H((FEe,Vx)=>{h();d();p();function XB(r,e){for(var t=-1,i=r==null?0:r.length;++t<i&&e(r[t],t,r)!==!1;);return r}Vx.exports=XB});var ln=H((zEe,Yx)=>{h();d();p();var KB=wa(),JB=ah();function QB(r,e,t,i){var s=!t;t||(t={});for(var n=-1,o=e.length;++n<o;){var a=e[n],l=i?i(t[a],r[a],a,t,r):void 0;l===void 0&&(l=r[a]),s?JB(t,a,l):KB(t,a,l)}return t}Yx.exports=QB});var Kx=H((WEe,Xx)=>{h();d();p();var ZB=ln(),eM=sn();function tM(r,e){return r&&ZB(e,eM(e),r)}Xx.exports=tM});var Qx=H((GEe,Jx)=>{h();d();p();var rM=ln(),iM=Ta();function sM(r,e){return r&&rM(e,iM(e),r)}Jx.exports=sM});var ib=H((un,ji)=>{h();d();p();var nM=Mt(),rb=typeof un=="object"&&un&&!un.nodeType&&un,Zx=rb&&typeof ji=="object"&&ji&&!ji.nodeType&&ji,oM=Zx&&Zx.exports===rb,eb=oM?nM.Buffer:void 0,tb=eb?eb.allocUnsafe:void 0;function aM(r,e){if(e)return r.slice();var t=r.length,i=tb?tb(t):new r.constructor(t);return r.copy(i),i}ji.exports=aM});var nb=H((eIe,sb)=>{h();d();p();function lM(r,e){var t=-1,i=r.length;for(e||(e=Array(i));++t<i;)e[t]=r[t];return e}sb.exports=lM});var ab=H((sIe,ob)=>{h();d();p();var uM=ln(),cM=pa();function hM(r,e){return uM(r,cM(r),e)}ob.exports=hM});var ub=H((lIe,lb)=>{h();d();p();var dM=ln(),pM=uh();function fM(r,e){return dM(r,pM(r),e)}lb.exports=fM});var hb=H((dIe,cb)=>{h();d();p();var gM=Object.prototype,mM=gM.hasOwnProperty;function _M(r){var e=r.length,t=new r.constructor(e);return e&&typeof r[0]=="string"&&mM.call(r,"index")&&(t.index=r.index,t.input=r.input),t}cb.exports=_M});var Aa=H((mIe,pb)=>{h();d();p();var db=Nc();function yM(r){var e=new r.constructor(r.byteLength);return new db(e).set(new db(r)),e}pb.exports=yM});var gb=H((bIe,fb)=>{h();d();p();var xM=Aa();function bM(r,e){var t=e?xM(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.byteLength)}fb.exports=bM});var _b=H((TIe,mb)=>{h();d();p();var vM=/\w*$/;function SM(r){var e=new r.constructor(r.source,vM.exec(r));return e.lastIndex=r.lastIndex,e}mb.exports=SM});var Sb=H((IIe,vb)=>{h();d();p();var yb=ki(),xb=yb?yb.prototype:void 0,bb=xb?xb.valueOf:void 0;function wM(r){return bb?Object(bb.call(r)):{}}vb.exports=wM});var Tb=H((OIe,wb)=>{h();d();p();var TM=Aa();function CM(r,e){var t=e?TM(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.length)}wb.exports=CM});var Ab=H((BIe,Cb)=>{h();d();p();var AM=Aa(),EM=gb(),IM=_b(),RM=Sb(),PM=Tb(),kM="[object Boolean]",OM="[object Date]",LM="[object Map]",DM="[object Number]",FM="[object RegExp]",BM="[object Set]",MM="[object String]",NM="[object Symbol]",zM="[object ArrayBuffer]",jM="[object DataView]",UM="[object Float32Array]",HM="[object Float64Array]",WM="[object Int8Array]",qM="[object Int16Array]",$M="[object Int32Array]",VM="[object Uint8Array]",GM="[object Uint8ClampedArray]",YM="[object Uint16Array]",XM="[object Uint32Array]";function KM(r,e,t){var i=r.constructor;switch(e){case zM:return AM(r);case kM:case OM:return new i(+r);case jM:return EM(r,t);case UM:case HM:case WM:case qM:case $M:case VM:case GM:case YM:case XM:return PM(r,t);case LM:return new i;case DM:case MM:return new i(r);case FM:return IM(r);case BM:return new i;case NM:return RM(r)}}Cb.exports=KM});var Rb=H((jIe,Ib)=>{h();d();p();var JM=Jt(),Eb=Object.create,QM=function(){function r(){}return function(e){if(!JM(e))return{};if(Eb)return Eb(e);r.prototype=e;var t=new r;return r.prototype=void 0,t}}();Ib.exports=QM});var kb=H((qIe,Pb)=>{h();d();p();var ZM=Rb(),e5=lh(),t5=xa();function r5(r){return typeof r.constructor=="function"&&!t5(r)?ZM(e5(r)):{}}Pb.exports=r5});var Lb=H((YIe,Ob)=>{h();d();p();var i5=nn(),s5=Fr(),n5="[object Map]";function o5(r){return s5(r)&&i5(r)==n5}Ob.exports=o5});var Mb=H((QIe,Bb)=>{h();d();p();var a5=Lb(),l5=_a(),Db=ya(),Fb=Db&&Db.isMap,u5=Fb?l5(Fb):a5;Bb.exports=u5});var zb=H((rRe,Nb)=>{h();d();p();var c5=nn(),h5=Fr(),d5="[object Set]";function p5(r){return h5(r)&&c5(r)==d5}Nb.exports=p5});var Wb=H((oRe,Hb)=>{h();d();p();var f5=zb(),g5=_a(),jb=ya(),Ub=jb&&jb.isSet,m5=Ub?g5(Ub):f5;Hb.exports=m5});var Yb=H((cRe,Gb)=>{h();d();p();var _5=ca(),y5=Gx(),x5=wa(),b5=Kx(),v5=Qx(),S5=ib(),w5=nb(),T5=ab(),C5=ub(),A5=Xc(),E5=ch(),I5=nn(),R5=hb(),P5=Ab(),k5=kb(),O5=Qt(),L5=fa(),D5=Mb(),F5=Jt(),B5=Wb(),M5=sn(),N5=Ta(),z5=1,j5=2,U5=4,qb="[object Arguments]",H5="[object Array]",W5="[object Boolean]",q5="[object Date]",$5="[object Error]",$b="[object Function]",V5="[object GeneratorFunction]",G5="[object Map]",Y5="[object Number]",Vb="[object Object]",X5="[object RegExp]",K5="[object Set]",J5="[object String]",Q5="[object Symbol]",Z5="[object WeakMap]",eN="[object ArrayBuffer]",tN="[object DataView]",rN="[object Float32Array]",iN="[object Float64Array]",sN="[object Int8Array]",nN="[object Int16Array]",oN="[object Int32Array]",aN="[object Uint8Array]",lN="[object Uint8ClampedArray]",uN="[object Uint16Array]",cN="[object Uint32Array]",Le={};Le[qb]=Le[H5]=Le[eN]=Le[tN]=Le[W5]=Le[q5]=Le[rN]=Le[iN]=Le[sN]=Le[nN]=Le[oN]=Le[G5]=Le[Y5]=Le[Vb]=Le[X5]=Le[K5]=Le[J5]=Le[Q5]=Le[aN]=Le[lN]=Le[uN]=Le[cN]=!0;Le[$5]=Le[$b]=Le[Z5]=!1;function Ea(r,e,t,i,s,n){var o,a=e&z5,l=e&j5,u=e&U5;if(t&&(o=s?t(r,i,s,n):t(r)),o!==void 0)return o;if(!F5(r))return r;var c=O5(r);if(c){if(o=R5(r),!a)return w5(r,o)}else{var g=I5(r),m=g==$b||g==V5;if(L5(r))return S5(r,a);if(g==Vb||g==qb||m&&!s){if(o=l||m?{}:k5(r),!a)return l?C5(r,v5(o,r)):T5(r,b5(o,r))}else{if(!Le[g])return s?r:{};o=P5(r,g,a)}}n||(n=new _5);var y=n.get(r);if(y)return y;n.set(r,o),B5(r)?r.forEach(function(A){o.add(Ea(A,e,t,A,r,n))}):D5(r)&&r.forEach(function(A,T){o.set(T,Ea(A,e,t,T,r,n))});var b=u?l?E5:A5:l?N5:M5,C=c?void 0:b(r);return y5(C||r,function(A,T){C&&(T=A,A=r[T]),x5(o,T,Ea(A,e,t,T,r,n))}),o}Gb.exports=Ea});var Kb=H((fRe,Xb)=>{h();d();p();var hN=Yb(),dN=1,pN=4;function fN(r){return hN(r,dN|pN)}Xb.exports=fN});var Qb=H((yRe,Jb)=>{h();d();p();function gN(r,e,t,i){for(var s=r.length,n=t+(i?1:-1);i?n--:++n<s;)if(e(r[n],n,r))return n;return-1}Jb.exports=gN});var e0=H((SRe,Zb)=>{h();d();p();function mN(r){return r!==r}Zb.exports=mN});var r0=H((ARe,t0)=>{h();d();p();function _N(r,e,t){for(var i=t-1,s=r.length;++i<s;)if(r[i]===e)return i;return-1}t0.exports=_N});var s0=H((PRe,i0)=>{h();d();p();var yN=Qb(),xN=e0(),bN=r0();function vN(r,e,t){return e===e?bN(r,e,t):yN(r,xN,t)}i0.exports=vN});var o0=H((DRe,n0)=>{h();d();p();var SN=s0();function wN(r,e){var t=r==null?0:r.length;return!!t&&SN(r,e,0)>-1}n0.exports=wN});var l0=H((NRe,a0)=>{h();d();p();function TN(r,e,t){for(var i=-1,s=r==null?0:r.length;++i<s;)if(t(e,r[i]))return!0;return!1}a0.exports=TN});var c0=H((HRe,u0)=>{h();d();p();function CN(){}u0.exports=CN});var d0=H((VRe,h0)=>{h();d();p();var ph=Kc(),AN=c0(),EN=da(),IN=1/0,RN=ph&&1/EN(new ph([,-0]))[1]==IN?function(r){return new ph(r)}:AN;h0.exports=RN});var f0=H((KRe,p0)=>{h();d();p();var PN=Fc(),kN=o0(),ON=l0(),LN=Bc(),DN=d0(),FN=da(),BN=200;function MN(r,e,t){var i=-1,s=kN,n=r.length,o=!0,a=[],l=a;if(t)o=!1,s=ON;else if(n>=BN){var u=e?null:DN(r);if(u)return FN(u);o=!1,s=LN,l=new PN}else l=e?[]:a;e:for(;++i<n;){var c=r[i],g=e?e(c):c;if(c=t||c!==0?c:0,o&&g===g){for(var m=l.length;m--;)if(l[m]===g)continue e;e&&l.push(g),a.push(c)}else s(l,g,t)||(l!==a&&l.push(g),a.push(c))}return a}p0.exports=MN});var m0=H((ePe,g0)=>{h();d();p();var NN=f0();function zN(r){return r&&r.length?NN(r):[]}g0.exports=zN});var gh=H((_0,fh)=>{h();d();p();(function(r){if(typeof _0=="object"&&typeof fh<"u")fh.exports=r();else if(typeof define=="function"&&define.amd)define([],r);else{var e;typeof window<"u"||typeof window<"u"?e=window:typeof self<"u"?e=self:e=this,e.memoizerific=r()}})(function(){var r,e,t;return function i(s,n,o){function a(c,g){if(!n[c]){if(!s[c]){var m=typeof Ft=="function"&&Ft;if(!g&&m)return m(c,!0);if(l)return l(c,!0);var y=new Error("Cannot find module '"+c+"'");throw y.code="MODULE_NOT_FOUND",y}var b=n[c]={exports:{}};s[c][0].call(b.exports,function(C){var A=s[c][1][C];return a(A||C)},b,b.exports,i,s,n,o)}return n[c].exports}for(var l=typeof Ft=="function"&&Ft,u=0;u<o.length;u++)a(o[u]);return a}({1:[function(i,s,n){s.exports=function(o){if(typeof Map!="function"||o){var a=i("./similar");return new a}else return new Map}},{"./similar":2}],2:[function(i,s,n){function o(){return this.list=[],this.lastItem=void 0,this.size=0,this}o.prototype.get=function(a){var l;if(this.lastItem&&this.isEqual(this.lastItem.key,a))return this.lastItem.val;if(l=this.indexOf(a),l>=0)return this.lastItem=this.list[l],this.list[l].val},o.prototype.set=function(a,l){var u;return this.lastItem&&this.isEqual(this.lastItem.key,a)?(this.lastItem.val=l,this):(u=this.indexOf(a),u>=0?(this.lastItem=this.list[u],this.list[u].val=l,this):(this.lastItem={key:a,val:l},this.list.push(this.lastItem),this.size++,this))},o.prototype.delete=function(a){var l;if(this.lastItem&&this.isEqual(this.lastItem.key,a)&&(this.lastItem=void 0),l=this.indexOf(a),l>=0)return this.size--,this.list.splice(l,1)[0]},o.prototype.has=function(a){var l;return this.lastItem&&this.isEqual(this.lastItem.key,a)?!0:(l=this.indexOf(a),l>=0?(this.lastItem=this.list[l],!0):!1)},o.prototype.forEach=function(a,l){var u;for(u=0;u<this.size;u++)a.call(l||this,this.list[u].val,this.list[u].key,this)},o.prototype.indexOf=function(a){var l;for(l=0;l<this.size;l++)if(this.isEqual(this.list[l].key,a))return l;return-1},o.prototype.isEqual=function(a,l){return a===l||a!==a&&l!==l},s.exports=o},{}],3:[function(i,s,n){var o=i("map-or-similar");s.exports=function(c){var g=new o(!1),m=[];return function(y){var b=function(){var C=g,A,T,R=arguments.length-1,P=Array(R+1),E=!0,k;if((b.numArgs||b.numArgs===0)&&b.numArgs!==R+1)throw new Error("Memoizerific functions should always be called with the same number of arguments");for(k=0;k<R;k++){if(P[k]={cacheItem:C,arg:arguments[k]},C.has(arguments[k])){C=C.get(arguments[k]);continue}E=!1,A=new o(!1),C.set(arguments[k],A),C=A}return E&&(C.has(arguments[R])?T=C.get(arguments[R]):E=!1),E||(T=y.apply(null,arguments),C.set(arguments[R],T)),c>0&&(P[R]={cacheItem:C,arg:arguments[R]},E?a(m,P):m.push(P),m.length>c&&l(m.shift())),b.wasMemoized=E,b.numArgs=R+1,T};return b.limit=c,b.wasMemoized=!1,b.cache=g,b.lru=m,b}};function a(c,g){var m=c.length,y=g.length,b,C,A;for(C=0;C<m;C++){for(b=!0,A=0;A<y;A++)if(!u(c[C][A].arg,g[A].arg)){b=!1;break}if(b)break}c.push(c.splice(C,1)[0])}function l(c){var g=c.length,m=c[g-1],y,b;for(m.cacheItem.delete(m.arg),b=g-2;b>=0&&(m=c[b],y=m.cacheItem.get(m.arg),!y||!y.size);b--)m.cacheItem.delete(m.arg)}function u(c,g){return c===g||c!==c&&g!==g}},{"map-or-similar":1}]},{},[3])(3)})});var iw=H((Xa,rw)=>{h();d();p();(function(r,e){typeof Xa=="object"&&typeof rw<"u"?e(Xa):typeof define=="function"&&define.amd?define(["exports"],e):(r=typeof globalThis<"u"?globalThis:r||self,e(r.jtpp={}))})(Xa,function(r){"use strict";function e(_){return _.text!==void 0&&_.text!==""?`'${_.type}' with value '${_.text}'`:`'${_.type}'`}class t extends Error{constructor(I){super(`No parslet found for token: ${e(I)}`),this.token=I,Object.setPrototypeOf(this,t.prototype)}getToken(){return this.token}}class i extends Error{constructor(I){super(`The parsing ended early. The next token was: ${e(I)}`),this.token=I,Object.setPrototypeOf(this,i.prototype)}getToken(){return this.token}}class s extends Error{constructor(I,L){let V=`Unexpected type: '${I.type}'.`;L!==void 0&&(V+=` Message: ${L}`),super(V),Object.setPrototypeOf(this,s.prototype)}}function n(_){return I=>I.startsWith(_)?{type:_,text:_}:null}function o(_){let I=0,L,V=_[0],Z=!1;if(V!=="'"&&V!=='"')return null;for(;I<_.length;){if(I++,L=_[I],!Z&&L===V){I++;break}Z=!Z&&L==="\\"}if(L!==V)throw new Error("Unterminated String");return _.slice(0,I)}let a=new RegExp("[$_\\p{ID_Start}]|\\\\u\\p{Hex_Digit}{4}|\\\\u\\{0*(?:\\p{Hex_Digit}{1,5}|10\\p{Hex_Digit}{4})\\}","u"),l=new RegExp("[$\\-\\p{ID_Continue}\\u200C\\u200D]|\\\\u\\p{Hex_Digit}{4}|\\\\u\\{0*(?:\\p{Hex_Digit}{1,5}|10\\p{Hex_Digit}{4})\\}","u");function u(_){let I=_[0];if(!a.test(I))return null;let L=1;do{if(I=_[L],!l.test(I))break;L++}while(L<_.length);return _.slice(0,L)}let c=/^(NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity))/;function g(_){var I,L;return(L=(I=c.exec(_))===null||I===void 0?void 0:I[0])!==null&&L!==void 0?L:null}let m=_=>{let I=u(_);return I==null?null:{type:"Identifier",text:I}};function y(_){return I=>{if(!I.startsWith(_))return null;let L=I[_.length];return L!==void 0&&l.test(L)?null:{type:_,text:_}}}let b=_=>{let I=o(_);return I==null?null:{type:"StringValue",text:I}},C=_=>_.length>0?null:{type:"EOF",text:""},A=_=>{let I=g(_);return I===null?null:{type:"Number",text:I}},T=[C,n("=>"),n("("),n(")"),n("{"),n("}"),n("["),n("]"),n("|"),n("&"),n("<"),n(">"),n(","),n(";"),n("*"),n("?"),n("!"),n("="),n(":"),n("..."),n("."),n("#"),n("~"),n("/"),n("@"),y("undefined"),y("null"),y("function"),y("this"),y("new"),y("module"),y("event"),y("external"),y("typeof"),y("keyof"),y("readonly"),y("import"),y("is"),y("in"),y("asserts"),A,m,b],R=/^\s*\n\s*/;class P{static create(I){let L=this.read(I);I=L.text;let V=this.read(I);return I=V.text,new P(I,void 0,L.token,V.token)}constructor(I,L,V,Z){this.text="",this.text=I,this.previous=L,this.current=V,this.next=Z}static read(I,L=!1){L=L||R.test(I),I=I.trim();for(let V of T){let Z=V(I);if(Z!==null){let oe=Object.assign(Object.assign({},Z),{startOfLine:L});return I=I.slice(oe.text.length),{text:I,token:oe}}}throw new Error("Unexpected Token "+I)}advance(){let I=P.read(this.text);return new P(I.text,this.current,this.next,I.token)}}function E(_){if(_===void 0)throw new Error("Unexpected undefined");if(_.type==="JsdocTypeKeyValue"||_.type==="JsdocTypeParameterList"||_.type==="JsdocTypeProperty"||_.type==="JsdocTypeReadonlyProperty"||_.type==="JsdocTypeObjectField"||_.type==="JsdocTypeJsdocObjectField"||_.type==="JsdocTypeIndexSignature"||_.type==="JsdocTypeMappedType")throw new s(_);return _}function k(_){return _.type==="JsdocTypeKeyValue"?B(_):E(_)}function O(_){return _.type==="JsdocTypeName"?_:B(_)}function B(_){if(_.type!=="JsdocTypeKeyValue")throw new s(_);return _}function F(_){var I;if(_.type==="JsdocTypeVariadic"){if(((I=_.element)===null||I===void 0?void 0:I.type)==="JsdocTypeName")return _;throw new s(_)}if(_.type!=="JsdocTypeNumber"&&_.type!=="JsdocTypeName")throw new s(_);return _}function U(_){return _.type==="JsdocTypeIndexSignature"||_.type==="JsdocTypeMappedType"}var q;(function(_){_[_.ALL=0]="ALL",_[_.PARAMETER_LIST=1]="PARAMETER_LIST",_[_.OBJECT=2]="OBJECT",_[_.KEY_VALUE=3]="KEY_VALUE",_[_.INDEX_BRACKETS=4]="INDEX_BRACKETS",_[_.UNION=5]="UNION",_[_.INTERSECTION=6]="INTERSECTION",_[_.PREFIX=7]="PREFIX",_[_.INFIX=8]="INFIX",_[_.TUPLE=9]="TUPLE",_[_.SYMBOL=10]="SYMBOL",_[_.OPTIONAL=11]="OPTIONAL",_[_.NULLABLE=12]="NULLABLE",_[_.KEY_OF_TYPE_OF=13]="KEY_OF_TYPE_OF",_[_.FUNCTION=14]="FUNCTION",_[_.ARROW=15]="ARROW",_[_.ARRAY_BRACKETS=16]="ARRAY_BRACKETS",_[_.GENERIC=17]="GENERIC",_[_.NAME_PATH=18]="NAME_PATH",_[_.PARENTHESIS=19]="PARENTHESIS",_[_.SPECIAL_TYPES=20]="SPECIAL_TYPES"})(q||(q={}));class ee{constructor(I,L,V){this.grammar=I,typeof L=="string"?this._lexer=P.create(L):this._lexer=L,this.baseParser=V}get lexer(){return this._lexer}parse(){let I=this.parseType(q.ALL);if(this.lexer.current.type!=="EOF")throw new i(this.lexer.current);return I}parseType(I){return E(this.parseIntermediateType(I))}parseIntermediateType(I){let L=this.tryParslets(null,I);if(L===null)throw new t(this.lexer.current);return this.parseInfixIntermediateType(L,I)}parseInfixIntermediateType(I,L){let V=this.tryParslets(I,L);for(;V!==null;)I=V,V=this.tryParslets(I,L);return I}tryParslets(I,L){for(let V of this.grammar){let Z=V(this,L,I);if(Z!==null)return Z}return null}consume(I){return Array.isArray(I)||(I=[I]),I.includes(this.lexer.current.type)?(this._lexer=this.lexer.advance(),!0):!1}acceptLexerState(I){this._lexer=I.lexer}}function te(_){return _==="EOF"||_==="|"||_===","||_===")"||_===">"}let $=(_,I,L)=>{let V=_.lexer.current.type,Z=_.lexer.next.type;return L==null&&V==="?"&&!te(Z)||L!=null&&V==="?"?(_.consume("?"),L==null?{type:"JsdocTypeNullable",element:_.parseType(q.NULLABLE),meta:{position:"prefix"}}:{type:"JsdocTypeNullable",element:E(L),meta:{position:"suffix"}}):null};function D(_){let I=(L,V,Z)=>{let oe=L.lexer.current.type,ue=L.lexer.next.type;if(Z===null){if("parsePrefix"in _&&_.accept(oe,ue))return _.parsePrefix(L)}else if("parseInfix"in _&&_.precedence>V&&_.accept(oe,ue))return _.parseInfix(L,Z);return null};return Object.defineProperty(I,"name",{value:_.name}),I}let N=D({name:"optionalParslet",accept:_=>_==="=",precedence:q.OPTIONAL,parsePrefix:_=>(_.consume("="),{type:"JsdocTypeOptional",element:_.parseType(q.OPTIONAL),meta:{position:"prefix"}}),parseInfix:(_,I)=>(_.consume("="),{type:"JsdocTypeOptional",element:E(I),meta:{position:"suffix"}})}),G=D({name:"numberParslet",accept:_=>_==="Number",parsePrefix:_=>{let I=parseFloat(_.lexer.current.text);return _.consume("Number"),{type:"JsdocTypeNumber",value:I}}}),Q=D({name:"parenthesisParslet",accept:_=>_==="(",parsePrefix:_=>{if(_.consume("("),_.consume(")"))return{type:"JsdocTypeParameterList",elements:[]};let I=_.parseIntermediateType(q.ALL);if(!_.consume(")"))throw new Error("Unterminated parenthesis");return I.type==="JsdocTypeParameterList"?I:I.type==="JsdocTypeKeyValue"?{type:"JsdocTypeParameterList",elements:[I]}:{type:"JsdocTypeParenthesis",element:E(I)}}}),ne=D({name:"specialTypesParslet",accept:(_,I)=>_==="?"&&te(I)||_==="null"||_==="undefined"||_==="*",parsePrefix:_=>{if(_.consume("null"))return{type:"JsdocTypeNull"};if(_.consume("undefined"))return{type:"JsdocTypeUndefined"};if(_.consume("*"))return{type:"JsdocTypeAny"};if(_.consume("?"))return{type:"JsdocTypeUnknown"};throw new Error("Unacceptable token: "+_.lexer.current.text)}}),ie=D({name:"notNullableParslet",accept:_=>_==="!",precedence:q.NULLABLE,parsePrefix:_=>(_.consume("!"),{type:"JsdocTypeNotNullable",element:_.parseType(q.NULLABLE),meta:{position:"prefix"}}),parseInfix:(_,I)=>(_.consume("!"),{type:"JsdocTypeNotNullable",element:E(I),meta:{position:"suffix"}})});function re({allowTrailingComma:_}){return D({name:"parameterListParslet",accept:I=>I===",",precedence:q.PARAMETER_LIST,parseInfix:(I,L)=>{let V=[k(L)];I.consume(",");do try{let Z=I.parseIntermediateType(q.PARAMETER_LIST);V.push(k(Z))}catch(Z){if(_&&Z instanceof t)break;throw Z}while(I.consume(","));if(V.length>0&&V.slice(0,-1).some(Z=>Z.type==="JsdocTypeVariadic"))throw new Error("Only the last parameter may be a rest parameter");return{type:"JsdocTypeParameterList",elements:V}}})}let ae=D({name:"genericParslet",accept:(_,I)=>_==="<"||_==="."&&I==="<",precedence:q.GENERIC,parseInfix:(_,I)=>{let L=_.consume(".");_.consume("<");let V=[];do V.push(_.parseType(q.PARAMETER_LIST));while(_.consume(","));if(!_.consume(">"))throw new Error("Unterminated generic parameter list");return{type:"JsdocTypeGeneric",left:E(I),elements:V,meta:{brackets:"angle",dot:L}}}}),ce=D({name:"unionParslet",accept:_=>_==="|",precedence:q.UNION,parseInfix:(_,I)=>{_.consume("|");let L=[];do L.push(_.parseType(q.UNION));while(_.consume("|"));return{type:"JsdocTypeUnion",elements:[E(I),...L]}}}),Se=[$,N,G,Q,ne,ie,re({allowTrailingComma:!0}),ae,ce,N];function we({allowSquareBracketsOnAnyType:_,allowJsdocNamePaths:I,pathGrammar:L}){return function(Z,oe,ue){if(ue==null||oe>=q.NAME_PATH)return null;let Te=Z.lexer.current.type,et=Z.lexer.next.type;if(!(Te==="."&&et!=="<"||Te==="["&&(_||ue.type==="JsdocTypeName")||I&&(Te==="~"||Te==="#")))return null;let Dt,Wn=!1;Z.consume(".")?Dt="property":Z.consume("[")?(Dt="property-brackets",Wn=!0):Z.consume("~")?Dt="inner":(Z.consume("#"),Dt="instance");let lp=L!==null?new ee(L,Z.lexer,Z):Z,tr=lp.parseIntermediateType(q.NAME_PATH);Z.acceptLexerState(lp);let cs;switch(tr.type){case"JsdocTypeName":cs={type:"JsdocTypeProperty",value:tr.value,meta:{quote:void 0}};break;case"JsdocTypeNumber":cs={type:"JsdocTypeProperty",value:tr.value.toString(10),meta:{quote:void 0}};break;case"JsdocTypeStringValue":cs={type:"JsdocTypeProperty",value:tr.value,meta:{quote:tr.meta.quote}};break;case"JsdocTypeSpecialNamePath":if(tr.specialType==="event")cs=tr;else throw new s(tr,"Type 'JsdocTypeSpecialNamePath' is only allowed with specialType 'event'");break;default:throw new s(tr,"Expecting 'JsdocTypeName', 'JsdocTypeNumber', 'JsdocStringValue' or 'JsdocTypeSpecialNamePath'")}if(Wn&&!Z.consume("]")){let up=Z.lexer.current;throw new Error(`Unterminated square brackets. Next token is '${up.type}' with text '${up.text}'`)}return{type:"JsdocTypeNamePath",left:E(ue),right:cs,pathType:Dt}}}function xe({allowedAdditionalTokens:_}){return D({name:"nameParslet",accept:I=>I==="Identifier"||I==="this"||I==="new"||_.includes(I),parsePrefix:I=>{let{type:L,text:V}=I.lexer.current;return I.consume(L),{type:"JsdocTypeName",value:V}}})}let Ie=D({name:"stringValueParslet",accept:_=>_==="StringValue",parsePrefix:_=>{let I=_.lexer.current.text;return _.consume("StringValue"),{type:"JsdocTypeStringValue",value:I.slice(1,-1),meta:{quote:I[0]==="'"?"single":"double"}}}});function De({pathGrammar:_,allowedTypes:I}){return D({name:"specialNamePathParslet",accept:L=>I.includes(L),parsePrefix:L=>{let V=L.lexer.current.type;if(L.consume(V),!L.consume(":"))return{type:"JsdocTypeName",value:V};let Z,oe=L.lexer.current;if(L.consume("StringValue"))Z={type:"JsdocTypeSpecialNamePath",value:oe.text.slice(1,-1),specialType:V,meta:{quote:oe.text[0]==="'"?"single":"double"}};else{let et="",Ve=["Identifier","@","/"];for(;Ve.some(Dt=>L.consume(Dt));)et+=oe.text,oe=L.lexer.current;Z={type:"JsdocTypeSpecialNamePath",value:et,specialType:V,meta:{quote:void 0}}}let ue=new ee(_,L.lexer,L),Te=ue.parseInfixIntermediateType(Z,q.ALL);return L.acceptLexerState(ue),E(Te)}})}let nt=[xe({allowedAdditionalTokens:["external","module"]}),Ie,G,we({allowSquareBracketsOnAnyType:!1,allowJsdocNamePaths:!0,pathGrammar:null})],$e=[...nt,De({allowedTypes:["event"],pathGrammar:nt})];function Re(_){let I;if(_.type==="JsdocTypeParameterList")I=_.elements;else if(_.type==="JsdocTypeParenthesis")I=[_.element];else throw new s(_);return I.map(L=>k(L))}function ot(_){let I=Re(_);if(I.some(L=>L.type==="JsdocTypeKeyValue"))throw new Error("No parameter should be named");return I}function je({allowNamedParameters:_,allowNoReturnType:I,allowWithoutParenthesis:L,allowNewAsFunctionKeyword:V}){return D({name:"functionParslet",accept:(Z,oe)=>Z==="function"||V&&Z==="new"&&oe==="(",parsePrefix:Z=>{let oe=Z.consume("new");Z.consume("function");let ue=Z.lexer.current.type==="(";if(!ue){if(!L)throw new Error("function is missing parameter list");return{type:"JsdocTypeName",value:"function"}}let Te={type:"JsdocTypeFunction",parameters:[],arrow:!1,constructor:oe,parenthesis:ue},et=Z.parseIntermediateType(q.FUNCTION);if(_===void 0)Te.parameters=ot(et);else{if(oe&&et.type==="JsdocTypeFunction"&&et.arrow)return Te=et,Te.constructor=!0,Te;Te.parameters=Re(et);for(let Ve of Te.parameters)if(Ve.type==="JsdocTypeKeyValue"&&!_.includes(Ve.key))throw new Error(`only allowed named parameters are ${_.join(", ")} but got ${Ve.type}`)}if(Z.consume(":"))Te.returnType=Z.parseType(q.PREFIX);else if(!I)throw new Error("function is missing return type");return Te}})}function at({allowPostfix:_,allowEnclosingBrackets:I}){return D({name:"variadicParslet",accept:L=>L==="...",precedence:q.PREFIX,parsePrefix:L=>{L.consume("...");let V=I&&L.consume("[");try{let Z=L.parseType(q.PREFIX);if(V&&!L.consume("]"))throw new Error("Unterminated variadic type. Missing ']'");return{type:"JsdocTypeVariadic",element:E(Z),meta:{position:"prefix",squareBrackets:V}}}catch(Z){if(Z instanceof t){if(V)throw new Error("Empty square brackets for variadic are not allowed.");return{type:"JsdocTypeVariadic",meta:{position:void 0,squareBrackets:!1}}}else throw Z}},parseInfix:_?(L,V)=>(L.consume("..."),{type:"JsdocTypeVariadic",element:E(V),meta:{position:"suffix",squareBrackets:!1}}):void 0})}let jt=D({name:"symbolParslet",accept:_=>_==="(",precedence:q.SYMBOL,parseInfix:(_,I)=>{if(I.type!=="JsdocTypeName")throw new Error("Symbol expects a name on the left side. (Reacting on '(')");_.consume("(");let L={type:"JsdocTypeSymbol",value:I.value};if(!_.consume(")")){let V=_.parseIntermediateType(q.SYMBOL);if(L.element=F(V),!_.consume(")"))throw new Error("Symbol does not end after value")}return L}}),Ze=D({name:"arrayBracketsParslet",precedence:q.ARRAY_BRACKETS,accept:(_,I)=>_==="["&&I==="]",parseInfix:(_,I)=>(_.consume("["),_.consume("]"),{type:"JsdocTypeGeneric",left:{type:"JsdocTypeName",value:"Array"},elements:[E(I)],meta:{brackets:"square",dot:!1}})});function Ee({objectFieldGrammar:_,allowKeyTypes:I}){return D({name:"objectParslet",accept:L=>L==="{",parsePrefix:L=>{L.consume("{");let V={type:"JsdocTypeObject",meta:{separator:"comma"},elements:[]};if(!L.consume("}")){let Z,oe=new ee(_,L.lexer,L);for(;;){oe.acceptLexerState(L);let ue=oe.parseIntermediateType(q.OBJECT);L.acceptLexerState(oe),ue===void 0&&I&&(ue=L.parseIntermediateType(q.OBJECT));let Te=!1;if(ue.type==="JsdocTypeNullable"&&(Te=!0,ue=ue.element),ue.type==="JsdocTypeNumber"||ue.type==="JsdocTypeName"||ue.type==="JsdocTypeStringValue"){let Ve;ue.type==="JsdocTypeStringValue"&&(Ve=ue.meta.quote),V.elements.push({type:"JsdocTypeObjectField",key:ue.value.toString(),right:void 0,optional:Te,readonly:!1,meta:{quote:Ve}})}else if(ue.type==="JsdocTypeObjectField"||ue.type==="JsdocTypeJsdocObjectField")V.elements.push(ue);else throw new s(ue);if(L.lexer.current.startOfLine)Z="linebreak";else if(L.consume(","))Z="comma";else if(L.consume(";"))Z="semicolon";else break;if(L.lexer.current.type==="}")break}if(V.meta.separator=Z??"comma",!L.consume("}"))throw new Error("Unterminated record type. Missing '}'")}return V}})}function ze({allowSquaredProperties:_,allowKeyTypes:I,allowReadonly:L,allowOptional:V}){return D({name:"objectFieldParslet",precedence:q.KEY_VALUE,accept:Z=>Z===":",parseInfix:(Z,oe)=>{var ue;let Te=!1,et=!1;V&&oe.type==="JsdocTypeNullable"&&(Te=!0,oe=oe.element),L&&oe.type==="JsdocTypeReadonlyProperty"&&(et=!0,oe=oe.element);let Ve=(ue=Z.baseParser)!==null&&ue!==void 0?ue:Z;if(Ve.acceptLexerState(Z),oe.type==="JsdocTypeNumber"||oe.type==="JsdocTypeName"||oe.type==="JsdocTypeStringValue"||U(oe)){if(U(oe)&&!_)throw new s(oe);Ve.consume(":");let Dt;oe.type==="JsdocTypeStringValue"&&(Dt=oe.meta.quote);let Wn=Ve.parseType(q.KEY_VALUE);return Z.acceptLexerState(Ve),{type:"JsdocTypeObjectField",key:U(oe)?oe:oe.value.toString(),right:Wn,optional:Te,readonly:et,meta:{quote:Dt}}}else{if(!I)throw new s(oe);Ve.consume(":");let Dt=Ve.parseType(q.KEY_VALUE);return Z.acceptLexerState(Ve),{type:"JsdocTypeJsdocObjectField",left:E(oe),right:Dt}}}})}function Zt({allowOptional:_,allowVariadic:I}){return D({name:"keyValueParslet",precedence:q.KEY_VALUE,accept:L=>L===":",parseInfix:(L,V)=>{let Z=!1,oe=!1;if(_&&V.type==="JsdocTypeNullable"&&(Z=!0,V=V.element),I&&V.type==="JsdocTypeVariadic"&&V.element!==void 0&&(oe=!0,V=V.element),V.type!=="JsdocTypeName")throw new s(V);L.consume(":");let ue=L.parseType(q.KEY_VALUE);return{type:"JsdocTypeKeyValue",key:V.value,right:ue,optional:Z,variadic:oe}}})}let yr=[...Se,je({allowWithoutParenthesis:!0,allowNamedParameters:["this","new"],allowNoReturnType:!0,allowNewAsFunctionKeyword:!1}),Ie,De({allowedTypes:["module","external","event"],pathGrammar:$e}),at({allowEnclosingBrackets:!0,allowPostfix:!0}),xe({allowedAdditionalTokens:["keyof"]}),jt,Ze,we({allowSquareBracketsOnAnyType:!1,allowJsdocNamePaths:!0,pathGrammar:$e})],li=[...yr,Ee({objectFieldGrammar:[xe({allowedAdditionalTokens:["module","in"]}),ze({allowSquaredProperties:!1,allowKeyTypes:!0,allowOptional:!1,allowReadonly:!1}),...yr],allowKeyTypes:!0}),Zt({allowOptional:!0,allowVariadic:!0})],ss=D({name:"typeOfParslet",accept:_=>_==="typeof",parsePrefix:_=>(_.consume("typeof"),{type:"JsdocTypeTypeof",element:E(_.parseType(q.KEY_OF_TYPE_OF))})}),Ln=[xe({allowedAdditionalTokens:["module","keyof","event","external","in"]}),$,N,Ie,G,ze({allowSquaredProperties:!1,allowKeyTypes:!1,allowOptional:!1,allowReadonly:!1})],Dn=[...Se,Ee({allowKeyTypes:!1,objectFieldGrammar:Ln}),xe({allowedAdditionalTokens:["event","external","in"]}),ss,je({allowWithoutParenthesis:!1,allowNamedParameters:["this","new"],allowNoReturnType:!0,allowNewAsFunctionKeyword:!1}),at({allowEnclosingBrackets:!1,allowPostfix:!1}),xe({allowedAdditionalTokens:["keyof"]}),De({allowedTypes:["module"],pathGrammar:$e}),we({allowSquareBracketsOnAnyType:!1,allowJsdocNamePaths:!0,pathGrammar:$e}),Zt({allowOptional:!1,allowVariadic:!1}),jt],Fn=D({name:"assertsParslet",accept:_=>_==="asserts",parsePrefix:_=>{_.consume("asserts");let I=_.parseIntermediateType(q.SYMBOL);if(I.type!=="JsdocTypeName")throw new s(I,"A typescript asserts always has to have a name on the left side.");return _.consume("is"),{type:"JsdocTypeAsserts",left:I,right:E(_.parseIntermediateType(q.INFIX))}}});function Bn({allowQuestionMark:_}){return D({name:"tupleParslet",accept:I=>I==="[",parsePrefix:I=>{I.consume("[");let L={type:"JsdocTypeTuple",elements:[]};if(I.consume("]"))return L;let V=I.parseIntermediateType(q.ALL);if(V.type==="JsdocTypeParameterList"?V.elements[0].type==="JsdocTypeKeyValue"?L.elements=V.elements.map(B):L.elements=V.elements.map(E):V.type==="JsdocTypeKeyValue"?L.elements=[B(V)]:L.elements=[E(V)],!I.consume("]"))throw new Error("Unterminated '['");if(!_&&L.elements.some(Z=>Z.type==="JsdocTypeUnknown"))throw new Error("Question mark in tuple not allowed");return L}})}let ns=D({name:"keyOfParslet",accept:_=>_==="keyof",parsePrefix:_=>(_.consume("keyof"),{type:"JsdocTypeKeyof",element:E(_.parseType(q.KEY_OF_TYPE_OF))})}),Mn=D({name:"importParslet",accept:_=>_==="import",parsePrefix:_=>{if(_.consume("import"),!_.consume("("))throw new Error("Missing parenthesis after import keyword");let I=_.parseType(q.PREFIX);if(I.type!=="JsdocTypeStringValue")throw new Error("Only string values are allowed as paths for imports");if(!_.consume(")"))throw new Error("Missing closing parenthesis after import keyword");return{type:"JsdocTypeImport",element:I}}}),xr=D({name:"readonlyPropertyParslet",accept:_=>_==="readonly",parsePrefix:_=>(_.consume("readonly"),{type:"JsdocTypeReadonlyProperty",element:_.parseType(q.KEY_VALUE)})}),ui=D({name:"arrowFunctionParslet",precedence:q.ARROW,accept:_=>_==="=>",parseInfix:(_,I)=>(_.consume("=>"),{type:"JsdocTypeFunction",parameters:Re(I).map(O),arrow:!0,constructor:!1,parenthesis:!0,returnType:_.parseType(q.OBJECT)})}),os=D({name:"intersectionParslet",accept:_=>_==="&",precedence:q.INTERSECTION,parseInfix:(_,I)=>{_.consume("&");let L=[];do L.push(_.parseType(q.INTERSECTION));while(_.consume("&"));return{type:"JsdocTypeIntersection",elements:[E(I),...L]}}}),Nn=D({name:"predicateParslet",precedence:q.INFIX,accept:_=>_==="is",parseInfix:(_,I)=>{if(I.type!=="JsdocTypeName")throw new s(I,"A typescript predicate always has to have a name on the left side.");return _.consume("is"),{type:"JsdocTypePredicate",left:I,right:E(_.parseIntermediateType(q.INFIX))}}}),zn=D({name:"objectSquareBracketPropertyParslet",accept:_=>_==="[",parsePrefix:_=>{if(_.baseParser===void 0)throw new Error("Only allowed inside object grammar");_.consume("[");let I=_.lexer.current.text;_.consume("Identifier");let L;if(_.consume(":")){let V=_.baseParser;V.acceptLexerState(_),L={type:"JsdocTypeIndexSignature",key:I,right:V.parseType(q.INDEX_BRACKETS)},_.acceptLexerState(V)}else if(_.consume("in")){let V=_.baseParser;V.acceptLexerState(_),L={type:"JsdocTypeMappedType",key:I,right:V.parseType(q.ARRAY_BRACKETS)},_.acceptLexerState(V)}else throw new Error("Missing ':' or 'in' inside square bracketed property.");if(!_.consume("]"))throw new Error("Unterminated square brackets");return L}}),ci=[xr,xe({allowedAdditionalTokens:["module","event","keyof","event","external","in"]}),$,N,Ie,G,ze({allowSquaredProperties:!0,allowKeyTypes:!1,allowOptional:!0,allowReadonly:!0}),zn],Wr=[...Se,Ee({allowKeyTypes:!1,objectFieldGrammar:ci}),ss,ns,Mn,Ie,je({allowWithoutParenthesis:!0,allowNoReturnType:!1,allowNamedParameters:["this","new","args"],allowNewAsFunctionKeyword:!0}),Bn({allowQuestionMark:!1}),at({allowEnclosingBrackets:!1,allowPostfix:!1}),Fn,xe({allowedAdditionalTokens:["event","external","in"]}),De({allowedTypes:["module"],pathGrammar:$e}),Ze,ui,we({allowSquareBracketsOnAnyType:!0,allowJsdocNamePaths:!1,pathGrammar:$e}),os,Nn,Zt({allowVariadic:!0,allowOptional:!0})];function W(_,I){switch(I){case"closure":return new ee(Dn,_).parse();case"jsdoc":return new ee(li,_).parse();case"typescript":return new ee(Wr,_).parse()}}function Y(_,I=["typescript","closure","jsdoc"]){let L;for(let V of I)try{return W(_,V)}catch(Z){L=Z}throw L}function _e(_,I){let L=_[I.type];if(L===void 0)throw new Error(`In this set of transform rules exists no rule for type ${I.type}.`);return L(I,V=>_e(_,V))}function de(_){throw new Error("This transform is not available. Are you trying the correct parsing mode?")}function Me(_){let I={params:[]};for(let L of _.parameters)L.type==="JsdocTypeKeyValue"?L.key==="this"?I.this=L.right:L.key==="new"?I.new=L.right:I.params.push(L):I.params.push(L);return I}function ge(_,I,L){return _==="prefix"?L+I:I+L}function lt(_,I){switch(I){case"double":return`"${_}"`;case"single":return`'${_}'`;case void 0:return _}}function Wt(){return{JsdocTypeParenthesis:(_,I)=>`(${_.element!==void 0?I(_.element):""})`,JsdocTypeKeyof:(_,I)=>`keyof ${I(_.element)}`,JsdocTypeFunction:(_,I)=>{if(_.arrow){if(_.returnType===void 0)throw new Error("Arrow function needs a return type.");let L=`(${_.parameters.map(I).join(", ")}) => ${I(_.returnType)}`;return _.constructor&&(L="new "+L),L}else{let L=_.constructor?"new":"function";return _.parenthesis&&(L+=`(${_.parameters.map(I).join(", ")})`,_.returnType!==void 0&&(L+=`: ${I(_.returnType)}`)),L}},JsdocTypeName:_=>_.value,JsdocTypeTuple:(_,I)=>`[${_.elements.map(I).join(", ")}]`,JsdocTypeVariadic:(_,I)=>_.meta.position===void 0?"...":ge(_.meta.position,I(_.element),"..."),JsdocTypeNamePath:(_,I)=>{let L=I(_.left),V=I(_.right);switch(_.pathType){case"inner":return`${L}~${V}`;case"instance":return`${L}#${V}`;case"property":return`${L}.${V}`;case"property-brackets":return`${L}[${V}]`}},JsdocTypeStringValue:_=>lt(_.value,_.meta.quote),JsdocTypeAny:()=>"*",JsdocTypeGeneric:(_,I)=>{if(_.meta.brackets==="square"){let L=_.elements[0],V=I(L);return L.type==="JsdocTypeUnion"||L.type==="JsdocTypeIntersection"?`(${V})[]`:`${V}[]`}else return`${I(_.left)}${_.meta.dot?".":""}<${_.elements.map(I).join(", ")}>`},JsdocTypeImport:(_,I)=>`import(${I(_.element)})`,JsdocTypeObjectField:(_,I)=>{let L="";return _.readonly&&(L+="readonly "),typeof _.key=="string"?L+=lt(_.key,_.meta.quote):L+=I(_.key),_.optional&&(L+="?"),_.right===void 0?L:L+`: ${I(_.right)}`},JsdocTypeJsdocObjectField:(_,I)=>`${I(_.left)}: ${I(_.right)}`,JsdocTypeKeyValue:(_,I)=>{let L=_.key;return _.optional&&(L+="?"),_.variadic&&(L="..."+L),_.right===void 0?L:L+`: ${I(_.right)}`},JsdocTypeSpecialNamePath:_=>`${_.specialType}:${lt(_.value,_.meta.quote)}`,JsdocTypeNotNullable:(_,I)=>ge(_.meta.position,I(_.element),"!"),JsdocTypeNull:()=>"null",JsdocTypeNullable:(_,I)=>ge(_.meta.position,I(_.element),"?"),JsdocTypeNumber:_=>_.value.toString(),JsdocTypeObject:(_,I)=>`{${_.elements.map(I).join((_.meta.separator==="comma"?",":";")+" ")}}`,JsdocTypeOptional:(_,I)=>ge(_.meta.position,I(_.element),"="),JsdocTypeSymbol:(_,I)=>`${_.value}(${_.element!==void 0?I(_.element):""})`,JsdocTypeTypeof:(_,I)=>`typeof ${I(_.element)}`,JsdocTypeUndefined:()=>"undefined",JsdocTypeUnion:(_,I)=>_.elements.map(I).join(" | "),JsdocTypeUnknown:()=>"?",JsdocTypeIntersection:(_,I)=>_.elements.map(I).join(" & "),JsdocTypeProperty:_=>lt(_.value,_.meta.quote),JsdocTypePredicate:(_,I)=>`${I(_.left)} is ${I(_.right)}`,JsdocTypeIndexSignature:(_,I)=>`[${_.key}: ${I(_.right)}]`,JsdocTypeMappedType:(_,I)=>`[${_.key} in ${I(_.right)}]`,JsdocTypeAsserts:(_,I)=>`asserts ${I(_.left)} is ${I(_.right)}`}}let gt=Wt();function qt(_){return _e(gt,_)}let as=["null","true","false","break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","yield"];function mt(_){let I={type:"NameExpression",name:_};return as.includes(_)&&(I.reservedWord=!0),I}let vt={JsdocTypeOptional:(_,I)=>{let L=I(_.element);return L.optional=!0,L},JsdocTypeNullable:(_,I)=>{let L=I(_.element);return L.nullable=!0,L},JsdocTypeNotNullable:(_,I)=>{let L=I(_.element);return L.nullable=!1,L},JsdocTypeVariadic:(_,I)=>{if(_.element===void 0)throw new Error("dots without value are not allowed in catharsis mode");let L=I(_.element);return L.repeatable=!0,L},JsdocTypeAny:()=>({type:"AllLiteral"}),JsdocTypeNull:()=>({type:"NullLiteral"}),JsdocTypeStringValue:_=>mt(lt(_.value,_.meta.quote)),JsdocTypeUndefined:()=>({type:"UndefinedLiteral"}),JsdocTypeUnknown:()=>({type:"UnknownLiteral"}),JsdocTypeFunction:(_,I)=>{let L=Me(_),V={type:"FunctionType",params:L.params.map(I)};return L.this!==void 0&&(V.this=I(L.this)),L.new!==void 0&&(V.new=I(L.new)),_.returnType!==void 0&&(V.result=I(_.returnType)),V},JsdocTypeGeneric:(_,I)=>({type:"TypeApplication",applications:_.elements.map(L=>I(L)),expression:I(_.left)}),JsdocTypeSpecialNamePath:_=>mt(_.specialType+":"+lt(_.value,_.meta.quote)),JsdocTypeName:_=>_.value!=="function"?mt(_.value):{type:"FunctionType",params:[]},JsdocTypeNumber:_=>mt(_.value.toString()),JsdocTypeObject:(_,I)=>{let L={type:"RecordType",fields:[]};for(let V of _.elements)V.type!=="JsdocTypeObjectField"&&V.type!=="JsdocTypeJsdocObjectField"?L.fields.push({type:"FieldType",key:I(V),value:void 0}):L.fields.push(I(V));return L},JsdocTypeObjectField:(_,I)=>{if(typeof _.key!="string")throw new Error("Index signatures and mapped types are not supported");return{type:"FieldType",key:mt(lt(_.key,_.meta.quote)),value:_.right===void 0?void 0:I(_.right)}},JsdocTypeJsdocObjectField:(_,I)=>({type:"FieldType",key:I(_.left),value:I(_.right)}),JsdocTypeUnion:(_,I)=>({type:"TypeUnion",elements:_.elements.map(L=>I(L))}),JsdocTypeKeyValue:(_,I)=>({type:"FieldType",key:mt(_.key),value:_.right===void 0?void 0:I(_.right)}),JsdocTypeNamePath:(_,I)=>{let L=I(_.left),V;_.right.type==="JsdocTypeSpecialNamePath"?V=I(_.right).name:V=lt(_.right.value,_.right.meta.quote);let Z=_.pathType==="inner"?"~":_.pathType==="instance"?"#":".";return mt(`${L.name}${Z}${V}`)},JsdocTypeSymbol:_=>{let I="",L=_.element,V=!1;return L?.type==="JsdocTypeVariadic"&&(L.meta.position==="prefix"?I="...":V=!0,L=L.element),L?.type==="JsdocTypeName"?I+=L.value:L?.type==="JsdocTypeNumber"&&(I+=L.value.toString()),V&&(I+="..."),mt(`${_.value}(${I})`)},JsdocTypeParenthesis:(_,I)=>I(E(_.element)),JsdocTypeMappedType:de,JsdocTypeIndexSignature:de,JsdocTypeImport:de,JsdocTypeKeyof:de,JsdocTypeTuple:de,JsdocTypeTypeof:de,JsdocTypeIntersection:de,JsdocTypeProperty:de,JsdocTypePredicate:de,JsdocTypeAsserts:de};function jn(_){return _e(vt,_)}function $t(_){switch(_){case void 0:return"none";case"single":return"single";case"double":return"double"}}function Un(_){switch(_){case"inner":return"INNER_MEMBER";case"instance":return"INSTANCE_MEMBER";case"property":return"MEMBER";case"property-brackets":return"MEMBER"}}function er(_,I){return I.length===2?{type:_,left:I[0],right:I[1]}:{type:_,left:I[0],right:er(_,I.slice(1))}}let ls={JsdocTypeOptional:(_,I)=>({type:"OPTIONAL",value:I(_.element),meta:{syntax:_.meta.position==="prefix"?"PREFIX_EQUAL_SIGN":"SUFFIX_EQUALS_SIGN"}}),JsdocTypeNullable:(_,I)=>({type:"NULLABLE",value:I(_.element),meta:{syntax:_.meta.position==="prefix"?"PREFIX_QUESTION_MARK":"SUFFIX_QUESTION_MARK"}}),JsdocTypeNotNullable:(_,I)=>({type:"NOT_NULLABLE",value:I(_.element),meta:{syntax:_.meta.position==="prefix"?"PREFIX_BANG":"SUFFIX_BANG"}}),JsdocTypeVariadic:(_,I)=>{let L={type:"VARIADIC",meta:{syntax:_.meta.position==="prefix"?"PREFIX_DOTS":_.meta.position==="suffix"?"SUFFIX_DOTS":"ONLY_DOTS"}};return _.element!==void 0&&(L.value=I(_.element)),L},JsdocTypeName:_=>({type:"NAME",name:_.value}),JsdocTypeTypeof:(_,I)=>({type:"TYPE_QUERY",name:I(_.element)}),JsdocTypeTuple:(_,I)=>({type:"TUPLE",entries:_.elements.map(I)}),JsdocTypeKeyof:(_,I)=>({type:"KEY_QUERY",value:I(_.element)}),JsdocTypeImport:_=>({type:"IMPORT",path:{type:"STRING_VALUE",quoteStyle:$t(_.element.meta.quote),string:_.element.value}}),JsdocTypeUndefined:()=>({type:"NAME",name:"undefined"}),JsdocTypeAny:()=>({type:"ANY"}),JsdocTypeFunction:(_,I)=>{let L=Me(_),V={type:_.arrow?"ARROW":"FUNCTION",params:L.params.map(Z=>{if(Z.type==="JsdocTypeKeyValue"){if(Z.right===void 0)throw new Error("Function parameter without ':' is not expected to be 'KEY_VALUE'");return{type:"NAMED_PARAMETER",name:Z.key,typeName:I(Z.right)}}else return I(Z)}),new:null,returns:null};return L.this!==void 0?V.this=I(L.this):_.arrow||(V.this=null),L.new!==void 0&&(V.new=I(L.new)),_.returnType!==void 0&&(V.returns=I(_.returnType)),V},JsdocTypeGeneric:(_,I)=>{let L={type:"GENERIC",subject:I(_.left),objects:_.elements.map(I),meta:{syntax:_.meta.brackets==="square"?"SQUARE_BRACKET":_.meta.dot?"ANGLE_BRACKET_WITH_DOT":"ANGLE_BRACKET"}};return _.meta.brackets==="square"&&_.elements[0].type==="JsdocTypeFunction"&&!_.elements[0].parenthesis&&(L.objects[0]={type:"NAME",name:"function"}),L},JsdocTypeObjectField:(_,I)=>{if(typeof _.key!="string")throw new Error("Index signatures and mapped types are not supported");if(_.right===void 0)return{type:"RECORD_ENTRY",key:_.key,quoteStyle:$t(_.meta.quote),value:null,readonly:!1};let L=I(_.right);return _.optional&&(L={type:"OPTIONAL",value:L,meta:{syntax:"SUFFIX_KEY_QUESTION_MARK"}}),{type:"RECORD_ENTRY",key:_.key.toString(),quoteStyle:$t(_.meta.quote),value:L,readonly:!1}},JsdocTypeJsdocObjectField:()=>{throw new Error("Keys may not be typed in jsdoctypeparser.")},JsdocTypeKeyValue:(_,I)=>{if(_.right===void 0)return{type:"RECORD_ENTRY",key:_.key,quoteStyle:"none",value:null,readonly:!1};let L=I(_.right);return _.optional&&(L={type:"OPTIONAL",value:L,meta:{syntax:"SUFFIX_KEY_QUESTION_MARK"}}),{type:"RECORD_ENTRY",key:_.key,quoteStyle:"none",value:L,readonly:!1}},JsdocTypeObject:(_,I)=>{let L=[];for(let V of _.elements)(V.type==="JsdocTypeObjectField"||V.type==="JsdocTypeJsdocObjectField")&&L.push(I(V));return{type:"RECORD",entries:L}},JsdocTypeSpecialNamePath:_=>{if(_.specialType!=="module")throw new Error(`jsdoctypeparser does not support type ${_.specialType} at this point.`);return{type:"MODULE",value:{type:"FILE_PATH",quoteStyle:$t(_.meta.quote),path:_.value}}},JsdocTypeNamePath:(_,I)=>{let L=!1,V,Z;_.right.type==="JsdocTypeSpecialNamePath"&&_.right.specialType==="event"?(L=!0,V=_.right.value,Z=$t(_.right.meta.quote)):(V=_.right.value,Z=$t(_.right.meta.quote));let oe={type:Un(_.pathType),owner:I(_.left),name:V,quoteStyle:Z,hasEventPrefix:L};if(oe.owner.type==="MODULE"){let ue=oe.owner;return oe.owner=oe.owner.value,ue.value=oe,ue}else return oe},JsdocTypeUnion:(_,I)=>er("UNION",_.elements.map(I)),JsdocTypeParenthesis:(_,I)=>({type:"PARENTHESIS",value:I(E(_.element))}),JsdocTypeNull:()=>({type:"NAME",name:"null"}),JsdocTypeUnknown:()=>({type:"UNKNOWN"}),JsdocTypeStringValue:_=>({type:"STRING_VALUE",quoteStyle:$t(_.meta.quote),string:_.value}),JsdocTypeIntersection:(_,I)=>er("INTERSECTION",_.elements.map(I)),JsdocTypeNumber:_=>({type:"NUMBER_VALUE",number:_.value.toString()}),JsdocTypeSymbol:de,JsdocTypeProperty:de,JsdocTypePredicate:de,JsdocTypeMappedType:de,JsdocTypeIndexSignature:de,JsdocTypeAsserts:de};function hi(_){return _e(ls,_)}function us(){return{JsdocTypeIntersection:(_,I)=>({type:"JsdocTypeIntersection",elements:_.elements.map(I)}),JsdocTypeGeneric:(_,I)=>({type:"JsdocTypeGeneric",left:I(_.left),elements:_.elements.map(I),meta:{dot:_.meta.dot,brackets:_.meta.brackets}}),JsdocTypeNullable:_=>_,JsdocTypeUnion:(_,I)=>({type:"JsdocTypeUnion",elements:_.elements.map(I)}),JsdocTypeUnknown:_=>_,JsdocTypeUndefined:_=>_,JsdocTypeTypeof:(_,I)=>({type:"JsdocTypeTypeof",element:I(_.element)}),JsdocTypeSymbol:(_,I)=>{let L={type:"JsdocTypeSymbol",value:_.value};return _.element!==void 0&&(L.element=I(_.element)),L},JsdocTypeOptional:(_,I)=>({type:"JsdocTypeOptional",element:I(_.element),meta:{position:_.meta.position}}),JsdocTypeObject:(_,I)=>({type:"JsdocTypeObject",meta:{separator:"comma"},elements:_.elements.map(I)}),JsdocTypeNumber:_=>_,JsdocTypeNull:_=>_,JsdocTypeNotNullable:(_,I)=>({type:"JsdocTypeNotNullable",element:I(_.element),meta:{position:_.meta.position}}),JsdocTypeSpecialNamePath:_=>_,JsdocTypeObjectField:(_,I)=>({type:"JsdocTypeObjectField",key:_.key,right:_.right===void 0?void 0:I(_.right),optional:_.optional,readonly:_.readonly,meta:_.meta}),JsdocTypeJsdocObjectField:(_,I)=>({type:"JsdocTypeJsdocObjectField",left:I(_.left),right:I(_.right)}),JsdocTypeKeyValue:(_,I)=>({type:"JsdocTypeKeyValue",key:_.key,right:_.right===void 0?void 0:I(_.right),optional:_.optional,variadic:_.variadic}),JsdocTypeImport:(_,I)=>({type:"JsdocTypeImport",element:I(_.element)}),JsdocTypeAny:_=>_,JsdocTypeStringValue:_=>_,JsdocTypeNamePath:_=>_,JsdocTypeVariadic:(_,I)=>{let L={type:"JsdocTypeVariadic",meta:{position:_.meta.position,squareBrackets:_.meta.squareBrackets}};return _.element!==void 0&&(L.element=I(_.element)),L},JsdocTypeTuple:(_,I)=>({type:"JsdocTypeTuple",elements:_.elements.map(I)}),JsdocTypeName:_=>_,JsdocTypeFunction:(_,I)=>{let L={type:"JsdocTypeFunction",arrow:_.arrow,parameters:_.parameters.map(I),constructor:_.constructor,parenthesis:_.parenthesis};return _.returnType!==void 0&&(L.returnType=I(_.returnType)),L},JsdocTypeKeyof:(_,I)=>({type:"JsdocTypeKeyof",element:I(_.element)}),JsdocTypeParenthesis:(_,I)=>({type:"JsdocTypeParenthesis",element:I(_.element)}),JsdocTypeProperty:_=>_,JsdocTypePredicate:(_,I)=>({type:"JsdocTypePredicate",left:I(_.left),right:I(_.right)}),JsdocTypeIndexSignature:(_,I)=>({type:"JsdocTypeIndexSignature",key:_.key,right:I(_.right)}),JsdocTypeMappedType:(_,I)=>({type:"JsdocTypeMappedType",key:_.key,right:I(_.right)}),JsdocTypeAsserts:(_,I)=>({type:"JsdocTypeAsserts",left:I(_.left),right:I(_.right)})}}let di={JsdocTypeAny:[],JsdocTypeFunction:["parameters","returnType"],JsdocTypeGeneric:["left","elements"],JsdocTypeImport:[],JsdocTypeIndexSignature:["right"],JsdocTypeIntersection:["elements"],JsdocTypeKeyof:["element"],JsdocTypeKeyValue:["right"],JsdocTypeMappedType:["right"],JsdocTypeName:[],JsdocTypeNamePath:["left","right"],JsdocTypeNotNullable:["element"],JsdocTypeNull:[],JsdocTypeNullable:["element"],JsdocTypeNumber:[],JsdocTypeObject:["elements"],JsdocTypeObjectField:["right"],JsdocTypeJsdocObjectField:["left","right"],JsdocTypeOptional:["element"],JsdocTypeParenthesis:["element"],JsdocTypeSpecialNamePath:[],JsdocTypeStringValue:[],JsdocTypeSymbol:["element"],JsdocTypeTuple:["elements"],JsdocTypeTypeof:["element"],JsdocTypeUndefined:[],JsdocTypeUnion:["elements"],JsdocTypeUnknown:[],JsdocTypeVariadic:["element"],JsdocTypeProperty:[],JsdocTypePredicate:["left","right"],JsdocTypeAsserts:["left","right"]};function pi(_,I,L,V,Z){V?.(_,I,L);let oe=di[_.type];for(let ue of oe){let Te=_[ue];if(Te!==void 0)if(Array.isArray(Te))for(let et of Te)pi(et,_,ue,V,Z);else pi(Te,_,ue,V,Z)}Z?.(_,I,L)}function Hn(_,I,L){pi(_,void 0,void 0,I,L)}r.catharsisTransform=jn,r.identityTransformRules=us,r.jtpTransform=hi,r.parse=W,r.stringify=qt,r.stringifyRules=Wt,r.transform=_e,r.traverse=Hn,r.tryParse=Y,r.visitorKeys=di})});var BT=H((vLe,FT)=>{"use strict";h();d();p();FT.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var jd=H((CLe,NT)=>{h();d();p();var Pn=BT(),MT={};for(let r of Object.keys(Pn))MT[Pn[r]]=r;var se={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};NT.exports=se;for(let r of Object.keys(se)){if(!("channels"in se[r]))throw new Error("missing channels property: "+r);if(!("labels"in se[r]))throw new Error("missing channel labels property: "+r);if(se[r].labels.length!==se[r].channels)throw new Error("channel and label counts mismatch: "+r);let{channels:e,labels:t}=se[r];delete se[r].channels,delete se[r].labels,Object.defineProperty(se[r],"channels",{value:e}),Object.defineProperty(se[r],"labels",{value:t})}se.rgb.hsl=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,s=Math.min(e,t,i),n=Math.max(e,t,i),o=n-s,a,l;n===s?a=0:e===n?a=(t-i)/o:t===n?a=2+(i-e)/o:i===n&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let u=(s+n)/2;return n===s?l=0:u<=.5?l=o/(n+s):l=o/(2-n-s),[a,l*100,u*100]};se.rgb.hsv=function(r){let e,t,i,s,n,o=r[0]/255,a=r[1]/255,l=r[2]/255,u=Math.max(o,a,l),c=u-Math.min(o,a,l),g=function(m){return(u-m)/6/c+1/2};return c===0?(s=0,n=0):(n=c/u,e=g(o),t=g(a),i=g(l),o===u?s=i-t:a===u?s=1/3+e-i:l===u&&(s=2/3+t-e),s<0?s+=1:s>1&&(s-=1)),[s*360,n*100,u*100]};se.rgb.hwb=function(r){let e=r[0],t=r[1],i=r[2],s=se.rgb.hsl(r)[0],n=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[s,n*100,i*100]};se.rgb.cmyk=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,s=Math.min(1-e,1-t,1-i),n=(1-e-s)/(1-s)||0,o=(1-t-s)/(1-s)||0,a=(1-i-s)/(1-s)||0;return[n*100,o*100,a*100,s*100]};function Cq(r,e){return(r[0]-e[0])**2+(r[1]-e[1])**2+(r[2]-e[2])**2}se.rgb.keyword=function(r){let e=MT[r];if(e)return e;let t=1/0,i;for(let s of Object.keys(Pn)){let n=Pn[s],o=Cq(r,n);o<t&&(t=o,i=s)}return i};se.keyword.rgb=function(r){return Pn[r]};se.rgb.xyz=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let s=e*.4124+t*.3576+i*.1805,n=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[s*100,n*100,o*100]};se.rgb.lab=function(r){let e=se.rgb.xyz(r),t=e[0],i=e[1],s=e[2];t/=95.047,i/=100,s/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,s=s>.008856?s**(1/3):7.787*s+16/116;let n=116*i-16,o=500*(t-i),a=200*(i-s);return[n,o,a]};se.hsl.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,s,n,o;if(t===0)return o=i*255,[o,o,o];i<.5?s=i*(1+t):s=i+t-i*t;let a=2*i-s,l=[0,0,0];for(let u=0;u<3;u++)n=e+1/3*-(u-1),n<0&&n++,n>1&&n--,6*n<1?o=a+(s-a)*6*n:2*n<1?o=s:3*n<2?o=a+(s-a)*(2/3-n)*6:o=a,l[u]=o*255;return l};se.hsl.hsv=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,s=t,n=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,s*=n<=1?n:2-n;let o=(i+t)/2,a=i===0?2*s/(n+s):2*t/(i+t);return[e,a*100,o*100]};se.hsv.rgb=function(r){let e=r[0]/60,t=r[1]/100,i=r[2]/100,s=Math.floor(e)%6,n=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*n),l=255*i*(1-t*(1-n));switch(i*=255,s){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};se.hsv.hsl=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,s=Math.max(i,.01),n,o;o=(2-t)*i;let a=(2-t)*s;return n=t*s,n/=a<=1?a:2-a,n=n||0,o/=2,[e,n*100,o*100]};se.hwb.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,s=t+i,n;s>1&&(t/=s,i/=s);let o=Math.floor(6*e),a=1-i;n=6*e-o,o&1&&(n=1-n);let l=t+n*(a-t),u,c,g;switch(o){default:case 6:case 0:u=a,c=l,g=t;break;case 1:u=l,c=a,g=t;break;case 2:u=t,c=a,g=l;break;case 3:u=t,c=l,g=a;break;case 4:u=l,c=t,g=a;break;case 5:u=a,c=t,g=l;break}return[u*255,c*255,g*255]};se.cmyk.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,s=r[3]/100,n=1-Math.min(1,e*(1-s)+s),o=1-Math.min(1,t*(1-s)+s),a=1-Math.min(1,i*(1-s)+s);return[n*255,o*255,a*255]};se.xyz.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,s,n,o;return s=e*3.2406+t*-1.5372+i*-.4986,n=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,s=Math.min(Math.max(0,s),1),n=Math.min(Math.max(0,n),1),o=Math.min(Math.max(0,o),1),[s*255,n*255,o*255]};se.xyz.lab=function(r){let e=r[0],t=r[1],i=r[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let s=116*t-16,n=500*(e-t),o=200*(t-i);return[s,n,o]};se.lab.xyz=function(r){let e=r[0],t=r[1],i=r[2],s,n,o;n=(e+16)/116,s=t/500+n,o=n-i/200;let a=n**3,l=s**3,u=o**3;return n=a>.008856?a:(n-16/116)/7.787,s=l>.008856?l:(s-16/116)/7.787,o=u>.008856?u:(o-16/116)/7.787,s*=95.047,n*=100,o*=108.883,[s,n,o]};se.lab.lch=function(r){let e=r[0],t=r[1],i=r[2],s;s=Math.atan2(i,t)*360/2/Math.PI,s<0&&(s+=360);let o=Math.sqrt(t*t+i*i);return[e,o,s]};se.lch.lab=function(r){let e=r[0],t=r[1],s=r[2]/360*2*Math.PI,n=t*Math.cos(s),o=t*Math.sin(s);return[e,n,o]};se.rgb.ansi16=function(r,e=null){let[t,i,s]=r,n=e===null?se.rgb.hsv(r)[2]:e;if(n=Math.round(n/50),n===0)return 30;let o=30+(Math.round(s/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return n===2&&(o+=60),o};se.hsv.ansi16=function(r){return se.rgb.ansi16(se.hsv.rgb(r),r[2])};se.rgb.ansi256=function(r){let e=r[0],t=r[1],i=r[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};se.ansi16.rgb=function(r){let e=r%10;if(e===0||e===7)return r>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(r>50)+1)*.5,i=(e&1)*t*255,s=(e>>1&1)*t*255,n=(e>>2&1)*t*255;return[i,s,n]};se.ansi256.rgb=function(r){if(r>=232){let n=(r-232)*10+8;return[n,n,n]}r-=16;let e,t=Math.floor(r/36)/5*255,i=Math.floor((e=r%36)/6)/5*255,s=e%6/5*255;return[t,i,s]};se.rgb.hex=function(r){let t=(((Math.round(r[0])&255)<<16)+((Math.round(r[1])&255)<<8)+(Math.round(r[2])&255)).toString(16).toUpperCase();return"000000".substring(t.length)+t};se.hex.rgb=function(r){let e=r.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split("").map(a=>a+a).join(""));let i=parseInt(t,16),s=i>>16&255,n=i>>8&255,o=i&255;return[s,n,o]};se.rgb.hcg=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,s=Math.max(Math.max(e,t),i),n=Math.min(Math.min(e,t),i),o=s-n,a,l;return o<1?a=n/(1-o):a=0,o<=0?l=0:s===e?l=(t-i)/o%6:s===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};se.hsl.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=t<.5?2*e*t:2*e*(1-t),s=0;return i<1&&(s=(t-.5*i)/(1-i)),[r[0],i*100,s*100]};se.hsv.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=e*t,s=0;return i<1&&(s=(t-i)/(1-i)),[r[0],i*100,s*100]};se.hcg.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100;if(t===0)return[i*255,i*255,i*255];let s=[0,0,0],n=e%1*6,o=n%1,a=1-o,l=0;switch(Math.floor(n)){case 0:s[0]=1,s[1]=o,s[2]=0;break;case 1:s[0]=a,s[1]=1,s[2]=0;break;case 2:s[0]=0,s[1]=1,s[2]=o;break;case 3:s[0]=0,s[1]=a,s[2]=1;break;case 4:s[0]=o,s[1]=0,s[2]=1;break;default:s[0]=1,s[1]=0,s[2]=a}return l=(1-t)*i,[(t*s[0]+l)*255,(t*s[1]+l)*255,(t*s[2]+l)*255]};se.hcg.hsv=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e),s=0;return i>0&&(s=e/i),[r[0],s*100,i*100]};se.hcg.hsl=function(r){let e=r[1]/100,i=r[2]/100*(1-e)+.5*e,s=0;return i>0&&i<.5?s=e/(2*i):i>=.5&&i<1&&(s=e/(2*(1-i))),[r[0],s*100,i*100]};se.hcg.hwb=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e);return[r[0],(i-e)*100,(1-i)*100]};se.hwb.hcg=function(r){let e=r[1]/100,i=1-r[2]/100,s=i-e,n=0;return s<1&&(n=(i-s)/(1-s)),[r[0],s*100,n*100]};se.apple.rgb=function(r){return[r[0]/65535*255,r[1]/65535*255,r[2]/65535*255]};se.rgb.apple=function(r){return[r[0]/255*65535,r[1]/255*65535,r[2]/255*65535]};se.gray.rgb=function(r){return[r[0]/100*255,r[0]/100*255,r[0]/100*255]};se.gray.hsl=function(r){return[0,0,r[0]]};se.gray.hsv=se.gray.hsl;se.gray.hwb=function(r){return[0,100,r[0]]};se.gray.cmyk=function(r){return[0,0,0,r[0]]};se.gray.lab=function(r){return[r[0],0,0]};se.gray.hex=function(r){let e=Math.round(r[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(i.length)+i};se.rgb.gray=function(r){return[(r[0]+r[1]+r[2])/3/255*100]}});var jT=H((RLe,zT)=>{h();d();p();var al=jd();function Aq(){let r={},e=Object.keys(al);for(let t=e.length,i=0;i<t;i++)r[e[i]]={distance:-1,parent:null};return r}function Eq(r){let e=Aq(),t=[r];for(e[r].distance=0;t.length;){let i=t.pop(),s=Object.keys(al[i]);for(let n=s.length,o=0;o<n;o++){let a=s[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Iq(r,e){return function(t){return e(r(t))}}function Rq(r,e){let t=[e[r].parent,r],i=al[e[r].parent][r],s=e[r].parent;for(;e[s].parent;)t.unshift(e[s].parent),i=Iq(al[e[s].parent][s],i),s=e[s].parent;return i.conversion=t,i}zT.exports=function(r){let e=Eq(r),t={},i=Object.keys(e);for(let s=i.length,n=0;n<s;n++){let o=i[n];e[o].parent!==null&&(t[o]=Rq(o,e))}return t}});var HT=H((LLe,UT)=>{h();d();p();var Ud=jd(),Pq=jT(),es={},kq=Object.keys(Ud);function Oq(r){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),r(t))};return"conversion"in r&&(e.conversion=r.conversion),e}function Lq(r){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let s=r(t);if(typeof s=="object")for(let n=s.length,o=0;o<n;o++)s[o]=Math.round(s[o]);return s};return"conversion"in r&&(e.conversion=r.conversion),e}kq.forEach(r=>{es[r]={},Object.defineProperty(es[r],"channels",{value:Ud[r].channels}),Object.defineProperty(es[r],"labels",{value:Ud[r].labels});let e=Pq(r);Object.keys(e).forEach(i=>{let s=e[i];es[r][i]=Lq(s),es[r][i].raw=Oq(s)})});UT.exports=es});var qT=H((MLe,WT)=>{h();d();p();var Dq=Mt(),Fq=function(){return Dq.Date.now()};WT.exports=Fq});var VT=H((ULe,$T)=>{h();d();p();var Bq=/\s/;function Mq(r){for(var e=r.length;e--&&Bq.test(r.charAt(e)););return e}$T.exports=Mq});var YT=H(($Le,GT)=>{h();d();p();var Nq=VT(),zq=/^\s+/;function jq(r){return r&&r.slice(0,Nq(r)+1).replace(zq,"")}GT.exports=jq});var QT=H((XLe,JT)=>{h();d();p();var Uq=YT(),XT=Jt(),Hq=on(),KT=NaN,Wq=/^[-+]0x[0-9a-f]+$/i,qq=/^0b[01]+$/i,$q=/^0o[0-7]+$/i,Vq=parseInt;function Gq(r){if(typeof r=="number")return r;if(Hq(r))return KT;if(XT(r)){var e=typeof r.valueOf=="function"?r.valueOf():r;r=XT(e)?e+"":e}if(typeof r!="string")return r===0?r:+r;r=Uq(r);var t=qq.test(r);return t||$q.test(r)?Vq(r.slice(2),t?2:8):Wq.test(r)?KT:+r}JT.exports=Gq});var tC=H((ZLe,eC)=>{h();d();p();var Yq=Jt(),Hd=qT(),ZT=QT(),Xq="Expected a function",Kq=Math.max,Jq=Math.min;function Qq(r,e,t){var i,s,n,o,a,l,u=0,c=!1,g=!1,m=!0;if(typeof r!="function")throw new TypeError(Xq);e=ZT(e)||0,Yq(t)&&(c=!!t.leading,g="maxWait"in t,n=g?Kq(ZT(t.maxWait)||0,e):n,m="trailing"in t?!!t.trailing:m);function y(O){var B=i,F=s;return i=s=void 0,u=O,o=r.apply(F,B),o}function b(O){return u=O,a=setTimeout(T,e),c?y(O):o}function C(O){var B=O-l,F=O-u,U=e-B;return g?Jq(U,n-F):U}function A(O){var B=O-l,F=O-u;return l===void 0||B>=e||B<0||g&&F>=n}function T(){var O=Hd();if(A(O))return R(O);a=setTimeout(T,C(O))}function R(O){return a=void 0,m&&i?y(O):(i=s=void 0,o)}function P(){a!==void 0&&clearTimeout(a),u=0,i=l=s=a=void 0}function E(){return a===void 0?o:R(Hd())}function k(){var O=Hd(),B=A(O);if(i=arguments,s=this,l=O,B){if(a===void 0)return b(l);if(g)return clearTimeout(a),a=setTimeout(T,e),y(l)}return a===void 0&&(a=setTimeout(T,e)),o}return k.cancel=P,k.flush=E,k}eC.exports=Qq});function oi(){return(oi=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r}).apply(this,arguments)}function Gd(r,e){if(r==null)return{};var t,i,s={},n=Object.keys(r);for(i=0;i<n.length;i++)e.indexOf(t=n[i])>=0||(s[t]=r[t]);return s}function Wd(r){var e=Bt(r),t=Bt(function(i){e.current&&e.current(i)});return e.current=r,t.current}function dC(r,e,t){var i=Wd(t),s=Fe(function(){return r.toHsva(e)}),n=s[0],o=s[1],a=Bt({color:e,hsva:n});He(function(){if(!r.equal(e,a.current.color)){var u=r.toHsva(e);a.current={hsva:u,color:e},o(u)}},[e,r]),He(function(){var u;cC(n,a.current.hsva)||r.equal(u=r.fromHsva(n),a.current.color)||(a.current={hsva:n,color:u},i(u))},[n,r,i]);var l=ut(function(u){o(function(c){return Object.assign({},c,u)})},[]);return[n,l]}var ts,kn,qd,rC,iC,Yd,On,Xd,st,Zq,e8,$d,t8,r8,i8,s8,nC,Vd,ul,oC,n8,ll,o8,aC,lC,uC,cC,hC,a8,l8,u8,c8,sC,pC,h8,d8,fC,p8,gC,f8,mC,g8,_C,yC=Vt(()=>{h();d();p();Ge();ts=function(r,e,t){return e===void 0&&(e=0),t===void 0&&(t=1),r>t?t:r<e?e:r},kn=function(r){return"touches"in r},qd=function(r){return r&&r.ownerDocument.defaultView||self},rC=function(r,e,t){var i=r.getBoundingClientRect(),s=kn(e)?function(n,o){for(var a=0;a<n.length;a++)if(n[a].identifier===o)return n[a];return n[0]}(e.touches,t):e;return{left:ts((s.pageX-(i.left+qd(r).pageXOffset))/i.width),top:ts((s.pageY-(i.top+qd(r).pageYOffset))/i.height)}},iC=function(r){!kn(r)&&r.preventDefault()},Yd=z.memo(function(r){var e=r.onMove,t=r.onKey,i=Gd(r,["onMove","onKey"]),s=Bt(null),n=Wd(e),o=Wd(t),a=Bt(null),l=Bt(!1),u=vr(function(){var y=function(A){iC(A),(kn(A)?A.touches.length>0:A.buttons>0)&&s.current?n(rC(s.current,A,a.current)):C(!1)},b=function(){return C(!1)};function C(A){var T=l.current,R=qd(s.current),P=A?R.addEventListener:R.removeEventListener;P(T?"touchmove":"mousemove",y),P(T?"touchend":"mouseup",b)}return[function(A){var T=A.nativeEvent,R=s.current;if(R&&(iC(T),!function(E,k){return k&&!kn(E)}(T,l.current)&&R)){if(kn(T)){l.current=!0;var P=T.changedTouches||[];P.length&&(a.current=P[0].identifier)}R.focus(),n(rC(R,T,a.current)),C(!0)}},function(A){var T=A.which||A.keyCode;T<37||T>40||(A.preventDefault(),o({left:T===39?.05:T===37?-.05:0,top:T===40?.05:T===38?-.05:0}))},C]},[o,n]),c=u[0],g=u[1],m=u[2];return He(function(){return m},[m]),z.createElement("div",oi({},i,{onTouchStart:c,onMouseDown:c,className:"react-colorful__interactive",ref:s,onKeyDown:g,tabIndex:0,role:"slider"}))}),On=function(r){return r.filter(Boolean).join(" ")},Xd=function(r){var e=r.color,t=r.left,i=r.top,s=i===void 0?.5:i,n=On(["react-colorful__pointer",r.className]);return z.createElement("div",{className:n,style:{top:100*s+"%",left:100*t+"%"}},z.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:e}}))},st=function(r,e,t){return e===void 0&&(e=0),t===void 0&&(t=Math.pow(10,e)),Math.round(t*r)/t},Zq={grad:.9,turn:360,rad:360/(2*Math.PI)},e8=function(r){return aC($d(r))},$d=function(r){return r[0]==="#"&&(r=r.substring(1)),r.length<6?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:r.length===4?st(parseInt(r[3]+r[3],16)/255,2):1}:{r:parseInt(r.substring(0,2),16),g:parseInt(r.substring(2,4),16),b:parseInt(r.substring(4,6),16),a:r.length===8?st(parseInt(r.substring(6,8),16)/255,2):1}},t8=function(r,e){return e===void 0&&(e="deg"),Number(r)*(Zq[e]||1)},r8=function(r){var e=/hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(r);return e?i8({h:t8(e[1],e[2]),s:Number(e[3]),l:Number(e[4]),a:e[5]===void 0?1:Number(e[5])/(e[6]?100:1)}):{h:0,s:0,v:0,a:1}},i8=function(r){var e=r.s,t=r.l;return{h:r.h,s:(e*=(t<50?t:100-t)/100)>0?2*e/(t+e)*100:0,v:t+e,a:r.a}},s8=function(r){return o8(oC(r))},nC=function(r){var e=r.s,t=r.v,i=r.a,s=(200-e)*t/100;return{h:st(r.h),s:st(s>0&&s<200?e*t/100/(s<=100?s:200-s)*100:0),l:st(s/2),a:st(i,2)}},Vd=function(r){var e=nC(r);return"hsl("+e.h+", "+e.s+"%, "+e.l+"%)"},ul=function(r){var e=nC(r);return"hsla("+e.h+", "+e.s+"%, "+e.l+"%, "+e.a+")"},oC=function(r){var e=r.h,t=r.s,i=r.v,s=r.a;e=e/360*6,t/=100,i/=100;var n=Math.floor(e),o=i*(1-t),a=i*(1-(e-n)*t),l=i*(1-(1-e+n)*t),u=n%6;return{r:st(255*[i,a,o,o,l,i][u]),g:st(255*[l,i,i,a,o,o][u]),b:st(255*[o,o,l,i,i,a][u]),a:st(s,2)}},n8=function(r){var e=/rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(r);return e?aC({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:e[7]===void 0?1:Number(e[7])/(e[8]?100:1)}):{h:0,s:0,v:0,a:1}},ll=function(r){var e=r.toString(16);return e.length<2?"0"+e:e},o8=function(r){var e=r.r,t=r.g,i=r.b,s=r.a,n=s<1?ll(st(255*s)):"";return"#"+ll(e)+ll(t)+ll(i)+n},aC=function(r){var e=r.r,t=r.g,i=r.b,s=r.a,n=Math.max(e,t,i),o=n-Math.min(e,t,i),a=o?n===e?(t-i)/o:n===t?2+(i-e)/o:4+(e-t)/o:0;return{h:st(60*(a<0?a+6:a)),s:st(n?o/n*100:0),v:st(n/255*100),a:s}},lC=z.memo(function(r){var e=r.hue,t=r.onChange,i=On(["react-colorful__hue",r.className]);return z.createElement("div",{className:i},z.createElement(Yd,{onMove:function(s){t({h:360*s.left})},onKey:function(s){t({h:ts(e+360*s.left,0,360)})},"aria-label":"Hue","aria-valuenow":st(e),"aria-valuemax":"360","aria-valuemin":"0"},z.createElement(Xd,{className:"react-colorful__hue-pointer",left:e/360,color:Vd({h:e,s:100,v:100,a:1})})))}),uC=z.memo(function(r){var e=r.hsva,t=r.onChange,i={backgroundColor:Vd({h:e.h,s:100,v:100,a:1})};return z.createElement("div",{className:"react-colorful__saturation",style:i},z.createElement(Yd,{onMove:function(s){t({s:100*s.left,v:100-100*s.top})},onKey:function(s){t({s:ts(e.s+100*s.left,0,100),v:ts(e.v-100*s.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+st(e.s)+"%, Brightness "+st(e.v)+"%"},z.createElement(Xd,{className:"react-colorful__saturation-pointer",top:1-e.v/100,left:e.s/100,color:Vd(e)})))}),cC=function(r,e){if(r===e)return!0;for(var t in r)if(r[t]!==e[t])return!1;return!0},hC=function(r,e){return r.replace(/\s/g,"")===e.replace(/\s/g,"")},a8=function(r,e){return r.toLowerCase()===e.toLowerCase()||cC($d(r),$d(e))};u8=typeof window<"u"?Il:He,c8=function(){return l8||(typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0)},sC=new Map,pC=function(r){u8(function(){var e=r.current?r.current.ownerDocument:document;if(e!==void 0&&!sC.has(e)){var t=e.createElement("style");t.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill-opacity=".05"><path d="M8 0h8v8H8zM0 8h8v8H0z"/></svg>')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`,sC.set(e,t);var i=c8();i&&t.setAttribute("nonce",i),e.head.appendChild(t)}},[])},h8=function(r){var e=r.className,t=r.colorModel,i=r.color,s=i===void 0?t.defaultColor:i,n=r.onChange,o=Gd(r,["className","colorModel","color","onChange"]),a=Bt(null);pC(a);var l=dC(t,s,n),u=l[0],c=l[1],g=On(["react-colorful",e]);return z.createElement("div",oi({},o,{ref:a,className:g}),z.createElement(uC,{hsva:u,onChange:c}),z.createElement(lC,{hue:u.h,onChange:c,className:"react-colorful__last-control"}))},d8={defaultColor:"000",toHsva:e8,fromHsva:function(r){return s8({h:r.h,s:r.s,v:r.v,a:1})},equal:a8},fC=function(r){return z.createElement(h8,oi({},r,{colorModel:d8}))},p8=function(r){var e=r.className,t=r.hsva,i=r.onChange,s={backgroundImage:"linear-gradient(90deg, "+ul(Object.assign({},t,{a:0}))+", "+ul(Object.assign({},t,{a:1}))+")"},n=On(["react-colorful__alpha",e]),o=st(100*t.a);return z.createElement("div",{className:n},z.createElement("div",{className:"react-colorful__alpha-gradient",style:s}),z.createElement(Yd,{onMove:function(a){i({a:a.left})},onKey:function(a){i({a:ts(t.a+a.left)})},"aria-label":"Alpha","aria-valuetext":o+"%","aria-valuenow":o,"aria-valuemin":"0","aria-valuemax":"100"},z.createElement(Xd,{className:"react-colorful__alpha-pointer",left:t.a,color:ul(t)})))},gC=function(r){var e=r.className,t=r.colorModel,i=r.color,s=i===void 0?t.defaultColor:i,n=r.onChange,o=Gd(r,["className","colorModel","color","onChange"]),a=Bt(null);pC(a);var l=dC(t,s,n),u=l[0],c=l[1],g=On(["react-colorful",e]);return z.createElement("div",oi({},o,{ref:a,className:g}),z.createElement(uC,{hsva:u,onChange:c}),z.createElement(lC,{hue:u.h,onChange:c}),z.createElement(p8,{hsva:u,onChange:c,className:"react-colorful__last-control"}))},f8={defaultColor:"hsla(0, 0%, 0%, 1)",toHsva:r8,fromHsva:ul,equal:hC},mC=function(r){return z.createElement(gC,oi({},r,{colorModel:f8}))},g8={defaultColor:"rgba(0, 0, 0, 1)",toHsva:n8,fromHsva:function(r){var e=oC(r);return"rgba("+e.r+", "+e.g+", "+e.b+", "+e.a+")"},equal:hC},_C=function(r){return z.createElement(gC,oi({},r,{colorModel:g8}))}});var TC={};rr(TC,{ColorControl:()=>wC,default:()=>L8});var Lt,vC,m8,_8,y8,x8,b8,v8,S8,xC,w8,T8,SC,cl,C8,A8,E8,Kd,I8,R8,hl,bC,rs,P8,k8,dl,O8,wC,L8,CC=Vt(()=>{h();d();p();uc();Ge();ta();xc();Ec();Lt=ye(HT(),1),vC=ye(tC(),1);yC();m8=J.div({position:"relative",maxWidth:250,'&[aria-readonly="true"]':{opacity:.5}}),_8=J(ea)({position:"absolute",zIndex:1,top:4,left:4,"[aria-readonly=true] &":{cursor:"not-allowed"}}),y8=J.div({width:200,margin:5,".react-colorful__saturation":{borderRadius:"4px 4px 0 0"},".react-colorful__hue":{boxShadow:"inset 0 0 0 1px rgb(0 0 0 / 5%)"},".react-colorful__last-control":{borderRadius:"0 0 4px 4px"}}),x8=J(fc)(({theme:r})=>({fontFamily:r.typography.fonts.base})),b8=J.div({display:"grid",gridTemplateColumns:"repeat(9, 16px)",gap:6,padding:3,marginTop:5,width:200}),v8=J.div(({theme:r,active:e})=>({width:16,height:16,boxShadow:e?`${r.appBorderColor} 0 0 0 1px inset, ${r.textMutedColor}50 0 0 0 4px`:`${r.appBorderColor} 0 0 0 1px inset`,borderRadius:r.appBorderRadius})),S8=`url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill-opacity=".05"><path d="M8 0h8v8H8zM0 8h8v8H0z"/></svg>')`,xC=({value:r,style:e,...t})=>{let i=`linear-gradient(${r}, ${r}), ${S8}, linear-gradient(#fff, #fff)`;return z.createElement(v8,{...t,style:{...e,backgroundImage:i}})},w8=J(Rr.Input)(({theme:r,readOnly:e})=>({width:"100%",paddingLeft:30,paddingRight:30,boxSizing:"border-box",fontFamily:r.typography.fonts.base})),T8=J(lg)(({theme:r})=>({position:"absolute",zIndex:1,top:6,right:7,width:20,height:20,padding:4,boxSizing:"border-box",cursor:"pointer",color:r.input.color})),SC=(r=>(r.RGB="rgb",r.HSL="hsl",r.HEX="hex",r))(SC||{}),cl=Object.values(SC),C8=/\(([0-9]+),\s*([0-9]+)%?,\s*([0-9]+)%?,?\s*([0-9.]+)?\)/,A8=/^\s*rgba?\(([0-9]+),\s*([0-9]+),\s*([0-9]+),?\s*([0-9.]+)?\)\s*$/i,E8=/^\s*hsla?\(([0-9]+),\s*([0-9]+)%,\s*([0-9]+)%,?\s*([0-9.]+)?\)\s*$/i,Kd=/^\s*#?([0-9a-f]{3}|[0-9a-f]{6})\s*$/i,I8=/^\s*#?([0-9a-f]{3})\s*$/i,R8={hex:fC,rgb:_C,hsl:mC},hl={hex:"transparent",rgb:"rgba(0, 0, 0, 0)",hsl:"hsla(0, 0%, 0%, 0)"},bC=r=>{let e=r?.match(C8);if(!e)return[0,0,0,1];let[,t,i,s,n=1]=e;return[t,i,s,n].map(Number)},rs=r=>{if(!r)return;let e=!0;if(A8.test(r)){let[o,a,l,u]=bC(r),[c,g,m]=Lt.default.rgb.hsl([o,a,l])||[0,0,0];return{valid:e,value:r,keyword:Lt.default.rgb.keyword([o,a,l]),colorSpace:"rgb",rgb:r,hsl:`hsla(${c}, ${g}%, ${m}%, ${u})`,hex:`#${Lt.default.rgb.hex([o,a,l]).toLowerCase()}`}}if(E8.test(r)){let[o,a,l,u]=bC(r),[c,g,m]=Lt.default.hsl.rgb([o,a,l])||[0,0,0];return{valid:e,value:r,keyword:Lt.default.hsl.keyword([o,a,l]),colorSpace:"hsl",rgb:`rgba(${c}, ${g}, ${m}, ${u})`,hsl:r,hex:`#${Lt.default.hsl.hex([o,a,l]).toLowerCase()}`}}let t=r.replace("#",""),i=Lt.default.keyword.rgb(t)||Lt.default.hex.rgb(t),s=Lt.default.rgb.hsl(i),n=r;if(/[^#a-f0-9]/i.test(r)?n=t:Kd.test(r)&&(n=`#${t}`),n.startsWith("#"))e=Kd.test(n);else try{Lt.default.keyword.hex(n)}catch{e=!1}return{valid:e,value:n,keyword:Lt.default.rgb.keyword(i),colorSpace:"hex",rgb:`rgba(${i[0]}, ${i[1]}, ${i[2]}, 1)`,hsl:`hsla(${s[0]}, ${s[1]}%, ${s[2]}%, 1)`,hex:n}},P8=(r,e,t)=>{if(!r||!e?.valid)return hl[t];if(t!=="hex")return e?.[t]||hl[t];if(!e.hex.startsWith("#"))try{return`#${Lt.default.keyword.hex(e.hex)}`}catch{return hl.hex}let i=e.hex.match(I8);if(!i)return Kd.test(e.hex)?e.hex:hl.hex;let[s,n,o]=i[1].split("");return`#${s}${s}${n}${n}${o}${o}`},k8=(r,e)=>{let[t,i]=Fe(r||""),[s,n]=Fe(()=>rs(t)),[o,a]=Fe(s?.colorSpace||"hex");He(()=>{let g=r||"",m=rs(g);i(g),n(m),a(m?.colorSpace||"hex")},[r]);let l=vr(()=>P8(t,s,o).toLowerCase(),[t,s,o]),u=ut(g=>{let m=rs(g),y=m?.value||g||"";i(y),y===""&&(n(void 0),e(void 0)),m&&(n(m),a(m.colorSpace),e(m.value))},[e]),c=ut(()=>{let g=cl.indexOf(o)+1;g>=cl.length&&(g=0),a(cl[g]);let m=s?.[cl[g]]||"";i(m),e(m)},[s,o,e]);return{value:t,realValue:l,updateValue:u,color:s,colorSpace:o,cycleColorSpace:c}},dl=r=>r.replace(/\s*/,"").toLowerCase(),O8=(r,e,t)=>{let[i,s]=Fe(e?.valid?[e]:[]);He(()=>{e===void 0&&s([])},[e]);let n=vr(()=>(r||[]).map(a=>typeof a=="string"?rs(a):a.title?{...rs(a.color),keyword:a.title}:rs(a.color)).concat(i).filter(Boolean).slice(-27),[r,i]),o=ut(a=>{a?.valid&&(n.some(l=>dl(l[t])===dl(a[t]))||s(l=>l.concat(a)))},[t,n]);return{presets:n,addPreset:o}},wC=({name:r,value:e,onChange:t,onFocus:i,onBlur:s,presetColors:n,startOpen:o=!1,argType:a})=>{let l=ut((0,vC.default)(t,200),[t]),{value:u,realValue:c,updateValue:g,color:m,colorSpace:y,cycleColorSpace:b}=k8(e,l),{presets:C,addPreset:A}=O8(n,m,y),T=R8[y],R=!!a?.table?.readonly;return z.createElement(m8,{"aria-readonly":R},z.createElement(_8,{startOpen:o,trigger:R?[null]:void 0,closeOnOutsideClick:!0,onVisibleChange:()=>A(m),tooltip:z.createElement(y8,null,z.createElement(T,{color:c==="transparent"?"#000000":c,onChange:g,onFocus:i,onBlur:s}),C.length>0&&z.createElement(b8,null,C.map((P,E)=>z.createElement(ea,{key:`${P.value}-${E}`,hasChrome:!1,tooltip:z.createElement(x8,{note:P.keyword||P.value})},z.createElement(xC,{value:P[y],active:m&&dl(P[y])===dl(m[y]),onClick:()=>g(P.value)})))))},z.createElement(xC,{value:c,style:{margin:4}})),z.createElement(w8,{id:Kt(r),value:u,onChange:P=>g(P.target.value),onFocus:P=>P.target.select(),readOnly:R,placeholder:"Choose color..."}),u?z.createElement(T8,{onClick:b}):null)},L8=wC});h();d();p();h();d();p();h();d();p();var p$=__STORYBOOK_API__,{ActiveTabs:f$,Consumer:g$,ManagerContext:m$,Provider:_$,RequestResponseError:y$,addons:Gt,combineParameters:x$,controlOrMetaKey:b$,controlOrMetaSymbol:v$,eventMatchesShortcut:S$,eventToShortcut:w$,experimental_requestResponse:T$,isMacLike:C$,isShortcutTaken:A$,keyToSymbol:E$,merge:I$,mockChannel:R$,optionOrAltSymbol:P$,shortcutMatchesShortcut:k$,shortcutToHumanString:O$,types:br,useAddonState:L$,useArgTypes:D$,useArgs:F$,useChannel:B$,useGlobalTypes:M$,useGlobals:_t,useParameter:N$,useSharedState:z$,useStoryPrepared:j$,useStorybookApi:$n,useStorybookState:U$}=__STORYBOOK_API__;h();d();p();h();d();p();var V$=__STORYBOOK_THEMING_CREATE__,{create:hp,themes:dp}=__STORYBOOK_THEMING_CREATE__;var pp="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdQAAABiCAYAAADpwyKwAAAMZGlDQ1BJQ0MgUHJvZmlsZQAASImVlwdYU8kWgOeWVBJaIAJSQm+iSA0gJYQWQUCqICohCSSUGBOCiB1dVsG1iyiWFV0VcdHVFZC1IOJiWxR7XyyoKOtiwYbKm5CArr7yvfm+ufPnzJkz55zM3DsDgE4HXybLRXUByJPmy+PCg1kTUlJZpAeACAhAF/gCjC9QyDixsVEAlsH2n+X1FYCo2osuKlvf9v/Xoi8UKQQAIGmQM4QKQR7kJgDwYoFMng8AMQTKrafny1Qshmwghw5CnqXiLDUvV3GGmrcN6CTEcSE3AECm8fnyLAC0W6CcVSDIgna0H0B2lQolUgB0DCAHCMR8IeQEyCPy8qaqeB5kB6gvg7wTMjvjC5tZ/7CfMWSfz88aYnVcA4UcIlHIcvkz/s/U/O+Sl6scnMMOVppYHhGnih/m8FrO1EgV0yB3SzOiY1S5hvxWIlTnHQCUKlZGJKr1UVOBggvzB5iQXYX8kEjIppDDpLnRURp5RqYkjAcZrha0UJLPS9CMXSRShMZrbG6QT42LGeRMOZejGVvLlw/Mq9JvUeYkcjT2r4lFvEH7r4rECcmQqQBg1AJJUjRkbcgGipz4SLUOZlUk5kYP6siVcSr/bSCzRdLwYLV9LC1THhan0ZflKQbjxUrEEl60hivyxQkR6vxguwT8Af+NINeJpJzEQTsixYSowViEopBQdexYm0iaqIkXuyPLD47TjO2R5cZq9HGyKDdcJbeCbKIoiNeMxcfkw8Wpto9HyfJjE9R+4unZ/LGxan/wAhAFuCAEsIAS1gwwFWQDSVt3fTf8pe4JA3wgB1lABFw0ksERyQM9UviMB0XgL0gioBgaFzzQKwIFUP5xSKp+uoDMgd6CgRE54CHkPBAJcuFv5cAo6dBsSeABlEi+mV0Afc2FVdX3rYwDJVEaiXLQLktnUJMYSgwhRhDDiI64CR6A++FR8BkEqxvOxn0Gvf2sT3hIaCfcI1wmdBCuT5EUy7/yZRzogPbDNBFnfBkxbgdteuLBuD+0Di3jTNwEuOAecB4OHghn9oRSrsZvVeysfxPnUARf5FyjR3GloJRhlCCKw9cjtZ20PYesqDL6ZX7UvmYMZZU71PP1/Nwv8iyEbeTXmtgibD/Wih3DTmGHsHrAwo5iDdhZ7LCKh9bQg4E1NDhb3IA/OdCO5Jv5+Jo5VZlUuNa4drl+0PSBfFFhvmqDcafKZsglWeJ8Fgd+BUQsnlQwcgTLzdXNFQDVN0X9mnrJHPhWIMzTn2XFrQD4x/T39x/6LIsqBOAA3EvUF59l9msBoIsAODlXoJQXqGW46kGAbwMduKOMgTmwBg4wIjfgBfxAEAgFY0EMSAApYDLMsxiuZzmYDmaB+aAElIHlYA1YDzaDrWAn+BnsA/XgEDgGfgdnwHlwGdyE66cTPAU94DXoQxCEhNARBmKMWCC2iDPihrCRACQUiULikBQkHclCpIgSmYUsQMqQlch6ZAtSjfyCHESOIaeQduQ6chfpQl4g71EMpaEGqBlqh45C2SgHjUQT0EloFjoNLUIXokvRCrQK3Y3WocfQM+hltAN9ivZiANPCmJgl5oKxMS4Wg6VimZgcm4OVYuVYFVaLNcJ/+iLWgXVj73AizsBZuAtcwxF4Ii7Ap+Fz8CX4enwnXoe34Bfxu3gP/olAJ5gSnAm+BB5hAiGLMJ1QQignbCccIJyAu6mT8JpIJDKJ9kRvuBtTiNnEmcQlxI3EPcQmYjvxPrGXRCIZk5xJ/qQYEp+UTyohrSPtJh0lXSB1kt6StcgWZDdyGDmVLCUXk8vJu8hHyBfIj8h9FF2KLcWXEkMRUmZQllG2URop5yidlD6qHtWe6k9NoGZT51MrqLXUE9Rb1JdaWlpWWj5a47UkWvO0KrT2ap3Uuqv1jqZPc6JxaWk0JW0pbQetiXad9pJOp9vRg+ip9Hz6Uno1/Tj9Dv2tNkN7pDZPW6g9V7tSu077gvYzHYqOrQ5HZ7JOkU65zn6dczrduhRdO12uLl93jm6l7kHdq7q9egy90Xoxenl6S/R26Z3Se6xP0rfTD9UX6i/U36p/XP8+A2NYM7gMAWMBYxvjBKPTgGhgb8AzyDYoM/jZoM2gx1Df0MMwybDQsNLwsGEHE2PaMXnMXOYy5j7mFeb7YWbDOMNEwxYPqx12Ydgbo+FGQUYio1KjPUaXjd4bs4xDjXOMVxjXG982wU2cTMabTDfZZHLCpHu4wXC/4YLhpcP3Db9hipo6mcaZzjTdanrWtNfM3CzcTGa2zuy4Wbc50zzIPNt8tfkR8y4LhkWAhcRitcVRiycsQxaHlcuqYLWweixNLSMslZZbLNss+6zsrRKtiq32WN22plqzrTOtV1s3W/fYWNiMs5llU2Nzw5Ziy7YV2661bbV9Y2dvl2z3vV293WN7I3uefZF9jf0tB7pDoMM0hyqHS45ER7ZjjuNGx/NOqJOnk9ip0umcM+rs5Sxx3ujcPoIwwmeEdETViKsuNBeOS4FLjcvdkcyRUSOLR9aPfDbKZlTqqBWjWkd9cvV0zXXd5npztP7osaOLRzeOfuHm5CZwq3S75E53D3Of697g/tzD2UPkscnjmifDc5zn957Nnh+9vL3kXrVeXd423uneG7yvsg3Ysewl7JM+BJ9gn7k+h3ze+Xr55vvu8/3bz8Uvx2+X3+Mx9mNEY7aNue9v5c/33+LfEcAKSA/4MaAj0DKQH1gVeC/IOkgYtD3oEceRk83ZzXkW7BosDz4Q/Ibry53NbQrBQsJDSkPaQvVDE0PXh94JswrLCqsJ6wn3DJ8Z3hRBiIiMWBFxlWfGE/CqeT1jvcfOHtsSSYuMj1wfeS/KKUoe1TgOHTd23Kpxt6Jto6XR9TEghhezKuZ2rH3stNjfxhPHx46vHP8wbnTcrLjWeEb8lPhd8a8TghOWJdxMdEhUJjYn6SSlJVUnvUkOSV6Z3DFh1ITZE86kmKRIUhpSSalJqdtTeyeGTlwzsTPNM60k7cok+0mFk05NNpmcO/nwFJ0p/Cn70wnpyem70j/wY/hV/N4MXsaGjB4BV7BW8FQYJFwt7BL5i1aKHmX6Z67MfJzln7Uqq0scKC4Xd0u4kvWS59kR2Zuz3+TE5OzI6c9Nzt2TR85Lzzso1ZfmSFummk8tnNouc5aVyDqm+U5bM61HHinfrkAUkxQN+Qbw8H5W6aD8Tnm3IKCgsuDt9KTp+wv1CqWFZ2c4zVg841FRWNFPM/GZgpnNsyxnzZ91dzZn9pY5yJyMOc1zrecunNs5L3zezvnU+Tnz/yh2LV5Z/GpB8oLGhWYL5y28/134dzUl2iXykqvf+32/eRG+SLKobbH74nWLP5UKS0+XuZaVl31YIlhy+ofRP1T80L80c2nbMq9lm5YTl0uXX1kRuGLnSr2VRSvvrxq3qm41a3Xp6ldrpqw5Ve5Rvnktda1ybUdFVEXDOpt1y9d9WC9ef7kyuHLPBtMNize82SjceGFT0KbazWabyza//1Hy47Ut4VvqquyqyrcStxZsfbgtaVvrT+yfqrebbC/b/nGHdEfHzridLdXe1dW7THctq0FrlDVdu9N2n/855OeGWpfaLXuYe8r2gr3KvU9+Sf/lyr7Ifc372ftrf7X9dcMBxoHSOqRuRl1Pvbi+oyGlof3g2IPNjX6NB34b+duOQ5aHKg8bHl52hHpk4ZH+o0VHe5tkTd3Hso7db57SfPP4hOOXWsa3tJ2IPHHy97Dfj7dyWo+e9D956JTvqYOn2afrz3idqTvrefbAH55/HGjzaqs7532u4bzP+cb2Me1HLgReOHYx5OLvl3iXzlyOvtx+JfHKtatpVzuuCa89vp57/fmNght9N+fdItwqva17u/yO6Z2qPx3/3NPh1XH4bsjds/fi7928L7j/9IHiwYfOhQ/pD8sfWTyqfuz2+FBXWNf5JxOfdD6VPe3rLvlL768Nzxye/fp30N9neyb0dD6XP+9/seSl8csdrzxeNffG9t55nfe6703pW+O3O9+x37W+T37/qG/6B9KHio+OHxs/RX661Z/X3y/jy/kDRwEMVjQzE4AXO+A5IQUAxnl4fpiovvMNFER9Tx0g8J9YfS8cKF4A1MJGdVznNgGwF1a7efCIDlvVUT0hCKDu7kNVUxSZ7m5qWzR44yG87e9/aQYAqRGAj/L+/r6N/f0f4R0Vuw5A0zT1XVNViPBu8GOQii4bCeeBr4r6HvpFjF+3QOWBB/i6/Rdxi4lInc448gAAAIplWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAAEgAAAHigAgAEAAAAAQAAAdSgAwAEAAAAAQAAAGIAAAAAQVNDSUkAAABTY3JlZW5zaG90kx7ieQAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAdVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NDY4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+U2NyZWVuc2hvdDwvZXhpZjpVc2VyQ29tbWVudD4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjk4PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CjlohlkAAAAcaURPVAAAAAIAAAAAAAAAMQAAACgAAAAxAAAAMQAAFSrMXL20AAAU9klEQVR4AeydCXgV1RXHT/aFhIQdJFbysSPKEllkjSC0lTWsomirArKDYitWqwjIorQVi4qAgKBQCy2yFFF2WUQWURFUCAKCyhYCScjysvX877w7mbzkxbyXSUjpuV/yZubOvXdmfu/O/Oecuzyf6LpNckmCEBACQkAICAEhUCICPiKoJeInmYWAEBACQkAIKAIiqFIRhIAQEAJCQAjYQEAE1QaIUoQQEAJCQAgIARFUqQNCQAgIASEgBGwgIIJqA0QpQggIASEgBISACKrUASEgBISAEBACNhAQQbUBohQhBISAEBACQkAEVeqAEBACQkAICAEbCIig2gBRihACQkAICAEhIIIqdUAICAEhIASEgA0ERFBtgChFCAEhIASEgBAQQZU6IASEgBAQAkLABgIiqDZAlCKEgBAQAkJACIigSh0QAkJACAgBIWADARFUGyBKEUJACAgBISAERFClDggBISAEhIAQsIGACKoNEKUIISAEhIAQEAIiqFIHhIAQEAJCQAjYQEAE1QaIUoQQEAJCQAgIgTIXVB8wVx8ews/Nny8X2xKEgBAQAkJACJQTAmUmqD4QUacoeqOnVl5WLRVhtZKRdSEgBISAELhRBEpdUJWQ8tVpEXXdxoXrOHcQrKKpxVTHuW67K0PihYAQEAJCQAiUJoFSE1QloPyBpfpX6/jIdW4j1tiXf0Vt5X04FTNPOHOVoQtBRZxeIoMW2bzMsiYEhIAQEAJCoGwIlIqgKqlUAsqCyUtfvhYsffjD1xKv4qzXiQgdLOqoxJQ/cnifFtAcCCpvYFutO/NZsumSZCkEhIAQEAJCoNQJlJqgKuFUIsqC6hRSP972ZXXFto+yVLE0rFSrluqr1kKqRBORHJGtBDSXclhdsQ5RNcQ1T3B1flkKASEgBISAECgrArYLqhZICKrx70N+LKL49+cIxGE9T1gNQdUXzLuVK1dvQ0z5j0UzT0Szs1lMWUWzeEc2CytE1RBXIy3ySBACQkAICAEhUJYEbBVUiKESVCWmLKRO8fSHmPJGgJ8hqv68NPaxherM4+6iIY6wQCGgEM0sFtAsXslkUc2CqEJcsd8puEjPfxKEgBAQAkJACJQpAXsFVQlpnmWqhJRNUghpcIAPVeD/ztWDqVWVQCWoEFOlwEVdsjI3fVgk8zojpbOCfp3ooA9+SKeUzBwlrtqCRTsrgspmrMqnEBACQkAICIFSJ2CboGpL03Dz5lmigWyKBvoThQX6UvVQXxrXsCLVCPZTgurN1UEwr2bk0NxjyfRdYiYlOVhQOdJoUzXaU1GuCKo3dCWPEBACQkAIeEvANkGFkEJU0Tbqx35fuHUhpkEBREH+PlQl2Jd63laBOtYMpmD4e70IcOU62Drd/mMarYi/TtdZTNMyDfcv2lJhpcL9iyCCanCQTyEgBISAECgbArYIqtU69WNlhasXbt5AFtIQuHoDfahxpUB6tEk4hQX4qs5JHl8eCyXaUk8lZdJ7x1PomwSHEtOMLGKXLwspC6pqR+U0IqYe05UMQkAICAEhUEICtgkqLFSIqZ9vrhJMiCnaTUNZTCuH+NLABuHUhq1TZckWNkbmFy4EPXnRdrqeLdMdZ9PoUmoWZWQaFis6KClBZcWF6PKfBCEgBISAEBACZUqgxIJqtU4xvhSWKf7h5oV1Gh7kSy1rBVEfFtRaYf7KLezNFcIKPX2NrdOjSfT9lUxKceSyoOYqF7CDBTXHKaZoYxUL1RvCkkcICAEhIARKQsAWQYXV6ausUxZTdvca1qmzI1K4H/VtGE4xtUMomEXWmwCLM4U7Im1kV+/O06mUmJZtuHudFiqG0qj2U14irQiqN5QljxAQAkJACJSEQIkE1Wqd6okbVK9e7ogE6zSCXb1NqgXR0JaRVDnUT82Q5PHJskKibfS7ixm07PBVupicTcksruk8qwMsVPTwxVhUNWyG04qgekxYMggBISAEhIANBLwWVC2maA6FhYpZkFRHJO7BG8yCGsymas2KfjSwWQTF/CqU9xmTOHh6zmgbTWPVXLwvgY5dcChLNdXF3at7+Or2U7FQPaUs6YWAEBACQqCkBEosqBBT3bM3EG2nbJnCOg3jYTLN2c37SLvKFBrE407ZFexpgDA62BI9cOo6rT9yjS6nZFMqW6UYKuPg/wxuV0WHJOsYVLFQPaUs6YWAEBACQsAOAt4LqtMyxZBSJagYJsMbIWydQkyrcQekRztVoSa3hJi/NuPpCcPivMAdkVbtv0LxlxyUnI62UzLdvQ4MmeFEpoWKtlTnQW4WK3Xy05OoV8/7aMN/PqSZs+Z4irBY6Z+YOI7GjB6hOnbd0awVZWRkFCtfeUhUFnzKw3WWx3Pw5UHn9erVpdubNKb69etRdnYWnT59hg4cOEQ/nD1XHk9ZzkkIlCoBrwQVbl7+Mya65w1jEgcWVKd1GsntpZ0ahVHfuypxOyorrZchlbvvfnYihbYeSVIdkVIzeOgMW6zqH+2nvK7m9GXhhZVa3tpRw8LC6IvPP1VXv3r1Gpr8p+c9IlG3bjRt/miDmadrtx506tRpc9uulalTnqOhQ4eo4pre2YpSU1PtKrpUyykrPqV6EZbCH+Lv4IXn/6RiHhz6KH22/4Bl7y+vxh8/ohJ9uOljGjd+Ur4M+/buoKpVq9CZMz8Q6lFJQqXISJo8+Snq26cnBQTwG3QhISHhCr05fyEtXrKskL0SJQRuTgJeCyo8uNrdq9pO1bhTtk55mEwUz9X7u9iq1KBWsOrx6w06WJhnL6fTxoOJdOpCBl3njkhpbJGmO1296ejhy4KKmZP0ONTyJqh48Bw6uEdd/qZNm2n02Ikeobg1Kop27vjIzNM59td09pz9b/52CmqTxo3opelT1DlPfPKP6gFuXoDNK2XFx+bTdlvc6FEj6KlJE9T+x4aPpu3bd7pNW9iO7+OPqujdu/fSw78fni/JkS/3U4UKFejSpcvU5u7O+fZ5shEb24kWzJ9H/niLLkbANQx/fCy/8GrfUTEySRIh4CTw4AODaUD/OLp+/ToNffixcs/FY0G1WqcYd2rMimRMMYi208phftS+UTgN7FCFwtk6heh6GuDqxbjSnYcTad+xJCWmENJ0FlS0m6oevryO9tRU5+T4+OUZw0otP27fkgoquI18/DHq07snrV23gea/9banKIuV3k5Bjevbm/4yZ6Y6rjeiUKwTtiQqCz6Ww5XqankX1CH3D6Tp017g37Mwbuos7l7/0ceb6d9r1tGXXx6hOrf9irp370pt27SmO+9sarI6d+5H6tN3ECVevWrGyYoQKA6BBW/No3u73sNDIXOpbv28OlWcvDcijdeCirZTjD3FuNMAp3UayhPgR1cPpCGdq1Kz6AqqbdV573l0bbkskhk/ptPJ7QmUkpJF2XyQXG6XzeFhOMTu5Cw+TioL6K7TaXTwp3QlsBiLaralsiAj3Oh2VDsE1biS0v38XxbU0iVTtqWXZ0GtWbMG7f5kC9/z8E0RxZ/8nvrGDXbbPNC9W1ea9/e/siXLv4zBoaSWsSpEPv7vCPwfCSpPM8henwAWVfyaTAhPMYhZkTo3DaehXapRBe7Z642YYiBpDnc+SvrgIuXwmFMK4h8lr+hPfpHGP7GopnFv30M8/eBybl89z2k4uTmfr3b7ouaJoBbv/hNBLR6n0k5VngX1w/+soYYNGygE3357nHr27v+LbtyoqNq0aeNaCg0NUflmzf4LLVi4uLQxSvk3EYGbWlC1QMKNq9y9vET7KSzUcBa6Gix8T8bVonrcdoqev96EXLSLnkmj9K+TybcCD7eJ8CdfdiP7sJWancq9fK9m0hGeGH9JfApdScshjElV7aguFuqNFlNcux0WatOmt1Pt2rXop59+piNHjDaywrgGBgZSv7jehDbMKlWq0NFj39Cu3Xvy5bm7bWuqGFGRjh79huCG08GdoPbqdR+1aN6MataoQae5M8uBg4doz55PyeFw6KzmsnOnDhQcEkydOnYguAYRFr29lA59flit57D7YOu2HeZDODq6DjVoUI8uXbxMnx/+QqUJDw+nwYP6U33uORrCD+Fj33yreoweOmSUoRK5fBTFp2uXWPIP8Ke9ez+j5ORklbN9+7upY4d2hPbXhIQEOsjnt2vXXkpMTHQpufDNknAuvMS82PIqqOjFu37danWicPO2adup2O5b6zWdv3CB2rXvknfBLmu4X1Dn8P2jDiP98eMnVHNHWlq6S+q8zQiu0225bjscmWa7c6VKleiBIYNUHUtOTqF9+/Zz/dtOruWgzsXGdqQ2rVtRUFCQyo966q6ne2HHwpncxu7ue7h9uZF+6fjuOK1du6HYnFCGH1soPXr8RvWajqpdm5KSk+jEiZO06aPN6v5HGnehNOo6joX7+q67WlKdOrexNyKNTrJnYhN3eiuqF3d0dMnu7dDQUOrYsR0OT+PHjqbGjRuq9VFjjP4F2ECnt4MHP1fxrh/ofAc3Mb5TR2YmM4ynT3btUXXJNa3d2x65fCGokEksTUFl6xRTDaLttEdMJA1ob4w7RRqPg9M6dZxLp1zuhOTDbl4ILPHPtGVdz1a9eo/yD4uvPZNK3ydlqfZTdE4yf20G7agogw98swjq3j3blKAV5TKb9uKfafDgAaZ7zcod+YaNGK2E9fi3X6o0rh2kXAUVwgt3HR4wrgEPpEl/mMw31eZ8u3SHmHyRLhudYrubQv7+ymXUqlUMu/RT6M7mbWjKC88Sernq9jlr1p9/Pk+/f2QEnYg/aY1W6+74WF9mpk2fxW19W2j92lWEB61rQPvMkiXLafqM2a678m2XlHO+wgrZsIqPN+3P+juwu1MS2sTRNo6wZOlyAs/iBriIjx45qOoSODe+vWWBFzJ8VwsWvE4tWzQr9PtHh6adO3fRqDETC+TFeQwf9gg9w72OEdBLfdTIYQSWrnUJIokyduz4RKVFmokTxhbawWrL1u00gjtTuQbXYwUHB9PiRW/mazPWeXC9EOdRoyfwkCJ2oxURZs+azox7FXoPIxteLB4fNb7QTn6lUdcffugB1UEuLCys0LPGvfjYsFHm/WxNVNJ729oPw1qudR3PodvviLFGKWPi3eWLKTIyIl+83sAICXSULMow0Wm9XZZAUHl2JFZNf25MxcxI9W8Jokl9a9Et/DNtsFh1UGv8gaWO1cu8GCM1KmAOW6G5LKDZLJjZPAYVwgpR5f5HdJbbU1edvk7xHJ/EQ2gyYM3yP9pPy+P0g9aK7ipims8vLd0Jhs636p/vUUzL5npTNd6jsgWwZWYd0jCSb0bdpuV6LlZBHTDwQfoHi53uxYmHWVZWFsEys4ZJTz1Daz5YZ0ZBrPHwxENMP8jwfeJfh7btYuny5QS1ab3pXp37Oj337NM6mXpo+vr6meeAHTiPDp3upfPnL5jpsOKOj5X9y6/8lYYPf1R5DJAH5wQr2/WFYfOWbfT4yHFIUiDYwblAoS4R5VVQDx3Ybb6I3NW6I125csXlzIveRM/gVmzlwLqd+9rrppcCuRo0qE//Xr3SdAsjDvUN4hcUFJyvDsCL8NsecXTx4iUkM4NV5NCT/o15r5r7jHLyvxj27NWfhrD1ih6kOiAd6riuu4jH2O/xEwyh1umsx+r26560ccMa8z5T5831KoRFVrc1I99ZHpPb/Te9C7V6Q9irs2Hdvyg6ug6nNALqelp6Og9DDDDLxh6UDxHbxb24rcHuug5xHzggznoIdWxY0FY+mWz9Dbr/IdUhzZq4pPd2t3u70JtvzFVFWjmCiw6JiVepVZuOelO9jOOlXJ8f0l5LSqIw7tlufQ6CYVy/+5UHz8xs44rHgopjGy5fdlGwMhqC6kv3xURQr9aRaqYkuHuVgPIH0mI9kB+0obyBPOYkhNhhCblsXmZdcVAWT+KQy65crcB4JF9mYV0Rn0zfJWZSsvOHxTGxAwQV8/niuZ0NC9VZnuU5bjlC2a5aK7qriBX3TNwJBvJjUoMRLBQ6vLPsPUI7FR4OCHDVvTZ3jrpZEYeKhQrqei5WQYXQ4MHy8eat9Pbid5TLFWVVrlyZ3lm6QJWJbYh2i5i7C1gM1rfLoqwsfdNZBXfhoiW0YsX7pjupZYvmtGjhG+Yb51dffU19++U9BHEe7vhY2ePGx7XjwTZz9hzasmW7+YCYNXMa9e/XB0Wp0Kv3gAI3m12c9THcLcuroJ488bV6UOFlqHXbTu5O3+N41MWD+3eb3y8E88lJk2nnJ7vNslCfpk193hRcWBmu42itIocHJjpCzZ+/iBa+vVS58uGmXbp4ATVrdocqF72NIyMi1DW9x/Vt3utv0QV2LyNMGD+Gxo8bZT6YXcd+W4+FZpOoqNp07VoS/fHpZwkvZAi4rlEjh9MTE8eawrpt2w72FI1R+60fy5YupA4dDPcmzv3lV/6mxu5q8cA5v/bqHLr11iiVDXUZLzW6CQORdtb1+9nTNeOlF81TXLZ8BS1/dwW7ek8pl3S3bl3omaefMs8H1x7Tqn2+lyS77m2cRHHaUKtXr0af7tmuvjM8T1y9TXgOTuTvomuXWBSpmhKKanpQibz88EhQcQzWRXPmI0wnCPHET7VV4A5JFUN9lftXTZDPbatBrJ7YF8xu4SgeQhNXOUSl5/qWvyC1bURZf8w0l4/Fo2SUmK5ny/SLyxnqZ9vUXL4QUvaiZHECNWSG08Hdy39KXHGuNzpYK7qriBX33NwJBtp+Dh/aa96weIC8POdvBYrFw2XPrq1UrVpVc5/ruVgFFYnwkPnz81PN9NaVbVs2EtpTEJ59bgqt/Mcq627lGizOsBl90+nMeCCt/tcHetNcoj0Fk2PgOhAaNGqmxFAncMfHyh5p0Qbd5d77CrwAYN+sGVNp0KD+WFUuuuGWB5+dnNUBivgoj4IKl99XX3ymzhptVrBI7AqwKOBaRMCLHDwQ2oNhPQb6Baxjd722Vl6YMp0f8ivNJFaRQ6S7zk+6ruiMi1hwZ8x8RW+aS+t5wbthHa7meiwI3D1df1toG+fAgf1oNr+w6QDLGP0CdEAb38oVS/Umod7BRewa4EmBYGhXJvoxPPS7YWYyu+o67jG457VFB9c+XPyuAeeza+dmNVEI9uFF2DqLm133NsoujqCOHTOSnnzC8CzBqHhx6gxkLRBWvf8uxcS0UPHtOnQp4O0qkMGLiP8CAAD//04T0yIAABsnSURBVO1dB5gVRda9M0yAISdB139lJA1ZgVGyKCCKiCjKShQUiQKuaXEXUBAVFXVBd8WEShAVWJAMkiQokrOIIgZUJKchzQz891S/amp6Xr/YyMjc+mZeV1dXV1efV92nbqj7YpLLVj5HYaSYGCL+o1hs+T8PZ/LwNi6WKJ4zCXHE/7zlfF7e5ouPofwJMVSvSAI1KZaXYrl+LNe1GsCW21GNWWVoUx87y/mDp8/SnB/TaM3vp+nwybN0KuMcneb/M5lEGZnnKOMs0dmz54j/iLN0Lqy74RMuYCpapAitXbNCXWHu3M+o90MPh321L1YsotKlStG+ffvp+ro32Of36d2DHn2kn9pfu24D3dO2g33MmSlduhR9vngexcfHq0POvgx9eiB17NhOHftu5/d0c/PbnU3Y+9dfl0oTP3xf7X/yyRQa8M/B9jFk7mzdil4e8bwqe+DB3rR48edZjuudjyeOpdTUWmp3zpz51Kfv3/WhbNsXX3iW7m7TWpXf1aYdbdi4ya7jho+J/TkeFFWr16aTJ0/Z55mZhIQE2rZlLY/LWNq5cxc1a97SPuwlznajLpnevbrTY4/2V0cDYedyOn3/3VZ1aPnyL6hzlwezVNu8cRXlz58/2zjKUsnPTtWqVWj6tE/UkWDfk5/TAxatX/slFS5ciJ/Zc9S+Q1f6atVq1/r4/jEOkH744Ue6qWkLu+6D3brSkwMeU/uBxm+HDvfSM0MGqXppJ05QteqpdhtmJi4ujnZs36iKli1fQfd16W4fNq+Fwq7396DPly63jzszr7w8nFrfYT1PM2fNoX79rX6i3tj336YGDeqpU94Y/Ta9NOLfztPt/auu+it9Nm8mxcXloYyMTEqpfA2/9/DGI/JqrN/7t7vpuWeHqDanTptOjz72pMr7+yhWrBit/mopc0AM/b53L9Wtd6NdzatnGw2+9ebr1LTJjWqMlC1f1b6GmXn6qX9R507tVdEdd7alzZut58Csg3wpfo/e2LihKv7f1Ol05swZZ5Wo92MiIVRcFZwI8ovlD/AhCDWOSTQ+j0WoibzNy2SaFB9LRfLGUOvSSVStcIKqm5VE0Y5qiIkVjaLxGDrH20NMpp/vPkHLfjmpyDQtnYlUESpROpNpJo+nTH4YQaa8sf759JySzIHuJLFQ++hGGHNmTaWKFSuoZgINIn2dN0e/Rs2a3qR2nX0xCfW998fRM8OG69OybUE63+3YrMr9EXkkhIqXDF42bqntPW1o+PND1eGhzzxP738w3q7qho+JvXMyYp9sZDDxwTlHjx6ja2rWsY94ibPdqEsmJxIqxgzGDtKEDz+mQYOt78HlFkIuBkEsXmh9506CdGtkw7qVVKhQQfVyrVy1Fp0+fVpVNUluwoSPaNBTz/htony5sjRv7nR1bP2GjdTmbusl7K/y9m3rCROt77/fRU1vPj/BMq+1a9cP1KTZbf5Ot8tMcj58+AjVrG0RKCp8vXUdJSYmKmIsV6GafY5bZvy4MVSv7vXqsPnMeDXW/zdlIl1To7pqv+XtbWjb19vduqLK9bOHnUpVatrfh0moZj/9NRbo2Ub9UAi1a5dONGjgANU8JmXt2ndR+YvxETahopPgP/Ce4kHeKlJlMtSkmuAjU0iokE6TC8ZR678kUXIBFl990qgplSqC9REpGmbhk04zS6745RTN/yGNDpzIpBNnLMk0nQ+CTLHNQqZ8Dkg1JyVzoDtJLNR+6kHrJAVNAJjdu83czGvc37UzDfzXP1SRsy8mod7zt460du1689Rsef2y2brta7q91d1ZjkdCqObDmKUx306NGtVo6pSP1N6Il0fSf994y67mho+J/cJFS+jB7n3sc/xl5s+bQeXKXk0nTpxU0qyu4yXOuk23bU4kVBP7WbPnUt9+j7p1P6xyc5zMm7+AevW2JPNAjcyYPpmqVK6kqmDcYfwhmSTXpWt3WrrM0gqpg8bHZZeVpJVfLFElY8d9SE8PsSReo4qd3bThKypQoEBAQg0Vj82bVlP+pKQsxGlOTJ3Ptt0JR+bxxx6mXj0tzcOYMWNp2HMvqBpejfVVK5dSiRLFKT09nSpWusZx9ey7muxw5JYWrWnHjm9VJZNQo3m20Zi+RqD3HPr8xfLFSnrHOZgUT548lT4YO4F+3r0bRX9YioxQfd1TxMoECI7EP9S/LJAqlW8iS6f5mD8LJsbS9SUTqfkVSVQiHzMtH7ckUouQNcFqkRdS6kkmzDV7TtHM747T3uOZdJIlU6XmzbDIFGpeSKdnmUyUdMr9yWlkCojMge4kMR+EQTduhKFJzTnrdWuwbNlkpTLCcWdfTEKtymqwE6wOC5S2bl5L+fLlVS+0aAk1IyODKqTUCHQ5qlChPM2dPU3ViYRQg0ndaHj2zKmUklIhG6F6iXPAm+SDOZFQoZKFahbJy9l/v7696OH+D6l2hz37Ao15b6zKB/oY/txQatu2japiSj4mobZq3Za2bPGv8jMJNdiYCIVQn3p6GI0bPzFQl9UxjF2MYaTyFatTZmYmXXHF5bR86QJVtvKrVUrlrXYCfNRl6XQCS6lIpvrdfM8Euy+c6zbW9XONOiCwYEm9x32VevXpT/PmWfejCTXaZxtNh0KoqAe1+oiXnlNmG+zrBC0GzADA690xH9hStD7u9TYiQkUnmD/VB7ZZCJU5EzZUS90bw+reWLr1/5KoQem8Sv0LElbkiZN8Iq5Vhn2LTNczmc7ykenxM2ctMk33SaaKTH02U6h5ubkQvnuu9ccnc6A7SSzU3rgRKmw8UCft+f13qlf/pqDNJfEMeQvPlJGcfRFCdX/JeIlzsC/JJNSevfrR/M8WBjvFPm6qFr20oeICO7/doibBTluZffEIMoMHPUld7uuozry/Wy9asmRp0FZ69uxGTzxm2dpNMrtYhArVYiC7r76hD95/ixo2qK92a1/XkA4ePEjVqlWhT6datulg9krdTtGiRWnt6uVqd8WKL6nTfd1U3nzPREOoeqzr64Wzhb0V94F0MQgV14WvyFOD/8l20kZKXY8yM8HmPHXaDPrHgIG2/dk87kU+YkLFxZWE6tvm4Z08LF2yzZwSfYQKde/l+fNQ23IFqErxBLavcgX+O0+kMbbd9CyfD1Xv1n2nacb2Y7Tr8BklmZ5SdlOfZAo1LwiVGRQkytkcS6bctQsqoWonk1BmgehL8+ZN6Y3/jERWCFWhkPXDbdbuJc5Zr5h9D44VcLBACqaSdJ59c7MmNPqNUaoYRAxCNpO+j1DVi+a52naJshrX1qFjx46ZhyPK9+zxAD3x+CPq3JGj/kMjR/03aDujRo6glrfdqur16NmXPluwSOUvFqG+OOJVGj36naD9hq0YNmOkq8tVUVs49axZtUzlN27cTHe2uVflA32Yz/D06bPo4UeeUNW9ItQtm9ZQUlI+paVp1+G+QF3Jduzrr79hZ6kMVX6xCNXsVOVKKdSyZQtq2LAeVaxQwVYHo86mTVuo9V1/M6t7lo+aUNETCJuaUOHpm8iqXnj3FmLp9OrCcdS5ciEqzfZTePhCCoX9VDkg2eQaQ2dYd/vzkXSasuUofXvgDKWxzRQevWeYUM/bTJlEuR7UvDmdTIGLOdCdUiGOh5LcJFSoi6A2QqpTrzHt3bsvYHPwboSXI5KzLyKhukuoXuIc8Avig3XrXEcTxr+nqn373U5qfkurYKfYx01v0rffeY+eHz7CPoZMNIT62qiX6bYWt6j2QHwgwHASJLSa116j1Iip1zdSarcWtzan1197RTUDmydsn8GStnOjHrABRkgXi1CXfL6M7n+gp+pDoA/tfATv3Aop1e2q2is7VLMNpK/7OndQ54PIQehI5nsmGgl15RdLCGpxqHthQ9UEqS4SxkdOIFSzu7BX9+zRjR75e19bJRyJF73ZplveQ0K1vHyxXEYRKkunRfPFUs1SealdpUKUxPsWkVqkakuqvIt5zS9H02na1qP09d4zdOzUWToJMuX/dPwzeyqbqY9MmU+VZIptTk7mQHeSWKj9diNULE2BYwdSKDP8Jbxs5q//d6Wq7+yLEKo7oXqJswI/wEfBggVp4/qVqkaojiG6uaVL5tOVV/5F7T7U9xGaPWeePqS20RBqrVrX0qSPx6t20C94QbstQcpyUd4x7d+wZ8FJBcmU0H77bQ/Vb9hElQf60DY+qO5gd9fLRi4WoYZibjFt0M77NJcNwbaq78cNA9MLt0PHrvTlylWqqvmeiYZQx499l+rVq6PahBMfnPkiSTmNUPU9mBogLz3WdfvYRk2ozIeWDZWlzXiWPNX6UybPfPFEl+WPo9vK5acbrkqiBHgr6crgVJ+0CjXv3rQMmrzxCG367ZTy5oUTEsjU31pTRaZ8DlS+OT2ZA91JYqH23Y1Q4e0Ir0ckzCihwnBbfzXsmaeofbu29iWdffGSUOEcAGkJacCTg+mTSVPs65oZrx46N3xM7KN5yXiJs3n/bvmFn82i5OQy6nAo3smo+FCfnmr2jTzW1qVUvhbZLCkaQkVD5oQsHOek6Z9OoqpVKqu+OCXRFcsW0uWXl1bHnMuhVKHxYY5Rp8ruYhEquhdM7Wt6JsPrdMjQ5+y7+vcrL1KrVrepfX92b7siZxqzXXDMO2+oInNiggKvxrqpUg5lSRDME+XLl6MjvBzIXGPv1bONezOX+2ES5U9qHvfBO1SkaBHatm27so/iPH/JdOqaMXM29X/4cX/VoirzhFBZKKU8/IFlM4m8zZsAlW8s/aVQHupRuxj9tUi8WqMKqdRW97LNNINdig6fzKSpm47S+t0n6QjnT6WTUvXq5TEqcAMTBtS8IFFFqH8CMsW3Yg50J4mF+q25EQbON19WWO6BNXG/s5OSmTp1bEdDOHADSFd75Tn7Yr6sovXyNaUZ0xPR7BPyXj10bviY2EdDqOirVzijrWDJVIWibjC1Yv9+val/vz52s24z72gJFV7i8+fOsMfQmjXr6N7297lKVZBA8R3jPCSoO2GagEOOTqbEgPGJdaFm0A5d7/bbW9DIV1/Su0o9bC6NuZiEin537HS/LS3aneSM+VxB+sT9799/wK4Cu+qiBbNtTP898nUa9ZpFmnYlzsC0s2TRXOWEiPIPJ35CAwcNsat4OdZNe3kgkn/15Rfojjus9bnwqoZ3tU5ePdtozzRVmZ7d+lrYLpg/k66+2hpngVS5n3w0jmrXtjQkoXqWm9cJJR8dofIVWD2tJNQ4ljgR1AEOSSo6UmIMVSqZQH3qFqd8CbEWoTLxqsq8hRMSyHTRjmO09Ns0OoS1pr7lMUrNy6KrJlNeRfOnI1OAbw50LF6fPMVa+oFjgdJPP/1sBzpwIwycD3sHVH1YgI6EhxuLsX/99TdlK6hRvZpaV4ZjmB3jBQZSvZCEioXqsBkhoT/r1m1Q1/7mmx22zQvHvHro3PAxsY+WUL3CGfcdSoJtEcSq0y+//Eq4h7nzPlPfLbw9GzSoSw8+0IUQyUinn37eTY1vPH+eLsc2WkJFG2bUKOxDUsLL/aOPJtHO73dRwYIFqFGjBlS/bh26885WdmQukOmjjw+gGTNm47QsCYEWEHABCdIH2nrvg/GEZ6B8+bLUs3s3di651bZ9ISoRohOZ6WIRKlS4kLBxf9DEYFkGvit48P794b52EAb0dfSb79KLL71idlvlEZAAgQl0wv2NHPkf2rJ1m/Javefuu6jbA13UMjXUOXT4MKWyp7CpHvZyrNevX5cg8emEJSfzeNx9zFHR8uXNSy1aNKcmNzW2xx2e8YY3NFPjUp/j1bON9szADzA3LFy4hMZNmEg/81jfvfsXdclbbmlG/33dijKF/iAK0ii29WMNKt6Nqam1aNjQwbZjGMwV1a+5Ti1f0n32ahsxofJ7WSVobiGhIkqStp8mMYEW5OhILVIKUstKBSmOpVUQr7abIgoS7KJztxyhhd8cp4NpvNbUF7jhjC9oA49Re52pkk75dMbqT5XMgR5Ox/HQ1KpdX53iRhi6PcxeZ7BaDS9Zt6Q9AvXyhwtJqOiDfqCc/WnQqKn94Ok6eInm5HWo+h68wFm3FcoWLwi8KEJNmLBAYjxy5KjfU7wgVDSMEIAvDB9mS1V+L2YUHjp0iO5iyfPHH38ySs9nsZwL4zc5ucz5Qpfc6tVrqT3bDrGO00wXi1Bhx4RKEgEgAiXYs2HXdkumQ5lbHZQDy9s4gtGePVm1UOZ7JtrJI64D50VI11qjhTJ/CQQ3kCNnTZr0vyyHvXq20SgciuBXgLCZZgIpVqlWyy4yPcB1IcjVeQ8HDhyktvd2ol27ftDVPN1GTqjcDZCqIlT+gLrXWn9KHB0pVjkkPdSwOFXk9aexTLbaZgpOhMPRYl4as2DbUdrvI1Pl0cveSSo+Lz8vkEpzeuCGYN+E6WQSrK55HF966vUNVZH2Mg3mAIGZXOfO7anUZZfxbDYfHThwgL5jL8hXXn3NjiijvQqdhGrOkjFIgzmcaPd6N3d/vCQR1QUvX/NBaNT4ZntWCW9WeLXioQwWlSU5uQzBtogE71V4serkho+J/Vtvj6HhL7ysT/G71bautLQ0qlbjOr91UBgNzq6NuhxA2D8sLdFqU3/V4N0NycjExF89Hagg2Djyd66zLDm5DGEdacMG9WzJ0VkHUtvSpcuoZ+/+fu1ezvpYX9qx471+yQnPw5tvvUvvvPu+8zS1b4aeMyP2OCubjlDBxoR2GHJ6WzvJe/v2b3iC8Qzd0aplNiwwuYHDoBkq09knvQ9b6mOP9Lcdy3Q5ttAEfPrpTBr89DC/8WcvxFhHCMKhQwfZ9m+zP3hm163foJZm+ZvAefVs62tCNf6vfz5BjW9oaKu9nYSKuo0a1ufgDs9T8eLFshEpYjdDhY2JjXNCpq/jxTZyQvWRqSZU+BxB3YsISYiOlFwinvo2LkElOOygspsy+0IyPcGi6bofT9C0dYdp/7FMOs7xeq0oSFY4QaXmhVcvzy7+rJKpF1+M122YcUxDXUjuRR8wey7E0XYOHjzkyfpFL/p0Idu4EDgDQzhUlClzlQomD3s5JL41a9fZE5QLeU9ubWPihElRSkpFJoIr2I+CA43s2cORirbRgoWLs6gl3dpwlmNxPhzBChXCmDmoJoOm3dFZ/4/edxKqGZUJL378eMTx48dp0+YtEX038AquzPePifGp06cI6zvdpPs/4t4REa1SSgrHDS/Pk/SDylbsxTrkSPoOabVkyZKUmBDPAfn3BYx6hElorZo1ae++ffTll18FrBtJX9zOiZpQoe5VIQd99lMQahFeLtO4QgG6qya/TJP4gI9MsXZ03Q8naMb6w7Rr72k7pOBpn2SqlsdAMtXLYyDOcvJtrB35VAjkyZOHnuZ1abG8hSps2qczAiIDSQeL6ZEgrWGGLik4AoJzcIxyU41AhJqbcJB79Y9AxIQKyRQqXwR0iGPOjPcRKkIOFufoSJ3qFaPUq/Pz+lMWXbnyKRY9fzqYThOXH6Dv95+mtFP4KTa2parlMdbPsGm7KQunKnADmFTI1P8Xh9napg2rVGQTqNduanqr64wYMWpnTp+iVFKwK2Bxvelt6f8KUgoEBGcZByYCQqgmGpJ3IhAVoSp1r49Q8QszsKGCQK8qGU/dG5eksqUSWecdww5I5+g3joI0et5e+vVwOh1nMoVUqgI3sL0020+x+XoJYpXkjgA8Cfs+ZEVqgXPPrFlzadGSz5UnHALcJyeXof59e2fxkpw0eWrAtVruV8u9RwTn3PvdO+9cCNWJiOybCEREqJBM+c92SIL9VBEqS6cF2H5as0wSdb2R7aeF4tluyiEFD6TT5C8O0Ea2napfjuG1ppZkCm9f63dNlQMS64ShFkYSMrVwCPQJdeRHE8eyrSD4Ty2hnVAiKgW6Xm49Jjjn1m8++30LoWbHRErOIxAxoTKHsjrsvMoXS2YSOIZvUVb3NqlWiNo3KK68e/cfT6epXx6itTvT6AivNYVkqmLzYstkqteaclY5IaFrQqbnv6BQcggYPmTIQCpSuHA27zZ45P3GbvbP8k9k6WDiobQpdbIjIDhnxyS3lcDpaMA/HlW3/WCPPlkCNeQ2LOR+syMQGaFyO1D3KkJlUkVQB02oVxSLp3vYftqkemEOI3iWJq04QEu3HqOjHMRBSaVMpBnMnoiEZJEpiNT69RhoeIVMs39J4ZQgdmoqRwOBJ+iy5SvkgQ8HvDDqCs5hgCVVBYFcgkBkhAoyZYBsQmUdMH5lJp7tpSlXJlL3my+jK4ol0IzVh2jOmsMctOEsx+VFoHuLTOF8xL5I7M1rkSmkUyHTXDLi5DYFAUFAELhEEYiaUCGpnpdQYyi1fH7q2qwEreFwgtNXHaIjx1kyhWoXJMqkil+NyUamPkK9RDGW2xIEBAFBQBDIBQhERqgMjFb5xrJ0irWoVpSkGLqjTlEqVSSOnZAO0aFjGedJlElV/Ti4kkpFMs0FY0tuURAQBASBXIVAZITKBMp/FqmCUFn/q39YvGVqUfpqx3Haf5TJFCTKUilUugglCEKFjdQMKShrTXPVeJObFQQEAUHgkkUgKkLF8hklqXJGBXfgnYIcJQnrTDOZRS3yBIFa/9nIlGEVJ6RLdmzJjQkCgoAgkKsQiIxQAZFDSgWxgmD5z0qcAVmqfy4BqSJKj9ryvhCpDyfZCAKCgCAgCFwSCEREqLhzTZ5Zt/yrMjajMmlyPZCoJlW9FTXvJTF25CYEAUFAEBAEDASiIlS0A/7U/1pq1WKqTaBcx85DUsWJkgQBQUAQEAQEgUsIgYgJFRhoadQQShU0el8Tp9oKkV5Cw0ZuRRAQBAQBQcCJQFSEqhtTBKpZVBc6tpBQJQkCgoAgIAgIApcqAp4QqgmOllqFQE1UJC8ICAKCgCBwqSPgOaFe6oDJ/QkCgoAgIAgIAv4QEEL1h4qUCQKCgCAgCAgCYSIghBomYFJdEBAEBAFBQBDwh4AQqj9UpEwQEAQEAUFAEAgTASHUMAGT6oKAICAICAKCgD8EhFD9oSJlgoAgIAgIAoJAmAgIoYYJmFQXBAQBQUAQEAT8ISCE6g8VKRMEBAFBQBAQBMJEQAg1TMCkuiAgCAgCgoAg4A8BIVR/qEiZICAICAKCgCAQJgJCqGECJtUFAUFAEBAEBAF/CAih+kNFygQBQUAQEAQEgTAREEINEzCpLggIAoKAICAI+ENACNUfKlImCAgCgoAgIAiEiYAQapiASXVBQBAQBAQBQcAfAkKo/lCRMkFAEBAEBAFBIEwEhFDDBEyqCwKCgCAgCAgC/hAQQvWHipQJAoKAICAICAJhIvD/Jvuro6vjJZoAAAAASUVORK5CYII=";var fp="2.23.2";var gp=hp({...dp.dark,base:"dark",brandTitle:`Lightning UI Components v${fp}`,brandUrl:"https://github.com/rdkcentral/Lightning-UI-Components",brandImage:pp});h();d();p();var Et="lui-addons",Vn=`${Et}/downloadbutton`,Gn=`${Et}/announcetoggle`,Yn=`${Et}/gridoverlaypanel`,mp=`${Et}/themepanel`,_p=`${Et}/componentstylespanel`,Xn=`${Et}/stagecolortoggle`,Kn=`${Et}/themepicker`;h();d();p();h();d();p();Ge();h();d();p();var dV=__STORYBOOK_COMPONENTS__,{A:pV,ActionBar:fV,AddonPanel:xp,Badge:gV,Bar:mV,Blockquote:_V,Button:yV,ClipboardCode:xV,Code:bV,DL:vV,Div:SV,DocumentWrapper:wV,EmptyTabContent:TV,ErrorFormatter:CV,FlexBar:AV,Form:EV,H1:IV,H2:RV,H3:PV,H4:kV,H5:OV,H6:LV,HR:DV,IconButton:Sr,IconButtonSkeleton:FV,Icons:wr,Img:BV,LI:MV,Link:NV,ListItem:zV,Loader:jV,Modal:UV,OL:HV,P:WV,Placeholder:qV,Pre:$V,ResetWrapper:VV,ScrollArea:GV,Separator:YV,Spaced:XV,Span:KV,StorybookIcon:JV,StorybookLogo:QV,Symbols:ZV,SyntaxHighlighter:eG,TT:tG,TabBar:rG,TabButton:bp,TabWrapper:iG,Table:sG,Tabs:nG,TabsState:oG,TooltipLinkList:vp,TooltipMessage:aG,TooltipNote:lG,UL:uG,WithTooltip:Sp,WithTooltipPure:cG,Zoom:hG,codeCommon:dG,components:pG,createCopyToClipboardFunction:fG,getStoryHref:gG,icons:mG,interleaveSeparators:_G,nameSpaceClassNames:yG,resetComponents:xG,withReset:bG}=__STORYBOOK_COMPONENTS__;var Pl=ye(Ce()),kl=hs(function(){let[{announce:e},t]=_t(),i=$n(),s=[!0,"true"].includes(e),n=ut(()=>{t({announce:!s})},[s]);return He(()=>{i.setAddonShortcut(Et,{label:"Announce Toggle [0]",actionName:"Announce",action:n})},[n,i]),(0,Pl.jsx)(Sr,{active:s,title:"Toggle a11y announcing (voice guidance) of components",onClick:n,children:(0,Pl.jsx)(wr,{icon:"speaker"})},Gn)});h();d();p();Ge();var Ol=ye(Ce()),Ll=hs(function(){let[{stageColor:e},t]=_t(),i=$n(),s=[!0,"true"].includes(e),n=ut(()=>{t({stageColor:!s})},[s]);return He(()=>{i.setAddonShortcut(Et,{label:"Stage Color Toggle",actionName:"stage color",showInMenu:!1,action:n})},[n,i]),(0,Ol.jsx)(Sr,{active:s,title:"Switch stage color",onClick:n,children:(0,Ol.jsx)(wr,{icon:"paintbrush"})},Xn)});h();d();p();Ge();h();d();p();h();d();p();h();d();p();h();d();p();var fe=class r{static mergeNumbers(e,t,i){return e*i+t*(1-i)}static rgb(e,t,i){return(e<<16)+(t<<8)+i+255*16777216}static rgba(e,t,i,s){return(e<<16)+(t<<8)+i+(s*255|0)*16777216}static getRgbString(e){let t=(e/65536|0)%256,i=(e/256|0)%256,s=e%256;return"rgb("+t+","+i+","+s+")"}static getRgbaString(e){let t=(e/65536|0)%256,i=(e/256|0)%256,s=e%256,n=(e/16777216|0)/255;return"rgba("+t+","+i+","+s+","+n.toFixed(4)+")"}static getRgbaStringFromArray(e){let t=Math.floor(e[0]*255),i=Math.floor(e[1]*255),s=Math.floor(e[2]*255),n=Math.floor(e[3]*255)/255;return"rgba("+t+","+i+","+s+","+n.toFixed(4)+")"}static getRgbaComponentsNormalized(e){let t=(e/65536|0)%256,i=(e/256|0)%256,s=e%256,n=e/16777216|0;return[t/255,i/255,s/255,n/255]}static getRgbComponentsNormalized(e){let t=(e/65536|0)%256,i=(e/256|0)%256,s=e%256;return[t/255,i/255,s/255]}static getRgbaComponents(e){let t=(e/65536|0)%256,i=(e/256|0)%256,s=e%256,n=e/16777216|0;return[t,i,s,n]}static getArgbNumber(e){e[0]=Math.max(0,Math.min(255,e[0])),e[1]=Math.max(0,Math.min(255,e[1])),e[2]=Math.max(0,Math.min(255,e[2])),e[3]=Math.max(0,Math.min(255,e[3]));let t=((e[3]|0)<<24)+((e[0]|0)<<16)+((e[1]|0)<<8)+(e[2]|0);return t<0&&(t=4294967295+t+1),t}static mergeColors(e,t,i){let s=(e/65536|0)%256,n=(e/256|0)%256,o=e%256,a=e/16777216|0,l=(t/65536|0)%256,u=(t/256|0)%256,c=t%256,g=t/16777216|0,m=s*i+l*(1-i),y=n*i+u*(1-i),b=o*i+c*(1-i),C=a*i+g*(1-i);return Math.round(C)*16777216+Math.round(m)*65536+Math.round(y)*256+Math.round(b)}static mergeMultiColors(e,t){let i=0,s=0,n=0,o=0,a=0,l=e.length;for(let u=0;u<l;u++){let c=(e[u]/65536|0)%256,g=(e[u]/256|0)%256,m=e[u]%256,y=e[u]/16777216|0;i+=c*t[u],s+=g*t[u],n+=m*t[u],o+=y*t[u],a+=t[u]}return a=1/a,Math.round(o*a)*16777216+Math.round(i*a)*65536+Math.round(s*a)*256+Math.round(n*a)}static mergeMultiColorsEqual(e){let t=0,i=0,s=0,n=0,o=0,a=e.length;for(let l=0;l<a;l++){let u=(e[l]/65536|0)%256,c=(e[l]/256|0)%256,g=e[l]%256,m=e[l]/16777216|0;t+=u,i+=c,s+=g,n+=m,o+=1}return o=1/o,Math.round(n*o)*16777216+Math.round(t*o)*65536+Math.round(i*o)*256+Math.round(s*o)}static mergeColorAlpha(e,t){let i=(e/16777216|0)*t|0;return((e>>16&255)*i/255&255)+((e&65280)*i/255&65280)+(((e&255)<<16)*i/255&16711680)+(i<<24)}static rad(e){return e*(Math.PI/180)}static getTimingBezier(e,t,i,s){let n=3*e,o=3*(i-e)-n,a=1-n-o,l=3*t,u=3*(s-t)-l,c=1-l-u;return function(g){if(g>=1)return 1;if(g<=0)return 0;let m=.5,y,b,C;for(let R=0;R<20;R++){if(y=m*(m*(m*a+o)+n),C=g-y,C>-1e-8&&C<1e-8)return m*(m*(m*c+u)+l);if(b=m*(m*(3*a)+2*o)+n,b>1e-10&&b<1e-10)break;m+=C/b}let A=0,T=1;for(let R=0;R<20;R++){if(m=.5*(A+T),y=m*(m*(m*a+o)+n),C=g-y,C>-1e-8&&C<1e-8)return m*(m*(m*c+u)+l);C<0?T=m:A=m}}}static getTimingFunction(e){switch(e){case"linear":return function(i){return i};case"ease":return r.getTimingBezier(.25,.1,.25,1);case"ease-in":return r.getTimingBezier(.42,0,1,1);case"ease-out":return r.getTimingBezier(0,0,.58,1);case"ease-in-out":return r.getTimingBezier(.42,0,.58,1);case"step-start":return function(){return 1};case"step-end":return function(i){return i===1?1:0};default:let t="cubic-bezier(";if(e&&e.indexOf(t)===0){let i=e.substr(t.length,e.length-t.length-1).split(",");if(i.length!==4)return console.warn("[Lightning] Unknown timing function: "+e),function(l){return l};let s=parseFloat(i[0]),n=parseFloat(i[1]),o=parseFloat(i[2]),a=parseFloat(i[3]);return isNaN(s)||isNaN(n)||isNaN(o)||isNaN(a)?(console.warn("[Lightning] Unknown timing function: "+e),function(l){return l}):r.getTimingBezier(s,n,o,a)}else return console.warn("[Lightning] Unknown timing function: "+e),function(i){return i}}}},K=class{static isFunction(e){return typeof e=="function"}static isNumber(e){return typeof e=="number"}static isInteger(e){return typeof e=="number"&&e%1===0}static isBoolean(e){return e===!0||e===!1}static isString(e){return typeof e=="string"}static clone(e){return K.isObjectLiteral(e)||Array.isArray(e)?K.getDeepClone(e):e}static cloneObjShallow(e){let t=Object.keys(e),i={};for(let s=0;s<t.length;s++)i[t[s]]=e[t[s]];return i}static merge(e,t){let i=Object.keys(t);for(let s=0;s<i.length;s++)e[i[s]]=t[i[s]];return e}static isObject(e){let t=typeof e;return!!e&&(t==="object"||t==="function")}static isPlainObject(e){return!!e&&typeof e==="object"}static isObjectLiteral(e){return typeof e=="object"&&e&&e.constructor===Object}static getArrayIndex(e,t){return K.getModuloIndex(e,t.length)}static getModuloIndex(e,t){if(t===0)return e;for(;e<0;)e+=Math.ceil(-e/t)*t;return e=e%t,e}static getDeepClone(e){let t,i;if(K.isFunction(e))return e;if(Array.isArray(e)){i=[];let s=Object.keys(e);for(t=0;t<s.length;t++)i[s[t]]=K.getDeepClone(e[s[t]]);return i}else if(K.isObject(e)){i={};let s=Object.keys(e);for(t=0;t<s.length;t++)i[s[t]]=K.getDeepClone(e[s[t]]);return i}else return e}static equalValues(e,t){return typeof e!=typeof t?!1:K.isObjectLiteral(e)?K.isObjectLiteral(t)&&K.equalObjectLiterals(e,t):Array.isArray(e)?Array.isArray(t)&&K.equalArrays(e,t):e===t}static equalObjectLiterals(e,t){let i=Object.keys(e),s=Object.keys(t);if(i.length!==s.length)return!1;for(let n=0,o=i.length;n<o;n++){let a=i[n],l=s[n];if(a!==l)return!1;let u=e[a],c=t[l];if(!K.equalValues(u,c))return!1}return!0}static equalArrays(e,t){if(e.length!==t.length)return!1;for(let i=0,s=e.length;i<s;i++)if(!this.equalValues(e[i],t[i]))return!1;return!0}static setToArray(e){let t=[];return e.forEach(function(i){t.push(i)}),t}static iteratorToArray(e){let t=[],i=e.next();for(;!i.done;)t.push(i.value),i=e.next();return t}static isUcChar(e){return e>=65&&e<=90}};K.isWeb=typeof window<"u"&&typeof sparkscene>"u";K.isWPE=K.isWeb&&navigator.userAgent.indexOf("WPE")!==-1;K.isSpark=typeof sparkscene<"u";K.isNode=typeof window>"u"||K.isSpark;K.isPS4=K.isWeb&&navigator.userAgent.indexOf("PlayStation 4")!==-1;K.isZiggo=K.isWeb&&(navigator.userAgent.indexOf("EOSSTB")!==-1||navigator.userAgent.indexOf("HZNSTB")!==-1);var dt=class r{static defaultSetter(e,t,i){e[t]=i}static patchObject(e,t){if(!K.isObjectLiteral(t))console.error("[Lightning] Settings must be object literal");else{let i=Object.keys(t);for(let s=0,n=i.length;s<n;s++){let o=i[s];this.patchObjectProperty(e,o,t[o])}}}static patchObjectProperty(e,t,i){let s=e.setSetting||r.defaultSetter;t.charAt(0)==="_"?t!=="__create"&&console.error("[Lightning] Patch of private property '"+t+"' is not allowed"):t!=="type"&&(K.isFunction(i)&&i.__local&&(i=i.__local(e)),s(e,t,i))}static local(e){e.__local=!0}},Qn=class{static getSpacing(e,t,i){let s=t-1,n,o,a;switch(e){case"flex-start":o=0,a=0;break;case"flex-end":o=i,a=0;break;case"center":o=i/2,a=0;break;case"space-between":o=0,a=Math.max(0,i)/s;break;case"space-around":if(i<0)return this.getSpacing("center",t,i);n=i/(s+1),o=.5*n,a=n;break;case"space-evenly":if(i<0)return this.getSpacing("center",t,i);n=i/(s+2),o=n,a=n;break;case"stretch":o=0,a=0;break;default:throw new Error("Unknown mode: "+e)}return{spacingBefore:o,spacingBetween:a}}},Dl=class{constructor(e){this._layout=e,this._totalCrossAxisSize=0}get _lines(){return this._layout._lines}init(){this._totalCrossAxisSize=this._getTotalCrossAxisSize()}align(){let t=this._layout.crossAxisSize-this._totalCrossAxisSize,{spacingBefore:i,spacingBetween:s}=this._getSpacing(t),n=this._lines,o=this._layout._flexContainer.alignContent,a=0;o==="stretch"&&n.length&&t>0&&(a=t/n.length);let l=i;for(let u=0,c=n.length;u<c;u++){let g=l,m=n[u].createItemAligner(),y=n[u].crossAxisLayoutSize+a;m.setCrossAxisLayoutSize(y),m.setCrossAxisLayoutOffset(g),m.align(),m.recursiveResizeOccured&&n[u].setItemPositions(),l+=y,l+=s}}get totalCrossAxisSize(){return this._totalCrossAxisSize}_getTotalCrossAxisSize(){let e=this._lines,t=0;for(let i=0,s=e.length;i<s;i++){let n=e[i];t+=n.crossAxisLayoutSize}return t}_getSpacing(e){let t=this._layout._flexContainer.alignContent,i=this._lines.length;return Qn.getSpacing(t,i,e)}},pe=class{static getParentAxisSizeWithPadding(e,t){let s=e.target.getParent();if(s){let n=e.flexParent;return n?this.getAxisLayoutSize(n,t)+this.getTotalPadding(n,t):t?s.w:s.h}else return 0}static getRelAxisSize(e,t){return t?e.funcW?this._allowRelAxisSizeFunction(e,!0)?e.funcW(this.getParentAxisSizeWithPadding(e,!0)):0:e.originalWidth:e.funcH?this._allowRelAxisSizeFunction(e,!1)?e.funcH(this.getParentAxisSizeWithPadding(e,!1)):0:e.originalHeight}static _allowRelAxisSizeFunction(e,t){let i=e.flexParent;return!(i&&i._flex._layout.isAxisFitToContents(t))}static isZeroAxisSize(e,t){return t?!e.originalWidth&&!e.funcW:!e.originalHeight&&!e.funcH}static getAxisLayoutPos(e,t){return t?e.x:e.y}static getAxisLayoutSize(e,t){return t?e.w:e.h}static setAxisLayoutPos(e,t,i){t?e.x=i:e.y=i}static setAxisLayoutSize(e,t,i){t?e.w=i:e.h=i}static getAxisMinSize(e,t){let i=this.getPlainAxisMinSize(e,t),s=0;return e.isFlexItemEnabled()&&(s=e._flexItem._getMinSizeSetting(t)),s>0&&(i=Math.max(i,s)),i}static getPlainAxisMinSize(e,t){return e.isFlexEnabled()?e._flex._layout.getAxisMinSize(t):e.flexItem.shrink!==0?0:this.getRelAxisSize(e,t)}static resizeAxis(e,t,i){e.isFlexEnabled()?e._flex._horizontal===t?e._flex._layout.resizeMainAxis(i):e._flex._layout.resizeCrossAxis(i):this.setAxisLayoutSize(e,t,i)}static getPaddingOffset(e,t){if(e.isFlexEnabled()){let i=e._flex;return t?i.paddingLeft:i.paddingTop}else return 0}static getTotalPadding(e,t){if(e.isFlexEnabled()){let i=e._flex;return t?i.paddingRight+i.paddingLeft:i.paddingTop+i.paddingBottom}else return 0}static getMarginOffset(e,t){let i=e.flexItem;return i?t?i.marginLeft:i.marginTop:0}static getTotalMargin(e,t){let i=e.flexItem;return i?t?i.marginRight+i.marginLeft:i.marginTop+i.marginBottom:0}},Fl=class{constructor(e){this._line=e,this._amountRemaining=0,this._shrunkSize=0}shrink(e){this._shrunkSize=0,this._amountRemaining=e;let t=this._getTotalShrinkAmount();if(t){let i=this._line.items;do{let s=this._amountRemaining/t;for(let n=this._line.startIndex;n<=this._line.endIndex;n++){let a=i[n].flexItem,l=a.shrink;if(l>0){let c=l*s,g=a._getMainAxisMinSize(),m=a._getMainAxisLayoutSize();if(m>g){let y=m-g;c>=y&&(c=y,t-=l);let C=m-c;if(a._resizeMainAxis(C),this._shrunkSize+=c,this._amountRemaining-=c,Math.abs(this._amountRemaining)<1e-5)return}}}}while(t&&Math.abs(this._amountRemaining)>1e-5)}}_getTotalShrinkAmount(){let e=0,t=this._line.items;for(let i=this._line.startIndex;i<=this._line.endIndex;i++){let n=t[i].flexItem;if(n.shrink){let o=n._getMainAxisMinSize();n._getMainAxisLayoutSize()>o&&(e+=n.shrink)}}return e}getShrunkSize(){return this._shrunkSize}},Bl=class{constructor(e){this._line=e,this._amountRemaining=0,this._grownSize=0}grow(e){this._grownSize=0,this._amountRemaining=e;let t=this._getTotalGrowAmount();if(t){let i=this._line.items;do{let s=this._amountRemaining/t;for(let n=this._line.startIndex;n<=this._line.endIndex;n++){let a=i[n].flexItem,l=a.grow;if(l>0){let c=l*s,g=a._getMainAxisMaxSizeSetting(),m=a._getMainAxisLayoutSize();if(g>0)if(m>=g)c=0;else{let y=g-m;c>=y&&(c=y,t-=l)}if(c>0){let y=m+c;if(a._resizeMainAxis(y),this._grownSize+=c,this._amountRemaining-=c,Math.abs(this._amountRemaining)<1e-5)return}}}}while(t&&Math.abs(this._amountRemaining)>1e-5)}}_getTotalGrowAmount(){let e=0,t=this._line.items;for(let i=this._line.startIndex;i<=this._line.endIndex;i++){let n=t[i].flexItem;if(n.grow){let o=n._getMainAxisMaxSizeSetting(),a=n._getMainAxisLayoutSize();(o===0||a<o)&&(e+=n.grow)}}return e}getGrownSize(){return this._grownSize}},Ml=class{constructor(e){this._line=e}get _layout(){return this._line._layout}position(){let{spacingBefore:e,spacingBetween:t}=this._getSpacing(),i=e,s=this._line.items;for(let n=this._line.startIndex;n<=this._line.endIndex;n++){let o=s[n];o.flexItem._setMainAxisLayoutPos(i),i+=o.flexItem._getMainAxisLayoutSizeWithPaddingAndMargin(),i+=t}}_getSpacing(){let e=this._line._availableSpace,t=this._layout._flexContainer.justifyContent,i=this._line.numberOfItems;return Qn.getSpacing(t,i,e)}},Nl=class{constructor(e){this._line=e,this._crossAxisLayoutSize=0,this._crossAxisLayoutOffset=0,this._alignItemsSetting=null,this._recursiveResizeOccured=!1,this._isCrossAxisFitToContents=!1}get _layout(){return this._line._layout}get _flexContainer(){return this._layout._flexContainer}setCrossAxisLayoutSize(e){this._crossAxisLayoutSize=e}setCrossAxisLayoutOffset(e){this._crossAxisLayoutOffset=e}align(){this._alignItemsSetting=this._flexContainer.alignItems,this._isCrossAxisFitToContents=this._layout.isAxisFitToContents(!this._flexContainer._horizontal),this._recursiveResizeOccured=!1;let e=this._line.items;for(let t=this._line.startIndex;t<=this._line.endIndex;t++){let i=e[t];this._alignItem(i)}}get recursiveResizeOccured(){return this._recursiveResizeOccured}_alignItem(e){let t=e.flexItem,i=t.alignSelf||this._alignItemsSetting;switch(i==="stretch"&&this._preventStretch(t)&&(i="flex-start"),i!=="stretch"&&!this._isCrossAxisFitToContents&&t._hasRelCrossAxisSize()&&t._resetCrossAxisLayoutSize(),i){case"flex-start":this._alignItemFlexStart(t);break;case"flex-end":this._alignItemFlexEnd(t);break;case"center":this._alignItemFlexCenter(t);break;case"stretch":this._alignItemStretch(t);break}}_alignItemFlexStart(e){e._setCrossAxisLayoutPos(this._crossAxisLayoutOffset)}_alignItemFlexEnd(e){let t=e._getCrossAxisLayoutSizeWithPaddingAndMargin();e._setCrossAxisLayoutPos(this._crossAxisLayoutOffset+(this._crossAxisLayoutSize-t))}_alignItemFlexCenter(e){let t=e._getCrossAxisLayoutSizeWithPaddingAndMargin(),i=(this._crossAxisLayoutSize-t)/2;e._setCrossAxisLayoutPos(this._crossAxisLayoutOffset+i)}_alignItemStretch(e){e._setCrossAxisLayoutPos(this._crossAxisLayoutOffset);let t=e._getMainAxisLayoutSize(),i=this._crossAxisLayoutSize-e._getCrossAxisMargin()-e._getCrossAxisPadding(),s=e._getCrossAxisMinSizeSetting();s>0&&(i=Math.max(i,s));let n=e._getCrossAxisMaxSizeSetting();n>0&&(i=Math.min(i,n)),e._resizeCrossAxis(i),e._getMainAxisLayoutSize()!==t&&(this._recursiveResizeOccured=!0)}_preventStretch(e){let t=e._hasFixedCrossAxisSize(),i=e.alignSelf==="stretch";return t&&!i}},zl=class{constructor(e,t,i,s){this._layout=e,this.items=e.items,this.startIndex=t,this.endIndex=i,this._availableSpace=s}performLayout(){this._setItemSizes(),this.setItemPositions(),this._calcLayoutInfo()}_setItemSizes(){this._availableSpace>0?this._growItemSizes(this._availableSpace):this._availableSpace<0&&this._shrinkItemSizes(-this._availableSpace)}_growItemSizes(e){let t=new Bl(this);t.grow(e),this._availableSpace-=t.getGrownSize()}_shrinkItemSizes(e){let t=new Fl(this);t.shrink(e),this._availableSpace+=t.getShrunkSize()}setItemPositions(){new Ml(this).position()}createItemAligner(){return new Nl(this)}_calcLayoutInfo(){this._calcCrossAxisMaxLayoutSize()}getMainAxisMinSize(){let e=0;for(let t=this.startIndex;t<=this.endIndex;t++){let i=this.items[t];e+=i.flexItem._getMainAxisMinSizeWithPaddingAndMargin()}return e}get numberOfItems(){return this.endIndex-this.startIndex+1}get crossAxisLayoutSize(){let e=this._layout.isCrossAxisFitToContents()&&!this._layout.resizingCrossAxis;return this._layout.isWrapping()||e?this._crossAxisMaxLayoutSize:this._layout.crossAxisSize}_calcCrossAxisMaxLayoutSize(){this._crossAxisMaxLayoutSize=this._getCrossAxisMaxLayoutSize()}_getCrossAxisMaxLayoutSize(){let e=0;for(let t=this.startIndex;t<=this.endIndex;t++){let i=this.items[t];e=Math.max(e,i.flexItem._getCrossAxisLayoutSizeWithPaddingAndMargin())}return e}},jl=class{constructor(e){this._layout=e,this._mainAxisMinSize=-1,this._crossAxisMinSize=-1,this._mainAxisContentSize=0}get lines(){return this._lines}get mainAxisMinSize(){return this._mainAxisMinSize===-1&&(this._mainAxisMinSize=this._getMainAxisMinSize()),this._mainAxisMinSize}get crossAxisMinSize(){return this._crossAxisMinSize===-1&&(this._crossAxisMinSize=this._getCrossAxisMinSize()),this._crossAxisMinSize}get mainAxisContentSize(){return this._mainAxisContentSize}layoutLines(){this._setup();let e=this._layout.items,t=this._layout.isWrapping(),i=0,s,n=e.length;for(s=0;s<n;s++){let o=e[s];this._layoutFlexItem(o);let a=o.flexItem._getMainAxisLayoutSizeWithPaddingAndMargin();t&&s>i&&this._curMainAxisPos+a>this._mainAxisSize&&(this._layoutLine(i,s-1),this._curMainAxisPos=0,i=s),this._addToMainAxisPos(a)}i<s&&this._layoutLine(i,s-1)}_layoutFlexItem(e){e.isFlexEnabled()?e.flexLayout.updateTreeLayout():e.flexItem._resetLayoutSize()}_setup(){this._mainAxisSize=this._layout.mainAxisSize,this._curMainAxisPos=0,this._maxMainAxisPos=0,this._lines=[],this._mainAxisMinSize=-1,this._crossAxisMinSize=-1,this._mainAxisContentSize=0}_addToMainAxisPos(e){this._curMainAxisPos+=e,this._curMainAxisPos>this._maxMainAxisPos&&(this._maxMainAxisPos=this._curMainAxisPos)}_layoutLine(e,t){let i=this._getAvailableMainAxisLayoutSpace(),s=new zl(this._layout,e,t,i);s.performLayout(),this._lines.push(s),(this._mainAxisContentSize===0||this._curMainAxisPos>this._mainAxisContentSize)&&(this._mainAxisContentSize=this._curMainAxisPos)}_getAvailableMainAxisLayoutSpace(){return!this._layout.resizingMainAxis&&this._layout.isMainAxisFitToContents()?0:this._mainAxisSize-this._curMainAxisPos}_getCrossAxisMinSize(){let e=0,t=this._layout.items;for(let i=0,s=t.length;i<s;i++){let o=t[i].flexItem._getCrossAxisMinSizeWithPaddingAndMargin();e=Math.max(e,o)}return e}_getMainAxisMinSize(){return this._lines.length===1?this._lines[0].getMainAxisMinSize():this._layout.mainAxisSize}},Ul=class r{constructor(e){this._layout=e,this._isReverse=this._flexContainer._reverse,this._horizontalPaddingOffset=this._layout._getHorizontalPaddingOffset(),this._verticalPaddingOffset=this._layout._getVerticalPaddingOffset()}get _flexContainer(){return this._layout._flexContainer}finalize(){let e=this._layout.getParentFlexContainer();e?new r(e._layout)._finalizeItemAndChildren(this._flexContainer.item):(this._finalizeRoot(),this._finalizeItems())}_finalizeRoot(){let e=this._flexContainer.item,t=pe.getAxisLayoutPos(e,!0),i=pe.getAxisLayoutPos(e,!1),s=pe.getAxisLayoutSize(e,!0),n=pe.getAxisLayoutSize(e,!1);s+=this._layout._getHorizontalPadding(),n+=this._layout._getVerticalPadding(),e.clearRecalcFlag(),e.setLayout(t,i,s,n)}_finalizeItems(){let e=this._layout.items;for(let t=0,i=e.length;t<i;t++){let s=e[t],n=this._validateItemCache(s);this._finalizeItem(s),n||this._finalizeItemChildren(s)}}_validateItemCache(e){if(e.recalc===0&&e.isFlexEnabled()){let t=e._flex._layout;if(e.w===e.target.w&&e.h===e.target.h)return!0;{let s=t.crossAxisSize;t.performResizeMainAxis(t.mainAxisSize),t.performResizeCrossAxis(s)}}return!1}_finalizeItemAndChildren(e){this._finalizeItem(e),this._finalizeItemChildren(e)}_finalizeItem(e){this._isReverse&&this._reverseMainAxisLayoutPos(e);let t=pe.getAxisLayoutPos(e,!0),i=pe.getAxisLayoutPos(e,!1),s=pe.getAxisLayoutSize(e,!0),n=pe.getAxisLayoutSize(e,!1);t+=this._horizontalPaddingOffset,i+=this._verticalPaddingOffset,e.flex&&(s+=e._flex._layout._getHorizontalPadding(),n+=e._flex._layout._getVerticalPadding());let a=e.flexItem;a&&(t+=a._getHorizontalMarginOffset(),i+=a._getVerticalMarginOffset()),e.clearRecalcFlag(),e.setLayout(t,i,s,n)}_finalizeItemChildren(e){let t=e._flex;t&&new r(t._layout)._finalizeItems()}_reverseMainAxisLayoutPos(e){let t=e.flexItem._getMainAxisLayoutPos()+e.flexItem._getMainAxisLayoutSizeWithPaddingAndMargin(),i=this._layout.mainAxisSize-t;e.flexItem._setMainAxisLayoutPos(i)}},Hl=class{constructor(e){this._flexContainer=e,this._lineLayouter=new jl(this),this._resizingMainAxis=!1,this._resizingCrossAxis=!1,this._cachedMainAxisSizeAfterLayout=0,this._cachedCrossAxisSizeAfterLayout=0,this._shrunk=!1}get shrunk(){return this._shrunk}get recalc(){return this.item.recalc}layoutTree(){this.item.flexParent!==null?this._updateSubTreeLayout():this.updateTreeLayout(),this.updateItemCoords()}updateTreeLayout(){this.recalc?this._performUpdateLayoutTree():this._performUpdateLayoutTreeFromCache()}_performUpdateLayoutTree(){this._setInitialAxisSizes(),this._layoutAxes(),this._refreshLayoutCache()}_refreshLayoutCache(){this._cachedMainAxisSizeAfterLayout=this.mainAxisSize,this._cachedCrossAxisSizeAfterLayout=this.crossAxisSize}_performUpdateLayoutTreeFromCache(){this.item.funcW||this.item.funcH?(this.item.enableLocalRecalcFlag(),this._performUpdateLayoutTree()):(this.mainAxisSize=this._cachedMainAxisSizeAfterLayout,this.crossAxisSize=this._cachedCrossAxisSizeAfterLayout)}updateItemCoords(){new Ul(this).finalize()}_updateSubTreeLayout(){let e=this.crossAxisSize;this._layoutMainAxis(),this.performResizeCrossAxis(e)}_setInitialAxisSizes(){this.item.isFlexItemEnabled()?this.item.flexItem._resetLayoutSize():(this.mainAxisSize=this._getMainAxisBasis(),this.crossAxisSize=this._getCrossAxisBasis()),this._resizingMainAxis=!1,this._resizingCrossAxis=!1,this._shrunk=!1}_layoutAxes(){this._layoutMainAxis(),this._layoutCrossAxis()}_layoutMainAxis(){this._layoutLines(),this._fitMainAxisSizeToContents()}_layoutLines(){this._lineLayouter.layoutLines()}get _lines(){return this._lineLayouter.lines}_fitMainAxisSizeToContents(){this._resizingMainAxis||this.isMainAxisFitToContents()&&(this.mainAxisSize=this._lineLayouter.mainAxisContentSize)}_layoutCrossAxis(){let e=new Dl(this);e.init(),this._totalCrossAxisSize=e.totalCrossAxisSize,this._fitCrossAxisSizeToContents(),e.align()}_fitCrossAxisSizeToContents(){this._resizingCrossAxis||this.isCrossAxisFitToContents()&&(this.crossAxisSize=this._totalCrossAxisSize)}isWrapping(){return this._flexContainer.wrap}isAxisFitToContents(e){return this._horizontal===e?this.isMainAxisFitToContents():this.isCrossAxisFitToContents()}isMainAxisFitToContents(){return!this.isWrapping()&&!this._hasFixedMainAxisBasis()}isCrossAxisFitToContents(){return!this._hasFixedCrossAxisBasis()}_hasFixedMainAxisBasis(){return!pe.isZeroAxisSize(this.item,this._horizontal)}_hasFixedCrossAxisBasis(){return!pe.isZeroAxisSize(this.item,!this._horizontal)}getAxisMinSize(e){return this._horizontal===e?this._getMainAxisMinSize():this._getCrossAxisMinSize()}_getMainAxisMinSize(){return this._lineLayouter.mainAxisMinSize}_getCrossAxisMinSize(){return this._lineLayouter.crossAxisMinSize}resizeMainAxis(e){this.mainAxisSize!==e&&(this.recalc>0?this.performResizeMainAxis(e):this._checkValidCacheMainAxisResize()?(this.mainAxisSize=e,this._fitCrossAxisSizeToContents()):(this.item.enableLocalRecalcFlag(),this.performResizeMainAxis(e)))}_checkValidCacheMainAxisResize(e){return e===this.targetMainAxisSize||!this.isCrossAxisFitToContents()}performResizeMainAxis(e){let t=e<this.mainAxisSize;this._shrunk=t,this.mainAxisSize=e,this._resizingMainAxis=!0,this._layoutAxes(),this._resizingMainAxis=!1}resizeCrossAxis(e){this.crossAxisSize!==e&&(this.recalc>0?this.performResizeCrossAxis(e):this.crossAxisSize=e)}performResizeCrossAxis(e){this.crossAxisSize=e,this._resizingCrossAxis=!0,this._layoutCrossAxis(),this._resizingCrossAxis=!1}get targetMainAxisSize(){return this._horizontal?this.item.target.w:this.item.target.h}get targetCrossAxisSize(){return this._horizontal?this.item.target.h:this.item.target.w}getParentFlexContainer(){return this.item.isFlexItemEnabled()?this.item.flexItem.ctr:null}_getHorizontalPadding(){return pe.getTotalPadding(this.item,!0)}_getVerticalPadding(){return pe.getTotalPadding(this.item,!1)}_getHorizontalPaddingOffset(){return pe.getPaddingOffset(this.item,!0)}_getVerticalPaddingOffset(){return pe.getPaddingOffset(this.item,!1)}_getMainAxisBasis(){return pe.getRelAxisSize(this.item,this._horizontal)}_getCrossAxisBasis(){return pe.getRelAxisSize(this.item,!this._horizontal)}get _horizontal(){return this._flexContainer._horizontal}get _reverse(){return this._flexContainer._reverse}get item(){return this._flexContainer.item}get items(){return this.item.items}get resizingMainAxis(){return this._resizingMainAxis}get resizingCrossAxis(){return this._resizingCrossAxis}get numberOfItems(){return this.items.length}get mainAxisSize(){return pe.getAxisLayoutSize(this.item,this._horizontal)}get crossAxisSize(){return pe.getAxisLayoutSize(this.item,!this._horizontal)}set mainAxisSize(e){pe.setAxisLayoutSize(this.item,this._horizontal,e)}set crossAxisSize(e){pe.setAxisLayoutSize(this.item,!this._horizontal,e)}},Tr=class r{constructor(e){this._item=e,this._layout=new Hl(this),this._horizontal=!0,this._reverse=!1,this._wrap=!1,this._alignItems="stretch",this._justifyContent="flex-start",this._alignContent="flex-start",this._paddingLeft=0,this._paddingTop=0,this._paddingRight=0,this._paddingBottom=0}get item(){return this._item}_changedDimensions(){this._item.changedDimensions()}_changedContents(){this._item.changedContents()}get direction(){return(this._horizontal?"row":"column")+(this._reverse?"-reverse":"")}set direction(e){this.direction!==e&&(this._horizontal=e==="row"||e==="row-reverse",this._reverse=e==="row-reverse"||e==="column-reverse",this._changedContents())}set wrap(e){this._wrap=e,this._changedContents()}get wrap(){return this._wrap}get alignItems(){return this._alignItems}set alignItems(e){if(this._alignItems!==e){if(r.ALIGN_ITEMS.indexOf(e)===-1)throw new Error("Unknown alignItems, options: "+r.ALIGN_ITEMS.join(","));this._alignItems=e,this._changedContents()}}get alignContent(){return this._alignContent}set alignContent(e){if(this._alignContent!==e){if(r.ALIGN_CONTENT.indexOf(e)===-1)throw new Error("Unknown alignContent, options: "+r.ALIGN_CONTENT.join(","));this._alignContent=e,this._changedContents()}}get justifyContent(){return this._justifyContent}set justifyContent(e){if(this._justifyContent!==e){if(r.JUSTIFY_CONTENT.indexOf(e)===-1)throw new Error("Unknown justifyContent, options: "+r.JUSTIFY_CONTENT.join(","));this._justifyContent=e,this._changedContents()}}set padding(e){this.paddingLeft=e,this.paddingTop=e,this.paddingRight=e,this.paddingBottom=e}get padding(){return this.paddingLeft}set paddingLeft(e){this._paddingLeft=e,this._changedDimensions()}get paddingLeft(){return this._paddingLeft}set paddingTop(e){this._paddingTop=e,this._changedDimensions()}get paddingTop(){return this._paddingTop}set paddingRight(e){this._paddingRight=e,this._changedDimensions()}get paddingRight(){return this._paddingRight}set paddingBottom(e){this._paddingBottom=e,this._changedDimensions()}get paddingBottom(){return this._paddingBottom}patch(e){dt.patchObject(this,e)}};Tr.ALIGN_ITEMS=["flex-start","flex-end","center","stretch"];Tr.ALIGN_CONTENT=["flex-start","flex-end","center","space-between","space-around","space-evenly","stretch"];Tr.JUSTIFY_CONTENT=["flex-start","flex-end","center","space-between","space-around","space-evenly"];var Zn=class r{constructor(e){this._ctr=null,this._item=e,this._grow=0,this._shrink=r.SHRINK_AUTO,this._alignSelf=void 0,this._minWidth=0,this._minHeight=0,this._maxWidth=0,this._maxHeight=0,this._marginLeft=0,this._marginTop=0,this._marginRight=0,this._marginBottom=0}get item(){return this._item}get grow(){return this._grow}set grow(e){this._grow!==e&&(this._grow=parseInt(e)||0,this._changed())}get shrink(){return this._shrink===r.SHRINK_AUTO?this._getDefaultShrink():this._shrink}_getDefaultShrink(){return this.item.isFlexEnabled()?1:0}set shrink(e){this._shrink!==e&&(this._shrink=parseInt(e)||0,this._changed())}get alignSelf(){return this._alignSelf}set alignSelf(e){if(this._alignSelf!==e){if(e===void 0)this._alignSelf=void 0;else{if(Tr.ALIGN_ITEMS.indexOf(e)===-1)throw new Error("Unknown alignSelf, options: "+Tr.ALIGN_ITEMS.join(","));this._alignSelf=e}this._changed()}}get minWidth(){return this._minWidth}set minWidth(e){this._minWidth=Math.max(0,e),this._item.changedDimensions(!0,!1)}get minHeight(){return this._minHeight}set minHeight(e){this._minHeight=Math.max(0,e),this._item.changedDimensions(!1,!0)}get maxWidth(){return this._maxWidth}set maxWidth(e){this._maxWidth=Math.max(0,e),this._item.changedDimensions(!0,!1)}get maxHeight(){return this._maxHeight}set maxHeight(e){this._maxHeight=Math.max(0,e),this._item.changedDimensions(!1,!0)}set margin(e){this.marginLeft=e,this.marginTop=e,this.marginRight=e,this.marginBottom=e}get margin(){return this.marginLeft}set marginLeft(e){this._marginLeft=e,this._changed()}get marginLeft(){return this._marginLeft}set marginTop(e){this._marginTop=e,this._changed()}get marginTop(){return this._marginTop}set marginRight(e){this._marginRight=e,this._changed()}get marginRight(){return this._marginRight}set marginBottom(e){this._marginBottom=e,this._changed()}get marginBottom(){return this._marginBottom}_changed(){this.ctr&&this.ctr._changedContents()}set ctr(e){this._ctr=e}get ctr(){return this._ctr}patch(e){dt.patchObject(this,e)}_resetLayoutSize(){this._resetHorizontalAxisLayoutSize(),this._resetVerticalAxisLayoutSize()}_resetCrossAxisLayoutSize(){this.ctr._horizontal?this._resetVerticalAxisLayoutSize():this._resetHorizontalAxisLayoutSize()}_resetHorizontalAxisLayoutSize(){let e=pe.getRelAxisSize(this.item,!0);this._minWidth&&(e=Math.max(this._minWidth,e)),this._maxWidth&&(e=Math.min(this._maxWidth,e)),pe.setAxisLayoutSize(this.item,!0,e)}_resetVerticalAxisLayoutSize(){let e=pe.getRelAxisSize(this.item,!1);this._minHeight&&(e=Math.max(this._minHeight,e)),this._maxHeight&&(e=Math.min(this._maxHeight,e)),pe.setAxisLayoutSize(this.item,!1,e)}_getCrossAxisMinSizeSetting(){return this._getMinSizeSetting(!this.ctr._horizontal)}_getCrossAxisMaxSizeSetting(){return this._getMaxSizeSetting(!this.ctr._horizontal)}_getMainAxisMaxSizeSetting(){return this._getMaxSizeSetting(this.ctr._horizontal)}_getMinSizeSetting(e){return e?this._minWidth:this._minHeight}_getMaxSizeSetting(e){return e?this._maxWidth:this._maxHeight}_getMainAxisMinSize(){return pe.getAxisMinSize(this.item,this.ctr._horizontal)}_getCrossAxisMinSize(){return pe.getAxisMinSize(this.item,!this.ctr._horizontal)}_getMainAxisLayoutSize(){return pe.getAxisLayoutSize(this.item,this.ctr._horizontal)}_getMainAxisLayoutPos(){return pe.getAxisLayoutPos(this.item,this.ctr._horizontal)}_setMainAxisLayoutPos(e){return pe.setAxisLayoutPos(this.item,this.ctr._horizontal,e)}_setCrossAxisLayoutPos(e){return pe.setAxisLayoutPos(this.item,!this.ctr._horizontal,e)}_getCrossAxisLayoutSize(){return pe.getAxisLayoutSize(this.item,!this.ctr._horizontal)}_resizeCrossAxis(e){return pe.resizeAxis(this.item,!this.ctr._horizontal,e)}_resizeMainAxis(e){return pe.resizeAxis(this.item,this.ctr._horizontal,e)}_getMainAxisPadding(){return pe.getTotalPadding(this.item,this.ctr._horizontal)}_getCrossAxisPadding(){return pe.getTotalPadding(this.item,!this.ctr._horizontal)}_getMainAxisMargin(){return pe.getTotalMargin(this.item,this.ctr._horizontal)}_getCrossAxisMargin(){return pe.getTotalMargin(this.item,!this.ctr._horizontal)}_getHorizontalMarginOffset(){return pe.getMarginOffset(this.item,!0)}_getVerticalMarginOffset(){return pe.getMarginOffset(this.item,!1)}_getMainAxisMinSizeWithPaddingAndMargin(){return this._getMainAxisMinSize()+this._getMainAxisPadding()+this._getMainAxisMargin()}_getCrossAxisMinSizeWithPaddingAndMargin(){return this._getCrossAxisMinSize()+this._getCrossAxisPadding()+this._getCrossAxisMargin()}_getMainAxisLayoutSizeWithPaddingAndMargin(){return this._getMainAxisLayoutSize()+this._getMainAxisPadding()+this._getMainAxisMargin()}_getCrossAxisLayoutSizeWithPaddingAndMargin(){return this._getCrossAxisLayoutSize()+this._getCrossAxisPadding()+this._getCrossAxisMargin()}_hasFixedCrossAxisSize(){return!pe.isZeroAxisSize(this.item,!this.ctr._horizontal)}_hasRelCrossAxisSize(){return!!(this.ctr._horizontal?this.item.funcH:this.item.funcW)}};Zn.SHRINK_AUTO=-1;var Wl=class{constructor(e){this._target=e,this._recalc=0,this._enabled=!1,this.x=0,this.y=0,this.w=0,this.h=0,this._originalX=0,this._originalY=0,this._originalWidth=0,this._originalHeight=0,this._flex=null,this._flexItem=null,this._flexItemDisabled=!1,this._items=null}get flexLayout(){return this.flex?this.flex._layout:null}layoutFlexTree(){this.isFlexEnabled()&&this.isChanged()&&this.flexLayout.layoutTree()}get target(){return this._target}get flex(){return this._flex}set flex(e){e?(this.isFlexEnabled()||this._enableFlex(),this._flex.patch(e)):this.isFlexEnabled()&&this._disableFlex()}get flexItem(){return this._flexItemDisabled?!1:(this._ensureFlexItem(),this._flexItem)}set flexItem(e){if(e===!1){if(!this._flexItemDisabled){let t=this.flexParent;this._flexItemDisabled=!0,this._checkEnabled(),t&&(t._clearFlexItemsCache(),t.changedContents())}}else if(this._ensureFlexItem(),this._flexItem.patch(e),this._flexItemDisabled){this._flexItemDisabled=!1,this._checkEnabled();let t=this.flexParent;t&&(t._clearFlexItemsCache(),t.changedContents())}}_enableFlex(){this._flex=new Tr(this),this._checkEnabled(),this.changedDimensions(),this._enableChildrenAsFlexItems()}_disableFlex(){this.changedDimensions(),this._flex=null,this._checkEnabled(),this._disableChildrenAsFlexItems()}_enableChildrenAsFlexItems(){let e=this._target._children;if(e)for(let t=0,i=e.length;t<i;t++)e[t].layout._enableFlexItem()}_disableChildrenAsFlexItems(){let e=this._target._children;if(e)for(let t=0,i=e.length;t<i;t++)e[t].layout._disableFlexItem()}_enableFlexItem(){this._ensureFlexItem();let e=this._target._parent._layout;this._flexItem.ctr=e._flex,e.changedContents(),this._checkEnabled()}_disableFlexItem(){this._flexItem&&(this._flexItem.ctr=null),this._checkEnabled(),this._resetOffsets()}_resetOffsets(){this.x=0,this.y=0}_ensureFlexItem(){this._flexItem||(this._flexItem=new Zn(this))}_checkEnabled(){let e=this.isEnabled();this._enabled!==e&&(e?this._enable():this._disable(),this._enabled=e)}_enable(){this._setupTargetForFlex(),this._target.enableFlexLayout()}_disable(){this._restoreTargetToNonFlex(),this._target.disableFlexLayout()}isEnabled(){return this.isFlexEnabled()||this.isFlexItemEnabled()}isFlexEnabled(){return this._flex!==null}isFlexItemEnabled(){return this.flexParent!==null}_restoreTargetToNonFlex(){let e=this._target;e.x=this._originalX,e.y=this._originalY,e.setDimensions(this._originalWidth,this._originalHeight)}_setupTargetForFlex(){let e=this._target;this._originalX=e._x,this._originalY=e._y,this._originalWidth=e._w,this._originalHeight=e._h}setParent(e,t){e&&e.isFlexContainer()&&e._layout._changedChildren(),t&&t.isFlexContainer()&&(this._enableFlexItem(),t._layout._changedChildren()),this._checkEnabled()}get flexParent(){if(this._flexItemDisabled)return null;let e=this._target._parent;return e&&e.isFlexContainer()?e._layout:null}setVisible(e){let t=this.flexParent;t&&t._changedChildren()}get items(){return this._items||(this._items=this._getFlexItems()),this._items}_getFlexItems(){let e=[],t=this._target._children;if(t)for(let i=0,s=t.length;i<s;i++){let n=t[i];n.visible&&n.isFlexItem()&&e.push(n.layout)}return e}_changedChildren(){this._clearFlexItemsCache(),this.changedContents()}_clearFlexItemsCache(){this._items=null}setLayout(e,t,i,s){let n=this._originalX,o=this._originalY;this.funcX&&(n=this.funcX(pe.getParentAxisSizeWithPadding(this,!0))),this.funcY&&(o=this.funcY(pe.getParentAxisSizeWithPadding(this,!1))),this.isFlexItemEnabled()?this.target.setLayout(e+n,t+o,i,s):this.target.setLayout(n,o,i,s)}changedDimensions(e=!0,t=!0){this._updateRecalc(e,t)}changedContents(){this._updateRecalc()}forceLayout(){this._updateRecalc()}isChanged(){return this._recalc>0}_updateRecalc(e=!1,t=!1){if(this.isFlexEnabled()){let n=this._flex._layout;e=e||n.isAxisFitToContents(!0),t=t||n.isAxisFitToContents(!1)}let i=1+(e?2:0)+(t?4:0),s=this.getNewRecalcFlags(i);this._recalc|=i,s>1?this.flexParent?this.flexParent._updateRecalcBottomUp(i):this._target.triggerLayout():this._target.triggerLayout()}getNewRecalcFlags(e){return 7-this._recalc&e}_updateRecalcBottomUp(e){let t=this._getRecalcFromChangedChildRecalc(e),i=this.getNewRecalcFlags(t);if(this._recalc|=t,i>1){let s=this.flexParent;s?s._updateRecalcBottomUp(t):this._target.triggerLayout()}else this._target.triggerLayout()}_getRecalcFromChangedChildRecalc(e){let t=this._flex._layout,i=t._horizontal?1:2,s=t._horizontal?2:1;e&s||e&i&&t.isWrapping()&&t.isCrossAxisFitToContents()&&(e+=s);let o=t.isAxisFitToContents(!0),a=t.isAxisFitToContents(!1);t.shrunk&&(t._horizontal?o=!0:a=!0);let l=1+(o?2:0)+(a?4:0);return e&l}get recalc(){return this._recalc}clearRecalcFlag(){this._recalc=0}enableLocalRecalcFlag(){this._recalc=1}get originalX(){return this._originalX}setOriginalXWithoutUpdatingLayout(e){this._originalX=e}get originalY(){return this._originalY}setOriginalYWithoutUpdatingLayout(e){this._originalY=e}get originalWidth(){return this._originalWidth}set originalWidth(e){this._originalWidth!==e&&(this._originalWidth=e,this.changedDimensions(!0,!1))}get originalHeight(){return this._originalHeight}set originalHeight(e){this._originalHeight!==e&&(this._originalHeight=e,this.changedDimensions(!1,!0))}get funcX(){return this._target.funcX}get funcY(){return this._target.funcY}get funcW(){return this._target.funcW}get funcH(){return this._target.funcH}},mi=class r{constructor(e,t=null){this.id=r.id++,this.manager=e,this.stage=e.stage,this.textures=new Set,this._activeTextureCount=0,this.loader=t,this.lookupId=null,this._cancelCb=null,this.loadingSince=0,this.w=0,this.h=0,this._nativeTexture=null,this.permanent=!1,this.renderInfo=null,this._isResultTexture=!this.loader,this._loadError=null,this._imageRef=null,this._hasAlpha=!1}get hasAlpha(){return this._hasAlpha}get loadError(){return this._loadError}addTexture(e){this.textures.has(e)||this.textures.add(e)}removeTexture(e){this.textures.delete(e)}incActiveTextureCount(){this._activeTextureCount++,this._activeTextureCount===1&&this.becomesUsed()}decActiveTextureCount(){this._activeTextureCount--,this._activeTextureCount===0&&this.becomesUnused()}get isResultTexture(){return this._isResultTexture}set isResultTexture(e){this._isResultTexture=e}forEachEnabledElement(e){this.textures.forEach(t=>{t.elements.forEach(e)})}hasEnabledElements(){return this.textures.size>0}forEachActiveElement(e){this.textures.forEach(t=>{t.elements.forEach(i=>{i.active&&e(i)})})}getRenderWidth(){return this.w}getRenderHeight(){return this.h}allowCleanup(){return!this.permanent&&!this.isUsed()}becomesUsed(){this.load()}becomesUnused(){this.cancel()}cancel(){this.isLoading()&&(this._cancelCb&&(this._cancelCb(this),this._cancelCb=null),this.loadingSince=0)}isLoaded(){return!!this._nativeTexture}isLoading(){return this.loadingSince>0}isError(){return!!this._loadError}reload(){this.free(),this.isUsed()&&this.load()}load(e=!1){this.isResultTexture||!this._nativeTexture&&!this.isLoading()&&(this.loadingSince=new Date().getTime(),this._cancelCb=this.loader((t,i)=>{if(this.isLoading()){if(this._cancelCb=null,this.manager.stage.destroyed)return;if(t)this.onError(t);else if(i&&i.source)if(!this.stage.isUpdatingFrame()&&!e&&i.throttle!==!1){let s=this.stage.textureThrottler;this._cancelCb=s.genericCancelCb,s.add(this,i)}else this.processLoadedSource(i)}},this))}processLoadedSource(e){this.loadingSince=0,this.setSource(e)}setSource(e){let t=e.source;this._hasAlpha=e&&e.hasAlpha||!1,this.w=t.width||e&&e.w||0,this.h=t.height||e&&e.h||0,e&&e.renderInfo&&(this.renderInfo=e.renderInfo),this.permanent=!!e.permanent,e&&e.imageRef&&(this._imageRef=e.imageRef),e&&e.flipTextureY?this._flipTextureY=e.flipTextureY:this._flipTextureY=!1,this._isNativeTexture(t)?(this._nativeTexture=t,this.w=this.w||t.w,this.h=this.h||t.h,this.permanent=e.hasOwnProperty("permanent")?e.permanent:!0):this.manager.uploadTextureSource(this,e),this._loadError=null,this.onLoad()}isUsed(){return this._activeTextureCount>0}onLoad(){this.isUsed()&&this.textures.forEach(e=>{e.onLoad()})}forceRenderUpdate(){this._nativeTexture&&(this._nativeTexture.update=this.stage.frameCounter),this.forEachActiveElement(function(e){e.forceRenderUpdate()})}forceUpdateRenderCoords(){this.forEachActiveElement(function(e){e._updateTextureCoords()})}get nativeTexture(){return this._nativeTexture}clearNativeTexture(){this._nativeTexture=null,this._imageRef=null}replaceNativeTexture(e,t,i){let s=this._nativeTexture;this._nativeTexture=e,this.w=t,this.h=i,!s&&this._nativeTexture&&this.forEachActiveElement(n=>n.onTextureSourceLoaded()),this._nativeTexture||this.forEachActiveElement(n=>n._setDisplayedTexture(null)),this.forEachEnabledElement(n=>n._updateDimensions())}onError(e){this._loadError=e,this.loadingSince=0,console.error("[Lightning] texture load error",e,this.lookupId),this.forEachActiveElement(t=>t.onTextureSourceLoadError(e))}free(){this.isLoaded()&&this.manager.freeTextureSource(this)}_isNativeTexture(e){return K.isNode?e.constructor.name==="WebGLTexture":"WebGLTexture"in window?e instanceof WebGLTexture:!1}};mi.prototype.isTextureSource=!0;mi.id=1;var eo=class{constructor(e){this._element=e.element,this._core=e,this.ctx=this._core.ctx,this._enabled=!1,this.lazy=!1,this._colorize=!1,this._renderTexture=null,this._renderTextureReused=!1,this._resultTextureSource=null,this._renderOffscreen=!1,this.empty=!1}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._core.updateRenderToTextureEnabled()}get renderOffscreen(){return this._renderOffscreen}set renderOffscreen(e){this._renderOffscreen=e,this._core.setHasRenderUpdates(1),this._core._setRecalc(6)}get colorize(){return this._colorize}set colorize(e){this._colorize!==e&&(this._colorize=e,this._core.setHasRenderUpdates(1))}_getTextureSource(){return this._resultTextureSource||(this._resultTextureSource=new mi(this._element.stage.textureManager),this.updateResultTexture()),this._resultTextureSource}hasResultTexture(){return!!this._resultTextureSource}resultTextureInUse(){return this._resultTextureSource&&this._resultTextureSource.hasEnabledElements()}updateResultTexture(){let e=this.getResultTexture();if(this._resultTextureSource){if(this._resultTextureSource.nativeTexture!==e){let t=e?e.w:0,i=e?e.h:0;this._resultTextureSource.replaceNativeTexture(e,t,i)}this._resultTextureSource.forEachEnabledElement(t=>{t._updateDimensions(),t.core.setHasRenderUpdates(3)})}}mustRenderToTexture(){return this._enabled&&!this.lazy?!0:!!(this._enabled&&this.lazy&&this._core._hasRenderUpdates<3)}deactivate(){this.release()}get renderTextureReused(){return this._renderTextureReused}release(){this.releaseRenderTexture()}releaseRenderTexture(){this._renderTexture&&(this._renderTextureReused||this.ctx.releaseRenderTexture(this._renderTexture),this._renderTexture=null,this._renderTextureReused=!1,this.updateResultTexture())}reuseTextureAsRenderTexture(e){this._renderTexture!==e&&(this.releaseRenderTexture(),this._renderTexture=e,this._renderTextureReused=!0)}hasRenderTexture(){return!!this._renderTexture}getRenderTexture(){return this._renderTexture||(this._renderTexture=this.ctx.allocateRenderTexture(this._core._w,this._core._h),this._renderTextureReused=!1),this._renderTexture}getResultTexture(){return this._renderTexture}},ds=class r{constructor(e){this._element=e,this.ctx=e.stage.ctx,this._recalc=0,this._parent=null,this._onUpdate=null,this._pRecalc=0,this._worldContext=new sr,this._hasUpdates=!1,this._localAlpha=1,this._onAfterCalcs=null,this._onAfterUpdate=null,this._localPx=0,this._localPy=0,this._localTa=1,this._localTb=0,this._localTc=0,this._localTd=1,this._isComplex=!1,this._dimsUnknown=!1,this._clipping=!1,this._zSort=!1,this._outOfBounds=0,this._displayedTextureSource=null,this._zContextUsage=0,this._children=null,this._hasRenderUpdates=0,this._zIndexedChildren=null,this._renderContext=this._worldContext,this.renderState=this.ctx.renderState,this._scissor=null,this._shaderOwner=null,this._updateTreeOrder=0,this._colorUl=this._colorUr=this._colorBl=this._colorBr=4294967295,this._x=0,this._y=0,this._w=0,this._h=0,this._optFlags=0,this._funcX=null,this._funcY=null,this._funcW=null,this._funcH=null,this._scaleX=1,this._scaleY=1,this._pivotX=.5,this._pivotY=.5,this._mountX=0,this._mountY=0,this._rotation=0,this._alpha=1,this._visible=!0,this._ulx=0,this._uly=0,this._brx=1,this._bry=1,this._zIndex=0,this._forceZIndexContext=!1,this._zParent=null,this._isRoot=!1,this._zIndexResort=!1,this._shader=null,this._renderToTextureEnabled=!1,this._texturizer=null,this._useRenderToTexture=!1,this._boundsMargin=null,this._recBoundsMargin=null,this._withinBoundsMargin=!1,this._viewport=null,this._clipbox=!0,this.render=this._renderSimple,this._layout=null}get offsetX(){return this._funcX?this._funcX:this.hasFlexLayout()?this._layout.originalX:this._x}set offsetX(e){K.isFunction(e)?this.funcX=e:(this._disableFuncX(),this.hasFlexLayout()?(this.x+=e-this._layout.originalX,this._layout.setOriginalXWithoutUpdatingLayout(e)):this.x=e)}get x(){return this._x}set x(e){e!==this._x&&(this._updateLocalTranslateDelta(e-this._x,0),this._x=e)}get funcX(){return this._optFlags&1?this._funcX:null}set funcX(e){this._funcX!==e&&(this._optFlags|=1,this._funcX=e,this.hasFlexLayout()?(this._layout.setOriginalXWithoutUpdatingLayout(0),this.layout.forceLayout()):(this._x=0,this._triggerRecalcTranslate()))}_disableFuncX(){this._optFlags=this._optFlags&65534,this._funcX=null}get offsetY(){return this._funcY?this._funcY:this.hasFlexLayout()?this._layout.originalY:this._y}set offsetY(e){K.isFunction(e)?this.funcY=e:(this._disableFuncY(),this.hasFlexLayout()?(this.y+=e-this._layout.originalY,this._layout.setOriginalYWithoutUpdatingLayout(e)):this.y=e)}get y(){return this._y}set y(e){e!==this._y&&(this._updateLocalTranslateDelta(0,e-this._y),this._y=e)}get funcY(){return this._optFlags&2?this._funcY:null}set funcY(e){this._funcY!==e&&(this._optFlags|=2,this._funcY=e,this.hasFlexLayout()?(this._layout.setOriginalYWithoutUpdatingLayout(0),this.layout.forceLayout()):(this._y=0,this._triggerRecalcTranslate()))}_disableFuncY(){this._optFlags=this._optFlags&65533,this._funcY=null}get funcW(){return this._optFlags&4?this._funcW:null}set funcW(e){this._funcW!==e&&(this._optFlags|=4,this._funcW=e,this.hasFlexLayout()?(this._layout._originalWidth=0,this.layout.changedDimensions(!0,!1)):(this._w=0,this._triggerRecalcTranslate()))}disableFuncW(){this._optFlags=this._optFlags&65531,this._funcW=null}get funcH(){return this._optFlags&8?this._funcH:null}set funcH(e){this._funcH!==e&&(this._optFlags|=8,this._funcH=e,this.hasFlexLayout()?(this._layout._originalHeight=0,this.layout.changedDimensions(!1,!0)):(this._h=0,this._triggerRecalcTranslate()))}disableFuncH(){this._optFlags=this._optFlags&65527,this._funcH=null}get w(){return this._w}getRenderWidth(){return this.hasFlexLayout()?this._layout.originalWidth:this._w}get h(){return this._h}getRenderHeight(){return this.hasFlexLayout()?this._layout.originalHeight:this._h}get scaleX(){return this._scaleX}set scaleX(e){this._scaleX!==e&&(this._scaleX=e,this._updateLocalTransform())}get scaleY(){return this._scaleY}set scaleY(e){this._scaleY!==e&&(this._scaleY=e,this._updateLocalTransform())}get scale(){return this.scaleX}set scale(e){(this._scaleX!==e||this._scaleY!==e)&&(this._scaleX=e,this._scaleY=e,this._updateLocalTransform())}get pivotX(){return this._pivotX}set pivotX(e){this._pivotX!==e&&(this._pivotX=e,this._updateLocalTranslate())}get pivotY(){return this._pivotY}set pivotY(e){this._pivotY!==e&&(this._pivotY=e,this._updateLocalTranslate())}get pivot(){return this._pivotX}set pivot(e){(this._pivotX!==e||this._pivotY!==e)&&(this._pivotX=e,this._pivotY=e,this._updateLocalTranslate())}get mountX(){return this._mountX}set mountX(e){this._mountX!==e&&(this._mountX=e,this._updateLocalTranslate())}get mountY(){return this._mountY}set mountY(e){this._mountY!==e&&(this._mountY=e,this._updateLocalTranslate())}get mount(){return this._mountX}set mount(e){(this._mountX!==e||this._mountY!==e)&&(this._mountX=e,this._mountY=e,this._updateLocalTranslate())}get rotation(){return this._rotation}set rotation(e){this._rotation!==e&&(this._rotation=e,this._updateLocalTransform())}get alpha(){return this._alpha}set alpha(e){if(e=e>1?1:e<1e-14?0:e,this._alpha!==e){let t=this._alpha;this._alpha=e,this._updateLocalAlpha(),t===0!=(e===0)&&this._element._updateEnabledFlag()}}get visible(){return this._visible}set visible(e){this._visible!==e&&(this._visible=e,this._updateLocalAlpha(),this._element._updateEnabledFlag(),this.hasFlexLayout()&&this.layout.setVisible(e))}_updateLocalTransform(){if(this._rotation!==0&&this._rotation%(2*Math.PI)){let e=Math.sin(this._rotation),t=Math.cos(this._rotation);this._setLocalTransform(t*this._scaleX,-e*this._scaleY,e*this._scaleX,t*this._scaleY)}else this._setLocalTransform(this._scaleX,0,0,this._scaleY);this._updateLocalTranslate()}_updateLocalTranslate(){this._recalcLocalTranslate(),this._triggerRecalcTranslate()}_recalcLocalTranslate(){let e=this._pivotX*this._w,t=this._pivotY*this._h,i=this._x-(e*this._localTa+t*this._localTb)+e,s=this._y-(e*this._localTc+t*this._localTd)+t;i-=this._mountX*this._w,s-=this._mountY*this._h,this._localPx=i,this._localPy=s}_updateLocalTranslateDelta(e,t){this._addLocalTranslate(e,t)}_updateLocalAlpha(){this._setLocalAlpha(this._visible?this._alpha:0)}setHasRenderUpdates(e){if(this._worldContext.alpha){let t=this;for(t._hasRenderUpdates=Math.max(e,t._hasRenderUpdates);(t=t._parent)&&t._hasRenderUpdates!==3;)t._hasRenderUpdates=3}}_setRecalc(e){this._recalc|=e,this._setHasUpdates(),this._parent&&this._parent.setHasRenderUpdates(3)}_setHasUpdates(){let e=this;for(;e&&!e._hasUpdates;)e._hasUpdates=!0,e=e._parent}getParent(){return this._parent}setParent(e){if(e!==this._parent){let t=this.isZContext(),i=this._parent;if(this._parent=e,(this._layout||e&&e.isFlexContainer())&&this.layout.setParent(i,e),i&&i.setHasRenderUpdates(3),this._setRecalc(7),this._parent&&this._parent._setHasUpdates(),this._zIndex===0?this.setZParent(e):this.setZParent(e?e.findZContext():null),t!==this.isZContext()&&(this.isZContext()?this.enableZContext(i.findZContext()):this.disableZContext()),this._zIndexResort=!0,this._zParent&&this._zParent.enableZSort(),!this._shader){let s=e&&!e._renderToTextureEnabled?e._shaderOwner:null;s!==this._shaderOwner&&(this.setHasRenderUpdates(1),this._setShaderOwnerRecursive(s))}}}enableZSort(e=!1){!this._zSort&&this._zContextUsage>0&&(this._zSort=!0,e&&this.ctx.forceZSort(this))}addChildAt(e,t){this._children||(this._children=[]),this._children.splice(e,0,t),t.setParent(this)}setChildAt(e,t){this._children||(this._children=[]),this._children[e].setParent(null),this._children[e]=t,t.setParent(this)}removeChildAt(e){let t=this._children[e];this._children.splice(e,1),t.setParent(null)}removeChildren(){if(this._children){for(let e=0,t=this._children.length;e<t;e++)this._children[e].setParent(null);this._children.splice(0),this._zIndexedChildren&&this._zIndexedChildren.splice(0)}}syncChildren(e,t,i){this._children=i;for(let s=0,n=e.length;s<n;s++)e[s].setParent(null);for(let s=0,n=t.length;s<n;s++)t[s].setParent(this)}moveChild(e,t){let i=this._children[e];this._children.splice(e,1),this._children.splice(t,0,i),this._zIndexResort=!0,this._zParent&&this._zParent.enableZSort()}_setLocalTransform(e,t,i,s){this._setRecalc(4),this._localTa=e,this._localTb=t,this._localTc=i,this._localTd=s,this._isComplex=t!==0||i!==0||e<0||s<0}_addLocalTranslate(e,t){this._localPx+=e,this._localPy+=t,this._triggerRecalcTranslate()}_setLocalAlpha(e){!this._worldContext.alpha&&this._parent&&this._parent._worldContext.alpha&&e?this._setRecalc(129):this._setRecalc(1),e<1e-14&&(e=0),this._localAlpha=e}setDimensions(e,t,i=this._dimsUnknown){if(this._dimsUnknown=i,this.hasFlexLayout())this._layout.originalWidth=e,this._layout.originalHeight=t;else if(this._w!==e||this._h!==t)return this._updateDimensions(e,t),!0;return!1}_updateDimensions(e,t){(this._w!==e||this._h!==t)&&(this._w=e,this._h=t,this._triggerRecalcTranslate(),this._texturizer&&(this._texturizer.releaseRenderTexture(),this._texturizer.updateResultTexture()),this._updateLocalTranslate())}setTextureCoords(e,t,i,s){this.setHasRenderUpdates(3),this._ulx=e,this._uly=t,this._brx=i,this._bry=s}get displayedTextureSource(){return this._displayedTextureSource}setDisplayedTextureSource(e){this.setHasRenderUpdates(3),this._displayedTextureSource=e}get isRoot(){return this._isRoot}setAsRoot(){this._parent=new r(this._element),this._parent._hasRenderUpdates=3,this._parent._hasUpdates=!0,this._isRoot=!0,this.ctx.root=this,this._parent._viewport=[0,0,this.ctx.stage.coordsWidth,this.ctx.stage.coordsHeight],this._parent._scissor=this._parent._viewport,this._parent._recBoundsMargin=null,this._setRecalc(7)}isAncestorOf(e){let t=e;for(;t=t._parent;)if(this===t)return!0;return!1}isZContext(){return this._forceZIndexContext||this._renderToTextureEnabled||this._zIndex!==0||this._isRoot||!this._parent}findZContext(){return this.isZContext()?this:this._parent.findZContext()}setZParent(e){if(this._zParent!==e){if(this._zParent!==null&&(this._zIndex!==0&&this._zParent.decZContextUsage(),this._zParent.enableZSort()),e!==null){let t=e._zContextUsage>0;this._zIndex!==0&&e.incZContextUsage(),e._zContextUsage>0&&(!t&&this._parent===e||e._zIndexedChildren.push(this),e.enableZSort())}this._zParent=e,this._zIndexResort=!0}}incZContextUsage(){if(this._zContextUsage++,this._zContextUsage===1&&(this._zIndexedChildren||(this._zIndexedChildren=[]),this._children)){for(let e=0,t=this._children.length;e<t;e++)this._zIndexedChildren.push(this._children[e]);this._zSort=!1}}decZContextUsage(){this._zContextUsage--,this._zContextUsage===0&&(this._zSort=!1,this._zIndexedChildren.splice(0))}get zIndex(){return this._zIndex}set zIndex(e){if(this._zIndex!==e){this.setHasRenderUpdates(1);let t=this._zParent,i=this.isZContext();e===0&&this._zIndex!==0?this._parent===this._zParent?this._zParent&&this._zParent.decZContextUsage():t=this._parent:e!==0&&this._zIndex===0?(t=this._parent?this._parent.findZContext():null,t===this._zParent&&this._zParent&&(this._zParent.incZContextUsage(),this._zParent.enableZSort())):e!==this._zIndex&&this._zParent&&this._zParent._zContextUsage&&this._zParent.enableZSort(),t!==this._zParent&&this.setZParent(null),this._zIndex=e,t!==this._zParent&&this.setZParent(t),i!==this.isZContext()&&(this.isZContext()?this.enableZContext(this._parent.findZContext()):this.disableZContext()),this._zIndexResort=!0,this._zParent&&this._zParent.enableZSort()}}get forceZIndexContext(){return this._forceZIndexContext}set forceZIndexContext(e){this.setHasRenderUpdates(1);let t=this.isZContext();this._forceZIndexContext=e,t!==this.isZContext()&&(this.isZContext()?this.enableZContext(this._parent.findZContext()):this.disableZContext())}enableZContext(e){e&&e._zContextUsage>0&&this._getZIndexedDescs().forEach(i=>{this.isAncestorOf(i)&&i._zIndex!==0&&i.setZParent(this)})}_getZIndexedDescs(){let e=[];if(this._children)for(let t=0,i=this._children.length;t<i;t++)this._children[t]._getZIndexedDescsRec(e);return e}_getZIndexedDescsRec(e){if(this._zIndex)e.push(this);else if(this._children&&!this.isZContext())for(let t=0,i=this._children.length;t<i;t++)this._children[t]._getZIndexedDescsRec(e)}disableZContext(){if(this._zContextUsage>0){let e=this._parent.findZContext();this._zSort&&this.sortZIndexedChildren(),this._zIndexedChildren.slice().forEach(function(t){t._zIndex!==0&&t.setZParent(e)})}}get colorUl(){return this._colorUl}set colorUl(e){this._colorUl!==e&&(this.setHasRenderUpdates(this._displayedTextureSource?3:1),this._colorUl=e)}get colorUr(){return this._colorUr}set colorUr(e){this._colorUr!==e&&(this.setHasRenderUpdates(this._displayedTextureSource?3:1),this._colorUr=e)}get colorBl(){return this._colorBl}set colorBl(e){this._colorBl!==e&&(this.setHasRenderUpdates(this._displayedTextureSource?3:1),this._colorBl=e)}get colorBr(){return this._colorBr}set colorBr(e){this._colorBr!==e&&(this.setHasRenderUpdates(this._displayedTextureSource?3:1),this._colorBr=e)}set onUpdate(e){this._onUpdate=e,this._setRecalc(7)}set onAfterUpdate(e){this._onAfterUpdate=e,this._setRecalc(7)}set onAfterCalcs(e){this._onAfterCalcs=e,this._setRecalc(7)}get shader(){return this._shader}set shader(e){this.setHasRenderUpdates(1);let t=this._shader;if(this._shader=e,!e&&t){let i=this._parent&&!this._parent._renderToTextureEnabled?this._parent._shaderOwner:null;this._setShaderOwnerRecursive(i)}else e&&this._setShaderOwnerRecursive(this)}get activeShader(){return this._shaderOwner?this._shaderOwner.shader:this.renderState.defaultShader}get activeShaderOwner(){return this._shaderOwner}get clipping(){return this._clipping}set clipping(e){this._clipping!==e&&(this._clipping=e,this._setRecalc(3))}get clipbox(){return this._clipbox}set clipbox(e){this._clipbox=e}_setShaderOwnerRecursive(e){if(this._shaderOwner=e,this._children&&!this._renderToTextureEnabled)for(let t=0,i=this._children.length;t<i;t++){let s=this._children[t];s._shader||(s._setShaderOwnerRecursive(e),s._hasRenderUpdates=3)}}_setShaderOwnerChildrenRecursive(e){if(this._children)for(let t=0,i=this._children.length;t<i;t++){let s=this._children[t];s._shader||(s._setShaderOwnerRecursive(e),s._hasRenderUpdates=3)}}_hasRenderContext(){return this._renderContext!==this._worldContext}get renderContext(){return this._renderContext}updateRenderToTextureEnabled(){this.texturizer._enabled?this._enableRenderToTexture():(this._disableRenderToTexture(),this._texturizer.releaseRenderTexture())}_enableRenderToTexture(){if(!this._renderToTextureEnabled){let e=this.isZContext();this._renderToTextureEnabled=!0,this._renderContext=new sr,this._setShaderOwnerChildrenRecursive(null),e||this.enableZContext(this._parent?this._parent.findZContext():null),this.setHasRenderUpdates(3),this._setRecalc(7),this.render=this._renderAdvanced}}_disableRenderToTexture(){this._renderToTextureEnabled&&(this._renderToTextureEnabled=!1,this._setShaderOwnerChildrenRecursive(this._shaderOwner),this._renderContext=this._worldContext,this.isZContext()||this.disableZContext(),this._setRecalc(7),this.setHasRenderUpdates(3),this.render=this._renderSimple)}isWhite(){return this._colorUl===4294967295&&this._colorUr===4294967295&&this._colorBl===4294967295&&this._colorBr===4294967295}hasSimpleTexCoords(){return this._ulx===0&&this._uly===0&&this._brx===1&&this._bry===1}_stashTexCoords(){this._stashedTexCoords=[this._ulx,this._uly,this._brx,this._bry],this._ulx=0,this._uly=0,this._brx=1,this._bry=1}_unstashTexCoords(){this._ulx=this._stashedTexCoords[0],this._uly=this._stashedTexCoords[1],this._brx=this._stashedTexCoords[2],this._bry=this._stashedTexCoords[3],this._stashedTexCoords=null}_stashColors(){this._stashedColors=[this._colorUl,this._colorUr,this._colorBr,this._colorBl],this._colorUl=4294967295,this._colorUr=4294967295,this._colorBr=4294967295,this._colorBl=4294967295}_unstashColors(){this._colorUl=this._stashedColors[0],this._colorUr=this._stashedColors[1],this._colorBr=this._stashedColors[2],this._colorBl=this._stashedColors[3],this._stashedColors=null}isVisible(){return this._localAlpha>1e-14}get outOfBounds(){return this._outOfBounds}set boundsMargin(e){this._boundsMargin=e?e.slice():null,this._triggerRecalcTranslate()}get boundsMargin(){return this._boundsMargin}update(){this._recalc|=this._parent._pRecalc,this._layout&&this._layout.isEnabled()?this._recalc&256&&this._layout.layoutFlexTree():this._recalc&2&&this._optFlags&&this._applyRelativeDimFuncs(),this._onUpdate&&(this._hasUpdates=!0,this._onUpdate(this.element,this));let e=this._parent._worldContext,t=this._worldContext,i=e.alpha&&this._localAlpha;if(this._hasUpdates||this._recalc&&i||t.alpha&&!i){let s=this._recalc;s&1&&(!t.alpha&&i&&(this._hasRenderUpdates=3),t.alpha=e.alpha*this._localAlpha,t.alpha<1e-14&&(t.alpha=0)),s&6&&(t.px=e.px+this._localPx*e.ta,t.py=e.py+this._localPy*e.td,e.tb!==0&&(t.px+=this._localPy*e.tb),e.tc!==0&&(t.py+=this._localPx*e.tc)),s&4&&(t.ta=this._localTa*e.ta,t.tb=this._localTd*e.tb,t.tc=this._localTa*e.tc,t.td=this._localTd*e.td,this._isComplex&&(t.ta+=this._localTc*e.tb,t.tb+=this._localTb*e.ta,t.tc+=this._localTc*e.td,t.td+=this._localTb*e.tc));let n=this._parent._renderContext;if(this._parent._hasRenderContext()){let C=this._renderContext===this._worldContext;C&&(this._renderContext=new sr);let A=this._renderContext;(C||s&1)&&(A.alpha=n.alpha*this._localAlpha,A.alpha<1e-14&&(A.alpha=0)),(C||s&6)&&(A.px=n.px+this._localPx*n.ta,A.py=n.py+this._localPy*n.td,n.tb!==0&&(A.px+=this._localPy*n.tb),n.tc!==0&&(A.py+=this._localPx*n.tc)),C&&(s|=2),(C||s&4)&&(A.ta=this._localTa*n.ta,A.tb=this._localTd*n.tb,A.tc=this._localTa*n.tc,A.td=this._localTd*n.td,this._isComplex&&(A.ta+=this._localTc*n.tb,A.tb+=this._localTb*n.ta,A.tc+=this._localTc*n.td,A.td+=this._localTb*n.tc))}else this._renderContext=this._worldContext;this.ctx.updateTreeOrder===-1?this.ctx.updateTreeOrder=this._updateTreeOrder+1:this._updateTreeOrder=this.ctx.updateTreeOrder++;let o=this._renderToTextureEnabled&&this._texturizer.mustRenderToTexture();this._useRenderToTexture!==o&&(this._recalc|=6,s|=2,this._useRenderToTexture||this._texturizer.release()),this._useRenderToTexture=o;let a=this._renderContext,l=this._dimsUnknown?2048:this._w,u=this._dimsUnknown?2048:this._h,c,g,m,y,b=a.tb!==0||a.tc!==0||a.ta<0||a.td<0;if(b?(c=Math.min(0,l*a.ta,l*a.ta+u*a.tb,u*a.tb)+a.px,m=Math.max(0,l*a.ta,l*a.ta+u*a.tb,u*a.tb)+a.px,g=Math.min(0,l*a.tc,l*a.tc+u*a.td,u*a.td)+a.py,y=Math.max(0,l*a.tc,l*a.tc+u*a.td,u*a.td)+a.py):(c=a.px,m=a.px+a.ta*l,g=a.py,y=a.py+a.td*u),this._dimsUnknown&&(b||this._localTa<1||this._localTb<1)){let C=this._x*n.ta+this._y*n.tb+n.px,A=this._x*n.tc+this._y*n.td+n.py;C<c&&(c=C),A<g&&(g=A),C>m&&(m=C),A>y&&(y=A)}if(s&6||!this._scissor)if(this._clipping&&a.isSquare()){let C=this._parent._useRenderToTexture?this._parent._viewport:this._parent._scissor;if(C){let A=Math.max(C[0],c),T=Math.max(C[1],g);this._scissor=[A,T,Math.min(C[2]+C[0],m)-A,Math.min(C[3]+C[1],y)-T]}else this._scissor=[c,g,m-c,y-g]}else this._scissor=this._parent._useRenderToTexture?this._parent._viewport:this._parent._scissor;if(this._boundsMargin?this._recBoundsMargin=this._boundsMargin:this._recBoundsMargin=this._parent._recBoundsMargin,this._onAfterCalcs&&this._onAfterCalcs(this.element)&&(b?(c=Math.min(0,l*a.ta,l*a.ta+u*a.tb,u*a.tb)+a.px,m=Math.max(0,l*a.ta,l*a.ta+u*a.tb,u*a.tb)+a.px,g=Math.min(0,l*a.tc,l*a.tc+u*a.td,u*a.td)+a.py,y=Math.max(0,l*a.tc,l*a.tc+u*a.td,u*a.td)+a.py):(c=a.px,m=a.px+a.ta*l,g=a.py,y=a.py+a.td*u),this._dimsUnknown&&(b||this._localTa<1||this._localTb<1))){let C=this._x*n.ta+this._y*n.tb+n.px,A=this._x*n.tc+this._y*n.td+n.py;C<c&&(c=C),A<g&&(g=A),C>m&&(m=C),A>y&&(y=A)}if(this._parent._outOfBounds===2)this._outOfBounds=2,this._withinBoundsMargin&&(this._withinBoundsMargin=!1,this.element._disableWithinBoundsMargin());else if(s&6){this._outOfBounds=0;let C=!0;if((!this._renderToTextureEnabled||!this._texturizer||!this._texturizer.renderOffscreen)&&(this._scissor&&(this._scissor[2]<=0||this._scissor[3]<=0)?this._outOfBounds=2:((this._scissor[0]>m||this._scissor[1]>y||c>this._scissor[0]+this._scissor[2]||g>this._scissor[1]+this._scissor[3])&&(this._outOfBounds=1),this._outOfBounds&&(this._clipping||this._useRenderToTexture||this._clipbox&&l&&u)&&(this._outOfBounds=2)),C=this._outOfBounds===0,C||(this._recBoundsMargin?C=!(m<this._scissor[0]-this._recBoundsMargin[2]||y<this._scissor[1]-this._recBoundsMargin[3]||c>this._scissor[0]+this._scissor[2]+this._recBoundsMargin[0]||g>this._scissor[1]+this._scissor[3]+this._recBoundsMargin[1]):C=!(m<this._scissor[0]-100||y<this._scissor[1]-100||c>this._scissor[0]+this._scissor[2]+100||g>this._scissor[1]+this._scissor[3]+100),C&&this._outOfBounds===2&&(this._outOfBounds=1))),this._withinBoundsMargin!==C)if(this._withinBoundsMargin=C,this._withinBoundsMargin){this._hasUpdates=!0;let A=this._recalc;if(this._recalc=0,this.element._enableWithinBoundsMargin(),this._recalc)return this.update();this._recalc=A}else this.element._disableWithinBoundsMargin()}if(this._useRenderToTexture&&(this._viewport?(this._viewport[2]=l,this._viewport[3]=u):this._viewport=[0,0,l,u]),this._pRecalc=this._recalc&135,this._recalc=0,this._hasUpdates=!1,this._outOfBounds<2){if(this._useRenderToTexture&&(this._worldContext.isIdentity()?this._renderContext=this._worldContext:this._renderContext=sr.IDENTITY),this._children)for(let C=0,A=this._children.length;C<A;C++)this._children[C].update();this._useRenderToTexture&&(this._renderContext=a)}else if(this._children)for(let C=0,A=this._children.length;C<A;C++)this._children[C]._hasUpdates?this._children[C].update():(this._children[C]._recalc|=this._pRecalc,this._children[C].updateOutOfBounds());this._onAfterUpdate&&this._onAfterUpdate(this.element)}else this.ctx.updateTreeOrder===-1||this._updateTreeOrder>=this.ctx.updateTreeOrder?this.ctx.updateTreeOrder=-1:this.updateTreeOrder()}_applyRelativeDimFuncs(){if(this._optFlags&1){let t=this._funcX(this._parent.w);t!==this._x&&(this._localPx+=t-this._x,this._x=t)}if(this._optFlags&2){let t=this._funcY(this._parent.h);t!==this._y&&(this._localPy+=t-this._y,this._y=t)}let e=!1;if(this._optFlags&4){let t=this._funcW(this._parent.w);t!==this._w&&(this._w=t,e=!0)}if(this._optFlags&8){let t=this._funcH(this._parent.h);t!==this._h&&(this._h=t,e=!0)}e&&(this._recalcLocalTranslate(),this.element.onDimensionsChanged(this._w,this._h))}updateOutOfBounds(){if(this._outOfBounds!==2&&this._renderContext.alpha>0&&(this._outOfBounds=2,this._withinBoundsMargin&&(this._withinBoundsMargin=!1,this.element._disableWithinBoundsMargin()),this._children))for(let e=0,t=this._children.length;e<t;e++)this._children[e].updateOutOfBounds()}updateTreeOrder(){if(this._localAlpha&&this._outOfBounds!==2&&(this._updateTreeOrder=this.ctx.updateTreeOrder++,this._children))for(let e=0,t=this._children.length;e<t;e++)this._children[e].updateTreeOrder()}_renderSimple(){if(this._hasRenderUpdates=0,this._zSort&&this.sortZIndexedChildren(),this._outOfBounds<2&&this._renderContext.alpha){let e=this.renderState;if(this._outOfBounds===0&&this._displayedTextureSource&&(e.setShader(this.activeShader,this._shaderOwner),e.setScissor(this._scissor),this.renderState.addQuad(this)),this._children)if(this._zContextUsage)for(let t=0,i=this._zIndexedChildren.length;t<i;t++)this._zIndexedChildren[t].render();else for(let t=0,i=this._children.length;t<i;t++)this._children[t]._zIndex===0&&this._children[t].render()}}_renderAdvanced(){let e=this._hasRenderUpdates;if(this._hasRenderUpdates=0,this._zSort&&this.sortZIndexedChildren(),this._outOfBounds<2&&this._renderContext.alpha){let t=this.renderState,i=!0,s,n;if(this._useRenderToTexture){if(this._w===0||this._h===0)return;if(!this._texturizer.hasRenderTexture()||e>=3){if(this.ctx.renderToTextureCount++,t.setShader(t.defaultShader,this),n=t.renderTextureInfo,s={nativeTexture:null,offset:0,w:this._w,h:this._h,empty:!0,cleared:!1,ignore:!1,cache:!1},(this._texturizer.hasResultTexture()||!t.isCachingTexturizer&&e<3)&&(s.cache=!0,t.isCachingTexturizer=!0),this._texturizer.hasResultTexture()||this._texturizer.releaseRenderTexture(),t.setRenderTextureInfo(s),t.setScissor(null),this._displayedTextureSource){let o=this._renderContext;this._renderContext=sr.IDENTITY,this.renderState.addQuad(this),this._renderContext=o}}else i=!1}else this._outOfBounds===0&&this._displayedTextureSource&&(t.setShader(this.activeShader,this._shaderOwner),t.setScissor(this._scissor),this.renderState.addQuad(this));if(i&&this._children)if(this._zContextUsage)for(let o=0,a=this._zIndexedChildren.length;o<a;o++)this._zIndexedChildren[o].render();else for(let o=0,a=this._children.length;o<a;o++)this._children[o]._zIndex===0&&this._children[o].render();if(this._useRenderToTexture){let o=!1;if(i&&(t.finishedRenderTexture(),this._texturizer.empty=s.empty,s.empty?this._texturizer.releaseRenderTexture():s.nativeTexture?(this._texturizer.reuseTextureAsRenderTexture(s.nativeTexture),s.ignore=!0):(this._texturizer.renderTextureReused&&this._texturizer.releaseRenderTexture(),s.nativeTexture=this._texturizer.getRenderTexture()),t.setRenderTextureInfo(n),o=!0),!this._texturizer.empty){let a=this._texturizer.getResultTexture();if(o&&(a&&(a.update=t.stage.frameCounter),this._texturizer.updateResultTexture()),!this._texturizer.renderOffscreen){t.setShader(this.activeShader,this._shaderOwner),t.setScissor(this._scissor);let l=!s||s.cache;t.setTexturizer(this._texturizer,l),this._stashTexCoords(),this._texturizer.colorize||this._stashColors(),this.renderState.addQuad(this,!0),this._texturizer.colorize||this._unstashColors(),this._unstashTexCoords(),t.setTexturizer(null)}}}s&&s.cache&&(t.isCachingTexturizer=!1)}}get zSort(){return this._zSort}sortZIndexedChildren(){let e=this._zIndexedChildren.length,t=0,i=this._zIndexedChildren,s=[];for(let o=0;o<e;o++)i[o]._zParent===this&&(i[o]._zIndexResort?s.push(i[o]):(t!==o&&(i[t]=i[o]),t++));let n=s.length;if(n){for(let a=0;a<n;a++)s[a]._zIndexResort=!1;s.sort(r.sortZIndexedChildren);let o=t;if(o){t=0;let a=0,l=0,u=[];do{let g=(i[a]._zIndex===s[l]._zIndex?i[a]._updateTreeOrder-s[l]._updateTreeOrder:i[a]._zIndex-s[l]._zIndex)>0?s[l++]:i[a++];if((t===0||u[t-1]!==g)&&(u[t++]=g),a>=o){do{let m=s[l++];(t===0||u[t-1]!==m)&&(u[t++]=m)}while(l<n);break}else if(l>=n){do{let m=i[a++];(t===0||u[t-1]!==m)&&(u[t++]=m)}while(a<o);break}}while(!0);this._zIndexedChildren=u}else{t=0;let a=0;do i[t++]=s[a++];while(a<n);i.length>t&&i.splice(t)}}else i.length>t&&i.splice(t);this._zSort=!1}get localTa(){return this._localTa}get localTb(){return this._localTb}get localTc(){return this._localTc}get localTd(){return this._localTd}get element(){return this._element}get renderUpdates(){return this._hasRenderUpdates}get texturizer(){return this._texturizer||(this._texturizer=new eo(this)),this._texturizer}getCornerPoints(){let e=this._worldContext;return[e.px,e.py,e.px+this._w*e.ta,e.py+this._w*e.tc,e.px+this._w*e.ta+this._h*e.tb,e.py+this._w*e.tc+this._h*e.td,e.px+this._h*e.tb,e.py+this._h*e.td]}getRenderTextureCoords(e,t){let i=this._renderContext;return[i.px+i.ta*e+i.tb*t,i.py+i.tc*e+i.td*t]}getAbsoluteCoords(e,t){let i=this._renderContext;return[i.px+i.ta*e+i.tb*t,i.py+i.tc*e+i.td*t]}collectAtCoord(e,t,i){if(this._renderContext.alpha!==0){if(this.inBound(e,t)&&(this._scissor?this.inScissor()&&i.push(this):i.push(this)),this._children){let s=this._children.length;for(let n=0;n<s;n++)this._children[n].collectAtCoord(e,t,i)}return i.sort(r.sortZIndexedChildren)}}inBound(e,t){let i=this.getCornerPoints();return e>i[0]&&e<i[2]&&t>i[1]&&t<i[7]}inScissor(){let e=this._scissor,t=this.getCornerPoints();return t[2]>=e[0]&&t[0]<=e[0]+e[2]&&t[7]>=e[1]&&t[1]<=e[1]+e[3]}get layout(){return this._ensureLayout(),this._layout}get flex(){return this._layout?this._layout.flex:null}set flex(e){this.layout.flex=e}get flexItem(){return this._layout?this._layout.flexItem:null}set flexItem(e){this.layout.flexItem=e}isFlexItem(){return!!this._layout&&this._layout.isFlexItemEnabled()}isFlexContainer(){return!!this._layout&&this._layout.isFlexEnabled()}enableFlexLayout(){this._ensureLayout()}_ensureLayout(){this._layout||(this._layout=new Wl(this))}disableFlexLayout(){this._triggerRecalcTranslate()}hasFlexLayout(){return this._layout&&this._layout.isEnabled()}setLayout(e,t,i,s){this.x=e,this.y=t,this._updateDimensions(i,s)}triggerLayout(){this._setRecalc(256)}_triggerRecalcTranslate(){this._setRecalc(2)}},sr=class{constructor(){this.alpha=1,this.px=0,this.py=0,this.ta=1,this.tb=0,this.tc=0,this.td=1}isIdentity(){return this.alpha===1&&this.px===0&&this.py===0&&this.ta===1&&this.tb===0&&this.tc===0&&this.td===1}isSquare(){return this.tb===0&&this.tc===0}};sr.IDENTITY=new sr;ds.sortZIndexedChildren=function(r,e){return r._zIndex===e._zIndex?r._updateTreeOrder-e._updateTreeOrder:r._zIndex-e._zIndex};var ct=class r{constructor(){this._hasEventListeners=!1}on(e,t){this._hasEventListeners||(this._eventFunction={},this._eventListeners={},this._hasEventListeners=!0),this._eventFunction[e]?this._eventFunction[e]!==r.combiner?(this._eventListeners[e]=[this._eventFunction[e],t],this._eventFunction[e]=r.combiner):this._eventListeners[e].push(t):this._eventFunction[e]=t}once(e,t){let i=(s,n,o)=>{t(s,n,o),this.off(e,i)};i.__originalFunc=t,this.on(e,i)}has(e,t){if(this._hasEventListeners){let i=this._eventFunction[e];if(i){if(i===r.combiner){let s=this._eventListeners[e];for(let n of s)if(n===t||n.__originalFunc==t)return!0}else if(this._eventFunction[e]===t||this._eventFunction[e].__originalFunc===t)return!0}}return!1}off(e,t){if(this._hasEventListeners){let i=this._eventFunction[e];if(i)if(i===r.combiner){let s=this._eventListeners[e],n=s.indexOf(t);n>=0&&s.splice(n,1),n=s.map(o=>o.__originalFunc).indexOf(t),n>=0&&s.splice(n,1),s.length===1&&(this._eventFunction[e]=s[0],this._eventListeners[e]=void 0)}else(this._eventFunction[e]===t||this._eventFunction[e].__originalFunc===t)&&(this._eventFunction[e]=void 0)}}removeListener(e,t){this.off(e,t)}emit(e,t,i,s){if(this._hasEventListeners){let n=this._eventFunction[e];n&&(n===r.combiner?n(this,e,t,i,s):n(t,i,s))}}listenerCount(e){if(this._hasEventListeners){let t=this._eventFunction[e];if(t)return t===r.combiner?this._eventListeners[e].length:1}return 0}removeAllListeners(e){this._hasEventListeners&&(delete this._eventFunction[e],delete this._eventListeners[e])}};ct.combiner=function(r,e,t,i,s){let n=r._eventListeners[e];if(n)for(let o of[...n])o(t,i,s)};ct.addAsMixin=function(r){r.prototype.on=ct.prototype.on,r.prototype.once=ct.prototype.once,r.prototype.has=ct.prototype.has,r.prototype.off=ct.prototype.off,r.prototype.removeListener=ct.prototype.removeListener,r.prototype.emit=ct.prototype.emit,r.prototype.listenerCount=ct.prototype.listenerCount,r.prototype.removeAllListeners=ct.prototype.removeAllListeners};var qr=class{constructor(e){this._initialized=!1,this.ctx=e,this._elements=new Set}static create(e,t){let i;if(K.isObjectLiteral(t))t.type?i=e.renderer.createShader(e.ctx,t):i=this.shader,i&&dt.patchObject(i,t);else if(t===null)i=e.ctx.renderState.defaultShader;else if(t===void 0)i=null;else if(t.isShader)e.renderer.isValidShaderType(t.constructor)||(console.error("[Lightning] Invalid shader type"),t=null),i=t;else{console.error("[Lightning] Please specify a shader type.");return}return i}static getWebGL(){}static getC2d(){}addElement(e){this._elements.add(e)}removeElement(e){this._elements.delete(e),this._elements||this.cleanup()}redraw(){this._elements.forEach(e=>{e.setHasRenderUpdates(2)})}patch(e){dt.patchObject(this,e)}useDefault(){return!1}addEmpty(){return!1}cleanup(){}get isShader(){return!0}},Rt=class r{constructor(e){this.stage=e,this.manager=this.stage.textureManager,this.id=r.id++,this.elements=new Set,this._activeCount=0,this._source=null,this._resizeMode=null,this._x=0,this._y=0,this._w=0,this._h=0,this._precision=1,this.mw=0,this.mh=0,this.clipping=!1,this._mustUpdate=!0}get source(){return(this._mustUpdate||this.stage.hasUpdateSourceTexture(this))&&(this._performUpdateSource(!0),this.stage.removeUpdateSourceTexture(this)),this._source}addElement(e){this.elements.has(e)||(this.elements.add(e),this.elements.size===1&&this._source&&this._source.addTexture(this),e.active&&this.incActiveCount())}removeElement(e){this.elements.delete(e)&&(this.elements.size===0&&this._source&&this._source.removeTexture(this),e.active&&this.decActiveCount())}incActiveCount(){this.source&&this._checkForNewerReusableTextureSource(),this._activeCount++,this._activeCount===1&&this.becomesUsed()}decActiveCount(){this.source,this._activeCount--,this._activeCount||this.becomesUnused()}becomesUsed(){this.source&&this.source.incActiveTextureCount()}onLoad(){this._resizeMode&&this._applyResizeMode(),this.elements.forEach(e=>{e.active&&e.onTextureSourceLoaded()})}_checkForNewerReusableTextureSource(){let e=this.source;if(e.isLoaded())this._resizeMode&&this._applyResizeMode();else{let t=this._getReusableTextureSource();t&&t.isLoaded()&&t!==e&&this._replaceTextureSource(t)}}becomesUnused(){this.source&&this.source.decActiveTextureCount()}isUsed(){return this._activeCount>0}_getLookupId(){return null}_getSourceLoader(){throw new Error("Texture.generate must be implemented.")}get isValid(){return this._getIsValid()}_getIsValid(){return!0}_changed(){this.isUsed()?this._updateSource():this._mustUpdate=!0}_updateSource(){this.stage.addUpdateSourceTexture(this)}_performUpdateSource(e=!1){if(e||this.isUsed()){this._mustUpdate=!1;let t=this._getTextureSource();this._replaceTextureSource(t)}}_getTextureSource(){let e=null;if(this._getIsValid()){let t=this._getLookupId();e=this._getReusableTextureSource(t),e||(e=this.manager.getTextureSource(this._getSourceLoader(),t))}return e}_getReusableTextureSource(e=this._getLookupId()){return this._getIsValid()&&e?this.manager.getReusableTextureSource(e):null}_replaceTextureSource(e=null){let t=this._source;if(this._source=e,this.elements.size&&(t&&(this._activeCount&&t.decActiveTextureCount(),t.removeTexture(this),this.text&&!t.isUsed()&&this.manager.freeTextureSource(t)),e&&(e.addTexture(this),this._activeCount&&e.incActiveTextureCount())),this.isUsed())if(e)if(e.isLoaded())this._resizeMode&&this._applyResizeMode(),this.elements.forEach(i=>{i.active&&i._setDisplayedTexture(this)});else{let i=e.loadError;i&&this.elements.forEach(s=>{s.active&&s.onTextureSourceLoadError(i)})}else this.elements.forEach(i=>{i.active&&i._setDisplayedTexture(null)})}load(){this.source&&(this.isLoaded()||this.source.load(!0))}isLoaded(){return this._source&&this._source.isLoaded()}get loadError(){return this._source&&this._source.loadError}free(){this._source&&this._source.free()}set resizeMode({type:e="cover",w:t=0,h:i=0,clipX:s=.5,clipY:n=.5}){this._resizeMode={type:e,w:t,h:i,clipX:s,clipY:n},this.isLoaded()&&this._applyResizeMode()}get resizeMode(){return this._resizeMode}_clearResizeMode(){this._resizeMode=null}_applyResizeMode(){this._resizeMode.type==="cover"?this._applyResizeCover():this._resizeMode.type==="contain"&&this._applyResizeContain(),this._updatePrecision(),this._updateClipping()}_applyResizeCover(){let e=this._resizeMode.w/this._source.w,t=this._resizeMode.h/this._source.h,i=Math.max(e,t);if(i){if(this._precision=1/i,e&&e<i){let s=this._precision*this._resizeMode.w,n=this._source.w-s;this._x=n*this._resizeMode.clipX,this._w=this._source.w-n}if(t&&t<i){let s=this._precision*this._resizeMode.h,n=this._source.h-s;this._y=n*this._resizeMode.clipY,this._h=this._source.h-n}}}_applyResizeContain(){let e=this._resizeMode.w/this._source.w,t=this._resizeMode.h/this._source.h,i=e;(!i||t<i)&&(i=t),i&&(this._precision=1/i)}enableClipping(e,t,i,s){this._clearResizeMode(),e*=this._precision,t*=this._precision,i*=this._precision,s*=this._precision,(this._x!==e||this._y!==t||this._w!==i||this._h!==s)&&(this._x=e,this._y=t,this._w=i,this._h=s,this._updateClipping(!0))}disableClipping(){this._clearResizeMode(),(this._x||this._y||this._w||this._h)&&(this._x=0,this._y=0,this._w=0,this._h=0,this._updateClipping())}_updateClipping(){this.clipping=!!(this._x||this._y||this._w||this._h);let e=this;this.elements.forEach(function(t){t.displayedTexture===e&&t.onDisplayedTextureClippingChanged()})}_updatePrecision(){let e=this;this.elements.forEach(function(t){t.displayedTexture===e&&t.onPrecisionChanged()})}getNonDefaults(){let e={};return e.type=this.constructor.name,this.x!==0&&(e.x=this.x),this.y!==0&&(e.y=this.y),this.w!==0&&(e.w=this.w),this.h!==0&&(e.h=this.h),this.precision!==1&&(e.precision=this.precision),e}get px(){return this._x}get py(){return this._y}get pw(){return this._w}get ph(){return this._h}get x(){return this._x/this._precision}set x(e){this._clearResizeMode(),e=e*this._precision,this._x!==e&&(this._x=e,this._updateClipping())}get y(){return this._y/this._precision}set y(e){this._clearResizeMode(),e=e*this._precision,this._y!==e&&(this._y=e,this._updateClipping())}get w(){return this._w/this._precision}set w(e){this._clearResizeMode(),e=e*this._precision,this._w!==e&&(this._w=e,this._updateClipping())}get h(){return this._h/this._precision}set h(e){this._clearResizeMode(),e=e*this._precision,this._h!==e&&(this._h=e,this._updateClipping())}get precision(){return this._precision}set precision(e){this._clearResizeMode(),this._precision!==e&&(this._precision=e,this._updatePrecision())}isAutosizeTexture(){return!0}getRenderWidth(){return this.isAutosizeTexture()?(this._w||(this._source?this._source.getRenderWidth()-this._x:0))/this._precision:0}getRenderHeight(){return this.isAutosizeTexture()?(this._h||(this._source?this._source.getRenderHeight()-this._y:0))/this._precision:0}patch(e){dt.patchObject(this,e)}};Rt.prototype.isTexture=!0;Rt.id=0;var ps=class extends Rt{constructor(e){super(e),this._src=void 0,this._hasAlpha=!1}get src(){return this._src}set src(e){this._src!==e&&(this._src=e,this._changed())}get hasAlpha(){return this._hasAlpha}set hasAlpha(e){this._hasAlpha!==e&&(this._hasAlpha=e,this._changed())}_getIsValid(){return!!this._src}_getLookupId(){return this._src}_getSourceLoader(){let e=this._src,t=this._hasAlpha;if(this.stage.getOption("srcBasePath")){var i=e.charCodeAt(0);e.indexOf("//")===-1&&(i>=65&&i<=90||i>=97&&i<=122||i==46)&&(e=this.stage.getOption("srcBasePath")+e)}return s=>this.stage.platform.loadSrcTexture({src:e,hasAlpha:t},s)}getNonDefaults(){let e=super.getNonDefaults();return this._src&&(e.src=this._src),e}};function to(r,e,t,i,s){let n=r;Array.isArray(n)||(n=[n]);let o=[];for(let a=0,l=n.length;a<l;a++){let u=n[a];u===null&&(u=s),u==="serif"||u==="sans-serif"?o.push(u):o.push(`"${u}"`)}return`${e} ${t*i}px ${o.join(",")}`}function Ep(r){return r===""||r==="\u200B"}function Ap(r){return Ep(r)||r===" "}function P1(r,e){let t=e.match(r)||[],i=e.split(r)||[],s=[];for(let n=0;n<i.length;n++)s.push(i[n],t[n]);return s.pop(),s.filter(n=>n!="")}function ro(r,e,t=0){return t?e.split("").reduce((i,s)=>Ep(s)?i:i+r.measureText(s).width+t,0):r.measureText(e).width}function k1(r,e,t,i,s){let n=/ |\u200B/g,o=e.split(/\r?\n/g),a=[],l=[];for(let u=0;u<o.length;u++){let c=[],g="",m=t-s,y=o[u].split(n),b=o[u].match(n)||[];for(let C=0;C<y.length;C++){let A=b[C-1]||"",T=y[C],R=ro(r,T,i),P=R+ro(r,A,i);C===0||P>m?(C>0&&(c.push(g),g=""),g+=T,m=t-R-(C===0?s:0)):(m-=P,g+=A+T)}c.push(g),g="",a=a.concat(c),u<o.length-1&&l.push(a.length)}return{l:a,n:l}}var io=class{constructor(e,t,i){this._stage=e,this._canvas=t,this._context=this._canvas.getContext("2d"),this._settings=i}getPrecision(){return this._settings.precision}setFontProperties(){this._context.font=to(this._settings.fontFace,this._settings.fontStyle,this._settings.fontSize,this.getPrecision(),this._stage.getOption("defaultFontFace")),this._context.textBaseline=this._settings.textBaseline}_load(){if(K.isWeb&&document.fonts){let e=to(this._settings.fontFace,this._settings.fontStyle,this._settings.fontSize,this.getPrecision(),this._stage.getOption("defaultFontFace"));try{if(!document.fonts.check(e,this._settings.text))return document.fonts.load(e,this._settings.text).catch(t=>{console.warn("[Lightning] Font load error",t,e)}).then(()=>{document.fonts.check(e,this._settings.text)||console.warn("[Lightning] Font not found",e)})}catch{console.warn("[Lightning] Can't check font loading for "+e)}}}draw(){let e=this._load();return e?e.then(()=>K.isSpark?this._stage.platform.drawText(this):this._draw()):K.isSpark?this._stage.platform.drawText(this):this._draw()}_calculateRenderInfo(){let e={},t=this.getPrecision(),i=this._settings.paddingLeft*t,s=this._settings.paddingRight*t,n=this._settings.fontSize*t,o=this._settings.offsetY===null?null:this._settings.offsetY*t,a=this._settings.lineHeight*t,l=this._settings.w*t,u=this._settings.h*t,c=this._settings.wordWrapWidth*t,g=this._settings.cutSx*t,m=this._settings.cutEx*t,y=this._settings.cutSy*t,b=this._settings.cutEy*t,C=(this._settings.letterSpacing||0)*t,A=this._settings.textIndent*t;this.setFontProperties();let T=l||this._stage.getOption("w"),R=T-i;if(R<10&&(T+=10-R,R=10),c||(c=R),this._settings.textOverflow&&!this._settings.wordWrap){let F;switch(this._settings.textOverflow){case"clip":F="";break;case"ellipsis":F=this._settings.maxLinesSuffix;break;default:F=this._settings.textOverflow}this._settings.text=this.wrapWord(this._settings.text,c-A,F)}let P;if(this._settings.wordWrap)P=this.wrapText(this._settings.text,c,C,A);else{P={l:this._settings.text.split(/(?:\r\n|\r|\n)/),n:[]};let F=P.l.length;for(let U=0;U<F-1;U++)P.n.push(U)}let E=P.l;if(this._settings.maxLines&&E.length>this._settings.maxLines){let F=E.slice(0,this._settings.maxLines),U=null;if(this._settings.maxLinesSuffix){let D=this._settings.maxLinesSuffix?this.measureText(this._settings.maxLinesSuffix):0,N=this.wrapText(F[F.length-1],c-D,C,A);F[F.length-1]=N.l[0]+this._settings.maxLinesSuffix,U=[N.l.length>1?N.l[1]:""]}else U=[""];let q,ee=E.length,te=0,$=P.n.length;for(q=this._settings.maxLines;q<ee;q++)U[te]+=(U[te]?" ":"")+E[q],q+1<$&&P.n[q+1]&&te++;e.remainingText=U.join(` +(()=>{var XC=Object.create;var qn=Object.defineProperty;var KC=Object.getOwnPropertyDescriptor;var JC=Object.getOwnPropertyNames;var QC=Object.getPrototypeOf,ZC=Object.prototype.hasOwnProperty;var Ft=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var Vt=(r,e)=>()=>(r&&(e=r(r=0)),e);var H=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),rr=(r,e)=>{for(var t in e)qn(r,t,{get:e[t],enumerable:!0})},cp=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of JC(e))!ZC.call(r,s)&&s!==t&&qn(r,s,{get:()=>e[s],enumerable:!(i=KC(e,s))||i.enumerable});return r};var ye=(r,e,t)=>(t=r!=null?XC(QC(r)):{},cp(e||!r||!r.__esModule?qn(t,"default",{value:r,enumerable:!0}):t,r)),e1=r=>cp(qn({},"__esModule",{value:!0}),r);var h=Vt(()=>{});var d=Vt(()=>{});var p=Vt(()=>{});var Rl={};rr(Rl,{Children:()=>Tl,Component:()=>ir,Fragment:()=>s1,Profiler:()=>n1,PureComponent:()=>o1,StrictMode:()=>a1,Suspense:()=>Cl,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:()=>l1,cloneElement:()=>Ue,createContext:()=>fi,createElement:()=>yp,createFactory:()=>u1,createRef:()=>c1,default:()=>z,forwardRef:()=>h1,isValidElement:()=>d1,lazy:()=>Al,memo:()=>hs,startTransition:()=>p1,unstable_act:()=>f1,useCallback:()=>ut,useContext:()=>El,useDebugValue:()=>g1,useDeferredValue:()=>m1,useEffect:()=>He,useId:()=>_1,useImperativeHandle:()=>y1,useInsertionEffect:()=>x1,useLayoutEffect:()=>Il,useMemo:()=>vr,useReducer:()=>b1,useRef:()=>Bt,useState:()=>Fe,useSyncExternalStore:()=>v1,useTransition:()=>S1,version:()=>w1});var z,Tl,ir,s1,n1,o1,a1,Cl,l1,Ue,fi,yp,u1,c1,h1,d1,Al,hs,p1,f1,ut,El,g1,m1,He,_1,y1,x1,Il,vr,b1,Bt,Fe,v1,S1,w1,Ge=Vt(()=>{h();d();p();z=__REACT__,{Children:Tl,Component:ir,Fragment:s1,Profiler:n1,PureComponent:o1,StrictMode:a1,Suspense:Cl,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:l1,cloneElement:Ue,createContext:fi,createElement:yp,createFactory:u1,createRef:c1,forwardRef:h1,isValidElement:d1,lazy:Al,memo:hs,startTransition:p1,unstable_act:f1,useCallback:ut,useContext:El,useDebugValue:g1,useDeferredValue:m1,useEffect:He,useId:_1,useImperativeHandle:y1,useInsertionEffect:x1,useLayoutEffect:Il,useMemo:vr,useReducer:b1,useRef:Bt,useState:Fe,useSyncExternalStore:v1,useTransition:S1,version:w1}=__REACT__});var Tp=H(Jn=>{"use strict";h();d();p();var T1=(Ge(),e1(Rl)),C1=Symbol.for("react.element"),A1=Symbol.for("react.fragment"),E1=Object.prototype.hasOwnProperty,I1=T1.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,R1={key:!0,ref:!0,__self:!0,__source:!0};function wp(r,e,t){var i,s={},n=null,o=null;t!==void 0&&(n=""+t),e.key!==void 0&&(n=""+e.key),e.ref!==void 0&&(o=e.ref);for(i in e)E1.call(e,i)&&!R1.hasOwnProperty(i)&&(s[i]=e[i]);if(r&&r.defaultProps)for(i in e=r.defaultProps,e)s[i]===void 0&&(s[i]=e[i]);return{$$typeof:C1,type:r,key:n,ref:o,props:s,_owner:I1.current}}Jn.Fragment=A1;Jn.jsx=wp;Jn.jsxs=wp});var Ce=H((RG,Cp)=>{"use strict";h();d();p();Cp.exports=Tp()});var Cf=H((lfe,Tf)=>{h();d();p();function oc(r,e,t){var i,s,n,o,a;e==null&&(e=100);function l(){var c=Date.now()-o;c<e&&c>=0?i=setTimeout(l,e-c):(i=null,t||(a=r.apply(n,s),n=s=null))}var u=function(){n=this,s=arguments,o=Date.now();var c=t&&!i;return i||(i=setTimeout(l,e)),c&&(a=r.apply(n,s),n=s=null),a};return u.clear=function(){i&&(clearTimeout(i),i=null)},u.flush=function(){i&&(a=r.apply(n,s),n=s=null,clearTimeout(i),i=null)},u}oc.debounce=oc;Tf.exports=oc});var $A,Rf,VA,Pf,GA,YA,Xr,XA,kf,Kt,lc,uc=Vt(()=>{h();d();p();$A=Object.create,Rf=Object.defineProperty,VA=Object.getOwnPropertyDescriptor,Pf=Object.getOwnPropertyNames,GA=Object.getPrototypeOf,YA=Object.prototype.hasOwnProperty,Xr=(r,e)=>function(){return e||(0,r[Pf(r)[0]])((e={exports:{}}).exports,e),e.exports},XA=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Pf(e))!YA.call(r,s)&&s!==t&&Rf(r,s,{get:()=>e[s],enumerable:!(i=VA(e,s))||i.enumerable});return r},kf=(r,e,t)=>(t=r!=null?$A(GA(r)):{},XA(e||!r||!r.__esModule?Rf(t,"default",{value:r,enumerable:!0}):t,r)),Kt=r=>`control-${r.replace(/\s+/g,"-")}`,lc=r=>`set-${r.replace(/\s+/g,"-")}`});var Hf={};rr(Hf,{A:()=>JA,ActionBar:()=>cc,AddonPanel:()=>QA,Badge:()=>ZA,Bar:()=>eE,Blockquote:()=>tE,Button:()=>Zo,ClipboardCode:()=>rE,Code:()=>Of,DL:()=>iE,Div:()=>sE,DocumentWrapper:()=>nE,EmptyTabContent:()=>Lf,ErrorFormatter:()=>Df,FlexBar:()=>hc,Form:()=>Rr,H1:()=>oE,H2:()=>dc,H3:()=>Ff,H4:()=>aE,H5:()=>lE,H6:()=>uE,HR:()=>cE,IconButton:()=>Kr,IconButtonSkeleton:()=>hE,Icons:()=>dE,Img:()=>pE,LI:()=>fE,Link:()=>Bf,ListItem:()=>gE,Loader:()=>Mf,Modal:()=>mE,OL:()=>_E,P:()=>yE,Placeholder:()=>xE,Pre:()=>bE,ResetWrapper:()=>Nf,ScrollArea:()=>vE,Separator:()=>SE,Spaced:()=>wE,Span:()=>TE,StorybookIcon:()=>CE,StorybookLogo:()=>AE,Symbols:()=>EE,SyntaxHighlighter:()=>pc,TT:()=>IE,TabBar:()=>RE,TabButton:()=>PE,TabWrapper:()=>kE,Table:()=>OE,Tabs:()=>LE,TabsState:()=>zf,TooltipLinkList:()=>DE,TooltipMessage:()=>FE,TooltipNote:()=>fc,UL:()=>BE,WithTooltip:()=>ea,WithTooltipPure:()=>jf,Zoom:()=>gc,codeCommon:()=>Ai,components:()=>mc,createCopyToClipboardFunction:()=>ME,default:()=>KA,getStoryHref:()=>Uf,icons:()=>NE,interleaveSeparators:()=>zE,nameSpaceClassNames:()=>_c,resetComponents:()=>jE,withReset:()=>Ei});var KA,JA,cc,QA,ZA,eE,tE,Zo,rE,Of,iE,sE,nE,Lf,Df,hc,Rr,oE,dc,Ff,aE,lE,uE,cE,Kr,hE,dE,pE,fE,Bf,gE,Mf,mE,_E,yE,xE,bE,Nf,vE,SE,wE,TE,CE,AE,EE,pc,IE,RE,PE,kE,OE,LE,zf,DE,FE,fc,BE,ea,jf,gc,Ai,mc,ME,Uf,NE,zE,_c,jE,Ei,ta=Vt(()=>{h();d();p();KA=__STORYBOOK_COMPONENTS__,{A:JA,ActionBar:cc,AddonPanel:QA,Badge:ZA,Bar:eE,Blockquote:tE,Button:Zo,ClipboardCode:rE,Code:Of,DL:iE,Div:sE,DocumentWrapper:nE,EmptyTabContent:Lf,ErrorFormatter:Df,FlexBar:hc,Form:Rr,H1:oE,H2:dc,H3:Ff,H4:aE,H5:lE,H6:uE,HR:cE,IconButton:Kr,IconButtonSkeleton:hE,Icons:dE,Img:pE,LI:fE,Link:Bf,ListItem:gE,Loader:Mf,Modal:mE,OL:_E,P:yE,Placeholder:xE,Pre:bE,ResetWrapper:Nf,ScrollArea:vE,Separator:SE,Spaced:wE,Span:TE,StorybookIcon:CE,StorybookLogo:AE,Symbols:EE,SyntaxHighlighter:pc,TT:IE,TabBar:RE,TabButton:PE,TabWrapper:kE,Table:OE,Tabs:LE,TabsState:zf,TooltipLinkList:DE,TooltipMessage:FE,TooltipNote:fc,UL:BE,WithTooltip:ea,WithTooltipPure:jf,Zoom:gc,codeCommon:Ai,components:mc,createCopyToClipboardFunction:ME,getStoryHref:Uf,icons:NE,interleaveSeparators:zE,nameSpaceClassNames:_c,resetComponents:jE,withReset:Ei}=__STORYBOOK_COMPONENTS__});var rge,ige,sge,nge,Wf,oge,age,qf,lge,uge,cge,hge,dge,pge,UE,$f,fge,gge,mge,_ge,J,yc,yge,Vf,xge,xc=Vt(()=>{h();d();p();rge=__STORYBOOK_THEMING__,{CacheProvider:ige,ClassNames:sge,Global:nge,ThemeProvider:Wf,background:oge,color:age,convert:qf,create:lge,createCache:uge,createGlobal:cge,createReset:hge,css:dge,darken:pge,ensure:UE,ignoreSsrWarning:$f,isPropValid:fge,jsx:gge,keyframes:mge,lighten:_ge,styled:J,themes:yc,typography:yge,useTheme:Vf,withTheme:xge}=__STORYBOOK_THEMING__});var Ume,Hme,Wme,ig,qme,$me,Vme,Gme,Yme,Xme,Kme,Jme,Qme,Zme,e_e,t_e,r_e,i_e,s_e,n_e,o_e,a_e,l_e,u_e,c_e,h_e,d_e,p_e,f_e,g_e,m_e,__e,y_e,x_e,b_e,v_e,S_e,w_e,T_e,C_e,A_e,E_e,I_e,R_e,P_e,k_e,O_e,L_e,sg,D_e,ng,Ac,F_e,B_e,og,M_e,N_e,z_e,j_e,U_e,H_e,W_e,q_e,$_e,V_e,G_e,Y_e,X_e,K_e,J_e,Q_e,Z_e,eye,tye,rye,iye,sye,nye,oye,aye,lye,uye,cye,hye,dye,pye,fye,gye,AI,mye,_ye,yye,xye,bye,vye,Sye,EI,II,wye,Tye,Cye,Aye,Eye,Iye,Rye,Pye,kye,Oye,Lye,Dye,Fye,Bye,Mye,Nye,zye,jye,Uye,Hye,Wye,qye,$ye,Vye,Gye,Yye,Xye,Kye,Jye,Qye,Zye,exe,txe,ag,rxe,ixe,sxe,nxe,oxe,axe,lxe,lg,uxe,cxe,hxe,dxe,pxe,fxe,gxe,mxe,_xe,yxe,xxe,bxe,vxe,Sxe,wxe,Txe,Cxe,Axe,Exe,Ixe,Rxe,Pxe,kxe,Oxe,Lxe,Dxe,Fxe,Bxe,Mxe,Nxe,zxe,jxe,Uxe,Hxe,Wxe,qxe,$xe,Vxe,Gxe,Yxe,Xxe,Kxe,Jxe,Qxe,Zxe,ebe,tbe,rbe,ibe,sbe,nbe,obe,abe,lbe,ube,cbe,hbe,dbe,pbe,fbe,gbe,ug,mbe,_be,ybe,xbe,bbe,vbe,Sbe,wbe,Tbe,Cbe,Abe,Ebe,Ibe,RI,Rbe,Pbe,kbe,Obe,Lbe,Dbe,Fbe,Bbe,Mbe,Nbe,PI,zbe,jbe,Ube,Hbe,Wbe,qbe,cg,hg,dg,$be,Ec=Vt(()=>{h();d();p();Ume=__STORYBOOK_ICONS__,{AccessibilityAltIcon:Hme,AccessibilityIcon:Wme,AddIcon:ig,AdminIcon:qme,AlertAltIcon:$me,AlertIcon:Vme,AlignLeftIcon:Gme,AlignRightIcon:Yme,AppleIcon:Xme,ArrowBottomLeftIcon:Kme,ArrowBottomRightIcon:Jme,ArrowDownIcon:Qme,ArrowLeftIcon:Zme,ArrowRightIcon:e_e,ArrowSolidDownIcon:t_e,ArrowSolidLeftIcon:r_e,ArrowSolidRightIcon:i_e,ArrowSolidUpIcon:s_e,ArrowTopLeftIcon:n_e,ArrowTopRightIcon:o_e,ArrowUpIcon:a_e,AzureDevOpsIcon:l_e,BackIcon:u_e,BasketIcon:c_e,BatchAcceptIcon:h_e,BatchDenyIcon:d_e,BeakerIcon:p_e,BellIcon:f_e,BitbucketIcon:g_e,BoldIcon:m_e,BookIcon:__e,BookmarkHollowIcon:y_e,BookmarkIcon:x_e,BottomBarIcon:b_e,BottomBarToggleIcon:v_e,BoxIcon:S_e,BranchIcon:w_e,BrowserIcon:T_e,ButtonIcon:C_e,CPUIcon:A_e,CalendarIcon:E_e,CameraIcon:I_e,CategoryIcon:R_e,CertificateIcon:P_e,ChangedIcon:k_e,ChatIcon:O_e,CheckIcon:L_e,ChevronDownIcon:sg,ChevronLeftIcon:D_e,ChevronRightIcon:ng,ChevronSmallDownIcon:Ac,ChevronSmallLeftIcon:F_e,ChevronSmallRightIcon:B_e,ChevronSmallUpIcon:og,ChevronUpIcon:M_e,ChromaticIcon:N_e,ChromeIcon:z_e,CircleHollowIcon:j_e,CircleIcon:U_e,ClearIcon:H_e,CloseAltIcon:W_e,CloseIcon:q_e,CloudHollowIcon:$_e,CloudIcon:V_e,CogIcon:G_e,CollapseIcon:Y_e,CommandIcon:X_e,CommentAddIcon:K_e,CommentIcon:J_e,CommentsIcon:Q_e,CommitIcon:Z_e,CompassIcon:eye,ComponentDrivenIcon:tye,ComponentIcon:rye,ContrastIcon:iye,ControlsIcon:sye,CopyIcon:nye,CreditIcon:oye,CrossIcon:aye,DashboardIcon:lye,DatabaseIcon:uye,DeleteIcon:cye,DiamondIcon:hye,DirectionIcon:dye,DiscordIcon:pye,DocChartIcon:fye,DocListIcon:gye,DocumentIcon:AI,DownloadIcon:mye,DragIcon:_ye,EditIcon:yye,EllipsisIcon:xye,EmailIcon:bye,ExpandAltIcon:vye,ExpandIcon:Sye,EyeCloseIcon:EI,EyeIcon:II,FaceHappyIcon:wye,FaceNeutralIcon:Tye,FaceSadIcon:Cye,FacebookIcon:Aye,FailedIcon:Eye,FastForwardIcon:Iye,FigmaIcon:Rye,FilterIcon:Pye,FlagIcon:kye,FolderIcon:Oye,FormIcon:Lye,GDriveIcon:Dye,GithubIcon:Fye,GitlabIcon:Bye,GlobeIcon:Mye,GoogleIcon:Nye,GraphBarIcon:zye,GraphLineIcon:jye,GraphqlIcon:Uye,GridAltIcon:Hye,GridIcon:Wye,GrowIcon:qye,HeartHollowIcon:$ye,HeartIcon:Vye,HomeIcon:Gye,HourglassIcon:Yye,InfoIcon:Xye,ItalicIcon:Kye,JumpToIcon:Jye,KeyIcon:Qye,LightningIcon:Zye,LightningOffIcon:exe,LinkBrokenIcon:txe,LinkIcon:ag,LinkedinIcon:rxe,LinuxIcon:ixe,ListOrderedIcon:sxe,ListUnorderedIcon:nxe,LocationIcon:oxe,LockIcon:axe,MarkdownIcon:lxe,MarkupIcon:lg,MediumIcon:uxe,MemoryIcon:cxe,MenuIcon:hxe,MergeIcon:dxe,MirrorIcon:pxe,MobileIcon:fxe,MoonIcon:gxe,NutIcon:mxe,OutboxIcon:_xe,OutlineIcon:yxe,PaintBrushIcon:xxe,PaperClipIcon:bxe,ParagraphIcon:vxe,PassedIcon:Sxe,PhoneIcon:wxe,PhotoDragIcon:Txe,PhotoIcon:Cxe,PinAltIcon:Axe,PinIcon:Exe,PlayBackIcon:Ixe,PlayIcon:Rxe,PlayNextIcon:Pxe,PlusIcon:kxe,PointerDefaultIcon:Oxe,PointerHandIcon:Lxe,PowerIcon:Dxe,PrintIcon:Fxe,ProceedIcon:Bxe,ProfileIcon:Mxe,PullRequestIcon:Nxe,QuestionIcon:zxe,RSSIcon:jxe,RedirectIcon:Uxe,ReduxIcon:Hxe,RefreshIcon:Wxe,ReplyIcon:qxe,RepoIcon:$xe,RequestChangeIcon:Vxe,RewindIcon:Gxe,RulerIcon:Yxe,SearchIcon:Xxe,ShareAltIcon:Kxe,ShareIcon:Jxe,ShieldIcon:Qxe,SideBySideIcon:Zxe,SidebarAltIcon:ebe,SidebarAltToggleIcon:tbe,SidebarIcon:rbe,SidebarToggleIcon:ibe,SpeakerIcon:sbe,StackedIcon:nbe,StarHollowIcon:obe,StarIcon:abe,StatusFailIcon:lbe,StatusPassIcon:ube,StatusWarnIcon:cbe,StickerIcon:hbe,StopAltIcon:dbe,StopIcon:pbe,StorybookIcon:fbe,StructureIcon:gbe,SubtractIcon:ug,SunIcon:mbe,SupportIcon:_be,SwitchAltIcon:ybe,SyncIcon:xbe,TabletIcon:bbe,ThumbsUpIcon:vbe,TimeIcon:Sbe,TimerIcon:wbe,TransferIcon:Tbe,TrashIcon:Cbe,TwitterIcon:Abe,TypeIcon:Ebe,UbuntuIcon:Ibe,UndoIcon:RI,UnfoldIcon:Rbe,UnlockIcon:Pbe,UnpinIcon:kbe,UploadIcon:Obe,UserAddIcon:Lbe,UserAltIcon:Dbe,UserIcon:Fbe,UsersIcon:Bbe,VSCodeIcon:Mbe,VerifiedIcon:Nbe,VideoIcon:PI,WandIcon:zbe,WatchIcon:jbe,WindowsIcon:Ube,WrenchIcon:Hbe,XIcon:Wbe,YoutubeIcon:qbe,ZoomIcon:cg,ZoomOutIcon:hg,ZoomResetIcon:dg,iconList:$be}=__STORYBOOK_ICONS__});var Pc=H((o0e,vg)=>{h();d();p();function qI(r,e){for(var t=-1,i=r==null?0:r.length,s=Array(i);++t<i;)s[t]=e(r[t],t,r);return s}vg.exports=qI});var wg=H((c0e,Sg)=>{h();d();p();function $I(){this.__data__=[],this.size=0}Sg.exports=$I});var aa=H((f0e,Tg)=>{h();d();p();function VI(r,e){return r===e||r!==r&&e!==e}Tg.exports=VI});var Xs=H((y0e,Cg)=>{h();d();p();var GI=aa();function YI(r,e){for(var t=r.length;t--;)if(GI(r[t][0],e))return t;return-1}Cg.exports=YI});var Eg=H((S0e,Ag)=>{h();d();p();var XI=Xs(),KI=Array.prototype,JI=KI.splice;function QI(r){var e=this.__data__,t=XI(e,r);if(t<0)return!1;var i=e.length-1;return t==i?e.pop():JI.call(e,t,1),--this.size,!0}Ag.exports=QI});var Rg=H((A0e,Ig)=>{h();d();p();var ZI=Xs();function eR(r){var e=this.__data__,t=ZI(e,r);return t<0?void 0:e[t][1]}Ig.exports=eR});var kg=H((P0e,Pg)=>{h();d();p();var tR=Xs();function rR(r){return tR(this.__data__,r)>-1}Pg.exports=rR});var Lg=H((D0e,Og)=>{h();d();p();var iR=Xs();function sR(r,e){var t=this.__data__,i=iR(t,r);return i<0?(++this.size,t.push([r,e])):t[i][1]=e,this}Og.exports=sR});var Ks=H((N0e,Dg)=>{h();d();p();var nR=wg(),oR=Eg(),aR=Rg(),lR=kg(),uR=Lg();function Pi(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Pi.prototype.clear=nR;Pi.prototype.delete=oR;Pi.prototype.get=aR;Pi.prototype.has=lR;Pi.prototype.set=uR;Dg.exports=Pi});var Bg=H((H0e,Fg)=>{h();d();p();var cR=Ks();function hR(){this.__data__=new cR,this.size=0}Fg.exports=hR});var Ng=H((V0e,Mg)=>{h();d();p();function dR(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}Mg.exports=dR});var jg=H((K0e,zg)=>{h();d();p();function pR(r){return this.__data__.get(r)}zg.exports=pR});var Hg=H((eve,Ug)=>{h();d();p();function fR(r){return this.__data__.has(r)}Ug.exports=fR});var kc=H((sve,Wg)=>{h();d();p();var gR=typeof window=="object"&&window&&window.Object===Object&&window;Wg.exports=gR});var Mt=H((lve,qg)=>{h();d();p();var mR=kc(),_R=typeof self=="object"&&self&&self.Object===Object&&self,yR=mR||_R||Function("return this")();qg.exports=yR});var ki=H((dve,$g)=>{h();d();p();var xR=Mt(),bR=xR.Symbol;$g.exports=bR});var Xg=H((mve,Yg)=>{h();d();p();var Vg=ki(),Gg=Object.prototype,vR=Gg.hasOwnProperty,SR=Gg.toString,Js=Vg?Vg.toStringTag:void 0;function wR(r){var e=vR.call(r,Js),t=r[Js];try{r[Js]=void 0;var i=!0}catch{}var s=SR.call(r);return i&&(e?r[Js]=t:delete r[Js]),s}Yg.exports=wR});var Jg=H((bve,Kg)=>{h();d();p();var TR=Object.prototype,CR=TR.toString;function AR(r){return CR.call(r)}Kg.exports=AR});var Oi=H((Tve,em)=>{h();d();p();var Qg=ki(),ER=Xg(),IR=Jg(),RR="[object Null]",PR="[object Undefined]",Zg=Qg?Qg.toStringTag:void 0;function kR(r){return r==null?r===void 0?PR:RR:Zg&&Zg in Object(r)?ER(r):IR(r)}em.exports=kR});var Jt=H((Ive,tm)=>{h();d();p();function OR(r){var e=typeof r;return r!=null&&(e=="object"||e=="function")}tm.exports=OR});var Oc=H((Ove,rm)=>{h();d();p();var LR=Oi(),DR=Jt(),FR="[object AsyncFunction]",BR="[object Function]",MR="[object GeneratorFunction]",NR="[object Proxy]";function zR(r){if(!DR(r))return!1;var e=LR(r);return e==BR||e==MR||e==FR||e==NR}rm.exports=zR});var sm=H((Bve,im)=>{h();d();p();var jR=Mt(),UR=jR["__core-js_shared__"];im.exports=UR});var am=H((jve,om)=>{h();d();p();var Lc=sm(),nm=function(){var r=/[^.]+$/.exec(Lc&&Lc.keys&&Lc.keys.IE_PROTO||"");return r?"Symbol(src)_1."+r:""}();function HR(r){return!!nm&&nm in r}om.exports=HR});var Dc=H((qve,lm)=>{h();d();p();var WR=Function.prototype,qR=WR.toString;function $R(r){if(r!=null){try{return qR.call(r)}catch{}try{return r+""}catch{}}return""}lm.exports=$R});var cm=H((Yve,um)=>{h();d();p();var VR=Oc(),GR=am(),YR=Jt(),XR=Dc(),KR=/[\\^$.*+?()[\]{}|]/g,JR=/^\[object .+?Constructor\]$/,QR=Function.prototype,ZR=Object.prototype,eP=QR.toString,tP=ZR.hasOwnProperty,rP=RegExp("^"+eP.call(tP).replace(KR,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function iP(r){if(!YR(r)||GR(r))return!1;var e=VR(r)?rP:JR;return e.test(XR(r))}um.exports=iP});var dm=H((Qve,hm)=>{h();d();p();function sP(r,e){return r?.[e]}hm.exports=sP});var Dr=H((rSe,pm)=>{h();d();p();var nP=cm(),oP=dm();function aP(r,e){var t=oP(r,e);return nP(t)?t:void 0}pm.exports=aP});var la=H((oSe,fm)=>{h();d();p();var lP=Dr(),uP=Mt(),cP=lP(uP,"Map");fm.exports=cP});var Qs=H((cSe,gm)=>{h();d();p();var hP=Dr(),dP=hP(Object,"create");gm.exports=dP});var ym=H((fSe,_m)=>{h();d();p();var mm=Qs();function pP(){this.__data__=mm?mm(null):{},this.size=0}_m.exports=pP});var bm=H((ySe,xm)=>{h();d();p();function fP(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}xm.exports=fP});var Sm=H((SSe,vm)=>{h();d();p();var gP=Qs(),mP="__lodash_hash_undefined__",_P=Object.prototype,yP=_P.hasOwnProperty;function xP(r){var e=this.__data__;if(gP){var t=e[r];return t===mP?void 0:t}return yP.call(e,r)?e[r]:void 0}vm.exports=xP});var Tm=H((ASe,wm)=>{h();d();p();var bP=Qs(),vP=Object.prototype,SP=vP.hasOwnProperty;function wP(r){var e=this.__data__;return bP?e[r]!==void 0:SP.call(e,r)}wm.exports=wP});var Am=H((PSe,Cm)=>{h();d();p();var TP=Qs(),CP="__lodash_hash_undefined__";function AP(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=TP&&e===void 0?CP:e,this}Cm.exports=AP});var Im=H((DSe,Em)=>{h();d();p();var EP=ym(),IP=bm(),RP=Sm(),PP=Tm(),kP=Am();function Li(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Li.prototype.clear=EP;Li.prototype.delete=IP;Li.prototype.get=RP;Li.prototype.has=PP;Li.prototype.set=kP;Em.exports=Li});var km=H((NSe,Pm)=>{h();d();p();var Rm=Im(),OP=Ks(),LP=la();function DP(){this.size=0,this.__data__={hash:new Rm,map:new(LP||OP),string:new Rm}}Pm.exports=DP});var Lm=H((HSe,Om)=>{h();d();p();function FP(r){var e=typeof r;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?r!=="__proto__":r===null}Om.exports=FP});var Zs=H((VSe,Dm)=>{h();d();p();var BP=Lm();function MP(r,e){var t=r.__data__;return BP(e)?t[typeof e=="string"?"string":"hash"]:t.map}Dm.exports=MP});var Bm=H((KSe,Fm)=>{h();d();p();var NP=Zs();function zP(r){var e=NP(this,r).delete(r);return this.size-=e?1:0,e}Fm.exports=zP});var Nm=H((ewe,Mm)=>{h();d();p();var jP=Zs();function UP(r){return jP(this,r).get(r)}Mm.exports=UP});var jm=H((swe,zm)=>{h();d();p();var HP=Zs();function WP(r){return HP(this,r).has(r)}zm.exports=WP});var Hm=H((lwe,Um)=>{h();d();p();var qP=Zs();function $P(r,e){var t=qP(this,r),i=t.size;return t.set(r,e),this.size+=t.size==i?0:1,this}Um.exports=$P});var ua=H((dwe,Wm)=>{h();d();p();var VP=km(),GP=Bm(),YP=Nm(),XP=jm(),KP=Hm();function Di(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Di.prototype.clear=VP;Di.prototype.delete=GP;Di.prototype.get=YP;Di.prototype.has=XP;Di.prototype.set=KP;Wm.exports=Di});var $m=H((mwe,qm)=>{h();d();p();var JP=Ks(),QP=la(),ZP=ua(),ek=200;function tk(r,e){var t=this.__data__;if(t instanceof JP){var i=t.__data__;if(!QP||i.length<ek-1)return i.push([r,e]),this.size=++t.size,this;t=this.__data__=new ZP(i)}return t.set(r,e),this.size=t.size,this}qm.exports=tk});var ca=H((bwe,Vm)=>{h();d();p();var rk=Ks(),ik=Bg(),sk=Ng(),nk=jg(),ok=Hg(),ak=$m();function Fi(r){var e=this.__data__=new rk(r);this.size=e.size}Fi.prototype.clear=ik;Fi.prototype.delete=sk;Fi.prototype.get=nk;Fi.prototype.has=ok;Fi.prototype.set=ak;Vm.exports=Fi});var Ym=H((Twe,Gm)=>{h();d();p();var lk="__lodash_hash_undefined__";function uk(r){return this.__data__.set(r,lk),this}Gm.exports=uk});var Km=H((Iwe,Xm)=>{h();d();p();function ck(r){return this.__data__.has(r)}Xm.exports=ck});var Fc=H((Owe,Jm)=>{h();d();p();var hk=ua(),dk=Ym(),pk=Km();function ha(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new hk;++e<t;)this.add(r[e])}ha.prototype.add=ha.prototype.push=dk;ha.prototype.has=pk;Jm.exports=ha});var Zm=H((Bwe,Qm)=>{h();d();p();function fk(r,e){for(var t=-1,i=r==null?0:r.length;++t<i;)if(e(r[t],t,r))return!0;return!1}Qm.exports=fk});var Bc=H((jwe,e_)=>{h();d();p();function gk(r,e){return r.has(e)}e_.exports=gk});var Mc=H((qwe,t_)=>{h();d();p();var mk=Fc(),_k=Zm(),yk=Bc(),xk=1,bk=2;function vk(r,e,t,i,s,n){var o=t&xk,a=r.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var u=n.get(r),c=n.get(e);if(u&&c)return u==e&&c==r;var g=-1,m=!0,y=t&bk?new mk:void 0;for(n.set(r,e),n.set(e,r);++g<a;){var b=r[g],C=e[g];if(i)var A=o?i(C,b,g,e,r,n):i(b,C,g,r,e,n);if(A!==void 0){if(A)continue;m=!1;break}if(y){if(!_k(e,function(T,R){if(!yk(y,R)&&(b===T||s(b,T,t,i,n)))return y.push(R)})){m=!1;break}}else if(!(b===C||s(b,C,t,i,n))){m=!1;break}}return n.delete(r),n.delete(e),m}t_.exports=vk});var Nc=H((Ywe,r_)=>{h();d();p();var Sk=Mt(),wk=Sk.Uint8Array;r_.exports=wk});var s_=H((Qwe,i_)=>{h();d();p();function Tk(r){var e=-1,t=Array(r.size);return r.forEach(function(i,s){t[++e]=[s,i]}),t}i_.exports=Tk});var da=H((rTe,n_)=>{h();d();p();function Ck(r){var e=-1,t=Array(r.size);return r.forEach(function(i){t[++e]=i}),t}n_.exports=Ck});var c_=H((oTe,u_)=>{h();d();p();var o_=ki(),a_=Nc(),Ak=aa(),Ek=Mc(),Ik=s_(),Rk=da(),Pk=1,kk=2,Ok="[object Boolean]",Lk="[object Date]",Dk="[object Error]",Fk="[object Map]",Bk="[object Number]",Mk="[object RegExp]",Nk="[object Set]",zk="[object String]",jk="[object Symbol]",Uk="[object ArrayBuffer]",Hk="[object DataView]",l_=o_?o_.prototype:void 0,zc=l_?l_.valueOf:void 0;function Wk(r,e,t,i,s,n,o){switch(t){case Hk:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return!1;r=r.buffer,e=e.buffer;case Uk:return!(r.byteLength!=e.byteLength||!n(new a_(r),new a_(e)));case Ok:case Lk:case Bk:return Ak(+r,+e);case Dk:return r.name==e.name&&r.message==e.message;case Mk:case zk:return r==e+"";case Fk:var a=Ik;case Nk:var l=i&Pk;if(a||(a=Rk),r.size!=e.size&&!l)return!1;var u=o.get(r);if(u)return u==e;i|=kk,o.set(r,e);var c=Ek(a(r),a(e),i,s,n,o);return o.delete(r),c;case jk:if(zc)return zc.call(r)==zc.call(e)}return!1}u_.exports=Wk});var jc=H((cTe,h_)=>{h();d();p();function qk(r,e){for(var t=-1,i=e.length,s=r.length;++t<i;)r[s+t]=e[t];return r}h_.exports=qk});var Qt=H((fTe,d_)=>{h();d();p();var $k=Array.isArray;d_.exports=$k});var Uc=H((yTe,p_)=>{h();d();p();var Vk=jc(),Gk=Qt();function Yk(r,e,t){var i=e(r);return Gk(r)?i:Vk(i,t(r))}p_.exports=Yk});var g_=H((STe,f_)=>{h();d();p();function Xk(r,e){for(var t=-1,i=r==null?0:r.length,s=0,n=[];++t<i;){var o=r[t];e(o,t,r)&&(n[s++]=o)}return n}f_.exports=Xk});var Hc=H((ATe,m_)=>{h();d();p();function Kk(){return[]}m_.exports=Kk});var pa=H((PTe,y_)=>{h();d();p();var Jk=g_(),Qk=Hc(),Zk=Object.prototype,eO=Zk.propertyIsEnumerable,__=Object.getOwnPropertySymbols,tO=__?function(r){return r==null?[]:(r=Object(r),Jk(__(r),function(e){return eO.call(r,e)}))}:Qk;y_.exports=tO});var b_=H((DTe,x_)=>{h();d();p();function rO(r,e){for(var t=-1,i=Array(r);++t<r;)i[t]=e(t);return i}x_.exports=rO});var Fr=H((NTe,v_)=>{h();d();p();function iO(r){return r!=null&&typeof r=="object"}v_.exports=iO});var w_=H((HTe,S_)=>{h();d();p();var sO=Oi(),nO=Fr(),oO="[object Arguments]";function aO(r){return nO(r)&&sO(r)==oO}S_.exports=aO});var Wc=H((VTe,A_)=>{h();d();p();var T_=w_(),lO=Fr(),C_=Object.prototype,uO=C_.hasOwnProperty,cO=C_.propertyIsEnumerable,hO=T_(function(){return arguments}())?T_:function(r){return lO(r)&&uO.call(r,"callee")&&!cO.call(r,"callee")};A_.exports=hO});var I_=H((KTe,E_)=>{h();d();p();function dO(){return!1}E_.exports=dO});var fa=H((en,Bi)=>{h();d();p();var pO=Mt(),fO=I_(),k_=typeof en=="object"&&en&&!en.nodeType&&en,R_=k_&&typeof Bi=="object"&&Bi&&!Bi.nodeType&&Bi,gO=R_&&R_.exports===k_,P_=gO?pO.Buffer:void 0,mO=P_?P_.isBuffer:void 0,_O=mO||fO;Bi.exports=_O});var ga=H((iCe,O_)=>{h();d();p();var yO=9007199254740991,xO=/^(?:0|[1-9]\d*)$/;function bO(r,e){var t=typeof r;return e=e??yO,!!e&&(t=="number"||t!="symbol"&&xO.test(r))&&r>-1&&r%1==0&&r<e}O_.exports=bO});var ma=H((aCe,L_)=>{h();d();p();var vO=9007199254740991;function SO(r){return typeof r=="number"&&r>-1&&r%1==0&&r<=vO}L_.exports=SO});var F_=H((hCe,D_)=>{h();d();p();var wO=Oi(),TO=ma(),CO=Fr(),AO="[object Arguments]",EO="[object Array]",IO="[object Boolean]",RO="[object Date]",PO="[object Error]",kO="[object Function]",OO="[object Map]",LO="[object Number]",DO="[object Object]",FO="[object RegExp]",BO="[object Set]",MO="[object String]",NO="[object WeakMap]",zO="[object ArrayBuffer]",jO="[object DataView]",UO="[object Float32Array]",HO="[object Float64Array]",WO="[object Int8Array]",qO="[object Int16Array]",$O="[object Int32Array]",VO="[object Uint8Array]",GO="[object Uint8ClampedArray]",YO="[object Uint16Array]",XO="[object Uint32Array]",Be={};Be[UO]=Be[HO]=Be[WO]=Be[qO]=Be[$O]=Be[VO]=Be[GO]=Be[YO]=Be[XO]=!0;Be[AO]=Be[EO]=Be[zO]=Be[IO]=Be[jO]=Be[RO]=Be[PO]=Be[kO]=Be[OO]=Be[LO]=Be[DO]=Be[FO]=Be[BO]=Be[MO]=Be[NO]=!1;function KO(r){return CO(r)&&TO(r.length)&&!!Be[wO(r)]}D_.exports=KO});var _a=H((gCe,B_)=>{h();d();p();function JO(r){return function(e){return r(e)}}B_.exports=JO});var ya=H((tn,Mi)=>{h();d();p();var QO=kc(),M_=typeof tn=="object"&&tn&&!tn.nodeType&&tn,rn=M_&&typeof Mi=="object"&&Mi&&!Mi.nodeType&&Mi,ZO=rn&&rn.exports===M_,qc=ZO&&QO.process,eL=function(){try{var r=rn&&rn.require&&rn.require("util").types;return r||qc&&qc.binding&&qc.binding("util")}catch{}}();Mi.exports=eL});var $c=H((SCe,j_)=>{h();d();p();var tL=F_(),rL=_a(),N_=ya(),z_=N_&&N_.isTypedArray,iL=z_?rL(z_):tL;j_.exports=iL});var Vc=H((ACe,U_)=>{h();d();p();var sL=b_(),nL=Wc(),oL=Qt(),aL=fa(),lL=ga(),uL=$c(),cL=Object.prototype,hL=cL.hasOwnProperty;function dL(r,e){var t=oL(r),i=!t&&nL(r),s=!t&&!i&&aL(r),n=!t&&!i&&!s&&uL(r),o=t||i||s||n,a=o?sL(r.length,String):[],l=a.length;for(var u in r)(e||hL.call(r,u))&&!(o&&(u=="length"||s&&(u=="offset"||u=="parent")||n&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||lL(u,l)))&&a.push(u);return a}U_.exports=dL});var xa=H((PCe,H_)=>{h();d();p();var pL=Object.prototype;function fL(r){var e=r&&r.constructor,t=typeof e=="function"&&e.prototype||pL;return r===t}H_.exports=fL});var Gc=H((DCe,W_)=>{h();d();p();function gL(r,e){return function(t){return r(e(t))}}W_.exports=gL});var $_=H((NCe,q_)=>{h();d();p();var mL=Gc(),_L=mL(Object.keys,Object);q_.exports=_L});var G_=H((HCe,V_)=>{h();d();p();var yL=xa(),xL=$_(),bL=Object.prototype,vL=bL.hasOwnProperty;function SL(r){if(!yL(r))return xL(r);var e=[];for(var t in Object(r))vL.call(r,t)&&t!="constructor"&&e.push(t);return e}V_.exports=SL});var Yc=H((VCe,Y_)=>{h();d();p();var wL=Oc(),TL=ma();function CL(r){return r!=null&&TL(r.length)&&!wL(r)}Y_.exports=CL});var sn=H((KCe,X_)=>{h();d();p();var AL=Vc(),EL=G_(),IL=Yc();function RL(r){return IL(r)?AL(r):EL(r)}X_.exports=RL});var Xc=H((e1e,K_)=>{h();d();p();var PL=Uc(),kL=pa(),OL=sn();function LL(r){return PL(r,OL,kL)}K_.exports=LL});var Z_=H((s1e,Q_)=>{h();d();p();var J_=Xc(),DL=1,FL=Object.prototype,BL=FL.hasOwnProperty;function ML(r,e,t,i,s,n){var o=t&DL,a=J_(r),l=a.length,u=J_(e),c=u.length;if(l!=c&&!o)return!1;for(var g=l;g--;){var m=a[g];if(!(o?m in e:BL.call(e,m)))return!1}var y=n.get(r),b=n.get(e);if(y&&b)return y==e&&b==r;var C=!0;n.set(r,e),n.set(e,r);for(var A=o;++g<l;){m=a[g];var T=r[m],R=e[m];if(i)var P=o?i(R,T,m,e,r,n):i(T,R,m,r,e,n);if(!(P===void 0?T===R||s(T,R,t,i,n):P)){C=!1;break}A||(A=m=="constructor")}if(C&&!A){var E=r.constructor,k=e.constructor;E!=k&&"constructor"in r&&"constructor"in e&&!(typeof E=="function"&&E instanceof E&&typeof k=="function"&&k instanceof k)&&(C=!1)}return n.delete(r),n.delete(e),C}Q_.exports=ML});var ty=H((l1e,ey)=>{h();d();p();var NL=Dr(),zL=Mt(),jL=NL(zL,"DataView");ey.exports=jL});var iy=H((d1e,ry)=>{h();d();p();var UL=Dr(),HL=Mt(),WL=UL(HL,"Promise");ry.exports=WL});var Kc=H((m1e,sy)=>{h();d();p();var qL=Dr(),$L=Mt(),VL=qL($L,"Set");sy.exports=VL});var oy=H((b1e,ny)=>{h();d();p();var GL=Dr(),YL=Mt(),XL=GL(YL,"WeakMap");ny.exports=XL});var nn=H((T1e,py)=>{h();d();p();var Jc=ty(),Qc=la(),Zc=iy(),eh=Kc(),th=oy(),dy=Oi(),Ni=Dc(),ay="[object Map]",KL="[object Object]",ly="[object Promise]",uy="[object Set]",cy="[object WeakMap]",hy="[object DataView]",JL=Ni(Jc),QL=Ni(Qc),ZL=Ni(Zc),eD=Ni(eh),tD=Ni(th),Qr=dy;(Jc&&Qr(new Jc(new ArrayBuffer(1)))!=hy||Qc&&Qr(new Qc)!=ay||Zc&&Qr(Zc.resolve())!=ly||eh&&Qr(new eh)!=uy||th&&Qr(new th)!=cy)&&(Qr=function(r){var e=dy(r),t=e==KL?r.constructor:void 0,i=t?Ni(t):"";if(i)switch(i){case JL:return hy;case QL:return ay;case ZL:return ly;case eD:return uy;case tD:return cy}return e});py.exports=Qr});var vy=H((I1e,by)=>{h();d();p();var rh=ca(),rD=Mc(),iD=c_(),sD=Z_(),fy=nn(),gy=Qt(),my=fa(),nD=$c(),oD=1,_y="[object Arguments]",yy="[object Array]",ba="[object Object]",aD=Object.prototype,xy=aD.hasOwnProperty;function lD(r,e,t,i,s,n){var o=gy(r),a=gy(e),l=o?yy:fy(r),u=a?yy:fy(e);l=l==_y?ba:l,u=u==_y?ba:u;var c=l==ba,g=u==ba,m=l==u;if(m&&my(r)){if(!my(e))return!1;o=!0,c=!1}if(m&&!c)return n||(n=new rh),o||nD(r)?rD(r,e,t,i,s,n):iD(r,e,l,t,i,s,n);if(!(t&oD)){var y=c&&xy.call(r,"__wrapped__"),b=g&&xy.call(e,"__wrapped__");if(y||b){var C=y?r.value():r,A=b?e.value():e;return n||(n=new rh),s(C,A,t,i,n)}}return m?(n||(n=new rh),sD(r,e,t,i,s,n)):!1}by.exports=lD});var ih=H((O1e,Ty)=>{h();d();p();var uD=vy(),Sy=Fr();function wy(r,e,t,i,s){return r===e?!0:r==null||e==null||!Sy(r)&&!Sy(e)?r!==r&&e!==e:uD(r,e,t,i,wy,s)}Ty.exports=wy});var Ay=H((B1e,Cy)=>{h();d();p();var cD=ca(),hD=ih(),dD=1,pD=2;function fD(r,e,t,i){var s=t.length,n=s,o=!i;if(r==null)return!n;for(r=Object(r);s--;){var a=t[s];if(o&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return!1}for(;++s<n;){a=t[s];var l=a[0],u=r[l],c=a[1];if(o&&a[2]){if(u===void 0&&!(l in r))return!1}else{var g=new cD;if(i)var m=i(u,c,l,r,e,g);if(!(m===void 0?hD(c,u,dD|pD,i,g):m))return!1}}return!0}Cy.exports=fD});var sh=H((j1e,Ey)=>{h();d();p();var gD=Jt();function mD(r){return r===r&&!gD(r)}Ey.exports=mD});var Ry=H((q1e,Iy)=>{h();d();p();var _D=sh(),yD=sn();function xD(r){for(var e=yD(r),t=e.length;t--;){var i=e[t],s=r[i];e[t]=[i,s,_D(s)]}return e}Iy.exports=xD});var nh=H((Y1e,Py)=>{h();d();p();function bD(r,e){return function(t){return t==null?!1:t[r]===e&&(e!==void 0||r in Object(t))}}Py.exports=bD});var Oy=H((Q1e,ky)=>{h();d();p();var vD=Ay(),SD=Ry(),wD=nh();function TD(r){var e=SD(r);return e.length==1&&e[0][2]?wD(e[0][0],e[0][1]):function(t){return t===r||vD(t,r,e)}}ky.exports=TD});var on=H((r2e,Ly)=>{h();d();p();var CD=Oi(),AD=Fr(),ED="[object Symbol]";function ID(r){return typeof r=="symbol"||AD(r)&&CD(r)==ED}Ly.exports=ID});var va=H((o2e,Dy)=>{h();d();p();var RD=Qt(),PD=on(),kD=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,OD=/^\w*$/;function LD(r,e){if(RD(r))return!1;var t=typeof r;return t=="number"||t=="symbol"||t=="boolean"||r==null||PD(r)?!0:OD.test(r)||!kD.test(r)||e!=null&&r in Object(e)}Dy.exports=LD});var My=H((c2e,By)=>{h();d();p();var Fy=ua(),DD="Expected a function";function oh(r,e){if(typeof r!="function"||e!=null&&typeof e!="function")throw new TypeError(DD);var t=function(){var i=arguments,s=e?e.apply(this,i):i[0],n=t.cache;if(n.has(s))return n.get(s);var o=r.apply(this,i);return t.cache=n.set(s,o)||n,o};return t.cache=new(oh.Cache||Fy),t}oh.Cache=Fy;By.exports=oh});var zy=H((f2e,Ny)=>{h();d();p();var FD=My(),BD=500;function MD(r){var e=FD(r,function(i){return t.size===BD&&t.clear(),i}),t=e.cache;return e}Ny.exports=MD});var Uy=H((y2e,jy)=>{h();d();p();var ND=zy(),zD=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,jD=/\\(\\)?/g,UD=ND(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(""),r.replace(zD,function(t,i,s,n){e.push(s?n.replace(jD,"$1"):i||t)}),e});jy.exports=UD});var Gy=H((S2e,Vy)=>{h();d();p();var Hy=ki(),HD=Pc(),WD=Qt(),qD=on(),$D=1/0,Wy=Hy?Hy.prototype:void 0,qy=Wy?Wy.toString:void 0;function $y(r){if(typeof r=="string")return r;if(WD(r))return HD(r,$y)+"";if(qD(r))return qy?qy.call(r):"";var e=r+"";return e=="0"&&1/r==-$D?"-0":e}Vy.exports=$y});var Xy=H((A2e,Yy)=>{h();d();p();var VD=Gy();function GD(r){return r==null?"":VD(r)}Yy.exports=GD});var an=H((P2e,Ky)=>{h();d();p();var YD=Qt(),XD=va(),KD=Uy(),JD=Xy();function QD(r,e){return YD(r)?r:XD(r,e)?[r]:KD(JD(r))}Ky.exports=QD});var zi=H((D2e,Jy)=>{h();d();p();var ZD=on(),eF=1/0;function tF(r){if(typeof r=="string"||ZD(r))return r;var e=r+"";return e=="0"&&1/r==-eF?"-0":e}Jy.exports=tF});var Sa=H((N2e,Qy)=>{h();d();p();var rF=an(),iF=zi();function sF(r,e){e=rF(e,r);for(var t=0,i=e.length;r!=null&&t<i;)r=r[iF(e[t++])];return t&&t==i?r:void 0}Qy.exports=sF});var ex=H((H2e,Zy)=>{h();d();p();var nF=Sa();function oF(r,e,t){var i=r==null?void 0:nF(r,e);return i===void 0?t:i}Zy.exports=oF});var rx=H((V2e,tx)=>{h();d();p();function aF(r,e){return r!=null&&e in Object(r)}tx.exports=aF});var sx=H((K2e,ix)=>{h();d();p();var lF=an(),uF=Wc(),cF=Qt(),hF=ga(),dF=ma(),pF=zi();function fF(r,e,t){e=lF(e,r);for(var i=-1,s=e.length,n=!1;++i<s;){var o=pF(e[i]);if(!(n=r!=null&&t(r,o)))break;r=r[o]}return n||++i!=s?n:(s=r==null?0:r.length,!!s&&dF(s)&&hF(o,s)&&(cF(r)||uF(r)))}ix.exports=fF});var ox=H((eAe,nx)=>{h();d();p();var gF=rx(),mF=sx();function _F(r,e){return r!=null&&mF(r,e,gF)}nx.exports=_F});var lx=H((sAe,ax)=>{h();d();p();var yF=ih(),xF=ex(),bF=ox(),vF=va(),SF=sh(),wF=nh(),TF=zi(),CF=1,AF=2;function EF(r,e){return vF(r)&&SF(e)?wF(TF(r),e):function(t){var i=xF(t,r);return i===void 0&&i===e?bF(t,r):yF(e,i,CF|AF)}}ax.exports=EF});var cx=H((lAe,ux)=>{h();d();p();function IF(r){return r}ux.exports=IF});var dx=H((dAe,hx)=>{h();d();p();function RF(r){return function(e){return e?.[r]}}hx.exports=RF});var fx=H((mAe,px)=>{h();d();p();var PF=Sa();function kF(r){return function(e){return PF(e,r)}}px.exports=kF});var mx=H((bAe,gx)=>{h();d();p();var OF=dx(),LF=fx(),DF=va(),FF=zi();function BF(r){return DF(r)?OF(FF(r)):LF(r)}gx.exports=BF});var yx=H((TAe,_x)=>{h();d();p();var MF=Oy(),NF=lx(),zF=cx(),jF=Qt(),UF=mx();function HF(r){return typeof r=="function"?r:r==null?zF:typeof r=="object"?jF(r)?NF(r[0],r[1]):MF(r):UF(r)}_x.exports=HF});var bx=H((IAe,xx)=>{h();d();p();var WF=Dr(),qF=function(){try{var r=WF(Object,"defineProperty");return r({},"",{}),r}catch{}}();xx.exports=qF});var ah=H((OAe,Sx)=>{h();d();p();var vx=bx();function $F(r,e,t){e=="__proto__"&&vx?vx(r,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):r[e]=t}Sx.exports=$F});var wa=H((BAe,wx)=>{h();d();p();var VF=ah(),GF=aa(),YF=Object.prototype,XF=YF.hasOwnProperty;function KF(r,e,t){var i=r[e];(!(XF.call(r,e)&&GF(i,t))||t===void 0&&!(e in r))&&VF(r,e,t)}wx.exports=KF});var Ax=H((jAe,Cx)=>{h();d();p();var JF=wa(),QF=an(),ZF=ga(),Tx=Jt(),eB=zi();function tB(r,e,t,i){if(!Tx(r))return r;e=QF(e,r);for(var s=-1,n=e.length,o=n-1,a=r;a!=null&&++s<n;){var l=eB(e[s]),u=t;if(l==="__proto__"||l==="constructor"||l==="prototype")return r;if(s!=o){var c=a[l];u=i?i(c,l,a):void 0,u===void 0&&(u=Tx(c)?c:ZF(e[s+1])?[]:{})}JF(a,l,u),a=a[l]}return r}Cx.exports=tB});var Ix=H((qAe,Ex)=>{h();d();p();var rB=Sa(),iB=Ax(),sB=an();function nB(r,e,t){for(var i=-1,s=e.length,n={};++i<s;){var o=e[i],a=rB(r,o);t(a,o)&&iB(n,sB(o,r),a)}return n}Ex.exports=nB});var lh=H((YAe,Rx)=>{h();d();p();var oB=Gc(),aB=oB(Object.getPrototypeOf,Object);Rx.exports=aB});var uh=H((QAe,Px)=>{h();d();p();var lB=jc(),uB=lh(),cB=pa(),hB=Hc(),dB=Object.getOwnPropertySymbols,pB=dB?function(r){for(var e=[];r;)lB(e,cB(r)),r=uB(r);return e}:hB;Px.exports=pB});var Ox=H((rEe,kx)=>{h();d();p();function fB(r){var e=[];if(r!=null)for(var t in Object(r))e.push(t);return e}kx.exports=fB});var Dx=H((oEe,Lx)=>{h();d();p();var gB=Jt(),mB=xa(),_B=Ox(),yB=Object.prototype,xB=yB.hasOwnProperty;function bB(r){if(!gB(r))return _B(r);var e=mB(r),t=[];for(var i in r)i=="constructor"&&(e||!xB.call(r,i))||t.push(i);return t}Lx.exports=bB});var Ta=H((cEe,Fx)=>{h();d();p();var vB=Vc(),SB=Dx(),wB=Yc();function TB(r){return wB(r)?vB(r,!0):SB(r)}Fx.exports=TB});var ch=H((fEe,Bx)=>{h();d();p();var CB=Uc(),AB=uh(),EB=Ta();function IB(r){return CB(r,EB,AB)}Bx.exports=IB});var Nx=H((yEe,Mx)=>{h();d();p();var RB=Pc(),PB=yx(),kB=Ix(),OB=ch();function LB(r,e){if(r==null)return{};var t=RB(OB(r),function(i){return[i]});return e=PB(e),kB(r,t,function(i,s){return e(i,s[0])})}Mx.exports=LB});var Gx=H((FEe,Vx)=>{h();d();p();function XB(r,e){for(var t=-1,i=r==null?0:r.length;++t<i&&e(r[t],t,r)!==!1;);return r}Vx.exports=XB});var ln=H((zEe,Yx)=>{h();d();p();var KB=wa(),JB=ah();function QB(r,e,t,i){var s=!t;t||(t={});for(var n=-1,o=e.length;++n<o;){var a=e[n],l=i?i(t[a],r[a],a,t,r):void 0;l===void 0&&(l=r[a]),s?JB(t,a,l):KB(t,a,l)}return t}Yx.exports=QB});var Kx=H((WEe,Xx)=>{h();d();p();var ZB=ln(),eM=sn();function tM(r,e){return r&&ZB(e,eM(e),r)}Xx.exports=tM});var Qx=H((GEe,Jx)=>{h();d();p();var rM=ln(),iM=Ta();function sM(r,e){return r&&rM(e,iM(e),r)}Jx.exports=sM});var ib=H((un,ji)=>{h();d();p();var nM=Mt(),rb=typeof un=="object"&&un&&!un.nodeType&&un,Zx=rb&&typeof ji=="object"&&ji&&!ji.nodeType&&ji,oM=Zx&&Zx.exports===rb,eb=oM?nM.Buffer:void 0,tb=eb?eb.allocUnsafe:void 0;function aM(r,e){if(e)return r.slice();var t=r.length,i=tb?tb(t):new r.constructor(t);return r.copy(i),i}ji.exports=aM});var nb=H((eIe,sb)=>{h();d();p();function lM(r,e){var t=-1,i=r.length;for(e||(e=Array(i));++t<i;)e[t]=r[t];return e}sb.exports=lM});var ab=H((sIe,ob)=>{h();d();p();var uM=ln(),cM=pa();function hM(r,e){return uM(r,cM(r),e)}ob.exports=hM});var ub=H((lIe,lb)=>{h();d();p();var dM=ln(),pM=uh();function fM(r,e){return dM(r,pM(r),e)}lb.exports=fM});var hb=H((dIe,cb)=>{h();d();p();var gM=Object.prototype,mM=gM.hasOwnProperty;function _M(r){var e=r.length,t=new r.constructor(e);return e&&typeof r[0]=="string"&&mM.call(r,"index")&&(t.index=r.index,t.input=r.input),t}cb.exports=_M});var Aa=H((mIe,pb)=>{h();d();p();var db=Nc();function yM(r){var e=new r.constructor(r.byteLength);return new db(e).set(new db(r)),e}pb.exports=yM});var gb=H((bIe,fb)=>{h();d();p();var xM=Aa();function bM(r,e){var t=e?xM(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.byteLength)}fb.exports=bM});var _b=H((TIe,mb)=>{h();d();p();var vM=/\w*$/;function SM(r){var e=new r.constructor(r.source,vM.exec(r));return e.lastIndex=r.lastIndex,e}mb.exports=SM});var Sb=H((IIe,vb)=>{h();d();p();var yb=ki(),xb=yb?yb.prototype:void 0,bb=xb?xb.valueOf:void 0;function wM(r){return bb?Object(bb.call(r)):{}}vb.exports=wM});var Tb=H((OIe,wb)=>{h();d();p();var TM=Aa();function CM(r,e){var t=e?TM(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.length)}wb.exports=CM});var Ab=H((BIe,Cb)=>{h();d();p();var AM=Aa(),EM=gb(),IM=_b(),RM=Sb(),PM=Tb(),kM="[object Boolean]",OM="[object Date]",LM="[object Map]",DM="[object Number]",FM="[object RegExp]",BM="[object Set]",MM="[object String]",NM="[object Symbol]",zM="[object ArrayBuffer]",jM="[object DataView]",UM="[object Float32Array]",HM="[object Float64Array]",WM="[object Int8Array]",qM="[object Int16Array]",$M="[object Int32Array]",VM="[object Uint8Array]",GM="[object Uint8ClampedArray]",YM="[object Uint16Array]",XM="[object Uint32Array]";function KM(r,e,t){var i=r.constructor;switch(e){case zM:return AM(r);case kM:case OM:return new i(+r);case jM:return EM(r,t);case UM:case HM:case WM:case qM:case $M:case VM:case GM:case YM:case XM:return PM(r,t);case LM:return new i;case DM:case MM:return new i(r);case FM:return IM(r);case BM:return new i;case NM:return RM(r)}}Cb.exports=KM});var Rb=H((jIe,Ib)=>{h();d();p();var JM=Jt(),Eb=Object.create,QM=function(){function r(){}return function(e){if(!JM(e))return{};if(Eb)return Eb(e);r.prototype=e;var t=new r;return r.prototype=void 0,t}}();Ib.exports=QM});var kb=H((qIe,Pb)=>{h();d();p();var ZM=Rb(),e5=lh(),t5=xa();function r5(r){return typeof r.constructor=="function"&&!t5(r)?ZM(e5(r)):{}}Pb.exports=r5});var Lb=H((YIe,Ob)=>{h();d();p();var i5=nn(),s5=Fr(),n5="[object Map]";function o5(r){return s5(r)&&i5(r)==n5}Ob.exports=o5});var Mb=H((QIe,Bb)=>{h();d();p();var a5=Lb(),l5=_a(),Db=ya(),Fb=Db&&Db.isMap,u5=Fb?l5(Fb):a5;Bb.exports=u5});var zb=H((rRe,Nb)=>{h();d();p();var c5=nn(),h5=Fr(),d5="[object Set]";function p5(r){return h5(r)&&c5(r)==d5}Nb.exports=p5});var Wb=H((oRe,Hb)=>{h();d();p();var f5=zb(),g5=_a(),jb=ya(),Ub=jb&&jb.isSet,m5=Ub?g5(Ub):f5;Hb.exports=m5});var Yb=H((cRe,Gb)=>{h();d();p();var _5=ca(),y5=Gx(),x5=wa(),b5=Kx(),v5=Qx(),S5=ib(),w5=nb(),T5=ab(),C5=ub(),A5=Xc(),E5=ch(),I5=nn(),R5=hb(),P5=Ab(),k5=kb(),O5=Qt(),L5=fa(),D5=Mb(),F5=Jt(),B5=Wb(),M5=sn(),N5=Ta(),z5=1,j5=2,U5=4,qb="[object Arguments]",H5="[object Array]",W5="[object Boolean]",q5="[object Date]",$5="[object Error]",$b="[object Function]",V5="[object GeneratorFunction]",G5="[object Map]",Y5="[object Number]",Vb="[object Object]",X5="[object RegExp]",K5="[object Set]",J5="[object String]",Q5="[object Symbol]",Z5="[object WeakMap]",eN="[object ArrayBuffer]",tN="[object DataView]",rN="[object Float32Array]",iN="[object Float64Array]",sN="[object Int8Array]",nN="[object Int16Array]",oN="[object Int32Array]",aN="[object Uint8Array]",lN="[object Uint8ClampedArray]",uN="[object Uint16Array]",cN="[object Uint32Array]",Le={};Le[qb]=Le[H5]=Le[eN]=Le[tN]=Le[W5]=Le[q5]=Le[rN]=Le[iN]=Le[sN]=Le[nN]=Le[oN]=Le[G5]=Le[Y5]=Le[Vb]=Le[X5]=Le[K5]=Le[J5]=Le[Q5]=Le[aN]=Le[lN]=Le[uN]=Le[cN]=!0;Le[$5]=Le[$b]=Le[Z5]=!1;function Ea(r,e,t,i,s,n){var o,a=e&z5,l=e&j5,u=e&U5;if(t&&(o=s?t(r,i,s,n):t(r)),o!==void 0)return o;if(!F5(r))return r;var c=O5(r);if(c){if(o=R5(r),!a)return w5(r,o)}else{var g=I5(r),m=g==$b||g==V5;if(L5(r))return S5(r,a);if(g==Vb||g==qb||m&&!s){if(o=l||m?{}:k5(r),!a)return l?C5(r,v5(o,r)):T5(r,b5(o,r))}else{if(!Le[g])return s?r:{};o=P5(r,g,a)}}n||(n=new _5);var y=n.get(r);if(y)return y;n.set(r,o),B5(r)?r.forEach(function(A){o.add(Ea(A,e,t,A,r,n))}):D5(r)&&r.forEach(function(A,T){o.set(T,Ea(A,e,t,T,r,n))});var b=u?l?E5:A5:l?N5:M5,C=c?void 0:b(r);return y5(C||r,function(A,T){C&&(T=A,A=r[T]),x5(o,T,Ea(A,e,t,T,r,n))}),o}Gb.exports=Ea});var Kb=H((fRe,Xb)=>{h();d();p();var hN=Yb(),dN=1,pN=4;function fN(r){return hN(r,dN|pN)}Xb.exports=fN});var Qb=H((yRe,Jb)=>{h();d();p();function gN(r,e,t,i){for(var s=r.length,n=t+(i?1:-1);i?n--:++n<s;)if(e(r[n],n,r))return n;return-1}Jb.exports=gN});var e0=H((SRe,Zb)=>{h();d();p();function mN(r){return r!==r}Zb.exports=mN});var r0=H((ARe,t0)=>{h();d();p();function _N(r,e,t){for(var i=t-1,s=r.length;++i<s;)if(r[i]===e)return i;return-1}t0.exports=_N});var s0=H((PRe,i0)=>{h();d();p();var yN=Qb(),xN=e0(),bN=r0();function vN(r,e,t){return e===e?bN(r,e,t):yN(r,xN,t)}i0.exports=vN});var o0=H((DRe,n0)=>{h();d();p();var SN=s0();function wN(r,e){var t=r==null?0:r.length;return!!t&&SN(r,e,0)>-1}n0.exports=wN});var l0=H((NRe,a0)=>{h();d();p();function TN(r,e,t){for(var i=-1,s=r==null?0:r.length;++i<s;)if(t(e,r[i]))return!0;return!1}a0.exports=TN});var c0=H((HRe,u0)=>{h();d();p();function CN(){}u0.exports=CN});var d0=H((VRe,h0)=>{h();d();p();var ph=Kc(),AN=c0(),EN=da(),IN=1/0,RN=ph&&1/EN(new ph([,-0]))[1]==IN?function(r){return new ph(r)}:AN;h0.exports=RN});var f0=H((KRe,p0)=>{h();d();p();var PN=Fc(),kN=o0(),ON=l0(),LN=Bc(),DN=d0(),FN=da(),BN=200;function MN(r,e,t){var i=-1,s=kN,n=r.length,o=!0,a=[],l=a;if(t)o=!1,s=ON;else if(n>=BN){var u=e?null:DN(r);if(u)return FN(u);o=!1,s=LN,l=new PN}else l=e?[]:a;e:for(;++i<n;){var c=r[i],g=e?e(c):c;if(c=t||c!==0?c:0,o&&g===g){for(var m=l.length;m--;)if(l[m]===g)continue e;e&&l.push(g),a.push(c)}else s(l,g,t)||(l!==a&&l.push(g),a.push(c))}return a}p0.exports=MN});var m0=H((ePe,g0)=>{h();d();p();var NN=f0();function zN(r){return r&&r.length?NN(r):[]}g0.exports=zN});var gh=H((_0,fh)=>{h();d();p();(function(r){if(typeof _0=="object"&&typeof fh<"u")fh.exports=r();else if(typeof define=="function"&&define.amd)define([],r);else{var e;typeof window<"u"||typeof window<"u"?e=window:typeof self<"u"?e=self:e=this,e.memoizerific=r()}})(function(){var r,e,t;return function i(s,n,o){function a(c,g){if(!n[c]){if(!s[c]){var m=typeof Ft=="function"&&Ft;if(!g&&m)return m(c,!0);if(l)return l(c,!0);var y=new Error("Cannot find module '"+c+"'");throw y.code="MODULE_NOT_FOUND",y}var b=n[c]={exports:{}};s[c][0].call(b.exports,function(C){var A=s[c][1][C];return a(A||C)},b,b.exports,i,s,n,o)}return n[c].exports}for(var l=typeof Ft=="function"&&Ft,u=0;u<o.length;u++)a(o[u]);return a}({1:[function(i,s,n){s.exports=function(o){if(typeof Map!="function"||o){var a=i("./similar");return new a}else return new Map}},{"./similar":2}],2:[function(i,s,n){function o(){return this.list=[],this.lastItem=void 0,this.size=0,this}o.prototype.get=function(a){var l;if(this.lastItem&&this.isEqual(this.lastItem.key,a))return this.lastItem.val;if(l=this.indexOf(a),l>=0)return this.lastItem=this.list[l],this.list[l].val},o.prototype.set=function(a,l){var u;return this.lastItem&&this.isEqual(this.lastItem.key,a)?(this.lastItem.val=l,this):(u=this.indexOf(a),u>=0?(this.lastItem=this.list[u],this.list[u].val=l,this):(this.lastItem={key:a,val:l},this.list.push(this.lastItem),this.size++,this))},o.prototype.delete=function(a){var l;if(this.lastItem&&this.isEqual(this.lastItem.key,a)&&(this.lastItem=void 0),l=this.indexOf(a),l>=0)return this.size--,this.list.splice(l,1)[0]},o.prototype.has=function(a){var l;return this.lastItem&&this.isEqual(this.lastItem.key,a)?!0:(l=this.indexOf(a),l>=0?(this.lastItem=this.list[l],!0):!1)},o.prototype.forEach=function(a,l){var u;for(u=0;u<this.size;u++)a.call(l||this,this.list[u].val,this.list[u].key,this)},o.prototype.indexOf=function(a){var l;for(l=0;l<this.size;l++)if(this.isEqual(this.list[l].key,a))return l;return-1},o.prototype.isEqual=function(a,l){return a===l||a!==a&&l!==l},s.exports=o},{}],3:[function(i,s,n){var o=i("map-or-similar");s.exports=function(c){var g=new o(!1),m=[];return function(y){var b=function(){var C=g,A,T,R=arguments.length-1,P=Array(R+1),E=!0,k;if((b.numArgs||b.numArgs===0)&&b.numArgs!==R+1)throw new Error("Memoizerific functions should always be called with the same number of arguments");for(k=0;k<R;k++){if(P[k]={cacheItem:C,arg:arguments[k]},C.has(arguments[k])){C=C.get(arguments[k]);continue}E=!1,A=new o(!1),C.set(arguments[k],A),C=A}return E&&(C.has(arguments[R])?T=C.get(arguments[R]):E=!1),E||(T=y.apply(null,arguments),C.set(arguments[R],T)),c>0&&(P[R]={cacheItem:C,arg:arguments[R]},E?a(m,P):m.push(P),m.length>c&&l(m.shift())),b.wasMemoized=E,b.numArgs=R+1,T};return b.limit=c,b.wasMemoized=!1,b.cache=g,b.lru=m,b}};function a(c,g){var m=c.length,y=g.length,b,C,A;for(C=0;C<m;C++){for(b=!0,A=0;A<y;A++)if(!u(c[C][A].arg,g[A].arg)){b=!1;break}if(b)break}c.push(c.splice(C,1)[0])}function l(c){var g=c.length,m=c[g-1],y,b;for(m.cacheItem.delete(m.arg),b=g-2;b>=0&&(m=c[b],y=m.cacheItem.get(m.arg),!y||!y.size);b--)m.cacheItem.delete(m.arg)}function u(c,g){return c===g||c!==c&&g!==g}},{"map-or-similar":1}]},{},[3])(3)})});var iw=H((Xa,rw)=>{h();d();p();(function(r,e){typeof Xa=="object"&&typeof rw<"u"?e(Xa):typeof define=="function"&&define.amd?define(["exports"],e):(r=typeof globalThis<"u"?globalThis:r||self,e(r.jtpp={}))})(Xa,function(r){"use strict";function e(_){return _.text!==void 0&&_.text!==""?`'${_.type}' with value '${_.text}'`:`'${_.type}'`}class t extends Error{constructor(I){super(`No parslet found for token: ${e(I)}`),this.token=I,Object.setPrototypeOf(this,t.prototype)}getToken(){return this.token}}class i extends Error{constructor(I){super(`The parsing ended early. The next token was: ${e(I)}`),this.token=I,Object.setPrototypeOf(this,i.prototype)}getToken(){return this.token}}class s extends Error{constructor(I,L){let V=`Unexpected type: '${I.type}'.`;L!==void 0&&(V+=` Message: ${L}`),super(V),Object.setPrototypeOf(this,s.prototype)}}function n(_){return I=>I.startsWith(_)?{type:_,text:_}:null}function o(_){let I=0,L,V=_[0],Z=!1;if(V!=="'"&&V!=='"')return null;for(;I<_.length;){if(I++,L=_[I],!Z&&L===V){I++;break}Z=!Z&&L==="\\"}if(L!==V)throw new Error("Unterminated String");return _.slice(0,I)}let a=new RegExp("[$_\\p{ID_Start}]|\\\\u\\p{Hex_Digit}{4}|\\\\u\\{0*(?:\\p{Hex_Digit}{1,5}|10\\p{Hex_Digit}{4})\\}","u"),l=new RegExp("[$\\-\\p{ID_Continue}\\u200C\\u200D]|\\\\u\\p{Hex_Digit}{4}|\\\\u\\{0*(?:\\p{Hex_Digit}{1,5}|10\\p{Hex_Digit}{4})\\}","u");function u(_){let I=_[0];if(!a.test(I))return null;let L=1;do{if(I=_[L],!l.test(I))break;L++}while(L<_.length);return _.slice(0,L)}let c=/^(NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity))/;function g(_){var I,L;return(L=(I=c.exec(_))===null||I===void 0?void 0:I[0])!==null&&L!==void 0?L:null}let m=_=>{let I=u(_);return I==null?null:{type:"Identifier",text:I}};function y(_){return I=>{if(!I.startsWith(_))return null;let L=I[_.length];return L!==void 0&&l.test(L)?null:{type:_,text:_}}}let b=_=>{let I=o(_);return I==null?null:{type:"StringValue",text:I}},C=_=>_.length>0?null:{type:"EOF",text:""},A=_=>{let I=g(_);return I===null?null:{type:"Number",text:I}},T=[C,n("=>"),n("("),n(")"),n("{"),n("}"),n("["),n("]"),n("|"),n("&"),n("<"),n(">"),n(","),n(";"),n("*"),n("?"),n("!"),n("="),n(":"),n("..."),n("."),n("#"),n("~"),n("/"),n("@"),y("undefined"),y("null"),y("function"),y("this"),y("new"),y("module"),y("event"),y("external"),y("typeof"),y("keyof"),y("readonly"),y("import"),y("is"),y("in"),y("asserts"),A,m,b],R=/^\s*\n\s*/;class P{static create(I){let L=this.read(I);I=L.text;let V=this.read(I);return I=V.text,new P(I,void 0,L.token,V.token)}constructor(I,L,V,Z){this.text="",this.text=I,this.previous=L,this.current=V,this.next=Z}static read(I,L=!1){L=L||R.test(I),I=I.trim();for(let V of T){let Z=V(I);if(Z!==null){let oe=Object.assign(Object.assign({},Z),{startOfLine:L});return I=I.slice(oe.text.length),{text:I,token:oe}}}throw new Error("Unexpected Token "+I)}advance(){let I=P.read(this.text);return new P(I.text,this.current,this.next,I.token)}}function E(_){if(_===void 0)throw new Error("Unexpected undefined");if(_.type==="JsdocTypeKeyValue"||_.type==="JsdocTypeParameterList"||_.type==="JsdocTypeProperty"||_.type==="JsdocTypeReadonlyProperty"||_.type==="JsdocTypeObjectField"||_.type==="JsdocTypeJsdocObjectField"||_.type==="JsdocTypeIndexSignature"||_.type==="JsdocTypeMappedType")throw new s(_);return _}function k(_){return _.type==="JsdocTypeKeyValue"?B(_):E(_)}function O(_){return _.type==="JsdocTypeName"?_:B(_)}function B(_){if(_.type!=="JsdocTypeKeyValue")throw new s(_);return _}function F(_){var I;if(_.type==="JsdocTypeVariadic"){if(((I=_.element)===null||I===void 0?void 0:I.type)==="JsdocTypeName")return _;throw new s(_)}if(_.type!=="JsdocTypeNumber"&&_.type!=="JsdocTypeName")throw new s(_);return _}function U(_){return _.type==="JsdocTypeIndexSignature"||_.type==="JsdocTypeMappedType"}var q;(function(_){_[_.ALL=0]="ALL",_[_.PARAMETER_LIST=1]="PARAMETER_LIST",_[_.OBJECT=2]="OBJECT",_[_.KEY_VALUE=3]="KEY_VALUE",_[_.INDEX_BRACKETS=4]="INDEX_BRACKETS",_[_.UNION=5]="UNION",_[_.INTERSECTION=6]="INTERSECTION",_[_.PREFIX=7]="PREFIX",_[_.INFIX=8]="INFIX",_[_.TUPLE=9]="TUPLE",_[_.SYMBOL=10]="SYMBOL",_[_.OPTIONAL=11]="OPTIONAL",_[_.NULLABLE=12]="NULLABLE",_[_.KEY_OF_TYPE_OF=13]="KEY_OF_TYPE_OF",_[_.FUNCTION=14]="FUNCTION",_[_.ARROW=15]="ARROW",_[_.ARRAY_BRACKETS=16]="ARRAY_BRACKETS",_[_.GENERIC=17]="GENERIC",_[_.NAME_PATH=18]="NAME_PATH",_[_.PARENTHESIS=19]="PARENTHESIS",_[_.SPECIAL_TYPES=20]="SPECIAL_TYPES"})(q||(q={}));class ee{constructor(I,L,V){this.grammar=I,typeof L=="string"?this._lexer=P.create(L):this._lexer=L,this.baseParser=V}get lexer(){return this._lexer}parse(){let I=this.parseType(q.ALL);if(this.lexer.current.type!=="EOF")throw new i(this.lexer.current);return I}parseType(I){return E(this.parseIntermediateType(I))}parseIntermediateType(I){let L=this.tryParslets(null,I);if(L===null)throw new t(this.lexer.current);return this.parseInfixIntermediateType(L,I)}parseInfixIntermediateType(I,L){let V=this.tryParslets(I,L);for(;V!==null;)I=V,V=this.tryParslets(I,L);return I}tryParslets(I,L){for(let V of this.grammar){let Z=V(this,L,I);if(Z!==null)return Z}return null}consume(I){return Array.isArray(I)||(I=[I]),I.includes(this.lexer.current.type)?(this._lexer=this.lexer.advance(),!0):!1}acceptLexerState(I){this._lexer=I.lexer}}function te(_){return _==="EOF"||_==="|"||_===","||_===")"||_===">"}let $=(_,I,L)=>{let V=_.lexer.current.type,Z=_.lexer.next.type;return L==null&&V==="?"&&!te(Z)||L!=null&&V==="?"?(_.consume("?"),L==null?{type:"JsdocTypeNullable",element:_.parseType(q.NULLABLE),meta:{position:"prefix"}}:{type:"JsdocTypeNullable",element:E(L),meta:{position:"suffix"}}):null};function D(_){let I=(L,V,Z)=>{let oe=L.lexer.current.type,ue=L.lexer.next.type;if(Z===null){if("parsePrefix"in _&&_.accept(oe,ue))return _.parsePrefix(L)}else if("parseInfix"in _&&_.precedence>V&&_.accept(oe,ue))return _.parseInfix(L,Z);return null};return Object.defineProperty(I,"name",{value:_.name}),I}let N=D({name:"optionalParslet",accept:_=>_==="=",precedence:q.OPTIONAL,parsePrefix:_=>(_.consume("="),{type:"JsdocTypeOptional",element:_.parseType(q.OPTIONAL),meta:{position:"prefix"}}),parseInfix:(_,I)=>(_.consume("="),{type:"JsdocTypeOptional",element:E(I),meta:{position:"suffix"}})}),G=D({name:"numberParslet",accept:_=>_==="Number",parsePrefix:_=>{let I=parseFloat(_.lexer.current.text);return _.consume("Number"),{type:"JsdocTypeNumber",value:I}}}),Q=D({name:"parenthesisParslet",accept:_=>_==="(",parsePrefix:_=>{if(_.consume("("),_.consume(")"))return{type:"JsdocTypeParameterList",elements:[]};let I=_.parseIntermediateType(q.ALL);if(!_.consume(")"))throw new Error("Unterminated parenthesis");return I.type==="JsdocTypeParameterList"?I:I.type==="JsdocTypeKeyValue"?{type:"JsdocTypeParameterList",elements:[I]}:{type:"JsdocTypeParenthesis",element:E(I)}}}),ne=D({name:"specialTypesParslet",accept:(_,I)=>_==="?"&&te(I)||_==="null"||_==="undefined"||_==="*",parsePrefix:_=>{if(_.consume("null"))return{type:"JsdocTypeNull"};if(_.consume("undefined"))return{type:"JsdocTypeUndefined"};if(_.consume("*"))return{type:"JsdocTypeAny"};if(_.consume("?"))return{type:"JsdocTypeUnknown"};throw new Error("Unacceptable token: "+_.lexer.current.text)}}),ie=D({name:"notNullableParslet",accept:_=>_==="!",precedence:q.NULLABLE,parsePrefix:_=>(_.consume("!"),{type:"JsdocTypeNotNullable",element:_.parseType(q.NULLABLE),meta:{position:"prefix"}}),parseInfix:(_,I)=>(_.consume("!"),{type:"JsdocTypeNotNullable",element:E(I),meta:{position:"suffix"}})});function re({allowTrailingComma:_}){return D({name:"parameterListParslet",accept:I=>I===",",precedence:q.PARAMETER_LIST,parseInfix:(I,L)=>{let V=[k(L)];I.consume(",");do try{let Z=I.parseIntermediateType(q.PARAMETER_LIST);V.push(k(Z))}catch(Z){if(_&&Z instanceof t)break;throw Z}while(I.consume(","));if(V.length>0&&V.slice(0,-1).some(Z=>Z.type==="JsdocTypeVariadic"))throw new Error("Only the last parameter may be a rest parameter");return{type:"JsdocTypeParameterList",elements:V}}})}let ae=D({name:"genericParslet",accept:(_,I)=>_==="<"||_==="."&&I==="<",precedence:q.GENERIC,parseInfix:(_,I)=>{let L=_.consume(".");_.consume("<");let V=[];do V.push(_.parseType(q.PARAMETER_LIST));while(_.consume(","));if(!_.consume(">"))throw new Error("Unterminated generic parameter list");return{type:"JsdocTypeGeneric",left:E(I),elements:V,meta:{brackets:"angle",dot:L}}}}),ce=D({name:"unionParslet",accept:_=>_==="|",precedence:q.UNION,parseInfix:(_,I)=>{_.consume("|");let L=[];do L.push(_.parseType(q.UNION));while(_.consume("|"));return{type:"JsdocTypeUnion",elements:[E(I),...L]}}}),Se=[$,N,G,Q,ne,ie,re({allowTrailingComma:!0}),ae,ce,N];function we({allowSquareBracketsOnAnyType:_,allowJsdocNamePaths:I,pathGrammar:L}){return function(Z,oe,ue){if(ue==null||oe>=q.NAME_PATH)return null;let Te=Z.lexer.current.type,et=Z.lexer.next.type;if(!(Te==="."&&et!=="<"||Te==="["&&(_||ue.type==="JsdocTypeName")||I&&(Te==="~"||Te==="#")))return null;let Dt,Wn=!1;Z.consume(".")?Dt="property":Z.consume("[")?(Dt="property-brackets",Wn=!0):Z.consume("~")?Dt="inner":(Z.consume("#"),Dt="instance");let lp=L!==null?new ee(L,Z.lexer,Z):Z,tr=lp.parseIntermediateType(q.NAME_PATH);Z.acceptLexerState(lp);let cs;switch(tr.type){case"JsdocTypeName":cs={type:"JsdocTypeProperty",value:tr.value,meta:{quote:void 0}};break;case"JsdocTypeNumber":cs={type:"JsdocTypeProperty",value:tr.value.toString(10),meta:{quote:void 0}};break;case"JsdocTypeStringValue":cs={type:"JsdocTypeProperty",value:tr.value,meta:{quote:tr.meta.quote}};break;case"JsdocTypeSpecialNamePath":if(tr.specialType==="event")cs=tr;else throw new s(tr,"Type 'JsdocTypeSpecialNamePath' is only allowed with specialType 'event'");break;default:throw new s(tr,"Expecting 'JsdocTypeName', 'JsdocTypeNumber', 'JsdocStringValue' or 'JsdocTypeSpecialNamePath'")}if(Wn&&!Z.consume("]")){let up=Z.lexer.current;throw new Error(`Unterminated square brackets. Next token is '${up.type}' with text '${up.text}'`)}return{type:"JsdocTypeNamePath",left:E(ue),right:cs,pathType:Dt}}}function xe({allowedAdditionalTokens:_}){return D({name:"nameParslet",accept:I=>I==="Identifier"||I==="this"||I==="new"||_.includes(I),parsePrefix:I=>{let{type:L,text:V}=I.lexer.current;return I.consume(L),{type:"JsdocTypeName",value:V}}})}let Ie=D({name:"stringValueParslet",accept:_=>_==="StringValue",parsePrefix:_=>{let I=_.lexer.current.text;return _.consume("StringValue"),{type:"JsdocTypeStringValue",value:I.slice(1,-1),meta:{quote:I[0]==="'"?"single":"double"}}}});function De({pathGrammar:_,allowedTypes:I}){return D({name:"specialNamePathParslet",accept:L=>I.includes(L),parsePrefix:L=>{let V=L.lexer.current.type;if(L.consume(V),!L.consume(":"))return{type:"JsdocTypeName",value:V};let Z,oe=L.lexer.current;if(L.consume("StringValue"))Z={type:"JsdocTypeSpecialNamePath",value:oe.text.slice(1,-1),specialType:V,meta:{quote:oe.text[0]==="'"?"single":"double"}};else{let et="",Ve=["Identifier","@","/"];for(;Ve.some(Dt=>L.consume(Dt));)et+=oe.text,oe=L.lexer.current;Z={type:"JsdocTypeSpecialNamePath",value:et,specialType:V,meta:{quote:void 0}}}let ue=new ee(_,L.lexer,L),Te=ue.parseInfixIntermediateType(Z,q.ALL);return L.acceptLexerState(ue),E(Te)}})}let nt=[xe({allowedAdditionalTokens:["external","module"]}),Ie,G,we({allowSquareBracketsOnAnyType:!1,allowJsdocNamePaths:!0,pathGrammar:null})],$e=[...nt,De({allowedTypes:["event"],pathGrammar:nt})];function Re(_){let I;if(_.type==="JsdocTypeParameterList")I=_.elements;else if(_.type==="JsdocTypeParenthesis")I=[_.element];else throw new s(_);return I.map(L=>k(L))}function ot(_){let I=Re(_);if(I.some(L=>L.type==="JsdocTypeKeyValue"))throw new Error("No parameter should be named");return I}function je({allowNamedParameters:_,allowNoReturnType:I,allowWithoutParenthesis:L,allowNewAsFunctionKeyword:V}){return D({name:"functionParslet",accept:(Z,oe)=>Z==="function"||V&&Z==="new"&&oe==="(",parsePrefix:Z=>{let oe=Z.consume("new");Z.consume("function");let ue=Z.lexer.current.type==="(";if(!ue){if(!L)throw new Error("function is missing parameter list");return{type:"JsdocTypeName",value:"function"}}let Te={type:"JsdocTypeFunction",parameters:[],arrow:!1,constructor:oe,parenthesis:ue},et=Z.parseIntermediateType(q.FUNCTION);if(_===void 0)Te.parameters=ot(et);else{if(oe&&et.type==="JsdocTypeFunction"&&et.arrow)return Te=et,Te.constructor=!0,Te;Te.parameters=Re(et);for(let Ve of Te.parameters)if(Ve.type==="JsdocTypeKeyValue"&&!_.includes(Ve.key))throw new Error(`only allowed named parameters are ${_.join(", ")} but got ${Ve.type}`)}if(Z.consume(":"))Te.returnType=Z.parseType(q.PREFIX);else if(!I)throw new Error("function is missing return type");return Te}})}function at({allowPostfix:_,allowEnclosingBrackets:I}){return D({name:"variadicParslet",accept:L=>L==="...",precedence:q.PREFIX,parsePrefix:L=>{L.consume("...");let V=I&&L.consume("[");try{let Z=L.parseType(q.PREFIX);if(V&&!L.consume("]"))throw new Error("Unterminated variadic type. Missing ']'");return{type:"JsdocTypeVariadic",element:E(Z),meta:{position:"prefix",squareBrackets:V}}}catch(Z){if(Z instanceof t){if(V)throw new Error("Empty square brackets for variadic are not allowed.");return{type:"JsdocTypeVariadic",meta:{position:void 0,squareBrackets:!1}}}else throw Z}},parseInfix:_?(L,V)=>(L.consume("..."),{type:"JsdocTypeVariadic",element:E(V),meta:{position:"suffix",squareBrackets:!1}}):void 0})}let jt=D({name:"symbolParslet",accept:_=>_==="(",precedence:q.SYMBOL,parseInfix:(_,I)=>{if(I.type!=="JsdocTypeName")throw new Error("Symbol expects a name on the left side. (Reacting on '(')");_.consume("(");let L={type:"JsdocTypeSymbol",value:I.value};if(!_.consume(")")){let V=_.parseIntermediateType(q.SYMBOL);if(L.element=F(V),!_.consume(")"))throw new Error("Symbol does not end after value")}return L}}),Ze=D({name:"arrayBracketsParslet",precedence:q.ARRAY_BRACKETS,accept:(_,I)=>_==="["&&I==="]",parseInfix:(_,I)=>(_.consume("["),_.consume("]"),{type:"JsdocTypeGeneric",left:{type:"JsdocTypeName",value:"Array"},elements:[E(I)],meta:{brackets:"square",dot:!1}})});function Ee({objectFieldGrammar:_,allowKeyTypes:I}){return D({name:"objectParslet",accept:L=>L==="{",parsePrefix:L=>{L.consume("{");let V={type:"JsdocTypeObject",meta:{separator:"comma"},elements:[]};if(!L.consume("}")){let Z,oe=new ee(_,L.lexer,L);for(;;){oe.acceptLexerState(L);let ue=oe.parseIntermediateType(q.OBJECT);L.acceptLexerState(oe),ue===void 0&&I&&(ue=L.parseIntermediateType(q.OBJECT));let Te=!1;if(ue.type==="JsdocTypeNullable"&&(Te=!0,ue=ue.element),ue.type==="JsdocTypeNumber"||ue.type==="JsdocTypeName"||ue.type==="JsdocTypeStringValue"){let Ve;ue.type==="JsdocTypeStringValue"&&(Ve=ue.meta.quote),V.elements.push({type:"JsdocTypeObjectField",key:ue.value.toString(),right:void 0,optional:Te,readonly:!1,meta:{quote:Ve}})}else if(ue.type==="JsdocTypeObjectField"||ue.type==="JsdocTypeJsdocObjectField")V.elements.push(ue);else throw new s(ue);if(L.lexer.current.startOfLine)Z="linebreak";else if(L.consume(","))Z="comma";else if(L.consume(";"))Z="semicolon";else break;if(L.lexer.current.type==="}")break}if(V.meta.separator=Z??"comma",!L.consume("}"))throw new Error("Unterminated record type. Missing '}'")}return V}})}function ze({allowSquaredProperties:_,allowKeyTypes:I,allowReadonly:L,allowOptional:V}){return D({name:"objectFieldParslet",precedence:q.KEY_VALUE,accept:Z=>Z===":",parseInfix:(Z,oe)=>{var ue;let Te=!1,et=!1;V&&oe.type==="JsdocTypeNullable"&&(Te=!0,oe=oe.element),L&&oe.type==="JsdocTypeReadonlyProperty"&&(et=!0,oe=oe.element);let Ve=(ue=Z.baseParser)!==null&&ue!==void 0?ue:Z;if(Ve.acceptLexerState(Z),oe.type==="JsdocTypeNumber"||oe.type==="JsdocTypeName"||oe.type==="JsdocTypeStringValue"||U(oe)){if(U(oe)&&!_)throw new s(oe);Ve.consume(":");let Dt;oe.type==="JsdocTypeStringValue"&&(Dt=oe.meta.quote);let Wn=Ve.parseType(q.KEY_VALUE);return Z.acceptLexerState(Ve),{type:"JsdocTypeObjectField",key:U(oe)?oe:oe.value.toString(),right:Wn,optional:Te,readonly:et,meta:{quote:Dt}}}else{if(!I)throw new s(oe);Ve.consume(":");let Dt=Ve.parseType(q.KEY_VALUE);return Z.acceptLexerState(Ve),{type:"JsdocTypeJsdocObjectField",left:E(oe),right:Dt}}}})}function Zt({allowOptional:_,allowVariadic:I}){return D({name:"keyValueParslet",precedence:q.KEY_VALUE,accept:L=>L===":",parseInfix:(L,V)=>{let Z=!1,oe=!1;if(_&&V.type==="JsdocTypeNullable"&&(Z=!0,V=V.element),I&&V.type==="JsdocTypeVariadic"&&V.element!==void 0&&(oe=!0,V=V.element),V.type!=="JsdocTypeName")throw new s(V);L.consume(":");let ue=L.parseType(q.KEY_VALUE);return{type:"JsdocTypeKeyValue",key:V.value,right:ue,optional:Z,variadic:oe}}})}let yr=[...Se,je({allowWithoutParenthesis:!0,allowNamedParameters:["this","new"],allowNoReturnType:!0,allowNewAsFunctionKeyword:!1}),Ie,De({allowedTypes:["module","external","event"],pathGrammar:$e}),at({allowEnclosingBrackets:!0,allowPostfix:!0}),xe({allowedAdditionalTokens:["keyof"]}),jt,Ze,we({allowSquareBracketsOnAnyType:!1,allowJsdocNamePaths:!0,pathGrammar:$e})],li=[...yr,Ee({objectFieldGrammar:[xe({allowedAdditionalTokens:["module","in"]}),ze({allowSquaredProperties:!1,allowKeyTypes:!0,allowOptional:!1,allowReadonly:!1}),...yr],allowKeyTypes:!0}),Zt({allowOptional:!0,allowVariadic:!0})],ss=D({name:"typeOfParslet",accept:_=>_==="typeof",parsePrefix:_=>(_.consume("typeof"),{type:"JsdocTypeTypeof",element:E(_.parseType(q.KEY_OF_TYPE_OF))})}),Ln=[xe({allowedAdditionalTokens:["module","keyof","event","external","in"]}),$,N,Ie,G,ze({allowSquaredProperties:!1,allowKeyTypes:!1,allowOptional:!1,allowReadonly:!1})],Dn=[...Se,Ee({allowKeyTypes:!1,objectFieldGrammar:Ln}),xe({allowedAdditionalTokens:["event","external","in"]}),ss,je({allowWithoutParenthesis:!1,allowNamedParameters:["this","new"],allowNoReturnType:!0,allowNewAsFunctionKeyword:!1}),at({allowEnclosingBrackets:!1,allowPostfix:!1}),xe({allowedAdditionalTokens:["keyof"]}),De({allowedTypes:["module"],pathGrammar:$e}),we({allowSquareBracketsOnAnyType:!1,allowJsdocNamePaths:!0,pathGrammar:$e}),Zt({allowOptional:!1,allowVariadic:!1}),jt],Fn=D({name:"assertsParslet",accept:_=>_==="asserts",parsePrefix:_=>{_.consume("asserts");let I=_.parseIntermediateType(q.SYMBOL);if(I.type!=="JsdocTypeName")throw new s(I,"A typescript asserts always has to have a name on the left side.");return _.consume("is"),{type:"JsdocTypeAsserts",left:I,right:E(_.parseIntermediateType(q.INFIX))}}});function Bn({allowQuestionMark:_}){return D({name:"tupleParslet",accept:I=>I==="[",parsePrefix:I=>{I.consume("[");let L={type:"JsdocTypeTuple",elements:[]};if(I.consume("]"))return L;let V=I.parseIntermediateType(q.ALL);if(V.type==="JsdocTypeParameterList"?V.elements[0].type==="JsdocTypeKeyValue"?L.elements=V.elements.map(B):L.elements=V.elements.map(E):V.type==="JsdocTypeKeyValue"?L.elements=[B(V)]:L.elements=[E(V)],!I.consume("]"))throw new Error("Unterminated '['");if(!_&&L.elements.some(Z=>Z.type==="JsdocTypeUnknown"))throw new Error("Question mark in tuple not allowed");return L}})}let ns=D({name:"keyOfParslet",accept:_=>_==="keyof",parsePrefix:_=>(_.consume("keyof"),{type:"JsdocTypeKeyof",element:E(_.parseType(q.KEY_OF_TYPE_OF))})}),Mn=D({name:"importParslet",accept:_=>_==="import",parsePrefix:_=>{if(_.consume("import"),!_.consume("("))throw new Error("Missing parenthesis after import keyword");let I=_.parseType(q.PREFIX);if(I.type!=="JsdocTypeStringValue")throw new Error("Only string values are allowed as paths for imports");if(!_.consume(")"))throw new Error("Missing closing parenthesis after import keyword");return{type:"JsdocTypeImport",element:I}}}),xr=D({name:"readonlyPropertyParslet",accept:_=>_==="readonly",parsePrefix:_=>(_.consume("readonly"),{type:"JsdocTypeReadonlyProperty",element:_.parseType(q.KEY_VALUE)})}),ui=D({name:"arrowFunctionParslet",precedence:q.ARROW,accept:_=>_==="=>",parseInfix:(_,I)=>(_.consume("=>"),{type:"JsdocTypeFunction",parameters:Re(I).map(O),arrow:!0,constructor:!1,parenthesis:!0,returnType:_.parseType(q.OBJECT)})}),os=D({name:"intersectionParslet",accept:_=>_==="&",precedence:q.INTERSECTION,parseInfix:(_,I)=>{_.consume("&");let L=[];do L.push(_.parseType(q.INTERSECTION));while(_.consume("&"));return{type:"JsdocTypeIntersection",elements:[E(I),...L]}}}),Nn=D({name:"predicateParslet",precedence:q.INFIX,accept:_=>_==="is",parseInfix:(_,I)=>{if(I.type!=="JsdocTypeName")throw new s(I,"A typescript predicate always has to have a name on the left side.");return _.consume("is"),{type:"JsdocTypePredicate",left:I,right:E(_.parseIntermediateType(q.INFIX))}}}),zn=D({name:"objectSquareBracketPropertyParslet",accept:_=>_==="[",parsePrefix:_=>{if(_.baseParser===void 0)throw new Error("Only allowed inside object grammar");_.consume("[");let I=_.lexer.current.text;_.consume("Identifier");let L;if(_.consume(":")){let V=_.baseParser;V.acceptLexerState(_),L={type:"JsdocTypeIndexSignature",key:I,right:V.parseType(q.INDEX_BRACKETS)},_.acceptLexerState(V)}else if(_.consume("in")){let V=_.baseParser;V.acceptLexerState(_),L={type:"JsdocTypeMappedType",key:I,right:V.parseType(q.ARRAY_BRACKETS)},_.acceptLexerState(V)}else throw new Error("Missing ':' or 'in' inside square bracketed property.");if(!_.consume("]"))throw new Error("Unterminated square brackets");return L}}),ci=[xr,xe({allowedAdditionalTokens:["module","event","keyof","event","external","in"]}),$,N,Ie,G,ze({allowSquaredProperties:!0,allowKeyTypes:!1,allowOptional:!0,allowReadonly:!0}),zn],Wr=[...Se,Ee({allowKeyTypes:!1,objectFieldGrammar:ci}),ss,ns,Mn,Ie,je({allowWithoutParenthesis:!0,allowNoReturnType:!1,allowNamedParameters:["this","new","args"],allowNewAsFunctionKeyword:!0}),Bn({allowQuestionMark:!1}),at({allowEnclosingBrackets:!1,allowPostfix:!1}),Fn,xe({allowedAdditionalTokens:["event","external","in"]}),De({allowedTypes:["module"],pathGrammar:$e}),Ze,ui,we({allowSquareBracketsOnAnyType:!0,allowJsdocNamePaths:!1,pathGrammar:$e}),os,Nn,Zt({allowVariadic:!0,allowOptional:!0})];function W(_,I){switch(I){case"closure":return new ee(Dn,_).parse();case"jsdoc":return new ee(li,_).parse();case"typescript":return new ee(Wr,_).parse()}}function Y(_,I=["typescript","closure","jsdoc"]){let L;for(let V of I)try{return W(_,V)}catch(Z){L=Z}throw L}function _e(_,I){let L=_[I.type];if(L===void 0)throw new Error(`In this set of transform rules exists no rule for type ${I.type}.`);return L(I,V=>_e(_,V))}function de(_){throw new Error("This transform is not available. Are you trying the correct parsing mode?")}function Me(_){let I={params:[]};for(let L of _.parameters)L.type==="JsdocTypeKeyValue"?L.key==="this"?I.this=L.right:L.key==="new"?I.new=L.right:I.params.push(L):I.params.push(L);return I}function ge(_,I,L){return _==="prefix"?L+I:I+L}function lt(_,I){switch(I){case"double":return`"${_}"`;case"single":return`'${_}'`;case void 0:return _}}function Wt(){return{JsdocTypeParenthesis:(_,I)=>`(${_.element!==void 0?I(_.element):""})`,JsdocTypeKeyof:(_,I)=>`keyof ${I(_.element)}`,JsdocTypeFunction:(_,I)=>{if(_.arrow){if(_.returnType===void 0)throw new Error("Arrow function needs a return type.");let L=`(${_.parameters.map(I).join(", ")}) => ${I(_.returnType)}`;return _.constructor&&(L="new "+L),L}else{let L=_.constructor?"new":"function";return _.parenthesis&&(L+=`(${_.parameters.map(I).join(", ")})`,_.returnType!==void 0&&(L+=`: ${I(_.returnType)}`)),L}},JsdocTypeName:_=>_.value,JsdocTypeTuple:(_,I)=>`[${_.elements.map(I).join(", ")}]`,JsdocTypeVariadic:(_,I)=>_.meta.position===void 0?"...":ge(_.meta.position,I(_.element),"..."),JsdocTypeNamePath:(_,I)=>{let L=I(_.left),V=I(_.right);switch(_.pathType){case"inner":return`${L}~${V}`;case"instance":return`${L}#${V}`;case"property":return`${L}.${V}`;case"property-brackets":return`${L}[${V}]`}},JsdocTypeStringValue:_=>lt(_.value,_.meta.quote),JsdocTypeAny:()=>"*",JsdocTypeGeneric:(_,I)=>{if(_.meta.brackets==="square"){let L=_.elements[0],V=I(L);return L.type==="JsdocTypeUnion"||L.type==="JsdocTypeIntersection"?`(${V})[]`:`${V}[]`}else return`${I(_.left)}${_.meta.dot?".":""}<${_.elements.map(I).join(", ")}>`},JsdocTypeImport:(_,I)=>`import(${I(_.element)})`,JsdocTypeObjectField:(_,I)=>{let L="";return _.readonly&&(L+="readonly "),typeof _.key=="string"?L+=lt(_.key,_.meta.quote):L+=I(_.key),_.optional&&(L+="?"),_.right===void 0?L:L+`: ${I(_.right)}`},JsdocTypeJsdocObjectField:(_,I)=>`${I(_.left)}: ${I(_.right)}`,JsdocTypeKeyValue:(_,I)=>{let L=_.key;return _.optional&&(L+="?"),_.variadic&&(L="..."+L),_.right===void 0?L:L+`: ${I(_.right)}`},JsdocTypeSpecialNamePath:_=>`${_.specialType}:${lt(_.value,_.meta.quote)}`,JsdocTypeNotNullable:(_,I)=>ge(_.meta.position,I(_.element),"!"),JsdocTypeNull:()=>"null",JsdocTypeNullable:(_,I)=>ge(_.meta.position,I(_.element),"?"),JsdocTypeNumber:_=>_.value.toString(),JsdocTypeObject:(_,I)=>`{${_.elements.map(I).join((_.meta.separator==="comma"?",":";")+" ")}}`,JsdocTypeOptional:(_,I)=>ge(_.meta.position,I(_.element),"="),JsdocTypeSymbol:(_,I)=>`${_.value}(${_.element!==void 0?I(_.element):""})`,JsdocTypeTypeof:(_,I)=>`typeof ${I(_.element)}`,JsdocTypeUndefined:()=>"undefined",JsdocTypeUnion:(_,I)=>_.elements.map(I).join(" | "),JsdocTypeUnknown:()=>"?",JsdocTypeIntersection:(_,I)=>_.elements.map(I).join(" & "),JsdocTypeProperty:_=>lt(_.value,_.meta.quote),JsdocTypePredicate:(_,I)=>`${I(_.left)} is ${I(_.right)}`,JsdocTypeIndexSignature:(_,I)=>`[${_.key}: ${I(_.right)}]`,JsdocTypeMappedType:(_,I)=>`[${_.key} in ${I(_.right)}]`,JsdocTypeAsserts:(_,I)=>`asserts ${I(_.left)} is ${I(_.right)}`}}let gt=Wt();function qt(_){return _e(gt,_)}let as=["null","true","false","break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","yield"];function mt(_){let I={type:"NameExpression",name:_};return as.includes(_)&&(I.reservedWord=!0),I}let vt={JsdocTypeOptional:(_,I)=>{let L=I(_.element);return L.optional=!0,L},JsdocTypeNullable:(_,I)=>{let L=I(_.element);return L.nullable=!0,L},JsdocTypeNotNullable:(_,I)=>{let L=I(_.element);return L.nullable=!1,L},JsdocTypeVariadic:(_,I)=>{if(_.element===void 0)throw new Error("dots without value are not allowed in catharsis mode");let L=I(_.element);return L.repeatable=!0,L},JsdocTypeAny:()=>({type:"AllLiteral"}),JsdocTypeNull:()=>({type:"NullLiteral"}),JsdocTypeStringValue:_=>mt(lt(_.value,_.meta.quote)),JsdocTypeUndefined:()=>({type:"UndefinedLiteral"}),JsdocTypeUnknown:()=>({type:"UnknownLiteral"}),JsdocTypeFunction:(_,I)=>{let L=Me(_),V={type:"FunctionType",params:L.params.map(I)};return L.this!==void 0&&(V.this=I(L.this)),L.new!==void 0&&(V.new=I(L.new)),_.returnType!==void 0&&(V.result=I(_.returnType)),V},JsdocTypeGeneric:(_,I)=>({type:"TypeApplication",applications:_.elements.map(L=>I(L)),expression:I(_.left)}),JsdocTypeSpecialNamePath:_=>mt(_.specialType+":"+lt(_.value,_.meta.quote)),JsdocTypeName:_=>_.value!=="function"?mt(_.value):{type:"FunctionType",params:[]},JsdocTypeNumber:_=>mt(_.value.toString()),JsdocTypeObject:(_,I)=>{let L={type:"RecordType",fields:[]};for(let V of _.elements)V.type!=="JsdocTypeObjectField"&&V.type!=="JsdocTypeJsdocObjectField"?L.fields.push({type:"FieldType",key:I(V),value:void 0}):L.fields.push(I(V));return L},JsdocTypeObjectField:(_,I)=>{if(typeof _.key!="string")throw new Error("Index signatures and mapped types are not supported");return{type:"FieldType",key:mt(lt(_.key,_.meta.quote)),value:_.right===void 0?void 0:I(_.right)}},JsdocTypeJsdocObjectField:(_,I)=>({type:"FieldType",key:I(_.left),value:I(_.right)}),JsdocTypeUnion:(_,I)=>({type:"TypeUnion",elements:_.elements.map(L=>I(L))}),JsdocTypeKeyValue:(_,I)=>({type:"FieldType",key:mt(_.key),value:_.right===void 0?void 0:I(_.right)}),JsdocTypeNamePath:(_,I)=>{let L=I(_.left),V;_.right.type==="JsdocTypeSpecialNamePath"?V=I(_.right).name:V=lt(_.right.value,_.right.meta.quote);let Z=_.pathType==="inner"?"~":_.pathType==="instance"?"#":".";return mt(`${L.name}${Z}${V}`)},JsdocTypeSymbol:_=>{let I="",L=_.element,V=!1;return L?.type==="JsdocTypeVariadic"&&(L.meta.position==="prefix"?I="...":V=!0,L=L.element),L?.type==="JsdocTypeName"?I+=L.value:L?.type==="JsdocTypeNumber"&&(I+=L.value.toString()),V&&(I+="..."),mt(`${_.value}(${I})`)},JsdocTypeParenthesis:(_,I)=>I(E(_.element)),JsdocTypeMappedType:de,JsdocTypeIndexSignature:de,JsdocTypeImport:de,JsdocTypeKeyof:de,JsdocTypeTuple:de,JsdocTypeTypeof:de,JsdocTypeIntersection:de,JsdocTypeProperty:de,JsdocTypePredicate:de,JsdocTypeAsserts:de};function jn(_){return _e(vt,_)}function $t(_){switch(_){case void 0:return"none";case"single":return"single";case"double":return"double"}}function Un(_){switch(_){case"inner":return"INNER_MEMBER";case"instance":return"INSTANCE_MEMBER";case"property":return"MEMBER";case"property-brackets":return"MEMBER"}}function er(_,I){return I.length===2?{type:_,left:I[0],right:I[1]}:{type:_,left:I[0],right:er(_,I.slice(1))}}let ls={JsdocTypeOptional:(_,I)=>({type:"OPTIONAL",value:I(_.element),meta:{syntax:_.meta.position==="prefix"?"PREFIX_EQUAL_SIGN":"SUFFIX_EQUALS_SIGN"}}),JsdocTypeNullable:(_,I)=>({type:"NULLABLE",value:I(_.element),meta:{syntax:_.meta.position==="prefix"?"PREFIX_QUESTION_MARK":"SUFFIX_QUESTION_MARK"}}),JsdocTypeNotNullable:(_,I)=>({type:"NOT_NULLABLE",value:I(_.element),meta:{syntax:_.meta.position==="prefix"?"PREFIX_BANG":"SUFFIX_BANG"}}),JsdocTypeVariadic:(_,I)=>{let L={type:"VARIADIC",meta:{syntax:_.meta.position==="prefix"?"PREFIX_DOTS":_.meta.position==="suffix"?"SUFFIX_DOTS":"ONLY_DOTS"}};return _.element!==void 0&&(L.value=I(_.element)),L},JsdocTypeName:_=>({type:"NAME",name:_.value}),JsdocTypeTypeof:(_,I)=>({type:"TYPE_QUERY",name:I(_.element)}),JsdocTypeTuple:(_,I)=>({type:"TUPLE",entries:_.elements.map(I)}),JsdocTypeKeyof:(_,I)=>({type:"KEY_QUERY",value:I(_.element)}),JsdocTypeImport:_=>({type:"IMPORT",path:{type:"STRING_VALUE",quoteStyle:$t(_.element.meta.quote),string:_.element.value}}),JsdocTypeUndefined:()=>({type:"NAME",name:"undefined"}),JsdocTypeAny:()=>({type:"ANY"}),JsdocTypeFunction:(_,I)=>{let L=Me(_),V={type:_.arrow?"ARROW":"FUNCTION",params:L.params.map(Z=>{if(Z.type==="JsdocTypeKeyValue"){if(Z.right===void 0)throw new Error("Function parameter without ':' is not expected to be 'KEY_VALUE'");return{type:"NAMED_PARAMETER",name:Z.key,typeName:I(Z.right)}}else return I(Z)}),new:null,returns:null};return L.this!==void 0?V.this=I(L.this):_.arrow||(V.this=null),L.new!==void 0&&(V.new=I(L.new)),_.returnType!==void 0&&(V.returns=I(_.returnType)),V},JsdocTypeGeneric:(_,I)=>{let L={type:"GENERIC",subject:I(_.left),objects:_.elements.map(I),meta:{syntax:_.meta.brackets==="square"?"SQUARE_BRACKET":_.meta.dot?"ANGLE_BRACKET_WITH_DOT":"ANGLE_BRACKET"}};return _.meta.brackets==="square"&&_.elements[0].type==="JsdocTypeFunction"&&!_.elements[0].parenthesis&&(L.objects[0]={type:"NAME",name:"function"}),L},JsdocTypeObjectField:(_,I)=>{if(typeof _.key!="string")throw new Error("Index signatures and mapped types are not supported");if(_.right===void 0)return{type:"RECORD_ENTRY",key:_.key,quoteStyle:$t(_.meta.quote),value:null,readonly:!1};let L=I(_.right);return _.optional&&(L={type:"OPTIONAL",value:L,meta:{syntax:"SUFFIX_KEY_QUESTION_MARK"}}),{type:"RECORD_ENTRY",key:_.key.toString(),quoteStyle:$t(_.meta.quote),value:L,readonly:!1}},JsdocTypeJsdocObjectField:()=>{throw new Error("Keys may not be typed in jsdoctypeparser.")},JsdocTypeKeyValue:(_,I)=>{if(_.right===void 0)return{type:"RECORD_ENTRY",key:_.key,quoteStyle:"none",value:null,readonly:!1};let L=I(_.right);return _.optional&&(L={type:"OPTIONAL",value:L,meta:{syntax:"SUFFIX_KEY_QUESTION_MARK"}}),{type:"RECORD_ENTRY",key:_.key,quoteStyle:"none",value:L,readonly:!1}},JsdocTypeObject:(_,I)=>{let L=[];for(let V of _.elements)(V.type==="JsdocTypeObjectField"||V.type==="JsdocTypeJsdocObjectField")&&L.push(I(V));return{type:"RECORD",entries:L}},JsdocTypeSpecialNamePath:_=>{if(_.specialType!=="module")throw new Error(`jsdoctypeparser does not support type ${_.specialType} at this point.`);return{type:"MODULE",value:{type:"FILE_PATH",quoteStyle:$t(_.meta.quote),path:_.value}}},JsdocTypeNamePath:(_,I)=>{let L=!1,V,Z;_.right.type==="JsdocTypeSpecialNamePath"&&_.right.specialType==="event"?(L=!0,V=_.right.value,Z=$t(_.right.meta.quote)):(V=_.right.value,Z=$t(_.right.meta.quote));let oe={type:Un(_.pathType),owner:I(_.left),name:V,quoteStyle:Z,hasEventPrefix:L};if(oe.owner.type==="MODULE"){let ue=oe.owner;return oe.owner=oe.owner.value,ue.value=oe,ue}else return oe},JsdocTypeUnion:(_,I)=>er("UNION",_.elements.map(I)),JsdocTypeParenthesis:(_,I)=>({type:"PARENTHESIS",value:I(E(_.element))}),JsdocTypeNull:()=>({type:"NAME",name:"null"}),JsdocTypeUnknown:()=>({type:"UNKNOWN"}),JsdocTypeStringValue:_=>({type:"STRING_VALUE",quoteStyle:$t(_.meta.quote),string:_.value}),JsdocTypeIntersection:(_,I)=>er("INTERSECTION",_.elements.map(I)),JsdocTypeNumber:_=>({type:"NUMBER_VALUE",number:_.value.toString()}),JsdocTypeSymbol:de,JsdocTypeProperty:de,JsdocTypePredicate:de,JsdocTypeMappedType:de,JsdocTypeIndexSignature:de,JsdocTypeAsserts:de};function hi(_){return _e(ls,_)}function us(){return{JsdocTypeIntersection:(_,I)=>({type:"JsdocTypeIntersection",elements:_.elements.map(I)}),JsdocTypeGeneric:(_,I)=>({type:"JsdocTypeGeneric",left:I(_.left),elements:_.elements.map(I),meta:{dot:_.meta.dot,brackets:_.meta.brackets}}),JsdocTypeNullable:_=>_,JsdocTypeUnion:(_,I)=>({type:"JsdocTypeUnion",elements:_.elements.map(I)}),JsdocTypeUnknown:_=>_,JsdocTypeUndefined:_=>_,JsdocTypeTypeof:(_,I)=>({type:"JsdocTypeTypeof",element:I(_.element)}),JsdocTypeSymbol:(_,I)=>{let L={type:"JsdocTypeSymbol",value:_.value};return _.element!==void 0&&(L.element=I(_.element)),L},JsdocTypeOptional:(_,I)=>({type:"JsdocTypeOptional",element:I(_.element),meta:{position:_.meta.position}}),JsdocTypeObject:(_,I)=>({type:"JsdocTypeObject",meta:{separator:"comma"},elements:_.elements.map(I)}),JsdocTypeNumber:_=>_,JsdocTypeNull:_=>_,JsdocTypeNotNullable:(_,I)=>({type:"JsdocTypeNotNullable",element:I(_.element),meta:{position:_.meta.position}}),JsdocTypeSpecialNamePath:_=>_,JsdocTypeObjectField:(_,I)=>({type:"JsdocTypeObjectField",key:_.key,right:_.right===void 0?void 0:I(_.right),optional:_.optional,readonly:_.readonly,meta:_.meta}),JsdocTypeJsdocObjectField:(_,I)=>({type:"JsdocTypeJsdocObjectField",left:I(_.left),right:I(_.right)}),JsdocTypeKeyValue:(_,I)=>({type:"JsdocTypeKeyValue",key:_.key,right:_.right===void 0?void 0:I(_.right),optional:_.optional,variadic:_.variadic}),JsdocTypeImport:(_,I)=>({type:"JsdocTypeImport",element:I(_.element)}),JsdocTypeAny:_=>_,JsdocTypeStringValue:_=>_,JsdocTypeNamePath:_=>_,JsdocTypeVariadic:(_,I)=>{let L={type:"JsdocTypeVariadic",meta:{position:_.meta.position,squareBrackets:_.meta.squareBrackets}};return _.element!==void 0&&(L.element=I(_.element)),L},JsdocTypeTuple:(_,I)=>({type:"JsdocTypeTuple",elements:_.elements.map(I)}),JsdocTypeName:_=>_,JsdocTypeFunction:(_,I)=>{let L={type:"JsdocTypeFunction",arrow:_.arrow,parameters:_.parameters.map(I),constructor:_.constructor,parenthesis:_.parenthesis};return _.returnType!==void 0&&(L.returnType=I(_.returnType)),L},JsdocTypeKeyof:(_,I)=>({type:"JsdocTypeKeyof",element:I(_.element)}),JsdocTypeParenthesis:(_,I)=>({type:"JsdocTypeParenthesis",element:I(_.element)}),JsdocTypeProperty:_=>_,JsdocTypePredicate:(_,I)=>({type:"JsdocTypePredicate",left:I(_.left),right:I(_.right)}),JsdocTypeIndexSignature:(_,I)=>({type:"JsdocTypeIndexSignature",key:_.key,right:I(_.right)}),JsdocTypeMappedType:(_,I)=>({type:"JsdocTypeMappedType",key:_.key,right:I(_.right)}),JsdocTypeAsserts:(_,I)=>({type:"JsdocTypeAsserts",left:I(_.left),right:I(_.right)})}}let di={JsdocTypeAny:[],JsdocTypeFunction:["parameters","returnType"],JsdocTypeGeneric:["left","elements"],JsdocTypeImport:[],JsdocTypeIndexSignature:["right"],JsdocTypeIntersection:["elements"],JsdocTypeKeyof:["element"],JsdocTypeKeyValue:["right"],JsdocTypeMappedType:["right"],JsdocTypeName:[],JsdocTypeNamePath:["left","right"],JsdocTypeNotNullable:["element"],JsdocTypeNull:[],JsdocTypeNullable:["element"],JsdocTypeNumber:[],JsdocTypeObject:["elements"],JsdocTypeObjectField:["right"],JsdocTypeJsdocObjectField:["left","right"],JsdocTypeOptional:["element"],JsdocTypeParenthesis:["element"],JsdocTypeSpecialNamePath:[],JsdocTypeStringValue:[],JsdocTypeSymbol:["element"],JsdocTypeTuple:["elements"],JsdocTypeTypeof:["element"],JsdocTypeUndefined:[],JsdocTypeUnion:["elements"],JsdocTypeUnknown:[],JsdocTypeVariadic:["element"],JsdocTypeProperty:[],JsdocTypePredicate:["left","right"],JsdocTypeAsserts:["left","right"]};function pi(_,I,L,V,Z){V?.(_,I,L);let oe=di[_.type];for(let ue of oe){let Te=_[ue];if(Te!==void 0)if(Array.isArray(Te))for(let et of Te)pi(et,_,ue,V,Z);else pi(Te,_,ue,V,Z)}Z?.(_,I,L)}function Hn(_,I,L){pi(_,void 0,void 0,I,L)}r.catharsisTransform=jn,r.identityTransformRules=us,r.jtpTransform=hi,r.parse=W,r.stringify=qt,r.stringifyRules=Wt,r.transform=_e,r.traverse=Hn,r.tryParse=Y,r.visitorKeys=di})});var BT=H((vLe,FT)=>{"use strict";h();d();p();FT.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var jd=H((CLe,NT)=>{h();d();p();var Pn=BT(),MT={};for(let r of Object.keys(Pn))MT[Pn[r]]=r;var se={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};NT.exports=se;for(let r of Object.keys(se)){if(!("channels"in se[r]))throw new Error("missing channels property: "+r);if(!("labels"in se[r]))throw new Error("missing channel labels property: "+r);if(se[r].labels.length!==se[r].channels)throw new Error("channel and label counts mismatch: "+r);let{channels:e,labels:t}=se[r];delete se[r].channels,delete se[r].labels,Object.defineProperty(se[r],"channels",{value:e}),Object.defineProperty(se[r],"labels",{value:t})}se.rgb.hsl=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,s=Math.min(e,t,i),n=Math.max(e,t,i),o=n-s,a,l;n===s?a=0:e===n?a=(t-i)/o:t===n?a=2+(i-e)/o:i===n&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let u=(s+n)/2;return n===s?l=0:u<=.5?l=o/(n+s):l=o/(2-n-s),[a,l*100,u*100]};se.rgb.hsv=function(r){let e,t,i,s,n,o=r[0]/255,a=r[1]/255,l=r[2]/255,u=Math.max(o,a,l),c=u-Math.min(o,a,l),g=function(m){return(u-m)/6/c+1/2};return c===0?(s=0,n=0):(n=c/u,e=g(o),t=g(a),i=g(l),o===u?s=i-t:a===u?s=1/3+e-i:l===u&&(s=2/3+t-e),s<0?s+=1:s>1&&(s-=1)),[s*360,n*100,u*100]};se.rgb.hwb=function(r){let e=r[0],t=r[1],i=r[2],s=se.rgb.hsl(r)[0],n=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[s,n*100,i*100]};se.rgb.cmyk=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,s=Math.min(1-e,1-t,1-i),n=(1-e-s)/(1-s)||0,o=(1-t-s)/(1-s)||0,a=(1-i-s)/(1-s)||0;return[n*100,o*100,a*100,s*100]};function Cq(r,e){return(r[0]-e[0])**2+(r[1]-e[1])**2+(r[2]-e[2])**2}se.rgb.keyword=function(r){let e=MT[r];if(e)return e;let t=1/0,i;for(let s of Object.keys(Pn)){let n=Pn[s],o=Cq(r,n);o<t&&(t=o,i=s)}return i};se.keyword.rgb=function(r){return Pn[r]};se.rgb.xyz=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let s=e*.4124+t*.3576+i*.1805,n=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[s*100,n*100,o*100]};se.rgb.lab=function(r){let e=se.rgb.xyz(r),t=e[0],i=e[1],s=e[2];t/=95.047,i/=100,s/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,s=s>.008856?s**(1/3):7.787*s+16/116;let n=116*i-16,o=500*(t-i),a=200*(i-s);return[n,o,a]};se.hsl.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,s,n,o;if(t===0)return o=i*255,[o,o,o];i<.5?s=i*(1+t):s=i+t-i*t;let a=2*i-s,l=[0,0,0];for(let u=0;u<3;u++)n=e+1/3*-(u-1),n<0&&n++,n>1&&n--,6*n<1?o=a+(s-a)*6*n:2*n<1?o=s:3*n<2?o=a+(s-a)*(2/3-n)*6:o=a,l[u]=o*255;return l};se.hsl.hsv=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,s=t,n=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,s*=n<=1?n:2-n;let o=(i+t)/2,a=i===0?2*s/(n+s):2*t/(i+t);return[e,a*100,o*100]};se.hsv.rgb=function(r){let e=r[0]/60,t=r[1]/100,i=r[2]/100,s=Math.floor(e)%6,n=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*n),l=255*i*(1-t*(1-n));switch(i*=255,s){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};se.hsv.hsl=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,s=Math.max(i,.01),n,o;o=(2-t)*i;let a=(2-t)*s;return n=t*s,n/=a<=1?a:2-a,n=n||0,o/=2,[e,n*100,o*100]};se.hwb.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,s=t+i,n;s>1&&(t/=s,i/=s);let o=Math.floor(6*e),a=1-i;n=6*e-o,o&1&&(n=1-n);let l=t+n*(a-t),u,c,g;switch(o){default:case 6:case 0:u=a,c=l,g=t;break;case 1:u=l,c=a,g=t;break;case 2:u=t,c=a,g=l;break;case 3:u=t,c=l,g=a;break;case 4:u=l,c=t,g=a;break;case 5:u=a,c=t,g=l;break}return[u*255,c*255,g*255]};se.cmyk.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,s=r[3]/100,n=1-Math.min(1,e*(1-s)+s),o=1-Math.min(1,t*(1-s)+s),a=1-Math.min(1,i*(1-s)+s);return[n*255,o*255,a*255]};se.xyz.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,s,n,o;return s=e*3.2406+t*-1.5372+i*-.4986,n=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,s=Math.min(Math.max(0,s),1),n=Math.min(Math.max(0,n),1),o=Math.min(Math.max(0,o),1),[s*255,n*255,o*255]};se.xyz.lab=function(r){let e=r[0],t=r[1],i=r[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let s=116*t-16,n=500*(e-t),o=200*(t-i);return[s,n,o]};se.lab.xyz=function(r){let e=r[0],t=r[1],i=r[2],s,n,o;n=(e+16)/116,s=t/500+n,o=n-i/200;let a=n**3,l=s**3,u=o**3;return n=a>.008856?a:(n-16/116)/7.787,s=l>.008856?l:(s-16/116)/7.787,o=u>.008856?u:(o-16/116)/7.787,s*=95.047,n*=100,o*=108.883,[s,n,o]};se.lab.lch=function(r){let e=r[0],t=r[1],i=r[2],s;s=Math.atan2(i,t)*360/2/Math.PI,s<0&&(s+=360);let o=Math.sqrt(t*t+i*i);return[e,o,s]};se.lch.lab=function(r){let e=r[0],t=r[1],s=r[2]/360*2*Math.PI,n=t*Math.cos(s),o=t*Math.sin(s);return[e,n,o]};se.rgb.ansi16=function(r,e=null){let[t,i,s]=r,n=e===null?se.rgb.hsv(r)[2]:e;if(n=Math.round(n/50),n===0)return 30;let o=30+(Math.round(s/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return n===2&&(o+=60),o};se.hsv.ansi16=function(r){return se.rgb.ansi16(se.hsv.rgb(r),r[2])};se.rgb.ansi256=function(r){let e=r[0],t=r[1],i=r[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};se.ansi16.rgb=function(r){let e=r%10;if(e===0||e===7)return r>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(r>50)+1)*.5,i=(e&1)*t*255,s=(e>>1&1)*t*255,n=(e>>2&1)*t*255;return[i,s,n]};se.ansi256.rgb=function(r){if(r>=232){let n=(r-232)*10+8;return[n,n,n]}r-=16;let e,t=Math.floor(r/36)/5*255,i=Math.floor((e=r%36)/6)/5*255,s=e%6/5*255;return[t,i,s]};se.rgb.hex=function(r){let t=(((Math.round(r[0])&255)<<16)+((Math.round(r[1])&255)<<8)+(Math.round(r[2])&255)).toString(16).toUpperCase();return"000000".substring(t.length)+t};se.hex.rgb=function(r){let e=r.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split("").map(a=>a+a).join(""));let i=parseInt(t,16),s=i>>16&255,n=i>>8&255,o=i&255;return[s,n,o]};se.rgb.hcg=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,s=Math.max(Math.max(e,t),i),n=Math.min(Math.min(e,t),i),o=s-n,a,l;return o<1?a=n/(1-o):a=0,o<=0?l=0:s===e?l=(t-i)/o%6:s===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};se.hsl.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=t<.5?2*e*t:2*e*(1-t),s=0;return i<1&&(s=(t-.5*i)/(1-i)),[r[0],i*100,s*100]};se.hsv.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=e*t,s=0;return i<1&&(s=(t-i)/(1-i)),[r[0],i*100,s*100]};se.hcg.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100;if(t===0)return[i*255,i*255,i*255];let s=[0,0,0],n=e%1*6,o=n%1,a=1-o,l=0;switch(Math.floor(n)){case 0:s[0]=1,s[1]=o,s[2]=0;break;case 1:s[0]=a,s[1]=1,s[2]=0;break;case 2:s[0]=0,s[1]=1,s[2]=o;break;case 3:s[0]=0,s[1]=a,s[2]=1;break;case 4:s[0]=o,s[1]=0,s[2]=1;break;default:s[0]=1,s[1]=0,s[2]=a}return l=(1-t)*i,[(t*s[0]+l)*255,(t*s[1]+l)*255,(t*s[2]+l)*255]};se.hcg.hsv=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e),s=0;return i>0&&(s=e/i),[r[0],s*100,i*100]};se.hcg.hsl=function(r){let e=r[1]/100,i=r[2]/100*(1-e)+.5*e,s=0;return i>0&&i<.5?s=e/(2*i):i>=.5&&i<1&&(s=e/(2*(1-i))),[r[0],s*100,i*100]};se.hcg.hwb=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e);return[r[0],(i-e)*100,(1-i)*100]};se.hwb.hcg=function(r){let e=r[1]/100,i=1-r[2]/100,s=i-e,n=0;return s<1&&(n=(i-s)/(1-s)),[r[0],s*100,n*100]};se.apple.rgb=function(r){return[r[0]/65535*255,r[1]/65535*255,r[2]/65535*255]};se.rgb.apple=function(r){return[r[0]/255*65535,r[1]/255*65535,r[2]/255*65535]};se.gray.rgb=function(r){return[r[0]/100*255,r[0]/100*255,r[0]/100*255]};se.gray.hsl=function(r){return[0,0,r[0]]};se.gray.hsv=se.gray.hsl;se.gray.hwb=function(r){return[0,100,r[0]]};se.gray.cmyk=function(r){return[0,0,0,r[0]]};se.gray.lab=function(r){return[r[0],0,0]};se.gray.hex=function(r){let e=Math.round(r[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(i.length)+i};se.rgb.gray=function(r){return[(r[0]+r[1]+r[2])/3/255*100]}});var jT=H((RLe,zT)=>{h();d();p();var al=jd();function Aq(){let r={},e=Object.keys(al);for(let t=e.length,i=0;i<t;i++)r[e[i]]={distance:-1,parent:null};return r}function Eq(r){let e=Aq(),t=[r];for(e[r].distance=0;t.length;){let i=t.pop(),s=Object.keys(al[i]);for(let n=s.length,o=0;o<n;o++){let a=s[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Iq(r,e){return function(t){return e(r(t))}}function Rq(r,e){let t=[e[r].parent,r],i=al[e[r].parent][r],s=e[r].parent;for(;e[s].parent;)t.unshift(e[s].parent),i=Iq(al[e[s].parent][s],i),s=e[s].parent;return i.conversion=t,i}zT.exports=function(r){let e=Eq(r),t={},i=Object.keys(e);for(let s=i.length,n=0;n<s;n++){let o=i[n];e[o].parent!==null&&(t[o]=Rq(o,e))}return t}});var HT=H((LLe,UT)=>{h();d();p();var Ud=jd(),Pq=jT(),es={},kq=Object.keys(Ud);function Oq(r){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),r(t))};return"conversion"in r&&(e.conversion=r.conversion),e}function Lq(r){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let s=r(t);if(typeof s=="object")for(let n=s.length,o=0;o<n;o++)s[o]=Math.round(s[o]);return s};return"conversion"in r&&(e.conversion=r.conversion),e}kq.forEach(r=>{es[r]={},Object.defineProperty(es[r],"channels",{value:Ud[r].channels}),Object.defineProperty(es[r],"labels",{value:Ud[r].labels});let e=Pq(r);Object.keys(e).forEach(i=>{let s=e[i];es[r][i]=Lq(s),es[r][i].raw=Oq(s)})});UT.exports=es});var qT=H((MLe,WT)=>{h();d();p();var Dq=Mt(),Fq=function(){return Dq.Date.now()};WT.exports=Fq});var VT=H((ULe,$T)=>{h();d();p();var Bq=/\s/;function Mq(r){for(var e=r.length;e--&&Bq.test(r.charAt(e)););return e}$T.exports=Mq});var YT=H(($Le,GT)=>{h();d();p();var Nq=VT(),zq=/^\s+/;function jq(r){return r&&r.slice(0,Nq(r)+1).replace(zq,"")}GT.exports=jq});var QT=H((XLe,JT)=>{h();d();p();var Uq=YT(),XT=Jt(),Hq=on(),KT=NaN,Wq=/^[-+]0x[0-9a-f]+$/i,qq=/^0b[01]+$/i,$q=/^0o[0-7]+$/i,Vq=parseInt;function Gq(r){if(typeof r=="number")return r;if(Hq(r))return KT;if(XT(r)){var e=typeof r.valueOf=="function"?r.valueOf():r;r=XT(e)?e+"":e}if(typeof r!="string")return r===0?r:+r;r=Uq(r);var t=qq.test(r);return t||$q.test(r)?Vq(r.slice(2),t?2:8):Wq.test(r)?KT:+r}JT.exports=Gq});var tC=H((ZLe,eC)=>{h();d();p();var Yq=Jt(),Hd=qT(),ZT=QT(),Xq="Expected a function",Kq=Math.max,Jq=Math.min;function Qq(r,e,t){var i,s,n,o,a,l,u=0,c=!1,g=!1,m=!0;if(typeof r!="function")throw new TypeError(Xq);e=ZT(e)||0,Yq(t)&&(c=!!t.leading,g="maxWait"in t,n=g?Kq(ZT(t.maxWait)||0,e):n,m="trailing"in t?!!t.trailing:m);function y(O){var B=i,F=s;return i=s=void 0,u=O,o=r.apply(F,B),o}function b(O){return u=O,a=setTimeout(T,e),c?y(O):o}function C(O){var B=O-l,F=O-u,U=e-B;return g?Jq(U,n-F):U}function A(O){var B=O-l,F=O-u;return l===void 0||B>=e||B<0||g&&F>=n}function T(){var O=Hd();if(A(O))return R(O);a=setTimeout(T,C(O))}function R(O){return a=void 0,m&&i?y(O):(i=s=void 0,o)}function P(){a!==void 0&&clearTimeout(a),u=0,i=l=s=a=void 0}function E(){return a===void 0?o:R(Hd())}function k(){var O=Hd(),B=A(O);if(i=arguments,s=this,l=O,B){if(a===void 0)return b(l);if(g)return clearTimeout(a),a=setTimeout(T,e),y(l)}return a===void 0&&(a=setTimeout(T,e)),o}return k.cancel=P,k.flush=E,k}eC.exports=Qq});function oi(){return(oi=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r}).apply(this,arguments)}function Gd(r,e){if(r==null)return{};var t,i,s={},n=Object.keys(r);for(i=0;i<n.length;i++)e.indexOf(t=n[i])>=0||(s[t]=r[t]);return s}function Wd(r){var e=Bt(r),t=Bt(function(i){e.current&&e.current(i)});return e.current=r,t.current}function dC(r,e,t){var i=Wd(t),s=Fe(function(){return r.toHsva(e)}),n=s[0],o=s[1],a=Bt({color:e,hsva:n});He(function(){if(!r.equal(e,a.current.color)){var u=r.toHsva(e);a.current={hsva:u,color:e},o(u)}},[e,r]),He(function(){var u;cC(n,a.current.hsva)||r.equal(u=r.fromHsva(n),a.current.color)||(a.current={hsva:n,color:u},i(u))},[n,r,i]);var l=ut(function(u){o(function(c){return Object.assign({},c,u)})},[]);return[n,l]}var ts,kn,qd,rC,iC,Yd,On,Xd,st,Zq,e8,$d,t8,r8,i8,s8,nC,Vd,ul,oC,n8,ll,o8,aC,lC,uC,cC,hC,a8,l8,u8,c8,sC,pC,h8,d8,fC,p8,gC,f8,mC,g8,_C,yC=Vt(()=>{h();d();p();Ge();ts=function(r,e,t){return e===void 0&&(e=0),t===void 0&&(t=1),r>t?t:r<e?e:r},kn=function(r){return"touches"in r},qd=function(r){return r&&r.ownerDocument.defaultView||self},rC=function(r,e,t){var i=r.getBoundingClientRect(),s=kn(e)?function(n,o){for(var a=0;a<n.length;a++)if(n[a].identifier===o)return n[a];return n[0]}(e.touches,t):e;return{left:ts((s.pageX-(i.left+qd(r).pageXOffset))/i.width),top:ts((s.pageY-(i.top+qd(r).pageYOffset))/i.height)}},iC=function(r){!kn(r)&&r.preventDefault()},Yd=z.memo(function(r){var e=r.onMove,t=r.onKey,i=Gd(r,["onMove","onKey"]),s=Bt(null),n=Wd(e),o=Wd(t),a=Bt(null),l=Bt(!1),u=vr(function(){var y=function(A){iC(A),(kn(A)?A.touches.length>0:A.buttons>0)&&s.current?n(rC(s.current,A,a.current)):C(!1)},b=function(){return C(!1)};function C(A){var T=l.current,R=qd(s.current),P=A?R.addEventListener:R.removeEventListener;P(T?"touchmove":"mousemove",y),P(T?"touchend":"mouseup",b)}return[function(A){var T=A.nativeEvent,R=s.current;if(R&&(iC(T),!function(E,k){return k&&!kn(E)}(T,l.current)&&R)){if(kn(T)){l.current=!0;var P=T.changedTouches||[];P.length&&(a.current=P[0].identifier)}R.focus(),n(rC(R,T,a.current)),C(!0)}},function(A){var T=A.which||A.keyCode;T<37||T>40||(A.preventDefault(),o({left:T===39?.05:T===37?-.05:0,top:T===40?.05:T===38?-.05:0}))},C]},[o,n]),c=u[0],g=u[1],m=u[2];return He(function(){return m},[m]),z.createElement("div",oi({},i,{onTouchStart:c,onMouseDown:c,className:"react-colorful__interactive",ref:s,onKeyDown:g,tabIndex:0,role:"slider"}))}),On=function(r){return r.filter(Boolean).join(" ")},Xd=function(r){var e=r.color,t=r.left,i=r.top,s=i===void 0?.5:i,n=On(["react-colorful__pointer",r.className]);return z.createElement("div",{className:n,style:{top:100*s+"%",left:100*t+"%"}},z.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:e}}))},st=function(r,e,t){return e===void 0&&(e=0),t===void 0&&(t=Math.pow(10,e)),Math.round(t*r)/t},Zq={grad:.9,turn:360,rad:360/(2*Math.PI)},e8=function(r){return aC($d(r))},$d=function(r){return r[0]==="#"&&(r=r.substring(1)),r.length<6?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:r.length===4?st(parseInt(r[3]+r[3],16)/255,2):1}:{r:parseInt(r.substring(0,2),16),g:parseInt(r.substring(2,4),16),b:parseInt(r.substring(4,6),16),a:r.length===8?st(parseInt(r.substring(6,8),16)/255,2):1}},t8=function(r,e){return e===void 0&&(e="deg"),Number(r)*(Zq[e]||1)},r8=function(r){var e=/hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(r);return e?i8({h:t8(e[1],e[2]),s:Number(e[3]),l:Number(e[4]),a:e[5]===void 0?1:Number(e[5])/(e[6]?100:1)}):{h:0,s:0,v:0,a:1}},i8=function(r){var e=r.s,t=r.l;return{h:r.h,s:(e*=(t<50?t:100-t)/100)>0?2*e/(t+e)*100:0,v:t+e,a:r.a}},s8=function(r){return o8(oC(r))},nC=function(r){var e=r.s,t=r.v,i=r.a,s=(200-e)*t/100;return{h:st(r.h),s:st(s>0&&s<200?e*t/100/(s<=100?s:200-s)*100:0),l:st(s/2),a:st(i,2)}},Vd=function(r){var e=nC(r);return"hsl("+e.h+", "+e.s+"%, "+e.l+"%)"},ul=function(r){var e=nC(r);return"hsla("+e.h+", "+e.s+"%, "+e.l+"%, "+e.a+")"},oC=function(r){var e=r.h,t=r.s,i=r.v,s=r.a;e=e/360*6,t/=100,i/=100;var n=Math.floor(e),o=i*(1-t),a=i*(1-(e-n)*t),l=i*(1-(1-e+n)*t),u=n%6;return{r:st(255*[i,a,o,o,l,i][u]),g:st(255*[l,i,i,a,o,o][u]),b:st(255*[o,o,l,i,i,a][u]),a:st(s,2)}},n8=function(r){var e=/rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(r);return e?aC({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:e[7]===void 0?1:Number(e[7])/(e[8]?100:1)}):{h:0,s:0,v:0,a:1}},ll=function(r){var e=r.toString(16);return e.length<2?"0"+e:e},o8=function(r){var e=r.r,t=r.g,i=r.b,s=r.a,n=s<1?ll(st(255*s)):"";return"#"+ll(e)+ll(t)+ll(i)+n},aC=function(r){var e=r.r,t=r.g,i=r.b,s=r.a,n=Math.max(e,t,i),o=n-Math.min(e,t,i),a=o?n===e?(t-i)/o:n===t?2+(i-e)/o:4+(e-t)/o:0;return{h:st(60*(a<0?a+6:a)),s:st(n?o/n*100:0),v:st(n/255*100),a:s}},lC=z.memo(function(r){var e=r.hue,t=r.onChange,i=On(["react-colorful__hue",r.className]);return z.createElement("div",{className:i},z.createElement(Yd,{onMove:function(s){t({h:360*s.left})},onKey:function(s){t({h:ts(e+360*s.left,0,360)})},"aria-label":"Hue","aria-valuenow":st(e),"aria-valuemax":"360","aria-valuemin":"0"},z.createElement(Xd,{className:"react-colorful__hue-pointer",left:e/360,color:Vd({h:e,s:100,v:100,a:1})})))}),uC=z.memo(function(r){var e=r.hsva,t=r.onChange,i={backgroundColor:Vd({h:e.h,s:100,v:100,a:1})};return z.createElement("div",{className:"react-colorful__saturation",style:i},z.createElement(Yd,{onMove:function(s){t({s:100*s.left,v:100-100*s.top})},onKey:function(s){t({s:ts(e.s+100*s.left,0,100),v:ts(e.v-100*s.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+st(e.s)+"%, Brightness "+st(e.v)+"%"},z.createElement(Xd,{className:"react-colorful__saturation-pointer",top:1-e.v/100,left:e.s/100,color:Vd(e)})))}),cC=function(r,e){if(r===e)return!0;for(var t in r)if(r[t]!==e[t])return!1;return!0},hC=function(r,e){return r.replace(/\s/g,"")===e.replace(/\s/g,"")},a8=function(r,e){return r.toLowerCase()===e.toLowerCase()||cC($d(r),$d(e))};u8=typeof window<"u"?Il:He,c8=function(){return l8||(typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0)},sC=new Map,pC=function(r){u8(function(){var e=r.current?r.current.ownerDocument:document;if(e!==void 0&&!sC.has(e)){var t=e.createElement("style");t.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill-opacity=".05"><path d="M8 0h8v8H8zM0 8h8v8H0z"/></svg>')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`,sC.set(e,t);var i=c8();i&&t.setAttribute("nonce",i),e.head.appendChild(t)}},[])},h8=function(r){var e=r.className,t=r.colorModel,i=r.color,s=i===void 0?t.defaultColor:i,n=r.onChange,o=Gd(r,["className","colorModel","color","onChange"]),a=Bt(null);pC(a);var l=dC(t,s,n),u=l[0],c=l[1],g=On(["react-colorful",e]);return z.createElement("div",oi({},o,{ref:a,className:g}),z.createElement(uC,{hsva:u,onChange:c}),z.createElement(lC,{hue:u.h,onChange:c,className:"react-colorful__last-control"}))},d8={defaultColor:"000",toHsva:e8,fromHsva:function(r){return s8({h:r.h,s:r.s,v:r.v,a:1})},equal:a8},fC=function(r){return z.createElement(h8,oi({},r,{colorModel:d8}))},p8=function(r){var e=r.className,t=r.hsva,i=r.onChange,s={backgroundImage:"linear-gradient(90deg, "+ul(Object.assign({},t,{a:0}))+", "+ul(Object.assign({},t,{a:1}))+")"},n=On(["react-colorful__alpha",e]),o=st(100*t.a);return z.createElement("div",{className:n},z.createElement("div",{className:"react-colorful__alpha-gradient",style:s}),z.createElement(Yd,{onMove:function(a){i({a:a.left})},onKey:function(a){i({a:ts(t.a+a.left)})},"aria-label":"Alpha","aria-valuetext":o+"%","aria-valuenow":o,"aria-valuemin":"0","aria-valuemax":"100"},z.createElement(Xd,{className:"react-colorful__alpha-pointer",left:t.a,color:ul(t)})))},gC=function(r){var e=r.className,t=r.colorModel,i=r.color,s=i===void 0?t.defaultColor:i,n=r.onChange,o=Gd(r,["className","colorModel","color","onChange"]),a=Bt(null);pC(a);var l=dC(t,s,n),u=l[0],c=l[1],g=On(["react-colorful",e]);return z.createElement("div",oi({},o,{ref:a,className:g}),z.createElement(uC,{hsva:u,onChange:c}),z.createElement(lC,{hue:u.h,onChange:c}),z.createElement(p8,{hsva:u,onChange:c,className:"react-colorful__last-control"}))},f8={defaultColor:"hsla(0, 0%, 0%, 1)",toHsva:r8,fromHsva:ul,equal:hC},mC=function(r){return z.createElement(gC,oi({},r,{colorModel:f8}))},g8={defaultColor:"rgba(0, 0, 0, 1)",toHsva:n8,fromHsva:function(r){var e=oC(r);return"rgba("+e.r+", "+e.g+", "+e.b+", "+e.a+")"},equal:hC},_C=function(r){return z.createElement(gC,oi({},r,{colorModel:g8}))}});var TC={};rr(TC,{ColorControl:()=>wC,default:()=>L8});var Lt,vC,m8,_8,y8,x8,b8,v8,S8,xC,w8,T8,SC,cl,C8,A8,E8,Kd,I8,R8,hl,bC,rs,P8,k8,dl,O8,wC,L8,CC=Vt(()=>{h();d();p();uc();Ge();ta();xc();Ec();Lt=ye(HT(),1),vC=ye(tC(),1);yC();m8=J.div({position:"relative",maxWidth:250,'&[aria-readonly="true"]':{opacity:.5}}),_8=J(ea)({position:"absolute",zIndex:1,top:4,left:4,"[aria-readonly=true] &":{cursor:"not-allowed"}}),y8=J.div({width:200,margin:5,".react-colorful__saturation":{borderRadius:"4px 4px 0 0"},".react-colorful__hue":{boxShadow:"inset 0 0 0 1px rgb(0 0 0 / 5%)"},".react-colorful__last-control":{borderRadius:"0 0 4px 4px"}}),x8=J(fc)(({theme:r})=>({fontFamily:r.typography.fonts.base})),b8=J.div({display:"grid",gridTemplateColumns:"repeat(9, 16px)",gap:6,padding:3,marginTop:5,width:200}),v8=J.div(({theme:r,active:e})=>({width:16,height:16,boxShadow:e?`${r.appBorderColor} 0 0 0 1px inset, ${r.textMutedColor}50 0 0 0 4px`:`${r.appBorderColor} 0 0 0 1px inset`,borderRadius:r.appBorderRadius})),S8=`url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill-opacity=".05"><path d="M8 0h8v8H8zM0 8h8v8H0z"/></svg>')`,xC=({value:r,style:e,...t})=>{let i=`linear-gradient(${r}, ${r}), ${S8}, linear-gradient(#fff, #fff)`;return z.createElement(v8,{...t,style:{...e,backgroundImage:i}})},w8=J(Rr.Input)(({theme:r,readOnly:e})=>({width:"100%",paddingLeft:30,paddingRight:30,boxSizing:"border-box",fontFamily:r.typography.fonts.base})),T8=J(lg)(({theme:r})=>({position:"absolute",zIndex:1,top:6,right:7,width:20,height:20,padding:4,boxSizing:"border-box",cursor:"pointer",color:r.input.color})),SC=(r=>(r.RGB="rgb",r.HSL="hsl",r.HEX="hex",r))(SC||{}),cl=Object.values(SC),C8=/\(([0-9]+),\s*([0-9]+)%?,\s*([0-9]+)%?,?\s*([0-9.]+)?\)/,A8=/^\s*rgba?\(([0-9]+),\s*([0-9]+),\s*([0-9]+),?\s*([0-9.]+)?\)\s*$/i,E8=/^\s*hsla?\(([0-9]+),\s*([0-9]+)%,\s*([0-9]+)%,?\s*([0-9.]+)?\)\s*$/i,Kd=/^\s*#?([0-9a-f]{3}|[0-9a-f]{6})\s*$/i,I8=/^\s*#?([0-9a-f]{3})\s*$/i,R8={hex:fC,rgb:_C,hsl:mC},hl={hex:"transparent",rgb:"rgba(0, 0, 0, 0)",hsl:"hsla(0, 0%, 0%, 0)"},bC=r=>{let e=r?.match(C8);if(!e)return[0,0,0,1];let[,t,i,s,n=1]=e;return[t,i,s,n].map(Number)},rs=r=>{if(!r)return;let e=!0;if(A8.test(r)){let[o,a,l,u]=bC(r),[c,g,m]=Lt.default.rgb.hsl([o,a,l])||[0,0,0];return{valid:e,value:r,keyword:Lt.default.rgb.keyword([o,a,l]),colorSpace:"rgb",rgb:r,hsl:`hsla(${c}, ${g}%, ${m}%, ${u})`,hex:`#${Lt.default.rgb.hex([o,a,l]).toLowerCase()}`}}if(E8.test(r)){let[o,a,l,u]=bC(r),[c,g,m]=Lt.default.hsl.rgb([o,a,l])||[0,0,0];return{valid:e,value:r,keyword:Lt.default.hsl.keyword([o,a,l]),colorSpace:"hsl",rgb:`rgba(${c}, ${g}, ${m}, ${u})`,hsl:r,hex:`#${Lt.default.hsl.hex([o,a,l]).toLowerCase()}`}}let t=r.replace("#",""),i=Lt.default.keyword.rgb(t)||Lt.default.hex.rgb(t),s=Lt.default.rgb.hsl(i),n=r;if(/[^#a-f0-9]/i.test(r)?n=t:Kd.test(r)&&(n=`#${t}`),n.startsWith("#"))e=Kd.test(n);else try{Lt.default.keyword.hex(n)}catch{e=!1}return{valid:e,value:n,keyword:Lt.default.rgb.keyword(i),colorSpace:"hex",rgb:`rgba(${i[0]}, ${i[1]}, ${i[2]}, 1)`,hsl:`hsla(${s[0]}, ${s[1]}%, ${s[2]}%, 1)`,hex:n}},P8=(r,e,t)=>{if(!r||!e?.valid)return hl[t];if(t!=="hex")return e?.[t]||hl[t];if(!e.hex.startsWith("#"))try{return`#${Lt.default.keyword.hex(e.hex)}`}catch{return hl.hex}let i=e.hex.match(I8);if(!i)return Kd.test(e.hex)?e.hex:hl.hex;let[s,n,o]=i[1].split("");return`#${s}${s}${n}${n}${o}${o}`},k8=(r,e)=>{let[t,i]=Fe(r||""),[s,n]=Fe(()=>rs(t)),[o,a]=Fe(s?.colorSpace||"hex");He(()=>{let g=r||"",m=rs(g);i(g),n(m),a(m?.colorSpace||"hex")},[r]);let l=vr(()=>P8(t,s,o).toLowerCase(),[t,s,o]),u=ut(g=>{let m=rs(g),y=m?.value||g||"";i(y),y===""&&(n(void 0),e(void 0)),m&&(n(m),a(m.colorSpace),e(m.value))},[e]),c=ut(()=>{let g=cl.indexOf(o)+1;g>=cl.length&&(g=0),a(cl[g]);let m=s?.[cl[g]]||"";i(m),e(m)},[s,o,e]);return{value:t,realValue:l,updateValue:u,color:s,colorSpace:o,cycleColorSpace:c}},dl=r=>r.replace(/\s*/,"").toLowerCase(),O8=(r,e,t)=>{let[i,s]=Fe(e?.valid?[e]:[]);He(()=>{e===void 0&&s([])},[e]);let n=vr(()=>(r||[]).map(a=>typeof a=="string"?rs(a):a.title?{...rs(a.color),keyword:a.title}:rs(a.color)).concat(i).filter(Boolean).slice(-27),[r,i]),o=ut(a=>{a?.valid&&(n.some(l=>dl(l[t])===dl(a[t]))||s(l=>l.concat(a)))},[t,n]);return{presets:n,addPreset:o}},wC=({name:r,value:e,onChange:t,onFocus:i,onBlur:s,presetColors:n,startOpen:o=!1,argType:a})=>{let l=ut((0,vC.default)(t,200),[t]),{value:u,realValue:c,updateValue:g,color:m,colorSpace:y,cycleColorSpace:b}=k8(e,l),{presets:C,addPreset:A}=O8(n,m,y),T=R8[y],R=!!a?.table?.readonly;return z.createElement(m8,{"aria-readonly":R},z.createElement(_8,{startOpen:o,trigger:R?[null]:void 0,closeOnOutsideClick:!0,onVisibleChange:()=>A(m),tooltip:z.createElement(y8,null,z.createElement(T,{color:c==="transparent"?"#000000":c,onChange:g,onFocus:i,onBlur:s}),C.length>0&&z.createElement(b8,null,C.map((P,E)=>z.createElement(ea,{key:`${P.value}-${E}`,hasChrome:!1,tooltip:z.createElement(x8,{note:P.keyword||P.value})},z.createElement(xC,{value:P[y],active:m&&dl(P[y])===dl(m[y]),onClick:()=>g(P.value)})))))},z.createElement(xC,{value:c,style:{margin:4}})),z.createElement(w8,{id:Kt(r),value:u,onChange:P=>g(P.target.value),onFocus:P=>P.target.select(),readOnly:R,placeholder:"Choose color..."}),u?z.createElement(T8,{onClick:b}):null)},L8=wC});h();d();p();h();d();p();h();d();p();var p$=__STORYBOOK_API__,{ActiveTabs:f$,Consumer:g$,ManagerContext:m$,Provider:_$,RequestResponseError:y$,addons:Gt,combineParameters:x$,controlOrMetaKey:b$,controlOrMetaSymbol:v$,eventMatchesShortcut:S$,eventToShortcut:w$,experimental_requestResponse:T$,isMacLike:C$,isShortcutTaken:A$,keyToSymbol:E$,merge:I$,mockChannel:R$,optionOrAltSymbol:P$,shortcutMatchesShortcut:k$,shortcutToHumanString:O$,types:br,useAddonState:L$,useArgTypes:D$,useArgs:F$,useChannel:B$,useGlobalTypes:M$,useGlobals:_t,useParameter:N$,useSharedState:z$,useStoryPrepared:j$,useStorybookApi:$n,useStorybookState:U$}=__STORYBOOK_API__;h();d();p();h();d();p();var V$=__STORYBOOK_THEMING_CREATE__,{create:hp,themes:dp}=__STORYBOOK_THEMING_CREATE__;var pp="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdQAAABiCAYAAADpwyKwAAAMZGlDQ1BJQ0MgUHJvZmlsZQAASImVlwdYU8kWgOeWVBJaIAJSQm+iSA0gJYQWQUCqICohCSSUGBOCiB1dVsG1iyiWFV0VcdHVFZC1IOJiWxR7XyyoKOtiwYbKm5CArr7yvfm+ufPnzJkz55zM3DsDgE4HXybLRXUByJPmy+PCg1kTUlJZpAeACAhAF/gCjC9QyDixsVEAlsH2n+X1FYCo2osuKlvf9v/Xoi8UKQQAIGmQM4QKQR7kJgDwYoFMng8AMQTKrafny1Qshmwghw5CnqXiLDUvV3GGmrcN6CTEcSE3AECm8fnyLAC0W6CcVSDIgna0H0B2lQolUgB0DCAHCMR8IeQEyCPy8qaqeB5kB6gvg7wTMjvjC5tZ/7CfMWSfz88aYnVcA4UcIlHIcvkz/s/U/O+Sl6scnMMOVppYHhGnih/m8FrO1EgV0yB3SzOiY1S5hvxWIlTnHQCUKlZGJKr1UVOBggvzB5iQXYX8kEjIppDDpLnRURp5RqYkjAcZrha0UJLPS9CMXSRShMZrbG6QT42LGeRMOZejGVvLlw/Mq9JvUeYkcjT2r4lFvEH7r4rECcmQqQBg1AJJUjRkbcgGipz4SLUOZlUk5kYP6siVcSr/bSCzRdLwYLV9LC1THhan0ZflKQbjxUrEEl60hivyxQkR6vxguwT8Af+NINeJpJzEQTsixYSowViEopBQdexYm0iaqIkXuyPLD47TjO2R5cZq9HGyKDdcJbeCbKIoiNeMxcfkw8Wpto9HyfJjE9R+4unZ/LGxan/wAhAFuCAEsIAS1gwwFWQDSVt3fTf8pe4JA3wgB1lABFw0ksERyQM9UviMB0XgL0gioBgaFzzQKwIFUP5xSKp+uoDMgd6CgRE54CHkPBAJcuFv5cAo6dBsSeABlEi+mV0Afc2FVdX3rYwDJVEaiXLQLktnUJMYSgwhRhDDiI64CR6A++FR8BkEqxvOxn0Gvf2sT3hIaCfcI1wmdBCuT5EUy7/yZRzogPbDNBFnfBkxbgdteuLBuD+0Di3jTNwEuOAecB4OHghn9oRSrsZvVeysfxPnUARf5FyjR3GloJRhlCCKw9cjtZ20PYesqDL6ZX7UvmYMZZU71PP1/Nwv8iyEbeTXmtgibD/Wih3DTmGHsHrAwo5iDdhZ7LCKh9bQg4E1NDhb3IA/OdCO5Jv5+Jo5VZlUuNa4drl+0PSBfFFhvmqDcafKZsglWeJ8Fgd+BUQsnlQwcgTLzdXNFQDVN0X9mnrJHPhWIMzTn2XFrQD4x/T39x/6LIsqBOAA3EvUF59l9msBoIsAODlXoJQXqGW46kGAbwMduKOMgTmwBg4wIjfgBfxAEAgFY0EMSAApYDLMsxiuZzmYDmaB+aAElIHlYA1YDzaDrWAn+BnsA/XgEDgGfgdnwHlwGdyE66cTPAU94DXoQxCEhNARBmKMWCC2iDPihrCRACQUiULikBQkHclCpIgSmYUsQMqQlch6ZAtSjfyCHESOIaeQduQ6chfpQl4g71EMpaEGqBlqh45C2SgHjUQT0EloFjoNLUIXokvRCrQK3Y3WocfQM+hltAN9ivZiANPCmJgl5oKxMS4Wg6VimZgcm4OVYuVYFVaLNcJ/+iLWgXVj73AizsBZuAtcwxF4Ii7Ap+Fz8CX4enwnXoe34Bfxu3gP/olAJ5gSnAm+BB5hAiGLMJ1QQignbCccIJyAu6mT8JpIJDKJ9kRvuBtTiNnEmcQlxI3EPcQmYjvxPrGXRCIZk5xJ/qQYEp+UTyohrSPtJh0lXSB1kt6StcgWZDdyGDmVLCUXk8vJu8hHyBfIj8h9FF2KLcWXEkMRUmZQllG2URop5yidlD6qHtWe6k9NoGZT51MrqLXUE9Rb1JdaWlpWWj5a47UkWvO0KrT2ap3Uuqv1jqZPc6JxaWk0JW0pbQetiXad9pJOp9vRg+ip9Hz6Uno1/Tj9Dv2tNkN7pDZPW6g9V7tSu077gvYzHYqOrQ5HZ7JOkU65zn6dczrduhRdO12uLl93jm6l7kHdq7q9egy90Xoxenl6S/R26Z3Se6xP0rfTD9UX6i/U36p/XP8+A2NYM7gMAWMBYxvjBKPTgGhgb8AzyDYoM/jZoM2gx1Df0MMwybDQsNLwsGEHE2PaMXnMXOYy5j7mFeb7YWbDOMNEwxYPqx12Ydgbo+FGQUYio1KjPUaXjd4bs4xDjXOMVxjXG982wU2cTMabTDfZZHLCpHu4wXC/4YLhpcP3Db9hipo6mcaZzjTdanrWtNfM3CzcTGa2zuy4Wbc50zzIPNt8tfkR8y4LhkWAhcRitcVRiycsQxaHlcuqYLWweixNLSMslZZbLNss+6zsrRKtiq32WN22plqzrTOtV1s3W/fYWNiMs5llU2Nzw5Ziy7YV2661bbV9Y2dvl2z3vV293WN7I3uefZF9jf0tB7pDoMM0hyqHS45ER7ZjjuNGx/NOqJOnk9ip0umcM+rs5Sxx3ujcPoIwwmeEdETViKsuNBeOS4FLjcvdkcyRUSOLR9aPfDbKZlTqqBWjWkd9cvV0zXXd5npztP7osaOLRzeOfuHm5CZwq3S75E53D3Of697g/tzD2UPkscnjmifDc5zn957Nnh+9vL3kXrVeXd423uneG7yvsg3Ysewl7JM+BJ9gn7k+h3ze+Xr55vvu8/3bz8Uvx2+X3+Mx9mNEY7aNue9v5c/33+LfEcAKSA/4MaAj0DKQH1gVeC/IOkgYtD3oEceRk83ZzXkW7BosDz4Q/Ibry53NbQrBQsJDSkPaQvVDE0PXh94JswrLCqsJ6wn3DJ8Z3hRBiIiMWBFxlWfGE/CqeT1jvcfOHtsSSYuMj1wfeS/KKUoe1TgOHTd23Kpxt6Jto6XR9TEghhezKuZ2rH3stNjfxhPHx46vHP8wbnTcrLjWeEb8lPhd8a8TghOWJdxMdEhUJjYn6SSlJVUnvUkOSV6Z3DFh1ITZE86kmKRIUhpSSalJqdtTeyeGTlwzsTPNM60k7cok+0mFk05NNpmcO/nwFJ0p/Cn70wnpyem70j/wY/hV/N4MXsaGjB4BV7BW8FQYJFwt7BL5i1aKHmX6Z67MfJzln7Uqq0scKC4Xd0u4kvWS59kR2Zuz3+TE5OzI6c9Nzt2TR85Lzzso1ZfmSFummk8tnNouc5aVyDqm+U5bM61HHinfrkAUkxQN+Qbw8H5W6aD8Tnm3IKCgsuDt9KTp+wv1CqWFZ2c4zVg841FRWNFPM/GZgpnNsyxnzZ91dzZn9pY5yJyMOc1zrecunNs5L3zezvnU+Tnz/yh2LV5Z/GpB8oLGhWYL5y28/134dzUl2iXykqvf+32/eRG+SLKobbH74nWLP5UKS0+XuZaVl31YIlhy+ofRP1T80L80c2nbMq9lm5YTl0uXX1kRuGLnSr2VRSvvrxq3qm41a3Xp6ldrpqw5Ve5Rvnktda1ybUdFVEXDOpt1y9d9WC9ef7kyuHLPBtMNize82SjceGFT0KbazWabyza//1Hy47Ut4VvqquyqyrcStxZsfbgtaVvrT+yfqrebbC/b/nGHdEfHzridLdXe1dW7THctq0FrlDVdu9N2n/855OeGWpfaLXuYe8r2gr3KvU9+Sf/lyr7Ifc372ftrf7X9dcMBxoHSOqRuRl1Pvbi+oyGlof3g2IPNjX6NB34b+duOQ5aHKg8bHl52hHpk4ZH+o0VHe5tkTd3Hso7db57SfPP4hOOXWsa3tJ2IPHHy97Dfj7dyWo+e9D956JTvqYOn2afrz3idqTvrefbAH55/HGjzaqs7532u4bzP+cb2Me1HLgReOHYx5OLvl3iXzlyOvtx+JfHKtatpVzuuCa89vp57/fmNght9N+fdItwqva17u/yO6Z2qPx3/3NPh1XH4bsjds/fi7928L7j/9IHiwYfOhQ/pD8sfWTyqfuz2+FBXWNf5JxOfdD6VPe3rLvlL768Nzxye/fp30N9neyb0dD6XP+9/seSl8csdrzxeNffG9t55nfe6703pW+O3O9+x37W+T37/qG/6B9KHio+OHxs/RX661Z/X3y/jy/kDRwEMVjQzE4AXO+A5IQUAxnl4fpiovvMNFER9Tx0g8J9YfS8cKF4A1MJGdVznNgGwF1a7efCIDlvVUT0hCKDu7kNVUxSZ7m5qWzR44yG87e9/aQYAqRGAj/L+/r6N/f0f4R0Vuw5A0zT1XVNViPBu8GOQii4bCeeBr4r6HvpFjF+3QOWBB/i6/Rdxi4lInc448gAAAIplWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAAEgAAAHigAgAEAAAAAQAAAdSgAwAEAAAAAQAAAGIAAAAAQVNDSUkAAABTY3JlZW5zaG90kx7ieQAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAdVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NDY4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+U2NyZWVuc2hvdDwvZXhpZjpVc2VyQ29tbWVudD4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjk4PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CjlohlkAAAAcaURPVAAAAAIAAAAAAAAAMQAAACgAAAAxAAAAMQAAFSrMXL20AAAU9klEQVR4AeydCXgV1RXHT/aFhIQdJFbysSPKEllkjSC0lTWsomirArKDYitWqwjIorQVi4qAgKBQCy2yFFF2WUQWURFUCAKCyhYCScjysvX877w7mbzkxbyXSUjpuV/yZubOvXdmfu/O/Oecuzyf6LpNckmCEBACQkAICAEhUCICPiKoJeInmYWAEBACQkAIKAIiqFIRhIAQEAJCQAjYQEAE1QaIUoQQEAJCQAgIARFUqQNCQAgIASEgBGwgIIJqA0QpQggIASEgBISACKrUASEgBISAEBACNhAQQbUBohQhBISAEBACQkAEVeqAEBACQkAICAEbCIig2gBRihACQkAICAEhIIIqdUAICAEhIASEgA0ERFBtgChFCAEhIASEgBAQQZU6IASEgBAQAkLABgIiqDZAlCKEgBAQAkJACIigSh0QAkJACAgBIWADARFUGyBKEUJACAgBISAERFClDggBISAEhIAQsIGACKoNEKUIISAEhIAQEAIiqFIHhIAQEAJCQAjYQEAE1QaIUoQQEAJCQAgIgTIXVB8wVx8ews/Nny8X2xKEgBAQAkJACJQTAmUmqD4QUacoeqOnVl5WLRVhtZKRdSEgBISAELhRBEpdUJWQ8tVpEXXdxoXrOHcQrKKpxVTHuW67K0PihYAQEAJCQAiUJoFSE1QloPyBpfpX6/jIdW4j1tiXf0Vt5X04FTNPOHOVoQtBRZxeIoMW2bzMsiYEhIAQEAJCoGwIlIqgKqlUAsqCyUtfvhYsffjD1xKv4qzXiQgdLOqoxJQ/cnifFtAcCCpvYFutO/NZsumSZCkEhIAQEAJCoNQJlJqgKuFUIsqC6hRSP972ZXXFto+yVLE0rFSrluqr1kKqRBORHJGtBDSXclhdsQ5RNcQ1T3B1flkKASEgBISAECgrArYLqhZICKrx70N+LKL49+cIxGE9T1gNQdUXzLuVK1dvQ0z5j0UzT0Szs1lMWUWzeEc2CytE1RBXIy3ySBACQkAICAEhUJYEbBVUiKESVCWmLKRO8fSHmPJGgJ8hqv68NPaxherM4+6iIY6wQCGgEM0sFtAsXslkUc2CqEJcsd8puEjPfxKEgBAQAkJACJQpAXsFVQlpnmWqhJRNUghpcIAPVeD/ztWDqVWVQCWoEFOlwEVdsjI3fVgk8zojpbOCfp3ooA9+SKeUzBwlrtqCRTsrgspmrMqnEBACQkAICIFSJ2CboGpL03Dz5lmigWyKBvoThQX6UvVQXxrXsCLVCPZTgurN1UEwr2bk0NxjyfRdYiYlOVhQOdJoUzXaU1GuCKo3dCWPEBACQkAIeEvANkGFkEJU0Tbqx35fuHUhpkEBREH+PlQl2Jd63laBOtYMpmD4e70IcOU62Drd/mMarYi/TtdZTNMyDfcv2lJhpcL9iyCCanCQTyEgBISAECgbArYIqtU69WNlhasXbt5AFtIQuHoDfahxpUB6tEk4hQX4qs5JHl8eCyXaUk8lZdJ7x1PomwSHEtOMLGKXLwspC6pqR+U0IqYe05UMQkAICAEhUEICtgkqLFSIqZ9vrhJMiCnaTUNZTCuH+NLABuHUhq1TZckWNkbmFy4EPXnRdrqeLdMdZ9PoUmoWZWQaFis6KClBZcWF6PKfBCEgBISAEBACZUqgxIJqtU4xvhSWKf7h5oV1Gh7kSy1rBVEfFtRaYf7KLezNFcIKPX2NrdOjSfT9lUxKceSyoOYqF7CDBTXHKaZoYxUL1RvCkkcICAEhIARKQsAWQYXV6ausUxZTdvca1qmzI1K4H/VtGE4xtUMomEXWmwCLM4U7Im1kV+/O06mUmJZtuHudFiqG0qj2U14irQiqN5QljxAQAkJACJSEQIkE1Wqd6okbVK9e7ogE6zSCXb1NqgXR0JaRVDnUT82Q5PHJskKibfS7ixm07PBVupicTcksruk8qwMsVPTwxVhUNWyG04qgekxYMggBISAEhIANBLwWVC2maA6FhYpZkFRHJO7BG8yCGsymas2KfjSwWQTF/CqU9xmTOHh6zmgbTWPVXLwvgY5dcChLNdXF3at7+Or2U7FQPaUs6YWAEBACQqCkBEosqBBT3bM3EG2nbJnCOg3jYTLN2c37SLvKFBrE407ZFexpgDA62BI9cOo6rT9yjS6nZFMqW6UYKuPg/wxuV0WHJOsYVLFQPaUs6YWAEBACQsAOAt4LqtMyxZBSJagYJsMbIWydQkyrcQekRztVoSa3hJi/NuPpCcPivMAdkVbtv0LxlxyUnI62UzLdvQ4MmeFEpoWKtlTnQW4WK3Xy05OoV8/7aMN/PqSZs+Z4irBY6Z+YOI7GjB6hOnbd0awVZWRkFCtfeUhUFnzKw3WWx3Pw5UHn9erVpdubNKb69etRdnYWnT59hg4cOEQ/nD1XHk9ZzkkIlCoBrwQVbl7+Mya65w1jEgcWVKd1GsntpZ0ahVHfuypxOyorrZchlbvvfnYihbYeSVIdkVIzeOgMW6zqH+2nvK7m9GXhhZVa3tpRw8LC6IvPP1VXv3r1Gpr8p+c9IlG3bjRt/miDmadrtx506tRpc9uulalTnqOhQ4eo4pre2YpSU1PtKrpUyykrPqV6EZbCH+Lv4IXn/6RiHhz6KH22/4Bl7y+vxh8/ohJ9uOljGjd+Ur4M+/buoKpVq9CZMz8Q6lFJQqXISJo8+Snq26cnBQTwG3QhISHhCr05fyEtXrKskL0SJQRuTgJeCyo8uNrdq9pO1bhTtk55mEwUz9X7u9iq1KBWsOrx6w06WJhnL6fTxoOJdOpCBl3njkhpbJGmO1296ejhy4KKmZP0ONTyJqh48Bw6uEdd/qZNm2n02Ikeobg1Kop27vjIzNM59td09pz9b/52CmqTxo3opelT1DlPfPKP6gFuXoDNK2XFx+bTdlvc6FEj6KlJE9T+x4aPpu3bd7pNW9iO7+OPqujdu/fSw78fni/JkS/3U4UKFejSpcvU5u7O+fZ5shEb24kWzJ9H/niLLkbANQx/fCy/8GrfUTEySRIh4CTw4AODaUD/OLp+/ToNffixcs/FY0G1WqcYd2rMimRMMYi208phftS+UTgN7FCFwtk6heh6GuDqxbjSnYcTad+xJCWmENJ0FlS0m6oevryO9tRU5+T4+OUZw0otP27fkgoquI18/DHq07snrV23gea/9banKIuV3k5Bjevbm/4yZ6Y6rjeiUKwTtiQqCz6Ww5XqankX1CH3D6Tp017g37Mwbuos7l7/0ceb6d9r1tGXXx6hOrf9irp370pt27SmO+9sarI6d+5H6tN3ECVevWrGyYoQKA6BBW/No3u73sNDIXOpbv28OlWcvDcijdeCirZTjD3FuNMAp3UayhPgR1cPpCGdq1Kz6AqqbdV573l0bbkskhk/ptPJ7QmUkpJF2XyQXG6XzeFhOMTu5Cw+TioL6K7TaXTwp3QlsBiLaralsiAj3Oh2VDsE1biS0v38XxbU0iVTtqWXZ0GtWbMG7f5kC9/z8E0RxZ/8nvrGDXbbPNC9W1ea9/e/siXLv4zBoaSWsSpEPv7vCPwfCSpPM8henwAWVfyaTAhPMYhZkTo3DaehXapRBe7Z642YYiBpDnc+SvrgIuXwmFMK4h8lr+hPfpHGP7GopnFv30M8/eBybl89z2k4uTmfr3b7ouaJoBbv/hNBLR6n0k5VngX1w/+soYYNGygE3357nHr27v+LbtyoqNq0aeNaCg0NUflmzf4LLVi4uLQxSvk3EYGbWlC1QMKNq9y9vET7KSzUcBa6Gix8T8bVonrcdoqev96EXLSLnkmj9K+TybcCD7eJ8CdfdiP7sJWancq9fK9m0hGeGH9JfApdScshjElV7aguFuqNFlNcux0WatOmt1Pt2rXop59+piNHjDaywrgGBgZSv7jehDbMKlWq0NFj39Cu3Xvy5bm7bWuqGFGRjh79huCG08GdoPbqdR+1aN6MataoQae5M8uBg4doz55PyeFw6KzmsnOnDhQcEkydOnYguAYRFr29lA59flit57D7YOu2HeZDODq6DjVoUI8uXbxMnx/+QqUJDw+nwYP6U33uORrCD+Fj33yreoweOmSUoRK5fBTFp2uXWPIP8Ke9ez+j5ORklbN9+7upY4d2hPbXhIQEOsjnt2vXXkpMTHQpufDNknAuvMS82PIqqOjFu37danWicPO2adup2O5b6zWdv3CB2rXvknfBLmu4X1Dn8P2jDiP98eMnVHNHWlq6S+q8zQiu0225bjscmWa7c6VKleiBIYNUHUtOTqF9+/Zz/dtOruWgzsXGdqQ2rVtRUFCQyo966q6ne2HHwpncxu7ue7h9uZF+6fjuOK1du6HYnFCGH1soPXr8RvWajqpdm5KSk+jEiZO06aPN6v5HGnehNOo6joX7+q67WlKdOrexNyKNTrJnYhN3eiuqF3d0dMnu7dDQUOrYsR0OT+PHjqbGjRuq9VFjjP4F2ECnt4MHP1fxrh/ofAc3Mb5TR2YmM4ynT3btUXXJNa3d2x65fCGokEksTUFl6xRTDaLttEdMJA1ob4w7RRqPg9M6dZxLp1zuhOTDbl4ILPHPtGVdz1a9eo/yD4uvPZNK3ydlqfZTdE4yf20G7agogw98swjq3j3blKAV5TKb9uKfafDgAaZ7zcod+YaNGK2E9fi3X6o0rh2kXAUVwgt3HR4wrgEPpEl/mMw31eZ8u3SHmHyRLhudYrubQv7+ymXUqlUMu/RT6M7mbWjKC88Sernq9jlr1p9/Pk+/f2QEnYg/aY1W6+74WF9mpk2fxW19W2j92lWEB61rQPvMkiXLafqM2a678m2XlHO+wgrZsIqPN+3P+juwu1MS2sTRNo6wZOlyAs/iBriIjx45qOoSODe+vWWBFzJ8VwsWvE4tWzQr9PtHh6adO3fRqDETC+TFeQwf9gg9w72OEdBLfdTIYQSWrnUJIokyduz4RKVFmokTxhbawWrL1u00gjtTuQbXYwUHB9PiRW/mazPWeXC9EOdRoyfwkCJ2oxURZs+azox7FXoPIxteLB4fNb7QTn6lUdcffugB1UEuLCys0LPGvfjYsFHm/WxNVNJ729oPw1qudR3PodvviLFGKWPi3eWLKTIyIl+83sAICXSULMow0Wm9XZZAUHl2JFZNf25MxcxI9W8Jokl9a9Et/DNtsFh1UGv8gaWO1cu8GCM1KmAOW6G5LKDZLJjZPAYVwgpR5f5HdJbbU1edvk7xHJ/EQ2gyYM3yP9pPy+P0g9aK7ipims8vLd0Jhs636p/vUUzL5npTNd6jsgWwZWYd0jCSb0bdpuV6LlZBHTDwQfoHi53uxYmHWVZWFsEys4ZJTz1Daz5YZ0ZBrPHwxENMP8jwfeJfh7btYuny5QS1ab3pXp37Oj337NM6mXpo+vr6meeAHTiPDp3upfPnL5jpsOKOj5X9y6/8lYYPf1R5DJAH5wQr2/WFYfOWbfT4yHFIUiDYwblAoS4R5VVQDx3Ybb6I3NW6I125csXlzIveRM/gVmzlwLqd+9rrppcCuRo0qE//Xr3SdAsjDvUN4hcUFJyvDsCL8NsecXTx4iUkM4NV5NCT/o15r5r7jHLyvxj27NWfhrD1ih6kOiAd6riuu4jH2O/xEwyh1umsx+r26560ccMa8z5T5831KoRFVrc1I99ZHpPb/Te9C7V6Q9irs2Hdvyg6ug6nNALqelp6Og9DDDDLxh6UDxHbxb24rcHuug5xHzggznoIdWxY0FY+mWz9Dbr/IdUhzZq4pPd2t3u70JtvzFVFWjmCiw6JiVepVZuOelO9jOOlXJ8f0l5LSqIw7tlufQ6CYVy/+5UHz8xs44rHgopjGy5fdlGwMhqC6kv3xURQr9aRaqYkuHuVgPIH0mI9kB+0obyBPOYkhNhhCblsXmZdcVAWT+KQy65crcB4JF9mYV0Rn0zfJWZSsvOHxTGxAwQV8/niuZ0NC9VZnuU5bjlC2a5aK7qriBX3TNwJBvJjUoMRLBQ6vLPsPUI7FR4OCHDVvTZ3jrpZEYeKhQrqei5WQYXQ4MHy8eat9Pbid5TLFWVVrlyZ3lm6QJWJbYh2i5i7C1gM1rfLoqwsfdNZBXfhoiW0YsX7pjupZYvmtGjhG+Yb51dffU19++U9BHEe7vhY2ePGx7XjwTZz9hzasmW7+YCYNXMa9e/XB0Wp0Kv3gAI3m12c9THcLcuroJ488bV6UOFlqHXbTu5O3+N41MWD+3eb3y8E88lJk2nnJ7vNslCfpk193hRcWBmu42itIocHJjpCzZ+/iBa+vVS58uGmXbp4ATVrdocqF72NIyMi1DW9x/Vt3utv0QV2LyNMGD+Gxo8bZT6YXcd+W4+FZpOoqNp07VoS/fHpZwkvZAi4rlEjh9MTE8eawrpt2w72FI1R+60fy5YupA4dDPcmzv3lV/6mxu5q8cA5v/bqHLr11iiVDXUZLzW6CQORdtb1+9nTNeOlF81TXLZ8BS1/dwW7ek8pl3S3bl3omaefMs8H1x7Tqn2+lyS77m2cRHHaUKtXr0af7tmuvjM8T1y9TXgOTuTvomuXWBSpmhKKanpQibz88EhQcQzWRXPmI0wnCPHET7VV4A5JFUN9lftXTZDPbatBrJ7YF8xu4SgeQhNXOUSl5/qWvyC1bURZf8w0l4/Fo2SUmK5ny/SLyxnqZ9vUXL4QUvaiZHECNWSG08Hdy39KXHGuNzpYK7qriBX33NwJBtp+Dh/aa96weIC8POdvBYrFw2XPrq1UrVpVc5/ruVgFFYnwkPnz81PN9NaVbVs2EtpTEJ59bgqt/Mcq627lGizOsBl90+nMeCCt/tcHetNcoj0Fk2PgOhAaNGqmxFAncMfHyh5p0Qbd5d77CrwAYN+sGVNp0KD+WFUuuuGWB5+dnNUBivgoj4IKl99XX3ymzhptVrBI7AqwKOBaRMCLHDwQ2oNhPQb6Baxjd722Vl6YMp0f8ivNJFaRQ6S7zk+6ruiMi1hwZ8x8RW+aS+t5wbthHa7meiwI3D1df1toG+fAgf1oNr+w6QDLGP0CdEAb38oVS/Umod7BRewa4EmBYGhXJvoxPPS7YWYyu+o67jG457VFB9c+XPyuAeeza+dmNVEI9uFF2DqLm133NsoujqCOHTOSnnzC8CzBqHhx6gxkLRBWvf8uxcS0UPHtOnQp4O0qkMGLiP8CAAD//04T0yIAABsnSURBVO1dB5gVRda9M0yAISdB139lJA1ZgVGyKCCKiCjKShQUiQKuaXEXUBAVFXVBd8WEShAVWJAMkiQokrOIIgZUJKchzQz891S/amp6Xr/YyMjc+mZeV1dXV1efV92nbqj7YpLLVj5HYaSYGCL+o1hs+T8PZ/LwNi6WKJ4zCXHE/7zlfF7e5ouPofwJMVSvSAI1KZaXYrl+LNe1GsCW21GNWWVoUx87y/mDp8/SnB/TaM3vp+nwybN0KuMcneb/M5lEGZnnKOMs0dmz54j/iLN0Lqy74RMuYCpapAitXbNCXWHu3M+o90MPh321L1YsotKlStG+ffvp+ro32Of36d2DHn2kn9pfu24D3dO2g33MmSlduhR9vngexcfHq0POvgx9eiB17NhOHftu5/d0c/PbnU3Y+9dfl0oTP3xf7X/yyRQa8M/B9jFk7mzdil4e8bwqe+DB3rR48edZjuudjyeOpdTUWmp3zpz51Kfv3/WhbNsXX3iW7m7TWpXf1aYdbdi4ya7jho+J/TkeFFWr16aTJ0/Z55mZhIQE2rZlLY/LWNq5cxc1a97SPuwlznajLpnevbrTY4/2V0cDYedyOn3/3VZ1aPnyL6hzlwezVNu8cRXlz58/2zjKUsnPTtWqVWj6tE/UkWDfk5/TAxatX/slFS5ciJ/Zc9S+Q1f6atVq1/r4/jEOkH744Ue6qWkLu+6D3brSkwMeU/uBxm+HDvfSM0MGqXppJ05QteqpdhtmJi4ujnZs36iKli1fQfd16W4fNq+Fwq7396DPly63jzszr7w8nFrfYT1PM2fNoX79rX6i3tj336YGDeqpU94Y/Ta9NOLfztPt/auu+it9Nm8mxcXloYyMTEqpfA2/9/DGI/JqrN/7t7vpuWeHqDanTptOjz72pMr7+yhWrBit/mopc0AM/b53L9Wtd6NdzatnGw2+9ebr1LTJjWqMlC1f1b6GmXn6qX9R507tVdEdd7alzZut58Csg3wpfo/e2LihKv7f1Ol05swZZ5Wo92MiIVRcFZwI8ovlD/AhCDWOSTQ+j0WoibzNy2SaFB9LRfLGUOvSSVStcIKqm5VE0Y5qiIkVjaLxGDrH20NMpp/vPkHLfjmpyDQtnYlUESpROpNpJo+nTH4YQaa8sf759JySzIHuJLFQ++hGGHNmTaWKFSuoZgINIn2dN0e/Rs2a3qR2nX0xCfW998fRM8OG69OybUE63+3YrMr9EXkkhIqXDF42bqntPW1o+PND1eGhzzxP738w3q7qho+JvXMyYp9sZDDxwTlHjx6ja2rWsY94ibPdqEsmJxIqxgzGDtKEDz+mQYOt78HlFkIuBkEsXmh9506CdGtkw7qVVKhQQfVyrVy1Fp0+fVpVNUluwoSPaNBTz/htony5sjRv7nR1bP2GjdTmbusl7K/y9m3rCROt77/fRU1vPj/BMq+1a9cP1KTZbf5Ot8tMcj58+AjVrG0RKCp8vXUdJSYmKmIsV6GafY5bZvy4MVSv7vXqsPnMeDXW/zdlIl1To7pqv+XtbWjb19vduqLK9bOHnUpVatrfh0moZj/9NRbo2Ub9UAi1a5dONGjgANU8JmXt2ndR+YvxETahopPgP/Ce4kHeKlJlMtSkmuAjU0iokE6TC8ZR678kUXIBFl990qgplSqC9REpGmbhk04zS6745RTN/yGNDpzIpBNnLMk0nQ+CTLHNQqZ8Dkg1JyVzoDtJLNR+6kHrJAVNAJjdu83czGvc37UzDfzXP1SRsy8mod7zt460du1689Rsef2y2brta7q91d1ZjkdCqObDmKUx306NGtVo6pSP1N6Il0fSf994y67mho+J/cJFS+jB7n3sc/xl5s+bQeXKXk0nTpxU0qyu4yXOuk23bU4kVBP7WbPnUt9+j7p1P6xyc5zMm7+AevW2JPNAjcyYPpmqVK6kqmDcYfwhmSTXpWt3WrrM0gqpg8bHZZeVpJVfLFElY8d9SE8PsSReo4qd3bThKypQoEBAQg0Vj82bVlP+pKQsxGlOTJ3Ptt0JR+bxxx6mXj0tzcOYMWNp2HMvqBpejfVVK5dSiRLFKT09nSpWusZx9ey7muxw5JYWrWnHjm9VJZNQo3m20Zi+RqD3HPr8xfLFSnrHOZgUT548lT4YO4F+3r0bRX9YioxQfd1TxMoECI7EP9S/LJAqlW8iS6f5mD8LJsbS9SUTqfkVSVQiHzMtH7ckUouQNcFqkRdS6kkmzDV7TtHM747T3uOZdJIlU6XmzbDIFGpeSKdnmUyUdMr9yWlkCojMge4kMR+EQTduhKFJzTnrdWuwbNlkpTLCcWdfTEKtymqwE6wOC5S2bl5L+fLlVS+0aAk1IyODKqTUCHQ5qlChPM2dPU3ViYRQg0ndaHj2zKmUklIhG6F6iXPAm+SDOZFQoZKFahbJy9l/v7696OH+D6l2hz37Ao15b6zKB/oY/txQatu2japiSj4mobZq3Za2bPGv8jMJNdiYCIVQn3p6GI0bPzFQl9UxjF2MYaTyFatTZmYmXXHF5bR86QJVtvKrVUrlrXYCfNRl6XQCS6lIpvrdfM8Euy+c6zbW9XONOiCwYEm9x32VevXpT/PmWfejCTXaZxtNh0KoqAe1+oiXnlNmG+zrBC0GzADA690xH9hStD7u9TYiQkUnmD/VB7ZZCJU5EzZUS90bw+reWLr1/5KoQem8Sv0LElbkiZN8Iq5Vhn2LTNczmc7ykenxM2ctMk33SaaKTH02U6h5ubkQvnuu9ccnc6A7SSzU3rgRKmw8UCft+f13qlf/pqDNJfEMeQvPlJGcfRFCdX/JeIlzsC/JJNSevfrR/M8WBjvFPm6qFr20oeICO7/doibBTluZffEIMoMHPUld7uuozry/Wy9asmRp0FZ69uxGTzxm2dpNMrtYhArVYiC7r76hD95/ixo2qK92a1/XkA4ePEjVqlWhT6datulg9krdTtGiRWnt6uVqd8WKL6nTfd1U3nzPREOoeqzr64Wzhb0V94F0MQgV14WvyFOD/8l20kZKXY8yM8HmPHXaDPrHgIG2/dk87kU+YkLFxZWE6tvm4Z08LF2yzZwSfYQKde/l+fNQ23IFqErxBLavcgX+O0+kMbbd9CyfD1Xv1n2nacb2Y7Tr8BklmZ5SdlOfZAo1LwiVGRQkytkcS6bctQsqoWonk1BmgehL8+ZN6Y3/jERWCFWhkPXDbdbuJc5Zr5h9D44VcLBACqaSdJ59c7MmNPqNUaoYRAxCNpO+j1DVi+a52naJshrX1qFjx46ZhyPK9+zxAD3x+CPq3JGj/kMjR/03aDujRo6glrfdqur16NmXPluwSOUvFqG+OOJVGj36naD9hq0YNmOkq8tVUVs49axZtUzlN27cTHe2uVflA32Yz/D06bPo4UeeUNW9ItQtm9ZQUlI+paVp1+G+QF3Jduzrr79hZ6kMVX6xCNXsVOVKKdSyZQtq2LAeVaxQwVYHo86mTVuo9V1/M6t7lo+aUNETCJuaUOHpm8iqXnj3FmLp9OrCcdS5ciEqzfZTePhCCoX9VDkg2eQaQ2dYd/vzkXSasuUofXvgDKWxzRQevWeYUM/bTJlEuR7UvDmdTIGLOdCdUiGOh5LcJFSoi6A2QqpTrzHt3bsvYHPwboSXI5KzLyKhukuoXuIc8Avig3XrXEcTxr+nqn373U5qfkurYKfYx01v0rffeY+eHz7CPoZMNIT62qiX6bYWt6j2QHwgwHASJLSa116j1Iip1zdSarcWtzan1197RTUDmydsn8GStnOjHrABRkgXi1CXfL6M7n+gp+pDoA/tfATv3Aop1e2q2is7VLMNpK/7OndQ54PIQehI5nsmGgl15RdLCGpxqHthQ9UEqS4SxkdOIFSzu7BX9+zRjR75e19bJRyJF73ZplveQ0K1vHyxXEYRKkunRfPFUs1SealdpUKUxPsWkVqkakuqvIt5zS9H02na1qP09d4zdOzUWToJMuX/dPwzeyqbqY9MmU+VZIptTk7mQHeSWKj9diNULE2BYwdSKDP8Jbxs5q//d6Wq7+yLEKo7oXqJswI/wEfBggVp4/qVqkaojiG6uaVL5tOVV/5F7T7U9xGaPWeePqS20RBqrVrX0qSPx6t20C94QbstQcpyUd4x7d+wZ8FJBcmU0H77bQ/Vb9hElQf60DY+qO5gd9fLRi4WoYZibjFt0M77NJcNwbaq78cNA9MLt0PHrvTlylWqqvmeiYZQx499l+rVq6PahBMfnPkiSTmNUPU9mBogLz3WdfvYRk2ozIeWDZWlzXiWPNX6UybPfPFEl+WPo9vK5acbrkqiBHgr6crgVJ+0CjXv3rQMmrzxCG367ZTy5oUTEsjU31pTRaZ8DlS+OT2ZA91JYqH23Y1Q4e0Ir0ckzCihwnBbfzXsmaeofbu29iWdffGSUOEcAGkJacCTg+mTSVPs65oZrx46N3xM7KN5yXiJs3n/bvmFn82i5OQy6nAo3smo+FCfnmr2jTzW1qVUvhbZLCkaQkVD5oQsHOek6Z9OoqpVKqu+OCXRFcsW0uWXl1bHnMuhVKHxYY5Rp8ruYhEquhdM7Wt6JsPrdMjQ5+y7+vcrL1KrVrepfX92b7siZxqzXXDMO2+oInNiggKvxrqpUg5lSRDME+XLl6MjvBzIXGPv1bONezOX+2ES5U9qHvfBO1SkaBHatm27so/iPH/JdOqaMXM29X/4cX/VoirzhFBZKKU8/IFlM4m8zZsAlW8s/aVQHupRuxj9tUi8WqMKqdRW97LNNINdig6fzKSpm47S+t0n6QjnT6WTUvXq5TEqcAMTBtS8IFFFqH8CMsW3Yg50J4mF+q25EQbON19WWO6BNXG/s5OSmTp1bEdDOHADSFd75Tn7Yr6sovXyNaUZ0xPR7BPyXj10bviY2EdDqOirVzijrWDJVIWibjC1Yv9+val/vz52s24z72gJFV7i8+fOsMfQmjXr6N7297lKVZBA8R3jPCSoO2GagEOOTqbEgPGJdaFm0A5d7/bbW9DIV1/Su0o9bC6NuZiEin537HS/LS3aneSM+VxB+sT9799/wK4Cu+qiBbNtTP898nUa9ZpFmnYlzsC0s2TRXOWEiPIPJ35CAwcNsat4OdZNe3kgkn/15Rfojjus9bnwqoZ3tU5ePdtozzRVmZ7d+lrYLpg/k66+2hpngVS5n3w0jmrXtjQkoXqWm9cJJR8dofIVWD2tJNQ4ljgR1AEOSSo6UmIMVSqZQH3qFqd8CbEWoTLxqsq8hRMSyHTRjmO09Ns0OoS1pr7lMUrNy6KrJlNeRfOnI1OAbw50LF6fPMVa+oFjgdJPP/1sBzpwIwycD3sHVH1YgI6EhxuLsX/99TdlK6hRvZpaV4ZjmB3jBQZSvZCEioXqsBkhoT/r1m1Q1/7mmx22zQvHvHro3PAxsY+WUL3CGfcdSoJtEcSq0y+//Eq4h7nzPlPfLbw9GzSoSw8+0IUQyUinn37eTY1vPH+eLsc2WkJFG2bUKOxDUsLL/aOPJtHO73dRwYIFqFGjBlS/bh26885WdmQukOmjjw+gGTNm47QsCYEWEHABCdIH2nrvg/GEZ6B8+bLUs3s3di651bZ9ISoRohOZ6WIRKlS4kLBxf9DEYFkGvit48P794b52EAb0dfSb79KLL71idlvlEZAAgQl0wv2NHPkf2rJ1m/Javefuu6jbA13UMjXUOXT4MKWyp7CpHvZyrNevX5cg8emEJSfzeNx9zFHR8uXNSy1aNKcmNzW2xx2e8YY3NFPjUp/j1bON9szADzA3LFy4hMZNmEg/81jfvfsXdclbbmlG/33dijKF/iAK0ii29WMNKt6Nqam1aNjQwbZjGMwV1a+5Ti1f0n32ahsxofJ7WSVobiGhIkqStp8mMYEW5OhILVIKUstKBSmOpVUQr7abIgoS7KJztxyhhd8cp4NpvNbUF7jhjC9oA49Re52pkk75dMbqT5XMgR5Ox/HQ1KpdX53iRhi6PcxeZ7BaDS9Zt6Q9AvXyhwtJqOiDfqCc/WnQqKn94Ok6eInm5HWo+h68wFm3FcoWLwi8KEJNmLBAYjxy5KjfU7wgVDSMEIAvDB9mS1V+L2YUHjp0iO5iyfPHH38ySs9nsZwL4zc5ucz5Qpfc6tVrqT3bDrGO00wXi1Bhx4RKEgEgAiXYs2HXdkumQ5lbHZQDy9s4gtGePVm1UOZ7JtrJI64D50VI11qjhTJ/CQQ3kCNnTZr0vyyHvXq20SgciuBXgLCZZgIpVqlWyy4yPcB1IcjVeQ8HDhyktvd2ol27ftDVPN1GTqjcDZCqIlT+gLrXWn9KHB0pVjkkPdSwOFXk9aexTLbaZgpOhMPRYl4as2DbUdrvI1Pl0cveSSo+Lz8vkEpzeuCGYN+E6WQSrK55HF966vUNVZH2Mg3mAIGZXOfO7anUZZfxbDYfHThwgL5jL8hXXn3NjiijvQqdhGrOkjFIgzmcaPd6N3d/vCQR1QUvX/NBaNT4ZntWCW9WeLXioQwWlSU5uQzBtogE71V4serkho+J/Vtvj6HhL7ysT/G71bautLQ0qlbjOr91UBgNzq6NuhxA2D8sLdFqU3/V4N0NycjExF89Hagg2Djyd66zLDm5DGEdacMG9WzJ0VkHUtvSpcuoZ+/+fu1ezvpYX9qx471+yQnPw5tvvUvvvPu+8zS1b4aeMyP2OCubjlDBxoR2GHJ6WzvJe/v2b3iC8Qzd0aplNiwwuYHDoBkq09knvQ9b6mOP9Lcdy3Q5ttAEfPrpTBr89DC/8WcvxFhHCMKhQwfZ9m+zP3hm163foJZm+ZvAefVs62tCNf6vfz5BjW9oaKu9nYSKuo0a1ufgDs9T8eLFshEpYjdDhY2JjXNCpq/jxTZyQvWRqSZU+BxB3YsISYiOlFwinvo2LkElOOygspsy+0IyPcGi6bofT9C0dYdp/7FMOs7xeq0oSFY4QaXmhVcvzy7+rJKpF1+M122YcUxDXUjuRR8wey7E0XYOHjzkyfpFL/p0Idu4EDgDQzhUlClzlQomD3s5JL41a9fZE5QLeU9ubWPihElRSkpFJoIr2I+CA43s2cORirbRgoWLs6gl3dpwlmNxPhzBChXCmDmoJoOm3dFZ/4/edxKqGZUJL378eMTx48dp0+YtEX038AquzPePifGp06cI6zvdpPs/4t4REa1SSgrHDS/Pk/SDylbsxTrkSPoOabVkyZKUmBDPAfn3BYx6hElorZo1ae++ffTll18FrBtJX9zOiZpQoe5VIQd99lMQahFeLtO4QgG6qya/TJP4gI9MsXZ03Q8naMb6w7Rr72k7pOBpn2SqlsdAMtXLYyDOcvJtrB35VAjkyZOHnuZ1abG8hSps2qczAiIDSQeL6ZEgrWGGLik4AoJzcIxyU41AhJqbcJB79Y9AxIQKyRQqXwR0iGPOjPcRKkIOFufoSJ3qFaPUq/Pz+lMWXbnyKRY9fzqYThOXH6Dv95+mtFP4KTa2parlMdbPsGm7KQunKnADmFTI1P8Xh9napg2rVGQTqNduanqr64wYMWpnTp+iVFKwK2Bxvelt6f8KUgoEBGcZByYCQqgmGpJ3IhAVoSp1r49Q8QszsKGCQK8qGU/dG5eksqUSWecdww5I5+g3joI0et5e+vVwOh1nMoVUqgI3sL0020+x+XoJYpXkjgA8Cfs+ZEVqgXPPrFlzadGSz5UnHALcJyeXof59e2fxkpw0eWrAtVruV8u9RwTn3PvdO+9cCNWJiOybCEREqJBM+c92SIL9VBEqS6cF2H5as0wSdb2R7aeF4tluyiEFD6TT5C8O0Ea2napfjuG1ppZkCm9f63dNlQMS64ShFkYSMrVwCPQJdeRHE8eyrSD4Ty2hnVAiKgW6Xm49Jjjn1m8++30LoWbHRErOIxAxoTKHsjrsvMoXS2YSOIZvUVb3NqlWiNo3KK68e/cfT6epXx6itTvT6AivNYVkqmLzYstkqteaclY5IaFrQqbnv6BQcggYPmTIQCpSuHA27zZ45P3GbvbP8k9k6WDiobQpdbIjIDhnxyS3lcDpaMA/HlW3/WCPPlkCNeQ2LOR+syMQGaFyO1D3KkJlUkVQB02oVxSLp3vYftqkemEOI3iWJq04QEu3HqOjHMRBSaVMpBnMnoiEZJEpiNT69RhoeIVMs39J4ZQgdmoqRwOBJ+iy5SvkgQ8HvDDqCs5hgCVVBYFcgkBkhAoyZYBsQmUdMH5lJp7tpSlXJlL3my+jK4ol0IzVh2jOmsMctOEsx+VFoHuLTOF8xL5I7M1rkSmkUyHTXDLi5DYFAUFAELhEEYiaUCGpnpdQYyi1fH7q2qwEreFwgtNXHaIjx1kyhWoXJMqkil+NyUamPkK9RDGW2xIEBAFBQBDIBQhERqgMjFb5xrJ0irWoVpSkGLqjTlEqVSSOnZAO0aFjGedJlElV/Ti4kkpFMs0FY0tuURAQBASBXIVAZITKBMp/FqmCUFn/q39YvGVqUfpqx3Haf5TJFCTKUilUugglCEKFjdQMKShrTXPVeJObFQQEAUHgkkUgKkLF8hklqXJGBXfgnYIcJQnrTDOZRS3yBIFa/9nIlGEVJ6RLdmzJjQkCgoAgkKsQiIxQAZFDSgWxgmD5z0qcAVmqfy4BqSJKj9ryvhCpDyfZCAKCgCAgCFwSCEREqLhzTZ5Zt/yrMjajMmlyPZCoJlW9FTXvJTF25CYEAUFAEBAEDASiIlS0A/7U/1pq1WKqTaBcx85DUsWJkgQBQUAQEAQEgUsIgYgJFRhoadQQShU0el8Tp9oKkV5Cw0ZuRRAQBAQBQcCJQFSEqhtTBKpZVBc6tpBQJQkCgoAgIAgIApcqAp4QqgmOllqFQE1UJC8ICAKCgCBwqSPgOaFe6oDJ/QkCgoAgIAgIAv4QEEL1h4qUCQKCgCAgCAgCYSIghBomYFJdEBAEBAFBQBDwh4AQqj9UpEwQEAQEAUFAEAgTASHUMAGT6oKAICAICAKCgD8EhFD9oSJlgoAgIAgIAoJAmAgIoYYJmFQXBAQBQUAQEAT8ISCE6g8VKRMEBAFBQBAQBMJEQAg1TMCkuiAgCAgCgoAg4A8BIVR/qEiZICAICAKCgCAQJgJCqGECJtUFAUFAEBAEBAF/CAih+kNFygQBQUAQEAQEgTAREEINEzCpLggIAoKAICAI+ENACNUfKlImCAgCgoAgIAiEiYAQapiASXVBQBAQBAQBQcAfAkKo/lCRMkFAEBAEBAFBIEwEhFDDBEyqCwKCgCAgCAgC/hAQQvWHipQJAoKAICAICAJhIvD/Jvuro6vjJZoAAAAASUVORK5CYII=";var fp="2.23.3";var gp=hp({...dp.dark,base:"dark",brandTitle:`Lightning UI Components v${fp}`,brandUrl:"https://github.com/rdkcentral/Lightning-UI-Components",brandImage:pp});h();d();p();var Et="lui-addons",Vn=`${Et}/downloadbutton`,Gn=`${Et}/announcetoggle`,Yn=`${Et}/gridoverlaypanel`,mp=`${Et}/themepanel`,_p=`${Et}/componentstylespanel`,Xn=`${Et}/stagecolortoggle`,Kn=`${Et}/themepicker`;h();d();p();h();d();p();Ge();h();d();p();var dV=__STORYBOOK_COMPONENTS__,{A:pV,ActionBar:fV,AddonPanel:xp,Badge:gV,Bar:mV,Blockquote:_V,Button:yV,ClipboardCode:xV,Code:bV,DL:vV,Div:SV,DocumentWrapper:wV,EmptyTabContent:TV,ErrorFormatter:CV,FlexBar:AV,Form:EV,H1:IV,H2:RV,H3:PV,H4:kV,H5:OV,H6:LV,HR:DV,IconButton:Sr,IconButtonSkeleton:FV,Icons:wr,Img:BV,LI:MV,Link:NV,ListItem:zV,Loader:jV,Modal:UV,OL:HV,P:WV,Placeholder:qV,Pre:$V,ResetWrapper:VV,ScrollArea:GV,Separator:YV,Spaced:XV,Span:KV,StorybookIcon:JV,StorybookLogo:QV,Symbols:ZV,SyntaxHighlighter:eG,TT:tG,TabBar:rG,TabButton:bp,TabWrapper:iG,Table:sG,Tabs:nG,TabsState:oG,TooltipLinkList:vp,TooltipMessage:aG,TooltipNote:lG,UL:uG,WithTooltip:Sp,WithTooltipPure:cG,Zoom:hG,codeCommon:dG,components:pG,createCopyToClipboardFunction:fG,getStoryHref:gG,icons:mG,interleaveSeparators:_G,nameSpaceClassNames:yG,resetComponents:xG,withReset:bG}=__STORYBOOK_COMPONENTS__;var Pl=ye(Ce()),kl=hs(function(){let[{announce:e},t]=_t(),i=$n(),s=[!0,"true"].includes(e),n=ut(()=>{t({announce:!s})},[s]);return He(()=>{i.setAddonShortcut(Et,{label:"Announce Toggle [0]",actionName:"Announce",action:n})},[n,i]),(0,Pl.jsx)(Sr,{active:s,title:"Toggle a11y announcing (voice guidance) of components",onClick:n,children:(0,Pl.jsx)(wr,{icon:"speaker"})},Gn)});h();d();p();Ge();var Ol=ye(Ce()),Ll=hs(function(){let[{stageColor:e},t]=_t(),i=$n(),s=[!0,"true"].includes(e),n=ut(()=>{t({stageColor:!s})},[s]);return He(()=>{i.setAddonShortcut(Et,{label:"Stage Color Toggle",actionName:"stage color",showInMenu:!1,action:n})},[n,i]),(0,Ol.jsx)(Sr,{active:s,title:"Switch stage color",onClick:n,children:(0,Ol.jsx)(wr,{icon:"paintbrush"})},Xn)});h();d();p();Ge();h();d();p();h();d();p();h();d();p();h();d();p();var fe=class r{static mergeNumbers(e,t,i){return e*i+t*(1-i)}static rgb(e,t,i){return(e<<16)+(t<<8)+i+255*16777216}static rgba(e,t,i,s){return(e<<16)+(t<<8)+i+(s*255|0)*16777216}static getRgbString(e){let t=(e/65536|0)%256,i=(e/256|0)%256,s=e%256;return"rgb("+t+","+i+","+s+")"}static getRgbaString(e){let t=(e/65536|0)%256,i=(e/256|0)%256,s=e%256,n=(e/16777216|0)/255;return"rgba("+t+","+i+","+s+","+n.toFixed(4)+")"}static getRgbaStringFromArray(e){let t=Math.floor(e[0]*255),i=Math.floor(e[1]*255),s=Math.floor(e[2]*255),n=Math.floor(e[3]*255)/255;return"rgba("+t+","+i+","+s+","+n.toFixed(4)+")"}static getRgbaComponentsNormalized(e){let t=(e/65536|0)%256,i=(e/256|0)%256,s=e%256,n=e/16777216|0;return[t/255,i/255,s/255,n/255]}static getRgbComponentsNormalized(e){let t=(e/65536|0)%256,i=(e/256|0)%256,s=e%256;return[t/255,i/255,s/255]}static getRgbaComponents(e){let t=(e/65536|0)%256,i=(e/256|0)%256,s=e%256,n=e/16777216|0;return[t,i,s,n]}static getArgbNumber(e){e[0]=Math.max(0,Math.min(255,e[0])),e[1]=Math.max(0,Math.min(255,e[1])),e[2]=Math.max(0,Math.min(255,e[2])),e[3]=Math.max(0,Math.min(255,e[3]));let t=((e[3]|0)<<24)+((e[0]|0)<<16)+((e[1]|0)<<8)+(e[2]|0);return t<0&&(t=4294967295+t+1),t}static mergeColors(e,t,i){let s=(e/65536|0)%256,n=(e/256|0)%256,o=e%256,a=e/16777216|0,l=(t/65536|0)%256,u=(t/256|0)%256,c=t%256,g=t/16777216|0,m=s*i+l*(1-i),y=n*i+u*(1-i),b=o*i+c*(1-i),C=a*i+g*(1-i);return Math.round(C)*16777216+Math.round(m)*65536+Math.round(y)*256+Math.round(b)}static mergeMultiColors(e,t){let i=0,s=0,n=0,o=0,a=0,l=e.length;for(let u=0;u<l;u++){let c=(e[u]/65536|0)%256,g=(e[u]/256|0)%256,m=e[u]%256,y=e[u]/16777216|0;i+=c*t[u],s+=g*t[u],n+=m*t[u],o+=y*t[u],a+=t[u]}return a=1/a,Math.round(o*a)*16777216+Math.round(i*a)*65536+Math.round(s*a)*256+Math.round(n*a)}static mergeMultiColorsEqual(e){let t=0,i=0,s=0,n=0,o=0,a=e.length;for(let l=0;l<a;l++){let u=(e[l]/65536|0)%256,c=(e[l]/256|0)%256,g=e[l]%256,m=e[l]/16777216|0;t+=u,i+=c,s+=g,n+=m,o+=1}return o=1/o,Math.round(n*o)*16777216+Math.round(t*o)*65536+Math.round(i*o)*256+Math.round(s*o)}static mergeColorAlpha(e,t){let i=(e/16777216|0)*t|0;return((e>>16&255)*i/255&255)+((e&65280)*i/255&65280)+(((e&255)<<16)*i/255&16711680)+(i<<24)}static rad(e){return e*(Math.PI/180)}static getTimingBezier(e,t,i,s){let n=3*e,o=3*(i-e)-n,a=1-n-o,l=3*t,u=3*(s-t)-l,c=1-l-u;return function(g){if(g>=1)return 1;if(g<=0)return 0;let m=.5,y,b,C;for(let R=0;R<20;R++){if(y=m*(m*(m*a+o)+n),C=g-y,C>-1e-8&&C<1e-8)return m*(m*(m*c+u)+l);if(b=m*(m*(3*a)+2*o)+n,b>1e-10&&b<1e-10)break;m+=C/b}let A=0,T=1;for(let R=0;R<20;R++){if(m=.5*(A+T),y=m*(m*(m*a+o)+n),C=g-y,C>-1e-8&&C<1e-8)return m*(m*(m*c+u)+l);C<0?T=m:A=m}}}static getTimingFunction(e){switch(e){case"linear":return function(i){return i};case"ease":return r.getTimingBezier(.25,.1,.25,1);case"ease-in":return r.getTimingBezier(.42,0,1,1);case"ease-out":return r.getTimingBezier(0,0,.58,1);case"ease-in-out":return r.getTimingBezier(.42,0,.58,1);case"step-start":return function(){return 1};case"step-end":return function(i){return i===1?1:0};default:let t="cubic-bezier(";if(e&&e.indexOf(t)===0){let i=e.substr(t.length,e.length-t.length-1).split(",");if(i.length!==4)return console.warn("[Lightning] Unknown timing function: "+e),function(l){return l};let s=parseFloat(i[0]),n=parseFloat(i[1]),o=parseFloat(i[2]),a=parseFloat(i[3]);return isNaN(s)||isNaN(n)||isNaN(o)||isNaN(a)?(console.warn("[Lightning] Unknown timing function: "+e),function(l){return l}):r.getTimingBezier(s,n,o,a)}else return console.warn("[Lightning] Unknown timing function: "+e),function(i){return i}}}},K=class{static isFunction(e){return typeof e=="function"}static isNumber(e){return typeof e=="number"}static isInteger(e){return typeof e=="number"&&e%1===0}static isBoolean(e){return e===!0||e===!1}static isString(e){return typeof e=="string"}static clone(e){return K.isObjectLiteral(e)||Array.isArray(e)?K.getDeepClone(e):e}static cloneObjShallow(e){let t=Object.keys(e),i={};for(let s=0;s<t.length;s++)i[t[s]]=e[t[s]];return i}static merge(e,t){let i=Object.keys(t);for(let s=0;s<i.length;s++)e[i[s]]=t[i[s]];return e}static isObject(e){let t=typeof e;return!!e&&(t==="object"||t==="function")}static isPlainObject(e){return!!e&&typeof e==="object"}static isObjectLiteral(e){return typeof e=="object"&&e&&e.constructor===Object}static getArrayIndex(e,t){return K.getModuloIndex(e,t.length)}static getModuloIndex(e,t){if(t===0)return e;for(;e<0;)e+=Math.ceil(-e/t)*t;return e=e%t,e}static getDeepClone(e){let t,i;if(K.isFunction(e))return e;if(Array.isArray(e)){i=[];let s=Object.keys(e);for(t=0;t<s.length;t++)i[s[t]]=K.getDeepClone(e[s[t]]);return i}else if(K.isObject(e)){i={};let s=Object.keys(e);for(t=0;t<s.length;t++)i[s[t]]=K.getDeepClone(e[s[t]]);return i}else return e}static equalValues(e,t){return typeof e!=typeof t?!1:K.isObjectLiteral(e)?K.isObjectLiteral(t)&&K.equalObjectLiterals(e,t):Array.isArray(e)?Array.isArray(t)&&K.equalArrays(e,t):e===t}static equalObjectLiterals(e,t){let i=Object.keys(e),s=Object.keys(t);if(i.length!==s.length)return!1;for(let n=0,o=i.length;n<o;n++){let a=i[n],l=s[n];if(a!==l)return!1;let u=e[a],c=t[l];if(!K.equalValues(u,c))return!1}return!0}static equalArrays(e,t){if(e.length!==t.length)return!1;for(let i=0,s=e.length;i<s;i++)if(!this.equalValues(e[i],t[i]))return!1;return!0}static setToArray(e){let t=[];return e.forEach(function(i){t.push(i)}),t}static iteratorToArray(e){let t=[],i=e.next();for(;!i.done;)t.push(i.value),i=e.next();return t}static isUcChar(e){return e>=65&&e<=90}};K.isWeb=typeof window<"u"&&typeof sparkscene>"u";K.isWPE=K.isWeb&&navigator.userAgent.indexOf("WPE")!==-1;K.isSpark=typeof sparkscene<"u";K.isNode=typeof window>"u"||K.isSpark;K.isPS4=K.isWeb&&navigator.userAgent.indexOf("PlayStation 4")!==-1;K.isZiggo=K.isWeb&&(navigator.userAgent.indexOf("EOSSTB")!==-1||navigator.userAgent.indexOf("HZNSTB")!==-1);var dt=class r{static defaultSetter(e,t,i){e[t]=i}static patchObject(e,t){if(!K.isObjectLiteral(t))console.error("[Lightning] Settings must be object literal");else{let i=Object.keys(t);for(let s=0,n=i.length;s<n;s++){let o=i[s];this.patchObjectProperty(e,o,t[o])}}}static patchObjectProperty(e,t,i){let s=e.setSetting||r.defaultSetter;t.charAt(0)==="_"?t!=="__create"&&console.error("[Lightning] Patch of private property '"+t+"' is not allowed"):t!=="type"&&(K.isFunction(i)&&i.__local&&(i=i.__local(e)),s(e,t,i))}static local(e){e.__local=!0}},Qn=class{static getSpacing(e,t,i){let s=t-1,n,o,a;switch(e){case"flex-start":o=0,a=0;break;case"flex-end":o=i,a=0;break;case"center":o=i/2,a=0;break;case"space-between":o=0,a=Math.max(0,i)/s;break;case"space-around":if(i<0)return this.getSpacing("center",t,i);n=i/(s+1),o=.5*n,a=n;break;case"space-evenly":if(i<0)return this.getSpacing("center",t,i);n=i/(s+2),o=n,a=n;break;case"stretch":o=0,a=0;break;default:throw new Error("Unknown mode: "+e)}return{spacingBefore:o,spacingBetween:a}}},Dl=class{constructor(e){this._layout=e,this._totalCrossAxisSize=0}get _lines(){return this._layout._lines}init(){this._totalCrossAxisSize=this._getTotalCrossAxisSize()}align(){let t=this._layout.crossAxisSize-this._totalCrossAxisSize,{spacingBefore:i,spacingBetween:s}=this._getSpacing(t),n=this._lines,o=this._layout._flexContainer.alignContent,a=0;o==="stretch"&&n.length&&t>0&&(a=t/n.length);let l=i;for(let u=0,c=n.length;u<c;u++){let g=l,m=n[u].createItemAligner(),y=n[u].crossAxisLayoutSize+a;m.setCrossAxisLayoutSize(y),m.setCrossAxisLayoutOffset(g),m.align(),m.recursiveResizeOccured&&n[u].setItemPositions(),l+=y,l+=s}}get totalCrossAxisSize(){return this._totalCrossAxisSize}_getTotalCrossAxisSize(){let e=this._lines,t=0;for(let i=0,s=e.length;i<s;i++){let n=e[i];t+=n.crossAxisLayoutSize}return t}_getSpacing(e){let t=this._layout._flexContainer.alignContent,i=this._lines.length;return Qn.getSpacing(t,i,e)}},pe=class{static getParentAxisSizeWithPadding(e,t){let s=e.target.getParent();if(s){let n=e.flexParent;return n?this.getAxisLayoutSize(n,t)+this.getTotalPadding(n,t):t?s.w:s.h}else return 0}static getRelAxisSize(e,t){return t?e.funcW?this._allowRelAxisSizeFunction(e,!0)?e.funcW(this.getParentAxisSizeWithPadding(e,!0)):0:e.originalWidth:e.funcH?this._allowRelAxisSizeFunction(e,!1)?e.funcH(this.getParentAxisSizeWithPadding(e,!1)):0:e.originalHeight}static _allowRelAxisSizeFunction(e,t){let i=e.flexParent;return!(i&&i._flex._layout.isAxisFitToContents(t))}static isZeroAxisSize(e,t){return t?!e.originalWidth&&!e.funcW:!e.originalHeight&&!e.funcH}static getAxisLayoutPos(e,t){return t?e.x:e.y}static getAxisLayoutSize(e,t){return t?e.w:e.h}static setAxisLayoutPos(e,t,i){t?e.x=i:e.y=i}static setAxisLayoutSize(e,t,i){t?e.w=i:e.h=i}static getAxisMinSize(e,t){let i=this.getPlainAxisMinSize(e,t),s=0;return e.isFlexItemEnabled()&&(s=e._flexItem._getMinSizeSetting(t)),s>0&&(i=Math.max(i,s)),i}static getPlainAxisMinSize(e,t){return e.isFlexEnabled()?e._flex._layout.getAxisMinSize(t):e.flexItem.shrink!==0?0:this.getRelAxisSize(e,t)}static resizeAxis(e,t,i){e.isFlexEnabled()?e._flex._horizontal===t?e._flex._layout.resizeMainAxis(i):e._flex._layout.resizeCrossAxis(i):this.setAxisLayoutSize(e,t,i)}static getPaddingOffset(e,t){if(e.isFlexEnabled()){let i=e._flex;return t?i.paddingLeft:i.paddingTop}else return 0}static getTotalPadding(e,t){if(e.isFlexEnabled()){let i=e._flex;return t?i.paddingRight+i.paddingLeft:i.paddingTop+i.paddingBottom}else return 0}static getMarginOffset(e,t){let i=e.flexItem;return i?t?i.marginLeft:i.marginTop:0}static getTotalMargin(e,t){let i=e.flexItem;return i?t?i.marginRight+i.marginLeft:i.marginTop+i.marginBottom:0}},Fl=class{constructor(e){this._line=e,this._amountRemaining=0,this._shrunkSize=0}shrink(e){this._shrunkSize=0,this._amountRemaining=e;let t=this._getTotalShrinkAmount();if(t){let i=this._line.items;do{let s=this._amountRemaining/t;for(let n=this._line.startIndex;n<=this._line.endIndex;n++){let a=i[n].flexItem,l=a.shrink;if(l>0){let c=l*s,g=a._getMainAxisMinSize(),m=a._getMainAxisLayoutSize();if(m>g){let y=m-g;c>=y&&(c=y,t-=l);let C=m-c;if(a._resizeMainAxis(C),this._shrunkSize+=c,this._amountRemaining-=c,Math.abs(this._amountRemaining)<1e-5)return}}}}while(t&&Math.abs(this._amountRemaining)>1e-5)}}_getTotalShrinkAmount(){let e=0,t=this._line.items;for(let i=this._line.startIndex;i<=this._line.endIndex;i++){let n=t[i].flexItem;if(n.shrink){let o=n._getMainAxisMinSize();n._getMainAxisLayoutSize()>o&&(e+=n.shrink)}}return e}getShrunkSize(){return this._shrunkSize}},Bl=class{constructor(e){this._line=e,this._amountRemaining=0,this._grownSize=0}grow(e){this._grownSize=0,this._amountRemaining=e;let t=this._getTotalGrowAmount();if(t){let i=this._line.items;do{let s=this._amountRemaining/t;for(let n=this._line.startIndex;n<=this._line.endIndex;n++){let a=i[n].flexItem,l=a.grow;if(l>0){let c=l*s,g=a._getMainAxisMaxSizeSetting(),m=a._getMainAxisLayoutSize();if(g>0)if(m>=g)c=0;else{let y=g-m;c>=y&&(c=y,t-=l)}if(c>0){let y=m+c;if(a._resizeMainAxis(y),this._grownSize+=c,this._amountRemaining-=c,Math.abs(this._amountRemaining)<1e-5)return}}}}while(t&&Math.abs(this._amountRemaining)>1e-5)}}_getTotalGrowAmount(){let e=0,t=this._line.items;for(let i=this._line.startIndex;i<=this._line.endIndex;i++){let n=t[i].flexItem;if(n.grow){let o=n._getMainAxisMaxSizeSetting(),a=n._getMainAxisLayoutSize();(o===0||a<o)&&(e+=n.grow)}}return e}getGrownSize(){return this._grownSize}},Ml=class{constructor(e){this._line=e}get _layout(){return this._line._layout}position(){let{spacingBefore:e,spacingBetween:t}=this._getSpacing(),i=e,s=this._line.items;for(let n=this._line.startIndex;n<=this._line.endIndex;n++){let o=s[n];o.flexItem._setMainAxisLayoutPos(i),i+=o.flexItem._getMainAxisLayoutSizeWithPaddingAndMargin(),i+=t}}_getSpacing(){let e=this._line._availableSpace,t=this._layout._flexContainer.justifyContent,i=this._line.numberOfItems;return Qn.getSpacing(t,i,e)}},Nl=class{constructor(e){this._line=e,this._crossAxisLayoutSize=0,this._crossAxisLayoutOffset=0,this._alignItemsSetting=null,this._recursiveResizeOccured=!1,this._isCrossAxisFitToContents=!1}get _layout(){return this._line._layout}get _flexContainer(){return this._layout._flexContainer}setCrossAxisLayoutSize(e){this._crossAxisLayoutSize=e}setCrossAxisLayoutOffset(e){this._crossAxisLayoutOffset=e}align(){this._alignItemsSetting=this._flexContainer.alignItems,this._isCrossAxisFitToContents=this._layout.isAxisFitToContents(!this._flexContainer._horizontal),this._recursiveResizeOccured=!1;let e=this._line.items;for(let t=this._line.startIndex;t<=this._line.endIndex;t++){let i=e[t];this._alignItem(i)}}get recursiveResizeOccured(){return this._recursiveResizeOccured}_alignItem(e){let t=e.flexItem,i=t.alignSelf||this._alignItemsSetting;switch(i==="stretch"&&this._preventStretch(t)&&(i="flex-start"),i!=="stretch"&&!this._isCrossAxisFitToContents&&t._hasRelCrossAxisSize()&&t._resetCrossAxisLayoutSize(),i){case"flex-start":this._alignItemFlexStart(t);break;case"flex-end":this._alignItemFlexEnd(t);break;case"center":this._alignItemFlexCenter(t);break;case"stretch":this._alignItemStretch(t);break}}_alignItemFlexStart(e){e._setCrossAxisLayoutPos(this._crossAxisLayoutOffset)}_alignItemFlexEnd(e){let t=e._getCrossAxisLayoutSizeWithPaddingAndMargin();e._setCrossAxisLayoutPos(this._crossAxisLayoutOffset+(this._crossAxisLayoutSize-t))}_alignItemFlexCenter(e){let t=e._getCrossAxisLayoutSizeWithPaddingAndMargin(),i=(this._crossAxisLayoutSize-t)/2;e._setCrossAxisLayoutPos(this._crossAxisLayoutOffset+i)}_alignItemStretch(e){e._setCrossAxisLayoutPos(this._crossAxisLayoutOffset);let t=e._getMainAxisLayoutSize(),i=this._crossAxisLayoutSize-e._getCrossAxisMargin()-e._getCrossAxisPadding(),s=e._getCrossAxisMinSizeSetting();s>0&&(i=Math.max(i,s));let n=e._getCrossAxisMaxSizeSetting();n>0&&(i=Math.min(i,n)),e._resizeCrossAxis(i),e._getMainAxisLayoutSize()!==t&&(this._recursiveResizeOccured=!0)}_preventStretch(e){let t=e._hasFixedCrossAxisSize(),i=e.alignSelf==="stretch";return t&&!i}},zl=class{constructor(e,t,i,s){this._layout=e,this.items=e.items,this.startIndex=t,this.endIndex=i,this._availableSpace=s}performLayout(){this._setItemSizes(),this.setItemPositions(),this._calcLayoutInfo()}_setItemSizes(){this._availableSpace>0?this._growItemSizes(this._availableSpace):this._availableSpace<0&&this._shrinkItemSizes(-this._availableSpace)}_growItemSizes(e){let t=new Bl(this);t.grow(e),this._availableSpace-=t.getGrownSize()}_shrinkItemSizes(e){let t=new Fl(this);t.shrink(e),this._availableSpace+=t.getShrunkSize()}setItemPositions(){new Ml(this).position()}createItemAligner(){return new Nl(this)}_calcLayoutInfo(){this._calcCrossAxisMaxLayoutSize()}getMainAxisMinSize(){let e=0;for(let t=this.startIndex;t<=this.endIndex;t++){let i=this.items[t];e+=i.flexItem._getMainAxisMinSizeWithPaddingAndMargin()}return e}get numberOfItems(){return this.endIndex-this.startIndex+1}get crossAxisLayoutSize(){let e=this._layout.isCrossAxisFitToContents()&&!this._layout.resizingCrossAxis;return this._layout.isWrapping()||e?this._crossAxisMaxLayoutSize:this._layout.crossAxisSize}_calcCrossAxisMaxLayoutSize(){this._crossAxisMaxLayoutSize=this._getCrossAxisMaxLayoutSize()}_getCrossAxisMaxLayoutSize(){let e=0;for(let t=this.startIndex;t<=this.endIndex;t++){let i=this.items[t];e=Math.max(e,i.flexItem._getCrossAxisLayoutSizeWithPaddingAndMargin())}return e}},jl=class{constructor(e){this._layout=e,this._mainAxisMinSize=-1,this._crossAxisMinSize=-1,this._mainAxisContentSize=0}get lines(){return this._lines}get mainAxisMinSize(){return this._mainAxisMinSize===-1&&(this._mainAxisMinSize=this._getMainAxisMinSize()),this._mainAxisMinSize}get crossAxisMinSize(){return this._crossAxisMinSize===-1&&(this._crossAxisMinSize=this._getCrossAxisMinSize()),this._crossAxisMinSize}get mainAxisContentSize(){return this._mainAxisContentSize}layoutLines(){this._setup();let e=this._layout.items,t=this._layout.isWrapping(),i=0,s,n=e.length;for(s=0;s<n;s++){let o=e[s];this._layoutFlexItem(o);let a=o.flexItem._getMainAxisLayoutSizeWithPaddingAndMargin();t&&s>i&&this._curMainAxisPos+a>this._mainAxisSize&&(this._layoutLine(i,s-1),this._curMainAxisPos=0,i=s),this._addToMainAxisPos(a)}i<s&&this._layoutLine(i,s-1)}_layoutFlexItem(e){e.isFlexEnabled()?e.flexLayout.updateTreeLayout():e.flexItem._resetLayoutSize()}_setup(){this._mainAxisSize=this._layout.mainAxisSize,this._curMainAxisPos=0,this._maxMainAxisPos=0,this._lines=[],this._mainAxisMinSize=-1,this._crossAxisMinSize=-1,this._mainAxisContentSize=0}_addToMainAxisPos(e){this._curMainAxisPos+=e,this._curMainAxisPos>this._maxMainAxisPos&&(this._maxMainAxisPos=this._curMainAxisPos)}_layoutLine(e,t){let i=this._getAvailableMainAxisLayoutSpace(),s=new zl(this._layout,e,t,i);s.performLayout(),this._lines.push(s),(this._mainAxisContentSize===0||this._curMainAxisPos>this._mainAxisContentSize)&&(this._mainAxisContentSize=this._curMainAxisPos)}_getAvailableMainAxisLayoutSpace(){return!this._layout.resizingMainAxis&&this._layout.isMainAxisFitToContents()?0:this._mainAxisSize-this._curMainAxisPos}_getCrossAxisMinSize(){let e=0,t=this._layout.items;for(let i=0,s=t.length;i<s;i++){let o=t[i].flexItem._getCrossAxisMinSizeWithPaddingAndMargin();e=Math.max(e,o)}return e}_getMainAxisMinSize(){return this._lines.length===1?this._lines[0].getMainAxisMinSize():this._layout.mainAxisSize}},Ul=class r{constructor(e){this._layout=e,this._isReverse=this._flexContainer._reverse,this._horizontalPaddingOffset=this._layout._getHorizontalPaddingOffset(),this._verticalPaddingOffset=this._layout._getVerticalPaddingOffset()}get _flexContainer(){return this._layout._flexContainer}finalize(){let e=this._layout.getParentFlexContainer();e?new r(e._layout)._finalizeItemAndChildren(this._flexContainer.item):(this._finalizeRoot(),this._finalizeItems())}_finalizeRoot(){let e=this._flexContainer.item,t=pe.getAxisLayoutPos(e,!0),i=pe.getAxisLayoutPos(e,!1),s=pe.getAxisLayoutSize(e,!0),n=pe.getAxisLayoutSize(e,!1);s+=this._layout._getHorizontalPadding(),n+=this._layout._getVerticalPadding(),e.clearRecalcFlag(),e.setLayout(t,i,s,n)}_finalizeItems(){let e=this._layout.items;for(let t=0,i=e.length;t<i;t++){let s=e[t],n=this._validateItemCache(s);this._finalizeItem(s),n||this._finalizeItemChildren(s)}}_validateItemCache(e){if(e.recalc===0&&e.isFlexEnabled()){let t=e._flex._layout;if(e.w===e.target.w&&e.h===e.target.h)return!0;{let s=t.crossAxisSize;t.performResizeMainAxis(t.mainAxisSize),t.performResizeCrossAxis(s)}}return!1}_finalizeItemAndChildren(e){this._finalizeItem(e),this._finalizeItemChildren(e)}_finalizeItem(e){this._isReverse&&this._reverseMainAxisLayoutPos(e);let t=pe.getAxisLayoutPos(e,!0),i=pe.getAxisLayoutPos(e,!1),s=pe.getAxisLayoutSize(e,!0),n=pe.getAxisLayoutSize(e,!1);t+=this._horizontalPaddingOffset,i+=this._verticalPaddingOffset,e.flex&&(s+=e._flex._layout._getHorizontalPadding(),n+=e._flex._layout._getVerticalPadding());let a=e.flexItem;a&&(t+=a._getHorizontalMarginOffset(),i+=a._getVerticalMarginOffset()),e.clearRecalcFlag(),e.setLayout(t,i,s,n)}_finalizeItemChildren(e){let t=e._flex;t&&new r(t._layout)._finalizeItems()}_reverseMainAxisLayoutPos(e){let t=e.flexItem._getMainAxisLayoutPos()+e.flexItem._getMainAxisLayoutSizeWithPaddingAndMargin(),i=this._layout.mainAxisSize-t;e.flexItem._setMainAxisLayoutPos(i)}},Hl=class{constructor(e){this._flexContainer=e,this._lineLayouter=new jl(this),this._resizingMainAxis=!1,this._resizingCrossAxis=!1,this._cachedMainAxisSizeAfterLayout=0,this._cachedCrossAxisSizeAfterLayout=0,this._shrunk=!1}get shrunk(){return this._shrunk}get recalc(){return this.item.recalc}layoutTree(){this.item.flexParent!==null?this._updateSubTreeLayout():this.updateTreeLayout(),this.updateItemCoords()}updateTreeLayout(){this.recalc?this._performUpdateLayoutTree():this._performUpdateLayoutTreeFromCache()}_performUpdateLayoutTree(){this._setInitialAxisSizes(),this._layoutAxes(),this._refreshLayoutCache()}_refreshLayoutCache(){this._cachedMainAxisSizeAfterLayout=this.mainAxisSize,this._cachedCrossAxisSizeAfterLayout=this.crossAxisSize}_performUpdateLayoutTreeFromCache(){this.item.funcW||this.item.funcH?(this.item.enableLocalRecalcFlag(),this._performUpdateLayoutTree()):(this.mainAxisSize=this._cachedMainAxisSizeAfterLayout,this.crossAxisSize=this._cachedCrossAxisSizeAfterLayout)}updateItemCoords(){new Ul(this).finalize()}_updateSubTreeLayout(){let e=this.crossAxisSize;this._layoutMainAxis(),this.performResizeCrossAxis(e)}_setInitialAxisSizes(){this.item.isFlexItemEnabled()?this.item.flexItem._resetLayoutSize():(this.mainAxisSize=this._getMainAxisBasis(),this.crossAxisSize=this._getCrossAxisBasis()),this._resizingMainAxis=!1,this._resizingCrossAxis=!1,this._shrunk=!1}_layoutAxes(){this._layoutMainAxis(),this._layoutCrossAxis()}_layoutMainAxis(){this._layoutLines(),this._fitMainAxisSizeToContents()}_layoutLines(){this._lineLayouter.layoutLines()}get _lines(){return this._lineLayouter.lines}_fitMainAxisSizeToContents(){this._resizingMainAxis||this.isMainAxisFitToContents()&&(this.mainAxisSize=this._lineLayouter.mainAxisContentSize)}_layoutCrossAxis(){let e=new Dl(this);e.init(),this._totalCrossAxisSize=e.totalCrossAxisSize,this._fitCrossAxisSizeToContents(),e.align()}_fitCrossAxisSizeToContents(){this._resizingCrossAxis||this.isCrossAxisFitToContents()&&(this.crossAxisSize=this._totalCrossAxisSize)}isWrapping(){return this._flexContainer.wrap}isAxisFitToContents(e){return this._horizontal===e?this.isMainAxisFitToContents():this.isCrossAxisFitToContents()}isMainAxisFitToContents(){return!this.isWrapping()&&!this._hasFixedMainAxisBasis()}isCrossAxisFitToContents(){return!this._hasFixedCrossAxisBasis()}_hasFixedMainAxisBasis(){return!pe.isZeroAxisSize(this.item,this._horizontal)}_hasFixedCrossAxisBasis(){return!pe.isZeroAxisSize(this.item,!this._horizontal)}getAxisMinSize(e){return this._horizontal===e?this._getMainAxisMinSize():this._getCrossAxisMinSize()}_getMainAxisMinSize(){return this._lineLayouter.mainAxisMinSize}_getCrossAxisMinSize(){return this._lineLayouter.crossAxisMinSize}resizeMainAxis(e){this.mainAxisSize!==e&&(this.recalc>0?this.performResizeMainAxis(e):this._checkValidCacheMainAxisResize()?(this.mainAxisSize=e,this._fitCrossAxisSizeToContents()):(this.item.enableLocalRecalcFlag(),this.performResizeMainAxis(e)))}_checkValidCacheMainAxisResize(e){return e===this.targetMainAxisSize||!this.isCrossAxisFitToContents()}performResizeMainAxis(e){let t=e<this.mainAxisSize;this._shrunk=t,this.mainAxisSize=e,this._resizingMainAxis=!0,this._layoutAxes(),this._resizingMainAxis=!1}resizeCrossAxis(e){this.crossAxisSize!==e&&(this.recalc>0?this.performResizeCrossAxis(e):this.crossAxisSize=e)}performResizeCrossAxis(e){this.crossAxisSize=e,this._resizingCrossAxis=!0,this._layoutCrossAxis(),this._resizingCrossAxis=!1}get targetMainAxisSize(){return this._horizontal?this.item.target.w:this.item.target.h}get targetCrossAxisSize(){return this._horizontal?this.item.target.h:this.item.target.w}getParentFlexContainer(){return this.item.isFlexItemEnabled()?this.item.flexItem.ctr:null}_getHorizontalPadding(){return pe.getTotalPadding(this.item,!0)}_getVerticalPadding(){return pe.getTotalPadding(this.item,!1)}_getHorizontalPaddingOffset(){return pe.getPaddingOffset(this.item,!0)}_getVerticalPaddingOffset(){return pe.getPaddingOffset(this.item,!1)}_getMainAxisBasis(){return pe.getRelAxisSize(this.item,this._horizontal)}_getCrossAxisBasis(){return pe.getRelAxisSize(this.item,!this._horizontal)}get _horizontal(){return this._flexContainer._horizontal}get _reverse(){return this._flexContainer._reverse}get item(){return this._flexContainer.item}get items(){return this.item.items}get resizingMainAxis(){return this._resizingMainAxis}get resizingCrossAxis(){return this._resizingCrossAxis}get numberOfItems(){return this.items.length}get mainAxisSize(){return pe.getAxisLayoutSize(this.item,this._horizontal)}get crossAxisSize(){return pe.getAxisLayoutSize(this.item,!this._horizontal)}set mainAxisSize(e){pe.setAxisLayoutSize(this.item,this._horizontal,e)}set crossAxisSize(e){pe.setAxisLayoutSize(this.item,!this._horizontal,e)}},Tr=class r{constructor(e){this._item=e,this._layout=new Hl(this),this._horizontal=!0,this._reverse=!1,this._wrap=!1,this._alignItems="stretch",this._justifyContent="flex-start",this._alignContent="flex-start",this._paddingLeft=0,this._paddingTop=0,this._paddingRight=0,this._paddingBottom=0}get item(){return this._item}_changedDimensions(){this._item.changedDimensions()}_changedContents(){this._item.changedContents()}get direction(){return(this._horizontal?"row":"column")+(this._reverse?"-reverse":"")}set direction(e){this.direction!==e&&(this._horizontal=e==="row"||e==="row-reverse",this._reverse=e==="row-reverse"||e==="column-reverse",this._changedContents())}set wrap(e){this._wrap=e,this._changedContents()}get wrap(){return this._wrap}get alignItems(){return this._alignItems}set alignItems(e){if(this._alignItems!==e){if(r.ALIGN_ITEMS.indexOf(e)===-1)throw new Error("Unknown alignItems, options: "+r.ALIGN_ITEMS.join(","));this._alignItems=e,this._changedContents()}}get alignContent(){return this._alignContent}set alignContent(e){if(this._alignContent!==e){if(r.ALIGN_CONTENT.indexOf(e)===-1)throw new Error("Unknown alignContent, options: "+r.ALIGN_CONTENT.join(","));this._alignContent=e,this._changedContents()}}get justifyContent(){return this._justifyContent}set justifyContent(e){if(this._justifyContent!==e){if(r.JUSTIFY_CONTENT.indexOf(e)===-1)throw new Error("Unknown justifyContent, options: "+r.JUSTIFY_CONTENT.join(","));this._justifyContent=e,this._changedContents()}}set padding(e){this.paddingLeft=e,this.paddingTop=e,this.paddingRight=e,this.paddingBottom=e}get padding(){return this.paddingLeft}set paddingLeft(e){this._paddingLeft=e,this._changedDimensions()}get paddingLeft(){return this._paddingLeft}set paddingTop(e){this._paddingTop=e,this._changedDimensions()}get paddingTop(){return this._paddingTop}set paddingRight(e){this._paddingRight=e,this._changedDimensions()}get paddingRight(){return this._paddingRight}set paddingBottom(e){this._paddingBottom=e,this._changedDimensions()}get paddingBottom(){return this._paddingBottom}patch(e){dt.patchObject(this,e)}};Tr.ALIGN_ITEMS=["flex-start","flex-end","center","stretch"];Tr.ALIGN_CONTENT=["flex-start","flex-end","center","space-between","space-around","space-evenly","stretch"];Tr.JUSTIFY_CONTENT=["flex-start","flex-end","center","space-between","space-around","space-evenly"];var Zn=class r{constructor(e){this._ctr=null,this._item=e,this._grow=0,this._shrink=r.SHRINK_AUTO,this._alignSelf=void 0,this._minWidth=0,this._minHeight=0,this._maxWidth=0,this._maxHeight=0,this._marginLeft=0,this._marginTop=0,this._marginRight=0,this._marginBottom=0}get item(){return this._item}get grow(){return this._grow}set grow(e){this._grow!==e&&(this._grow=parseInt(e)||0,this._changed())}get shrink(){return this._shrink===r.SHRINK_AUTO?this._getDefaultShrink():this._shrink}_getDefaultShrink(){return this.item.isFlexEnabled()?1:0}set shrink(e){this._shrink!==e&&(this._shrink=parseInt(e)||0,this._changed())}get alignSelf(){return this._alignSelf}set alignSelf(e){if(this._alignSelf!==e){if(e===void 0)this._alignSelf=void 0;else{if(Tr.ALIGN_ITEMS.indexOf(e)===-1)throw new Error("Unknown alignSelf, options: "+Tr.ALIGN_ITEMS.join(","));this._alignSelf=e}this._changed()}}get minWidth(){return this._minWidth}set minWidth(e){this._minWidth=Math.max(0,e),this._item.changedDimensions(!0,!1)}get minHeight(){return this._minHeight}set minHeight(e){this._minHeight=Math.max(0,e),this._item.changedDimensions(!1,!0)}get maxWidth(){return this._maxWidth}set maxWidth(e){this._maxWidth=Math.max(0,e),this._item.changedDimensions(!0,!1)}get maxHeight(){return this._maxHeight}set maxHeight(e){this._maxHeight=Math.max(0,e),this._item.changedDimensions(!1,!0)}set margin(e){this.marginLeft=e,this.marginTop=e,this.marginRight=e,this.marginBottom=e}get margin(){return this.marginLeft}set marginLeft(e){this._marginLeft=e,this._changed()}get marginLeft(){return this._marginLeft}set marginTop(e){this._marginTop=e,this._changed()}get marginTop(){return this._marginTop}set marginRight(e){this._marginRight=e,this._changed()}get marginRight(){return this._marginRight}set marginBottom(e){this._marginBottom=e,this._changed()}get marginBottom(){return this._marginBottom}_changed(){this.ctr&&this.ctr._changedContents()}set ctr(e){this._ctr=e}get ctr(){return this._ctr}patch(e){dt.patchObject(this,e)}_resetLayoutSize(){this._resetHorizontalAxisLayoutSize(),this._resetVerticalAxisLayoutSize()}_resetCrossAxisLayoutSize(){this.ctr._horizontal?this._resetVerticalAxisLayoutSize():this._resetHorizontalAxisLayoutSize()}_resetHorizontalAxisLayoutSize(){let e=pe.getRelAxisSize(this.item,!0);this._minWidth&&(e=Math.max(this._minWidth,e)),this._maxWidth&&(e=Math.min(this._maxWidth,e)),pe.setAxisLayoutSize(this.item,!0,e)}_resetVerticalAxisLayoutSize(){let e=pe.getRelAxisSize(this.item,!1);this._minHeight&&(e=Math.max(this._minHeight,e)),this._maxHeight&&(e=Math.min(this._maxHeight,e)),pe.setAxisLayoutSize(this.item,!1,e)}_getCrossAxisMinSizeSetting(){return this._getMinSizeSetting(!this.ctr._horizontal)}_getCrossAxisMaxSizeSetting(){return this._getMaxSizeSetting(!this.ctr._horizontal)}_getMainAxisMaxSizeSetting(){return this._getMaxSizeSetting(this.ctr._horizontal)}_getMinSizeSetting(e){return e?this._minWidth:this._minHeight}_getMaxSizeSetting(e){return e?this._maxWidth:this._maxHeight}_getMainAxisMinSize(){return pe.getAxisMinSize(this.item,this.ctr._horizontal)}_getCrossAxisMinSize(){return pe.getAxisMinSize(this.item,!this.ctr._horizontal)}_getMainAxisLayoutSize(){return pe.getAxisLayoutSize(this.item,this.ctr._horizontal)}_getMainAxisLayoutPos(){return pe.getAxisLayoutPos(this.item,this.ctr._horizontal)}_setMainAxisLayoutPos(e){return pe.setAxisLayoutPos(this.item,this.ctr._horizontal,e)}_setCrossAxisLayoutPos(e){return pe.setAxisLayoutPos(this.item,!this.ctr._horizontal,e)}_getCrossAxisLayoutSize(){return pe.getAxisLayoutSize(this.item,!this.ctr._horizontal)}_resizeCrossAxis(e){return pe.resizeAxis(this.item,!this.ctr._horizontal,e)}_resizeMainAxis(e){return pe.resizeAxis(this.item,this.ctr._horizontal,e)}_getMainAxisPadding(){return pe.getTotalPadding(this.item,this.ctr._horizontal)}_getCrossAxisPadding(){return pe.getTotalPadding(this.item,!this.ctr._horizontal)}_getMainAxisMargin(){return pe.getTotalMargin(this.item,this.ctr._horizontal)}_getCrossAxisMargin(){return pe.getTotalMargin(this.item,!this.ctr._horizontal)}_getHorizontalMarginOffset(){return pe.getMarginOffset(this.item,!0)}_getVerticalMarginOffset(){return pe.getMarginOffset(this.item,!1)}_getMainAxisMinSizeWithPaddingAndMargin(){return this._getMainAxisMinSize()+this._getMainAxisPadding()+this._getMainAxisMargin()}_getCrossAxisMinSizeWithPaddingAndMargin(){return this._getCrossAxisMinSize()+this._getCrossAxisPadding()+this._getCrossAxisMargin()}_getMainAxisLayoutSizeWithPaddingAndMargin(){return this._getMainAxisLayoutSize()+this._getMainAxisPadding()+this._getMainAxisMargin()}_getCrossAxisLayoutSizeWithPaddingAndMargin(){return this._getCrossAxisLayoutSize()+this._getCrossAxisPadding()+this._getCrossAxisMargin()}_hasFixedCrossAxisSize(){return!pe.isZeroAxisSize(this.item,!this.ctr._horizontal)}_hasRelCrossAxisSize(){return!!(this.ctr._horizontal?this.item.funcH:this.item.funcW)}};Zn.SHRINK_AUTO=-1;var Wl=class{constructor(e){this._target=e,this._recalc=0,this._enabled=!1,this.x=0,this.y=0,this.w=0,this.h=0,this._originalX=0,this._originalY=0,this._originalWidth=0,this._originalHeight=0,this._flex=null,this._flexItem=null,this._flexItemDisabled=!1,this._items=null}get flexLayout(){return this.flex?this.flex._layout:null}layoutFlexTree(){this.isFlexEnabled()&&this.isChanged()&&this.flexLayout.layoutTree()}get target(){return this._target}get flex(){return this._flex}set flex(e){e?(this.isFlexEnabled()||this._enableFlex(),this._flex.patch(e)):this.isFlexEnabled()&&this._disableFlex()}get flexItem(){return this._flexItemDisabled?!1:(this._ensureFlexItem(),this._flexItem)}set flexItem(e){if(e===!1){if(!this._flexItemDisabled){let t=this.flexParent;this._flexItemDisabled=!0,this._checkEnabled(),t&&(t._clearFlexItemsCache(),t.changedContents())}}else if(this._ensureFlexItem(),this._flexItem.patch(e),this._flexItemDisabled){this._flexItemDisabled=!1,this._checkEnabled();let t=this.flexParent;t&&(t._clearFlexItemsCache(),t.changedContents())}}_enableFlex(){this._flex=new Tr(this),this._checkEnabled(),this.changedDimensions(),this._enableChildrenAsFlexItems()}_disableFlex(){this.changedDimensions(),this._flex=null,this._checkEnabled(),this._disableChildrenAsFlexItems()}_enableChildrenAsFlexItems(){let e=this._target._children;if(e)for(let t=0,i=e.length;t<i;t++)e[t].layout._enableFlexItem()}_disableChildrenAsFlexItems(){let e=this._target._children;if(e)for(let t=0,i=e.length;t<i;t++)e[t].layout._disableFlexItem()}_enableFlexItem(){this._ensureFlexItem();let e=this._target._parent._layout;this._flexItem.ctr=e._flex,e.changedContents(),this._checkEnabled()}_disableFlexItem(){this._flexItem&&(this._flexItem.ctr=null),this._checkEnabled(),this._resetOffsets()}_resetOffsets(){this.x=0,this.y=0}_ensureFlexItem(){this._flexItem||(this._flexItem=new Zn(this))}_checkEnabled(){let e=this.isEnabled();this._enabled!==e&&(e?this._enable():this._disable(),this._enabled=e)}_enable(){this._setupTargetForFlex(),this._target.enableFlexLayout()}_disable(){this._restoreTargetToNonFlex(),this._target.disableFlexLayout()}isEnabled(){return this.isFlexEnabled()||this.isFlexItemEnabled()}isFlexEnabled(){return this._flex!==null}isFlexItemEnabled(){return this.flexParent!==null}_restoreTargetToNonFlex(){let e=this._target;e.x=this._originalX,e.y=this._originalY,e.setDimensions(this._originalWidth,this._originalHeight)}_setupTargetForFlex(){let e=this._target;this._originalX=e._x,this._originalY=e._y,this._originalWidth=e._w,this._originalHeight=e._h}setParent(e,t){e&&e.isFlexContainer()&&e._layout._changedChildren(),t&&t.isFlexContainer()&&(this._enableFlexItem(),t._layout._changedChildren()),this._checkEnabled()}get flexParent(){if(this._flexItemDisabled)return null;let e=this._target._parent;return e&&e.isFlexContainer()?e._layout:null}setVisible(e){let t=this.flexParent;t&&t._changedChildren()}get items(){return this._items||(this._items=this._getFlexItems()),this._items}_getFlexItems(){let e=[],t=this._target._children;if(t)for(let i=0,s=t.length;i<s;i++){let n=t[i];n.visible&&n.isFlexItem()&&e.push(n.layout)}return e}_changedChildren(){this._clearFlexItemsCache(),this.changedContents()}_clearFlexItemsCache(){this._items=null}setLayout(e,t,i,s){let n=this._originalX,o=this._originalY;this.funcX&&(n=this.funcX(pe.getParentAxisSizeWithPadding(this,!0))),this.funcY&&(o=this.funcY(pe.getParentAxisSizeWithPadding(this,!1))),this.isFlexItemEnabled()?this.target.setLayout(e+n,t+o,i,s):this.target.setLayout(n,o,i,s)}changedDimensions(e=!0,t=!0){this._updateRecalc(e,t)}changedContents(){this._updateRecalc()}forceLayout(){this._updateRecalc()}isChanged(){return this._recalc>0}_updateRecalc(e=!1,t=!1){if(this.isFlexEnabled()){let n=this._flex._layout;e=e||n.isAxisFitToContents(!0),t=t||n.isAxisFitToContents(!1)}let i=1+(e?2:0)+(t?4:0),s=this.getNewRecalcFlags(i);this._recalc|=i,s>1?this.flexParent?this.flexParent._updateRecalcBottomUp(i):this._target.triggerLayout():this._target.triggerLayout()}getNewRecalcFlags(e){return 7-this._recalc&e}_updateRecalcBottomUp(e){let t=this._getRecalcFromChangedChildRecalc(e),i=this.getNewRecalcFlags(t);if(this._recalc|=t,i>1){let s=this.flexParent;s?s._updateRecalcBottomUp(t):this._target.triggerLayout()}else this._target.triggerLayout()}_getRecalcFromChangedChildRecalc(e){let t=this._flex._layout,i=t._horizontal?1:2,s=t._horizontal?2:1;e&s||e&i&&t.isWrapping()&&t.isCrossAxisFitToContents()&&(e+=s);let o=t.isAxisFitToContents(!0),a=t.isAxisFitToContents(!1);t.shrunk&&(t._horizontal?o=!0:a=!0);let l=1+(o?2:0)+(a?4:0);return e&l}get recalc(){return this._recalc}clearRecalcFlag(){this._recalc=0}enableLocalRecalcFlag(){this._recalc=1}get originalX(){return this._originalX}setOriginalXWithoutUpdatingLayout(e){this._originalX=e}get originalY(){return this._originalY}setOriginalYWithoutUpdatingLayout(e){this._originalY=e}get originalWidth(){return this._originalWidth}set originalWidth(e){this._originalWidth!==e&&(this._originalWidth=e,this.changedDimensions(!0,!1))}get originalHeight(){return this._originalHeight}set originalHeight(e){this._originalHeight!==e&&(this._originalHeight=e,this.changedDimensions(!1,!0))}get funcX(){return this._target.funcX}get funcY(){return this._target.funcY}get funcW(){return this._target.funcW}get funcH(){return this._target.funcH}},mi=class r{constructor(e,t=null){this.id=r.id++,this.manager=e,this.stage=e.stage,this.textures=new Set,this._activeTextureCount=0,this.loader=t,this.lookupId=null,this._cancelCb=null,this.loadingSince=0,this.w=0,this.h=0,this._nativeTexture=null,this.permanent=!1,this.renderInfo=null,this._isResultTexture=!this.loader,this._loadError=null,this._imageRef=null,this._hasAlpha=!1}get hasAlpha(){return this._hasAlpha}get loadError(){return this._loadError}addTexture(e){this.textures.has(e)||this.textures.add(e)}removeTexture(e){this.textures.delete(e)}incActiveTextureCount(){this._activeTextureCount++,this._activeTextureCount===1&&this.becomesUsed()}decActiveTextureCount(){this._activeTextureCount--,this._activeTextureCount===0&&this.becomesUnused()}get isResultTexture(){return this._isResultTexture}set isResultTexture(e){this._isResultTexture=e}forEachEnabledElement(e){this.textures.forEach(t=>{t.elements.forEach(e)})}hasEnabledElements(){return this.textures.size>0}forEachActiveElement(e){this.textures.forEach(t=>{t.elements.forEach(i=>{i.active&&e(i)})})}getRenderWidth(){return this.w}getRenderHeight(){return this.h}allowCleanup(){return!this.permanent&&!this.isUsed()}becomesUsed(){this.load()}becomesUnused(){this.cancel()}cancel(){this.isLoading()&&(this._cancelCb&&(this._cancelCb(this),this._cancelCb=null),this.loadingSince=0)}isLoaded(){return!!this._nativeTexture}isLoading(){return this.loadingSince>0}isError(){return!!this._loadError}reload(){this.free(),this.isUsed()&&this.load()}load(e=!1){this.isResultTexture||!this._nativeTexture&&!this.isLoading()&&(this.loadingSince=new Date().getTime(),this._cancelCb=this.loader((t,i)=>{if(this.isLoading()){if(this._cancelCb=null,this.manager.stage.destroyed)return;if(t)this.onError(t);else if(i&&i.source)if(!this.stage.isUpdatingFrame()&&!e&&i.throttle!==!1){let s=this.stage.textureThrottler;this._cancelCb=s.genericCancelCb,s.add(this,i)}else this.processLoadedSource(i)}},this))}processLoadedSource(e){this.loadingSince=0,this.setSource(e)}setSource(e){let t=e.source;this._hasAlpha=e&&e.hasAlpha||!1,this.w=t.width||e&&e.w||0,this.h=t.height||e&&e.h||0,e&&e.renderInfo&&(this.renderInfo=e.renderInfo),this.permanent=!!e.permanent,e&&e.imageRef&&(this._imageRef=e.imageRef),e&&e.flipTextureY?this._flipTextureY=e.flipTextureY:this._flipTextureY=!1,this._isNativeTexture(t)?(this._nativeTexture=t,this.w=this.w||t.w,this.h=this.h||t.h,this.permanent=e.hasOwnProperty("permanent")?e.permanent:!0):this.manager.uploadTextureSource(this,e),this._loadError=null,this.onLoad()}isUsed(){return this._activeTextureCount>0}onLoad(){this.isUsed()&&this.textures.forEach(e=>{e.onLoad()})}forceRenderUpdate(){this._nativeTexture&&(this._nativeTexture.update=this.stage.frameCounter),this.forEachActiveElement(function(e){e.forceRenderUpdate()})}forceUpdateRenderCoords(){this.forEachActiveElement(function(e){e._updateTextureCoords()})}get nativeTexture(){return this._nativeTexture}clearNativeTexture(){this._nativeTexture=null,this._imageRef=null}replaceNativeTexture(e,t,i){let s=this._nativeTexture;this._nativeTexture=e,this.w=t,this.h=i,!s&&this._nativeTexture&&this.forEachActiveElement(n=>n.onTextureSourceLoaded()),this._nativeTexture||this.forEachActiveElement(n=>n._setDisplayedTexture(null)),this.forEachEnabledElement(n=>n._updateDimensions())}onError(e){this._loadError=e,this.loadingSince=0,console.error("[Lightning] texture load error",e,this.lookupId),this.forEachActiveElement(t=>t.onTextureSourceLoadError(e))}free(){this.isLoaded()&&this.manager.freeTextureSource(this)}_isNativeTexture(e){return K.isNode?e.constructor.name==="WebGLTexture":"WebGLTexture"in window?e instanceof WebGLTexture:!1}};mi.prototype.isTextureSource=!0;mi.id=1;var eo=class{constructor(e){this._element=e.element,this._core=e,this.ctx=this._core.ctx,this._enabled=!1,this.lazy=!1,this._colorize=!1,this._renderTexture=null,this._renderTextureReused=!1,this._resultTextureSource=null,this._renderOffscreen=!1,this.empty=!1}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._core.updateRenderToTextureEnabled()}get renderOffscreen(){return this._renderOffscreen}set renderOffscreen(e){this._renderOffscreen=e,this._core.setHasRenderUpdates(1),this._core._setRecalc(6)}get colorize(){return this._colorize}set colorize(e){this._colorize!==e&&(this._colorize=e,this._core.setHasRenderUpdates(1))}_getTextureSource(){return this._resultTextureSource||(this._resultTextureSource=new mi(this._element.stage.textureManager),this.updateResultTexture()),this._resultTextureSource}hasResultTexture(){return!!this._resultTextureSource}resultTextureInUse(){return this._resultTextureSource&&this._resultTextureSource.hasEnabledElements()}updateResultTexture(){let e=this.getResultTexture();if(this._resultTextureSource){if(this._resultTextureSource.nativeTexture!==e){let t=e?e.w:0,i=e?e.h:0;this._resultTextureSource.replaceNativeTexture(e,t,i)}this._resultTextureSource.forEachEnabledElement(t=>{t._updateDimensions(),t.core.setHasRenderUpdates(3)})}}mustRenderToTexture(){return this._enabled&&!this.lazy?!0:!!(this._enabled&&this.lazy&&this._core._hasRenderUpdates<3)}deactivate(){this.release()}get renderTextureReused(){return this._renderTextureReused}release(){this.releaseRenderTexture()}releaseRenderTexture(){this._renderTexture&&(this._renderTextureReused||this.ctx.releaseRenderTexture(this._renderTexture),this._renderTexture=null,this._renderTextureReused=!1,this.updateResultTexture())}reuseTextureAsRenderTexture(e){this._renderTexture!==e&&(this.releaseRenderTexture(),this._renderTexture=e,this._renderTextureReused=!0)}hasRenderTexture(){return!!this._renderTexture}getRenderTexture(){return this._renderTexture||(this._renderTexture=this.ctx.allocateRenderTexture(this._core._w,this._core._h),this._renderTextureReused=!1),this._renderTexture}getResultTexture(){return this._renderTexture}},ds=class r{constructor(e){this._element=e,this.ctx=e.stage.ctx,this._recalc=0,this._parent=null,this._onUpdate=null,this._pRecalc=0,this._worldContext=new sr,this._hasUpdates=!1,this._localAlpha=1,this._onAfterCalcs=null,this._onAfterUpdate=null,this._localPx=0,this._localPy=0,this._localTa=1,this._localTb=0,this._localTc=0,this._localTd=1,this._isComplex=!1,this._dimsUnknown=!1,this._clipping=!1,this._zSort=!1,this._outOfBounds=0,this._displayedTextureSource=null,this._zContextUsage=0,this._children=null,this._hasRenderUpdates=0,this._zIndexedChildren=null,this._renderContext=this._worldContext,this.renderState=this.ctx.renderState,this._scissor=null,this._shaderOwner=null,this._updateTreeOrder=0,this._colorUl=this._colorUr=this._colorBl=this._colorBr=4294967295,this._x=0,this._y=0,this._w=0,this._h=0,this._optFlags=0,this._funcX=null,this._funcY=null,this._funcW=null,this._funcH=null,this._scaleX=1,this._scaleY=1,this._pivotX=.5,this._pivotY=.5,this._mountX=0,this._mountY=0,this._rotation=0,this._alpha=1,this._visible=!0,this._ulx=0,this._uly=0,this._brx=1,this._bry=1,this._zIndex=0,this._forceZIndexContext=!1,this._zParent=null,this._isRoot=!1,this._zIndexResort=!1,this._shader=null,this._renderToTextureEnabled=!1,this._texturizer=null,this._useRenderToTexture=!1,this._boundsMargin=null,this._recBoundsMargin=null,this._withinBoundsMargin=!1,this._viewport=null,this._clipbox=!0,this.render=this._renderSimple,this._layout=null}get offsetX(){return this._funcX?this._funcX:this.hasFlexLayout()?this._layout.originalX:this._x}set offsetX(e){K.isFunction(e)?this.funcX=e:(this._disableFuncX(),this.hasFlexLayout()?(this.x+=e-this._layout.originalX,this._layout.setOriginalXWithoutUpdatingLayout(e)):this.x=e)}get x(){return this._x}set x(e){e!==this._x&&(this._updateLocalTranslateDelta(e-this._x,0),this._x=e)}get funcX(){return this._optFlags&1?this._funcX:null}set funcX(e){this._funcX!==e&&(this._optFlags|=1,this._funcX=e,this.hasFlexLayout()?(this._layout.setOriginalXWithoutUpdatingLayout(0),this.layout.forceLayout()):(this._x=0,this._triggerRecalcTranslate()))}_disableFuncX(){this._optFlags=this._optFlags&65534,this._funcX=null}get offsetY(){return this._funcY?this._funcY:this.hasFlexLayout()?this._layout.originalY:this._y}set offsetY(e){K.isFunction(e)?this.funcY=e:(this._disableFuncY(),this.hasFlexLayout()?(this.y+=e-this._layout.originalY,this._layout.setOriginalYWithoutUpdatingLayout(e)):this.y=e)}get y(){return this._y}set y(e){e!==this._y&&(this._updateLocalTranslateDelta(0,e-this._y),this._y=e)}get funcY(){return this._optFlags&2?this._funcY:null}set funcY(e){this._funcY!==e&&(this._optFlags|=2,this._funcY=e,this.hasFlexLayout()?(this._layout.setOriginalYWithoutUpdatingLayout(0),this.layout.forceLayout()):(this._y=0,this._triggerRecalcTranslate()))}_disableFuncY(){this._optFlags=this._optFlags&65533,this._funcY=null}get funcW(){return this._optFlags&4?this._funcW:null}set funcW(e){this._funcW!==e&&(this._optFlags|=4,this._funcW=e,this.hasFlexLayout()?(this._layout._originalWidth=0,this.layout.changedDimensions(!0,!1)):(this._w=0,this._triggerRecalcTranslate()))}disableFuncW(){this._optFlags=this._optFlags&65531,this._funcW=null}get funcH(){return this._optFlags&8?this._funcH:null}set funcH(e){this._funcH!==e&&(this._optFlags|=8,this._funcH=e,this.hasFlexLayout()?(this._layout._originalHeight=0,this.layout.changedDimensions(!1,!0)):(this._h=0,this._triggerRecalcTranslate()))}disableFuncH(){this._optFlags=this._optFlags&65527,this._funcH=null}get w(){return this._w}getRenderWidth(){return this.hasFlexLayout()?this._layout.originalWidth:this._w}get h(){return this._h}getRenderHeight(){return this.hasFlexLayout()?this._layout.originalHeight:this._h}get scaleX(){return this._scaleX}set scaleX(e){this._scaleX!==e&&(this._scaleX=e,this._updateLocalTransform())}get scaleY(){return this._scaleY}set scaleY(e){this._scaleY!==e&&(this._scaleY=e,this._updateLocalTransform())}get scale(){return this.scaleX}set scale(e){(this._scaleX!==e||this._scaleY!==e)&&(this._scaleX=e,this._scaleY=e,this._updateLocalTransform())}get pivotX(){return this._pivotX}set pivotX(e){this._pivotX!==e&&(this._pivotX=e,this._updateLocalTranslate())}get pivotY(){return this._pivotY}set pivotY(e){this._pivotY!==e&&(this._pivotY=e,this._updateLocalTranslate())}get pivot(){return this._pivotX}set pivot(e){(this._pivotX!==e||this._pivotY!==e)&&(this._pivotX=e,this._pivotY=e,this._updateLocalTranslate())}get mountX(){return this._mountX}set mountX(e){this._mountX!==e&&(this._mountX=e,this._updateLocalTranslate())}get mountY(){return this._mountY}set mountY(e){this._mountY!==e&&(this._mountY=e,this._updateLocalTranslate())}get mount(){return this._mountX}set mount(e){(this._mountX!==e||this._mountY!==e)&&(this._mountX=e,this._mountY=e,this._updateLocalTranslate())}get rotation(){return this._rotation}set rotation(e){this._rotation!==e&&(this._rotation=e,this._updateLocalTransform())}get alpha(){return this._alpha}set alpha(e){if(e=e>1?1:e<1e-14?0:e,this._alpha!==e){let t=this._alpha;this._alpha=e,this._updateLocalAlpha(),t===0!=(e===0)&&this._element._updateEnabledFlag()}}get visible(){return this._visible}set visible(e){this._visible!==e&&(this._visible=e,this._updateLocalAlpha(),this._element._updateEnabledFlag(),this.hasFlexLayout()&&this.layout.setVisible(e))}_updateLocalTransform(){if(this._rotation!==0&&this._rotation%(2*Math.PI)){let e=Math.sin(this._rotation),t=Math.cos(this._rotation);this._setLocalTransform(t*this._scaleX,-e*this._scaleY,e*this._scaleX,t*this._scaleY)}else this._setLocalTransform(this._scaleX,0,0,this._scaleY);this._updateLocalTranslate()}_updateLocalTranslate(){this._recalcLocalTranslate(),this._triggerRecalcTranslate()}_recalcLocalTranslate(){let e=this._pivotX*this._w,t=this._pivotY*this._h,i=this._x-(e*this._localTa+t*this._localTb)+e,s=this._y-(e*this._localTc+t*this._localTd)+t;i-=this._mountX*this._w,s-=this._mountY*this._h,this._localPx=i,this._localPy=s}_updateLocalTranslateDelta(e,t){this._addLocalTranslate(e,t)}_updateLocalAlpha(){this._setLocalAlpha(this._visible?this._alpha:0)}setHasRenderUpdates(e){if(this._worldContext.alpha){let t=this;for(t._hasRenderUpdates=Math.max(e,t._hasRenderUpdates);(t=t._parent)&&t._hasRenderUpdates!==3;)t._hasRenderUpdates=3}}_setRecalc(e){this._recalc|=e,this._setHasUpdates(),this._parent&&this._parent.setHasRenderUpdates(3)}_setHasUpdates(){let e=this;for(;e&&!e._hasUpdates;)e._hasUpdates=!0,e=e._parent}getParent(){return this._parent}setParent(e){if(e!==this._parent){let t=this.isZContext(),i=this._parent;if(this._parent=e,(this._layout||e&&e.isFlexContainer())&&this.layout.setParent(i,e),i&&i.setHasRenderUpdates(3),this._setRecalc(7),this._parent&&this._parent._setHasUpdates(),this._zIndex===0?this.setZParent(e):this.setZParent(e?e.findZContext():null),t!==this.isZContext()&&(this.isZContext()?this.enableZContext(i.findZContext()):this.disableZContext()),this._zIndexResort=!0,this._zParent&&this._zParent.enableZSort(),!this._shader){let s=e&&!e._renderToTextureEnabled?e._shaderOwner:null;s!==this._shaderOwner&&(this.setHasRenderUpdates(1),this._setShaderOwnerRecursive(s))}}}enableZSort(e=!1){!this._zSort&&this._zContextUsage>0&&(this._zSort=!0,e&&this.ctx.forceZSort(this))}addChildAt(e,t){this._children||(this._children=[]),this._children.splice(e,0,t),t.setParent(this)}setChildAt(e,t){this._children||(this._children=[]),this._children[e].setParent(null),this._children[e]=t,t.setParent(this)}removeChildAt(e){let t=this._children[e];this._children.splice(e,1),t.setParent(null)}removeChildren(){if(this._children){for(let e=0,t=this._children.length;e<t;e++)this._children[e].setParent(null);this._children.splice(0),this._zIndexedChildren&&this._zIndexedChildren.splice(0)}}syncChildren(e,t,i){this._children=i;for(let s=0,n=e.length;s<n;s++)e[s].setParent(null);for(let s=0,n=t.length;s<n;s++)t[s].setParent(this)}moveChild(e,t){let i=this._children[e];this._children.splice(e,1),this._children.splice(t,0,i),this._zIndexResort=!0,this._zParent&&this._zParent.enableZSort()}_setLocalTransform(e,t,i,s){this._setRecalc(4),this._localTa=e,this._localTb=t,this._localTc=i,this._localTd=s,this._isComplex=t!==0||i!==0||e<0||s<0}_addLocalTranslate(e,t){this._localPx+=e,this._localPy+=t,this._triggerRecalcTranslate()}_setLocalAlpha(e){!this._worldContext.alpha&&this._parent&&this._parent._worldContext.alpha&&e?this._setRecalc(129):this._setRecalc(1),e<1e-14&&(e=0),this._localAlpha=e}setDimensions(e,t,i=this._dimsUnknown){if(this._dimsUnknown=i,this.hasFlexLayout())this._layout.originalWidth=e,this._layout.originalHeight=t;else if(this._w!==e||this._h!==t)return this._updateDimensions(e,t),!0;return!1}_updateDimensions(e,t){(this._w!==e||this._h!==t)&&(this._w=e,this._h=t,this._triggerRecalcTranslate(),this._texturizer&&(this._texturizer.releaseRenderTexture(),this._texturizer.updateResultTexture()),this._updateLocalTranslate())}setTextureCoords(e,t,i,s){this.setHasRenderUpdates(3),this._ulx=e,this._uly=t,this._brx=i,this._bry=s}get displayedTextureSource(){return this._displayedTextureSource}setDisplayedTextureSource(e){this.setHasRenderUpdates(3),this._displayedTextureSource=e}get isRoot(){return this._isRoot}setAsRoot(){this._parent=new r(this._element),this._parent._hasRenderUpdates=3,this._parent._hasUpdates=!0,this._isRoot=!0,this.ctx.root=this,this._parent._viewport=[0,0,this.ctx.stage.coordsWidth,this.ctx.stage.coordsHeight],this._parent._scissor=this._parent._viewport,this._parent._recBoundsMargin=null,this._setRecalc(7)}isAncestorOf(e){let t=e;for(;t=t._parent;)if(this===t)return!0;return!1}isZContext(){return this._forceZIndexContext||this._renderToTextureEnabled||this._zIndex!==0||this._isRoot||!this._parent}findZContext(){return this.isZContext()?this:this._parent.findZContext()}setZParent(e){if(this._zParent!==e){if(this._zParent!==null&&(this._zIndex!==0&&this._zParent.decZContextUsage(),this._zParent.enableZSort()),e!==null){let t=e._zContextUsage>0;this._zIndex!==0&&e.incZContextUsage(),e._zContextUsage>0&&(!t&&this._parent===e||e._zIndexedChildren.push(this),e.enableZSort())}this._zParent=e,this._zIndexResort=!0}}incZContextUsage(){if(this._zContextUsage++,this._zContextUsage===1&&(this._zIndexedChildren||(this._zIndexedChildren=[]),this._children)){for(let e=0,t=this._children.length;e<t;e++)this._zIndexedChildren.push(this._children[e]);this._zSort=!1}}decZContextUsage(){this._zContextUsage--,this._zContextUsage===0&&(this._zSort=!1,this._zIndexedChildren.splice(0))}get zIndex(){return this._zIndex}set zIndex(e){if(this._zIndex!==e){this.setHasRenderUpdates(1);let t=this._zParent,i=this.isZContext();e===0&&this._zIndex!==0?this._parent===this._zParent?this._zParent&&this._zParent.decZContextUsage():t=this._parent:e!==0&&this._zIndex===0?(t=this._parent?this._parent.findZContext():null,t===this._zParent&&this._zParent&&(this._zParent.incZContextUsage(),this._zParent.enableZSort())):e!==this._zIndex&&this._zParent&&this._zParent._zContextUsage&&this._zParent.enableZSort(),t!==this._zParent&&this.setZParent(null),this._zIndex=e,t!==this._zParent&&this.setZParent(t),i!==this.isZContext()&&(this.isZContext()?this.enableZContext(this._parent.findZContext()):this.disableZContext()),this._zIndexResort=!0,this._zParent&&this._zParent.enableZSort()}}get forceZIndexContext(){return this._forceZIndexContext}set forceZIndexContext(e){this.setHasRenderUpdates(1);let t=this.isZContext();this._forceZIndexContext=e,t!==this.isZContext()&&(this.isZContext()?this.enableZContext(this._parent.findZContext()):this.disableZContext())}enableZContext(e){e&&e._zContextUsage>0&&this._getZIndexedDescs().forEach(i=>{this.isAncestorOf(i)&&i._zIndex!==0&&i.setZParent(this)})}_getZIndexedDescs(){let e=[];if(this._children)for(let t=0,i=this._children.length;t<i;t++)this._children[t]._getZIndexedDescsRec(e);return e}_getZIndexedDescsRec(e){if(this._zIndex)e.push(this);else if(this._children&&!this.isZContext())for(let t=0,i=this._children.length;t<i;t++)this._children[t]._getZIndexedDescsRec(e)}disableZContext(){if(this._zContextUsage>0){let e=this._parent.findZContext();this._zSort&&this.sortZIndexedChildren(),this._zIndexedChildren.slice().forEach(function(t){t._zIndex!==0&&t.setZParent(e)})}}get colorUl(){return this._colorUl}set colorUl(e){this._colorUl!==e&&(this.setHasRenderUpdates(this._displayedTextureSource?3:1),this._colorUl=e)}get colorUr(){return this._colorUr}set colorUr(e){this._colorUr!==e&&(this.setHasRenderUpdates(this._displayedTextureSource?3:1),this._colorUr=e)}get colorBl(){return this._colorBl}set colorBl(e){this._colorBl!==e&&(this.setHasRenderUpdates(this._displayedTextureSource?3:1),this._colorBl=e)}get colorBr(){return this._colorBr}set colorBr(e){this._colorBr!==e&&(this.setHasRenderUpdates(this._displayedTextureSource?3:1),this._colorBr=e)}set onUpdate(e){this._onUpdate=e,this._setRecalc(7)}set onAfterUpdate(e){this._onAfterUpdate=e,this._setRecalc(7)}set onAfterCalcs(e){this._onAfterCalcs=e,this._setRecalc(7)}get shader(){return this._shader}set shader(e){this.setHasRenderUpdates(1);let t=this._shader;if(this._shader=e,!e&&t){let i=this._parent&&!this._parent._renderToTextureEnabled?this._parent._shaderOwner:null;this._setShaderOwnerRecursive(i)}else e&&this._setShaderOwnerRecursive(this)}get activeShader(){return this._shaderOwner?this._shaderOwner.shader:this.renderState.defaultShader}get activeShaderOwner(){return this._shaderOwner}get clipping(){return this._clipping}set clipping(e){this._clipping!==e&&(this._clipping=e,this._setRecalc(3))}get clipbox(){return this._clipbox}set clipbox(e){this._clipbox=e}_setShaderOwnerRecursive(e){if(this._shaderOwner=e,this._children&&!this._renderToTextureEnabled)for(let t=0,i=this._children.length;t<i;t++){let s=this._children[t];s._shader||(s._setShaderOwnerRecursive(e),s._hasRenderUpdates=3)}}_setShaderOwnerChildrenRecursive(e){if(this._children)for(let t=0,i=this._children.length;t<i;t++){let s=this._children[t];s._shader||(s._setShaderOwnerRecursive(e),s._hasRenderUpdates=3)}}_hasRenderContext(){return this._renderContext!==this._worldContext}get renderContext(){return this._renderContext}updateRenderToTextureEnabled(){this.texturizer._enabled?this._enableRenderToTexture():(this._disableRenderToTexture(),this._texturizer.releaseRenderTexture())}_enableRenderToTexture(){if(!this._renderToTextureEnabled){let e=this.isZContext();this._renderToTextureEnabled=!0,this._renderContext=new sr,this._setShaderOwnerChildrenRecursive(null),e||this.enableZContext(this._parent?this._parent.findZContext():null),this.setHasRenderUpdates(3),this._setRecalc(7),this.render=this._renderAdvanced}}_disableRenderToTexture(){this._renderToTextureEnabled&&(this._renderToTextureEnabled=!1,this._setShaderOwnerChildrenRecursive(this._shaderOwner),this._renderContext=this._worldContext,this.isZContext()||this.disableZContext(),this._setRecalc(7),this.setHasRenderUpdates(3),this.render=this._renderSimple)}isWhite(){return this._colorUl===4294967295&&this._colorUr===4294967295&&this._colorBl===4294967295&&this._colorBr===4294967295}hasSimpleTexCoords(){return this._ulx===0&&this._uly===0&&this._brx===1&&this._bry===1}_stashTexCoords(){this._stashedTexCoords=[this._ulx,this._uly,this._brx,this._bry],this._ulx=0,this._uly=0,this._brx=1,this._bry=1}_unstashTexCoords(){this._ulx=this._stashedTexCoords[0],this._uly=this._stashedTexCoords[1],this._brx=this._stashedTexCoords[2],this._bry=this._stashedTexCoords[3],this._stashedTexCoords=null}_stashColors(){this._stashedColors=[this._colorUl,this._colorUr,this._colorBr,this._colorBl],this._colorUl=4294967295,this._colorUr=4294967295,this._colorBr=4294967295,this._colorBl=4294967295}_unstashColors(){this._colorUl=this._stashedColors[0],this._colorUr=this._stashedColors[1],this._colorBr=this._stashedColors[2],this._colorBl=this._stashedColors[3],this._stashedColors=null}isVisible(){return this._localAlpha>1e-14}get outOfBounds(){return this._outOfBounds}set boundsMargin(e){this._boundsMargin=e?e.slice():null,this._triggerRecalcTranslate()}get boundsMargin(){return this._boundsMargin}update(){this._recalc|=this._parent._pRecalc,this._layout&&this._layout.isEnabled()?this._recalc&256&&this._layout.layoutFlexTree():this._recalc&2&&this._optFlags&&this._applyRelativeDimFuncs(),this._onUpdate&&(this._hasUpdates=!0,this._onUpdate(this.element,this));let e=this._parent._worldContext,t=this._worldContext,i=e.alpha&&this._localAlpha;if(this._hasUpdates||this._recalc&&i||t.alpha&&!i){let s=this._recalc;s&1&&(!t.alpha&&i&&(this._hasRenderUpdates=3),t.alpha=e.alpha*this._localAlpha,t.alpha<1e-14&&(t.alpha=0)),s&6&&(t.px=e.px+this._localPx*e.ta,t.py=e.py+this._localPy*e.td,e.tb!==0&&(t.px+=this._localPy*e.tb),e.tc!==0&&(t.py+=this._localPx*e.tc)),s&4&&(t.ta=this._localTa*e.ta,t.tb=this._localTd*e.tb,t.tc=this._localTa*e.tc,t.td=this._localTd*e.td,this._isComplex&&(t.ta+=this._localTc*e.tb,t.tb+=this._localTb*e.ta,t.tc+=this._localTc*e.td,t.td+=this._localTb*e.tc));let n=this._parent._renderContext;if(this._parent._hasRenderContext()){let C=this._renderContext===this._worldContext;C&&(this._renderContext=new sr);let A=this._renderContext;(C||s&1)&&(A.alpha=n.alpha*this._localAlpha,A.alpha<1e-14&&(A.alpha=0)),(C||s&6)&&(A.px=n.px+this._localPx*n.ta,A.py=n.py+this._localPy*n.td,n.tb!==0&&(A.px+=this._localPy*n.tb),n.tc!==0&&(A.py+=this._localPx*n.tc)),C&&(s|=2),(C||s&4)&&(A.ta=this._localTa*n.ta,A.tb=this._localTd*n.tb,A.tc=this._localTa*n.tc,A.td=this._localTd*n.td,this._isComplex&&(A.ta+=this._localTc*n.tb,A.tb+=this._localTb*n.ta,A.tc+=this._localTc*n.td,A.td+=this._localTb*n.tc))}else this._renderContext=this._worldContext;this.ctx.updateTreeOrder===-1?this.ctx.updateTreeOrder=this._updateTreeOrder+1:this._updateTreeOrder=this.ctx.updateTreeOrder++;let o=this._renderToTextureEnabled&&this._texturizer.mustRenderToTexture();this._useRenderToTexture!==o&&(this._recalc|=6,s|=2,this._useRenderToTexture||this._texturizer.release()),this._useRenderToTexture=o;let a=this._renderContext,l=this._dimsUnknown?2048:this._w,u=this._dimsUnknown?2048:this._h,c,g,m,y,b=a.tb!==0||a.tc!==0||a.ta<0||a.td<0;if(b?(c=Math.min(0,l*a.ta,l*a.ta+u*a.tb,u*a.tb)+a.px,m=Math.max(0,l*a.ta,l*a.ta+u*a.tb,u*a.tb)+a.px,g=Math.min(0,l*a.tc,l*a.tc+u*a.td,u*a.td)+a.py,y=Math.max(0,l*a.tc,l*a.tc+u*a.td,u*a.td)+a.py):(c=a.px,m=a.px+a.ta*l,g=a.py,y=a.py+a.td*u),this._dimsUnknown&&(b||this._localTa<1||this._localTb<1)){let C=this._x*n.ta+this._y*n.tb+n.px,A=this._x*n.tc+this._y*n.td+n.py;C<c&&(c=C),A<g&&(g=A),C>m&&(m=C),A>y&&(y=A)}if(s&6||!this._scissor)if(this._clipping&&a.isSquare()){let C=this._parent._useRenderToTexture?this._parent._viewport:this._parent._scissor;if(C){let A=Math.max(C[0],c),T=Math.max(C[1],g);this._scissor=[A,T,Math.min(C[2]+C[0],m)-A,Math.min(C[3]+C[1],y)-T]}else this._scissor=[c,g,m-c,y-g]}else this._scissor=this._parent._useRenderToTexture?this._parent._viewport:this._parent._scissor;if(this._boundsMargin?this._recBoundsMargin=this._boundsMargin:this._recBoundsMargin=this._parent._recBoundsMargin,this._onAfterCalcs&&this._onAfterCalcs(this.element)&&(b?(c=Math.min(0,l*a.ta,l*a.ta+u*a.tb,u*a.tb)+a.px,m=Math.max(0,l*a.ta,l*a.ta+u*a.tb,u*a.tb)+a.px,g=Math.min(0,l*a.tc,l*a.tc+u*a.td,u*a.td)+a.py,y=Math.max(0,l*a.tc,l*a.tc+u*a.td,u*a.td)+a.py):(c=a.px,m=a.px+a.ta*l,g=a.py,y=a.py+a.td*u),this._dimsUnknown&&(b||this._localTa<1||this._localTb<1))){let C=this._x*n.ta+this._y*n.tb+n.px,A=this._x*n.tc+this._y*n.td+n.py;C<c&&(c=C),A<g&&(g=A),C>m&&(m=C),A>y&&(y=A)}if(this._parent._outOfBounds===2)this._outOfBounds=2,this._withinBoundsMargin&&(this._withinBoundsMargin=!1,this.element._disableWithinBoundsMargin());else if(s&6){this._outOfBounds=0;let C=!0;if((!this._renderToTextureEnabled||!this._texturizer||!this._texturizer.renderOffscreen)&&(this._scissor&&(this._scissor[2]<=0||this._scissor[3]<=0)?this._outOfBounds=2:((this._scissor[0]>m||this._scissor[1]>y||c>this._scissor[0]+this._scissor[2]||g>this._scissor[1]+this._scissor[3])&&(this._outOfBounds=1),this._outOfBounds&&(this._clipping||this._useRenderToTexture||this._clipbox&&l&&u)&&(this._outOfBounds=2)),C=this._outOfBounds===0,C||(this._recBoundsMargin?C=!(m<this._scissor[0]-this._recBoundsMargin[2]||y<this._scissor[1]-this._recBoundsMargin[3]||c>this._scissor[0]+this._scissor[2]+this._recBoundsMargin[0]||g>this._scissor[1]+this._scissor[3]+this._recBoundsMargin[1]):C=!(m<this._scissor[0]-100||y<this._scissor[1]-100||c>this._scissor[0]+this._scissor[2]+100||g>this._scissor[1]+this._scissor[3]+100),C&&this._outOfBounds===2&&(this._outOfBounds=1))),this._withinBoundsMargin!==C)if(this._withinBoundsMargin=C,this._withinBoundsMargin){this._hasUpdates=!0;let A=this._recalc;if(this._recalc=0,this.element._enableWithinBoundsMargin(),this._recalc)return this.update();this._recalc=A}else this.element._disableWithinBoundsMargin()}if(this._useRenderToTexture&&(this._viewport?(this._viewport[2]=l,this._viewport[3]=u):this._viewport=[0,0,l,u]),this._pRecalc=this._recalc&135,this._recalc=0,this._hasUpdates=!1,this._outOfBounds<2){if(this._useRenderToTexture&&(this._worldContext.isIdentity()?this._renderContext=this._worldContext:this._renderContext=sr.IDENTITY),this._children)for(let C=0,A=this._children.length;C<A;C++)this._children[C].update();this._useRenderToTexture&&(this._renderContext=a)}else if(this._children)for(let C=0,A=this._children.length;C<A;C++)this._children[C]._hasUpdates?this._children[C].update():(this._children[C]._recalc|=this._pRecalc,this._children[C].updateOutOfBounds());this._onAfterUpdate&&this._onAfterUpdate(this.element)}else this.ctx.updateTreeOrder===-1||this._updateTreeOrder>=this.ctx.updateTreeOrder?this.ctx.updateTreeOrder=-1:this.updateTreeOrder()}_applyRelativeDimFuncs(){if(this._optFlags&1){let t=this._funcX(this._parent.w);t!==this._x&&(this._localPx+=t-this._x,this._x=t)}if(this._optFlags&2){let t=this._funcY(this._parent.h);t!==this._y&&(this._localPy+=t-this._y,this._y=t)}let e=!1;if(this._optFlags&4){let t=this._funcW(this._parent.w);t!==this._w&&(this._w=t,e=!0)}if(this._optFlags&8){let t=this._funcH(this._parent.h);t!==this._h&&(this._h=t,e=!0)}e&&(this._recalcLocalTranslate(),this.element.onDimensionsChanged(this._w,this._h))}updateOutOfBounds(){if(this._outOfBounds!==2&&this._renderContext.alpha>0&&(this._outOfBounds=2,this._withinBoundsMargin&&(this._withinBoundsMargin=!1,this.element._disableWithinBoundsMargin()),this._children))for(let e=0,t=this._children.length;e<t;e++)this._children[e].updateOutOfBounds()}updateTreeOrder(){if(this._localAlpha&&this._outOfBounds!==2&&(this._updateTreeOrder=this.ctx.updateTreeOrder++,this._children))for(let e=0,t=this._children.length;e<t;e++)this._children[e].updateTreeOrder()}_renderSimple(){if(this._hasRenderUpdates=0,this._zSort&&this.sortZIndexedChildren(),this._outOfBounds<2&&this._renderContext.alpha){let e=this.renderState;if(this._outOfBounds===0&&this._displayedTextureSource&&(e.setShader(this.activeShader,this._shaderOwner),e.setScissor(this._scissor),this.renderState.addQuad(this)),this._children)if(this._zContextUsage)for(let t=0,i=this._zIndexedChildren.length;t<i;t++)this._zIndexedChildren[t].render();else for(let t=0,i=this._children.length;t<i;t++)this._children[t]._zIndex===0&&this._children[t].render()}}_renderAdvanced(){let e=this._hasRenderUpdates;if(this._hasRenderUpdates=0,this._zSort&&this.sortZIndexedChildren(),this._outOfBounds<2&&this._renderContext.alpha){let t=this.renderState,i=!0,s,n;if(this._useRenderToTexture){if(this._w===0||this._h===0)return;if(!this._texturizer.hasRenderTexture()||e>=3){if(this.ctx.renderToTextureCount++,t.setShader(t.defaultShader,this),n=t.renderTextureInfo,s={nativeTexture:null,offset:0,w:this._w,h:this._h,empty:!0,cleared:!1,ignore:!1,cache:!1},(this._texturizer.hasResultTexture()||!t.isCachingTexturizer&&e<3)&&(s.cache=!0,t.isCachingTexturizer=!0),this._texturizer.hasResultTexture()||this._texturizer.releaseRenderTexture(),t.setRenderTextureInfo(s),t.setScissor(null),this._displayedTextureSource){let o=this._renderContext;this._renderContext=sr.IDENTITY,this.renderState.addQuad(this),this._renderContext=o}}else i=!1}else this._outOfBounds===0&&this._displayedTextureSource&&(t.setShader(this.activeShader,this._shaderOwner),t.setScissor(this._scissor),this.renderState.addQuad(this));if(i&&this._children)if(this._zContextUsage)for(let o=0,a=this._zIndexedChildren.length;o<a;o++)this._zIndexedChildren[o].render();else for(let o=0,a=this._children.length;o<a;o++)this._children[o]._zIndex===0&&this._children[o].render();if(this._useRenderToTexture){let o=!1;if(i&&(t.finishedRenderTexture(),this._texturizer.empty=s.empty,s.empty?this._texturizer.releaseRenderTexture():s.nativeTexture?(this._texturizer.reuseTextureAsRenderTexture(s.nativeTexture),s.ignore=!0):(this._texturizer.renderTextureReused&&this._texturizer.releaseRenderTexture(),s.nativeTexture=this._texturizer.getRenderTexture()),t.setRenderTextureInfo(n),o=!0),!this._texturizer.empty){let a=this._texturizer.getResultTexture();if(o&&(a&&(a.update=t.stage.frameCounter),this._texturizer.updateResultTexture()),!this._texturizer.renderOffscreen){t.setShader(this.activeShader,this._shaderOwner),t.setScissor(this._scissor);let l=!s||s.cache;t.setTexturizer(this._texturizer,l),this._stashTexCoords(),this._texturizer.colorize||this._stashColors(),this.renderState.addQuad(this,!0),this._texturizer.colorize||this._unstashColors(),this._unstashTexCoords(),t.setTexturizer(null)}}}s&&s.cache&&(t.isCachingTexturizer=!1)}}get zSort(){return this._zSort}sortZIndexedChildren(){let e=this._zIndexedChildren.length,t=0,i=this._zIndexedChildren,s=[];for(let o=0;o<e;o++)i[o]._zParent===this&&(i[o]._zIndexResort?s.push(i[o]):(t!==o&&(i[t]=i[o]),t++));let n=s.length;if(n){for(let a=0;a<n;a++)s[a]._zIndexResort=!1;s.sort(r.sortZIndexedChildren);let o=t;if(o){t=0;let a=0,l=0,u=[];do{let g=(i[a]._zIndex===s[l]._zIndex?i[a]._updateTreeOrder-s[l]._updateTreeOrder:i[a]._zIndex-s[l]._zIndex)>0?s[l++]:i[a++];if((t===0||u[t-1]!==g)&&(u[t++]=g),a>=o){do{let m=s[l++];(t===0||u[t-1]!==m)&&(u[t++]=m)}while(l<n);break}else if(l>=n){do{let m=i[a++];(t===0||u[t-1]!==m)&&(u[t++]=m)}while(a<o);break}}while(!0);this._zIndexedChildren=u}else{t=0;let a=0;do i[t++]=s[a++];while(a<n);i.length>t&&i.splice(t)}}else i.length>t&&i.splice(t);this._zSort=!1}get localTa(){return this._localTa}get localTb(){return this._localTb}get localTc(){return this._localTc}get localTd(){return this._localTd}get element(){return this._element}get renderUpdates(){return this._hasRenderUpdates}get texturizer(){return this._texturizer||(this._texturizer=new eo(this)),this._texturizer}getCornerPoints(){let e=this._worldContext;return[e.px,e.py,e.px+this._w*e.ta,e.py+this._w*e.tc,e.px+this._w*e.ta+this._h*e.tb,e.py+this._w*e.tc+this._h*e.td,e.px+this._h*e.tb,e.py+this._h*e.td]}getRenderTextureCoords(e,t){let i=this._renderContext;return[i.px+i.ta*e+i.tb*t,i.py+i.tc*e+i.td*t]}getAbsoluteCoords(e,t){let i=this._renderContext;return[i.px+i.ta*e+i.tb*t,i.py+i.tc*e+i.td*t]}collectAtCoord(e,t,i){if(this._renderContext.alpha!==0){if(this.inBound(e,t)&&(this._scissor?this.inScissor()&&i.push(this):i.push(this)),this._children){let s=this._children.length;for(let n=0;n<s;n++)this._children[n].collectAtCoord(e,t,i)}return i.sort(r.sortZIndexedChildren)}}inBound(e,t){let i=this.getCornerPoints();return e>i[0]&&e<i[2]&&t>i[1]&&t<i[7]}inScissor(){let e=this._scissor,t=this.getCornerPoints();return t[2]>=e[0]&&t[0]<=e[0]+e[2]&&t[7]>=e[1]&&t[1]<=e[1]+e[3]}get layout(){return this._ensureLayout(),this._layout}get flex(){return this._layout?this._layout.flex:null}set flex(e){this.layout.flex=e}get flexItem(){return this._layout?this._layout.flexItem:null}set flexItem(e){this.layout.flexItem=e}isFlexItem(){return!!this._layout&&this._layout.isFlexItemEnabled()}isFlexContainer(){return!!this._layout&&this._layout.isFlexEnabled()}enableFlexLayout(){this._ensureLayout()}_ensureLayout(){this._layout||(this._layout=new Wl(this))}disableFlexLayout(){this._triggerRecalcTranslate()}hasFlexLayout(){return this._layout&&this._layout.isEnabled()}setLayout(e,t,i,s){this.x=e,this.y=t,this._updateDimensions(i,s)}triggerLayout(){this._setRecalc(256)}_triggerRecalcTranslate(){this._setRecalc(2)}},sr=class{constructor(){this.alpha=1,this.px=0,this.py=0,this.ta=1,this.tb=0,this.tc=0,this.td=1}isIdentity(){return this.alpha===1&&this.px===0&&this.py===0&&this.ta===1&&this.tb===0&&this.tc===0&&this.td===1}isSquare(){return this.tb===0&&this.tc===0}};sr.IDENTITY=new sr;ds.sortZIndexedChildren=function(r,e){return r._zIndex===e._zIndex?r._updateTreeOrder-e._updateTreeOrder:r._zIndex-e._zIndex};var ct=class r{constructor(){this._hasEventListeners=!1}on(e,t){this._hasEventListeners||(this._eventFunction={},this._eventListeners={},this._hasEventListeners=!0),this._eventFunction[e]?this._eventFunction[e]!==r.combiner?(this._eventListeners[e]=[this._eventFunction[e],t],this._eventFunction[e]=r.combiner):this._eventListeners[e].push(t):this._eventFunction[e]=t}once(e,t){let i=(s,n,o)=>{t(s,n,o),this.off(e,i)};i.__originalFunc=t,this.on(e,i)}has(e,t){if(this._hasEventListeners){let i=this._eventFunction[e];if(i){if(i===r.combiner){let s=this._eventListeners[e];for(let n of s)if(n===t||n.__originalFunc==t)return!0}else if(this._eventFunction[e]===t||this._eventFunction[e].__originalFunc===t)return!0}}return!1}off(e,t){if(this._hasEventListeners){let i=this._eventFunction[e];if(i)if(i===r.combiner){let s=this._eventListeners[e],n=s.indexOf(t);n>=0&&s.splice(n,1),n=s.map(o=>o.__originalFunc).indexOf(t),n>=0&&s.splice(n,1),s.length===1&&(this._eventFunction[e]=s[0],this._eventListeners[e]=void 0)}else(this._eventFunction[e]===t||this._eventFunction[e].__originalFunc===t)&&(this._eventFunction[e]=void 0)}}removeListener(e,t){this.off(e,t)}emit(e,t,i,s){if(this._hasEventListeners){let n=this._eventFunction[e];n&&(n===r.combiner?n(this,e,t,i,s):n(t,i,s))}}listenerCount(e){if(this._hasEventListeners){let t=this._eventFunction[e];if(t)return t===r.combiner?this._eventListeners[e].length:1}return 0}removeAllListeners(e){this._hasEventListeners&&(delete this._eventFunction[e],delete this._eventListeners[e])}};ct.combiner=function(r,e,t,i,s){let n=r._eventListeners[e];if(n)for(let o of[...n])o(t,i,s)};ct.addAsMixin=function(r){r.prototype.on=ct.prototype.on,r.prototype.once=ct.prototype.once,r.prototype.has=ct.prototype.has,r.prototype.off=ct.prototype.off,r.prototype.removeListener=ct.prototype.removeListener,r.prototype.emit=ct.prototype.emit,r.prototype.listenerCount=ct.prototype.listenerCount,r.prototype.removeAllListeners=ct.prototype.removeAllListeners};var qr=class{constructor(e){this._initialized=!1,this.ctx=e,this._elements=new Set}static create(e,t){let i;if(K.isObjectLiteral(t))t.type?i=e.renderer.createShader(e.ctx,t):i=this.shader,i&&dt.patchObject(i,t);else if(t===null)i=e.ctx.renderState.defaultShader;else if(t===void 0)i=null;else if(t.isShader)e.renderer.isValidShaderType(t.constructor)||(console.error("[Lightning] Invalid shader type"),t=null),i=t;else{console.error("[Lightning] Please specify a shader type.");return}return i}static getWebGL(){}static getC2d(){}addElement(e){this._elements.add(e)}removeElement(e){this._elements.delete(e),this._elements||this.cleanup()}redraw(){this._elements.forEach(e=>{e.setHasRenderUpdates(2)})}patch(e){dt.patchObject(this,e)}useDefault(){return!1}addEmpty(){return!1}cleanup(){}get isShader(){return!0}},Rt=class r{constructor(e){this.stage=e,this.manager=this.stage.textureManager,this.id=r.id++,this.elements=new Set,this._activeCount=0,this._source=null,this._resizeMode=null,this._x=0,this._y=0,this._w=0,this._h=0,this._precision=1,this.mw=0,this.mh=0,this.clipping=!1,this._mustUpdate=!0}get source(){return(this._mustUpdate||this.stage.hasUpdateSourceTexture(this))&&(this._performUpdateSource(!0),this.stage.removeUpdateSourceTexture(this)),this._source}addElement(e){this.elements.has(e)||(this.elements.add(e),this.elements.size===1&&this._source&&this._source.addTexture(this),e.active&&this.incActiveCount())}removeElement(e){this.elements.delete(e)&&(this.elements.size===0&&this._source&&this._source.removeTexture(this),e.active&&this.decActiveCount())}incActiveCount(){this.source&&this._checkForNewerReusableTextureSource(),this._activeCount++,this._activeCount===1&&this.becomesUsed()}decActiveCount(){this.source,this._activeCount--,this._activeCount||this.becomesUnused()}becomesUsed(){this.source&&this.source.incActiveTextureCount()}onLoad(){this._resizeMode&&this._applyResizeMode(),this.elements.forEach(e=>{e.active&&e.onTextureSourceLoaded()})}_checkForNewerReusableTextureSource(){let e=this.source;if(e.isLoaded())this._resizeMode&&this._applyResizeMode();else{let t=this._getReusableTextureSource();t&&t.isLoaded()&&t!==e&&this._replaceTextureSource(t)}}becomesUnused(){this.source&&this.source.decActiveTextureCount()}isUsed(){return this._activeCount>0}_getLookupId(){return null}_getSourceLoader(){throw new Error("Texture.generate must be implemented.")}get isValid(){return this._getIsValid()}_getIsValid(){return!0}_changed(){this.isUsed()?this._updateSource():this._mustUpdate=!0}_updateSource(){this.stage.addUpdateSourceTexture(this)}_performUpdateSource(e=!1){if(e||this.isUsed()){this._mustUpdate=!1;let t=this._getTextureSource();this._replaceTextureSource(t)}}_getTextureSource(){let e=null;if(this._getIsValid()){let t=this._getLookupId();e=this._getReusableTextureSource(t),e||(e=this.manager.getTextureSource(this._getSourceLoader(),t))}return e}_getReusableTextureSource(e=this._getLookupId()){return this._getIsValid()&&e?this.manager.getReusableTextureSource(e):null}_replaceTextureSource(e=null){let t=this._source;if(this._source=e,this.elements.size&&(t&&(this._activeCount&&t.decActiveTextureCount(),t.removeTexture(this),this.text&&!t.isUsed()&&this.manager.freeTextureSource(t)),e&&(e.addTexture(this),this._activeCount&&e.incActiveTextureCount())),this.isUsed())if(e)if(e.isLoaded())this._resizeMode&&this._applyResizeMode(),this.elements.forEach(i=>{i.active&&i._setDisplayedTexture(this)});else{let i=e.loadError;i&&this.elements.forEach(s=>{s.active&&s.onTextureSourceLoadError(i)})}else this.elements.forEach(i=>{i.active&&i._setDisplayedTexture(null)})}load(){this.source&&(this.isLoaded()||this.source.load(!0))}isLoaded(){return this._source&&this._source.isLoaded()}get loadError(){return this._source&&this._source.loadError}free(){this._source&&this._source.free()}set resizeMode({type:e="cover",w:t=0,h:i=0,clipX:s=.5,clipY:n=.5}){this._resizeMode={type:e,w:t,h:i,clipX:s,clipY:n},this.isLoaded()&&this._applyResizeMode()}get resizeMode(){return this._resizeMode}_clearResizeMode(){this._resizeMode=null}_applyResizeMode(){this._resizeMode.type==="cover"?this._applyResizeCover():this._resizeMode.type==="contain"&&this._applyResizeContain(),this._updatePrecision(),this._updateClipping()}_applyResizeCover(){let e=this._resizeMode.w/this._source.w,t=this._resizeMode.h/this._source.h,i=Math.max(e,t);if(i){if(this._precision=1/i,e&&e<i){let s=this._precision*this._resizeMode.w,n=this._source.w-s;this._x=n*this._resizeMode.clipX,this._w=this._source.w-n}if(t&&t<i){let s=this._precision*this._resizeMode.h,n=this._source.h-s;this._y=n*this._resizeMode.clipY,this._h=this._source.h-n}}}_applyResizeContain(){let e=this._resizeMode.w/this._source.w,t=this._resizeMode.h/this._source.h,i=e;(!i||t<i)&&(i=t),i&&(this._precision=1/i)}enableClipping(e,t,i,s){this._clearResizeMode(),e*=this._precision,t*=this._precision,i*=this._precision,s*=this._precision,(this._x!==e||this._y!==t||this._w!==i||this._h!==s)&&(this._x=e,this._y=t,this._w=i,this._h=s,this._updateClipping(!0))}disableClipping(){this._clearResizeMode(),(this._x||this._y||this._w||this._h)&&(this._x=0,this._y=0,this._w=0,this._h=0,this._updateClipping())}_updateClipping(){this.clipping=!!(this._x||this._y||this._w||this._h);let e=this;this.elements.forEach(function(t){t.displayedTexture===e&&t.onDisplayedTextureClippingChanged()})}_updatePrecision(){let e=this;this.elements.forEach(function(t){t.displayedTexture===e&&t.onPrecisionChanged()})}getNonDefaults(){let e={};return e.type=this.constructor.name,this.x!==0&&(e.x=this.x),this.y!==0&&(e.y=this.y),this.w!==0&&(e.w=this.w),this.h!==0&&(e.h=this.h),this.precision!==1&&(e.precision=this.precision),e}get px(){return this._x}get py(){return this._y}get pw(){return this._w}get ph(){return this._h}get x(){return this._x/this._precision}set x(e){this._clearResizeMode(),e=e*this._precision,this._x!==e&&(this._x=e,this._updateClipping())}get y(){return this._y/this._precision}set y(e){this._clearResizeMode(),e=e*this._precision,this._y!==e&&(this._y=e,this._updateClipping())}get w(){return this._w/this._precision}set w(e){this._clearResizeMode(),e=e*this._precision,this._w!==e&&(this._w=e,this._updateClipping())}get h(){return this._h/this._precision}set h(e){this._clearResizeMode(),e=e*this._precision,this._h!==e&&(this._h=e,this._updateClipping())}get precision(){return this._precision}set precision(e){this._clearResizeMode(),this._precision!==e&&(this._precision=e,this._updatePrecision())}isAutosizeTexture(){return!0}getRenderWidth(){return this.isAutosizeTexture()?(this._w||(this._source?this._source.getRenderWidth()-this._x:0))/this._precision:0}getRenderHeight(){return this.isAutosizeTexture()?(this._h||(this._source?this._source.getRenderHeight()-this._y:0))/this._precision:0}patch(e){dt.patchObject(this,e)}};Rt.prototype.isTexture=!0;Rt.id=0;var ps=class extends Rt{constructor(e){super(e),this._src=void 0,this._hasAlpha=!1}get src(){return this._src}set src(e){this._src!==e&&(this._src=e,this._changed())}get hasAlpha(){return this._hasAlpha}set hasAlpha(e){this._hasAlpha!==e&&(this._hasAlpha=e,this._changed())}_getIsValid(){return!!this._src}_getLookupId(){return this._src}_getSourceLoader(){let e=this._src,t=this._hasAlpha;if(this.stage.getOption("srcBasePath")){var i=e.charCodeAt(0);e.indexOf("//")===-1&&(i>=65&&i<=90||i>=97&&i<=122||i==46)&&(e=this.stage.getOption("srcBasePath")+e)}return s=>this.stage.platform.loadSrcTexture({src:e,hasAlpha:t},s)}getNonDefaults(){let e=super.getNonDefaults();return this._src&&(e.src=this._src),e}};function to(r,e,t,i,s){let n=r;Array.isArray(n)||(n=[n]);let o=[];for(let a=0,l=n.length;a<l;a++){let u=n[a];u===null&&(u=s),u==="serif"||u==="sans-serif"?o.push(u):o.push(`"${u}"`)}return`${e} ${t*i}px ${o.join(",")}`}function Ep(r){return r===""||r==="\u200B"}function Ap(r){return Ep(r)||r===" "}function P1(r,e){let t=e.match(r)||[],i=e.split(r)||[],s=[];for(let n=0;n<i.length;n++)s.push(i[n],t[n]);return s.pop(),s.filter(n=>n!="")}function ro(r,e,t=0){return t?e.split("").reduce((i,s)=>Ep(s)?i:i+r.measureText(s).width+t,0):r.measureText(e).width}function k1(r,e,t,i,s){let n=/ |\u200B/g,o=e.split(/\r?\n/g),a=[],l=[];for(let u=0;u<o.length;u++){let c=[],g="",m=t-s,y=o[u].split(n),b=o[u].match(n)||[];for(let C=0;C<y.length;C++){let A=b[C-1]||"",T=y[C],R=ro(r,T,i),P=R+ro(r,A,i);C===0||P>m?(C>0&&(c.push(g),g=""),g+=T,m=t-R-(C===0?s:0)):(m-=P,g+=A+T)}c.push(g),g="",a=a.concat(c),u<o.length-1&&l.push(a.length)}return{l:a,n:l}}var io=class{constructor(e,t,i){this._stage=e,this._canvas=t,this._context=this._canvas.getContext("2d"),this._settings=i}getPrecision(){return this._settings.precision}setFontProperties(){this._context.font=to(this._settings.fontFace,this._settings.fontStyle,this._settings.fontSize,this.getPrecision(),this._stage.getOption("defaultFontFace")),this._context.textBaseline=this._settings.textBaseline}_load(){if(K.isWeb&&document.fonts){let e=to(this._settings.fontFace,this._settings.fontStyle,this._settings.fontSize,this.getPrecision(),this._stage.getOption("defaultFontFace"));try{if(!document.fonts.check(e,this._settings.text))return document.fonts.load(e,this._settings.text).catch(t=>{console.warn("[Lightning] Font load error",t,e)}).then(()=>{document.fonts.check(e,this._settings.text)||console.warn("[Lightning] Font not found",e)})}catch{console.warn("[Lightning] Can't check font loading for "+e)}}}draw(){let e=this._load();return e?e.then(()=>K.isSpark?this._stage.platform.drawText(this):this._draw()):K.isSpark?this._stage.platform.drawText(this):this._draw()}_calculateRenderInfo(){let e={},t=this.getPrecision(),i=this._settings.paddingLeft*t,s=this._settings.paddingRight*t,n=this._settings.fontSize*t,o=this._settings.offsetY===null?null:this._settings.offsetY*t,a=this._settings.lineHeight*t,l=this._settings.w*t,u=this._settings.h*t,c=this._settings.wordWrapWidth*t,g=this._settings.cutSx*t,m=this._settings.cutEx*t,y=this._settings.cutSy*t,b=this._settings.cutEy*t,C=(this._settings.letterSpacing||0)*t,A=this._settings.textIndent*t;this.setFontProperties();let T=l||this._stage.getOption("w"),R=T-i;if(R<10&&(T+=10-R,R=10),c||(c=R),this._settings.textOverflow&&!this._settings.wordWrap){let F;switch(this._settings.textOverflow){case"clip":F="";break;case"ellipsis":F=this._settings.maxLinesSuffix;break;default:F=this._settings.textOverflow}this._settings.text=this.wrapWord(this._settings.text,c-A,F)}let P;if(this._settings.wordWrap)P=this.wrapText(this._settings.text,c,C,A);else{P={l:this._settings.text.split(/(?:\r\n|\r|\n)/),n:[]};let F=P.l.length;for(let U=0;U<F-1;U++)P.n.push(U)}let E=P.l;if(this._settings.maxLines&&E.length>this._settings.maxLines){let F=E.slice(0,this._settings.maxLines),U=null;if(this._settings.maxLinesSuffix){let D=this._settings.maxLinesSuffix?this.measureText(this._settings.maxLinesSuffix):0,N=this.wrapText(F[F.length-1],c-D,C,A);F[F.length-1]=N.l[0]+this._settings.maxLinesSuffix,U=[N.l.length>1?N.l[1]:""]}else U=[""];let q,ee=E.length,te=0,$=P.n.length;for(q=this._settings.maxLines;q<ee;q++)U[te]+=(U[te]?" ":"")+E[q],q+1<$&&P.n[q+1]&&te++;e.remainingText=U.join(` `),e.moreTextLines=!0,E=F}else e.moreTextLines=!1,e.remainingText="";let k=0,O=[];for(let F=0;F<E.length;F++){let U=this.measureText(E[F],C)+(F===0?A:0);O.push(U),k=Math.max(k,U)}e.lineWidths=O,l||(T=k+i+s,R=k),a=a||n;let B;if(u)B=u;else{let F=this._settings.textBaseline!="bottom"?.5*n:0;B=a*(E.length-1)+F+Math.max(a,n)+o}return o===null&&(o=n),e.w=T,e.h=B,e.lines=E,e.precision=t,T||(T=1),B||(B=1),(g||m)&&(T=Math.min(T,m-g)),(y||b)&&(B=Math.min(B,b-y)),e.width=T,e.innerWidth=R,e.height=B,e.fontSize=n,e.cutSx=g,e.cutSy=y,e.cutEx=m,e.cutEy=b,e.lineHeight=a,e.lineWidths=O,e.offsetY=o,e.paddingLeft=i,e.paddingRight=s,e.letterSpacing=C,e.textIndent=A,e}_draw(){let e=this._calculateRenderInfo(),t=this.getPrecision();this._canvas.width=Math.ceil(e.width+this._stage.getOption("textRenderIssueMargin")),this._canvas.height=Math.ceil(e.height),this.setFontProperties(),e.fontSize>=128&&(this._context.globalAlpha=.01,this._context.fillRect(0,0,.01,.01),this._context.globalAlpha=1),(e.cutSx||e.cutSy)&&this._context.translate(-e.cutSx,-e.cutSy);let i,s,n=[];for(let a=0,l=e.lines.length;a<l;a++)i=a===0?e.textIndent:0,s=a*e.lineHeight+e.offsetY,this._settings.verticalAlign=="middle"?s+=(e.lineHeight-e.fontSize)/2:this._settings.verticalAlign=="bottom"&&(s+=e.lineHeight-e.fontSize),this._settings.textAlign==="right"?i+=e.innerWidth-e.lineWidths[a]:this._settings.textAlign==="center"&&(i+=(e.innerWidth-e.lineWidths[a])/2),i+=e.paddingLeft,n.push({text:e.lines[a],x:i,y:s,w:e.lineWidths[a]});if(this._settings.highlight){let a=this._settings.highlightColor||0,l=this._settings.highlightHeight*t||e.fontSize*1.5,u=this._settings.highlightOffset*t,c=this._settings.highlightPaddingLeft!==null?this._settings.highlightPaddingLeft*t:e.paddingLeft,g=this._settings.highlightPaddingRight!==null?this._settings.highlightPaddingRight*t:e.paddingRight;this._context.fillStyle=fe.getRgbaString(a);for(let m=0;m<n.length;m++){let y=n[m];this._context.fillRect(y.x-c,y.y-e.offsetY+u,y.w+g+c,l)}}let o=null;this._settings.shadow&&(o=[this._context.shadowColor,this._context.shadowOffsetX,this._context.shadowOffsetY,this._context.shadowBlur],this._context.shadowColor=fe.getRgbaString(this._settings.shadowColor),this._context.shadowOffsetX=this._settings.shadowOffsetX*t,this._context.shadowOffsetY=this._settings.shadowOffsetY*t,this._context.shadowBlur=this._settings.shadowBlur*t),this._context.fillStyle=fe.getRgbaString(this._settings.textColor);for(let a=0,l=n.length;a<l;a++){let u=n[a];if(e.letterSpacing===0)this._context.fillText(u.text,u.x,u.y);else{let c=u.text.split(""),g=u.x;for(let m=0,y=c.length;m<y;m++)this._context.fillText(c[m],g,u.y),g+=this.measureText(c[m],e.letterSpacing)}}o&&(this._context.shadowColor=o[0],this._context.shadowOffsetX=o[1],this._context.shadowOffsetY=o[2],this._context.shadowBlur=o[3]),(e.cutSx||e.cutSy)&&this._context.translate(e.cutSx,e.cutSy),this.renderInfo=e}wrapWord(e,t,i){let s=this.measureText(i),n=e.length,o=this.measureText(e);if(o<=t)return e;let a=Math.floor(t*n/o),l=this.measureText(e.substring(0,a))+s;if(l>t)for(;a>0&&(l=this.measureText(e.substring(0,a))+s,l>t);)a-=1;else for(;a<n;)if(l=this.measureText(e.substring(0,a))+s,l<t)a+=1;else{a-=1;break}return e.substring(0,a)+(t>=s?i:"")}wrapText(e,t,i,s=0){return k1(this._context,e,t,i,s)}measureText(e,t=0){return ro(this._context,e,t)}},so=class{constructor(e,t,i){this._stage=e,this._canvas=t,this._context=this._canvas.getContext("2d"),this._settings=i}getPrecision(){return this._settings.precision}setFontProperties(){let e=to(this._settings.fontFace,this._settings.fontStyle,this._settings.fontSize,this.getPrecision(),this._stage.getOption("defaultFontFace"));return this._context.font=e,this._context.textBaseline=this._settings.textBaseline,e}_load(){if(K.isWeb&&document.fonts){let e=to(this._settings.fontFace,this._settings.fontStyle,this._settings.fontSize,this.getPrecision(),this._stage.getOption("defaultFontFace"));try{if(!document.fonts.check(e,this._settings.text))return document.fonts.load(e,this._settings.text).catch(t=>{console.warn("Font load error",t,e)}).then(()=>{document.fonts.check(e,this._settings.text)||console.warn("Font not found",e)})}catch{console.warn("Can't check font loading for "+e)}}}draw(){let e=this._load();return e?e.then(()=>K.isSpark?this._stage.platform.drawText(this):this._draw()):K.isSpark?this._stage.platform.drawText(this):this._draw()}_calculateRenderInfo(){let e={},t=this.getPrecision(),i=this._settings.paddingLeft*t,s=this._settings.paddingRight*t,n=this._settings.fontSize*t,o=this._settings.lineHeight*t||n,a=this._settings.w!=0?this._settings.w*t:this._stage.getOption("w"),l=this._settings.wordWrapWidth*t,u=this._settings.cutSx*t,c=this._settings.cutEx*t,g=this._settings.cutSy*t,m=this._settings.cutEy*t,y=this._settings.letterSpacing||0;e.baseFont=this.setFontProperties(),e.w=a,e.width=a,e.text=this._settings.text,e.precision=t,e.fontSize=n,e.fontBaselineRatio=this._settings.fontBaselineRatio,e.lineHeight=o,e.letterSpacing=y,e.textAlign=this._settings.textAlign,e.textColor=this._settings.textColor,e.verticalAlign=this._settings.verticalAlign,e.highlight=this._settings.highlight,e.highlightColor=this._settings.highlightColor,e.highlightHeight=this._settings.highlightHeight,e.highlightPaddingLeft=this._settings.highlightPaddingLeft,e.highlightPaddingRight=this._settings.highlightPaddingRight,e.highlightOffset=this._settings.highlightOffset,e.paddingLeft=this._settings.paddingLeft,e.paddingRight=this._settings.paddingRight,e.maxLines=this._settings.maxLines,e.maxLinesSuffix=this._settings.maxLinesSuffix,e.textOverflow=this._settings.textOverflow,e.wordWrap=this._settings.wordWrap,e.wordWrapWidth=l,e.shadow=this._settings.shadow,e.shadowColor=this._settings.shadowColor,e.shadowOffsetX=this._settings.shadowOffsetX,e.shadowOffsetY=this._settings.shadowOffsetY,e.shadowBlur=this._settings.shadowBlur,e.cutSx=u,e.cutEx=c,e.cutSy=g,e.cutEy=m,e.textIndent=this._settings.textIndent*t,e.wordBreak=this._settings.wordBreak;let b=e.text,C=e.wordWrap&&e.wordWrapWidth||e.width;if(e.textOverflow&&!e.wordWrap){let E;switch(this._settings.textOverflow){case"clip":E="";break;case"ellipsis":E=this._settings.maxLinesSuffix;break;default:E=this._settings.textOverflow}b=this.wrapWord(b,l||e.w,E)}b=this.tokenize(b),b=this.parse(b),b=this.measure(b,y,e.baseFont),e.textIndent&&(b=this.indent(b,e.textIndent)),e.wordBreak&&(b=b.reduce((E,k)=>E.concat(this.wordBreak(k,C,e.baseFont)),[]),this.resetFontStyle());let A=i,T=0;for(let E of b)(e.wordWrap&&A+E.width>C||E.text==` `)&&(A=i,T+=1),E.lineNo=T,E.text!=` `&&(E.x=A,A+=E.width);e.lineNum=T+1,this._settings.h?e.h=this._settings.h:e.maxLines&&e.maxLines<e.lineNum?e.h=e.maxLines*e.lineHeight+n/2:e.h=e.lineNum*e.lineHeight+n/2;let R=e.fontBaselineRatio*e.fontSize,P=0;e.verticalAlign=="top"&&this._context.textBaseline=="alphabetic"?P=-R:e.verticalAlign=="middle"?P=(e.lineHeight-e.fontSize-R)/2:this._settings.verticalAlign=="bottom"&&(P=e.lineHeight-e.fontSize),e.lines=[];for(let E=0;E<e.lineNum;E++)e.lines[E]={width:0,x:0,y:e.lineHeight*E+P,text:[]};for(let E of b)e.lines[E.lineNo].text.push(E);for(let E of e.lines){if(E.text.length==0)continue;let k=E.text[0].text,O=E.text[E.text.length-1].text;k==`