@logicplanes/kaeso-ui 0.4.3 → 0.4.5
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 +279 -98
- package/ai/component-registry.json +352 -236
- package/ai/component-registry.md +241 -219
- package/ai/icons.md +2 -2
- package/ai/tokens.md +18 -14
- package/dist/blocks/delete-resource.js +3 -3
- package/dist/blocks/delete-resource.js.map +1 -1
- package/dist/blocks/pages.js +47 -42
- package/dist/blocks/pages.js.map +1 -1
- package/dist/blocks/resource-list.js +68 -55
- package/dist/blocks/resource-list.js.map +1 -1
- package/dist/chunks/agent-avatar-DHieggHK.js +188 -0
- package/dist/chunks/agent-avatar-DHieggHK.js.map +1 -0
- package/dist/chunks/app-frame-DysOel2X.js +232 -0
- package/dist/chunks/app-frame-DysOel2X.js.map +1 -0
- package/dist/chunks/arrow-focus-B0KdRFX8.js +20 -0
- package/dist/chunks/arrow-focus-B0KdRFX8.js.map +1 -0
- package/dist/chunks/avatar-CYNMK7uY.js +110 -0
- package/dist/chunks/avatar-CYNMK7uY.js.map +1 -0
- package/dist/chunks/badge-C0GC3B9X.js +27 -0
- package/dist/chunks/badge-C0GC3B9X.js.map +1 -0
- package/dist/chunks/banner-B3DGLTBu.js +88 -0
- package/dist/chunks/banner-B3DGLTBu.js.map +1 -0
- package/dist/chunks/button-IblhXUyZ.js +202 -0
- package/dist/chunks/button-IblhXUyZ.js.map +1 -0
- package/dist/chunks/{calendar-BWaf2MXc.js → calendar-Dc6_dl0f.js} +4 -4
- package/dist/chunks/calendar-Dc6_dl0f.js.map +1 -0
- package/dist/chunks/checkbox-9tbimmF3.js +141 -0
- package/dist/chunks/checkbox-9tbimmF3.js.map +1 -0
- package/dist/chunks/{cn-Dj6sRgkF.js → cn-BjnOAUrA.js} +45 -4
- package/dist/chunks/cn-BjnOAUrA.js.map +1 -0
- package/dist/chunks/code-block-64e-Cy1S.js +346 -0
- package/dist/chunks/code-block-64e-Cy1S.js.map +1 -0
- package/dist/chunks/code-block-KIvuE8jg.js +352 -0
- package/dist/chunks/code-block-KIvuE8jg.js.map +1 -0
- package/dist/chunks/{code-tqj0uhBL.js → code-xqjww4Pv.js} +5 -6
- package/dist/chunks/code-xqjww4Pv.js.map +1 -0
- package/dist/chunks/combobox-DkcjkWc6.js +352 -0
- package/dist/chunks/combobox-DkcjkWc6.js.map +1 -0
- package/dist/chunks/command-list-CypqsC4T.js +456 -0
- package/dist/chunks/command-list-CypqsC4T.js.map +1 -0
- package/dist/chunks/{copy-button-FJvPJn72.js → copy-button-CwU8t_9_.js} +22 -15
- package/dist/chunks/copy-button-CwU8t_9_.js.map +1 -0
- package/dist/chunks/core-CmK-8ObW.js +505 -0
- package/dist/chunks/core-CmK-8ObW.js.map +1 -0
- package/dist/chunks/data-table-CqY8_6IS.js +581 -0
- package/dist/chunks/data-table-CqY8_6IS.js.map +1 -0
- package/dist/chunks/date-popup-DAnjptFt.js +58 -0
- package/dist/chunks/date-popup-DAnjptFt.js.map +1 -0
- package/dist/chunks/{de-CPXJh9cq.js → de-CqC4aSIV.js} +81 -40
- package/dist/chunks/de-CqC4aSIV.js.map +1 -0
- package/dist/chunks/{dialog-Cg9A_6SF.js → dialog-2zb6ClNR.js} +156 -134
- package/dist/chunks/dialog-2zb6ClNR.js.map +1 -0
- package/dist/chunks/disclosure-BtYRTDO3.js +22 -0
- package/dist/chunks/disclosure-BtYRTDO3.js.map +1 -0
- package/dist/chunks/domain-obd_w9xk.js +28 -0
- package/dist/chunks/domain-obd_w9xk.js.map +1 -0
- package/dist/chunks/{empty-DvhyMXQq.js → empty-BpiUgGzm.js} +2 -2
- package/dist/chunks/{empty-DvhyMXQq.js.map → empty-BpiUgGzm.js.map} +1 -1
- package/dist/chunks/{field-TviMvYa2.js → field-D7m-yl-D.js} +37 -34
- package/dist/chunks/field-D7m-yl-D.js.map +1 -0
- package/dist/chunks/{icon-D7ja-_Yk.js → icon-CBzOwqrX.js} +7 -6
- package/dist/chunks/{icon-D7ja-_Yk.js.map → icon-CBzOwqrX.js.map} +1 -1
- package/dist/chunks/icon-CPJWE2N-.js +95 -0
- package/dist/chunks/{icon-DVooQfk4.js.map → icon-CPJWE2N-.js.map} +1 -1
- package/dist/chunks/{icon-button-CrdF_eMG.js → icon-button-Dfwpvmav.js} +7 -6
- package/dist/chunks/icon-button-Dfwpvmav.js.map +1 -0
- package/dist/chunks/{identity-BmhQ6BQ-.js → identity-3Foi5F8w.js} +7 -7
- package/dist/chunks/{identity-BmhQ6BQ-.js.map → identity-3Foi5F8w.js.map} +1 -1
- package/dist/chunks/{input-2VJuj_M4.js → input-Bo5-UZg2.js} +15 -9
- package/dist/chunks/input-Bo5-UZg2.js.map +1 -0
- package/dist/chunks/{input-group-DQ_4DoXg.js → input-group-jPcK9T_a.js} +42 -29
- package/dist/chunks/input-group-jPcK9T_a.js.map +1 -0
- package/dist/chunks/iso-field-DoqHBg8n.js +52 -0
- package/dist/chunks/iso-field-DoqHBg8n.js.map +1 -0
- package/dist/chunks/json-view-DZ2nL2Ir.js +253 -0
- package/dist/chunks/json-view-DZ2nL2Ir.js.map +1 -0
- package/dist/chunks/{kbd-BF1vKXJf.js → kbd-8A0ML_up.js} +30 -28
- package/dist/chunks/kbd-8A0ML_up.js.map +1 -0
- package/dist/chunks/label-DW24Aj0Z.js +26 -0
- package/dist/chunks/label-DW24Aj0Z.js.map +1 -0
- package/dist/chunks/{link-KWI7PevW.js → link-CMjkcLQK.js} +14 -14
- package/dist/chunks/link-CMjkcLQK.js.map +1 -0
- package/dist/chunks/list-B4G-sWwV.js +540 -0
- package/dist/chunks/list-B4G-sWwV.js.map +1 -0
- package/dist/chunks/{loader-DCfPndXa.js → loader-zo8CCIGJ.js} +2 -2
- package/dist/chunks/{loader-DCfPndXa.js.map → loader-zo8CCIGJ.js.map} +1 -1
- package/dist/chunks/markdown-C565aBR7.js +338 -0
- package/dist/chunks/markdown-C565aBR7.js.map +1 -0
- package/dist/chunks/menu-Clvv6ftq.js +485 -0
- package/dist/chunks/menu-Clvv6ftq.js.map +1 -0
- package/dist/chunks/merge-refs-BN1FyQt9.js +20 -0
- package/dist/chunks/merge-refs-BN1FyQt9.js.map +1 -0
- package/dist/chunks/meter-CASMHlxl.js +100 -0
- package/dist/chunks/meter-CASMHlxl.js.map +1 -0
- package/dist/chunks/nav-sheet-Dt6JSvzX.js +67 -0
- package/dist/chunks/nav-sheet-Dt6JSvzX.js.map +1 -0
- package/dist/chunks/{nav-wordmark-_pjheAsZ.js → nav-wordmark-J4pB_vjr.js} +4 -8
- package/dist/chunks/nav-wordmark-J4pB_vjr.js.map +1 -0
- package/dist/chunks/page-header-kS5tdmvb.js +45 -0
- package/dist/chunks/page-header-kS5tdmvb.js.map +1 -0
- package/dist/chunks/pagination-D7fAm8qg.js +147 -0
- package/dist/chunks/pagination-D7fAm8qg.js.map +1 -0
- package/dist/chunks/picker-popover-1FHb1LQG.js +119 -0
- package/dist/chunks/picker-popover-1FHb1LQG.js.map +1 -0
- package/dist/chunks/popover-Bl5QYqnh.js +51 -0
- package/dist/chunks/popover-Bl5QYqnh.js.map +1 -0
- package/dist/chunks/{portal-context-BBbzDKmY.js → portal-context-CTatR2Z8.js} +14 -4
- package/dist/chunks/portal-context-CTatR2Z8.js.map +1 -0
- package/dist/chunks/{radio-CDDFpdtL.js → radio-C6GtzF_t.js} +38 -23
- package/dist/chunks/radio-C6GtzF_t.js.map +1 -0
- package/dist/chunks/range-popup-lGiZsG3s.js +160 -0
- package/dist/chunks/range-popup-lGiZsG3s.js.map +1 -0
- package/dist/chunks/reasoning-frame-C3HdQRRS.js +51 -0
- package/dist/chunks/reasoning-frame-C3HdQRRS.js.map +1 -0
- package/dist/chunks/release-art-ChiT4T2S.js +582 -0
- package/dist/chunks/release-art-ChiT4T2S.js.map +1 -0
- package/dist/chunks/rights-B68ocZuq.js +312 -0
- package/dist/chunks/rights-B68ocZuq.js.map +1 -0
- package/dist/chunks/{scroll-area-D8MD7Vpo.js → scroll-area-_Ljh4-bG.js} +11 -6
- package/dist/chunks/scroll-area-_Ljh4-bG.js.map +1 -0
- package/dist/chunks/section-CFBYhsUi.js +77 -0
- package/dist/chunks/section-CFBYhsUi.js.map +1 -0
- package/dist/chunks/section-header-DU1Q4Tdf.js +28 -0
- package/dist/chunks/section-header-DU1Q4Tdf.js.map +1 -0
- package/dist/chunks/segmented-D9i1avik.js +119 -0
- package/dist/chunks/segmented-D9i1avik.js.map +1 -0
- package/dist/chunks/select-BqjmQOqx.js +222 -0
- package/dist/chunks/select-BqjmQOqx.js.map +1 -0
- package/dist/chunks/{separator-D7TzNHmX.js → separator-BNWf6BBj.js} +13 -8
- package/dist/chunks/separator-BNWf6BBj.js.map +1 -0
- package/dist/chunks/sidebar-Dq7oGOje.js +664 -0
- package/dist/chunks/sidebar-Dq7oGOje.js.map +1 -0
- package/dist/chunks/{sidebar-menu-BN3jkTlK.js → sidebar-menu-QSSNu1jJ.js} +2 -2
- package/dist/chunks/{sidebar-menu-BN3jkTlK.js.map → sidebar-menu-QSSNu1jJ.js.map} +1 -1
- package/dist/chunks/{skeleton-Dcz57Zyp.js → skeleton-D-qk3mes.js} +3 -3
- package/dist/chunks/skeleton-D-qk3mes.js.map +1 -0
- package/dist/chunks/slider-CcE8GtuV.js +58 -0
- package/dist/chunks/slider-CcE8GtuV.js.map +1 -0
- package/dist/chunks/{status-dot-QJTF0Yv4.js → status-dot-CP6runiC.js} +4 -4
- package/dist/chunks/{status-dot-QJTF0Yv4.js.map → status-dot-CP6runiC.js.map} +1 -1
- package/dist/chunks/{styles-CVJU9t9v.js → styles-hkFkoBbi.js} +2 -2
- package/dist/chunks/{styles-CVJU9t9v.js.map → styles-hkFkoBbi.js.map} +1 -1
- package/dist/chunks/{swap-text-Dr0Irxz6.js → swap-text-SlUjrTlG.js} +3 -3
- package/dist/chunks/swap-text-SlUjrTlG.js.map +1 -0
- package/dist/chunks/switch-ngywMQdl.js +76 -0
- package/dist/chunks/switch-ngywMQdl.js.map +1 -0
- package/dist/chunks/table-CTK5E0J7.js +102 -0
- package/dist/chunks/table-CTK5E0J7.js.map +1 -0
- package/dist/chunks/tag-BGr6lTSV.js +100 -0
- package/dist/chunks/tag-BGr6lTSV.js.map +1 -0
- package/dist/chunks/{text-CIXH8rmT.js → text-DkKdTVUf.js} +9 -9
- package/dist/chunks/text-DkKdTVUf.js.map +1 -0
- package/dist/chunks/{textarea--4FRL3Pb.js → textarea-CO0HP6fK.js} +47 -36
- package/dist/chunks/textarea-CO0HP6fK.js.map +1 -0
- package/dist/chunks/timeseries-Ck-q0wWn.js +381 -0
- package/dist/chunks/timeseries-Ck-q0wWn.js.map +1 -0
- package/dist/chunks/toolbar-u0Gm7Q7-.js +61 -0
- package/dist/chunks/toolbar-u0Gm7Q7-.js.map +1 -0
- package/dist/chunks/tooltip-Tkm-urbi.js +202 -0
- package/dist/chunks/tooltip-Tkm-urbi.js.map +1 -0
- package/dist/chunks/tooltip-root-BC_RNNiP.js +70 -0
- package/dist/chunks/tooltip-root-BC_RNNiP.js.map +1 -0
- package/dist/chunks/truncated-d1afmUJT.js +33 -0
- package/dist/chunks/truncated-d1afmUJT.js.map +1 -0
- package/dist/chunks/use-coarse-pointer-Ml5oE6oX.js +28 -0
- package/dist/chunks/use-coarse-pointer-Ml5oE6oX.js.map +1 -0
- package/dist/chunks/use-hydrating-COtYVRo4.js +8 -0
- package/dist/chunks/use-hydrating-COtYVRo4.js.map +1 -0
- package/dist/chunks/use-scroll-fade-uc8mWSDX.js +30 -0
- package/dist/chunks/use-scroll-fade-uc8mWSDX.js.map +1 -0
- package/dist/chunks/{zh-CN-29X4CDLE.js → zh-CN-BlpsT6d_.js} +80 -39
- package/dist/chunks/zh-CN-BlpsT6d_.js.map +1 -0
- package/dist/components/agent-avatar.js +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 +22 -22
- package/dist/components/button-group.js.map +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/charts/bar.js +235 -160
- package/dist/components/charts/bar.js.map +1 -1
- package/dist/components/charts/donut.js +144 -99
- package/dist/components/charts/donut.js.map +1 -1
- package/dist/components/charts/gauge.js +61 -49
- package/dist/components/charts/gauge.js.map +1 -1
- package/dist/components/charts/heatmap.js +179 -70
- package/dist/components/charts/heatmap.js.map +1 -1
- package/dist/components/charts/sankey.js +144 -77
- package/dist/components/charts/sankey.js.map +1 -1
- package/dist/components/charts/sparkline.js +54 -38
- package/dist/components/charts/sparkline.js.map +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 +4 -3
- package/dist/components/code.js +1 -1
- package/dist/components/collapsible.js +77 -1
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-list.js +2 -2
- package/dist/components/command-palette.js +89 -66
- package/dist/components/command-palette.js.map +1 -1
- package/dist/components/copy-button.js +1 -1
- package/dist/components/data-table.js +1 -459
- package/dist/components/date-picker.js +162 -151
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/dialog.js +74 -63
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/display-options.js +76 -64
- package/dist/components/display-options.js.map +1 -1
- package/dist/components/empty.js +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/figure.js +2 -2
- package/dist/components/filter-chip.js +36 -27
- package/dist/components/filter-chip.js.map +1 -1
- package/dist/components/filter-row.js +4 -4
- package/dist/components/filter-row.js.map +1 -1
- package/dist/components/flow.js +94 -63
- package/dist/components/flow.js.map +1 -1
- package/dist/components/heading.js +1 -1
- package/dist/components/icon-button.js +1 -1
- package/dist/components/icon.js +2 -2
- package/dist/components/input.js +176 -98
- package/dist/components/input.js.map +1 -1
- package/dist/components/kaeso/conversation.js +51 -46
- package/dist/components/kaeso/conversation.js.map +1 -1
- package/dist/components/kaeso/identity.js +1 -1
- package/dist/components/kaeso/moments.js +23 -20
- package/dist/components/kaeso/moments.js.map +1 -1
- package/dist/components/kaeso/rights.js +1 -1
- package/dist/components/kaeso/usage.js +90 -74
- package/dist/components/kaeso/usage.js.map +1 -1
- package/dist/components/kaeso.js +200 -187
- package/dist/components/kaeso.js.map +1 -1
- package/dist/components/kbd.js +1 -1
- package/dist/components/key-value.js +32 -47
- package/dist/components/key-value.js.map +1 -1
- package/dist/components/label.js +1 -25
- package/dist/components/layout.js +2 -2
- package/dist/components/layout.js.map +1 -1
- package/dist/components/link.js +1 -1
- package/dist/components/list.js +1 -1
- package/dist/components/loader.js +11 -10
- package/dist/components/loader.js.map +1 -1
- package/dist/components/logo.js +2 -2
- package/dist/components/markdown.js +1 -1
- package/dist/components/menu.js +2 -2
- 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 +644 -529
- package/dist/components/playground.js.map +1 -1
- package/dist/components/popover.js +4 -4
- package/dist/components/popover.js.map +1 -1
- package/dist/components/portal.js +1 -1
- package/dist/components/qr-code.js +2 -2
- package/dist/components/qr-code.js.map +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/release-art.js +1 -1
- package/dist/components/scroll-area.js +1 -1
- 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 +39 -46
- package/dist/components/settings.js.map +1 -1
- package/dist/components/sheet.js +10 -9
- package/dist/components/sheet.js.map +1 -1
- 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 +98 -84
- package/dist/components/stat.js.map +1 -1
- 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 +73 -55
- package/dist/components/tabs.js.map +1 -1
- 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 +5 -2
- package/dist/components/theme-menu.js.map +1 -1
- package/dist/components/theme-select.js +1 -1
- package/dist/components/thumbnail.js +35 -24
- package/dist/components/thumbnail.js.map +1 -1
- package/dist/components/timeline.js +51 -35
- package/dist/components/timeline.js.map +1 -1
- package/dist/components/toast.js +76 -66
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toc.js +14 -8
- 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/i18n-provider.js +1 -1
- package/dist/index.js +101 -101
- package/dist/kaeso.css +605 -67
- package/dist/styles.css +1 -1
- package/dist/tailwind.css +1 -1
- package/dist/types/blocks/delete-resource/delete-resource.d.ts +2 -2
- package/dist/types/components/agent-avatar/agent-avatar.d.ts +24 -19
- package/dist/types/components/badge/badge.d.ts +3 -3
- package/dist/types/components/banner/banner.d.ts +3 -3
- package/dist/types/components/button/button.d.ts +2 -2
- package/dist/types/components/button-group/button-group.d.ts +1 -1
- package/dist/types/components/charts/domain.d.ts +11 -0
- package/dist/types/components/charts/marks.d.ts +1 -0
- package/dist/types/components/code/code.d.ts +3 -3
- package/dist/types/components/code-block/diff-view.d.ts +30 -0
- package/dist/types/components/code-block/diff.d.ts +26 -0
- package/dist/types/components/code-block/docs.d.ts +14 -0
- package/dist/types/components/code-block/index.d.ts +1 -0
- package/dist/types/components/code-block/json-view.d.ts +2 -1
- package/dist/types/components/code-block/numbers.d.ts +1 -0
- package/dist/types/components/collapsible/collapsible.d.ts +2 -2
- package/dist/types/components/collapsible/disclosure.d.ts +2 -0
- package/dist/types/components/data-table/data-table.d.ts +6 -5
- package/dist/types/components/data-table/docs.d.ts +1 -0
- package/dist/types/components/data-table/time-columns.d.ts +1 -0
- package/dist/types/components/date-picker/focus-day.d.ts +1 -0
- package/dist/types/components/date-picker/iso-field.d.ts +8 -1
- package/dist/types/components/dialog/dialog.d.ts +7 -7
- package/dist/types/components/field/field.d.ts +1 -1
- package/dist/types/components/flow/flow.d.ts +1 -1
- package/dist/types/components/icon-button/icon-button.d.ts +1 -1
- package/dist/types/components/input/input-group.d.ts +2 -0
- package/dist/types/components/input/number-input.d.ts +4 -4
- package/dist/types/components/input/otp-input.d.ts +3 -3
- package/dist/types/components/kaeso/client-button.d.ts +2 -1
- package/dist/types/components/kaeso/provider-picker.d.ts +1 -0
- package/dist/types/components/kaeso/rights.d.ts +1 -1
- package/dist/types/components/kaeso/role-picker.d.ts +1 -0
- package/dist/types/components/key-value/key-value.d.ts +2 -2
- package/dist/types/components/layout/layout.d.ts +2 -2
- package/dist/types/components/link/link.d.ts +4 -4
- package/dist/types/components/list/list.d.ts +2 -2
- package/dist/types/components/menu/menu.d.ts +2 -1
- package/dist/types/components/menu/styles.d.ts +3 -3
- package/dist/types/components/meter/meter.d.ts +3 -3
- package/dist/types/components/page-header/page-header.d.ts +1 -1
- package/dist/types/components/pagination/pagination.d.ts +2 -2
- package/dist/types/components/playground/prompt-suggestions.d.ts +1 -0
- package/dist/types/components/playground/reasoning-frame.d.ts +14 -0
- package/dist/types/components/playground/reasoning.d.ts +1 -0
- package/dist/types/components/popover/popover.d.ts +1 -1
- package/dist/types/components/scroll-area/scroll-area.d.ts +2 -2
- package/dist/types/components/section/section-header.d.ts +6 -0
- package/dist/types/components/segmented/segmented.d.ts +1 -0
- package/dist/types/components/select/select.d.ts +1 -1
- package/dist/types/components/sheet/sheet.d.ts +3 -3
- package/dist/types/components/sidebar/sidebar.d.ts +1 -0
- package/dist/types/components/slider/slider.d.ts +2 -2
- package/dist/types/components/stat/stat.d.ts +1 -1
- package/dist/types/components/tabs/tabs.d.ts +6 -4
- package/dist/types/components/text/truncated.d.ts +7 -0
- package/dist/types/components/timeline/timeline.d.ts +5 -5
- package/dist/types/components/toc/toc.d.ts +1 -1
- package/dist/types/components/toolbar/toolbar.d.ts +1 -1
- package/dist/types/components/tooltip/tooltip.d.ts +2 -2
- package/dist/types/components/tooltip/trigger-props.d.ts +1 -0
- package/dist/types/hooks/use-coarse-pointer.d.ts +1 -0
- package/dist/types/hooks/use-hydrating.d.ts +1 -0
- package/dist/types/icons/groups.d.ts +1 -1
- package/dist/types/icons/vocabulary.d.ts +5 -0
- package/dist/types/utils/arrow-focus.d.ts +4 -1
- package/dist/types/utils/cn.d.ts +33 -0
- package/dist/types/utils/portal-context.d.ts +7 -1
- package/dist/utils.js +2 -2
- package/foundations/accessibility.md +3 -2
- package/foundations/color.md +5 -1
- package/foundations/elevation.md +1 -0
- package/foundations/motion.md +1 -1
- package/foundations/shape.md +2 -2
- package/foundations/typography.md +12 -12
- package/package.json +2 -2
- package/dist/chunks/agent-avatar-0pdBTWkR.js +0 -171
- package/dist/chunks/agent-avatar-0pdBTWkR.js.map +0 -1
- package/dist/chunks/app-frame-DogGRmsu.js +0 -221
- package/dist/chunks/app-frame-DogGRmsu.js.map +0 -1
- package/dist/chunks/arrow-focus-BcySmwwU.js +0 -11
- package/dist/chunks/arrow-focus-BcySmwwU.js.map +0 -1
- package/dist/chunks/avatar-CWbdwbJv.js +0 -83
- package/dist/chunks/avatar-CWbdwbJv.js.map +0 -1
- package/dist/chunks/badge-C2KtxCLB.js +0 -26
- package/dist/chunks/badge-C2KtxCLB.js.map +0 -1
- package/dist/chunks/banner-BA2ALw9M.js +0 -85
- package/dist/chunks/banner-BA2ALw9M.js.map +0 -1
- package/dist/chunks/button-CzuxqawA.js +0 -164
- package/dist/chunks/button-CzuxqawA.js.map +0 -1
- package/dist/chunks/calendar-BWaf2MXc.js.map +0 -1
- package/dist/chunks/checkbox-CQjwCPkc.js +0 -126
- package/dist/chunks/checkbox-CQjwCPkc.js.map +0 -1
- package/dist/chunks/cn-Dj6sRgkF.js.map +0 -1
- package/dist/chunks/code-block-D5A-CGXG.js +0 -330
- package/dist/chunks/code-block-D5A-CGXG.js.map +0 -1
- package/dist/chunks/code-tqj0uhBL.js.map +0 -1
- package/dist/chunks/collapsible-CKrCX_T9.js +0 -87
- package/dist/chunks/collapsible-CKrCX_T9.js.map +0 -1
- package/dist/chunks/combobox-DjDI7SUC.js +0 -319
- package/dist/chunks/combobox-DjDI7SUC.js.map +0 -1
- package/dist/chunks/command-list-C2Y7V_lt.js +0 -418
- package/dist/chunks/command-list-C2Y7V_lt.js.map +0 -1
- package/dist/chunks/copy-button-FJvPJn72.js.map +0 -1
- package/dist/chunks/core-BYns5ytV.js +0 -472
- package/dist/chunks/core-BYns5ytV.js.map +0 -1
- package/dist/chunks/date-popup-CPA_zt6o.js +0 -35
- package/dist/chunks/date-popup-CPA_zt6o.js.map +0 -1
- package/dist/chunks/de-CPXJh9cq.js.map +0 -1
- package/dist/chunks/dialog-Cg9A_6SF.js.map +0 -1
- package/dist/chunks/field-TviMvYa2.js.map +0 -1
- package/dist/chunks/hidden-description-B2zSmLcn.js +0 -23
- package/dist/chunks/hidden-description-B2zSmLcn.js.map +0 -1
- package/dist/chunks/icon-DVooQfk4.js +0 -94
- package/dist/chunks/icon-button-CrdF_eMG.js.map +0 -1
- package/dist/chunks/input-2VJuj_M4.js.map +0 -1
- package/dist/chunks/input-group-DQ_4DoXg.js.map +0 -1
- package/dist/chunks/iso-field-B2rTwiBo.js +0 -33
- package/dist/chunks/iso-field-B2rTwiBo.js.map +0 -1
- package/dist/chunks/json-view-Dqd2TDkc.js +0 -175
- package/dist/chunks/json-view-Dqd2TDkc.js.map +0 -1
- package/dist/chunks/kbd-BF1vKXJf.js.map +0 -1
- package/dist/chunks/link-KWI7PevW.js.map +0 -1
- package/dist/chunks/list-M1csq-d4.js +0 -494
- package/dist/chunks/list-M1csq-d4.js.map +0 -1
- package/dist/chunks/markdown-DULktoTK.js +0 -313
- package/dist/chunks/markdown-DULktoTK.js.map +0 -1
- package/dist/chunks/menu-DEmBfdPm.js +0 -450
- package/dist/chunks/menu-DEmBfdPm.js.map +0 -1
- package/dist/chunks/meter-Bj4N3Xuh.js +0 -84
- package/dist/chunks/meter-Bj4N3Xuh.js.map +0 -1
- package/dist/chunks/nav-sheet-CzgIwgAm.js +0 -60
- package/dist/chunks/nav-sheet-CzgIwgAm.js.map +0 -1
- package/dist/chunks/nav-wordmark-_pjheAsZ.js.map +0 -1
- package/dist/chunks/page-header-DL2y2iZp.js +0 -41
- package/dist/chunks/page-header-DL2y2iZp.js.map +0 -1
- package/dist/chunks/pagination-Cn_qF4cg.js +0 -86
- package/dist/chunks/pagination-Cn_qF4cg.js.map +0 -1
- package/dist/chunks/picker-popover-BxyU1U9F.js +0 -106
- package/dist/chunks/picker-popover-BxyU1U9F.js.map +0 -1
- package/dist/chunks/popover-DNN4S47w.js +0 -50
- package/dist/chunks/popover-DNN4S47w.js.map +0 -1
- package/dist/chunks/portal-context-BBbzDKmY.js.map +0 -1
- package/dist/chunks/radio-CDDFpdtL.js.map +0 -1
- package/dist/chunks/range-popup-CRyWYUB1.js +0 -128
- package/dist/chunks/range-popup-CRyWYUB1.js.map +0 -1
- package/dist/chunks/release-art-ZwfFQImt.js +0 -561
- package/dist/chunks/release-art-ZwfFQImt.js.map +0 -1
- package/dist/chunks/rights-Cyp0Pzp-.js +0 -279
- package/dist/chunks/rights-Cyp0Pzp-.js.map +0 -1
- package/dist/chunks/scroll-area-D8MD7Vpo.js.map +0 -1
- package/dist/chunks/scroll-parent-WXvzQcUo.js +0 -14
- package/dist/chunks/scroll-parent-WXvzQcUo.js.map +0 -1
- package/dist/chunks/section-Ce1efbsP.js +0 -87
- package/dist/chunks/section-Ce1efbsP.js.map +0 -1
- package/dist/chunks/segmented-CErcoxwi.js +0 -114
- package/dist/chunks/segmented-CErcoxwi.js.map +0 -1
- package/dist/chunks/select-x4XVsdCI.js +0 -210
- package/dist/chunks/select-x4XVsdCI.js.map +0 -1
- package/dist/chunks/separator-D7TzNHmX.js.map +0 -1
- package/dist/chunks/sidebar-3r1ZRXlN.js +0 -621
- package/dist/chunks/sidebar-3r1ZRXlN.js.map +0 -1
- package/dist/chunks/skeleton-Dcz57Zyp.js.map +0 -1
- package/dist/chunks/slider-Ci83PGtj.js +0 -57
- package/dist/chunks/slider-Ci83PGtj.js.map +0 -1
- package/dist/chunks/swap-text-Dr0Irxz6.js.map +0 -1
- package/dist/chunks/switch-BNMq_kGt.js +0 -59
- package/dist/chunks/switch-BNMq_kGt.js.map +0 -1
- package/dist/chunks/table-BeOSKl_3.js +0 -84
- package/dist/chunks/table-BeOSKl_3.js.map +0 -1
- package/dist/chunks/tag-D_M1s2qS.js +0 -87
- package/dist/chunks/tag-D_M1s2qS.js.map +0 -1
- package/dist/chunks/text-CIXH8rmT.js.map +0 -1
- package/dist/chunks/textarea--4FRL3Pb.js.map +0 -1
- package/dist/chunks/timeseries-D1xjRXfk.js +0 -339
- package/dist/chunks/timeseries-D1xjRXfk.js.map +0 -1
- package/dist/chunks/toolbar-WA_oZgu-.js +0 -37
- package/dist/chunks/toolbar-WA_oZgu-.js.map +0 -1
- package/dist/chunks/tooltip-OcwO0VUT.js +0 -154
- package/dist/chunks/tooltip-OcwO0VUT.js.map +0 -1
- package/dist/chunks/tooltip-root-DzahJDVj.js +0 -60
- package/dist/chunks/tooltip-root-DzahJDVj.js.map +0 -1
- package/dist/chunks/zh-CN-29X4CDLE.js.map +0 -1
- package/dist/components/data-table.js.map +0 -1
- package/dist/components/label.js.map +0 -1
package/dist/components/stat.js
CHANGED
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "../chunks/cn-
|
|
2
|
+
import { t as e } from "../chunks/cn-BjnOAUrA.js";
|
|
3
3
|
import { i as t, r as n } from "../chunks/context-BELWW79w.js";
|
|
4
4
|
import { t as r } from "../chunks/observe-resize-DhxhmoyB.js";
|
|
5
|
-
import { r as i } from "../chunks/skeleton-
|
|
6
|
-
import { t as a } from "../chunks/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
5
|
+
import { r as i } from "../chunks/skeleton-D-qk3mes.js";
|
|
6
|
+
import { t as a } from "../chunks/truncated-d1afmUJT.js";
|
|
7
|
+
import { t as o } from "../chunks/badge-C0GC3B9X.js";
|
|
8
|
+
import { Sparkline as s } from "./charts/sparkline.js";
|
|
9
|
+
import { Children as c, cloneElement as l, createContext as u, forwardRef as d, isValidElement as f, useContext as p, useLayoutEffect as m, useRef as h, useState as g } from "react";
|
|
10
|
+
import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
10
11
|
//#region src/components/stat/stat.tsx
|
|
11
|
-
var
|
|
12
|
+
var b = { size: {
|
|
12
13
|
md: { classes: "text-metric" },
|
|
13
14
|
sm: { classes: "text-title" }
|
|
14
|
-
} },
|
|
15
|
-
return /* @__PURE__ */
|
|
15
|
+
} }, x = { size: "md" }, S = /* @__PURE__ */ d(function({ value: t, unit: n, delta: r, size: i = "md", className: a }, s) {
|
|
16
|
+
return /* @__PURE__ */ y("div", {
|
|
16
17
|
ref: s,
|
|
17
|
-
className: e("flex min-w-0 flex-wrap items-baseline gap-x-8 gap-y-4",
|
|
18
|
+
className: e("flex min-w-0 flex-wrap items-baseline gap-x-8 gap-y-4", a),
|
|
18
19
|
children: [
|
|
19
|
-
/* @__PURE__ */
|
|
20
|
-
className: e("font-semibold text-fg tabular",
|
|
20
|
+
/* @__PURE__ */ v("span", {
|
|
21
|
+
className: e("font-semibold text-fg tabular", b.size[i].classes),
|
|
21
22
|
children: t
|
|
22
23
|
}),
|
|
23
|
-
n && /* @__PURE__ */
|
|
24
|
+
n && /* @__PURE__ */ v("span", {
|
|
24
25
|
className: "text-body-lg font-regular text-fg-secondary",
|
|
25
26
|
children: n
|
|
26
27
|
}),
|
|
27
|
-
r && /* @__PURE__ */
|
|
28
|
+
r && /* @__PURE__ */ v(o, {
|
|
28
29
|
tone: r.tone ?? "neutral",
|
|
29
30
|
className: "self-center",
|
|
30
31
|
children: r.label
|
|
@@ -32,25 +33,25 @@ var y = { size: {
|
|
|
32
33
|
]
|
|
33
34
|
});
|
|
34
35
|
});
|
|
35
|
-
process.env.NODE_ENV !== "production" && (
|
|
36
|
-
var
|
|
37
|
-
return /* @__PURE__ */
|
|
36
|
+
process.env.NODE_ENV !== "production" && (S.displayName = "Stat");
|
|
37
|
+
var C = /* @__PURE__ */ d(function({ children: t, className: n }, r) {
|
|
38
|
+
return /* @__PURE__ */ v("div", {
|
|
38
39
|
ref: r,
|
|
39
40
|
className: e("flex flex-wrap items-baseline gap-x-48 gap-y-16", n),
|
|
40
41
|
children: t
|
|
41
42
|
});
|
|
42
43
|
});
|
|
43
|
-
process.env.NODE_ENV !== "production" && (
|
|
44
|
-
var
|
|
44
|
+
process.env.NODE_ENV !== "production" && (C.displayName = "MetricRow");
|
|
45
|
+
var w = (e, t, n) => {
|
|
45
46
|
let r = Math.abs(e) * 100, i = r >= 10 || r === 0 ? 0 : 1, a = new Intl.NumberFormat(n === "en" ? "en-US" : n, {
|
|
46
47
|
minimumFractionDigits: i,
|
|
47
48
|
maximumFractionDigits: i,
|
|
48
49
|
useGrouping: !1
|
|
49
50
|
}).format(i ? Number(r.toFixed(1)) : Math.round(r));
|
|
50
51
|
return `${e > 0 ? "↑" : e < 0 ? "↓" : ""}${t("statTile.percent", "{value}%", { value: a })}`;
|
|
51
|
-
},
|
|
52
|
+
}, T = [
|
|
52
53
|
{
|
|
53
|
-
classes: "text-
|
|
54
|
+
classes: "text-metric",
|
|
54
55
|
px: 28
|
|
55
56
|
},
|
|
56
57
|
{
|
|
@@ -61,78 +62,85 @@ var C = (e, t, n) => {
|
|
|
61
62
|
classes: "text-title-sm",
|
|
62
63
|
px: 17
|
|
63
64
|
}
|
|
64
|
-
],
|
|
65
|
-
let
|
|
66
|
-
return /* @__PURE__ */
|
|
67
|
-
ref:
|
|
65
|
+
], E = /* @__PURE__ */ u(0), D = /* @__PURE__ */ d(function({ label: r, value: c, change: l, detail: u, trend: d, trendColor: f, loading: m, className: h }, g) {
|
|
66
|
+
let b = t(), x = n(), S = l && l.value !== 0 ? l.value > 0 == ((l.better ?? "up") === "up") : void 0, C = T[p(E)] ?? T[0];
|
|
67
|
+
return /* @__PURE__ */ y("div", {
|
|
68
|
+
ref: g,
|
|
68
69
|
role: "listitem",
|
|
69
|
-
"aria-busy":
|
|
70
|
-
className: e("flex min-w-0 flex-col bg-raised px-20 pt-16",
|
|
70
|
+
"aria-busy": m || void 0,
|
|
71
|
+
className: e("flex min-w-0 flex-col bg-raised px-20 pt-16", d ? "pb-12" : "pb-16", h),
|
|
71
72
|
children: [
|
|
72
|
-
/* @__PURE__ */
|
|
73
|
+
/* @__PURE__ */ v("span", {
|
|
73
74
|
className: "text-small font-medium text-fg-secondary",
|
|
74
75
|
children: r
|
|
75
76
|
}),
|
|
76
|
-
/* @__PURE__ */
|
|
77
|
+
/* @__PURE__ */ v("span", {
|
|
77
78
|
className: "mt-6 flex h-34 min-w-0 items-center",
|
|
78
|
-
children: /* @__PURE__ */
|
|
79
|
-
"data-stat-value":
|
|
80
|
-
className: e("max-w-full
|
|
81
|
-
children:
|
|
79
|
+
children: m ? /* @__PURE__ */ v("span", {
|
|
80
|
+
"data-stat-value": C.px,
|
|
81
|
+
className: e("flex max-w-full font-semibold text-fg tabular", C.classes),
|
|
82
|
+
children: /* @__PURE__ */ v(i, {
|
|
82
83
|
shape: "line",
|
|
83
84
|
className: "h-20 w-96"
|
|
84
|
-
})
|
|
85
|
+
})
|
|
86
|
+
}) : /* @__PURE__ */ v(a, {
|
|
87
|
+
"data-stat-value": C.px,
|
|
88
|
+
className: e("max-w-full font-semibold text-fg tabular", C.classes),
|
|
89
|
+
children: c
|
|
85
90
|
})
|
|
86
91
|
}),
|
|
87
|
-
|
|
92
|
+
m ? /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("span", {
|
|
88
93
|
className: "mt-2 flex h-20 items-center",
|
|
89
|
-
children: /* @__PURE__ */
|
|
94
|
+
children: /* @__PURE__ */ v(i, {
|
|
90
95
|
shape: "line",
|
|
91
96
|
className: "w-120"
|
|
92
97
|
})
|
|
93
|
-
}),
|
|
98
|
+
}), d && /* @__PURE__ */ v("span", {
|
|
94
99
|
className: "mt-auto h-40 shrink-0 pt-8",
|
|
95
|
-
children: /* @__PURE__ */
|
|
96
|
-
})] }) : /* @__PURE__ */
|
|
100
|
+
children: /* @__PURE__ */ v(i, { className: "h-full w-full" })
|
|
101
|
+
})] }) : /* @__PURE__ */ y("span", {
|
|
97
102
|
className: "mt-2 flex min-h-20 min-w-0 flex-wrap items-center gap-x-6 gap-y-2 text-small text-fg-tertiary",
|
|
98
|
-
children: [
|
|
103
|
+
children: [l && Number.isFinite(l.value) && /* @__PURE__ */ v("span", {
|
|
99
104
|
className: "flex h-20 shrink-0 items-center",
|
|
100
|
-
children: /* @__PURE__ */
|
|
101
|
-
tone:
|
|
105
|
+
children: /* @__PURE__ */ y(o, {
|
|
106
|
+
tone: S === void 0 ? "neutral" : S ? "success" : "danger",
|
|
102
107
|
className: "shrink-0 tabular",
|
|
103
|
-
children:
|
|
108
|
+
children: [w(l.value, b, x), S !== void 0 && /* @__PURE__ */ y("span", {
|
|
109
|
+
className: "sr-only",
|
|
110
|
+
children: [" ", S ? b("statTile.better", "better") : b("statTile.worse", "worse")]
|
|
111
|
+
})]
|
|
104
112
|
})
|
|
105
|
-
}),
|
|
113
|
+
}), u && /* @__PURE__ */ v("span", {
|
|
106
114
|
className: "min-w-0",
|
|
107
|
-
children:
|
|
115
|
+
children: u
|
|
108
116
|
})]
|
|
109
117
|
}),
|
|
110
|
-
|
|
118
|
+
d && !m && /* @__PURE__ */ v("span", {
|
|
111
119
|
className: "mt-auto h-40 shrink-0 pt-8",
|
|
112
|
-
children:
|
|
113
|
-
values:
|
|
120
|
+
children: d.length > 1 && /* @__PURE__ */ v(s, {
|
|
121
|
+
values: d,
|
|
114
122
|
fluid: !0,
|
|
115
|
-
...
|
|
116
|
-
"aria-label": typeof r == "string" ?
|
|
123
|
+
...f ? { color: f } : {},
|
|
124
|
+
"aria-label": typeof r == "string" ? b("statTile.trendPerDay", "{label} per day", { label: r }) : b("statTile.trend", "Trend")
|
|
117
125
|
})
|
|
118
126
|
})
|
|
119
127
|
]
|
|
120
128
|
});
|
|
121
129
|
});
|
|
122
|
-
process.env.NODE_ENV !== "production" && (
|
|
123
|
-
var
|
|
130
|
+
process.env.NODE_ENV !== "production" && (D.displayName = "StatTile");
|
|
131
|
+
var O = {
|
|
124
132
|
1: "grid-cols-1",
|
|
125
133
|
2: "grid-cols-2"
|
|
126
|
-
},
|
|
134
|
+
}, k = {
|
|
127
135
|
3: "lg:grid-cols-3",
|
|
128
136
|
4: "lg:grid-cols-4"
|
|
129
|
-
},
|
|
137
|
+
}, A = { 2: "col-span-2" }, j = {
|
|
130
138
|
1: "lg:col-span-1",
|
|
131
139
|
2: "lg:col-span-2",
|
|
132
140
|
3: "lg:col-span-3",
|
|
133
141
|
4: "lg:col-span-4"
|
|
134
|
-
},
|
|
135
|
-
function
|
|
142
|
+
}, M = 40, N = 1, P = 1.03;
|
|
143
|
+
function F(e, t) {
|
|
136
144
|
let n = e <= 2 ? Math.max(e, 1) : t ? Math.min(e, 4) : 2, r = e - 1;
|
|
137
145
|
return {
|
|
138
146
|
cols: n,
|
|
@@ -143,12 +151,12 @@ function P(e, t) {
|
|
|
143
151
|
}[e % 4] ?? 1 : e % 2 == 1 ? 2 : 1)
|
|
144
152
|
};
|
|
145
153
|
}
|
|
146
|
-
var
|
|
147
|
-
function
|
|
148
|
-
let r =
|
|
149
|
-
let a = (t - (n - 1) *
|
|
150
|
-
return
|
|
151
|
-
}, a =
|
|
154
|
+
var I = 160;
|
|
155
|
+
function L(e, t, n) {
|
|
156
|
+
let r = T[0].px, i = ({ cols: n, spans: i }) => {
|
|
157
|
+
let a = (t - (n - 1) * N) / n, o = i.map((e) => a * e + (e - 1) * N - M);
|
|
158
|
+
return T.findIndex((t) => e.every((e, n) => e * t.px * P / r <= (o[n] ?? 0)));
|
|
159
|
+
}, a = F(e.length, n), o = a.cols > 2 && (t - (a.cols - 1) * N) / a.cols < I, s = i(o ? F(e.length, !1) : a);
|
|
152
160
|
if (s >= 0 || e.length < 2) return {
|
|
153
161
|
step: Math.max(s, 0),
|
|
154
162
|
single: !1,
|
|
@@ -159,50 +167,56 @@ function I(e, t, n) {
|
|
|
159
167
|
spans: e.map(() => 1)
|
|
160
168
|
});
|
|
161
169
|
return {
|
|
162
|
-
step: c >= 0 ? c :
|
|
170
|
+
step: c >= 0 ? c : T.length - 1,
|
|
163
171
|
single: !0,
|
|
164
172
|
two: !1
|
|
165
173
|
};
|
|
166
174
|
}
|
|
167
|
-
var
|
|
168
|
-
let o =
|
|
175
|
+
var R = /* @__PURE__ */ d(function({ children: t, className: n, ...i }, a) {
|
|
176
|
+
let o = c.toArray(t).filter(f), s = o.length, u = h(null), [d, p] = g({
|
|
169
177
|
step: 0,
|
|
170
178
|
single: !1,
|
|
171
179
|
two: !1
|
|
172
|
-
}),
|
|
173
|
-
|
|
180
|
+
}), _ = h(() => {}), y = h(0);
|
|
181
|
+
_.current = () => {
|
|
174
182
|
let e = u.current;
|
|
175
183
|
if (!e || !e.clientWidth) return;
|
|
176
|
-
let t = [...e.querySelectorAll("[data-stat-value]")].map((e) => e.scrollWidth *
|
|
177
|
-
|
|
178
|
-
|
|
184
|
+
let t = [...e.querySelectorAll("[data-stat-value]")].map((e) => e.scrollWidth * T[0].px / (Number(e.dataset.statValue) || T[0].px)), n = typeof window.matchMedia == "function" && window.matchMedia("(min-width: 1024px)").matches, r = L(t, e.clientWidth, n), i = y.current === e.clientWidth;
|
|
185
|
+
y.current = e.clientWidth, p((e) => {
|
|
186
|
+
let t = i && r.step < e.step ? {
|
|
187
|
+
...r,
|
|
188
|
+
step: e.step
|
|
189
|
+
} : r;
|
|
190
|
+
return e.step === t.step && e.single === t.single && e.two === t.two ? e : t;
|
|
191
|
+
});
|
|
192
|
+
}, m(() => _.current()), m(() => {
|
|
179
193
|
let e = u.current;
|
|
180
194
|
if (!e || typeof ResizeObserver > "u") return;
|
|
181
|
-
let t = r([e, ...e.querySelectorAll("[data-stat-value]")], () =>
|
|
182
|
-
return document.fonts?.ready.then(() =>
|
|
183
|
-
}, [
|
|
184
|
-
let
|
|
185
|
-
let n =
|
|
186
|
-
return e(
|
|
195
|
+
let t = r([e, ...e.querySelectorAll("[data-stat-value]")], () => _.current());
|
|
196
|
+
return document.fonts?.ready.then(() => _.current()), t;
|
|
197
|
+
}, [s]);
|
|
198
|
+
let b = F(s, !1), x = F(s, !0), S = (t) => {
|
|
199
|
+
let n = b.spans[t] ?? 1, r = x.spans[t] ?? 1;
|
|
200
|
+
return e(A[n], !d.two && r !== n && j[r]) || void 0;
|
|
187
201
|
};
|
|
188
|
-
return /* @__PURE__ */
|
|
202
|
+
return /* @__PURE__ */ v("div", {
|
|
189
203
|
ref: (e) => {
|
|
190
204
|
u.current = e, typeof a == "function" ? a(e) : a && (a.current = e);
|
|
191
205
|
},
|
|
192
206
|
role: "list",
|
|
193
|
-
className: e("grid gap-1 overflow-hidden rounded-group bg-line
|
|
207
|
+
className: e("grid gap-1 overflow-hidden rounded-group bg-line shadow-xs forced-line", d.single ? "grid-cols-1" : d.two ? "grid-cols-2" : e(O[b.cols], x.cols !== b.cols && k[x.cols]), n),
|
|
194
208
|
...i,
|
|
195
|
-
children: /* @__PURE__ */
|
|
196
|
-
value:
|
|
209
|
+
children: /* @__PURE__ */ v(E.Provider, {
|
|
210
|
+
value: d.step,
|
|
197
211
|
children: o.map((t, n) => {
|
|
198
|
-
let r =
|
|
199
|
-
return r ?
|
|
212
|
+
let r = d.single ? void 0 : S(n);
|
|
213
|
+
return r ? l(t, { className: e(t.props.className, r) }) : t;
|
|
200
214
|
})
|
|
201
215
|
})
|
|
202
216
|
});
|
|
203
217
|
});
|
|
204
|
-
process.env.NODE_ENV !== "production" && (
|
|
218
|
+
process.env.NODE_ENV !== "production" && (R.displayName = "StatGrid");
|
|
205
219
|
//#endregion
|
|
206
|
-
export {
|
|
220
|
+
export { x as KAESO_STAT_DEFAULT_VARIANTS, b as KAESO_STAT_VARIANTS, C as MetricRow, T as STAT_VALUE_STEPS, S as Stat, R as StatGrid, D as StatTile, L as statGridFit, F as statGridLayout };
|
|
207
221
|
|
|
208
222
|
//# sourceMappingURL=stat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stat.js","names":["_Fragment","cn","useUiText","useLocale","observeResize","Skeleton","Badge","Fragment$1","KAESO_STAT_VARIANTS","KAESO_STAT_DEFAULT_VARIANTS","Stat","className","size","value","unit","delta","MetricRow","changeLabel","pct","v","digits","shown","locale","STAT_VALUE_STEPS","StatStepContext","StatTile","t","good","change","step","useContext","loading","trend","label","detail","Sparkline","trendColor","GRID_COLS","LG_GRID_COLS","COL_SPAN","LG_COL_SPAN","TILE_PADDING","GAP","SLACK","statGridLayout","cols","n","wide","last","MIN_TILE","statGridFit","base","at","col","width","rooms","spans","s","needs","need","st","i","own","two","single","StatGrid","props","tiles","Children","children","isValidElement","grid","useRef","fit","setFit","useState","measure","el","next","f","useLayoutEffect","stop","narrow","span","small","large","ref","extra","cloneElement"],"sources":["../../src/components/stat/stat.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { Badge } from \"../badge/badge.js\";\nimport { Sparkline } from \"../charts/sparkline.js\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { useLocale, useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_STAT_VARIANTS = {\n size: {\n md: { classes: \"text-metric\" },\n sm: { classes: \"text-title\" },\n },\n} as const;\nexport const KAESO_STAT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface StatProps {\n value: ReactNode;\n unit?: ReactNode | undefined;\n delta?: { label: string; tone?: \"success\" | \"danger\" | \"neutral\" | undefined } | undefined;\n size?: keyof typeof KAESO_STAT_VARIANTS.size | undefined;\n className?: string | undefined;\n}\n\nexport const Stat = /* @__PURE__ */ forwardRef<HTMLDivElement, StatProps>(function Stat({ value, unit, delta, size = \"md\", className }, ref) {\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-wrap items-baseline gap-x-8 gap-y-4\", className)}>\n <span className={cn(\"font-semibold text-fg tabular\", KAESO_STAT_VARIANTS.size[size].classes)}>{value}</span>\n {unit && <span className=\"text-body-lg font-regular text-fg-secondary\">{unit}</span>}\n {delta && (\n <Badge tone={delta.tone ?? \"neutral\"} className=\"self-center\">\n {delta.label}\n </Badge>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Stat.displayName = \"Stat\";\n\nexport const MetricRow = /* @__PURE__ */ forwardRef<HTMLDivElement, { children: ReactNode; className?: string | undefined }>(function MetricRow({ children, className }, ref) {\n return (\n <div ref={ref} className={cn(\"flex flex-wrap items-baseline gap-x-48 gap-y-16\", className)}>\n {children}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") MetricRow.displayName = \"MetricRow\";\n\nexport interface StatTileProps {\n label: ReactNode;\n value: ReactNode;\n change?: { value: number; better?: \"up\" | \"down\" | undefined } | undefined;\n detail?: ReactNode | undefined;\n trend?: number[] | undefined;\n trendColor?: string | undefined;\n loading?: boolean | undefined;\n className?: string | undefined;\n}\n\nconst changeLabel = (v: number, t: UiText, locale: string) => {\n const pct = Math.abs(v) * 100;\n const digits = pct >= 10 || pct === 0 ? 0 : 1;\n const shown = new Intl.NumberFormat(locale === \"en\" ? \"en-US\" : locale, {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n useGrouping: false,\n }).format(digits ? Number(pct.toFixed(1)) : Math.round(pct));\n return `${v > 0 ? \"↑\" : v < 0 ? \"↓\" : \"\"}${t(\"statTile.percent\", \"{value}%\", { value: shown })}`;\n};\n\nexport const STAT_VALUE_STEPS = [\n { classes: \"text-title-lg\", px: 28 },\n { classes: \"text-title\", px: 20 },\n { classes: \"text-title-sm\", px: 17 },\n] as const;\n\nconst StatStepContext = /* @__PURE__ */ createContext(0);\n\nexport const StatTile = /* @__PURE__ */ forwardRef<HTMLDivElement, StatTileProps>(function StatTile(\n { label, value, change, detail, trend, trendColor, loading, className },\n ref,\n) {\n const t = useUiText();\n const locale = useLocale();\n const good = change && change.value !== 0 ? change.value > 0 === ((change.better ?? \"up\") === \"up\") : undefined;\n const step = STAT_VALUE_STEPS[useContext(StatStepContext)] ?? STAT_VALUE_STEPS[0];\n return (\n <div\n ref={ref}\n role=\"listitem\"\n aria-busy={loading || undefined}\n className={cn(\"flex min-w-0 flex-col bg-raised px-20 pt-16\", trend ? \"pb-12\" : \"pb-16\", className)}\n >\n <span className=\"text-small font-medium text-fg-secondary\">{label}</span>\n <span className=\"mt-6 flex h-34 min-w-0 items-center\">\n <span data-stat-value={step.px} className={cn(\"max-w-full truncate font-semibold text-fg tabular\", step.classes, loading && \"flex\")}>\n {loading ? <Skeleton shape=\"line\" className=\"h-20 w-96\" /> : value}\n </span>\n </span>\n {loading ? (\n <>\n <span className=\"mt-2 flex h-20 items-center\">\n <Skeleton shape=\"line\" className=\"w-120\" />\n </span>\n {trend && (\n <span className=\"mt-auto h-40 shrink-0 pt-8\">\n <Skeleton className=\"h-full w-full\" />\n </span>\n )}\n </>\n ) : (\n <span className=\"mt-2 flex min-h-20 min-w-0 flex-wrap items-center gap-x-6 gap-y-2 text-small text-fg-tertiary\">\n {change && Number.isFinite(change.value) && (\n <span className=\"flex h-20 shrink-0 items-center\">\n <Badge tone={good === undefined ? \"neutral\" : good ? \"success\" : \"danger\"} className=\"shrink-0 tabular\">\n {changeLabel(change.value, t, locale)}\n </Badge>\n </span>\n )}\n {detail && <span className=\"min-w-0\">{detail}</span>}\n </span>\n )}\n {trend && !loading && (\n <span className=\"mt-auto h-40 shrink-0 pt-8\">\n {trend.length > 1 && (\n <Sparkline\n values={trend}\n fluid\n {...(trendColor ? { color: trendColor } : {})}\n aria-label={typeof label === \"string\" ? t(\"statTile.trendPerDay\", \"{label} per day\", { label }) : t(\"statTile.trend\", \"Trend\")}\n />\n )}\n </span>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") StatTile.displayName = \"StatTile\";\n\nconst GRID_COLS: Record<number, string> = { 1: \"grid-cols-1\", 2: \"grid-cols-2\" };\nconst LG_GRID_COLS: Record<number, string> = { 3: \"lg:grid-cols-3\", 4: \"lg:grid-cols-4\" };\nconst COL_SPAN: Record<number, string> = { 2: \"col-span-2\" };\nconst LG_COL_SPAN: Record<number, string> = { 1: \"lg:col-span-1\", 2: \"lg:col-span-2\", 3: \"lg:col-span-3\", 4: \"lg:col-span-4\" };\n\nconst TILE_PADDING = 40;\nconst GAP = 1;\nconst SLACK = 1.03;\n\nexport function statGridLayout(n: number, wide: boolean): { cols: number; spans: number[] } {\n const cols = n <= 2 ? Math.max(n, 1) : wide ? Math.min(n, 4) : 2;\n const last = n - 1;\n const spans = Array.from({ length: n }, (_, i) => {\n if (i !== last || n < 3) return 1;\n if (n === 3) return wide ? 1 : 2;\n return wide ? ({ 1: 4, 2: 3, 3: 2 }[n % 4] ?? 1) : n % 2 === 1 ? 2 : 1;\n });\n return { cols, spans };\n}\n\nconst MIN_TILE = 160;\n\nexport function statGridFit(needs: number[], width: number, wide: boolean): { step: number; single: boolean; two: boolean } {\n const base = STAT_VALUE_STEPS[0].px;\n const at = ({ cols, spans }: { cols: number; spans: number[] }) => {\n const col = (width - (cols - 1) * GAP) / cols;\n const rooms = spans.map((s) => col * s + (s - 1) * GAP - TILE_PADDING);\n return STAT_VALUE_STEPS.findIndex((st) => needs.every((need, i) => (need * st.px * SLACK) / base <= (rooms[i] ?? 0)));\n };\n const own = statGridLayout(needs.length, wide);\n const two = own.cols > 2 && (width - (own.cols - 1) * GAP) / own.cols < MIN_TILE;\n const step = at(two ? statGridLayout(needs.length, false) : own);\n if (step >= 0 || needs.length < 2) return { step: Math.max(step, 0), single: false, two };\n const single = at({ cols: 1, spans: needs.map(() => 1) });\n return { step: single >= 0 ? single : STAT_VALUE_STEPS.length - 1, single: true, two: false };\n}\n\nexport const StatGrid = /* @__PURE__ */ forwardRef<HTMLDivElement, { children: ReactNode; \"aria-label\"?: string | undefined; className?: string | undefined }>(\n function StatGrid({ children, className, ...props }, ref) {\n const tiles = Children.toArray(children).filter(isValidElement) as ReactElement<{ className?: string | undefined }>[];\n const n = tiles.length;\n const grid = useRef<HTMLDivElement | null>(null);\n const [fit, setFit] = useState({ step: 0, single: false, two: false });\n const measure = useRef(() => {});\n measure.current = () => {\n const el = grid.current;\n if (!el || !el.clientWidth) return;\n const values = [...el.querySelectorAll<HTMLElement>(\"[data-stat-value]\")];\n const needs = values.map((v) => (v.scrollWidth * STAT_VALUE_STEPS[0].px) / (Number(v.dataset.statValue) || STAT_VALUE_STEPS[0].px));\n const wide = typeof window.matchMedia === \"function\" && window.matchMedia(\"(min-width: 1024px)\").matches;\n const next = statGridFit(needs, el.clientWidth, wide);\n setFit((f) => (f.step === next.step && f.single === next.single && f.two === next.two ? f : next));\n };\n useLayoutEffect(() => measure.current());\n useLayoutEffect(() => {\n const el = grid.current;\n if (!el || typeof ResizeObserver === \"undefined\") return;\n const stop = observeResize([el, ...el.querySelectorAll(\"[data-stat-value]\")], () => measure.current());\n void document.fonts?.ready.then(() => measure.current());\n return stop;\n }, [n]);\n const narrow = statGridLayout(n, false);\n const wide = statGridLayout(n, true);\n const span = (i: number) => {\n const small = narrow.spans[i] ?? 1;\n const large = wide.spans[i] ?? 1;\n return cn(COL_SPAN[small], !fit.two && large !== small && LG_COL_SPAN[large]) || undefined;\n };\n return (\n <div\n ref={(e) => {\n grid.current = e;\n if (typeof ref === \"function\") ref(e);\n else if (ref) ref.current = e;\n }}\n role=\"list\"\n className={cn(\n \"grid gap-1 overflow-hidden rounded-group bg-line-subtle shadow-xs\",\n fit.single ? \"grid-cols-1\" : fit.two ? \"grid-cols-2\" : cn(GRID_COLS[narrow.cols], wide.cols !== narrow.cols && LG_GRID_COLS[wide.cols]),\n className,\n )}\n {...props}\n >\n <StatStepContext.Provider value={fit.step}>\n {tiles.map((t, i) => {\n const extra = fit.single ? undefined : span(i);\n return extra ? cloneElement(t, { className: cn(t.props.className, extra) }) : t;\n })}\n </StatStepContext.Provider>\n </div>\n );\n },\n);\nif (process.env.NODE_ENV !== \"production\") StatGrid.displayName = \"StatGrid\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stat.js","names":["_Fragment","cn","useUiText","useLocale","observeResize","Skeleton","TruncatedText","Badge","Fragment$1","KAESO_STAT_VARIANTS","KAESO_STAT_DEFAULT_VARIANTS","Stat","className","size","value","unit","delta","MetricRow","changeLabel","pct","v","digits","shown","locale","STAT_VALUE_STEPS","StatStepContext","StatTile","t","good","change","step","useContext","loading","trend","label","detail","Sparkline","trendColor","GRID_COLS","LG_GRID_COLS","COL_SPAN","LG_COL_SPAN","TILE_PADDING","GAP","SLACK","statGridLayout","cols","n","wide","last","MIN_TILE","statGridFit","base","at","col","width","rooms","spans","s","needs","need","st","i","own","two","single","StatGrid","props","tiles","Children","children","isValidElement","grid","useRef","fit","setFit","useState","measure","measuredAt","el","fitted","sameWidth","next","f","useLayoutEffect","stop","narrow","span","small","large","ref","extra","cloneElement"],"sources":["../../src/components/stat/stat.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { Badge } from \"../badge/badge.js\";\nimport { Sparkline } from \"../charts/sparkline.js\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { TruncatedText } from \"../text/truncated.js\";\nimport { useLocale, useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_STAT_VARIANTS = {\n size: {\n md: { classes: \"text-metric\" },\n sm: { classes: \"text-title\" },\n },\n} as const;\nexport const KAESO_STAT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface StatProps {\n value: ReactNode;\n unit?: ReactNode | undefined;\n delta?: { label: string; tone?: \"success\" | \"danger\" | \"neutral\" | undefined } | undefined;\n size?: keyof typeof KAESO_STAT_VARIANTS.size | undefined;\n className?: string | undefined;\n}\n\nexport const Stat = /* @__PURE__ */ forwardRef<HTMLDivElement, StatProps>(function Stat({ value, unit, delta, size = \"md\", className }, ref) {\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-wrap items-baseline gap-x-8 gap-y-4\", className)}>\n <span className={cn(\"font-semibold text-fg tabular\", KAESO_STAT_VARIANTS.size[size].classes)}>{value}</span>\n {unit && <span className=\"text-body-lg font-regular text-fg-secondary\">{unit}</span>}\n {delta && (\n <Badge tone={delta.tone ?? \"neutral\"} className=\"self-center\">\n {delta.label}\n </Badge>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Stat.displayName = \"Stat\";\n\nexport const MetricRow = /* @__PURE__ */ forwardRef<HTMLDivElement, { children: ReactNode; className?: string | undefined }>(function MetricRow({ children, className }, ref) {\n return (\n <div ref={ref} className={cn(\"flex flex-wrap items-baseline gap-x-48 gap-y-16\", className)}>\n {children}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") MetricRow.displayName = \"MetricRow\";\n\nexport interface StatTileProps {\n label: ReactNode;\n value: ReactNode;\n change?: { value: number; better?: \"up\" | \"down\" | undefined } | undefined;\n detail?: ReactNode | undefined;\n trend?: number[] | undefined;\n trendColor?: string | undefined;\n loading?: boolean | undefined;\n className?: string | undefined;\n}\n\nconst changeLabel = (v: number, t: UiText, locale: string) => {\n const pct = Math.abs(v) * 100;\n const digits = pct >= 10 || pct === 0 ? 0 : 1;\n const shown = new Intl.NumberFormat(locale === \"en\" ? \"en-US\" : locale, {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n useGrouping: false,\n }).format(digits ? Number(pct.toFixed(1)) : Math.round(pct));\n return `${v > 0 ? \"↑\" : v < 0 ? \"↓\" : \"\"}${t(\"statTile.percent\", \"{value}%\", { value: shown })}`;\n};\n\nexport const STAT_VALUE_STEPS = [\n { classes: \"text-metric\", px: 28 },\n { classes: \"text-title\", px: 20 },\n { classes: \"text-title-sm\", px: 17 },\n] as const;\n\nconst StatStepContext = /* @__PURE__ */ createContext(0);\n\nexport const StatTile = /* @__PURE__ */ forwardRef<HTMLDivElement, StatTileProps>(function StatTile(\n { label, value, change, detail, trend, trendColor, loading, className },\n ref,\n) {\n const t = useUiText();\n const locale = useLocale();\n const good = change && change.value !== 0 ? change.value > 0 === ((change.better ?? \"up\") === \"up\") : undefined;\n const step = STAT_VALUE_STEPS[useContext(StatStepContext)] ?? STAT_VALUE_STEPS[0];\n return (\n <div\n ref={ref}\n role=\"listitem\"\n aria-busy={loading || undefined}\n className={cn(\"flex min-w-0 flex-col bg-raised px-20 pt-16\", trend ? \"pb-12\" : \"pb-16\", className)}\n >\n <span className=\"text-small font-medium text-fg-secondary\">{label}</span>\n <span className=\"mt-6 flex h-34 min-w-0 items-center\">\n {loading ? (\n <span data-stat-value={step.px} className={cn(\"flex max-w-full font-semibold text-fg tabular\", step.classes)}>\n <Skeleton shape=\"line\" className=\"h-20 w-96\" />\n </span>\n ) : (\n <TruncatedText data-stat-value={step.px} className={cn(\"max-w-full font-semibold text-fg tabular\", step.classes)}>\n {value}\n </TruncatedText>\n )}\n </span>\n {loading ? (\n <>\n <span className=\"mt-2 flex h-20 items-center\">\n <Skeleton shape=\"line\" className=\"w-120\" />\n </span>\n {trend && (\n <span className=\"mt-auto h-40 shrink-0 pt-8\">\n <Skeleton className=\"h-full w-full\" />\n </span>\n )}\n </>\n ) : (\n <span className=\"mt-2 flex min-h-20 min-w-0 flex-wrap items-center gap-x-6 gap-y-2 text-small text-fg-tertiary\">\n {change && Number.isFinite(change.value) && (\n <span className=\"flex h-20 shrink-0 items-center\">\n <Badge tone={good === undefined ? \"neutral\" : good ? \"success\" : \"danger\"} className=\"shrink-0 tabular\">\n {changeLabel(change.value, t, locale)}\n {good !== undefined && <span className=\"sr-only\"> {good ? t(\"statTile.better\", \"better\") : t(\"statTile.worse\", \"worse\")}</span>}\n </Badge>\n </span>\n )}\n {detail && <span className=\"min-w-0\">{detail}</span>}\n </span>\n )}\n {trend && !loading && (\n <span className=\"mt-auto h-40 shrink-0 pt-8\">\n {trend.length > 1 && (\n <Sparkline\n values={trend}\n fluid\n {...(trendColor ? { color: trendColor } : {})}\n aria-label={typeof label === \"string\" ? t(\"statTile.trendPerDay\", \"{label} per day\", { label }) : t(\"statTile.trend\", \"Trend\")}\n />\n )}\n </span>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") StatTile.displayName = \"StatTile\";\n\nconst GRID_COLS: Record<number, string> = { 1: \"grid-cols-1\", 2: \"grid-cols-2\" };\nconst LG_GRID_COLS: Record<number, string> = { 3: \"lg:grid-cols-3\", 4: \"lg:grid-cols-4\" };\nconst COL_SPAN: Record<number, string> = { 2: \"col-span-2\" };\nconst LG_COL_SPAN: Record<number, string> = { 1: \"lg:col-span-1\", 2: \"lg:col-span-2\", 3: \"lg:col-span-3\", 4: \"lg:col-span-4\" };\n\nconst TILE_PADDING = 40;\nconst GAP = 1;\nconst SLACK = 1.03;\n\nexport function statGridLayout(n: number, wide: boolean): { cols: number; spans: number[] } {\n const cols = n <= 2 ? Math.max(n, 1) : wide ? Math.min(n, 4) : 2;\n const last = n - 1;\n const spans = Array.from({ length: n }, (_, i) => {\n if (i !== last || n < 3) return 1;\n if (n === 3) return wide ? 1 : 2;\n return wide ? ({ 1: 4, 2: 3, 3: 2 }[n % 4] ?? 1) : n % 2 === 1 ? 2 : 1;\n });\n return { cols, spans };\n}\n\nconst MIN_TILE = 160;\n\nexport function statGridFit(needs: number[], width: number, wide: boolean): { step: number; single: boolean; two: boolean } {\n const base = STAT_VALUE_STEPS[0].px;\n const at = ({ cols, spans }: { cols: number; spans: number[] }) => {\n const col = (width - (cols - 1) * GAP) / cols;\n const rooms = spans.map((s) => col * s + (s - 1) * GAP - TILE_PADDING);\n return STAT_VALUE_STEPS.findIndex((st) => needs.every((need, i) => (need * st.px * SLACK) / base <= (rooms[i] ?? 0)));\n };\n const own = statGridLayout(needs.length, wide);\n const two = own.cols > 2 && (width - (own.cols - 1) * GAP) / own.cols < MIN_TILE;\n const step = at(two ? statGridLayout(needs.length, false) : own);\n if (step >= 0 || needs.length < 2) return { step: Math.max(step, 0), single: false, two };\n const single = at({ cols: 1, spans: needs.map(() => 1) });\n return { step: single >= 0 ? single : STAT_VALUE_STEPS.length - 1, single: true, two: false };\n}\n\nexport const StatGrid = /* @__PURE__ */ forwardRef<HTMLDivElement, { children: ReactNode; \"aria-label\"?: string | undefined; className?: string | undefined }>(\n function StatGrid({ children, className, ...props }, ref) {\n const tiles = Children.toArray(children).filter(isValidElement) as ReactElement<{ className?: string | undefined }>[];\n const n = tiles.length;\n const grid = useRef<HTMLDivElement | null>(null);\n const [fit, setFit] = useState({ step: 0, single: false, two: false });\n const measure = useRef(() => {});\n const measuredAt = useRef(0);\n measure.current = () => {\n const el = grid.current;\n if (!el || !el.clientWidth) return;\n const values = [...el.querySelectorAll<HTMLElement>(\"[data-stat-value]\")];\n const needs = values.map((v) => (v.scrollWidth * STAT_VALUE_STEPS[0].px) / (Number(v.dataset.statValue) || STAT_VALUE_STEPS[0].px));\n const wide = typeof window.matchMedia === \"function\" && window.matchMedia(\"(min-width: 1024px)\").matches;\n const fitted = statGridFit(needs, el.clientWidth, wide);\n const sameWidth = measuredAt.current === el.clientWidth;\n measuredAt.current = el.clientWidth;\n setFit((f) => {\n // At the same width, live values only ever step the size down, so a digit that comes and goes doesn't make every tile jump.\n const next = sameWidth && fitted.step < f.step ? { ...fitted, step: f.step } : fitted;\n return f.step === next.step && f.single === next.single && f.two === next.two ? f : next;\n });\n };\n useLayoutEffect(() => measure.current());\n useLayoutEffect(() => {\n const el = grid.current;\n if (!el || typeof ResizeObserver === \"undefined\") return;\n const stop = observeResize([el, ...el.querySelectorAll(\"[data-stat-value]\")], () => measure.current());\n void document.fonts?.ready.then(() => measure.current());\n return stop;\n }, [n]);\n const narrow = statGridLayout(n, false);\n const wide = statGridLayout(n, true);\n const span = (i: number) => {\n const small = narrow.spans[i] ?? 1;\n const large = wide.spans[i] ?? 1;\n return cn(COL_SPAN[small], !fit.two && large !== small && LG_COL_SPAN[large]) || undefined;\n };\n return (\n <div\n ref={(e) => {\n grid.current = e;\n if (typeof ref === \"function\") ref(e);\n else if (ref) ref.current = e;\n }}\n role=\"list\"\n className={cn(\n \"grid gap-1 overflow-hidden rounded-group bg-line shadow-xs forced-line\",\n fit.single ? \"grid-cols-1\" : fit.two ? \"grid-cols-2\" : cn(GRID_COLS[narrow.cols], wide.cols !== narrow.cols && LG_GRID_COLS[wide.cols]),\n className,\n )}\n {...props}\n >\n <StatStepContext.Provider value={fit.step}>\n {tiles.map((t, i) => {\n const extra = fit.single ? undefined : span(i);\n return extra ? cloneElement(t, { className: cn(t.props.className, extra) }) : t;\n })}\n </StatStepContext.Provider>\n </div>\n );\n },\n);\nif (process.env.NODE_ENV !== \"production\") StatGrid.displayName = \"StatGrid\";\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { t as KAESO_STATUS_DOT_DEFAULT_VARIANTS, n as KAESO_STATUS_DOT_VARIANTS, r as Status, i as StatusDot } from "../chunks/status-dot-
|
|
2
|
+
export { t as KAESO_STATUS_DOT_DEFAULT_VARIANTS, n as KAESO_STATUS_DOT_VARIANTS, r as Status, i as StatusDot } from "../chunks/status-dot-CP6runiC.js";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { t as KAESO_SWAP_TEXT_DEFAULT_VARIANTS, n as KAESO_SWAP_TEXT_VARIANTS, r as SwapText } from "../chunks/swap-text-
|
|
2
|
+
export { t as KAESO_SWAP_TEXT_DEFAULT_VARIANTS, n as KAESO_SWAP_TEXT_VARIANTS, r as SwapText } from "../chunks/swap-text-SlUjrTlG.js";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { t as KAESO_SWITCH_DEFAULT_VARIANTS, n as KAESO_SWITCH_VARIANTS, r as Switch } from "../chunks/switch-
|
|
2
|
+
export { t as KAESO_SWITCH_DEFAULT_VARIANTS, n as KAESO_SWITCH_VARIANTS, r as Switch } from "../chunks/switch-ngywMQdl.js";
|
package/dist/components/table.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { t as KAESO_TABLE_DEFAULT_VARIANTS, n as KAESO_TABLE_VARIANTS, r as Table } from "../chunks/table-
|
|
2
|
+
export { t as KAESO_TABLE_DEFAULT_VARIANTS, n as KAESO_TABLE_VARIANTS, r as Table } from "../chunks/table-CTK5E0J7.js";
|
package/dist/components/tabs.js
CHANGED
|
@@ -1,95 +1,113 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "../chunks/cn-
|
|
3
|
-
import { t } from "../chunks/icon-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { t as e } from "../chunks/cn-BjnOAUrA.js";
|
|
3
|
+
import { t } from "../chunks/icon-CBzOwqrX.js";
|
|
4
|
+
import { t as n } from "../chunks/merge-refs-BN1FyQt9.js";
|
|
5
|
+
import { t as r } from "../chunks/observe-resize-DhxhmoyB.js";
|
|
6
|
+
import { createContext as i, forwardRef as a, useContext as o, useEffect as s, useMemo as c, useRef as l } from "react";
|
|
7
|
+
import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
8
|
+
import { Tabs as p } from "@base-ui/react/tabs";
|
|
7
9
|
//#region src/components/tabs/tabs.tsx
|
|
8
|
-
var
|
|
10
|
+
var m = { variant: {
|
|
9
11
|
underline: { classes: "" },
|
|
10
12
|
pill: { classes: "" }
|
|
11
|
-
} },
|
|
12
|
-
function
|
|
13
|
-
let
|
|
14
|
-
return /* @__PURE__ */
|
|
13
|
+
} }, h = { variant: "underline" }, g = { variant: m.variant }, _ = { variant: "pill" }, v = /* @__PURE__ */ i("underline");
|
|
14
|
+
function y(t, n) {
|
|
15
|
+
let r = /* @__PURE__ */ a(function({ value: n, defaultValue: r, onValueChange: i, variant: a = t, className: o, children: s }, c) {
|
|
16
|
+
return /* @__PURE__ */ d(v.Provider, {
|
|
15
17
|
value: a,
|
|
16
|
-
children: /* @__PURE__ */
|
|
17
|
-
ref:
|
|
18
|
+
children: /* @__PURE__ */ d(p.Root, {
|
|
19
|
+
ref: c,
|
|
18
20
|
...n === void 0 ? {} : { value: n },
|
|
19
21
|
...r === void 0 ? {} : { defaultValue: r },
|
|
20
22
|
...i ? { onValueChange: (e) => i(String(e)) } : {},
|
|
21
|
-
className: e("flex min-w-0 flex-col",
|
|
22
|
-
children:
|
|
23
|
+
className: e("flex min-w-0 flex-col", o),
|
|
24
|
+
children: s
|
|
23
25
|
})
|
|
24
26
|
});
|
|
25
27
|
});
|
|
26
|
-
return
|
|
28
|
+
return r.displayName = n, r;
|
|
27
29
|
}
|
|
28
|
-
var
|
|
29
|
-
let l =
|
|
30
|
-
return
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
var b = /* @__PURE__ */ a(function({ className: t, children: i, ...a }, u) {
|
|
31
|
+
let m = o(v), h = l(null), g = c(() => n(h, u), [u]);
|
|
32
|
+
return s(() => {
|
|
33
|
+
let e = h.current;
|
|
34
|
+
if (!e) return;
|
|
35
|
+
let t = () => {
|
|
36
|
+
let t = e.scrollWidth - e.clientWidth - Math.abs(e.scrollLeft);
|
|
37
|
+
e.style.setProperty("--scroll-area-overflow-x-start", `${Math.max(0, Math.abs(e.scrollLeft))}px`), e.style.setProperty("--scroll-area-overflow-x-end", `${Math.max(0, t)}px`);
|
|
38
|
+
};
|
|
39
|
+
t(), e.addEventListener("scroll", t, { passive: !0 });
|
|
40
|
+
let n = r([e, ...e.children], t);
|
|
41
|
+
return () => {
|
|
42
|
+
e.removeEventListener("scroll", t), n();
|
|
43
|
+
};
|
|
44
|
+
}, []), /* @__PURE__ */ f(p.List, {
|
|
45
|
+
ref: g,
|
|
46
|
+
className: e("relative flex min-w-0 items-center overflow-x-auto scroll-px-16 scrollbar-none scroll-fade-x", m === "underline" ? "hairline-b-strong" : "gap-4", t),
|
|
47
|
+
...a,
|
|
48
|
+
children: [i, m === "underline" && /* @__PURE__ */ d(p.Indicator, {
|
|
49
|
+
className: "absolute bottom-0 left-0 flex h-2 w-(--active-tab-width) translate-x-(--active-tab-left) px-12 indicator-motion",
|
|
50
|
+
children: /* @__PURE__ */ d("span", { className: "h-2 flex-1 rounded-pill bg-ink forced-line" })
|
|
51
|
+
})]
|
|
35
52
|
});
|
|
36
53
|
});
|
|
37
|
-
process.env.NODE_ENV !== "production" && (
|
|
38
|
-
var
|
|
39
|
-
let
|
|
40
|
-
return /* @__PURE__ */
|
|
41
|
-
ref:
|
|
54
|
+
process.env.NODE_ENV !== "production" && (b.displayName = "Tabs.List");
|
|
55
|
+
var x = /* @__PURE__ */ a(function({ value: n, children: r, icon: i, count: a, disabled: s, className: c, "data-force": l }, m) {
|
|
56
|
+
let h = o(v);
|
|
57
|
+
return /* @__PURE__ */ d(p.Tab, {
|
|
58
|
+
ref: m,
|
|
42
59
|
value: n,
|
|
43
|
-
...
|
|
44
|
-
...
|
|
45
|
-
className: e("relative inline-flex shrink-0 cursor-pointer items-center gap-6 text-body font-medium whitespace-nowrap transition-control tap-target disabled:cursor-not-allowed disabled:text-fg-disabled",
|
|
46
|
-
children:
|
|
47
|
-
className: "
|
|
60
|
+
...s ? { disabled: !0 } : {},
|
|
61
|
+
...l ? { "data-force": l } : {},
|
|
62
|
+
className: e("relative inline-flex shrink-0 cursor-pointer items-center gap-6 text-body font-medium whitespace-nowrap text-fg-secondary transition-control tap-target hover:text-fg selected:text-fg disabled:cursor-not-allowed disabled:text-fg-disabled selected:disabled:text-fg-disabled", h === "underline" ? "group/tab h-40 outline-none" : "h-32 rounded-pill px-12 hover:bg-fill-1 active:bg-fill-2 selected:bg-fill-2 selected:hover:bg-fill-3 selected:active:bg-fill-3 focus-ring-inset", c),
|
|
63
|
+
children: h === "underline" ? /* @__PURE__ */ f("span", {
|
|
64
|
+
className: "inline-flex h-28 items-center gap-6 rounded-pill px-12 transition-control focus-ring-inset group-hover/tab:bg-fill-1 group-active/tab:bg-fill-2 group-disabled/tab:bg-transparent group-focus-visible/tab:outline-focus group-focus-visible/tab:outline-solid",
|
|
48
65
|
children: [
|
|
49
|
-
|
|
50
|
-
icon:
|
|
66
|
+
i && /* @__PURE__ */ d(t, {
|
|
67
|
+
icon: i,
|
|
51
68
|
size: "sm"
|
|
52
69
|
}),
|
|
53
70
|
r,
|
|
54
|
-
|
|
71
|
+
a !== void 0 && /* @__PURE__ */ d("span", {
|
|
55
72
|
className: "text-body font-regular text-fg-secondary tabular",
|
|
56
|
-
children:
|
|
73
|
+
children: a
|
|
57
74
|
})
|
|
58
75
|
]
|
|
59
|
-
}) : /* @__PURE__ */
|
|
60
|
-
|
|
61
|
-
icon:
|
|
76
|
+
}) : /* @__PURE__ */ f(u, { children: [
|
|
77
|
+
i && /* @__PURE__ */ d(t, {
|
|
78
|
+
icon: i,
|
|
62
79
|
size: "sm"
|
|
63
80
|
}),
|
|
64
81
|
r,
|
|
65
|
-
|
|
82
|
+
a !== void 0 && /* @__PURE__ */ d("span", {
|
|
66
83
|
className: "text-body font-regular text-fg-secondary tabular",
|
|
67
|
-
children:
|
|
84
|
+
children: a
|
|
68
85
|
})
|
|
69
86
|
] })
|
|
70
87
|
});
|
|
71
88
|
});
|
|
72
|
-
process.env.NODE_ENV !== "production" && (
|
|
73
|
-
var
|
|
74
|
-
return /* @__PURE__ */
|
|
75
|
-
ref:
|
|
89
|
+
process.env.NODE_ENV !== "production" && (x.displayName = "Tabs.Tab");
|
|
90
|
+
var S = /* @__PURE__ */ a(function({ value: t, className: n, children: r, keepMounted: i, "data-force": a }, o) {
|
|
91
|
+
return /* @__PURE__ */ d(p.Panel, {
|
|
92
|
+
ref: o,
|
|
76
93
|
value: t,
|
|
77
94
|
...i ? { keepMounted: i } : {},
|
|
95
|
+
...a ? { "data-force": a } : {},
|
|
78
96
|
className: e("outline-none focus-ring-inset", n),
|
|
79
97
|
children: r
|
|
80
98
|
});
|
|
81
99
|
});
|
|
82
|
-
process.env.NODE_ENV !== "production" && (
|
|
83
|
-
var
|
|
84
|
-
List:
|
|
85
|
-
Tab:
|
|
86
|
-
Panel:
|
|
87
|
-
}),
|
|
88
|
-
List:
|
|
89
|
-
Tab:
|
|
90
|
-
Panel:
|
|
100
|
+
process.env.NODE_ENV !== "production" && (S.displayName = "Tabs.Panel");
|
|
101
|
+
var C = /* @__PURE__ */ Object.assign(/* @__PURE__ */ y(h.variant, "Tabs"), {
|
|
102
|
+
List: b,
|
|
103
|
+
Tab: x,
|
|
104
|
+
Panel: S
|
|
105
|
+
}), w = /* @__PURE__ */ Object.assign(/* @__PURE__ */ y(_.variant, "PillTabs"), {
|
|
106
|
+
List: b,
|
|
107
|
+
Tab: x,
|
|
108
|
+
Panel: S
|
|
91
109
|
});
|
|
92
110
|
//#endregion
|
|
93
|
-
export {
|
|
111
|
+
export { _ as KAESO_PILL_TABS_DEFAULT_VARIANTS, g as KAESO_PILL_TABS_VARIANTS, h as KAESO_TABS_DEFAULT_VARIANTS, m as KAESO_TABS_VARIANTS, w as PillTabs, C as Tabs };
|
|
94
112
|
|
|
95
113
|
//# sourceMappingURL=tabs.js.map
|