@logicplanes/kaeso-ui 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai/component-guides.md +51 -1
- package/ai/component-registry.json +104 -8
- package/ai/component-registry.md +30 -4
- package/ai/icons.md +1 -1
- package/ai/tokens.md +1 -1
- package/dist/blocks/delete-resource.js +1 -1
- package/dist/blocks/pages.js +5 -5
- package/dist/blocks/resource-list.js +4 -4
- package/dist/chunks/{app-frame-DZPEf2NQ.js → app-frame-C8csevkL.js} +7 -7
- package/dist/chunks/{app-frame-DZPEf2NQ.js.map → app-frame-C8csevkL.js.map} +1 -1
- package/dist/chunks/{avatar-HnvBUoe5.js → avatar-CWbdwbJv.js} +2 -2
- package/dist/chunks/{avatar-HnvBUoe5.js.map → avatar-CWbdwbJv.js.map} +1 -1
- package/dist/chunks/{badge-CM8ahjDR.js → badge-C2KtxCLB.js} +2 -2
- package/dist/chunks/{badge-CM8ahjDR.js.map → badge-C2KtxCLB.js.map} +1 -1
- package/dist/chunks/{banner-CvYgPwCc.js → banner-Cb8OWnqJ.js} +4 -4
- package/dist/chunks/{banner-CvYgPwCc.js.map → banner-Cb8OWnqJ.js.map} +1 -1
- package/dist/chunks/{button-9q66Ta23.js → button-Dzu7_csE.js} +7 -7
- package/dist/chunks/{button-9q66Ta23.js.map → button-Dzu7_csE.js.map} +1 -1
- package/dist/chunks/{calendar-CeNcqLFd.js → calendar--YemJsv4.js} +2 -2
- package/dist/chunks/{calendar-CeNcqLFd.js.map → calendar--YemJsv4.js.map} +1 -1
- package/dist/chunks/{checkbox-C_DrNA2N.js → checkbox-CDfC6E-M.js} +2 -2
- package/dist/chunks/{checkbox-C_DrNA2N.js.map → checkbox-CDfC6E-M.js.map} +1 -1
- package/dist/chunks/{cn-Isw2DnQX.js → cn-Dj6sRgkF.js} +8 -1
- package/dist/chunks/cn-Dj6sRgkF.js.map +1 -0
- package/dist/chunks/{code-block-mEH6Sy3h.js → code-block-U5fCqwgC.js} +75 -54
- package/dist/chunks/code-block-U5fCqwgC.js.map +1 -0
- package/dist/chunks/{code-Bp2p9AuD.js → code-tqj0uhBL.js} +2 -2
- package/dist/chunks/{code-Bp2p9AuD.js.map → code-tqj0uhBL.js.map} +1 -1
- package/dist/chunks/{collapsible-CtQNJn9b.js → collapsible-CKrCX_T9.js} +3 -3
- package/dist/chunks/{collapsible-CtQNJn9b.js.map → collapsible-CKrCX_T9.js.map} +1 -1
- package/dist/chunks/{combobox-D8ZOm8uT.js → combobox-BARyrpXH.js} +6 -6
- package/dist/chunks/{combobox-D8ZOm8uT.js.map → combobox-BARyrpXH.js.map} +1 -1
- package/dist/chunks/{command-list-CzMbdtJs.js → command-list-0RR4DpUe.js} +54 -54
- package/dist/chunks/command-list-0RR4DpUe.js.map +1 -0
- package/dist/chunks/{copy-button-Cdea0wKl.js → copy-button-7-irieJw.js} +5 -5
- package/dist/chunks/{copy-button-Cdea0wKl.js.map → copy-button-7-irieJw.js.map} +1 -1
- package/dist/chunks/{core-FtMDNELx.js → core-Bl9NrBLS.js} +4 -4
- package/dist/chunks/{core-FtMDNELx.js.map → core-Bl9NrBLS.js.map} +1 -1
- package/dist/chunks/{date-popup-NytWvSNh.js → date-popup-RQkqhko4.js} +4 -4
- package/dist/chunks/{date-popup-NytWvSNh.js.map → date-popup-RQkqhko4.js.map} +1 -1
- package/dist/chunks/{dialog-BZCVFmGF.js → dialog-DQ9vZ7vr.js} +5 -5
- package/dist/chunks/{dialog-BZCVFmGF.js.map → dialog-DQ9vZ7vr.js.map} +1 -1
- package/dist/chunks/{empty-By1qTJr6.js → empty-DvhyMXQq.js} +2 -2
- package/dist/chunks/{empty-By1qTJr6.js.map → empty-DvhyMXQq.js.map} +1 -1
- package/dist/chunks/{field-DfITT6Jm.js → field-TviMvYa2.js} +2 -2
- package/dist/chunks/{field-DfITT6Jm.js.map → field-TviMvYa2.js.map} +1 -1
- package/dist/chunks/{icon-D5uD_mnL.js → icon-D7ja-_Yk.js} +2 -2
- package/dist/chunks/{icon-D5uD_mnL.js.map → icon-D7ja-_Yk.js.map} +1 -1
- package/dist/chunks/{icon-button-C7Du4pvb.js → icon-button-CPYR21Sz.js} +3 -3
- package/dist/chunks/{icon-button-C7Du4pvb.js.map → icon-button-CPYR21Sz.js.map} +1 -1
- package/dist/chunks/{identity-BcVQd-7H.js → identity-DPuTkMsa.js} +6 -6
- package/dist/chunks/{identity-BcVQd-7H.js.map → identity-DPuTkMsa.js.map} +1 -1
- package/dist/chunks/{input-B6Docqrk.js → input-TyLIaQ5k.js} +5 -5
- package/dist/chunks/{input-B6Docqrk.js.map → input-TyLIaQ5k.js.map} +1 -1
- package/dist/chunks/{input-group-Dgdb0JpZ.js → input-group-CUSNsQjQ.js} +4 -4
- package/dist/chunks/{input-group-Dgdb0JpZ.js.map → input-group-CUSNsQjQ.js.map} +1 -1
- package/dist/chunks/{iso-field-SOZ7Z-yE.js → iso-field-CWbxlll-.js} +2 -2
- package/dist/chunks/{iso-field-SOZ7Z-yE.js.map → iso-field-CWbxlll-.js.map} +1 -1
- package/dist/chunks/{json-view-DCTMY_j4.js → json-view-Dqd2TDkc.js} +3 -3
- package/dist/chunks/{json-view-DCTMY_j4.js.map → json-view-Dqd2TDkc.js.map} +1 -1
- package/dist/chunks/{kbd-9A9rX60U.js → kbd-BF1vKXJf.js} +2 -2
- package/dist/chunks/{kbd-9A9rX60U.js.map → kbd-BF1vKXJf.js.map} +1 -1
- package/dist/chunks/{link-CtII7u3h.js → link-B2I55xg9.js} +3 -3
- package/dist/chunks/{link-CtII7u3h.js.map → link-B2I55xg9.js.map} +1 -1
- package/dist/chunks/{list-CMXBTVkI.js → list-CkOozrVY.js} +8 -8
- package/dist/chunks/{list-CMXBTVkI.js.map → list-CkOozrVY.js.map} +1 -1
- package/dist/chunks/{loader-DqOUwS1j.js → loader-DCfPndXa.js} +2 -2
- package/dist/chunks/{loader-DqOUwS1j.js.map → loader-DCfPndXa.js.map} +1 -1
- package/dist/chunks/{markdown-CwVQ0niB.js → markdown-BEgwZFlu.js} +9 -9
- package/dist/chunks/{markdown-CwVQ0niB.js.map → markdown-BEgwZFlu.js.map} +1 -1
- package/dist/chunks/{menu-Cjg4RggA.js → menu-fl_QQb38.js} +4 -4
- package/dist/chunks/{menu-Cjg4RggA.js.map → menu-fl_QQb38.js.map} +1 -1
- package/dist/chunks/{meter-VrC2J2GF.js → meter-Bj4N3Xuh.js} +2 -2
- package/dist/chunks/{meter-VrC2J2GF.js.map → meter-Bj4N3Xuh.js.map} +1 -1
- package/dist/chunks/{nav-sheet-Y2Ite-iF.js → nav-sheet-B2rNb8GB.js} +2 -2
- package/dist/chunks/{nav-sheet-Y2Ite-iF.js.map → nav-sheet-B2rNb8GB.js.map} +1 -1
- package/dist/chunks/{nav-wordmark-CjWM3NYa.js → nav-wordmark-_pjheAsZ.js} +2 -2
- package/dist/chunks/{nav-wordmark-CjWM3NYa.js.map → nav-wordmark-_pjheAsZ.js.map} +1 -1
- package/dist/chunks/{page-header-CZCQVHYE.js → page-header-DjUMDG69.js} +4 -4
- package/dist/chunks/{page-header-CZCQVHYE.js.map → page-header-DjUMDG69.js.map} +1 -1
- package/dist/chunks/{pagination-BStrMDqM.js → pagination-BaY8jdli.js} +4 -4
- package/dist/chunks/{pagination-BStrMDqM.js.map → pagination-BaY8jdli.js.map} +1 -1
- package/dist/chunks/{picker-popover-BerQAEBT.js → picker-popover-DShea4b8.js} +6 -6
- package/dist/chunks/{picker-popover-BerQAEBT.js.map → picker-popover-DShea4b8.js.map} +1 -1
- package/dist/chunks/{popover-CgLt_4yG.js → popover-CFMwaeIP.js} +2 -2
- package/dist/chunks/{popover-CgLt_4yG.js.map → popover-CFMwaeIP.js.map} +1 -1
- package/dist/chunks/{radio-07Muf4cX.js → radio-Yl0nO-Sj.js} +2 -2
- package/dist/chunks/{radio-07Muf4cX.js.map → radio-Yl0nO-Sj.js.map} +1 -1
- package/dist/chunks/{range-popup-BCov1iPe.js → range-popup-CkhsK3wI.js} +6 -6
- package/dist/chunks/{range-popup-BCov1iPe.js.map → range-popup-CkhsK3wI.js.map} +1 -1
- package/dist/chunks/{release-art-69WpgVik.js → release-art-ZwfFQImt.js} +2 -2
- package/dist/chunks/{release-art-69WpgVik.js.map → release-art-ZwfFQImt.js.map} +1 -1
- package/dist/chunks/{rights-UVngOX_4.js → rights-BlQx9C_j.js} +9 -9
- package/dist/chunks/{rights-UVngOX_4.js.map → rights-BlQx9C_j.js.map} +1 -1
- package/dist/chunks/scroll-area-D8MD7Vpo.js +42 -0
- package/dist/chunks/scroll-area-D8MD7Vpo.js.map +1 -0
- package/dist/chunks/{section-Bvg0EUnr.js → section-Ce1efbsP.js} +3 -3
- package/dist/chunks/{section-Bvg0EUnr.js.map → section-Ce1efbsP.js.map} +1 -1
- package/dist/chunks/{segmented-DRLDN8EW.js → segmented-C97zvDR1.js} +4 -4
- package/dist/chunks/{segmented-DRLDN8EW.js.map → segmented-C97zvDR1.js.map} +1 -1
- package/dist/chunks/{select-eFTHLeYG.js → select-x4XVsdCI.js} +4 -4
- package/dist/chunks/{select-eFTHLeYG.js.map → select-x4XVsdCI.js.map} +1 -1
- package/dist/chunks/{separator-D86IW7Ge.js → separator-D7TzNHmX.js} +2 -2
- package/dist/chunks/{separator-D86IW7Ge.js.map → separator-D7TzNHmX.js.map} +1 -1
- package/dist/chunks/{sidebar-DifJ5KgE.js → sidebar-DtFlejU7.js} +7 -7
- package/dist/chunks/{sidebar-DifJ5KgE.js.map → sidebar-DtFlejU7.js.map} +1 -1
- package/dist/chunks/{sidebar-menu-XKOiwrQp.js → sidebar-menu-CxQbGwyj.js} +2 -2
- package/dist/chunks/{sidebar-menu-XKOiwrQp.js.map → sidebar-menu-CxQbGwyj.js.map} +1 -1
- package/dist/chunks/{skeleton-Cu74kGJA.js → skeleton-Dcz57Zyp.js} +2 -2
- package/dist/chunks/{skeleton-Cu74kGJA.js.map → skeleton-Dcz57Zyp.js.map} +1 -1
- package/dist/chunks/{slider-Dh0qq1wa.js → slider-Ci83PGtj.js} +2 -2
- package/dist/chunks/{slider-Dh0qq1wa.js.map → slider-Ci83PGtj.js.map} +1 -1
- package/dist/chunks/{status-dot-u4Izk-uC.js → status-dot-QJTF0Yv4.js} +3 -3
- package/dist/chunks/{status-dot-u4Izk-uC.js.map → status-dot-QJTF0Yv4.js.map} +1 -1
- package/dist/chunks/{swap-text-CC77iKJF.js → swap-text-Dr0Irxz6.js} +2 -2
- package/dist/chunks/{swap-text-CC77iKJF.js.map → swap-text-Dr0Irxz6.js.map} +1 -1
- package/dist/chunks/{switch-CbU9m9gi.js → switch-b-VkStWj.js} +3 -3
- package/dist/chunks/{switch-CbU9m9gi.js.map → switch-b-VkStWj.js.map} +1 -1
- package/dist/chunks/table-BeOSKl_3.js +84 -0
- package/dist/chunks/table-BeOSKl_3.js.map +1 -0
- package/dist/chunks/{tag-CqSk8F7M.js → tag-DNdX1XRR.js} +4 -4
- package/dist/chunks/{tag-CqSk8F7M.js.map → tag-DNdX1XRR.js.map} +1 -1
- package/dist/chunks/{text-hFc6TDp9.js → text-DCGGNqTM.js} +3 -3
- package/dist/chunks/{text-hFc6TDp9.js.map → text-DCGGNqTM.js.map} +1 -1
- package/dist/chunks/{textarea-17Ftvph_.js → textarea-CT2S2JVM.js} +5 -5
- package/dist/chunks/{textarea-17Ftvph_.js.map → textarea-CT2S2JVM.js.map} +1 -1
- package/dist/chunks/{timeseries-CbnSFD5q.js → timeseries-B-8OfeZm.js} +3 -3
- package/dist/chunks/{timeseries-CbnSFD5q.js.map → timeseries-B-8OfeZm.js.map} +1 -1
- package/dist/chunks/{toolbar-B_960Ttx.js → toolbar-DL6zVrzU.js} +2 -2
- package/dist/chunks/{toolbar-B_960Ttx.js.map → toolbar-DL6zVrzU.js.map} +1 -1
- package/dist/chunks/{tooltip-CRApbLF6.js → tooltip-BMQ9BtPp.js} +4 -4
- package/dist/chunks/{tooltip-CRApbLF6.js.map → tooltip-BMQ9BtPp.js.map} +1 -1
- package/dist/chunks/{tooltip-root-Dssjjp-E.js → tooltip-root-BeAMXzxU.js} +4 -4
- package/dist/chunks/{tooltip-root-Dssjjp-E.js.map → tooltip-root-BeAMXzxU.js.map} +1 -1
- package/dist/components/app-frame.js +2 -2
- package/dist/components/avatar.js +1 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/banner.js +1 -1
- package/dist/components/button-group.js +4 -4
- package/dist/components/button.js +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/charts/bar.js +2 -2
- package/dist/components/charts/donut.js +2 -2
- package/dist/components/charts/gauge.js +2 -2
- package/dist/components/charts/heatmap.js +1 -1
- package/dist/components/charts/sankey.js +2 -2
- package/dist/components/charts/sparkline.js +1 -1
- package/dist/components/charts/timeseries.js +1 -1
- package/dist/components/charts.js +2 -2
- package/dist/components/checkbox.js +1 -1
- package/dist/components/code-block.js +2 -2
- package/dist/components/code.js +1 -1
- package/dist/components/collapsible.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-list.js +2 -2
- package/dist/components/command-palette.js +32 -31
- package/dist/components/command-palette.js.map +1 -1
- package/dist/components/copy-button.js +1 -1
- package/dist/components/data-table.js +12 -12
- package/dist/components/date-picker.js +6 -6
- package/dist/components/dialog.js +2 -2
- package/dist/components/display-options.js +8 -8
- package/dist/components/empty.js +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/figure.js +60 -0
- package/dist/components/figure.js.map +1 -0
- package/dist/components/filter-chip.js +5 -5
- package/dist/components/filter-row.js +1 -1
- package/dist/components/flow.js +2 -2
- package/dist/components/heading.js +1 -1
- package/dist/components/icon-button.js +1 -1
- package/dist/components/icon.js +1 -1
- package/dist/components/input.js +7 -7
- package/dist/components/kaeso/conversation.js +8 -8
- package/dist/components/kaeso/identity.js +1 -1
- package/dist/components/kaeso/moments.js +5 -5
- package/dist/components/kaeso/rights.js +1 -1
- package/dist/components/kaeso/usage.js +5 -5
- package/dist/components/kaeso.js +10 -10
- package/dist/components/kbd.js +1 -1
- package/dist/components/key-value.js +3 -3
- package/dist/components/label.js +1 -1
- package/dist/components/layout.js +1 -1
- package/dist/components/link.js +1 -1
- package/dist/components/list.js +1 -1
- package/dist/components/loader.js +2 -2
- package/dist/components/logo.js +2 -2
- package/dist/components/markdown.js +1 -1
- package/dist/components/menu.js +1 -1
- package/dist/components/meter.js +1 -1
- package/dist/components/page-header.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/playground.js +16 -16
- package/dist/components/popover.js +2 -2
- package/dist/components/qr-code.js +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/release-art.js +1 -1
- package/dist/components/scroll-area.js +1 -41
- package/dist/components/section.js +1 -1
- package/dist/components/segmented.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/separator.js +1 -1
- package/dist/components/settings.js +2 -2
- package/dist/components/sheet.js +2 -2
- package/dist/components/sidebar.js +1 -1
- package/dist/components/skeleton.js +1 -1
- package/dist/components/slider.js +1 -1
- package/dist/components/stat.js +3 -3
- package/dist/components/status-dot.js +1 -1
- package/dist/components/surface.js +1 -1
- package/dist/components/swap-text.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +2 -2
- package/dist/components/tag.js +1 -1
- package/dist/components/text.js +1 -1
- package/dist/components/theme-image.js +1 -1
- package/dist/components/theme-menu.js +2 -2
- package/dist/components/theme-select.js +1 -1
- package/dist/components/timeline.js +1 -1
- package/dist/components/toast.js +4 -4
- package/dist/components/toc.js +37 -22
- package/dist/components/toc.js.map +1 -1
- package/dist/components/toolbar.js +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/components/visually-hidden.js +1 -1
- package/dist/index.js +88 -86
- package/dist/styles.css +1 -1
- package/dist/types/components/code-block/code-block.d.ts +1 -1
- package/dist/types/components/code-block/indent.d.ts +3 -0
- package/dist/types/components/command-list/command-list.d.ts +1 -0
- package/dist/types/components/command-list/docs.d.ts +1 -0
- package/dist/types/components/command-palette/command-palette.d.ts +1 -0
- package/dist/types/components/command-palette/docs.d.ts +1 -0
- package/dist/types/components/figure/docs.d.ts +12 -0
- package/dist/types/components/figure/figure.d.ts +25 -0
- package/dist/types/components/figure/index.d.ts +1 -0
- package/dist/types/components/table/docs.d.ts +3 -1
- package/dist/types/components/table/table.d.ts +18 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/utils/cn.d.ts +4 -0
- package/dist/utils.js +1 -1
- package/package.json +3 -3
- package/dist/chunks/cn-Isw2DnQX.js.map +0 -1
- package/dist/chunks/code-block-mEH6Sy3h.js.map +0 -1
- package/dist/chunks/command-list-CzMbdtJs.js.map +0 -1
- package/dist/chunks/table-CTxDp7zC.js +0 -67
- package/dist/chunks/table-CTxDp7zC.js.map +0 -1
- package/dist/components/scroll-area.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-list-0RR4DpUe.js","names":["__icon_Tick02Icon","__icon_Search01Icon","MENU_LABEL","MENU_ITEM","cn","useUiText","Icon","OptionCheckbox","Highlight","SEPARATORS","SEPARATOR","wordScore","field","word","at","compactWord","next","last","gaps","i","commandMatch","words","query","lower","fields","f","total","best","KAESO_COMMAND_LIST_VARIANTS","KAESO_COMMAND_LIST_DEFAULT_VARIANTS","SIZES","COARSE","subscribeCoarse","q","onChange","isCoarse","HEADER","EDGE","SEARCH","EMPTY","FALLBACK_VIEWPORT","VIRTUALIZE_ABOVE","CommandListHeightContext","fuzzy","item","visibleGroups","kept","g","groups","items","match","m","b","a","observeWithFallback","observeElementRect","instance","cb","rect","CommandList","ariaLabel","controlledQuery","heightProp","force","t","fromFrame","useContext","height","uid","useId","listId","ownQuery","setOwnQuery","useState","defaultQuery","coarse","useSyncExternalStore","look","size","rowHeight","commands","value","multiple","checks","selected","useMemo","shown","rows","options","spans","first","group","labelled","fits","toolbar","footer","unfiltered","sum","fitted","offsets","out","row","firstEnabled","useCallback","from","step","initialActive","chosen","o","active","setActive","signature","shownFor","setShownFor","activeRef","useRef","scroller","virtual","virtualizer","useVirtualizer","activeRow","keep","defaultRangeExtractor","range","keyboardMove","reveal","option","optionId","align","opened","setQuery","onQueryChange","move","to","page","choose","onSelect","onKeyDown","onInputKeyDown","escapeClears","onEscape","groupLabelId","gi","header","count","counts","isActive","isSelected","state","Tick02Icon","indexes","v","rendered","index","list","empty","className","loading","Search01Icon","searchPrefix","inputProps","placeholder","autoFocus","emptyText","span","top","bottom"],"sources":["../../src/components/command-list/match.ts","../../src/components/command-list/command-list.tsx"],"sourcesContent":["const SEPARATORS = /[\\s\\-_./:@]/g;\nconst SEPARATOR = /[\\s\\-_./:@]/;\n\nfunction wordScore(word: string, field: string): number {\n if (field === word) return 100;\n if (field.startsWith(word)) return 80;\n const at = field.indexOf(word);\n if (at > 0) return SEPARATOR.test(field[at - 1] ?? \"\") ? 70 : 50;\n const compactWord = word.replace(SEPARATORS, \"\");\n if (compactWord && field.replace(SEPARATORS, \"\").includes(compactWord)) return 40;\n if (word.length < 3) return 0;\n let next = 0;\n let last = -1;\n let gaps = 0;\n for (let i = 0; i < field.length && next < word.length; i++) {\n if (field[i] !== word[next]) continue;\n if (last >= 0 && i !== last + 1) gaps += 1;\n last = i;\n next += 1;\n }\n return next < word.length ? 0 : Math.max(1, 30 - gaps * 3);\n}\n\nexport function commandMatch(query: string, fields: readonly string[]): number {\n const words = query.trim().toLowerCase().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return 1;\n const lower = fields.map((f) => f.toLowerCase());\n let total = 0;\n for (const word of words) {\n let best = 0;\n lower.forEach((field, i) => {\n best = Math.max(best, wordScore(word, field) * (i === 0 ? 1 : 0.9));\n });\n if (best === 0) return 0;\n total += best;\n }\n return total / words.length;\n}\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { defaultRangeExtractor, observeElementRect, useVirtualizer, type Range, type Virtualizer } from \"@tanstack/react-virtual\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Tick02Icon as __icon_Tick02Icon, Search01Icon as __icon_Search01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Highlight } from \"../combobox/combobox.js\";\nimport { MENU_HINT, MENU_ITEM, MENU_LABEL } from \"../menu/styles.js\";\nimport { OptionCheckbox } from \"../select/option-checkbox.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { commandMatch } from \"./match.js\";\n\nexport const KAESO_COMMAND_LIST_VARIANTS = {\n height: {\n popover: { classes: \"picker-limits\" },\n inline: {\n classes: \"max-h-360 rounded-group bg-raised shadow-xs\",\n },\n fill: { classes: \"min-h-0 flex-1\" },\n },\n size: {\n md: { classes: \"\" },\n lg: { classes: \"\" },\n },\n} as const;\nexport const KAESO_COMMAND_LIST_DEFAULT_VARIANTS = { height: \"popover\", size: \"md\" } as const;\n\nconst SIZES = {\n md: { search: \"h-44 gap-10 px-16\", input: \"text-body\", row: 34, item: \"\" },\n lg: { search: \"h-56 gap-12 px-20\", input: \"text-body-lg font-regular\", row: 40, item: \"rounded-palette-item gap-12 px-12\" },\n} as const;\n\nexport type CommandListHeight = keyof typeof KAESO_COMMAND_LIST_VARIANTS.height;\n\nexport interface CommandListRowState {\n query: string;\n active: boolean;\n selected: boolean;\n}\n\nexport interface CommandListItem {\n value: string;\n label: string;\n keywords?: readonly string[] | undefined;\n leading?: ReactNode | undefined;\n meta?: ReactNode | undefined;\n render?: ((state: CommandListRowState) => ReactNode) | undefined;\n disabled?: boolean | undefined;\n}\n\nexport interface CommandListGroup {\n id: string;\n label?: string | undefined;\n leading?: ReactNode | undefined;\n count?: ReactNode | undefined;\n loading?: boolean | undefined;\n items: CommandListItem[];\n}\n\nexport interface CommandListProps {\n groups: CommandListGroup[];\n \"aria-label\": string;\n value?: string | readonly string[] | null | undefined;\n multiple?: boolean | undefined;\n onSelect?: ((value: string) => void) | undefined;\n query?: string | undefined;\n defaultQuery?: string | undefined;\n onQueryChange?: ((query: string) => void) | undefined;\n placeholder?: string | undefined;\n emptyText?: ReactNode | undefined;\n toolbar?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n searchPrefix?: ReactNode | undefined;\n loading?: boolean | undefined;\n onInputKeyDown?: ((event: KeyboardEvent<HTMLInputElement>) => void) | undefined;\n size?: keyof typeof KAESO_COMMAND_LIST_VARIANTS.size | undefined;\n height?: CommandListHeight | undefined;\n autoFocus?: boolean | undefined;\n onEscape?: (() => void) | undefined;\n escapeClears?: boolean | undefined;\n match?: ((item: CommandListItem, query: string) => number) | undefined;\n counts?: boolean | undefined;\n inputProps?: { [attribute: `data-${string}`]: string } | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst COARSE = \"(pointer: coarse)\";\nconst subscribeCoarse = (onChange: () => void) => {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const q = window.matchMedia(COARSE);\n q.addEventListener(\"change\", onChange);\n return () => q.removeEventListener(\"change\", onChange);\n};\nconst isCoarse = () => typeof window !== \"undefined\" && !!window.matchMedia?.(COARSE).matches;\n\nconst HEADER = 28;\nconst EDGE = 6;\nconst SEARCH = { md: 44, lg: 56 } as const;\nconst EMPTY = 80;\nconst FALLBACK_VIEWPORT = 480;\nconst VIRTUALIZE_ABOVE = 200;\n\nexport const CommandListHeightContext = /* @__PURE__ */ createContext<CommandListHeight | null>(null);\n\ntype Row = { kind: \"header\"; group: CommandListGroup; gi: number } | { kind: \"item\"; item: CommandListItem; gi: number; option: number; score: number };\n\nconst fuzzy = (item: CommandListItem, query: string) => commandMatch(query, [item.label, ...(item.keywords ?? [])]);\n\nfunction visibleGroups(groups: CommandListGroup[], query: string, match: (item: CommandListItem, query: string) => number) {\n const q = query.trim();\n const kept = (g: { group: CommandListGroup; items: unknown[] }) => g.items.length > 0 || !!g.group.loading;\n if (!q) return groups.map((g) => ({ group: g, items: g.items.map((item) => ({ item, score: 1 })) })).filter(kept);\n return groups\n .map((g, order) => {\n const items = g.items\n .map((item) => ({ item, score: match(item, q) }))\n .filter((m) => m.score > 0)\n .sort((a, b) => b.score - a.score);\n return { group: g, items, order, best: items[0]?.score ?? 0 };\n })\n .filter(kept)\n .sort((a, b) => b.best - a.best || a.order - b.order);\n}\n\nfunction observeWithFallback(instance: Virtualizer<HTMLDivElement, Element>, cb: (rect: { width: number; height: number }) => void) {\n return observeElementRect(instance, (rect) => cb(rect.height > 0 ? rect : { width: rect.width, height: FALLBACK_VIEWPORT }));\n}\n\nexport const CommandList = /* @__PURE__ */ forwardRef<HTMLInputElement, CommandListProps>(function CommandList(\n {\n groups,\n \"aria-label\": ariaLabel,\n value,\n multiple,\n onSelect,\n query: controlledQuery,\n defaultQuery = \"\",\n onQueryChange,\n placeholder,\n emptyText,\n toolbar,\n footer,\n searchPrefix,\n loading,\n onInputKeyDown,\n size = \"md\",\n height: heightProp,\n autoFocus,\n onEscape,\n escapeClears = true,\n match = fuzzy,\n counts = true,\n inputProps,\n className,\n \"data-force\": force,\n },\n ref,\n) {\n const t = useUiText();\n const fromFrame = useContext(CommandListHeightContext);\n const height = heightProp ?? fromFrame ?? \"popover\";\n const uid = useId();\n const listId = `${uid}-list`;\n const [ownQuery, setOwnQuery] = useState(defaultQuery);\n const query = controlledQuery ?? ownQuery;\n const coarse = useSyncExternalStore(subscribeCoarse, isCoarse, () => false);\n const look = SIZES[size];\n const rowHeight = coarse ? Math.max(44, look.row) : look.row;\n const commands = value === undefined && !multiple;\n const checks = !multiple && !commands;\n const selected = useMemo(() => new Set(value == null ? [] : typeof value === \"string\" ? [value] : value), [value]);\n\n const shown = useMemo(() => visibleGroups(groups, query, match), [groups, query, match]);\n const { rows, options, spans } = useMemo(() => {\n const rows: Row[] = [];\n const options: { row: number; item: CommandListItem; gi: number }[] = [];\n const spans: { first: number; last: number }[] = [];\n shown.forEach(({ group, items }, gi) => {\n const first = rows.length;\n if (group.label) rows.push({ kind: \"header\", group, gi });\n for (const { item, score } of items) {\n options.push({ row: rows.length, item, gi });\n rows.push({ kind: \"item\", item, gi, option: options.length - 1, score });\n }\n spans.push({ first, last: rows.length - 1 });\n });\n return { rows, options, spans };\n }, [shown]);\n const labelled = shown.some((g) => g.group.label);\n const fits = height === \"inline\" && !toolbar && !footer;\n const unfiltered = useMemo(\n () => (fits ? visibleGroups(groups, \"\", match).reduce((sum, { group, items }) => sum + (group.label ? HEADER : 0) + items.length * rowHeight, 0) : 0),\n [fits, groups, match, rowHeight],\n );\n const fitted = fits ? { height: SEARCH[size] + 2 * EDGE + Math.max(unfiltered, EMPTY) } : undefined;\n const offsets = useMemo(() => {\n const out = [EDGE];\n for (const row of rows) out.push((out[out.length - 1] ?? EDGE) + (row.kind === \"header\" ? HEADER : rowHeight));\n return out;\n }, [rows, rowHeight]);\n\n const firstEnabled = useCallback(\n (from: number, step: 1 | -1) => {\n for (let i = from; i >= 0 && i < options.length; i += step) if (!options[i]?.item.disabled) return i;\n return -1;\n },\n [options],\n );\n const initialActive = () => {\n const chosen = options.findIndex((o) => selected.has(o.item.value) && !o.item.disabled);\n return chosen >= 0 ? chosen : firstEnabled(0, 1);\n };\n const [active, setActive] = useState(initialActive);\n const signature = useMemo(() => `${query.trim()}\\u0000${options.map((o) => o.item.value).join(\"\\u0000\")}`, [options, query]);\n const [shownFor, setShownFor] = useState(signature);\n if (shownFor !== signature) {\n setShownFor(signature);\n setActive(query.trim() ? firstEnabled(0, 1) : initialActive());\n }\n const activeRef = useRef(active);\n activeRef.current = active;\n\n const scroller = useRef<HTMLDivElement | null>(null);\n const virtual = rows.length > VIRTUALIZE_ABOVE;\n const virtualizer = useVirtualizer<HTMLDivElement, Element>({\n enabled: virtual,\n count: rows.length,\n getScrollElement: () => scroller.current,\n estimateSize: (i) => (rows[i]?.kind === \"header\" ? HEADER : rowHeight),\n overscan: 8,\n useFlushSync: false,\n paddingStart: EDGE,\n paddingEnd: EDGE,\n scrollPaddingStart: labelled ? HEADER : 0,\n observeElementRect: observeWithFallback,\n initialRect: { width: 0, height: FALLBACK_VIEWPORT },\n rangeExtractor: (range: Range) => {\n const activeRow = options[activeRef.current]?.row;\n const keep = defaultRangeExtractor(range);\n return activeRow === undefined || keep.includes(activeRow) ? keep : [...keep, activeRow].sort((a, b) => a - b);\n },\n });\n const keyboardMove = useRef(false);\n useLayoutEffect(() => {\n if (virtual) virtualizer.measure();\n }, [rowHeight, virtualizer, virtual]);\n const reveal = (row: number, align: \"auto\" | \"center\") => {\n if (virtual) return virtualizer.scrollToIndex(row, { align });\n const option = options.find((o) => o.row === row);\n const el = option ? document.getElementById(optionId(options.indexOf(option))) : null;\n el?.scrollIntoView?.({ block: align === \"auto\" ? \"nearest\" : \"center\" });\n };\n useEffect(() => {\n const row = options[active]?.row;\n if (row === undefined) return;\n if (keyboardMove.current) {\n keyboardMove.current = false;\n reveal(row, \"auto\");\n }\n });\n const opened = useRef(false);\n useLayoutEffect(() => {\n if (opened.current) return;\n opened.current = true;\n const row = options[active]?.row;\n if (row !== undefined && row > 0) reveal(row, \"center\");\n });\n\n const setQuery = (next: string) => {\n if (controlledQuery === undefined) setOwnQuery(next);\n onQueryChange?.(next);\n };\n const move = (to: number) => {\n if (to < 0) return;\n keyboardMove.current = true;\n setActive(to);\n };\n const page = Math.max(1, Math.floor((scroller.current?.clientHeight || FALLBACK_VIEWPORT) / rowHeight) - 1);\n const choose = (i: number) => {\n const o = options[i];\n if (!o || o.item.disabled) return;\n setActive(i);\n onSelect?.(o.item.value);\n };\n const onKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n onInputKeyDown?.(e);\n if (e.defaultPrevented || e.altKey || e.metaKey || e.ctrlKey) return;\n const last = options.length - 1;\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n move(active < 0 ? firstEnabled(0, 1) : firstEnabled(active + 1, 1) >= 0 ? firstEnabled(active + 1, 1) : firstEnabled(0, 1));\n break;\n case \"ArrowUp\":\n e.preventDefault();\n move(active < 0 ? firstEnabled(last, -1) : firstEnabled(active - 1, -1) >= 0 ? firstEnabled(active - 1, -1) : firstEnabled(last, -1));\n break;\n case \"Home\":\n if (e.shiftKey) return;\n e.preventDefault();\n move(firstEnabled(0, 1));\n break;\n case \"End\":\n if (e.shiftKey) return;\n e.preventDefault();\n move(firstEnabled(last, -1));\n break;\n case \"PageDown\":\n e.preventDefault();\n move(firstEnabled(Math.min(last, Math.max(active, 0) + page), -1));\n break;\n case \"PageUp\":\n e.preventDefault();\n move(firstEnabled(Math.max(0, active - page), 1));\n break;\n case \"Enter\":\n if (active < 0) return;\n e.preventDefault();\n e.stopPropagation();\n choose(active);\n break;\n case \"Escape\":\n if (query && escapeClears) {\n e.preventDefault();\n e.stopPropagation();\n setQuery(\"\");\n } else if (onEscape) {\n e.preventDefault();\n e.stopPropagation();\n onEscape();\n }\n break;\n }\n };\n\n const optionId = (i: number) => `${uid}-${i}-${(options[i]?.item.value ?? \"\").replace(/\\s/g, \"_\")}`;\n const groupLabelId = (gi: number) => `${uid}-g-${gi}`;\n const header = (group: CommandListGroup, gi: number) => {\n const count = !counts ? undefined : query.trim() ? (shown[gi]?.items.length ?? 0) : group.count;\n return (\n <div aria-hidden className={cn(MENU_LABEL, \"sticky top-0 z-10 gap-10 bg-raised px-16\")}>\n {group.leading}\n <span id={groupLabelId(gi)} className=\"min-w-0 truncate\">\n {group.label}\n </span>\n {count !== undefined && <span className=\"ml-auto shrink-0 font-regular text-fg-tertiary tabular\">{count}</span>}\n {count !== undefined && checks && <span className=\"size-16 shrink-0\" />}\n </div>\n );\n };\n const option = (row: Extract<Row, { kind: \"item\" }>) => {\n const { item, option: i } = row;\n const isActive = i === active;\n const isSelected = commands ? isActive : selected.has(item.value);\n const state = { query, active: isActive, selected: isSelected };\n return (\n <div\n id={optionId(i)}\n role=\"option\"\n aria-selected={isSelected}\n aria-setsize={options.length}\n aria-posinset={i + 1}\n {...(item.disabled ? { \"aria-disabled\": true, \"data-disabled\": \"\" } : {})}\n {...(isActive ? { \"data-highlighted\": \"\" } : {})}\n {...(isSelected ? { \"data-selected\": \"\" } : {})}\n onMouseMove={() => !isActive && !item.disabled && setActive(i)}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => choose(i)}\n className={cn(MENU_ITEM, \"group/opt mx-6 w-auto\", look.item)}\n >\n {multiple && <OptionCheckbox />}\n {item.leading}\n {item.render ? (\n <span className=\"flex min-w-0 flex-1 items-center gap-8\">{item.render(state)}</span>\n ) : (\n <span className=\"min-w-0 flex-1 truncate\">\n <Highlight text={item.label} query={query} />\n </span>\n )}\n {item.meta !== undefined && <span className={cn(MENU_HINT, \"pl-8 font-regular\")}>{item.meta}</span>}\n {checks && (\n <span aria-hidden className={cn(\"flex size-16 shrink-0 items-center justify-center text-fg\", !isSelected && \"opacity-0\")}>\n <Icon icon={__icon_Tick02Icon} size=\"sm\" />\n </span>\n )}\n </div>\n );\n };\n\n const indexes = virtual ? virtualizer.getVirtualItems().map((v) => v.index) : rows.map((_, i) => i);\n const rendered = new Map<number, number[]>();\n for (const index of indexes) {\n const row = rows[index];\n if (!row) continue;\n const list = rendered.get(row.gi) ?? [];\n if (row.kind === \"item\") list.push(index);\n rendered.set(row.gi, list);\n }\n const empty = rows.length === 0;\n return (\n <div\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\"relative flex min-w-0 flex-col overflow-hidden\", KAESO_COMMAND_LIST_VARIANTS.height[height].classes, className)}\n {...(fitted ? { style: fitted } : {})}\n >\n {loading && (\n <span aria-hidden className=\"absolute inset-x-0 top-0 h-2 overflow-hidden\">\n <span className=\"block h-full w-1/3 animate-indeterminate bg-fg-tertiary\" />\n </span>\n )}\n <div\n onMouseDown={(e) => {\n if (e.target !== e.currentTarget) return;\n e.preventDefault();\n e.currentTarget.querySelector(\"input\")?.focus();\n }}\n className={cn(\"flex shrink-0 cursor-text items-center hairline-b\", look.search)}\n >\n <Icon icon={__icon_Search01Icon} size={size === \"lg\" ? \"md\" : \"sm\"} className=\"text-fg-tertiary\" />\n {searchPrefix}\n <input\n ref={ref}\n {...inputProps}\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-label={placeholder ?? t(\"commandList.search\", \"Search\")}\n {...(active >= 0 && options.length > 0 ? { \"aria-activedescendant\": optionId(active) } : {})}\n {...(autoFocus ? { autoFocus: true, \"data-autofocus\": \"\" } : {})}\n type=\"text\"\n autoComplete=\"off\"\n spellCheck={false}\n placeholder={placeholder ?? t(\"commandList.search\", \"Search\")}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={onKeyDown}\n className={cn(\"min-w-0 flex-1 bg-transparent text-fg outline-none placeholder:text-fg-tertiary\", look.input)}\n />\n </div>\n {toolbar && <div className=\"flex shrink-0 flex-wrap items-center gap-8 px-12 py-8 hairline-b\">{toolbar}</div>}\n <div\n ref={scroller}\n id={listId}\n {...(empty\n ? { role: \"status\" }\n : { role: \"listbox\", \"aria-label\": ariaLabel, ...(multiple ? { \"aria-multiselectable\": true } : {}), ...(loading ? { \"aria-busy\": true } : {}) })}\n data-dialog-body=\"\"\n {...(labelled ? { style: { scrollPaddingTop: HEADER } } : {})}\n className={cn(\"min-h-0 overflow-y-auto overscroll-contain scrollbar-quiet\", height === \"popover\" ? \"flex-initial\" : \"flex-1\")}\n >\n {empty ? (\n <div className=\"flex h-80 items-center justify-center px-16 text-center text-body text-fg-secondary\">\n {loading ? t(\"commandList.loading\", \"Loading…\") : (emptyText ?? t(\"commandList.noResults\", \"No results\"))}\n </div>\n ) : (\n <div role=\"presentation\" className=\"relative w-full\" style={{ height: (offsets[rows.length] ?? 0) + EDGE }}>\n {[...rendered].map(([gi, indexes]) => {\n const span = spans[gi];\n const group = shown[gi]?.group;\n if (!span || !group) return null;\n const top = offsets[span.first] ?? 0;\n const bottom = offsets[span.last + 1] ?? top;\n return (\n <div\n key={group.id}\n {...(group.label ? { role: \"group\", \"aria-labelledby\": groupLabelId(gi) } : { role: \"presentation\" })}\n className=\"absolute left-0 w-full\"\n style={{ top, height: bottom - top }}\n >\n {group.label && header(group, gi)}\n {indexes.map((index) => {\n const row = rows[index];\n return row?.kind === \"item\" ? (\n <div\n key={index}\n role=\"presentation\"\n className=\"absolute left-0 w-full\"\n style={{ top: (offsets[index] ?? 0) - top, height: (offsets[index + 1] ?? 0) - (offsets[index] ?? 0) }}\n >\n {option(row)}\n </div>\n ) : null;\n })}\n </div>\n );\n })}\n </div>\n )}\n </div>\n {footer}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") CommandList.displayName = \"CommandList\";\n"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "./cn-
|
|
2
|
+
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
3
|
import { i as t } from "./context-BELWW79w.js";
|
|
4
|
-
import { t as n } from "./icon-
|
|
5
|
-
import { r } from "./tooltip-
|
|
4
|
+
import { t as n } from "./icon-D7ja-_Yk.js";
|
|
5
|
+
import { r } from "./tooltip-BMQ9BtPp.js";
|
|
6
6
|
import { t as i } from "./use-truncated-CW0hByYt.js";
|
|
7
|
-
import { n as a } from "./button-
|
|
7
|
+
import { n as a } from "./button-Dzu7_csE.js";
|
|
8
8
|
import { t as o } from "./use-copy-Dm2ncvMX.js";
|
|
9
9
|
import { forwardRef as s, useCallback as c, useLayoutEffect as l, useRef as u, useState as d } from "react";
|
|
10
10
|
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
@@ -139,4 +139,4 @@ process.env.NODE_ENV !== "production" && (E.displayName = "InlineCopyText");
|
|
|
139
139
|
//#endregion
|
|
140
140
|
export { y as a, b as i, v as n, _ as o, E as r, g as s, x as t };
|
|
141
141
|
|
|
142
|
-
//# sourceMappingURL=copy-button-
|
|
142
|
+
//# sourceMappingURL=copy-button-7-irieJw.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy-button-Cdea0wKl.js","names":["__icon_Tick02Icon","__icon_Copy01Icon","cn","useUiText","Icon","useTruncated","Button","useCopy","KAESO_COPY_BUTTON_VARIANTS","KAESO_COPY_BUTTON_DEFAULT_VARIANTS","CopyButton","labelProp","props","hover","setHover","useState","t","label","done","Tooltip","copied","Tick02Icon","Copy01Icon","copy","value","onCopy","KAESO_CLIPBOARD_TEXT_VARIANTS","KAESO_CLIPBOARD_TEXT_DEFAULT_VARIANTS","ClipboardText","size","className","display","ICON_ROOM","sharesLine","sibling","style","parent","hasRoomAfter","node","el","overflow","useRoomAfter","button","setButton","room","setRoom","useLayoutEffect","touch","check","watch","InlineCopyText","buttonRef","useCallback","ref","text","useRef","cut","children"],"sources":["../../src/components/copy-button/copy-button.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { forwardRef, useCallback, useLayoutEffect, useRef, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useCopy } from \"../../hooks/use-copy.js\";\nimport { useTruncated } from \"../../hooks/use-truncated.js\";\nimport { Button, type ButtonSize } from \"../button/button.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Tick02Icon as __icon_Tick02Icon, Copy01Icon as __icon_Copy01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_COPY_BUTTON_VARIANTS = {\n variant: {\n ghost: { classes: \"material-ghost\" },\n secondary: { classes: \"material-secondary\" },\n },\n size: {\n xs: { classes: \"size-24\" },\n sm: { classes: \"size-32\" },\n md: { classes: \"size-36\" },\n lg: { classes: \"size-40\" },\n xl: { classes: \"size-48\" },\n },\n} as const;\nexport const KAESO_COPY_BUTTON_DEFAULT_VARIANTS = { variant: \"ghost\", size: \"sm\" } as const;\n\nexport interface CopyButtonProps {\n value: string;\n label?: string | undefined;\n size?: ButtonSize | undefined;\n variant?: keyof typeof KAESO_COPY_BUTTON_VARIANTS.variant | undefined;\n onCopy?: ((value: string) => void) | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const CopyButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, CopyButtonProps>(function CopyButton(\n { value, label: labelProp, size = \"sm\", variant = \"ghost\", onCopy, className, ...props },\n ref,\n) {\n const { copied, copy } = useCopy();\n const [hover, setHover] = useState(false);\n const t = useUiText();\n const label = labelProp ?? t(\"copyButton.copy\", \"Copy\");\n const done = t(\"copyButton.copied\", \"Copied\");\n return (\n <Tooltip content={copied ? done : label} open={copied || hover} onOpenChange={setHover}>\n <Button\n ref={ref as React.Ref<HTMLButtonElement & HTMLAnchorElement>}\n shape=\"circle\"\n size={size}\n variant={variant}\n icon={copied ? __icon_Tick02Icon : __icon_Copy01Icon}\n aria-label={copied ? done : label}\n className={className}\n onClick={async () => {\n if (await copy(value)) onCopy?.(value);\n }}\n {...props}\n />\n </Tooltip>\n );\n});\nif (process.env.NODE_ENV !== \"production\") CopyButton.displayName = \"CopyButton\";\n\nexport const KAESO_CLIPBOARD_TEXT_VARIANTS = {\n size: {\n sm: { classes: \"h-32 pl-12 pr-0 text-small\" },\n md: { classes: \"h-36 pl-16 pr-2 text-small\" },\n lg: { classes: \"h-40 pl-18 pr-4 text-small\" },\n },\n} as const;\nexport const KAESO_CLIPBOARD_TEXT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface ClipboardTextProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n value: string;\n display?: ReactNode | undefined;\n label?: string | undefined;\n size?: keyof typeof KAESO_CLIPBOARD_TEXT_VARIANTS.size | undefined;\n}\n\nexport const ClipboardText = /* @__PURE__ */ forwardRef<HTMLDivElement, ClipboardTextProps>(function ClipboardText(\n { value, display, label, size = \"md\", className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\"inline-flex min-w-0 max-w-full items-center gap-8 rounded-pill bg-fill-1\", KAESO_CLIPBOARD_TEXT_VARIANTS.size[size].classes, className)}\n {...props}\n >\n <span className=\"mono min-w-0 flex-1 truncate text-fg select-all\">{display ?? value}</span>\n <CopyButton value={value} label={label} size=\"sm\" />\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ClipboardText.displayName = \"ClipboardText\";\n\nexport interface InlineCopyTextProps extends Omit<HTMLAttributes<HTMLButtonElement>, \"children\" | \"onCopy\"> {\n value: string;\n children?: ReactNode | undefined;\n label?: string | undefined;\n onCopy?: ((value: string) => void) | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst ICON_ROOM = 18;\n\nfunction sharesLine(sibling: Node, parent: CSSStyleDeclaration): boolean {\n if (sibling.nodeType === Node.TEXT_NODE) return !!sibling.textContent?.trim();\n if (!(sibling instanceof Element)) return false;\n const style = getComputedStyle(sibling);\n if (style.display === \"none\" || style.position === \"absolute\" || style.position === \"fixed\") return false;\n if (parent.display.endsWith(\"flex\")) return !parent.flexDirection.startsWith(\"column\");\n if (parent.display === \"block\" || parent.display === \"flow-root\" || parent.display === \"list-item\") return style.display.startsWith(\"inline\");\n return true;\n}\n\nfunction hasRoomAfter(el: Element): boolean {\n let node = el;\n for (let parent = el.parentElement; parent; node = parent, parent = parent.parentElement) {\n const style = getComputedStyle(parent);\n for (let sibling = node.nextSibling; sibling; sibling = sibling.nextSibling) if (sharesLine(sibling, style)) return false;\n if ((parseFloat(style.direction === \"rtl\" ? style.paddingLeft : style.paddingRight) || 0) >= ICON_ROOM) return true;\n const overflow = style.overflowX || style.overflow;\n if (overflow && overflow !== \"visible\") return false;\n }\n return true;\n}\n\nfunction useRoomAfter() {\n const [button, setButton] = useState<HTMLButtonElement | null>(null);\n const [room, setRoom] = useState(false);\n useLayoutEffect(() => {\n const parent = button?.parentElement;\n if (!button || !parent) return;\n const touch = typeof window.matchMedia === \"function\" ? window.matchMedia(\"(pointer: coarse)\") : null;\n const check = () => setRoom(!touch?.matches && hasRoomAfter(button));\n check();\n const watch = new MutationObserver(check);\n watch.observe(parent, { childList: true });\n touch?.addEventListener(\"change\", check);\n return () => {\n watch.disconnect();\n touch?.removeEventListener(\"change\", check);\n };\n }, [button]);\n return [room, setButton] as const;\n}\n\nexport const InlineCopyText = /* @__PURE__ */ forwardRef<HTMLButtonElement, InlineCopyTextProps>(function InlineCopyText(\n { value, children, label, onCopy, className, ...props },\n ref,\n) {\n const { copied, copy } = useCopy();\n const [hover, setHover] = useState(false);\n const [room, setButton] = useRoomAfter();\n const buttonRef = useCallback(\n (el: HTMLButtonElement | null) => {\n setButton(el);\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n },\n [ref, setButton],\n );\n const text = useRef<HTMLSpanElement>(null);\n const cut = useTruncated(text);\n const t = useUiText();\n const done = t(\"copyButton.copied\", \"Copied\");\n return (\n <Tooltip\n content={copied ? done : cut ? value : (label ?? t(\"copyButton.copy\", \"Copy\"))}\n shape={cut && !copied ? \"multiline\" : \"pill\"}\n open={copied || hover}\n onOpenChange={setHover}\n >\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={async () => {\n if (await copy(value)) onCopy?.(value);\n }}\n className={cn(\n \"group/copy relative -mx-4 inline-flex max-w-full-bleed-4 min-w-0 items-center gap-4 rounded-code px-4 align-baseline mono text-small text-fg transition-control focus-ring tap-target\",\n \"hover:bg-fill-1 active:bg-fill-2 cursor-copy\",\n className,\n )}\n {...props}\n >\n <span ref={text} className=\"min-w-0 truncate\">\n {children ?? value}\n </span>\n <Icon\n icon={copied ? __icon_Tick02Icon : __icon_Copy01Icon}\n size=\"xs\"\n className={cn(\n room && \"pointer-events-none absolute start-full group-hover/copy:pointer-events-auto group-focus-visible/copy:pointer-events-auto\",\n \"text-fg-tertiary opacity-0 transition-control group-hover/copy:opacity-100 coarse:opacity-100 group-focus-visible/copy:opacity-100\",\n copied && \"pointer-events-auto opacity-100 text-fg\",\n )}\n />\n <span className=\"sr-only\" aria-live=\"polite\">\n {copied ? done : \"\"}\n </span>\n </button>\n </Tooltip>\n );\n});\nif (process.env.NODE_ENV !== \"production\") InlineCopyText.displayName = \"InlineCopyText\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"copy-button-7-irieJw.js","names":["__icon_Tick02Icon","__icon_Copy01Icon","cn","useUiText","Icon","useTruncated","Button","useCopy","KAESO_COPY_BUTTON_VARIANTS","KAESO_COPY_BUTTON_DEFAULT_VARIANTS","CopyButton","labelProp","props","hover","setHover","useState","t","label","done","Tooltip","copied","Tick02Icon","Copy01Icon","copy","value","onCopy","KAESO_CLIPBOARD_TEXT_VARIANTS","KAESO_CLIPBOARD_TEXT_DEFAULT_VARIANTS","ClipboardText","size","className","display","ICON_ROOM","sharesLine","sibling","style","parent","hasRoomAfter","node","el","overflow","useRoomAfter","button","setButton","room","setRoom","useLayoutEffect","touch","check","watch","InlineCopyText","buttonRef","useCallback","ref","text","useRef","cut","children"],"sources":["../../src/components/copy-button/copy-button.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { forwardRef, useCallback, useLayoutEffect, useRef, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useCopy } from \"../../hooks/use-copy.js\";\nimport { useTruncated } from \"../../hooks/use-truncated.js\";\nimport { Button, type ButtonSize } from \"../button/button.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Tick02Icon as __icon_Tick02Icon, Copy01Icon as __icon_Copy01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_COPY_BUTTON_VARIANTS = {\n variant: {\n ghost: { classes: \"material-ghost\" },\n secondary: { classes: \"material-secondary\" },\n },\n size: {\n xs: { classes: \"size-24\" },\n sm: { classes: \"size-32\" },\n md: { classes: \"size-36\" },\n lg: { classes: \"size-40\" },\n xl: { classes: \"size-48\" },\n },\n} as const;\nexport const KAESO_COPY_BUTTON_DEFAULT_VARIANTS = { variant: \"ghost\", size: \"sm\" } as const;\n\nexport interface CopyButtonProps {\n value: string;\n label?: string | undefined;\n size?: ButtonSize | undefined;\n variant?: keyof typeof KAESO_COPY_BUTTON_VARIANTS.variant | undefined;\n onCopy?: ((value: string) => void) | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const CopyButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, CopyButtonProps>(function CopyButton(\n { value, label: labelProp, size = \"sm\", variant = \"ghost\", onCopy, className, ...props },\n ref,\n) {\n const { copied, copy } = useCopy();\n const [hover, setHover] = useState(false);\n const t = useUiText();\n const label = labelProp ?? t(\"copyButton.copy\", \"Copy\");\n const done = t(\"copyButton.copied\", \"Copied\");\n return (\n <Tooltip content={copied ? done : label} open={copied || hover} onOpenChange={setHover}>\n <Button\n ref={ref as React.Ref<HTMLButtonElement & HTMLAnchorElement>}\n shape=\"circle\"\n size={size}\n variant={variant}\n icon={copied ? __icon_Tick02Icon : __icon_Copy01Icon}\n aria-label={copied ? done : label}\n className={className}\n onClick={async () => {\n if (await copy(value)) onCopy?.(value);\n }}\n {...props}\n />\n </Tooltip>\n );\n});\nif (process.env.NODE_ENV !== \"production\") CopyButton.displayName = \"CopyButton\";\n\nexport const KAESO_CLIPBOARD_TEXT_VARIANTS = {\n size: {\n sm: { classes: \"h-32 pl-12 pr-0 text-small\" },\n md: { classes: \"h-36 pl-16 pr-2 text-small\" },\n lg: { classes: \"h-40 pl-18 pr-4 text-small\" },\n },\n} as const;\nexport const KAESO_CLIPBOARD_TEXT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface ClipboardTextProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n value: string;\n display?: ReactNode | undefined;\n label?: string | undefined;\n size?: keyof typeof KAESO_CLIPBOARD_TEXT_VARIANTS.size | undefined;\n}\n\nexport const ClipboardText = /* @__PURE__ */ forwardRef<HTMLDivElement, ClipboardTextProps>(function ClipboardText(\n { value, display, label, size = \"md\", className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\"inline-flex min-w-0 max-w-full items-center gap-8 rounded-pill bg-fill-1\", KAESO_CLIPBOARD_TEXT_VARIANTS.size[size].classes, className)}\n {...props}\n >\n <span className=\"mono min-w-0 flex-1 truncate text-fg select-all\">{display ?? value}</span>\n <CopyButton value={value} label={label} size=\"sm\" />\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ClipboardText.displayName = \"ClipboardText\";\n\nexport interface InlineCopyTextProps extends Omit<HTMLAttributes<HTMLButtonElement>, \"children\" | \"onCopy\"> {\n value: string;\n children?: ReactNode | undefined;\n label?: string | undefined;\n onCopy?: ((value: string) => void) | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst ICON_ROOM = 18;\n\nfunction sharesLine(sibling: Node, parent: CSSStyleDeclaration): boolean {\n if (sibling.nodeType === Node.TEXT_NODE) return !!sibling.textContent?.trim();\n if (!(sibling instanceof Element)) return false;\n const style = getComputedStyle(sibling);\n if (style.display === \"none\" || style.position === \"absolute\" || style.position === \"fixed\") return false;\n if (parent.display.endsWith(\"flex\")) return !parent.flexDirection.startsWith(\"column\");\n if (parent.display === \"block\" || parent.display === \"flow-root\" || parent.display === \"list-item\") return style.display.startsWith(\"inline\");\n return true;\n}\n\nfunction hasRoomAfter(el: Element): boolean {\n let node = el;\n for (let parent = el.parentElement; parent; node = parent, parent = parent.parentElement) {\n const style = getComputedStyle(parent);\n for (let sibling = node.nextSibling; sibling; sibling = sibling.nextSibling) if (sharesLine(sibling, style)) return false;\n if ((parseFloat(style.direction === \"rtl\" ? style.paddingLeft : style.paddingRight) || 0) >= ICON_ROOM) return true;\n const overflow = style.overflowX || style.overflow;\n if (overflow && overflow !== \"visible\") return false;\n }\n return true;\n}\n\nfunction useRoomAfter() {\n const [button, setButton] = useState<HTMLButtonElement | null>(null);\n const [room, setRoom] = useState(false);\n useLayoutEffect(() => {\n const parent = button?.parentElement;\n if (!button || !parent) return;\n const touch = typeof window.matchMedia === \"function\" ? window.matchMedia(\"(pointer: coarse)\") : null;\n const check = () => setRoom(!touch?.matches && hasRoomAfter(button));\n check();\n const watch = new MutationObserver(check);\n watch.observe(parent, { childList: true });\n touch?.addEventListener(\"change\", check);\n return () => {\n watch.disconnect();\n touch?.removeEventListener(\"change\", check);\n };\n }, [button]);\n return [room, setButton] as const;\n}\n\nexport const InlineCopyText = /* @__PURE__ */ forwardRef<HTMLButtonElement, InlineCopyTextProps>(function InlineCopyText(\n { value, children, label, onCopy, className, ...props },\n ref,\n) {\n const { copied, copy } = useCopy();\n const [hover, setHover] = useState(false);\n const [room, setButton] = useRoomAfter();\n const buttonRef = useCallback(\n (el: HTMLButtonElement | null) => {\n setButton(el);\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n },\n [ref, setButton],\n );\n const text = useRef<HTMLSpanElement>(null);\n const cut = useTruncated(text);\n const t = useUiText();\n const done = t(\"copyButton.copied\", \"Copied\");\n return (\n <Tooltip\n content={copied ? done : cut ? value : (label ?? t(\"copyButton.copy\", \"Copy\"))}\n shape={cut && !copied ? \"multiline\" : \"pill\"}\n open={copied || hover}\n onOpenChange={setHover}\n >\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={async () => {\n if (await copy(value)) onCopy?.(value);\n }}\n className={cn(\n \"group/copy relative -mx-4 inline-flex max-w-full-bleed-4 min-w-0 items-center gap-4 rounded-code px-4 align-baseline mono text-small text-fg transition-control focus-ring tap-target\",\n \"hover:bg-fill-1 active:bg-fill-2 cursor-copy\",\n className,\n )}\n {...props}\n >\n <span ref={text} className=\"min-w-0 truncate\">\n {children ?? value}\n </span>\n <Icon\n icon={copied ? __icon_Tick02Icon : __icon_Copy01Icon}\n size=\"xs\"\n className={cn(\n room && \"pointer-events-none absolute start-full group-hover/copy:pointer-events-auto group-focus-visible/copy:pointer-events-auto\",\n \"text-fg-tertiary opacity-0 transition-control group-hover/copy:opacity-100 coarse:opacity-100 group-focus-visible/copy:opacity-100\",\n copied && \"pointer-events-auto opacity-100 text-fg\",\n )}\n />\n <span className=\"sr-only\" aria-live=\"polite\">\n {copied ? done : \"\"}\n </span>\n </button>\n </Tooltip>\n );\n});\nif (process.env.NODE_ENV !== \"production\") InlineCopyText.displayName = \"InlineCopyText\";\n"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "./cn-
|
|
2
|
+
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
3
|
import { i as t, n } from "./context-BELWW79w.js";
|
|
4
4
|
import { t as r } from "./observe-resize-DhxhmoyB.js";
|
|
5
|
-
import { n as i } from "./button-
|
|
6
|
-
import { r as a } from "./skeleton-
|
|
5
|
+
import { n as i } from "./button-Dzu7_csE.js";
|
|
6
|
+
import { r as a } from "./skeleton-Dcz57Zyp.js";
|
|
7
7
|
import { useEffect as o, useLayoutEffect as s, useRef as c, useState as l } from "react";
|
|
8
8
|
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
9
9
|
import { motion as f, tokenKindSeries as p, tokenKindTint as m } from "@logicplanes/kaeso-tokens";
|
|
@@ -463,4 +463,4 @@ var te = (e, t, r = n) => r("chart.liveLine", "{heading}: {values}", {
|
|
|
463
463
|
//#endregion
|
|
464
464
|
export { h as A, w as C, D, Q as E, j as O, I as S, A as T, W as _, X as a, S as b, F as c, _ as d, x as f, te as g, H as h, q as i, B as j, M as k, T as l, Z as m, N as n, Y as o, G as p, $ as r, K as s, J as t, g as u, L as v, E as w, b as x, C as y };
|
|
465
465
|
|
|
466
|
-
//# sourceMappingURL=core-
|
|
466
|
+
//# sourceMappingURL=core-Bl9NrBLS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-FtMDNELx.js","names":["cn","useUiText","observeResize","Button","Skeleton","wholeTicks","values","ticks","VIZ","VIZ_THIN","hash","h","i","s","NEAR","seriesIndex","id","assignSeries","out","used","clash","k","ids","keys","seriesColors","thin","seriesColor","tokenKindColor","tokenKindTint","tokenKindSeries","TOKEN_KIND_ORDER","tokenKindLabel","englishText","kind","useSize","el","setEl","useState","size","setSize","useLayoutEffect","set","ease","t","reducedMotion","mix","to","from","v","tweens","useTweened","key","tween","setTween","current","still","drawn","running","useEffect","start","raf","step","motion","useTweenedScale","any","top","ChartFrame","asTable","setAsTable","className","label","state","table","height","DataTablePlain","children","legend","toggle","caption","c","r","j","Swatch","shape","off","color","tickLabel","format","readableTicks","n","count","scale","lo","hi","dayNumber","d","m","yearOfDay","yearStarts","days","dates","prev","WIDE","labelWidth","em","ch","AXIS","LABEL_GAP","placeTimeLabels","placed","width","anchor","right","x","left","clear","a","b","kept","l","axisLabelIndexes","labels","fits","edges","room","every","starts","stride","score","p","best","Legend","items","hidden","it","onToggle","onHover","ChartTooltip","useRef","own","setOwn","w","heading","rows","visible","flip","wanted","xLeft","y","KAESO_CHARTS_VARIANTS","KAESO_CHARTS_DEFAULT_VARIANTS","chartKeyIndex","back","vertical","forward","index","useChartKeys","setIndex","options","keyboard","next","e","ChartLive","liveLine"],"sources":["../../src/components/charts/core.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { useEffect, useLayoutEffect, useRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { motion, tokenKindSeries, tokenKindTint } from \"@logicplanes/kaeso-tokens\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { Button } from \"../button/button.js\";\nimport { englishText, useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport function wholeTicks(ticks: number[], values: number[]): number[] {\n return values.every(Number.isInteger) ? ticks.filter(Number.isInteger) : ticks;\n}\nexport const VIZ = [\n \"var(--k-viz-1)\",\n \"var(--k-viz-2)\",\n \"var(--k-viz-3)\",\n \"var(--k-viz-4)\",\n \"var(--k-viz-5)\",\n \"var(--k-viz-6)\",\n \"var(--k-viz-7)\",\n \"var(--k-viz-8)\",\n] as const;\nexport const VIZ_THIN = [\n \"var(--k-viz-thin-1)\",\n \"var(--k-viz-thin-2)\",\n \"var(--k-viz-thin-3)\",\n \"var(--k-viz-thin-4)\",\n \"var(--k-viz-thin-5)\",\n \"var(--k-viz-thin-6)\",\n \"var(--k-viz-thin-7)\",\n \"var(--k-viz-thin-8)\",\n] as const;\n\nfunction hash(s: string) {\n let h = 2166136261;\n for (let i = 0; i < s.length; i++) h = Math.imul(h ^ s.charCodeAt(i), 16777619);\n return Math.abs(h);\n}\nconst NEAR: Record<number, number> = { 1: 6, 6: 1, 2: 5, 5: 2, 3: 7, 7: 3 };\n\nexport function seriesIndex(id: string): number {\n return hash(id) % VIZ.length;\n}\n\nexport function assignSeries(ids: string[]): Map<string, number> {\n const out = new Map<string, number>();\n const used = new Set<number>();\n const clash = (k: number) => used.has(k) || (NEAR[k] !== undefined && used.has(NEAR[k]!));\n for (const id of ids) {\n if (out.has(id)) continue;\n let i = seriesIndex(id);\n if (clash(i)) {\n const keys = [...VIZ.keys()];\n i = keys.find((k) => !clash(k)) ?? keys.find((k) => !used.has(k)) ?? i;\n }\n used.add(i);\n out.set(id, i);\n }\n return out;\n}\n\nexport function seriesColors(ids: string[], thin = false): Map<string, string> {\n return new Map([...assignSeries(ids)].map(([id, i]) => [id, (thin ? VIZ_THIN : VIZ)[i]!]));\n}\n\nexport const seriesColor = (id: string, thin = false) => (thin ? VIZ_THIN : VIZ)[seriesIndex(id)]!;\n\nexport type TokenKind = keyof typeof tokenKindSeries;\nexport const tokenKindColor = (k: TokenKind, thin = false) => {\n if (tokenKindTint[k]) return \"var(--k-viz-1-soft)\";\n return (thin ? VIZ_THIN : VIZ)[tokenKindSeries[k] - 1]!;\n};\nexport const TOKEN_KIND_ORDER: TokenKind[] = [\"input\", \"cacheRead\", \"cacheWrite\", \"output\", \"reasoning\"];\nexport function tokenKindLabel(kind: TokenKind, t: UiText = englishText): string {\n switch (kind) {\n case \"input\":\n return t(\"tokenKind.input\", \"Input\");\n case \"output\":\n return t(\"tokenKind.output\", \"Output\");\n case \"cacheRead\":\n return t(\"tokenKind.cacheRead\", \"Cache read\");\n case \"cacheWrite\":\n return t(\"tokenKind.cacheWrite\", \"Cache write\");\n case \"reasoning\":\n return t(\"tokenKind.reasoning\", \"Reasoning\");\n }\n}\n\nexport function useSize<T extends HTMLElement>(): [(el: T | null) => void, { width: number; height: number }] {\n const [el, setEl] = useState<T | null>(null);\n const [size, setSize] = useState({ width: 0, height: 0 });\n useLayoutEffect(() => {\n if (!el) return;\n const set = () => setSize({ width: Math.round(el.clientWidth), height: Math.round(el.clientHeight) });\n set();\n return observeResize([el], set);\n }, [el]);\n return [setEl, size];\n}\n\nconst ease = (t: number) => 1 - Math.pow(1 - t, 3);\nconst reducedMotion = () => typeof matchMedia !== \"undefined\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\nconst mix = (from: number[], to: number[], t: number) => (t >= 1 ? to : to.map((v, i) => (from[i] ?? v) + (v - (from[i] ?? v)) * ease(t)));\n\nexport function tweens(from: number[], to: number[]): boolean {\n return from.length === to.length && from.some((v) => v !== 0) && to.some((v) => v !== 0) && from.some((v, i) => v !== to[i]) && !reducedMotion();\n}\n\nexport function useTweened(values: number[], still = false): number[] {\n const key = values.join(\",\");\n const [tween, setTween] = useState({ key, from: values, to: values, t: 1, still });\n let current = tween;\n if (tween.key !== key || tween.still !== still) {\n const drawn = mix(tween.from, tween.to, tween.t);\n const animate = !still && !tween.still && tweens(drawn, values);\n current = animate ? { key, from: drawn, to: values, t: 0, still } : { key, from: values, to: values, t: 1, still };\n setTween(current);\n }\n const running = current.t < 1;\n useEffect(() => {\n if (!running) return;\n const start = performance.now();\n let raf = 0;\n const step = () => {\n const t = Math.max(0, Math.min(1, (performance.now() - start) / motion.duration.chart));\n setTween((s) => (s.key === key ? { ...s, t } : s));\n if (t < 1) raf = requestAnimationFrame(step);\n };\n raf = requestAnimationFrame(step);\n return () => cancelAnimationFrame(raf);\n }, [key, running]);\n return mix(current.from, current.to, current.t);\n}\n\nexport function useTweenedScale(values: number[], top: number, still = false): { values: number[]; top: number } {\n const any = values.some((v) => v !== 0);\n const drawn = useTweened(any ? [...values, top] : values, still);\n return any ? { values: drawn.slice(0, -1), top: drawn[drawn.length - 1] ?? top } : { values: drawn, top };\n}\n\nexport interface ChartState {\n loading?: boolean | undefined;\n error?: ReactNode | undefined;\n onRetry?: (() => void) | undefined;\n empty?: boolean | undefined;\n emptyText?: ReactNode | undefined;\n}\n\nexport interface TableData {\n columns: string[];\n rows: (string | number)[][];\n}\n\nexport function ChartFrame({\n label,\n height,\n children,\n table,\n legend,\n state = {},\n className,\n toggle = true,\n}: {\n label: string;\n height: number;\n children: ReactNode;\n table?: TableData | undefined;\n legend?: ReactNode | undefined;\n state?: ChartState | undefined;\n className?: string | undefined;\n toggle?: boolean | undefined;\n}) {\n const [asTable, setAsTable] = useState(false);\n const t = useUiText();\n return (\n <figure className={cn(\"@container flex min-w-0 flex-col gap-12\", className)} aria-label={label}>\n {state.error ? (\n <div className=\"flex flex-col items-center justify-center gap-8 text-center\" style={{ height }}>\n <p role=\"alert\" className=\"text-body text-fg-secondary\">\n {t(\"chartFrame.loadFailed\", \"Couldn't load this chart\")}\n </p>\n {state.onRetry && (\n <Button size=\"sm\" onClick={state.onRetry}>\n {t(\"chartFrame.tryAgain\", \"Try again\")}\n </Button>\n )}\n </div>\n ) : asTable && table ? (\n <div className=\"overflow-auto scrollbar-quiet\" style={{ minHeight: height }}>\n <DataTablePlain table={table} />\n </div>\n ) : (\n <div className=\"relative\" style={{ height }}>\n {state.loading && state.empty ? <Skeleton className=\"absolute inset-0\" /> : children}\n {state.loading && !state.empty && <Skeleton className=\"absolute inset-x-0 bottom-0 h-2 rounded-pill\" />}\n {state.empty && !state.loading && (\n <div className=\"absolute inset-0 flex items-center justify-center text-body text-fg-secondary\">\n {state.emptyText ?? t(\"chartFrame.noData\", \"No data for this period\")}\n </div>\n )}\n </div>\n )}\n {(legend || (toggle && table)) && (\n <div className=\"flex flex-col gap-8 @chart-legend:flex-row @chart-legend:gap-12\">\n {!asTable && legend && <div className=\"min-w-0 @chart-legend:flex-1\">{legend}</div>}\n {toggle && table && (\n <button\n type=\"button\"\n onClick={() => setAsTable((v) => !v)}\n aria-pressed={asTable}\n className=\"relative ml-auto inline-flex h-28 shrink-0 cursor-pointer items-center self-end rounded-pill px-10 text-small font-medium text-fg-secondary transition-control hover:bg-fill-1 hover:text-fg focus-ring tap-target\"\n >\n {asTable ? t(\"chartFrame.viewAsChart\", \"View as chart\") : t(\"chartFrame.viewAsTable\", \"View as table\")}\n </button>\n )}\n </div>\n )}\n {table && !asTable && (\n <div className=\"sr-only\">\n <DataTablePlain table={table} caption={label} />\n </div>\n )}\n </figure>\n );\n}\n\nfunction DataTablePlain({ table, caption }: { table: TableData; caption?: string | undefined }) {\n return (\n <table className=\"w-full text-body\">\n {caption && <caption className=\"sr-only\">{caption}</caption>}\n <thead>\n <tr className=\"hairline-b-strong\">\n {table.columns.map((c, i) => (\n <th key={c} scope=\"col\" className={cn(\"h-36 px-12 text-caption font-medium text-fg-secondary first:pl-0\", i > 0 ? \"text-right\" : \"text-left\")}>\n {c}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {table.rows.map((r, i) => (\n <tr key={i} className=\"hairline-b\">\n {r.map((v, j) => (\n <td key={j} className={cn(\"h-36 px-12 first:pl-0\", j > 0 ? \"text-right tabular\" : \"text-left\")}>\n {v}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n\nexport interface LegendItem {\n id: string;\n label: ReactNode;\n color: string;\n value?: ReactNode | undefined;\n}\n\nexport function Swatch({ color, shape = \"square\", off }: { color: string; shape?: \"square\" | \"line\" | undefined; off?: boolean | undefined }) {\n return (\n <span\n aria-hidden\n className={cn(\"shrink-0 transition-control\", shape === \"line\" ? \"h-2 w-12 rounded-pill\" : \"size-10 rounded-bar\", off && \"opacity-30\")}\n style={{ background: color }}\n />\n );\n}\nif (process.env.NODE_ENV !== \"production\") Swatch.displayName = \"Swatch\";\n\nexport const tickLabel = (format: (v: number) => string) => (v: number) => format(v).replace(/[.,]00(?=\\D*$)/, \"\");\n\nexport function readableTicks(scale: { ticks: (count: number) => number[]; domain: () => number[] }, label: (v: number) => string, count = 4): number[] {\n for (let n = count; n >= 1; n--) {\n const ticks = scale.ticks(n);\n if (new Set(ticks.map(label)).size === ticks.length) return ticks;\n }\n const [lo = 0, hi = 0] = scale.domain();\n return label(lo) === label(hi) ? [lo] : [lo, hi];\n}\n\nexport type AxisDate = Date | string;\n\nfunction dayNumber(d: AxisDate): number {\n if (d instanceof Date) return Number.isNaN(d.getTime()) ? NaN : Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()) / 86_400_000;\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(d);\n return m ? Date.UTC(Number(m[1]), Number(m[2]) - 1, Number(m[3])) / 86_400_000 : NaN;\n}\nconst yearOfDay = (n: number) => new Date(n * 86_400_000).getUTCFullYear();\n\nexport function yearStarts(dates: readonly AxisDate[]): number[] {\n const days = dates.map(dayNumber);\n const out: number[] = [];\n days.forEach((d, i) => {\n const prev = i > 0 ? days[i - 1]! : days.length > 1 ? 2 * d - days[1]! : NaN;\n if (Number.isFinite(d) && Number.isFinite(prev) && yearOfDay(d) !== yearOfDay(prev)) out.push(i);\n });\n return out;\n}\n\nconst WIDE = /[\\p{Script=Han}\\p{Script=Hiragana}\\p{Script=Katakana}\\p{Script=Hangul}\\u3000-\\u303f\\uff00-\\uffef]/u;\n\nexport function labelWidth(label: string): number {\n let em = 0;\n for (const ch of label) em += WIDE.test(ch) ? 1 : /\\p{Lu}/u.test(ch) ? 0.8 : /\\p{Ll}/u.test(ch) ? 0.6 : /\\p{Nd}/u.test(ch) ? 0.66 : /\\s/.test(ch) ? 0.3 : 0.4;\n return em * AXIS.label.fontSize;\n}\n\nconst LABEL_GAP = 8;\n\nexport function placeTimeLabels(\n ticks: { key: number; at: number; label: string }[],\n right: number,\n): { key: number; x: number; anchor: \"start\" | \"middle\" | \"end\"; label: string }[] {\n const placed = ticks.map((t) => {\n const width = labelWidth(t.label);\n const anchor: \"start\" | \"middle\" | \"end\" = t.at - width / 2 < 0 ? \"start\" : t.at + width / 2 > right ? \"end\" : \"middle\";\n const x = anchor === \"start\" ? Math.max(t.at, 0) : t.at;\n const left = anchor === \"start\" ? x : anchor === \"end\" ? x - width : x - width / 2;\n return { key: t.key, x, anchor, label: t.label, left, right: left + width };\n });\n const clear = (a: { right: number } | undefined, b: { left: number } | undefined) => !a || !b || a.right + LABEL_GAP <= b.left;\n if (placed.length > 2 && !clear(placed[0], placed[1])) placed.splice(1, 1);\n if (placed.length > 2 && !clear(placed[placed.length - 2], placed[placed.length - 1])) placed.splice(placed.length - 2, 1);\n const kept: typeof placed = [];\n for (const l of placed) if (clear(kept[kept.length - 1], l)) kept.push(l);\n return kept.map(({ key, x, anchor, label }) => ({ key, x, anchor, label }));\n}\n\nexport function axisLabelIndexes(\n labels: string[],\n step: number,\n edges: { start: number; end: number } = { start: Infinity, end: Infinity },\n dates?: readonly AxisDate[] | undefined,\n): number[] {\n const n = labels.length;\n if (n === 0) return [];\n const fits = (i: number) => labelWidth(labels[i]!) / 2 <= Math.min(edges.start + i * step, edges.end + (n - 1 - i) * step) + 1e-6;\n const room = Math.max(48, Math.max(...labels.map(labelWidth)) + 16);\n const every = step > 0 ? Math.max(1, Math.ceil(room / step - 1e-6)) : n;\n const starts = dates && dates.length === n ? yearStarts(dates) : [];\n let stride = every;\n for (let s = every; every > 1 && s <= every * 2; s++) {\n if (starts.every((i) => (i - starts[0]!) % s === 0)) {\n stride = s;\n break;\n }\n }\n const score = (p: number) => [\n starts.filter((i) => i % stride === p && fits(i)).length,\n (n - 1) % stride === p && fits(n - 1) ? 1 : 0,\n p === 0 && fits(0) ? 1 : 0,\n n - 1 - ((n - 1 - p) % stride),\n ];\n let best = 0;\n for (let p = 1; p < Math.min(stride, n); p++) {\n const a = score(p);\n const b = score(best);\n const k = a.findIndex((v, j) => v !== b[j]);\n if (k >= 0 && a[k]! > b[k]!) best = p;\n }\n const out: number[] = [];\n for (let i = best; i < n; i += stride) if (fits(i)) out.push(i);\n return out;\n}\n\nexport function Legend({\n items,\n hidden,\n onToggle,\n onHover,\n shape = \"square\",\n}: {\n items: LegendItem[];\n hidden?: Set<string> | undefined;\n onToggle?: ((id: string) => void) | undefined;\n onHover?: ((id: string | null) => void) | undefined;\n shape?: \"square\" | \"line\" | undefined;\n}) {\n const t = useUiText();\n return (\n <ul className=\"flex flex-wrap items-center gap-4\" aria-label={t(\"chartLegend.label\", \"Legend\")}>\n {items.map((it) => {\n const off = hidden?.has(it.id);\n const Comp = onToggle ? \"button\" : \"span\";\n return (\n <li key={it.id}>\n <Comp\n {...(onToggle ? { type: \"button\" as const, \"aria-pressed\": !off, onClick: () => onToggle(it.id) } : {})}\n onMouseEnter={() => onHover?.(it.id)}\n onMouseLeave={() => onHover?.(null)}\n onFocus={() => onHover?.(it.id)}\n onBlur={() => onHover?.(null)}\n className={cn(\n \"inline-flex h-28 items-center gap-8 rounded-pill px-10 text-small font-medium transition-control\",\n onToggle && \"relative cursor-pointer hover:bg-fill-1 focus-ring tap-target\",\n off ? \"text-fg-tertiary\" : \"text-fg\",\n )}\n >\n <Swatch color={it.color} shape={shape} off={off} />\n {it.label}\n {it.value !== undefined && <span className=\"text-fg-secondary tabular\">{it.value}</span>}\n </Comp>\n </li>\n );\n })}\n </ul>\n );\n}\nif (process.env.NODE_ENV !== \"production\") Legend.displayName = \"Legend\";\n\nexport interface TooltipRow {\n id: string;\n label: ReactNode;\n color: string;\n value: ReactNode;\n share?: ReactNode | undefined;\n}\n\nexport function ChartTooltip({\n x,\n xLeft = x,\n y,\n width,\n heading,\n rows,\n visible,\n}: {\n x: number;\n xLeft?: number | undefined;\n y: number;\n width: number;\n heading: ReactNode;\n rows: TooltipRow[];\n visible: boolean;\n}) {\n const el = useRef<HTMLDivElement | null>(null);\n const [own, setOwn] = useState(0);\n useLayoutEffect(() => {\n const w = el.current?.offsetWidth ?? 0;\n if (w !== own) setOwn(w);\n }, [own, heading, rows, visible]);\n const flip = x > width / 2;\n const wanted = flip ? xLeft - 16 - own : x + 16;\n const left = own ? Math.round(Math.max(0, Math.min(wanted, width - own))) : undefined;\n return (\n <div\n ref={el}\n role=\"presentation\"\n aria-hidden\n className={cn(\n \"pointer-events-none absolute z-10 w-max min-w-200 max-w-360 rounded-tooltip bg-raised p-10 text-small shadow-raised opacity-motion\",\n visible && own ? \"opacity-100\" : \"opacity-0\",\n )}\n style={{\n ...(left !== undefined ? { left } : flip ? { right: Math.round(width - xLeft + 16) } : { left: Math.round(x + 16) }),\n top: Math.round(Math.max(0, y - 24)),\n }}\n >\n <div className=\"mb-6 text-caption font-medium text-fg tabular\">{heading}</div>\n <div className=\"flex flex-col gap-4\">\n {rows.map((r) => (\n <div key={r.id} className=\"flex items-center gap-8\">\n <Swatch color={r.color} />\n <span className=\"min-w-0 flex-1 truncate pr-12 text-fg-secondary\">{r.label}</span>\n <span className=\"font-medium text-fg tabular\">{r.value}</span>\n {r.share !== undefined && <span className=\"w-40 text-right text-fg-tertiary tabular\">{r.share}</span>}\n </div>\n ))}\n </div>\n </div>\n );\n}\nif (process.env.NODE_ENV !== \"production\") ChartTooltip.displayName = \"ChartTooltip\";\n\nexport const AXIS = {\n grid: { stroke: \"var(--k-line)\", strokeDasharray: \"3 3\", strokeWidth: 1 },\n baseline: { stroke: \"var(--k-line-strong)\", strokeWidth: 1 },\n label: { fill: \"var(--k-text-tertiary)\", fontSize: 12, fontWeight: 500, style: { fontVariantNumeric: \"tabular-nums\" as const } },\n};\n\nexport const KAESO_CHARTS_VARIANTS = {\n chrome: { default: { classes: \"\" } },\n} as const;\nexport const KAESO_CHARTS_DEFAULT_VARIANTS = { chrome: \"default\" } as const;\n\nexport function chartKeyIndex(\n key: string,\n index: number | null,\n count: number,\n { vertical = false, start = count - 1 }: { vertical?: boolean | undefined; start?: number | undefined } = {},\n): number | null | undefined {\n if (count <= 0) return undefined;\n const back = vertical ? \"ArrowUp\" : \"ArrowLeft\";\n const forward = vertical ? \"ArrowDown\" : \"ArrowRight\";\n if (key === back) return index === null ? start : Math.max(0, index - 1);\n if (key === forward) return index === null ? start : Math.min(count - 1, index + 1);\n if (key === \"Home\") return 0;\n if (key === \"End\") return count - 1;\n if (key === \"Escape\") return index === null ? undefined : null;\n return undefined;\n}\n\nexport function useChartKeys(count: number, options: { vertical?: boolean | undefined; start?: number | undefined } = {}) {\n const [index, setIndex] = useState<number | null>(null);\n const start = options.start ?? count - 1;\n const props = {\n tabIndex: count > 0 ? 0 : -1,\n onFocus: (e: React.FocusEvent<HTMLElement>) => {\n if (e.target !== e.currentTarget) return;\n let keyboard = true;\n try {\n keyboard = e.currentTarget.matches(\":focus-visible\");\n } catch {}\n if (keyboard && !document.documentElement.hasAttribute(\"data-k-pointer\")) setIndex(Math.max(0, start));\n },\n onBlur: () => setIndex(null),\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => {\n const next = chartKeyIndex(e.key, index, count, { vertical: !!options.vertical, start });\n if (next === undefined) return;\n e.preventDefault();\n if (next === null) e.stopPropagation();\n setIndex(next);\n },\n };\n return { index: index !== null && index < count ? index : null, props };\n}\n\nexport function ChartLive({ children }: { children?: ReactNode | undefined }) {\n return (\n <div className=\"sr-only\" aria-live=\"polite\" aria-atomic>\n {children}\n </div>\n );\n}\nif (process.env.NODE_ENV !== \"production\") ChartLive.displayName = \"ChartLive\";\n\nexport const liveLine = (heading: ReactNode, rows: { label: ReactNode; value: ReactNode }[], t: UiText = englishText) =>\n t(\"chart.liveLine\", \"{heading}: {values}\", {\n heading: String(heading),\n values: rows.map((r) => t(\"chart.liveValue\", \"{label} {value}\", { label: String(r.label), value: String(r.value) })).join(t(\"chart.listSeparator\", \", \")),\n });\n"],"mappings":";;;;;;;;;;AASA,SAAgBK,EAAW,GAAiB,GAA4B;CACtE,OAAOC,EAAO,MAAM,OAAO,SAAS,IAAIC,EAAM,OAAO,OAAO,SAAS,IAAIA;AAC3E;AACA,IAAaC,IAAM;CACjB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GACaC,IAAW;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,SAASC,EAAK,GAAW;CACvB,IAAIC,IAAI;CACR,KAAK,IAAIC,IAAI,GAAGA,IAAIC,EAAE,QAAQ,KAAK,IAAI,KAAK,KAAKF,IAAIE,EAAE,WAAWD,CAAC,GAAG,QAAQ;CAC9E,OAAO,KAAK,IAAID,CAAC;AACnB;AACA,IAAMG,IAA+B;CAAE,GAAG;CAAG,GAAG;CAAG,GAAG;CAAG,GAAG;CAAG,GAAG;CAAG,GAAG;AAAE;AAE1E,SAAgBC,EAAY,GAAoB;CAC9C,OAAOL,EAAKM,CAAE,IAAIR,EAAI;AACxB;AAEA,SAAgBS,EAAa,GAAoC;CAC/D,IAAMC,oBAAM,IAAI,IAAoB,GAC9BC,oBAAO,IAAI,IAAY,GACvBC,KAAS,MAAcD,EAAK,IAAIE,CAAC,KAAMP,EAAKO,OAAO,KAAA,KAAaF,EAAK,IAAIL,EAAKO,EAAG;CACvF,KAAK,IAAML,KAAMM,GAAK;EACpB,IAAIJ,EAAI,IAAIF,CAAE,GAAG;EACjB,IAAIJ,IAAIG,EAAYC,CAAE;EACtB,IAAII,EAAMR,CAAC,GAAG;GACZ,IAAMW,IAAO,CAAC,GAAGf,EAAI,KAAK,CAAC;GAC3B,IAAIe,EAAK,MAAM,MAAM,CAACH,EAAMC,CAAC,CAAC,KAAKE,EAAK,MAAM,MAAM,CAACJ,EAAK,IAAIE,CAAC,CAAC,KAAKT;EACvE;EAEA,AADAO,EAAK,IAAIP,CAAC,GACVM,EAAI,IAAIF,GAAIJ,CAAC;CACf;CACA,OAAOM;AACT;AAEA,SAAgBM,EAAa,GAAe,IAAO,IAA4B;CAC7E,OAAO,IAAI,IAAI,CAAC,GAAGP,EAAaK,CAAG,CAAC,CAAC,CAAC,KAAK,CAACN,GAAIJ,OAAO,CAACI,IAAKS,IAAOhB,IAAWD,EAAA,CAAKI,EAAG,CAAC,CAAC;AAC3F;AAEA,IAAac,KAAe,GAAY,IAAO,QAAWD,IAAOhB,IAAWD,EAAA,CAAKO,EAAYC,CAAE,IAGlFW,KAAkB,GAAc,IAAO,OAC9CC,EAAcP,KAAW,yBACrBI,IAAOhB,IAAWD,EAAA,CAAKqB,EAAgBR,KAAK,IAEzCS,IAAgC;CAAC;CAAS;CAAa;CAAc;CAAU;AAAW;AACvG,SAAgBC,EAAe,GAAiB,IAAYC,GAAqB;CAC/E,QAAQC,GAAR;EACE,KAAK,SACH,OAAO,EAAE,mBAAmB,OAAO;EACrC,KAAK,UACH,OAAO,EAAE,oBAAoB,QAAQ;EACvC,KAAK,aACH,OAAO,EAAE,uBAAuB,YAAY;EAC9C,KAAK,cACH,OAAO,EAAE,wBAAwB,aAAa;EAChD,KAAK,aACH,OAAO,EAAE,uBAAuB,WAAW;CAC/C;AACF;AAEA,SAAgBC,IAA8F;CAC5G,IAAM,CAACC,GAAIC,KAASC,EAAmB,IAAI,GACrC,CAACC,GAAMC,KAAWF,EAAS;EAAE,OAAO;EAAG,QAAQ;CAAE,CAAC;CAOxD,OANAG,QAAsB;EACpB,IAAI,CAACL,GAAI;EACT,IAAMM,UAAYF,EAAQ;GAAE,OAAO,KAAK,MAAMJ,EAAG,WAAW;GAAG,QAAQ,KAAK,MAAMA,EAAG,YAAY;EAAE,CAAC;EAEpG,OADAM,EAAI,GACGvC,EAAc,CAACiC,CAAE,GAAGM,CAAG;CAChC,GAAG,CAACN,CAAE,CAAC,GACA,CAACC,GAAOE,CAAI;AACrB;AAEA,IAAMI,KAAQ,MAAc,KAAa,IAAIC,MAAG,GAC1CC,WAAsB,OAAO,aAAe,OAAe,WAAW,kCAAkC,CAAC,CAAC,SAC1GC,KAAO,GAAgB,GAAc,MAAeF,KAAK,IAAIG,IAAKA,EAAG,KAAK,GAAG,OAAOC,EAAKnC,MAAMoC,MAAMA,KAAKD,EAAKnC,MAAMoC,MAAMN,EAAKC,CAAC,CAAC;AAExI,SAAgBM,EAAO,GAAgB,GAAuB;CAC5D,OAAOF,EAAK,WAAWD,EAAG,UAAUC,EAAK,MAAM,MAAMC,MAAM,CAAC,KAAKF,EAAG,MAAM,MAAME,MAAM,CAAC,KAAKD,EAAK,MAAM,GAAG,MAAMC,MAAMF,EAAGlC,EAAE,KAAK,CAACgC,GAAc;AACjJ;AAEA,SAAgBM,EAAW,GAAkB,IAAQ,IAAiB;CACpE,IAAMC,IAAM7C,EAAO,KAAK,GAAG,GACrB,CAAC8C,GAAOC,KAAYhB,EAAS;EAAE;EAAK,MAAM/B;EAAQ,IAAIA;EAAQ,GAAG;EAAG;CAAM,CAAC,GAC7EgD,IAAUF;CACd,IAAIA,EAAM,QAAQD,KAAOC,EAAM,UAAUG,GAAO;EAC9C,IAAMC,IAAQX,EAAIO,EAAM,MAAMA,EAAM,IAAIA,EAAM,CAAC;EAG/C,AADA,IADgB,CAACG,KAAS,CAACH,EAAM,SAASH,EAAOO,GAAOlD,CAAM,IAC1C;GAAE;GAAK,MAAMkD;GAAO,IAAIlD;GAAQ,GAAG;GAAG;EAAM,IAAI;GAAE;GAAK,MAAMA;GAAQ,IAAIA;GAAQ,GAAG;GAAG;EAAM,GACjH+C,EAASC,CAAO;CAClB;CACA,IAAMG,IAAUH,EAAQ,IAAI;CAa5B,OAZAI,QAAgB;EACd,IAAI,CAACD,GAAS;EACd,IAAME,IAAQ,YAAY,IAAI,GAC1BC,IAAM,GACJC,UAAa;GACjB,IAAMlB,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,YAAY,IAAI,IAAIgB,KAASG,EAAO,SAAS,KAAK,CAAC;GAEtF,AADAT,GAAU,MAAOxC,EAAE,QAAQsC,IAAM;IAAE,GAAGtC;IAAG;GAAE,IAAIA,CAAE,GAC7C8B,IAAI,MAAG,IAAM,sBAAsBkB,CAAI;EAC7C;EAEA,OADA,IAAM,sBAAsBA,CAAI,SACnB,qBAAqBD,CAAG;CACvC,GAAG,CAACT,GAAKM,CAAO,CAAC,GACVZ,EAAIS,EAAQ,MAAMA,EAAQ,IAAIA,EAAQ,CAAC;AAChD;AAEA,SAAgBS,EAAgB,GAAkB,GAAa,IAAQ,IAA0C;CAC/G,IAAMC,IAAM1D,EAAO,MAAM,MAAM0C,MAAM,CAAC,GAChCQ,IAAQN,EAAWc,IAAM,CAAC,GAAG1D,GAAQ2D,CAAG,IAAI3D,GAAQiD,CAAK;CAC/D,OAAOS,IAAM;EAAE,QAAQR,EAAM,MAAM,GAAG,EAAE;EAAG,KAAKA,EAAMA,EAAM,SAAS,MAAMS;CAAI,IAAI;EAAE,QAAQT;EAAO;CAAI;AAC1G;AAeA,SAAgBU,EAAW,EACzB,UACA,WACA,aACA,UACA,WACA,WAAQ,CAAC,GACT,cACA,YAAS,MAUR;CACD,IAAM,CAACC,GAASC,KAAc/B,EAAS,EAAK,GACtCM,IAAI1C,EAAU;CACpB,OACE,kBAAC,UAAD;EAAQ,WAAWD,EAAG,2CAA2CqE,CAAS;EAAG,cAAYC;EAAzF,UAAA;GACGC,EAAM,QACL,kBAAC,OAAD;IAAK,WAAU;IAA8D,OAAO,EAAE,UAAO;IAA7F,UAAA,CACE,kBAAC,KAAD;KAAG,MAAK;KAAQ,WAAU;KACvB,UAAA5B,EAAE,yBAAyB,0BAA0B;IACrD,CAAA,GACF4B,EAAM,WACL,kBAACpE,GAAD;KAAQ,MAAK;KAAK,SAASoE,EAAM;KAC9B,UAAA5B,EAAE,uBAAuB,WAAW;IAC/B,CAAA,CAEP;GACH,CAAA,IAAAwB,KAAWK,IACb,kBAAC,OAAD;IAAK,WAAU;IAAgC,OAAO,EAAE,WAAWC,EAAO;IACxE,UAAA,kBAACC,GAAD,EAAuB,SAAQ,CAAA;GAC5B,CAAA,IAEL,kBAAC,OAAD;IAAK,WAAU;IAAW,OAAO,EAAE,UAAO;IAA1C,UAAA;KACGH,EAAM,WAAWA,EAAM,QAAQ,kBAACnE,GAAD,EAAU,WAAU,mBAAoB,CAAA,IAAIuE;KAC3EJ,EAAM,WAAW,CAACA,EAAM,SAAS,kBAACnE,GAAD,EAAU,WAAU,+CAAgD,CAAA;KACrGmE,EAAM,SAAS,CAACA,EAAM,WACrB,kBAAC,OAAD;MAAK,WAAU;MACZ,UAAAA,EAAM,aAAa5B,EAAE,qBAAqB,yBAAyB;KACjE,CAAA;IAEJ;;IAELiC,KAAWC,KAAUL,MACrB,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACG,CAACL,KAAWS,KAAU,kBAAC,OAAD;KAAK,WAAU;KAAgC,UAAAA;IAAY,CAAA,GACjFC,KAAUL,KACT,kBAAC,UAAD;KACE,MAAK;KACL,eAAeJ,GAAY,MAAM,CAACpB,CAAC;KACnC,gBAAcmB;KACd,WAAU;KAET,UAAAA,IAAUxB,EAAE,0BAA0B,eAAe,IAAIA,EAAE,0BAA0B,eAAe;IAC/F,CAAA,CAEP;;GAEN6B,KAAS,CAACL,KACT,kBAAC,OAAD;IAAK,WAAU;IACb,UAAA,kBAACO,GAAD;KAAuB;KAAO,SAASJ;IAAQ,CAAA;GAC5C,CAAA;EAED;;AAEZ;AAEA,SAASI,EAAe,EAAE,UAAO,cAA+D;CAC9F,OACE,kBAAC,SAAD;EAAO,WAAU;EAAjB,UAAA;GACGI,KAAW,kBAAC,WAAD;IAAS,WAAU;IAAW,UAAAA;GAAiB,CAAA;GAC3D,kBAAC,SAAD,EAAA,UACE,kBAAC,MAAD;IAAI,WAAU;IACX,UAAAN,EAAM,QAAQ,KAAK,GAAG,MACrB,kBAAC,MAAD;KAAY,OAAM;KAAM,WAAWxE,EAAG,oEAAoEY,IAAI,IAAI,eAAe,WAAW;KACzI,UAAAmE;IACC,GAFKA,CAEL,CACL;GACC,CAAA,EACC,CAAA;GACP,kBAAC,SAAD,EAAA,UACGP,EAAM,KAAK,KAAK,GAAG,MAClB,kBAAC,MAAD;IAAY,WAAU;IACnB,UAAAQ,EAAE,KAAK,GAAG,MACT,kBAAC,MAAD;KAAY,WAAWhF,EAAG,yBAAyBiF,IAAI,IAAI,uBAAuB,WAAW;KAC1F,UAAAjC;IACC,GAFKiC,CAEL,CACL;GACC,GANKrE,CAML,CACL,EACI,CAAA;EACF;;AAEX;AASA,SAAgBsE,EAAO,EAAE,UAAO,WAAQ,UAAU,UAA4F;CAC5I,OACE,kBAAC,QAAD;EACE,eAAA;EACA,WAAWlF,EAAG,+BAA+BmF,MAAU,SAAS,0BAA0B,uBAAuBC,KAAO,YAAY;EACpI,OAAO,EAAE,YAAYC,EAAM;CAC5B,CAAA;AAEL;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAO,cAAc;AAEhE,IAAaC,KAAa,OAAmC,MAAcC,EAAOvC,CAAC,CAAC,CAAC,QAAQ,kBAAkB,EAAE;AAEjH,SAAgBwC,EAAc,GAAuE,GAA8B,IAAQ,GAAa;CACtJ,KAAK,IAAIC,IAAIC,GAAOD,KAAK,GAAG,KAAK;EAC/B,IAAMlF,IAAQoF,EAAM,MAAMF,CAAC;EAC3B,IAAI,IAAI,IAAIlF,EAAM,IAAI+D,CAAK,CAAC,CAAC,CAAC,SAAS/D,EAAM,QAAQ,OAAOA;CAC9D;CACA,IAAM,CAACqF,IAAK,GAAGC,IAAK,KAAKF,EAAM,OAAO;CACtC,OAAOrB,EAAMsB,CAAE,MAAMtB,EAAMuB,CAAE,IAAI,CAACD,CAAE,IAAI,CAACA,GAAIC,CAAE;AACjD;AAIA,SAASC,EAAU,GAAqB;CACtC,IAAIC,aAAa,MAAM,OAAO,OAAO,MAAMA,EAAE,QAAQ,CAAC,IAAI,MAAM,KAAK,IAAIA,EAAE,YAAY,GAAGA,EAAE,SAAS,GAAGA,EAAE,QAAQ,CAAC,IAAI;CACvH,IAAMC,IAAI,2BAA2B,KAAKD,CAAC;CAC3C,OAAOC,IAAI,KAAK,IAAI,OAAOA,EAAE,EAAE,GAAG,OAAOA,EAAE,EAAE,IAAI,GAAG,OAAOA,EAAE,EAAE,CAAC,IAAI,QAAa;AACnF;AACA,IAAMC,KAAa,uBAAc,IAAI,KAAKR,IAAI,KAAU,EAAA,CAAE,eAAe;AAEzE,SAAgBS,EAAW,GAAsC;CAC/D,IAAMC,IAAOC,EAAM,IAAIN,CAAS,GAC1B5E,IAAgB,CAAC;CAKvB,OAJAiF,EAAK,SAAS,GAAG,MAAM;EACrB,IAAME,IAAOzF,IAAI,IAAIuF,EAAKvF,IAAI,KAAMuF,EAAK,SAAS,IAAI,IAAIJ,IAAII,EAAK,KAAM;EACzE,AAAI,OAAO,SAASJ,CAAC,KAAK,OAAO,SAASM,CAAI,KAAKJ,EAAUF,CAAC,MAAME,EAAUI,CAAI,KAAGnF,EAAI,KAAKN,CAAC;CACjG,CAAC,GACMM;AACT;AAEA,IAAMoF,IAAO;AAEb,SAAgBC,EAAW,GAAuB;CAChD,IAAIC,IAAK;CACT,KAAK,IAAMC,KAAMnC,GAAO,KAAMgC,EAAK,KAAKG,CAAE,IAAI,IAAI,UAAU,KAAKA,CAAE,IAAI,KAAM,UAAU,KAAKA,CAAE,IAAI,KAAM,UAAU,KAAKA,CAAE,IAAI,MAAO,KAAK,KAAKA,CAAE,IAAI,KAAM;CAC1J,OAAOD,IAAKE,EAAK,MAAM;AACzB;AAEA,IAAMC,IAAY;AAElB,SAAgBC,EACd,GACA,GACiF;CACjF,IAAMC,IAAStG,EAAM,KAAK,MAAM;EAC9B,IAAMuG,IAAQP,EAAW5D,EAAE,KAAK,GAC1BoE,IAAqCpE,EAAE,KAAKmE,IAAQ,IAAI,IAAI,UAAUnE,EAAE,KAAKmE,IAAQ,IAAIE,IAAQ,QAAQ,UACzGC,IAAIF,MAAW,UAAU,KAAK,IAAIpE,EAAE,IAAI,CAAC,IAAIA,EAAE,IAC/CuE,IAAOH,MAAW,UAAUE,IAAIF,MAAW,QAAQE,IAAIH,IAAQG,IAAIH,IAAQ;EACjF,OAAO;GAAE,KAAKnE,EAAE;GAAK;GAAG;GAAQ,OAAOA,EAAE;GAAO;GAAM,OAAOuE,IAAOJ;EAAM;CAC5E,CAAC,GACKK,KAAS,GAAkC,MAAoC,CAACC,KAAK,CAACC,KAAKD,EAAE,QAAQT,KAAaU,EAAE;CAE1H,AADIR,EAAO,SAAS,KAAK,CAACM,EAAMN,EAAO,IAAIA,EAAO,EAAE,KAAGA,EAAO,OAAO,GAAG,CAAC,GACrEA,EAAO,SAAS,KAAK,CAACM,EAAMN,EAAOA,EAAO,SAAS,IAAIA,EAAOA,EAAO,SAAS,EAAE,KAAGA,EAAO,OAAOA,EAAO,SAAS,GAAG,CAAC;CACzH,IAAMS,IAAsB,CAAC;CAC7B,KAAK,IAAMC,KAAKV,GAAQ,AAAIM,EAAMG,EAAKA,EAAK,SAAS,IAAIC,CAAC,KAAGD,EAAK,KAAKC,CAAC;CACxE,OAAOD,EAAK,KAAK,EAAE,QAAK,MAAG,WAAQ,gBAAa;EAAE;EAAK;EAAG;EAAQ;CAAM,EAAE;AAC5E;AAEA,SAAgBE,EACd,GACA,GACA,IAAwC;CAAE,OAAO;CAAU,KAAK;AAAS,GACzE,GACU;CACV,IAAM/B,IAAIgC,EAAO;CACjB,IAAIhC,MAAM,GAAG,OAAO,CAAC;CACrB,IAAMiC,KAAQ,MAAcnB,EAAWkB,EAAO7G,EAAG,IAAI,KAAK,KAAK,IAAI+G,EAAM,QAAQ/G,IAAIiD,GAAM8D,EAAM,OAAOlC,IAAI,IAAI7E,KAAKiD,CAAI,IAAI,MACvH+D,IAAO,KAAK,IAAI,IAAI,KAAK,IAAI,GAAGH,EAAO,IAAIlB,CAAU,CAAC,IAAI,EAAE,GAC5DsB,IAAQhE,IAAO,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK+D,IAAO/D,IAAO,IAAI,CAAC,IAAI4B,GAChEqC,IAAS1B,KAASA,EAAM,WAAWX,IAAIS,EAAWE,CAAK,IAAI,CAAC,GAC9D2B,IAASF;CACb,KAAK,IAAIhH,IAAIgH,GAAOA,IAAQ,KAAKhH,KAAKgH,IAAQ,GAAG,KAC/C,IAAIC,EAAO,OAAO,OAAOlH,IAAIkH,EAAO,MAAOjH,MAAM,CAAC,GAAG;EACnD,IAASA;EACT;CACF;CAEF,IAAMmH,KAAS,MAAc;EAC3BF,EAAO,QAAQ,MAAMlH,IAAImH,MAAWE,KAAKP,EAAK9G,CAAC,CAAC,CAAC,CAAC;GACjD6E,IAAI,KAAKsC,MAAWE,KAAKP,EAAKjC,IAAI,CAAC,IAAI,IAAI;EAC5CwC,MAAM,KAAKP,EAAK,CAAC,IAAI,IAAI;EACzBjC,IAAI,KAAMA,IAAI,IAAIwC,KAAKF;CACzB,GACIG,IAAO;CACX,KAAK,IAAID,IAAI,GAAGA,IAAI,KAAK,IAAIF,GAAQtC,CAAC,GAAG,KAAK;EAC5C,IAAM2B,IAAIY,EAAMC,CAAC,GACXZ,IAAIW,EAAME,CAAI,GACd7G,IAAI+F,EAAE,WAAW,GAAG,MAAMpE,MAAMqE,EAAEpC,EAAE;EAC1C,AAAI5D,KAAK,KAAK+F,EAAE/F,KAAMgG,EAAEhG,OAAK,IAAO4G;CACtC;CACA,IAAM/G,IAAgB,CAAC;CACvB,KAAK,IAAIN,IAAIsH,GAAMtH,IAAI6E,GAAG,KAAKsC,GAAQ,AAAIL,EAAK9G,CAAC,KAAGM,EAAI,KAAKN,CAAC;CAC9D,OAAOM;AACT;AAEA,SAAgBiH,EAAO,EACrB,UACA,WACA,aACA,YACA,WAAQ,YAOP;CACD,IAAMxF,IAAI1C,EAAU;CACpB,OACE,kBAAC,MAAD;EAAI,WAAU;EAAoC,cAAY0C,EAAE,qBAAqB,QAAQ;EAC1F,UAAAyF,EAAM,KAAK,MAAO;GACjB,IAAMhD,IAAMiD,GAAQ,IAAIC,EAAG,EAAE;GAE7B,OACE,kBAAC,MAAD,EAAA,UACE,kBAHSC,IAAW,WAAW,QAG/B;IACE,GAAKA,IAAW;KAAE,MAAM;KAAmB,gBAAgB,CAACnD;KAAK,eAAemD,EAASD,EAAG,EAAE;IAAE,IAAI,CAAC;IACrG,oBAAoBE,IAAUF,EAAG,EAAE;IACnC,oBAAoBE,IAAU,IAAI;IAClC,eAAeA,IAAUF,EAAG,EAAE;IAC9B,cAAcE,IAAU,IAAI;IAC5B,WAAWxI,EACT,oGACAuI,KAAY,iEACZnD,IAAM,qBAAqB,SAC7B;IAVF,UAAA;KAYE,kBAACF,GAAD;MAAQ,OAAOoD,EAAG;MAAc;MAAY;KAAM,CAAA;KACjDA,EAAG;KACHA,EAAG,UAAU,KAAA,KAAa,kBAAC,QAAD;MAAM,WAAU;MAA6B,UAAAA,EAAG;KAAY,CAAA;IACnF;GACJ,CAAA,EAAA,GAjBKA,EAAG,EAiBR;EAER,CAAC;CACC,CAAA;AAER;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAO,cAAc;AAUhE,SAAgBG,EAAa,EAC3B,MACA,WAAQxB,GACR,MACA,UACA,YACA,SACA,cASC;CACD,IAAM9E,IAAKuG,EAA8B,IAAI,GACvC,CAACC,GAAKC,KAAUvG,EAAS,CAAC;CAChC,QAAsB;EACpB,IAAMwG,IAAI1G,EAAG,SAAS,eAAe;EACrC,AAAI0G,MAAMF,KAAKC,EAAOC,CAAC;CACzB,GAAG;EAACF;EAAKG;EAASC;EAAMC;CAAO,CAAC;CAChC,IAAMC,IAAOhC,IAAIH,IAAQ,GACnBoC,IAASD,IAAOE,IAAQ,KAAKR,IAAM1B,IAAI,IACvCC,IAAOyB,IAAM,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAIO,GAAQpC,IAAQ6B,CAAG,CAAC,CAAC,IAAI,KAAA;CAC5E,OACE,kBAAC,OAAD;EACE,KAAKxG;EACL,MAAK;EACL,eAAA;EACA,WAAWnC,EACT,sIACAgJ,KAAWL,IAAM,gBAAgB,WACnC;EACA,OAAO;GACL,GAAIzB,MAAS,KAAA,IAAuB+B,IAAO,EAAE,OAAO,KAAK,MAAMnC,IAAQqC,IAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,MAAMlC,IAAI,EAAE,EAAE,IAAzF,EAAE,QAAK;GAChC,KAAK,KAAK,MAAM,KAAK,IAAI,GAAGmC,IAAI,EAAE,CAAC;EACrC;EAXF,UAAA,CAaE,kBAAC,OAAD;GAAK,WAAU;GAAiD,UAAAN;EAAa,CAAA,GAC7E,kBAAC,OAAD;GAAK,WAAU;GACZ,UAAAC,EAAK,KAAK,MACT,kBAAC,OAAD;IAAgB,WAAU;IAA1B,UAAA;KACE,kBAAC7D,GAAD,EAAQ,OAAOF,EAAE,MAAQ,CAAA;KACzB,kBAAC,QAAD;MAAM,WAAU;MAAmD,UAAAA,EAAE;KAAY,CAAA;KACjF,kBAAC,QAAD;MAAM,WAAU;MAA+B,UAAAA,EAAE;KAAY,CAAA;KAC5DA,EAAE,UAAU,KAAA,KAAa,kBAAC,QAAD;MAAM,WAAU;MAA4C,UAAAA,EAAE;KAAY,CAAA;IACjG;GALK,GAAAA,EAAE,EAKP,CACN;EACE,CAAA,CACF;;AAET;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAa,cAAc;AAEtE,IAAa0B,IAAO;CAClB,MAAM;EAAE,QAAQ;EAAiB,iBAAiB;EAAO,aAAa;CAAE;CACxE,UAAU;EAAE,QAAQ;EAAwB,aAAa;CAAE;CAC3D,OAAO;EAAE,MAAM;EAA0B,UAAU;EAAI,YAAY;EAAK,OAAO,EAAE,oBAAoB,eAAwB;CAAE;AACjI,GAEa2C,IAAwB,EACnC,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAG,EAAE,EACrC,GACaC,IAAgC,EAAE,QAAQ,UAAU;AAEjE,SAAgBC,EACd,GACA,GACA,GACA,EAAE,cAAW,IAAO,WAAQ7D,IAAQ,MAAsE,CAAC,GAChF;CAC3B,IAAIA,KAAS,GAAG;CAChB,IAAM8D,IAAOC,IAAW,YAAY,aAC9BC,IAAUD,IAAW,cAAc;CACzC,IAAItG,MAAQqG,GAAM,OAAOG,MAAU,OAAOhG,IAAQ,KAAK,IAAI,GAAGgG,IAAQ,CAAC;CACvE,IAAIxG,MAAQuG,GAAS,OAAOC,MAAU,OAAOhG,IAAQ,KAAK,IAAI+B,IAAQ,GAAGiE,IAAQ,CAAC;CAClF,IAAIxG,MAAQ,QAAQ,OAAO;CAC3B,IAAIA,MAAQ,OAAO,OAAOuC,IAAQ;CAClC,IAAIvC,MAAQ,UAAU,OAAOwG,MAAU,OAAO,KAAA,IAAY;AAE5D;AAEA,SAAgBC,EAAa,GAAe,IAA0E,CAAC,GAAG;CACxH,IAAM,CAACD,GAAOE,KAAYxH,EAAwB,IAAI,GAChDsB,IAAQmG,EAAQ,SAASpE,IAAQ;CAoBvC,OAAO;EAAE,OAAOiE,MAAU,QAAQA,IAAQjE,IAAQiE,IAAQ;EAAM,OAAA;GAlB9D,UAAUjE,IAAQ,IAAI,IAAI;GAC1B,UAAU,MAAqC;IAC7C,IAAI,EAAE,WAAW,EAAE,eAAe;IAClC,IAAIqE,IAAW;IACf,IAAI;KACF,IAAW,EAAE,cAAc,QAAQ,gBAAgB;IACrD,QAAQ,CAAC;IACT,AAAIA,KAAY,CAAC,SAAS,gBAAgB,aAAa,gBAAgB,KAAGF,EAAS,KAAK,IAAI,GAAGlG,CAAK,CAAC;GACvG;GACA,cAAckG,EAAS,IAAI;GAC3B,YAAY,MAAwC;IAClD,IAAMG,IAAOT,EAAcU,EAAE,KAAKN,GAAOjE,GAAO;KAAE,UAAU,CAAC,CAACoE,EAAQ;KAAU;IAAM,CAAC;IACvF,AAAIE,MAAS,KAAA,MACbC,EAAE,eAAe,GACbD,MAAS,QAAMC,EAAE,gBAAgB,GACrCJ,EAASG,CAAI;GACf;EAE8D;CAAM;AACxE;AAEA,SAAgBE,EAAU,EAAE,eAAkD;CAC5E,OACE,kBAAC,OAAD;EAAK,WAAU;EAAU,aAAU;EAAS,eAAA;EACzC;CACE,CAAA;AAET;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAU,cAAc;AAEnE,IAAaC,MAAY,GAAoB,GAAgD,IAAYnI,MACvGW,EAAE,kBAAkB,uBAAuB;CACzC,SAAS,OAAOmG,CAAO;CACvB,QAAQC,EAAK,KAAK,MAAMpG,EAAE,mBAAmB,mBAAmB;EAAE,OAAO,OAAOqC,EAAE,KAAK;EAAG,OAAO,OAAOA,EAAE,KAAK;CAAE,CAAC,CAAC,CAAC,CAAC,KAAKrC,EAAE,uBAAuB,IAAI,CAAC;AAC1J,CAAC"}
|
|
1
|
+
{"version":3,"file":"core-Bl9NrBLS.js","names":["cn","useUiText","observeResize","Button","Skeleton","wholeTicks","values","ticks","VIZ","VIZ_THIN","hash","h","i","s","NEAR","seriesIndex","id","assignSeries","out","used","clash","k","ids","keys","seriesColors","thin","seriesColor","tokenKindColor","tokenKindTint","tokenKindSeries","TOKEN_KIND_ORDER","tokenKindLabel","englishText","kind","useSize","el","setEl","useState","size","setSize","useLayoutEffect","set","ease","t","reducedMotion","mix","to","from","v","tweens","useTweened","key","tween","setTween","current","still","drawn","running","useEffect","start","raf","step","motion","useTweenedScale","any","top","ChartFrame","asTable","setAsTable","className","label","state","table","height","DataTablePlain","children","legend","toggle","caption","c","r","j","Swatch","shape","off","color","tickLabel","format","readableTicks","n","count","scale","lo","hi","dayNumber","d","m","yearOfDay","yearStarts","days","dates","prev","WIDE","labelWidth","em","ch","AXIS","LABEL_GAP","placeTimeLabels","placed","width","anchor","right","x","left","clear","a","b","kept","l","axisLabelIndexes","labels","fits","edges","room","every","starts","stride","score","p","best","Legend","items","hidden","it","onToggle","onHover","ChartTooltip","useRef","own","setOwn","w","heading","rows","visible","flip","wanted","xLeft","y","KAESO_CHARTS_VARIANTS","KAESO_CHARTS_DEFAULT_VARIANTS","chartKeyIndex","back","vertical","forward","index","useChartKeys","setIndex","options","keyboard","next","e","ChartLive","liveLine"],"sources":["../../src/components/charts/core.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { useEffect, useLayoutEffect, useRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { motion, tokenKindSeries, tokenKindTint } from \"@logicplanes/kaeso-tokens\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { Button } from \"../button/button.js\";\nimport { englishText, useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport function wholeTicks(ticks: number[], values: number[]): number[] {\n return values.every(Number.isInteger) ? ticks.filter(Number.isInteger) : ticks;\n}\nexport const VIZ = [\n \"var(--k-viz-1)\",\n \"var(--k-viz-2)\",\n \"var(--k-viz-3)\",\n \"var(--k-viz-4)\",\n \"var(--k-viz-5)\",\n \"var(--k-viz-6)\",\n \"var(--k-viz-7)\",\n \"var(--k-viz-8)\",\n] as const;\nexport const VIZ_THIN = [\n \"var(--k-viz-thin-1)\",\n \"var(--k-viz-thin-2)\",\n \"var(--k-viz-thin-3)\",\n \"var(--k-viz-thin-4)\",\n \"var(--k-viz-thin-5)\",\n \"var(--k-viz-thin-6)\",\n \"var(--k-viz-thin-7)\",\n \"var(--k-viz-thin-8)\",\n] as const;\n\nfunction hash(s: string) {\n let h = 2166136261;\n for (let i = 0; i < s.length; i++) h = Math.imul(h ^ s.charCodeAt(i), 16777619);\n return Math.abs(h);\n}\nconst NEAR: Record<number, number> = { 1: 6, 6: 1, 2: 5, 5: 2, 3: 7, 7: 3 };\n\nexport function seriesIndex(id: string): number {\n return hash(id) % VIZ.length;\n}\n\nexport function assignSeries(ids: string[]): Map<string, number> {\n const out = new Map<string, number>();\n const used = new Set<number>();\n const clash = (k: number) => used.has(k) || (NEAR[k] !== undefined && used.has(NEAR[k]!));\n for (const id of ids) {\n if (out.has(id)) continue;\n let i = seriesIndex(id);\n if (clash(i)) {\n const keys = [...VIZ.keys()];\n i = keys.find((k) => !clash(k)) ?? keys.find((k) => !used.has(k)) ?? i;\n }\n used.add(i);\n out.set(id, i);\n }\n return out;\n}\n\nexport function seriesColors(ids: string[], thin = false): Map<string, string> {\n return new Map([...assignSeries(ids)].map(([id, i]) => [id, (thin ? VIZ_THIN : VIZ)[i]!]));\n}\n\nexport const seriesColor = (id: string, thin = false) => (thin ? VIZ_THIN : VIZ)[seriesIndex(id)]!;\n\nexport type TokenKind = keyof typeof tokenKindSeries;\nexport const tokenKindColor = (k: TokenKind, thin = false) => {\n if (tokenKindTint[k]) return \"var(--k-viz-1-soft)\";\n return (thin ? VIZ_THIN : VIZ)[tokenKindSeries[k] - 1]!;\n};\nexport const TOKEN_KIND_ORDER: TokenKind[] = [\"input\", \"cacheRead\", \"cacheWrite\", \"output\", \"reasoning\"];\nexport function tokenKindLabel(kind: TokenKind, t: UiText = englishText): string {\n switch (kind) {\n case \"input\":\n return t(\"tokenKind.input\", \"Input\");\n case \"output\":\n return t(\"tokenKind.output\", \"Output\");\n case \"cacheRead\":\n return t(\"tokenKind.cacheRead\", \"Cache read\");\n case \"cacheWrite\":\n return t(\"tokenKind.cacheWrite\", \"Cache write\");\n case \"reasoning\":\n return t(\"tokenKind.reasoning\", \"Reasoning\");\n }\n}\n\nexport function useSize<T extends HTMLElement>(): [(el: T | null) => void, { width: number; height: number }] {\n const [el, setEl] = useState<T | null>(null);\n const [size, setSize] = useState({ width: 0, height: 0 });\n useLayoutEffect(() => {\n if (!el) return;\n const set = () => setSize({ width: Math.round(el.clientWidth), height: Math.round(el.clientHeight) });\n set();\n return observeResize([el], set);\n }, [el]);\n return [setEl, size];\n}\n\nconst ease = (t: number) => 1 - Math.pow(1 - t, 3);\nconst reducedMotion = () => typeof matchMedia !== \"undefined\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\nconst mix = (from: number[], to: number[], t: number) => (t >= 1 ? to : to.map((v, i) => (from[i] ?? v) + (v - (from[i] ?? v)) * ease(t)));\n\nexport function tweens(from: number[], to: number[]): boolean {\n return from.length === to.length && from.some((v) => v !== 0) && to.some((v) => v !== 0) && from.some((v, i) => v !== to[i]) && !reducedMotion();\n}\n\nexport function useTweened(values: number[], still = false): number[] {\n const key = values.join(\",\");\n const [tween, setTween] = useState({ key, from: values, to: values, t: 1, still });\n let current = tween;\n if (tween.key !== key || tween.still !== still) {\n const drawn = mix(tween.from, tween.to, tween.t);\n const animate = !still && !tween.still && tweens(drawn, values);\n current = animate ? { key, from: drawn, to: values, t: 0, still } : { key, from: values, to: values, t: 1, still };\n setTween(current);\n }\n const running = current.t < 1;\n useEffect(() => {\n if (!running) return;\n const start = performance.now();\n let raf = 0;\n const step = () => {\n const t = Math.max(0, Math.min(1, (performance.now() - start) / motion.duration.chart));\n setTween((s) => (s.key === key ? { ...s, t } : s));\n if (t < 1) raf = requestAnimationFrame(step);\n };\n raf = requestAnimationFrame(step);\n return () => cancelAnimationFrame(raf);\n }, [key, running]);\n return mix(current.from, current.to, current.t);\n}\n\nexport function useTweenedScale(values: number[], top: number, still = false): { values: number[]; top: number } {\n const any = values.some((v) => v !== 0);\n const drawn = useTweened(any ? [...values, top] : values, still);\n return any ? { values: drawn.slice(0, -1), top: drawn[drawn.length - 1] ?? top } : { values: drawn, top };\n}\n\nexport interface ChartState {\n loading?: boolean | undefined;\n error?: ReactNode | undefined;\n onRetry?: (() => void) | undefined;\n empty?: boolean | undefined;\n emptyText?: ReactNode | undefined;\n}\n\nexport interface TableData {\n columns: string[];\n rows: (string | number)[][];\n}\n\nexport function ChartFrame({\n label,\n height,\n children,\n table,\n legend,\n state = {},\n className,\n toggle = true,\n}: {\n label: string;\n height: number;\n children: ReactNode;\n table?: TableData | undefined;\n legend?: ReactNode | undefined;\n state?: ChartState | undefined;\n className?: string | undefined;\n toggle?: boolean | undefined;\n}) {\n const [asTable, setAsTable] = useState(false);\n const t = useUiText();\n return (\n <figure className={cn(\"@container flex min-w-0 flex-col gap-12\", className)} aria-label={label}>\n {state.error ? (\n <div className=\"flex flex-col items-center justify-center gap-8 text-center\" style={{ height }}>\n <p role=\"alert\" className=\"text-body text-fg-secondary\">\n {t(\"chartFrame.loadFailed\", \"Couldn't load this chart\")}\n </p>\n {state.onRetry && (\n <Button size=\"sm\" onClick={state.onRetry}>\n {t(\"chartFrame.tryAgain\", \"Try again\")}\n </Button>\n )}\n </div>\n ) : asTable && table ? (\n <div className=\"overflow-auto scrollbar-quiet\" style={{ minHeight: height }}>\n <DataTablePlain table={table} />\n </div>\n ) : (\n <div className=\"relative\" style={{ height }}>\n {state.loading && state.empty ? <Skeleton className=\"absolute inset-0\" /> : children}\n {state.loading && !state.empty && <Skeleton className=\"absolute inset-x-0 bottom-0 h-2 rounded-pill\" />}\n {state.empty && !state.loading && (\n <div className=\"absolute inset-0 flex items-center justify-center text-body text-fg-secondary\">\n {state.emptyText ?? t(\"chartFrame.noData\", \"No data for this period\")}\n </div>\n )}\n </div>\n )}\n {(legend || (toggle && table)) && (\n <div className=\"flex flex-col gap-8 @chart-legend:flex-row @chart-legend:gap-12\">\n {!asTable && legend && <div className=\"min-w-0 @chart-legend:flex-1\">{legend}</div>}\n {toggle && table && (\n <button\n type=\"button\"\n onClick={() => setAsTable((v) => !v)}\n aria-pressed={asTable}\n className=\"relative ml-auto inline-flex h-28 shrink-0 cursor-pointer items-center self-end rounded-pill px-10 text-small font-medium text-fg-secondary transition-control hover:bg-fill-1 hover:text-fg focus-ring tap-target\"\n >\n {asTable ? t(\"chartFrame.viewAsChart\", \"View as chart\") : t(\"chartFrame.viewAsTable\", \"View as table\")}\n </button>\n )}\n </div>\n )}\n {table && !asTable && (\n <div className=\"sr-only\">\n <DataTablePlain table={table} caption={label} />\n </div>\n )}\n </figure>\n );\n}\n\nfunction DataTablePlain({ table, caption }: { table: TableData; caption?: string | undefined }) {\n return (\n <table className=\"w-full text-body\">\n {caption && <caption className=\"sr-only\">{caption}</caption>}\n <thead>\n <tr className=\"hairline-b-strong\">\n {table.columns.map((c, i) => (\n <th key={c} scope=\"col\" className={cn(\"h-36 px-12 text-caption font-medium text-fg-secondary first:pl-0\", i > 0 ? \"text-right\" : \"text-left\")}>\n {c}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {table.rows.map((r, i) => (\n <tr key={i} className=\"hairline-b\">\n {r.map((v, j) => (\n <td key={j} className={cn(\"h-36 px-12 first:pl-0\", j > 0 ? \"text-right tabular\" : \"text-left\")}>\n {v}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n\nexport interface LegendItem {\n id: string;\n label: ReactNode;\n color: string;\n value?: ReactNode | undefined;\n}\n\nexport function Swatch({ color, shape = \"square\", off }: { color: string; shape?: \"square\" | \"line\" | undefined; off?: boolean | undefined }) {\n return (\n <span\n aria-hidden\n className={cn(\"shrink-0 transition-control\", shape === \"line\" ? \"h-2 w-12 rounded-pill\" : \"size-10 rounded-bar\", off && \"opacity-30\")}\n style={{ background: color }}\n />\n );\n}\nif (process.env.NODE_ENV !== \"production\") Swatch.displayName = \"Swatch\";\n\nexport const tickLabel = (format: (v: number) => string) => (v: number) => format(v).replace(/[.,]00(?=\\D*$)/, \"\");\n\nexport function readableTicks(scale: { ticks: (count: number) => number[]; domain: () => number[] }, label: (v: number) => string, count = 4): number[] {\n for (let n = count; n >= 1; n--) {\n const ticks = scale.ticks(n);\n if (new Set(ticks.map(label)).size === ticks.length) return ticks;\n }\n const [lo = 0, hi = 0] = scale.domain();\n return label(lo) === label(hi) ? [lo] : [lo, hi];\n}\n\nexport type AxisDate = Date | string;\n\nfunction dayNumber(d: AxisDate): number {\n if (d instanceof Date) return Number.isNaN(d.getTime()) ? NaN : Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()) / 86_400_000;\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(d);\n return m ? Date.UTC(Number(m[1]), Number(m[2]) - 1, Number(m[3])) / 86_400_000 : NaN;\n}\nconst yearOfDay = (n: number) => new Date(n * 86_400_000).getUTCFullYear();\n\nexport function yearStarts(dates: readonly AxisDate[]): number[] {\n const days = dates.map(dayNumber);\n const out: number[] = [];\n days.forEach((d, i) => {\n const prev = i > 0 ? days[i - 1]! : days.length > 1 ? 2 * d - days[1]! : NaN;\n if (Number.isFinite(d) && Number.isFinite(prev) && yearOfDay(d) !== yearOfDay(prev)) out.push(i);\n });\n return out;\n}\n\nconst WIDE = /[\\p{Script=Han}\\p{Script=Hiragana}\\p{Script=Katakana}\\p{Script=Hangul}\\u3000-\\u303f\\uff00-\\uffef]/u;\n\nexport function labelWidth(label: string): number {\n let em = 0;\n for (const ch of label) em += WIDE.test(ch) ? 1 : /\\p{Lu}/u.test(ch) ? 0.8 : /\\p{Ll}/u.test(ch) ? 0.6 : /\\p{Nd}/u.test(ch) ? 0.66 : /\\s/.test(ch) ? 0.3 : 0.4;\n return em * AXIS.label.fontSize;\n}\n\nconst LABEL_GAP = 8;\n\nexport function placeTimeLabels(\n ticks: { key: number; at: number; label: string }[],\n right: number,\n): { key: number; x: number; anchor: \"start\" | \"middle\" | \"end\"; label: string }[] {\n const placed = ticks.map((t) => {\n const width = labelWidth(t.label);\n const anchor: \"start\" | \"middle\" | \"end\" = t.at - width / 2 < 0 ? \"start\" : t.at + width / 2 > right ? \"end\" : \"middle\";\n const x = anchor === \"start\" ? Math.max(t.at, 0) : t.at;\n const left = anchor === \"start\" ? x : anchor === \"end\" ? x - width : x - width / 2;\n return { key: t.key, x, anchor, label: t.label, left, right: left + width };\n });\n const clear = (a: { right: number } | undefined, b: { left: number } | undefined) => !a || !b || a.right + LABEL_GAP <= b.left;\n if (placed.length > 2 && !clear(placed[0], placed[1])) placed.splice(1, 1);\n if (placed.length > 2 && !clear(placed[placed.length - 2], placed[placed.length - 1])) placed.splice(placed.length - 2, 1);\n const kept: typeof placed = [];\n for (const l of placed) if (clear(kept[kept.length - 1], l)) kept.push(l);\n return kept.map(({ key, x, anchor, label }) => ({ key, x, anchor, label }));\n}\n\nexport function axisLabelIndexes(\n labels: string[],\n step: number,\n edges: { start: number; end: number } = { start: Infinity, end: Infinity },\n dates?: readonly AxisDate[] | undefined,\n): number[] {\n const n = labels.length;\n if (n === 0) return [];\n const fits = (i: number) => labelWidth(labels[i]!) / 2 <= Math.min(edges.start + i * step, edges.end + (n - 1 - i) * step) + 1e-6;\n const room = Math.max(48, Math.max(...labels.map(labelWidth)) + 16);\n const every = step > 0 ? Math.max(1, Math.ceil(room / step - 1e-6)) : n;\n const starts = dates && dates.length === n ? yearStarts(dates) : [];\n let stride = every;\n for (let s = every; every > 1 && s <= every * 2; s++) {\n if (starts.every((i) => (i - starts[0]!) % s === 0)) {\n stride = s;\n break;\n }\n }\n const score = (p: number) => [\n starts.filter((i) => i % stride === p && fits(i)).length,\n (n - 1) % stride === p && fits(n - 1) ? 1 : 0,\n p === 0 && fits(0) ? 1 : 0,\n n - 1 - ((n - 1 - p) % stride),\n ];\n let best = 0;\n for (let p = 1; p < Math.min(stride, n); p++) {\n const a = score(p);\n const b = score(best);\n const k = a.findIndex((v, j) => v !== b[j]);\n if (k >= 0 && a[k]! > b[k]!) best = p;\n }\n const out: number[] = [];\n for (let i = best; i < n; i += stride) if (fits(i)) out.push(i);\n return out;\n}\n\nexport function Legend({\n items,\n hidden,\n onToggle,\n onHover,\n shape = \"square\",\n}: {\n items: LegendItem[];\n hidden?: Set<string> | undefined;\n onToggle?: ((id: string) => void) | undefined;\n onHover?: ((id: string | null) => void) | undefined;\n shape?: \"square\" | \"line\" | undefined;\n}) {\n const t = useUiText();\n return (\n <ul className=\"flex flex-wrap items-center gap-4\" aria-label={t(\"chartLegend.label\", \"Legend\")}>\n {items.map((it) => {\n const off = hidden?.has(it.id);\n const Comp = onToggle ? \"button\" : \"span\";\n return (\n <li key={it.id}>\n <Comp\n {...(onToggle ? { type: \"button\" as const, \"aria-pressed\": !off, onClick: () => onToggle(it.id) } : {})}\n onMouseEnter={() => onHover?.(it.id)}\n onMouseLeave={() => onHover?.(null)}\n onFocus={() => onHover?.(it.id)}\n onBlur={() => onHover?.(null)}\n className={cn(\n \"inline-flex h-28 items-center gap-8 rounded-pill px-10 text-small font-medium transition-control\",\n onToggle && \"relative cursor-pointer hover:bg-fill-1 focus-ring tap-target\",\n off ? \"text-fg-tertiary\" : \"text-fg\",\n )}\n >\n <Swatch color={it.color} shape={shape} off={off} />\n {it.label}\n {it.value !== undefined && <span className=\"text-fg-secondary tabular\">{it.value}</span>}\n </Comp>\n </li>\n );\n })}\n </ul>\n );\n}\nif (process.env.NODE_ENV !== \"production\") Legend.displayName = \"Legend\";\n\nexport interface TooltipRow {\n id: string;\n label: ReactNode;\n color: string;\n value: ReactNode;\n share?: ReactNode | undefined;\n}\n\nexport function ChartTooltip({\n x,\n xLeft = x,\n y,\n width,\n heading,\n rows,\n visible,\n}: {\n x: number;\n xLeft?: number | undefined;\n y: number;\n width: number;\n heading: ReactNode;\n rows: TooltipRow[];\n visible: boolean;\n}) {\n const el = useRef<HTMLDivElement | null>(null);\n const [own, setOwn] = useState(0);\n useLayoutEffect(() => {\n const w = el.current?.offsetWidth ?? 0;\n if (w !== own) setOwn(w);\n }, [own, heading, rows, visible]);\n const flip = x > width / 2;\n const wanted = flip ? xLeft - 16 - own : x + 16;\n const left = own ? Math.round(Math.max(0, Math.min(wanted, width - own))) : undefined;\n return (\n <div\n ref={el}\n role=\"presentation\"\n aria-hidden\n className={cn(\n \"pointer-events-none absolute z-10 w-max min-w-200 max-w-360 rounded-tooltip bg-raised p-10 text-small shadow-raised opacity-motion\",\n visible && own ? \"opacity-100\" : \"opacity-0\",\n )}\n style={{\n ...(left !== undefined ? { left } : flip ? { right: Math.round(width - xLeft + 16) } : { left: Math.round(x + 16) }),\n top: Math.round(Math.max(0, y - 24)),\n }}\n >\n <div className=\"mb-6 text-caption font-medium text-fg tabular\">{heading}</div>\n <div className=\"flex flex-col gap-4\">\n {rows.map((r) => (\n <div key={r.id} className=\"flex items-center gap-8\">\n <Swatch color={r.color} />\n <span className=\"min-w-0 flex-1 truncate pr-12 text-fg-secondary\">{r.label}</span>\n <span className=\"font-medium text-fg tabular\">{r.value}</span>\n {r.share !== undefined && <span className=\"w-40 text-right text-fg-tertiary tabular\">{r.share}</span>}\n </div>\n ))}\n </div>\n </div>\n );\n}\nif (process.env.NODE_ENV !== \"production\") ChartTooltip.displayName = \"ChartTooltip\";\n\nexport const AXIS = {\n grid: { stroke: \"var(--k-line)\", strokeDasharray: \"3 3\", strokeWidth: 1 },\n baseline: { stroke: \"var(--k-line-strong)\", strokeWidth: 1 },\n label: { fill: \"var(--k-text-tertiary)\", fontSize: 12, fontWeight: 500, style: { fontVariantNumeric: \"tabular-nums\" as const } },\n};\n\nexport const KAESO_CHARTS_VARIANTS = {\n chrome: { default: { classes: \"\" } },\n} as const;\nexport const KAESO_CHARTS_DEFAULT_VARIANTS = { chrome: \"default\" } as const;\n\nexport function chartKeyIndex(\n key: string,\n index: number | null,\n count: number,\n { vertical = false, start = count - 1 }: { vertical?: boolean | undefined; start?: number | undefined } = {},\n): number | null | undefined {\n if (count <= 0) return undefined;\n const back = vertical ? \"ArrowUp\" : \"ArrowLeft\";\n const forward = vertical ? \"ArrowDown\" : \"ArrowRight\";\n if (key === back) return index === null ? start : Math.max(0, index - 1);\n if (key === forward) return index === null ? start : Math.min(count - 1, index + 1);\n if (key === \"Home\") return 0;\n if (key === \"End\") return count - 1;\n if (key === \"Escape\") return index === null ? undefined : null;\n return undefined;\n}\n\nexport function useChartKeys(count: number, options: { vertical?: boolean | undefined; start?: number | undefined } = {}) {\n const [index, setIndex] = useState<number | null>(null);\n const start = options.start ?? count - 1;\n const props = {\n tabIndex: count > 0 ? 0 : -1,\n onFocus: (e: React.FocusEvent<HTMLElement>) => {\n if (e.target !== e.currentTarget) return;\n let keyboard = true;\n try {\n keyboard = e.currentTarget.matches(\":focus-visible\");\n } catch {}\n if (keyboard && !document.documentElement.hasAttribute(\"data-k-pointer\")) setIndex(Math.max(0, start));\n },\n onBlur: () => setIndex(null),\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => {\n const next = chartKeyIndex(e.key, index, count, { vertical: !!options.vertical, start });\n if (next === undefined) return;\n e.preventDefault();\n if (next === null) e.stopPropagation();\n setIndex(next);\n },\n };\n return { index: index !== null && index < count ? index : null, props };\n}\n\nexport function ChartLive({ children }: { children?: ReactNode | undefined }) {\n return (\n <div className=\"sr-only\" aria-live=\"polite\" aria-atomic>\n {children}\n </div>\n );\n}\nif (process.env.NODE_ENV !== \"production\") ChartLive.displayName = \"ChartLive\";\n\nexport const liveLine = (heading: ReactNode, rows: { label: ReactNode; value: ReactNode }[], t: UiText = englishText) =>\n t(\"chart.liveLine\", \"{heading}: {values}\", {\n heading: String(heading),\n values: rows.map((r) => t(\"chart.liveValue\", \"{label} {value}\", { label: String(r.label), value: String(r.value) })).join(t(\"chart.listSeparator\", \", \")),\n });\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { i as e } from "./context-BELWW79w.js";
|
|
3
|
-
import { i as t } from "./popover-
|
|
4
|
-
import { t as n } from "./calendar
|
|
5
|
-
import { t as r } from "./iso-field-
|
|
3
|
+
import { i as t } from "./popover-CFMwaeIP.js";
|
|
4
|
+
import { t as n } from "./calendar--YemJsv4.js";
|
|
5
|
+
import { t as r } from "./iso-field-CWbxlll-.js";
|
|
6
6
|
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
7
7
|
//#region src/components/date-picker/date-popup.tsx
|
|
8
8
|
function o({ date: o, onDateChange: s, onClose: c, weekStartsOn: l, disabledDays: u }) {
|
|
@@ -32,4 +32,4 @@ function o({ date: o, onDateChange: s, onClose: c, weekStartsOn: l, disabledDays
|
|
|
32
32
|
//#endregion
|
|
33
33
|
export { o as DatePopup };
|
|
34
34
|
|
|
35
|
-
//# sourceMappingURL=date-popup-
|
|
35
|
+
//# sourceMappingURL=date-popup-RQkqhko4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-popup-
|
|
1
|
+
{"version":3,"file":"date-popup-RQkqhko4.js","names":["useUiText","Popover","Calendar","IsoField","DatePopup","t","date","onDateChange","d","onClose","disabledDays"],"sources":["../../src/components/date-picker/date-popup.tsx"],"sourcesContent":["import { Calendar, type CalendarProps } from \"../calendar/calendar.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { IsoField } from \"./iso-field.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport interface DatePopupProps {\n date: Date | null;\n onDateChange: (date: Date | null) => void;\n onClose: () => void;\n weekStartsOn: CalendarProps[\"weekStartsOn\"];\n disabledDays: ((date: Date) => boolean) | undefined;\n}\n\nexport function DatePopup({ date, onDateChange, onClose, weekStartsOn, disabledDays }: DatePopupProps) {\n const t = useUiText();\n return (\n <Popover.Content padding=\"form\" aria-label={t(\"datePicker.chooseDate\", \"Choose a date\")}>\n <Calendar\n mode=\"single\"\n selected={date ?? undefined}\n {...(date ? { defaultMonth: date } : {})}\n onSelect={(d) => {\n onDateChange((d as Date | undefined) ?? null);\n if (d) onClose();\n }}\n weekStartsOn={weekStartsOn}\n disabled={disabledDays}\n />\n <div className=\"mt-12 flex gap-8\">\n <IsoField\n label={t(\"datePicker.date\", \"Date\")}\n value={date ?? undefined}\n onCommit={(d) => {\n if (disabledDays?.(d)) return false;\n onDateChange(d);\n return true;\n }}\n />\n </div>\n </Popover.Content>\n );\n}\n"],"mappings":";;;;;;;AAaA,SAAgBI,EAAU,EAAE,SAAM,iBAAc,YAAS,iBAAc,mBAAgC;CACrG,IAAMC,IAAIL,EAAU;CACpB,OACE,kBAACC,EAAQ,SAAT;EAAiB,SAAQ;EAAO,cAAYI,EAAE,yBAAyB,eAAe;EAAtF,UAAA,CACE,kBAACH,GAAD;GACE,MAAK;GACL,UAAUI,KAAQ,KAAA;GAClB,GAAKA,IAAO,EAAE,cAAcA,EAAK,IAAI,CAAC;GACtC,WAAW,MAAM;IAEf,AADAC,EAAcC,KAA0B,IAAI,GACxCA,KAAGC,EAAQ;GACjB;GACc;GACd,UAAUC;EACX,CAAA,GACD,kBAAC,OAAD;GAAK,WAAU;GACb,UAAA,kBAACP,GAAD;IACE,OAAOE,EAAE,mBAAmB,MAAM;IAClC,OAAOC,KAAQ,KAAA;IACf,WAAW,MACT,CAAII,IAAeF,CAAC,MACpBD,EAAaC,CAAC,GACP;GAEV,CAAA;EACE,CAAA,CACU;;AAErB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "./cn-
|
|
2
|
+
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
3
|
import { r as t } from "./portal-context-BBbzDKmY.js";
|
|
4
4
|
import { n, t as r } from "./inset-BnBj8NJV.js";
|
|
5
5
|
import { i } from "./context-BELWW79w.js";
|
|
6
|
-
import { i as a, n as o } from "./button-
|
|
7
|
-
import { t as s } from "./icon-button-
|
|
8
|
-
import { t as c } from "./input-
|
|
6
|
+
import { i as a, n as o } from "./button-Dzu7_csE.js";
|
|
7
|
+
import { t as s } from "./icon-button-CPYR21Sz.js";
|
|
8
|
+
import { t as c } from "./input-TyLIaQ5k.js";
|
|
9
9
|
import { a as l, i as u, t as d } from "./resize-motion-DS3rIIqy.js";
|
|
10
10
|
import { t as f } from "./over-sheet-B8vzr_zU.js";
|
|
11
11
|
import { cloneElement as p, createContext as m, forwardRef as h, use as g, useCallback as _, useEffect as v, useLayoutEffect as y, useRef as b, useState as x } from "react";
|
|
@@ -350,4 +350,4 @@ process.env.NODE_ENV !== "production" && ($.displayName = "LayerDialog");
|
|
|
350
350
|
//#endregion
|
|
351
351
|
export { I as a, re as c, te as i, $ as l, Y as n, F as o, ne as r, ie as s, Z as t, P as u };
|
|
352
352
|
|
|
353
|
-
//# sourceMappingURL=dialog-
|
|
353
|
+
//# sourceMappingURL=dialog-DQ9vZ7vr.js.map
|