@vc-shell/framework 2.0.0-alpha.8 → 2.0.0-pr221.637b802
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +549 -532
- package/dist/ai-agent/index.js +13 -0
- package/dist/ai-agent/index.js.map +1 -0
- package/dist/assets/042c75b764bc78a7.svg +1 -0
- package/dist/assets/0ba156439a339f2a.svg +1 -0
- package/dist/assets/0be560bfb22d0e72.woff2 +0 -0
- package/dist/assets/0d67e9e056b4c500.woff +0 -0
- package/dist/assets/0f590f8a94577092.svg +1 -0
- package/dist/assets/0fc5820f8be53a1b.svg +1 -0
- package/dist/assets/105efd028edc1dfe.woff +0 -0
- package/dist/assets/10768e2cc79fc60b.svg +1 -0
- package/dist/assets/11b3d25a56fd9a21.woff2 +0 -0
- package/dist/assets/131b34336aedaf47.woff +0 -0
- package/dist/assets/154365acf3010d96.woff2 +0 -0
- package/dist/assets/157b8721e0600ea8.svg +1 -0
- package/dist/assets/15e91cdd649cde9a.svg +1 -0
- package/dist/assets/19275e398ae57130.woff2 +0 -0
- package/dist/assets/19bb1c668a5db39f.woff2 +0 -0
- package/dist/assets/1a3e84b2457f709a.woff +0 -0
- package/dist/assets/1de63eb118636cce.svg +1 -0
- package/dist/assets/1ea01de36eb5491b.svg +1 -0
- package/dist/assets/2010ada3e82156ed.woff +0 -0
- package/dist/assets/204eaf512fde2023.svg +1 -0
- package/dist/assets/2088983edf42e153.svg +1 -0
- package/dist/assets/208f810a9321a327.svg +1 -0
- package/dist/assets/21220a9d10e6c558.svg +1 -0
- package/dist/assets/220db345a102045d.woff2 +0 -0
- package/dist/assets/225da11d23968333.svg +1 -0
- package/dist/assets/226f862dd81bdc13.woff2 +0 -0
- package/dist/assets/23a2d53395ddb14f.woff +0 -0
- package/dist/assets/259e6ad461a52ad7.svg +1 -0
- package/dist/assets/261e6dec4d53b9ac.woff +0 -0
- package/dist/assets/262f46a0b6d94bb6.svg +1 -0
- package/dist/assets/2857c513073467da.svg +1 -0
- package/dist/assets/2b3be7889467d98f.woff +0 -0
- package/dist/assets/2d4e6190eec72737.svg +1 -0
- package/dist/assets/2eba973185078bc8.woff +0 -0
- package/dist/assets/334d3f6bc766c516.woff +0 -0
- package/dist/assets/34ff7dd0c2285956.svg +1 -0
- package/dist/assets/3d26b7c1ab78bbe2.woff +0 -0
- package/dist/assets/3d892965ab4f1cbb.woff2 +0 -0
- package/dist/assets/3f8c4cc8099e34b6.woff2 +0 -0
- package/dist/assets/3fc09a6113184f16.woff +0 -0
- package/dist/assets/40a0e53b79ce63c6.woff2 +0 -0
- package/dist/assets/41275bcb979cb650.svg +1 -0
- package/dist/assets/434f7982590e462f.woff +0 -0
- package/dist/assets/475937116ee3314a.woff2 +0 -0
- package/dist/assets/477e1881a0394cc5.woff +0 -0
- package/dist/assets/489710fb710e73f0.woff +0 -0
- package/dist/assets/49791943b3872376.woff2 +0 -0
- package/dist/assets/4ae5f23e0ca888e7.woff2 +0 -0
- package/dist/assets/4d7a77b0e5373992.svg +1 -0
- package/dist/assets/4e43c74354534fb3.svg +1 -0
- package/dist/assets/4fe75f5117100705.svg +1 -0
- package/dist/assets/52e261a005074e1b.woff +0 -0
- package/dist/assets/5304c3d05a5f9789.woff2 +0 -0
- package/dist/assets/54cda5482c6c9218.woff +0 -0
- package/dist/assets/550f52072e8ccafe.woff2 +0 -0
- package/dist/assets/572bb1bb4156a9c1.svg +1 -0
- package/dist/assets/6075995d7e74da46.woff2 +0 -0
- package/dist/assets/617c4736236e199e.woff +0 -0
- package/dist/assets/67230f05dc94a265.svg +1 -0
- package/dist/assets/6798e4dd4add9b48.svg +1 -0
- package/dist/assets/686d4077c1e26876.woff2 +0 -0
- package/dist/assets/698ec6c722d4cb05.woff2 +0 -0
- package/dist/assets/6a3e73faf406cf33.svg +1 -0
- package/dist/assets/72de3a63bc0b70dd.svg +1 -0
- package/dist/assets/74c6a6ab81bb6340.woff2 +0 -0
- package/dist/assets/74ed5f8a78e71106.svg +1 -0
- package/dist/assets/7a5aa5abd625137f.ttf +0 -0
- package/dist/assets/7ce0c166fd6a1204.woff +0 -0
- package/dist/assets/7d55399c2a7bc985.svg +1 -0
- package/dist/assets/7d970675c69fca1d.woff +0 -0
- package/dist/assets/7eda727273fd98d3.svg +1 -0
- package/dist/assets/7f6ebfd707b76ca2.woff +0 -0
- package/dist/assets/7fa898d213fcc7bc.woff2 +0 -0
- package/dist/assets/861e6b7192b3b6c7.woff +0 -0
- package/dist/assets/8bbcde81ba21ecb2.woff2 +0 -0
- package/dist/assets/8f6657e5e0b8d3e4.woff +0 -0
- package/dist/assets/910b0d99b9e26568.svg +1 -0
- package/dist/assets/91fe94e424323d61.woff +0 -0
- package/dist/assets/92508f8707159b51.svg +1 -0
- package/dist/assets/9392bf1d591e1abb.svg +1 -0
- package/dist/assets/97e8d4984ba0713a.woff2 +0 -0
- package/dist/assets/9cb83236f6bb7ab1.svg +1 -0
- package/dist/assets/9d37314695c0b68d.woff +0 -0
- package/dist/assets/a03cdcd8da5bb987.woff +0 -0
- package/dist/assets/a18404194e3f9047.svg +1 -0
- package/dist/assets/a2017fe7f0a26510.svg +1 -0
- package/dist/assets/ab6e7190bb1492d5.woff2 +0 -0
- package/dist/assets/abf88f301a0730f4.svg +1 -0
- package/dist/assets/ac1a99b3d05d8232.woff +0 -0
- package/dist/assets/aed17cb6fdad2ada.woff2 +0 -0
- package/dist/assets/b1a596e31ad1185a.svg +1 -0
- package/dist/assets/b27767411c8427be.woff +0 -0
- package/dist/assets/b325adcae33bbe7a.svg +1 -0
- package/dist/assets/b372390551ca2fa1.svg +1 -0
- package/dist/assets/b5bb1e8fc975decd.svg +1 -0
- package/dist/assets/b645a4a2181b9dc1.svg +1 -0
- package/dist/assets/b6499ddce0a4ef7d.svg +1 -0
- package/dist/assets/b7ffde2383bb16ba.woff2 +0 -0
- package/dist/assets/b94421fadd23b0f2.svg +1 -0
- package/dist/assets/bb28fb0f27f1c11b.svg +1 -0
- package/dist/assets/c5195215cb712e9c.woff2 +0 -0
- package/dist/assets/c9191b638a10f67b.woff2 +0 -0
- package/dist/assets/c97328b91ac5cc66.woff +0 -0
- package/dist/assets/ca791c5ca5848a03.svg +1 -0
- package/dist/assets/cb32840ce330103f.woff +0 -0
- package/dist/assets/ccc878931d74181b.woff2 +0 -0
- package/dist/assets/cdc69f8b549c866d.woff2 +0 -0
- package/dist/assets/d084bda16abe8a56.svg +1 -0
- package/dist/assets/d32b129cae2fffd6.svg +1 -0
- package/dist/assets/d35a4c7113315758.woff2 +0 -0
- package/dist/assets/d3f792f54ae4c307.svg +1 -0
- package/dist/assets/d5a5b8630120073d.svg +1 -0
- package/dist/assets/d5eb20bcdcf5616a.woff2 +0 -0
- package/dist/assets/d5f9664ebbfb104b.svg +1 -0
- package/dist/assets/d84247b59449dd88.woff2 +0 -0
- package/dist/assets/da4b7f5883fe7743.woff2 +0 -0
- package/dist/assets/dceaf3b39091e6a4.woff +0 -0
- package/dist/assets/dd05d43ff0df2fc7.svg +1 -0
- package/dist/assets/e2ad5b3428289141.woff +0 -0
- package/dist/assets/e38acaa1757232e0.svg +1 -0
- package/dist/assets/e4a8550f1c7ffe36.svg +1 -0
- package/dist/assets/e5adb5ae3a3698f6.svg +1 -0
- package/dist/assets/e61a1889bac955f4.woff2 +0 -0
- package/dist/assets/e72bb11356af94c7.svg +1 -0
- package/dist/assets/e98196a9f8dcb2f0.svg +1 -0
- package/dist/assets/ebec912a42ad49ff.woff +0 -0
- package/dist/assets/ee6983981ffcbb41.woff2 +0 -0
- package/dist/assets/f09d89268e4c0317.svg +1 -0
- package/dist/assets/f239394367fcf005.woff2 +0 -0
- package/dist/assets/f5722262b6e7214e.woff2 +0 -0
- package/dist/assets/f7fc8bf46089d8b2.svg +1 -0
- package/dist/assets/fc829e3f399b70e0.woff2 +0 -0
- package/dist/assets/fe141d99763f5d2b.woff +0 -0
- package/dist/assets/fed13b0d59903483.svg +1 -0
- package/dist/assets/fed757d2c2344ead.woff2 +0 -0
- package/dist/assets/ffc438f20e79ce73.woff +0 -0
- package/dist/chunks/ExtensionPoint.vue_vue_type_style_index_0_lang-B1R06zHa.js +12 -0
- package/dist/chunks/ExtensionPoint.vue_vue_type_style_index_0_lang-B1R06zHa.js.map +1 -0
- package/dist/chunks/VcAiAgentPanel.vue_vue_type_style_index_0_lang-D0kWIlz3.js +4485 -0
- package/dist/chunks/VcAiAgentPanel.vue_vue_type_style_index_0_lang-D0kWIlz3.js.map +1 -0
- package/dist/chunks/VcTableAdapter.vue_vue_type_style_index_0_lang-Dh7DDZB9.js +22070 -0
- package/dist/chunks/VcTableAdapter.vue_vue_type_style_index_0_lang-Dh7DDZB9.js.map +1 -0
- package/dist/chunks/index-BuTo_Lx8.js +72 -0
- package/dist/chunks/index-BuTo_Lx8.js.map +1 -0
- package/dist/chunks/index-CDUdOax4.js +117 -0
- package/dist/chunks/index-CDUdOax4.js.map +1 -0
- package/dist/chunks/vendor-boolbase-DYkUBG-P.js +18 -0
- package/dist/chunks/vendor-boolbase-DYkUBG-P.js.map +1 -0
- package/dist/chunks/vendor-cheerio-DE71XQ9x.js +1053 -0
- package/dist/chunks/vendor-cheerio-DE71XQ9x.js.map +1 -0
- package/dist/chunks/vendor-cheerio-select-D-qK1Cpo.js +191 -0
- package/dist/chunks/vendor-cheerio-select-D-qK1Cpo.js.map +1 -0
- package/dist/chunks/vendor-css-select-DqoO1-RK.js +622 -0
- package/dist/chunks/vendor-css-select-DqoO1-RK.js.map +1 -0
- package/dist/chunks/vendor-css-what-CZZaquJM.js +267 -0
- package/dist/chunks/vendor-css-what-CZZaquJM.js.map +1 -0
- package/dist/chunks/vendor-cypress-signalr-mock-itnm2wpA.js +781 -0
- package/dist/chunks/vendor-cypress-signalr-mock-itnm2wpA.js.map +1 -0
- package/dist/chunks/vendor-d3-array-9cpTrqlO.js +149 -0
- package/dist/chunks/vendor-d3-array-9cpTrqlO.js.map +1 -0
- package/dist/chunks/vendor-d3-axis-D1_DbKLz.js +74 -0
- package/dist/chunks/vendor-d3-axis-D1_DbKLz.js.map +1 -0
- package/dist/chunks/vendor-d3-brush-CcKeJp9e.js +1 -0
- package/dist/chunks/vendor-d3-brush-CcKeJp9e.js.map +1 -0
- package/dist/chunks/vendor-d3-chord-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-d3-color-BOYE6h_9.js +306 -0
- package/dist/chunks/vendor-d3-color-BOYE6h_9.js.map +1 -0
- package/dist/chunks/vendor-d3-dispatch-fx-WMg0D.js +64 -0
- package/dist/chunks/vendor-d3-dispatch-fx-WMg0D.js.map +1 -0
- package/dist/chunks/vendor-d3-drag-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-d3-ease-Cr34gv04.js +8 -0
- package/dist/chunks/vendor-d3-ease-Cr34gv04.js.map +1 -0
- package/dist/chunks/vendor-d3-force-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-d3-format-DaIwZvFc.js +182 -0
- package/dist/chunks/vendor-d3-format-DaIwZvFc.js.map +1 -0
- package/dist/chunks/vendor-d3-geo-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-d3-geo-projection-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-d3-hierarchy-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-d3-interpolate-BYG2gvO4.js +177 -0
- package/dist/chunks/vendor-d3-interpolate-BYG2gvO4.js.map +1 -0
- package/dist/chunks/vendor-d3-interpolate-path-CpGLvKgS.js +299 -0
- package/dist/chunks/vendor-d3-interpolate-path-CpGLvKgS.js.map +1 -0
- package/dist/chunks/vendor-d3-path-DJOTitNW.js +64 -0
- package/dist/chunks/vendor-d3-path-DJOTitNW.js.map +1 -0
- package/dist/chunks/vendor-d3-quadtree-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-d3-sankey-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-d3-scale-CC5rtdt5.js +561 -0
- package/dist/chunks/vendor-d3-scale-CC5rtdt5.js.map +1 -0
- package/dist/chunks/vendor-d3-selection-CNMxsYiL.js +603 -0
- package/dist/chunks/vendor-d3-selection-CNMxsYiL.js.map +1 -0
- package/dist/chunks/vendor-d3-shape-DBhCDMiV.js +925 -0
- package/dist/chunks/vendor-d3-shape-DBhCDMiV.js.map +1 -0
- package/dist/chunks/vendor-d3-time-DAPP210_.js +212 -0
- package/dist/chunks/vendor-d3-time-DAPP210_.js.map +1 -0
- package/dist/chunks/vendor-d3-time-format-hD7iE2WG.js +491 -0
- package/dist/chunks/vendor-d3-time-format-hD7iE2WG.js.map +1 -0
- package/dist/chunks/vendor-d3-timer-C1cUWKPz.js +67 -0
- package/dist/chunks/vendor-d3-timer-C1cUWKPz.js.map +1 -0
- package/dist/chunks/vendor-d3-transition-BbNQT7qF.js +524 -0
- package/dist/chunks/vendor-d3-transition-BbNQT7qF.js.map +1 -0
- package/dist/chunks/vendor-d3-zoom-CcKeJp9e.js +1 -0
- package/dist/chunks/vendor-d3-zoom-CcKeJp9e.js.map +1 -0
- package/dist/chunks/vendor-date-fns-BKO3x1R1.js +3102 -0
- package/dist/chunks/vendor-date-fns-BKO3x1R1.js.map +1 -0
- package/dist/chunks/vendor-dom-serializer-BbVuF1MQ.js +213 -0
- package/dist/chunks/vendor-dom-serializer-BbVuF1MQ.js.map +1 -0
- package/dist/chunks/vendor-domelementtype-B3sFIGaC.js +21 -0
- package/dist/chunks/vendor-domelementtype-B3sFIGaC.js.map +1 -0
- package/dist/chunks/vendor-domhandler-Kufn9M_V.js +311 -0
- package/dist/chunks/vendor-domhandler-Kufn9M_V.js.map +1 -0
- package/dist/chunks/vendor-dompurify-DpIUMBYC.js +560 -0
- package/dist/chunks/vendor-dompurify-DpIUMBYC.js.map +1 -0
- package/dist/chunks/vendor-domutils-DDRq_ial.js +386 -0
- package/dist/chunks/vendor-domutils-DDRq_ial.js.map +1 -0
- package/dist/chunks/vendor-elkjs-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-emotion-cache-eEZT5l-Q.js +274 -0
- package/dist/chunks/vendor-emotion-cache-eEZT5l-Q.js.map +1 -0
- package/dist/chunks/vendor-emotion-hash-DImMRhyK.js +22 -0
- package/dist/chunks/vendor-emotion-hash-DImMRhyK.js.map +1 -0
- package/dist/chunks/vendor-emotion-memoize-BcEUCz8q.js +9 -0
- package/dist/chunks/vendor-emotion-memoize-BcEUCz8q.js.map +1 -0
- package/dist/chunks/vendor-emotion-serialize-BSDW8NwU.js +123 -0
- package/dist/chunks/vendor-emotion-serialize-BSDW8NwU.js.map +1 -0
- package/dist/chunks/vendor-emotion-sheet-CS8ZBl9s.js +44 -0
- package/dist/chunks/vendor-emotion-sheet-CS8ZBl9s.js.map +1 -0
- package/dist/chunks/vendor-emotion-unitless-B7u1PU6w.js +53 -0
- package/dist/chunks/vendor-emotion-unitless-B7u1PU6w.js.map +1 -0
- package/dist/chunks/vendor-emotion-utils-D7refZTM.js +28 -0
- package/dist/chunks/vendor-emotion-utils-D7refZTM.js.map +1 -0
- package/dist/chunks/vendor-emotion-weak-memoize-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-entities-J86Og8IU.js +364 -0
- package/dist/chunks/vendor-entities-J86Og8IU.js.map +1 -0
- package/dist/chunks/vendor-floating-ui-core-BoHdh92a.js +432 -0
- package/dist/chunks/vendor-floating-ui-core-BoHdh92a.js.map +1 -0
- package/dist/chunks/vendor-floating-ui-dom-BvVXFZ4B.js +398 -0
- package/dist/chunks/vendor-floating-ui-dom-BvVXFZ4B.js.map +1 -0
- package/dist/chunks/vendor-floating-ui-utils-CidJRIm2.js +257 -0
- package/dist/chunks/vendor-floating-ui-utils-CidJRIm2.js.map +1 -0
- package/dist/chunks/vendor-floating-ui-vue-sCrhit51.js +121 -0
- package/dist/chunks/vendor-floating-ui-vue-sCrhit51.js.map +1 -0
- package/dist/chunks/vendor-gridstack-Beau2jQ7.js +3460 -0
- package/dist/chunks/vendor-gridstack-Beau2jQ7.js.map +1 -0
- package/dist/chunks/vendor-headlessui-vue-Cn-RMs4E.js +961 -0
- package/dist/chunks/vendor-headlessui-vue-Cn-RMs4E.js.map +1 -0
- package/dist/chunks/vendor-htmlparser2-BxKKzWLL.js +735 -0
- package/dist/chunks/vendor-htmlparser2-BxKKzWLL.js.map +1 -0
- package/dist/chunks/vendor-internmap-Q5729_cS.js +35 -0
- package/dist/chunks/vendor-internmap-Q5729_cS.js.map +1 -0
- package/dist/chunks/vendor-intlify-core-base-Cf8V01l9.js +1141 -0
- package/dist/chunks/vendor-intlify-core-base-Cf8V01l9.js.map +1 -0
- package/dist/chunks/vendor-intlify-message-compiler-h1txdYa8.js +960 -0
- package/dist/chunks/vendor-intlify-message-compiler-h1txdYa8.js.map +1 -0
- package/dist/chunks/vendor-intlify-shared-D4BJYR57.js +144 -0
- package/dist/chunks/vendor-intlify-shared-D4BJYR57.js.map +1 -0
- package/dist/chunks/vendor-iso-639-1-BEjYyfKo.js +784 -0
- package/dist/chunks/vendor-iso-639-1-BEjYyfKo.js.map +1 -0
- package/dist/chunks/vendor-juggle-resize-observer-DiSiNbbT.js +286 -0
- package/dist/chunks/vendor-juggle-resize-observer-DiSiNbbT.js.map +1 -0
- package/dist/chunks/vendor-kdbush-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-leaflet-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-linkify-it-LzoUhj6C.js +199 -0
- package/dist/chunks/vendor-linkify-it-LzoUhj6C.js.map +1 -0
- package/dist/chunks/vendor-linkifyjs-dCH9UYes.js +701 -0
- package/dist/chunks/vendor-linkifyjs-dCH9UYes.js.map +1 -0
- package/dist/chunks/vendor-lodash-es-CfnUOh0o.js +1490 -0
- package/dist/chunks/vendor-lodash-es-CfnUOh0o.js.map +1 -0
- package/dist/chunks/vendor-lodash-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-lucide-vue-next-CwUrzD6N.js +33103 -0
- package/dist/chunks/vendor-lucide-vue-next-CwUrzD6N.js.map +1 -0
- package/dist/chunks/vendor-maplibre-gl-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-markdown-it-Bs9KEWkF.js +2266 -0
- package/dist/chunks/vendor-markdown-it-Bs9KEWkF.js.map +1 -0
- package/dist/chunks/vendor-markdown-it-task-lists-CHKeJZfk.js +69 -0
- package/dist/chunks/vendor-markdown-it-task-lists-CHKeJZfk.js.map +1 -0
- package/dist/chunks/vendor-mdurl-DZFDNdqC.js +192 -0
- package/dist/chunks/vendor-mdurl-DZFDNdqC.js.map +1 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-analytics-js-ufpnHxNR.js +1142 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-analytics-js-ufpnHxNR.js.map +1 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-cfgsync-js-BmGq5cEx.js +247 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-cfgsync-js-BmGq5cEx.js.map +1 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-channel-js-BdtUi1l8.js +1907 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-channel-js-BdtUi1l8.js.map +1 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-core-js-CR3vyuZc.js +8406 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-core-js-CR3vyuZc.js.map +1 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-dependencies-js-DXmYt4tG.js +1441 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-dependencies-js-DXmYt4tG.js.map +1 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-properties-js-CLbNzgkN.js +610 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-properties-js-CLbNzgkN.js.map +1 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-shims-CGX8KXgN.js +44 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-shims-CGX8KXgN.js.map +1 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-web-DzgnK2Mn.js +970 -0
- package/dist/chunks/vendor-microsoft-applicationinsights-web-DzgnK2Mn.js.map +1 -0
- package/dist/chunks/vendor-microsoft-dynamicproto-js-D7567TLZ.js +147 -0
- package/dist/chunks/vendor-microsoft-dynamicproto-js-D7567TLZ.js.map +1 -0
- package/dist/chunks/vendor-microsoft-signalr-Bgpbb4fW.js +1761 -0
- package/dist/chunks/vendor-microsoft-signalr-Bgpbb4fW.js.map +1 -0
- package/dist/chunks/vendor-nevware21-ts-async-BxN_lmkD.js +271 -0
- package/dist/chunks/vendor-nevware21-ts-async-BxN_lmkD.js.map +1 -0
- package/dist/chunks/vendor-nevware21-ts-utils-Dr-hD3q9.js +973 -0
- package/dist/chunks/vendor-nevware21-ts-utils-Dr-hD3q9.js.map +1 -0
- package/dist/chunks/vendor-nth-check-D0N1qpsw.js +45 -0
- package/dist/chunks/vendor-nth-check-D0N1qpsw.js.map +1 -0
- package/dist/chunks/vendor-orderedmap-B3SOk52B.js +103 -0
- package/dist/chunks/vendor-orderedmap-B3SOk52B.js.map +1 -0
- package/dist/chunks/vendor-parse5-htmlparser2-tree-adapter-BUDJ887-.js +143 -0
- package/dist/chunks/vendor-parse5-htmlparser2-tree-adapter-BUDJ887-.js.map +1 -0
- package/dist/chunks/vendor-parse5-zq5Hn0y9.js +5749 -0
- package/dist/chunks/vendor-parse5-zq5Hn0y9.js.map +1 -0
- package/dist/chunks/vendor-prettier-2Sf6a5jB.js +5309 -0
- package/dist/chunks/vendor-prettier-2Sf6a5jB.js.map +1 -0
- package/dist/chunks/vendor-prosemirror-commands-BaRVaTVO.js +385 -0
- package/dist/chunks/vendor-prosemirror-commands-BaRVaTVO.js.map +1 -0
- package/dist/chunks/vendor-prosemirror-dropcursor-PuLxL9JM.js +86 -0
- package/dist/chunks/vendor-prosemirror-dropcursor-PuLxL9JM.js.map +1 -0
- package/dist/chunks/vendor-prosemirror-gapcursor-C7MEx13L.js +203 -0
- package/dist/chunks/vendor-prosemirror-gapcursor-C7MEx13L.js.map +1 -0
- package/dist/chunks/vendor-prosemirror-history-_AfZxoMt.js +248 -0
- package/dist/chunks/vendor-prosemirror-history-_AfZxoMt.js.map +1 -0
- package/dist/chunks/vendor-prosemirror-keymap-tvZqK1zZ.js +62 -0
- package/dist/chunks/vendor-prosemirror-keymap-tvZqK1zZ.js.map +1 -0
- package/dist/chunks/vendor-prosemirror-markdown-rpUTSG_Q.js +663 -0
- package/dist/chunks/vendor-prosemirror-markdown-rpUTSG_Q.js.map +1 -0
- package/dist/chunks/vendor-prosemirror-model-DAA3avbR.js +2730 -0
- package/dist/chunks/vendor-prosemirror-model-DAA3avbR.js.map +1 -0
- package/dist/chunks/vendor-prosemirror-schema-list-qDgvFydE.js +87 -0
- package/dist/chunks/vendor-prosemirror-schema-list-qDgvFydE.js.map +1 -0
- package/dist/chunks/vendor-prosemirror-state-BvFA7AjG.js +821 -0
- package/dist/chunks/vendor-prosemirror-state-BvFA7AjG.js.map +1 -0
- package/dist/chunks/vendor-prosemirror-tables-CbmHRq4G.js +1414 -0
- package/dist/chunks/vendor-prosemirror-tables-CbmHRq4G.js.map +1 -0
- package/dist/chunks/vendor-prosemirror-transform-DVGD47fI.js +1541 -0
- package/dist/chunks/vendor-prosemirror-transform-DVGD47fI.js.map +1 -0
- package/dist/chunks/vendor-prosemirror-view-BW4UqvjQ.js +3802 -0
- package/dist/chunks/vendor-prosemirror-view-BW4UqvjQ.js.map +1 -0
- package/dist/chunks/vendor-punycode-js-CgGegfA_.js +133 -0
- package/dist/chunks/vendor-punycode-js-CgGegfA_.js.map +1 -0
- package/dist/chunks/vendor-rope-sequence-BWC2FSrq.js +100 -0
- package/dist/chunks/vendor-rope-sequence-BWC2FSrq.js.map +1 -0
- package/dist/chunks/vendor-sortablejs-Bsvu-FKn.js +1276 -0
- package/dist/chunks/vendor-sortablejs-Bsvu-FKn.js.map +1 -0
- package/dist/chunks/vendor-striptags-DtlgQudQ.js +120 -0
- package/dist/chunks/vendor-striptags-DtlgQudQ.js.map +1 -0
- package/dist/chunks/vendor-stylis-ClfDrgKE.js +334 -0
- package/dist/chunks/vendor-stylis-ClfDrgKE.js.map +1 -0
- package/dist/chunks/vendor-supercluster-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-swiper-BgqGfw3Y.js +3800 -0
- package/dist/chunks/vendor-swiper-BgqGfw3Y.js.map +1 -0
- package/dist/chunks/vendor-tanstack-virtual-core-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-tanstack-vue-virtual-CD9yLWd7.js +1 -0
- package/dist/chunks/vendor-tanstack-vue-virtual-CD9yLWd7.js.map +1 -0
- package/dist/chunks/vendor-three-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-throttle-debounce-CX0imT7m.js +28 -0
- package/dist/chunks/vendor-throttle-debounce-CX0imT7m.js.map +1 -0
- package/dist/chunks/vendor-tiptap-core-CZbeo7XQ.js +3944 -0
- package/dist/chunks/vendor-tiptap-core-CZbeo7XQ.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-blockquote-B8uwrgnZ.js +60 -0
- package/dist/chunks/vendor-tiptap-extension-blockquote-B8uwrgnZ.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-bold-Ch9pbrZY.js +80 -0
- package/dist/chunks/vendor-tiptap-extension-bold-Ch9pbrZY.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-code-CVh_mZgz.js +52 -0
- package/dist/chunks/vendor-tiptap-extension-code-CVh_mZgz.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-code-block-CfoUSR2N.js +215 -0
- package/dist/chunks/vendor-tiptap-extension-code-block-CfoUSR2N.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-document-C4tn-v0L.js +12 -0
- package/dist/chunks/vendor-tiptap-extension-document-C4tn-v0L.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-hard-break-CbK1eM89.js +59 -0
- package/dist/chunks/vendor-tiptap-extension-hard-break-CbK1eM89.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-heading-BlkYF-RD.js +63 -0
- package/dist/chunks/vendor-tiptap-extension-heading-BlkYF-RD.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-horizontal-rule-DjMOsQCA.js +56 -0
- package/dist/chunks/vendor-tiptap-extension-horizontal-rule-DjMOsQCA.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-image-BpqLcXdw.js +128 -0
- package/dist/chunks/vendor-tiptap-extension-image-BpqLcXdw.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-italic-YDdh6jEW.js +79 -0
- package/dist/chunks/vendor-tiptap-extension-italic-YDdh6jEW.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-link-CETrc0Mo.js +312 -0
- package/dist/chunks/vendor-tiptap-extension-link-CETrc0Mo.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-list-DsiDvJxK.js +753 -0
- package/dist/chunks/vendor-tiptap-extension-list-DsiDvJxK.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-paragraph-Bcss4jc0.js +49 -0
- package/dist/chunks/vendor-tiptap-extension-paragraph-Bcss4jc0.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-placeholder-ClNjQXk_.js +1 -0
- package/dist/chunks/vendor-tiptap-extension-placeholder-ClNjQXk_.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-strike-BZiBed9b.js +64 -0
- package/dist/chunks/vendor-tiptap-extension-strike-BZiBed9b.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-table-QVjcLO_H.js +409 -0
- package/dist/chunks/vendor-tiptap-extension-table-QVjcLO_H.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-table-cell-CuXZTKj8.js +1 -0
- package/dist/chunks/vendor-tiptap-extension-table-cell-CuXZTKj8.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-table-header-CuXZTKj8.js +1 -0
- package/dist/chunks/vendor-tiptap-extension-table-header-CuXZTKj8.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-table-row-CuXZTKj8.js +1 -0
- package/dist/chunks/vendor-tiptap-extension-table-row-CuXZTKj8.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-text-Wofhchrp.js +13 -0
- package/dist/chunks/vendor-tiptap-extension-text-Wofhchrp.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-text-style-Bc6nvmn0.js +235 -0
- package/dist/chunks/vendor-tiptap-extension-text-style-Bc6nvmn0.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extension-underline-Bo1pXXDN.js +65 -0
- package/dist/chunks/vendor-tiptap-extension-underline-Bo1pXXDN.js.map +1 -0
- package/dist/chunks/vendor-tiptap-extensions-D7eaegpB.js +299 -0
- package/dist/chunks/vendor-tiptap-extensions-D7eaegpB.js.map +1 -0
- package/dist/chunks/vendor-tiptap-markdown-18K1hcU0.js +826 -0
- package/dist/chunks/vendor-tiptap-markdown-18K1hcU0.js.map +1 -0
- package/dist/chunks/vendor-tiptap-pm-yqZPZQMU.js +1 -0
- package/dist/chunks/vendor-tiptap-pm-yqZPZQMU.js.map +1 -0
- package/dist/chunks/vendor-tiptap-starter-kit-ny-AoaO_.js +28 -0
- package/dist/chunks/vendor-tiptap-starter-kit-ny-AoaO_.js.map +1 -0
- package/dist/chunks/vendor-tiptap-vue-3-BNAw8onj.js +157 -0
- package/dist/chunks/vendor-tiptap-vue-3-BNAw8onj.js.map +1 -0
- package/dist/chunks/vendor-topojson-client-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-truncate-html-ChA1T5zy.js +145 -0
- package/dist/chunks/vendor-truncate-html-ChA1T5zy.js.map +1 -0
- package/dist/chunks/vendor-tslib-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-uc-micro-4lbSaZOs.js +17 -0
- package/dist/chunks/vendor-uc-micro-4lbSaZOs.js.map +1 -0
- package/dist/chunks/vendor-unovis-dagre-layout-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-unovis-graphlibrary-l0sNRNKZ.js.map +1 -0
- package/dist/chunks/vendor-unovis-ts-stSsHr9j.js +2382 -0
- package/dist/chunks/vendor-unovis-ts-stSsHr9j.js.map +1 -0
- package/dist/chunks/vendor-unovis-vue-CZWGT3-0.js +446 -0
- package/dist/chunks/vendor-unovis-vue-CZWGT3-0.js.map +1 -0
- package/dist/chunks/vendor-vee-validate-i18n-zT8NxX3R.js +93 -0
- package/dist/chunks/vendor-vee-validate-i18n-zT8NxX3R.js.map +1 -0
- package/dist/chunks/vendor-vee-validate-rules-4oWUZPpG.js +316 -0
- package/dist/chunks/vendor-vee-validate-rules-4oWUZPpG.js.map +1 -0
- package/dist/chunks/vendor-vue-currency-input-CckB4kjx.js +317 -0
- package/dist/chunks/vendor-vue-currency-input-CckB4kjx.js.map +1 -0
- package/dist/chunks/vendor-vue-demi-CD9yLWd7.js +1 -0
- package/dist/chunks/vendor-vue-demi-CD9yLWd7.js.map +1 -0
- package/dist/chunks/vendor-vue-devtools-api-aVYGocXp.js +93 -0
- package/dist/chunks/vendor-vue-devtools-api-aVYGocXp.js.map +1 -0
- package/dist/chunks/vendor-vue-i18n-LO-EJStU.js +1369 -0
- package/dist/chunks/vendor-vue-i18n-LO-EJStU.js.map +1 -0
- package/dist/chunks/vendor-vue3-application-insights-CAgbt8pk.js +69 -0
- package/dist/chunks/vendor-vue3-application-insights-CAgbt8pk.js.map +1 -0
- package/dist/chunks/vendor-vue3-touch-events-DqysuuWh.js +169 -0
- package/dist/chunks/vendor-vue3-touch-events-DqysuuWh.js.map +1 -0
- package/dist/chunks/vendor-vuepic-vue-datepicker-CaZ_qpJp.js +4998 -0
- package/dist/chunks/vendor-vuepic-vue-datepicker-CaZ_qpJp.js.map +1 -0
- package/dist/chunks/vendor-vueuse-components-BW7i7Uhb.js +219 -0
- package/dist/chunks/vendor-vueuse-components-BW7i7Uhb.js.map +1 -0
- package/dist/chunks/vendor-vueuse-core-CEdpDfzx.js +586 -0
- package/dist/chunks/vendor-vueuse-core-CEdpDfzx.js.map +1 -0
- package/dist/chunks/vendor-vueuse-shared-BlCOXw5g.js +149 -0
- package/dist/chunks/vendor-vueuse-shared-BlCOXw5g.js.map +1 -0
- package/dist/chunks/vendor-w3c-keyname-CLxH8j-f.js +92 -0
- package/dist/chunks/vendor-w3c-keyname-CLxH8j-f.js.map +1 -0
- package/dist/chunks/vendor-web-vitals-ByFgAM-8.js +215 -0
- package/dist/chunks/vendor-web-vitals-ByFgAM-8.js.map +1 -0
- package/dist/core/api/platform.d.ts +304 -958
- package/dist/core/api/platform.d.ts.map +1 -1
- package/dist/core/blade-navigation/bladeConfigRegistry.d.ts +21 -0
- package/dist/core/blade-navigation/bladeConfigRegistry.d.ts.map +1 -0
- package/dist/core/blade-navigation/index.d.ts +5 -0
- package/dist/core/blade-navigation/index.d.ts.map +1 -0
- package/dist/core/blade-navigation/singletons.d.ts +21 -0
- package/dist/core/blade-navigation/singletons.d.ts.map +1 -0
- package/dist/core/blade-navigation/types/index.d.ts +252 -0
- package/dist/core/blade-navigation/types/index.d.ts.map +1 -0
- package/dist/core/blade-navigation/useBladeMessaging.d.ts +18 -0
- package/dist/core/blade-navigation/useBladeMessaging.d.ts.map +1 -0
- package/dist/core/blade-navigation/useBladeStack.d.ts +19 -0
- package/dist/core/blade-navigation/useBladeStack.d.ts.map +1 -0
- package/dist/core/blade-navigation/utils/bladeRouterGuard.d.ts +32 -0
- package/dist/core/blade-navigation/utils/bladeRouterGuard.d.ts.map +1 -0
- package/dist/core/blade-navigation/utils/navigateToMainRoute.d.ts.map +1 -0
- package/dist/core/blade-navigation/utils/restoreFromUrl.d.ts +24 -0
- package/dist/core/blade-navigation/utils/restoreFromUrl.d.ts.map +1 -0
- package/dist/core/blade-navigation/utils/urlSync.d.ts +54 -0
- package/dist/core/blade-navigation/utils/urlSync.d.ts.map +1 -0
- package/dist/core/composables/bladeContext/index.d.ts +29 -0
- package/dist/core/composables/bladeContext/index.d.ts.map +1 -0
- package/dist/core/composables/index.d.ts +7 -1
- package/dist/core/composables/index.d.ts.map +1 -1
- package/dist/core/composables/useAppBarMobileButtons/index.d.ts.map +1 -1
- package/dist/core/composables/useAppInsights/index.d.ts +2 -1
- package/dist/core/composables/useAppInsights/index.d.ts.map +1 -1
- package/dist/core/composables/useAssets/index.d.ts.map +1 -1
- package/dist/core/composables/useAssetsManager/index.d.ts +24 -0
- package/dist/core/composables/useAssetsManager/index.d.ts.map +1 -0
- package/dist/core/composables/useAsync/index.d.ts.map +1 -1
- package/dist/core/composables/useBlade/index.d.ts +34 -27
- package/dist/core/composables/useBlade/index.d.ts.map +1 -1
- package/dist/core/composables/useBladeForm/index.d.ts +17 -0
- package/dist/core/composables/useBladeForm/index.d.ts.map +1 -0
- package/dist/core/composables/useBladeForm/types.d.ts +40 -0
- package/dist/core/composables/useBladeForm/types.d.ts.map +1 -0
- package/dist/core/composables/useBladeNavigationAdapter/index.d.ts +33 -0
- package/dist/core/composables/useBladeNavigationAdapter/index.d.ts.map +1 -0
- package/dist/core/composables/useBladeRegistry/index.d.ts +1 -1
- package/dist/core/composables/useBladeRegistry/index.d.ts.map +1 -1
- package/dist/core/composables/useBladeWidgets/index.d.ts +49 -0
- package/dist/core/composables/useBladeWidgets/index.d.ts.map +1 -0
- package/dist/core/composables/useBreadcrumbs/index.d.ts +1 -1
- package/dist/core/composables/useBreadcrumbs/index.d.ts.map +1 -1
- package/dist/core/composables/useConnectionStatus/index.d.ts.map +1 -1
- package/dist/core/composables/useDynamicProperties/index.d.ts +3 -69
- package/dist/core/composables/useDynamicProperties/index.d.ts.map +1 -1
- package/dist/core/composables/useDynamicProperties/strategies/boolean.d.ts +3 -0
- package/dist/core/composables/useDynamicProperties/strategies/boolean.d.ts.map +1 -0
- package/dist/core/composables/useDynamicProperties/strategies/color.d.ts +3 -0
- package/dist/core/composables/useDynamicProperties/strategies/color.d.ts.map +1 -0
- package/dist/core/composables/useDynamicProperties/strategies/dictionary.d.ts +3 -0
- package/dist/core/composables/useDynamicProperties/strategies/dictionary.d.ts.map +1 -0
- package/dist/core/composables/useDynamicProperties/strategies/index.d.ts +4 -0
- package/dist/core/composables/useDynamicProperties/strategies/index.d.ts.map +1 -0
- package/dist/core/composables/useDynamicProperties/strategies/measure.d.ts +3 -0
- package/dist/core/composables/useDynamicProperties/strategies/measure.d.ts.map +1 -0
- package/dist/core/composables/useDynamicProperties/strategies/regular.d.ts +3 -0
- package/dist/core/composables/useDynamicProperties/strategies/regular.d.ts.map +1 -0
- package/dist/core/composables/useDynamicProperties/strategies/types.d.ts +16 -0
- package/dist/core/composables/useDynamicProperties/strategies/types.d.ts.map +1 -0
- package/dist/core/composables/useDynamicProperties/types.d.ts +70 -0
- package/dist/core/composables/useDynamicProperties/types.d.ts.map +1 -0
- package/dist/core/composables/useDynamicProperties/utils.d.ts +10 -0
- package/dist/core/composables/useDynamicProperties/utils.d.ts.map +1 -0
- package/dist/core/composables/useExternalProvider/index.d.ts +12 -0
- package/dist/core/composables/useExternalProvider/index.d.ts.map +1 -0
- package/dist/core/composables/useFunctions/debounce.d.ts.map +1 -1
- package/dist/core/composables/useMenuExpanded/index.d.ts +9 -0
- package/dist/core/composables/useMenuExpanded/index.d.ts.map +1 -0
- package/dist/core/composables/useModificationTracker/index.d.ts.map +1 -0
- package/dist/core/composables/useNotifications/index.d.ts +3 -8
- package/dist/core/composables/useNotifications/index.d.ts.map +1 -1
- package/dist/core/composables/usePermissions/index.d.ts.map +1 -1
- package/dist/core/composables/usePlatformLocaleSync/index.d.ts +17 -0
- package/dist/core/composables/usePlatformLocaleSync/index.d.ts.map +1 -0
- package/dist/core/composables/usePopup/index.d.ts +12 -0
- package/dist/core/composables/usePopup/index.d.ts.map +1 -0
- package/dist/core/composables/usePopup/keys.d.ts +4 -0
- package/dist/core/composables/usePopup/keys.d.ts.map +1 -0
- package/dist/core/composables/usePopup/preset-registry.d.ts +7 -0
- package/dist/core/composables/usePopup/preset-registry.d.ts.map +1 -0
- package/dist/core/composables/usePopup/singleton.d.ts +6 -0
- package/dist/core/composables/usePopup/singleton.d.ts.map +1 -0
- package/dist/core/composables/usePopup/types.d.ts +22 -0
- package/dist/core/composables/usePopup/types.d.ts.map +1 -0
- package/dist/core/composables/useResponsive/index.d.ts +26 -0
- package/dist/core/composables/useResponsive/index.d.ts.map +1 -0
- package/dist/core/composables/useSidebarState/index.d.ts.map +1 -1
- package/dist/core/composables/useSlowNetworkDetection/index.d.ts +10 -0
- package/dist/core/composables/useSlowNetworkDetection/index.d.ts.map +1 -0
- package/dist/core/composables/useTheme/index.d.ts.map +1 -1
- package/dist/core/composables/useToolbar/index.d.ts.map +1 -1
- package/dist/core/composables/useUser/index.d.ts +1 -0
- package/dist/core/composables/useUser/index.d.ts.map +1 -1
- package/dist/core/composables/useUserManagement/index.d.ts.map +1 -1
- package/dist/core/composables/useWidgets/index.d.ts +4 -0
- package/dist/core/composables/useWidgets/index.d.ts.map +1 -1
- package/dist/core/constants/index.d.ts +0 -1
- package/dist/core/constants/index.d.ts.map +1 -1
- package/dist/core/directives/index.d.ts +2 -0
- package/dist/core/directives/index.d.ts.map +1 -1
- package/dist/core/interceptors/index.d.ts.map +1 -1
- package/dist/core/notifications/composables/index.d.ts +5 -0
- package/dist/core/notifications/composables/index.d.ts.map +1 -0
- package/dist/core/notifications/composables/useBladeNotifications.d.ts +13 -0
- package/dist/core/notifications/composables/useBladeNotifications.d.ts.map +1 -0
- package/dist/core/notifications/composables/useBroadcastFilter.d.ts +7 -0
- package/dist/core/notifications/composables/useBroadcastFilter.d.ts.map +1 -0
- package/dist/core/notifications/composables/useNotificationContext.d.ts +4 -0
- package/dist/core/notifications/composables/useNotificationContext.d.ts.map +1 -0
- package/dist/core/notifications/composables/useNotificationStore.d.ts +11 -0
- package/dist/core/notifications/composables/useNotificationStore.d.ts.map +1 -0
- package/dist/core/notifications/index.d.ts +11 -0
- package/dist/core/notifications/index.d.ts.map +1 -0
- package/dist/core/notifications/notification.d.ts +37 -0
- package/dist/core/notifications/notification.d.ts.map +1 -0
- package/dist/core/notifications/store.d.ts +31 -0
- package/dist/core/notifications/store.d.ts.map +1 -0
- package/dist/core/notifications/toast-controller.d.ts +7 -0
- package/dist/core/notifications/toast-controller.d.ts.map +1 -0
- package/dist/core/notifications/toast-types.d.ts +27 -0
- package/dist/core/notifications/toast-types.d.ts.map +1 -0
- package/dist/core/notifications/types.d.ts +48 -0
- package/dist/core/notifications/types.d.ts.map +1 -0
- package/dist/core/plugins/ai-agent/components/VcAiAgentPanel.vue.d.ts +2 -1
- package/dist/core/plugins/ai-agent/components/VcAiAgentPanel.vue.d.ts.map +1 -1
- package/dist/core/plugins/ai-agent/components/_internal/VcAiAgentHeader.vue.d.ts +5 -3
- package/dist/core/plugins/ai-agent/components/_internal/VcAiAgentHeader.vue.d.ts.map +1 -1
- package/dist/core/plugins/ai-agent/components/_internal/VcAiAgentIframe.vue.d.ts +2 -1
- package/dist/core/plugins/ai-agent/components/_internal/VcAiAgentIframe.vue.d.ts.map +1 -1
- package/dist/core/plugins/ai-agent/components/_internal/VcAiAgentLoader.vue.d.ts +2 -1
- package/dist/core/plugins/ai-agent/components/_internal/VcAiAgentLoader.vue.d.ts.map +1 -1
- package/dist/core/plugins/ai-agent/components/_internal/VcVirtoOzLogo.vue.d.ts +2 -1
- package/dist/core/plugins/ai-agent/components/_internal/VcVirtoOzLogo.vue.d.ts.map +1 -1
- package/dist/core/plugins/ai-agent/composables/index.d.ts +1 -1
- package/dist/core/plugins/ai-agent/composables/index.d.ts.map +1 -1
- package/dist/core/plugins/ai-agent/composables/useAiAgent.d.ts +2 -10
- package/dist/core/plugins/ai-agent/composables/useAiAgent.d.ts.map +1 -1
- package/dist/core/plugins/ai-agent/composables/useAiAgentContext.d.ts +2 -3
- package/dist/core/plugins/ai-agent/composables/useAiAgentContext.d.ts.map +1 -1
- package/dist/core/plugins/ai-agent/index.d.ts +2 -2
- package/dist/core/plugins/ai-agent/index.d.ts.map +1 -1
- package/dist/core/plugins/ai-agent/public.d.ts +12 -0
- package/dist/core/plugins/ai-agent/public.d.ts.map +1 -0
- package/dist/core/plugins/ai-agent/services/ai-agent-service.d.ts +2 -4
- package/dist/core/plugins/ai-agent/services/ai-agent-service.d.ts.map +1 -1
- package/dist/core/plugins/ai-agent/services/context-manager.d.ts +21 -0
- package/dist/core/plugins/ai-agent/services/context-manager.d.ts.map +1 -0
- package/dist/core/plugins/ai-agent/services/message-transport.d.ts +29 -0
- package/dist/core/plugins/ai-agent/services/message-transport.d.ts.map +1 -0
- package/dist/core/plugins/ai-agent/services/panel-controller.d.ts +16 -0
- package/dist/core/plugins/ai-agent/services/panel-controller.d.ts.map +1 -0
- package/dist/core/plugins/ai-agent/types.d.ts +2 -2
- package/dist/core/plugins/ai-agent/types.d.ts.map +1 -1
- package/dist/core/plugins/ai-agent/utils/deep-merge-changes.d.ts +16 -0
- package/dist/core/plugins/ai-agent/utils/deep-merge-changes.d.ts.map +1 -0
- package/dist/core/plugins/ai-agent/utils/index.d.ts +2 -0
- package/dist/core/plugins/ai-agent/utils/index.d.ts.map +1 -0
- package/dist/core/plugins/extension-points/ExtensionPoint.vue.d.ts +3 -2
- package/dist/core/plugins/extension-points/ExtensionPoint.vue.d.ts.map +1 -1
- package/dist/core/plugins/extension-points/public.d.ts +8 -0
- package/dist/core/plugins/extension-points/public.d.ts.map +1 -0
- package/dist/core/plugins/extension-points/store.d.ts.map +1 -1
- package/dist/core/plugins/modularity/index.d.ts +44 -30
- package/dist/core/plugins/modularity/index.d.ts.map +1 -1
- package/dist/core/plugins/signalR/index.d.ts +2 -6
- package/dist/core/plugins/signalR/index.d.ts.map +1 -1
- package/dist/core/plugins/validation/rules.d.ts.map +1 -1
- package/dist/core/services/_internal/index.d.ts +3 -3
- package/dist/core/services/_internal/index.d.ts.map +1 -1
- package/dist/core/services/app-bar-menu-service.d.ts.map +1 -1
- package/dist/core/services/dashboard-service.d.ts.map +1 -1
- package/dist/core/services/settings-menu-service.d.ts.map +1 -1
- package/dist/core/services/widget-service.d.ts +25 -24
- package/dist/core/services/widget-service.d.ts.map +1 -1
- package/dist/core/types/breadcrumbs.d.ts +8 -0
- package/dist/core/types/breadcrumbs.d.ts.map +1 -0
- package/dist/core/types/index.d.ts +13 -33
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/menu-types.d.ts +4 -4
- package/dist/core/types/menu-types.d.ts.map +1 -1
- package/dist/core/utilities/assets.d.ts +6 -0
- package/dist/core/utilities/assets.d.ts.map +1 -0
- package/dist/core/utilities/colorUtils.d.ts.map +1 -0
- package/dist/core/utilities/date/formatDate.d.ts.map +1 -1
- package/dist/core/utilities/error.d.ts.map +1 -1
- package/dist/core/utilities/formatBadgeCount.d.ts.map +1 -0
- package/dist/core/utilities/index.d.ts +4 -0
- package/dist/core/utilities/index.d.ts.map +1 -1
- package/dist/core/utilities/pendingErrorNotifications.d.ts +2 -2
- package/dist/core/utilities/thumbnail/index.d.ts +42 -0
- package/dist/core/utilities/thumbnail/index.d.ts.map +1 -0
- package/dist/extensions/index.js +8 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/framework.js +4722 -0
- package/dist/framework.js.map +1 -0
- package/dist/index.css +9 -0
- package/dist/index.d.ts +31 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/injection-keys.d.ts +11 -20
- package/dist/injection-keys.d.ts.map +1 -1
- package/dist/locales/de.d.ts +3 -0
- package/dist/locales/de.js +439 -0
- package/dist/locales/en.d.ts +3 -0
- package/dist/locales/en.js +439 -0
- package/dist/locales/en.json +17 -5
- package/dist/locales/types.d.ts +446 -0
- package/dist/modules/assets/components/assets-details/assets-details.vue.d.ts +4 -0
- package/dist/modules/assets/components/assets-details/assets-details.vue.d.ts.map +1 -0
- package/dist/modules/assets/components/assets-details/index.d.ts +3 -0
- package/dist/modules/assets/components/assets-details/index.d.ts.map +1 -0
- package/dist/modules/assets/components/index.d.ts +2 -0
- package/dist/modules/assets/components/index.d.ts.map +1 -0
- package/dist/modules/assets/index.d.ts +6 -0
- package/dist/modules/assets/index.d.ts.map +1 -0
- package/dist/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts +4 -0
- package/dist/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts.map +1 -0
- package/dist/modules/assets-manager/components/assets-manager/index.d.ts +3 -0
- package/dist/modules/assets-manager/components/assets-manager/index.d.ts.map +1 -0
- package/dist/modules/assets-manager/components/index.d.ts +2 -0
- package/dist/modules/assets-manager/components/index.d.ts.map +1 -0
- package/dist/modules/assets-manager/index.d.ts +5 -0
- package/dist/modules/assets-manager/index.d.ts.map +1 -0
- package/dist/modules/index.d.ts +3 -0
- package/dist/modules/index.d.ts.map +1 -0
- package/dist/scripts/check-locales.cjs +3185 -0
- package/dist/shell/_internal/_storybook-helpers.d.ts.map +1 -0
- package/dist/shell/_internal/blade-navigation/components/index.d.ts +3 -0
- package/dist/shell/_internal/blade-navigation/components/index.d.ts.map +1 -0
- package/dist/shell/_internal/blade-navigation/components/vc-blade-navigation/_internal/vc-mobile-back-button.vue.d.ts +9 -0
- package/dist/shell/_internal/blade-navigation/components/vc-blade-navigation/_internal/vc-mobile-back-button.vue.d.ts.map +1 -0
- package/dist/shell/_internal/blade-navigation/components/vc-blade-navigation/index.d.ts +3 -0
- package/dist/shell/_internal/blade-navigation/components/vc-blade-navigation/index.d.ts.map +1 -0
- package/dist/shell/_internal/blade-navigation/components/vc-blade-navigation/vc-blade-navigation-new.vue.d.ts +4 -0
- package/dist/shell/_internal/blade-navigation/components/vc-blade-navigation/vc-blade-navigation-new.vue.d.ts.map +1 -0
- package/dist/shell/_internal/blade-navigation/components/vc-blade-slot/index.d.ts +2 -0
- package/dist/shell/_internal/blade-navigation/components/vc-blade-slot/index.d.ts.map +1 -0
- package/dist/shell/_internal/blade-navigation/components/vc-blade-slot/vc-blade-slot.vue.d.ts +21 -0
- package/dist/shell/_internal/blade-navigation/components/vc-blade-slot/vc-blade-slot.vue.d.ts.map +1 -0
- package/dist/shell/_internal/blade-navigation/index.d.ts +3 -0
- package/dist/shell/_internal/blade-navigation/index.d.ts.map +1 -0
- package/dist/shell/_internal/blade-navigation/plugin-v2.d.ts +22 -0
- package/dist/shell/_internal/blade-navigation/plugin-v2.d.ts.map +1 -0
- package/dist/shell/_internal/notifications/components/index.d.ts +2 -0
- package/dist/shell/_internal/notifications/components/index.d.ts.map +1 -0
- package/dist/shell/_internal/notifications/components/notification-container/index.d.ts +120 -0
- package/dist/shell/_internal/notifications/components/notification-container/index.d.ts.map +1 -0
- package/dist/shell/_internal/notifications/composables/index.d.ts +3 -0
- package/dist/shell/_internal/notifications/composables/index.d.ts.map +1 -0
- package/dist/shell/_internal/notifications/composables/useContainer/index.d.ts +23 -0
- package/dist/shell/_internal/notifications/composables/useContainer/index.d.ts.map +1 -0
- package/dist/shell/_internal/notifications/composables/useInstance/index.d.ts +11 -0
- package/dist/shell/_internal/notifications/composables/useInstance/index.d.ts.map +1 -0
- package/dist/shell/_internal/notifications/register-backend.d.ts +6 -0
- package/dist/shell/_internal/notifications/register-backend.d.ts.map +1 -0
- package/dist/shell/_internal/popup/common/vc-popup-base.vue.d.ts +51 -0
- package/dist/shell/_internal/popup/common/vc-popup-base.vue.d.ts.map +1 -0
- package/dist/shell/_internal/popup/common/vc-popup-error.vue.d.ts +24 -0
- package/dist/shell/_internal/popup/common/vc-popup-error.vue.d.ts.map +1 -0
- package/dist/shell/_internal/popup/common/vc-popup-info.vue.d.ts +24 -0
- package/dist/shell/_internal/popup/common/vc-popup-info.vue.d.ts.map +1 -0
- package/dist/shell/_internal/popup/common/vc-popup-warning.vue.d.ts +27 -0
- package/dist/shell/_internal/popup/common/vc-popup-warning.vue.d.ts.map +1 -0
- package/dist/shell/_internal/popup/components/index.d.ts +2 -0
- package/dist/shell/_internal/popup/components/index.d.ts.map +1 -0
- package/dist/shell/_internal/popup/components/vc-popup-container/index.d.ts +3 -0
- package/dist/shell/_internal/popup/components/vc-popup-container/index.d.ts.map +1 -0
- package/dist/shell/_internal/popup/components/vc-popup-container/vc-popup-container.vue.d.ts +4 -0
- package/dist/shell/_internal/popup/components/vc-popup-container/vc-popup-container.vue.d.ts.map +1 -0
- package/dist/shell/_internal/popup/composables/index.d.ts +2 -0
- package/dist/shell/_internal/popup/composables/index.d.ts.map +1 -0
- package/dist/shell/_internal/popup/composables/usePopup/index.d.ts +2 -0
- package/dist/shell/_internal/popup/composables/usePopup/index.d.ts.map +1 -0
- package/dist/shell/_internal/popup/index.d.ts +12 -0
- package/dist/shell/_internal/popup/index.d.ts.map +1 -0
- package/dist/shell/_internal/popup/keys.d.ts +2 -0
- package/dist/shell/_internal/popup/keys.d.ts.map +1 -0
- package/dist/shell/_internal/popup/plugin.d.ts +6 -0
- package/dist/shell/_internal/popup/plugin.d.ts.map +1 -0
- package/dist/shell/_internal/popup/register-presets.d.ts +6 -0
- package/dist/shell/_internal/popup/register-presets.d.ts.map +1 -0
- package/dist/shell/_internal/popup/types/index.d.ts +2 -0
- package/dist/shell/_internal/popup/types/index.d.ts.map +1 -0
- package/dist/shell/_internal/popup/utils/index.d.ts.map +1 -0
- package/dist/shell/auth/ChangePasswordPage/components/change-password/ChangePassword.vue.d.ts +9 -0
- package/dist/shell/auth/ChangePasswordPage/components/change-password/ChangePassword.vue.d.ts.map +1 -0
- package/dist/shell/auth/ChangePasswordPage/components/change-password/index.d.ts +3 -0
- package/dist/shell/auth/ChangePasswordPage/components/change-password/index.d.ts.map +1 -0
- package/dist/shell/auth/ChangePasswordPage/components/index.d.ts +2 -0
- package/dist/shell/auth/ChangePasswordPage/components/index.d.ts.map +1 -0
- package/dist/shell/auth/ChangePasswordPage/index.d.ts +2 -0
- package/dist/shell/auth/ChangePasswordPage/index.d.ts.map +1 -0
- package/dist/shell/auth/ForgotPasswordPage/components/forgot-password/ForgotPassword.vue.d.ts +14 -0
- package/dist/shell/auth/ForgotPasswordPage/components/forgot-password/ForgotPassword.vue.d.ts.map +1 -0
- package/dist/shell/auth/ForgotPasswordPage/components/forgot-password/index.d.ts +3 -0
- package/dist/shell/auth/ForgotPasswordPage/components/forgot-password/index.d.ts.map +1 -0
- package/dist/shell/auth/ForgotPasswordPage/components/index.d.ts +2 -0
- package/dist/shell/auth/ForgotPasswordPage/components/index.d.ts.map +1 -0
- package/dist/shell/auth/ForgotPasswordPage/index.d.ts +2 -0
- package/dist/shell/auth/ForgotPasswordPage/index.d.ts.map +1 -0
- package/dist/shell/auth/InvitePage/components/index.d.ts +2 -0
- package/dist/shell/auth/InvitePage/components/index.d.ts.map +1 -0
- package/dist/shell/auth/InvitePage/components/invite/Invite.vue.d.ts +14 -0
- package/dist/shell/auth/InvitePage/components/invite/Invite.vue.d.ts.map +1 -0
- package/dist/shell/auth/InvitePage/components/invite/index.d.ts +3 -0
- package/dist/shell/auth/InvitePage/components/invite/index.d.ts.map +1 -0
- package/dist/shell/auth/InvitePage/index.d.ts +2 -0
- package/dist/shell/auth/InvitePage/index.d.ts.map +1 -0
- package/dist/shell/auth/LoginPage/components/index.d.ts +2 -0
- package/dist/shell/auth/LoginPage/components/index.d.ts.map +1 -0
- package/dist/shell/auth/LoginPage/components/login/Login.vue.d.ts +11 -0
- package/dist/shell/auth/LoginPage/components/login/Login.vue.d.ts.map +1 -0
- package/dist/shell/auth/LoginPage/components/login/index.d.ts +3 -0
- package/dist/shell/auth/LoginPage/components/login/index.d.ts.map +1 -0
- package/dist/shell/auth/LoginPage/index.d.ts +2 -0
- package/dist/shell/auth/LoginPage/index.d.ts.map +1 -0
- package/dist/shell/auth/ResetPasswordPage/components/index.d.ts +2 -0
- package/dist/shell/auth/ResetPasswordPage/components/index.d.ts.map +1 -0
- package/dist/shell/auth/ResetPasswordPage/components/reset-password/ResetPassword.vue.d.ts +14 -0
- package/dist/shell/auth/ResetPasswordPage/components/reset-password/ResetPassword.vue.d.ts.map +1 -0
- package/dist/shell/auth/ResetPasswordPage/components/reset-password/index.d.ts +3 -0
- package/dist/shell/auth/ResetPasswordPage/components/reset-password/index.d.ts.map +1 -0
- package/dist/shell/auth/ResetPasswordPage/index.d.ts +2 -0
- package/dist/shell/auth/ResetPasswordPage/index.d.ts.map +1 -0
- package/dist/shell/auth/_test-utils/shared-dependency-mocks.d.ts +8 -0
- package/dist/shell/auth/_test-utils/shared-dependency-mocks.d.ts.map +1 -0
- package/dist/shell/auth/_test-utils/shared-mock-factories.d.ts +13 -0
- package/dist/shell/auth/_test-utils/shared-mock-factories.d.ts.map +1 -0
- package/dist/shell/auth/_test-utils/shared-stubs.d.ts +33 -0
- package/dist/shell/auth/_test-utils/shared-stubs.d.ts.map +1 -0
- package/dist/shell/auth/index.d.ts +7 -0
- package/dist/shell/auth/index.d.ts.map +1 -0
- package/dist/shell/auth/sign-in/external-provider.vue.d.ts +16 -0
- package/dist/shell/auth/sign-in/external-provider.vue.d.ts.map +1 -0
- package/dist/shell/auth/sign-in/external-providers.vue.d.ts +8 -0
- package/dist/shell/auth/sign-in/external-providers.vue.d.ts.map +1 -0
- package/dist/shell/auth/sign-in/index.d.ts +2 -0
- package/dist/shell/auth/sign-in/index.d.ts.map +1 -0
- package/dist/shell/auth/sign-in/useExternalProvider.d.ts +3 -0
- package/dist/shell/auth/sign-in/useExternalProvider.d.ts.map +1 -0
- package/dist/shell/auth/utils.d.ts +25 -0
- package/dist/shell/auth/utils.d.ts.map +1 -0
- package/dist/shell/components/app-hub/composables/index.d.ts +2 -0
- package/dist/shell/components/app-hub/composables/index.d.ts.map +1 -0
- package/dist/shell/components/app-hub/composables/useAppHub/index.d.ts +10 -0
- package/dist/shell/components/app-hub/composables/useAppHub/index.d.ts.map +1 -0
- package/dist/shell/components/change-password/change-password.vue.d.ts +12 -0
- package/dist/shell/components/change-password/change-password.vue.d.ts.map +1 -0
- package/dist/shell/components/change-password/index.d.ts +3 -0
- package/dist/shell/components/change-password/index.d.ts.map +1 -0
- package/dist/shell/components/change-password-button/change-password-button.vue.d.ts +4 -0
- package/dist/shell/components/change-password-button/change-password-button.vue.d.ts.map +1 -0
- package/dist/shell/components/change-password-button/index.d.ts.map +1 -0
- package/dist/shell/components/error-interceptor/index.d.ts +14 -0
- package/dist/shell/components/error-interceptor/index.d.ts.map +1 -0
- package/dist/shell/components/error-interceptor/interceptor.d.ts.map +1 -0
- package/dist/shell/components/index.d.ts +13 -0
- package/dist/shell/components/index.d.ts.map +1 -0
- package/dist/shell/components/language-selector/index.d.ts +3 -0
- package/dist/shell/components/language-selector/index.d.ts.map +1 -0
- package/dist/shell/components/language-selector/language-selector.vue.d.ts +4 -0
- package/dist/shell/components/language-selector/language-selector.vue.d.ts.map +1 -0
- package/dist/shell/components/logout-button/index.d.ts.map +1 -0
- package/dist/shell/components/logout-button/logout-button.vue.d.ts +4 -0
- package/dist/shell/components/logout-button/logout-button.vue.d.ts.map +1 -0
- package/dist/shell/components/notification-dropdown/_internal/notification/index.d.ts.map +1 -0
- package/dist/shell/components/notification-dropdown/_internal/notification/notification.vue.d.ts +15 -0
- package/dist/shell/components/notification-dropdown/_internal/notification/notification.vue.d.ts.map +1 -0
- package/dist/shell/components/notification-dropdown/index.d.ts +3 -0
- package/dist/shell/components/notification-dropdown/index.d.ts.map +1 -0
- package/dist/shell/components/notification-dropdown/notification-dropdown.vue.d.ts +4 -0
- package/dist/shell/components/notification-dropdown/notification-dropdown.vue.d.ts.map +1 -0
- package/dist/shell/components/notification-template/index.d.ts +3 -0
- package/dist/shell/components/notification-template/index.d.ts.map +1 -0
- package/dist/shell/components/notification-template/notification-template.vue.d.ts +29 -0
- package/dist/shell/components/notification-template/notification-template.vue.d.ts.map +1 -0
- package/dist/shell/components/settings-menu/index.d.ts.map +1 -0
- package/dist/shell/components/settings-menu/settings-menu.vue.d.ts +4 -0
- package/dist/shell/components/settings-menu/settings-menu.vue.d.ts.map +1 -0
- package/dist/shell/components/settings-menu-item/index.d.ts.map +1 -0
- package/dist/shell/components/settings-menu-item/settings-menu-item.vue.d.ts +42 -0
- package/dist/shell/components/settings-menu-item/settings-menu-item.vue.d.ts.map +1 -0
- package/dist/shell/components/sidebar/index.d.ts +47 -0
- package/dist/shell/components/sidebar/index.d.ts.map +1 -0
- package/dist/shell/components/sidebar/sidebar.vue.d.ts +31 -0
- package/dist/shell/components/sidebar/sidebar.vue.d.ts.map +1 -0
- package/dist/shell/components/theme-selector/index.d.ts.map +1 -0
- package/dist/shell/components/theme-selector/theme-selector.vue.d.ts +4 -0
- package/dist/shell/components/theme-selector/theme-selector.vue.d.ts.map +1 -0
- package/dist/shell/components/user-dropdown-button/_internal/user-info.vue.d.ts +10 -0
- package/dist/shell/components/user-dropdown-button/_internal/user-info.vue.d.ts.map +1 -0
- package/dist/shell/components/user-dropdown-button/_internal/user-sidebar.vue.d.ts +14 -0
- package/dist/shell/components/user-dropdown-button/_internal/user-sidebar.vue.d.ts.map +1 -0
- package/dist/shell/components/user-dropdown-button/index.d.ts +3 -0
- package/dist/shell/components/user-dropdown-button/index.d.ts.map +1 -0
- package/dist/shell/components/user-dropdown-button/user-dropdown-button.vue.d.ts +10 -0
- package/dist/shell/components/user-dropdown-button/user-dropdown-button.vue.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-charts/ChartContainer.vue.d.ts +17 -0
- package/dist/shell/dashboard/dashboard-charts/ChartContainer.vue.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-charts/ChartLegend.vue.d.ts +8 -0
- package/dist/shell/dashboard/dashboard-charts/ChartLegend.vue.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-charts/ChartTooltip.vue.d.ts +13 -0
- package/dist/shell/dashboard/dashboard-charts/ChartTooltip.vue.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-charts/DashboardBarChart.vue.d.ts +39 -0
- package/dist/shell/dashboard/dashboard-charts/DashboardBarChart.vue.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-charts/DashboardDonutChart.vue.d.ts +33 -0
- package/dist/shell/dashboard/dashboard-charts/DashboardDonutChart.vue.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-charts/DashboardLineChart.vue.d.ts +39 -0
- package/dist/shell/dashboard/dashboard-charts/DashboardLineChart.vue.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-charts/chart-utils.d.ts +29 -0
- package/dist/shell/dashboard/dashboard-charts/chart-utils.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-charts/index.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-charts/types.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-widget-card/dashboard-feed-list.vue.d.ts +13 -0
- package/dist/shell/dashboard/dashboard-widget-card/dashboard-feed-list.vue.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-widget-card/dashboard-feed-row.vue.d.ts +18 -0
- package/dist/shell/dashboard/dashboard-widget-card/dashboard-feed-row.vue.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-widget-card/dashboard-stat-item.vue.d.ts +12 -0
- package/dist/shell/dashboard/dashboard-widget-card/dashboard-stat-item.vue.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-widget-card/dashboard-widget-card.vue.d.ts +22 -0
- package/dist/shell/dashboard/dashboard-widget-card/dashboard-widget-card.vue.d.ts.map +1 -0
- package/dist/shell/dashboard/dashboard-widget-card/index.d.ts +5 -0
- package/dist/shell/dashboard/dashboard-widget-card/index.d.ts.map +1 -0
- package/dist/shell/dashboard/draggable-dashboard/DraggableDashboard.vue.d.ts +21 -0
- package/dist/shell/dashboard/draggable-dashboard/DraggableDashboard.vue.d.ts.map +1 -0
- package/dist/shell/dashboard/draggable-dashboard/GridstackDashboard.vue.d.ts +22 -0
- package/dist/shell/dashboard/draggable-dashboard/GridstackDashboard.vue.d.ts.map +1 -0
- package/dist/shell/dashboard/draggable-dashboard/composables/useGridstack.d.ts +56 -0
- package/dist/shell/dashboard/draggable-dashboard/composables/useGridstack.d.ts.map +1 -0
- package/dist/shell/dashboard/draggable-dashboard/composables/useGridstackAdapter.d.ts +47 -0
- package/dist/shell/dashboard/draggable-dashboard/composables/useGridstackAdapter.d.ts.map +1 -0
- package/dist/shell/dashboard/draggable-dashboard/index.d.ts +13 -0
- package/dist/shell/dashboard/draggable-dashboard/index.d.ts.map +1 -0
- package/dist/shell/dashboard/draggable-dashboard/types.d.ts.map +1 -0
- package/dist/shell/dashboard/index.d.ts +4 -0
- package/dist/shell/dashboard/index.d.ts.map +1 -0
- package/dist/test-helpers.d.ts +103 -14
- package/dist/test-helpers.d.ts.map +1 -1
- package/dist/test-mock-factories.d.ts +48 -0
- package/dist/test-mock-factories.d.ts.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/components/atoms/vc-badge/vc-badge.vue.d.ts +5 -4
- package/dist/ui/components/atoms/vc-badge/vc-badge.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-banner/vc-banner.vue.d.ts +3 -2
- package/dist/ui/components/atoms/vc-banner/vc-banner.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-button/index.d.ts +1 -1
- package/dist/ui/components/atoms/vc-button/index.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-button/vc-button-group.vue.d.ts +3 -2
- package/dist/ui/components/atoms/vc-button/vc-button-group.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts +5 -4
- package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts +3 -2
- package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-col/vc-col.vue.d.ts +3 -2
- package/dist/ui/components/atoms/vc-col/vc-col.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-container/vc-container.vue.d.ts +5 -4
- package/dist/ui/components/atoms/vc-container/vc-container.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-hint/vc-hint.vue.d.ts +3 -2
- package/dist/ui/components/atoms/vc-hint/vc-hint.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-icon/composables/index.d.ts +1 -2
- package/dist/ui/components/atoms/vc-icon/composables/index.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-icon/icons/MenuBurgerIcon.vue.d.ts +2 -1
- package/dist/ui/components/atoms/vc-icon/icons/MenuBurgerIcon.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-icon/types.d.ts +15 -2
- package/dist/ui/components/atoms/vc-icon/types.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-icon/vc-bootstrap-icon.vue.d.ts +3 -1
- package/dist/ui/components/atoms/vc-icon/vc-bootstrap-icon.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-icon/vc-fontawesome-icon.vue.d.ts +4 -2
- package/dist/ui/components/atoms/vc-icon/vc-fontawesome-icon.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-icon/vc-icon.vue.d.ts +5 -3
- package/dist/ui/components/atoms/vc-icon/vc-icon.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-icon/vc-lucide-icon.vue.d.ts +2 -1
- package/dist/ui/components/atoms/vc-icon/vc-lucide-icon.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-icon/vc-material-icon.vue.d.ts +3 -1
- package/dist/ui/components/atoms/vc-icon/vc-material-icon.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-icon/vc-svg-icon.vue.d.ts +2 -1
- package/dist/ui/components/atoms/vc-icon/vc-svg-icon.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-image/vc-image.vue.d.ts +5 -1
- package/dist/ui/components/atoms/vc-image/vc-image.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-label/vc-label.vue.d.ts +3 -2
- package/dist/ui/components/atoms/vc-label/vc-label.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-link/vc-link.vue.d.ts +3 -2
- package/dist/ui/components/atoms/vc-link/vc-link.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-loading/vc-loading.vue.d.ts +2 -1
- package/dist/ui/components/atoms/vc-loading/vc-loading.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-progress/vc-progress.vue.d.ts +3 -2
- package/dist/ui/components/atoms/vc-progress/vc-progress.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-row/vc-row.vue.d.ts +3 -2
- package/dist/ui/components/atoms/vc-row/vc-row.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-scrollable-container/vc-scrollable-container.vue.d.ts +6 -5
- package/dist/ui/components/atoms/vc-scrollable-container/vc-scrollable-container.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-skeleton/vc-skeleton.vue.d.ts +3 -2
- package/dist/ui/components/atoms/vc-skeleton/vc-skeleton.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts +3 -2
- package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-status-icon/vc-status-icon.vue.d.ts +2 -1
- package/dist/ui/components/atoms/vc-status-icon/vc-status-icon.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-tooltip/vc-tooltip.vue.d.ts +5 -4
- package/dist/ui/components/atoms/vc-tooltip/vc-tooltip.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-video/vc-video.vue.d.ts +2 -1
- package/dist/ui/components/atoms/vc-video/vc-video.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-widget/vc-widget.vue.d.ts +3 -1
- package/dist/ui/components/atoms/vc-widget/vc-widget.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/index.d.ts +2 -0
- package/dist/ui/components/molecules/index.d.ts.map +1 -1
- package/dist/ui/components/molecules/multilanguage-selector/index.d.ts +2 -0
- package/dist/ui/components/molecules/multilanguage-selector/index.d.ts.map +1 -0
- package/dist/ui/components/molecules/multilanguage-selector/multilanguage-selector.vue.d.ts +44 -0
- package/dist/ui/components/molecules/multilanguage-selector/multilanguage-selector.vue.d.ts.map +1 -0
- package/dist/ui/components/molecules/vc-accordion/_internal/vc-accordion-item/vc-accordion-item.vue.d.ts +4 -3
- package/dist/ui/components/molecules/vc-accordion/_internal/vc-accordion-item/vc-accordion-item.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-accordion/index.d.ts +1 -1
- package/dist/ui/components/molecules/vc-accordion/index.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-accordion/vc-accordion.vue.d.ts +4 -3
- package/dist/ui/components/molecules/vc-accordion/vc-accordion.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-breadcrumbs/_internal/vc-breadcrumbs-item/vc-breadcrumbs-item.vue.d.ts +2 -1
- package/dist/ui/components/molecules/vc-breadcrumbs/_internal/vc-breadcrumbs-item/vc-breadcrumbs-item.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue.d.ts +4 -3
- package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.vue.d.ts +13 -8
- package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-checkbox-group/vc-checkbox-group.vue.d.ts +13 -8
- package/dist/ui/components/molecules/vc-checkbox-group/vc-checkbox-group.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-color-input/vc-color-input.vue.d.ts +3 -2
- package/dist/ui/components/molecules/vc-color-input/vc-color-input.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-date-picker/vc-date-picker.vue.d.ts +3 -2
- package/dist/ui/components/molecules/vc-date-picker/vc-date-picker.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-dropdown/_internal/VcDropdownItem.vue.d.ts +2 -1
- package/dist/ui/components/molecules/vc-dropdown/_internal/VcDropdownItem.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-dropdown/index.d.ts +1 -1
- package/dist/ui/components/molecules/vc-dropdown/index.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-dropdown/vc-dropdown.vue.d.ts +15 -10
- package/dist/ui/components/molecules/vc-dropdown/vc-dropdown.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-dropdown-panel/vc-dropdown-panel.vue.d.ts +9 -8
- package/dist/ui/components/molecules/vc-dropdown-panel/vc-dropdown-panel.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-editor/_internal/extensions/font-size.d.ts +3 -3
- package/dist/ui/components/molecules/vc-editor/_internal/vc-editor-button.vue.d.ts +2 -1
- package/dist/ui/components/molecules/vc-editor/_internal/vc-editor-button.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-editor/_internal/vc-editor-custom-button.vue.d.ts +2 -1
- package/dist/ui/components/molecules/vc-editor/_internal/vc-editor-custom-button.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-editor/_internal/vc-editor-font-selector.vue.d.ts +2 -1
- package/dist/ui/components/molecules/vc-editor/_internal/vc-editor-font-selector.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-editor/_internal/vc-editor-toolbar.vue.d.ts +4 -3
- package/dist/ui/components/molecules/vc-editor/_internal/vc-editor-toolbar.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-editor/vc-editor.vue.d.ts +6 -5
- package/dist/ui/components/molecules/vc-editor/vc-editor.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-field/_internal/vc-field-type/vc-field-type.vue.d.ts +3 -2
- package/dist/ui/components/molecules/vc-field/_internal/vc-field-type/vc-field-type.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-field/vc-field.vue.d.ts +4 -22
- package/dist/ui/components/molecules/vc-field/vc-field.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts +3 -2
- package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-form/vc-form.vue.d.ts +3 -2
- package/dist/ui/components/molecules/vc-form/vc-form.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-image-tile/index.d.ts +3 -0
- package/dist/ui/components/molecules/vc-image-tile/index.d.ts.map +1 -0
- package/dist/ui/components/molecules/vc-image-tile/vc-image-tile.vue.d.ts +41 -0
- package/dist/ui/components/molecules/vc-image-tile/vc-image-tile.vue.d.ts.map +1 -0
- package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts +32 -54
- package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts +2 -1
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input-dropdown/index.d.ts +1 -1
- package/dist/ui/components/molecules/vc-input-dropdown/index.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.vue.d.ts +3 -2
- package/dist/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input-group/vc-input-group.vue.d.ts +7 -6
- package/dist/ui/components/molecules/vc-input-group/vc-input-group.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-menu/index.d.ts +1 -1
- package/dist/ui/components/molecules/vc-menu/index.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-menu/vc-menu-group.vue.d.ts +4 -3
- package/dist/ui/components/molecules/vc-menu/vc-menu-group.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-menu/vc-menu-item.vue.d.ts +4 -3
- package/dist/ui/components/molecules/vc-menu/vc-menu-item.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-menu/vc-menu.vue.d.ts +4 -3
- package/dist/ui/components/molecules/vc-menu/vc-menu.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-multivalue/_internal/MultivalueDropdown.vue.d.ts +3 -2
- package/dist/ui/components/molecules/vc-multivalue/_internal/MultivalueDropdown.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-multivalue/_internal/MultivalueTrigger.vue.d.ts +7 -6
- package/dist/ui/components/molecules/vc-multivalue/_internal/MultivalueTrigger.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-multivalue/composables/index.d.ts +1 -1
- package/dist/ui/components/molecules/vc-multivalue/composables/index.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.vue.d.ts +15 -10
- package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-pagination/vc-pagination.vue.d.ts +3 -2
- package/dist/ui/components/molecules/vc-pagination/vc-pagination.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-radio-button/vc-radio-button.vue.d.ts +13 -8
- package/dist/ui/components/molecules/vc-radio-button/vc-radio-button.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-radio-group/vc-radio-group.vue.d.ts +13 -8
- package/dist/ui/components/molecules/vc-radio-group/vc-radio-group.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-rating/vc-rating.vue.d.ts +3 -2
- package/dist/ui/components/molecules/vc-rating/vc-rating.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-select/_internal/SelectDropdown.vue.d.ts +3 -2
- package/dist/ui/components/molecules/vc-select/_internal/SelectDropdown.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-select/_internal/SelectTrigger.vue.d.ts +5 -4
- package/dist/ui/components/molecules/vc-select/_internal/SelectTrigger.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-select/composables/index.d.ts +1 -1
- package/dist/ui/components/molecules/vc-select/composables/index.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-select/composables/useSelectDataSource.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-select/composables/useSelectSelection.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-select/composables/useSelectValueMapping.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-select/composables/useSelectVisibility.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts +24 -36
- package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-slider/vc-slider.vue.d.ts +8 -7
- package/dist/ui/components/molecules/vc-slider/vc-slider.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-switch/vc-switch.vue.d.ts +3 -2
- package/dist/ui/components/molecules/vc-switch/vc-switch.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-textarea/vc-textarea.vue.d.ts +3 -2
- package/dist/ui/components/molecules/vc-textarea/vc-textarea.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-toast/vc-toast.vue.d.ts +3 -2
- package/dist/ui/components/molecules/vc-toast/vc-toast.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/index.d.ts +1 -1
- package/dist/ui/components/organisms/index.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppBarMobileActions.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppBarMobileActions.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppBarOverlay.vue.d.ts +5 -4
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppBarOverlay.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppBarWidgetContent.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppBarWidgetContent.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppBarWidgetItem.vue.d.ts +3 -2
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppBarWidgetItem.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppBarWidgetsMenu.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppBarWidgetsMenu.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppHubContent.vue.d.ts +3 -2
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppHubContent.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppHubPopover.vue.d.ts +3 -2
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/AppHubPopover.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/MenuSidebar.vue.d.ts +4 -3
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/components/MenuSidebar.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/composables/useToggleableContent.d.ts +3 -3
- package/dist/ui/components/organisms/vc-app/_internal/app-bar/composables/useToggleableContent.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/layouts/DesktopLayout.vue.d.ts +10 -5
- package/dist/ui/components/organisms/vc-app/_internal/layouts/DesktopLayout.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/layouts/MobileLayout.vue.d.ts +10 -5
- package/dist/ui/components/organisms/vc-app/_internal/layouts/MobileLayout.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/menu/VcAppMenu.vue.d.ts +3 -1
- package/dist/ui/components/organisms/vc-app/_internal/menu/VcAppMenu.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/sidebar/SidebarCollapseButton.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-app/_internal/sidebar/SidebarCollapseButton.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/sidebar/SidebarContent.vue.d.ts +7 -2
- package/dist/ui/components/organisms/vc-app/_internal/sidebar/SidebarContent.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/sidebar/SidebarHeader.vue.d.ts +7 -6
- package/dist/ui/components/organisms/vc-app/_internal/sidebar/SidebarHeader.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/composables/useShellBootstrap.d.ts +1 -1
- package/dist/ui/components/organisms/vc-app/composables/useShellBootstrap.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/composables/useShellNavigation.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/composition/menu/index.d.ts +1 -1
- package/dist/ui/components/organisms/vc-app/composition/menu/index.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/composition/state/index.d.ts +1 -1
- package/dist/ui/components/organisms/vc-app/composition/state/index.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts +8 -4
- package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-auth-layout/vc-auth-layout.vue.d.ts +3 -2
- package/dist/ui/components/organisms/vc-auth-layout/vc-auth-layout.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/BladeContentSkeleton.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-blade/_internal/BladeContentSkeleton.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/BladeHeader.vue.d.ts +7 -6
- package/dist/ui/components/organisms/vc-blade/_internal/BladeHeader.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/BladeHeaderSkeleton.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-blade/_internal/BladeHeaderSkeleton.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/BladeStatusBanners.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-blade/_internal/BladeStatusBanners.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/BladeToolbar.vue.d.ts +6 -5
- package/dist/ui/components/organisms/vc-blade/_internal/BladeToolbar.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/BladeToolbarSkeleton.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-blade/_internal/BladeToolbarSkeleton.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/composables/useBladeError.d.ts +2 -2
- package/dist/ui/components/organisms/vc-blade/_internal/composables/useBladeError.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/composables/useToolbarRegistration.d.ts +2 -2
- package/dist/ui/components/organisms/vc-blade/_internal/composables/useToolbarRegistration.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/toolbar/ToolbarBaseButton.vue.d.ts +3 -2
- package/dist/ui/components/organisms/vc-blade/_internal/toolbar/ToolbarBaseButton.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/toolbar/ToolbarCircleButton.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-blade/_internal/toolbar/ToolbarCircleButton.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/toolbar/ToolbarDesktop.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-blade/_internal/toolbar/ToolbarDesktop.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/toolbar/ToolbarMobile.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-blade/_internal/toolbar/ToolbarMobile.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/widgets/WidgetContainer.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-blade/_internal/widgets/WidgetContainer.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/widgets/WidgetContainerDesktop.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-blade/_internal/widgets/WidgetContainerDesktop.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/widgets/WidgetContainerMobile.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-blade/_internal/widgets/WidgetContainerMobile.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/widgets/WidgetScope.vue.d.ts +17 -0
- package/dist/ui/components/organisms/vc-blade/_internal/widgets/WidgetScope.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-blade/_internal/widgets/useHeadlessWidgetHelpers.d.ts +9 -0
- package/dist/ui/components/organisms/vc-blade/_internal/widgets/useHeadlessWidgetHelpers.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-blade/utils.d.ts +3 -3
- package/dist/ui/components/organisms/vc-blade/utils.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/vc-blade.vue.d.ts +6 -33
- package/dist/ui/components/organisms/vc-blade/vc-blade.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-data-table/VcDataTable.vue.d.ts +308 -0
- package/dist/ui/components/organisms/vc-data-table/VcDataTable.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/VcTableAdapter.vue.d.ts +132 -0
- package/dist/ui/components/organisms/vc-data-table/VcTableAdapter.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/_internal/vc-table-base-header/vc-table-base-header.vue.d.ts +32 -0
- package/dist/ui/components/organisms/vc-data-table/_internal/vc-table-base-header/vc-table-base-header.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts +31 -0
- package/dist/ui/components/organisms/vc-data-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts +20 -0
- package/dist/ui/components/organisms/vc-data-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/_internal/vc-table-counter/vc-table-counter.vue.d.ts +11 -0
- package/dist/ui/components/organisms/vc-data-table/_internal/vc-table-counter/vc-table-counter.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/_internal/vc-table-empty/vc-table-empty.vue.d.ts +23 -0
- package/dist/ui/components/organisms/vc-data-table/_internal/vc-table-empty/vc-table-empty.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/_internal/vc-table-filter/vc-table-filter.vue.d.ts +27 -0
- package/dist/ui/components/organisms/vc-data-table/_internal/vc-table-filter/vc-table-filter.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/base/BaseVcDataTable.d.ts +377 -0
- package/dist/ui/components/organisms/vc-data-table/base/BaseVcDataTable.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/ColumnFilter.vue.d.ts +59 -0
- package/dist/ui/components/organisms/vc-data-table/components/ColumnFilter.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/ColumnSwitcherButton.vue.d.ts +14 -0
- package/dist/ui/components/organisms/vc-data-table/components/ColumnSwitcherButton.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/DataTableBody.vue.d.ts +161 -0
- package/dist/ui/components/organisms/vc-data-table/components/DataTableBody.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/DataTableCellRenderer.vue.d.ts +54 -0
- package/dist/ui/components/organisms/vc-data-table/components/DataTableCellRenderer.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/DataTableHeader.vue.d.ts +83 -0
- package/dist/ui/components/organisms/vc-data-table/components/DataTableHeader.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/DataTableRow.vue.d.ts +122 -0
- package/dist/ui/components/organisms/vc-data-table/components/DataTableRow.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/GlobalFiltersButton.vue.d.ts +17 -0
- package/dist/ui/components/organisms/vc-data-table/components/GlobalFiltersButton.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/GlobalFiltersPanel.vue.d.ts +45 -0
- package/dist/ui/components/organisms/vc-data-table/components/GlobalFiltersPanel.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/Table.vue.d.ts +26 -0
- package/dist/ui/components/organisms/vc-data-table/components/Table.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableActions.vue.d.ts +23 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableActions.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableAddRowButton.vue.d.ts +17 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableAddRowButton.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableBody.vue.d.ts +32 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableBody.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableCell.vue.d.ts +44 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableCell.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableCheckbox.vue.d.ts +16 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableCheckbox.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableColumnSwitcher.vue.d.ts +32 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableColumnSwitcher.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableEmpty.vue.d.ts +28 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableEmpty.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableFooter.vue.d.ts +14 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableFooter.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableGroupRow.vue.d.ts +30 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableGroupRow.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableHead.vue.d.ts +76 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableHead.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableHeader.vue.d.ts +14 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableHeader.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableResizeHandle.vue.d.ts +18 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableResizeHandle.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableRow.vue.d.ts +77 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableRow.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableRowActions.vue.d.ts +51 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableRowActions.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableSearchHeader.vue.d.ts +69 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableSearchHeader.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableSelectAllBar.vue.d.ts +29 -0
- package/dist/ui/components/organisms/vc-data-table/components/TableSelectAllBar.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/VcColumn.vue.d.ts +362 -0
- package/dist/ui/components/organisms/vc-data-table/components/VcColumn.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/_internal/SlotProxy.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/_internal/TableSkeletonRows.vue.d.ts +18 -0
- package/dist/ui/components/organisms/vc-data-table/components/_internal/TableSkeletonRows.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellDate.vue.d.ts +12 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellDate.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellDateAgo.vue.d.ts +8 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellDateAgo.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellDefault.vue.d.ts +40 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellDefault.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellEditableWrapper.vue.d.ts +29 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellEditableWrapper.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellHtml.vue.d.ts +10 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellHtml.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellImage.vue.d.ts +10 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellImage.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellLink.vue.d.ts +8 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellLink.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellMoney.vue.d.ts +42 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellMoney.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellNumber.vue.d.ts +40 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellNumber.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellStatus.vue.d.ts +8 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellStatus.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellStatusIcon.vue.d.ts +8 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/CellStatusIcon.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/DynamicCellRenderer.vue.d.ts +48 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/DynamicCellRenderer.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/index.d.ts +12 -0
- package/dist/ui/components/organisms/vc-data-table/components/cells/index.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/index.d.ts +27 -0
- package/dist/ui/components/organisms/vc-data-table/components/index.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/mobile/DataTableMobileCard.vue.d.ts +54 -0
- package/dist/ui/components/organisms/vc-data-table/components/mobile/DataTableMobileCard.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/mobile/DataTableMobileView.vue.d.ts +66 -0
- package/dist/ui/components/organisms/vc-data-table/components/mobile/DataTableMobileView.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/mobile/MobileActionSheet.vue.d.ts +32 -0
- package/dist/ui/components/organisms/vc-data-table/components/mobile/MobileActionSheet.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/mobile/MobileCellRenderer.vue.d.ts +51 -0
- package/dist/ui/components/organisms/vc-data-table/components/mobile/MobileCellRenderer.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/mobile/PullToRefresh.vue.d.ts +43 -0
- package/dist/ui/components/organisms/vc-data-table/components/mobile/PullToRefresh.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/components/mobile/index.d.ts +6 -0
- package/dist/ui/components/organisms/vc-data-table/components/mobile/index.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/index.d.ts +31 -0
- package/dist/ui/components/organisms/vc-data-table/composables/index.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useCellBase.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useCellRegistry.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useColumnFilter.d.ts +38 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useColumnFilter.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useColumnWidthEngine.d.ts +46 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useColumnWidthEngine.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useDataProcessing.d.ts +34 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useDataProcessing.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useDataTableOrchestrator.d.ts +279 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useDataTableOrchestrator.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useDataTableState.d.ts +30 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useDataTableState.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useMobileCardLayout.d.ts +48 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useMobileCardLayout.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableColumns.d.ts +53 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableColumns.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableColumnsReorder.d.ts +30 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableColumnsReorder.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableColumnsResize.d.ts +36 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableColumnsResize.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableContext.d.ts +8 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableContext.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableEditing.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableExpansion.d.ts +44 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableExpansion.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableFilter.d.ts +25 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableFilter.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableInlineEdit.d.ts +69 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableInlineEdit.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableRowGrouping.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableRowReorder.d.ts +32 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableRowReorder.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableSelectionV2.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableSort.d.ts +48 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableSort.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useTableSwipe.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/composables/useVirtualScroll.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/index.d.ts +13 -0
- package/dist/ui/components/organisms/vc-data-table/index.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/keys.d.ts +22 -0
- package/dist/ui/components/organisms/vc-data-table/keys.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/types.d.ts +842 -0
- package/dist/ui/components/organisms/vc-data-table/types.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/utils/ColumnCollector.d.ts +67 -0
- package/dist/ui/components/organisms/vc-data-table/utils/ColumnCollector.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/utils/columnHelpers.d.ts +30 -0
- package/dist/ui/components/organisms/vc-data-table/utils/columnHelpers.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/utils/deepClone.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-data-table/utils/index.d.ts +10 -0
- package/dist/ui/components/organisms/vc-data-table/utils/index.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue.d.ts +20 -15
- package/dist/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-filmstrip/vc-gallery-filmstrip.vue.d.ts +42 -0
- package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-filmstrip/vc-gallery-filmstrip.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts +14 -11
- package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-preview/vc-gallery-preview.vue.d.ts +7 -5
- package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-preview/vc-gallery-preview.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-gallery/composables/index.d.ts +1 -0
- package/dist/ui/components/organisms/vc-gallery/composables/index.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-gallery/composables/useGalleryFilmstrip.d.ts +16 -0
- package/dist/ui/components/organisms/vc-gallery/composables/useGalleryFilmstrip.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-gallery/composables/useGalleryPreview.d.ts +2 -2
- package/dist/ui/components/organisms/vc-gallery/composables/useGalleryPreview.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-gallery/composables/useGalleryReorder.d.ts +7 -12
- package/dist/ui/components/organisms/vc-gallery/composables/useGalleryReorder.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-gallery/composables/useGalleryUpload.d.ts +2 -2
- package/dist/ui/components/organisms/vc-gallery/composables/useGalleryUpload.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts +42 -44
- package/dist/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-image-upload/vc-image-upload.vue.d.ts +8 -6
- package/dist/ui/components/organisms/vc-image-upload/vc-image-upload.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-popup/vc-popup.vue.d.ts +5 -4
- package/dist/ui/components/organisms/vc-popup/vc-popup.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-sidebar/vc-sidebar.vue.d.ts +8 -7
- package/dist/ui/components/organisms/vc-sidebar/vc-sidebar.vue.d.ts.map +1 -1
- package/dist/ui/composables/index.d.ts +5 -0
- package/dist/ui/composables/index.d.ts.map +1 -1
- package/dist/ui/composables/useAdaptiveItems.d.ts +9 -8
- package/dist/ui/composables/useAdaptiveItems.d.ts.map +1 -1
- package/dist/ui/composables/useBladeLoading/index.d.ts +6 -0
- package/dist/ui/composables/useBladeLoading/index.d.ts.map +1 -0
- package/dist/ui/composables/useCollapsible.d.ts.map +1 -1
- package/dist/ui/composables/useDataTablePagination.d.ts +30 -0
- package/dist/ui/composables/useDataTablePagination.d.ts.map +1 -0
- package/dist/ui/composables/useDataTableSort.d.ts +24 -0
- package/dist/ui/composables/useDataTableSort.d.ts.map +1 -0
- package/dist/ui/composables/useScrollArrows.d.ts.map +1 -1
- package/dist/ui/composables/useTableSelection.d.ts.map +1 -0
- package/dist/ui/composables/useTableSort.d.ts.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +149 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/types/index.d.ts +1 -7
- package/dist/ui/types/index.d.ts.map +1 -1
- package/dist/ui/utilities/index.d.ts +2 -0
- package/dist/ui/utilities/index.d.ts.map +1 -0
- package/dist/vitest-axe.setup.d.ts.map +1 -1
- package/dist/vitest-mocks.setup.d.ts +2 -0
- package/dist/vitest-mocks.setup.d.ts.map +1 -0
- package/globals-augments.d.ts +36 -0
- package/globals.d.ts +22 -0
- package/package.json +52 -15
- package/shims-vue.d.ts +14 -0
- package/typings/blade-macros.d.ts +25 -0
- package/typings/shims-vue.d.ts +43 -0
- package/dist/core/composables/useGlobalSearch/index.d.ts +0 -5
- package/dist/core/composables/useGlobalSearch/index.d.ts.map +0 -1
- package/dist/core/constants/ui.d.ts +0 -50
- package/dist/core/constants/ui.d.ts.map +0 -1
- package/dist/locales/de.json +0 -426
- package/dist/shared/components/app-switcher/components/index.d.ts +0 -2
- package/dist/shared/components/app-switcher/components/index.d.ts.map +0 -1
- package/dist/shared/components/app-switcher/components/vc-app-switcher/index.d.ts +0 -2
- package/dist/shared/components/app-switcher/components/vc-app-switcher/index.d.ts.map +0 -1
- package/dist/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts +0 -13
- package/dist/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +0 -1
- package/dist/shared/components/app-switcher/composables/index.d.ts +0 -2
- package/dist/shared/components/app-switcher/composables/index.d.ts.map +0 -1
- package/dist/shared/components/app-switcher/composables/useAppSwitcher/index.d.ts +0 -10
- package/dist/shared/components/app-switcher/composables/useAppSwitcher/index.d.ts.map +0 -1
- package/dist/shared/components/app-switcher/index.d.ts +0 -14
- package/dist/shared/components/app-switcher/index.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/components/index.d.ts +0 -3
- package/dist/shared/components/blade-navigation/components/index.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/components/vc-blade-navigation/_internal/vc-mobile-back-button.vue.d.ts +0 -8
- package/dist/shared/components/blade-navigation/components/vc-blade-navigation/_internal/vc-mobile-back-button.vue.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/components/vc-blade-navigation/index.d.ts +0 -3
- package/dist/shared/components/blade-navigation/components/vc-blade-navigation/index.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation-new.vue.d.ts +0 -3
- package/dist/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation-new.vue.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/components/vc-blade-slot/index.d.ts +0 -2
- package/dist/shared/components/blade-navigation/components/vc-blade-slot/index.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/components/vc-blade-slot/vc-blade-slot.vue.d.ts +0 -20
- package/dist/shared/components/blade-navigation/components/vc-blade-slot/vc-blade-slot.vue.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/components/vc-blade-view/vc-blade-view.d.ts +0 -26
- package/dist/shared/components/blade-navigation/components/vc-blade-view/vc-blade-view.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/composables/index.d.ts +0 -6
- package/dist/shared/components/blade-navigation/composables/index.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/composables/useBladeMessaging.d.ts +0 -18
- package/dist/shared/components/blade-navigation/composables/useBladeMessaging.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/composables/useBladeNavigationAdapter.d.ts +0 -33
- package/dist/shared/components/blade-navigation/composables/useBladeNavigationAdapter.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/composables/useBladeStack.d.ts +0 -19
- package/dist/shared/components/blade-navigation/composables/useBladeStack.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/index.d.ts +0 -5
- package/dist/shared/components/blade-navigation/index.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/plugin-v2.d.ts +0 -39
- package/dist/shared/components/blade-navigation/plugin-v2.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/types/index.d.ts +0 -216
- package/dist/shared/components/blade-navigation/types/index.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/utils/bladeRouterGuard.d.ts +0 -31
- package/dist/shared/components/blade-navigation/utils/bladeRouterGuard.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/utils/navigateToMainRoute.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/utils/restoreFromUrl.d.ts +0 -23
- package/dist/shared/components/blade-navigation/utils/restoreFromUrl.d.ts.map +0 -1
- package/dist/shared/components/blade-navigation/utils/urlSync.d.ts +0 -54
- package/dist/shared/components/blade-navigation/utils/urlSync.d.ts.map +0 -1
- package/dist/shared/components/change-password/change-password.vue.d.ts +0 -11
- package/dist/shared/components/change-password/change-password.vue.d.ts.map +0 -1
- package/dist/shared/components/change-password/index.d.ts +0 -8
- package/dist/shared/components/change-password/index.d.ts.map +0 -1
- package/dist/shared/components/change-password-button/change-password-button.vue.d.ts +0 -3
- package/dist/shared/components/change-password-button/change-password-button.vue.d.ts.map +0 -1
- package/dist/shared/components/change-password-button/index.d.ts.map +0 -1
- package/dist/shared/components/common/popup/vc-popup-base.vue.d.ts +0 -50
- package/dist/shared/components/common/popup/vc-popup-base.vue.d.ts.map +0 -1
- package/dist/shared/components/common/popup/vc-popup-error.vue.d.ts +0 -23
- package/dist/shared/components/common/popup/vc-popup-error.vue.d.ts.map +0 -1
- package/dist/shared/components/common/popup/vc-popup-info.vue.d.ts +0 -23
- package/dist/shared/components/common/popup/vc-popup-info.vue.d.ts.map +0 -1
- package/dist/shared/components/common/popup/vc-popup-warning.vue.d.ts +0 -26
- package/dist/shared/components/common/popup/vc-popup-warning.vue.d.ts.map +0 -1
- package/dist/shared/components/dashboard-charts/ChartContainer.vue.d.ts +0 -16
- package/dist/shared/components/dashboard-charts/ChartContainer.vue.d.ts.map +0 -1
- package/dist/shared/components/dashboard-charts/ChartLegend.vue.d.ts +0 -7
- package/dist/shared/components/dashboard-charts/ChartLegend.vue.d.ts.map +0 -1
- package/dist/shared/components/dashboard-charts/ChartTooltip.vue.d.ts +0 -12
- package/dist/shared/components/dashboard-charts/ChartTooltip.vue.d.ts.map +0 -1
- package/dist/shared/components/dashboard-charts/DashboardBarChart.vue.d.ts +0 -34
- package/dist/shared/components/dashboard-charts/DashboardBarChart.vue.d.ts.map +0 -1
- package/dist/shared/components/dashboard-charts/DashboardDonutChart.vue.d.ts +0 -28
- package/dist/shared/components/dashboard-charts/DashboardDonutChart.vue.d.ts.map +0 -1
- package/dist/shared/components/dashboard-charts/DashboardLineChart.vue.d.ts +0 -34
- package/dist/shared/components/dashboard-charts/DashboardLineChart.vue.d.ts.map +0 -1
- package/dist/shared/components/dashboard-charts/chart-utils.d.ts +0 -29
- package/dist/shared/components/dashboard-charts/chart-utils.d.ts.map +0 -1
- package/dist/shared/components/dashboard-charts/index.d.ts.map +0 -1
- package/dist/shared/components/dashboard-charts/types.d.ts.map +0 -1
- package/dist/shared/components/dashboard-widget-card/dashboard-feed-list.vue.d.ts +0 -12
- package/dist/shared/components/dashboard-widget-card/dashboard-feed-list.vue.d.ts.map +0 -1
- package/dist/shared/components/dashboard-widget-card/dashboard-feed-row.vue.d.ts +0 -17
- package/dist/shared/components/dashboard-widget-card/dashboard-feed-row.vue.d.ts.map +0 -1
- package/dist/shared/components/dashboard-widget-card/dashboard-stat-item.vue.d.ts +0 -11
- package/dist/shared/components/dashboard-widget-card/dashboard-stat-item.vue.d.ts.map +0 -1
- package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts +0 -21
- package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts.map +0 -1
- package/dist/shared/components/dashboard-widget-card/index.d.ts +0 -5
- package/dist/shared/components/dashboard-widget-card/index.d.ts.map +0 -1
- package/dist/shared/components/draggable-dashboard/DraggableDashboard.vue.d.ts +0 -20
- package/dist/shared/components/draggable-dashboard/DraggableDashboard.vue.d.ts.map +0 -1
- package/dist/shared/components/draggable-dashboard/GridstackDashboard.vue.d.ts +0 -21
- package/dist/shared/components/draggable-dashboard/GridstackDashboard.vue.d.ts.map +0 -1
- package/dist/shared/components/draggable-dashboard/composables/useGridstack.d.ts +0 -56
- package/dist/shared/components/draggable-dashboard/composables/useGridstack.d.ts.map +0 -1
- package/dist/shared/components/draggable-dashboard/composables/useGridstackAdapter.d.ts +0 -47
- package/dist/shared/components/draggable-dashboard/composables/useGridstackAdapter.d.ts.map +0 -1
- package/dist/shared/components/draggable-dashboard/index.d.ts +0 -13
- package/dist/shared/components/draggable-dashboard/index.d.ts.map +0 -1
- package/dist/shared/components/draggable-dashboard/types.d.ts.map +0 -1
- package/dist/shared/components/error-interceptor/index.d.ts +0 -19
- package/dist/shared/components/error-interceptor/index.d.ts.map +0 -1
- package/dist/shared/components/error-interceptor/interceptor.d.ts.map +0 -1
- package/dist/shared/components/generic-dropdown/generic-dropdown.vue.d.ts +0 -52
- package/dist/shared/components/generic-dropdown/generic-dropdown.vue.d.ts.map +0 -1
- package/dist/shared/components/generic-dropdown/index.d.ts +0 -73
- package/dist/shared/components/generic-dropdown/index.d.ts.map +0 -1
- package/dist/shared/components/index.d.ts +0 -26
- package/dist/shared/components/index.d.ts.map +0 -1
- package/dist/shared/components/language-selector/index.d.ts +0 -8
- package/dist/shared/components/language-selector/index.d.ts.map +0 -1
- package/dist/shared/components/language-selector/language-selector.vue.d.ts +0 -3
- package/dist/shared/components/language-selector/language-selector.vue.d.ts.map +0 -1
- package/dist/shared/components/logout-button/index.d.ts.map +0 -1
- package/dist/shared/components/logout-button/logout-button.vue.d.ts +0 -3
- package/dist/shared/components/logout-button/logout-button.vue.d.ts.map +0 -1
- package/dist/shared/components/multilanguage-selector/index.d.ts +0 -2
- package/dist/shared/components/multilanguage-selector/index.d.ts.map +0 -1
- package/dist/shared/components/multilanguage-selector/multilanguage-selector.vue.d.ts +0 -43
- package/dist/shared/components/multilanguage-selector/multilanguage-selector.vue.d.ts.map +0 -1
- package/dist/shared/components/notification-dropdown/_internal/notification/index.d.ts.map +0 -1
- package/dist/shared/components/notification-dropdown/_internal/notification/notification.vue.d.ts +0 -16
- package/dist/shared/components/notification-dropdown/_internal/notification/notification.vue.d.ts.map +0 -1
- package/dist/shared/components/notification-dropdown/index.d.ts +0 -8
- package/dist/shared/components/notification-dropdown/index.d.ts.map +0 -1
- package/dist/shared/components/notification-dropdown/notification-dropdown.vue.d.ts +0 -3
- package/dist/shared/components/notification-dropdown/notification-dropdown.vue.d.ts.map +0 -1
- package/dist/shared/components/notification-template/index.d.ts +0 -8
- package/dist/shared/components/notification-template/index.d.ts.map +0 -1
- package/dist/shared/components/notification-template/notification-template.vue.d.ts +0 -25
- package/dist/shared/components/notification-template/notification-template.vue.d.ts.map +0 -1
- package/dist/shared/components/notifications/components/index.d.ts +0 -2
- package/dist/shared/components/notifications/components/index.d.ts.map +0 -1
- package/dist/shared/components/notifications/components/notification-container/index.d.ts +0 -120
- package/dist/shared/components/notifications/components/notification-container/index.d.ts.map +0 -1
- package/dist/shared/components/notifications/composables/index.d.ts +0 -3
- package/dist/shared/components/notifications/composables/index.d.ts.map +0 -1
- package/dist/shared/components/notifications/composables/useContainer/index.d.ts +0 -23
- package/dist/shared/components/notifications/composables/useContainer/index.d.ts.map +0 -1
- package/dist/shared/components/notifications/composables/useInstance/index.d.ts +0 -11
- package/dist/shared/components/notifications/composables/useInstance/index.d.ts.map +0 -1
- package/dist/shared/components/notifications/core/index.d.ts +0 -2
- package/dist/shared/components/notifications/core/index.d.ts.map +0 -1
- package/dist/shared/components/notifications/core/notification.d.ts +0 -18
- package/dist/shared/components/notifications/core/notification.d.ts.map +0 -1
- package/dist/shared/components/notifications/index.d.ts +0 -6
- package/dist/shared/components/notifications/index.d.ts.map +0 -1
- package/dist/shared/components/notifications/types/index.d.ts +0 -27
- package/dist/shared/components/notifications/types/index.d.ts.map +0 -1
- package/dist/shared/components/popup-handler/components/index.d.ts +0 -2
- package/dist/shared/components/popup-handler/components/index.d.ts.map +0 -1
- package/dist/shared/components/popup-handler/components/vc-popup-container/index.d.ts +0 -3
- package/dist/shared/components/popup-handler/components/vc-popup-container/index.d.ts.map +0 -1
- package/dist/shared/components/popup-handler/components/vc-popup-container/vc-popup-container.vue.d.ts +0 -3
- package/dist/shared/components/popup-handler/components/vc-popup-container/vc-popup-container.vue.d.ts.map +0 -1
- package/dist/shared/components/popup-handler/composables/index.d.ts +0 -2
- package/dist/shared/components/popup-handler/composables/index.d.ts.map +0 -1
- package/dist/shared/components/popup-handler/composables/usePopup/index.d.ts +0 -14
- package/dist/shared/components/popup-handler/composables/usePopup/index.d.ts.map +0 -1
- package/dist/shared/components/popup-handler/index.d.ts +0 -16
- package/dist/shared/components/popup-handler/index.d.ts.map +0 -1
- package/dist/shared/components/popup-handler/keys.d.ts +0 -4
- package/dist/shared/components/popup-handler/keys.d.ts.map +0 -1
- package/dist/shared/components/popup-handler/plugin.d.ts +0 -7
- package/dist/shared/components/popup-handler/plugin.d.ts.map +0 -1
- package/dist/shared/components/popup-handler/types/index.d.ts +0 -22
- package/dist/shared/components/popup-handler/types/index.d.ts.map +0 -1
- package/dist/shared/components/popup-handler/utils/index.d.ts.map +0 -1
- package/dist/shared/components/settings-menu/index.d.ts.map +0 -1
- package/dist/shared/components/settings-menu/settings-menu.vue.d.ts +0 -3
- package/dist/shared/components/settings-menu/settings-menu.vue.d.ts.map +0 -1
- package/dist/shared/components/settings-menu-item/index.d.ts.map +0 -1
- package/dist/shared/components/settings-menu-item/settings-menu-item.vue.d.ts +0 -40
- package/dist/shared/components/settings-menu-item/settings-menu-item.vue.d.ts.map +0 -1
- package/dist/shared/components/sidebar/index.d.ts +0 -47
- package/dist/shared/components/sidebar/index.d.ts.map +0 -1
- package/dist/shared/components/sidebar/sidebar.vue.d.ts +0 -30
- package/dist/shared/components/sidebar/sidebar.vue.d.ts.map +0 -1
- package/dist/shared/components/sign-in/external-provider.vue.d.ts +0 -15
- package/dist/shared/components/sign-in/external-provider.vue.d.ts.map +0 -1
- package/dist/shared/components/sign-in/external-providers.vue.d.ts +0 -7
- package/dist/shared/components/sign-in/external-providers.vue.d.ts.map +0 -1
- package/dist/shared/components/sign-in/index.d.ts +0 -2
- package/dist/shared/components/sign-in/index.d.ts.map +0 -1
- package/dist/shared/components/sign-in/useExternalProvider.d.ts +0 -12
- package/dist/shared/components/sign-in/useExternalProvider.d.ts.map +0 -1
- package/dist/shared/components/theme-selector/index.d.ts.map +0 -1
- package/dist/shared/components/theme-selector/theme-selector.vue.d.ts +0 -3
- package/dist/shared/components/theme-selector/theme-selector.vue.d.ts.map +0 -1
- package/dist/shared/components/user-dropdown-button/_internal/user-info.vue.d.ts +0 -9
- package/dist/shared/components/user-dropdown-button/_internal/user-info.vue.d.ts.map +0 -1
- package/dist/shared/components/user-dropdown-button/_internal/user-sidebar.vue.d.ts +0 -13
- package/dist/shared/components/user-dropdown-button/_internal/user-sidebar.vue.d.ts.map +0 -1
- package/dist/shared/components/user-dropdown-button/index.d.ts +0 -8
- package/dist/shared/components/user-dropdown-button/index.d.ts.map +0 -1
- package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts +0 -9
- package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts.map +0 -1
- package/dist/shared/composables/index.d.ts +0 -6
- package/dist/shared/composables/index.d.ts.map +0 -1
- package/dist/shared/composables/useExternalWidgets.d.ts +0 -10
- package/dist/shared/composables/useExternalWidgets.d.ts.map +0 -1
- package/dist/shared/composables/useMenuExpanded.d.ts +0 -9
- package/dist/shared/composables/useMenuExpanded.d.ts.map +0 -1
- package/dist/shared/composables/useModificationTracker/index.d.ts.map +0 -1
- package/dist/shared/composables/useTableSelection.d.ts.map +0 -1
- package/dist/shared/composables/useTableSort.d.ts.map +0 -1
- package/dist/shared/index.d.ts +0 -13
- package/dist/shared/index.d.ts.map +0 -1
- package/dist/shared/modules/assets/components/assets-details/assets-details.vue.d.ts +0 -33
- package/dist/shared/modules/assets/components/assets-details/assets-details.vue.d.ts.map +0 -1
- package/dist/shared/modules/assets/components/assets-details/index.d.ts +0 -3
- package/dist/shared/modules/assets/components/assets-details/index.d.ts.map +0 -1
- package/dist/shared/modules/assets/components/index.d.ts +0 -2
- package/dist/shared/modules/assets/components/index.d.ts.map +0 -1
- package/dist/shared/modules/assets/index.d.ts +0 -13
- package/dist/shared/modules/assets/index.d.ts.map +0 -1
- package/dist/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts +0 -41
- package/dist/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts.map +0 -1
- package/dist/shared/modules/assets-manager/components/assets-manager/index.d.ts +0 -3
- package/dist/shared/modules/assets-manager/components/assets-manager/index.d.ts.map +0 -1
- package/dist/shared/modules/assets-manager/components/index.d.ts +0 -2
- package/dist/shared/modules/assets-manager/components/index.d.ts.map +0 -1
- package/dist/shared/modules/assets-manager/index.d.ts +0 -13
- package/dist/shared/modules/assets-manager/index.d.ts.map +0 -1
- package/dist/shared/modules/index.d.ts +0 -3
- package/dist/shared/modules/index.d.ts.map +0 -1
- package/dist/shared/pages/ChangePasswordPage/components/change-password/ChangePassword.vue.d.ts +0 -8
- package/dist/shared/pages/ChangePasswordPage/components/change-password/ChangePassword.vue.d.ts.map +0 -1
- package/dist/shared/pages/ChangePasswordPage/components/change-password/index.d.ts +0 -3
- package/dist/shared/pages/ChangePasswordPage/components/change-password/index.d.ts.map +0 -1
- package/dist/shared/pages/ChangePasswordPage/components/index.d.ts +0 -2
- package/dist/shared/pages/ChangePasswordPage/components/index.d.ts.map +0 -1
- package/dist/shared/pages/ChangePasswordPage/index.d.ts +0 -2
- package/dist/shared/pages/ChangePasswordPage/index.d.ts.map +0 -1
- package/dist/shared/pages/ChangePasswordPage/plugin.d.ts +0 -6
- package/dist/shared/pages/ChangePasswordPage/plugin.d.ts.map +0 -1
- package/dist/shared/pages/ForgotPasswordPage/components/forgot-password/ForgotPassword.vue.d.ts +0 -13
- package/dist/shared/pages/ForgotPasswordPage/components/forgot-password/ForgotPassword.vue.d.ts.map +0 -1
- package/dist/shared/pages/ForgotPasswordPage/components/forgot-password/index.d.ts +0 -3
- package/dist/shared/pages/ForgotPasswordPage/components/forgot-password/index.d.ts.map +0 -1
- package/dist/shared/pages/ForgotPasswordPage/components/index.d.ts +0 -2
- package/dist/shared/pages/ForgotPasswordPage/components/index.d.ts.map +0 -1
- package/dist/shared/pages/ForgotPasswordPage/index.d.ts +0 -2
- package/dist/shared/pages/ForgotPasswordPage/index.d.ts.map +0 -1
- package/dist/shared/pages/ForgotPasswordPage/plugin.d.ts +0 -6
- package/dist/shared/pages/ForgotPasswordPage/plugin.d.ts.map +0 -1
- package/dist/shared/pages/InvitePage/components/index.d.ts +0 -2
- package/dist/shared/pages/InvitePage/components/index.d.ts.map +0 -1
- package/dist/shared/pages/InvitePage/components/invite/Invite.vue.d.ts +0 -13
- package/dist/shared/pages/InvitePage/components/invite/Invite.vue.d.ts.map +0 -1
- package/dist/shared/pages/InvitePage/components/invite/index.d.ts +0 -3
- package/dist/shared/pages/InvitePage/components/invite/index.d.ts.map +0 -1
- package/dist/shared/pages/InvitePage/index.d.ts +0 -2
- package/dist/shared/pages/InvitePage/index.d.ts.map +0 -1
- package/dist/shared/pages/InvitePage/plugin.d.ts +0 -6
- package/dist/shared/pages/InvitePage/plugin.d.ts.map +0 -1
- package/dist/shared/pages/LoginPage/components/index.d.ts +0 -2
- package/dist/shared/pages/LoginPage/components/index.d.ts.map +0 -1
- package/dist/shared/pages/LoginPage/components/login/Login.vue.d.ts +0 -10
- package/dist/shared/pages/LoginPage/components/login/Login.vue.d.ts.map +0 -1
- package/dist/shared/pages/LoginPage/components/login/index.d.ts +0 -3
- package/dist/shared/pages/LoginPage/components/login/index.d.ts.map +0 -1
- package/dist/shared/pages/LoginPage/index.d.ts +0 -2
- package/dist/shared/pages/LoginPage/index.d.ts.map +0 -1
- package/dist/shared/pages/LoginPage/plugin.d.ts +0 -6
- package/dist/shared/pages/LoginPage/plugin.d.ts.map +0 -1
- package/dist/shared/pages/ResetPasswordPage/components/index.d.ts +0 -2
- package/dist/shared/pages/ResetPasswordPage/components/index.d.ts.map +0 -1
- package/dist/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue.d.ts +0 -13
- package/dist/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue.d.ts.map +0 -1
- package/dist/shared/pages/ResetPasswordPage/components/reset-password/index.d.ts +0 -3
- package/dist/shared/pages/ResetPasswordPage/components/reset-password/index.d.ts.map +0 -1
- package/dist/shared/pages/ResetPasswordPage/index.d.ts +0 -2
- package/dist/shared/pages/ResetPasswordPage/index.d.ts.map +0 -1
- package/dist/shared/pages/ResetPasswordPage/plugin.d.ts +0 -6
- package/dist/shared/pages/ResetPasswordPage/plugin.d.ts.map +0 -1
- package/dist/shared/pages/_storybook-helpers.d.ts.map +0 -1
- package/dist/shared/pages/index.d.ts +0 -6
- package/dist/shared/pages/index.d.ts.map +0 -1
- package/dist/shared/pages/plugin.d.ts +0 -6
- package/dist/shared/pages/plugin.d.ts.map +0 -1
- package/dist/shared/utilities/assets.d.ts +0 -5
- package/dist/shared/utilities/assets.d.ts.map +0 -1
- package/dist/shared/utilities/colorUtils.d.ts.map +0 -1
- package/dist/shared/utilities/formatBadgeCount.d.ts.map +0 -1
- package/dist/shared/utilities/index.d.ts +0 -5
- package/dist/shared/utilities/index.d.ts.map +0 -1
- package/dist/shared/utilities/vueUtils.d.ts +0 -34
- package/dist/shared/utilities/vueUtils.d.ts.map +0 -1
- package/dist/ui/components/atoms/vc-icon/composables/use-icon-type.d.ts +0 -22
- package/dist/ui/components/atoms/vc-icon/composables/use-icon-type.d.ts.map +0 -1
- package/dist/ui/components/atoms/vc-icon/composables/use-icon.d.ts +0 -30
- package/dist/ui/components/atoms/vc-icon/composables/use-icon.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-blade/_internal/widgets/WidgetDropdownItem.vue.d.ts +0 -14
- package/dist/ui/components/organisms/vc-blade/_internal/widgets/WidgetDropdownItem.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-blade/constants.d.ts +0 -8
- package/dist/ui/components/organisms/vc-blade/constants.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/VcDataTable.vue.d.ts +0 -302
- package/dist/ui/components/organisms/vc-table/VcDataTable.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/VcTableAdapter.vue.d.ts +0 -127
- package/dist/ui/components/organisms/vc-table/VcTableAdapter.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue.d.ts +0 -31
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts +0 -30
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts +0 -19
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-counter/vc-table-counter.vue.d.ts +0 -10
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-counter/vc-table-counter.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-empty/vc-table-empty.vue.d.ts +0 -22
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-empty/vc-table-empty.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue.d.ts +0 -26
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/base/BaseVcDataTable.d.ts +0 -377
- package/dist/ui/components/organisms/vc-table/base/BaseVcDataTable.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/ColumnFilter.vue.d.ts +0 -58
- package/dist/ui/components/organisms/vc-table/components/ColumnFilter.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/ColumnSwitcherButton.vue.d.ts +0 -13
- package/dist/ui/components/organisms/vc-table/components/ColumnSwitcherButton.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/DataTableBody.vue.d.ts +0 -157
- package/dist/ui/components/organisms/vc-table/components/DataTableBody.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/DataTableCellRenderer.vue.d.ts +0 -47
- package/dist/ui/components/organisms/vc-table/components/DataTableCellRenderer.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/DataTableHeader.vue.d.ts +0 -78
- package/dist/ui/components/organisms/vc-table/components/DataTableHeader.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/DataTableRow.vue.d.ts +0 -113
- package/dist/ui/components/organisms/vc-table/components/DataTableRow.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/GlobalFiltersButton.vue.d.ts +0 -16
- package/dist/ui/components/organisms/vc-table/components/GlobalFiltersButton.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/GlobalFiltersPanel.vue.d.ts +0 -44
- package/dist/ui/components/organisms/vc-table/components/GlobalFiltersPanel.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/Table.vue.d.ts +0 -21
- package/dist/ui/components/organisms/vc-table/components/Table.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableActions.vue.d.ts +0 -22
- package/dist/ui/components/organisms/vc-table/components/TableActions.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableAddRowButton.vue.d.ts +0 -16
- package/dist/ui/components/organisms/vc-table/components/TableAddRowButton.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableBody.vue.d.ts +0 -31
- package/dist/ui/components/organisms/vc-table/components/TableBody.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableCell.vue.d.ts +0 -43
- package/dist/ui/components/organisms/vc-table/components/TableCell.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableCheckbox.vue.d.ts +0 -15
- package/dist/ui/components/organisms/vc-table/components/TableCheckbox.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableColumnSwitcher.vue.d.ts +0 -29
- package/dist/ui/components/organisms/vc-table/components/TableColumnSwitcher.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableEmpty.vue.d.ts +0 -27
- package/dist/ui/components/organisms/vc-table/components/TableEmpty.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableFooter.vue.d.ts +0 -13
- package/dist/ui/components/organisms/vc-table/components/TableFooter.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableGroupRow.vue.d.ts +0 -29
- package/dist/ui/components/organisms/vc-table/components/TableGroupRow.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableHead.vue.d.ts +0 -75
- package/dist/ui/components/organisms/vc-table/components/TableHead.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableHeader.vue.d.ts +0 -13
- package/dist/ui/components/organisms/vc-table/components/TableHeader.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableResizeHandle.vue.d.ts +0 -17
- package/dist/ui/components/organisms/vc-table/components/TableResizeHandle.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableRow.vue.d.ts +0 -70
- package/dist/ui/components/organisms/vc-table/components/TableRow.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableRowActions.vue.d.ts +0 -42
- package/dist/ui/components/organisms/vc-table/components/TableRowActions.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableSearchHeader.vue.d.ts +0 -68
- package/dist/ui/components/organisms/vc-table/components/TableSearchHeader.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/TableSelectAllBar.vue.d.ts +0 -28
- package/dist/ui/components/organisms/vc-table/components/TableSelectAllBar.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/VcColumn.vue.d.ts +0 -361
- package/dist/ui/components/organisms/vc-table/components/VcColumn.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/_internal/SlotProxy.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/_internal/TableSkeletonRows.vue.d.ts +0 -17
- package/dist/ui/components/organisms/vc-table/components/_internal/TableSkeletonRows.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/cells/CellDate.vue.d.ts +0 -11
- package/dist/ui/components/organisms/vc-table/components/cells/CellDate.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/cells/CellDateAgo.vue.d.ts +0 -7
- package/dist/ui/components/organisms/vc-table/components/cells/CellDateAgo.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/cells/CellDefault.vue.d.ts +0 -37
- package/dist/ui/components/organisms/vc-table/components/cells/CellDefault.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/cells/CellEditableWrapper.vue.d.ts +0 -26
- package/dist/ui/components/organisms/vc-table/components/cells/CellEditableWrapper.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/cells/CellHtml.vue.d.ts +0 -9
- package/dist/ui/components/organisms/vc-table/components/cells/CellHtml.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/cells/CellImage.vue.d.ts +0 -9
- package/dist/ui/components/organisms/vc-table/components/cells/CellImage.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/cells/CellLink.vue.d.ts +0 -7
- package/dist/ui/components/organisms/vc-table/components/cells/CellLink.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/cells/CellMoney.vue.d.ts +0 -39
- package/dist/ui/components/organisms/vc-table/components/cells/CellMoney.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/cells/CellNumber.vue.d.ts +0 -37
- package/dist/ui/components/organisms/vc-table/components/cells/CellNumber.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/cells/CellStatus.vue.d.ts +0 -7
- package/dist/ui/components/organisms/vc-table/components/cells/CellStatus.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/cells/CellStatusIcon.vue.d.ts +0 -7
- package/dist/ui/components/organisms/vc-table/components/cells/CellStatusIcon.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/cells/DynamicCellRenderer.vue.d.ts +0 -45
- package/dist/ui/components/organisms/vc-table/components/cells/DynamicCellRenderer.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/cells/index.d.ts +0 -12
- package/dist/ui/components/organisms/vc-table/components/cells/index.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/index.d.ts +0 -27
- package/dist/ui/components/organisms/vc-table/components/index.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/mobile/DataTableMobileCard.vue.d.ts +0 -44
- package/dist/ui/components/organisms/vc-table/components/mobile/DataTableMobileCard.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/mobile/DataTableMobileView.vue.d.ts +0 -56
- package/dist/ui/components/organisms/vc-table/components/mobile/DataTableMobileView.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/mobile/MobileActionSheet.vue.d.ts +0 -27
- package/dist/ui/components/organisms/vc-table/components/mobile/MobileActionSheet.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/mobile/MobileCellRenderer.vue.d.ts +0 -22
- package/dist/ui/components/organisms/vc-table/components/mobile/MobileCellRenderer.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/mobile/PullToRefresh.vue.d.ts +0 -43
- package/dist/ui/components/organisms/vc-table/components/mobile/PullToRefresh.vue.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/components/mobile/index.d.ts +0 -6
- package/dist/ui/components/organisms/vc-table/components/mobile/index.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/index.d.ts +0 -31
- package/dist/ui/components/organisms/vc-table/composables/index.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useCellBase.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useCellRegistry.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useColumnFilter.d.ts +0 -38
- package/dist/ui/components/organisms/vc-table/composables/useColumnFilter.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useDataProcessing.d.ts +0 -34
- package/dist/ui/components/organisms/vc-table/composables/useDataProcessing.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useDataTableOrchestrator.d.ts +0 -276
- package/dist/ui/components/organisms/vc-table/composables/useDataTableOrchestrator.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useDataTableState.d.ts +0 -30
- package/dist/ui/components/organisms/vc-table/composables/useDataTableState.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useMobileCardLayout.d.ts +0 -48
- package/dist/ui/components/organisms/vc-table/composables/useMobileCardLayout.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableColumns.d.ts +0 -40
- package/dist/ui/components/organisms/vc-table/composables/useTableColumns.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableColumnsReorder.d.ts +0 -33
- package/dist/ui/components/organisms/vc-table/composables/useTableColumnsReorder.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableColumnsResize.d.ts +0 -25
- package/dist/ui/components/organisms/vc-table/composables/useTableColumnsResize.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableContext.d.ts +0 -8
- package/dist/ui/components/organisms/vc-table/composables/useTableContext.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableEditing.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableExpansion.d.ts +0 -40
- package/dist/ui/components/organisms/vc-table/composables/useTableExpansion.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableFilter.d.ts +0 -25
- package/dist/ui/components/organisms/vc-table/composables/useTableFilter.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableInlineEdit.d.ts +0 -68
- package/dist/ui/components/organisms/vc-table/composables/useTableInlineEdit.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableRowGrouping.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableRowReorder.d.ts +0 -32
- package/dist/ui/components/organisms/vc-table/composables/useTableRowReorder.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableSelectionV2.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableSort.d.ts +0 -48
- package/dist/ui/components/organisms/vc-table/composables/useTableSort.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableSwipe.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/composables/useVirtualScroll.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/index.d.ts +0 -13
- package/dist/ui/components/organisms/vc-table/index.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/keys.d.ts +0 -22
- package/dist/ui/components/organisms/vc-table/keys.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/types.d.ts +0 -807
- package/dist/ui/components/organisms/vc-table/types.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/utils/ColumnCollector.d.ts +0 -67
- package/dist/ui/components/organisms/vc-table/utils/ColumnCollector.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/utils/deepClone.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/utils/index.d.ts +0 -9
- package/dist/ui/components/organisms/vc-table/utils/index.d.ts.map +0 -1
- package/dist/ui/types/global-components.d.ts +0 -10
- package/dist/ui/types/global-components.d.ts.map +0 -1
- /package/dist/{shared/components → core}/blade-navigation/utils/navigateToMainRoute.d.ts +0 -0
- /package/dist/{shared → core}/composables/useModificationTracker/index.d.ts +0 -0
- /package/dist/{shared → core}/utilities/colorUtils.d.ts +0 -0
- /package/dist/{shared → core}/utilities/formatBadgeCount.d.ts +0 -0
- /package/dist/{shared/pages → shell/_internal}/_storybook-helpers.d.ts +0 -0
- /package/dist/{shared/components/popup-handler → shell/_internal/popup}/utils/index.d.ts +0 -0
- /package/dist/{shared → shell}/components/change-password-button/index.d.ts +0 -0
- /package/dist/{shared → shell}/components/error-interceptor/interceptor.d.ts +0 -0
- /package/dist/{shared → shell}/components/logout-button/index.d.ts +0 -0
- /package/dist/{shared → shell}/components/notification-dropdown/_internal/notification/index.d.ts +0 -0
- /package/dist/{shared → shell}/components/settings-menu/index.d.ts +0 -0
- /package/dist/{shared → shell}/components/settings-menu-item/index.d.ts +0 -0
- /package/dist/{shared → shell}/components/theme-selector/index.d.ts +0 -0
- /package/dist/{shared/components → shell/dashboard}/dashboard-charts/index.d.ts +0 -0
- /package/dist/{shared/components → shell/dashboard}/dashboard-charts/types.d.ts +0 -0
- /package/dist/{shared/components → shell/dashboard}/draggable-dashboard/types.d.ts +0 -0
- /package/dist/ui/components/organisms/{vc-table → vc-data-table}/components/_internal/SlotProxy.d.ts +0 -0
- /package/dist/ui/components/organisms/{vc-table → vc-data-table}/composables/useCellBase.d.ts +0 -0
- /package/dist/ui/components/organisms/{vc-table → vc-data-table}/composables/useCellRegistry.d.ts +0 -0
- /package/dist/ui/components/organisms/{vc-table → vc-data-table}/composables/useTableEditing.d.ts +0 -0
- /package/dist/ui/components/organisms/{vc-table → vc-data-table}/composables/useTableRowGrouping.d.ts +0 -0
- /package/dist/ui/components/organisms/{vc-table → vc-data-table}/composables/useTableSelectionV2.d.ts +0 -0
- /package/dist/ui/components/organisms/{vc-table → vc-data-table}/composables/useTableSwipe.d.ts +0 -0
- /package/dist/ui/components/organisms/{vc-table → vc-data-table}/composables/useVirtualScroll.d.ts +0 -0
- /package/dist/ui/components/organisms/{vc-table → vc-data-table}/utils/deepClone.d.ts +0 -0
- /package/dist/{shared → ui}/composables/useTableSelection.d.ts +0 -0
- /package/dist/{shared → ui}/composables/useTableSort.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework.js","sources":["../core/utilities/camelToSnake.ts","../core/utilities/kebabToCamel.ts","../core/utilities/camelize.ts","../core/utilities/assets.ts","../core/plugins/permissions/index.ts","../core/notifications/composables/useBladeNotifications.ts","../core/notifications/composables/useNotificationContext.ts","../core/notifications/composables/useBroadcastFilter.ts","../core/notifications/toast-types.ts","../core/plugins/signalR/index.ts","../core/plugins/modularity/index.ts","../core/blade-navigation/utils/restoreFromUrl.ts","../core/blade-navigation/utils/bladeRouterGuard.ts","../shell/_internal/blade-navigation/plugin-v2.ts","../shell/_internal/popup/common/vc-popup-base.vue","../shell/_internal/popup/common/vc-popup-warning.vue","../shell/_internal/popup/common/vc-popup-error.vue","../shell/_internal/popup/common/vc-popup-info.vue","../shell/_internal/popup/register-presets.ts","../shell/_internal/popup/plugin.ts","../core/constants/defaults.ts","../core/composables/useFunctions/debounce.ts","../core/composables/useFunctions/delay.ts","../core/composables/useFunctions/once.ts","../core/composables/useFunctions/throttle.ts","../core/composables/useFunctions/index.ts","../core/composables/useNotifications/index.ts","../core/composables/useAsync/index.ts","../core/composables/useApiClient/index.ts","../core/composables/useLoading/index.ts","../core/composables/useSettings/index.ts","../core/composables/useAssets/index.ts","../core/composables/useAssetsManager/index.ts","../core/composables/useBeforeUnload/index.ts","../core/composables/useDynamicProperties/utils.ts","../core/composables/useDynamicProperties/strategies/regular.ts","../core/composables/useDynamicProperties/strategies/boolean.ts","../core/composables/useDynamicProperties/strategies/dictionary.ts","../core/composables/useDynamicProperties/strategies/measure.ts","../core/composables/useDynamicProperties/strategies/color.ts","../core/composables/useDynamicProperties/strategies/index.ts","../core/composables/useDynamicProperties/index.ts","../core/composables/useWebVitals/index.ts","../core/composables/useBladeWidgets/index.ts","../core/composables/bladeContext/index.ts","../core/composables/useModificationTracker/index.ts","../modules/assets/components/assets-details/assets-details.vue","../modules/assets/components/assets-details/index.ts","../modules/assets/index.ts","../modules/assets-manager/components/assets-manager/assets-manager.vue","../modules/assets-manager/components/assets-manager/index.ts","../modules/assets-manager/index.ts","../core/composables/useConnectionStatus/index.ts","../core/composables/useSlowNetworkDetection/index.ts","../core/interceptors/index.ts","../core/plugins/global-error-handler/index.ts","../shell/_internal/notifications/composables/useInstance/index.ts","../shell/_internal/notifications/composables/useContainer/index.ts","../shell/_internal/notifications/register-backend.ts","../shell/components/sidebar/sidebar.vue","../shell/components/sidebar/index.ts","../shell/auth/sign-in/external-provider.vue","../shell/auth/sign-in/external-providers.vue","../shell/auth/utils.ts","../shell/auth/LoginPage/components/login/Login.vue","../shell/auth/LoginPage/components/login/index.ts","../shell/auth/ForgotPasswordPage/components/forgot-password/ForgotPassword.vue","../shell/auth/ForgotPasswordPage/components/forgot-password/index.ts","../shell/auth/ResetPasswordPage/components/reset-password/ResetPassword.vue","../shell/auth/ResetPasswordPage/components/reset-password/index.ts","../shell/auth/InvitePage/components/invite/Invite.vue","../shell/auth/InvitePage/components/invite/index.ts","../shell/auth/ChangePasswordPage/components/change-password/ChangePassword.vue","../shell/auth/ChangePasswordPage/components/change-password/index.ts","../shell/dashboard/draggable-dashboard/composables/useGridstackAdapter.ts","../shell/dashboard/draggable-dashboard/composables/useGridstack.ts","../shell/dashboard/draggable-dashboard/GridstackDashboard.vue","../shell/dashboard/draggable-dashboard/DraggableDashboard.vue","../shell/dashboard/draggable-dashboard/index.ts","../shell/dashboard/dashboard-widget-card/dashboard-widget-card.vue","../shell/dashboard/dashboard-widget-card/dashboard-stat-item.vue","../shell/dashboard/dashboard-widget-card/dashboard-feed-list.vue","../shell/dashboard/dashboard-widget-card/dashboard-feed-row.vue","../shell/dashboard/dashboard-charts/ChartContainer.vue","../shell/dashboard/dashboard-charts/ChartTooltip.vue","../shell/dashboard/dashboard-charts/ChartLegend.vue","../shell/dashboard/dashboard-charts/chart-utils.ts","../shell/dashboard/dashboard-charts/DashboardLineChart.vue","../shell/dashboard/dashboard-charts/DashboardBarChart.vue","../shell/dashboard/dashboard-charts/DashboardDonutChart.vue","../core/composables/useBladeNavigationAdapter/index.ts","../core/composables/useBladeForm/index.ts","../shell/_internal/notifications/components/notification-container/index.ts","../index.ts"],"sourcesContent":["export function camelToSnake(str: string): string {\r\n return str\r\n .replace(/[\\w]([A-Z])/g, function (m) {\r\n return m[0] + \"_\" + m[1];\r\n })\r\n .toLowerCase();\r\n}\r\n","export const kebabToCamel = (str: string) => str.replace(/-./g, (x) => x[1].toUpperCase());\r\n\r\nexport function kebabToPascal(str: string) {\r\n const camelCase = kebabToCamel(str);\r\n const pascalCase = camelCase[0].toUpperCase() + camelCase.substring(1);\r\n return pascalCase;\r\n}\r\n","export function camelize(str: string) {\r\n return str.replace(/\\W+(.)/g, function (match, chr) {\r\n return chr.toUpperCase();\r\n });\r\n}\r\n","const imageExtensions = new Set([\"png\", \"jpg\", \"jpeg\", \"svg\", \"gif\"]);\n\nfunction getExtension(fileName: string) {\n return fileName.split(\".\").pop()?.toLowerCase();\n}\n\nfunction isImage(name: string | undefined) {\n if (!name) return false;\n return imageExtensions.has(getExtension(name) ?? \"\");\n}\n\nfunction readableSize(bytes: number | undefined, decimals = 2) {\n if (!bytes) return \"0 Bytes\";\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n}\n\nconst extensionColors: Record<string, string> = {\n pdf: \"#e74c3c\",\n doc: \"#2b579a\",\n docx: \"#2b579a\",\n xls: \"#217346\",\n xlsx: \"#217346\",\n ppt: \"#d35230\",\n pptx: \"#d35230\",\n csv: \"#16a085\",\n zip: \"#f39c12\",\n mp3: \"#e67e22\",\n aac: \"#e67e22\",\n mp4: \"#8e44ad\",\n avi: \"#8e44ad\",\n};\n\nfunction getExtensionColor(name: string | undefined): string {\n if (!name) return \"var(--neutrals-400)\";\n const ext = getExtension(name) ?? \"\";\n return extensionColors[ext] ?? \"var(--neutrals-400)\";\n}\n\nfunction getExtensionLabel(name: string | undefined): string {\n if (!name) return \"FILE\";\n return (getExtension(name) ?? \"FILE\").toUpperCase();\n}\n\nexport { isImage, readableSize, getExtensionColor, getExtensionLabel };\n","import { usePermissions } from \"@core/composables/usePermissions\";\r\nimport { App } from \"vue\";\r\n\r\nexport const permissions = {\r\n install(app: App) {\r\n const { hasAccess } = usePermissions();\r\n app.config.globalProperties.$hasAccess = hasAccess;\r\n app.provide(\"$hasAccess\", hasAccess);\r\n },\r\n};\r\n","import { computed, onScopeDispose, getCurrentScope } from \"vue\";\nimport { PushNotification } from \"@core/api/platform\";\nimport { useNotificationStore } from \"./useNotificationStore\";\nimport type { BladeNotificationOptions, BladeNotificationReturn } from \"../types\";\n\n/**\n * Blade-level notification subscription.\n *\n * Level 2 (additive): provides blade-specific behavior on top of\n * the always-on module config (Level 1). When the blade unmounts,\n * only blade-specific behavior stops — dropdown and toasts continue.\n *\n * Must be called within a component setup or effectScope.\n */\nexport function useBladeNotifications<T extends PushNotification = PushNotification>(\n options: BladeNotificationOptions<T>,\n): BladeNotificationReturn<T> {\n const store = useNotificationStore();\n\n // Subscribe with handler\n const unsub = store.subscribe({\n types: options.types,\n filter: options.filter as ((msg: PushNotification) => boolean) | undefined,\n handler: options.onMessage as ((msg: PushNotification) => void) | undefined,\n });\n\n // Auto-cleanup if within a scope\n if (getCurrentScope()) {\n onScopeDispose(unsub);\n }\n\n // Filtered messages from realtime\n const messages = computed(() =>\n store.realtime.value.filter((msg): msg is T => {\n if (!msg.notifyType || !options.types.includes(msg.notifyType)) return false;\n if (!msg.isNew) return false;\n if (options.filter && !(options.filter as (m: PushNotification) => boolean)(msg)) return false;\n return true;\n }),\n );\n\n const unreadCount = computed(() => messages.value.length);\n\n function markAsRead(msg: T) {\n store.markAsRead(msg);\n }\n\n return {\n messages,\n unreadCount,\n markAsRead,\n };\n}\n","import { inject, type ComputedRef } from \"vue\";\nimport { PushNotification } from \"@core/api/platform\";\nimport { NotificationContextKey } from \"../types\";\n\nexport function useNotificationContext<T extends PushNotification = PushNotification>(): ComputedRef<T> {\n const ctx = inject(NotificationContextKey);\n if (!ctx) {\n throw new Error(\"useNotificationContext() must be used inside a notification template\");\n }\n return ctx as ComputedRef<T>;\n}\n","import { PushNotification } from \"@core/api/platform\";\nimport { useNotificationStore } from \"./useNotificationStore\";\n\nexport interface UseBroadcastFilterReturn {\n setBroadcastFilter(fn: (msg: PushNotification) => boolean): void;\n clearBroadcastFilter(): void;\n}\n\nexport function useBroadcastFilter(): UseBroadcastFilterReturn {\n const store = useNotificationStore();\n return {\n setBroadcastFilter: store.setBroadcastFilter,\n clearBroadcastFilter: store.clearBroadcastFilter,\n };\n}\n","import { VNode, DefineComponent, InjectionKey, Ref } from \"vue\";\n\nexport type NotificationType = \"success\" | \"error\" | \"warning\" | \"default\";\n\nexport interface NotificationOptions {\n pauseOnHover?: boolean;\n timeout?: number | boolean;\n content?: Content;\n notificationId?: number | string;\n type?: NotificationType;\n onOpen?: <T>(payload: T) => void;\n onClose?: <T>(payload: T) => void;\n\n payload?: string | Record<string, any>;\n updateId?: string | number;\n position?: NotificationPosition;\n /** Set by `actions.dismiss()` to trigger exit animation in VcToast */\n dismissing?: boolean;\n}\n\n// Adding a new type for notification positioning\nexport type NotificationPosition =\n | \"top-center\"\n | \"top-right\"\n | \"top-left\"\n | \"bottom-center\"\n | \"bottom-right\"\n | \"bottom-left\";\n\nexport type Content = string | VNode | DefineComponent<{}, {}, any>;\n\nexport interface NotificationContainerState {\n notificationContainers: Record<NotificationPosition, Ref<NotificationOptions[]>>;\n actions: {\n remove(id: string | number): void;\n clear(): void;\n };\n}\n\nexport const NotificationContainerStateKey: InjectionKey<NotificationContainerState> =\n Symbol(\"NotificationContainerState\");\n","import { type App, watch } from \"vue\";\nimport { HubConnectionBuilder, LogLevel } from \"@microsoft/signalr\";\nimport { PushNotification } from \"@core/api/platform\";\nimport { useNotificationStore } from \"@core/notifications\";\nimport { useUserManagement } from \"@core/composables/useUserManagement\";\nimport { useCypressSignalRMock } from \"cypress-signalr-mock\";\nimport { createLogger } from \"@core/utilities\";\n\nconst logger = createLogger(\"signalR\");\n\nexport const signalR = {\n install(_app: App) {\n const store = useNotificationStore();\n const { isAuthenticated } = useUserManagement();\n let reconnect = false;\n const connection =\n useCypressSignalRMock(\"pushNotificationHub\", { enableForVitest: true }) ??\n new HubConnectionBuilder()\n .withUrl(\"/pushNotificationHub\")\n .withAutomaticReconnect()\n .configureLogging(LogLevel.Information)\n .build();\n\n const start = () => {\n connection\n .start()\n .then(() => {\n logger.info(\"Connected.\");\n })\n .catch((err: unknown) => {\n logger.error(\"Connection Error: \", err);\n setTimeout(() => start(), 5000);\n });\n };\n\n async function stop() {\n await connection.stop();\n }\n\n connection.onclose(() => {\n if (reconnect) start();\n });\n\n connection.on(\"Send\", (message: PushNotification) => {\n store.ingest(message);\n });\n\n connection.on(\"SendSystemEvents\", (message: PushNotification) => {\n store.ingest(message, { broadcast: true });\n });\n\n watch(\n isAuthenticated,\n async (value) => {\n if (value) {\n reconnect = true;\n start();\n } else {\n reconnect = false;\n await stop();\n }\n },\n { immediate: true },\n );\n },\n};\n","import { App, Component, inject } from \"vue\";\nimport { i18n } from \"@core/plugins/i18n\";\nimport type { BladeInstanceConstructor } from \"@core/blade-navigation/types\";\nimport { createLogger } from \"@core/utilities\";\nimport { useNotificationStore } from \"@core/notifications\";\nimport type { ModuleNotificationsConfig } from \"@core/notifications\";\nimport { notification } from \"@core/notifications/notification\";\nimport { BladeRegistryKey, IBladeRegistryInstance } from \"@core/composables/useBladeRegistry\";\n\nconst logger = createLogger(\"modularity\");\n\n/**\n * Options for defineAppModule.\n */\nexport interface DefineAppModuleOptions {\n /** Blade components for BladeRegistry registration */\n blades?: Record<string, BladeInstanceConstructor>;\n /** Locales for vue-i18n merge */\n locales?: Record<string, object>;\n /** @deprecated Use `notifications` instead */\n notificationTemplates?: Record<string, Component & { notifyType?: string }>;\n /** Notification type configurations (new API) */\n notifications?: ModuleNotificationsConfig;\n}\n\n/**\n * Creates an app module plugin with explicit registration intent.\n *\n * @example\n * ```ts\n * export default defineAppModule({\n * blades: { OrdersList, OrderDetails },\n * locales: { en, de },\n * });\n * ```\n */\nexport function defineAppModule(options: DefineAppModuleOptions) {\n const { blades, locales, notificationTemplates, notifications } = options;\n\n return {\n install(app: App): void {\n const store = useNotificationStore();\n\n // Step 1: Blade registration (only if blades provided)\n if (blades && Object.keys(blades).length > 0) {\n const bladeRegistry = app.runWithContext(() => inject<IBladeRegistryInstance>(BladeRegistryKey));\n\n if (!bladeRegistry?._registerBladeFn) {\n logger.error(\"defineAppModule: BladeRegistry not found. Blade registration will be skipped.\");\n } else {\n for (const [exportKey, component] of Object.entries(blades)) {\n const name = component.name || exportKey;\n app.runWithContext(() => {\n bladeRegistry._registerBladeFn(name, {\n component,\n route: component.url,\n isWorkspace: component.isWorkspace || false,\n routable: component.routable !== false,\n permissions: component.permissions,\n });\n });\n }\n }\n }\n\n // Step 2: Register notification types (new API)\n if (notifications) {\n for (const [type, config] of Object.entries(notifications)) {\n store.registerType(type, config);\n }\n }\n\n // Step 3: Legacy notification support (deprecated)\n if (!notifications && notificationTemplates) {\n for (const template of Object.values(notificationTemplates)) {\n const type = template.notifyType;\n if (type) {\n store.registerType(type, {\n template: template as Component,\n toast: { mode: \"auto\" },\n });\n }\n }\n }\n\n // Step 3b: Legacy blade notifyType compat shim (deprecated)\n if (blades) {\n for (const component of Object.values(blades)) {\n if (component.notifyType) {\n const notifyTypes = Array.isArray(component.notifyType) ? component.notifyType : [component.notifyType];\n\n // Skip if notifications config already handles these types\n const unhandledTypes = notifyTypes.filter((t) => !store.registry.has(t));\n if (unhandledTypes.length > 0) {\n // Permanent subscription — no cleanup needed (app lifetime)\n store.subscribe({\n types: notifyTypes,\n handler: (message) => {\n if (message.title) {\n notification(message.title, {\n onClose() {\n store.markAsRead(message);\n },\n });\n }\n },\n });\n\n if (import.meta.env.DEV) {\n logger.warn(\n `[vc-shell] notifyType on blade \"${component.name}\" is deprecated. ` +\n `Use useBladeNotifications() inside the blade instead. ` +\n `See: MIGRATION_GUIDE.md#notifications`,\n );\n }\n }\n }\n }\n }\n\n // Step 4: Locale merge\n if (locales) {\n for (const [key, message] of Object.entries(locales)) {\n i18n.global.mergeLocaleMessage(key, message);\n }\n }\n },\n };\n}\n\n/**\n * @deprecated Use `defineAppModule()` instead. This function is a backward-compatible\n * adapter that delegates to `defineAppModule`. It will be removed in a future major version.\n *\n * @example\n * ```ts\n * // Before:\n * export default createAppModule(pages, locales);\n * // After:\n * export default defineAppModule({ blades: pages, locales });\n * ```\n */\nexport function createAppModule(\n pages: Record<string, BladeInstanceConstructor>,\n locales?: Record<string, object>,\n notificationTemplates?: Record<string, Component & { notifyType?: string }>,\n _components?: Record<string, Component>,\n) {\n return defineAppModule({\n blades: pages,\n locales,\n notificationTemplates,\n });\n}\n","import type { Router } from \"vue-router\";\nimport type { IBladeRegistry } from \"@core/composables/useBladeRegistry\";\nimport type { IBladeStack, ParsedBladeUrl } from \"@core/blade-navigation/types\";\nimport { navigateToMainRoute } from \"./navigateToMainRoute\";\nimport { notification } from \"@core/notifications/notification\";\nimport { i18n } from \"@core/plugins\";\n\n/**\n * Restore the blade stack from a parsed URL.\n *\n * Used on initial page load and when navigating via URL (not back/forward).\n * Resolves URL segments to blade names via BladeRegistry, then opens\n * workspace + child blade.\n *\n * Returns `true` if the URL contained segments for a non-routable blade\n * that was skipped — the caller should clean up the URL to match the\n * actual blade stack state.\n *\n * @param bladeStack - The BladeStack to populate\n * @param bladeRegistry - Registry for resolving URLs → blade names\n * @param parsed - Parsed URL segments\n * @param hasAccess - Optional permission check function\n * @param router - Optional router for redirecting on access denial\n * @param routeParams - Route params to preserve on redirect (e.g. sellerId for tenant prefix)\n * @returns `true` if the URL needs cleanup (non-routable blade was skipped)\n */\nexport async function restoreFromUrl(\n bladeStack: IBladeStack,\n bladeRegistry: IBladeRegistry,\n parsed: ParsedBladeUrl,\n hasAccess?: (permissions: string | string[] | undefined) => boolean,\n router?: Router,\n routeParams?: Record<string, string>,\n): Promise<boolean> {\n // Skip if no workspace URL to restore\n if (!parsed.workspaceUrl) return false;\n\n // Find workspace blade by URL segment\n const workspaceMatch = bladeRegistry.getBladeByRoute(parsed.workspaceUrl);\n\n // Guard 1: blade not found\n if (!workspaceMatch) {\n console.warn(`[restoreFromUrl] No workspace blade found for URL segment '${parsed.workspaceUrl}'`);\n if (router) navigateToMainRoute(router, routeParams);\n return false;\n }\n\n // Guard 2: not a workspace\n if (!workspaceMatch.data.isWorkspace) {\n console.warn(\n `[restoreFromUrl] Blade '${workspaceMatch.name}' matched URL '${parsed.workspaceUrl}' but is not a workspace`,\n );\n if (router) navigateToMainRoute(router, routeParams);\n return false;\n }\n\n // Guard 3: permissions\n // Note: openWorkspace() also checks permissions as a safety net (defense-in-depth),\n // but we check here first to redirect and show toast before the workspace is opened.\n if (hasAccess && workspaceMatch.data.permissions && !hasAccess(workspaceMatch.data.permissions)) {\n console.warn(`[restoreFromUrl] Access denied to workspace '${workspaceMatch.name}'`);\n notification.error(i18n.global.t(\"PERMISSION_MESSAGES.ACCESS_RESTRICTED\"), { timeout: 3000 });\n if (router) navigateToMainRoute(router, routeParams);\n return false;\n }\n\n // Open workspace (if not already the current one)\n const currentWorkspace = bladeStack.workspace.value;\n if (currentWorkspace?.name !== workspaceMatch.name) {\n await bladeStack.openWorkspace({ name: workspaceMatch.name });\n }\n\n // If there's a child blade URL, open it (if not already open with matching param)\n if (parsed.bladeUrl) {\n const bladeMatch = bladeRegistry.getBladeByRoute(parsed.bladeUrl);\n if (bladeMatch) {\n // Idempotency: skip if child already exists with same name and param.\n // This means the blade was opened programmatically (normal operation)\n // and syncUrlPush just triggered the guard — not a page restore.\n const existingChild = bladeStack.blades.value.find((b) => b.name === bladeMatch.name && b.param === parsed.param);\n if (existingChild) {\n return false;\n }\n\n // Non-routable blades should not be restored from URL.\n // Signal the caller to clean the URL.\n if (bladeMatch.data.routable === false) {\n return true;\n }\n\n await bladeStack.openBlade({\n name: bladeMatch.name,\n param: parsed.param,\n // options not available from URL — blade must handle gracefully\n });\n } else {\n console.warn(`[restoreFromUrl] No blade found for URL segment '${parsed.bladeUrl}'`);\n }\n }\n\n return false;\n}\n","import type { RouteLocationNormalized } from \"vue-router\";\nimport type { Router } from \"vue-router\";\nimport type { UseBladeRegistryReturn } from \"@core/composables/useBladeRegistry\";\nimport type { IBladeStack } from \"@core/blade-navigation/types\";\nimport { parseBladeUrl, buildUrlFromStack } from \"@core/blade-navigation/utils/urlSync\";\nimport { restoreFromUrl } from \"@core/blade-navigation/utils/restoreFromUrl\";\n\n/**\n * Result of the blade router guard.\n *\n * - `undefined` — allow navigation (no redirect)\n * - `false` — cancel navigation (e.g. beforeClose guard prevented closing)\n * - `{ path, query, replace }` — redirect to cleaned-up URL\n */\nexport type BladeGuardResult = undefined | false | { path: string; query: Record<string, string>; replace: true };\n\nasync function clearBladeStackRespectingGuards(bladeStack: IBladeStack): Promise<boolean> {\n while (bladeStack.blades.value.length > 1) {\n const bladesBeforeClose = bladeStack.blades.value;\n const lastBlade = bladesBeforeClose[bladesBeforeClose.length - 1];\n const prevented = await bladeStack.closeBlade(lastBlade.id);\n\n if (prevented) {\n return false;\n }\n\n // Defensive exit to avoid infinite loops if stack doesn't change unexpectedly.\n if (bladeStack.blades.value.length >= bladesBeforeClose.length) {\n return false;\n }\n }\n\n if (bladeStack.blades.value.length > 0) {\n bladeStack._restoreStack([]);\n }\n\n return true;\n}\n\n/**\n * Router guard that syncs URL navigation with the BladeStack.\n *\n * Determines whether a navigation target is a real Vue Router page\n * or a blade URL handled by the catch-all route:\n *\n * - **Real child routes** (e.g. \"Platform\", \"Dashboard\"): clears any open\n * blades and lets Vue Router render the page.\n * - **Blade catch-all route**: parses URL segments and restores the\n * blade stack (workspace + optional child blade).\n *\n * The catch-all route is identified by `meta.bladeCatchAll`, which is set\n * by the BladeNavigationPlugin when it registers the catch-all.\n */\nexport async function bladeRouterGuard(\n to: RouteLocationNormalized,\n bladeStack: IBladeStack,\n bladeRegistry: UseBladeRegistryReturn,\n hasAccess?: (permissions: string | string[] | undefined) => boolean,\n router?: Router,\n): Promise<BladeGuardResult> {\n // Only process routes under the root (App) route\n if (!to.matched.some((r) => r.meta?.root)) return undefined;\n\n // Only run blade restoration when the URL matches the blade catch-all route.\n // Real Vue Router child routes (e.g. \"Platform\", \"Dashboard\") should be\n // handled by Vue Router normally — not interpreted as blade URL segments.\n const isBladeCatchAll = to.matched.some((r) => r.meta?.bladeCatchAll);\n if (!isBladeCatchAll) {\n // Clear any open blades so the page renders without stale blade state\n if (bladeStack.blades.value.length > 0) {\n const wasCleared = await clearBladeStackRespectingGuards(bladeStack);\n if (!wasCleared) {\n return false;\n }\n }\n return undefined;\n }\n\n // Extract tenant prefix from route params (first param, typically sellerId)\n const tenantPrefix = (Object.values(to.params)?.[0] as string) || \"\";\n\n // Parse the URL path into blade segments\n const parsed = parseBladeUrl(to.path, tenantPrefix);\n\n if (!parsed.workspaceUrl) {\n // No workspace in URL (e.g. navigating to \"/\") — clear the blade stack.\n // The app shell renders its own default view (e.g. dashboard) when the stack is empty.\n if (bladeStack.blades.value.length > 0) {\n const wasCleared = await clearBladeStackRespectingGuards(bladeStack);\n if (!wasCleared) {\n return false;\n }\n }\n return undefined;\n }\n\n // Preserve route params (e.g. sellerId) so fallback redirects keep the tenant prefix\n const routeParams = Object.fromEntries(Object.entries(to.params).filter(([, v]) => typeof v === \"string\")) as Record<\n string,\n string\n >;\n\n // Restore blade stack from URL (idempotent — skips if already matching)\n const needsUrlCleanup = await restoreFromUrl(bladeStack, bladeRegistry, parsed, hasAccess, router, routeParams);\n\n // If a non-routable blade was in the URL, clean up to match actual stack\n if (needsUrlCleanup) {\n const { path, query } = buildUrlFromStack(tenantPrefix, bladeStack.blades.value);\n return { path, query, replace: true };\n }\n\n return undefined;\n}\n","import { Router } from \"vue-router\";\r\nimport { App } from \"vue\";\r\nimport { BladeNavigationPlugin, BladeStackKey, BladeMessagingKey } from \"@core/blade-navigation/types\";\r\nimport { createBladeStack } from \"@core/blade-navigation/useBladeStack\";\r\nimport { createBladeMessaging } from \"@core/blade-navigation/useBladeMessaging\";\r\nimport { bladeRouterGuard } from \"@core/blade-navigation/utils/bladeRouterGuard\";\r\nimport { useBladeRegistry } from \"@core/composables/useBladeRegistry\";\r\nimport type { IBladeRegistry } from \"@core/composables/useBladeRegistry\";\r\nimport { usePermissions } from \"@core/composables/usePermissions\";\r\nimport {\r\n setBladeNavigationInstance,\r\n setBladeStackInstance,\r\n setBladeMessagingInstance,\r\n setBladeRegistryInstance,\r\n} from \"@core/blade-navigation/singletons\";\r\n\r\n// Re-export singletons for backward compatibility\r\nexport {\r\n bladeNavigationInstance,\r\n bladeStackInstance,\r\n bladeMessagingInstance,\r\n bladeRegistryInstance,\r\n _resetBladeNavigationSingletons,\r\n} from \"@core/blade-navigation/singletons\";\r\n\r\n/**\r\n * New Blade Navigation Plugin (v2).\r\n *\r\n * Sets up:\r\n * - BladeStack state machine (provided via BladeStackKey)\r\n * - BladeMessaging for inter-blade communication (provided via BladeMessagingKey)\r\n * - Auto catch-all route under the root route (safety net for blade URLs)\r\n * - Router beforeEach guard for URL → blade stack restoration\r\n *\r\n * Vue Router serves as the URL sync layer only. BladeStack is the source of truth.\r\n * Back/forward is handled natively by Vue Router — beforeEach fires on popstate\r\n * and restores BladeStack from the URL.\r\n */\r\nexport const VcBladeNavigationComponent = {\r\n install(app: App, args: { router: Router }) {\r\n const { router } = args;\r\n\r\n // ── Legacy backward compatibility ───────────────────────────────────────\r\n const bladeNavigationPluginData: BladeNavigationPlugin = {\r\n router: args.router,\r\n };\r\n setBladeNavigationInstance(bladeNavigationPluginData);\r\n\r\n // ── New BladeStack system ───────────────────────────────────────────────\r\n\r\n // BladeRegistry must already be provided by the main app setup (framework/index.ts)\r\n const bladeRegistry = app.runWithContext(() => {\r\n try {\r\n return useBladeRegistry();\r\n } catch {\r\n console.warn(\r\n \"[BladeNavigationPlugin] BladeRegistry not yet available. \" +\r\n \"BladeStack will be created but URL restoration may be deferred.\",\r\n );\r\n return undefined;\r\n }\r\n }) as IBladeRegistry | undefined;\r\n\r\n if (!bladeRegistry) {\r\n console.error(\"[BladeNavigationPlugin] BladeRegistry is required but not found.\");\r\n return;\r\n }\r\n\r\n // Get permission checker for workspace access control\r\n const { hasAccess } = app.runWithContext(() => usePermissions());\r\n\r\n // Create BladeStack with permission enforcement\r\n const bladeStack = createBladeStack(bladeRegistry, hasAccess);\r\n app.provide(BladeStackKey, bladeStack);\r\n setBladeStackInstance(bladeStack);\r\n\r\n // Create BladeMessaging\r\n const messaging = createBladeMessaging(bladeStack);\r\n app.provide(BladeMessagingKey, messaging);\r\n setBladeMessagingInstance(messaging);\r\n setBladeRegistryInstance(bladeRegistry!);\r\n\r\n // ── Auto-register catch-all route ───────────────────────────────────────\r\n // Safety net: prevents Vue Router \"route not found\" errors for blade URLs\r\n // in hash mode. BladeStack handles actual rendering.\r\n const mainRoute = router.getRoutes().find((r) => r.meta?.root);\r\n if (mainRoute) {\r\n router.addRoute(mainRoute.name as string, {\r\n path: \":pathMatch(.*)*\",\r\n component: { render: () => null },\r\n meta: { bladeCatchAll: true },\r\n });\r\n }\r\n\r\n // ── Router guard for URL → blade stack restoration ──────────────────────\r\n // Fires on: direct URL entry, deep links, back/forward (popstate)\r\n // The adapter's router.push()/replace() also triggers this, but\r\n // restoreFromUrl is idempotent — if stack already matches URL, it's a no-op.\r\n router.beforeEach((to) => bladeRouterGuard(to, bladeStack, bladeRegistry, hasAccess, router));\r\n },\r\n};\r\n","<template>\n <VcPopup\n :variant=\"variant\"\n :is-mobile-fullscreen=\"isMobileFullscreen\"\n :title=\"title\"\n :closable=\"closable\"\n @close=\"$emit('close')\"\n >\n <template\n v-if=\"$slots.header\"\n #header\n >\n <slot name=\"header\" />\n </template>\n\n <template #content>\n <slot />\n </template>\n\n <template #footer=\"{ close }\">\n <slot\n name=\"footer\"\n :close=\"close\"\n :confirm=\"() => handleConfirm(close)\"\n >\n <div\n class=\"vc-popup-base__actions\"\n :class=\"{\n 'vc-popup-base__actions--confirm': mode === 'confirm',\n 'vc-popup-base__actions--single': mode === 'acknowledge',\n }\"\n >\n <template v-if=\"mode === 'confirm'\">\n <VcButton\n :text=\"confirmAsText\"\n class=\"vc-popup-base__confirm\"\n @click=\"handleConfirm(close)\"\n >\n {{ confirmLabel }}\n </VcButton>\n <VcButton @click=\"close\">{{ cancelLabel }}</VcButton>\n </template>\n <VcButton\n v-else\n class=\"vc-popup-base__single\"\n @click=\"close\"\n >\n {{ actionLabel }}\n </VcButton>\n </div>\n </slot>\n </template>\n </VcPopup>\n</template>\n<!-- eslint-disable @typescript-eslint/no-explicit-any -->\n<script lang=\"ts\" setup>\nimport VcPopup, { type PopupVariant } from \"@ui/components/organisms/vc-popup/vc-popup.vue\";\n\nexport interface Props {\n title?: string;\n variant?: PopupVariant;\n mode?: \"acknowledge\" | \"confirm\";\n actionLabel?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n confirmAsText?: boolean;\n closable?: boolean;\n isMobileFullscreen?: boolean;\n closeOnConfirm?: boolean;\n}\n\nexport interface Emits {\n (event: \"close\"): void;\n (event: \"confirm\"): void;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: \"default\",\n mode: \"acknowledge\",\n actionLabel: \"\",\n confirmLabel: \"\",\n cancelLabel: \"\",\n confirmAsText: false,\n closable: true,\n isMobileFullscreen: true,\n closeOnConfirm: false,\n});\n\nconst emit = defineEmits<Emits>();\n\ndefineSlots<{\n header: (props: any) => any;\n default: (props: any) => any;\n footer: (props: { close: () => void; confirm: () => void }) => any;\n}>();\n\nfunction handleConfirm(close: () => void): void {\n emit(\"confirm\");\n\n if (props.closeOnConfirm) {\n close();\n }\n}\n</script>\n\n<style lang=\"scss\">\n:root {\n // Deprecated alias: --confirm-button-color\n --popup-base-confirm-color: var(--confirm-button-color, var(--secondary-700));\n}\n\n.vc-popup-base {\n &__actions {\n @apply tw-flex tw-flex-auto tw-justify-end;\n\n &--confirm {\n @apply tw-gap-6;\n }\n\n &--single {\n @apply tw-gap-0;\n }\n }\n\n &__single {\n @apply tw-ml-auto;\n }\n\n &__confirm {\n color: var(--popup-base-confirm-color) !important;\n }\n}\n</style>\n","<template>\n <VcPopupBase\n variant=\"warning\"\n mode=\"confirm\"\n :confirm-label=\"$t('COMPONENTS.ORGANISMS.VC_POPUP.CONFIRM')\"\n :cancel-label=\"$t('COMPONENTS.ORGANISMS.VC_POPUP.CANCEL')\"\n confirm-as-text\n :title=\"title\"\n @close=\"$emit('close')\"\n @confirm=\"$emit('confirm')\"\n >\n <template\n v-if=\"$slots.header\"\n #header\n >\n <slot name=\"header\" />\n </template>\n <slot />\n </VcPopupBase>\n</template>\n<!-- eslint-disable @typescript-eslint/no-explicit-any -->\n<script lang=\"ts\" setup>\nimport VcPopupBase from \"@shell/_internal/popup/common/vc-popup-base.vue\";\n\nexport interface Props {\n title?: string;\n}\n\nexport interface Emits {\n (event: \"close\"): void;\n (event: \"confirm\"): void;\n}\n\ndefineProps<Props>();\n\ndefineEmits<Emits>();\n\ndefineSlots<{\n header: (props: any) => any;\n default: (props: any) => any;\n}>();\n</script>\n","<template>\n <VcPopupBase\n variant=\"error\"\n mode=\"acknowledge\"\n :action-label=\"$t('COMPONENTS.ORGANISMS.VC_POPUP.OK')\"\n :title=\"title\"\n @close=\"$emit('close')\"\n >\n <template\n v-if=\"$slots.header\"\n #header\n >\n <slot name=\"header\" />\n </template>\n <slot />\n </VcPopupBase>\n</template>\n<!-- eslint-disable @typescript-eslint/no-explicit-any -->\n<script lang=\"ts\" setup>\nimport VcPopupBase from \"@shell/_internal/popup/common/vc-popup-base.vue\";\n\nexport interface Props {\n title?: string;\n}\n\nexport interface Emits {\n (event: \"close\"): void;\n}\n\ndefineProps<Props>();\n\ndefineEmits<Emits>();\n\ndefineSlots<{\n header: (props: any) => any;\n default: (props: any) => any;\n}>();\n</script>\n","<template>\n <VcPopupBase\n variant=\"info\"\n mode=\"acknowledge\"\n :action-label=\"$t('COMPONENTS.ORGANISMS.VC_POPUP.OK')\"\n :title=\"title\"\n @close=\"$emit('close')\"\n >\n <template\n v-if=\"$slots.header\"\n #header\n >\n <slot name=\"header\" />\n </template>\n <slot />\n </VcPopupBase>\n</template>\n<!-- eslint-disable @typescript-eslint/no-explicit-any -->\n<script lang=\"ts\" setup>\nimport VcPopupBase from \"@shell/_internal/popup/common/vc-popup-base.vue\";\n\nexport interface Props {\n title?: string;\n}\n\nexport interface Emits {\n (event: \"close\"): void;\n}\n\ndefineProps<Props>();\n\ndefineEmits<Emits>();\n\ndefineSlots<{\n header: (props: any) => any;\n default: (props: any) => any;\n}>();\n</script>\n","import { registerPopupPreset } from \"@core/composables/usePopup/preset-registry\";\nimport vcPopupWarning from \"@shell/_internal/popup/common/vc-popup-warning.vue\";\nimport vcPopupError from \"@shell/_internal/popup/common/vc-popup-error.vue\";\nimport vcPopupInfo from \"@shell/_internal/popup/common/vc-popup-info.vue\";\n\n/**\n * Registers shell popup preset components (warning, error, info) with the core popup registry.\n * Called once during framework plugin install.\n */\nexport function registerPopupPresets(): void {\n registerPopupPreset(\"warning\", vcPopupWarning);\n registerPopupPreset(\"error\", vcPopupError);\n registerPopupPreset(\"info\", vcPopupInfo);\n}\n","import { App, shallowReactive, DefineComponent } from \"vue\";\nimport type { PopupPlugin, UsePopupProps, UsePopupInternal } from \"@core/composables/usePopup/types\";\nimport { PopupPluginKey } from \"@core/composables/usePopup/keys\";\nimport { setPopupPluginInstance } from \"@core/composables/usePopup/singleton\";\nimport { registerPopupPresets } from \"@shell/_internal/popup/register-presets\";\n\n// Re-export for backward compatibility\nexport { popupPluginInstance } from \"@core/composables/usePopup/singleton\";\n\nexport const VcPopupHandler = {\n install(app: App) {\n const popups = shallowReactive<(UsePopupProps<DefineComponent> & UsePopupInternal)[]>([]);\n\n const popupPlugin: PopupPlugin = {\n popups,\n };\n\n app.config.globalProperties.$popupPlugin = popupPlugin;\n app.provide(PopupPluginKey, popupPlugin);\n setPopupPluginInstance(popupPlugin);\n registerPopupPresets();\n },\n};\n","/**\r\n * Component Default Values for VC-Shell Framework\r\n * Centralized storage for default prop values across components\r\n */\r\n\r\nexport const COMPONENT_DEFAULTS = {\r\n input: {\r\n maxlength: 1024,\r\n debounce: 0,\r\n type: \"text\" as const,\r\n autocomplete: \"off\" as const,\r\n },\r\n\r\n select: {\r\n debounce: 500,\r\n pageSize: 20,\r\n searchable: true,\r\n clearable: true,\r\n },\r\n\r\n table: {\r\n pageSize: 20,\r\n pageSizes: [10, 20, 50, 100] as readonly number[],\r\n selectable: false,\r\n multiselect: false,\r\n stickyHeader: true,\r\n },\r\n\r\n pagination: {\r\n pageSize: 20,\r\n visiblePages: 5,\r\n },\r\n\r\n textarea: {\r\n rows: 3,\r\n maxlength: 4096,\r\n },\r\n\r\n editor: {\r\n minHeight: 200,\r\n maxHeight: 500,\r\n },\r\n\r\n tooltip: {\r\n delay: 300,\r\n placement: \"top\" as const,\r\n },\r\n\r\n modal: {\r\n closeOnEscape: true,\r\n closeOnOverlayClick: true,\r\n },\r\n\r\n notification: {\r\n duration: 5000,\r\n position: \"top-right\" as const,\r\n },\r\n\r\n dashboard: {\r\n columns: 12,\r\n rowHeight: 80,\r\n gap: 20,\r\n },\r\n} as const;\r\n\r\n/**\r\n * Type for accessing component defaults\r\n */\r\nexport type ComponentDefaults = typeof COMPONENT_DEFAULTS;\r\n\r\n/**\r\n * Helper to get defaults for a specific component\r\n */\r\nexport function getComponentDefaults<K extends keyof ComponentDefaults>(componentName: K): ComponentDefaults[K] {\r\n return COMPONENT_DEFAULTS[componentName];\r\n}\r\n","export default function debounce(func: (...args: any[]) => void, delay: number): (...args: unknown[]) => void {\r\n let timer: number | null = null;\r\n\r\n return function (...args: unknown[]): void {\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n\r\n timer = window.setTimeout(() => {\r\n timer = null;\r\n func(...args);\r\n }, delay);\r\n };\r\n}\r\n","export default function delay(func: (...args: unknown[]) => void, delay = 0): void {\r\n setTimeout(func, delay);\r\n}\r\n","const resultsMap = new WeakMap();\r\n\r\nexport default function once(func: (...args: unknown[]) => void): (...args: unknown[]) => unknown {\r\n return function (...args: unknown[]): unknown {\r\n if (!resultsMap.has(func)) {\r\n const result = func(...args);\r\n resultsMap.set(func, result);\r\n }\r\n return resultsMap.get(func);\r\n };\r\n}\r\n","export default function throttle(func: (...args: unknown[]) => void, delay: number): (...args: unknown[]) => void {\r\n let wasThrottled = false;\r\n\r\n return function (...args: unknown[]): void {\r\n if (!wasThrottled) {\r\n func(...args);\r\n wasThrottled = true;\r\n setTimeout(() => {\r\n wasThrottled = false;\r\n }, delay);\r\n }\r\n };\r\n}\r\n","import debounce from \"@core/composables/useFunctions/debounce\";\r\nimport delay from \"@core/composables/useFunctions/delay\";\r\nimport once from \"@core/composables/useFunctions/once\";\r\nimport throttle from \"@core/composables/useFunctions/throttle\";\r\n\r\nexport interface UseFunctionsReturn {\r\n debounce: typeof debounce;\r\n delay: typeof delay;\r\n once: typeof once;\r\n throttle: typeof throttle;\r\n}\r\n\r\n/** @deprecated Use UseFunctionsReturn instead */\r\nexport type IUseFunctions = UseFunctionsReturn;\r\n\r\nexport function useFunctions(): UseFunctionsReturn {\r\n return {\r\n debounce,\r\n delay,\r\n once,\r\n throttle,\r\n };\r\n}\r\n","import { computed, ComputedRef, getCurrentScope, onScopeDispose } from \"vue\";\nimport { PushNotification } from \"@core/api/platform\";\nimport { useNotificationStore } from \"@core/notifications\";\nimport { orderBy } from \"lodash-es\";\nimport { createLogger } from \"@core/utilities\";\n\nconst logger = createLogger(\"use-notifications\");\n\nexport interface UseNotificationsReturn {\n readonly notifications: ComputedRef<PushNotification[]>;\n readonly moduleNotifications: ComputedRef<PushNotification[]>;\n loadFromHistory(take?: number): Promise<void>;\n addNotification(message: PushNotification): void;\n markAsRead(message: PushNotification): void;\n markAllAsRead(): void;\n setNotificationHandler(handler: (notification: PushNotification) => void): void;\n}\n\n/** @deprecated Use UseNotificationsReturn instead */\nexport type INotifications = UseNotificationsReturn;\n\n/**\n * @deprecated Use `useBladeNotifications()` for blade-level subscriptions\n * or `useNotificationStore()` for direct store access.\n */\nexport function useNotifications(notifyType?: string | string[]): UseNotificationsReturn {\n if (import.meta.env.DEV) {\n logger.warn(\n \"[vc-shell] useNotifications() is deprecated. Use useBladeNotifications() instead. \" +\n \"See: MIGRATION_GUIDE.md#notifications\",\n );\n }\n\n const store = useNotificationStore();\n const types = notifyType ? (Array.isArray(notifyType) ? notifyType : [notifyType]) : [];\n\n let handler: ((msg: PushNotification) => void) | undefined;\n\n // Subscribe if types provided\n let unsub: (() => void) | undefined;\n if (types.length) {\n unsub = store.subscribe({\n types,\n handler: (msg) => handler?.(msg),\n });\n\n if (getCurrentScope()) {\n onScopeDispose(() => unsub?.());\n }\n }\n\n const moduleNotifications = computed(() => {\n if (!types.length) return [];\n return store.realtime.value.filter(\n (item) => item.isNew && item.notifyType != null && types.includes(item.notifyType),\n );\n });\n\n return {\n notifications: computed(() => orderBy(store.history.value, [\"created\"], [\"desc\"])),\n moduleNotifications,\n loadFromHistory: store.loadHistory,\n addNotification: store.ingest,\n markAsRead: store.markAsRead,\n markAllAsRead: store.markAllAsRead,\n setNotificationHandler: (fn) => {\n handler = fn;\n },\n };\n}\n","import { readonly, ref, type Ref, type DeepReadonly } from \"vue\";\nimport { HasLoading } from \"@core/composables/useLoading\";\nimport { parseError, DisplayableError } from \"@core/utilities/error\";\nimport { setPendingErrorNotification } from \"@core/utilities/pendingErrorNotifications\";\nimport { createLogger } from \"@core/utilities\";\n\n// Lazy-resolved reference to the notification singleton.\n// We avoid a top-level import of `@core/notifications/notification`\n// because that module may transitively pull in UI components (@ui/components) which\n// import from @core/composables — creating a circular dependency at module load time.\nlet _notification: typeof import(\"@core/notifications/notification\").notification | undefined;\n\nconst logger = createLogger(\"use-async\");\n\nexport type AsyncAction<Payload = void, Result = void> = (payload?: Payload, ...rest: any[]) => Promise<Result>;\n\nexport interface UseAsyncOptions {\n /**\n * Show error notification on failure. Default: true.\n *\n * Notifications are deferred via setTimeout(0) so that ErrorInterceptor\n * can cancel them when it catches the same error for blade banner display.\n * This prevents duplicate toast+banner for load errors while still\n * showing toasts for save/delete errors caught by module try/catch.\n */\n notify?: boolean;\n /** Notification timeout in ms. Default: 8000 */\n notifyTimeout?: number;\n}\n\nexport interface UseAsyncReturn<Payload = void, Result = void> extends HasLoading {\n action: AsyncAction<Payload, Result>;\n /** Reactive error state — set on failure, cleared on next invocation */\n error: DeepReadonly<Ref<DisplayableError | null>>;\n}\n\n/** @deprecated Use UseAsyncReturn instead */\nexport type UseAsync<Payload = void, Result = void> = UseAsyncReturn<Payload, Result>;\n\nexport function useAsync<Payload = void, Result = void>(\n innerAction: AsyncAction<Payload, Result>,\n options?: UseAsyncOptions,\n): UseAsyncReturn<Payload, Result> {\n const loading = ref(false);\n const error = ref<DisplayableError | null>(null);\n\n const shouldNotify = options?.notify !== false;\n const notifyTimeout = options?.notifyTimeout ?? 8000;\n\n async function action(payload?: Payload, ...rest: any[]): Promise<Result> {\n loading.value = true;\n error.value = null;\n\n try {\n return await innerAction(payload, ...rest);\n } catch (e) {\n const parsed = parseError(e);\n error.value = parsed;\n logger.error(\"Async action failed:\", e);\n\n if (shouldNotify && e && typeof e === \"object\") {\n const notifId = `async-error-${parsed.message.slice(0, 80)}`;\n\n // Defer notification so ErrorInterceptor can cancel it\n // when onErrorCaptured fires (synchronously, before setTimeout(0) callback)\n const timerId = setTimeout(async () => {\n if (!_notification) {\n const mod = await import(\"@core/notifications/notification\");\n _notification = mod.notification;\n }\n _notification.error(parsed.message, {\n timeout: notifyTimeout,\n notificationId: notifId,\n });\n }, 0);\n\n setPendingErrorNotification(e, timerId, notifId);\n }\n\n throw e;\n } finally {\n loading.value = false;\n }\n }\n\n return {\n loading: readonly(loading),\n error: readonly(error),\n action,\n };\n}\n","export interface IAuthApiBase {\r\n authToken: string;\r\n setAuthToken(token: string): void;\r\n getBaseUrl(defaultUrl: string, baseUrl: string): string;\r\n}\r\n\r\nexport interface UseApiClientReturn<ApiClient extends IAuthApiBase> {\r\n getApiClient: () => Promise<ApiClient>;\r\n}\r\n\r\n/** @deprecated Use UseApiClientReturn instead */\r\nexport type UseApiClient<ApiClient extends IAuthApiBase> = UseApiClientReturn<ApiClient>;\r\n\r\nexport function useApiClient<ApiClient extends IAuthApiBase>(\r\n c: new (baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> }) => ApiClient,\r\n): UseApiClientReturn<ApiClient> {\r\n async function getApiClient() {\r\n const client = new c();\r\n return client;\r\n }\r\n\r\n return {\r\n getApiClient,\r\n };\r\n}\r\n","import { computed, ComputedRef, Ref } from \"vue\";\r\n\r\nexport interface HasLoading {\r\n loading: Readonly<Ref<boolean>>;\r\n}\r\n\r\nexport type UseLoadingReturn = ComputedRef<boolean>;\r\n\r\nexport function useLoading(...args: Readonly<Ref<boolean>>[]): UseLoadingReturn {\r\n return computed(() => args.some((item) => item.value));\r\n}\r\n","import { useAsync } from \"@core/composables/useAsync\";\nimport { useApiClient } from \"@core/composables/useApiClient\";\nimport { computed, Ref, ref, ComputedRef, onMounted } from \"vue\";\nimport { SettingClient } from \"@core/api/platform\";\nimport { useLoading } from \"@core/composables/useLoading\";\n\ninterface IUISetting {\n contrast_logo?: string;\n logo?: string;\n title?: string;\n avatar?: string;\n role?: string;\n}\n\nexport interface UseSettingsReturn {\n readonly uiSettings: Ref<IUISetting>;\n readonly loading: ComputedRef<boolean>;\n applySettings: (args: { logo?: string; title?: string; avatar?: string; role?: string }) => void;\n}\n\n/** @deprecated Use UseSettingsReturn instead */\nexport type IUseSettings = UseSettingsReturn;\n\nexport function useSettings(): UseSettingsReturn {\n const uiSettings = ref<IUISetting | undefined>();\n const customSettingsApplied = ref(false);\n\n const { getApiClient } = useApiClient(SettingClient);\n\n const { loading, action: getUiCustomizationSettings } = useAsync(async () => {\n if (customSettingsApplied.value) return;\n\n const result = await (await getApiClient()).getUICustomizationSetting();\n const settings = await JSON.parse(result.defaultValue ?? null);\n\n if (settings && !uiSettings.value) {\n uiSettings.value = {\n contrast_logo: settings.contrast_logo,\n logo: settings.logo,\n title: settings.title,\n };\n }\n });\n\n function applySettings(args: { logo?: string; title?: string; avatar?: string; role?: string }) {\n customSettingsApplied.value = true;\n uiSettings.value = {\n ...uiSettings.value,\n logo: args.logo,\n title: args.title,\n avatar: args.avatar,\n role: args.role,\n };\n }\n\n onMounted(async () => {\n if (!uiSettings.value && !customSettingsApplied.value) {\n await getUiCustomizationSettings();\n }\n });\n\n return {\n uiSettings: computed(() => uiSettings.value ?? {}),\n applySettings,\n loading: useLoading(loading),\n };\n}\n","import { computed, ref, ComputedRef } from \"vue\";\nimport * as _ from \"lodash-es\";\nimport type { ICommonAsset } from \"@core/types\";\nimport { createLogger } from \"@core/utilities\";\n\nconst logger = createLogger(\"use-assets\");\n\n/** Maximum number of concurrent uploads */\nconst MAX_CONCURRENT_UPLOADS = 4;\n\nexport interface UseAssetsReturn {\n upload: (files: FileList, uploadPath: string, startingSortOrder?: number) => Promise<ICommonAsset[]>;\n remove: (filesToDelete: ICommonAsset[], initialAssetArr: ICommonAsset[]) => ICommonAsset[];\n edit: (updatedFiles: ICommonAsset[], initialAssetArr: ICommonAsset[]) => ICommonAsset[];\n loading: ComputedRef<boolean>;\n}\n\n/** @deprecated Use UseAssetsReturn instead */\nexport type IUseAssets = UseAssetsReturn;\n\n/**\n * Uploads a single file and returns the asset\n */\nasync function uploadSingleFile(\n file: File,\n uploadPath: string,\n index: number,\n startingSortOrder?: number,\n): Promise<ICommonAsset | null> {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n const result = await fetch(`/api/assets?folderUrl=/${uploadPath}`, {\n method: \"POST\",\n body: formData,\n });\n\n const response = await result.json();\n\n if (response?.length) {\n const uploadedFile = response[0];\n uploadedFile.createdDate = new Date();\n uploadedFile.sortOrder =\n startingSortOrder !== undefined && startingSortOrder >= 0 ? startingSortOrder + index + 1 : 0;\n uploadedFile.url = uploadedFile.url ? decodeURI(uploadedFile.url) : \"\";\n\n if (\"size\" in uploadedFile) {\n uploadedFile.size = file.size;\n }\n\n return uploadedFile;\n }\n\n return null;\n}\n\n/**\n * Processes items in batches with concurrency limit\n */\nasync function processBatched<T, R>(\n items: T[],\n processor: (item: T, index: number) => Promise<R>,\n concurrency: number,\n): Promise<R[]> {\n const results: R[] = [];\n\n for (let i = 0; i < items.length; i += concurrency) {\n const batch = items.slice(i, i + concurrency);\n const batchResults = await Promise.all(batch.map((item, batchIndex) => processor(item, i + batchIndex)));\n results.push(...batchResults);\n }\n\n return results;\n}\n\nexport function useAssets(): UseAssetsReturn {\n const loading = ref(false);\n\n if (import.meta.env?.DEV) {\n console.warn(\n \"[useAssets] is deprecated. Use useAssetsManager(ref, options) instead. \" + \"See migration guide #32.\",\n );\n }\n\n async function upload(files: FileList, uploadPath: string, startingSortOrder?: number): Promise<ICommonAsset[]> {\n try {\n loading.value = true;\n\n const fileArray = Array.from(files);\n\n // Upload files in parallel batches\n const uploadResults = await processBatched(\n fileArray,\n (file, index) => uploadSingleFile(file, uploadPath, index, startingSortOrder),\n MAX_CONCURRENT_UPLOADS,\n );\n\n // Filter out null results and return successful uploads\n return uploadResults.filter((asset): asset is ICommonAsset => asset !== null);\n } catch (error) {\n logger.error(\"Upload failed:\", error);\n throw error;\n } finally {\n loading.value = false;\n }\n }\n\n function remove(filesToDelete: ICommonAsset[], initialAssetArr: ICommonAsset[], assetKey = \"url\"): ICommonAsset[] {\n try {\n loading.value = true;\n\n let updatedAssetArr = _.cloneDeep(initialAssetArr) || [];\n\n if (updatedAssetArr && updatedAssetArr.length && filesToDelete.length > 0) {\n updatedAssetArr = _.differenceWith(updatedAssetArr, filesToDelete, (x, y) => x[assetKey] === y[assetKey]);\n }\n\n return updatedAssetArr;\n } catch (error) {\n logger.error(\"Remove failed:\", error);\n throw error;\n } finally {\n loading.value = false;\n }\n }\n\n function edit(updatedFiles: ICommonAsset[], initialAssetArr: ICommonAsset[]): ICommonAsset[] {\n // When all items are passed (e.g. reorder), preserve the order of updatedFiles.\n // When a subset is passed (e.g. single asset edit), update in place within initial order.\n if (updatedFiles.length === initialAssetArr.length) {\n return updatedFiles.map((file) => ({ ...file }));\n }\n\n const updatedAssetArr = _.cloneDeep(initialAssetArr) || [];\n\n if (updatedAssetArr && updatedAssetArr.length) {\n updatedFiles.forEach((updatedFile) => {\n const index = updatedAssetArr.findIndex((asset) => asset.url === updatedFile.url);\n if (index !== -1) {\n updatedAssetArr[index] = { ...updatedAssetArr[index], ...updatedFile };\n }\n });\n }\n\n return updatedAssetArr;\n }\n\n return {\n upload,\n remove,\n edit,\n loading: computed(() => loading.value),\n };\n}\n","import { computed, ref, watch, Ref, ComputedRef } from \"vue\";\nimport { createLogger } from \"@core/utilities\";\n\nconst logger = createLogger(\"use-assets-manager\");\n\nexport interface AssetLike {\n url?: string;\n name?: string;\n sortOrder?: number;\n [key: string]: any;\n}\n\nexport interface UseAssetsManagerOptions {\n uploadPath: () => string;\n confirmRemove?: () => Promise<boolean> | boolean;\n assetKey?: string;\n concurrency?: number;\n}\n\nexport interface UseAssetsManagerReturn {\n items: Ref<AssetLike[]>;\n upload: (files: FileList, startingSortOrder?: number) => Promise<void>;\n remove: (item: AssetLike) => Promise<void>;\n removeMany: (items: AssetLike[]) => Promise<void>;\n reorder: (items: AssetLike[]) => void;\n updateItem: (item: AssetLike) => void;\n loading: ComputedRef<boolean>;\n}\n\n/** Default concurrency for parallel uploads */\nconst DEFAULT_CONCURRENCY = 4;\n\n/**\n * Uploads a single file and returns the asset\n */\nasync function uploadSingleFile(\n file: File,\n uploadPath: string,\n index: number,\n startingSortOrder?: number,\n): Promise<AssetLike | null> {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n const normalizedPath = uploadPath.startsWith(\"/\") ? uploadPath.slice(1) : uploadPath;\n const result = await fetch(`/api/assets?folderUrl=/${normalizedPath}`, {\n method: \"POST\",\n body: formData,\n });\n\n const response = await result.json();\n\n if (response?.length) {\n const uploadedFile = response[0];\n uploadedFile.createdDate = new Date();\n uploadedFile.sortOrder =\n startingSortOrder !== undefined && startingSortOrder >= 0 ? startingSortOrder + index + 1 : 0;\n uploadedFile.url = uploadedFile.url ? decodeURI(uploadedFile.url) : \"\";\n\n if (\"size\" in uploadedFile) {\n uploadedFile.size = file.size;\n }\n\n return uploadedFile;\n }\n\n return null;\n}\n\n/**\n * Processes items in batches with concurrency limit\n */\nasync function processBatched<T, R>(\n items: T[],\n processor: (item: T, index: number) => Promise<R>,\n concurrency: number,\n): Promise<R[]> {\n const results: R[] = [];\n\n for (let i = 0; i < items.length; i += concurrency) {\n const batch = items.slice(i, i + concurrency);\n const batchResults = await Promise.all(batch.map((item, batchIndex) => processor(item, i + batchIndex)));\n results.push(...batchResults);\n }\n\n return results;\n}\n\nexport function useAssetsManager(\n source: Ref<AssetLike[] | undefined | null>,\n options: UseAssetsManagerOptions,\n): UseAssetsManagerReturn {\n const _loading = ref(false);\n\n // Internal ref owns the data. Synced from source via watch,\n // written back to source after every mutation.\n // This avoids reactivity issues when source is a WritableComputed\n // wrapping deeply nested properties (e.g. item.value.productData.assets).\n const _items = ref<AssetLike[]>(source.value ?? []);\n\n // Sync: source → internal (e.g. when parent reloads data)\n watch(\n () => source.value,\n (newVal) => {\n _items.value = newVal ?? [];\n },\n { deep: true, immediate: true },\n );\n\n /** Write internal state back to source */\n function _sync() {\n source.value = _items.value;\n }\n\n const items: Ref<AssetLike[]> = _items;\n const loading = computed(() => _loading.value);\n\n const concurrency = options.concurrency ?? DEFAULT_CONCURRENCY;\n const assetKey = options.assetKey ?? \"url\";\n\n async function upload(files: FileList, startingSortOrder?: number): Promise<void> {\n try {\n _loading.value = true;\n\n const fileArray = Array.from(files);\n const uploadPath = options.uploadPath();\n\n const uploadResults = await processBatched(\n fileArray,\n (file, index) => uploadSingleFile(file, uploadPath, index, startingSortOrder),\n concurrency,\n );\n\n const successfulUploads = uploadResults.filter((asset): asset is AssetLike => asset !== null);\n _items.value = [..._items.value, ...successfulUploads];\n _sync();\n } catch (error) {\n logger.error(\"Upload failed:\", error);\n throw error;\n } finally {\n _loading.value = false;\n }\n }\n\n async function remove(item: AssetLike): Promise<void> {\n await removeMany([item]);\n }\n\n async function removeMany(itemsToRemove: AssetLike[]): Promise<void> {\n if (options.confirmRemove) {\n const confirmed = await options.confirmRemove();\n if (!confirmed) return;\n }\n\n const keysToRemove = new Set(itemsToRemove.map((i) => i[assetKey]));\n _items.value = _items.value.filter((i) => !keysToRemove.has(i[assetKey]));\n _sync();\n }\n\n function reorder(newOrder: AssetLike[]): void {\n _items.value = newOrder.map((item) => ({ ...item }));\n _sync();\n }\n\n function updateItem(item: AssetLike): void {\n const index = _items.value.findIndex((existing) => existing[assetKey] === item[assetKey]);\n if (index !== -1) {\n const updated = [..._items.value];\n updated[index] = { ..._items.value[index], ...item };\n _items.value = updated;\n _sync();\n }\n }\n\n return {\n items,\n upload,\n remove,\n removeMany,\n reorder,\n updateItem,\n loading,\n };\n}\n","import { onBeforeMount, onBeforeUnmount, unref, ComputedRef } from \"vue\";\r\n\r\nexport interface UseBeforeUnloadReturn {\r\n modified: ComputedRef<boolean>;\r\n}\r\n\r\n/**\r\n * Prevents the user from closing the tab if the modified flag is set to true.\r\n * @param modified - The flag that indicates whether the user has made changes.\r\n * @returns The modified flag.\r\n */\r\nexport const useBeforeUnload = (modified: ComputedRef<boolean>): UseBeforeUnloadReturn => {\r\n onBeforeMount(() => {\r\n window.addEventListener(\"beforeunload\", preventUnload);\r\n });\r\n\r\n onBeforeUnmount(() => {\r\n window.removeEventListener(\"beforeunload\", preventUnload);\r\n });\r\n\r\n function preventUnload(event: Event) {\r\n if (!unref(modified)) return;\r\n event.preventDefault();\r\n }\r\n\r\n return {\r\n modified,\r\n };\r\n};\r\n","import type { IBaseProperty, IBasePropertyValue } from \"./types\";\n\nexport function isEmptyValue(value: unknown): boolean {\n if (value === undefined || value === null) return true;\n if (typeof value === \"number\" && isNaN(value)) return true;\n if (typeof value === \"string\" && value.trim().length === 0) return true;\n if (typeof value === \"object\" && Object.keys(value).length === 0) return true;\n return false;\n}\n\nexport function isMultilanguageProperty(property: IBaseProperty): boolean {\n return Boolean(property.multilanguage);\n}\n\nexport function isMultivalueProperty(property: IBaseProperty): boolean {\n return Boolean(property.multivalue);\n}\n\nexport function isDictionaryProperty(property: IBaseProperty): boolean {\n return Boolean(property.dictionary);\n}\n\nexport function isMeasureProperty(property: IBaseProperty): boolean {\n return property.valueType === \"Measure\";\n}\n\nexport function isColorProperty(property: IBaseProperty): boolean {\n return property.valueType === \"Color\";\n}\n\nexport function createValue(params: Partial<IBasePropertyValue>): IBasePropertyValue {\n return { isInherited: false, ...params };\n}\n\nexport function cleanEmptyValues(property: IBaseProperty, locale?: string): void {\n if (!property.values) return;\n\n if (isMultilanguageProperty(property) && locale) {\n property.values = property.values.filter((v) => v.languageCode !== locale);\n } else {\n property.values = [];\n }\n\n if (property.values.length > 0 && property.values.every((v) => isEmptyValue(v.value))) {\n property.values = [];\n }\n}\n","import type { IBaseProperty, IBasePropertyValue, PropertyDisplayValue } from \"../types\";\nimport type { PropertyValueStrategy, PropertyInputValue, SetContext } from \"./types\";\nimport { isEmptyValue, isMultilanguageProperty, isMultivalueProperty, createValue, cleanEmptyValues } from \"../utils\";\n\nexport const regularStrategy: PropertyValueStrategy = {\n get(property: IBaseProperty, locale: string): PropertyDisplayValue {\n if (isMultilanguageProperty(property)) {\n if (isMultivalueProperty(property)) {\n return (property.values?.filter((v) => v.languageCode === locale) ?? []) as IBasePropertyValue[];\n }\n // Find by locale first, then fallback to value without languageCode\n const val =\n property.values?.find((v) => v.languageCode === locale) ?? property.values?.find((v) => !v.languageCode);\n return (val?.value as string) ?? \"\";\n }\n\n if (isMultivalueProperty(property)) {\n return (property.values ?? []) as IBasePropertyValue[];\n }\n\n return (property.values?.[0]?.value as string) ?? \"\";\n },\n\n set(property: IBaseProperty, value: PropertyInputValue, context: SetContext): void {\n if (!Array.isArray(value) && isEmptyValue(value)) {\n cleanEmptyValues(property, context.locale);\n return;\n }\n\n if (isMultilanguageProperty(property)) {\n if (Array.isArray(value)) {\n const otherLocales = property.values?.filter((v) => v.languageCode !== context.locale) ?? [];\n const newValues = (value as IBasePropertyValue[]).map((item) =>\n createValue({ ...item, languageCode: context.locale }),\n );\n property.values = [...otherLocales, ...newValues];\n } else {\n const existing = property.values?.find((v) => v.languageCode === context.locale);\n if (existing) {\n existing.value = value as string;\n } else {\n if (!property.values) property.values = [];\n property.values.push(createValue({ value: value as string, languageCode: context.locale }));\n }\n }\n return;\n }\n\n if (Array.isArray(value)) {\n property.values = (value as IBasePropertyValue[]).map((item) => createValue(item));\n return;\n }\n\n if (property.values?.[0]) {\n Object.assign(property.values[0], { value });\n } else {\n property.values = [createValue({ value: value as string })];\n }\n },\n};\n","import type { IBaseProperty, PropertyDisplayValue } from \"../types\";\nimport type { PropertyValueStrategy, PropertyInputValue, SetContext } from \"./types\";\nimport { isMultilanguageProperty, createValue } from \"../utils\";\n\nexport const booleanStrategy: PropertyValueStrategy = {\n get(property: IBaseProperty, locale: string): PropertyDisplayValue {\n if (isMultilanguageProperty(property)) {\n const val =\n property.values?.find((v) => v.languageCode === locale) ?? property.values?.find((v) => !v.languageCode);\n return val?.value ?? false;\n }\n return property.values?.[0]?.value ?? false;\n },\n\n set(property: IBaseProperty, value: PropertyInputValue, _context: SetContext): void {\n if (property.values?.[0]) {\n Object.assign(property.values[0], { value });\n } else {\n property.values = [createValue({ value })];\n }\n },\n};\n","import type { IBaseProperty, IBasePropertyValue, IBasePropertyDictionaryItem, PropertyDisplayValue } from \"../types\";\nimport type { PropertyValueStrategy, PropertyInputValue, SetContext } from \"./types\";\nimport { isEmptyValue, isMultilanguageProperty, isMultivalueProperty, createValue, cleanEmptyValues } from \"../utils\";\n\nexport const dictionaryStrategy: PropertyValueStrategy = {\n get(property: IBaseProperty, locale: string): PropertyDisplayValue {\n if (isMultilanguageProperty(property)) {\n if (isMultivalueProperty(property)) {\n return (property.values?.filter((v) => v.languageCode === locale) ?? []) as IBasePropertyValue[];\n }\n // Find by locale first, then fallback to value without languageCode\n const val =\n property.values?.find((v) => v.languageCode === locale) ?? property.values?.find((v) => !v.languageCode);\n return (val?.valueId as string) ?? \"\";\n }\n\n if (isMultivalueProperty(property)) {\n return (property.values ?? []) as IBasePropertyValue[];\n }\n\n return (property.values?.[0]?.valueId as string) ?? \"\";\n },\n\n set(property: IBaseProperty, value: PropertyInputValue, context: SetContext): void {\n const { dictionary, locale } = context;\n\n // Empty value → clean up regardless of dictionary presence\n if (!Array.isArray(value) && isEmptyValue(value)) {\n cleanEmptyValues(property, locale);\n return;\n }\n\n if (!dictionary?.length) return;\n\n if (isMultilanguageProperty(property)) {\n setMultilanguageDictionary(property, value, dictionary, locale);\n } else {\n setSingleLanguageDictionary(property, value, dictionary);\n }\n },\n};\n\nfunction setMultilanguageDictionary(\n property: IBaseProperty,\n value: PropertyInputValue,\n dictionary: IBasePropertyDictionaryItem[],\n locale?: string,\n): void {\n if (Array.isArray(value)) {\n setMultilanguageMultivalueDictionary(\n property,\n value as (IBasePropertyDictionaryItem & { value: string })[],\n dictionary,\n );\n } else {\n setMultilanguageSingleValueDictionary(property, value as string, dictionary, locale);\n }\n}\n\nfunction setMultilanguageMultivalueDictionary(\n property: IBaseProperty,\n values: (IBasePropertyDictionaryItem & { value: string })[],\n dictionary: IBasePropertyDictionaryItem[],\n): void {\n property.values = values.flatMap((item) => {\n const dictItem = dictionary.find(\n (x) => x.id === (item as unknown as IBasePropertyValue).valueId || x.id === item.id,\n );\n\n if (dictItem?.localizedValues?.length) {\n return dictItem.localizedValues.map((locValue) =>\n createValue({\n propertyId: dictItem.propertyId,\n alias: dictItem.alias,\n languageCode: locValue.languageCode,\n value: locValue.value ?? dictItem.alias,\n valueId: dictItem.id,\n colorCode: dictItem.colorCode,\n }),\n );\n }\n\n return createValue(item as unknown as Partial<IBasePropertyValue>);\n });\n}\n\nfunction setMultilanguageSingleValueDictionary(\n property: IBaseProperty,\n value: string,\n dictionary: IBasePropertyDictionaryItem[],\n locale?: string,\n): void {\n const dictionaryItem = dictionary.find((x) => x.id === value);\n\n if (!dictionaryItem) {\n property.values = [];\n return;\n }\n\n if (dictionaryItem.localizedValues?.length) {\n property.values = dictionaryItem.localizedValues.map((locValue) =>\n createValue({\n propertyId: dictionaryItem.propertyId,\n alias: dictionaryItem.alias,\n languageCode: locValue.languageCode,\n value: locValue.value ?? dictionaryItem.alias,\n valueId: dictionaryItem.id,\n colorCode: dictionaryItem.colorCode,\n }),\n );\n } else {\n const existingLanguageCodes = [...new Set((property.values ?? []).map((v) => v.languageCode).filter(Boolean))];\n const languageCodes = existingLanguageCodes.length > 0 ? existingLanguageCodes : locale ? [locale] : [];\n\n property.values = languageCodes.map((langCode) =>\n createValue({\n propertyId: dictionaryItem.propertyId,\n alias: dictionaryItem.alias,\n languageCode: langCode,\n value: dictionaryItem.alias,\n valueId: dictionaryItem.id,\n colorCode: dictionaryItem.colorCode,\n }),\n );\n }\n}\n\nfunction setSingleLanguageDictionary(\n property: IBaseProperty,\n value: PropertyInputValue,\n dictionary: IBasePropertyDictionaryItem[],\n): void {\n if (Array.isArray(value)) {\n property.values = (value as (IBasePropertyDictionaryItem & { value: string })[]).flatMap((item) => {\n const dictItem = dictionary.find(\n (x) => x.id === (item as unknown as IBasePropertyValue).valueId || x.id === item.id,\n );\n\n if (dictItem) {\n return createValue({\n propertyId: dictItem.propertyId,\n alias: dictItem.alias,\n value: item.value ?? dictItem.alias,\n valueId: dictItem.id,\n colorCode: dictItem.colorCode,\n });\n }\n\n return createValue(item as unknown as Partial<IBasePropertyValue>);\n });\n } else {\n if (isEmptyValue(value)) {\n property.values = [];\n return;\n }\n\n const dictionaryItem = dictionary.find((x) => x.id === value);\n property.values = [\n createValue({\n propertyId: dictionaryItem?.propertyId,\n alias: dictionaryItem?.alias,\n value: (dictionaryItem as IBasePropertyDictionaryItem & { value: string })?.value ?? dictionaryItem?.alias,\n valueId: value as string,\n colorCode: dictionaryItem?.colorCode,\n }),\n ];\n }\n}\n","import type { IBaseProperty, PropertyDisplayValue } from \"../types\";\nimport type { PropertyValueStrategy, PropertyInputValue, SetContext } from \"./types\";\nimport { isEmptyValue, createValue, cleanEmptyValues } from \"../utils\";\n\nexport const measureStrategy: PropertyValueStrategy = {\n get(property: IBaseProperty, _locale: string): PropertyDisplayValue {\n return (property.values?.[0]?.value as string) ?? \"\";\n },\n\n set(property: IBaseProperty, value: PropertyInputValue, context: SetContext): void {\n if (isEmptyValue(value)) {\n cleanEmptyValues(property);\n return;\n }\n property.values = [createValue({ value, unitOfMeasureId: context.unitOfMeasureId })];\n },\n};\n","import type { IBaseProperty, IBasePropertyValue, PropertyDisplayValue } from \"../types\";\nimport type { PropertyValueStrategy, PropertyInputValue, SetContext } from \"./types\";\nimport { isEmptyValue, isMultivalueProperty, createValue, cleanEmptyValues } from \"../utils\";\n\nexport const colorStrategy: PropertyValueStrategy = {\n get(property: IBaseProperty, _locale: string): PropertyDisplayValue {\n if (isMultivalueProperty(property)) {\n return (property.values ?? []) as IBasePropertyValue[];\n }\n return (property.values?.[0]?.value as string) ?? \"\";\n },\n\n set(property: IBaseProperty, value: PropertyInputValue, context: SetContext): void {\n if (!Array.isArray(value) && isEmptyValue(value)) {\n cleanEmptyValues(property);\n return;\n }\n\n if (Array.isArray(value)) {\n property.values = (value as IBasePropertyValue[]).map((item) =>\n createValue({ ...item, value: item.value, colorCode: item.colorCode }),\n );\n } else {\n property.values = [createValue({ value, colorCode: context.colorCode })];\n }\n },\n};\n","import type { IBaseProperty } from \"../types\";\nimport type { PropertyValueStrategy } from \"./types\";\nimport { isMeasureProperty, isColorProperty, isDictionaryProperty } from \"../utils\";\nimport { regularStrategy } from \"./regular\";\nimport { booleanStrategy } from \"./boolean\";\nimport { dictionaryStrategy } from \"./dictionary\";\nimport { measureStrategy } from \"./measure\";\nimport { colorStrategy } from \"./color\";\n\nexport function resolveStrategy(property: IBaseProperty): PropertyValueStrategy {\n if (isMeasureProperty(property)) return measureStrategy;\n if (isColorProperty(property) && !isDictionaryProperty(property)) return colorStrategy;\n if (property.valueType === \"Boolean\") return booleanStrategy;\n if (isDictionaryProperty(property)) return dictionaryStrategy;\n return regularStrategy;\n}\n","import { useLoading } from \"@core/composables/useLoading\";\nimport { useAsync } from \"@core/composables/useAsync\";\nimport { resolveStrategy } from \"./strategies\";\nimport type {\n DynamicPropertiesOptions,\n UseDynamicPropertiesReturn,\n SetPropertyValueParams,\n IBaseProperty,\n IBasePropertyDictionaryItem,\n IBasePropertyDictionaryItemSearchCriteria,\n PropertyDisplayValue,\n} from \"./types\";\n\n// Re-export all types for backward compatibility\nexport * from \"./types\";\n\nexport function useDynamicProperties(options: DynamicPropertiesOptions): UseDynamicPropertiesReturn {\n const { searchDictionary, searchMeasurements } = options;\n\n const { loading: dictionaryItemsLoading, action: searchDictionaryItems } = useAsync<\n IBasePropertyDictionaryItemSearchCriteria,\n IBasePropertyDictionaryItem[] | undefined\n >(async (args) => {\n if (!args) return undefined;\n return await searchDictionary(args);\n });\n\n async function loadDictionaries(\n propertyId: string,\n keyword?: string,\n locale?: string,\n ): Promise<IBasePropertyDictionaryItem[] | undefined> {\n if (!propertyId) return undefined;\n\n const items = await searchDictionaryItems({\n propertyIds: [propertyId],\n keyword,\n skip: 0,\n });\n\n if (!locale || !items) return items;\n\n return items.map((item) => {\n const localizedValue = item.localizedValues?.find((loc) => loc.languageCode === locale)?.value;\n return { ...item, value: localizedValue ?? item.alias } as IBasePropertyDictionaryItem;\n });\n }\n\n async function loadMeasurements(measureId: string, _keyword?: string, locale?: string) {\n if (!measureId || !searchMeasurements) return undefined;\n return await searchMeasurements(measureId, locale);\n }\n\n function getPropertyValue(property: IBaseProperty, locale: string): PropertyDisplayValue {\n return resolveStrategy(property).get(property, locale);\n }\n\n function setPropertyValue(params: SetPropertyValueParams): void {\n const { property, value, ...context } = params;\n resolveStrategy(property).set(property, value, context);\n }\n\n return {\n getPropertyValue,\n setPropertyValue,\n loadDictionaries,\n loadMeasurements,\n loading: useLoading(dictionaryItemsLoading),\n };\n}\n","import { onFCP, onLCP, onCLS, onINP, onTTFB } from \"web-vitals\";\r\nimport type { Metric } from \"web-vitals\";\r\n\r\nexport interface IWebVitalsMetric {\r\n name: string;\r\n value: number;\r\n rating: \"good\" | \"needs-improvement\" | \"poor\";\r\n}\r\n\r\nexport type WebVitalsCallback = (metric: IWebVitalsMetric) => void;\r\n\r\n/**\r\n * Registers Core Web Vitals observers (FCP, LCP, CLS, INP, TTFB).\r\n * Call once per app session, typically after app.mount().\r\n *\r\n * @param callback - Optional custom handler. Defaults to console.warn in dev mode.\r\n * @returns void — side-effect only composable\r\n */\r\nexport function useWebVitals(callback?: WebVitalsCallback): void {\r\n const defaultCallback: WebVitalsCallback = (metric) => {\r\n if (import.meta.env.DEV) {\r\n const unit = metric.name === \"CLS\" ? \"\" : \"ms\";\r\n const value = metric.name === \"CLS\" ? metric.value.toFixed(4) : Math.round(metric.value);\r\n console.warn(`[web-vitals] ${metric.name}: ${value}${unit} (${metric.rating})`);\r\n }\r\n };\r\n\r\n const handler = (metric: Metric) => {\r\n (callback ?? defaultCallback)({\r\n name: metric.name,\r\n value: metric.value,\r\n rating: metric.rating,\r\n });\r\n };\r\n\r\n onFCP(handler);\r\n onLCP(handler);\r\n onCLS(handler);\r\n onINP(handler);\r\n onTTFB(handler);\r\n}\r\n","import { type ComputedRef, type Ref, onMounted, onUnmounted, inject } from \"vue\";\r\nimport { WidgetServiceKey, WidgetScopeKey } from \"@framework/injection-keys\";\r\nimport { BladeDescriptorKey } from \"@core/blade-navigation/types\";\r\nimport type { IWidget, IHeadlessWidgetFields, IWidgetTrigger } from \"@core/services/widget-service\";\r\nimport { createLogger, InjectionError } from \"@core/utilities\";\r\n\r\nconst logger = createLogger(\"use-blade-widgets\");\r\n\r\nexport interface HeadlessWidgetDeclaration {\r\n id: string;\r\n icon: string;\r\n title: string;\r\n badge?: Ref<number | string> | ComputedRef<number | string>;\r\n loading?: Ref<boolean> | ComputedRef<boolean>;\r\n disabled?: Ref<boolean> | ComputedRef<boolean> | boolean;\r\n isVisible?: ComputedRef<boolean> | Ref<boolean> | boolean;\r\n onClick?: () => void;\r\n onRefresh?: () => void | Promise<void>;\r\n}\r\n\r\nexport interface UseBladeWidgetsReturn {\r\n /** Call trigger.onRefresh on a specific widget */\r\n refresh: (widgetId: string) => void;\r\n /** Call trigger.onRefresh on all blade widgets that have a trigger */\r\n refreshAll: () => void;\r\n}\r\n\r\n/**\r\n * Declarative headless widget registration for blades.\r\n * Automatically registers on mount, unregisters on unmount.\r\n * Gets bladeId from blade context (BladeDescriptorKey).\r\n *\r\n * @example\r\n * ```ts\r\n * const { refreshAll } = useBladeWidgets([\r\n * { id: \"OffersWidget\", icon: \"lucide-tag\", title: \"OFFERS.TITLE\",\r\n * badge: count, onClick: () => openBlade({ name: \"Offers\" }) },\r\n * ]);\r\n * ```\r\n */\r\nexport function useBladeWidgets(widgets: HeadlessWidgetDeclaration[]): UseBladeWidgetsReturn {\r\n const _service = inject(WidgetServiceKey);\r\n if (!_service) {\r\n throw new InjectionError(\"WidgetService\");\r\n }\r\n const widgetService = _service;\r\n\r\n const descriptor = inject(BladeDescriptorKey, undefined);\r\n if (!descriptor) {\r\n throw new Error(\r\n \"[vc-shell] useBladeWidgets() requires blade context (BladeDescriptorKey). \" +\r\n \"It must be called inside a blade component rendered by VcBladeSlot.\",\r\n );\r\n }\r\n\r\n const bladeId = descriptor.value.id;\r\n\r\n onMounted(() => {\r\n for (const decl of widgets) {\r\n widgetService.registerWidget(buildWidget(decl), bladeId);\r\n }\r\n });\r\n\r\n onUnmounted(() => {\r\n for (const decl of widgets) {\r\n widgetService.unregisterWidget(decl.id, bladeId);\r\n }\r\n });\r\n\r\n function refresh(widgetId: string): void {\r\n const registered = widgetService.getWidgets(bladeId);\r\n const widget = registered.find((w) => w.id === widgetId);\r\n if (widget?.trigger?.onRefresh) {\r\n widget.trigger.onRefresh();\r\n } else {\r\n logger.warn(`Widget '${widgetId}' has no trigger.onRefresh registered.`);\r\n }\r\n }\r\n\r\n function refreshAll(): void {\r\n const registered = widgetService.getWidgets(bladeId);\r\n for (const widget of registered) {\r\n if (widget.trigger?.onRefresh) {\r\n widget.trigger.onRefresh();\r\n }\r\n }\r\n }\r\n\r\n return { refresh, refreshAll };\r\n}\r\n\r\n// ── Widget scope (for component-based external widgets) ─────────────────────\r\n\r\n// Re-export for backward compatibility (type moved to widget-service)\r\nexport type { IWidgetScope } from \"@core/services/widget-service\";\r\n\r\n/**\r\n * Registers a trigger contract (onRefresh, onClick, badge) for an external\r\n * component-based widget, so the hosting blade can call `refresh()` / `refreshAll()`.\r\n *\r\n * Uses provide/inject — no props or IDs needed. Must be called inside a widget\r\n * component rendered by WidgetContainer.\r\n *\r\n * @example\r\n * ```ts\r\n * // Inside an external widget component:\r\n * useWidgetTrigger({ onRefresh: loadData });\r\n * ```\r\n */\r\nexport function useWidgetTrigger(trigger: IWidgetTrigger): void {\r\n const scope = inject(WidgetScopeKey);\r\n if (!scope) {\r\n logger.warn(\"useWidgetTrigger() called outside WidgetContainer scope — trigger will not be registered.\");\r\n return;\r\n }\r\n scope.setTrigger(trigger);\r\n}\r\n\r\n// ── Internal ─────────────────────────────────────────────────────────────────\r\n\r\nfunction buildWidget(decl: HeadlessWidgetDeclaration): IWidget {\r\n const headless: IHeadlessWidgetFields = {\r\n icon: decl.icon,\r\n badge: decl.badge,\r\n loading: decl.loading,\r\n disabled: decl.disabled,\r\n onClick: decl.onClick,\r\n onRefresh: decl.onRefresh,\r\n };\r\n\r\n return {\r\n id: decl.id,\r\n title: decl.title,\r\n isVisible: decl.isVisible,\r\n headless,\r\n trigger: decl.onRefresh ? { onRefresh: decl.onRefresh } : undefined,\r\n };\r\n}\r\n","import { provide, inject, computed, toValue, isRef, type MaybeRefOrGetter, type ComputedRef } from \"vue\";\r\nimport { BladeContextKey } from \"@framework/injection-keys\";\r\nimport { InjectionError } from \"@core/utilities\";\r\n\r\n/**\r\n * Shallow-unwraps all ref/computed values in a record.\r\n * Plain values pass through unchanged.\r\n */\r\nfunction unwrapRecord(record: Record<string, unknown>): Record<string, unknown> {\r\n const result: Record<string, unknown> = {};\r\n for (const key of Object.keys(record)) {\r\n const val = record[key];\r\n result[key] = isRef(val) ? val.value : val;\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Exposes blade data for external widgets, extensions, and nested components.\r\n * Must be called in blade's `<script setup>`.\r\n *\r\n * All ref/computed values in the provided object are **automatically unwrapped**\r\n * so consumers can access them directly without `.value`.\r\n *\r\n * @example\r\n * ```ts\r\n * defineBladeContext({ item, disabled });\r\n * // consumer: ctx.value.item — already unwrapped, no .value needed\r\n * ```\r\n */\r\nexport function defineBladeContext(data: MaybeRefOrGetter<Record<string, unknown>>): void {\r\n provide(\r\n BladeContextKey,\r\n computed(() => unwrapRecord(toValue(data))),\r\n );\r\n}\r\n\r\n/**\r\n * Injects blade context provided by the nearest ancestor blade via `defineBladeContext`.\r\n * Returns a ComputedRef — access fields via `.value`.\r\n * Nested refs are already unwrapped by `defineBladeContext`.\r\n * Throws if no context is found.\r\n *\r\n * @example\r\n * ```ts\r\n * const ctx = injectBladeContext();\r\n * const entityId = computed(() => ctx.value.id as string);\r\n * ```\r\n */\r\nexport function injectBladeContext(): ComputedRef<Record<string, unknown>> {\r\n const ctx = inject<ComputedRef<Record<string, unknown>>>(BladeContextKey);\r\n if (!ctx) {\r\n throw new InjectionError(\"BladeContext\");\r\n }\r\n return ctx;\r\n}\r\n","import { ref, watch, Ref, computed, DeepReadonly, unref, isRef } from \"vue\";\nimport { cloneDeep, isEqualWith } from \"lodash-es\";\n\n/**\n * Custom comparator for deep equality that treats null, undefined, and \"\"\n * as semantically equivalent \"empty\" values.\n * This prevents false modification detection when APIs return null\n * but local state uses undefined or empty strings (common with language switching).\n */\nfunction isEmpty(value: unknown): boolean {\n return value === null || value === undefined || value === \"\";\n}\n\nfunction semanticEqual(a: unknown, b: unknown): boolean {\n return isEqualWith(a, b, (valA: unknown, valB: unknown) => {\n if (isEmpty(valA) && isEmpty(valB)) return true;\n return undefined; // fall back to default deep comparison\n });\n}\n\n/**\n * Return values from useModificationTracker.\n * @template T Type of the tracked value.\n */\nexport interface UseModificationTrackerReturn<T> {\n /**\n * Reactive reference to the current tracked value.\n * It can be changed directly or through v-model.\n */\n currentValue: Ref<T>;\n /**\n * Reactive reference to the pristine value.\n * It is a \"clean\" version representing the original, unmodified state.\n */\n pristineValue: Ref<T>;\n /**\n * Shows if currentValue has been modified compared to its \"pristine\" state.\n * Read-only.\n */\n isModified: DeepReadonly<Ref<boolean>>;\n /**\n * Resets the modification state.\n * The new \"pristine\" state will be set based on the current value of currentValue,\n * or based on `newBaselineValue` if provided.\n * `isModified` will become false.\n * @param newBaselineValue Optional new value (or Ref) that will become \"pristine\".\n */\n resetModificationState: (newBaselineValue?: T | Ref<T>) => void;\n}\n\n/**\n * Composable for tracking value changes (including deeply nested objects).\n *\n * @template T Type of the tracked value.\n * @param initialValueProp Initial value or Ref to it.\n * @returns {UseModificationTrackerReturn<T>} Object with `currentValue`, `isModified` and `resetModificationState`.\n */\nexport function useModificationTracker<T>(initialValueProp: T | Ref<T>): UseModificationTrackerReturn<T> {\n const getClonedUnreffedValue = (val: T | Ref<T>): T => cloneDeep(unref(val));\n\n const pristineValue = ref(getClonedUnreffedValue(initialValueProp)) as Ref<T>;\n const currentValue = ref(getClonedUnreffedValue(initialValueProp)) as Ref<T>;\n const isModified = ref(false);\n\n if (isRef(initialValueProp)) {\n watch(\n initialValueProp,\n (newExternalInitialValue) => {\n // When the external initialValueProp (Ref) changes,\n // we need to decide if we should update currentValue.\n const wasModified = !semanticEqual(currentValue.value, pristineValue.value);\n\n // Always update the \"pristine\" value (pristineValue), to reflect the new external source.\n pristineValue.value = cloneDeep(newExternalInitialValue);\n\n // If the user has not made any changes until this point,\n // we also update currentValue.\n // This prevents false triggering of isModified when loading data asynchronously.\n if (!wasModified) {\n currentValue.value = cloneDeep(newExternalInitialValue);\n }\n // If the user has already made changes (wasModified = true), we do not update currentValue,\n // to not overwrite their changes. isModified will remain true, because\n // currentValue will now be different from the new pristineValue.\n },\n { deep: true }, // Deep tracking, if initialValueProp is a Ref to an object/array\n );\n }\n\n watch(\n [currentValue, pristineValue], // Track changes in currentValue or pristineValue\n ([newCurrentVal, newPristineVal]) => {\n isModified.value = !semanticEqual(newCurrentVal, newPristineVal);\n },\n { deep: true },\n );\n\n const resetModificationState = (newBaselineValueInput?: T | Ref<T>) => {\n if (newBaselineValueInput !== undefined) {\n const newClonedBase = getClonedUnreffedValue(newBaselineValueInput);\n pristineValue.value = newClonedBase;\n currentValue.value = cloneDeep(newClonedBase); // Reset currentValue to the new baseline\n } else {\n pristineValue.value = cloneDeep(currentValue.value);\n }\n // Synchronously reset so that code running in the same tick (e.g. onBeforeClose)\n // sees the updated value before the deep watcher fires.\n isModified.value = false;\n };\n\n return {\n currentValue,\n pristineValue,\n isModified: computed(() => isModified.value),\n resetModificationState,\n };\n}\n","<template>\n <VcBlade\n :title=\"options?.asset?.name\"\n :subtitle=\"t('ASSETS.PAGES.DETAILS.SUBTITLE')\"\n :toolbar-items=\"bladeToolbar\"\n >\n <!-- Blade contents -->\n <div class=\"tw-flex tw-grow-1 tw-border-t tw-border-solid tw-border-t-[--assets-details-border]\">\n <div class=\"assets-details__content tw-grow tw-basis-0 tw-w-full tw-overflow-hidden\">\n <VcContainer :no-padding=\"true\">\n <div class=\"tw-p-4\">\n <VcForm>\n <div class=\"assets-details__header\">\n <template v-if=\"isImage(defaultAsset.name)\">\n <VcImage\n :src=\"defaultAsset.url\"\n size=\"xl\"\n :bordered=\"true\"\n class=\"tw-shrink-0\"\n ></VcImage>\n </template>\n <template v-else>\n <div class=\"assets-details__file-preview tw-shrink-0\">\n <div\n class=\"assets-details__file-badge\"\n :style=\"{ backgroundColor: getExtensionColor(defaultAsset.name) }\"\n >\n {{ getExtensionLabel(defaultAsset.name) }}\n </div>\n </div>\n </template>\n <div class=\"assets-details__meta\">\n <VcField\n :label=\"t('ASSETS.PAGES.DETAILS.FIELDS.SIZE')\"\n :model-value=\"readableSize(defaultAsset.size)\"\n />\n <VcField\n :label=\"t('ASSETS.PAGES.DETAILS.FIELDS.CREATED_DATE')\"\n :model-value=\"defaultAsset.createdDate\"\n type=\"date-ago\"\n />\n <VcField\n :label=\"t('ASSETS.PAGES.DETAILS.FIELDS.URL')\"\n :model-value=\"defaultAsset.url\"\n :display-value=\"defaultAsset.name\"\n type=\"link\"\n copyable\n />\n </div>\n </div>\n\n <Field\n v-if=\"!options?.hiddenFields?.includes('name')\"\n v-slot=\"{ errorMessage, handleChange, errors }\"\n :label=\"t('ASSETS.PAGES.DETAILS.FIELDS.NAME.TITLE')\"\n name=\"asset_name\"\n rules=\"required\"\n :model-value=\"defaultAsset.name\"\n >\n <VcInput\n v-model=\"assetNameClean\"\n class=\"tw-mb-4\"\n :label=\"t('ASSETS.PAGES.DETAILS.FIELDS.NAME.TITLE')\"\n clearable\n required\n :error=\"!!errors.length\"\n :error-message=\"errorMessage\"\n :placeholder=\"t('ASSETS.PAGES.DETAILS.FIELDS.NAME.PLACEHOLDER')\"\n :disabled=\"readonly\"\n @update:model-value=\"handleChange\"\n ></VcInput>\n </Field>\n <VcInput\n v-if=\"assetType === 'Image' && !options?.hiddenFields?.includes('altText')\"\n v-model=\"defaultAsset.altText\"\n class=\"tw-mb-4\"\n :label=\"t('ASSETS.PAGES.DETAILS.FIELDS.ALT.TITLE')\"\n clearable\n :placeholder=\"t('ASSETS.PAGES.DETAILS.FIELDS.ALT.PLACEHOLDER')\"\n :tooltip=\"t('ASSETS.PAGES.DETAILS.FIELDS.ALT.TOOLTIP')\"\n :disabled=\"readonly\"\n ></VcInput>\n <VcTextarea\n v-if=\"!options?.hiddenFields?.includes('description')\"\n v-model=\"defaultAsset.description\"\n class=\"tw-mb-4\"\n :label=\"t('ASSETS.PAGES.DETAILS.FIELDS.DESCRIPTION.TITLE')\"\n :placeholder=\"t('ASSETS.PAGES.DETAILS.FIELDS.DESCRIPTION.PLACEHOLDER')\"\n :disabled=\"readonly\"\n ></VcTextarea>\n </VcForm>\n </div>\n </VcContainer>\n </div>\n </div>\n </VcBlade>\n</template>\n\n<script lang=\"ts\">\nimport { __registerBladeConfig } from \"@vc-shell/framework\";\n__registerBladeConfig(\"AssetsDetails\", { });\n</script>\n<script lang=\"ts\" setup>\nimport type { IBladeToolbar } from \"@core/types\";\nimport type { AssetLike } from \"@core/composables/useAssetsManager\";\nimport { computed, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { VcBlade } from \"@ui/components/organisms/vc-blade\";\nimport { VcContainer } from \"@ui/components/atoms/vc-container\";\nimport { VcForm } from \"@ui/components/molecules/vc-form\";\nimport { VcImage } from \"@ui/components/atoms/vc-image\";\nimport { VcInput } from \"@ui/components/molecules/vc-input\";\nimport { VcTextarea } from \"@ui/components/molecules/vc-textarea\";\nimport { VcField } from \"@ui/components/molecules/vc-field\";\nimport { isImage, readableSize, getExtensionColor, getExtensionLabel } from \"@core/utilities/assets\";\nimport { useIsFormValid, Field, useForm, useIsFormDirty } from \"vee-validate\";\nimport { useBlade } from \"@core/composables/useBlade\";\n\ninterface AssetsDetailsOptions {\n asset: AssetLike;\n disabled?: boolean;\n hiddenFields?: string[];\n assetEditHandler?: (defaultAsset: AssetLike) => void;\n assetRemoveHandler?: (defaultAsset: AssetLike) => Promise<void>;\n}\n\ndefineOptions({ name: \"AssetsDetails\" });\n\n\nconst { options, closeSelf } = useBlade<AssetsDetailsOptions>();\n\nuseForm({ validateOnMount: false });\nconst isValid = useIsFormValid();\nconst isDirty = useIsFormDirty();\nconst { t } = useI18n({ useScope: \"global\" });\nconst defaultAsset = ref<AssetLike>({ ...options.value?.asset });\n\nconst readonly = computed(() => options.value?.disabled);\n\nconst assetNameClean = computed({\n get() {\n const name = defaultAsset.value.name;\n if (!name) return \"\";\n const dotIndex = name.lastIndexOf(\".\");\n return dotIndex > 0 ? name.slice(0, dotIndex) : name;\n },\n set(value) {\n const name = defaultAsset.value.name;\n if (!name) return;\n const dotIndex = name.lastIndexOf(\".\");\n const ext = dotIndex > 0 ? name.slice(dotIndex) : \"\";\n defaultAsset.value.name = value ? value + ext : \"\";\n },\n});\n\nconst isDisabled = computed(() => {\n return !isDirty.value || !isValid.value;\n});\n\nconst bladeToolbar = ref<IBladeToolbar[]>([\n {\n id: \"save\",\n title: t(\"ASSETS.PAGES.DETAILS.TOOLBAR.SAVE\"),\n icon: \"lucide-save\",\n async clickHandler() {\n if (options.value?.assetEditHandler && typeof options.value?.assetEditHandler === \"function\") {\n await options.value?.assetEditHandler(defaultAsset.value);\n closeSelf();\n }\n },\n disabled: computed(() => isDisabled.value || readonly.value),\n },\n {\n id: \"delete\",\n title: t(\"ASSETS.PAGES.DETAILS.TOOLBAR.DELETE\"),\n icon: \"lucide-trash-2\",\n async clickHandler() {\n if (options.value?.assetRemoveHandler && typeof options.value?.assetRemoveHandler === \"function\") {\n await options.value?.assetRemoveHandler(defaultAsset.value);\n closeSelf();\n }\n },\n disabled: computed(() => readonly.value),\n },\n]);\n\nconst assetType = computed(() => defaultAsset.value?.typeId);\n</script>\n\n<style lang=\"scss\">\n:root {\n --assets-details-border: var(--neutrals-200);\n}\n\n.assets-details__header {\n @apply tw-flex tw-mb-4;\n @apply tw-overflow-hidden;\n}\n\n.assets-details__meta {\n @apply tw-flex tw-flex-col tw-gap-3;\n @apply tw-ml-6 tw-min-w-0 tw-flex-1;\n @apply tw-overflow-hidden;\n}\n\n.assets-details__file-preview {\n @apply tw-w-[var(--image-size-xl)] tw-h-[var(--image-size-xl)];\n @apply tw-rounded-[var(--image-border-radius)];\n @apply tw-border tw-border-solid tw-border-[color:var(--image-border-color)];\n @apply tw-bg-[var(--neutrals-50)];\n @apply tw-flex tw-flex-col tw-items-center tw-justify-center;\n @apply tw-gap-2;\n @apply tw-overflow-hidden;\n}\n\n.assets-details__file-badge {\n @apply tw-flex tw-items-center tw-justify-center;\n @apply tw-px-3.5 tw-py-1.5;\n @apply tw-rounded-md;\n @apply tw-text-sm tw-font-bold tw-tracking-wide;\n @apply tw-text-white;\n}\n</style>\n","import _AssetsDetails from \"@modules/assets/components/assets-details/assets-details.vue\";\n\nexport const AssetsDetails = _AssetsDetails as typeof _AssetsDetails;\n","import { defineAppModule } from \"@core/plugins/modularity\";\nimport * as components from \"@modules/assets/components\";\n\nexport const AssetsDetailsModule = defineAppModule({ blades: components });\n\nexport default components;\n","<template>\n <VcBlade\n :title=\"bladeTitle\"\n :toolbar-items=\"bladeToolbar\"\n width=\"70%\"\n >\n <div\n v-loading=\"isLoading\"\n class=\"tw-relative tw-h-full tw-flex-1\"\n @dragover.prevent.stop=\"dragOver\"\n @dragleave.prevent=\"dragLeave\"\n @drop.prevent.stop=\"onDrop\"\n >\n <!-- @vue-generic {AssetLike} -->\n <VcDataTable\n v-model:selection=\"selectedItems\"\n :items=\"defaultAssets\"\n state-key=\"assets_manager\"\n :reorderable-rows=\"!readonly\"\n :selection-mode=\"!readonly ? 'multiple' : undefined\"\n :row-actions=\"!readonly ? actionBuilder : undefined\"\n :empty-state=\"{\n icon: 'lucide-cloud-upload',\n title: $t('ASSETS_MANAGER.EMPTY.UPLOAD_ASSETS'),\n actionLabel: $t('ASSETS_MANAGER.EMPTY.UPLOAD'),\n actionHandler: toggleUploader,\n }\"\n class=\"tw-h-full tw-w-full\"\n @row-click=\"({ data }) => onItemClick(data)\"\n @row-reorder=\"sortAssets\"\n >\n <VcColumn\n id=\"url\"\n :title=\"t('ASSETS_MANAGER.TABLE.HEADER.IMAGE')\"\n width=\"10%\"\n always-visible\n >\n <template #body=\"{ data }\">\n <div class=\"tw-flex tw-items-center tw-justify-center\">\n <template v-if=\"isImage(data.name ?? '')\">\n <VcImage\n :bordered=\"true\"\n size=\"s\"\n aspect=\"1x1\"\n :src=\"data.url\"\n background=\"contain\"\n ></VcImage>\n </template>\n <template v-else>\n <div\n class=\"assets-manager__file-badge\"\n :style=\"{ backgroundColor: getExtensionColor(data.name ?? '') }\"\n >\n {{ getExtensionLabel(data.name ?? \"\") }}\n </div>\n </template>\n </div>\n </template>\n </VcColumn>\n\n <VcColumn\n id=\"name\"\n :title=\"t('ASSETS_MANAGER.TABLE.HEADER.NAME')\"\n width=\"20%\"\n always-visible\n />\n\n <VcColumn\n id=\"size\"\n :title=\"t('ASSETS_MANAGER.TABLE.HEADER.SIZE')\"\n width=\"20%\"\n always-visible\n >\n <template #body=\"{ data }\">\n <div>\n {{ readableSize(data.size ?? 0) }}\n </div>\n </template>\n </VcColumn>\n\n <VcColumn\n id=\"sortOrder\"\n :title=\"t('ASSETS_MANAGER.TABLE.HEADER.SORT_ORDER')\"\n width=\"25%\"\n always-visible\n >\n <template #body=\"{ data }\">\n <div>\n {{ data.sortOrder }}\n </div>\n </template>\n </VcColumn>\n\n <VcColumn\n id=\"createdDate\"\n :title=\"t('ASSETS_MANAGER.TABLE.HEADER.CREATED_DATE')\"\n width=\"25%\"\n type=\"date-ago\"\n always-visible\n />\n </VcDataTable>\n </div>\n\n <input\n ref=\"uploader\"\n type=\"file\"\n hidden\n multiple\n name=\"assets_manager\"\n @change=\"inputUpload\"\n />\n </VcBlade>\n</template>\n\n<script lang=\"ts\">\nimport { __registerBladeConfig } from \"@vc-shell/framework\";\n__registerBladeConfig(\"AssetsManager\", { });\n</script>\n<script setup lang=\"ts\">\nimport type { AssetLike, UseAssetsManagerReturn } from \"@core/composables/useAssetsManager\";\nimport { IBladeToolbar } from \"@core/types\";\nimport { ref, computed, unref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { isImage, readableSize, getExtensionColor, getExtensionLabel } from \"@core/utilities/assets\";\nimport { useBlade } from \"@core/composables/useBlade\";\nimport { createLogger } from \"@core/utilities\";\nimport { TableAction } from \"@ui/components/organisms/vc-data-table/types\";\nimport { VcBlade, VcColumn, VcDataTable, VcImage } from \"@ui/components\";\nimport { vLoading } from \"@core/directives\";\n\nconst logger = createLogger(\"assets-manager\");\n\ninterface AssetsManagerOptions {\n title?: string;\n manager: UseAssetsManagerReturn;\n disabled?: boolean;\n hiddenFields?: string[];\n}\n\ndefineOptions({ name: \"AssetsManager\" });\n\n\nconst { options, openBlade } = useBlade<AssetsManagerOptions>();\n\nconst { t } = useI18n({ useScope: \"global\" });\n\nconst manager = computed(() => options.value!.manager);\n\nconst defaultAssets = computed(() => manager.value.items.value ?? []);\n\nconst isLoading = computed(() => manager.value.loading.value);\n\nconst bladeTitle = computed(() => options.value?.title || t(\"ASSETS_MANAGER.TITLE\"));\n\nconst isDragging = ref(false);\nconst uploader = ref();\nconst selectedItems = ref<AssetLike[]>([]);\nconst readonly = computed(() => options.value?.disabled);\n\nconst bladeToolbar = ref<IBladeToolbar[]>([\n {\n id: \"add\",\n title: computed(() => t(\"ASSETS_MANAGER.TOOLBAR.ADD\")),\n icon: \"lucide-plus\",\n clickHandler() {\n toggleUploader();\n },\n disabled: computed(() => readonly.value),\n isVisible: computed(() => !readonly.value),\n },\n {\n id: \"delete\",\n title: computed(() => t(\"ASSETS_MANAGER.TOOLBAR.DELETE\")),\n icon: \"lucide-trash-2\",\n async clickHandler() {\n await manager.value.removeMany(selectedItems.value);\n },\n disabled: computed(() => !selectedItems.value.length || readonly.value),\n isVisible: computed(() => !readonly.value),\n },\n]);\n\nasync function sortAssets(event: { dragIndex: number; dropIndex: number; value: AssetLike[] }) {\n if (event.dragIndex !== event.dropIndex) {\n const sorted = event.value.map((item, index) => {\n item.sortOrder = index;\n return item;\n });\n\n manager.value.reorder(sorted);\n }\n}\n\nfunction dragOver() {\n if (!readonly.value) {\n isDragging.value = true;\n }\n}\n\nfunction dragLeave() {\n if (!readonly.value) {\n isDragging.value = false;\n }\n}\n\nasync function onDrop(event: DragEvent) {\n if (!readonly.value) {\n const fileList = event.dataTransfer?.files;\n\n if (fileList && fileList.length) {\n try {\n await upload(fileList);\n } catch (error) {\n logger.error(\"Failed to upload dropped files:\", error);\n throw error;\n }\n }\n isDragging.value = false;\n }\n}\n\nfunction toggleUploader() {\n uploader.value.value = \"\";\n uploader.value.click();\n}\n\nasync function upload(files: FileList) {\n if (!files || files.length === 0) return;\n\n const existingNames = new Set((defaultAssets.value ?? []).map((asset) => asset.name).filter(Boolean));\n\n const transfer = new DataTransfer();\n for (const file of Array.from(files)) {\n let fileName = file.name;\n\n if (existingNames.has(fileName)) {\n const ext = fileName.includes(\".\") ? `.${fileName.split(\".\").pop()}` : \"\";\n const base = fileName.slice(0, fileName.length - ext.length);\n let i = 1;\n while (existingNames.has(fileName)) {\n fileName = `${base}_${i}${ext}`;\n i++;\n }\n }\n\n existingNames.add(fileName);\n transfer.items.add(new File([file], fileName, { type: file.type }));\n }\n\n try {\n const maxSortOrder = defaultAssets.value.reduce((max, asset) => Math.max(max, asset.sortOrder ?? 0), -1);\n await manager.value.upload(transfer.files, maxSortOrder);\n } catch (error) {\n logger.error(\"Failed to upload assets:\", error);\n throw error;\n }\n}\n\nasync function inputUpload(event: Event) {\n const target = event.target as HTMLInputElement;\n const fileList = target.files;\n\n if (fileList && fileList.length) {\n try {\n await upload(fileList);\n } catch (error) {\n logger.error(\"Failed to upload files:\", error);\n throw error;\n }\n }\n}\n\nfunction onItemClick(item: AssetLike) {\n openBlade({\n name: \"AssetsDetails\",\n options: {\n asset: unref(item),\n disabled: readonly.value,\n hiddenFields: options.value?.hiddenFields,\n assetEditHandler: (asset: AssetLike) => {\n manager.value.updateItem(asset);\n },\n assetRemoveHandler: async (asset: AssetLike) => {\n await manager.value.remove(asset);\n },\n },\n }).catch((error) => {\n logger.error(\"Failed to open AssetsDetails blade:\", error);\n });\n}\n\nconst actionBuilder = (): TableAction[] => {\n return [\n {\n icon: \"lucide-trash-2\",\n title: computed(() => t(\"ASSETS_MANAGER.TABLE.ACTIONS.DELETE\")),\n type: \"danger\",\n async clickHandler(item: AssetLike) {\n await manager.value.remove(item);\n selectedItems.value = [];\n },\n },\n ];\n};\n</script>\n\n<style lang=\"scss\">\n:root {\n --assets-manager-empty-icon-color: var(--primary-400);\n --assets-manager-mobile-border: var(--info-100);\n}\n\n.assets-manager__file-badge {\n @apply tw-flex tw-items-center tw-justify-center;\n @apply tw-px-2.5 tw-py-1;\n @apply tw-rounded;\n @apply tw-text-xs tw-font-bold tw-tracking-wide;\n @apply tw-text-white;\n}\n</style>\n","import _AssetsManager from \"@modules/assets-manager/components/assets-manager/assets-manager.vue\";\n\nexport const AssetsManager = _AssetsManager as typeof _AssetsManager;\n","import { defineAppModule } from \"@core/plugins/modularity\";\nimport * as components from \"@modules/assets-manager/components\";\n\nexport const AssetsManagerModule = defineAppModule({ blades: components });\n\nexport * from \"@modules/assets-manager/components\";\n","import { watch, readonly, ref } from \"vue\";\r\nimport { useNetwork } from \"@vueuse/core\";\r\nimport { notification } from \"@core/notifications/notification\";\r\nimport { createLogger } from \"@core/utilities\";\r\n\r\nconst logger = createLogger(\"connection-status\");\r\n\r\nconst OFFLINE_NOTIFICATION_ID = \"vc-framework-offline-status\";\r\n\r\n// Module-level singleton state\r\nconst _isSetup = ref(false);\r\nconst _isOnline = ref(true);\r\n\r\nexport interface UseConnectionStatusReturn {\r\n isOnline: Readonly<typeof _isOnline>;\r\n}\r\n\r\n/** @deprecated Use UseConnectionStatusReturn instead */\r\nexport type UseConnectionStatus = UseConnectionStatusReturn;\r\n\r\nexport function useConnectionStatus(): UseConnectionStatusReturn {\r\n if (!_isSetup.value && typeof window !== \"undefined\") {\r\n _isSetup.value = true;\r\n\r\n const { isOnline } = useNetwork();\r\n\r\n watch(\r\n isOnline,\r\n (online) => {\r\n _isOnline.value = online;\r\n\r\n if (!online) {\r\n logger.warn(\"Network connection lost\");\r\n notification.warning(\"You are currently offline. Some features may be unavailable.\", {\r\n notificationId: OFFLINE_NOTIFICATION_ID,\r\n timeout: false,\r\n });\r\n document.documentElement.classList.add(\"vc-offline\");\r\n } else {\r\n logger.info(\"Network connection restored\");\r\n notification.remove(OFFLINE_NOTIFICATION_ID);\r\n document.documentElement.classList.remove(\"vc-offline\");\r\n }\r\n },\r\n { immediate: true },\r\n );\r\n }\r\n\r\n return {\r\n isOnline: readonly(_isOnline),\r\n };\r\n}\r\n","import { computed, ref, watch, type Ref } from \"vue\";\nimport { createLogger } from \"@core/utilities\";\nimport { notification } from \"@core/notifications/notification\";\nimport { useConnectionStatus } from \"@core/composables/useConnectionStatus\";\n\nconst logger = createLogger(\"slow-network\");\nconst SLOW_REQUEST_THRESHOLD_MS = 10000;\nconst SLOW_EFFECTIVE_TYPES = [\"slow-2g\", \"2g\"];\nlet _connectionHandler: (() => void) | null = null;\n\nconst SLOW_NETWORK_NOTIFICATION_ID = \"vc-framework-slow-network\";\nconst DISMISS_DELAY_MS = 3000;\n// TODO: move to i18n locale files when useConnectionStatus also migrates to i18n\nconst SLOW_NETWORK_MESSAGE = \"Your network is slow or the server is taking longer than usual. Please be patient.\";\nlet _dismissTimer: ReturnType<typeof setTimeout> | null = null;\n\nfunction showSlowNotification() {\n notification.warning(SLOW_NETWORK_MESSAGE, {\n notificationId: SLOW_NETWORK_NOTIFICATION_ID,\n timeout: false,\n });\n}\n\nfunction hideSlowNotification() {\n notification.remove(SLOW_NETWORK_NOTIFICATION_ID);\n}\n\n// ── Module-level singleton state ────────────────────────────────────\nconst _isSetup = ref(false);\nconst _slowRequestCount = ref(0);\nconst _isSlowEffectiveType = ref(false);\nconst _pendingTimers = new Map<string, ReturnType<typeof setTimeout>>();\nconst _trackedSlowIds = new Set<string>();\n\nconst isSlowNetwork = computed(() => _slowRequestCount.value > 0 || _isSlowEffectiveType.value);\n\nexport interface UseSlowNetworkDetectionReturn {\n isSlowNetwork: Readonly<Ref<boolean>>;\n trackRequest(id: string): void;\n untrackRequest(id: string): void;\n}\n\nfunction trackRequest(id: string): void {\n const timer = setTimeout(() => {\n _slowRequestCount.value++;\n _pendingTimers.delete(id);\n _trackedSlowIds.add(id);\n }, SLOW_REQUEST_THRESHOLD_MS);\n _pendingTimers.set(id, timer);\n}\n\nfunction untrackRequest(id: string): void {\n const timer = _pendingTimers.get(id);\n if (timer != null) {\n // Request completed before threshold — cancel timer\n clearTimeout(timer);\n _pendingTimers.delete(id);\n } else if (_trackedSlowIds.has(id)) {\n // Timer already fired — decrement slow count\n _slowRequestCount.value = Math.max(0, _slowRequestCount.value - 1);\n _trackedSlowIds.delete(id);\n }\n // else: unknown id — no-op (defensive)\n}\n\nexport function useSlowNetworkDetection(): UseSlowNetworkDetectionReturn {\n if (!_isSetup.value && typeof window !== \"undefined\") {\n _isSetup.value = true;\n\n const connection = (navigator as any).connection;\n if (connection) {\n _connectionHandler = () => {\n const isSlow = SLOW_EFFECTIVE_TYPES.includes(connection.effectiveType);\n if (isSlow !== _isSlowEffectiveType.value) {\n logger.info(`Connection type: ${connection.effectiveType} → ${isSlow ? \"slow\" : \"normal\"}`);\n }\n _isSlowEffectiveType.value = isSlow;\n };\n connection.addEventListener(\"change\", _connectionHandler);\n _connectionHandler(); // initial check\n }\n\n const { isOnline } = useConnectionStatus();\n\n watch(isSlowNetwork, (slow) => {\n if (slow) {\n if (_dismissTimer != null) {\n clearTimeout(_dismissTimer);\n _dismissTimer = null;\n }\n if (isOnline.value) {\n logger.info(\"Slow network detected — showing notification\");\n showSlowNotification();\n }\n } else {\n _dismissTimer = setTimeout(() => {\n logger.info(\"Network recovered — hiding notification\");\n hideSlowNotification();\n _dismissTimer = null;\n }, DISMISS_DELAY_MS);\n }\n });\n\n watch(isOnline, (online) => {\n if (!online) {\n if (_dismissTimer != null) {\n clearTimeout(_dismissTimer);\n _dismissTimer = null;\n }\n hideSlowNotification();\n } else if (isSlowNetwork.value) {\n showSlowNotification();\n }\n });\n }\n\n return {\n isSlowNetwork,\n trackRequest,\n untrackRequest,\n };\n}\n\n/** Test-only: reset singleton state between tests. No-op in production builds. */\nexport const _resetForTest: (() => void) | undefined = import.meta.env.VITEST\n ? () => {\n const connection = (navigator as any).connection;\n if (connection && _connectionHandler) {\n connection.removeEventListener(\"change\", _connectionHandler);\n _connectionHandler = null;\n }\n if (_dismissTimer != null) {\n clearTimeout(_dismissTimer);\n _dismissTimer = null;\n }\n _isSetup.value = false;\n _slowRequestCount.value = 0;\n _isSlowEffectiveType.value = false;\n for (const timer of _pendingTimers.values()) {\n clearTimeout(timer);\n }\n _pendingTimers.clear();\n _trackedSlowIds.clear();\n }\n : undefined;\n","import { Router } from \"vue-router\";\nimport { useUserManagement } from \"@core/composables/useUserManagement\";\nimport { notification } from \"@core/notifications/notification\";\nimport { createLogger } from \"@core/utilities\";\nimport { useSlowNetworkDetection } from \"@core/composables/useSlowNetworkDetection\";\n\nconst logger = createLogger(\"interceptors\");\n\nexport function registerInterceptors(router: Router) {\n const { fetch: originalFetch } = window;\n const { signOut, isAuthenticated } = useUserManagement();\n const { trackRequest, untrackRequest } = useSlowNetworkDetection();\n let requestCounter = 0;\n\n window.fetch = async (...args) => {\n /**\n * Overrides the global `fetch` function to handle API calls in demo mode.\n * If `window.__DEMO_MODE__` is true, the fetch is cancelled and a warning is logged.\n * Otherwise, the original `fetch` function is called.\n * @param args - The arguments passed to the `fetch` function.\n * @returns A promise that resolves to the response from the API call.\n */\n if (window.__DEMO_MODE__) {\n logger.warn(\"CANCELLED FETCH WHILE IN __DEMO_MODE__: \", ...args);\n logger.warn(\"Please logout and add APP_PLATFORM_URL into .env file of your application to enable API calls\");\n return new Promise((resolve: any) => {\n /**\n * This conditions are mocking login, currentuser API calls for demo purposes.\n */\n if (args[0] === \"/api/platform/security/login\") {\n resolve({\n status: 200,\n text: async () => JSON.stringify({ succeeded: true }),\n });\n } else if (args[0] === \"/api/platform/security/currentuser\") {\n notification.warning(\n \"You are currently in DEMO mode until the first page refresh. \\n All API calls are disabled. Please add APP_PLATFORM_URL to your application's .env file to enable API calls.\",\n {\n timeout: 10000,\n },\n );\n resolve({\n status: 200,\n text: async () => JSON.stringify({ id: \"demo_user_id\", userName: \"DEMO_USER\" }),\n });\n } else {\n resolve({\n status: 200,\n text: async () => JSON.stringify({}),\n });\n }\n });\n } else {\n const [resource, init] = args;\n\n function isApiRequest(input: RequestInfo | URL): boolean {\n const raw = typeof input === \"string\" ? input : input instanceof Request ? input.url : input.toString();\n\n try {\n const url = new URL(raw, window.location.origin);\n return url.origin === window.location.origin && url.pathname.startsWith(\"/api/\");\n } catch {\n return false;\n }\n }\n\n // Scope hardening only to platform API calls\n if (!isApiRequest(resource)) {\n return originalFetch(...args);\n }\n\n if (!navigator.onLine) {\n logger.warn(\"Request blocked: browser is offline\", resource);\n return Promise.reject(new Error(\"Network unavailable. Please check your connection.\"));\n }\n\n const requestId = String(++requestCounter);\n trackRequest(requestId);\n\n // Always enforce timeout, but preserve external cancellation semantics\n const controller = new AbortController();\n let didTimeout = false;\n const timeoutId = setTimeout(() => {\n didTimeout = true;\n controller.abort();\n }, 30000);\n\n const externalSignal = init?.signal;\n const abortFromExternal = () => controller.abort();\n if (externalSignal?.aborted) {\n abortFromExternal();\n } else if (externalSignal) {\n externalSignal.addEventListener(\"abort\", abortFromExternal, { once: true });\n }\n\n try {\n const response = await originalFetch(resource, {\n ...(init || {}),\n signal: controller.signal,\n });\n\n /**\n * If the response is unauthorized, logout the user\n */\n if (response.status === 401) {\n if (isAuthenticated.value) {\n signOut().then(() => {\n redirect(router);\n notification.error(\n \"Access Denied: Your session has expired or you do not have the necessary permissions.\\nPlease log in again or contact the administrator for assistance.\",\n );\n });\n }\n }\n\n return response;\n } catch (e) {\n if (didTimeout) {\n throw new Error(\"Request timed out. Please try again.\");\n }\n throw e;\n } finally {\n untrackRequest(requestId);\n clearTimeout(timeoutId);\n if (externalSignal) {\n externalSignal.removeEventListener(\"abort\", abortFromExternal);\n }\n }\n }\n };\n\n return window.fetch;\n}\n\nfunction redirect(router: Router) {\n // redirect to login page if it exists\n if (router && router.getRoutes().some((route) => route.path === \"/login\" || route.name === \"Login\")) {\n if (router.currentRoute.value.path !== \"/login\") {\n router.push(\"/login\");\n }\n } else {\n // Use the origin to redirect to the root of the application if no login page exists.\n // Usually this is the case when the application is used as a module.\n window.location.href = window.location.origin + \"/\";\n }\n}\n","import type { App } from \"vue\";\r\nimport { notification } from \"@core/notifications/notification\";\r\nimport { parseError } from \"@core/utilities/error\";\r\nimport { createLogger } from \"@core/utilities\";\r\n\r\nconst logger = createLogger(\"global-error-handler\");\r\n\r\nfunction errorKey(err: unknown): string {\r\n if (err instanceof Error) return `${err.name}:${err.message}`;\r\n return String(err);\r\n}\r\n\r\nconst recentErrors = new Map<string, number>();\r\nconst DEDUP_WINDOW_MS = 3000;\r\ntype WindowWithVcGlobalHandlers = Window & { __VC_GLOBAL_ERROR_HANDLERS_INSTALLED__?: boolean };\r\n\r\nfunction isDuplicate(err: unknown): boolean {\r\n const key = errorKey(err);\r\n const now = Date.now();\r\n const last = recentErrors.get(key);\r\n if (last && now - last < DEDUP_WINDOW_MS) return true;\r\n recentErrors.set(key, now);\r\n if (recentErrors.size > 50) {\r\n for (const [k, t] of recentErrors) {\r\n if (now - t > DEDUP_WINDOW_MS) recentErrors.delete(k);\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function setupGlobalErrorHandlers(app: App): void {\r\n // 1. Vue component errors — chain to existing handler\r\n const existingHandler = app.config.errorHandler;\r\n app.config.errorHandler = (err, instance, info) => {\r\n logger.error(\"Unhandled Vue error:\", err, \"\\nInfo:\", info);\r\n if (!isDuplicate(err)) {\r\n const parsed = parseError(err);\r\n notification.error(parsed.message, {\r\n timeout: 8000,\r\n notificationId: `global-vue-${errorKey(err)}`,\r\n });\r\n }\r\n existingHandler?.(err, instance, info);\r\n };\r\n\r\n if (typeof window === \"undefined\") return;\r\n const win = window as WindowWithVcGlobalHandlers;\r\n\r\n // Idempotency guard: prevent duplicated listeners when framework is installed multiple times\r\n if (win.__VC_GLOBAL_ERROR_HANDLERS_INSTALLED__) return;\r\n win.__VC_GLOBAL_ERROR_HANDLERS_INSTALLED__ = true;\r\n\r\n const onUnhandledRejection = (event: PromiseRejectionEvent) => {\r\n logger.error(\"Unhandled rejection:\", event.reason);\r\n if (!isDuplicate(event.reason)) {\r\n const parsed = parseError(event.reason);\r\n notification.error(parsed.message, {\r\n timeout: 8000,\r\n notificationId: `global-rejection-${errorKey(event.reason)}`,\r\n });\r\n }\r\n };\r\n\r\n // 2. Unhandled promise rejections\r\n window.addEventListener(\"unhandledrejection\", onUnhandledRejection);\r\n\r\n const onWindowError = (event: ErrorEvent) => {\r\n if (!event.error) return;\r\n logger.error(\"Uncaught error:\", event.error);\r\n if (!isDuplicate(event.error)) {\r\n const parsed = parseError(event.error);\r\n notification.error(parsed.message, {\r\n timeout: 8000,\r\n notificationId: `global-error-${errorKey(event.error)}`,\r\n });\r\n }\r\n };\r\n\r\n // 3. Uncaught JS errors\r\n window.addEventListener(\"error\", onWindowError);\r\n}\r\n","import { App } from \"vue\";\nimport { NotificationPosition } from \"@core/notifications/toast-types\";\nimport { createLogger } from \"@core/utilities\";\n\nconst logger = createLogger(\"notification-instance\");\n\ninterface IUseInstance {\n saveInstance(app: App<Element>, id: string, position: NotificationPosition): void;\n unmountComponent(position?: NotificationPosition): void;\n clearContainer(): void;\n getInstanceByPosition(position: NotificationPosition): App<Element> | undefined;\n}\n\n// Instance storage for different positions\nconst containerInstances: Record<NotificationPosition, App<Element> | undefined> = {\n \"top-center\": undefined,\n \"top-right\": undefined,\n \"top-left\": undefined,\n \"bottom-center\": undefined,\n \"bottom-right\": undefined,\n \"bottom-left\": undefined,\n};\n\nexport function useInstance(): IUseInstance {\n function saveInstance(app: App<Element>, id: string, position: NotificationPosition) {\n const container = document.getElementById(id);\n if (container) {\n containerInstances[position] = app;\n }\n }\n\n function unmountComponent(position?: NotificationPosition) {\n try {\n if (position) {\n // Remove specific container by position\n if (containerInstances[position]) {\n containerInstances[position]?.unmount();\n document.getElementById(`notification-${position}`)?.remove();\n containerInstances[position] = undefined;\n }\n } else {\n // Remove all containers\n Object.keys(containerInstances).forEach((pos) => {\n const position = pos as NotificationPosition;\n containerInstances[position]?.unmount();\n document.getElementById(`notification-${position}`)?.remove();\n containerInstances[position] = undefined;\n });\n\n // Remove the root container if there are no active containers\n const hasActiveContainers = Object.values(containerInstances).some((instance) => instance !== undefined);\n if (!hasActiveContainers) {\n document.querySelector(\".notification\")?.remove();\n }\n }\n } catch (error) {\n logger.error(\"Failed to unmount notification component:\", error);\n }\n }\n\n function clearContainer() {\n Object.keys(containerInstances).forEach((pos) => {\n if (containerInstances[pos as NotificationPosition]) {\n unmountComponent(pos as NotificationPosition);\n }\n });\n }\n\n function getInstanceByPosition(position: NotificationPosition): App<Element> | undefined {\n return containerInstances[position];\n }\n\n return {\n saveInstance,\n unmountComponent,\n clearContainer,\n getInstanceByPosition,\n };\n}\n","import { createApp, nextTick, reactive, ref, Ref } from \"vue\";\nimport {\n NotificationOptions,\n NotificationPosition,\n NotificationContainerStateKey,\n} from \"@core/notifications/toast-types\";\nimport { useInstance } from \"@shell/_internal/notifications/composables/useInstance\";\nimport * as _ from \"lodash-es\";\nimport { generateId, createLogger } from \"@core/utilities\";\n\nconst logger = createLogger(\"notification-container\");\n\ninterface IUseContainer {\n defaultOptions: NotificationOptions;\n notificationContainers: Record<NotificationPosition, Ref<NotificationOptions[]>>;\n actions: {\n add(options: NotificationOptions): void;\n remove(id: string | number): void;\n clear(): void;\n dismiss(notificationId: string | number): void;\n update(option: NotificationOptions): void;\n setPosition(position: NotificationPosition): void;\n };\n getAllNotifications(): NotificationOptions[];\n getNotificationsByPosition(position: NotificationPosition): NotificationOptions[];\n appendInstance(options: NotificationOptions): void;\n generateNotificationId(): string;\n getNotification(notificationId: string | number): NotificationOptions | undefined;\n hasNotification(notificationId: string | number): boolean;\n}\n\n// Create containers for each position\nconst notificationContainers: Record<NotificationPosition, Ref<NotificationOptions[]>> = {\n \"top-center\": ref([]),\n \"top-right\": ref([]),\n \"top-left\": ref([]),\n \"bottom-center\": ref([]),\n \"bottom-right\": ref([]),\n \"bottom-left\": ref([]),\n};\n\nconst { clearContainer, unmountComponent, saveInstance, getInstanceByPosition } = useInstance();\n\nexport function useContainer(): IUseContainer {\n const defaultOptions = reactive<NotificationOptions>({\n timeout: 3000,\n pauseOnHover: true,\n position: \"top-center\",\n });\n\n function getAllNotifications() {\n // Combine notifications from all positions\n return Object.values(notificationContainers).flatMap((container) => container.value);\n }\n\n function getNotificationsByPosition(position: NotificationPosition) {\n return notificationContainers[position].value;\n }\n\n function getNotification(notificationId: string | number) {\n return getAllNotifications().find((item) => item.notificationId === notificationId);\n }\n\n function generateRoot(position: NotificationPosition) {\n const rootInstance = document.querySelector(\".notification\");\n const container = rootInstance || document.createElement(\"div\");\n\n // Check if a container already exists for the specified position\n const positionSelector = `.notification__container[data-position=\"${position}\"]`;\n let renderRoot = document.querySelector(positionSelector) as HTMLElement | null;\n\n // If there is no container for this position, create a new one\n if (!renderRoot) {\n renderRoot = document.createElement(\"div\");\n renderRoot.className = \"notification__container\";\n renderRoot.id = `notification-${position}`;\n renderRoot.setAttribute(\"data-position\", position);\n\n if (!rootInstance) {\n container.className = \"notification\";\n document.body.appendChild(container);\n }\n\n container.appendChild(renderRoot);\n }\n\n return renderRoot;\n }\n\n const pendingMounts = new Map<NotificationPosition, Promise<void>>();\n\n async function appendInstance(options: NotificationOptions) {\n const position = options.position || (defaultOptions.position as NotificationPosition);\n\n // Wait for any in-flight mount for this position to finish first\n const pending = pendingMounts.get(position);\n if (pending) {\n await pending;\n }\n\n if (!getInstanceByPosition(position)) {\n const mountPromise = (async () => {\n const dom = generateRoot(position);\n const { default: NotificationContainer } =\n await import(\"@shell/_internal/notifications/components/notification-container\");\n const instance = createApp(NotificationContainer, {\n ...(options as Record<string, unknown>),\n position,\n });\n instance.provide(NotificationContainerStateKey, { notificationContainers, actions });\n instance.mount(dom);\n saveInstance(instance, dom.id, position);\n })();\n\n pendingMounts.set(position, mountPromise);\n await mountPromise;\n pendingMounts.delete(position);\n }\n\n nextTick(() => {\n if (options.updateId) {\n actions.update(options);\n } else {\n actions.add(options);\n }\n });\n }\n\n function hasNotification(notificationId: string | number): boolean {\n return getAllNotifications().some((item) => item.notificationId === notificationId);\n }\n\n const actions = {\n add(options: NotificationOptions) {\n const position = options.position || (defaultOptions.position as NotificationPosition);\n const containers = notificationContainers[position];\n const exists = containers.value.find((item) => item.notificationId === options.notificationId);\n\n if (!exists) {\n nextTick(() => {\n containers.value.push(options);\n if (options.onOpen && typeof options?.onOpen === \"function\") {\n options.onOpen(options.payload);\n }\n });\n }\n },\n\n remove(id: string | number) {\n if (id) {\n // Find the notification among all containers\n let notification: NotificationOptions | undefined;\n let positionToRemoveFrom: NotificationPosition | undefined;\n\n // Search in which container the notification is located\n Object.entries(notificationContainers).forEach(([pos, container]) => {\n const found = container.value.find((item) => item.notificationId === id);\n if (found) {\n notification = found;\n positionToRemoveFrom = pos as NotificationPosition;\n }\n });\n\n if (positionToRemoveFrom) {\n // Remove the notification from the corresponding container\n notificationContainers[positionToRemoveFrom].value = notificationContainers[\n positionToRemoveFrom\n ].value.filter((item) => item.notificationId !== id);\n\n // If container is empty, unmount it\n if (notificationContainers[positionToRemoveFrom].value.length === 0) {\n unmountComponent(positionToRemoveFrom);\n }\n\n // Call the onClose callback\n nextTick(() => {\n if (notification?.onClose && typeof notification?.onClose === \"function\") {\n notification.onClose(notification.payload);\n }\n });\n }\n }\n },\n\n clear() {\n clearContainer();\n // Clear all containers\n Object.values(notificationContainers).forEach((container) => {\n container.value = [];\n });\n },\n\n dismiss(notificationId: string | number) {\n if (!notificationId) return;\n\n // Mark the notification as dismissing — VcToast watches this flag\n // and handles its own exit animation, then emits 'close' when done.\n let found = false;\n Object.values(notificationContainers).forEach((container) => {\n container.value.forEach((item) => {\n if (item.notificationId === notificationId) {\n item.dismissing = true;\n found = true;\n }\n });\n });\n\n // If notification wasn't found (already removed or never existed), no-op\n if (!found) {\n logger.debug(`dismiss: notification ${notificationId} not found`);\n }\n },\n\n update(option: NotificationOptions) {\n if (option.updateId) {\n // Find the notification across all containers\n let notification: NotificationOptions | undefined;\n let containerToUpdate: Ref<NotificationOptions[]> | undefined;\n let containerPosition: NotificationPosition | undefined;\n\n // First check all containers\n Object.entries(notificationContainers).forEach(([pos, container]) => {\n const found = container.value.find((item) => item.notificationId === option.notificationId);\n if (found) {\n notification = found;\n containerToUpdate = container;\n containerPosition = pos as NotificationPosition;\n }\n });\n\n // If we found the notification and container to update\n if (notification && containerToUpdate) {\n logger.debug(`Updating notification ${option.notificationId} in position ${containerPosition}`);\n\n // If the position changes, move the notification between containers\n if (option.position && option.position !== containerPosition) {\n // Remove from current container\n containerToUpdate.value = containerToUpdate.value.filter(\n (item) => item.notificationId !== option.notificationId,\n );\n\n // Create updated notification with new properties\n const updatedNotification = {\n ...notification,\n ...option,\n };\n\n // Define target position\n const targetPosition = option.position;\n\n // Check if a container already exists for the target position\n if (!getInstanceByPosition(targetPosition)) {\n // If no container exists for the target position, create a new one\n logger.debug(`Creating new container for position ${targetPosition}`);\n appendInstance(updatedNotification);\n } else {\n // If a container exists for the target position, add the updated notification\n logger.debug(`Adding to existing container for position ${targetPosition}`);\n notificationContainers[targetPosition].value.push(updatedNotification);\n }\n } else {\n // Standard update of notification properties\n logger.debug(`Standard update of notification properties`);\n\n // Apply all new properties from option to notification\n Object.keys(option).forEach((key) => {\n if (key !== \"updateId\" && key !== \"notificationId\") {\n const propKey = key as keyof NotificationOptions;\n const propValue = option[propKey];\n\n // Safely assign property\n if (notification && propValue !== undefined) {\n // Use explicit type casting instead of any\n (notification as Record<keyof NotificationOptions, unknown>)[propKey] = propValue;\n }\n }\n });\n }\n\n return true;\n } else {\n logger.warn(`Notification with ID ${option.notificationId} not found for update`);\n return false;\n }\n }\n\n return false;\n },\n\n setPosition(position: NotificationPosition) {\n if (position) {\n defaultOptions.position = position;\n }\n },\n };\n\n return {\n defaultOptions,\n notificationContainers,\n actions,\n getAllNotifications,\n getNotificationsByPosition,\n appendInstance,\n getNotification,\n generateNotificationId: generateId,\n hasNotification,\n };\n}\n","import { setNotificationBackend } from \"@core/notifications/notification\";\nimport { useContainer } from \"@shell/_internal/notifications/composables/useContainer\";\n\n/**\n * Registers the shell notification backend (useContainer) with the core notification API.\n * Called once during framework initialization.\n */\nexport function registerNotificationBackend(): void {\n const container = useContainer();\n setNotificationBackend({\n defaultOptions: container.defaultOptions,\n actions: container.actions,\n getAllNotifications: container.getAllNotifications,\n appendInstance: container.appendInstance,\n getNotification: (id) => container.getNotification(id),\n hasNotification: (id) => container.hasNotification(id),\n });\n}\n","<template>\n <template v-if=\"isSidebarVisible\">\n <VcSidebar\n :model-value=\"true\"\n :position=\"position\"\n :title=\"title\"\n :close-button=\"closeCross\"\n :teleport=\"!isDesktop\"\n @update:model-value=\"onModelUpdate\"\n >\n <template\n v-if=\"$slots.header\"\n #header=\"{ close }\"\n >\n <slot\n name=\"header\"\n :close=\"close\"\n />\n </template>\n\n <slot name=\"content\" />\n </VcSidebar>\n </template>\n\n <template v-else>\n <slot name=\"content\" />\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport { VcSidebar } from \"@ui/components/organisms/vc-sidebar\";\nimport { useResponsive } from \"@framework/core/composables/useResponsive\";\n\nexport interface Props {\n position?: \"left\" | \"right\";\n render?: \"always\" | \"mobile\" | \"desktop\";\n isExpanded: boolean;\n title?: string;\n closeCross?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n position: \"right\",\n render: \"always\",\n closeCross: true,\n});\n\nconst emit = defineEmits<{\n (event: \"close\"): void;\n}>();\n\ndefineSlots<{\n header?: (args: { close: () => void }) => unknown;\n content?: () => unknown;\n}>();\n\nconst { isMobile, isDesktop } = useResponsive();\n\nconst renderMatchesViewport = computed(() => {\n if (props.render === \"always\") {\n return true;\n }\n\n if (props.render === \"mobile\") {\n return isMobile.value;\n }\n\n return isDesktop.value;\n});\n\nconst isSidebarVisible = computed(() => props.isExpanded && renderMatchesViewport.value);\n\nfunction onModelUpdate(value: boolean) {\n if (!value) {\n emit(\"close\");\n }\n}\n</script>\n","import SidebarComponent from \"@shell/components/sidebar/sidebar.vue\";\n\n/**\n * @deprecated Use `VcSidebar` from `framework/ui/components` instead.\n * This wrapper is kept for backward compatibility and may be removed in a future release.\n */\nexport const Sidebar = SidebarComponent;\n","<template>\n <VcButton\n variant=\"secondary\"\n class=\"vc-external-provider\"\n @click=\"$emit('signIn')\"\n >\n <div class=\"tw-flex tw-flex-row tw-items-center tw-gap-2\">\n <VcImage\n :src=\"processedLogo\"\n class=\"vc-external-provider__icon\"\n size=\"xxs\"\n />{{ displayName }}\n </div>\n </VcButton>\n</template>\n\n<script lang=\"ts\" setup>\nimport { VcButton } from \"@ui/components/atoms/vc-button\";\nimport { VcImage } from \"@ui/components/atoms/vc-image\";\nimport { computed } from \"vue\";\n\nexport interface Props {\n logo: string | undefined;\n displayName: string | undefined;\n authenticationType: string | undefined;\n}\n\nexport interface Emits {\n (event: \"signIn\"): void;\n}\n\nconst props = defineProps<Props>();\ndefineEmits<Emits>();\n\nconst processedLogo = computed(() => {\n if (props.logo && !props.logo.startsWith(\"data:image\") && !props.logo.startsWith(\"http\")) {\n return new URL(props.logo, window.location.origin).toString();\n }\n return props.logo;\n});\n</script>\n\n<style lang=\"scss\">\n.vc-external-provider {\n &__icon {\n @apply tw-flex-shrink-0;\n }\n}\n</style>\n","<template>\n <div class=\"tw-flex tw-justify-center tw-flex-col tw-gap-4\">\n <ExternalProvider\n v-for=\"provider in providers\"\n :key=\"provider.authenticationType\"\n :logo=\"provider.logoUrl\"\n :display-name=\"provider.displayName\"\n :authentication-type=\"provider.authenticationType\"\n @sign-in=\"signIn(provider.authenticationType)\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ExternalSignInProviderInfo } from \"@core/api/platform\";\nimport { useExternalProvider } from \"@shell/auth/sign-in/useExternalProvider\";\nimport { default as ExternalProvider } from \"@shell/auth/sign-in/external-provider.vue\";\n\nexport interface Props {\n providers: ExternalSignInProviderInfo[];\n}\n\ndefineProps<Props>();\n\nconst { signIn } = useExternalProvider();\n</script>\n","/**\n * Validates and sanitizes a post-login redirect path.\n * Prevents open-redirect attacks by rejecting non-relative URLs.\n */\nexport function resolveSafeRedirectPath(candidate: string | null): string {\n if (!candidate) return \"/\";\n const redirectPath = candidate.trim();\n if (!redirectPath.startsWith(\"/\") || redirectPath.startsWith(\"//\")) {\n return \"/\";\n }\n return redirectPath;\n}\n\n/**\n * Maps a sign-in result to a user-facing error message.\n */\nexport function formatSignInError(result: { status?: number; error?: string }): string {\n if (result.status === 401) {\n return \"The login or password is incorrect.\";\n }\n if (result.status) {\n return \"Authentication error (code: \" + result.status + \").\";\n }\n if (result.error) {\n return \"Authentication error: \" + result.error;\n }\n return \"The login or password is incorrect.\";\n}\n\nexport interface PasswordClientError {\n code: string;\n}\n\n/**\n * Performs client-side password change validation.\n * Returns additional error codes to append to server-side validation results.\n */\nexport function validatePasswordChange(fields: {\n password: string;\n confirmPassword: string;\n currentPassword: string;\n}): PasswordClientError[] {\n const errors: PasswordClientError[] = [];\n if (fields.confirmPassword !== fields.password) {\n errors.push({ code: \"Repeat-password\" });\n }\n if (fields.password === fields.currentPassword && fields.confirmPassword === fields.currentPassword) {\n errors.push({ code: \"Equal-passwords\" });\n }\n return errors;\n}\n","<template>\n <VcAuthLayout\n :logo=\"customization.logo\"\n :background=\"background\"\n :title=\"title || $t('LOGIN.TITLE')\"\n :subtitle=\"subtitle || $t('LOGIN.SUBTITLE')\"\n class=\"vc-login-page\"\n >\n <!-- SSO Providers -->\n <div\n v-if=\"loginProviders && loginProviders.length\"\n class=\"vc-login-page__providers\"\n >\n <ExternalProviders :providers=\"loginProviders\" />\n\n <div\n v-if=\"!ssoOnly\"\n class=\"vc-login-page__separator-line\"\n >\n {{ $t(\"LOGIN.OR\") }}\n </div>\n </div>\n\n <!-- SSO-only error: no providers configured -->\n <VcHint\n v-if=\"ssoOnly && providersLoaded && !loginProviders?.length\"\n class=\"tw-mt-4 tw-text-danger-500\"\n >\n {{ $t(\"LOGIN.SSO_NO_PROVIDERS_ERROR\") }}\n </VcHint>\n\n <template v-if=\"!ssoOnly\">\n <VcForm\n class=\"tw-gap-5\"\n @submit=\"login\"\n >\n <Field\n v-slot=\"{ errorMessage, handleChange, errors }\"\n :label=\"$t('LOGIN.FIELDS.LOGIN.LABEL')\"\n name=\"username\"\n :model-value=\"form.username\"\n rules=\"required\"\n >\n <VcInput\n ref=\"loginField\"\n v-model=\"form.username\"\n :label=\"$t('LOGIN.FIELDS.LOGIN.LABEL')\"\n :placeholder=\"$t('LOGIN.FIELDS.LOGIN.PLACEHOLDER')\"\n required\n :error=\"!!errors.length\"\n :error-message=\"errorMessage\"\n @update:model-value=\"handleChange\"\n />\n </Field>\n\n <Field\n v-slot=\"{ errorMessage, handleChange, errors }\"\n :label=\"$t('LOGIN.FIELDS.PASSWORD.LABEL')\"\n name=\"password\"\n :model-value=\"form.password\"\n rules=\"required\"\n >\n <VcInput\n ref=\"passwordField\"\n v-model=\"form.password\"\n :label=\"$t('LOGIN.FIELDS.PASSWORD.LABEL')\"\n :placeholder=\"$t('LOGIN.FIELDS.PASSWORD.PLACEHOLDER')\"\n type=\"password\"\n required\n :error=\"!!errors.length\"\n :error-message=\"errorMessage\"\n @keyup.enter=\"login\"\n @update:model-value=\"handleChange\"\n />\n </Field>\n\n <VcButton\n variant=\"primary\"\n class=\"tw-w-full\"\n icon=\"lucide-log-in\"\n :disabled=\"!isValid\"\n :loading=\"loading\"\n @click=\"login\"\n >\n {{ $t(\"LOGIN.BUTTON\") }}\n </VcButton>\n\n <VcButton\n variant=\"link\"\n class=\"tw-w-full tw-justify-center\"\n type=\"button\"\n @click=\"goToForgotPassword\"\n >\n {{ $t(\"LOGIN.FORGOT_PASSWORD_BUTTON\") }}\n </VcButton>\n </VcForm>\n\n <!-- Plugin extension point -->\n <ExtensionPoint\n name=\"auth:after-form\"\n separator\n separator-class=\"tw-border-t tw-border-[color:var(--login-separator)] tw-border-solid tw-pb-5\"\n wrapper-class=\"vc-login-page__separator\"\n />\n\n <VcHint\n v-if=\"!signInResult.succeeded\"\n class=\"tw-mt-4 tw-text-danger-500\"\n >\n {{ signInResult.error }}\n </VcHint>\n </template>\n </VcAuthLayout>\n</template>\n\n<!-- eslint-disable @typescript-eslint/no-explicit-any -->\n<script lang=\"ts\" setup>\nimport { ref, reactive, computed, onMounted, Ref } from \"vue\";\nimport { useRouter } from \"vue-router\";\nimport { useIsFormValid, Field, useForm } from \"vee-validate\";\nimport { useSettings } from \"@core/composables\";\nimport { useUserManagement } from \"@core/composables/useUserManagement\";\nimport { ExternalSignInProviderInfo, SignInResult } from \"@core/api/platform\";\nimport { default as ExternalProviders } from \"@shell/auth/sign-in/external-providers.vue\";\nimport { useExternalProvider } from \"@shell/auth/sign-in/useExternalProvider\";\nimport { resolveSafeRedirectPath, formatSignInError } from \"@shell/auth/utils\";\nimport { ExtensionPoint } from \"@core/plugins/extension-points\";\nimport { createLogger } from \"@core/utilities\";\nimport { VcAuthLayout, VcButton, VcForm, VcHint, VcInput } from \"@ui/components\";\n\nconst logger = createLogger(\"login-page\");\n\nexport interface Props {\n logo?: string;\n background?: string;\n title?: string;\n subtitle?: string;\n ssoOnly?: boolean;\n}\n\nconst props = defineProps<Props>();\n\nconst router = useRouter();\n\nconst { validateField } = useForm({ validateOnMount: false });\nconst { uiSettings, loading: customizationLoading } = useSettings();\nconst signInResult = ref({ succeeded: true }) as Ref<SignInResult & { status?: number; error?: any }>;\nconst { signIn, loading, user } = useUserManagement();\nconst { getProviders } = useExternalProvider();\nconst isValid = useIsFormValid();\nconst loginProviders = ref<ExternalSignInProviderInfo[]>();\nconst providersLoaded = ref(false);\n\nonMounted(async () => {\n loginProviders.value = await getProviders();\n providersLoaded.value = true;\n});\n\nconst customization = computed(() => ({\n logo: !customizationLoading.value ? uiSettings.value?.logo || props.logo : \"\",\n}));\n\nconst form = reactive({\n username: \"\",\n password: \"\",\n});\n\nconst login = async () => {\n if (!isValid.value) return;\n\n signInResult.value.error = \"\";\n signInResult.value = (await signIn(form.username, form.password)) as SignInResult & {\n status?: number;\n error?: any;\n };\n\n if (signInResult.value.succeeded && user.value?.passwordExpired) {\n await router.push({ name: \"ChangePassword\" });\n return;\n }\n\n if (signInResult.value.succeeded) {\n const redirectTo = resolveSafeRedirectPath(localStorage.getItem(\"redirectAfterLogin\"));\n localStorage.removeItem(\"redirectAfterLogin\");\n await router.push(redirectTo);\n return;\n }\n\n // Error handling\n signInResult.value.error = formatSignInError(signInResult.value);\n\n form.password = \"\";\n validateField(\"password\");\n};\n\nconst goToForgotPassword = () => {\n router.push({ name: \"ForgotPassword\" });\n};\n\nlogger.debug(\"Init login-page\");\n</script>\n\n<style lang=\"scss\">\n:root {\n --login-separator: var(--secondary-200);\n --login-separator-text: var(--neutrals-400);\n}\n\n.vc-login-page {\n &__separator {\n @apply tw-mt-5;\n }\n\n &__separator-line {\n @apply tw-flex tw-items-center tw-text-center tw-text-xs tw-text-[color:var(--login-separator-text)]\n before:tw-content-[''] before:tw-flex-1 before:tw-border-b before:tw-border-b-[color:var(--login-separator)] before:tw-mr-3\n after:tw-content-[''] after:tw-flex-1 after:tw-border-b after:tw-border-b-[color:var(--login-separator)] after:tw-ml-3;\n @apply tw-my-4;\n }\n}\n</style>\n","import _Login from \"@shell/auth/LoginPage/components/login/Login.vue\";\r\n\r\nexport const Login = _Login as typeof _Login;\r\n","<template>\r\n <VcAuthLayout\r\n :logo=\"customization.logo\"\r\n :background=\"background\"\r\n :title=\"forgotPasswordRequestSent ? t('FORGOT_PASSWORD.SUCCESS_TITLE') : t('FORGOT_PASSWORD.TITLE')\"\r\n :subtitle=\"forgotPasswordRequestSent ? undefined : t('FORGOT_PASSWORD.SUBTITLE')\"\r\n >\r\n <!-- Request form -->\r\n <template v-if=\"!forgotPasswordRequestSent\">\r\n <VcForm @submit=\"forgot\">\r\n <Field\r\n v-slot=\"{ errorMessage, handleChange, errors }\"\r\n :label=\"t('FORGOT_PASSWORD.FIELDS.EMAIL.LABEL')\"\r\n name=\"loginOrEmail\"\r\n :model-value=\"form.loginOrEmail\"\r\n rules=\"required|email\"\r\n >\r\n <VcInput\r\n ref=\"emailField\"\r\n v-model=\"form.loginOrEmail\"\r\n class=\"tw-mb-6\"\r\n :label=\"t('FORGOT_PASSWORD.FIELDS.EMAIL.LABEL')\"\r\n :placeholder=\"t('FORGOT_PASSWORD.FIELDS.EMAIL.PLACEHOLDER')\"\r\n required\r\n :error=\"!!errors.length\"\r\n :error-message=\"errorMessage\"\r\n @update:model-value=\"handleChange\"\r\n />\r\n </Field>\r\n\r\n <VcButton\r\n variant=\"primary\"\r\n class=\"tw-w-full tw-mb-4\"\r\n :disabled=\"!isValid || loading\"\r\n :loading=\"loading\"\r\n @click=\"forgot\"\r\n >\r\n {{ t(\"FORGOT_PASSWORD.SEND_BUTTON\") }}\r\n </VcButton>\r\n\r\n <div class=\"tw-text-center\">\r\n <VcButton\r\n variant=\"link\"\r\n icon=\"lucide-arrow-left\"\r\n icon-size=\"xs\"\r\n type=\"button\"\r\n @click=\"goBack\"\r\n >\r\n {{ t(\"FORGOT_PASSWORD.BACK_TO_LOGIN\") }}\r\n </VcButton>\r\n </div>\r\n </VcForm>\r\n\r\n <VcHint\r\n v-if=\"error\"\r\n class=\"tw-mt-3 tw-text-danger-500\"\r\n >\r\n {{ error }}\r\n </VcHint>\r\n </template>\r\n\r\n <!-- Success state -->\r\n <template v-else>\r\n <div class=\"tw-text-center tw-mb-6\">\r\n <p class=\"tw-text-sm tw-text-neutrals-600\">\r\n {{ t(\"FORGOT_PASSWORD.SUCCESS_TEXT\", { email: maskedEmail }) }}\r\n </p>\r\n </div>\r\n\r\n <VcButton\r\n variant=\"primary\"\r\n class=\"tw-w-full\"\r\n @click=\"goBack\"\r\n >\r\n {{ t(\"FORGOT_PASSWORD.BACK_TO_LOGIN\") }}\r\n </VcButton>\r\n </template>\r\n </VcAuthLayout>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { ref, reactive, computed } from \"vue\";\r\nimport { useRouter } from \"vue-router\";\r\nimport { useIsFormValid, Field, useForm } from \"vee-validate\";\r\nimport { useSettings } from \"@core/composables\";\r\nimport { useUserManagement } from \"@core/composables/useUserManagement\";\r\nimport { useI18n } from \"vue-i18n\";\r\nimport { VcAuthLayout, VcButton, VcForm, VcHint, VcInput } from \"@ui/components\";\r\n\r\ntype ForgotPasswordFunc = (args: { loginOrEmail: string }) => Promise<void>;\r\n\r\nexport interface Props {\r\n logo?: string;\r\n background?: string;\r\n composable?: () => { forgotPassword: ForgotPasswordFunc };\r\n}\r\n\r\nconst props = defineProps<Props>();\r\n\r\nconst router = useRouter();\r\nconst { t } = useI18n({ useScope: \"global\" });\r\nuseForm({ validateOnMount: false });\r\nconst isValid = useIsFormValid();\r\nconst { uiSettings, loading: customizationLoading } = useSettings();\r\n\r\nconst loading = ref(false);\r\nconst error = ref(\"\");\r\nconst forgotPasswordRequestSent = ref(false);\r\n\r\nconst form = reactive({\r\n loginOrEmail: \"\",\r\n});\r\n\r\nlet forgotPassword: ForgotPasswordFunc | undefined;\r\n\r\nif (props.composable && typeof props.composable === \"function\") {\r\n const result = props.composable();\r\n forgotPassword = result.forgotPassword;\r\n} else {\r\n const { requestPasswordReset } = useUserManagement();\r\n forgotPassword = async (args: { loginOrEmail: string }) => {\r\n await requestPasswordReset(args.loginOrEmail);\r\n };\r\n}\r\n\r\nconst customization = computed(() => ({\r\n logo: !customizationLoading.value ? uiSettings.value?.logo || props.logo : \"\",\r\n}));\r\n\r\nconst maskedEmail = computed(() => {\r\n const email = form.loginOrEmail;\r\n const [name, domain] = email.split(\"@\");\r\n if (!name || !domain) return email;\r\n const masked = name.length > 2 ? name[0] + \"***\" + name[name.length - 1] : name[0] + \"***\";\r\n return `${masked}@${domain}`;\r\n});\r\n\r\nconst forgot = async () => {\r\n if (!isValid.value || !forgotPassword) return;\r\n\r\n try {\r\n loading.value = true;\r\n error.value = \"\";\r\n await forgotPassword({ loginOrEmail: form.loginOrEmail });\r\n forgotPasswordRequestSent.value = true;\r\n } catch (e) {\r\n error.value = e instanceof Error ? e.message : String(e);\r\n } finally {\r\n loading.value = false;\r\n }\r\n};\r\n\r\nconst goBack = () => {\r\n router.push({ name: \"Login\" });\r\n};\r\n</script>\r\n","import _ForgotPassword from \"@shell/auth/ForgotPasswordPage/components/forgot-password/ForgotPassword.vue\";\r\n\r\nexport const ForgotPassword = _ForgotPassword as typeof _ForgotPassword;\r\n","<template>\n <VcAuthLayout\n :logo=\"customization.logo\"\n :background=\"background\"\n :title=\"t('PASSWORDRESET.TITLE')\"\n :subtitle=\"t('PASSWORDRESET.SUBTITLE')\"\n >\n <VcLoading\n v-if=\"loading\"\n active\n />\n\n <VcForm>\n <Field\n v-slot=\"{ field, errorMessage, handleChange, errors }\"\n :label=\"t('PASSWORDRESET.FIELDS.PASSWORD.LABEL')\"\n name=\"password\"\n :model-value=\"form.password\"\n rules=\"required\"\n >\n <VcInput\n v-bind=\"field\"\n ref=\"passwordField\"\n v-model=\"form.password\"\n class=\"tw-mb-4\"\n :label=\"t('PASSWORDRESET.FIELDS.PASSWORD.LABEL')\"\n :placeholder=\"t('PASSWORDRESET.FIELDS.PASSWORD.PLACEHOLDER')\"\n type=\"password\"\n :disabled=\"!form.tokenIsValid\"\n required\n :error=\"!!errors.length\"\n :error-message=\"errorMessage\"\n @update:model-value=\"\n (e) => {\n handleChange(e);\n validate();\n }\n \"\n />\n </Field>\n\n <Field\n v-slot=\"{ field, errorMessage, handleChange, errors }\"\n :label=\"t('PASSWORDRESET.FIELDS.CONFIRM_PASSWORD.LABEL')\"\n name=\"confirm_password\"\n :model-value=\"form.confirmPassword\"\n rules=\"required\"\n >\n <VcInput\n v-bind=\"field\"\n ref=\"confirmPasswordField\"\n v-model=\"form.confirmPassword\"\n class=\"tw-mb-6\"\n :label=\"t('PASSWORDRESET.FIELDS.CONFIRM_PASSWORD.LABEL')\"\n :placeholder=\"t('PASSWORDRESET.FIELDS.CONFIRM_PASSWORD.PLACEHOLDER')\"\n :disabled=\"!form.tokenIsValid\"\n type=\"password\"\n required\n :error=\"!!errors.length\"\n :error-message=\"errorMessage\"\n @update:model-value=\"\n (e) => {\n handleChange(e);\n validate();\n }\n \"\n @keyup.enter=\"resetPassword\"\n />\n </Field>\n\n <VcButton\n variant=\"primary\"\n class=\"tw-w-full\"\n :disabled=\"disableButton\"\n :loading=\"loading\"\n @click=\"resetPassword\"\n >\n {{ t(\"PASSWORDRESET.SAVE_PASSWORD\") }}\n </VcButton>\n\n <VcHint\n v-for=\"error in form.errors\"\n :key=\"error\"\n class=\"tw-mt-3 tw-text-danger-500\"\n >\n {{ t(`PASSWORDRESET.ERRORS.${error}`) }}\n </VcHint>\n </VcForm>\n </VcAuthLayout>\n</template>\n\n<script lang=\"ts\" setup>\nimport { reactive, onMounted, computed } from \"vue\";\nimport { useRouter } from \"vue-router\";\nimport { Field, useForm } from \"vee-validate\";\nimport { useSettings } from \"@core/composables\";\nimport { useI18n } from \"vue-i18n\";\nimport { useUserManagement } from \"@core/composables/useUserManagement\";\nimport { VcAuthLayout, VcButton, VcForm, VcHint, VcInput, VcLoading } from \"@ui/components\";\n\nconst props = withDefaults(\n defineProps<{\n userId: string;\n userName: string;\n token: string;\n logo?: string;\n background?: string;\n }>(),\n {\n background: \"/assets/background.jpg\",\n logo: \"/assets/logo-white.svg\",\n },\n);\n\nconst { validateToken, validatePassword, resetPasswordByToken, signIn, loading } = useUserManagement();\nconst router = useRouter();\nconst { t } = useI18n({ useScope: \"global\" });\nconst { validate: veeValidate } = useForm({ validateOnMount: false });\nconst { uiSettings, loading: customizationLoading } = useSettings();\n\nconst form = reactive<{\n isValid: boolean;\n tokenIsValid: boolean;\n errors: string[];\n password: string;\n confirmPassword: string;\n}>({\n isValid: false,\n tokenIsValid: false,\n errors: [],\n password: \"\",\n confirmPassword: \"\",\n});\n\nonMounted(async () => {\n form.tokenIsValid = await validateToken(props.userId, props.token);\n if (!form.tokenIsValid) {\n form.errors.push(\"Invalid-token\");\n }\n});\n\nconst disableButton = computed(() => {\n return loading.value || !form.password || !form.confirmPassword || (!form.isValid && form.tokenIsValid);\n});\n\nconst validate = async () => {\n if (form.tokenIsValid) {\n const errors = (await validatePassword(form.password)).errors;\n form.errors = errors?.map((x) => x.code) as string[];\n if (form.confirmPassword !== form.password) {\n form.errors.push(\"Repeat-password\");\n }\n form.isValid = form.errors.length == 0;\n }\n};\n\nconst resetPassword = async () => {\n const { valid } = await veeValidate();\n if (valid) {\n const result = await resetPasswordByToken(props.userId, form.password, props.token);\n if (result.succeeded) {\n const loginResult = await signIn(props.userName, form.password);\n if (loginResult.succeeded) {\n router.push(\"/\");\n } else {\n form.errors = (\"error\" in loginResult && [loginResult.error as string]) || [];\n }\n } else {\n form.errors = result.errors as string[];\n }\n }\n};\n\nconst customization = computed(() => ({\n logo: !customizationLoading.value ? uiSettings.value?.logo || props.logo : \"\",\n}));\n</script>\n","import _ResetPassword from \"@shell/auth/ResetPasswordPage/components/reset-password/ResetPassword.vue\";\r\n\r\nexport const ResetPassword = _ResetPassword as typeof _ResetPassword;\r\n","<template>\n <VcAuthLayout\n :logo=\"customization.logo\"\n :background=\"background\"\n :title=\"t('INVITATION.TITLE')\"\n :subtitle=\"t('INVITATION.SUBTITLE')\"\n >\n <VcLoading\n v-if=\"loading\"\n active\n />\n\n <VcForm>\n <VcInput\n class=\"tw-mb-4\"\n :label=\"t('INVITATION.FIELDS.EMAIL.LABEL')\"\n :model-value=\"userName\"\n name=\"username\"\n disabled\n />\n\n <Field\n v-slot=\"{ field, errorMessage, handleChange, errors }\"\n :label=\"t('INVITATION.FIELDS.PASSWORD.LABEL')\"\n :model-value=\"form.password\"\n rules=\"required\"\n name=\"password\"\n >\n <VcInput\n v-bind=\"field\"\n ref=\"passwordField\"\n v-model=\"form.password\"\n class=\"tw-mb-4\"\n :label=\"t('INVITATION.FIELDS.PASSWORD.LABEL')\"\n :placeholder=\"t('INVITATION.FIELDS.PASSWORD.PLACEHOLDER')\"\n type=\"password\"\n :disabled=\"!form.tokenIsValid\"\n :error=\"!!errors.length\"\n :error-message=\"errorMessage\"\n required\n @update:model-value=\"\n (e) => {\n handleChange(e);\n validate();\n }\n \"\n />\n </Field>\n\n <Field\n v-slot=\"{ field, errorMessage, handleChange, errors }\"\n :label=\"t('INVITATION.FIELDS.CONFIRM_PASSWORD.LABEL')\"\n :model-value=\"form.confirmPassword\"\n rules=\"required\"\n name=\"confirm_password\"\n >\n <VcInput\n v-bind=\"field\"\n ref=\"confirmPasswordField\"\n v-model=\"form.confirmPassword\"\n class=\"tw-mb-6\"\n :label=\"t('INVITATION.FIELDS.CONFIRM_PASSWORD.LABEL')\"\n :placeholder=\"t('INVITATION.FIELDS.CONFIRM_PASSWORD.PLACEHOLDER')\"\n :disabled=\"!form.tokenIsValid\"\n type=\"password\"\n :error=\"!!errors.length\"\n :error-message=\"errorMessage\"\n required\n @update:model-value=\"\n (e) => {\n handleChange(e);\n validate();\n }\n \"\n @keyup.enter=\"acceptInvitation\"\n />\n </Field>\n\n <VcButton\n variant=\"primary\"\n class=\"tw-w-full\"\n :disabled=\"loading || !form.isValid || !form.tokenIsValid\"\n :loading=\"loading\"\n @click=\"acceptInvitation\"\n >\n {{ t(\"INVITATION.ACCEPT_INVITATION\") }}\n </VcButton>\n\n <VcHint\n v-for=\"error in form.errors\"\n :key=\"error\"\n class=\"tw-mt-3 tw-text-danger-500\"\n >\n {{ t(`INVITATION.ERRORS.${error}`) }}\n </VcHint>\n </VcForm>\n </VcAuthLayout>\n</template>\n\n<script lang=\"ts\" setup>\nimport { reactive, onMounted, computed } from \"vue\";\nimport { useRouter } from \"vue-router\";\nimport { useIsFormValid, Field, useIsFormDirty, useForm } from \"vee-validate\";\nimport { useSettings } from \"@core/composables\";\nimport { useI18n } from \"vue-i18n\";\nimport { useUserManagement } from \"@core/composables/useUserManagement\";\nimport { VcInput } from \"@ui/components/molecules/vc-input\";\nimport { VcAuthLayout, VcButton, VcForm, VcHint, VcLoading } from \"@ui/components\";\n\nuseForm({ validateOnMount: false });\n\nconst props = withDefaults(\n defineProps<{\n userId: string;\n userName: string;\n token: string;\n logo?: string;\n background?: string;\n }>(),\n {\n background: \"/assets/background.jpg\",\n logo: \"/assets/logo-white.svg\",\n },\n);\n\nconst { validateToken, validatePassword, resetPasswordByToken, signIn, loading } = useUserManagement();\nconst router = useRouter();\nconst { t } = useI18n({ useScope: \"global\" });\nconst isFormValid = useIsFormValid();\nconst isDirty = useIsFormDirty();\nconst { uiSettings, loading: customizationLoading } = useSettings();\n\nconst form = reactive<{\n isValid: boolean;\n tokenIsValid: boolean;\n errors: string[];\n password: string;\n confirmPassword: string;\n}>({\n isValid: false,\n tokenIsValid: false,\n errors: [],\n password: \"\",\n confirmPassword: \"\",\n});\n\nconst isDisabled = computed(() => {\n return !isDirty.value || !isFormValid.value;\n});\n\nonMounted(async () => {\n form.tokenIsValid = await validateToken(props.userId, props.token);\n if (!form.tokenIsValid) {\n form.errors.push(\"Invalid-token\");\n }\n});\n\nconst validate = async () => {\n if (form.tokenIsValid) {\n const errors = (await validatePassword(form.password)).errors;\n form.errors = errors?.map((x) => x.code) as string[];\n if (form.confirmPassword && form.confirmPassword !== form.password) {\n form.errors.push(\"Repeat-password\");\n }\n form.isValid = form.errors.length == 0 && !isDisabled.value;\n }\n};\n\nconst acceptInvitation = async () => {\n const result = await resetPasswordByToken(props.userId, form.password, props.token);\n if (result.succeeded) {\n const result = await signIn(props.userName, form.password);\n if (result.succeeded) {\n router.push(\"/\");\n }\n } else {\n form.errors = result.errors as string[];\n }\n};\n\nconst customization = computed(() => ({\n logo: !customizationLoading.value ? uiSettings.value?.logo || props.logo : \"\",\n}));\n</script>\n","import _Invite from \"@shell/auth/InvitePage/components/invite/Invite.vue\";\r\n\r\nexport const Invite = _Invite as typeof _Invite;\r\n","<template>\n <VcAuthLayout\n :logo=\"customization.logo\"\n :background=\"background\"\n :title=\"forced ? t('COMPONENTS.CHANGE_PASSWORD.TITLE_FORCED') : t('COMPONENTS.CHANGE_PASSWORD.TITLE')\"\n :subtitle=\"forced ? t('COMPONENTS.CHANGE_PASSWORD.SUBTITLE_FORCED') : undefined\"\n >\n <div\n v-if=\"forced\"\n class=\"tw-mb-4\"\n >\n <VcBanner\n variant=\"info\"\n icon=\"lucide-lightbulb\"\n icon-size=\"l\"\n >{{ t(\"COMPONENTS.CHANGE_PASSWORD.FORCED.LABEL\") }}\n </VcBanner>\n </div>\n\n <VcForm>\n <Field\n v-slot=\"{ field, errorMessage, errors }\"\n :label=\"t('COMPONENTS.CHANGE_PASSWORD.CURRENT_PASSWORD.LABEL')\"\n name=\"current\"\n rules=\"required|min:6\"\n :model-value=\"form.currentPassword\"\n >\n <VcInput\n v-bind=\"field\"\n ref=\"passwordField\"\n v-model=\"form.currentPassword\"\n class=\"tw-mb-4\"\n :label=\"t('COMPONENTS.CHANGE_PASSWORD.CURRENT_PASSWORD.LABEL')\"\n :placeholder=\"t('COMPONENTS.CHANGE_PASSWORD.CURRENT_PASSWORD.PLACEHOLDER')\"\n type=\"password\"\n required\n :error=\"!!errors.length\"\n :error-message=\"errorMessage\"\n @update:model-value=\"validateForm\"\n />\n </Field>\n\n <Field\n v-slot=\"{ field, errorMessage, errors }\"\n :label=\"t('COMPONENTS.CHANGE_PASSWORD.NEW_PASSWORD.LABEL')\"\n name=\"new_pass\"\n rules=\"required|min:6\"\n :model-value=\"form.password\"\n >\n <VcInput\n v-bind=\"field\"\n ref=\"newPasswordField\"\n v-model=\"form.password\"\n class=\"tw-mb-4\"\n :label=\"t('COMPONENTS.CHANGE_PASSWORD.NEW_PASSWORD.LABEL')\"\n :placeholder=\"t('COMPONENTS.CHANGE_PASSWORD.NEW_PASSWORD.PLACEHOLDER')\"\n type=\"password\"\n required\n :error=\"!!errors.length\"\n :error-message=\"errorMessage\"\n @update:model-value=\"validateForm\"\n />\n </Field>\n\n <Field\n v-slot=\"{ field, errorMessage, errors }\"\n :label=\"t('COMPONENTS.CHANGE_PASSWORD.CONFIRM_PASSWORD.LABEL')\"\n name=\"confirm_pass\"\n rules=\"required|min:6\"\n :model-value=\"form.confirmPassword\"\n >\n <VcInput\n v-bind=\"field\"\n ref=\"confirmPasswordField\"\n v-model=\"form.confirmPassword\"\n class=\"tw-mb-6\"\n :label=\"t('COMPONENTS.CHANGE_PASSWORD.CONFIRM_PASSWORD.LABEL')\"\n :placeholder=\"t('COMPONENTS.CHANGE_PASSWORD.CONFIRM_PASSWORD.PLACEHOLDER')\"\n type=\"password\"\n required\n :error=\"!!errors.length\"\n :error-message=\"errorMessage\"\n @update:model-value=\"validateForm\"\n />\n </Field>\n\n <div class=\"tw-flex tw-gap-3\">\n <VcButton\n variant=\"secondary\"\n class=\"tw-flex-1\"\n @click=\"cancelChange\"\n >\n {{ t(\"COMPONENTS.CHANGE_PASSWORD.CANCEL\") }}\n </VcButton>\n <VcButton\n variant=\"primary\"\n class=\"tw-flex-1\"\n :disabled=\"loading || !form.isValid || isDisabled\"\n :loading=\"loading\"\n @click=\"changePassword\"\n >\n {{ t(\"COMPONENTS.CHANGE_PASSWORD.SAVE\") }}\n </VcButton>\n </div>\n\n <VcHint\n v-for=\"(err, i) in form.errors\"\n :key=\"i\"\n class=\"tw-mt-3 tw-text-danger-500\"\n >\n {{ (err as IdentityError).code ? t(`COMPONENTS.CHANGE_PASSWORD.ERRORS.${(err as IdentityError).code}`) : err }}\n </VcHint>\n </VcForm>\n </VcAuthLayout>\n</template>\n\n<script lang=\"ts\" setup>\nimport { nextTick, reactive, computed } from \"vue\";\nimport { useIsFormValid, Field, useIsFormDirty, useForm } from \"vee-validate\";\nimport { IdentityError } from \"@core/api/platform\";\nimport { useUserManagement } from \"@core/composables/useUserManagement\";\nimport { useSettings } from \"@core/composables\";\nimport { useI18n } from \"vue-i18n\";\nimport { useRouter } from \"vue-router\";\nimport { VcAuthLayout, VcBanner, VcButton, VcForm, VcHint, VcInput } from \"@ui/components\";\nimport { validatePasswordChange } from \"@shell/auth/utils\";\n\ninterface IChangePassForm {\n isValid: boolean;\n errors: IdentityError[] | string[];\n currentPassword: string;\n password: string;\n confirmPassword: string;\n}\n\nexport interface Props {\n forced?: boolean;\n logo?: string;\n background?: string;\n}\n\nconst props = defineProps<Props>();\n\nconst { t } = useI18n({ useScope: \"global\" });\nconst { changeUserPassword, loading, validatePassword, signOut } = useUserManagement();\nconst { uiSettings, loading: customizationLoading } = useSettings();\n\nconst customization = computed(() => ({\n logo: !customizationLoading.value ? uiSettings.value?.logo || props.logo : \"\",\n}));\nuseForm({ validateOnMount: false });\nconst isValid = useIsFormValid();\nconst isDirty = useIsFormDirty();\nconst router = useRouter();\n\nconst form = reactive<IChangePassForm>({\n isValid: false,\n errors: [],\n currentPassword: \"\",\n password: \"\",\n confirmPassword: \"\",\n});\n\nconst isDisabled = computed(() => {\n return !isDirty.value || !isValid.value;\n});\n\nasync function cancelChange() {\n await signOut();\n await router.push(\"/login\");\n}\n\nasync function changePassword() {\n const result = await changeUserPassword(form.currentPassword, form.password);\n if (result?.succeeded) {\n await router.push(\"/\");\n } else if (result?.errors) {\n form.errors = result?.errors;\n form.isValid = form.errors.length == 0;\n }\n}\n\nfunction validateForm() {\n nextTick(async () => {\n if (form.password || form.confirmPassword) {\n const serverErrors = (await validatePassword(form.password)).errors ?? [];\n const clientErrors = validatePasswordChange({\n password: form.password,\n confirmPassword: form.confirmPassword,\n currentPassword: form.currentPassword,\n });\n form.errors = [...serverErrors, ...clientErrors];\n form.isValid = form.errors.length == 0;\n }\n });\n}\n</script>\n","import _ChangePassword from \"@shell/auth/ChangePasswordPage/components/change-password/ChangePassword.vue\";\n\nexport const ChangePasswordPage = _ChangePassword as typeof _ChangePassword;\n","/**\r\n * Gridstack Type Adapter\r\n *\r\n * Converts between our IDashboardWidget types and Gridstack's GridStackWidget types.\r\n * Handles localStorage format migration for backwards compatibility.\r\n */\r\n\r\nimport type { GridStackWidget, GridStackNode } from \"gridstack\";\r\nimport type {\r\n IDashboardWidget,\r\n DashboardWidgetPosition,\r\n DashboardWidgetSize,\r\n} from \"@shell/dashboard/draggable-dashboard/types\";\r\n\r\n/**\r\n * LocalStorage key for layout persistence\r\n */\r\nexport const LAYOUT_STORAGE_KEY = \"vc-dashboard-layout\";\r\n\r\n/**\r\n * Old localStorage format (Map serialized as object)\r\n */\r\ninterface LegacyLayoutFormat {\r\n [widgetId: string]: DashboardWidgetPosition;\r\n}\r\n\r\n/**\r\n * Converts our widget type to Gridstack widget format\r\n */\r\nexport function toGridstackWidget(widget: IDashboardWidget, position?: DashboardWidgetPosition): GridStackWidget {\r\n const pos = position ?? widget.position;\r\n return {\r\n id: widget.id,\r\n x: pos?.x ?? 0,\r\n y: pos?.y ?? 0,\r\n w: widget.size.width,\r\n h: widget.size.height,\r\n minW: 2,\r\n minH: 2,\r\n };\r\n}\r\n\r\n/**\r\n * Extracts position from Gridstack node\r\n */\r\nexport function fromGridstackNode(node: GridStackNode): {\r\n id: string;\r\n position: DashboardWidgetPosition;\r\n size: DashboardWidgetSize;\r\n} {\r\n return {\r\n id: node.id ?? \"\",\r\n position: {\r\n x: node.x ?? 0,\r\n y: node.y ?? 0,\r\n },\r\n size: {\r\n width: node.w ?? 1,\r\n height: node.h ?? 1,\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * Converts Gridstack nodes array to our layout Map format\r\n */\r\nexport function gridstackNodesToLayoutMap(nodes: GridStackNode[]): Map<string, DashboardWidgetPosition> {\r\n const layout = new Map<string, DashboardWidgetPosition>();\r\n\r\n for (const node of nodes) {\r\n if (node.id) {\r\n layout.set(node.id, {\r\n x: node.x ?? 0,\r\n y: node.y ?? 0,\r\n });\r\n }\r\n }\r\n\r\n return layout;\r\n}\r\n\r\n/**\r\n * Loads layout from localStorage with legacy format support\r\n */\r\nexport function loadLayoutFromStorage(): Map<string, DashboardWidgetPosition> | null {\r\n try {\r\n const stored = localStorage.getItem(LAYOUT_STORAGE_KEY);\r\n if (!stored) return null;\r\n\r\n const parsed = JSON.parse(stored);\r\n\r\n // Check if it's the new Gridstack array format\r\n if (Array.isArray(parsed)) {\r\n return gridstackNodesToLayoutMap(parsed as GridStackNode[]);\r\n }\r\n\r\n // Legacy format: object with widget IDs as keys\r\n if (typeof parsed === \"object\" && parsed !== null) {\r\n const layout = new Map<string, DashboardWidgetPosition>();\r\n for (const [id, pos] of Object.entries(parsed as LegacyLayoutFormat)) {\r\n if (pos && typeof pos.x === \"number\" && typeof pos.y === \"number\") {\r\n layout.set(id, { x: pos.x, y: pos.y });\r\n }\r\n }\r\n return layout;\r\n }\r\n\r\n return null;\r\n } catch (error) {\r\n console.warn(\"[GridstackAdapter] Failed to load layout from storage:\", error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Saves layout to localStorage in Gridstack format\r\n */\r\nexport function saveLayoutToStorage(widgets: IDashboardWidget[], layout: Map<string, DashboardWidgetPosition>): void {\r\n try {\r\n const gridstackFormat: GridStackWidget[] = widgets.map((widget) => {\r\n const pos = layout.get(widget.id);\r\n return {\r\n id: widget.id,\r\n x: pos?.x ?? widget.position?.x ?? 0,\r\n y: pos?.y ?? widget.position?.y ?? 0,\r\n w: widget.size.width,\r\n h: widget.size.height,\r\n };\r\n });\r\n\r\n localStorage.setItem(LAYOUT_STORAGE_KEY, JSON.stringify(gridstackFormat));\r\n } catch (error) {\r\n console.warn(\"[GridstackAdapter] Failed to save layout to storage:\", error);\r\n }\r\n}\r\n\r\n/**\r\n * Clears layout from localStorage\r\n */\r\nexport function clearLayoutStorage(): void {\r\n try {\r\n localStorage.removeItem(LAYOUT_STORAGE_KEY);\r\n } catch (error) {\r\n console.warn(\"[GridstackAdapter] Failed to clear layout storage:\", error);\r\n }\r\n}\r\n\r\n/**\r\n * Auto-arrange widgets in a grid layout\r\n * Places widgets side by side when possible, wrapping to next row\r\n */\r\nfunction autoArrangeWidgets(widgets: IDashboardWidget[], columns: number = 12): Map<string, DashboardWidgetPosition> {\r\n const layout = new Map<string, DashboardWidgetPosition>();\r\n\r\n // Track occupied cells in each row\r\n const rowOccupancy: Map<number, number[]> = new Map();\r\n\r\n const isPositionFree = (x: number, y: number, width: number, height: number): boolean => {\r\n for (let row = y; row < y + height; row++) {\r\n const occupied = rowOccupancy.get(row) || [];\r\n for (let col = x; col < x + width; col++) {\r\n if (occupied.includes(col)) return false;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n const occupyPosition = (x: number, y: number, width: number, height: number): void => {\r\n for (let row = y; row < y + height; row++) {\r\n const occupied = rowOccupancy.get(row) || [];\r\n for (let col = x; col < x + width; col++) {\r\n occupied.push(col);\r\n }\r\n rowOccupancy.set(row, occupied);\r\n }\r\n };\r\n\r\n const findFreePosition = (width: number, height: number): DashboardWidgetPosition => {\r\n let y = 0;\r\n while (true) {\r\n for (let x = 0; x <= columns - width; x++) {\r\n if (isPositionFree(x, y, width, height)) {\r\n return { x, y };\r\n }\r\n }\r\n y++;\r\n // Safety limit\r\n if (y > 100) break;\r\n }\r\n return { x: 0, y };\r\n };\r\n\r\n for (const widget of widgets) {\r\n const position = findFreePosition(widget.size.width, widget.size.height);\r\n layout.set(widget.id, position);\r\n occupyPosition(position.x, position.y, widget.size.width, widget.size.height);\r\n }\r\n\r\n return layout;\r\n}\r\n\r\n/**\r\n * Merges saved layout with widget defaults\r\n * Handles cases where widgets have been added/removed\r\n * Auto-arranges widgets that don't have positions\r\n */\r\nexport function mergeLayoutWithWidgets(\r\n widgets: IDashboardWidget[],\r\n savedLayout: Map<string, DashboardWidgetPosition> | null,\r\n): Map<string, DashboardWidgetPosition> {\r\n // If we have a saved layout with positions, use it\r\n if (savedLayout && savedLayout.size > 0) {\r\n const layout = new Map<string, DashboardWidgetPosition>();\r\n\r\n for (const widget of widgets) {\r\n const savedPos = savedLayout.get(widget.id);\r\n const builtInPos = widget.position;\r\n const position = savedPos ?? builtInPos ?? { x: 0, y: 0 };\r\n layout.set(widget.id, position);\r\n }\r\n\r\n return layout;\r\n }\r\n\r\n // Check if all widgets have built-in positions\r\n const allHavePositions = widgets.every((w) => w.position !== undefined);\r\n\r\n if (allHavePositions) {\r\n const layout = new Map<string, DashboardWidgetPosition>();\r\n for (const widget of widgets) {\r\n layout.set(widget.id, widget.position!);\r\n }\r\n return layout;\r\n }\r\n\r\n // Auto-arrange widgets\r\n return autoArrangeWidgets(widgets);\r\n}\r\n","/**\r\n * Gridstack Integration Composable\r\n *\r\n * Provides Vue 3 integration with Gridstack.js library.\r\n * Handles initialization, event binding, and cleanup.\r\n */\r\n\r\nimport { ref, shallowRef, onUnmounted, watch, nextTick, type Ref, type ShallowRef } from \"vue\";\r\nimport { GridStack, type GridStackOptions, type GridStackNode } from \"gridstack\";\r\nimport type { IDashboardWidget, DashboardWidgetPosition } from \"@shell/dashboard/draggable-dashboard/types\";\r\nimport {\r\n toGridstackWidget,\r\n fromGridstackNode,\r\n loadLayoutFromStorage,\r\n saveLayoutToStorage,\r\n mergeLayoutWithWidgets,\r\n} from \"@shell/dashboard/draggable-dashboard/composables/useGridstackAdapter\";\r\n\r\n/**\r\n * Default Gridstack configuration\r\n */\r\nconst DEFAULT_OPTIONS: GridStackOptions = {\r\n column: 12,\r\n cellHeight: 80,\r\n margin: \"10px\",\r\n float: false,\r\n animate: true,\r\n // Disable responsive column changes - always use 12 columns\r\n columnOpts: {\r\n breakpoints: [{ w: 0, c: 12 }], // Always 12 columns regardless of width\r\n },\r\n draggable: {\r\n handle: \".grid-stack-item-content\",\r\n },\r\n resizable: {\r\n handles: \"se\", // Only bottom-right corner\r\n },\r\n};\r\n\r\n/**\r\n * Options for useGridstack composable\r\n */\r\nexport interface UseGridstackOptions {\r\n /** Gridstack configuration options */\r\n gridOptions?: Partial<GridStackOptions>;\r\n /** Enable widget resizing */\r\n resizable?: boolean;\r\n /** Auto-save layout to localStorage */\r\n autoSave?: boolean;\r\n /** Callback when layout changes */\r\n onLayoutChange?: (layout: Map<string, DashboardWidgetPosition>) => void;\r\n}\r\n\r\n/**\r\n * Return type for useGridstack composable\r\n */\r\nexport interface UseGridstackReturn {\r\n /** Reference to GridStack instance */\r\n grid: ShallowRef<GridStack | null>;\r\n /** Current layout map */\r\n layout: Ref<Map<string, DashboardWidgetPosition>>;\r\n /** Whether grid is initialized */\r\n isInitialized: Ref<boolean>;\r\n /** Initialize grid on element */\r\n initGrid: (element: HTMLElement) => void;\r\n /** Destroy grid instance */\r\n destroyGrid: () => void;\r\n /** Add a widget to the grid */\r\n addWidget: (widget: IDashboardWidget) => void;\r\n /** Remove a widget from the grid */\r\n removeWidget: (widgetId: string) => void;\r\n /** Update widget position */\r\n updateWidgetPosition: (widgetId: string, position: DashboardWidgetPosition) => void;\r\n /** Save current layout */\r\n saveLayout: () => void;\r\n /** Load layout from storage */\r\n loadLayout: () => void;\r\n /** Reset to built-in positions */\r\n resetToDefaults: () => void;\r\n /** Batch update mode (disable animations) */\r\n batchUpdate: (fn: () => void) => void;\r\n}\r\n\r\n/**\r\n * Vue 3 composable for Gridstack integration\r\n */\r\nexport function useGridstack(widgets: Ref<IDashboardWidget[]>, options: UseGridstackOptions = {}): UseGridstackReturn {\r\n const { gridOptions = {}, resizable = false, autoSave = true, onLayoutChange } = options;\r\n\r\n // State\r\n const grid = shallowRef<GridStack | null>(null);\r\n const layout = ref<Map<string, DashboardWidgetPosition>>(new Map());\r\n const isInitialized = ref(false);\r\n const isUpdating = ref(false);\r\n\r\n /**\r\n * Merge options with defaults\r\n */\r\n const mergedOptions: GridStackOptions = {\r\n ...DEFAULT_OPTIONS,\r\n ...gridOptions,\r\n disableResize: !resizable,\r\n };\r\n\r\n /**\r\n * Initialize the grid on a DOM element\r\n */\r\n const initGrid = (element: HTMLElement): void => {\r\n if (grid.value) {\r\n console.warn(\"[useGridstack] Grid already initialized\");\r\n return;\r\n }\r\n\r\n // Load saved layout\r\n const savedLayout = loadLayoutFromStorage();\r\n layout.value = mergeLayoutWithWidgets(widgets.value, savedLayout);\r\n\r\n // Initialize Gridstack\r\n grid.value = GridStack.init(mergedOptions, element);\r\n\r\n // Bind event handlers\r\n grid.value.on(\"change\", handleChange);\r\n grid.value.on(\"added\", handleAdded);\r\n grid.value.on(\"removed\", handleRemoved);\r\n\r\n // Explicitly load widgets with their positions to ensure proper layout\r\n // This is needed because Vue renders DOM after Gridstack.init() processes children\r\n const widgetData = widgets.value.map((widget) => {\r\n const position = layout.value.get(widget.id);\r\n return toGridstackWidget(widget, position);\r\n });\r\n\r\n // Use load() to apply positions - this updates existing items\r\n grid.value.load(widgetData);\r\n\r\n isInitialized.value = true;\r\n };\r\n\r\n /**\r\n * Handle grid change events (drag/resize)\r\n */\r\n const handleChange = (_event: Event, nodes: GridStackNode[]): void => {\r\n if (isUpdating.value) return;\r\n\r\n for (const node of nodes) {\r\n const { id, position } = fromGridstackNode(node);\r\n if (id) {\r\n layout.value.set(id, position);\r\n }\r\n }\r\n\r\n // Trigger reactivity\r\n layout.value = new Map(layout.value);\r\n\r\n // Notify callback\r\n onLayoutChange?.(layout.value);\r\n\r\n // Auto-save\r\n if (autoSave) {\r\n saveLayout();\r\n }\r\n };\r\n\r\n /**\r\n * Handle widget added event\r\n */\r\n const handleAdded = (_event: Event, nodes: GridStackNode[]): void => {\r\n for (const node of nodes) {\r\n const { id, position } = fromGridstackNode(node);\r\n if (id && !layout.value.has(id)) {\r\n layout.value.set(id, position);\r\n }\r\n }\r\n layout.value = new Map(layout.value);\r\n };\r\n\r\n /**\r\n * Handle widget removed event\r\n */\r\n const handleRemoved = (_event: Event, nodes: GridStackNode[]): void => {\r\n for (const node of nodes) {\r\n if (node.id) {\r\n layout.value.delete(node.id);\r\n }\r\n }\r\n layout.value = new Map(layout.value);\r\n };\r\n\r\n /**\r\n * Destroy the grid instance\r\n */\r\n const destroyGrid = (): void => {\r\n if (grid.value) {\r\n grid.value.off(\"change\");\r\n grid.value.off(\"added\");\r\n grid.value.off(\"removed\");\r\n grid.value.destroy(false); // false = don't remove DOM elements\r\n grid.value = null;\r\n isInitialized.value = false;\r\n }\r\n };\r\n\r\n /**\r\n * Add a widget to the grid\r\n */\r\n const addWidget = (widget: IDashboardWidget): void => {\r\n if (!grid.value) return;\r\n\r\n const position = layout.value.get(widget.id) ?? widget.position;\r\n const gsWidget = toGridstackWidget(widget, position);\r\n\r\n // Find the DOM element for this widget\r\n const element = document.querySelector(`[gs-id=\"${widget.id}\"]`);\r\n if (element) {\r\n grid.value.makeWidget(element as HTMLElement, gsWidget);\r\n }\r\n };\r\n\r\n /**\r\n * Remove a widget from the grid\r\n */\r\n const removeWidget = (widgetId: string): void => {\r\n if (!grid.value) return;\r\n\r\n const element = document.querySelector(`[gs-id=\"${widgetId}\"]`);\r\n if (element) {\r\n grid.value.removeWidget(element as HTMLElement, false);\r\n }\r\n layout.value.delete(widgetId);\r\n };\r\n\r\n /**\r\n * Update widget position programmatically\r\n */\r\n const updateWidgetPosition = (widgetId: string, position: DashboardWidgetPosition): void => {\r\n if (!grid.value) return;\r\n\r\n const element = document.querySelector(`[gs-id=\"${widgetId}\"]`);\r\n if (element) {\r\n isUpdating.value = true;\r\n grid.value.update(element as HTMLElement, { x: position.x, y: position.y });\r\n layout.value.set(widgetId, position);\r\n layout.value = new Map(layout.value);\r\n isUpdating.value = false;\r\n }\r\n };\r\n\r\n /**\r\n * Save current layout to localStorage\r\n */\r\n const saveLayout = (): void => {\r\n saveLayoutToStorage(widgets.value, layout.value);\r\n };\r\n\r\n /**\r\n * Load layout from localStorage\r\n */\r\n const loadLayout = (): void => {\r\n const savedLayout = loadLayoutFromStorage();\r\n if (savedLayout) {\r\n layout.value = mergeLayoutWithWidgets(widgets.value, savedLayout);\r\n applyLayoutToGrid();\r\n }\r\n };\r\n\r\n /**\r\n * Reset to built-in widget positions\r\n */\r\n const resetToDefaults = (): void => {\r\n layout.value = new Map();\r\n for (const widget of widgets.value) {\r\n if (widget.position) {\r\n layout.value.set(widget.id, { ...widget.position });\r\n }\r\n }\r\n applyLayoutToGrid();\r\n saveLayout();\r\n };\r\n\r\n /**\r\n * Apply current layout to grid\r\n */\r\n const applyLayoutToGrid = (): void => {\r\n if (!grid.value) return;\r\n\r\n isUpdating.value = true;\r\n grid.value.batchUpdate();\r\n\r\n for (const widget of widgets.value) {\r\n const position = layout.value.get(widget.id);\r\n if (position) {\r\n const element = document.querySelector(`[gs-id=\"${widget.id}\"]`);\r\n if (element) {\r\n grid.value.update(element as HTMLElement, {\r\n x: position.x,\r\n y: position.y,\r\n });\r\n }\r\n }\r\n }\r\n\r\n grid.value.batchUpdate(false);\r\n isUpdating.value = false;\r\n };\r\n\r\n /**\r\n * Execute function in batch update mode\r\n */\r\n const batchUpdate = (fn: () => void): void => {\r\n if (!grid.value) {\r\n fn();\r\n return;\r\n }\r\n\r\n isUpdating.value = true;\r\n grid.value.batchUpdate();\r\n fn();\r\n grid.value.batchUpdate(false);\r\n isUpdating.value = false;\r\n };\r\n\r\n // Watch for widget changes\r\n watch(\r\n widgets,\r\n async (newWidgets, oldWidgets) => {\r\n if (!grid.value || !isInitialized.value) return;\r\n\r\n await nextTick();\r\n\r\n // Find added widgets\r\n const addedWidgets = newWidgets.filter((w) => !oldWidgets?.some((ow) => ow.id === w.id));\r\n\r\n // Find removed widgets\r\n const removedWidgetIds =\r\n oldWidgets?.filter((w) => !newWidgets.some((nw) => nw.id === w.id)).map((w) => w.id) ?? [];\r\n\r\n // Remove old widgets\r\n for (const id of removedWidgetIds) {\r\n removeWidget(id);\r\n }\r\n\r\n // Add new widgets\r\n for (const widget of addedWidgets) {\r\n addWidget(widget);\r\n }\r\n },\r\n { deep: false },\r\n );\r\n\r\n // Cleanup on unmount\r\n onUnmounted(() => {\r\n destroyGrid();\r\n });\r\n\r\n return {\r\n grid,\r\n layout,\r\n isInitialized,\r\n initGrid,\r\n destroyGrid,\r\n addWidget,\r\n removeWidget,\r\n updateWidgetPosition,\r\n saveLayout,\r\n loadLayout,\r\n resetToDefaults,\r\n batchUpdate,\r\n };\r\n}\r\n","<template>\r\n <VcContainer\r\n no-padding\r\n class=\"vc-gridstack-dashboard\"\r\n >\r\n <div\r\n ref=\"gridRef\"\r\n class=\"grid-stack vc-gridstack-dashboard__grid\"\r\n role=\"list\"\r\n :aria-label=\"ariaLabel\"\r\n >\r\n <div\r\n v-for=\"(widget, index) in widgets\"\r\n :key=\"widget.id\"\r\n class=\"grid-stack-item\"\r\n :gs-id=\"widget.id\"\r\n :gs-x=\"getPosition(widget.id)?.x ?? widget.position?.x ?? 0\"\r\n :gs-y=\"getPosition(widget.id)?.y ?? widget.position?.y ?? 0\"\r\n :gs-w=\"widget.size.width\"\r\n :gs-h=\"widget.size.height\"\r\n :gs-min-w=\"2\"\r\n :gs-min-h=\"2\"\r\n role=\"listitem\"\r\n :aria-label=\"getWidgetAriaLabel(widget, index)\"\r\n >\r\n <div class=\"grid-stack-item-content\">\r\n <!-- Drag handle (optional) -->\r\n <div\r\n v-if=\"showDragHandles\"\r\n class=\"vc-gridstack-dashboard__drag-handle\"\r\n aria-hidden=\"true\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"currentColor\"\r\n >\r\n <circle\r\n cx=\"5\"\r\n cy=\"3\"\r\n r=\"1.5\"\r\n />\r\n <circle\r\n cx=\"11\"\r\n cy=\"3\"\r\n r=\"1.5\"\r\n />\r\n <circle\r\n cx=\"5\"\r\n cy=\"8\"\r\n r=\"1.5\"\r\n />\r\n <circle\r\n cx=\"11\"\r\n cy=\"8\"\r\n r=\"1.5\"\r\n />\r\n <circle\r\n cx=\"5\"\r\n cy=\"13\"\r\n r=\"1.5\"\r\n />\r\n <circle\r\n cx=\"11\"\r\n cy=\"13\"\r\n r=\"1.5\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <!-- Widget content -->\r\n <component\r\n :is=\"widget.component\"\r\n v-bind=\"widget.props || {}\"\r\n class=\"vc-gridstack-dashboard__widget-content\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Screen reader announcements -->\r\n <div\r\n class=\"vc-gridstack-dashboard__live-region\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n aria-atomic=\"true\"\r\n >\r\n {{ liveAnnouncement }}\r\n </div>\r\n </VcContainer>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n/**\r\n * GridstackDashboard Component\r\n *\r\n * A flexible dashboard powered by Gridstack.js that allows widgets to be\r\n * dragged and arranged in a grid layout.\r\n *\r\n * Features:\r\n * - Drag and drop interface for arranging widgets\r\n * - Optional widget resizing\r\n * - Automatic layout persistence in localStorage\r\n * - Support for built-in widget positions\r\n * - Accessibility support\r\n */\r\nimport { ref, computed, onMounted, nextTick } from \"vue\";\r\nimport type { IDashboardWidget, DashboardWidgetPosition } from \"@shell/dashboard/draggable-dashboard/types\";\r\nimport { useDashboard } from \"@core/composables/useDashboard\";\r\nimport { useGridstack } from \"@shell/dashboard/draggable-dashboard/composables/useGridstack\";\r\nimport VcContainer from \"@ui/components/atoms/vc-container/vc-container.vue\";\r\nimport \"gridstack/dist/gridstack.min.css\";\r\n\r\n// Props\r\ninterface Props {\r\n /** Show drag handle icons on widgets */\r\n showDragHandles?: boolean;\r\n /** Enable widget resizing */\r\n resizable?: boolean;\r\n /** Aria label for the dashboard container */\r\n ariaLabel?: string;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n showDragHandles: false,\r\n resizable: false,\r\n ariaLabel: \"Dashboard widgets. Drag widgets to rearrange.\",\r\n});\r\n\r\n// Refs\r\nconst gridRef = ref<HTMLElement | null>(null);\r\nconst liveAnnouncement = ref(\"\");\r\n\r\n// Dashboard service\r\nconst dashboard = useDashboard();\r\nconst widgets = computed(() => dashboard.getWidgets() as IDashboardWidget[]);\r\n\r\n// Gridstack integration\r\nconst { layout, isInitialized, initGrid, saveLayout, resetToDefaults } = useGridstack(widgets, {\r\n resizable: props.resizable,\r\n autoSave: true,\r\n gridOptions: {\r\n draggable: {\r\n handle: props.showDragHandles ? \".vc-gridstack-dashboard__drag-handle\" : \".grid-stack-item-content\",\r\n },\r\n },\r\n onLayoutChange: (newLayout) => {\r\n // Sync with dashboard service\r\n for (const [widgetId, position] of newLayout) {\r\n dashboard.updateWidgetPosition(widgetId, position);\r\n }\r\n announceToScreenReader(\"Widget positions updated\");\r\n },\r\n});\r\n\r\n// Helper to get widget position\r\nconst getPosition = (widgetId: string): DashboardWidgetPosition | undefined => {\r\n return layout.value.get(widgetId);\r\n};\r\n\r\n// Accessibility helpers\r\nconst getWidgetAriaLabel = (widget: IDashboardWidget, index: number): string => {\r\n const name = widget.name || widget.id;\r\n return `${name}, widget ${index + 1} of ${widgets.value.length}. Drag to reorder.`;\r\n};\r\n\r\nconst announceToScreenReader = (message: string): void => {\r\n liveAnnouncement.value = message;\r\n setTimeout(() => {\r\n liveAnnouncement.value = \"\";\r\n }, 1000);\r\n};\r\n\r\n// Initialize grid on mount\r\nonMounted(async () => {\r\n await nextTick();\r\n if (gridRef.value && !isInitialized.value) {\r\n initGrid(gridRef.value);\r\n }\r\n});\r\n\r\n// Public methods\r\nconst rearrangeWidgets = (): void => {\r\n resetToDefaults();\r\n};\r\n\r\nconst recalculateLayout = (): void => {\r\n // Gridstack handles this automatically\r\n};\r\n\r\nconst useBuiltInPositions = (): boolean => {\r\n resetToDefaults();\r\n return true;\r\n};\r\n\r\n// Expose public methods\r\ndefineExpose({\r\n rearrangeWidgets,\r\n recalculateLayout,\r\n saveLayout,\r\n useBuiltInPositions,\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n@import \"gridstack/dist/gridstack.min.css\";\r\n\r\n:root {\r\n --gridstack-dashboard-background: var(--additional-50);\r\n --gridstack-widget-background: var(--additional-50);\r\n --gridstack-widget-border-radius: 8px;\r\n --gridstack-widget-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\r\n --gridstack-widget-shadow-dragging: 0 8px 24px rgba(0, 0, 0, 0.15);\r\n --gridstack-placeholder-background: rgba(59, 130, 246, 0.1);\r\n --gridstack-placeholder-border: rgba(59, 130, 246, 0.5);\r\n --gridstack-drag-handle-color: var(--neutrals-400);\r\n --gridstack-drag-handle-color-hover: var(--neutrals-600);\r\n}\r\n\r\n.vc-gridstack-dashboard {\r\n background-color: var(--gridstack-dashboard-background);\r\n min-height: 100%;\r\n\r\n &__grid {\r\n padding: 24px 18px;\r\n min-height: calc(80px * 8 + 24px * 2); // 8 rows minimum\r\n }\r\n\r\n // Widget item styling\r\n .grid-stack-item {\r\n &-content {\r\n background: var(--gridstack-widget-background);\r\n border-radius: var(--gridstack-widget-border-radius);\r\n box-shadow: var(--gridstack-widget-shadow);\r\n overflow: hidden;\r\n // Note: Don't set height: 100% - Gridstack uses position: absolute with inset for margins\r\n transition: box-shadow 0.2s ease;\r\n }\r\n\r\n // Dragging state\r\n &.ui-draggable-dragging {\r\n .grid-stack-item-content {\r\n box-shadow: var(--gridstack-widget-shadow-dragging);\r\n }\r\n }\r\n\r\n // Resizing state\r\n &.ui-resizable-resizing {\r\n .grid-stack-item-content {\r\n box-shadow: var(--gridstack-widget-shadow-dragging);\r\n }\r\n }\r\n }\r\n\r\n // Placeholder styling\r\n .grid-stack-placeholder {\r\n > .placeholder-content {\r\n background: var(--gridstack-placeholder-background);\r\n border: 2px dashed var(--gridstack-placeholder-border);\r\n border-radius: var(--gridstack-widget-border-radius);\r\n }\r\n }\r\n\r\n // Drag handle\r\n &__drag-handle {\r\n position: absolute;\r\n top: 8px;\r\n right: 8px;\r\n z-index: var(--z-local-sticky);\r\n width: 24px;\r\n height: 24px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: var(--gridstack-drag-handle-color);\r\n cursor: grab;\r\n border-radius: 4px;\r\n transition:\r\n color 0.15s ease,\r\n background-color 0.15s ease;\r\n\r\n &:hover {\r\n color: var(--gridstack-drag-handle-color-hover);\r\n background-color: rgba(0, 0, 0, 0.05);\r\n }\r\n\r\n &:active {\r\n cursor: grabbing;\r\n }\r\n }\r\n\r\n // Widget content\r\n &__widget-content {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n\r\n // Screen reader only\r\n &__live-region {\r\n position: absolute;\r\n width: 1px;\r\n height: 1px;\r\n padding: 0;\r\n margin: -1px;\r\n overflow: hidden;\r\n clip: rect(0, 0, 0, 0);\r\n white-space: nowrap;\r\n border: 0;\r\n }\r\n}\r\n\r\n// Respect reduced motion preference\r\n@media (prefers-reduced-motion: reduce) {\r\n .vc-gridstack-dashboard {\r\n .grid-stack-item {\r\n transition: none !important;\r\n\r\n &-content {\r\n transition: none !important;\r\n }\r\n }\r\n }\r\n\r\n .grid-stack {\r\n &.grid-stack-animate {\r\n .grid-stack-item {\r\n transition: none !important;\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\n <GridstackDashboard\n ref=\"dashboardRef\"\n :show-drag-handles=\"showDragHandles\"\n :resizable=\"resizable\"\n :aria-label=\"ariaLabel\"\n />\n</template>\n\n<script setup lang=\"ts\">\n/**\n * DraggableDashboard Component\n *\n * A flexible dashboard powered by Gridstack.js that allows widgets to be\n * dragged and arranged in a grid layout.\n *\n * Features:\n * - Drag and drop interface for arranging widgets\n * - Automatic layout persistence in localStorage\n * - Support for built-in widget positions\n * - Accessibility support (a11y)\n * - Optional widget resizing\n */\nimport { ref } from \"vue\";\nimport GridstackDashboard from \"@shell/dashboard/draggable-dashboard/GridstackDashboard.vue\";\n\n// Props\ninterface Props {\n /** Show drag handle icons on widgets */\n showDragHandles?: boolean;\n /** Enable widget resizing */\n resizable?: boolean;\n /** Aria label for the dashboard container */\n ariaLabel?: string;\n}\n\nwithDefaults(defineProps<Props>(), {\n showDragHandles: false,\n resizable: false,\n ariaLabel: \"Dashboard widgets. Drag widgets to rearrange.\",\n});\n\n// State\nconst dashboardRef = ref<InstanceType<typeof GridstackDashboard> | null>(null);\n\n// Public methods (delegated to GridstackDashboard)\nconst rearrangeWidgets = (): void => {\n dashboardRef.value?.rearrangeWidgets?.();\n};\n\nconst recalculateLayout = (): void => {\n dashboardRef.value?.recalculateLayout?.();\n};\n\nconst saveLayout = (): void => {\n dashboardRef.value?.saveLayout?.();\n};\n\nconst useBuiltInPositions = (): boolean => {\n return dashboardRef.value?.useBuiltInPositions?.() ?? false;\n};\n\n// Expose public methods\ndefineExpose({\n rearrangeWidgets,\n recalculateLayout,\n saveLayout,\n useBuiltInPositions,\n});\n</script>\n","// Main component\nexport { default as DraggableDashboard } from \"@shell/dashboard/draggable-dashboard/DraggableDashboard.vue\";\n\n// Types\nexport type {\n IDashboardWidget,\n DashboardWidgetPosition,\n DashboardWidgetSize,\n DashboardDragEvent,\n DashboardGridConfig,\n} from \"@shell/dashboard/draggable-dashboard/types\";\n\n// Gridstack composables (for advanced usage)\nexport { useGridstack } from \"@shell/dashboard/draggable-dashboard/composables/useGridstack\";\nexport type {\n UseGridstackOptions,\n UseGridstackReturn,\n} from \"@shell/dashboard/draggable-dashboard/composables/useGridstack\";\n\n// Import and re-export to avoid Storybook docgen issues with direct re-exports\nimport {\n toGridstackWidget as _toGridstackWidget,\n fromGridstackNode as _fromGridstackNode,\n loadLayoutFromStorage as _loadLayoutFromStorage,\n saveLayoutToStorage as _saveLayoutToStorage,\n mergeLayoutWithWidgets as _mergeLayoutWithWidgets,\n clearLayoutStorage as _clearLayoutStorage,\n LAYOUT_STORAGE_KEY as _LAYOUT_STORAGE_KEY,\n} from \"@shell/dashboard/draggable-dashboard/composables/useGridstackAdapter\";\n\nexport const toGridstackWidget = _toGridstackWidget;\nexport const fromGridstackNode = _fromGridstackNode;\nexport const loadLayoutFromStorage = _loadLayoutFromStorage;\nexport const saveLayoutToStorage = _saveLayoutToStorage;\nexport const mergeLayoutWithWidgets = _mergeLayoutWithWidgets;\nexport const clearLayoutStorage = _clearLayoutStorage;\nexport const LAYOUT_STORAGE_KEY = _LAYOUT_STORAGE_KEY;\n","<template>\n <div class=\"dashboard-widget-card\">\n <div class=\"dashboard-widget-card__header\">\n <slot name=\"header\">\n <div class=\"dashboard-widget-card__header-content\">\n <div\n v-if=\"icon\"\n class=\"dashboard-widget-card__icon-wrapper\"\n >\n <VcIcon\n class=\"dashboard-widget-card__icon\"\n :icon=\"icon\"\n size=\"l\"\n />\n </div>\n <div class=\"dashboard-widget-card__title\">{{ props.header }}</div>\n </div>\n </slot>\n <div\n v-if=\"$slots.actions\"\n class=\"dashboard-widget-card__actions\"\n >\n <slot name=\"actions\"></slot>\n </div>\n </div>\n\n <div\n v-if=\"$slots.stats\"\n class=\"dashboard-widget-card__stats\"\n >\n <slot name=\"stats\"></slot>\n </div>\n\n <div\n v-loading=\"loading\"\n class=\"dashboard-widget-card__body\"\n >\n <slot name=\"content\"></slot>\n </div>\n\n <div\n v-if=\"$slots.footer\"\n class=\"dashboard-widget-card__footer\"\n >\n <slot name=\"footer\"></slot>\n </div>\n </div>\n</template>\n\n<!-- eslint-disable @typescript-eslint/no-explicit-any -->\n<script setup lang=\"ts\">\nexport interface Props {\n header?: string;\n icon?: string;\n loading?: boolean;\n}\n\nimport { VcIcon } from \"@ui/components\";\nimport { vLoading } from \"@core/directives\";\n\nconst props = defineProps<Props>();\n\ndefineSlots<{\n header?: (props: any) => any;\n actions?: (props: any) => any;\n stats?: (props: any) => any;\n content?: (props: any) => any;\n footer?: (props: any) => any;\n}>();\n</script>\n\n<style lang=\"scss\">\n:root {\n // Legacy variables (preserved for backward compat)\n --dashboard-widget-card-header-color: var(--additional-50);\n --dashboard-widget-card-header-text-color: var(--neutrals-950);\n --dashboard-widget-card-icon-color: var(--primary-600);\n --dashboard-widget-card-header-border-color: var(--neutrals-200);\n\n // New variables\n --dashboard-widget-card-background: var(--additional-50);\n --dashboard-widget-card-border-color: var(--neutrals-200);\n --dashboard-widget-card-border-radius: 8px;\n --dashboard-widget-card-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.06);\n --dashboard-widget-card-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.1);\n --dashboard-widget-card-icon-bg: var(--primary-50);\n --dashboard-widget-card-stats-bg: var(--neutrals-50);\n --dashboard-widget-card-footer-color: var(--primary-700);\n}\n\n.dashboard-widget-card {\n @apply tw-overflow-hidden tw-h-full tw-flex tw-flex-col;\n background: var(--dashboard-widget-card-background);\n border: 1px solid var(--dashboard-widget-card-border-color);\n border-radius: var(--dashboard-widget-card-border-radius);\n box-shadow: var(--dashboard-widget-card-shadow);\n transition: box-shadow 0.2s ease;\n\n &:hover {\n box-shadow: var(--dashboard-widget-card-shadow-hover);\n }\n\n &__header {\n @apply tw-px-5 tw-py-4 tw-flex tw-justify-between tw-items-center tw-gap-3;\n }\n\n &__header-content {\n @apply tw-flex tw-items-center tw-gap-3 tw-min-w-0;\n }\n\n &__icon-wrapper {\n @apply tw-flex tw-items-center tw-justify-center tw-w-9 tw-h-9 tw-rounded-lg tw-flex-shrink-0;\n background: var(--dashboard-widget-card-icon-bg);\n }\n\n &__icon {\n @apply tw-text-[var(--dashboard-widget-card-icon-color)];\n }\n\n &__title {\n @apply tw-text-lg tw-font-semibold tw-truncate;\n color: var(--dashboard-widget-card-header-text-color);\n }\n\n &__actions {\n @apply tw-flex tw-items-center tw-gap-2 tw-flex-shrink-0;\n }\n\n &__stats {\n @apply tw-px-5 tw-py-3 tw-flex tw-items-center tw-gap-6;\n background: var(--dashboard-widget-card-stats-bg);\n border-top: 1px solid var(--dashboard-widget-card-border-color);\n border-bottom: 1px solid var(--dashboard-widget-card-border-color);\n }\n\n &__body {\n @apply tw-flex-1 tw-min-h-0;\n }\n\n &__footer {\n @apply tw-px-5 tw-py-3 tw-text-center;\n border-top: 1px solid var(--dashboard-widget-card-border-color);\n\n a,\n button {\n @apply tw-text-sm tw-font-medium tw-no-underline;\n color: var(--dashboard-widget-card-footer-color);\n transition: opacity 0.15s ease;\n\n &:hover {\n @apply tw-underline;\n opacity: 0.85;\n }\n }\n }\n}\n\n// Shared activity-feed row style for dashboard card content\n.dashboard-feed-row {\n @apply tw-flex tw-items-center tw-justify-between tw-px-5 tw-py-2.5 tw-cursor-pointer tw-transition-colors;\n\n &:hover {\n background: var(--dashboard-widget-card-icon-bg, var(--primary-50));\n }\n}\n</style>\n","<template>\n <div class=\"dashboard-stat-item\">\n <div\n class=\"dashboard-stat-item__value\"\n :class=\"variant ? `dashboard-stat-item__value--${variant}` : ''\"\n >\n {{ value }}\n </div>\n <div class=\"dashboard-stat-item__label\">{{ label }}</div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nexport interface DashboardStatItemProps {\n /** The metric value to display */\n value: string | number;\n /** Descriptive label below the value */\n label: string;\n /** Color variant for the value */\n variant?: \"default\" | \"success\" | \"warning\" | \"danger\";\n}\n\ndefineProps<DashboardStatItemProps>();\n</script>\n\n<style lang=\"scss\">\n:root {\n --dashboard-stat-item-value-color: var(--neutrals-950);\n --dashboard-stat-item-label-color: var(--neutrals-500);\n}\n\n.dashboard-stat-item {\n @apply tw-flex tw-flex-col tw-items-center tw-min-w-0;\n\n &__value {\n @apply tw-text-lg tw-font-semibold tw-leading-tight tw-text-[var(--dashboard-stat-item-value-color)] tw-truncate tw-max-w-full;\n\n &--success {\n @apply tw-text-[var(--success-600)];\n }\n\n &--warning {\n @apply tw-text-[var(--warning-600)];\n }\n\n &--danger {\n @apply tw-text-[var(--danger-600)];\n }\n }\n\n &__label {\n @apply tw-text-xs tw-text-[var(--dashboard-stat-item-label-color)] tw-mt-0.5 tw-truncate tw-max-w-full;\n }\n}\n</style>\n","<!-- eslint-disable @typescript-eslint/no-explicit-any -->\n<template>\n <div class=\"tw-divide-y tw-divide-[var(--neutrals-200)]\">\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\ndefineSlots<{\n default: (props: any) => any;\n}>();\n</script>\n","<!-- eslint-disable @typescript-eslint/no-explicit-any -->\n<template>\n <div\n class=\"dashboard-feed-row\"\n @click=\"$emit('click')\"\n >\n <div class=\"tw-flex tw-items-center tw-gap-2.5 tw-min-w-0\">\n <slot />\n </div>\n <div\n v-if=\"$slots.trailing\"\n class=\"tw-flex tw-items-center tw-gap-3 tw-flex-shrink-0 tw-ml-3\"\n >\n <slot name=\"trailing\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\ndefineEmits<{\n click: [];\n}>();\n\ndefineSlots<{\n default: (props: any) => any;\n trailing: (props: any) => any;\n}>();\n</script>\n","<!-- eslint-disable @typescript-eslint/no-explicit-any -->\n<template>\n <div\n ref=\"containerRef\"\n class=\"dashboard-chart-container\"\n :style=\"cssVars\"\n >\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport type { ChartConfig } from \"./types\";\n\nexport interface Props {\n config: ChartConfig;\n}\n\nconst props = defineProps<Props>();\n\nconst containerRef = ref<HTMLElement>();\n\nconst cssVars = computed(() => {\n const vars: Record<string, string> = {};\n const keys = Object.keys(props.config);\n keys.forEach((key, index) => {\n const item = props.config[key];\n if (item.color) {\n vars[`--vis-color${index}`] = item.color;\n }\n });\n return vars;\n});\n\ndefineSlots<{\n default: (props: any) => any;\n}>();\n</script>\n\n<style lang=\"scss\">\n@use \"./chart-theme\";\n\n.dashboard-chart-container {\n @apply tw-w-full tw-h-full tw-min-h-0;\n\n // Force Unovis host tooltip container to stay transparent.\n --vis-tooltip-padding: 0;\n --vis-tooltip-border-color: transparent;\n --vis-tooltip-background-color: transparent;\n --vis-tooltip-box-shadow: none;\n --vis-tooltip-backdrop-filter: none;\n}\n</style>\n","<template>\n <div class=\"dashboard-chart-tooltip\">\n <div\n v-if=\"title\"\n class=\"dashboard-chart-tooltip__title\"\n >\n {{ title }}\n </div>\n <div class=\"dashboard-chart-tooltip__items\">\n <div\n v-for=\"(item, index) in items\"\n :key=\"index\"\n class=\"dashboard-chart-tooltip__item\"\n >\n <span\n class=\"dashboard-chart-tooltip__indicator\"\n :style=\"{ background: item.color }\"\n />\n <span class=\"dashboard-chart-tooltip__label\">{{ item.label }}</span>\n <span class=\"dashboard-chart-tooltip__value\">{{ item.value }}</span>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nexport interface TooltipItem {\n label: string;\n value: string | number;\n color: string;\n}\n\nexport interface Props {\n title?: string;\n items: TooltipItem[];\n}\n\ndefineProps<Props>();\n</script>\n\n<style lang=\"scss\">\n@use \"./chart-tooltip\";\n</style>\n","<template>\n <div class=\"dashboard-chart-legend\">\n <div\n v-for=\"(item, key) in config\"\n :key=\"key\"\n class=\"dashboard-chart-legend__item\"\n >\n <span\n class=\"dashboard-chart-legend__indicator\"\n :style=\"{ background: item.color }\"\n />\n <span class=\"dashboard-chart-legend__label\">{{ item.label }}</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ChartConfig } from \"./types\";\n\nexport interface Props {\n config: ChartConfig;\n}\n\ndefineProps<Props>();\n</script>\n\n<style lang=\"scss\">\n.dashboard-chart-legend {\n @apply tw-flex tw-flex-wrap tw-items-center tw-justify-center tw-gap-x-4 tw-gap-y-1 tw-px-3 tw-py-2;\n\n &__item {\n @apply tw-flex tw-items-center tw-gap-1.5 tw-text-xs;\n color: var(--neutrals-600);\n }\n\n &__indicator {\n @apply tw-w-2 tw-h-2 tw-rounded-full tw-flex-shrink-0;\n }\n}\n</style>\n","import type { ChartConfig } from \"./types\";\n\nexport type ChartRangeValue = number | string | Date;\n\nexport interface ChartTooltipItem {\n label: string;\n value: string | number;\n color: string;\n}\n\ninterface BuildChartTooltipOptions {\n title?: string;\n items: ChartTooltipItem[];\n}\n\ninterface ResolveSeriesMetaOptions {\n config: ChartConfig;\n key?: string;\n index?: number;\n fallbackLabel?: string;\n}\n\nconst DEFAULT_COLOR = \"var(--primary-500)\";\nconst FALLBACK_TEXT = \"-\";\n\nconst escapeMap: Record<string, string> = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n};\n\nexport const escapeHtml = (value: string | number | null | undefined): string => {\n if (value === null || value === undefined) {\n return \"\";\n }\n return String(value).replace(/[&<>\"']/g, (char) => escapeMap[char] ?? char);\n};\n\nexport const normalizeRangeValue = (value: unknown): number | undefined => {\n if (value instanceof Date) {\n const timestamp = value.getTime();\n return Number.isFinite(timestamp) ? timestamp : undefined;\n }\n\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? value : undefined;\n }\n\n if (typeof value === \"string\") {\n const numericValue = Number(value);\n if (Number.isFinite(numericValue)) {\n return numericValue;\n }\n\n const timestamp = Date.parse(value);\n if (Number.isFinite(timestamp)) {\n return timestamp;\n }\n }\n\n return undefined;\n};\n\nexport const filterDataByRange = <T>(\n data: T[],\n accessor: (datum: T) => unknown,\n rangeStart?: ChartRangeValue,\n rangeEnd?: ChartRangeValue,\n): T[] => {\n const start = normalizeRangeValue(rangeStart);\n const end = normalizeRangeValue(rangeEnd);\n\n if (start === undefined && end === undefined) {\n return data;\n }\n\n const min = start !== undefined && end !== undefined ? Math.min(start, end) : start;\n const max = start !== undefined && end !== undefined ? Math.max(start, end) : end;\n\n return data.filter((datum) => {\n const comparable = normalizeRangeValue(accessor(datum));\n if (comparable === undefined) {\n return true;\n }\n\n if (min !== undefined && comparable < min) {\n return false;\n }\n\n if (max !== undefined && comparable > max) {\n return false;\n }\n\n return true;\n });\n};\n\nexport const formatAxisValue = (value: unknown, formatter?: (value: number | Date) => string): string => {\n if (formatter) {\n if (typeof value === \"number\" || value instanceof Date) {\n return formatter(value);\n }\n\n const comparable = normalizeRangeValue(value);\n if (comparable !== undefined) {\n return formatter(comparable);\n }\n }\n\n if (value === null || value === undefined) {\n return FALLBACK_TEXT;\n }\n\n return String(value);\n};\n\nexport const formatNumericValue = (value: unknown, formatter?: (value: number) => string): string => {\n const numericValue = typeof value === \"number\" ? value : Number(value);\n\n if (!Number.isFinite(numericValue)) {\n return FALLBACK_TEXT;\n }\n\n if (formatter) {\n return formatter(numericValue);\n }\n\n return numericValue.toLocaleString();\n};\n\nexport const resolveSeriesMeta = ({\n config,\n key,\n index,\n fallbackLabel,\n}: ResolveSeriesMetaOptions): { label: string; color: string } => {\n const configKeys = Object.keys(config);\n const keyItem = key ? config[key] : undefined;\n const indexItem =\n typeof index === \"number\" && Number.isFinite(index) && configKeys[index] ? config[configKeys[index]] : undefined;\n const item = keyItem ?? indexItem;\n\n return {\n label: item?.label ?? fallbackLabel ?? key ?? \"Series\",\n color: item?.color ?? DEFAULT_COLOR,\n };\n};\n\nexport const buildChartTooltipHtml = ({ title, items }: BuildChartTooltipOptions): string | undefined => {\n if (!items.length) {\n return undefined;\n }\n\n const titleMarkup = title ? `<div class=\"dashboard-chart-tooltip__title\">${escapeHtml(title)}</div>` : \"\";\n\n const itemsMarkup = items\n .map(\n (item) => `\n <div class=\"dashboard-chart-tooltip__item\">\n <span class=\"dashboard-chart-tooltip__indicator\" style=\"background: ${escapeHtml(item.color)}\"></span>\n <span class=\"dashboard-chart-tooltip__label\">${escapeHtml(item.label)}</span>\n <span class=\"dashboard-chart-tooltip__value\">${escapeHtml(item.value)}</span>\n </div>\n `,\n )\n .join(\"\");\n\n return `\n <div class=\"dashboard-chart-tooltip\">\n ${titleMarkup}\n <div class=\"dashboard-chart-tooltip__items\">${itemsMarkup}</div>\n </div>\n `;\n};\n","<template>\n <ChartContainer :config=\"config\">\n <VisXYContainer\n :data=\"filteredData\"\n :height=\"height\"\n :margin=\"margin\"\n >\n <VisTooltip\n v-if=\"showTooltip\"\n :allow-hover=\"true\"\n class-name=\"dashboard-chart-tooltip-host\"\n :vertical-shift=\"8\"\n />\n <VisCrosshair\n v-if=\"showTooltip\"\n :x=\"xAccessor\"\n :y=\"yAccessors\"\n :color=\"colors\"\n :template=\"crosshairTooltipTemplate\"\n />\n <VisLine\n v-for=\"(accessor, index) in yAccessors\"\n :key=\"index\"\n :x=\"xAccessor\"\n :y=\"accessor\"\n :color=\"colors[index]\"\n curve-type=\"monotoneX\"\n :line-width=\"2\"\n />\n <VisAxis\n v-if=\"showXAxis\"\n type=\"x\"\n :tick-line=\"false\"\n :domain-line=\"false\"\n :grid-line=\"false\"\n :num-ticks=\"numXTicks\"\n :tick-format=\"xTickFormat\"\n />\n <VisAxis\n v-if=\"showYAxis\"\n type=\"y\"\n :tick-line=\"false\"\n :domain-line=\"false\"\n :grid-line=\"showGrid\"\n :num-ticks=\"numYTicks\"\n :tick-format=\"yTickFormat\"\n />\n </VisXYContainer>\n <ChartLegend\n v-if=\"showLegend\"\n :config=\"config\"\n />\n </ChartContainer>\n</template>\n\n<script setup lang=\"ts\" generic=\"T extends Record<string, any>\">\nimport { computed } from \"vue\";\nimport { VisXYContainer, VisLine, VisAxis, VisTooltip, VisCrosshair } from \"@unovis/vue\";\nimport ChartContainer from \"./ChartContainer.vue\";\nimport ChartLegend from \"./ChartLegend.vue\";\nimport type { ChartConfig } from \"./types\";\nimport type { ChartRangeValue } from \"./chart-utils\";\nimport {\n buildChartTooltipHtml,\n filterDataByRange,\n formatAxisValue,\n formatNumericValue,\n resolveSeriesMeta,\n} from \"./chart-utils\";\n\nexport interface Props<T> {\n data: T[];\n config: ChartConfig;\n xKey: keyof T;\n yKeys: (keyof T)[];\n height?: number;\n showTooltip?: boolean;\n showXAxis?: boolean;\n showYAxis?: boolean;\n showGrid?: boolean;\n showLegend?: boolean;\n numXTicks?: number;\n numYTicks?: number;\n rangeStart?: ChartRangeValue;\n rangeEnd?: ChartRangeValue;\n xTickFormat?: (value: number | Date) => string;\n yTickFormat?: (value: number) => string;\n}\n\nconst props = withDefaults(defineProps<Props<T>>(), {\n height: undefined,\n showTooltip: true,\n showXAxis: true,\n showYAxis: true,\n showGrid: true,\n showLegend: true,\n numXTicks: undefined,\n numYTicks: 5,\n rangeStart: undefined,\n rangeEnd: undefined,\n xTickFormat: undefined,\n yTickFormat: undefined,\n});\n\nconst margin = { top: 8, right: 8, bottom: 4, left: 4 };\n\nconst xAccessor = (d: T) => d[props.xKey] as number;\n\nconst filteredData = computed(() =>\n filterDataByRange(props.data, (datum) => datum[props.xKey], props.rangeStart, props.rangeEnd),\n);\n\nconst yAccessors = computed(() => props.yKeys.map((key) => (d: T) => d[key] as number));\n\nconst colors = computed(() =>\n props.yKeys.map(\n (key, index) =>\n resolveSeriesMeta({\n config: props.config,\n key: String(key),\n index,\n fallbackLabel: String(key),\n }).color,\n ),\n);\n\nconst buildTooltipMarkup = (datum: T): string | undefined =>\n buildChartTooltipHtml({\n title: formatAxisValue(datum[props.xKey], props.xTickFormat),\n items: props.yKeys.map((key, index) => {\n const { label, color } = resolveSeriesMeta({\n config: props.config,\n key: String(key),\n index,\n fallbackLabel: String(key),\n });\n\n return {\n label,\n color,\n value: formatNumericValue(datum[key], props.yTickFormat),\n };\n }),\n });\n\nconst crosshairTooltipTemplate = (\n datum: T | undefined,\n _xValue: number | Date,\n allData: T[],\n leftNearestDatumIndex?: number,\n): string | undefined => {\n const activeDatum = datum ?? (typeof leftNearestDatumIndex === \"number\" ? allData[leftNearestDatumIndex] : undefined);\n\n if (!activeDatum) {\n return undefined;\n }\n\n return buildTooltipMarkup(activeDatum);\n};\n</script>\n","<template>\n <ChartContainer :config=\"config\">\n <VisXYContainer\n :data=\"filteredData\"\n :height=\"height\"\n :margin=\"margin\"\n >\n <VisTooltip\n v-if=\"showTooltip\"\n :allow-hover=\"true\"\n class-name=\"dashboard-chart-tooltip-host\"\n :vertical-shift=\"8\"\n :triggers=\"barTooltipTriggers\"\n />\n <VisGroupedBar\n :x=\"xAccessor\"\n :y=\"yAccessors\"\n :color=\"colors\"\n :rounded-corners=\"4\"\n :bar-padding=\"0.2\"\n />\n <VisAxis\n v-if=\"showXAxis\"\n type=\"x\"\n :tick-line=\"false\"\n :domain-line=\"false\"\n :grid-line=\"false\"\n :num-ticks=\"numXTicks\"\n :tick-format=\"xTickFormat\"\n />\n <VisAxis\n v-if=\"showYAxis\"\n type=\"y\"\n :tick-line=\"false\"\n :domain-line=\"false\"\n :grid-line=\"showGrid\"\n :num-ticks=\"numYTicks\"\n :tick-format=\"yTickFormat\"\n />\n </VisXYContainer>\n <ChartLegend\n v-if=\"showLegend\"\n :config=\"config\"\n />\n </ChartContainer>\n</template>\n\n<script setup lang=\"ts\" generic=\"T extends Record<string, any>\">\nimport { computed } from \"vue\";\nimport { VisXYContainer, VisGroupedBar, VisAxis, VisTooltip, VisGroupedBarSelectors } from \"@unovis/vue\";\nimport ChartContainer from \"./ChartContainer.vue\";\nimport ChartLegend from \"./ChartLegend.vue\";\nimport type { ChartConfig } from \"./types\";\nimport type { ChartRangeValue } from \"./chart-utils\";\nimport {\n buildChartTooltipHtml,\n filterDataByRange,\n formatAxisValue,\n formatNumericValue,\n resolveSeriesMeta,\n} from \"./chart-utils\";\n\nexport interface Props<T> {\n data: T[];\n config: ChartConfig;\n xKey: keyof T;\n yKeys: (keyof T)[];\n height?: number;\n showTooltip?: boolean;\n showXAxis?: boolean;\n showYAxis?: boolean;\n showGrid?: boolean;\n showLegend?: boolean;\n numXTicks?: number;\n numYTicks?: number;\n rangeStart?: ChartRangeValue;\n rangeEnd?: ChartRangeValue;\n xTickFormat?: (value: number | Date) => string;\n yTickFormat?: (value: number) => string;\n}\n\nconst props = withDefaults(defineProps<Props<T>>(), {\n height: undefined,\n showTooltip: true,\n showXAxis: true,\n showYAxis: true,\n showGrid: true,\n showLegend: true,\n numXTicks: undefined,\n numYTicks: 5,\n rangeStart: undefined,\n rangeEnd: undefined,\n xTickFormat: undefined,\n yTickFormat: undefined,\n});\n\nconst margin = { top: 8, right: 8, bottom: 4, left: 4 };\n\nconst xAccessor = (d: T) => d[props.xKey] as number;\n\nconst filteredData = computed(() =>\n filterDataByRange(props.data, (datum) => datum[props.xKey], props.rangeStart, props.rangeEnd),\n);\n\nconst yAccessors = computed(() => props.yKeys.map((key) => (d: T) => d[key] as number));\n\nconst colors = computed(() =>\n props.yKeys.map(\n (key, index) =>\n resolveSeriesMeta({\n config: props.config,\n key: String(key),\n index,\n fallbackLabel: String(key),\n }).color,\n ),\n);\n\nconst barTooltipTriggers = computed(() => ({\n [VisGroupedBarSelectors.bar]: (datum: T, seriesIndex: number): string | null | undefined => {\n if (!props.yKeys.length || seriesIndex < 0) {\n return null;\n }\n\n const normalizedSeriesIndex = seriesIndex % props.yKeys.length;\n const seriesKey = props.yKeys[normalizedSeriesIndex];\n if (!seriesKey) {\n return null;\n }\n\n const { label, color } = resolveSeriesMeta({\n config: props.config,\n key: String(seriesKey),\n index: normalizedSeriesIndex,\n fallbackLabel: String(seriesKey),\n });\n\n return buildChartTooltipHtml({\n title: formatAxisValue(datum[props.xKey], props.xTickFormat),\n items: [\n {\n label,\n color,\n value: formatNumericValue(datum[seriesKey], props.yTickFormat),\n },\n ],\n });\n },\n}));\n</script>\n","<template>\n <ChartContainer :config=\"config\">\n <VisSingleContainer\n :data=\"data\"\n :height=\"height\"\n >\n <VisDonut\n :value=\"valueAccessor\"\n :color=\"colorAccessor\"\n :arc-width=\"arcWidth\"\n :corner-radius=\"cornerRadius\"\n :pad-angle=\"0.02\"\n :central-label=\"centralLabel\"\n :central-sub-label=\"centralSubLabel\"\n />\n <VisTooltip\n v-if=\"showTooltip\"\n :allow-hover=\"true\"\n class-name=\"dashboard-chart-tooltip-host\"\n :vertical-shift=\"8\"\n :triggers=\"donutTooltipTriggers\"\n />\n </VisSingleContainer>\n <ChartLegend\n v-if=\"showLegend\"\n :config=\"config\"\n />\n </ChartContainer>\n</template>\n\n<script setup lang=\"ts\" generic=\"T extends Record<string, any>\">\nimport { computed } from \"vue\";\nimport { VisSingleContainer, VisDonut, VisTooltip, VisDonutSelectors } from \"@unovis/vue\";\nimport ChartContainer from \"./ChartContainer.vue\";\nimport ChartLegend from \"./ChartLegend.vue\";\nimport type { ChartConfig } from \"./types\";\nimport { buildChartTooltipHtml, formatNumericValue, resolveSeriesMeta } from \"./chart-utils\";\n\ninterface DonutSegmentDatum {\n data: T;\n index: number;\n value: number;\n}\n\nconst props = withDefaults(\n defineProps<{\n data: T[];\n config: ChartConfig;\n valueKey: keyof T;\n colorKey?: keyof T;\n height?: number;\n arcWidth?: number;\n cornerRadius?: number;\n showTooltip?: boolean;\n showLegend?: boolean;\n centralLabel?: string;\n centralSubLabel?: string;\n valueFormat?: (value: number) => string;\n }>(),\n {\n colorKey: undefined,\n height: undefined,\n arcWidth: 60,\n cornerRadius: 4,\n showTooltip: true,\n showLegend: true,\n centralLabel: undefined,\n centralSubLabel: undefined,\n valueFormat: undefined,\n },\n);\n\nconst valueAccessor = (d: T) => d[props.valueKey] as number;\nconst configKeys = computed(() => Object.keys(props.config));\n\nconst colorAccessor = (d: T, index: number) => {\n if (props.colorKey && d[props.colorKey]) {\n return d[props.colorKey] as string;\n }\n return configKeys.value[index] ? props.config[configKeys.value[index]].color : undefined;\n};\n\nconst getSegmentLabel = (datum: T, index: number): string => {\n const datumLabel = (datum as Record<string, unknown>).label;\n if (typeof datumLabel === \"string\" && datumLabel.trim()) {\n return datumLabel;\n }\n\n const configKey = configKeys.value[index];\n if (configKey) {\n return props.config[configKey]?.label ?? configKey;\n }\n\n return `Segment ${index + 1}`;\n};\n\nconst donutTooltipTriggers = computed(() => ({\n [VisDonutSelectors.segment]: (segmentDatum: DonutSegmentDatum): string | undefined => {\n if (!segmentDatum?.data) {\n return undefined;\n }\n\n const index = segmentDatum.index ?? 0;\n const label = getSegmentLabel(segmentDatum.data, index);\n const configKey = configKeys.value[index];\n const { color } = resolveSeriesMeta({\n config: props.config,\n key: configKey,\n index,\n fallbackLabel: label,\n });\n\n return buildChartTooltipHtml({\n items: [\n {\n label,\n color: colorAccessor(segmentDatum.data, index) ?? color,\n value: formatNumericValue(segmentDatum.value ?? segmentDatum.data[props.valueKey], props.valueFormat),\n },\n ],\n });\n },\n}));\n</script>\n","/**\n * useBladeNavigation adapter — maps the legacy IUseBladeNavigation API\n * onto the new BladeStack + BladeMessaging system.\n *\n * Drop-in replacement for the old useBladeNavigation.\n * Consumer code keeps working; deprecation warnings guide migration.\n */\nimport { computed, getCurrentInstance, inject, warn, Component, ComputedRef, Ref, ref } from \"vue\";\nimport { RouteLocationNormalized, RouteLocationRaw, NavigationFailure } from \"vue-router\";\nimport {\n bladeNavigationInstance as globalBladeNavigationPluginInstanceFallback,\n bladeStackInstance,\n bladeMessagingInstance,\n bladeRegistryInstance,\n} from \"@core/blade-navigation/singletons\";\nimport type { IBladeRegistry as _IBladeRegistry } from \"@core/composables/useBladeRegistry\";\nimport {\n BladeVNode,\n IBladeEvent,\n IParentCallArgs,\n BladeInstanceConstructor,\n BladeDescriptor,\n BladeDescriptorKey,\n} from \"@core/blade-navigation/types\";\nimport { createUrlSync, getTenantPrefix } from \"@core/blade-navigation/utils/urlSync\";\nimport { createLogger } from \"@core/utilities\";\n\nconst logger = createLogger(\"use-blade-navigation-adapter\");\n\n// ── Deprecation helpers ────────────────────────────────────────────────────────\n\nconst _deprecationWarned = new Set<string>();\n\nfunction warnDeprecated(method: string, replacement?: string): void {\n if (_deprecationWarned.has(method)) return;\n _deprecationWarned.add(method);\n const msg = `[useBladeNavigation] \"${method}\" is deprecated.`;\n console.warn(replacement ? `${msg} Use ${replacement} instead.` : msg);\n}\n\n// ── IUseBladeNavigation interface (matches old API) ────────────────────────────\n\nexport interface IUseBladeNavigation {\n readonly blades: ComputedRef<BladeVNode[]>;\n readonly activeWorkspace: ComputedRef<BladeVNode | undefined>;\n readonly currentBladeNavigationData: ComputedRef<BladeVNode[\"props\"][\"navigation\"] | undefined>;\n openBlade: <Blade extends Component>(\n args: IBladeEvent<Blade>,\n isWorkspace?: boolean,\n ) => Promise<void | NavigationFailure>;\n closeBlade: (index: number) => Promise<boolean>;\n goToRoot: () => RouteLocationRaw;\n onParentCall: (args: IParentCallArgs, currentBladeIndex?: number) => void;\n onBeforeClose: (cb: () => Promise<boolean | undefined>) => void;\n resolveBladeByName: (name: string) => BladeInstanceConstructor | undefined;\n routeResolver: (to: RouteLocationNormalized) => Promise<RouteLocationRaw | undefined> | RouteLocationRaw | undefined;\n setNavigationQuery: (query: Record<string, string | number>) => void;\n getNavigationQuery: () => Record<string, string | number> | undefined;\n setBladeError: (bladeIdx: number, error: unknown) => void;\n clearBladeError: (bladeIdx: number) => void;\n}\n\n// ── BladeVNode shim ────────────────────────────────────────────────────────────\n\n/**\n * Creates a minimal BladeVNode-compatible object from a BladeDescriptor.\n * Only satisfies property reads — NOT a real VNode for rendering.\n */\nfunction descriptorToShim(descriptor: BladeDescriptor, index: number, activeId?: string): BladeVNode {\n return {\n props: {\n navigation: {\n idx: index,\n instance: descriptor.title != null ? { title: descriptor.title } : (undefined as any),\n isVisible: descriptor.visible,\n error: ref(descriptor.error ? new Error(String(descriptor.error)) : null) as Ref<Error | null>,\n },\n param: descriptor.param,\n options: descriptor.options,\n expanded: descriptor.id === activeId,\n closable: index > 0,\n },\n type: { name: descriptor.name },\n } as unknown as BladeVNode;\n}\n\n// ── Shared state (module-level, no inject needed) ───────────────────────────────\n// Lazily created computeds cached for all calls to useBladeNavigation().\n// Call _resetAdapterState() in test teardown to prevent cross-test leaks.\n\nlet _blades: ComputedRef<BladeVNode[]> | undefined;\nlet _activeWorkspace: ComputedRef<BladeVNode | undefined> | undefined;\n\n/**\n * Reset adapter's cached computeds. For use in test teardown only.\n * @internal\n */\nexport function _resetAdapterState(): void {\n _blades = undefined;\n _activeWorkspace = undefined;\n _deprecationWarned.clear();\n}\n\nfunction getSharedState() {\n const bladeStack = bladeStackInstance;\n const messaging = bladeMessagingInstance;\n const bladeRegistry = bladeRegistryInstance;\n\n if (!bladeStack || !messaging) {\n throw new Error(\n \"[useBladeNavigation adapter] BladeStack or BladeMessaging not available. \" +\n \"Ensure plugin-v2 is installed before calling useBladeNavigation().\",\n );\n }\n\n const router = globalBladeNavigationPluginInstanceFallback?.router;\n\n if (!router) {\n throw new Error(\"[@vc-shell/framework#useBladeNavigation] Vue Router instance is not available.\");\n }\n\n // Lazily create computeds once\n if (!_blades) {\n _blades = computed<BladeVNode[]>(() => {\n const activeId = bladeStack.activeBlade.value?.id;\n return bladeStack.blades.value.map((d, i) => descriptorToShim(d, i, activeId));\n });\n }\n\n if (!_activeWorkspace) {\n _activeWorkspace = computed<BladeVNode | undefined>(() => {\n const ws = bladeStack.workspace.value;\n if (!ws) return undefined;\n return descriptorToShim(ws, 0, bladeStack.activeBlade.value?.id);\n });\n }\n\n return {\n bladeStack,\n messaging,\n bladeRegistry: bladeRegistry!,\n router,\n blades: _blades,\n activeWorkspace: _activeWorkspace,\n };\n}\n\n// ── Utility: extract blade name from IBladeEvent.blade ─────────────────────────\n\nfunction extractBladeName<Blade extends Component>(blade: IBladeEvent<Blade>[\"blade\"]): string {\n if (!blade) {\n throw new Error(\"Blade cannot be null or undefined.\");\n }\n\n // { name: \"SomeBlade\" } shorthand\n if (typeof blade === \"object\" && \"name\" in blade && typeof (blade as any).name === \"string\") {\n return (blade as any).name;\n }\n\n // Component constructor — extract .name or .__name\n const comp = blade as any;\n return comp.name || comp.__name || \"UnknownBlade\";\n}\n\n// ── Per-caller function ────────────────────────────────────────────────────────\n\nexport function useBladeNavigation(): IUseBladeNavigation {\n const { bladeStack, messaging, bladeRegistry, router, blades, activeWorkspace } = getSharedState();\n\n // Try to get current blade descriptor from the new render layer (VcBladeSlot)\n // Only call inject() when inside a component setup — avoids Vue warning in route guards\n const currentDescriptor = getCurrentInstance() ? inject(BladeDescriptorKey, undefined) : undefined;\n\n // ── URL sync helpers (centralized in urlSync.ts) ────────────────────────────\n\n const { syncUrlPush, syncUrlReplace } = createUrlSync(router, bladeStack);\n\n // ── Helpers ──────────────────────────────────────────────────────────────────\n\n function getCurrentBladeId(): string | undefined {\n if (currentDescriptor) return currentDescriptor.value.id;\n // Fallback: active blade (for app-level code outside any blade)\n return bladeStack.activeBlade.value?.id;\n }\n\n function getBladeIdByIndex(index: number): string | undefined {\n const allBlades = bladeStack.blades.value;\n if (index >= 0 && index < allBlades.length) {\n return allBlades[index].id;\n }\n return undefined;\n }\n\n // ── openBlade ──────────────────────────────────────────────────────────────\n\n async function openBlade<Blade extends Component>(\n args: IBladeEvent<Blade>,\n isWorkspace?: boolean,\n ): Promise<void | NavigationFailure> {\n const name = extractBladeName(args.blade);\n\n const event = {\n name,\n param: args.param,\n options: args.options,\n onOpen: args.onOpen,\n onClose: args.onClose,\n replaceCurrentBlade: args.replaceCurrentBlade,\n };\n\n if (isWorkspace) {\n await bladeStack.openWorkspace(event);\n } else if (args.replaceCurrentBlade) {\n // Legacy replaceCurrentBlade maps to coverCurrentBlade (hide + stack)\n await bladeStack.coverCurrentBlade(event);\n } else {\n const parentId = getCurrentBladeId();\n await bladeStack.openBlade({ ...event, parentId });\n }\n\n // Sync URL only if the opened blade has a URL segment.\n // Blades without URLs (e.g. third-level detail panels) should not\n // change the address bar — the previous blade's URL stays.\n const openedBlade = bladeStack.activeBlade.value;\n if (openedBlade?.url) {\n syncUrlPush();\n }\n }\n\n // ── closeBlade ─────────────────────────────────────────────────────────────\n\n async function closeBlade(index: number): Promise<boolean> {\n warnDeprecated(\"closeBlade(index)\", \"useBlade().closeSelf()\");\n const bladeId = getBladeIdByIndex(index);\n if (!bladeId) {\n logger.error(`closeBlade: No blade found at index ${index}.`);\n return false;\n }\n const prevented = await bladeStack.closeBlade(bladeId);\n if (!prevented) {\n // Blade was closed — sync URL (replace, no new history entry)\n syncUrlReplace();\n }\n return prevented;\n }\n\n // ── goToRoot ───────────────────────────────────────────────────────────────\n\n function goToRoot(): RouteLocationRaw {\n warnDeprecated(\"goToRoot()\");\n\n // Navigate by route name, preserving current params (tenant prefix).\n // Using { path: \"/\" } would drop the tenant prefix from the URL.\n const routes = router.getRoutes();\n const mainRoute = routes.find((r) => r.meta?.root);\n const mainRouteAlias = routes.find((r) => r.aliasOf?.path === mainRoute?.path) || mainRoute;\n\n if (mainRouteAlias?.name) {\n return {\n name: mainRouteAlias.name,\n params: router.currentRoute.value.params,\n };\n }\n\n // Fallback: construct path with tenant prefix\n const tenantPrefix = getTenantPrefix(router);\n return { path: tenantPrefix ? `/${tenantPrefix}` : \"/\" };\n }\n\n // ── onParentCall ───────────────────────────────────────────────────────────\n\n async function onParentCall(args: IParentCallArgs, currentBladeIndex?: number): Promise<void> {\n warnDeprecated(\"onParentCall(args, index)\", \"useBlade().callParent(method, args)\");\n\n let callerId: string | undefined;\n\n if (currentBladeIndex !== undefined) {\n callerId = getBladeIdByIndex(currentBladeIndex);\n } else {\n callerId = getCurrentBladeId();\n }\n\n if (!callerId) {\n logger.error(\"onParentCall: Could not determine caller blade.\");\n return;\n }\n\n try {\n const result = await messaging.callParent(callerId, args.method as string, args.args);\n if (typeof args.callback === \"function\") {\n args.callback(result);\n }\n } catch (error) {\n logger.error(`onParentCall: Failed to call parent method \"${args.method}\":`, error);\n }\n }\n\n // ── onBeforeClose ──────────────────────────────────────────────────────────\n\n function onBeforeClose(cb: () => Promise<boolean | undefined>): void {\n warnDeprecated(\"onBeforeClose(cb)\", \"useBlade().onBeforeClose(guard)\");\n\n const bladeId = getCurrentBladeId();\n if (!bladeId) {\n warn(\"onBeforeClose: Could not determine current blade.\");\n return;\n }\n\n // ⚠️ Guard boolean inversion between legacy and new API:\n // Legacy onBeforeClose: return `false` → PREVENT close; `undefined`/`true` → allow\n // New registerBeforeClose: return `true` → PREVENT close; `false` → allow\n // The adapter inverts the result to bridge the two APIs.\n bladeStack.registerBeforeClose(bladeId, async () => {\n const result = await cb();\n return result === false;\n });\n }\n\n // ── resolveBladeByName ─────────────────────────────────────────────────────\n\n function resolveBladeByName(name: string): BladeInstanceConstructor | undefined {\n return bladeRegistry.getBladeComponent(name) as BladeInstanceConstructor | undefined;\n }\n\n // ── routeResolver (noop — handled by plugin-v2) ────────────────────────────\n\n function routeResolver(_to: RouteLocationNormalized): undefined {\n warnDeprecated(\"routeResolver\", \"plugin-v2 handles URL resolution automatically\");\n return undefined;\n }\n\n // ── setNavigationQuery / getNavigationQuery ────────────────────────────────\n\n function setNavigationQuery(query: Record<string, string | number>): void {\n warnDeprecated(\"setNavigationQuery\");\n\n const ws = bladeStack.workspace.value;\n if (!ws) return;\n\n const prefix = ws.name.toLowerCase();\n const cleanQuery: Record<string, string> = {};\n for (const [k, v] of Object.entries(query)) {\n if (v != null) cleanQuery[`${prefix}_${k}`] = String(v);\n }\n\n router.options.history.replace(\n decodeURIComponent(\n `${window.location.hash.substring(1).split(\"?\")[0]}?${new URLSearchParams(cleanQuery).toString()}`,\n ),\n );\n }\n\n function getNavigationQuery(): Record<string, string | number> | undefined {\n warnDeprecated(\"getNavigationQuery\");\n\n const ws = bladeStack.workspace.value;\n if (!ws) return undefined;\n\n const prefix = ws.name.toLowerCase();\n const urlParams = new URLSearchParams(window.location.hash.split(\"?\")[1] || \"\");\n const result: Record<string, string | number> = {};\n\n for (const [key, value] of urlParams.entries()) {\n if (key.startsWith(`${prefix}_`)) {\n const cleanKey = key.replace(`${prefix}_`, \"\");\n const numValue = Number(value);\n result[cleanKey] = isNaN(numValue) ? value : numValue;\n }\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n }\n\n // ── Error management ───────────────────────────────────────────────────────\n\n function setBladeError(bladeIdx: number, error: unknown): void {\n const bladeId = getBladeIdByIndex(bladeIdx);\n if (bladeId) {\n bladeStack.setBladeError(bladeId, error);\n }\n }\n\n function clearBladeError(bladeIdx: number): void {\n const bladeId = getBladeIdByIndex(bladeIdx);\n if (bladeId) {\n bladeStack.clearBladeError(bladeId);\n }\n }\n\n // ── currentBladeNavigationData ─────────────────────────────────────────────\n\n const currentBladeNavigationData = computed(() => {\n if (!currentDescriptor) return undefined;\n const d = currentDescriptor.value;\n const allBlades = bladeStack.blades.value;\n const idx = allBlades.findIndex((b) => b.id === d.id);\n return {\n idx,\n instance: d.title != null ? { title: d.title } : (undefined as any),\n isVisible: d.visible,\n error: ref(d.error ? new Error(String(d.error)) : null) as Ref<Error | null>,\n } as BladeVNode[\"props\"][\"navigation\"];\n });\n\n // ── Return ─────────────────────────────────────────────────────────────────\n\n return {\n blades,\n activeWorkspace,\n openBlade,\n closeBlade,\n goToRoot,\n onParentCall,\n onBeforeClose,\n resolveBladeByName,\n routeResolver,\n setNavigationQuery,\n getNavigationQuery,\n setBladeError,\n clearBladeError,\n currentBladeNavigationData,\n };\n}\n","import { ref, computed, provide, toValue, watch, type Ref } from \"vue\";\nimport { useForm } from \"vee-validate\";\nimport { cloneDeep } from \"lodash-es\";\nimport { useBeforeUnload } from \"@core/composables/useBeforeUnload\";\nimport { useBlade } from \"@core/composables/useBlade\";\nimport { usePopup } from \"@core/composables/usePopup\";\nimport { BladeFormKey } from \"@framework/injection-keys\";\nimport type { UseBladeFormOptions, UseBladeFormReturn } from \"./types\";\n\nexport type { UseBladeFormOptions, UseBladeFormReturn, BladeFormInjection } from \"./types\";\n\nfunction isEmptyPrimitive(value: unknown): boolean {\n return value === null || value === undefined || value === \"\";\n}\n\nfunction semanticEqual(a: unknown, b: unknown): boolean {\n // Both empty primitives\n if (isEmptyPrimitive(a) && isEmptyPrimitive(b)) return true;\n // [] ≈ undefined/null (empty array = empty)\n if (isEmptyPrimitive(a) && Array.isArray(b) && b.length === 0) return true;\n if (Array.isArray(a) && a.length === 0 && isEmptyPrimitive(b)) return true;\n\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (typeof a !== \"object\" || a === null || b === null) return false;\n\n if (Array.isArray(a) || Array.isArray(b)) {\n if (!Array.isArray(a) || !Array.isArray(b)) return false;\n if (a.length !== b.length) return false;\n return a.every((item, i) => semanticEqual(item, b[i]));\n }\n\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n const allKeys = new Set([...Object.keys(aObj), ...Object.keys(bObj)]);\n for (const key of allKeys) {\n if (!semanticEqual(aObj[key], bObj[key])) return false;\n }\n return true;\n}\n\n/**\n * Unified form state management for blades.\n *\n * Encapsulates vee-validate form, modification tracking, browser unload guard,\n * and blade close guard into a single composable with lifecycle-based API.\n *\n * **Must be called from component setup()** — uses provide() internally.\n *\n * Unlike useModificationTracker (which creates a separate currentValue clone),\n * this composable tracks changes directly on the passed `data` ref.\n * The template binds to `data` via v-model — edits go straight into\n * the ref and are detected by a deep watcher against a pristine snapshot.\n */\nexport function useBladeForm<T>(options: UseBladeFormOptions<T>): UseBladeFormReturn {\n const {\n data,\n canSaveOverride,\n autoBeforeClose = true,\n autoBeforeUnload = true,\n closeConfirmMessage,\n onRevert,\n } = options;\n\n // --- vee-validate ---\n const { meta: formMeta, setFieldError, errorBag } = useForm({ validateOnMount: false });\n\n // --- Pristine snapshot tracking ---\n // We track modifications by comparing `data` against a pristine snapshot.\n // Unlike useModificationTracker, there is no separate currentValue clone —\n // the template writes directly into `data`, and the deep watcher detects changes.\n const pristineSnapshot = ref(cloneDeep(data.value)) as Ref<T>;\n const trackerIsModified = ref(false);\n\n watch(\n data,\n (newVal) => {\n if (isReady.value) {\n trackerIsModified.value = !semanticEqual(newVal, pristineSnapshot.value);\n }\n },\n { deep: true },\n );\n\n // --- Readiness gate ---\n const isReady = ref(false);\n\n const isModified = computed(() => isReady.value && trackerIsModified.value);\n\n const canSave = computed(() => {\n if (!isReady.value) return false;\n if (!formMeta.value.valid) return false;\n if (!trackerIsModified.value) return false;\n if (canSaveOverride && !canSaveOverride.value) return false;\n return true;\n });\n\n // --- Lifecycle methods ---\n function setBaseline(): void {\n pristineSnapshot.value = cloneDeep(data.value) as T;\n trackerIsModified.value = false;\n isReady.value = true;\n }\n\n /**\n * Mark the form as ready without resetting the pristine snapshot.\n *\n * Unlike `setBaseline()`, this does NOT overwrite the pristine snapshot.\n * Instead it compares current `data` against the snapshot taken at setup time\n * and sets `trackerIsModified` accordingly.\n *\n * Use when data was programmatically pre-filled (e.g. \"create from template\")\n * and should appear as modified immediately so the save button is enabled.\n */\n function markReady(): void {\n isReady.value = true;\n trackerIsModified.value = !semanticEqual(data.value, pristineSnapshot.value);\n }\n\n function revert(): void | Promise<void> {\n if (onRevert) {\n return onRevert();\n }\n data.value = cloneDeep(pristineSnapshot.value);\n }\n\n // --- Auto guards ---\n if (autoBeforeUnload) {\n useBeforeUnload(isModified);\n }\n\n if (autoBeforeClose !== false) {\n const { onBeforeClose } = useBlade();\n const { showConfirmation } = usePopup();\n\n onBeforeClose(async () => {\n let shouldGuard: boolean;\n\n if (typeof autoBeforeClose === \"object\") {\n // ComputedRef<boolean> — custom condition AND isModified\n shouldGuard = autoBeforeClose.value && isModified.value;\n } else {\n // true (default) — guard based on isModified only\n shouldGuard = isModified.value;\n }\n\n if (shouldGuard) {\n const message = closeConfirmMessage\n ? toValue(closeConfirmMessage)\n : \"You have unsaved changes. Are you sure you want to leave?\";\n return !(await showConfirmation(message));\n }\n return false;\n });\n }\n\n // --- Provide for VcBlade auto-integration ---\n provide(BladeFormKey, { isModified, canSave });\n\n return {\n setBaseline,\n markReady,\n revert,\n canSave,\n isModified,\n isReady: computed(() => isReady.value),\n formMeta,\n setFieldError,\n errorBag,\n };\n}\n","import { VcToast } from \"@ui/components/molecules/vc-toast\";\nimport { VcIcon } from \"@ui/components/atoms/vc-icon\";\nimport { PropType, computed, defineComponent, h, ref, toRaw, reactive, inject } from \"vue\";\nimport {\n Content,\n NotificationType,\n NotificationPosition,\n NotificationContainerStateKey,\n} from \"@core/notifications/toast-types\";\n\nconst GAP = 14;\nconst VISIBLE_TOASTS = 3;\n\nconst NotificationContainer = defineComponent({\n name: \"NotificationContainer\",\n inheritAttrs: false,\n props: {\n pauseOnHover: {\n type: Boolean,\n required: false,\n default: true,\n },\n timeout: {\n type: [Number, Boolean],\n required: false,\n default: 3000,\n },\n content: {\n type: [String, Object] as PropType<Content>,\n required: false,\n default: \"\",\n },\n notificationId: {\n type: [String, Number],\n required: false,\n default: \"\",\n },\n updateId: {\n type: [String, Number],\n required: false,\n default: \"\",\n },\n type: {\n type: String as PropType<NotificationType>,\n required: false,\n default: \"default\",\n },\n onOpen: {\n type: Function as PropType<<T>(payload: T) => void>,\n required: false,\n default: undefined,\n },\n onClose: {\n type: Function as PropType<<T>(payload: T) => void>,\n required: false,\n default: undefined,\n },\n payload: {\n type: [String, Object] as PropType<Record<string, any>>,\n required: false,\n default: () => ({}),\n },\n position: {\n type: String as PropType<NotificationPosition>,\n required: false,\n default: \"top-center\",\n },\n },\n setup(props) {\n const { notificationContainers, actions } = inject(NotificationContainerStateKey)!;\n const notificationsList = computed(() => {\n return notificationContainers[props.position as NotificationPosition].value || [];\n });\n\n const expanded = ref(false);\n const interacting = ref(false);\n let collapseTimer: ReturnType<typeof setTimeout> | null = null;\n\n function expandStack() {\n if (collapseTimer) {\n clearTimeout(collapseTimer);\n collapseTimer = null;\n }\n expanded.value = true;\n }\n\n function collapseStack() {\n if (interacting.value) return;\n collapseTimer = setTimeout(() => {\n expanded.value = false;\n collapseTimer = null;\n }, 200);\n }\n\n // Height tracking: toastId → height\n const heightsMap = reactive(new Map<string | number, number>());\n\n function handleHeightReport(toastId: string | number, height: number) {\n const rounded = Math.round(height);\n if (heightsMap.get(toastId) !== rounded) {\n heightsMap.set(toastId, rounded);\n }\n }\n\n function isComponent(content: Content) {\n return typeof content === \"object\" && (!!(content as any)?.render || !!(content as any)?.setup);\n }\n\n function handleClose(id: string | number | undefined) {\n if (id) {\n heightsMap.delete(id);\n actions.remove(id);\n }\n }\n\n function handleClearAll() {\n actions.clear();\n heightsMap.clear();\n }\n\n const isTop = computed(() => (props.position || \"top-center\").startsWith(\"top\"));\n\n return () => {\n const items = notificationsList.value;\n const count = items.length;\n const isExpanded = expanded.value || count <= 1;\n const showClearAll = count > 1;\n\n // Front toast = newest = last in array\n const frontToastId = count > 0 ? items[count - 1].notificationId : undefined;\n const frontHeight = frontToastId !== undefined ? heightsMap.get(frontToastId) || 0 : 0;\n\n const children = items.map((item, arrayIndex) => {\n // sonnerIndex: 0 = front/newest, higher = older/back\n const sonnerIndex = count - 1 - arrayIndex;\n\n // Expanded offset: sum heights of newer toasts + gap * sonnerIndex\n let heightSum = 0;\n for (let i = arrayIndex + 1; i < count; i++) {\n const id = items[i].notificationId;\n if (id !== undefined) {\n heightSum += heightsMap.get(id) || 0;\n }\n }\n const offset = sonnerIndex * GAP + heightSum;\n\n const initialHeight = item.notificationId !== undefined ? heightsMap.get(item.notificationId) || 0 : 0;\n\n const toastStyle: Record<string, string | number> = {\n \"--toasts-before\": sonnerIndex,\n \"--z-index\": count - sonnerIndex,\n \"--offset\": `${offset}px`,\n \"--initial-height\": initialHeight ? `${initialHeight}px` : \"auto\",\n };\n\n const toastProps = {\n ...item,\n key: item.notificationId,\n onClose: handleClose,\n onReportHeight: handleHeightReport,\n toastIndex: sonnerIndex,\n toastsCount: count,\n expanded: isExpanded,\n visibleToasts: VISIBLE_TOASTS,\n style: toastStyle,\n };\n\n if (item.content && isComponent(item.content)) {\n return h(VcToast, {\n ...toastProps,\n content: h(toRaw(item.content)),\n });\n }\n return h(VcToast, toastProps);\n });\n\n // Clear all button — fixed position top-right of toast stack\n let clearAllButton = null;\n if (showClearAll) {\n clearAllButton = h(\n \"div\",\n {\n class: \"notification__clear-all\",\n style: {\n position: \"absolute\",\n [isTop.value ? \"top\" : \"bottom\"]: \"0\",\n left: \"var(--width, 356px)\",\n \"margin-left\": \"8px\",\n opacity: isExpanded ? \"1\" : \"0\",\n \"pointer-events\": isExpanded ? \"auto\" : \"none\",\n transition: \"opacity 200ms ease\",\n },\n },\n [\n h(\n \"button\",\n {\n type: \"button\",\n onClick: handleClearAll,\n },\n [h(VcIcon, { icon: \"lucide-x\", size: \"xs\", \"aria-hidden\": \"true\" }), \"Clear all\"],\n ),\n ],\n );\n }\n\n // Compute total stack height for the group element\n let groupHeight: number;\n if (isExpanded && count > 1) {\n // Expanded: offset of oldest toast + its height\n const oldestSonnerIdx = count - 1;\n let hSum = 0;\n for (let i = 1; i < count; i++) {\n const id = items[i].notificationId;\n hSum += id !== undefined ? heightsMap.get(id) || 0 : 0;\n }\n const oldestOffset = oldestSonnerIdx * GAP + hSum;\n const oldestHeight = items[0].notificationId !== undefined ? heightsMap.get(items[0].notificationId) || 0 : 0;\n groupHeight = oldestOffset + oldestHeight;\n } else {\n // Collapsed: front toast height + visible back toasts gap\n groupHeight = frontHeight + Math.min(count - 1, VISIBLE_TOASTS - 1) * GAP;\n }\n\n return h(\n \"ol\",\n {\n class: \"notification__toast-group\",\n \"data-expanded\": String(isExpanded),\n \"data-position\": props.position || \"top-center\",\n \"data-y-position\": isTop.value ? \"top\" : \"bottom\",\n style: {\n \"--front-toast-height\": `${frontHeight}px`,\n \"--gap\": `${GAP}px`,\n width: \"var(--width, 356px)\",\n height: `${groupHeight}px`,\n },\n onMouseenter: expandStack,\n onMouseleave: collapseStack,\n onPointerdown: () => {\n interacting.value = true;\n },\n onPointerup: () => {\n interacting.value = false;\n },\n },\n [...children, clearAllButton],\n );\n };\n },\n});\n\nexport default NotificationContainer;\n","import type { RouteLocationNormalized, Router } from \"vue-router\";\nimport { App } from \"vue\";\nimport { useBreakpoints } from \"@vueuse/core\";\nimport { i18n } from \"@core/plugins/i18n\";\nimport { permissions } from \"@core/plugins/permissions\";\nimport { signalR } from \"@core/plugins/signalR\";\nimport { aiAgentPlugin, type AiAgentPluginOptions } from \"@core/plugins/ai-agent\";\nimport { notification } from \"@core/notifications/notification\";\nimport { VcBladeNavigationComponent } from \"@shell/_internal/blade-navigation\";\nimport { VcPopupHandler } from \"@shell/_internal/popup\";\nimport { AssetsDetailsModule } from \"@modules/assets\";\nimport { AssetsManagerModule } from \"@modules/assets-manager\";\nimport { registerInterceptors } from \"@core/interceptors\";\nimport { usePermissions } from \"@core/composables/usePermissions\";\nimport { useUserManagement } from \"@core/composables/useUserManagement\";\nimport Vue3TouchEvents from \"vue3-touch-events\";\nimport * as locales from \"@locales\";\nimport { AppInsightsPlugin, AppInsightsPluginOptions } from \"vue3-application-insights\";\nimport { useAppInsights, AppInsightsOptionsKey, AppInsightsInstanceKey } from \"@core/composables/useAppInsights\";\nimport { useAppInsights as useInsightsFromLib } from \"vue3-application-insights\";\nimport { setupGlobalErrorHandlers } from \"@core/plugins/global-error-handler\";\nimport { useConnectionStatus } from \"@core/composables/useConnectionStatus\";\nimport { useSlowNetworkDetection } from \"@core/composables/useSlowNetworkDetection\";\nimport { useNotificationStore } from \"@core/notifications\";\nimport { registerNotificationBackend } from \"@shell/_internal/notifications/register-backend\";\n\n// Import Blade Registry\nimport { createBladeRegistry, BladeRegistryKey, IBladeRegistryInstance } from \"@core/composables/useBladeRegistry\";\n\nimport * as coreComposables from \"@core/composables\";\nimport \"normalize.css\";\nimport \"./assets/styles/fonts.scss\";\nimport \"./assets/styles/index.scss\";\nimport {\n createWidgetService,\n createMenuService,\n createAppBarWidgetService,\n createSettingsMenuService,\n createToolbarService,\n createLanguageService,\n} from \"@core/services\";\nimport {\n AppBarWidgetServiceKey,\n MenuServiceKey,\n NotificationStoreKey,\n SettingsMenuServiceKey,\n ToolbarServiceKey,\n WidgetServiceKey,\n LanguageServiceKey,\n IsMobileKey,\n IsDesktopKey,\n IsPhoneKey,\n IsTabletKey,\n IsTouchKey,\n BladeRoutesKey,\n} from \"@framework/injection-keys\";\n\nimport \"@fortawesome/fontawesome-free/css/fontawesome.min.css\";\nimport \"@fortawesome/fontawesome-free/css/solid.min.css\";\nimport \"bootstrap-icons/font/bootstrap-icons.min.css\";\nimport \"@material-symbols/font-300/index.css\";\n\ntype I18NParams = Parameters<typeof i18n.global.mergeLocaleMessage>;\n\ninterface FrameworkInstallArgs {\n router: Router;\n i18n?: {\n locale: string;\n fallbackLocale: string;\n };\n applicationInsights?: {\n instrumentationKey: string;\n appName?: string;\n cloudRole?: string;\n cloudRoleInstance?: string;\n };\n /**\n * AI Agent plugin options.\n * Configure tenantId here to identify the platform instance.\n *\n * @example\n * ```typescript\n * app.use(VirtoShellFramework, {\n * router,\n * aiAgent: {\n * config: {\n * tenantId: \"virto\"\n * }\n * }\n * });\n * ```\n */\n aiAgent?: AiAgentPluginOptions;\n}\n\nexport interface VcShellFrameworkPlugin {\n install(app: App, args: FrameworkInstallArgs): void;\n}\n\n// ── Install helpers ──────────────────────────────────────────────────\n\nfunction setupI18n(app: App, args: FrameworkInstallArgs) {\n if (args.i18n?.locale) {\n i18n.global.locale.value = args.i18n.locale;\n }\n if (args.i18n?.fallbackLocale) {\n i18n.global.fallbackLocale.value = args.i18n.fallbackLocale;\n }\n\n app.use(i18n);\n\n // Dev-mode: warn about missing translation keys\n if (import.meta.env.DEV) {\n i18n.global.setMissingHandler((locale, key) => {\n console.warn(`[vc-shell i18n] Missing translation: \"${key}\" for locale \"${locale}\"`);\n });\n }\n\n const languageService = createLanguageService();\n app.provide(LanguageServiceKey, languageService);\n\n const { resolveCamelCaseLocale } = languageService;\n\n app.config.globalProperties.$mergeLocaleMessage = (locale: I18NParams[0], message: I18NParams[1]) => {\n i18n.global.mergeLocaleMessage(resolveCamelCaseLocale(locale), message);\n };\n\n // Components locales\n Object.entries(locales).forEach(([key, message]) => {\n i18n.global.mergeLocaleMessage(resolveCamelCaseLocale(key), message);\n });\n}\n\nfunction setupBreakpoints(app: App) {\n const bp = useBreakpoints({\n phone: 480,\n desktop: 1024,\n });\n\n app.config.globalProperties.$isPhone = bp.smaller(\"phone\");\n app.config.globalProperties.$isTablet = bp.between(\"phone\", \"desktop\");\n app.config.globalProperties.$isMobile = bp.smaller(\"desktop\");\n app.config.globalProperties.$isDesktop = bp.greater(\"desktop\");\n app.config.globalProperties.$isTouch = \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\n\n // Typed Symbol keys (internal framework use)\n app.provide(IsPhoneKey, app.config.globalProperties.$isPhone);\n app.provide(IsTabletKey, app.config.globalProperties.$isTablet);\n app.provide(IsMobileKey, app.config.globalProperties.$isMobile);\n app.provide(IsDesktopKey, app.config.globalProperties.$isDesktop);\n app.provide(IsTouchKey, app.config.globalProperties.$isTouch);\n}\n\nfunction setupLegacyGlobals(app: App) {\n // Pages\n app.config.globalProperties.pages = [];\n\n // Blade routes\n app.config.globalProperties.bladeRoutes = [];\n app.provide(BladeRoutesKey, app.config.globalProperties.bladeRoutes);\n}\n\nfunction createAndProvideServices(app: App) {\n app.provide(WidgetServiceKey, createWidgetService());\n app.provide(ToolbarServiceKey, createToolbarService());\n app.provide(AppBarWidgetServiceKey, createAppBarWidgetService());\n app.provide(MenuServiceKey, createMenuService());\n app.provide(SettingsMenuServiceKey, createSettingsMenuService());\n app.provide(NotificationStoreKey, useNotificationStore());\n\n const bladeRegistryInstance: IBladeRegistryInstance = createBladeRegistry(app);\n app.provide(BladeRegistryKey, bladeRegistryInstance);\n}\n\nfunction installPlugins(app: App, args: FrameworkInstallArgs) {\n // Register notification backend before any plugin that might use notifications\n registerNotificationBackend();\n\n app.use(VcBladeNavigationComponent, { router: args.router });\n app.use(VcPopupHandler);\n app.use(AssetsDetailsModule);\n app.use(AssetsManagerModule);\n app.use(signalR);\n app.use(permissions);\n app.use<[]>(Vue3TouchEvents);\n\n app.use(aiAgentPlugin, args.aiAgent);\n}\n\nfunction provideApplicationInsightsOptions(app: App, args: FrameworkInstallArgs) {\n if (!args.applicationInsights?.instrumentationKey) return;\n\n const aiOptions: AppInsightsPluginOptions = {\n appInsightsConfig: {\n config: {\n instrumentationKey: args.applicationInsights.instrumentationKey,\n },\n },\n trackAppErrors: true,\n appName: args.applicationInsights?.appName,\n cloudRole: args.applicationInsights?.cloudRole,\n cloudRoleInstance: args.applicationInsights?.cloudRoleInstance,\n };\n\n // Provide options synchronously so components can inject at setup time\n // (useErrorHandler -> useAppInsights -> inject(AppInsightsOptionsKey))\n app.provide(AppInsightsOptionsKey, aiOptions);\n}\n\nfunction installApplicationInsightsDeferred(app: App, args: FrameworkInstallArgs) {\n if (!args.applicationInsights?.instrumentationKey) return;\n\n const aiOptions: AppInsightsPluginOptions = {\n appInsightsConfig: {\n config: {\n instrumentationKey: args.applicationInsights.instrumentationKey,\n },\n },\n trackAppErrors: true,\n appName: args.applicationInsights?.appName,\n cloudRole: args.applicationInsights?.cloudRole,\n cloudRoleInstance: args.applicationInsights?.cloudRoleInstance,\n };\n\n // Install the SDK plugin (may start telemetry collection)\n app.use(AppInsightsPlugin, aiOptions);\n\n // Re-provide instance under our own key so useAppInsights() can inject with a default\n // (avoids Vue \"injection not found\" warning when the library's private Symbol is used)\n const appInsightsInstance = app.runWithContext(() => useInsightsFromLib());\n app.provide(AppInsightsInstanceKey, appInsightsInstance);\n\n // Register router hooks for page tracking.\n // Note: the initial navigation's page-view may not be tracked since\n // router.isReady() may resolve before these hooks are registered.\n // This is an acceptable trade-off for removing SDK init from critical path.\n app.runWithContext(() => {\n const { setupPageTracking } = useAppInsights();\n\n args.router.beforeEach((to) => {\n setupPageTracking.beforeEach({ name: to.name as string });\n });\n\n args.router.afterEach((to) => {\n setupPageTracking.afterEach({ name: to.name as string, fullPath: to.fullPath });\n });\n });\n}\n\nfunction setupRouterGuards(router: Router) {\n const getParam = (to: RouteLocationNormalized) => {\n let param: {\n [k: string]: string | string[];\n } = {};\n\n if (Object.keys(to.params).length > 0) {\n param = Object.fromEntries(Object.entries(to.params).filter(([key]) => key !== \"pathMatch\"));\n }\n\n return param;\n };\n\n // Check if user is authenticated and redirect to login page if not.\n // TODO add check if app has login page\n router.beforeEach(async (to) => {\n const { isAuthenticated } = useUserManagement();\n\n if (to.meta.root === true) {\n try {\n if (!isAuthenticated.value) {\n localStorage.setItem(\"redirectAfterLogin\", to.fullPath);\n return { name: \"Login\" };\n }\n } catch (_e) {\n localStorage.setItem(\"redirectAfterLogin\", to.fullPath);\n return { name: \"Login\" };\n }\n }\n });\n\n // Check if user has access to the page and redirect to previous path if not.\n router.beforeEach((to, from) => {\n const { hasAccess } = usePermissions();\n if (!to.meta.permissions) {\n return true;\n } else if (hasAccess(to.meta.permissions as string | string[])) return true;\n else {\n notification.error(i18n.global.t(\"PERMISSION_MESSAGES.ACCESS_RESTRICTED\"), {\n timeout: 3000,\n });\n\n const param = getParam(to);\n\n return Object.keys(param)[0] ? `/${Object.values(param)[0]}` + from.path : from.path;\n }\n });\n}\n\n// ── Plugin entry point ───────────────────────────────────────────────\n\nexport default {\n install(app: App, args: FrameworkInstallArgs): void {\n // Register base theme\n coreComposables.useTheme().register([{ key: \"light\", localizationKey: \"core.themes.light\" }]);\n\n // HTTP Interceptors\n window.fetch = registerInterceptors(args.router);\n\n setupI18n(app, args);\n setupBreakpoints(app);\n setupLegacyGlobals(app);\n createAndProvideServices(app);\n installPlugins(app, args);\n\n // Provide AppInsights options synchronously (components inject at setup time)\n provideApplicationInsightsOptions(app, args);\n\n setupGlobalErrorHandlers(app);\n\n if (typeof window !== \"undefined\") {\n app.runWithContext(() => useConnectionStatus());\n app.runWithContext(() => useSlowNetworkDetection());\n }\n\n setupRouterGuards(args.router);\n\n // Defer non-critical plugins to post-paint.\n // setTimeout(fn, 0) yields to the browser's rendering pipeline —\n // the browser paints before executing the next macrotask.\n setTimeout(() => {\n performance.mark(\"vc:deferred-plugins-start\");\n // notifyMountComplete(); // Trigger deferred SignalR connection\n installApplicationInsightsDeferred(app, args); // AppInsights SDK + router hooks\n performance.mark(\"vc:deferred-plugins-done\");\n }, 0);\n },\n} as VcShellFrameworkPlugin;\n\n// ── Public API ───────────────────────────────────────────────────────\n\n// Injection keys (typed Symbol keys)\nexport * from \"./injection-keys\";\n\n// UI components (atoms, molecules, organisms)\nexport * from \"@ui/components\";\nexport * from \"@ui/types\";\n\n// Core composables\nexport * from \"@core/composables\";\n\n// Notifications (new API)\nexport {\n useBladeNotifications,\n useNotificationStore,\n useNotificationContext,\n useBroadcastFilter,\n NotificationContextKey,\n} from \"@core/notifications\";\nexport { notification } from \"@core/notifications/notification\";\nexport type {\n Severity,\n ToastConfig,\n NotificationTypeConfig,\n ModuleNotificationsConfig,\n NotificationAction,\n BladeNotificationOptions,\n BladeNotificationReturn,\n UseBroadcastFilterReturn,\n} from \"@core/notifications\";\n\n// Core\nexport * from \"@core/directives\";\nexport * from \"@core/types\";\nexport * from \"@core/api/platform\";\nexport * from \"@core/utilities\";\nexport * from \"@core/constants\";\n\n// Core plugins (public surface only)\nexport * from \"@core/plugins/modularity\";\nexport * from \"@core/plugins/permissions\";\nexport * from \"@core/plugins/validation\";\n\n// i18n (public singleton)\nexport { i18n } from \"@core/plugins/i18n\";\n\n// SignalR\nexport { signalR } from \"@core/plugins/signalR\";\n\n// Blade navigation (public composables + types)\nexport * from \"@core/blade-navigation\";\n\n// Popup (public composable)\nexport { usePopup } from \"@core/composables/usePopup\";\n\n// Shell components (public building blocks)\nexport * from \"@shell/components\";\nexport * from \"@shell/auth\";\nexport * from \"@shell/dashboard\";\n\n// AI Agent (also available via @vc-shell/framework/ai-agent)\nexport * from \"@core/plugins/ai-agent/public\";\n\n// Extensions (also available via @vc-shell/framework/extensions)\nexport * from \"@core/plugins/extension-points/public\";\n\n// Built-in modules\nexport * from \"@modules\";\n\n// Shared composables that moved to core/ui\nexport * from \"@core/composables/useBladeNavigationAdapter\";\nexport * from \"@core/composables/useBladeForm\";\n\n// Multilanguage selector (moved from shared to ui)\nexport * from \"@ui/components/molecules/multilanguage-selector\";\n\n// UI composables (useTableSort, useTableSelection)\nexport * from \"@ui/composables\";\n\n// Notification rendering internals (used by shell layout)\nimport \"@shell/_internal/notifications/styles/index.scss\";\nexport * from \"@shell/_internal/notifications/composables\";\nexport * from \"@shell/_internal/notifications/components\";\n\n// Blade navigation rendering components (VcBladeNavigation, VcBladeSlot)\nexport * from \"@shell/_internal/blade-navigation\";\n\n// Pre-registration functions (used by external modules before provide/inject tree exists)\nexport { registerExternalWidget, registerWidget } from \"@core/composables/useWidgets\";\nexport { registerToolbarItem } from \"@core/services/toolbar-service\";\nexport { addMenuItem } from \"@core/services/menu-service\";\nexport { addAppBarWidget } from \"@core/services/app-bar-menu-service\";\nexport { addSettingsMenuItem } from \"@core/services/settings-menu-service\";\nexport { registerDashboardWidget } from \"@core/services/dashboard-service\";\nexport type { IExternalWidgetRegistration, IWidgetTrigger } from \"@core/services/widget-service\";\n"],"names":["camelToSnake","str","m","kebabToCamel","x","kebabToPascal","camelCase","camelize","match","chr","imageExtensions","getExtension","fileName","isImage","name","readableSize","bytes","decimals","k","dm","sizes","extensionColors","getExtensionColor","ext","getExtensionLabel","permissions","app","hasAccess","usePermissions","useBladeNotifications","options","store","useNotificationStore","unsub","getCurrentScope","onScopeDispose","messages","computed","msg","unreadCount","markAsRead","useNotificationContext","ctx","inject","NotificationContextKey","useBroadcastFilter","NotificationContainerStateKey","logger","createLogger","signalR","_app","isAuthenticated","useUserManagement","reconnect","connection","useCypressSignalRMock","HubConnectionBuilder","LogLevel","start","err","stop","message","watch","value","defineAppModule","blades","locales","notificationTemplates","notifications","bladeRegistry","BladeRegistryKey","exportKey","component","type","config","template","notifyTypes","t","notification","key","i18n","createAppModule","pages","_components","restoreFromUrl","bladeStack","parsed","router","routeParams","workspaceMatch","navigateToMainRoute","bladeMatch","b","clearBladeStackRespectingGuards","bladesBeforeClose","lastBlade","bladeRouterGuard","to","r","tenantPrefix","parseBladeUrl","v","path","query","buildUrlFromStack","VcBladeNavigationComponent","args","bladeNavigationPluginData","setBladeNavigationInstance","useBladeRegistry","createBladeStack","BladeStackKey","setBladeStackInstance","messaging","createBladeMessaging","BladeMessagingKey","setBladeMessagingInstance","setBladeRegistryInstance","mainRoute","props","__props","emit","__emit","handleConfirm","close","_createBlock","VcPopup","$emit","_renderSlot","_ctx","_withCtx","_createElementVNode","_createElementBlock","_Fragment","_createVNode","_component_VcButton","$event","$slots","VcPopupBase","$t","registerPopupPresets","registerPopupPreset","vcPopupWarning","vcPopupError","vcPopupInfo","VcPopupHandler","popupPlugin","shallowReactive","PopupPluginKey","setPopupPluginInstance","COMPONENT_DEFAULTS","getComponentDefaults","componentName","debounce","func","delay","timer","resultsMap","once","result","throttle","wasThrottled","useFunctions","useNotifications","notifyType","types","handler","moduleNotifications","item","orderBy","fn","_notification","useAsync","innerAction","loading","ref","error","shouldNotify","notifyTimeout","action","payload","rest","e","parseError","notifId","timerId","n","setPendingErrorNotification","readonly","useApiClient","c","getApiClient","useLoading","useSettings","uiSettings","customSettingsApplied","SettingClient","getUiCustomizationSettings","settings","applySettings","onMounted","MAX_CONCURRENT_UPLOADS","uploadSingleFile","file","uploadPath","index","startingSortOrder","formData","response","uploadedFile","processBatched","items","processor","concurrency","results","i","batch","batchResults","batchIndex","useAssets","upload","files","fileArray","asset","remove","filesToDelete","initialAssetArr","assetKey","updatedAssetArr","_.cloneDeep","_.differenceWith","y","edit","updatedFiles","updatedFile","DEFAULT_CONCURRENCY","normalizedPath","useAssetsManager","source","_loading","_items","newVal","_sync","successfulUploads","removeMany","itemsToRemove","keysToRemove","reorder","newOrder","updateItem","existing","updated","useBeforeUnload","modified","onBeforeMount","preventUnload","onBeforeUnmount","event","unref","isEmptyValue","isMultilanguageProperty","property","isMultivalueProperty","isDictionaryProperty","isMeasureProperty","isColorProperty","createValue","params","cleanEmptyValues","locale","regularStrategy","context","otherLocales","newValues","booleanStrategy","_context","dictionaryStrategy","dictionary","setMultilanguageDictionary","setSingleLanguageDictionary","setMultilanguageMultivalueDictionary","setMultilanguageSingleValueDictionary","values","dictItem","locValue","dictionaryItem","existingLanguageCodes","languageCodes","langCode","measureStrategy","_locale","colorStrategy","resolveStrategy","useDynamicProperties","searchDictionary","searchMeasurements","dictionaryItemsLoading","searchDictionaryItems","loadDictionaries","propertyId","keyword","localizedValue","loc","loadMeasurements","measureId","_keyword","getPropertyValue","setPropertyValue","useWebVitals","callback","defaultCallback","metric","onFCP","onLCP","onCLS","onINP","onTTFB","useBladeWidgets","widgets","_service","WidgetServiceKey","InjectionError","widgetService","descriptor","BladeDescriptorKey","bladeId","decl","buildWidget","onUnmounted","refresh","widgetId","widget","w","refreshAll","registered","useWidgetTrigger","trigger","scope","WidgetScopeKey","headless","unwrapRecord","record","val","isRef","defineBladeContext","data","provide","BladeContextKey","toValue","injectBladeContext","isEmpty","semanticEqual","a","isEqualWith","valA","valB","useModificationTracker","initialValueProp","getClonedUnreffedValue","cloneDeep","pristineValue","currentValue","isModified","newExternalInitialValue","wasModified","newCurrentVal","newPristineVal","resetModificationState","newBaselineValueInput","newClonedBase","__registerBladeConfig","closeSelf","useBlade","useForm","isValid","useIsFormValid","isDirty","useIsFormDirty","useI18n","defaultAsset","assetNameClean","dotIndex","isDisabled","bladeToolbar","assetType","_unref","VcBlade","_hoisted_1","_hoisted_2","VcContainer","_hoisted_3","VcForm","_hoisted_4","VcImage","_openBlock","_hoisted_5","_normalizeStyle","_hoisted_6","VcField","Field","errorMessage","handleChange","errors","VcInput","_cache","VcTextarea","AssetsDetails","_AssetsDetails","AssetsDetailsModule","components","openBlade","manager","defaultAssets","isLoading","bladeTitle","isDragging","uploader","selectedItems","toggleUploader","sortAssets","sorted","dragOver","dragLeave","onDrop","fileList","existingNames","transfer","base","maxSortOrder","max","inputUpload","onItemClick","actionBuilder","VcDataTable","VcColumn","_toDisplayString","AssetsManager","_AssetsManager","AssetsManagerModule","OFFLINE_NOTIFICATION_ID","_isSetup","_isOnline","useConnectionStatus","isOnline","useNetwork","online","SLOW_REQUEST_THRESHOLD_MS","SLOW_EFFECTIVE_TYPES","_connectionHandler","SLOW_NETWORK_NOTIFICATION_ID","DISMISS_DELAY_MS","SLOW_NETWORK_MESSAGE","_dismissTimer","showSlowNotification","hideSlowNotification","_slowRequestCount","_isSlowEffectiveType","_pendingTimers","_trackedSlowIds","isSlowNetwork","trackRequest","id","untrackRequest","useSlowNetworkDetection","isSlow","slow","registerInterceptors","originalFetch","signOut","requestCounter","resolve","isApiRequest","input","raw","url","resource","init","requestId","controller","didTimeout","timeoutId","externalSignal","abortFromExternal","redirect","route","errorKey","recentErrors","DEDUP_WINDOW_MS","isDuplicate","now","last","setupGlobalErrorHandlers","existingHandler","instance","info","win","onUnhandledRejection","onWindowError","containerInstances","useInstance","saveInstance","position","unmountComponent","pos","clearContainer","getInstanceByPosition","notificationContainers","useContainer","defaultOptions","reactive","getAllNotifications","container","getNotificationsByPosition","getNotification","notificationId","generateRoot","rootInstance","positionSelector","renderRoot","pendingMounts","appendInstance","pending","mountPromise","dom","NotificationContainer","index$1","createApp","actions","nextTick","hasNotification","containers","positionToRemoveFrom","found","option","containerToUpdate","containerPosition","updatedNotification","targetPosition","propKey","propValue","generateId","registerNotificationBackend","setNotificationBackend","isMobile","isDesktop","useResponsive","renderMatchesViewport","isSidebarVisible","onModelUpdate","VcSidebar","Sidebar","SidebarComponent","processedLogo","VcButton","signIn","useExternalProvider","_renderList","provider","ExternalProvider","resolveSafeRedirectPath","candidate","redirectPath","formatSignInError","validatePasswordChange","fields","useRouter","validateField","customizationLoading","signInResult","user","getProviders","loginProviders","providersLoaded","customization","form","login","redirectTo","goToForgotPassword","VcAuthLayout","ExternalProviders","VcHint","ExtensionPoint","_createTextVNode","Login","_Login","forgotPasswordRequestSent","forgotPassword","requestPasswordReset","maskedEmail","email","domain","forgot","goBack","ForgotPassword","_ForgotPassword","validateToken","validatePassword","resetPasswordByToken","veeValidate","disableButton","validate","resetPassword","valid","loginResult","VcLoading","field","_mergeProps","ResetPassword","_ResetPassword","isFormValid","acceptInvitation","Invite","_Invite","changeUserPassword","cancelChange","changePassword","validateForm","serverErrors","clientErrors","VcBanner","ChangePasswordPage","_ChangePassword","LAYOUT_STORAGE_KEY","toGridstackWidget","fromGridstackNode","node","gridstackNodesToLayoutMap","nodes","layout","loadLayoutFromStorage","stored","saveLayoutToStorage","gridstackFormat","clearLayoutStorage","autoArrangeWidgets","columns","rowOccupancy","isPositionFree","width","height","row","occupied","col","occupyPosition","findFreePosition","mergeLayoutWithWidgets","savedLayout","savedPos","builtInPos","DEFAULT_OPTIONS","useGridstack","gridOptions","resizable","autoSave","onLayoutChange","grid","shallowRef","isInitialized","isUpdating","mergedOptions","initGrid","element","GridStack","handleAdded","handleRemoved","widgetData","_event","saveLayout","destroyGrid","addWidget","gsWidget","removeWidget","updateWidgetPosition","loadLayout","applyLayoutToGrid","resetToDefaults","batchUpdate","newWidgets","oldWidgets","addedWidgets","ow","removedWidgetIds","nw","gridRef","liveAnnouncement","dashboard","useDashboard","newLayout","announceToScreenReader","getPosition","getWidgetAriaLabel","__expose","_resolveDynamicComponent","dashboardRef","GridstackDashboard","_toGridstackWidget","_fromGridstackNode","_loadLayoutFromStorage","_saveLayoutToStorage","_mergeLayoutWithWidgets","_clearLayoutStorage","_LAYOUT_STORAGE_KEY","VcIcon","_hoisted_7","_withDirectives","_hoisted_8","_hoisted_9","_normalizeClass","containerRef","cssVars","vars","DEFAULT_COLOR","FALLBACK_TEXT","escapeMap","escapeHtml","char","normalizeRangeValue","timestamp","numericValue","filterDataByRange","accessor","rangeStart","rangeEnd","end","min","datum","comparable","formatAxisValue","formatter","formatNumericValue","resolveSeriesMeta","fallbackLabel","configKeys","keyItem","indexItem","buildChartTooltipHtml","title","titleMarkup","itemsMarkup","margin","xAccessor","d","filteredData","yAccessors","colors","buildTooltipMarkup","label","color","crosshairTooltipTemplate","_xValue","allData","leftNearestDatumIndex","activeDatum","ChartContainer","VisXYContainer","VisTooltip","VisCrosshair","VisLine","VisAxis","ChartLegend","barTooltipTriggers","VisGroupedBarSelectors","seriesIndex","normalizedSeriesIndex","seriesKey","VisGroupedBar","valueAccessor","colorAccessor","getSegmentLabel","datumLabel","configKey","donutTooltipTriggers","VisDonutSelectors","segmentDatum","VisSingleContainer","VisDonut","_deprecationWarned","warnDeprecated","method","replacement","descriptorToShim","activeId","_blades","_activeWorkspace","_resetAdapterState","getSharedState","bladeStackInstance","bladeMessagingInstance","bladeRegistryInstance","globalBladeNavigationPluginInstanceFallback","ws","extractBladeName","blade","comp","useBladeNavigation","activeWorkspace","currentDescriptor","getCurrentInstance","syncUrlPush","syncUrlReplace","createUrlSync","getCurrentBladeId","getBladeIdByIndex","allBlades","isWorkspace","parentId","closeBlade","prevented","goToRoot","routes","mainRouteAlias","getTenantPrefix","onParentCall","currentBladeIndex","callerId","onBeforeClose","cb","warn","resolveBladeByName","routeResolver","_to","setNavigationQuery","prefix","cleanQuery","getNavigationQuery","urlParams","cleanKey","numValue","setBladeError","bladeIdx","clearBladeError","currentBladeNavigationData","isEmptyPrimitive","aObj","bObj","allKeys","useBladeForm","canSaveOverride","autoBeforeClose","autoBeforeUnload","closeConfirmMessage","onRevert","formMeta","setFieldError","errorBag","pristineSnapshot","trackerIsModified","isReady","canSave","setBaseline","markReady","revert","showConfirmation","usePopup","shouldGuard","BladeFormKey","GAP","VISIBLE_TOASTS","defineComponent","notificationsList","expanded","interacting","collapseTimer","expandStack","collapseStack","heightsMap","handleHeightReport","toastId","rounded","isComponent","content","handleClose","handleClearAll","isTop","count","isExpanded","showClearAll","frontToastId","frontHeight","children","arrayIndex","sonnerIndex","heightSum","offset","initialHeight","toastStyle","toastProps","h","VcToast","toRaw","clearAllButton","groupHeight","oldestSonnerIdx","hSum","oldestOffset","oldestHeight","setupI18n","languageService","createLanguageService","LanguageServiceKey","resolveCamelCaseLocale","setupBreakpoints","bp","useBreakpoints","IsPhoneKey","IsTabletKey","IsMobileKey","IsDesktopKey","IsTouchKey","setupLegacyGlobals","BladeRoutesKey","createAndProvideServices","createWidgetService","ToolbarServiceKey","createToolbarService","AppBarWidgetServiceKey","createAppBarWidgetService","MenuServiceKey","createMenuService","SettingsMenuServiceKey","createSettingsMenuService","NotificationStoreKey","createBladeRegistry","installPlugins","Vue3TouchEvents","aiAgentPlugin","provideApplicationInsightsOptions","aiOptions","AppInsightsOptionsKey","installApplicationInsightsDeferred","AppInsightsPlugin","appInsightsInstance","useInsightsFromLib","AppInsightsInstanceKey","setupPageTracking","useAppInsights","setupRouterGuards","getParam","param","from","coreComposables.useTheme"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,SAASA,GAAaC,GAAqB;AAChD,SAAOA,EACJ,QAAQ,gBAAgB,SAAUC,GAAG;AACpC,WAAOA,EAAE,CAAC,IAAI,MAAMA,EAAE,CAAC;AAAA,EACzB,CAAC,EACA,YAAA;AACL;ACNO,MAAMC,KAAe,CAACF,MAAgBA,EAAI,QAAQ,OAAO,CAACG,MAAMA,EAAE,CAAC,EAAE,YAAA,CAAa;AAElF,SAASC,GAAcJ,GAAa;AACzC,QAAMK,IAAYH,GAAaF,CAAG;AAElC,SADmBK,EAAU,CAAC,EAAE,gBAAgBA,EAAU,UAAU,CAAC;AAEvE;ACNO,SAASC,GAASN,GAAa;AACpC,SAAOA,EAAI,QAAQ,WAAW,SAAUO,GAAOC,GAAK;AAClD,WAAOA,EAAI,YAAA;AAAA,EACb,CAAC;AACH;ACJA,MAAMC,yBAAsB,IAAI,CAAC,OAAO,OAAO,QAAQ,OAAO,KAAK,CAAC;AAEpE,SAASC,GAAaC,GAAkB;AACtC,SAAOA,EAAS,MAAM,GAAG,EAAE,IAAA,GAAO,YAAA;AACpC;AAEA,SAASC,GAAQC,GAA0B;AACzC,SAAKA,IACEJ,GAAgB,IAAIC,GAAaG,CAAI,KAAK,EAAE,IADjC;AAEpB;AAEA,SAASC,GAAaC,GAA2BC,IAAW,GAAG;AAC7D,MAAI,CAACD,EAAO,QAAO;AAEnB,QAAME,IAAI,MACJC,IAAKF,IAAW,IAAI,IAAIA,GACxBG,IAAQ,CAAC,SAAS,MAAM,MAAM,IAAI,GAElC,IAAI,KAAK,MAAM,KAAK,IAAIJ,CAAK,IAAI,KAAK,IAAIE,CAAC,CAAC;AAElD,SAAO,GAAG,YAAYF,IAAQ,KAAK,IAAIE,GAAG,CAAC,GAAG,QAAQC,CAAE,CAAC,CAAC,IAAIC,EAAM,CAAC,CAAC;AACxE;AAEA,MAAMC,KAA0C;AAAA,EAC9C,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAEA,SAASC,GAAkBR,GAAkC;AAC3D,MAAI,CAACA,EAAM,QAAO;AAClB,QAAMS,IAAMZ,GAAaG,CAAI,KAAK;AAClC,SAAOO,GAAgBE,CAAG,KAAK;AACjC;AAEA,SAASC,GAAkBV,GAAkC;AAC3D,SAAKA,KACGH,GAAaG,CAAI,KAAK,QAAQ,YAAA,IADpB;AAEpB;AC7CO,MAAMW,KAAc;AAAA,EACzB,QAAQC,GAAU;AAChB,UAAM,EAAE,WAAAC,EAAA,IAAcC,GAAA;AACtB,IAAAF,EAAI,OAAO,iBAAiB,aAAaC,GACzCD,EAAI,QAAQ,cAAcC,CAAS;AAAA,EACrC;AACF;ACKO,SAASE,GACdC,GAC4B;AAC5B,QAAMC,IAAQC,GAAA,GAGRC,IAAQF,EAAM,UAAU;AAAA,IAC5B,OAAOD,EAAQ;AAAA,IACf,QAAQA,EAAQ;AAAA,IAChB,SAASA,EAAQ;AAAA,EAAA,CAClB;AAGD,EAAII,QACFC,GAAeF,CAAK;AAItB,QAAMG,IAAWC;AAAA,IAAS,MACxBN,EAAM,SAAS,MAAM,OAAO,CAACO,MACvB,GAACA,EAAI,cAAc,CAACR,EAAQ,MAAM,SAASQ,EAAI,UAAU,KACzD,CAACA,EAAI,SACLR,EAAQ,UAAU,CAAEA,EAAQ,OAA4CQ,CAAG,EAEhF;AAAA,EAAA,GAGGC,IAAcF,EAAS,MAAMD,EAAS,MAAM,MAAM;AAExD,WAASI,EAAWF,GAAQ;AAC1B,IAAAP,EAAM,WAAWO,CAAG;AAAA,EACtB;AAEA,SAAO;AAAA,IACL,UAAAF;AAAA,IACA,aAAAG;AAAA,IACA,YAAAC;AAAA,EAAA;AAEJ;AChDO,SAASC,KAAwF;AACtG,QAAMC,IAAMC,GAAOC,EAAsB;AACzC,MAAI,CAACF;AACH,UAAM,IAAI,MAAM,sEAAsE;AAExF,SAAOA;AACT;ACFO,SAASG,KAA+C;AAC7D,QAAMd,IAAQC,GAAA;AACd,SAAO;AAAA,IACL,oBAAoBD,EAAM;AAAA,IAC1B,sBAAsBA,EAAM;AAAA,EAAA;AAEhC;ACyBO,MAAMe,KACX,OAAO,4BAA4B,GChC/BC,KAASC,EAAa,SAAS,GAExBC,KAAU;AAAA,EACrB,QAAQC,GAAW;AACjB,UAAMnB,IAAQC,GAAA,GACR,EAAE,iBAAAmB,EAAA,IAAoBC,GAAA;AAC5B,QAAIC,IAAY;AAChB,UAAMC,IACJC,GAAsB,uBAAuB,EAAE,iBAAiB,GAAA,CAAM,KACtE,IAAIC,GAAA,EACD,QAAQ,sBAAsB,EAC9B,uBAAA,EACA,iBAAiBC,GAAS,WAAW,EACrC,MAAA,GAECC,IAAQ,MAAM;AAClB,MAAAJ,EACG,QACA,KAAK,MAAM;AACVP,QAAAA,GAAO,KAAK,YAAY;AAAA,MAC1B,CAAC,EACA,MAAM,CAACY,MAAiB;AACvBZ,QAAAA,GAAO,MAAM,sBAAsBY,CAAG,GACtC,WAAW,MAAMD,EAAA,GAAS,GAAI;AAAA,MAChC,CAAC;AAAA,IACL;AAEA,mBAAeE,IAAO;AACpB,YAAMN,EAAW,KAAA;AAAA,IACnB;AAEA,IAAAA,EAAW,QAAQ,MAAM;AACvB,MAAID,KAAWK,EAAA;AAAA,IACjB,CAAC,GAEDJ,EAAW,GAAG,QAAQ,CAACO,MAA8B;AACnD,MAAA9B,EAAM,OAAO8B,CAAO;AAAA,IACtB,CAAC,GAEDP,EAAW,GAAG,oBAAoB,CAACO,MAA8B;AAC/D,MAAA9B,EAAM,OAAO8B,GAAS,EAAE,WAAW,IAAM;AAAA,IAC3C,CAAC,GAEDC;AAAA,MACEX;AAAA,MACA,OAAOY,MAAU;AACf,QAAIA,KACFV,IAAY,IACZK,EAAA,MAEAL,IAAY,IACZ,MAAMO,EAAA;AAAA,MAEV;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAAA,EAEtB;AACF,GCxDMb,KAASC,EAAa,YAAY;AA2BjC,SAASgB,GAAgBlC,GAAiC;AAC/D,QAAM,EAAE,QAAAmC,GAAQ,SAAAC,GAAS,uBAAAC,GAAuB,eAAAC,MAAkBtC;AAElE,SAAO;AAAA,IACL,QAAQJ,GAAgB;AACtB,YAAMK,IAAQC,GAAA;AAGd,UAAIiC,KAAU,OAAO,KAAKA,CAAM,EAAE,SAAS,GAAG;AAC5C,cAAMI,IAAgB3C,EAAI,eAAe,MAAMiB,GAA+B2B,EAAgB,CAAC;AAE/F,YAAI,CAACD,GAAe;AAClBtB,UAAAA,GAAO,MAAM,+EAA+E;AAAA;AAE5F,qBAAW,CAACwB,GAAWC,CAAS,KAAK,OAAO,QAAQP,CAAM,GAAG;AAC3D,kBAAMnD,IAAO0D,EAAU,QAAQD;AAC/B,YAAA7C,EAAI,eAAe,MAAM;AACvB,cAAA2C,EAAc,iBAAiBvD,GAAM;AAAA,gBACnC,WAAA0D;AAAA,gBACA,OAAOA,EAAU;AAAA,gBACjB,aAAaA,EAAU,eAAe;AAAA,gBACtC,UAAUA,EAAU,aAAa;AAAA,gBACjC,aAAaA,EAAU;AAAA,cAAA,CACxB;AAAA,YACH,CAAC;AAAA,UACH;AAAA,MAEJ;AAGA,UAAIJ;AACF,mBAAW,CAACK,GAAMC,CAAM,KAAK,OAAO,QAAQN,CAAa;AACvD,UAAArC,EAAM,aAAa0C,GAAMC,CAAM;AAKnC,UAAI,CAACN,KAAiBD;AACpB,mBAAWQ,KAAY,OAAO,OAAOR,CAAqB,GAAG;AAC3D,gBAAMM,IAAOE,EAAS;AACtB,UAAIF,KACF1C,EAAM,aAAa0C,GAAM;AAAA,YACvB,UAAAE;AAAA,YACA,OAAO,EAAE,MAAM,OAAA;AAAA,UAAO,CACvB;AAAA,QAEL;AAIF,UAAIV;AACF,mBAAWO,KAAa,OAAO,OAAOP,CAAM;AAC1C,cAAIO,EAAU,YAAY;AACxB,kBAAMI,IAAc,MAAM,QAAQJ,EAAU,UAAU,IAAIA,EAAU,aAAa,CAACA,EAAU,UAAU;AAItG,YADuBI,EAAY,OAAO,CAACC,MAAM,CAAC9C,EAAM,SAAS,IAAI8C,CAAC,CAAC,EACpD,SAAS,KAE1B9C,EAAM,UAAU;AAAA,cACd,OAAO6C;AAAA,cACP,SAAS,CAACf,MAAY;AACpB,gBAAIA,EAAQ,SACViB,EAAajB,EAAQ,OAAO;AAAA,kBAC1B,UAAU;AACR,oBAAA9B,EAAM,WAAW8B,CAAO;AAAA,kBAC1B;AAAA,gBAAA,CACD;AAAA,cAEL;AAAA,YAAA,CACD;AAAA,UAUL;AAAA;AAKJ,UAAIK;AACF,mBAAW,CAACa,GAAKlB,CAAO,KAAK,OAAO,QAAQK,CAAO;AACjD,UAAAc,GAAK,OAAO,mBAAmBD,GAAKlB,CAAO;AAAA,IAGjD;AAAA,EAAA;AAEJ;AAcO,SAASoB,GACdC,GACAhB,GACAC,GACAgB,GACA;AACA,SAAOnB,GAAgB;AAAA,IACrB,QAAQkB;AAAA,IACR,SAAAhB;AAAA,IACA,uBAAAC;AAAA,EAAA,CACD;AACH;AC/HA,eAAsBiB,GACpBC,GACAhB,GACAiB,GACA3D,GACA4D,GACAC,GACkB;AAElB,MAAI,CAACF,EAAO,aAAc,QAAO;AAGjC,QAAMG,IAAiBpB,EAAc,gBAAgBiB,EAAO,YAAY;AAGxE,MAAI,CAACG;AACH,mBAAQ,KAAK,8DAA8DH,EAAO,YAAY,GAAG,GAC7FC,KAAQG,GAAoBH,GAAQC,CAAW,GAC5C;AAIT,MAAI,CAACC,EAAe,KAAK;AACvB,mBAAQ;AAAA,MACN,2BAA2BA,EAAe,IAAI,kBAAkBH,EAAO,YAAY;AAAA,IAAA,GAEjFC,KAAQG,GAAoBH,GAAQC,CAAW,GAC5C;AAMT,MAAI7D,KAAa8D,EAAe,KAAK,eAAe,CAAC9D,EAAU8D,EAAe,KAAK,WAAW;AAC5F,mBAAQ,KAAK,gDAAgDA,EAAe,IAAI,GAAG,GACnFX,EAAa,MAAME,GAAK,OAAO,EAAE,uCAAuC,GAAG,EAAE,SAAS,KAAM,GACxFO,KAAQG,GAAoBH,GAAQC,CAAW,GAC5C;AAUT,MANyBH,EAAW,UAAU,OACxB,SAASI,EAAe,QAC5C,MAAMJ,EAAW,cAAc,EAAE,MAAMI,EAAe,MAAM,GAI1DH,EAAO,UAAU;AACnB,UAAMK,IAAatB,EAAc,gBAAgBiB,EAAO,QAAQ;AAChE,QAAIK,GAAY;AAKd,UADsBN,EAAW,OAAO,MAAM,KAAK,CAACO,MAAMA,EAAE,SAASD,EAAW,QAAQC,EAAE,UAAUN,EAAO,KAAK;AAE9G,eAAO;AAKT,UAAIK,EAAW,KAAK,aAAa;AAC/B,eAAO;AAGT,YAAMN,EAAW,UAAU;AAAA,QACzB,MAAMM,EAAW;AAAA,QACjB,OAAOL,EAAO;AAAA;AAAA,MAAA,CAEf;AAAA,IACH;AACE,cAAQ,KAAK,oDAAoDA,EAAO,QAAQ,GAAG;AAAA,EAEvF;AAEA,SAAO;AACT;ACrFA,eAAeO,GAAgCR,GAA2C;AACxF,SAAOA,EAAW,OAAO,MAAM,SAAS,KAAG;AACzC,UAAMS,IAAoBT,EAAW,OAAO,OACtCU,IAAYD,EAAkBA,EAAkB,SAAS,CAAC;AAQhE,QAPkB,MAAMT,EAAW,WAAWU,EAAU,EAAE,KAOtDV,EAAW,OAAO,MAAM,UAAUS,EAAkB;AACtD,aAAO;AAAA,EAEX;AAEA,SAAIT,EAAW,OAAO,MAAM,SAAS,KACnCA,EAAW,cAAc,EAAE,GAGtB;AACT;AAgBA,eAAsBW,GACpBC,GACAZ,GACAhB,GACA1C,GACA4D,GAC2B;AAE3B,MAAI,CAACU,EAAG,QAAQ,KAAK,CAACC,MAAMA,EAAE,MAAM,IAAI,EAAG;AAM3C,MAAI,CADoBD,EAAG,QAAQ,KAAK,CAACC,MAAMA,EAAE,MAAM,aAAa;AAGlE,WAAIb,EAAW,OAAO,MAAM,SAAS,KAE/B,CADe,MAAMQ,GAAgCR,CAAU,IAE1D,KAGX;AAIF,QAAMc,IAAgB,OAAO,OAAOF,EAAG,MAAM,IAAI,CAAC,KAAgB,IAG5DX,IAASc,GAAcH,EAAG,MAAME,CAAY;AAElD,MAAI,CAACb,EAAO;AAGV,WAAID,EAAW,OAAO,MAAM,SAAS,KAE/B,CADe,MAAMQ,GAAgCR,CAAU,IAE1D,KAGX;AAIF,QAAMG,IAAc,OAAO,YAAY,OAAO,QAAQS,EAAG,MAAM,EAAE,OAAO,CAAC,CAAA,EAAGI,CAAC,MAAM,OAAOA,KAAM,QAAQ,CAAC;AASzG,MAHwB,MAAMjB,GAAeC,GAAYhB,GAAeiB,GAAQ3D,GAAW4D,GAAQC,CAAW,GAGzF;AACnB,UAAM,EAAE,MAAAc,GAAM,OAAAC,MAAUC,GAAkBL,GAAcd,EAAW,OAAO,KAAK;AAC/E,WAAO,EAAE,MAAAiB,GAAM,OAAAC,GAAO,SAAS,GAAA;AAAA,EACjC;AAGF;AC1EO,MAAME,KAA6B;AAAA,EACxC,QAAQ/E,GAAUgF,GAA0B;AAC1C,UAAM,EAAE,QAAAnB,MAAWmB,GAGbC,IAAmD;AAAA,MACvD,QAAQD,EAAK;AAAA,IAAA;AAEf,IAAAE,GAA2BD,CAAyB;AAKpD,UAAMtC,IAAgB3C,EAAI,eAAe,MAAM;AAC7C,UAAI;AACF,eAAOmF,GAAA;AAAA,MACT,QAAQ;AACN,gBAAQ;AAAA,UACN;AAAA,QAAA;AAGF;AAAA,MACF;AAAA,IACF,CAAC;AAED,QAAI,CAACxC,GAAe;AAClB,cAAQ,MAAM,kEAAkE;AAChF;AAAA,IACF;AAGA,UAAM,EAAE,WAAA1C,EAAA,IAAcD,EAAI,eAAe,MAAME,IAAgB,GAGzDyD,IAAayB,GAAiBzC,GAAe1C,CAAS;AAC5D,IAAAD,EAAI,QAAQqF,IAAe1B,CAAU,GACrC2B,GAAsB3B,CAAU;AAGhC,UAAM4B,IAAYC,GAAqB7B,CAAU;AACjD,IAAA3D,EAAI,QAAQyF,IAAmBF,CAAS,GACxCG,GAA0BH,CAAS,GACnCI,GAAyBhD,CAAc;AAKvC,UAAMiD,IAAY/B,EAAO,YAAY,KAAK,CAACW,MAAMA,EAAE,MAAM,IAAI;AAC7D,IAAIoB,KACF/B,EAAO,SAAS+B,EAAU,MAAgB;AAAA,MACxC,MAAM;AAAA,MACN,WAAW,EAAE,QAAQ,MAAM,KAAA;AAAA,MAC3B,MAAM,EAAE,eAAe,GAAA;AAAA,IAAK,CAC7B,GAOH/B,EAAO,WAAW,CAACU,MAAOD,GAAiBC,GAAIZ,GAAYhB,GAAe1C,GAAW4D,CAAM,CAAC;AAAA,EAC9F;AACF;;;;;;;;;;;;;;;;ACxBA,UAAMgC,IAAQC,GAYRC,IAAOC;AAQb,aAASC,EAAcC,GAAyB;AAC9C,MAAAH,EAAK,SAAS,GAEVF,EAAM,kBACRK,EAAA;AAAA,IAEJ;;;kBArGEC,EAmDUC,IAAA;AAAA,QAlDP,SAASN,EAAA;AAAA,QACT,wBAAsBA,EAAA;AAAA,QACtB,OAAOA,EAAA;AAAA,QACP,UAAUA,EAAA;AAAA,QACV,gCAAOO,EAAAA,MAAK,OAAA;AAAA,MAAA;QASF,WACT,MAAQ;AAAA,UAARC,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;QAGC,QAAMC,EACf,CA8BO,EA/BY,OAAAN,QAAK;AAAA,UACxBI,EA8BOC,EAAA,QAAA,UAAA;AAAA,YA5BJ,OAAAL;AAAA,YACA,SAAO,MAAQD,EAAcC,CAAK;AAAA,UAAA,GAHrC,MA8BO;AAAA,YAzBLO,EAwBM,OAAA;AAAA,cAvBJ,WAAM,0BAAwB;AAAA,mDAC2BX,EAAA,SAAI;AAAA,kDAA8DA,EAAA,SAAI;AAAA,cAAA;;cAK/GA,EAAA,SAAI,kBAApBY,EASWC,GAAA,EAAA,KAAA,KAAA;AAAA,gBARTC,EAMWC,GAAA;AAAA,kBALR,MAAMf,EAAA;AAAA,kBACP,OAAM;AAAA,kBACL,SAAK,CAAAgB,MAAEb,EAAcC,CAAK;AAAA,gBAAA;6BAE3B,MAAkB;AAAA,wBAAfJ,EAAA,YAAY,GAAA,CAAA;AAAA,kBAAA;;;gBAEjBc,EAAqDC,GAAA,EAA1C,SAAOX,KAAK;AAAA,6BAAE,MAAiB;AAAA,wBAAdJ,EAAA,WAAW,GAAA,CAAA;AAAA,kBAAA;;;8BAEzCK,EAMWU,GAAA;AAAA;gBAJT,OAAM;AAAA,gBACL,SAAOX;AAAA,cAAA;2BAER,MAAiB;AAAA,sBAAdJ,EAAA,WAAW,GAAA,CAAA;AAAA,gBAAA;;;;;;;;QAtCdiB,EAAAA,OAAO;gBACZ;AAAA,gBAED,MAAsB;AAAA,YAAtBT,EAAsBC,EAAA,QAAA,QAAA;AAAA,UAAA;;;;;;;;;;;;;2BCX1BJ,EAiBca,IAAA;AAAA,MAhBZ,SAAQ;AAAA,MACR,MAAK;AAAA,MACJ,iBAAeC,EAAAA,GAAE,uCAAA;AAAA,MACjB,gBAAcA,EAAAA,GAAE,sCAAA;AAAA,MACjB,mBAAA;AAAA,MACC,OAAOnB,EAAA;AAAA,MACP,gCAAOO,EAAAA,MAAK,OAAA;AAAA,MACZ,kCAASA,EAAAA,MAAK,SAAA;AAAA,IAAA;iBAQf,MAAQ;AAAA,QAARC,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;MALAQ,EAAAA,OAAO;cACZ;AAAA,cAED,MAAsB;AAAA,UAAtBT,EAAsBC,EAAA,QAAA,QAAA;AAAA,QAAA;;;;;;;;;;;;2BCd1BJ,EAcca,IAAA;AAAA,MAbZ,SAAQ;AAAA,MACR,MAAK;AAAA,MACJ,gBAAcC,EAAAA,GAAE,kCAAA;AAAA,MAChB,OAAOnB,EAAA;AAAA,MACP,gCAAOO,EAAAA,MAAK,OAAA;AAAA,IAAA;iBAQb,MAAQ;AAAA,QAARC,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;MALAQ,EAAAA,OAAO;cACZ;AAAA,cAED,MAAsB;AAAA,UAAtBT,EAAsBC,EAAA,QAAA,QAAA;AAAA,QAAA;;;;;;;;;;;;2BCX1BJ,EAcca,IAAA;AAAA,MAbZ,SAAQ;AAAA,MACR,MAAK;AAAA,MACJ,gBAAcC,EAAAA,GAAE,kCAAA;AAAA,MAChB,OAAOnB,EAAA;AAAA,MACP,gCAAOO,EAAAA,MAAK,OAAA;AAAA,IAAA;iBAQb,MAAQ;AAAA,QAARC,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;MALAQ,EAAAA,OAAO;cACZ;AAAA,cAED,MAAsB;AAAA,UAAtBT,EAAsBC,EAAA,QAAA,QAAA;AAAA,QAAA;;;;;;ACHrB,SAASW,KAA6B;AAC3C,EAAAC,GAAoB,WAAWC,EAAc,GAC7CD,GAAoB,SAASE,EAAY,GACzCF,GAAoB,QAAQG,EAAW;AACzC;ACJO,MAAMC,KAAiB;AAAA,EAC5B,QAAQvH,GAAU;AAGhB,UAAMwH,IAA2B;AAAA,MAC/B,QAHaC,GAAuE,EAAE;AAAA,IAGtF;AAGF,IAAAzH,EAAI,OAAO,iBAAiB,eAAewH,GAC3CxH,EAAI,QAAQ0H,IAAgBF,CAAW,GACvCG,GAAuBH,CAAW,GAClCN,GAAA;AAAA,EACF;AACF,GCjBaU,KAAqB;AAAA,EAChC,OAAO;AAAA,IACL,WAAW;AAAA,IACX,UAAU;AAAA,IACV,MAAM;AAAA,IACN,cAAc;AAAA,EAAA;AAAA,EAGhB,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,EAAA;AAAA,EAGb,OAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW,CAAC,IAAI,IAAI,IAAI,GAAG;AAAA,IAC3B,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,cAAc;AAAA,EAAA;AAAA,EAGhB,YAAY;AAAA,IACV,UAAU;AAAA,IACV,cAAc;AAAA,EAAA;AAAA,EAGhB,UAAU;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,EAAA;AAAA,EAGb,QAAQ;AAAA,IACN,WAAW;AAAA,IACX,WAAW;AAAA,EAAA;AAAA,EAGb,SAAS;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,EAAA;AAAA,EAGb,OAAO;AAAA,IACL,eAAe;AAAA,IACf,qBAAqB;AAAA,EAAA;AAAA,EAGvB,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAAA,EAGZ,WAAW;AAAA,IACT,SAAS;AAAA,IACT,WAAW;AAAA,IACX,KAAK;AAAA,EAAA;AAET;AAUO,SAASC,GAAwDC,GAAwC;AAC9G,SAAOF,GAAmBE,CAAa;AACzC;AC3EA,SAAwBC,GAASC,GAAgCC,GAA6C;AAC5G,MAAIC,IAAuB;AAE3B,SAAO,YAAalD,GAAuB;AACzC,IAAIkD,KACF,aAAaA,CAAK,GAGpBA,IAAQ,OAAO,WAAW,MAAM;AAC9B,MAAAA,IAAQ,MACRF,EAAK,GAAGhD,CAAI;AAAA,IACd,GAAGiD,CAAK;AAAA,EACV;AACF;ACbA,SAAwBA,GAAMD,GAAoCC,IAAQ,GAAS;AACjF,aAAWD,GAAMC,CAAK;AACxB;ACFA,MAAME,yBAAiB,QAAA;AAEvB,SAAwBC,GAAKJ,GAAqE;AAChG,SAAO,YAAahD,GAA0B;AAC5C,QAAI,CAACmD,GAAW,IAAIH,CAAI,GAAG;AACzB,YAAMK,IAASL,EAAK,GAAGhD,CAAI;AAC3B,MAAAmD,GAAW,IAAIH,GAAMK,CAAM;AAAA,IAC7B;AACA,WAAOF,GAAW,IAAIH,CAAI;AAAA,EAC5B;AACF;ACVA,SAAwBM,GAASN,GAAoCC,GAA6C;AAChH,MAAIM,IAAe;AAEnB,SAAO,YAAavD,GAAuB;AACzC,IAAKuD,MACHP,EAAK,GAAGhD,CAAI,GACZuD,IAAe,IACf,WAAW,MAAM;AACf,MAAAA,IAAe;AAAA,IACjB,GAAGN,CAAK;AAAA,EAEZ;AACF;ACGO,SAASO,KAAmC;AACjD,SAAO;AAAA,IACL,UAAAT;AAAA,IACA,OAAAE;AAAA,IACA,MAAAG;AAAA,IACA,UAAAE;AAAA,EAAA;AAEJ;ACGO,SAASG,GAAiBC,GAAwD;AAQvF,QAAMrI,IAAQC,GAAA,GACRqI,IAAQD,IAAc,MAAM,QAAQA,CAAU,IAAIA,IAAa,CAACA,CAAU,IAAK,CAAA;AAErF,MAAIE,GAGArI;AACJ,EAAIoI,EAAM,WACRpI,IAAQF,EAAM,UAAU;AAAA,IACtB,OAAAsI;AAAA,IACA,SAAS,CAAC/H,MAAQgI,IAAUhI,CAAG;AAAA,EAAA,CAChC,GAEGJ,QACFC,GAAe,MAAMF,KAAS;AAIlC,QAAMsI,IAAsBlI,EAAS,MAC9BgI,EAAM,SACJtI,EAAM,SAAS,MAAM;AAAA,IAC1B,CAACyI,MAASA,EAAK,SAASA,EAAK,cAAc,QAAQH,EAAM,SAASG,EAAK,UAAU;AAAA,EAAA,IAFzD,CAAA,CAI3B;AAED,SAAO;AAAA,IACL,eAAenI,EAAS,MAAMoI,GAAQ1I,EAAM,QAAQ,OAAO,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC;AAAA,IACjF,qBAAAwI;AAAA,IACA,iBAAiBxI,EAAM;AAAA,IACvB,iBAAiBA,EAAM;AAAA,IACvB,YAAYA,EAAM;AAAA,IAClB,eAAeA,EAAM;AAAA,IACrB,wBAAwB,CAAC2I,MAAO;AAC9B,MAAAJ,IAAUI;AAAA,IACZ;AAAA,EAAA;AAEJ;AC3DA,IAAIC;AAEJ,MAAM5H,KAASC,EAAa,WAAW;AA2BhC,SAAS4H,GACdC,GACA/I,GACiC;AACjC,QAAMgJ,IAAUC,EAAI,EAAK,GACnBC,IAAQD,EAA6B,IAAI,GAEzCE,IAAenJ,GAAS,WAAW,IACnCoJ,IAAgBpJ,GAAS,iBAAiB;AAEhD,iBAAeqJ,EAAOC,MAAsBC,GAA8B;AACxE,IAAAP,EAAQ,QAAQ,IAChBE,EAAM,QAAQ;AAEd,QAAI;AACF,aAAO,MAAMH,EAAYO,GAAS,GAAGC,CAAI;AAAA,IAC3C,SAASC,GAAG;AACV,YAAMhG,IAASiG,GAAWD,CAAC;AAI3B,UAHAN,EAAM,QAAQ1F,GACdvC,GAAO,MAAM,wBAAwBuI,CAAC,GAElCL,KAAgBK,KAAK,OAAOA,KAAM,UAAU;AAC9C,cAAME,IAAU,eAAelG,EAAO,QAAQ,MAAM,GAAG,EAAE,CAAC,IAIpDmG,IAAU,WAAW,YAAY;AACrC,UAAKd,OAEHA,MADY,MAAM,OAAO,qEAAkC,EAAA,KAAA,CAAAe,MAAAA,EAAA,EAAA,GACvC,eAEtBf,GAAc,MAAMrF,EAAO,SAAS;AAAA,YAClC,SAAS4F;AAAA,YACT,gBAAgBM;AAAA,UAAA,CACjB;AAAA,QACH,GAAG,CAAC;AAEJ,QAAAG,GAA4BL,GAAGG,GAASD,CAAO;AAAA,MACjD;AAEA,YAAMF;AAAA,IACR,UAAA;AACE,MAAAR,EAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAASc,GAASd,CAAO;AAAA,IACzB,OAAOc,GAASZ,CAAK;AAAA,IACrB,QAAAG;AAAA,EAAA;AAEJ;AC7EO,SAASU,GACdC,GAC+B;AAC/B,iBAAeC,IAAe;AAE5B,WADe,IAAID,EAAA;AAAA,EAErB;AAEA,SAAO;AAAA,IACL,cAAAC;AAAA,EAAA;AAEJ;AChBO,SAASC,MAActF,GAAkD;AAC9E,SAAOrE,EAAS,MAAMqE,EAAK,KAAK,CAAC8D,MAASA,EAAK,KAAK,CAAC;AACvD;ACaO,SAASyB,KAAiC;AAC/C,QAAMC,IAAanB,EAAA,GACboB,IAAwBpB,EAAI,EAAK,GAEjC,EAAE,cAAAgB,EAAA,IAAiBF,GAAaO,EAAa,GAE7C,EAAE,SAAAtB,GAAS,QAAQuB,EAAA,IAA+BzB,GAAS,YAAY;AAC3E,QAAIuB,EAAsB,MAAO;AAEjC,UAAMpC,IAAS,OAAO,MAAMgC,EAAA,GAAgB,0BAAA,GACtCO,IAAW,MAAM,KAAK,MAAMvC,EAAO,gBAAgB,IAAI;AAE7D,IAAIuC,KAAY,CAACJ,EAAW,UAC1BA,EAAW,QAAQ;AAAA,MACjB,eAAeI,EAAS;AAAA,MACxB,MAAMA,EAAS;AAAA,MACf,OAAOA,EAAS;AAAA,IAAA;AAAA,EAGtB,CAAC;AAED,WAASC,EAAc7F,GAAyE;AAC9F,IAAAyF,EAAsB,QAAQ,IAC9BD,EAAW,QAAQ;AAAA,MACjB,GAAGA,EAAW;AAAA,MACd,MAAMxF,EAAK;AAAA,MACX,OAAOA,EAAK;AAAA,MACZ,QAAQA,EAAK;AAAA,MACb,MAAMA,EAAK;AAAA,IAAA;AAAA,EAEf;AAEA,SAAA8F,GAAU,YAAY;AACpB,IAAI,CAACN,EAAW,SAAS,CAACC,EAAsB,SAC9C,MAAME,EAAA;AAAA,EAEV,CAAC,GAEM;AAAA,IACL,YAAYhK,EAAS,MAAM6J,EAAW,SAAS,CAAA,CAAE;AAAA,IACjD,eAAAK;AAAA,IACA,SAASP,GAAWlB,CAAO;AAAA,EAAA;AAE/B;AC7DA,MAAM/H,KAASC,EAAa,YAAY,GAGlCyJ,KAAyB;AAe/B,eAAeC,GACbC,GACAC,GACAC,GACAC,GAC8B;AAC9B,QAAMC,IAAW,IAAI,SAAA;AACrB,EAAAA,EAAS,OAAO,QAAQJ,CAAI;AAO5B,QAAMK,IAAW,OALF,MAAM,MAAM,0BAA0BJ,CAAU,IAAI;AAAA,IACjE,QAAQ;AAAA,IACR,MAAMG;AAAA,EAAA,CACP,GAE6B,KAAA;AAE9B,MAAIC,GAAU,QAAQ;AACpB,UAAMC,IAAeD,EAAS,CAAC;AAC/B,WAAAC,EAAa,kCAAkB,KAAA,GAC/BA,EAAa,YACXH,MAAsB,UAAaA,KAAqB,IAAIA,IAAoBD,IAAQ,IAAI,GAC9FI,EAAa,MAAMA,EAAa,MAAM,UAAUA,EAAa,GAAG,IAAI,IAEhE,UAAUA,MACZA,EAAa,OAAON,EAAK,OAGpBM;AAAA,EACT;AAEA,SAAO;AACT;AAKA,eAAeC,GACbC,GACAC,GACAC,GACc;AACd,QAAMC,IAAe,CAAA;AAErB,WAASC,IAAI,GAAGA,IAAIJ,EAAM,QAAQI,KAAKF,GAAa;AAClD,UAAMG,IAAQL,EAAM,MAAMI,GAAGA,IAAIF,CAAW,GACtCI,IAAe,MAAM,QAAQ,IAAID,EAAM,IAAI,CAAChD,GAAMkD,MAAeN,EAAU5C,GAAM+C,IAAIG,CAAU,CAAC,CAAC;AACvG,IAAAJ,EAAQ,KAAK,GAAGG,CAAY;AAAA,EAC9B;AAEA,SAAOH;AACT;AAEO,SAASK,KAA6B;AAC3C,QAAM7C,IAAUC,EAAI,EAAK;AAQzB,iBAAe6C,EAAOC,GAAiBjB,GAAoBE,GAAqD;AAC9G,QAAI;AACF,MAAAhC,EAAQ,QAAQ;AAEhB,YAAMgD,IAAY,MAAM,KAAKD,CAAK;AAUlC,cAPsB,MAAMX;AAAAA,QAC1BY;AAAA,QACA,CAACnB,GAAME,MAAUH,GAAiBC,GAAMC,GAAYC,GAAOC,CAAiB;AAAA,QAC5EL;AAAA,MAAA,GAImB,OAAO,CAACsB,MAAiCA,MAAU,IAAI;AAAA,IAC9E,SAAS/C,GAAO;AACdjI,YAAAA,GAAO,MAAM,kBAAkBiI,CAAK,GAC9BA;AAAA,IACR,UAAA;AACE,MAAAF,EAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAEA,WAASkD,EAAOC,GAA+BC,GAAiCC,IAAW,OAAuB;AAChH,QAAI;AACF,MAAArD,EAAQ,QAAQ;AAEhB,UAAIsD,IAAkBC,EAAYH,CAAe,KAAK,CAAA;AAEtD,aAAIE,KAAmBA,EAAgB,UAAUH,EAAc,SAAS,MACtEG,IAAkBE,GAAiBF,GAAiBH,GAAe,CAAC7N,GAAGmO,MAAMnO,EAAE+N,CAAQ,MAAMI,EAAEJ,CAAQ,CAAC,IAGnGC;AAAA,IACT,SAASpD,GAAO;AACdjI,YAAAA,GAAO,MAAM,kBAAkBiI,CAAK,GAC9BA;AAAA,IACR,UAAA;AACE,MAAAF,EAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAEA,WAAS0D,EAAKC,GAA8BP,GAAiD;AAG3F,QAAIO,EAAa,WAAWP,EAAgB;AAC1C,aAAOO,EAAa,IAAI,CAAC9B,OAAU,EAAE,GAAGA,IAAO;AAGjD,UAAMyB,IAAkBC,EAAYH,CAAe,KAAK,CAAA;AAExD,WAAIE,KAAmBA,EAAgB,UACrCK,EAAa,QAAQ,CAACC,MAAgB;AACpC,YAAM7B,IAAQuB,EAAgB,UAAU,CAACL,MAAUA,EAAM,QAAQW,EAAY,GAAG;AAChF,MAAI7B,MAAU,OACZuB,EAAgBvB,CAAK,IAAI,EAAE,GAAGuB,EAAgBvB,CAAK,GAAG,GAAG6B,EAAA;AAAA,IAE7D,CAAC,GAGIN;AAAA,EACT;AAEA,SAAO;AAAA,IACL,QAAAR;AAAA,IACA,QAAAI;AAAA,IACA,MAAAQ;AAAA,IACA,SAASnM,EAAS,MAAMyI,EAAQ,KAAK;AAAA,EAAA;AAEzC;ACtJA,MAAM/H,KAASC,EAAa,oBAAoB,GA2B1C2L,KAAsB;AAK5B,eAAejC,GACbC,GACAC,GACAC,GACAC,GAC2B;AAC3B,QAAMC,IAAW,IAAI,SAAA;AACrB,EAAAA,EAAS,OAAO,QAAQJ,CAAI;AAE5B,QAAMiC,IAAiBhC,EAAW,WAAW,GAAG,IAAIA,EAAW,MAAM,CAAC,IAAIA,GAMpEI,IAAW,OALF,MAAM,MAAM,0BAA0B4B,CAAc,IAAI;AAAA,IACrE,QAAQ;AAAA,IACR,MAAM7B;AAAA,EAAA,CACP,GAE6B,KAAA;AAE9B,MAAIC,GAAU,QAAQ;AACpB,UAAMC,IAAeD,EAAS,CAAC;AAC/B,WAAAC,EAAa,kCAAkB,KAAA,GAC/BA,EAAa,YACXH,MAAsB,UAAaA,KAAqB,IAAIA,IAAoBD,IAAQ,IAAI,GAC9FI,EAAa,MAAMA,EAAa,MAAM,UAAUA,EAAa,GAAG,IAAI,IAEhE,UAAUA,MACZA,EAAa,OAAON,EAAK,OAGpBM;AAAA,EACT;AAEA,SAAO;AACT;AAKA,eAAeC,GACbC,GACAC,GACAC,GACc;AACd,QAAMC,IAAe,CAAA;AAErB,WAASC,IAAI,GAAGA,IAAIJ,EAAM,QAAQI,KAAKF,GAAa;AAClD,UAAMG,IAAQL,EAAM,MAAMI,GAAGA,IAAIF,CAAW,GACtCI,IAAe,MAAM,QAAQ,IAAID,EAAM,IAAI,CAAChD,GAAMkD,MAAeN,EAAU5C,GAAM+C,IAAIG,CAAU,CAAC,CAAC;AACvG,IAAAJ,EAAQ,KAAK,GAAGG,CAAY;AAAA,EAC9B;AAEA,SAAOH;AACT;AAEO,SAASuB,GACdC,GACAhN,GACwB;AACxB,QAAMiN,IAAWhE,EAAI,EAAK,GAMpBiE,IAASjE,EAAiB+D,EAAO,SAAS,CAAA,CAAE;AAGlD,EAAAhL;AAAA,IACE,MAAMgL,EAAO;AAAA,IACb,CAACG,MAAW;AACV,MAAAD,EAAO,QAAQC,KAAU,CAAA;AAAA,IAC3B;AAAA,IACA,EAAE,MAAM,IAAM,WAAW,GAAA;AAAA,EAAK;AAIhC,WAASC,IAAQ;AACf,IAAAJ,EAAO,QAAQE,EAAO;AAAA,EACxB;AAEA,QAAM7B,IAA0B6B,GAC1BlE,IAAUzI,EAAS,MAAM0M,EAAS,KAAK,GAEvC1B,IAAcvL,EAAQ,eAAe6M,IACrCR,IAAWrM,EAAQ,YAAY;AAErC,iBAAe8L,EAAOC,GAAiBf,GAA2C;AAChF,QAAI;AACF,MAAAiC,EAAS,QAAQ;AAEjB,YAAMjB,IAAY,MAAM,KAAKD,CAAK,GAC5BjB,IAAa9K,EAAQ,WAAA,GAQrBqN,KANgB,MAAMjC;AAAA,QAC1BY;AAAA,QACA,CAACnB,GAAME,MAAUH,GAAiBC,GAAMC,GAAYC,GAAOC,CAAiB;AAAA,QAC5EO;AAAA,MAAA,GAGsC,OAAO,CAACU,MAA8BA,MAAU,IAAI;AAC5F,MAAAiB,EAAO,QAAQ,CAAC,GAAGA,EAAO,OAAO,GAAGG,CAAiB,GACrDD,EAAA;AAAA,IACF,SAASlE,GAAO;AACdjI,YAAAA,GAAO,MAAM,kBAAkBiI,CAAK,GAC9BA;AAAA,IACR,UAAA;AACE,MAAA+D,EAAS,QAAQ;AAAA,IACnB;AAAA,EACF;AAEA,iBAAef,EAAOxD,GAAgC;AACpD,UAAM4E,EAAW,CAAC5E,CAAI,CAAC;AAAA,EACzB;AAEA,iBAAe4E,EAAWC,GAA2C;AACnE,QAAIvN,EAAQ,iBAEN,CADc,MAAMA,EAAQ,cAAA;AAChB;AAGlB,UAAMwN,IAAe,IAAI,IAAID,EAAc,IAAI,CAAC9B,MAAMA,EAAEY,CAAQ,CAAC,CAAC;AAClE,IAAAa,EAAO,QAAQA,EAAO,MAAM,OAAO,CAACzB,MAAM,CAAC+B,EAAa,IAAI/B,EAAEY,CAAQ,CAAC,CAAC,GACxEe,EAAA;AAAA,EACF;AAEA,WAASK,EAAQC,GAA6B;AAC5C,IAAAR,EAAO,QAAQQ,EAAS,IAAI,CAAChF,OAAU,EAAE,GAAGA,IAAO,GACnD0E,EAAA;AAAA,EACF;AAEA,WAASO,EAAWjF,GAAuB;AACzC,UAAMqC,IAAQmC,EAAO,MAAM,UAAU,CAACU,MAAaA,EAASvB,CAAQ,MAAM3D,EAAK2D,CAAQ,CAAC;AACxF,QAAItB,MAAU,IAAI;AAChB,YAAM8C,IAAU,CAAC,GAAGX,EAAO,KAAK;AAChC,MAAAW,EAAQ9C,CAAK,IAAI,EAAE,GAAGmC,EAAO,MAAMnC,CAAK,GAAG,GAAGrC,EAAA,GAC9CwE,EAAO,QAAQW,GACfT,EAAA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAA/B;AAAA,IACA,QAAAS;AAAA,IACA,QAAAI;AAAA,IACA,YAAAoB;AAAA,IACA,SAAAG;AAAA,IACA,YAAAE;AAAA,IACA,SAAA3E;AAAA,EAAA;AAEJ;AC5KO,MAAM8E,KAAkB,CAACC,MAA0D;AACxF,EAAAC,GAAc,MAAM;AAClB,WAAO,iBAAiB,gBAAgBC,CAAa;AAAA,EACvD,CAAC,GAEDC,GAAgB,MAAM;AACpB,WAAO,oBAAoB,gBAAgBD,CAAa;AAAA,EAC1D,CAAC;AAED,WAASA,EAAcE,GAAc;AACnC,IAAKC,EAAML,CAAQ,KACnBI,EAAM,eAAA;AAAA,EACR;AAEA,SAAO;AAAA,IACL,UAAAJ;AAAA,EAAA;AAEJ;AC1BO,SAASM,GAAapM,GAAyB;AAIpD,SAHI,GAAuBA,KAAU,QACjC,OAAOA,KAAU,YAAY,MAAMA,CAAK,KACxC,OAAOA,KAAU,YAAYA,EAAM,OAAO,WAAW,KACrD,OAAOA,KAAU,YAAY,OAAO,KAAKA,CAAK,EAAE,WAAW;AAEjE;AAEO,SAASqM,GAAwBC,GAAkC;AACxE,SAAO,EAAQA,EAAS;AAC1B;AAEO,SAASC,GAAqBD,GAAkC;AACrE,SAAO,EAAQA,EAAS;AAC1B;AAEO,SAASE,GAAqBF,GAAkC;AACrE,SAAO,EAAQA,EAAS;AAC1B;AAEO,SAASG,GAAkBH,GAAkC;AAClE,SAAOA,EAAS,cAAc;AAChC;AAEO,SAASI,GAAgBJ,GAAkC;AAChE,SAAOA,EAAS,cAAc;AAChC;AAEO,SAASK,EAAYC,GAAyD;AACnF,SAAO,EAAE,aAAa,IAAO,GAAGA,EAAA;AAClC;AAEO,SAASC,GAAiBP,GAAyBQ,GAAuB;AAC/E,EAAKR,EAAS,WAEVD,GAAwBC,CAAQ,KAAKQ,IACvCR,EAAS,SAASA,EAAS,OAAO,OAAO,CAAChK,MAAMA,EAAE,iBAAiBwK,CAAM,IAEzER,EAAS,SAAS,CAAA,GAGhBA,EAAS,OAAO,SAAS,KAAKA,EAAS,OAAO,MAAM,CAAChK,MAAM8J,GAAa9J,EAAE,KAAK,CAAC,MAClFgK,EAAS,SAAS,CAAA;AAEtB;AC1CO,MAAMS,KAAyC;AAAA,EACpD,IAAIT,GAAyBQ,GAAsC;AACjE,WAAIT,GAAwBC,CAAQ,IAC9BC,GAAqBD,CAAQ,IACvBA,EAAS,QAAQ,OAAO,CAAChK,MAAMA,EAAE,iBAAiBwK,CAAM,KAAK,CAAA,KAIrER,EAAS,QAAQ,KAAK,CAAChK,MAAMA,EAAE,iBAAiBwK,CAAM,KAAKR,EAAS,QAAQ,KAAK,CAAChK,MAAM,CAACA,EAAE,YAAY,IAC5F,SAAoB,KAG/BiK,GAAqBD,CAAQ,IACvBA,EAAS,UAAU,CAAA,IAGrBA,EAAS,SAAS,CAAC,GAAG,SAAoB;AAAA,EACpD;AAAA,EAEA,IAAIA,GAAyBtM,GAA2BgN,GAA2B;AACjF,QAAI,CAAC,MAAM,QAAQhN,CAAK,KAAKoM,GAAapM,CAAK,GAAG;AAChD,MAAA6M,GAAiBP,GAAUU,EAAQ,MAAM;AACzC;AAAA,IACF;AAEA,QAAIX,GAAwBC,CAAQ,GAAG;AACrC,UAAI,MAAM,QAAQtM,CAAK,GAAG;AACxB,cAAMiN,IAAeX,EAAS,QAAQ,OAAO,CAAChK,MAAMA,EAAE,iBAAiB0K,EAAQ,MAAM,KAAK,CAAA,GACpFE,IAAalN,EAA+B;AAAA,UAAI,CAACyG,MACrDkG,EAAY,EAAE,GAAGlG,GAAM,cAAcuG,EAAQ,OAAA,CAAQ;AAAA,QAAA;AAEvD,QAAAV,EAAS,SAAS,CAAC,GAAGW,GAAc,GAAGC,CAAS;AAAA,MAClD,OAAO;AACL,cAAMvB,IAAWW,EAAS,QAAQ,KAAK,CAAChK,MAAMA,EAAE,iBAAiB0K,EAAQ,MAAM;AAC/E,QAAIrB,IACFA,EAAS,QAAQ3L,KAEZsM,EAAS,WAAQA,EAAS,SAAS,CAAA,IACxCA,EAAS,OAAO,KAAKK,EAAY,EAAE,OAAA3M,GAAwB,cAAcgN,EAAQ,OAAA,CAAQ,CAAC;AAAA,MAE9F;AACA;AAAA,IACF;AAEA,QAAI,MAAM,QAAQhN,CAAK,GAAG;AACxB,MAAAsM,EAAS,SAAUtM,EAA+B,IAAI,CAACyG,MAASkG,EAAYlG,CAAI,CAAC;AACjF;AAAA,IACF;AAEA,IAAI6F,EAAS,SAAS,CAAC,IACrB,OAAO,OAAOA,EAAS,OAAO,CAAC,GAAG,EAAE,OAAAtM,GAAO,IAE3CsM,EAAS,SAAS,CAACK,EAAY,EAAE,OAAA3M,EAAA,CAAwB,CAAC;AAAA,EAE9D;AACF,GCvDamN,KAAyC;AAAA,EACpD,IAAIb,GAAyBQ,GAAsC;AACjE,WAAIT,GAAwBC,CAAQ,KAEhCA,EAAS,QAAQ,KAAK,CAAChK,MAAMA,EAAE,iBAAiBwK,CAAM,KAAKR,EAAS,QAAQ,KAAK,CAAChK,MAAM,CAACA,EAAE,YAAY,IAC7F,SAAS,KAEhBgK,EAAS,SAAS,CAAC,GAAG,SAAS;AAAA,EACxC;AAAA,EAEA,IAAIA,GAAyBtM,GAA2BoN,GAA4B;AAClF,IAAId,EAAS,SAAS,CAAC,IACrB,OAAO,OAAOA,EAAS,OAAO,CAAC,GAAG,EAAE,OAAAtM,GAAO,IAE3CsM,EAAS,SAAS,CAACK,EAAY,EAAE,OAAA3M,EAAA,CAAO,CAAC;AAAA,EAE7C;AACF,GCjBaqN,KAA4C;AAAA,EACvD,IAAIf,GAAyBQ,GAAsC;AACjE,WAAIT,GAAwBC,CAAQ,IAC9BC,GAAqBD,CAAQ,IACvBA,EAAS,QAAQ,OAAO,CAAChK,MAAMA,EAAE,iBAAiBwK,CAAM,KAAK,CAAA,KAIrER,EAAS,QAAQ,KAAK,CAAChK,MAAMA,EAAE,iBAAiBwK,CAAM,KAAKR,EAAS,QAAQ,KAAK,CAAChK,MAAM,CAACA,EAAE,YAAY,IAC5F,WAAsB,KAGjCiK,GAAqBD,CAAQ,IACvBA,EAAS,UAAU,CAAA,IAGrBA,EAAS,SAAS,CAAC,GAAG,WAAsB;AAAA,EACtD;AAAA,EAEA,IAAIA,GAAyBtM,GAA2BgN,GAA2B;AACjF,UAAM,EAAE,YAAAM,GAAY,QAAAR,EAAA,IAAWE;AAG/B,QAAI,CAAC,MAAM,QAAQhN,CAAK,KAAKoM,GAAapM,CAAK,GAAG;AAChD,MAAA6M,GAAiBP,GAAUQ,CAAM;AACjC;AAAA,IACF;AAEA,IAAKQ,GAAY,WAEbjB,GAAwBC,CAAQ,IAClCiB,GAA2BjB,GAAUtM,GAAOsN,GAAYR,CAAM,IAE9DU,GAA4BlB,GAAUtM,GAAOsN,CAAU;AAAA,EAE3D;AACF;AAEA,SAASC,GACPjB,GACAtM,GACAsN,GACAR,GACM;AACN,EAAI,MAAM,QAAQ9M,CAAK,IACrByN;AAAA,IACEnB;AAAA,IACAtM;AAAA,IACAsN;AAAA,EAAA,IAGFI,GAAsCpB,GAAUtM,GAAiBsN,GAAYR,CAAM;AAEvF;AAEA,SAASW,GACPnB,GACAqB,GACAL,GACM;AACN,EAAAhB,EAAS,SAASqB,EAAO,QAAQ,CAAClH,MAAS;AACzC,UAAMmH,IAAWN,EAAW;AAAA,MAC1B,CAACjR,MAAMA,EAAE,OAAQoK,EAAuC,WAAWpK,EAAE,OAAOoK,EAAK;AAAA,IAAA;AAGnF,WAAImH,GAAU,iBAAiB,SACtBA,EAAS,gBAAgB;AAAA,MAAI,CAACC,MACnClB,EAAY;AAAA,QACV,YAAYiB,EAAS;AAAA,QACrB,OAAOA,EAAS;AAAA,QAChB,cAAcC,EAAS;AAAA,QACvB,OAAOA,EAAS,SAASD,EAAS;AAAA,QAClC,SAASA,EAAS;AAAA,QAClB,WAAWA,EAAS;AAAA,MAAA,CACrB;AAAA,IAAA,IAIEjB,EAAYlG,CAA8C;AAAA,EACnE,CAAC;AACH;AAEA,SAASiH,GACPpB,GACAtM,GACAsN,GACAR,GACM;AACN,QAAMgB,IAAiBR,EAAW,KAAK,CAACjR,MAAMA,EAAE,OAAO2D,CAAK;AAE5D,MAAI,CAAC8N,GAAgB;AACnB,IAAAxB,EAAS,SAAS,CAAA;AAClB;AAAA,EACF;AAEA,MAAIwB,EAAe,iBAAiB;AAClC,IAAAxB,EAAS,SAASwB,EAAe,gBAAgB;AAAA,MAAI,CAACD,MACpDlB,EAAY;AAAA,QACV,YAAYmB,EAAe;AAAA,QAC3B,OAAOA,EAAe;AAAA,QACtB,cAAcD,EAAS;AAAA,QACvB,OAAOA,EAAS,SAASC,EAAe;AAAA,QACxC,SAASA,EAAe;AAAA,QACxB,WAAWA,EAAe;AAAA,MAAA,CAC3B;AAAA,IAAA;AAAA,OAEE;AACL,UAAMC,IAAwB,CAAC,GAAG,IAAI,KAAKzB,EAAS,UAAU,CAAA,GAAI,IAAI,CAAChK,MAAMA,EAAE,YAAY,EAAE,OAAO,OAAO,CAAC,CAAC,GACvG0L,IAAgBD,EAAsB,SAAS,IAAIA,IAAwBjB,IAAS,CAACA,CAAM,IAAI,CAAA;AAErG,IAAAR,EAAS,SAAS0B,EAAc;AAAA,MAAI,CAACC,MACnCtB,EAAY;AAAA,QACV,YAAYmB,EAAe;AAAA,QAC3B,OAAOA,EAAe;AAAA,QACtB,cAAcG;AAAA,QACd,OAAOH,EAAe;AAAA,QACtB,SAASA,EAAe;AAAA,QACxB,WAAWA,EAAe;AAAA,MAAA,CAC3B;AAAA,IAAA;AAAA,EAEL;AACF;AAEA,SAASN,GACPlB,GACAtM,GACAsN,GACM;AACN,MAAI,MAAM,QAAQtN,CAAK;AACrB,IAAAsM,EAAS,SAAUtM,EAA8D,QAAQ,CAACyG,MAAS;AACjG,YAAMmH,IAAWN,EAAW;AAAA,QAC1B,CAACjR,MAAMA,EAAE,OAAQoK,EAAuC,WAAWpK,EAAE,OAAOoK,EAAK;AAAA,MAAA;AAGnF,aACSkG,EADLiB,IACiB;AAAA,QACjB,YAAYA,EAAS;AAAA,QACrB,OAAOA,EAAS;AAAA,QAChB,OAAOnH,EAAK,SAASmH,EAAS;AAAA,QAC9B,SAASA,EAAS;AAAA,QAClB,WAAWA,EAAS;AAAA,MAAA,IAILnH,CAHhB;AAAA,IAIL,CAAC;AAAA,OACI;AACL,QAAI2F,GAAapM,CAAK,GAAG;AACvB,MAAAsM,EAAS,SAAS,CAAA;AAClB;AAAA,IACF;AAEA,UAAMwB,IAAiBR,EAAW,KAAK,CAACjR,MAAMA,EAAE,OAAO2D,CAAK;AAC5D,IAAAsM,EAAS,SAAS;AAAA,MAChBK,EAAY;AAAA,QACV,YAAYmB,GAAgB;AAAA,QAC5B,OAAOA,GAAgB;AAAA,QACvB,OAAQA,GAAoE,SAASA,GAAgB;AAAA,QACrG,SAAS9N;AAAA,QACT,WAAW8N,GAAgB;AAAA,MAAA,CAC5B;AAAA,IAAA;AAAA,EAEL;AACF;ACnKO,MAAMI,KAAyC;AAAA,EACpD,IAAI5B,GAAyB6B,GAAuC;AAClE,WAAQ7B,EAAS,SAAS,CAAC,GAAG,SAAoB;AAAA,EACpD;AAAA,EAEA,IAAIA,GAAyBtM,GAA2BgN,GAA2B;AACjF,QAAIZ,GAAapM,CAAK,GAAG;AACvB,MAAA6M,GAAiBP,CAAQ;AACzB;AAAA,IACF;AACA,IAAAA,EAAS,SAAS,CAACK,EAAY,EAAE,OAAA3M,GAAO,iBAAiBgN,EAAQ,gBAAA,CAAiB,CAAC;AAAA,EACrF;AACF,GCZaoB,KAAuC;AAAA,EAClD,IAAI9B,GAAyB6B,GAAuC;AAClE,WAAI5B,GAAqBD,CAAQ,IACvBA,EAAS,UAAU,CAAA,IAErBA,EAAS,SAAS,CAAC,GAAG,SAAoB;AAAA,EACpD;AAAA,EAEA,IAAIA,GAAyBtM,GAA2BgN,GAA2B;AACjF,QAAI,CAAC,MAAM,QAAQhN,CAAK,KAAKoM,GAAapM,CAAK,GAAG;AAChD,MAAA6M,GAAiBP,CAAQ;AACzB;AAAA,IACF;AAEA,IAAI,MAAM,QAAQtM,CAAK,IACrBsM,EAAS,SAAUtM,EAA+B;AAAA,MAAI,CAACyG,MACrDkG,EAAY,EAAE,GAAGlG,GAAM,OAAOA,EAAK,OAAO,WAAWA,EAAK,UAAA,CAAW;AAAA,IAAA,IAGvE6F,EAAS,SAAS,CAACK,EAAY,EAAE,OAAA3M,GAAO,WAAWgN,EAAQ,UAAA,CAAW,CAAC;AAAA,EAE3E;AACF;ACjBO,SAASqB,GAAgB/B,GAAgD;AAC9E,SAAIG,GAAkBH,CAAQ,IAAU4B,KACpCxB,GAAgBJ,CAAQ,KAAK,CAACE,GAAqBF,CAAQ,IAAU8B,KACrE9B,EAAS,cAAc,YAAkBa,KACzCX,GAAqBF,CAAQ,IAAUe,KACpCN;AACT;ACCO,SAASuB,GAAqBvQ,GAA+D;AAClG,QAAM,EAAE,kBAAAwQ,GAAkB,oBAAAC,EAAA,IAAuBzQ,GAE3C,EAAE,SAAS0Q,GAAwB,QAAQC,MAA0B7H,GAGzE,OAAOlE,MAAS;AAChB,QAAKA;AACL,aAAO,MAAM4L,EAAiB5L,CAAI;AAAA,EACpC,CAAC;AAED,iBAAegM,EACbC,GACAC,GACA/B,GACoD;AACpD,QAAI,CAAC8B,EAAY;AAEjB,UAAMxF,IAAQ,MAAMsF,EAAsB;AAAA,MACxC,aAAa,CAACE,CAAU;AAAA,MACxB,SAAAC;AAAA,MACA,MAAM;AAAA,IAAA,CACP;AAED,WAAI,CAAC/B,KAAU,CAAC1D,IAAcA,IAEvBA,EAAM,IAAI,CAAC3C,MAAS;AACzB,YAAMqI,IAAiBrI,EAAK,iBAAiB,KAAK,CAACsI,MAAQA,EAAI,iBAAiBjC,CAAM,GAAG;AACzF,aAAO,EAAE,GAAGrG,GAAM,OAAOqI,KAAkBrI,EAAK,MAAA;AAAA,IAClD,CAAC;AAAA,EACH;AAEA,iBAAeuI,EAAiBC,GAAmBC,GAAmBpC,GAAiB;AACrF,QAAI,GAACmC,KAAa,CAACT;AACnB,aAAO,MAAMA,EAAmBS,GAAWnC,CAAM;AAAA,EACnD;AAEA,WAASqC,EAAiB7C,GAAyBQ,GAAsC;AACvF,WAAOuB,GAAgB/B,CAAQ,EAAE,IAAIA,GAAUQ,CAAM;AAAA,EACvD;AAEA,WAASsC,EAAiBxC,GAAsC;AAC9D,UAAM,EAAE,UAAAN,GAAU,OAAAtM,GAAO,GAAGgN,MAAYJ;AACxC,IAAAyB,GAAgB/B,CAAQ,EAAE,IAAIA,GAAUtM,GAAOgN,CAAO;AAAA,EACxD;AAEA,SAAO;AAAA,IACL,kBAAAmC;AAAA,IACA,kBAAAC;AAAA,IACA,kBAAAT;AAAA,IACA,kBAAAK;AAAA,IACA,SAAS/G,GAAWwG,CAAsB;AAAA,EAAA;AAE9C;ACnDO,SAASY,GAAaC,GAAoC;AAC/D,QAAMC,IAAqC,CAACC,MAAW;AAAA,EAMvD,GAEMjJ,IAAU,CAACiJ,MAAmB;AAClC,KAACF,KAAYC,GAAiB;AAAA,MAC5B,MAAMC,EAAO;AAAA,MACb,OAAOA,EAAO;AAAA,MACd,QAAQA,EAAO;AAAA,IAAA,CAChB;AAAA,EACH;AAEAC,EAAAA,GAAMlJ,CAAO,GACbmJ,GAAMnJ,CAAO,GACboJ,GAAMpJ,CAAO,GACbqJ,GAAMrJ,CAAO,GACbsJ,GAAOtJ,CAAO;AAChB;AClCA,MAAMvH,KAASC,EAAa,mBAAmB;AAkCxC,SAAS6Q,GAAgBC,GAA6D;AAC3F,QAAMC,IAAWpR,GAAOqR,EAAgB;AACxC,MAAI,CAACD;AACH,UAAM,IAAIE,GAAe,eAAe;AAE1C,QAAMC,IAAgBH,GAEhBI,IAAaxR,GAAOyR,IAAoB,MAAS;AACvD,MAAI,CAACD;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAKJ,QAAME,IAAUF,EAAW,MAAM;AAEjC,EAAA3H,GAAU,MAAM;AACd,eAAW8H,KAAQR;AACjB,MAAAI,EAAc,eAAeK,GAAYD,CAAI,GAAGD,CAAO;AAAA,EAE3D,CAAC,GAEDG,GAAY,MAAM;AAChB,eAAWF,KAAQR;AACjB,MAAAI,EAAc,iBAAiBI,EAAK,IAAID,CAAO;AAAA,EAEnD,CAAC;AAED,WAASI,EAAQC,GAAwB;AAEvC,UAAMC,IADaT,EAAc,WAAWG,CAAO,EACzB,KAAK,CAACO,MAAMA,EAAE,OAAOF,CAAQ;AACvD,IAAIC,GAAQ,SAAS,YACnBA,EAAO,QAAQ,UAAA,IAEf5R,GAAO,KAAK,WAAW2R,CAAQ,wCAAwC;AAAA,EAE3E;AAEA,WAASG,IAAmB;AAC1B,UAAMC,IAAaZ,EAAc,WAAWG,CAAO;AACnD,eAAWM,KAAUG;AACnB,MAAIH,EAAO,SAAS,aAClBA,EAAO,QAAQ,UAAA;AAAA,EAGrB;AAEA,SAAO,EAAE,SAAAF,GAAS,YAAAI,EAAA;AACpB;AAoBO,SAASE,GAAiBC,GAA+B;AAC9D,QAAMC,IAAQtS,GAAOuS,EAAc;AACnC,MAAI,CAACD,GAAO;AACVlS,IAAAA,GAAO,KAAK,2FAA2F;AACvG;AAAA,EACF;AACA,EAAAkS,EAAM,WAAWD,CAAO;AAC1B;AAIA,SAAST,GAAYD,GAA0C;AAC7D,QAAMa,IAAkC;AAAA,IACtC,MAAMb,EAAK;AAAA,IACX,OAAOA,EAAK;AAAA,IACZ,SAASA,EAAK;AAAA,IACd,UAAUA,EAAK;AAAA,IACf,SAASA,EAAK;AAAA,IACd,WAAWA,EAAK;AAAA,EAAA;AAGlB,SAAO;AAAA,IACL,IAAIA,EAAK;AAAA,IACT,OAAOA,EAAK;AAAA,IACZ,WAAWA,EAAK;AAAA,IAChB,UAAAa;AAAA,IACA,SAASb,EAAK,YAAY,EAAE,WAAWA,EAAK,cAAc;AAAA,EAAA;AAE9D;ACjIA,SAASc,GAAaC,GAA0D;AAC9E,QAAMtL,IAAkC,CAAA;AACxC,aAAWhF,KAAO,OAAO,KAAKsQ,CAAM,GAAG;AACrC,UAAMC,IAAMD,EAAOtQ,CAAG;AACtB,IAAAgF,EAAOhF,CAAG,IAAIwQ,GAAMD,CAAG,IAAIA,EAAI,QAAQA;AAAA,EACzC;AACA,SAAOvL;AACT;AAeO,SAASyL,GAAmBC,GAAuD;AACxF,EAAAC;AAAA,IACEC;AAAA,IACAtT,EAAS,MAAM+S,GAAaQ,GAAQH,CAAI,CAAC,CAAC;AAAA,EAAA;AAE9C;AAcO,SAASI,KAA2D;AACzE,QAAMnT,IAAMC,GAA6CgT,EAAe;AACxE,MAAI,CAACjT;AACH,UAAM,IAAIuR,GAAe,cAAc;AAEzC,SAAOvR;AACT;AC9CA,SAASoT,GAAQ/R,GAAyB;AACxC,SAAOA,KAAU,QAA+BA,MAAU;AAC5D;AAEA,SAASgS,GAAcC,GAAYpQ,GAAqB;AACtD,SAAOqQ,GAAYD,GAAGpQ,GAAG,CAACsQ,GAAeC,MAAkB;AACzD,QAAIL,GAAQI,CAAI,KAAKJ,GAAQK,CAAI,EAAG,QAAO;AAAA,EAE7C,CAAC;AACH;AAuCO,SAASC,GAA0BC,GAA+D;AACvG,QAAMC,IAAyB,CAAChB,MAAuBiB,EAAUrG,EAAMoF,CAAG,CAAC,GAErEkB,IAAgBzL,EAAIuL,EAAuBD,CAAgB,CAAC,GAC5DI,IAAe1L,EAAIuL,EAAuBD,CAAgB,CAAC,GAC3DK,IAAa3L,EAAI,EAAK;AAE5B,EAAIwK,GAAMc,CAAgB,KACxBvS;AAAA,IACEuS;AAAA,IACA,CAACM,MAA4B;AAG3B,YAAMC,IAAc,CAACb,GAAcU,EAAa,OAAOD,EAAc,KAAK;AAG1E,MAAAA,EAAc,QAAQD,EAAUI,CAAuB,GAKlDC,MACHH,EAAa,QAAQF,EAAUI,CAAuB;AAAA,IAK1D;AAAA,IACA,EAAE,MAAM,GAAA;AAAA;AAAA,EAAK,GAIjB7S;AAAA,IACE,CAAC2S,GAAcD,CAAa;AAAA;AAAA,IAC5B,CAAC,CAACK,GAAeC,CAAc,MAAM;AACnC,MAAAJ,EAAW,QAAQ,CAACX,GAAcc,GAAeC,CAAc;AAAA,IACjE;AAAA,IACA,EAAE,MAAM,GAAA;AAAA,EAAK;AAGf,QAAMC,IAAyB,CAACC,MAAuC;AACrE,QAAIA,MAA0B,QAAW;AACvC,YAAMC,IAAgBX,EAAuBU,CAAqB;AAClE,MAAAR,EAAc,QAAQS,GACtBR,EAAa,QAAQF,EAAUU,CAAa;AAAA,IAC9C;AACE,MAAAT,EAAc,QAAQD,EAAUE,EAAa,KAAK;AAIpD,IAAAC,EAAW,QAAQ;AAAA,EACrB;AAEA,SAAO;AAAA,IACL,cAAAD;AAAA,IACA,eAAAD;AAAA,IACA,YAAYnU,EAAS,MAAMqU,EAAW,KAAK;AAAA,IAC3C,wBAAAK;AAAA,EAAA;AAEJ;;;;;AChBAG,GAAsB,iBAAiB,CAAA,CAAI;;;;;AA6B3C,UAAM,EAAE,SAAApV,GAAS,WAAAqV,EAAA,IAAcC,GAAA;AAE/B,IAAAC,GAAQ,EAAE,iBAAiB,IAAO;AAClC,UAAMC,IAAUC,GAAA,GACVC,IAAUC,GAAA,GACV,EAAE,GAAA5S,EAAA,IAAM6S,GAAQ,EAAE,UAAU,UAAU,GACtCC,IAAe5M,EAAe,EAAE,GAAGjJ,EAAQ,OAAO,OAAO,GAEzD8J,IAAWvJ,EAAS,MAAMP,EAAQ,OAAO,QAAQ,GAEjD8V,IAAiBvV,EAAS;AAAA,MAC9B,MAAM;AACJ,cAAMvB,IAAO6W,EAAa,MAAM;AAChC,YAAI,CAAC7W,EAAM,QAAO;AAClB,cAAM+W,IAAW/W,EAAK,YAAY,GAAG;AACrC,eAAO+W,IAAW,IAAI/W,EAAK,MAAM,GAAG+W,CAAQ,IAAI/W;AAAA,MAClD;AAAA,MACA,IAAIiD,GAAO;AACT,cAAMjD,IAAO6W,EAAa,MAAM;AAChC,YAAI,CAAC7W,EAAM;AACX,cAAM+W,IAAW/W,EAAK,YAAY,GAAG,GAC/BS,IAAMsW,IAAW,IAAI/W,EAAK,MAAM+W,CAAQ,IAAI;AAClD,QAAAF,EAAa,MAAM,OAAO5T,IAAQA,IAAQxC,IAAM;AAAA,MAClD;AAAA,IAAA,CACD,GAEKuW,IAAazV,EAAS,MACnB,CAACmV,EAAQ,SAAS,CAACF,EAAQ,KACnC,GAEKS,IAAehN,EAAqB;AAAA,MACxC;AAAA,QACE,IAAI;AAAA,QACJ,OAAOlG,EAAE,mCAAmC;AAAA,QAC5C,MAAM;AAAA,QACN,MAAM,eAAe;AACnB,UAAI/C,EAAQ,OAAO,oBAAoB,OAAOA,EAAQ,OAAO,oBAAqB,eAChF,MAAMA,EAAQ,OAAO,iBAAiB6V,EAAa,KAAK,GACxDR,EAAA;AAAA,QAEJ;AAAA,QACA,UAAU9U,EAAS,MAAMyV,EAAW,SAASlM,EAAS,KAAK;AAAA,MAAA;AAAA,MAE7D;AAAA,QACE,IAAI;AAAA,QACJ,OAAO/G,EAAE,qCAAqC;AAAA,QAC9C,MAAM;AAAA,QACN,MAAM,eAAe;AACnB,UAAI/C,EAAQ,OAAO,sBAAsB,OAAOA,EAAQ,OAAO,sBAAuB,eACpF,MAAMA,EAAQ,OAAO,mBAAmB6V,EAAa,KAAK,GAC1DR,EAAA;AAAA,QAEJ;AAAA,QACA,UAAU9U,EAAS,MAAMuJ,EAAS,KAAK;AAAA,MAAA;AAAA,IACzC,CACD,GAEKoM,IAAY3V,EAAS,MAAMsV,EAAa,OAAO,MAAM;2BAzLzD9P,EA8FUoQ,EAAAC,EAAA,GAAA;AAAA,MA7FP,OAAOD,EAAAnW,CAAA,GAAS,OAAO;AAAA,MACvB,UAAUmW,EAAApT,CAAA,EAAC,+BAAA;AAAA,MACX,iBAAekT,EAAA;AAAA,IAAA;iBAGhB,MAuFM;AAAA,QAvFN5P,EAuFM,OAvFNgQ,IAuFM;AAAA,UAtFJhQ,EAqFM,OArFNiQ,IAqFM;AAAA,YApFJ9P,EAmFc2P,EAAAI,EAAA,GAAA,EAnFA,cAAY,MAAI;AAAA,yBAC5B,MAiFM;AAAA,gBAjFNlQ,EAiFM,OAjFNmQ,IAiFM;AAAA,kBAhFJhQ,EA+ES2P,EAAAM,EAAA,GAAA,MAAA;AAAA,+BA9EP,MAqCM;AAAA,sBArCNpQ,EAqCM,OArCNqQ,IAqCM;AAAA,wBApCYP,EAAApX,EAAA,EAAQ8W,EAAA,MAAa,IAAI,UACvC9P,EAKWoQ,EAAAQ,EAAA,GAAA;AAAA;0BAJR,KAAKd,EAAA,MAAa;AAAA,0BACnB,MAAK;AAAA,0BACJ,UAAU;AAAA,0BACX,OAAM;AAAA,wBAAA,yBAIRe,KAAAtQ,EAOM,OAPNuQ,IAOM;AAAA,0BANJxQ,EAKM,OAAA;AAAA,4BAJJ,OAAM;AAAA,4BACL,OAAKyQ,GAAA,EAAA,iBAAqBX,EAAA3W,EAAA,EAAkBqW,EAAA,MAAa,IAAI,EAAA,CAAA;AAAA,0BAAA,KAE3DM,EAAAzW,EAAA,EAAkBmW,EAAA,MAAa,IAAI,CAAA,GAAA,CAAA;AAAA,wBAAA;wBAI5CxP,EAiBM,OAjBN0Q,IAiBM;AAAA,0BAhBJvQ,EAGE2P,EAAAa,EAAA,GAAA;AAAA,4BAFC,OAAOb,EAAApT,CAAA,EAAC,kCAAA;AAAA,4BACR,eAAaoT,EAAAlX,EAAA,EAAa4W,EAAA,MAAa,IAAI;AAAA,0BAAA;0BAE9CrP,EAIE2P,EAAAa,EAAA,GAAA;AAAA,4BAHC,OAAOb,EAAApT,CAAA,EAAC,0CAAA;AAAA,4BACR,eAAa8S,EAAA,MAAa;AAAA,4BAC3B,MAAK;AAAA,0BAAA;0BAEPrP,EAME2P,EAAAa,EAAA,GAAA;AAAA,4BALC,OAAOb,EAAApT,CAAA,EAAC,iCAAA;AAAA,4BACR,eAAa8S,EAAA,MAAa;AAAA,4BAC1B,iBAAeA,EAAA,MAAa;AAAA,4BAC7B,MAAK;AAAA,4BACL,UAAA;AAAA,0BAAA;;;sBAMGM,EAAAnW,CAAA,GAAS,cAAc,SAAQ,MAAA,sBADxC+F,EAoBQoQ,EAAAc,CAAA,GAAA;AAAA;wBAjBL,OAAOd,EAAApT,CAAA,EAAC,wCAAA;AAAA,wBACT,MAAK;AAAA,wBACL,OAAM;AAAA,wBACL,eAAa8S,EAAA,MAAa;AAAA,sBAAA;wBAE3B,SAAAzP,EAAA,CAWW,EAjBD,cAAA8Q,GAAc,cAAAC,GAAc,QAAAC,QAAM;AAAA,0BAM5C5Q,EAWW2P,EAAAkB,CAAA,GAAA;AAAA,wCAVAvB,EAAA;AAAA;qDAAAA,EAAc,QAAApP;AAAA,8BASFyQ;AAAA,4BAAA;AAAA,4BARrB,OAAM;AAAA,4BACL,OAAOhB,EAAApT,CAAA,EAAC,wCAAA;AAAA,4BACT,WAAA;AAAA,4BACA,UAAA;AAAA,4BACC,OAAK,CAAA,CAAIqU,EAAO;AAAA,4BAChB,iBAAeF;AAAA,4BACf,aAAaf,EAAApT,CAAA,EAAC,8CAAA;AAAA,4BACd,UAAU+G,EAAA;AAAA,0BAAA;;;;sBAKPoM,EAAA,UAAS,WAAA,CAAiBC,EAAAnW,CAAA,GAAS,cAAc,SAAQ,SAAA,UADjE+F,EASWoQ,EAAAkB,CAAA,GAAA;AAAA;wBAPA,YAAAxB,EAAA,MAAa;AAAA,wBAAb,uBAAAyB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA5Q,MAAAmP,EAAA,MAAa,UAAOnP;AAAA,wBAC7B,OAAM;AAAA,wBACL,OAAOyP,EAAApT,CAAA,EAAC,uCAAA;AAAA,wBACT,WAAA;AAAA,wBACC,aAAaoT,EAAApT,CAAA,EAAC,6CAAA;AAAA,wBACd,SAASoT,EAAApT,CAAA,EAAC,yCAAA;AAAA,wBACV,UAAU+G,EAAA;AAAA,sBAAA;sBAGJqM,EAAAnW,CAAA,GAAS,cAAc,SAAQ,aAAA,sBADxC+F,EAOcoQ,EAAAoB,EAAA,GAAA;AAAA;wBALH,YAAA1B,EAAA,MAAa;AAAA,wBAAb,uBAAAyB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA5Q,MAAAmP,EAAA,MAAa,cAAWnP;AAAA,wBACjC,OAAM;AAAA,wBACL,OAAOyP,EAAApT,CAAA,EAAC,+CAAA;AAAA,wBACR,aAAaoT,EAAApT,CAAA,EAAC,qDAAA;AAAA,wBACd,UAAU+G,EAAA;AAAA,sBAAA;;;;;;;;;;;;;;ICtFd0N,KAAgBC;;;8CCChBC,KAAsBxV,GAAgB,EAAE,QAAQyV,IAAY;ACiHzEvC,GAAsB,iBAAiB,CAAA,CAAI;;;;;AAc3C,UAAMnU,IAASC,EAAa,gBAAgB,GAYtC,EAAE,SAAAlB,GAAS,WAAA4X,EAAA,IAActC,GAAA,GAEzB,EAAE,GAAAvS,EAAA,IAAM6S,GAAQ,EAAE,UAAU,UAAU,GAEtCiC,IAAUtX,EAAS,MAAMP,EAAQ,MAAO,OAAO,GAE/C8X,IAAgBvX,EAAS,MAAMsX,EAAQ,MAAM,MAAM,SAAS,EAAE,GAE9DE,IAAYxX,EAAS,MAAMsX,EAAQ,MAAM,QAAQ,KAAK,GAEtDG,IAAazX,EAAS,MAAMP,EAAQ,OAAO,SAAS+C,EAAE,sBAAsB,CAAC,GAE7EkV,IAAahP,EAAI,EAAK,GACtBiP,IAAWjP,EAAA,GACXkP,IAAgBlP,EAAiB,EAAE,GACnCa,IAAWvJ,EAAS,MAAMP,EAAQ,OAAO,QAAQ,GAEjDiW,IAAehN,EAAqB;AAAA,MACxC;AAAA,QACE,IAAI;AAAA,QACJ,OAAO1I,EAAS,MAAMwC,EAAE,4BAA4B,CAAC;AAAA,QACrD,MAAM;AAAA,QACN,eAAe;AACb,UAAAqV,EAAA;AAAA,QACF;AAAA,QACA,UAAU7X,EAAS,MAAMuJ,EAAS,KAAK;AAAA,QACvC,WAAWvJ,EAAS,MAAM,CAACuJ,EAAS,KAAK;AAAA,MAAA;AAAA,MAE3C;AAAA,QACE,IAAI;AAAA,QACJ,OAAOvJ,EAAS,MAAMwC,EAAE,+BAA+B,CAAC;AAAA,QACxD,MAAM;AAAA,QACN,MAAM,eAAe;AACnB,gBAAM8U,EAAQ,MAAM,WAAWM,EAAc,KAAK;AAAA,QACpD;AAAA,QACA,UAAU5X,EAAS,MAAM,CAAC4X,EAAc,MAAM,UAAUrO,EAAS,KAAK;AAAA,QACtE,WAAWvJ,EAAS,MAAM,CAACuJ,EAAS,KAAK;AAAA,MAAA;AAAA,IAC3C,CACD;AAED,mBAAeuO,EAAWlK,GAAqE;AAC7F,UAAIA,EAAM,cAAcA,EAAM,WAAW;AACvC,cAAMmK,IAASnK,EAAM,MAAM,IAAI,CAACzF,GAAMqC,OACpCrC,EAAK,YAAYqC,GACVrC,EACR;AAED,QAAAmP,EAAQ,MAAM,QAAQS,CAAM;AAAA,MAC9B;AAAA,IACF;AAEA,aAASC,IAAW;AAClB,MAAKzO,EAAS,UACZmO,EAAW,QAAQ;AAAA,IAEvB;AAEA,aAASO,IAAY;AACnB,MAAK1O,EAAS,UACZmO,EAAW,QAAQ;AAAA,IAEvB;AAEA,mBAAeQ,EAAOtK,GAAkB;AACtC,UAAI,CAACrE,EAAS,OAAO;AACnB,cAAM4O,IAAWvK,EAAM,cAAc;AAErC,YAAIuK,KAAYA,EAAS;AACvB,cAAI;AACF,kBAAM5M,EAAO4M,CAAQ;AAAA,UACvB,SAASxP,GAAO;AACd,kBAAAjI,EAAO,MAAM,mCAAmCiI,CAAK,GAC/CA;AAAA,UACR;AAEF,QAAA+O,EAAW,QAAQ;AAAA,MACrB;AAAA,IACF;AAEA,aAASG,IAAiB;AACxB,MAAAF,EAAS,MAAM,QAAQ,IACvBA,EAAS,MAAM,MAAA;AAAA,IACjB;AAEA,mBAAepM,EAAOC,GAAiB;AACrC,UAAI,CAACA,KAASA,EAAM,WAAW,EAAG;AAElC,YAAM4M,IAAgB,IAAI,KAAKb,EAAc,SAAS,CAAA,GAAI,IAAI,CAAC7L,MAAUA,EAAM,IAAI,EAAE,OAAO,OAAO,CAAC,GAE9F2M,IAAW,IAAI,aAAA;AACrB,iBAAW/N,KAAQ,MAAM,KAAKkB,CAAK,GAAG;AACpC,YAAIjN,IAAW+L,EAAK;AAEpB,YAAI8N,EAAc,IAAI7Z,CAAQ,GAAG;AAC/B,gBAAMW,IAAMX,EAAS,SAAS,GAAG,IAAI,IAAIA,EAAS,MAAM,GAAG,EAAE,IAAA,CAAK,KAAK,IACjE+Z,IAAO/Z,EAAS,MAAM,GAAGA,EAAS,SAASW,EAAI,MAAM;AAC3D,cAAIgM,KAAI;AACR,iBAAOkN,EAAc,IAAI7Z,CAAQ;AAC/B,YAAAA,IAAW,GAAG+Z,CAAI,IAAIpN,EAAC,GAAGhM,CAAG,IAC7BgM;AAAA,QAEJ;AAEA,QAAAkN,EAAc,IAAI7Z,CAAQ,GAC1B8Z,EAAS,MAAM,IAAI,IAAI,KAAK,CAAC/N,CAAI,GAAG/L,GAAU,EAAE,MAAM+L,EAAK,KAAA,CAAM,CAAC;AAAA,MACpE;AAEA,UAAI;AACF,cAAMiO,IAAehB,EAAc,MAAM,OAAO,CAACiB,GAAK9M,MAAU,KAAK,IAAI8M,GAAK9M,EAAM,aAAa,CAAC,GAAG,EAAE;AACvG,cAAM4L,EAAQ,MAAM,OAAOe,EAAS,OAAOE,CAAY;AAAA,MACzD,SAAS5P,GAAO;AACd,cAAAjI,EAAO,MAAM,4BAA4BiI,CAAK,GACxCA;AAAA,MACR;AAAA,IACF;AAEA,mBAAe8P,EAAY7K,GAAc;AAEvC,YAAMuK,IADSvK,EAAM,OACG;AAExB,UAAIuK,KAAYA,EAAS;AACvB,YAAI;AACF,gBAAM5M,EAAO4M,CAAQ;AAAA,QACvB,SAASxP,GAAO;AACd,gBAAAjI,EAAO,MAAM,2BAA2BiI,CAAK,GACvCA;AAAA,QACR;AAAA,IAEJ;AAEA,aAAS+P,EAAYvQ,GAAiB;AACpC,MAAAkP,EAAU;AAAA,QACR,MAAM;AAAA,QACN,SAAS;AAAA,UACP,OAAOxJ,EAAM1F,CAAI;AAAA,UACjB,UAAUoB,EAAS;AAAA,UACnB,cAAc9J,EAAQ,OAAO;AAAA,UAC7B,kBAAkB,CAACiM,MAAqB;AACtC,YAAA4L,EAAQ,MAAM,WAAW5L,CAAK;AAAA,UAChC;AAAA,UACA,oBAAoB,OAAOA,MAAqB;AAC9C,kBAAM4L,EAAQ,MAAM,OAAO5L,CAAK;AAAA,UAClC;AAAA,QAAA;AAAA,MACF,CACD,EAAE,MAAM,CAAC/C,MAAU;AAClB,QAAAjI,EAAO,MAAM,uCAAuCiI,CAAK;AAAA,MAC3D,CAAC;AAAA,IACH;AAEA,UAAMgQ,IAAgB,MACb;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,OAAO3Y,EAAS,MAAMwC,EAAE,qCAAqC,CAAC;AAAA,QAC9D,MAAM;AAAA,QACN,MAAM,aAAa2F,GAAiB;AAClC,gBAAMmP,EAAQ,MAAM,OAAOnP,CAAI,GAC/ByP,EAAc,QAAQ,CAAA;AAAA,QACxB;AAAA,MAAA;AAAA,IACF;2BA5SFpS,EA8GUoQ,EAAAC,EAAA,GAAA;AAAA,MA7GP,OAAO4B,EAAA;AAAA,MACP,iBAAe/B,EAAA;AAAA,MAChB,OAAM;AAAA,IAAA;iBAEN,MA+FM;AAAA,iBA/FN3P,EA+FM,OAAA;AAAA,UA7FJ,OAAM;AAAA,UACL,eAAuBiS,GAAQ,CAAA,WAAA,MAAA,CAAA;AAAA,UAC/B,gBAAmBC,GAAS,CAAA,SAAA,CAAA;AAAA,UAC5B,WAAmBC,GAAM,CAAA,WAAA,MAAA,CAAA;AAAA,QAAA;UAG1BjS,EAsFc2P,EAAAgD,EAAA,GAAA;AAAA,YArFJ,WAAWhB,EAAA;AAAA,yDAAAA,EAAa,QAAAzR;AAAA,YAC/B,OAAOoR,EAAA;AAAA,YACR,aAAU;AAAA,YACT,qBAAmBhO,EAAA;AAAA,YACnB,kBAAiBA,EAAA,QAAwB,SAAhB;AAAA,YACzB,eAAcA,EAAA,QAA2B,SAAhBoP;AAAA,YACzB,eAAW;AAAA;qBAA4DrS,EAAAA,GAAE,oCAAA;AAAA,2BAA+DA,EAAAA,GAAE,6BAAA;AAAA,6BAA0DuR;AAAA,YAAA;AAAA,YAMrM,OAAM;AAAA,YACL,YAASd,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA,EAAK,MAAA3D,EAAA,MAAWsF,EAAYtF,CAAI;AAAA,YACzC,cAAa0E;AAAA,UAAA;uBAEd,MA2BW;AAAA,cA3BX7R,EA2BW2P,EAAAiD,EAAA,GAAA;AAAA,gBA1BT,IAAG;AAAA,gBACF,OAAOjD,EAAApT,CAAA,EAAC,mCAAA;AAAA,gBACT,OAAM;AAAA,gBACN,kBAAA;AAAA,cAAA;gBAEW,MAAIqD,EACb,CAkBM,EAnBW,MAAAuN,QAAI;AAAA,kBACrBtN,EAkBM,OAlBNgQ,IAkBM;AAAA,oBAjBYF,EAAApX,EAAA,EAAQ4U,EAAK,QAAI,EAAA,UAC/B5N,EAMWoQ,EAAAQ,EAAA,GAAA;AAAA;sBALR,UAAU;AAAA,sBACX,MAAK;AAAA,sBACL,QAAO;AAAA,sBACN,KAAKhD,EAAK;AAAA,sBACX,YAAW;AAAA,oBAAA,8BAIbrN,EAKM,OAAA;AAAA;sBAJJ,OAAM;AAAA,sBACL,OAAKwQ,GAAA,EAAA,iBAAqBX,EAAA3W,EAAA,EAAkBmU,EAAK,QAAI,EAAA,EAAA,CAAA;AAAA,oBAAA,KAEnDwC,EAAAzW,EAAA,EAAkBiU,EAAK,QAAI,EAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;;cAOxCnN,EAKE2P,EAAAiD,EAAA,GAAA;AAAA,gBAJA,IAAG;AAAA,gBACF,OAAOjD,EAAApT,CAAA,EAAC,kCAAA;AAAA,gBACT,OAAM;AAAA,gBACN,kBAAA;AAAA,cAAA;cAGFyD,EAWW2P,EAAAiD,EAAA,GAAA;AAAA,gBAVT,IAAG;AAAA,gBACF,OAAOjD,EAAApT,CAAA,EAAC,kCAAA;AAAA,gBACT,OAAM;AAAA,gBACN,kBAAA;AAAA,cAAA;gBAEW,MAAIqD,EACb,CAEM,EAHW,MAAAuN,QAAI;AAAA,kBACrBtN,EAEM,OAAA,MAAAgT,EADDlD,EAAAlX,EAAA,EAAa0U,EAAK,QAAI,CAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;cAK/BnN,EAWW2P,EAAAiD,EAAA,GAAA;AAAA,gBAVT,IAAG;AAAA,gBACF,OAAOjD,EAAApT,CAAA,EAAC,wCAAA;AAAA,gBACT,OAAM;AAAA,gBACN,kBAAA;AAAA,cAAA;gBAEW,MAAIqD,EACb,CAEM,EAHW,MAAAuN,QAAI;AAAA,kBACrBtN,EAEM,OAAA,MAAAgT,EADD1F,EAAK,SAAS,GAAA,CAAA;AAAA,gBAAA;;;cAKvBnN,EAME2P,EAAAiD,EAAA,GAAA;AAAA,gBALA,IAAG;AAAA,gBACF,OAAOjD,EAAApT,CAAA,EAAC,0CAAA;AAAA,gBACT,OAAM;AAAA,gBACN,MAAK;AAAA,gBACL,kBAAA;AAAA,cAAA;;;;;kBA3FOgV,EAAA,KAAS;AAAA,QAAA;QAgGtB1R,EAOE,SAAA;AAAA,mBANI;AAAA,UAAJ,KAAI6R;AAAA,UACJ,MAAK;AAAA,UACL,QAAA;AAAA,UACA,UAAA;AAAA,UACA,MAAK;AAAA,UACJ,UAAQc;AAAA,QAAA;;;;;IC3GFM,KAAgBC;;;8CCChBC,KAAsBtX,GAAgB,EAAE,QAAQyV,IAAY,GCEnE1W,KAASC,EAAa,mBAAmB,GAEzCuY,KAA0B,+BAG1BC,KAAWzQ,EAAI,EAAK,GACpB0Q,KAAY1Q,EAAI,EAAI;AASnB,SAAS2Q,KAAiD;AAC/D,MAAI,CAACF,GAAS,SAAS,OAAO,SAAW,KAAa;AACpDA,IAAAA,GAAS,QAAQ;AAEjB,UAAM,EAAE,UAAAG,EAAA,IAAaC,GAAA;AAErB,IAAA9X;AAAA,MACE6X;AAAA,MACA,CAACE,MAAW;AACV,QAAAJ,GAAU,QAAQI,GAEbA,KAQH9Y,GAAO,KAAK,6BAA6B,GACzC+B,EAAa,OAAOyW,EAAuB,GAC3C,SAAS,gBAAgB,UAAU,OAAO,YAAY,MATtDxY,GAAO,KAAK,yBAAyB,GACrC+B,EAAa,QAAQ,gEAAgE;AAAA,UACnF,gBAAgByW;AAAA,UAChB,SAAS;AAAA,QAAA,CACV,GACD,SAAS,gBAAgB,UAAU,IAAI,YAAY;AAAA,MAMvD;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAAA,EAEtB;AAEA,SAAO;AAAA,IACL,UAAU3P,GAAS6P,EAAS;AAAA,EAAA;AAEhC;AC9CA,MAAM1Y,KAASC,EAAa,cAAc,GACpC8Y,KAA4B,KAC5BC,KAAuB,CAAC,WAAW,IAAI;AAC7C,IAAIC,KAA0C;AAE9C,MAAMC,KAA+B,6BAC/BC,KAAmB,KAEnBC,KAAuB;AAC7B,IAAIC,KAAsD;AAE1D,SAASC,KAAuB;AAC9B,EAAAvX,EAAa,QAAQqX,IAAsB;AAAA,IACzC,gBAAgBF;AAAA,IAChB,SAAS;AAAA,EAAA,CACV;AACH;AAEA,SAASK,KAAuB;AAC9B,EAAAxX,EAAa,OAAOmX,EAA4B;AAClD;AAGA,MAAMT,KAAWzQ,EAAI,EAAK,GACpBwR,KAAoBxR,EAAI,CAAC,GACzByR,KAAuBzR,EAAI,EAAK,GAChC0R,yBAAqB,IAAA,GACrBC,yBAAsB,IAAA,GAEtBC,KAAgBta,EAAS,MAAMka,GAAkB,QAAQ,KAAKC,GAAqB,KAAK;AAQ9F,SAASI,GAAaC,GAAkB;AACtC,QAAMjT,IAAQ,WAAW,MAAM;AAC7B,IAAA2S,GAAkB,SAClBE,GAAe,OAAOI,CAAE,GACxBH,GAAgB,IAAIG,CAAE;AAAA,EACxB,GAAGf,EAAyB;AAC5B,EAAAW,GAAe,IAAII,GAAIjT,CAAK;AAC9B;AAEA,SAASkT,GAAeD,GAAkB;AACxC,QAAMjT,IAAQ6S,GAAe,IAAII,CAAE;AACnC,EAAIjT,KAAS,QAEX,aAAaA,CAAK,GAClB6S,GAAe,OAAOI,CAAE,KACfH,GAAgB,IAAIG,CAAE,MAE/BN,GAAkB,QAAQ,KAAK,IAAI,GAAGA,GAAkB,QAAQ,CAAC,GACjEG,GAAgB,OAAOG,CAAE;AAG7B;AAEO,SAASE,KAAyD;AACvE,MAAI,CAACvB,GAAS,SAAS,OAAO,SAAW,KAAa;AACpD,IAAAA,GAAS,QAAQ;AAEjB,UAAMlY,IAAc,UAAkB;AACtC,IAAIA,MACF0Y,KAAqB,MAAM;AACzB,YAAMgB,IAASjB,GAAqB,SAASzY,EAAW,aAAa;AACrE,MAAI0Z,MAAWR,GAAqB,SAClCzZ,GAAO,KAAK,oBAAoBO,EAAW,aAAa,MAAM0Z,IAAS,SAAS,QAAQ,EAAE,GAE5FR,GAAqB,QAAQQ;AAAA,IAC/B,GACA1Z,EAAW,iBAAiB,UAAU0Y,EAAkB,GACxDA,GAAA;AAGF,UAAM,EAAE,UAAAL,EAAA,IAAaD,GAAA;AAErB,IAAA5X,GAAM6Y,IAAe,CAACM,MAAS;AAC7B,MAAIA,KACEb,MAAiB,SACnB,aAAaA,EAAa,GAC1BA,KAAgB,OAEdT,EAAS,UACX5Y,GAAO,KAAK,8CAA8C,GAC1DsZ,GAAA,MAGFD,KAAgB,WAAW,MAAM;AAC/BrZ,QAAAA,GAAO,KAAK,yCAAyC,GACrDuZ,GAAA,GACAF,KAAgB;AAAA,MAClB,GAAGF,EAAgB;AAAA,IAEvB,CAAC,GAEDpY,GAAM6X,GAAU,CAACE,MAAW;AAC1B,MAAKA,IAMMc,GAAc,SACvBN,GAAA,KANID,MAAiB,SACnB,aAAaA,EAAa,GAC1BA,KAAgB,OAElBE,GAAA;AAAA,IAIJ,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,eAAAK;AAAA,IACA,cAAAC;AAAA,IACA,gBAAAE;AAAA,EAAA;AAEJ;ACnHA,MAAM/Z,KAASC,EAAa,cAAc;AAEnC,SAASka,GAAqB3X,GAAgB;AACnD,QAAM,EAAE,OAAO4X,EAAA,IAAkB,QAC3B,EAAE,SAAAC,GAAS,iBAAAja,EAAA,IAAoBC,GAAA,GAC/B,EAAE,cAAAwZ,GAAc,gBAAAE,EAAA,IAAmBC,GAAA;AACzC,MAAIM,IAAiB;AAErB,gBAAO,QAAQ,UAAU3W,MAAS;AAQhC,QAAI,OAAO;AACT3D,aAAAA,GAAO,KAAK,4CAA4C,GAAG2D,CAAI,GAC/D3D,GAAO,KAAK,+FAA+F,GACpG,IAAI,QAAQ,CAACua,MAAiB;AAInC,QAAI5W,EAAK,CAAC,MAAM,iCACd4W,EAAQ;AAAA,UACN,QAAQ;AAAA,UACR,MAAM,YAAY,KAAK,UAAU,EAAE,WAAW,IAAM;AAAA,QAAA,CACrD,IACQ5W,EAAK,CAAC,MAAM,wCACrB5B,EAAa;AAAA,UACX;AAAA;AAAA,UACA;AAAA,YACE,SAAS;AAAA,UAAA;AAAA,QACX,GAEFwY,EAAQ;AAAA,UACN,QAAQ;AAAA,UACR,MAAM,YAAY,KAAK,UAAU,EAAE,IAAI,gBAAgB,UAAU,YAAA,CAAa;AAAA,QAAA,CAC/E,KAEDA,EAAQ;AAAA,UACN,QAAQ;AAAA,UACR,MAAM,YAAY,KAAK,UAAU,CAAA,CAAE;AAAA,QAAA,CACpC;AAAA,MAEL,CAAC;AACI;AAGL,UAASC,IAAT,SAAsBC,GAAmC;AACvD,cAAMC,IAAM,OAAOD,KAAU,WAAWA,IAAQA,aAAiB,UAAUA,EAAM,MAAMA,EAAM,SAAA;AAE7F,YAAI;AACF,gBAAME,IAAM,IAAI,IAAID,GAAK,OAAO,SAAS,MAAM;AAC/C,iBAAOC,EAAI,WAAW,OAAO,SAAS,UAAUA,EAAI,SAAS,WAAW,OAAO;AAAA,QACjF,QAAQ;AACN,iBAAO;AAAA,QACT;AAAA,MACF;AAXA,YAAM,CAACC,GAAUC,CAAI,IAAIlX;AAczB,UAAI,CAAC6W,EAAaI,CAAQ;AACxB,eAAOR,EAAc,GAAGzW,CAAI;AAG9B,UAAI,CAAC,UAAU;AACb3D,eAAAA,GAAO,KAAK,uCAAuC4a,CAAQ,GACpD,QAAQ,OAAO,IAAI,MAAM,oDAAoD,CAAC;AAGvF,YAAME,IAAY,OAAO,EAAER,CAAc;AACzC,MAAAT,EAAaiB,CAAS;AAGtB,YAAMC,IAAa,IAAI,gBAAA;AACvB,UAAIC,IAAa;AACjB,YAAMC,IAAY,WAAW,MAAM;AACjC,QAAAD,IAAa,IACbD,EAAW,MAAA;AAAA,MACb,GAAG,GAAK,GAEFG,IAAiBL,GAAM,QACvBM,IAAoB,MAAMJ,EAAW,MAAA;AAC3C,MAAIG,GAAgB,UAClBC,EAAA,IACSD,KACTA,EAAe,iBAAiB,SAASC,GAAmB,EAAE,MAAM,IAAM;AAG5E,UAAI;AACF,cAAMlR,IAAW,MAAMmQ,EAAcQ,GAAU;AAAA,UAC7C,GAAIC,KAAQ,CAAA;AAAA,UACZ,QAAQE,EAAW;AAAA,QAAA,CACpB;AAKD,eAAI9Q,EAAS,WAAW,OAClB7J,EAAgB,SAClBia,EAAA,EAAU,KAAK,MAAM;AACnB,UAAAe,GAAS5Y,CAAM,GACfT,EAAa;AAAA,YACX;AAAA;AAAA,UAAA;AAAA,QAEJ,CAAC,GAIEkI;AAAA,MACT,SAAS1B,GAAG;AACV,cAAIyS,IACI,IAAI,MAAM,sCAAsC,IAElDzS;AAAA,MACR,UAAA;AACE,QAAAwR,EAAee,CAAS,GACxB,aAAaG,CAAS,GAClBC,KACFA,EAAe,oBAAoB,SAASC,CAAiB;AAAA,MAEjE;AAAA,IACF;AAAA,EACF,GAEO,OAAO;AAChB;AAEA,SAASC,GAAS5Y,GAAgB;AAEhC,EAAIA,KAAUA,EAAO,UAAA,EAAY,KAAK,CAAC6Y,MAAUA,EAAM,SAAS,YAAYA,EAAM,SAAS,OAAO,IAC5F7Y,EAAO,aAAa,MAAM,SAAS,YACrCA,EAAO,KAAK,QAAQ,IAKtB,OAAO,SAAS,OAAO,OAAO,SAAS,SAAS;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8CC5IMxC,KAASC,EAAa,sBAAsB;AAElD,SAASqb,GAAS1a,GAAsB;AACtC,SAAIA,aAAe,QAAc,GAAGA,EAAI,IAAI,IAAIA,EAAI,OAAO,KACpD,OAAOA,CAAG;AACnB;AAEA,MAAM2a,yBAAmB,IAAA,GACnBC,KAAkB;AAGxB,SAASC,GAAY7a,GAAuB;AAC1C,QAAMoB,IAAMsZ,GAAS1a,CAAG,GAClB8a,IAAM,KAAK,IAAA,GACXC,IAAOJ,GAAa,IAAIvZ,CAAG;AACjC,MAAI2Z,KAAQD,IAAMC,IAAOH,GAAiB,QAAO;AAEjD,MADAD,GAAa,IAAIvZ,GAAK0Z,CAAG,GACrBH,GAAa,OAAO;AACtB,eAAW,CAACpd,GAAG2D,CAAC,KAAKyZ;AACnB,MAAIG,IAAM5Z,IAAI0Z,MAAiBD,GAAa,OAAOpd,CAAC;AAGxD,SAAO;AACT;AAEO,SAASyd,GAAyBjd,GAAgB;AAEvD,QAAMkd,IAAkBld,EAAI,OAAO;AAanC,MAZAA,EAAI,OAAO,eAAe,CAACiC,GAAKkb,GAAUC,MAAS;AAEjD,QADA/b,GAAO,MAAM,wBAAwBY,GAAK;AAAA,QAAWmb,CAAI,GACrD,CAACN,GAAY7a,CAAG,GAAG;AACrB,YAAM2B,IAASiG,GAAW5H,CAAG;AAC7B,MAAAmB,EAAa,MAAMQ,EAAO,SAAS;AAAA,QACjC,SAAS;AAAA,QACT,gBAAgB,cAAc+Y,GAAS1a,CAAG,CAAC;AAAA,MAAA,CAC5C;AAAA,IACH;AACA,IAAAib,IAAkBjb,GAAKkb,GAAUC,CAAI;AAAA,EACvC,GAEI,OAAO,SAAW,IAAa;AACnC,QAAMC,IAAM;AAGZ,MAAIA,EAAI,uCAAwC;AAChD,EAAAA,EAAI,yCAAyC;AAE7C,QAAMC,IAAuB,CAAC/O,MAAiC;AAE7D,QADAlN,GAAO,MAAM,wBAAwBkN,EAAM,MAAM,GAC7C,CAACuO,GAAYvO,EAAM,MAAM,GAAG;AAC9B,YAAM3K,IAASiG,GAAW0E,EAAM,MAAM;AACtC,MAAAnL,EAAa,MAAMQ,EAAO,SAAS;AAAA,QACjC,SAAS;AAAA,QACT,gBAAgB,oBAAoB+Y,GAASpO,EAAM,MAAM,CAAC;AAAA,MAAA,CAC3D;AAAA,IACH;AAAA,EACF;AAGA,SAAO,iBAAiB,sBAAsB+O,CAAoB;AAElE,QAAMC,IAAgB,CAAChP,MAAsB;AAC3C,QAAKA,EAAM,UACXlN,GAAO,MAAM,mBAAmBkN,EAAM,KAAK,GACvC,CAACuO,GAAYvO,EAAM,KAAK,IAAG;AAC7B,YAAM3K,IAASiG,GAAW0E,EAAM,KAAK;AACrC,MAAAnL,EAAa,MAAMQ,EAAO,SAAS;AAAA,QACjC,SAAS;AAAA,QACT,gBAAgB,gBAAgB+Y,GAASpO,EAAM,KAAK,CAAC;AAAA,MAAA,CACtD;AAAA,IACH;AAAA,EACF;AAGA,SAAO,iBAAiB,SAASgP,CAAa;AAChD;AC5EA,MAAMlc,KAASC,EAAa,uBAAuB,GAU7Ckc,IAA6E;AAAA,EACjF,cAAc;AAAA,EACd,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,eAAe;AACjB;AAEO,SAASC,KAA4B;AAC1C,WAASC,EAAa1d,GAAmBmb,GAAYwC,GAAgC;AAEnF,IADkB,SAAS,eAAexC,CAAE,MAE1CqC,EAAmBG,CAAQ,IAAI3d;AAAA,EAEnC;AAEA,WAAS4d,EAAiBD,GAAiC;AACzD,QAAI;AACF,MAAIA,IAEEH,EAAmBG,CAAQ,MAC7BH,EAAmBG,CAAQ,GAAG,QAAA,GAC9B,SAAS,eAAe,gBAAgBA,CAAQ,EAAE,GAAG,OAAA,GACrDH,EAAmBG,CAAQ,IAAI,WAIjC,OAAO,KAAKH,CAAkB,EAAE,QAAQ,CAACK,MAAQ;AAC/C,cAAMF,IAAWE;AACjB,QAAAL,EAAmBG,CAAQ,GAAG,QAAA,GAC9B,SAAS,eAAe,gBAAgBA,CAAQ,EAAE,GAAG,OAAA,GACrDH,EAAmBG,CAAQ,IAAI;AAAA,MACjC,CAAC,GAG2B,OAAO,OAAOH,CAAkB,EAAE,KAAK,CAACL,MAAaA,MAAa,MAAS,KAErG,SAAS,cAAc,eAAe,GAAG,OAAA;AAAA,IAG/C,SAAS7T,GAAO;AACdjI,MAAAA,GAAO,MAAM,6CAA6CiI,CAAK;AAAA,IACjE;AAAA,EACF;AAEA,WAASwU,IAAiB;AACxB,WAAO,KAAKN,CAAkB,EAAE,QAAQ,CAACK,MAAQ;AAC/C,MAAIL,EAAmBK,CAA2B,KAChDD,EAAiBC,CAA2B;AAAA,IAEhD,CAAC;AAAA,EACH;AAEA,WAASE,EAAsBJ,GAA0D;AACvF,WAAOH,EAAmBG,CAAQ;AAAA,EACpC;AAEA,SAAO;AAAA,IACL,cAAAD;AAAA,IACA,kBAAAE;AAAA,IACA,gBAAAE;AAAA,IACA,uBAAAC;AAAA,EAAA;AAEJ;ACpEA,MAAM1c,KAASC,EAAa,wBAAwB,GAsB9C0c,IAAmF;AAAA,EACvF,cAAc3U,EAAI,EAAE;AAAA,EACpB,aAAaA,EAAI,EAAE;AAAA,EACnB,YAAYA,EAAI,EAAE;AAAA,EAClB,iBAAiBA,EAAI,EAAE;AAAA,EACvB,gBAAgBA,EAAI,EAAE;AAAA,EACtB,eAAeA,EAAI,CAAA,CAAE;AACvB,GAEM,EAAE,gBAAAyU,IAAgB,kBAAAF,IAAkB,cAAAF,IAAc,uBAAAK,GAAA,IAA0BN,GAAA;AAE3E,SAASQ,KAA8B;AAC5C,QAAMC,IAAiBC,GAA8B;AAAA,IACnD,SAAS;AAAA,IACT,cAAc;AAAA,IACd,UAAU;AAAA,EAAA,CACX;AAED,WAASC,IAAsB;AAE7B,WAAO,OAAO,OAAOJ,CAAsB,EAAE,QAAQ,CAACK,MAAcA,EAAU,KAAK;AAAA,EACrF;AAEA,WAASC,EAA2BX,GAAgC;AAClE,WAAOK,EAAuBL,CAAQ,EAAE;AAAA,EAC1C;AAEA,WAASY,EAAgBC,GAAiC;AACxD,WAAOJ,IAAsB,KAAK,CAACtV,MAASA,EAAK,mBAAmB0V,CAAc;AAAA,EACpF;AAEA,WAASC,EAAad,GAAgC;AACpD,UAAMe,IAAe,SAAS,cAAc,eAAe,GACrDL,IAAYK,KAAgB,SAAS,cAAc,KAAK,GAGxDC,IAAmB,2CAA2ChB,CAAQ;AAC5E,QAAIiB,IAAa,SAAS,cAAcD,CAAgB;AAGxD,WAAKC,MACHA,IAAa,SAAS,cAAc,KAAK,GACzCA,EAAW,YAAY,2BACvBA,EAAW,KAAK,gBAAgBjB,CAAQ,IACxCiB,EAAW,aAAa,iBAAiBjB,CAAQ,GAE5Ce,MACHL,EAAU,YAAY,gBACtB,SAAS,KAAK,YAAYA,CAAS,IAGrCA,EAAU,YAAYO,CAAU,IAG3BA;AAAA,EACT;AAEA,QAAMC,wBAAoB,IAAA;AAE1B,iBAAeC,EAAe1e,GAA8B;AAC1D,UAAMud,IAAWvd,EAAQ,YAAa8d,EAAe,UAG/Ca,IAAUF,EAAc,IAAIlB,CAAQ;AAK1C,QAJIoB,KACF,MAAMA,GAGJ,CAAChB,GAAsBJ,CAAQ,GAAG;AACpC,YAAMqB,KAAgB,YAAY;AAChC,cAAMC,IAAMR,EAAad,CAAQ,GAC3B,EAAE,SAASuB,EAAA,IACf,MAAM,QAAA,QAAA,EAAA,KAAA,MAAAC,EAAA,GACFhC,IAAWiC,GAAUF,GAAuB;AAAA,UAChD,GAAI9e;AAAA,UACJ,UAAAud;AAAA,QAAA,CACD;AACD,QAAAR,EAAS,QAAQ/b,IAA+B,EAAE,wBAAA4c,GAAwB,SAAAqB,GAAS,GACnFlC,EAAS,MAAM8B,CAAG,GAClBvB,GAAaP,GAAU8B,EAAI,IAAItB,CAAQ;AAAA,MACzC,GAAA;AAEA,MAAAkB,EAAc,IAAIlB,GAAUqB,CAAY,GACxC,MAAMA,GACNH,EAAc,OAAOlB,CAAQ;AAAA,IAC/B;AAEA,IAAA2B,GAAS,MAAM;AACb,MAAIlf,EAAQ,WACVif,EAAQ,OAAOjf,CAAO,IAEtBif,EAAQ,IAAIjf,CAAO;AAAA,IAEvB,CAAC;AAAA,EACH;AAEA,WAASmf,EAAgBf,GAA0C;AACjE,WAAOJ,IAAsB,KAAK,CAACtV,MAASA,EAAK,mBAAmB0V,CAAc;AAAA,EACpF;AAEA,QAAMa,IAAU;AAAA,IACd,IAAIjf,GAA8B;AAChC,YAAMud,IAAWvd,EAAQ,YAAa8d,EAAe,UAC/CsB,IAAaxB,EAAuBL,CAAQ;AAGlD,MAFe6B,EAAW,MAAM,KAAK,CAAC1W,MAASA,EAAK,mBAAmB1I,EAAQ,cAAc,KAG3Fkf,GAAS,MAAM;AACb,QAAAE,EAAW,MAAM,KAAKpf,CAAO,GACzBA,EAAQ,UAAU,OAAOA,GAAS,UAAW,cAC/CA,EAAQ,OAAOA,EAAQ,OAAO;AAAA,MAElC,CAAC;AAAA,IAEL;AAAA,IAEA,OAAO+a,GAAqB;AAC1B,UAAIA,GAAI;AAEN,YAAI/X,GACAqc;AAGJ,eAAO,QAAQzB,CAAsB,EAAE,QAAQ,CAAC,CAACH,GAAKQ,CAAS,MAAM;AACnE,gBAAMqB,IAAQrB,EAAU,MAAM,KAAK,CAACvV,MAASA,EAAK,mBAAmBqS,CAAE;AACvE,UAAIuE,MACFtc,IAAesc,GACfD,IAAuB5B;AAAA,QAE3B,CAAC,GAEG4B,MAEFzB,EAAuByB,CAAoB,EAAE,QAAQzB,EACnDyB,CACF,EAAE,MAAM,OAAO,CAAC3W,MAASA,EAAK,mBAAmBqS,CAAE,GAG/C6C,EAAuByB,CAAoB,EAAE,MAAM,WAAW,KAChE7B,GAAiB6B,CAAoB,GAIvCH,GAAS,MAAM;AACb,UAAIlc,GAAc,WAAW,OAAOA,GAAc,WAAY,cAC5DA,EAAa,QAAQA,EAAa,OAAO;AAAA,QAE7C,CAAC;AAAA,MAEL;AAAA,IACF;AAAA,IAEA,QAAQ;AACN,MAAA0a,GAAA,GAEA,OAAO,OAAOE,CAAsB,EAAE,QAAQ,CAACK,MAAc;AAC3D,QAAAA,EAAU,QAAQ,CAAA;AAAA,MACpB,CAAC;AAAA,IACH;AAAA,IAEA,QAAQG,GAAiC;AACvC,UAAI,CAACA,EAAgB;AAIrB,UAAIkB,IAAQ;AACZ,aAAO,OAAO1B,CAAsB,EAAE,QAAQ,CAACK,MAAc;AAC3D,QAAAA,EAAU,MAAM,QAAQ,CAACvV,MAAS;AAChC,UAAIA,EAAK,mBAAmB0V,MAC1B1V,EAAK,aAAa,IAClB4W,IAAQ;AAAA,QAEZ,CAAC;AAAA,MACH,CAAC,GAGIA,KACHre,GAAO,MAAM,yBAAyBmd,CAAc,YAAY;AAAA,IAEpE;AAAA,IAEA,OAAOmB,GAA6B;AAClC,UAAIA,EAAO,UAAU;AAEnB,YAAIvc,GACAwc,GACAC;AAaJ,YAVA,OAAO,QAAQ7B,CAAsB,EAAE,QAAQ,CAAC,CAACH,GAAKQ,CAAS,MAAM;AACnE,gBAAMqB,IAAQrB,EAAU,MAAM,KAAK,CAACvV,MAASA,EAAK,mBAAmB6W,EAAO,cAAc;AAC1F,UAAID,MACFtc,IAAesc,GACfE,IAAoBvB,GACpBwB,IAAoBhC;AAAA,QAExB,CAAC,GAGGza,KAAgBwc,GAAmB;AAIrC,cAHAve,GAAO,MAAM,yBAAyBse,EAAO,cAAc,gBAAgBE,CAAiB,EAAE,GAG1FF,EAAO,YAAYA,EAAO,aAAaE,GAAmB;AAE5D,YAAAD,EAAkB,QAAQA,EAAkB,MAAM;AAAA,cAChD,CAAC9W,MAASA,EAAK,mBAAmB6W,EAAO;AAAA,YAAA;AAI3C,kBAAMG,IAAsB;AAAA,cAC1B,GAAG1c;AAAA,cACH,GAAGuc;AAAA,YAAA,GAICI,IAAiBJ,EAAO;AAG9B,YAAK5B,GAAsBgC,CAAc,KAMvC1e,GAAO,MAAM,6CAA6C0e,CAAc,EAAE,GAC1E/B,EAAuB+B,CAAc,EAAE,MAAM,KAAKD,CAAmB,MALrEze,GAAO,MAAM,uCAAuC0e,CAAc,EAAE,GACpEjB,EAAegB,CAAmB;AAAA,UAMtC;AAEEze,YAAAA,GAAO,MAAM,4CAA4C,GAGzD,OAAO,KAAKse,CAAM,EAAE,QAAQ,CAACtc,MAAQ;AACnC,kBAAIA,MAAQ,cAAcA,MAAQ,kBAAkB;AAClD,sBAAM2c,IAAU3c,GACV4c,IAAYN,EAAOK,CAAO;AAGhC,gBAAI5c,KAAgB6c,MAAc,WAE/B7c,EAA4D4c,CAAO,IAAIC;AAAA,cAE5E;AAAA,YACF,CAAC;AAGH,iBAAO;AAAA,QACT;AACE5e,iBAAAA,GAAO,KAAK,wBAAwBse,EAAO,cAAc,uBAAuB,GACzE;AAAA,MAEX;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,YAAYhC,GAAgC;AAC1C,MAAIA,MACFO,EAAe,WAAWP;AAAA,IAE9B;AAAA,EAAA;AAGF,SAAO;AAAA,IACL,gBAAAO;AAAA,IACA,wBAAAF;AAAA,IACA,SAAAqB;AAAA,IACA,qBAAAjB;AAAA,IACA,4BAAAE;AAAA,IACA,gBAAAQ;AAAA,IACA,iBAAAP;AAAA,IACA,wBAAwB2B;AAAA,IACxB,iBAAAX;AAAA,EAAA;AAEJ;AC5SO,SAASY,KAAoC;AAClD,QAAM9B,IAAYJ,GAAA;AAClB,EAAAmC,GAAuB;AAAA,IACrB,gBAAgB/B,EAAU;AAAA,IAC1B,SAASA,EAAU;AAAA,IACnB,qBAAqBA,EAAU;AAAA,IAC/B,gBAAgBA,EAAU;AAAA,IAC1B,iBAAiB,CAAClD,MAAOkD,EAAU,gBAAgBlD,CAAE;AAAA,IACrD,iBAAiB,CAACA,MAAOkD,EAAU,gBAAgBlD,CAAE;AAAA,EAAA,CACtD;AACH;;;;;;;;;;;;ACyBA,UAAMtV,IAAQC,GAMRC,IAAOC,GASP,EAAE,UAAAqa,GAAU,WAAAC,EAAA,IAAcC,GAAA,GAE1BC,IAAwB7f,EAAS,MACjCkF,EAAM,WAAW,WACZ,KAGLA,EAAM,WAAW,WACZwa,EAAS,QAGXC,EAAU,KAClB,GAEKG,IAAmB9f,EAAS,MAAMkF,EAAM,cAAc2a,EAAsB,KAAK;AAEvF,aAASE,EAAcre,GAAgB;AACrC,MAAKA,KACH0D,EAAK,OAAO;AAAA,IAEhB;qBA5EkB0a,EAAA,cACdta,EAmBYoQ,EAAAoK,EAAA,GAAA;AAAA;MAlBT,eAAa;AAAA,MACb,UAAU7a,EAAA;AAAA,MACV,OAAOA,EAAA;AAAA,MACP,gBAAcA,EAAA;AAAA,MACd,WAAWyQ,EAAA+J,CAAA;AAAA,MACX,uBAAoBI;AAAA,IAAA;iBAYrB,MAAuB;AAAA,QAAvBpa,EAAuBC,EAAA,QAAA,SAAA;AAAA,MAAA;;;MATfQ,EAAAA,OAAO;cACZ;AAAA,QAED,IAAAP,EAAA,CAGE,EALS,OAAAN,QAAK;AAAA,UAEhBI,EAGEC,EAAA,QAAA,UAAA,EADC,OAAAL,GAAY;AAAA,QAAA;;;oEASnBI,EAAuBC,EAAA,QAAA,WAAA,EAAA,KAAA,GAAA;AAAA;ICnBdqa,KAAUC;;;;;;;;;ACyBvB,UAAMhb,IAAQC,GAGRgb,IAAgBngB,EAAS,MACzBkF,EAAM,QAAQ,CAACA,EAAM,KAAK,WAAW,YAAY,KAAK,CAACA,EAAM,KAAK,WAAW,MAAM,IAC9E,IAAI,IAAIA,EAAM,MAAM,OAAO,SAAS,MAAM,EAAE,SAAA,IAE9CA,EAAM,IACd;2BAtCCM,EAYWoQ,EAAAwK,CAAA,GAAA;AAAA,MAXT,SAAQ;AAAA,MACR,OAAM;AAAA,MACL,gCAAO1a,EAAAA,MAAK,QAAA;AAAA,IAAA;iBAEb,MAMM;AAAA,QANNI,EAMM,OANNgQ,IAMM;AAAA,UALJ7P,EAIE2P,EAAAQ,EAAA,GAAA;AAAA,YAHC,KAAK+J,EAAA;AAAA,YACN,OAAM;AAAA,YACN,MAAK;AAAA,UAAA;cACFhb,EAAA,WAAW,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;ACatB,UAAM,EAAE,QAAAkb,EAAA,IAAWC,GAAA;sBAvBjBjK,EAAA,GAAAtQ,EASM,OATN+P,IASM;AAAA,cARJ/P,EAOEC,GAAA,MAAAua,GANmBpb,EAAA,WAAS,CAArBqb,YADThb,EAOEib,IAAA;AAAA,QALC,KAAKD,EAAS;AAAA,QACd,MAAMA,EAAS;AAAA,QACf,gBAAcA,EAAS;AAAA,QACvB,uBAAqBA,EAAS;AAAA,QAC9B,UAAO,CAAAra,MAAEyP,EAAAyK,CAAA,EAAOG,EAAS,kBAAkB;AAAA,MAAA;;;;ACJ3C,SAASE,GAAwBC,GAAkC;AACxE,MAAI,CAACA,EAAW,QAAO;AACvB,QAAMC,IAAeD,EAAU,KAAA;AAC/B,SAAI,CAACC,EAAa,WAAW,GAAG,KAAKA,EAAa,WAAW,IAAI,IACxD,MAEFA;AACT;AAKO,SAASC,GAAkBnZ,GAAqD;AACrF,SAAIA,EAAO,WAAW,MACb,wCAELA,EAAO,SACF,iCAAiCA,EAAO,SAAS,OAEtDA,EAAO,QACF,2BAA2BA,EAAO,QAEpC;AACT;AAUO,SAASoZ,GAAuBC,GAIb;AACxB,QAAMlK,IAAgC,CAAA;AACtC,SAAIkK,EAAO,oBAAoBA,EAAO,YACpClK,EAAO,KAAK,EAAE,MAAM,kBAAA,CAAmB,GAErCkK,EAAO,aAAaA,EAAO,mBAAmBA,EAAO,oBAAoBA,EAAO,mBAClFlK,EAAO,KAAK,EAAE,MAAM,kBAAA,CAAmB,GAElCA;AACT;;;;;;;;;;;;;;;;;ACgFA,UAAMnW,IAASC,EAAa,YAAY,GAUlCuE,IAAQC,GAERjC,IAAS8d,GAAA,GAET,EAAE,eAAAC,EAAA,IAAkBjM,GAAQ,EAAE,iBAAiB,IAAO,GACtD,EAAE,YAAAnL,GAAY,SAASqX,EAAA,IAAyBtX,GAAA,GAChDuX,IAAezY,EAAI,EAAE,WAAW,IAAM,GACtC,EAAE,QAAA2X,GAAQ,SAAA5X,GAAS,MAAA2Y,EAAA,IAASrgB,GAAA,GAC5B,EAAE,cAAAsgB,EAAA,IAAiBf,GAAA,GACnBrL,IAAUC,GAAA,GACVoM,IAAiB5Y,EAAA,GACjB6Y,IAAkB7Y,EAAI,EAAK;AAEjC,IAAAyB,GAAU,YAAY;AACpB,MAAAmX,EAAe,QAAQ,MAAMD,EAAA,GAC7BE,EAAgB,QAAQ;AAAA,IAC1B,CAAC;AAED,UAAMC,IAAgBxhB,EAAS,OAAO;AAAA,MACpC,MAAOkhB,EAAqB,QAA+C,KAAvCrX,EAAW,OAAO,QAAQ3E,EAAM;AAAA,IAAO,EAC3E,GAEIuc,IAAOjE,GAAS;AAAA,MACpB,UAAU;AAAA,MACV,UAAU;AAAA,IAAA,CACX,GAEKkE,IAAQ,YAAY;AACxB,UAAKzM,EAAQ,OAQb;AAAA,YANAkM,EAAa,MAAM,QAAQ,IAC3BA,EAAa,QAAS,MAAMd,EAAOoB,EAAK,UAAUA,EAAK,QAAQ,GAK3DN,EAAa,MAAM,aAAaC,EAAK,OAAO,iBAAiB;AAC/D,gBAAMle,EAAO,KAAK,EAAE,MAAM,kBAAkB;AAC5C;AAAA,QACF;AAEA,YAAIie,EAAa,MAAM,WAAW;AAChC,gBAAMQ,IAAajB,GAAwB,aAAa,QAAQ,oBAAoB,CAAC;AACrF,uBAAa,WAAW,oBAAoB,GAC5C,MAAMxd,EAAO,KAAKye,CAAU;AAC5B;AAAA,QACF;AAGA,QAAAR,EAAa,MAAM,QAAQN,GAAkBM,EAAa,KAAK,GAE/DM,EAAK,WAAW,IAChBR,EAAc,UAAU;AAAA;AAAA,IAC1B,GAEMW,IAAqB,MAAM;AAC/B,MAAA1e,EAAO,KAAK,EAAE,MAAM,iBAAA,CAAkB;AAAA,IACxC;AAEA,WAAAxC,EAAO,MAAM,iBAAiB,mBAtM5B8E,EA+GeoQ,EAAAiM,EAAA,GAAA;AAAA,MA9GZ,MAAML,EAAA,MAAc;AAAA,MACpB,YAAYrc,EAAA;AAAA,MACZ,OAAOA,EAAA,SAASmB,EAAAA,GAAE,aAAA;AAAA,MAClB,UAAUnB,EAAA,YAAYmB,EAAAA,GAAE,gBAAA;AAAA,MACzB,OAAM;AAAA,IAAA;iBAGN,MAYM;AAAA,QAXEgb,EAAA,SAAkBA,EAAA,MAAe,UADzCjL,KAAAtQ,EAYM,OAZN+P,IAYM;AAAA,UARJ7P,EAAiD6b,IAAA,EAA7B,WAAWR,EAAA,MAAA,GAAc,MAAA,GAAA,CAAA,WAAA,CAAA;AAAA,UAGpCnc,EAAA,4BADTY,EAKM,OALNgQ,IAKM+C,EADDxS,EAAAA,GAAE,UAAA,CAAA,GAAA,CAAA;AAAA;QAMDnB,EAAA,WAAWoc,EAAA,SAAe,CAAKD,EAAA,OAAgB,eADvD9b,EAKSoQ,EAAAmM,EAAA,GAAA;AAAA;UAHP,OAAM;AAAA,QAAA;qBAEN,MAAwC;AAAA,gBAArCzb,EAAAA,GAAE,8BAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;QAGUnB,EAAA,4BAAjBY,EAgFWC,GAAA,EAAA,KAAA,KAAA;AAAA,UA/ETC,EA+DS2P,EAAAM,EAAA,GAAA;AAAA,YA9DP,OAAM;AAAA,YACL,UAAQwL;AAAA,UAAA;uBAET,MAiBQ;AAAA,cAjBRzb,EAiBQ2P,EAAAc,CAAA,GAAA;AAAA,gBAfL,OAAOpQ,EAAAA,GAAE,0BAAA;AAAA,gBACV,MAAK;AAAA,gBACJ,eAAamb,EAAK;AAAA,gBACnB,OAAM;AAAA,cAAA;gBAEN,SAAA5b,EAAA,CASE,EAfQ,cAAA8Q,GAAc,cAAAC,GAAc,QAAAC,QAAM;AAAA,kBAM5C5Q,EASE2P,EAAAkB,CAAA,GAAA;AAAA,oBARA,KAAI;AAAA,oBACK,YAAA2K,EAAK;AAAA;sBAAL1K,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA5Q,MAAAsb,EAAK,WAAQtb;AAAA,sBAMDyQ;AAAA,oBAAA;AAAA,oBALpB,OAAOtQ,EAAAA,GAAE,0BAAA;AAAA,oBACT,aAAaA,EAAAA,GAAE,gCAAA;AAAA,oBAChB,UAAA;AAAA,oBACC,OAAK,CAAA,CAAIuQ,EAAO;AAAA,oBAChB,iBAAeF;AAAA,kBAAA;;;;cAKpB1Q,EAmBQ2P,EAAAc,CAAA,GAAA;AAAA,gBAjBL,OAAOpQ,EAAAA,GAAE,6BAAA;AAAA,gBACV,MAAK;AAAA,gBACJ,eAAamb,EAAK;AAAA,gBACnB,OAAM;AAAA,cAAA;gBAEN,SAAA5b,EAAA,CAWE,EAjBQ,cAAA8Q,GAAc,cAAAC,GAAc,QAAAC,QAAM;AAAA,kBAM5C5Q,EAWE2P,EAAAkB,CAAA,GAAA;AAAA,oBAVA,KAAI;AAAA,oBACK,YAAA2K,EAAK;AAAA;sBAAL1K,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA5Q,MAAAsb,EAAK,WAAQtb;AAAA,sBAQDyQ;AAAA,oBAAA;AAAA,oBAPpB,OAAOtQ,EAAAA,GAAE,6BAAA;AAAA,oBACT,aAAaA,EAAAA,GAAE,mCAAA;AAAA,oBAChB,MAAK;AAAA,oBACL,UAAA;AAAA,oBACC,OAAK,CAAA,CAAIuQ,EAAO;AAAA,oBAChB,iBAAeF;AAAA,oBACf,YAAa+K,GAAK,CAAA,OAAA,CAAA;AAAA,kBAAA;;;;cAKvBzb,EASW2P,EAAAwK,CAAA,GAAA;AAAA,gBART,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,MAAK;AAAA,gBACJ,WAAWxK,EAAAX,CAAA;AAAA,gBACX,SAASW,EAAAnN,CAAA;AAAA,gBACT,SAAOiZ;AAAA,cAAA;2BAER,MAAwB;AAAA,sBAArBpb,EAAAA,GAAE,cAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;cAGPL,EAOW2P,EAAAwK,CAAA,GAAA;AAAA,gBANT,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,MAAK;AAAA,gBACJ,SAAOwB;AAAA,cAAA;2BAER,MAAwC;AAAA,sBAArCtb,EAAAA,GAAE,8BAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;;;;UAKTL,EAKE2P,EAAAoM,EAAA,GAAA;AAAA,YAJA,MAAK;AAAA,YACL,WAAA;AAAA,YACA,mBAAgB;AAAA,YAChB,iBAAc;AAAA,UAAA;UAIPb,EAAA,MAAa,8BADtB3b,EAKSoQ,EAAAmM,EAAA,GAAA;AAAA;YAHP,OAAM;AAAA,UAAA;uBAEN,MAAwB;AAAA,cAArBE,EAAAnJ,EAAAqI,EAAA,MAAa,KAAK,GAAA,CAAA;AAAA,YAAA;;;;;;;;IC3GhBe,KAAQC;;;;;;;;AC+FrB,UAAMjd,IAAQC,GAERjC,IAAS8d,GAAA,GACT,EAAE,GAAAxe,EAAA,IAAM6S,GAAQ,EAAE,UAAU,UAAU;AAC5C,IAAAL,GAAQ,EAAE,iBAAiB,IAAO;AAClC,UAAMC,IAAUC,GAAA,GACV,EAAE,YAAArL,GAAY,SAASqX,EAAA,IAAyBtX,GAAA,GAEhDnB,IAAUC,EAAI,EAAK,GACnBC,IAAQD,EAAI,EAAE,GACd0Z,IAA4B1Z,EAAI,EAAK,GAErC+Y,IAAOjE,GAAS;AAAA,MACpB,cAAc;AAAA,IAAA,CACf;AAED,QAAI6E;AAEJ,QAAInd,EAAM,cAAc,OAAOA,EAAM,cAAe;AAElD,MAAAmd,IADend,EAAM,WAAA,EACG;AAAA,SACnB;AACL,YAAM,EAAE,sBAAAod,EAAA,IAAyBvhB,GAAA;AACjC,MAAAshB,IAAiB,OAAOhe,MAAmC;AACzD,cAAMie,EAAqBje,EAAK,YAAY;AAAA,MAC9C;AAAA,IACF;AAEA,UAAMmd,IAAgBxhB,EAAS,OAAO;AAAA,MACpC,MAAOkhB,EAAqB,QAA+C,KAAvCrX,EAAW,OAAO,QAAQ3E,EAAM;AAAA,IAAO,EAC3E,GAEIqd,IAAcviB,EAAS,MAAM;AACjC,YAAMwiB,IAAQf,EAAK,cACb,CAAChjB,GAAMgkB,CAAM,IAAID,EAAM,MAAM,GAAG;AACtC,aAAI,CAAC/jB,KAAQ,CAACgkB,IAAeD,IAEtB,GADQ/jB,EAAK,SAAS,IAAIA,EAAK,CAAC,IAAI,QAAQA,EAAKA,EAAK,SAAS,CAAC,IAAIA,EAAK,CAAC,IAAI,KACrE,IAAIgkB,CAAM;AAAA,IAC5B,CAAC,GAEKC,IAAS,YAAY;AACzB,UAAI,GAACzN,EAAQ,SAAS,CAACoN;AAEvB,YAAI;AACF,UAAA5Z,EAAQ,QAAQ,IAChBE,EAAM,QAAQ,IACd,MAAM0Z,EAAe,EAAE,cAAcZ,EAAK,cAAc,GACxDW,EAA0B,QAAQ;AAAA,QACpC,SAASnZ,GAAG;AACV,UAAAN,EAAM,QAAQM,aAAa,QAAQA,EAAE,UAAU,OAAOA,CAAC;AAAA,QACzD,UAAA;AACE,UAAAR,EAAQ,QAAQ;AAAA,QAClB;AAAA,IACF,GAEMka,IAAS,MAAM;AACnB,MAAAzf,EAAO,KAAK,EAAE,MAAM,QAAA,CAAS;AAAA,IAC/B;2BAzJEsC,EA4EeoQ,EAAAiM,EAAA,GAAA;AAAA,MA3EZ,MAAML,EAAA,MAAc;AAAA,MACpB,YAAYrc,EAAA;AAAA,MACZ,OAAOid,EAAA,QAA4BxM,EAAApT,CAAA,qCAAqCoT,EAAApT,CAAA,EAAC,uBAAA;AAAA,MACzE,UAAU4f,EAAA,QAA4B,SAAYxM,EAAApT,CAAA,EAAC,0BAAA;AAAA,IAAA;iBAGpD,MAmDW;AAAA,QAnDM4f,EAAA,cAsDjBrc,EAcWC,GAAA,EAAA,KAAA,KAAA;AAAA,UAbTF,EAIM,OAJNiQ,IAIM;AAAA,YAHJjQ,EAEI,KAFJmQ,IAEI6C,EADClD,EAAApT,CAAA,2CAA2C+f,EAAA,MAAA,CAAW,CAAA,GAAA,CAAA;AAAA,UAAA;UAI7Dtc,EAMW2P,EAAAwK,CAAA,GAAA;AAAA,YALT,SAAQ;AAAA,YACR,OAAM;AAAA,YACL,SAAOuC;AAAA,UAAA;uBAER,MAAwC;AAAA,kBAArC/M,EAAApT,CAAA,EAAC,+BAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;wBAlERuD,EAmDWC,GAAA,EAAA,KAAA,KAAA;AAAA,UAlDTC,EA0CS2P,EAAAM,EAAA,GAAA,EA1CA,UAAQwM,KAAM;AAAA,uBACrB,MAkBQ;AAAA,cAlBRzc,EAkBQ2P,EAAAc,CAAA,GAAA;AAAA,gBAhBL,OAAOd,EAAApT,CAAA,EAAC,oCAAA;AAAA,gBACT,MAAK;AAAA,gBACJ,eAAaif,EAAK;AAAA,gBACnB,OAAM;AAAA,cAAA;gBAEN,SAAA5b,EAAA,CAUE,EAhBQ,cAAA8Q,GAAc,cAAAC,GAAc,QAAAC,QAAM;AAAA,kBAM5C5Q,EAUE2P,EAAAkB,CAAA,GAAA;AAAA,oBATA,KAAI;AAAA,oBACK,YAAA2K,EAAK;AAAA;sBAAL1K,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA5Q,MAAAsb,EAAK,eAAYtb;AAAA,sBAOLyQ;AAAA,oBAAA;AAAA,oBANrB,OAAM;AAAA,oBACL,OAAOhB,EAAApT,CAAA,EAAC,oCAAA;AAAA,oBACR,aAAaoT,EAAApT,CAAA,EAAC,0CAAA;AAAA,oBACf,UAAA;AAAA,oBACC,OAAK,CAAA,CAAIqU,EAAO;AAAA,oBAChB,iBAAeF;AAAA,kBAAA;;;;cAKpB1Q,EAQW2P,EAAAwK,CAAA,GAAA;AAAA,gBAPT,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACL,UAAQ,CAAGxK,EAAAX,CAAA,KAAWxM,EAAA;AAAA,gBACtB,SAASA,EAAA;AAAA,gBACT,SAAOia;AAAA,cAAA;2BAER,MAAsC;AAAA,sBAAnC9M,EAAApT,CAAA,EAAC,6BAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;cAGNsD,EAUM,OAVNgQ,IAUM;AAAA,gBATJ7P,EAQW2P,EAAAwK,CAAA,GAAA;AAAA,kBAPT,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,aAAU;AAAA,kBACV,MAAK;AAAA,kBACJ,SAAOuC;AAAA,gBAAA;6BAER,MAAwC;AAAA,wBAArC/M,EAAApT,CAAA,EAAC,+BAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;;;;;UAMFmG,EAAA,cADRnD,EAKSoQ,EAAAmM,EAAA,GAAA;AAAA;YAHP,OAAM;AAAA,UAAA;uBAEN,MAAW;AAAA,kBAARpZ,EAAA,KAAK,GAAA,CAAA;AAAA,YAAA;;;;;;;;ICvDHia,KAAiBC;;;;;;;;;;ACkG9B,UAAM3d,IAAQC,GAcR,EAAE,eAAA2d,GAAe,kBAAAC,GAAkB,sBAAAC,GAAsB,QAAA3C,GAAQ,SAAA5X,EAAA,IAAY1H,GAAA,GAC7EmC,IAAS8d,GAAA,GACT,EAAE,GAAAxe,EAAA,IAAM6S,GAAQ,EAAE,UAAU,UAAU,GACtC,EAAE,UAAU4N,EAAA,IAAgBjO,GAAQ,EAAE,iBAAiB,IAAO,GAC9D,EAAE,YAAAnL,GAAY,SAASqX,EAAA,IAAyBtX,GAAA,GAEhD6X,IAAOjE,GAMV;AAAA,MACD,SAAS;AAAA,MACT,cAAc;AAAA,MACd,QAAQ,CAAA;AAAA,MACR,UAAU;AAAA,MACV,iBAAiB;AAAA,IAAA,CAClB;AAED,IAAArT,GAAU,YAAY;AACpB,MAAAsX,EAAK,eAAe,MAAMqB,EAAc5d,EAAM,QAAQA,EAAM,KAAK,GAC5Duc,EAAK,gBACRA,EAAK,OAAO,KAAK,eAAe;AAAA,IAEpC,CAAC;AAED,UAAMyB,IAAgBljB,EAAS,MACtByI,EAAQ,SAAS,CAACgZ,EAAK,YAAY,CAACA,EAAK,mBAAoB,CAACA,EAAK,WAAWA,EAAK,YAC3F,GAEK0B,IAAW,YAAY;AAC3B,UAAI1B,EAAK,cAAc;AACrB,cAAM5K,KAAU,MAAMkM,EAAiBtB,EAAK,QAAQ,GAAG;AACvD,QAAAA,EAAK,SAAS5K,GAAQ,IAAI,CAAC9Y,MAAMA,EAAE,IAAI,GACnC0jB,EAAK,oBAAoBA,EAAK,YAChCA,EAAK,OAAO,KAAK,iBAAiB,GAEpCA,EAAK,UAAUA,EAAK,OAAO,UAAU;AAAA,MACvC;AAAA,IACF,GAEM2B,IAAgB,YAAY;AAChC,YAAM,EAAE,OAAAC,MAAU,MAAMJ,EAAA;AACxB,UAAII,GAAO;AACT,cAAM3b,IAAS,MAAMsb,EAAqB9d,EAAM,QAAQuc,EAAK,UAAUvc,EAAM,KAAK;AAClF,YAAIwC,EAAO,WAAW;AACpB,gBAAM4b,IAAc,MAAMjD,EAAOnb,EAAM,UAAUuc,EAAK,QAAQ;AAC9D,UAAI6B,EAAY,YACdpgB,EAAO,KAAK,GAAG,IAEfue,EAAK,SAAU,WAAW6B,KAAe,CAACA,EAAY,KAAe,KAAM,CAAA;AAAA,QAE/E;AACE,UAAA7B,EAAK,SAAS/Z,EAAO;AAAA,MAEzB;AAAA,IACF,GAEM8Z,IAAgBxhB,EAAS,OAAO;AAAA,MACpC,MAAOkhB,EAAqB,QAA+C,KAAvCrX,EAAW,OAAO,QAAQ3E,EAAM;AAAA,IAAO,EAC3E;2BA9KAM,EAuFeoQ,EAAAiM,EAAA,GAAA;AAAA,MAtFZ,MAAML,EAAA,MAAc;AAAA,MACpB,YAAYrc,EAAA;AAAA,MACZ,OAAOyQ,EAAApT,CAAA,EAAC,qBAAA;AAAA,MACR,UAAUoT,EAAApT,CAAA,EAAC,wBAAA;AAAA,IAAA;iBAEZ,MAGE;AAAA,QAFMoT,EAAAnN,CAAA,UADRjD,EAGEoQ,EAAA2N,EAAA,GAAA;AAAA;UADA,QAAA;AAAA,QAAA;QAGFtd,EA2ES2P,EAAAM,EAAA,GAAA,MAAA;AAAA,qBA1EP,MA0BQ;AAAA,YA1BRjQ,EA0BQ2P,EAAAc,CAAA,GAAA;AAAA,cAxBL,OAAOd,EAAApT,CAAA,EAAC,qCAAA;AAAA,cACT,MAAK;AAAA,cACJ,eAAaif,EAAK;AAAA,cACnB,OAAM;AAAA,YAAA;cAEN,SAAA5b,EAAA,CAkBE,EAxBQ,OAAA2d,GAAO,cAAA7M,GAAc,cAAAC,GAAc,QAAAC,QAAM;AAAA,gBAMnD5Q,EAkBE2P,EAAAkB,CAAA,GAlBF2M,GAkBED,GAjBa;AAAA,kBACb,KAAI;AAAA,kBACK,YAAA/B,EAAK;AAAA;oBAAL1K,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA5Q,MAAAsb,EAAK,WAAQtb;AAAA,qBASa8C,MAAC;AAAqB,sBAAA2N,EAAa3N,CAAC,GAAiBka,EAAA;AAAA;;kBARxF,OAAM;AAAA,kBACL,OAAOvN,EAAApT,CAAA,EAAC,qCAAA;AAAA,kBACR,aAAaoT,EAAApT,CAAA,EAAC,2CAAA;AAAA,kBACf,MAAK;AAAA,kBACJ,UAAQ,CAAGif,EAAK;AAAA,kBACjB,UAAA;AAAA,kBACC,OAAK,CAAA,CAAI5K,EAAO;AAAA,kBAChB,iBAAeF;AAAA,gBAAA;;;;YAUpB1Q,EA2BQ2P,EAAAc,CAAA,GAAA;AAAA,cAzBL,OAAOd,EAAApT,CAAA,EAAC,6CAAA;AAAA,cACT,MAAK;AAAA,cACJ,eAAaif,EAAK;AAAA,cACnB,OAAM;AAAA,YAAA;cAEN,SAAA5b,EAAA,CAmBE,EAzBQ,OAAA2d,GAAO,cAAA7M,GAAc,cAAAC,GAAc,QAAAC,QAAM;AAAA,gBAMnD5Q,EAmBE2P,EAAAkB,CAAA,GAnBF2M,GAmBED,GAlBa;AAAA,kBACb,KAAI;AAAA,kBACK,YAAA/B,EAAK;AAAA;oBAAL1K,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA5Q,MAAAsb,EAAK,kBAAetb;AAAA,qBASM8C,MAAC;AAAqB,sBAAA2N,EAAa3N,CAAC,GAAiBka,EAAA;AAAA;;kBARxF,OAAM;AAAA,kBACL,OAAOvN,EAAApT,CAAA,EAAC,6CAAA;AAAA,kBACR,aAAaoT,EAAApT,CAAA,EAAC,mDAAA;AAAA,kBACd,UAAQ,CAAGif,EAAK;AAAA,kBACjB,MAAK;AAAA,kBACL,UAAA;AAAA,kBACC,OAAK,CAAA,CAAI5K,EAAO;AAAA,kBAChB,iBAAeF;AAAA,kBAOf,YAAayM,GAAa,CAAA,OAAA,CAAA;AAAA,gBAAA;;;;YAI/Bnd,EAQW2P,EAAAwK,CAAA,GAAA;AAAA,cAPT,SAAQ;AAAA,cACR,OAAM;AAAA,cACL,UAAU8C,EAAA;AAAA,cACV,SAAStN,EAAAnN,CAAA;AAAA,cACT,SAAO2a;AAAA,YAAA;yBAER,MAAsC;AAAA,oBAAnCxN,EAAApT,CAAA,EAAC,6BAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;aAGN6T,EAAA,EAAA,GAAAtQ,EAMSC,GAAA,MAAAua,GALSkB,EAAK,SAAd9Y,YADTnD,EAMSoQ,EAAAmM,EAAA,GAAA;AAAA,cAJN,KAAKpZ;AAAA,cACN,OAAM;AAAA,YAAA;yBAEN,MAAwC;AAAA,gBAArCsZ,EAAAnJ,EAAAlD,EAAApT,CAAA,0BAA0BmG,CAAK,EAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;;;;;;ICnF7B+a,KAAgBC;;;;;;;;;;AC2G7B,IAAA3O,GAAQ,EAAE,iBAAiB,IAAO;AAElC,UAAM9P,IAAQC,GAcR,EAAE,eAAA2d,GAAe,kBAAAC,GAAkB,sBAAAC,GAAsB,QAAA3C,GAAQ,SAAA5X,EAAA,IAAY1H,GAAA,GAC7EmC,IAAS8d,GAAA,GACT,EAAE,GAAAxe,EAAA,IAAM6S,GAAQ,EAAE,UAAU,UAAU,GACtCuO,IAAc1O,GAAA,GACdC,IAAUC,GAAA,GACV,EAAE,YAAAvL,GAAY,SAASqX,EAAA,IAAyBtX,GAAA,GAEhD6X,IAAOjE,GAMV;AAAA,MACD,SAAS;AAAA,MACT,cAAc;AAAA,MACd,QAAQ,CAAA;AAAA,MACR,UAAU;AAAA,MACV,iBAAiB;AAAA,IAAA,CAClB,GAEK/H,IAAazV,EAAS,MACnB,CAACmV,EAAQ,SAAS,CAACyO,EAAY,KACvC;AAED,IAAAzZ,GAAU,YAAY;AACpB,MAAAsX,EAAK,eAAe,MAAMqB,EAAc5d,EAAM,QAAQA,EAAM,KAAK,GAC5Duc,EAAK,gBACRA,EAAK,OAAO,KAAK,eAAe;AAAA,IAEpC,CAAC;AAED,UAAM0B,IAAW,YAAY;AAC3B,UAAI1B,EAAK,cAAc;AACrB,cAAM5K,KAAU,MAAMkM,EAAiBtB,EAAK,QAAQ,GAAG;AACvD,QAAAA,EAAK,SAAS5K,GAAQ,IAAI,CAAC9Y,MAAMA,EAAE,IAAI,GACnC0jB,EAAK,mBAAmBA,EAAK,oBAAoBA,EAAK,YACxDA,EAAK,OAAO,KAAK,iBAAiB,GAEpCA,EAAK,UAAUA,EAAK,OAAO,UAAU,KAAK,CAAChM,EAAW;AAAA,MACxD;AAAA,IACF,GAEMoO,IAAmB,YAAY;AACnC,YAAMnc,IAAS,MAAMsb,EAAqB9d,EAAM,QAAQuc,EAAK,UAAUvc,EAAM,KAAK;AAClF,MAAIwC,EAAO,aACM,MAAM2Y,EAAOnb,EAAM,UAAUuc,EAAK,QAAQ,GAC9C,aACTve,EAAO,KAAK,GAAG,IAGjBue,EAAK,SAAS/Z,EAAO;AAAA,IAEzB,GAEM8Z,IAAgBxhB,EAAS,OAAO;AAAA,MACpC,MAAOkhB,EAAqB,QAA+C,KAAvCrX,EAAW,OAAO,QAAQ3E,EAAM;AAAA,IAAO,EAC3E;2BArLAM,EA+FeoQ,EAAAiM,EAAA,GAAA;AAAA,MA9FZ,MAAML,EAAA,MAAc;AAAA,MACpB,YAAYrc,EAAA;AAAA,MACZ,OAAOyQ,EAAApT,CAAA,EAAC,kBAAA;AAAA,MACR,UAAUoT,EAAApT,CAAA,EAAC,qBAAA;AAAA,IAAA;iBAEZ,MAGE;AAAA,QAFMoT,EAAAnN,CAAA,UADRjD,EAGEoQ,EAAA2N,EAAA,GAAA;AAAA;UADA,QAAA;AAAA,QAAA;QAGFtd,EAmFS2P,EAAAM,EAAA,GAAA,MAAA;AAAA,qBAlFP,MAME;AAAA,YANFjQ,EAME2P,EAAAkB,CAAA,GAAA;AAAA,cALA,OAAM;AAAA,cACL,OAAOlB,EAAApT,CAAA,EAAC,+BAAA;AAAA,cACR,eAAa2C,EAAA;AAAA,cACd,MAAK;AAAA,cACL,UAAA;AAAA,YAAA;YAGFc,EA0BQ2P,EAAAc,CAAA,GAAA;AAAA,cAxBL,OAAOd,EAAApT,CAAA,EAAC,kCAAA;AAAA,cACR,eAAaif,EAAK;AAAA,cACnB,OAAM;AAAA,cACN,MAAK;AAAA,YAAA;cAEL,SAAA5b,EAAA,CAkBE,EAxBQ,OAAA2d,GAAO,cAAA7M,GAAc,cAAAC,GAAc,QAAAC,QAAM;AAAA,gBAMnD5Q,EAkBE2P,EAAAkB,CAAA,GAlBF2M,GAkBED,GAjBa;AAAA,kBACb,KAAI;AAAA,kBACK,YAAA/B,EAAK;AAAA;oBAAL1K,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA5Q,MAAAsb,EAAK,WAAQtb;AAAA,qBASa8C,MAAC;AAAqB,sBAAA2N,EAAa3N,CAAC,GAAiBka,EAAA;AAAA;;kBARxF,OAAM;AAAA,kBACL,OAAOvN,EAAApT,CAAA,EAAC,kCAAA;AAAA,kBACR,aAAaoT,EAAApT,CAAA,EAAC,wCAAA;AAAA,kBACf,MAAK;AAAA,kBACJ,UAAQ,CAAGif,EAAK;AAAA,kBAChB,OAAK,CAAA,CAAI5K,EAAO;AAAA,kBAChB,iBAAeF;AAAA,kBAChB,UAAA;AAAA,gBAAA;;;;YAUJ1Q,EA2BQ2P,EAAAc,CAAA,GAAA;AAAA,cAzBL,OAAOd,EAAApT,CAAA,EAAC,0CAAA;AAAA,cACR,eAAaif,EAAK;AAAA,cACnB,OAAM;AAAA,cACN,MAAK;AAAA,YAAA;cAEL,SAAA5b,EAAA,CAmBE,EAzBQ,OAAA2d,GAAO,cAAA7M,GAAc,cAAAC,GAAc,QAAAC,QAAM;AAAA,gBAMnD5Q,EAmBE2P,EAAAkB,CAAA,GAnBF2M,GAmBED,GAlBa;AAAA,kBACb,KAAI;AAAA,kBACK,YAAA/B,EAAK;AAAA;oBAAL1K,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA5Q,MAAAsb,EAAK,kBAAetb;AAAA,qBASM8C,MAAC;AAAqB,sBAAA2N,EAAa3N,CAAC,GAAiBka,EAAA;AAAA;;kBARxF,OAAM;AAAA,kBACL,OAAOvN,EAAApT,CAAA,EAAC,0CAAA;AAAA,kBACR,aAAaoT,EAAApT,CAAA,EAAC,gDAAA;AAAA,kBACd,UAAQ,CAAGif,EAAK;AAAA,kBACjB,MAAK;AAAA,kBACJ,OAAK,CAAA,CAAI5K,EAAO;AAAA,kBAChB,iBAAeF;AAAA,kBAChB,UAAA;AAAA,kBAOC,YAAakN,GAAgB,CAAA,OAAA,CAAA;AAAA,gBAAA;;;;YAIlC5d,EAQW2P,EAAAwK,CAAA,GAAA;AAAA,cAPT,SAAQ;AAAA,cACR,OAAM;AAAA,cACL,UAAUxK,QAAO,CAAK6L,EAAK,WAAO,CAAKA,EAAK;AAAA,cAC5C,SAAS7L,EAAAnN,CAAA;AAAA,cACT,SAAOob;AAAA,YAAA;yBAER,MAAuC;AAAA,oBAApCjO,EAAApT,CAAA,EAAC,8BAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;aAGN6T,EAAA,EAAA,GAAAtQ,EAMSC,GAAA,MAAAua,GALSkB,EAAK,SAAd9Y,YADTnD,EAMSoQ,EAAAmM,EAAA,GAAA;AAAA,cAJN,KAAKpZ;AAAA,cACN,OAAM;AAAA,YAAA;yBAEN,MAAqC;AAAA,gBAAlCsZ,EAAAnJ,EAAAlD,EAAApT,CAAA,uBAAuBmG,CAAK,EAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;;;;;;IC3F1Bmb,KAASC;;;;;;;;;;;AC2ItB,UAAM7e,IAAQC,GAER,EAAE,GAAA3C,EAAA,IAAM6S,GAAQ,EAAE,UAAU,UAAU,GACtC,EAAE,oBAAA2O,GAAoB,SAAAvb,GAAS,kBAAAsa,GAAkB,SAAAhI,EAAA,IAAYha,GAAA,GAC7D,EAAE,YAAA8I,GAAY,SAASqX,EAAA,IAAyBtX,GAAA,GAEhD4X,IAAgBxhB,EAAS,OAAO;AAAA,MACpC,MAAOkhB,EAAqB,QAA+C,KAAvCrX,EAAW,OAAO,QAAQ3E,EAAM;AAAA,IAAO,EAC3E;AACF,IAAA8P,GAAQ,EAAE,iBAAiB,IAAO;AAClC,UAAMC,IAAUC,GAAA,GACVC,IAAUC,GAAA,GACVlS,IAAS8d,GAAA,GAETS,IAAOjE,GAA0B;AAAA,MACrC,SAAS;AAAA,MACT,QAAQ,CAAA;AAAA,MACR,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,iBAAiB;AAAA,IAAA,CAClB,GAEK/H,IAAazV,EAAS,MACnB,CAACmV,EAAQ,SAAS,CAACF,EAAQ,KACnC;AAED,mBAAegP,IAAe;AAC5B,YAAMlJ,EAAA,GACN,MAAM7X,EAAO,KAAK,QAAQ;AAAA,IAC5B;AAEA,mBAAeghB,IAAiB;AAC9B,YAAMxc,IAAS,MAAMsc,EAAmBvC,EAAK,iBAAiBA,EAAK,QAAQ;AAC3E,MAAI/Z,GAAQ,YACV,MAAMxE,EAAO,KAAK,GAAG,IACZwE,GAAQ,WACjB+Z,EAAK,SAAS/Z,GAAQ,QACtB+Z,EAAK,UAAUA,EAAK,OAAO,UAAU;AAAA,IAEzC;AAEA,aAAS0C,IAAe;AACtB,MAAAxF,GAAS,YAAY;AACnB,YAAI8C,EAAK,YAAYA,EAAK,iBAAiB;AACzC,gBAAM2C,KAAgB,MAAMrB,EAAiBtB,EAAK,QAAQ,GAAG,UAAU,CAAA,GACjE4C,IAAevD,GAAuB;AAAA,YAC1C,UAAUW,EAAK;AAAA,YACf,iBAAiBA,EAAK;AAAA,YACtB,iBAAiBA,EAAK;AAAA,UAAA,CACvB;AACD,UAAAA,EAAK,SAAS,CAAC,GAAG2C,GAAc,GAAGC,CAAY,GAC/C5C,EAAK,UAAUA,EAAK,OAAO,UAAU;AAAA,QACvC;AAAA,MACF,CAAC;AAAA,IACH;2BAlMEjc,EAgHeoQ,EAAAiM,EAAA,GAAA;AAAA,MA/GZ,MAAML,EAAA,MAAc;AAAA,MACpB,YAAYrc,EAAA;AAAA,MACZ,OAAOA,EAAA,SAASyQ,EAAApT,CAAA,+CAA+CoT,EAAApT,CAAA,EAAC,kCAAA;AAAA,MAChE,UAAU2C,EAAA,SAASyQ,EAAApT,CAAA,kDAAkD;AAAA,IAAA;iBAEtE,MAUM;AAAA,QATE2C,EAAA,UADRkR,EAAA,GAAAtQ,EAUM,OAVN+P,IAUM;AAAA,UANJ7P,EAKW2P,EAAA0O,EAAA,GAAA;AAAA,YAJT,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,aAAU;AAAA,UAAA;uBACT,MAAkD;AAAA,kBAA/C1O,EAAApT,CAAA,EAAC,yCAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;;QAITyD,EA6FS2P,EAAAM,EAAA,GAAA,MAAA;AAAA,qBA5FP,MAoBQ;AAAA,YApBRjQ,EAoBQ2P,EAAAc,CAAA,GAAA;AAAA,cAlBL,OAAOd,EAAApT,CAAA,EAAC,mDAAA;AAAA,cACT,MAAK;AAAA,cACL,OAAM;AAAA,cACL,eAAaif,EAAK;AAAA,YAAA;cAEnB,SAAA5b,EAAA,CAYE,EAlBQ,OAAA2d,GAAO,cAAA7M,GAAc,QAAAE,QAAM;AAAA,gBAMrC5Q,EAYE2P,EAAAkB,CAAA,GAZF2M,GAYED,GAXa;AAAA,kBACb,KAAI;AAAA,kBACK,YAAA/B,EAAK;AAAA;oBAAL1K,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA5Q,MAAAsb,EAAK,kBAAetb;AAAA,oBAQRge;AAAA,kBAAA;AAAA,kBAPrB,OAAM;AAAA,kBACL,OAAOvO,EAAApT,CAAA,EAAC,mDAAA;AAAA,kBACR,aAAaoT,EAAApT,CAAA,EAAC,yDAAA;AAAA,kBACf,MAAK;AAAA,kBACL,UAAA;AAAA,kBACC,OAAK,CAAA,CAAIqU,EAAO;AAAA,kBAChB,iBAAeF;AAAA,gBAAA;;;;YAKpB1Q,EAoBQ2P,EAAAc,CAAA,GAAA;AAAA,cAlBL,OAAOd,EAAApT,CAAA,EAAC,+CAAA;AAAA,cACT,MAAK;AAAA,cACL,OAAM;AAAA,cACL,eAAaif,EAAK;AAAA,YAAA;cAEnB,SAAA5b,EAAA,CAYE,EAlBQ,OAAA2d,GAAO,cAAA7M,GAAc,QAAAE,QAAM;AAAA,gBAMrC5Q,EAYE2P,EAAAkB,CAAA,GAZF2M,GAYED,GAXa;AAAA,kBACb,KAAI;AAAA,kBACK,YAAA/B,EAAK;AAAA;oBAAL1K,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA5Q,MAAAsb,EAAK,WAAQtb;AAAA,oBAQDge;AAAA,kBAAA;AAAA,kBAPrB,OAAM;AAAA,kBACL,OAAOvO,EAAApT,CAAA,EAAC,+CAAA;AAAA,kBACR,aAAaoT,EAAApT,CAAA,EAAC,qDAAA;AAAA,kBACf,MAAK;AAAA,kBACL,UAAA;AAAA,kBACC,OAAK,CAAA,CAAIqU,EAAO;AAAA,kBAChB,iBAAeF;AAAA,gBAAA;;;;YAKpB1Q,EAoBQ2P,EAAAc,CAAA,GAAA;AAAA,cAlBL,OAAOd,EAAApT,CAAA,EAAC,mDAAA;AAAA,cACT,MAAK;AAAA,cACL,OAAM;AAAA,cACL,eAAaif,EAAK;AAAA,YAAA;cAEnB,SAAA5b,EAAA,CAYE,EAlBQ,OAAA2d,GAAO,cAAA7M,GAAc,QAAAE,QAAM;AAAA,gBAMrC5Q,EAYE2P,EAAAkB,CAAA,GAZF2M,GAYED,GAXa;AAAA,kBACb,KAAI;AAAA,kBACK,YAAA/B,EAAK;AAAA;oBAAL1K,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA5Q,MAAAsb,EAAK,kBAAetb;AAAA,oBAQRge;AAAA,kBAAA;AAAA,kBAPrB,OAAM;AAAA,kBACL,OAAOvO,EAAApT,CAAA,EAAC,mDAAA;AAAA,kBACR,aAAaoT,EAAApT,CAAA,EAAC,yDAAA;AAAA,kBACf,MAAK;AAAA,kBACL,UAAA;AAAA,kBACC,OAAK,CAAA,CAAIqU,EAAO;AAAA,kBAChB,iBAAeF;AAAA,gBAAA;;;;YAKpB7Q,EAiBM,OAjBNiQ,IAiBM;AAAA,cAhBJ9P,EAMW2P,EAAAwK,CAAA,GAAA;AAAA,gBALT,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACL,SAAO6D;AAAA,cAAA;2BAER,MAA4C;AAAA,sBAAzCrO,EAAApT,CAAA,EAAC,mCAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;cAENyD,EAQW2P,EAAAwK,CAAA,GAAA;AAAA,gBAPT,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACL,UAAUxK,EAAAnN,CAAA,KAAO,CAAKgZ,EAAK,WAAWhM,EAAA;AAAA,gBACtC,SAASG,EAAAnN,CAAA;AAAA,gBACT,SAAOyb;AAAA,cAAA;2BAER,MAA0C;AAAA,sBAAvCtO,EAAApT,CAAA,EAAC,iCAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;;aAIR6T,EAAA,EAAA,GAAAtQ,EAMSC,YALYyb,EAAK,QAAM,CAAtBngB,GAAK4J,YADf1F,EAMSoQ,EAAAmM,EAAA,GAAA;AAAA,cAJN,KAAK7W;AAAA,cACN,OAAM;AAAA,YAAA;yBAEN,MAA+G;AAAA,oBAA3G5J,EAAsB,OAAOsU,EAAApT,CAAA,uCAAwClB,EAAsB,IAAI,EAAA,IAAMA,CAAG,GAAA,CAAA;AAAA,cAAA;;;;;;;;;;IC5GvGijB,KAAqBC,ICerBC,KAAqB;AAY3B,SAASC,GAAkBpS,GAA0B0K,GAAqD;AAC/G,QAAME,IAAMF,KAAY1K,EAAO;AAC/B,SAAO;AAAA,IACL,IAAIA,EAAO;AAAA,IACX,GAAG4K,GAAK,KAAK;AAAA,IACb,GAAGA,GAAK,KAAK;AAAA,IACb,GAAG5K,EAAO,KAAK;AAAA,IACf,GAAGA,EAAO,KAAK;AAAA,IACf,MAAM;AAAA,IACN,MAAM;AAAA,EAAA;AAEV;AAKO,SAASqS,GAAkBC,GAIhC;AACA,SAAO;AAAA,IACL,IAAIA,EAAK,MAAM;AAAA,IACf,UAAU;AAAA,MACR,GAAGA,EAAK,KAAK;AAAA,MACb,GAAGA,EAAK,KAAK;AAAA,IAAA;AAAA,IAEf,MAAM;AAAA,MACJ,OAAOA,EAAK,KAAK;AAAA,MACjB,QAAQA,EAAK,KAAK;AAAA,IAAA;AAAA,EACpB;AAEJ;AAKO,SAASC,GAA0BC,GAA8D;AACtG,QAAMC,wBAAa,IAAA;AAEnB,aAAWH,KAAQE;AACjB,IAAIF,EAAK,MACPG,EAAO,IAAIH,EAAK,IAAI;AAAA,MAClB,GAAGA,EAAK,KAAK;AAAA,MACb,GAAGA,EAAK,KAAK;AAAA,IAAA,CACd;AAIL,SAAOG;AACT;AAKO,SAASC,KAAqE;AACnF,MAAI;AACF,UAAMC,IAAS,aAAa,QAAQR,EAAkB;AACtD,QAAI,CAACQ,EAAQ,QAAO;AAEpB,UAAMhiB,IAAS,KAAK,MAAMgiB,CAAM;AAGhC,QAAI,MAAM,QAAQhiB,CAAM;AACtB,aAAO4hB,GAA0B5hB,CAAyB;AAI5D,QAAI,OAAOA,KAAW,YAAYA,MAAW,MAAM;AACjD,YAAM8hB,wBAAa,IAAA;AACnB,iBAAW,CAACvK,GAAI0C,CAAG,KAAK,OAAO,QAAQja,CAA4B;AACjE,QAAIia,KAAO,OAAOA,EAAI,KAAM,YAAY,OAAOA,EAAI,KAAM,YACvD6H,EAAO,IAAIvK,GAAI,EAAE,GAAG0C,EAAI,GAAG,GAAGA,EAAI,GAAG;AAGzC,aAAO6H;AAAA,IACT;AAEA,WAAO;AAAA,EACT,SAASpc,GAAO;AACd,mBAAQ,KAAK,0DAA0DA,CAAK,GACrE;AAAA,EACT;AACF;AAKO,SAASuc,GAAoBzT,GAA6BsT,GAAoD;AACnH,MAAI;AACF,UAAMI,IAAqC1T,EAAQ,IAAI,CAACa,MAAW;AACjE,YAAM4K,IAAM6H,EAAO,IAAIzS,EAAO,EAAE;AAChC,aAAO;AAAA,QACL,IAAIA,EAAO;AAAA,QACX,GAAG4K,GAAK,KAAK5K,EAAO,UAAU,KAAK;AAAA,QACnC,GAAG4K,GAAK,KAAK5K,EAAO,UAAU,KAAK;AAAA,QACnC,GAAGA,EAAO,KAAK;AAAA,QACf,GAAGA,EAAO,KAAK;AAAA,MAAA;AAAA,IAEnB,CAAC;AAED,iBAAa,QAAQmS,IAAoB,KAAK,UAAUU,CAAe,CAAC;AAAA,EAC1E,SAASxc,GAAO;AACd,YAAQ,KAAK,wDAAwDA,CAAK;AAAA,EAC5E;AACF;AAKO,SAASyc,KAA2B;AACzC,MAAI;AACF,iBAAa,WAAWX,EAAkB;AAAA,EAC5C,SAAS9b,GAAO;AACd,YAAQ,KAAK,sDAAsDA,CAAK;AAAA,EAC1E;AACF;AAMA,SAAS0c,GAAmB5T,GAA6B6T,IAAkB,IAA0C;AACnH,QAAMP,wBAAa,IAAA,GAGbQ,wBAA0C,IAAA,GAE1CC,IAAiB,CAACznB,GAAWmO,GAAWuZ,GAAeC,MAA4B;AACvF,aAASC,IAAMzZ,GAAGyZ,IAAMzZ,IAAIwZ,GAAQC,KAAO;AACzC,YAAMC,IAAWL,EAAa,IAAII,CAAG,KAAK,CAAA;AAC1C,eAASE,IAAM9nB,GAAG8nB,IAAM9nB,IAAI0nB,GAAOI;AACjC,YAAID,EAAS,SAASC,CAAG,EAAG,QAAO;AAAA,IAEvC;AACA,WAAO;AAAA,EACT,GAEMC,IAAiB,CAAC/nB,GAAWmO,GAAWuZ,GAAeC,MAAyB;AACpF,aAASC,IAAMzZ,GAAGyZ,IAAMzZ,IAAIwZ,GAAQC,KAAO;AACzC,YAAMC,IAAWL,EAAa,IAAII,CAAG,KAAK,CAAA;AAC1C,eAASE,IAAM9nB,GAAG8nB,IAAM9nB,IAAI0nB,GAAOI;AACjC,QAAAD,EAAS,KAAKC,CAAG;AAEnB,MAAAN,EAAa,IAAII,GAAKC,CAAQ;AAAA,IAChC;AAAA,EACF,GAEMG,IAAmB,CAACN,GAAeC,MAA4C;AACnF,QAAIxZ,IAAI;AACR,eAAa;AACX,eAASnO,IAAI,GAAGA,KAAKunB,IAAUG,GAAO1nB;AACpC,YAAIynB,EAAeznB,GAAGmO,GAAGuZ,GAAOC,CAAM;AACpC,iBAAO,EAAE,GAAA3nB,GAAG,GAAAmO,EAAA;AAKhB,UAFAA,KAEIA,IAAI,IAAK;AAAA,IACf;AACA,WAAO,EAAE,GAAG,GAAG,GAAAA,EAAA;AAAA,EACjB;AAEA,aAAWoG,KAAUb,GAAS;AAC5B,UAAMuL,IAAW+I,EAAiBzT,EAAO,KAAK,OAAOA,EAAO,KAAK,MAAM;AACvE,IAAAyS,EAAO,IAAIzS,EAAO,IAAI0K,CAAQ,GAC9B8I,EAAe9I,EAAS,GAAGA,EAAS,GAAG1K,EAAO,KAAK,OAAOA,EAAO,KAAK,MAAM;AAAA,EAC9E;AAEA,SAAOyS;AACT;AAOO,SAASiB,GACdvU,GACAwU,GACsC;AAEtC,MAAIA,KAAeA,EAAY,OAAO,GAAG;AACvC,UAAMlB,wBAAa,IAAA;AAEnB,eAAWzS,KAAUb,GAAS;AAC5B,YAAMyU,IAAWD,EAAY,IAAI3T,EAAO,EAAE,GACpC6T,IAAa7T,EAAO,UACpB0K,IAAWkJ,KAAYC,KAAc,EAAE,GAAG,GAAG,GAAG,EAAA;AACtD,MAAApB,EAAO,IAAIzS,EAAO,IAAI0K,CAAQ;AAAA,IAChC;AAEA,WAAO+H;AAAA,EACT;AAKA,MAFyBtT,EAAQ,MAAM,CAACc,MAAMA,EAAE,aAAa,MAAS,GAEhD;AACpB,UAAMwS,wBAAa,IAAA;AACnB,eAAWzS,KAAUb;AACnB,MAAAsT,EAAO,IAAIzS,EAAO,IAAIA,EAAO,QAAS;AAExC,WAAOyS;AAAA,EACT;AAGA,SAAOM,GAAmB5T,CAAO;AACnC;ACxNA,MAAM2U,KAAoC;AAAA,EACxC,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA;AAAA,EAET,YAAY;AAAA,IACV,aAAa,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI;AAAA;AAAA,EAAA;AAAA,EAE/B,WAAW;AAAA,IACT,QAAQ;AAAA,EAAA;AAAA,EAEV,WAAW;AAAA,IACT,SAAS;AAAA;AAAA,EAAA;AAEb;AAiDO,SAASC,GAAa5U,GAAkChS,IAA+B,IAAwB;AACpH,QAAM,EAAE,aAAA6mB,IAAc,CAAA,GAAI,WAAAC,IAAY,IAAO,UAAAC,IAAW,IAAM,gBAAAC,EAAA,IAAmBhnB,GAG3EinB,IAAOC,GAA6B,IAAI,GACxC5B,IAASrc,EAA0C,oBAAI,KAAK,GAC5Dke,IAAgBle,EAAI,EAAK,GACzBme,IAAane,EAAI,EAAK,GAKtBoe,IAAkC;AAAA,IACtC,GAAGV;AAAA,IACH,GAAGE;AAAA,IACH,eAAe,CAACC;AAAA,EAAA,GAMZQ,IAAW,CAACC,MAA+B;AAC/C,QAAIN,EAAK,OAAO;AACd,cAAQ,KAAK,yCAAyC;AACtD;AAAA,IACF;AAGA,UAAMT,IAAcjB,GAAA;AACpB,IAAAD,EAAO,QAAQiB,GAAuBvU,EAAQ,OAAOwU,CAAW,GAGhES,EAAK,QAAQO,GAAU,KAAKH,GAAeE,CAAO,GAGlDN,EAAK,MAAM,GAAG,UAAU9P,CAAY,GACpC8P,EAAK,MAAM,GAAG,SAASQ,CAAW,GAClCR,EAAK,MAAM,GAAG,WAAWS,CAAa;AAItC,UAAMC,IAAa3V,EAAQ,MAAM,IAAI,CAACa,MAAW;AAC/C,YAAM0K,IAAW+H,EAAO,MAAM,IAAIzS,EAAO,EAAE;AAC3C,aAAOoS,GAAkBpS,GAAQ0K,CAAQ;AAAA,IAC3C,CAAC;AAGD,IAAA0J,EAAK,MAAM,KAAKU,CAAU,GAE1BR,EAAc,QAAQ;AAAA,EACxB,GAKMhQ,IAAe,CAACyQ,GAAevC,MAAiC;AACpE,QAAI,CAAA+B,EAAW,OAEf;AAAA,iBAAWjC,KAAQE,GAAO;AACxB,cAAM,EAAE,IAAAtK,GAAI,UAAAwC,MAAa2H,GAAkBC,CAAI;AAC/C,QAAIpK,KACFuK,EAAO,MAAM,IAAIvK,GAAIwC,CAAQ;AAAA,MAEjC;AAGA,MAAA+H,EAAO,QAAQ,IAAI,IAAIA,EAAO,KAAK,GAGnC0B,IAAiB1B,EAAO,KAAK,GAGzByB,KACFc,EAAA;AAAA;AAAA,EAEJ,GAKMJ,IAAc,CAACG,GAAevC,MAAiC;AACnE,eAAWF,KAAQE,GAAO;AACxB,YAAM,EAAE,IAAAtK,GAAI,UAAAwC,MAAa2H,GAAkBC,CAAI;AAC/C,MAAIpK,KAAM,CAACuK,EAAO,MAAM,IAAIvK,CAAE,KAC5BuK,EAAO,MAAM,IAAIvK,GAAIwC,CAAQ;AAAA,IAEjC;AACA,IAAA+H,EAAO,QAAQ,IAAI,IAAIA,EAAO,KAAK;AAAA,EACrC,GAKMoC,IAAgB,CAACE,GAAevC,MAAiC;AACrE,eAAWF,KAAQE;AACjB,MAAIF,EAAK,MACPG,EAAO,MAAM,OAAOH,EAAK,EAAE;AAG/B,IAAAG,EAAO,QAAQ,IAAI,IAAIA,EAAO,KAAK;AAAA,EACrC,GAKMwC,IAAc,MAAY;AAC9B,IAAIb,EAAK,UACPA,EAAK,MAAM,IAAI,QAAQ,GACvBA,EAAK,MAAM,IAAI,OAAO,GACtBA,EAAK,MAAM,IAAI,SAAS,GACxBA,EAAK,MAAM,QAAQ,EAAK,GACxBA,EAAK,QAAQ,MACbE,EAAc,QAAQ;AAAA,EAE1B,GAKMY,IAAY,CAAClV,MAAmC;AACpD,QAAI,CAACoU,EAAK,MAAO;AAEjB,UAAM1J,IAAW+H,EAAO,MAAM,IAAIzS,EAAO,EAAE,KAAKA,EAAO,UACjDmV,IAAW/C,GAAkBpS,GAAQ0K,CAAQ,GAG7CgK,IAAU,SAAS,cAAc,WAAW1U,EAAO,EAAE,IAAI;AAC/D,IAAI0U,KACFN,EAAK,MAAM,WAAWM,GAAwBS,CAAQ;AAAA,EAE1D,GAKMC,IAAe,CAACrV,MAA2B;AAC/C,QAAI,CAACqU,EAAK,MAAO;AAEjB,UAAMM,IAAU,SAAS,cAAc,WAAW3U,CAAQ,IAAI;AAC9D,IAAI2U,KACFN,EAAK,MAAM,aAAaM,GAAwB,EAAK,GAEvDjC,EAAO,MAAM,OAAO1S,CAAQ;AAAA,EAC9B,GAKMsV,IAAuB,CAACtV,GAAkB2K,MAA4C;AAC1F,QAAI,CAAC0J,EAAK,MAAO;AAEjB,UAAMM,IAAU,SAAS,cAAc,WAAW3U,CAAQ,IAAI;AAC9D,IAAI2U,MACFH,EAAW,QAAQ,IACnBH,EAAK,MAAM,OAAOM,GAAwB,EAAE,GAAGhK,EAAS,GAAG,GAAGA,EAAS,EAAA,CAAG,GAC1E+H,EAAO,MAAM,IAAI1S,GAAU2K,CAAQ,GACnC+H,EAAO,QAAQ,IAAI,IAAIA,EAAO,KAAK,GACnC8B,EAAW,QAAQ;AAAA,EAEvB,GAKMS,IAAa,MAAY;AAC7BpC,IAAAA,GAAoBzT,EAAQ,OAAOsT,EAAO,KAAK;AAAA,EACjD,GAKM6C,IAAa,MAAY;AAC7B,UAAM3B,IAAcjB,GAAA;AACpB,IAAIiB,MACFlB,EAAO,QAAQiB,GAAuBvU,EAAQ,OAAOwU,CAAW,GAChE4B,EAAA;AAAA,EAEJ,GAKMC,IAAkB,MAAY;AAClC,IAAA/C,EAAO,4BAAY,IAAA;AACnB,eAAWzS,KAAUb,EAAQ;AAC3B,MAAIa,EAAO,YACTyS,EAAO,MAAM,IAAIzS,EAAO,IAAI,EAAE,GAAGA,EAAO,UAAU;AAGtD,IAAAuV,EAAA,GACAP,EAAA;AAAA,EACF,GAKMO,IAAoB,MAAY;AACpC,QAAKnB,EAAK,OAEV;AAAA,MAAAG,EAAW,QAAQ,IACnBH,EAAK,MAAM,YAAA;AAEX,iBAAWpU,KAAUb,EAAQ,OAAO;AAClC,cAAMuL,IAAW+H,EAAO,MAAM,IAAIzS,EAAO,EAAE;AAC3C,YAAI0K,GAAU;AACZ,gBAAMgK,IAAU,SAAS,cAAc,WAAW1U,EAAO,EAAE,IAAI;AAC/D,UAAI0U,KACFN,EAAK,MAAM,OAAOM,GAAwB;AAAA,YACxC,GAAGhK,EAAS;AAAA,YACZ,GAAGA,EAAS;AAAA,UAAA,CACb;AAAA,QAEL;AAAA,MACF;AAEA,MAAA0J,EAAK,MAAM,YAAY,EAAK,GAC5BG,EAAW,QAAQ;AAAA;AAAA,EACrB,GAKMkB,IAAc,CAAC1f,MAAyB;AAC5C,QAAI,CAACqe,EAAK,OAAO;AACf,MAAAre,EAAA;AACA;AAAA,IACF;AAEA,IAAAwe,EAAW,QAAQ,IACnBH,EAAK,MAAM,YAAA,GACXre,EAAA,GACAqe,EAAK,MAAM,YAAY,EAAK,GAC5BG,EAAW,QAAQ;AAAA,EACrB;AAGA,SAAAplB;AAAA,IACEgQ;AAAA,IACA,OAAOuW,GAAYC,MAAe;AAChC,UAAI,CAACvB,EAAK,SAAS,CAACE,EAAc,MAAO;AAEzC,YAAMjI,GAAA;AAGN,YAAMuJ,IAAeF,EAAW,OAAO,CAACzV,MAAM,CAAC0V,GAAY,KAAK,CAACE,MAAOA,EAAG,OAAO5V,EAAE,EAAE,CAAC,GAGjF6V,IACJH,GAAY,OAAO,CAAC1V,MAAM,CAACyV,EAAW,KAAK,CAACK,MAAOA,EAAG,OAAO9V,EAAE,EAAE,CAAC,EAAE,IAAI,CAACA,MAAMA,EAAE,EAAE,KAAK,CAAA;AAG1F,iBAAWiI,KAAM4N;AACf,QAAAV,EAAalN,CAAE;AAIjB,iBAAWlI,KAAU4V;AACnB,QAAAV,EAAUlV,CAAM;AAAA,IAEpB;AAAA,IACA,EAAE,MAAM,GAAA;AAAA,EAAM,GAIhBH,GAAY,MAAM;AAChB,IAAAoV,EAAA;AAAA,EACF,CAAC,GAEM;AAAA,IACL,MAAAb;AAAA,IACA,QAAA3B;AAAA,IACA,eAAA6B;AAAA,IACA,UAAAG;AAAA,IACA,aAAAQ;AAAA,IACA,WAAAC;AAAA,IACA,cAAAE;AAAA,IACA,sBAAAC;AAAA,IACA,YAAAL;AAAA,IACA,YAAAM;AAAA,IACA,iBAAAE;AAAA,IACA,aAAAC;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;;;;;ACpPA,UAAM7iB,IAAQC,GAORmjB,IAAU5f,EAAwB,IAAI,GACtC6f,IAAmB7f,EAAI,EAAE,GAGzB8f,IAAYC,GAAA,GACZhX,IAAUzR,EAAS,MAAMwoB,EAAU,YAAkC,GAGrE,EAAE,QAAAzD,GAAQ,eAAA6B,GAAe,UAAAG,GAAU,YAAAO,GAAY,iBAAAQ,EAAA,IAAoBzB,GAAa5U,GAAS;AAAA,MAC7F,WAAWvM,EAAM;AAAA,MACjB,UAAU;AAAA,MACV,aAAa;AAAA,QACX,WAAW;AAAA,UACT,QAAQA,EAAM,kBAAkB,yCAAyC;AAAA,QAAA;AAAA,MAC3E;AAAA,MAEF,gBAAgB,CAACwjB,MAAc;AAE7B,mBAAW,CAACrW,GAAU2K,CAAQ,KAAK0L;AACjC,UAAAF,EAAU,qBAAqBnW,GAAU2K,CAAQ;AAEnD,QAAA2L,EAAuB,0BAA0B;AAAA,MACnD;AAAA,IAAA,CACD,GAGKC,IAAc,CAACvW,MACZ0S,EAAO,MAAM,IAAI1S,CAAQ,GAI5BwW,IAAqB,CAACvW,GAA0B9H,MAE7C,GADM8H,EAAO,QAAQA,EAAO,EACrB,YAAY9H,IAAQ,CAAC,OAAOiH,EAAQ,MAAM,MAAM,sBAG1DkX,IAAyB,CAACnnB,MAA0B;AACxD,MAAA+mB,EAAiB,QAAQ/mB,GACzB,WAAW,MAAM;AACf,QAAA+mB,EAAiB,QAAQ;AAAA,MAC3B,GAAG,GAAI;AAAA,IACT;AAGA,WAAApe,GAAU,YAAY;AACpB,YAAMwU,GAAA,GACF2J,EAAQ,SAAS,CAAC1B,EAAc,SAClCG,EAASuB,EAAQ,KAAK;AAAA,IAE1B,CAAC,GAiBDQ,EAAa;AAAA,MACX,kBAfuB,MAAY;AACnC,QAAAhB,EAAA;AAAA,MACF;AAAA,MAcE,mBAZwB,MAAY;AAAA,MAEtC;AAAA,MAWE,YAAAR;AAAA,MACA,qBAV0B,OAC1BQ,EAAA,GACO;AAAA,IAQP,CACD,mBAzMCtiB,EAyFcwQ,IAAA;AAAA,MAxFZ,cAAA;AAAA,MACA,OAAM;AAAA,IAAA;iBAEN,MA0EM;AAAA,QA1ENlQ,EA0EM,OAAA;AAAA,mBAzEA;AAAA,UAAJ,KAAIwiB;AAAA,UACJ,OAAM;AAAA,UACN,MAAK;AAAA,UACJ,cAAYnjB,EAAA;AAAA,QAAA;WAEbkR,EAAA,EAAA,GAAAtQ,EAmEMC,GAAA,MAAAua,GAlEsB9O,EAAA,OAAO,CAAzBa,GAAQ9H,YADlBzE,EAmEM,OAAA;AAAA,YAjEH,KAAKuM,EAAO;AAAA,YACb,OAAM;AAAA,YACL,SAAOA,EAAO;AAAA,YACd,QAAMsW,EAAYtW,EAAO,EAAE,GAAG,KAAKA,EAAO,UAAU,KAAC;AAAA,YACrD,QAAMsW,EAAYtW,EAAO,EAAE,GAAG,KAAKA,EAAO,UAAU,KAAC;AAAA,YACrD,QAAMA,EAAO,KAAK;AAAA,YAClB,QAAMA,EAAO,KAAK;AAAA,YAClB,YAAU;AAAA,YACV,YAAU;AAAA,YACX,MAAK;AAAA,YACJ,cAAYuW,EAAmBvW,GAAQ9H,CAAK;AAAA,UAAA;YAE7C1E,EAoDM,OApDNmQ,IAoDM;AAAA,cAjDI9Q,EAAA,mBADRkR,KAAAtQ,EA0CM,OA1CNoQ,IA0CM,CAAA,GAAAY,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,gBArCJjR,EAoCM,OAAA;AAAA,kBAnCJ,OAAM;AAAA,kBACN,QAAO;AAAA,kBACP,SAAQ;AAAA,kBACR,MAAK;AAAA,gBAAA;kBAELA,EAIE,UAAA;AAAA,oBAHA,IAAG;AAAA,oBACH,IAAG;AAAA,oBACH,GAAE;AAAA,kBAAA;kBAEJA,EAIE,UAAA;AAAA,oBAHA,IAAG;AAAA,oBACH,IAAG;AAAA,oBACH,GAAE;AAAA,kBAAA;kBAEJA,EAIE,UAAA;AAAA,oBAHA,IAAG;AAAA,oBACH,IAAG;AAAA,oBACH,GAAE;AAAA,kBAAA;kBAEJA,EAIE,UAAA;AAAA,oBAHA,IAAG;AAAA,oBACH,IAAG;AAAA,oBACH,GAAE;AAAA,kBAAA;kBAEJA,EAIE,UAAA;AAAA,oBAHA,IAAG;AAAA,oBACH,IAAG;AAAA,oBACH,GAAE;AAAA,kBAAA;kBAEJA,EAIE,UAAA;AAAA,oBAHA,IAAG;AAAA,oBACH,IAAG;AAAA,oBACH,GAAE;AAAA,kBAAA;;;eAMRuQ,EAAA,GAAA7Q,EAIEujB,GAHKzW,EAAO,SAAS,GADvBmR,GAIE,EAAA,SAAA,GAAA,GAFQnR,EAAO,SAAK,CAAA,GAAA,EACpB,OAAM,0CAAwC,GAAA,MAAA,EAAA;AAAA,YAAA;;;QAOtDxM,EAOM,OAPNwQ,IAOMwC,EADDyP,EAAA,KAAgB,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;AC7CzB,UAAMS,IAAetgB,EAAoD,IAAI;AAoB7E,WAAAogB,EAAa;AAAA,MACX,kBAlBuB,MAAY;AACnC,QAAAE,EAAa,OAAO,mBAAA;AAAA,MACtB;AAAA,MAiBE,mBAfwB,MAAY;AACpC,QAAAA,EAAa,OAAO,oBAAA;AAAA,MACtB;AAAA,MAcE,YAZiB,MAAY;AAC7B,QAAAA,EAAa,OAAO,aAAA;AAAA,MACtB;AAAA,MAWE,qBAT0B,MACnBA,EAAa,OAAO,sBAAA,KAA2B;AAAA,IAQtD,CACD,mBAnECxjB,EAKEyjB,IAAA;AAAA,eAJI;AAAA,MAAJ,KAAID;AAAA,MACH,qBAAmB7jB,EAAA;AAAA,MACnB,WAAWA,EAAA;AAAA,MACX,cAAYA,EAAA;AAAA,IAAA;;ICyBJuf,KAAoBwE,IACpBvE,KAAoBwE,IACpBnE,KAAwBoE,IACxBlE,KAAsBmE,IACtBrD,KAAyBsD,IACzBlE,KAAqBmE,IACrB9E,KAAqB+E;;;;;;;;;;;;;;;;;;;;ACwBlC,UAAMtkB,IAAQC;sBA3DZkR,EAAA,GAAAtQ,EA6CM,OA7CN+P,IA6CM;AAAA,MA5CJhQ,EAsBM,OAtBNiQ,IAsBM;AAAA,QArBJpQ,EAcOC,wBAdP,MAcO;AAAA,UAbLE,EAYM,OAZNmQ,IAYM;AAAA,YAVI9Q,EAAA,QADRkR,EAAA,GAAAtQ,EASM,OATNoQ,IASM;AAAA,cALJlQ,EAIE2P,EAAA6T,EAAA,GAAA;AAAA,gBAHA,OAAM;AAAA,gBACL,MAAMtkB,EAAA;AAAA,gBACP,MAAK;AAAA,cAAA;;YAGTW,EAAkE,OAAlEwQ,IAAkEwC,EAArB5T,EAAM,MAAM,GAAA,CAAA;AAAA,UAAA;;QAIrDkB,EAAAA,OAAO,WADfiQ,KAAAtQ,EAKM,OALNyQ,IAKM;AAAA,UADJ7Q,EAA4BC,EAAA,QAAA,SAAA;AAAA,QAAA;;MAKxBQ,EAAAA,OAAO,SADfiQ,KAAAtQ,EAKM,OALN2jB,IAKM;AAAA,QADJ/jB,EAA0BC,EAAA,QAAA,OAAA;AAAA,MAAA;MAG5B+jB,IAAAtT,EAAA,GAAAtQ,EAKM,OALN6jB,IAKM;AAAA,QADJjkB,EAA4BC,EAAA,QAAA,SAAA;AAAA,MAAA;gBAHjBT,EAAA,OAAO;AAAA,MAAA;MAOZiB,EAAAA,OAAO,UADfiQ,KAAAtQ,EAKM,OALN8jB,IAKM;AAAA,QADJlkB,EAA2BC,EAAA,QAAA,QAAA;AAAA,MAAA;;;;;;;;;;;sBC3C/ByQ,EAAA,GAAAtQ,EAQM,OARN+P,IAQM;AAAA,MAPJhQ,EAKM,OAAA;AAAA,QAJJ,OAAKgkB,GAAA,CAAC,8BACE3kB,EAAA,yCAAyCA,EAAA,OAAO,KAAA,EAAA,CAAA;AAAA,MAAA,KAErDA,EAAA,KAAK,GAAA,CAAA;AAAA,MAEVW,EAAyD,OAAzDiQ,IAAyD+C,EAAd3T,EAAA,KAAK,GAAA,CAAA;AAAA,IAAA;;;;;sBCNlDkR,EAAA,GAAAtQ,EAEM,OAFN+P,IAEM;AAAA,MADJnQ,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;2BCDVG,EAaM,OAAA;AAAA,MAZJ,OAAM;AAAA,MACL,gCAAOL,EAAAA,MAAK,OAAA;AAAA,IAAA;MAEbI,EAEM,OAFNgQ,IAEM;AAAA,QADJnQ,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAGFQ,EAAAA,OAAO,YADfiQ,KAAAtQ,EAKM,OALNgQ,IAKM;AAAA,QADJpQ,EAAwBC,EAAA,QAAA,UAAA;AAAA,MAAA;;;;;;;;;ACM9B,UAAMV,IAAQC,GAER4kB,IAAerhB,EAAA,GAEfshB,IAAUhqB,EAAS,MAAM;AAC7B,YAAMiqB,IAA+B,CAAA;AAErC,aADa,OAAO,KAAK/kB,EAAM,MAAM,EAChC,QAAQ,CAACxC,GAAK8H,MAAU;AAC3B,cAAMrC,IAAOjD,EAAM,OAAOxC,CAAG;AAC7B,QAAIyF,EAAK,UACP8hB,EAAK,cAAczf,CAAK,EAAE,IAAIrC,EAAK;AAAA,MAEvC,CAAC,GACM8hB;AAAA,IACT,CAAC;2BA/BClkB,EAMM,OAAA;AAAA,eALA;AAAA,MAAJ,KAAIgkB;AAAA,MACJ,OAAM;AAAA,MACL,UAAOC,EAAA,KAAO;AAAA,IAAA;MAEfrkB,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;sBCNVyQ,EAAA,GAAAtQ,EAqBM,OArBN+P,IAqBM;AAAA,MAnBI3Q,EAAA,cADRY,EAKM,OALNgQ,IAKM+C,EADD3T,EAAA,KAAK,GAAA,CAAA;MAEVW,EAaM,OAbNmQ,IAaM;AAAA,SAZJI,EAAA,EAAA,GAAAtQ,EAWMC,GAAA,MAAAua,GAVoBpb,EAAA,OAAK,CAArBgD,GAAMqC,YADhBzE,EAWM,OAAA;AAAA,UATH,KAAKyE;AAAA,UACN,OAAM;AAAA,QAAA;UAEN1E,EAGE,QAAA;AAAA,YAFA,OAAM;AAAA,YACL,OAAKyQ,GAAA,EAAA,YAAgBpO,EAAK,OAAK;AAAA,UAAA;UAElCrC,EAAoE,QAApEqQ,IAAoE2C,EAApB3Q,EAAK,KAAK,GAAA,CAAA;AAAA,UAC1DrC,EAAoE,QAApEwQ,IAAoEwC,EAApB3Q,EAAK,KAAK,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;sBClBhEkO,EAAA,GAAAtQ,EAYM,OAZN+P,IAYM;AAAA,OAXJO,EAAA,EAAA,GAAAtQ,EAUMC,GAAA,MAAAua,GATkBpb,EAAA,QAAM,CAApBgD,GAAMzF,YADhBqD,EAUM,OAAA;AAAA,QARH,KAAArD;AAAA,QACD,OAAM;AAAA,MAAA;QAENoD,EAGE,QAAA;AAAA,UAFA,OAAM;AAAA,UACL,OAAKyQ,GAAA,EAAA,YAAgBpO,EAAK,OAAK;AAAA,QAAA;QAElCrC,EAAmE,QAAnEiQ,IAAmE+C,EAApB3Q,EAAK,KAAK,GAAA,CAAA;AAAA,MAAA;;;ICWzD+hB,KAAgB,sBAChBC,KAAgB,KAEhBC,KAAoC;AAAA,EACxC,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP,GAEaC,KAAa,CAAC3oB,MACrBA,KAAU,OACL,KAEF,OAAOA,CAAK,EAAE,QAAQ,YAAY,CAAC4oB,MAASF,GAAUE,CAAI,KAAKA,CAAI,GAG/DC,KAAsB,CAAC7oB,MAAuC;AACzE,MAAIA,aAAiB,MAAM;AACzB,UAAM8oB,IAAY9oB,EAAM,QAAA;AACxB,WAAO,OAAO,SAAS8oB,CAAS,IAAIA,IAAY;AAAA,EAClD;AAEA,MAAI,OAAO9oB,KAAU;AACnB,WAAO,OAAO,SAASA,CAAK,IAAIA,IAAQ;AAG1C,MAAI,OAAOA,KAAU,UAAU;AAC7B,UAAM+oB,IAAe,OAAO/oB,CAAK;AACjC,QAAI,OAAO,SAAS+oB,CAAY;AAC9B,aAAOA;AAGT,UAAMD,IAAY,KAAK,MAAM9oB,CAAK;AAClC,QAAI,OAAO,SAAS8oB,CAAS;AAC3B,aAAOA;AAAA,EAEX;AAGF,GAEaE,KAAoB,CAC/BtX,GACAuX,GACAC,GACAC,MACQ;AACR,QAAMxpB,IAAQkpB,GAAoBK,CAAU,GACtCE,IAAMP,GAAoBM,CAAQ;AAExC,MAAIxpB,MAAU,UAAaypB,MAAQ;AACjC,WAAO1X;AAGT,QAAM2X,IAAM1pB,MAAU,UAAaypB,MAAQ,SAAY,KAAK,IAAIzpB,GAAOypB,CAAG,IAAIzpB,GACxEmX,IAAMnX,MAAU,UAAaypB,MAAQ,SAAY,KAAK,IAAIzpB,GAAOypB,CAAG,IAAIA;AAE9E,SAAO1X,EAAK,OAAO,CAAC4X,MAAU;AAC5B,UAAMC,IAAaV,GAAoBI,EAASK,CAAK,CAAC;AACtD,WAAIC,MAAe,SACV,KAGL,EAAAF,MAAQ,UAAaE,IAAaF,KAIlCvS,MAAQ,UAAayS,IAAazS;AAAA,EAKxC,CAAC;AACH,GAEa0S,KAAkB,CAACxpB,GAAgBypB,MAAyD;AACvG,MAAIA,GAAW;AACb,QAAI,OAAOzpB,KAAU,YAAYA,aAAiB;AAChD,aAAOypB,EAAUzpB,CAAK;AAGxB,UAAMupB,IAAaV,GAAoB7oB,CAAK;AAC5C,QAAIupB,MAAe;AACjB,aAAOE,EAAUF,CAAU;AAAA,EAE/B;AAEA,SAAIvpB,KAAU,OACLyoB,KAGF,OAAOzoB,CAAK;AACrB,GAEa0pB,KAAqB,CAAC1pB,GAAgBypB,MAAkD;AACnG,QAAMV,IAAe,OAAO/oB,KAAU,WAAWA,IAAQ,OAAOA,CAAK;AAErE,SAAK,OAAO,SAAS+oB,CAAY,IAI7BU,IACKA,EAAUV,CAAY,IAGxBA,EAAa,eAAA,IAPXN;AAQX,GAEakB,KAAoB,CAAC;AAAA,EAChC,QAAAhpB;AAAA,EACA,KAAAK;AAAA,EACA,OAAA8H;AAAA,EACA,eAAA8gB;AACF,MAAkE;AAChE,QAAMC,IAAa,OAAO,KAAKlpB,CAAM,GAC/BmpB,IAAU9oB,IAAML,EAAOK,CAAG,IAAI,QAC9B+oB,IACJ,OAAOjhB,KAAU,YAAY,OAAO,SAASA,CAAK,KAAK+gB,EAAW/gB,CAAK,IAAInI,EAAOkpB,EAAW/gB,CAAK,CAAC,IAAI,QACnGrC,IAAOqjB,KAAWC;AAExB,SAAO;AAAA,IACL,OAAOtjB,GAAM,SAASmjB,KAAiB5oB,KAAO;AAAA,IAC9C,OAAOyF,GAAM,SAAS+hB;AAAA,EAAA;AAE1B,GAEawB,KAAwB,CAAC,EAAE,OAAAC,GAAO,OAAA7gB,QAA0D;AACvG,MAAI,CAACA,EAAM;AACT;AAGF,QAAM8gB,IAAcD,IAAQ,+CAA+CtB,GAAWsB,CAAK,CAAC,WAAW,IAEjGE,IAAc/gB,EACjB;AAAA,IACC,CAAC3C,MAAS;AAAA;AAAA,gFAEgEkiB,GAAWliB,EAAK,KAAK,CAAC;AAAA,yDAC7CkiB,GAAWliB,EAAK,KAAK,CAAC;AAAA,yDACtBkiB,GAAWliB,EAAK,KAAK,CAAC;AAAA;AAAA;AAAA,EAAA,EAI1E,KAAK,EAAE;AAEV,SAAO;AAAA;AAAA,QAEDyjB,CAAW;AAAA,oDACiCC,CAAW;AAAA;AAAA;AAG/D;;;;;;;;;;;;;;;;;;;;;ACtFA,UAAM3mB,IAAQC,GAeR2mB,IAAS,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAA,GAE9CC,IAAY,CAACC,MAASA,EAAE9mB,EAAM,IAAI,GAElC+mB,IAAejsB;AAAA,MAAS,MAC5B0qB,GAAkBxlB,EAAM,MAAM,CAAC8lB,MAAUA,EAAM9lB,EAAM,IAAI,GAAGA,EAAM,YAAYA,EAAM,QAAQ;AAAA,IAAA,GAGxFgnB,IAAalsB,EAAS,MAAMkF,EAAM,MAAM,IAAI,CAACxC,MAAQ,CAACspB,MAASA,EAAEtpB,CAAG,CAAW,CAAC,GAEhFypB,IAASnsB;AAAA,MAAS,MACtBkF,EAAM,MAAM;AAAA,QACV,CAACxC,GAAK8H,MACJ6gB,GAAkB;AAAA,UAChB,QAAQnmB,EAAM;AAAA,UACd,KAAK,OAAOxC,CAAG;AAAA,UACf,OAAA8H;AAAA,UACA,eAAe,OAAO9H,CAAG;AAAA,QAAA,CAC1B,EAAE;AAAA,MAAA;AAAA,IACP,GAGI0pB,IAAqB,CAACpB,MAC1BU,GAAsB;AAAA,MACpB,OAAOR,GAAgBF,EAAM9lB,EAAM,IAAI,GAAGA,EAAM,WAAW;AAAA,MAC3D,OAAOA,EAAM,MAAM,IAAI,CAACxC,GAAK8H,MAAU;AACrC,cAAM,EAAE,OAAA6hB,GAAO,OAAAC,EAAA,IAAUjB,GAAkB;AAAA,UACzC,QAAQnmB,EAAM;AAAA,UACd,KAAK,OAAOxC,CAAG;AAAA,UACf,OAAA8H;AAAA,UACA,eAAe,OAAO9H,CAAG;AAAA,QAAA,CAC1B;AAED,eAAO;AAAA,UACL,OAAA2pB;AAAA,UACA,OAAAC;AAAA,UACA,OAAOlB,GAAmBJ,EAAMtoB,CAAG,GAAGwC,EAAM,WAAW;AAAA,QAAA;AAAA,MAE3D,CAAC;AAAA,IAAA,CACF,GAEGqnB,IAA2B,CAC/BvB,GACAwB,GACAC,GACAC,MACuB;AACvB,YAAMC,IAAc3B,MAAU,OAAO0B,KAA0B,WAAWD,EAAQC,CAAqB,IAAI;AAE3G,UAAKC;AAIL,eAAOP,EAAmBO,CAAW;AAAA,IACvC;2BA7JEnnB,EAmDiBonB,IAAA,EAnDA,QAAQznB,EAAA,UAAM;AAAA,iBAC7B,MA6CiB;AAAA,QA7CjBc,EA6CiB2P,EAAAiX,EAAA,GAAA;AAAA,UA5Cd,MAAMZ,EAAA;AAAA,UACN,QAAQ9mB,EAAA;AAAA,UACR,QAAA2mB;AAAA,QAAA;qBAED,MAKE;AAAA,YAJM3mB,EAAA,oBADRK,EAKEoQ,EAAAkX,EAAA,GAAA;AAAA;cAHC,eAAa;AAAA,cACd,cAAW;AAAA,cACV,kBAAgB;AAAA,YAAA;YAGX3nB,EAAA,oBADRK,EAMEoQ,EAAAmX,EAAA,GAAA;AAAA;cAJC,GAAGhB;AAAA,cACH,GAAGG,EAAA;AAAA,cACH,OAAOC,EAAA;AAAA,cACP,UAAUI;AAAA,YAAA;aAEblW,EAAA,EAAA,GAAAtQ,EAQEC,GAAA,MAAAua,GAP4B2L,EAAA,OAAU,CAA9BvB,GAAUngB,YADpBhF,EAQEoQ,EAAAoX,EAAA,GAAA;AAAA,cANC,KAAKxiB;AAAA,cACL,GAAGuhB;AAAA,cACH,GAAGpB;AAAA,cACH,OAAOwB,EAAA,MAAO3hB,CAAK;AAAA,cACpB,cAAW;AAAA,cACV,cAAY;AAAA,YAAA;YAGPrF,EAAA,kBADRK,EAQEoQ,EAAAqX,EAAA,GAAA;AAAA;cANA,MAAK;AAAA,cACJ,aAAW;AAAA,cACX,eAAa;AAAA,cACb,aAAW;AAAA,cACX,aAAW9nB,EAAA;AAAA,cACX,eAAaA,EAAA;AAAA,YAAA;YAGRA,EAAA,kBADRK,EAQEoQ,EAAAqX,EAAA,GAAA;AAAA;cANA,MAAK;AAAA,cACJ,aAAW;AAAA,cACX,eAAa;AAAA,cACb,aAAW9nB,EAAA;AAAA,cACX,aAAWA,EAAA;AAAA,cACX,eAAaA,EAAA;AAAA,YAAA;;;;QAIVA,EAAA,mBADRK,EAGE0nB,IAAA;AAAA;UADC,QAAQ/nB,EAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AC+Bf,UAAMD,IAAQC,GAeR2mB,IAAS,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAA,GAE9CC,IAAY,CAACC,MAASA,EAAE9mB,EAAM,IAAI,GAElC+mB,IAAejsB;AAAA,MAAS,MAC5B0qB,GAAkBxlB,EAAM,MAAM,CAAC8lB,MAAUA,EAAM9lB,EAAM,IAAI,GAAGA,EAAM,YAAYA,EAAM,QAAQ;AAAA,IAAA,GAGxFgnB,IAAalsB,EAAS,MAAMkF,EAAM,MAAM,IAAI,CAACxC,MAAQ,CAACspB,MAASA,EAAEtpB,CAAG,CAAW,CAAC,GAEhFypB,IAASnsB;AAAA,MAAS,MACtBkF,EAAM,MAAM;AAAA,QACV,CAACxC,GAAK8H,MACJ6gB,GAAkB;AAAA,UAChB,QAAQnmB,EAAM;AAAA,UACd,KAAK,OAAOxC,CAAG;AAAA,UACf,OAAA8H;AAAA,UACA,eAAe,OAAO9H,CAAG;AAAA,QAAA,CAC1B,EAAE;AAAA,MAAA;AAAA,IACP,GAGIyqB,IAAqBntB,EAAS,OAAO;AAAA,MACzC,CAACotB,GAAuB,GAAG,GAAG,CAACpC,GAAUqC,MAAmD;AAC1F,YAAI,CAACnoB,EAAM,MAAM,UAAUmoB,IAAc;AACvC,iBAAO;AAGT,cAAMC,IAAwBD,IAAcnoB,EAAM,MAAM,QAClDqoB,IAAYroB,EAAM,MAAMooB,CAAqB;AACnD,YAAI,CAACC;AACH,iBAAO;AAGT,cAAM,EAAE,OAAAlB,GAAO,OAAAC,EAAA,IAAUjB,GAAkB;AAAA,UACzC,QAAQnmB,EAAM;AAAA,UACd,KAAK,OAAOqoB,CAAS;AAAA,UACrB,OAAOD;AAAA,UACP,eAAe,OAAOC,CAAS;AAAA,QAAA,CAChC;AAED,eAAO7B,GAAsB;AAAA,UAC3B,OAAOR,GAAgBF,EAAM9lB,EAAM,IAAI,GAAGA,EAAM,WAAW;AAAA,UAC3D,OAAO;AAAA,YACL;AAAA,cACE,OAAAmnB;AAAA,cACA,OAAAC;AAAA,cACA,OAAOlB,GAAmBJ,EAAMuC,CAAS,GAAGroB,EAAM,WAAW;AAAA,YAAA;AAAA,UAC/D;AAAA,QACF,CACD;AAAA,MACH;AAAA,IAAA,EACA;2BAnJAM,EA2CiBonB,IAAA,EA3CA,QAAQznB,EAAA,UAAM;AAAA,iBAC7B,MAqCiB;AAAA,QArCjBc,EAqCiB2P,EAAAiX,EAAA,GAAA;AAAA,UApCd,MAAMZ,EAAA;AAAA,UACN,QAAQ9mB,EAAA;AAAA,UACR,QAAA2mB;AAAA,QAAA;qBAED,MAME;AAAA,YALM3mB,EAAA,oBADRK,EAMEoQ,EAAAkX,EAAA,GAAA;AAAA;cAJC,eAAa;AAAA,cACd,cAAW;AAAA,cACV,kBAAgB;AAAA,cAChB,UAAUK,EAAA;AAAA,YAAA;YAEblnB,EAME2P,EAAA4X,EAAA,GAAA;AAAA,cALC,GAAGzB;AAAA,cACH,GAAGG,EAAA;AAAA,cACH,OAAOC,EAAA;AAAA,cACP,mBAAiB;AAAA,cACjB,eAAa;AAAA,YAAA;YAGRhnB,EAAA,kBADRK,EAQEoQ,EAAAqX,EAAA,GAAA;AAAA;cANA,MAAK;AAAA,cACJ,aAAW;AAAA,cACX,eAAa;AAAA,cACb,aAAW;AAAA,cACX,aAAW9nB,EAAA;AAAA,cACX,eAAaA,EAAA;AAAA,YAAA;YAGRA,EAAA,kBADRK,EAQEoQ,EAAAqX,EAAA,GAAA;AAAA;cANA,MAAK;AAAA,cACJ,aAAW;AAAA,cACX,eAAa;AAAA,cACb,aAAW9nB,EAAA;AAAA,cACX,aAAWA,EAAA;AAAA,cACX,eAAaA,EAAA;AAAA,YAAA;;;;QAIVA,EAAA,mBADRK,EAGE0nB,IAAA;AAAA;UADC,QAAQ/nB,EAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;ACEf,UAAMD,IAAQC,GA4BRsoB,IAAgB,CAACzB,MAASA,EAAE9mB,EAAM,QAAQ,GAC1CqmB,IAAavrB,EAAS,MAAM,OAAO,KAAKkF,EAAM,MAAM,CAAC,GAErDwoB,IAAgB,CAAC1B,GAAMxhB,MACvBtF,EAAM,YAAY8mB,EAAE9mB,EAAM,QAAQ,IAC7B8mB,EAAE9mB,EAAM,QAAQ,IAElBqmB,EAAW,MAAM/gB,CAAK,IAAItF,EAAM,OAAOqmB,EAAW,MAAM/gB,CAAK,CAAC,EAAE,QAAQ,QAG3EmjB,IAAkB,CAAC3C,GAAUxgB,MAA0B;AAC3D,YAAMojB,IAAc5C,EAAkC;AACtD,UAAI,OAAO4C,KAAe,YAAYA,EAAW;AAC/C,eAAOA;AAGT,YAAMC,IAAYtC,EAAW,MAAM/gB,CAAK;AACxC,aAAIqjB,IACK3oB,EAAM,OAAO2oB,CAAS,GAAG,SAASA,IAGpC,WAAWrjB,IAAQ,CAAC;AAAA,IAC7B,GAEMsjB,IAAuB9tB,EAAS,OAAO;AAAA,MAC3C,CAAC+tB,GAAkB,OAAO,GAAG,CAACC,MAAwD;AACpF,YAAI,CAACA,GAAc;AACjB;AAGF,cAAMxjB,IAAQwjB,EAAa,SAAS,GAC9B3B,IAAQsB,EAAgBK,EAAa,MAAMxjB,CAAK,GAChDqjB,IAAYtC,EAAW,MAAM/gB,CAAK,GAClC,EAAE,OAAA8hB,EAAA,IAAUjB,GAAkB;AAAA,UAClC,QAAQnmB,EAAM;AAAA,UACd,KAAK2oB;AAAA,UACL,OAAArjB;AAAA,UACA,eAAe6hB;AAAA,QAAA,CAChB;AAED,eAAOX,GAAsB;AAAA,UAC3B,OAAO;AAAA,YACL;AAAA,cACE,OAAAW;AAAA,cACA,OAAOqB,EAAcM,EAAa,MAAMxjB,CAAK,KAAK8hB;AAAA,cAClD,OAAOlB,GAAmB4C,EAAa,SAASA,EAAa,KAAK9oB,EAAM,QAAQ,GAAGA,EAAM,WAAW;AAAA,YAAA;AAAA,UACtG;AAAA,QACF,CACD;AAAA,MACH;AAAA,IAAA,EACA;2BAzHAM,EA0BiBonB,IAAA,EA1BA,QAAQznB,EAAA,UAAM;AAAA,iBAC7B,MAoBqB;AAAA,QApBrBc,EAoBqB2P,EAAAqY,EAAA,GAAA;AAAA,UAnBlB,MAAM9oB,EAAA;AAAA,UACN,QAAQA,EAAA;AAAA,QAAA;qBAET,MAQE;AAAA,YARFc,EAQE2P,EAAAsY,EAAA,GAAA;AAAA,cAPC,OAAOT;AAAA,cACP,OAAOC;AAAA,cACP,aAAWvoB,EAAA;AAAA,cACX,iBAAeA,EAAA;AAAA,cACf,aAAW;AAAA,cACX,iBAAeA,EAAA;AAAA,cACf,qBAAmBA,EAAA;AAAA,YAAA;YAGdA,EAAA,oBADRK,EAMEoQ,EAAAkX,EAAA,GAAA;AAAA;cAJC,eAAa;AAAA,cACd,cAAW;AAAA,cACV,kBAAgB;AAAA,cAChB,UAAUgB,EAAA;AAAA,YAAA;;;;QAIP3oB,EAAA,mBADRK,EAGE0nB,IAAA;AAAA;UADC,QAAQ/nB,EAAA;AAAA,QAAA;;;;;ICETzE,KAASC,EAAa,8BAA8B,GAIpDwtB,yBAAyB,IAAA;AAE/B,SAASC,GAAeC,GAAgBC,GAA4B;AAClE,MAAIH,GAAmB,IAAIE,CAAM,EAAG;AACpC,EAAAF,GAAmB,IAAIE,CAAM;AAC7B,QAAMpuB,IAAM,yBAAyBouB,CAAM;AAC3C,UAAQ,KAAKC,IAAc,GAAGruB,CAAG,QAAQquB,CAAW,cAAcruB,CAAG;AACvE;AA8BA,SAASsuB,GAAiBzc,GAA6BtH,GAAegkB,GAA+B;AACnG,SAAO;AAAA,IACL,OAAO;AAAA,MACL,YAAY;AAAA,QACV,KAAKhkB;AAAA,QACL,UAAUsH,EAAW,SAAS,OAAO,EAAE,OAAOA,EAAW,UAAW;AAAA,QACpE,WAAWA,EAAW;AAAA,QACtB,OAAOpJ,EAAIoJ,EAAW,QAAQ,IAAI,MAAM,OAAOA,EAAW,KAAK,CAAC,IAAI,IAAI;AAAA,MAAA;AAAA,MAE1E,OAAOA,EAAW;AAAA,MAClB,SAASA,EAAW;AAAA,MACpB,UAAUA,EAAW,OAAO0c;AAAA,MAC5B,UAAUhkB,IAAQ;AAAA,IAAA;AAAA,IAEpB,MAAM,EAAE,MAAMsH,EAAW,KAAA;AAAA,EAAK;AAElC;AAMA,IAAI2c,IACAC;AAMG,SAASC,KAA2B;AACzC,EAAAF,KAAU,QACVC,KAAmB,QACnBP,GAAmB,MAAA;AACrB;AAEA,SAASS,KAAiB;AACxB,QAAM5rB,IAAa6rB,IACbjqB,IAAYkqB,IACZ9sB,IAAgB+sB;AAEtB,MAAI,CAAC/rB,KAAc,CAAC4B;AAClB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAKJ,QAAM1B,IAAS8rB,IAA6C;AAE5D,MAAI,CAAC9rB;AACH,UAAM,IAAI,MAAM,gFAAgF;AAIlG,SAAKurB,OACHA,KAAUzuB,EAAuB,MAAM;AACrC,UAAMwuB,IAAWxrB,EAAW,YAAY,OAAO;AAC/C,WAAOA,EAAW,OAAO,MAAM,IAAI,CAACgpB,GAAG9gB,MAAMqjB,GAAiBvC,GAAG9gB,GAAGsjB,CAAQ,CAAC;AAAA,EAC/E,CAAC,IAGEE,OACHA,KAAmB1uB,EAAiC,MAAM;AACxD,UAAMivB,IAAKjsB,EAAW,UAAU;AAChC,QAAKisB;AACL,aAAOV,GAAiBU,GAAI,GAAGjsB,EAAW,YAAY,OAAO,EAAE;AAAA,EACjE,CAAC,IAGI;AAAA,IACL,YAAAA;AAAA,IACA,WAAA4B;AAAA,IACA,eAAA5C;AAAA,IACA,QAAAkB;AAAA,IACA,QAAQurB;AAAA,IACR,iBAAiBC;AAAA,EAAA;AAErB;AAIA,SAASQ,GAA0CC,GAA4C;AAC7F,MAAI,CAACA;AACH,UAAM,IAAI,MAAM,oCAAoC;AAItD,MAAI,OAAOA,KAAU,YAAY,UAAUA,KAAS,OAAQA,EAAc,QAAS;AACjF,WAAQA,EAAc;AAIxB,QAAMC,IAAOD;AACb,SAAOC,EAAK,QAAQA,EAAK,UAAU;AACrC;AAIO,SAASC,KAA0C;AACxD,QAAM,EAAE,YAAArsB,GAAY,WAAA4B,GAAW,eAAA5C,GAAe,QAAAkB,GAAQ,QAAAtB,GAAQ,iBAAA0tB,EAAA,IAAoBV,GAAA,GAI5EW,IAAoBC,GAAA,IAAuBlvB,GAAOyR,IAAoB,MAAS,IAAI,QAInF,EAAE,aAAA0d,GAAa,gBAAAC,EAAA,IAAmBC,GAAczsB,GAAQF,CAAU;AAIxE,WAAS4sB,IAAwC;AAC/C,WAAIL,IAA0BA,EAAkB,MAAM,KAE/CvsB,EAAW,YAAY,OAAO;AAAA,EACvC;AAEA,WAAS6sB,EAAkBrlB,GAAmC;AAC5D,UAAMslB,IAAY9sB,EAAW,OAAO;AACpC,QAAIwH,KAAS,KAAKA,IAAQslB,EAAU;AAClC,aAAOA,EAAUtlB,CAAK,EAAE;AAAA,EAG5B;AAIA,iBAAe6M,EACbhT,GACA0rB,GACmC;AAGnC,UAAMniB,IAAQ;AAAA,MACZ,MAHWshB,GAAiB7qB,EAAK,KAAK;AAAA,MAItC,OAAOA,EAAK;AAAA,MACZ,SAASA,EAAK;AAAA,MACd,QAAQA,EAAK;AAAA,MACb,SAASA,EAAK;AAAA,MACd,qBAAqBA,EAAK;AAAA,IAAA;AAG5B,QAAI0rB;AACF,YAAM/sB,EAAW,cAAc4K,CAAK;AAAA,aAC3BvJ,EAAK;AAEd,YAAMrB,EAAW,kBAAkB4K,CAAK;AAAA,SACnC;AACL,YAAMoiB,IAAWJ,EAAA;AACjB,YAAM5sB,EAAW,UAAU,EAAE,GAAG4K,GAAO,UAAAoiB,GAAU;AAAA,IACnD;AAMA,IADoBhtB,EAAW,YAAY,OAC1B,OACfysB,EAAA;AAAA,EAEJ;AAIA,iBAAeQ,EAAWzlB,GAAiC;AACzD,IAAA4jB,GAAe,qBAAqB,wBAAwB;AAC5D,UAAMpc,IAAU6d,EAAkBrlB,CAAK;AACvC,QAAI,CAACwH;AACH,aAAAtR,GAAO,MAAM,uCAAuC8J,CAAK,GAAG,GACrD;AAET,UAAM0lB,IAAY,MAAMltB,EAAW,WAAWgP,CAAO;AACrD,WAAKke,KAEHR,EAAA,GAEKQ;AAAA,EACT;AAIA,WAASC,IAA6B;AACpC,IAAA/B,GAAe,YAAY;AAI3B,UAAMgC,IAASltB,EAAO,UAAA,GAChB+B,IAAYmrB,EAAO,KAAK,CAACvsB,MAAMA,EAAE,MAAM,IAAI,GAC3CwsB,IAAiBD,EAAO,KAAK,CAACvsB,MAAMA,EAAE,SAAS,SAASoB,GAAW,IAAI,KAAKA;AAElF,QAAIorB,GAAgB;AAClB,aAAO;AAAA,QACL,MAAMA,EAAe;AAAA,QACrB,QAAQntB,EAAO,aAAa,MAAM;AAAA,MAAA;AAKtC,UAAMY,IAAewsB,GAAgBptB,CAAM;AAC3C,WAAO,EAAE,MAAMY,IAAe,IAAIA,CAAY,KAAK,IAAA;AAAA,EACrD;AAIA,iBAAeysB,EAAalsB,GAAuBmsB,GAA2C;AAC5F,IAAApC,GAAe,6BAA6B,qCAAqC;AAEjF,QAAIqC;AAQJ,QANID,MAAsB,SACxBC,IAAWZ,EAAkBW,CAAiB,IAE9CC,IAAWb,EAAA,GAGT,CAACa,GAAU;AACb,MAAA/vB,GAAO,MAAM,iDAAiD;AAC9D;AAAA,IACF;AAEA,QAAI;AACF,YAAMgH,IAAS,MAAM9C,EAAU,WAAW6rB,GAAUpsB,EAAK,QAAkBA,EAAK,IAAI;AACpF,MAAI,OAAOA,EAAK,YAAa,cAC3BA,EAAK,SAASqD,CAAM;AAAA,IAExB,SAASiB,GAAO;AACd,MAAAjI,GAAO,MAAM,+CAA+C2D,EAAK,MAAM,MAAMsE,CAAK;AAAA,IACpF;AAAA,EACF;AAIA,WAAS+nB,EAAcC,GAA8C;AACnE,IAAAvC,GAAe,qBAAqB,iCAAiC;AAErE,UAAMpc,IAAU4d,EAAA;AAChB,QAAI,CAAC5d,GAAS;AACZ,MAAA4e,GAAK,mDAAmD;AACxD;AAAA,IACF;AAMA,IAAA5tB,EAAW,oBAAoBgP,GAAS,YACvB,MAAM2e,EAAA,MACH,EACnB;AAAA,EACH;AAIA,WAASE,EAAmBpyB,GAAoD;AAC9E,WAAOuD,EAAc,kBAAkBvD,CAAI;AAAA,EAC7C;AAIA,WAASqyB,EAAcC,GAAyC;AAC9D,IAAA3C,GAAe,iBAAiB,gDAAgD;AAAA,EAElF;AAIA,WAAS4C,EAAmB9sB,GAA8C;AACxE,IAAAkqB,GAAe,oBAAoB;AAEnC,UAAMa,IAAKjsB,EAAW,UAAU;AAChC,QAAI,CAACisB,EAAI;AAET,UAAMgC,IAAShC,EAAG,KAAK,YAAA,GACjBiC,IAAqC,CAAA;AAC3C,eAAW,CAACryB,GAAGmF,CAAC,KAAK,OAAO,QAAQE,CAAK;AACvC,MAAIF,KAAK,SAAMktB,EAAW,GAAGD,CAAM,IAAIpyB,CAAC,EAAE,IAAI,OAAOmF,CAAC;AAGxD,IAAAd,EAAO,QAAQ,QAAQ;AAAA,MACrB;AAAA,QACE,GAAG,OAAO,SAAS,KAAK,UAAU,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,gBAAgBguB,CAAU,EAAE,UAAU;AAAA,MAAA;AAAA,IAClG;AAAA,EAEJ;AAEA,WAASC,IAAkE;AACzE,IAAA/C,GAAe,oBAAoB;AAEnC,UAAMa,IAAKjsB,EAAW,UAAU;AAChC,QAAI,CAACisB,EAAI;AAET,UAAMgC,IAAShC,EAAG,KAAK,YAAA,GACjBmC,IAAY,IAAI,gBAAgB,OAAO,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK,EAAE,GACxE1pB,IAA0C,CAAA;AAEhD,eAAW,CAAChF,GAAKhB,CAAK,KAAK0vB,EAAU;AACnC,UAAI1uB,EAAI,WAAW,GAAGuuB,CAAM,GAAG,GAAG;AAChC,cAAMI,IAAW3uB,EAAI,QAAQ,GAAGuuB,CAAM,KAAK,EAAE,GACvCK,KAAW,OAAO5vB,CAAK;AAC7B,QAAAgG,EAAO2pB,CAAQ,IAAI,MAAMC,EAAQ,IAAI5vB,IAAQ4vB;AAAA,MAC/C;AAGF,WAAO,OAAO,KAAK5pB,CAAM,EAAE,SAAS,IAAIA,IAAS;AAAA,EACnD;AAIA,WAAS6pB,EAAcC,GAAkB7oB,GAAsB;AAC7D,UAAMqJ,IAAU6d,EAAkB2B,CAAQ;AAC1C,IAAIxf,KACFhP,EAAW,cAAcgP,GAASrJ,CAAK;AAAA,EAE3C;AAEA,WAAS8oB,EAAgBD,GAAwB;AAC/C,UAAMxf,IAAU6d,EAAkB2B,CAAQ;AAC1C,IAAIxf,KACFhP,EAAW,gBAAgBgP,CAAO;AAAA,EAEtC;AAIA,QAAM0f,IAA6B1xB,EAAS,MAAM;AAChD,QAAI,CAACuvB,EAAmB;AACxB,UAAMvD,IAAIuD,EAAkB;AAG5B,WAAO;AAAA,MACL,KAHgBvsB,EAAW,OAAO,MACd,UAAU,CAACO,MAAMA,EAAE,OAAOyoB,EAAE,EAAE;AAAA,MAGlD,UAAUA,EAAE,SAAS,OAAO,EAAE,OAAOA,EAAE,UAAW;AAAA,MAClD,WAAWA,EAAE;AAAA,MACb,OAAOtjB,EAAIsjB,EAAE,QAAQ,IAAI,MAAM,OAAOA,EAAE,KAAK,CAAC,IAAI,IAAI;AAAA,IAAA;AAAA,EAE1D,CAAC;AAID,SAAO;AAAA,IACL,QAAApqB;AAAA,IACA,iBAAA0tB;AAAA,IACA,WAAAjY;AAAA,IACA,YAAA4Y;AAAA,IACA,UAAAE;AAAA,IACA,cAAAI;AAAA,IACA,eAAAG;AAAA,IACA,oBAAAG;AAAA,IACA,eAAAC;AAAA,IACA,oBAAAE;AAAA,IACA,oBAAAG;AAAA,IACA,eAAAI;AAAA,IACA,iBAAAE;AAAA,IACA,4BAAAC;AAAA,EAAA;AAEJ;AC3ZA,SAASC,GAAiBjwB,GAAyB;AACjD,SAAOA,KAAU,QAA+BA,MAAU;AAC5D;AAEA,SAASgS,GAAcC,GAAYpQ,GAAqB;AAOtD,MALIouB,GAAiBhe,CAAC,KAAKge,GAAiBpuB,CAAC,KAEzCouB,GAAiBhe,CAAC,KAAK,MAAM,QAAQpQ,CAAC,KAAKA,EAAE,WAAW,KACxD,MAAM,QAAQoQ,CAAC,KAAKA,EAAE,WAAW,KAAKge,GAAiBpuB,CAAC,KAExDoQ,MAAMpQ,EAAG,QAAO;AAEpB,MADI,OAAOoQ,KAAM,OAAOpQ,KACpB,OAAOoQ,KAAM,YAAYA,MAAM,QAAQpQ,MAAM,KAAM,QAAO;AAE9D,MAAI,MAAM,QAAQoQ,CAAC,KAAK,MAAM,QAAQpQ,CAAC;AAErC,WADI,CAAC,MAAM,QAAQoQ,CAAC,KAAK,CAAC,MAAM,QAAQpQ,CAAC,KACrCoQ,EAAE,WAAWpQ,EAAE,SAAe,KAC3BoQ,EAAE,MAAM,CAACxL,GAAM+C,MAAMwI,GAAcvL,GAAM5E,EAAE2H,CAAC,CAAC,CAAC;AAGvD,QAAM0mB,IAAOje,GACPke,IAAOtuB,GACPuuB,IAAU,oBAAI,IAAI,CAAC,GAAG,OAAO,KAAKF,CAAI,GAAG,GAAG,OAAO,KAAKC,CAAI,CAAC,CAAC;AACpE,aAAWnvB,KAAOovB;AAChB,QAAI,CAACpe,GAAcke,EAAKlvB,CAAG,GAAGmvB,EAAKnvB,CAAG,CAAC,EAAG,QAAO;AAEnD,SAAO;AACT;AAeO,SAASqvB,GAAgBtyB,GAAqD;AACnF,QAAM;AAAA,IACJ,MAAA2T;AAAA,IACA,iBAAA4e;AAAA,IACA,iBAAAC,IAAkB;AAAA,IAClB,kBAAAC,IAAmB;AAAA,IACnB,qBAAAC;AAAA,IACA,UAAAC;AAAA,EAAA,IACE3yB,GAGE,EAAE,MAAM4yB,GAAU,eAAAC,GAAe,UAAAC,EAAA,IAAavd,GAAQ,EAAE,iBAAiB,IAAO,GAMhFwd,IAAmB9pB,EAAIwL,EAAUd,EAAK,KAAK,CAAC,GAC5Cqf,IAAoB/pB,EAAI,EAAK;AAEnC,EAAAjH;AAAA,IACE2R;AAAA,IACA,CAACxG,MAAW;AACV,MAAI8lB,EAAQ,UACVD,EAAkB,QAAQ,CAAC/e,GAAc9G,GAAQ4lB,EAAiB,KAAK;AAAA,IAE3E;AAAA,IACA,EAAE,MAAM,GAAA;AAAA,EAAK;AAIf,QAAME,IAAUhqB,EAAI,EAAK,GAEnB2L,IAAarU,EAAS,MAAM0yB,EAAQ,SAASD,EAAkB,KAAK,GAEpEE,IAAU3yB,EAAS,MACnB,GAAC0yB,EAAQ,SACT,CAACL,EAAS,MAAM,SAChB,CAACI,EAAkB,SACnBT,KAAmB,CAACA,EAAgB,MAEzC;AAGD,WAASY,IAAoB;AAC3B,IAAAJ,EAAiB,QAAQte,EAAUd,EAAK,KAAK,GAC7Cqf,EAAkB,QAAQ,IAC1BC,EAAQ,QAAQ;AAAA,EAClB;AAYA,WAASG,IAAkB;AACzB,IAAAH,EAAQ,QAAQ,IAChBD,EAAkB,QAAQ,CAAC/e,GAAcN,EAAK,OAAOof,EAAiB,KAAK;AAAA,EAC7E;AAEA,WAASM,IAA+B;AACtC,QAAIV;AACF,aAAOA,EAAA;AAET,IAAAhf,EAAK,QAAQc,EAAUse,EAAiB,KAAK;AAAA,EAC/C;AAOA,MAJIN,KACF3kB,GAAgB8G,CAAU,GAGxB4d,MAAoB,IAAO;AAC7B,UAAM,EAAE,eAAAvB,EAAA,IAAkB3b,GAAA,GACpB,EAAE,kBAAAge,EAAA,IAAqBC,GAAA;AAE7B,IAAAtC,EAAc,YAAY;AACxB,UAAIuC;AAUJ,UARI,OAAOhB,KAAoB,WAE7BgB,IAAchB,EAAgB,SAAS5d,EAAW,QAGlD4e,IAAc5e,EAAW,OAGvB4e,GAAa;AACf,cAAMzxB,IAAU2wB,IACZ5e,GAAQ4e,CAAmB,IAC3B;AACJ,eAAO,CAAE,MAAMY,EAAiBvxB,CAAO;AAAA,MACzC;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAGA,SAAA6R,GAAQ6f,IAAc,EAAE,YAAA7e,GAAY,SAAAse,EAAA,CAAS,GAEtC;AAAA,IACL,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,QAAAC;AAAA,IACA,SAAAH;AAAA,IACA,YAAAte;AAAA,IACA,SAASrU,EAAS,MAAM0yB,EAAQ,KAAK;AAAA,IACrC,UAAAL;AAAA,IACA,eAAAC;AAAA,IACA,UAAAC;AAAA,EAAA;AAEJ;AChKA,MAAMY,KAAM,IACNC,KAAiB,GAEjB7U,KAAwB8U,EAAgB;AAAA,EAC5C,MAAM;AAAA,EACN,cAAc;AAAA,EACd,OAAO;AAAA,IACL,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,IAEX,SAAS;AAAA,MACP,MAAM,CAAC,QAAQ,OAAO;AAAA,MACtB,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,IAEX,SAAS;AAAA,MACP,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,IAEX,gBAAgB;AAAA,MACd,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,IAEX,UAAU;AAAA,MACR,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,IAEX,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,IAEX,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,IAEX,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,IAEX,SAAS;AAAA,MACP,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,UAAU;AAAA,MACV,SAAS,OAAO,CAAA;AAAA,IAAC;AAAA,IAEnB,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF,MAAMnuB,GAAO;AACX,UAAM,EAAE,wBAAAmY,GAAwB,SAAAqB,MAAYpe,GAAOG,EAA6B,GAC1E6yB,IAAoBtzB,EAAS,MAC1Bqd,EAAuBnY,EAAM,QAAgC,EAAE,SAAS,CAAA,CAChF,GAEKquB,IAAW7qB,EAAI,EAAK,GACpB8qB,IAAc9qB,EAAI,EAAK;AAC7B,QAAI+qB,IAAsD;AAE1D,aAASC,IAAc;AACrB,MAAID,MACF,aAAaA,CAAa,GAC1BA,IAAgB,OAElBF,EAAS,QAAQ;AAAA,IACnB;AAEA,aAASI,IAAgB;AACvB,MAAIH,EAAY,UAChBC,IAAgB,WAAW,MAAM;AAC/B,QAAAF,EAAS,QAAQ,IACjBE,IAAgB;AAAA,MAClB,GAAG,GAAG;AAAA,IACR;AAGA,UAAMG,IAAapW,GAAS,oBAAI,KAA8B;AAE9D,aAASqW,EAAmBC,GAA0BpO,GAAgB;AACpE,YAAMqO,IAAU,KAAK,MAAMrO,CAAM;AACjC,MAAIkO,EAAW,IAAIE,CAAO,MAAMC,KAC9BH,EAAW,IAAIE,GAASC,CAAO;AAAA,IAEnC;AAEA,aAASC,EAAYC,GAAkB;AACrC,aAAO,OAAOA,KAAY,aAAa,CAAC,CAAEA,GAAiB,UAAU,CAAC,CAAEA,GAAiB;AAAA,IAC3F;AAEA,aAASC,EAAY1Z,GAAiC;AACpD,MAAIA,MACFoZ,EAAW,OAAOpZ,CAAE,GACpBkE,EAAQ,OAAOlE,CAAE;AAAA,IAErB;AAEA,aAAS2Z,IAAiB;AACxB,MAAAzV,EAAQ,MAAA,GACRkV,EAAW,MAAA;AAAA,IACb;AAEA,UAAMQ,IAAQp0B,EAAS,OAAOkF,EAAM,YAAY,cAAc,WAAW,KAAK,CAAC;AAE/E,WAAO,MAAM;AACX,YAAM4F,IAAQwoB,EAAkB,OAC1Be,IAAQvpB,EAAM,QACdwpB,IAAaf,EAAS,SAASc,KAAS,GACxCE,IAAeF,IAAQ,GAGvBG,IAAeH,IAAQ,IAAIvpB,EAAMupB,IAAQ,CAAC,EAAE,iBAAiB,QAC7DI,IAAcD,MAAiB,UAAYZ,EAAW,IAAIY,CAAY,KAAK,GAE3EE,IAAW5pB,EAAM,IAAI,CAAC3C,GAAMwsB,MAAe;AAE/C,cAAMC,IAAcP,IAAQ,IAAIM;AAGhC,YAAIE,IAAY;AAChB,iBAAS3pB,KAAIypB,IAAa,GAAGzpB,KAAImpB,GAAOnpB,MAAK;AAC3C,gBAAMsP,KAAK1P,EAAMI,EAAC,EAAE;AACpB,UAAIsP,OAAO,WACTqa,KAAajB,EAAW,IAAIpZ,EAAE,KAAK;AAAA,QAEvC;AACA,cAAMsa,IAASF,IAAczB,KAAM0B,GAE7BE,IAAgB5sB,EAAK,mBAAmB,UAAYyrB,EAAW,IAAIzrB,EAAK,cAAc,KAAK,GAE3F6sB,KAA8C;AAAA,UAClD,mBAAmBJ;AAAA,UACnB,aAAaP,IAAQO;AAAA,UACrB,YAAY,GAAGE,CAAM;AAAA,UACrB,oBAAoBC,IAAgB,GAAGA,CAAa,OAAO;AAAA,QAAA,GAGvDE,KAAa;AAAA,UACjB,GAAG9sB;AAAA,UACH,KAAKA,EAAK;AAAA,UACV,SAAS+rB;AAAA,UACT,gBAAgBL;AAAA,UAChB,YAAYe;AAAA,UACZ,aAAaP;AAAA,UACb,UAAUC;AAAA,UACV,eAAelB;AAAA,UACf,OAAO4B;AAAA,QAAA;AAGT,eAAI7sB,EAAK,WAAW6rB,EAAY7rB,EAAK,OAAO,IACnC+sB,GAAEC,IAAS;AAAA,UAChB,GAAGF;AAAA,UACH,SAASC,GAAEE,GAAMjtB,EAAK,OAAO,CAAC;AAAA,QAAA,CAC/B,IAEI+sB,GAAEC,IAASF,EAAU;AAAA,MAC9B,CAAC;AAGD,UAAII,IAAiB;AACrB,MAAId,MACFc,IAAiBH;AAAA,QACf;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,OAAO;AAAA,YACL,UAAU;AAAA,YACV,CAACd,EAAM,QAAQ,QAAQ,QAAQ,GAAG;AAAA,YAClC,MAAM;AAAA,YACN,eAAe;AAAA,YACf,SAASE,IAAa,MAAM;AAAA,YAC5B,kBAAkBA,IAAa,SAAS;AAAA,YACxC,YAAY;AAAA,UAAA;AAAA,QACd;AAAA,QAEF;AAAA,UACEY;AAAA,YACE;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,SAASf;AAAA,YAAA;AAAA,YAEX,CAACe,GAAEzL,IAAQ,EAAE,MAAM,YAAY,MAAM,MAAM,eAAe,OAAA,CAAQ,GAAG,WAAW;AAAA,UAAA;AAAA,QAClF;AAAA,MACF;AAKJ,UAAI6L;AACJ,UAAIhB,KAAcD,IAAQ,GAAG;AAE3B,cAAMkB,IAAkBlB,IAAQ;AAChC,YAAImB,IAAO;AACX,iBAAStqB,IAAI,GAAGA,IAAImpB,GAAOnpB,KAAK;AAC9B,gBAAMsP,IAAK1P,EAAMI,CAAC,EAAE;AACpB,UAAAsqB,KAAQhb,MAAO,UAAYoZ,EAAW,IAAIpZ,CAAE,KAAK;AAAA,QACnD;AACA,cAAMib,IAAeF,IAAkBpC,KAAMqC,GACvCE,IAAe5qB,EAAM,CAAC,EAAE,mBAAmB,UAAY8oB,EAAW,IAAI9oB,EAAM,CAAC,EAAE,cAAc,KAAK;AACxG,QAAAwqB,IAAcG,IAAeC;AAAA,MAC/B;AAEE,QAAAJ,IAAcb,IAAc,KAAK,IAAIJ,IAAQ,GAAGjB,KAAiB,CAAC,IAAID;AAGxE,aAAO+B;AAAA,QACL;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,iBAAiB,OAAOZ,CAAU;AAAA,UAClC,iBAAiBpvB,EAAM,YAAY;AAAA,UACnC,mBAAmBkvB,EAAM,QAAQ,QAAQ;AAAA,UACzC,OAAO;AAAA,YACL,wBAAwB,GAAGK,CAAW;AAAA,YACtC,SAAS,GAAGtB,EAAG;AAAA,YACf,OAAO;AAAA,YACP,QAAQ,GAAGmC,CAAW;AAAA,UAAA;AAAA,UAExB,cAAc5B;AAAA,UACd,cAAcC;AAAA,UACd,eAAe,MAAM;AACnB,YAAAH,EAAY,QAAQ;AAAA,UACtB;AAAA,UACA,aAAa,MAAM;AACjB,YAAAA,EAAY,QAAQ;AAAA,UACtB;AAAA,QAAA;AAAA,QAEF,CAAC,GAAGkB,GAAUW,CAAc;AAAA,MAAA;AAAA,IAEhC;AAAA,EACF;AACF,CAAC;;;;ACrJD,SAASM,GAAUt2B,GAAUgF,GAA4B;AACvD,EAAIA,EAAK,MAAM,WACb1B,GAAK,OAAO,OAAO,QAAQ0B,EAAK,KAAK,SAEnCA,EAAK,MAAM,mBACb1B,GAAK,OAAO,eAAe,QAAQ0B,EAAK,KAAK,iBAG/ChF,EAAI,IAAIsD,EAAI;AASZ,QAAMizB,IAAkBC,GAAA;AACxB,EAAAx2B,EAAI,QAAQy2B,IAAoBF,CAAe;AAE/C,QAAM,EAAE,wBAAAG,MAA2BH;AAEnC,EAAAv2B,EAAI,OAAO,iBAAiB,sBAAsB,CAACmP,GAAuBhN,MAA2B;AACnG,IAAAmB,GAAK,OAAO,mBAAmBozB,EAAuBvnB,CAAM,GAAGhN,CAAO;AAAA,EACxE,GAGA,OAAO,QAAQK,EAAO,EAAE,QAAQ,CAAC,CAACa,GAAKlB,CAAO,MAAM;AAClD,IAAAmB,GAAK,OAAO,mBAAmBozB,EAAuBrzB,CAAG,GAAGlB,CAAO;AAAA,EACrE,CAAC;AACH;AAEA,SAASw0B,GAAiB32B,GAAU;AAClC,QAAM42B,IAAKC,GAAe;AAAA,IACxB,OAAO;AAAA,IACP,SAAS;AAAA,EAAA,CACV;AAED,EAAA72B,EAAI,OAAO,iBAAiB,WAAW42B,EAAG,QAAQ,OAAO,GACzD52B,EAAI,OAAO,iBAAiB,YAAY42B,EAAG,QAAQ,SAAS,SAAS,GACrE52B,EAAI,OAAO,iBAAiB,YAAY42B,EAAG,QAAQ,SAAS,GAC5D52B,EAAI,OAAO,iBAAiB,aAAa42B,EAAG,QAAQ,SAAS,GAC7D52B,EAAI,OAAO,iBAAiB,WAAW,kBAAkB,UAAU,UAAU,iBAAiB,GAG9FA,EAAI,QAAQ82B,IAAY92B,EAAI,OAAO,iBAAiB,QAAQ,GAC5DA,EAAI,QAAQ+2B,IAAa/2B,EAAI,OAAO,iBAAiB,SAAS,GAC9DA,EAAI,QAAQg3B,IAAah3B,EAAI,OAAO,iBAAiB,SAAS,GAC9DA,EAAI,QAAQi3B,IAAcj3B,EAAI,OAAO,iBAAiB,UAAU,GAChEA,EAAI,QAAQk3B,IAAYl3B,EAAI,OAAO,iBAAiB,QAAQ;AAC9D;AAEA,SAASm3B,GAAmBn3B,GAAU;AAEpC,EAAAA,EAAI,OAAO,iBAAiB,QAAQ,CAAA,GAGpCA,EAAI,OAAO,iBAAiB,cAAc,CAAA,GAC1CA,EAAI,QAAQo3B,IAAgBp3B,EAAI,OAAO,iBAAiB,WAAW;AACrE;AAEA,SAASq3B,GAAyBr3B,GAAU;AAC1C,EAAAA,EAAI,QAAQsS,IAAkBglB,IAAqB,GACnDt3B,EAAI,QAAQu3B,IAAmBC,IAAsB,GACrDx3B,EAAI,QAAQy3B,IAAwBC,IAA2B,GAC/D13B,EAAI,QAAQ23B,IAAgBC,IAAmB,GAC/C53B,EAAI,QAAQ63B,IAAwBC,IAA2B,GAC/D93B,EAAI,QAAQ+3B,IAAsBz3B,IAAsB;AAExD,QAAMovB,IAAgDsI,GAAoBh4B,CAAG;AAC7E,EAAAA,EAAI,QAAQ4C,IAAkB8sB,CAAqB;AACrD;AAEA,SAASuI,GAAej4B,GAAUgF,GAA4B;AAE5D,EAAAmb,GAAA,GAEAngB,EAAI,IAAI+E,IAA4B,EAAE,QAAQC,EAAK,QAAQ,GAC3DhF,EAAI,IAAIuH,EAAc,GACtBvH,EAAI,IAAI8X,EAAmB,GAC3B9X,EAAI,IAAI4Z,EAAmB,GAC3B5Z,EAAI,IAAIuB,EAAO,GACfvB,EAAI,IAAID,EAAW,GACnBC,EAAI,IAAQk4B,EAAe,GAE3Bl4B,EAAI,IAAIm4B,IAAenzB,EAAK,OAAO;AACrC;AAEA,SAASozB,GAAkCp4B,GAAUgF,GAA4B;AAC/E,MAAI,CAACA,EAAK,qBAAqB,mBAAoB;AAEnD,QAAMqzB,IAAsC;AAAA,IAC1C,mBAAmB;AAAA,MACjB,QAAQ;AAAA,QACN,oBAAoBrzB,EAAK,oBAAoB;AAAA,MAAA;AAAA,IAC/C;AAAA,IAEF,gBAAgB;AAAA,IAChB,SAASA,EAAK,qBAAqB;AAAA,IACnC,WAAWA,EAAK,qBAAqB;AAAA,IACrC,mBAAmBA,EAAK,qBAAqB;AAAA,EAAA;AAK/C,EAAAhF,EAAI,QAAQs4B,IAAuBD,CAAS;AAC9C;AAEA,SAASE,GAAmCv4B,GAAUgF,GAA4B;AAChF,MAAI,CAACA,EAAK,qBAAqB,mBAAoB;AAEnD,QAAMqzB,IAAsC;AAAA,IAC1C,mBAAmB;AAAA,MACjB,QAAQ;AAAA,QACN,oBAAoBrzB,EAAK,oBAAoB;AAAA,MAAA;AAAA,IAC/C;AAAA,IAEF,gBAAgB;AAAA,IAChB,SAASA,EAAK,qBAAqB;AAAA,IACnC,WAAWA,EAAK,qBAAqB;AAAA,IACrC,mBAAmBA,EAAK,qBAAqB;AAAA,EAAA;AAI/C,EAAAhF,EAAI,IAAIw4B,IAAmBH,CAAS;AAIpC,QAAMI,IAAsBz4B,EAAI,eAAe,MAAM04B,IAAoB;AACzE,EAAA14B,EAAI,QAAQ24B,IAAwBF,CAAmB,GAMvDz4B,EAAI,eAAe,MAAM;AACvB,UAAM,EAAE,mBAAA44B,EAAA,IAAsBC,GAAA;AAE9B,IAAA7zB,EAAK,OAAO,WAAW,CAACT,MAAO;AAC7B,MAAAq0B,EAAkB,WAAW,EAAE,MAAMr0B,EAAG,MAAgB;AAAA,IAC1D,CAAC,GAEDS,EAAK,OAAO,UAAU,CAACT,MAAO;AAC5B,MAAAq0B,EAAkB,UAAU,EAAE,MAAMr0B,EAAG,MAAgB,UAAUA,EAAG,UAAU;AAAA,IAChF,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAASu0B,GAAkBj1B,GAAgB;AACzC,QAAMk1B,IAAW,CAACx0B,MAAgC;AAChD,QAAIy0B,IAEA,CAAA;AAEJ,WAAI,OAAO,KAAKz0B,EAAG,MAAM,EAAE,SAAS,MAClCy0B,IAAQ,OAAO,YAAY,OAAO,QAAQz0B,EAAG,MAAM,EAAE,OAAO,CAAC,CAAClB,CAAG,MAAMA,MAAQ,WAAW,CAAC,IAGtF21B;AAAA,EACT;AAIA,EAAAn1B,EAAO,WAAW,OAAOU,MAAO;AAC9B,UAAM,EAAE,iBAAA9C,EAAA,IAAoBC,GAAA;AAE5B,QAAI6C,EAAG,KAAK,SAAS;AACnB,UAAI;AACF,YAAI,CAAC9C,EAAgB;AACnB,8BAAa,QAAQ,sBAAsB8C,EAAG,QAAQ,GAC/C,EAAE,MAAM,QAAA;AAAA,MAEnB,QAAa;AACX,4BAAa,QAAQ,sBAAsBA,EAAG,QAAQ,GAC/C,EAAE,MAAM,QAAA;AAAA,MACjB;AAAA,EAEJ,CAAC,GAGDV,EAAO,WAAW,CAACU,GAAI00B,MAAS;AAC9B,UAAM,EAAE,WAAAh5B,EAAA,IAAcC,GAAA;AACtB,QAAKqE,EAAG,KAAK;UAEFtE,EAAUsE,EAAG,KAAK,WAAgC,EAAG,QAAO;AAClE;AACH,QAAAnB,EAAa,MAAME,GAAK,OAAO,EAAE,uCAAuC,GAAG;AAAA,UACzE,SAAS;AAAA,QAAA,CACV;AAED,cAAM01B,IAAQD,EAASx0B,CAAE;AAEzB,eAAO,OAAO,KAAKy0B,CAAK,EAAE,CAAC,IAAI,IAAI,OAAO,OAAOA,CAAK,EAAE,CAAC,CAAC,KAAKC,EAAK,OAAOA,EAAK;AAAA,MAClF;AAAA,UAVE,QAAO;AAAA,EAWX,CAAC;AACH;AAIA,MAAA9tB,KAAe;AAAA,EACb,QAAQnL,GAAUgF,GAAkC;AAElDk0B,IAAAA,GAAgB,EAAW,SAAS,CAAC,EAAE,KAAK,SAAS,iBAAiB,oBAAA,CAAqB,CAAC,GAG5F,OAAO,QAAQ1d,GAAqBxW,EAAK,MAAM,GAE/CsxB,GAAUt2B,GAAKgF,CAAI,GACnB2xB,GAAiB32B,CAAG,GACpBm3B,GAAmBn3B,CAAG,GACtBq3B,GAAyBr3B,CAAG,GAC5Bi4B,GAAej4B,GAAKgF,CAAI,GAGxBozB,GAAkCp4B,GAAKgF,CAAI,GAE3CiY,GAAyBjd,CAAG,GAExB,OAAO,SAAW,QACpBA,EAAI,eAAe,MAAMga,IAAqB,GAC9Cha,EAAI,eAAe,MAAMqb,IAAyB,IAGpDyd,GAAkB9zB,EAAK,MAAM,GAK7B,WAAW,MAAM;AACf,kBAAY,KAAK,2BAA2B,GAE5CuzB,GAAmCv4B,GAAKgF,CAAI,GAC5C,YAAY,KAAK,0BAA0B;AAAA,IAC7C,GAAG,CAAC;AAAA,EACN;AACF;"}
|