@logicplanes/kaeso-ui 0.4.4 → 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 +250 -98
- package/ai/component-registry.json +264 -236
- package/ai/component-registry.md +222 -218
- package/ai/icons.md +1 -1
- 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-DdNPHEzI.js → code-block-KIvuE8jg.js} +122 -114
- 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-D_0mmG-k.js → de-CqC4aSIV.js} +74 -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-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-Bm6UPIbW.js → zh-CN-BlpsT6d_.js} +73 -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 +3 -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 +1 -1
- 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 +100 -100
- 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/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/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-BZIe_B9l.js +0 -334
- package/dist/chunks/code-block-BZIe_B9l.js.map +0 -1
- package/dist/chunks/code-block-DdNPHEzI.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-D_0mmG-k.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-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-BupwFOae.js +0 -313
- package/dist/chunks/markdown-BupwFOae.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-Bm6UPIbW.js.map +0 -1
- package/dist/components/data-table.js.map +0 -1
- package/dist/components/label.js.map +0 -1
|
@@ -1,65 +1,77 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "../../chunks/cn-
|
|
3
|
-
import {
|
|
2
|
+
import { t as e } from "../../chunks/cn-BjnOAUrA.js";
|
|
3
|
+
import { i as t } from "../../chunks/context-BELWW79w.js";
|
|
4
4
|
import { formatPercent as n } from "../../format.js";
|
|
5
|
-
import { O as r } from "../../chunks/core-
|
|
5
|
+
import { O as r } from "../../chunks/core-CmK-8ObW.js";
|
|
6
6
|
import { forwardRef as i } from "react";
|
|
7
7
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
8
8
|
//#region src/components/charts/gauge.tsx
|
|
9
9
|
var s = { size: { md: { classes: "w-180" } } }, c = { size: "md" }, l = /* @__PURE__ */ i(function({ value: i, thresholds: s = [.8], label: c, valueLabel: l, className: u, "aria-label": d }, f) {
|
|
10
|
-
t()
|
|
11
|
-
|
|
12
|
-
let [n, r] = h(e, 82), [i, a] = h(t, 82);
|
|
10
|
+
let p = t(), m = Number.isFinite(i), [h] = r([m ? Math.max(0, Math.min(1, i)) : 0]), g = (e) => Math.PI * (1 - e), _ = (e, t) => [90 + t * Math.cos(g(e)), 94 - t * Math.sin(g(e))], v = (e, t) => {
|
|
11
|
+
let [n, r] = _(e, 82), [i, a] = _(t, 82);
|
|
13
12
|
return `M${n} ${r}A82 82 0 0 1 ${i} ${a}`;
|
|
14
|
-
},
|
|
13
|
+
}, y = m ? Math.round(i * 100) : 0, b = m && i >= 1, x = m && !b && i >= Math.min(...s, 1), S = b ? "var(--k-danger)" : x ? "var(--k-warning)" : "var(--k-viz-1)", C = b ? p("gauge.over", "Over the limit") : x ? p("gauge.near", "Near the limit") : null, w = l ?? (m ? n(i, 0) : "–"), T = [
|
|
14
|
+
typeof l == "string" ? l : m ? n(i, 0) : p("gauge.noData", "No data"),
|
|
15
|
+
typeof c == "string" ? c : null,
|
|
16
|
+
C
|
|
17
|
+
].filter(Boolean).join(", ");
|
|
15
18
|
return /* @__PURE__ */ o("div", {
|
|
16
19
|
ref: f,
|
|
17
20
|
role: "meter",
|
|
18
21
|
"aria-label": d,
|
|
19
22
|
"aria-valuemin": 0,
|
|
20
|
-
"aria-valuemax":
|
|
21
|
-
"aria-valuenow":
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}),
|
|
60
|
-
className: "
|
|
61
|
-
children:
|
|
23
|
+
"aria-valuemax": 100,
|
|
24
|
+
"aria-valuenow": Math.max(0, Math.min(100, y)),
|
|
25
|
+
"aria-valuetext": T,
|
|
26
|
+
className: e("relative inline-flex w-180 flex-col items-center", u),
|
|
27
|
+
children: [/* @__PURE__ */ o("div", {
|
|
28
|
+
className: "relative",
|
|
29
|
+
children: [/* @__PURE__ */ o("svg", {
|
|
30
|
+
width: 180,
|
|
31
|
+
height: 104,
|
|
32
|
+
role: "presentation",
|
|
33
|
+
className: "block data-mark",
|
|
34
|
+
children: [
|
|
35
|
+
/* @__PURE__ */ a("path", {
|
|
36
|
+
d: v(0, 1),
|
|
37
|
+
fill: "none",
|
|
38
|
+
stroke: "var(--k-fill-3)",
|
|
39
|
+
strokeWidth: 12,
|
|
40
|
+
strokeLinecap: "round"
|
|
41
|
+
}),
|
|
42
|
+
(h ?? 0) > 0 && /* @__PURE__ */ a("path", {
|
|
43
|
+
d: v(0, Math.max(.005, h ?? 0)),
|
|
44
|
+
fill: "none",
|
|
45
|
+
stroke: S,
|
|
46
|
+
strokeWidth: 12,
|
|
47
|
+
strokeLinecap: "round"
|
|
48
|
+
}),
|
|
49
|
+
s.map((e) => {
|
|
50
|
+
let [t, n] = _(e, 76), [r, i] = _(e, 92);
|
|
51
|
+
return /* @__PURE__ */ a("line", {
|
|
52
|
+
x1: t,
|
|
53
|
+
y1: n,
|
|
54
|
+
x2: r,
|
|
55
|
+
y2: i,
|
|
56
|
+
stroke: "var(--k-text-tertiary)",
|
|
57
|
+
strokeWidth: 2,
|
|
58
|
+
strokeLinecap: "round"
|
|
59
|
+
}, e);
|
|
60
|
+
})
|
|
61
|
+
]
|
|
62
|
+
}), /* @__PURE__ */ o("div", {
|
|
63
|
+
className: "absolute inset-x-0 bottom-0 mx-auto flex max-w-140 flex-col items-center text-center",
|
|
64
|
+
children: [C && /* @__PURE__ */ a("span", {
|
|
65
|
+
className: e("text-caption font-medium", b ? "text-danger-text" : "text-warning-text"),
|
|
66
|
+
children: C
|
|
67
|
+
}), /* @__PURE__ */ a("span", {
|
|
68
|
+
className: "max-w-full text-title font-semibold text-fg tabular wrap-anywhere",
|
|
69
|
+
children: w
|
|
70
|
+
})]
|
|
62
71
|
})]
|
|
72
|
+
}), c && /* @__PURE__ */ a("span", {
|
|
73
|
+
className: "mt-4 max-w-full text-center text-caption font-medium text-pretty text-fg-tertiary",
|
|
74
|
+
children: c
|
|
63
75
|
})]
|
|
64
76
|
});
|
|
65
77
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gauge.js","names":["cn","
|
|
1
|
+
{"version":3,"file":"gauge.js","names":["cn","useUiText","useTweened","KAESO_GAUGE_VARIANTS","KAESO_GAUGE_DEFAULT_VARIANTS","Gauge","ariaLabel","t","known","value","drawn","a","f","pt","r","path","x1","y1","from","x2","y2","to","now","over","near","thresholds","tone","status","shown","valueLabel","formatPercent","spoken","label","className","th"],"sources":["../../../src/components/charts/gauge.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatPercent } from \"../../format/index.js\";\nimport { useTweened } from \"./core.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_GAUGE_VARIANTS = {\n size: { md: { classes: \"w-180\" } },\n} as const;\nexport const KAESO_GAUGE_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport const Gauge = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n {\n value: number;\n thresholds?: number[] | undefined;\n label?: ReactNode | undefined;\n valueLabel?: ReactNode | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n }\n>(function Gauge({ value, thresholds = [0.8], label, valueLabel, className, \"aria-label\": ariaLabel }, ref) {\n const t = useUiText();\n const W = 180;\n const R = 82;\n const known = Number.isFinite(value);\n const [drawn] = useTweened([known ? Math.max(0, Math.min(1, value)) : 0]);\n const a = (f: number) => Math.PI * (1 - f);\n const pt = (f: number, r: number) => [W / 2 + r * Math.cos(a(f)), 94 - r * Math.sin(a(f))] as const;\n const path = (from: number, to: number) => {\n const [x1, y1] = pt(from, R);\n const [x2, y2] = pt(to, R);\n return `M${x1} ${y1}A${R} ${R} 0 0 1 ${x2} ${y2}`;\n };\n const now = known ? Math.round(value * 100) : 0;\n const over = known && value >= 1;\n const near = known && !over && value >= Math.min(...thresholds, 1);\n const tone = over ? \"var(--k-danger)\" : near ? \"var(--k-warning)\" : \"var(--k-viz-1)\";\n const status = over ? t(\"gauge.over\", \"Over the limit\") : near ? t(\"gauge.near\", \"Near the limit\") : null;\n const shown = valueLabel ?? (known ? formatPercent(value, 0) : \"–\");\n const spokenValue = typeof valueLabel === \"string\" ? valueLabel : known ? formatPercent(value, 0) : t(\"gauge.noData\", \"No data\");\n const spoken = [spokenValue, typeof label === \"string\" ? label : null, status].filter(Boolean).join(\", \");\n return (\n <div\n ref={ref}\n role=\"meter\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.max(0, Math.min(100, now))}\n aria-valuetext={spoken}\n className={cn(\"relative inline-flex w-180 flex-col items-center\", className)}\n >\n <div className=\"relative\">\n <svg width={W} height={104} role=\"presentation\" className=\"block data-mark\">\n <path d={path(0, 1)} fill=\"none\" stroke=\"var(--k-fill-3)\" strokeWidth={12} strokeLinecap=\"round\" />\n {(drawn ?? 0) > 0 && <path d={path(0, Math.max(0.005, drawn ?? 0))} fill=\"none\" stroke={tone} strokeWidth={12} strokeLinecap=\"round\" />}\n {thresholds.map((th) => {\n const [x1, y1] = pt(th, R - 6);\n const [x2, y2] = pt(th, R + 10);\n return <line key={th} x1={x1} y1={y1} x2={x2} y2={y2} stroke=\"var(--k-text-tertiary)\" strokeWidth={2} strokeLinecap=\"round\" />;\n })}\n </svg>\n <div className=\"absolute inset-x-0 bottom-0 mx-auto flex max-w-140 flex-col items-center text-center\">\n {status && <span className={cn(\"text-caption font-medium\", over ? \"text-danger-text\" : \"text-warning-text\")}>{status}</span>}\n <span className=\"max-w-full text-title font-semibold text-fg tabular wrap-anywhere\">{shown}</span>\n </div>\n </div>\n {label && <span className=\"mt-4 max-w-full text-center text-caption font-medium text-pretty text-fg-tertiary\">{label}</span>}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Gauge.displayName = \"Gauge\";\n"],"mappings":"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"}
|
|
@@ -1,83 +1,192 @@
|
|
|
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 } from "../../chunks/context-BELWW79w.js";
|
|
4
4
|
import { formatNumber as n } from "../../format.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { t as r } from "../../chunks/use-scroll-fade-uc8mWSDX.js";
|
|
6
|
+
import { i, n as a, r as o } from "../../chunks/core-CmK-8ObW.js";
|
|
7
|
+
import { forwardRef as s, useLayoutEffect as c, useRef as l, useState as u } from "react";
|
|
8
|
+
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
9
|
+
import { max as p } from "d3-array";
|
|
8
10
|
//#region src/components/charts/heatmap.tsx
|
|
9
|
-
var
|
|
11
|
+
var m = { layout: {
|
|
10
12
|
week: { classes: "" },
|
|
11
13
|
year: { classes: "" }
|
|
12
|
-
} },
|
|
14
|
+
} }, h = { layout: "week" }, g = [
|
|
13
15
|
"var(--k-fill-1)",
|
|
14
|
-
"color-mix(in oklab, var(--k-viz-1)
|
|
15
|
-
"color-mix(in oklab, var(--k-viz-1)
|
|
16
|
-
"color-mix(in oklab, var(--k-viz-1)
|
|
16
|
+
"color-mix(in oklab, var(--k-viz-1) 40%, var(--k-fill-1))",
|
|
17
|
+
"color-mix(in oklab, var(--k-viz-1) 60%, var(--k-fill-1))",
|
|
18
|
+
"color-mix(in oklab, var(--k-viz-1) 80%, var(--k-fill-1))",
|
|
17
19
|
"var(--k-viz-1)"
|
|
18
|
-
],
|
|
19
|
-
let
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
20
|
+
], _ = 12, v = 3, y = /* @__PURE__ */ s(function({ rows: s, columns: m, values: h, formatValue: y = (e) => n(e), className: b, "aria-label": x, columnLabelEvery: S = 3 }, C) {
|
|
21
|
+
let w = t(), T = p(h.flat().filter(Number.isFinite)) ?? 0, E = (e) => !Number.isFinite(e) || e <= 0 || T === 0 ? 0 : Math.min(4, Math.ceil(e / T * 4)), D = s.length === 0 || m.length === 0, [O, k] = u(null), [A, j] = u(!1), M = l(null), N = l(null), [P, F] = u(0);
|
|
22
|
+
r(M, "[data-heatmap-grid]"), c(() => {
|
|
23
|
+
let e = N.current?.querySelector("[data-heatmap-rows]");
|
|
24
|
+
e && F(e.offsetWidth);
|
|
25
|
+
}, [s]), c(() => {
|
|
26
|
+
A && O && N.current?.querySelector(`[data-cell="${O.r}-${O.c}"]`)?.scrollIntoView?.({
|
|
27
|
+
block: "nearest",
|
|
28
|
+
inline: "nearest"
|
|
29
|
+
});
|
|
30
|
+
}, [O, A]);
|
|
31
|
+
let I = (e, t) => h[e]?.[t] ?? 0, L = (e) => Number.isFinite(e) ? y(e) : "–", R = (e, t) => w("heatmap.cell", "{row} {column}: {value}", {
|
|
32
|
+
row: s[e] ?? "",
|
|
33
|
+
column: m[t] ?? "",
|
|
34
|
+
value: L(I(e, t))
|
|
35
|
+
}), z = 19 + s.length * 15 + 8, B = {
|
|
36
|
+
columns: [w("heatmap.rows", "Row"), ...m],
|
|
37
|
+
rows: s.map((e, t) => [e, ...m.map((e, n) => L(I(t, n)))])
|
|
38
|
+
}, V = (e) => {
|
|
39
|
+
let t = O ?? {
|
|
40
|
+
r: 0,
|
|
41
|
+
c: 0
|
|
42
|
+
}, n = e === "ArrowRight" ? {
|
|
43
|
+
r: t.r,
|
|
44
|
+
c: Math.min(m.length - 1, t.c + 1)
|
|
45
|
+
} : e === "ArrowLeft" ? {
|
|
46
|
+
r: t.r,
|
|
47
|
+
c: Math.max(0, t.c - 1)
|
|
48
|
+
} : e === "ArrowDown" ? {
|
|
49
|
+
r: Math.min(s.length - 1, t.r + 1),
|
|
50
|
+
c: t.c
|
|
51
|
+
} : e === "ArrowUp" ? {
|
|
52
|
+
r: Math.max(0, t.r - 1),
|
|
53
|
+
c: t.c
|
|
54
|
+
} : e === "Home" ? {
|
|
55
|
+
r: t.r,
|
|
56
|
+
c: 0
|
|
57
|
+
} : e === "End" ? {
|
|
58
|
+
r: t.r,
|
|
59
|
+
c: m.length - 1
|
|
60
|
+
} : void 0;
|
|
61
|
+
return O === null && n ? t : n;
|
|
62
|
+
}, H = M.current?.scrollLeft ?? 0, U = O ? {
|
|
63
|
+
x: P + v + O.c * 15 + _ - H,
|
|
64
|
+
xLeft: P + v + O.c * 15 - H,
|
|
65
|
+
y: 19 + O.r * 15 + 24
|
|
66
|
+
} : null;
|
|
67
|
+
return /* @__PURE__ */ d("div", {
|
|
68
|
+
ref: C,
|
|
69
|
+
className: e("w-full min-w-0", b),
|
|
70
|
+
children: /* @__PURE__ */ d(a, {
|
|
71
|
+
label: x,
|
|
72
|
+
height: z,
|
|
73
|
+
table: D ? void 0 : B,
|
|
74
|
+
state: { empty: D },
|
|
75
|
+
legend: D ? void 0 : /* @__PURE__ */ f("div", {
|
|
76
|
+
className: "flex items-center gap-3 text-caption font-medium text-fg-tertiary",
|
|
77
|
+
"aria-hidden": !0,
|
|
78
|
+
children: [
|
|
79
|
+
/* @__PURE__ */ d("span", {
|
|
80
|
+
className: "mr-4",
|
|
81
|
+
children: w("heatmap.less", "Less")
|
|
82
|
+
}),
|
|
83
|
+
g.map((e) => /* @__PURE__ */ d("span", {
|
|
84
|
+
className: "size-12 rounded-cell data-mark",
|
|
85
|
+
style: { background: e }
|
|
86
|
+
}, e)),
|
|
87
|
+
/* @__PURE__ */ d("span", {
|
|
88
|
+
className: "ml-4",
|
|
89
|
+
children: w("heatmap.more", "More")
|
|
90
|
+
})
|
|
91
|
+
]
|
|
92
|
+
}),
|
|
93
|
+
children: !D && /* @__PURE__ */ f("div", {
|
|
94
|
+
className: "absolute inset-0",
|
|
95
|
+
children: [
|
|
96
|
+
/* @__PURE__ */ d("div", {
|
|
97
|
+
ref: M,
|
|
98
|
+
role: "group",
|
|
99
|
+
tabIndex: 0,
|
|
100
|
+
"aria-label": x,
|
|
101
|
+
onKeyDown: (e) => {
|
|
102
|
+
if (e.key === "Escape" && O) {
|
|
103
|
+
e.stopPropagation(), k(null);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
let t = V(e.key);
|
|
107
|
+
t && (e.preventDefault(), j(!0), k(t));
|
|
108
|
+
},
|
|
109
|
+
onFocus: (e) => {
|
|
110
|
+
if (e.target !== e.currentTarget || document.documentElement.hasAttribute("data-k-pointer")) return;
|
|
111
|
+
let t = !0;
|
|
112
|
+
try {
|
|
113
|
+
t = e.currentTarget.matches(":focus-visible");
|
|
114
|
+
} catch {}
|
|
115
|
+
t && (j(!0), k({
|
|
116
|
+
r: 0,
|
|
117
|
+
c: 0
|
|
118
|
+
}));
|
|
119
|
+
},
|
|
120
|
+
onBlur: () => {
|
|
121
|
+
k(null), j(!1);
|
|
122
|
+
},
|
|
123
|
+
onScroll: () => k((e) => A ? e : null),
|
|
124
|
+
className: "size-full overflow-x-auto overflow-y-hidden rounded-cell scrollbar-quiet scroll-fade-x focus-ring-inset",
|
|
125
|
+
children: /* @__PURE__ */ f("div", {
|
|
126
|
+
ref: N,
|
|
127
|
+
"data-heatmap-grid": "",
|
|
128
|
+
className: "inline-grid gap-3",
|
|
129
|
+
style: { gridTemplateColumns: `max-content repeat(${m.length}, ${_}px)` },
|
|
130
|
+
onPointerLeave: () => {
|
|
131
|
+
j(!1), k(null);
|
|
132
|
+
},
|
|
133
|
+
children: [
|
|
134
|
+
/* @__PURE__ */ d("span", { "data-heatmap-rows": "" }),
|
|
135
|
+
m.map((e, t) => /* @__PURE__ */ d("span", {
|
|
136
|
+
className: "h-16 overflow-visible text-caption whitespace-nowrap text-fg-tertiary tabular",
|
|
137
|
+
"aria-hidden": !0,
|
|
138
|
+
children: t % S === 0 ? e : ""
|
|
139
|
+
}, e)),
|
|
140
|
+
s.map((t, n) => /* @__PURE__ */ f("div", {
|
|
141
|
+
className: "contents",
|
|
142
|
+
children: [/* @__PURE__ */ d("span", {
|
|
143
|
+
className: "flex h-12 items-center pr-8 text-caption whitespace-nowrap text-fg-tertiary",
|
|
144
|
+
"aria-hidden": !0,
|
|
145
|
+
children: t
|
|
146
|
+
}), m.map((t, r) => {
|
|
147
|
+
let i = O?.r === n && O.c === r;
|
|
148
|
+
return /* @__PURE__ */ d("span", {
|
|
149
|
+
"data-cell": `${n}-${r}`,
|
|
150
|
+
"aria-hidden": !0,
|
|
151
|
+
onPointerEnter: () => {
|
|
152
|
+
j(!1), k({
|
|
153
|
+
r: n,
|
|
154
|
+
c: r
|
|
155
|
+
});
|
|
156
|
+
},
|
|
157
|
+
className: e("size-12 rounded-cell data-mark", i && "outline-2 outline-offset-1 outline-fg"),
|
|
158
|
+
style: { background: g[E(I(n, r))] }
|
|
159
|
+
}, t);
|
|
160
|
+
})]
|
|
161
|
+
}, t))
|
|
162
|
+
]
|
|
163
|
+
})
|
|
164
|
+
}),
|
|
165
|
+
O && U && /* @__PURE__ */ d(i, {
|
|
166
|
+
x: U.x,
|
|
167
|
+
xLeft: U.xLeft,
|
|
168
|
+
y: U.y,
|
|
169
|
+
width: M.current?.clientWidth ?? 0,
|
|
170
|
+
visible: !0,
|
|
171
|
+
heading: w("heatmap.cellHeading", "{row} {column}", {
|
|
172
|
+
row: s[O.r] ?? "",
|
|
173
|
+
column: m[O.c] ?? ""
|
|
174
|
+
}),
|
|
175
|
+
rows: [{
|
|
176
|
+
id: "v",
|
|
177
|
+
label: "",
|
|
178
|
+
color: g[E(I(O.r, O.c))],
|
|
179
|
+
value: L(I(O.r, O.c))
|
|
180
|
+
}]
|
|
181
|
+
}),
|
|
182
|
+
/* @__PURE__ */ d(o, { children: A && O ? R(O.r, O.c) : null })
|
|
183
|
+
]
|
|
184
|
+
})
|
|
185
|
+
})
|
|
77
186
|
});
|
|
78
187
|
});
|
|
79
|
-
process.env.NODE_ENV !== "production" && (
|
|
188
|
+
process.env.NODE_ENV !== "production" && (y.displayName = "Heatmap");
|
|
80
189
|
//#endregion
|
|
81
|
-
export {
|
|
190
|
+
export { y as Heatmap, h as KAESO_HEATMAP_DEFAULT_VARIANTS, m as KAESO_HEATMAP_VARIANTS };
|
|
82
191
|
|
|
83
192
|
//# sourceMappingURL=heatmap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heatmap.js","names":["d3max","cn","useUiText","KAESO_HEATMAP_VARIANTS","KAESO_HEATMAP_DEFAULT_VARIANTS","RAMP","Heatmap","formatNumber","v","ariaLabel","t","hi","max","values","level","className","columns","i","columnLabelEvery","c","rows","r","ri","ci","cell","formatValue"],"sources":["../../../src/components/charts/heatmap.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { max as d3max } from \"d3-array\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatNumber } from \"../../format/index.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_HEATMAP_VARIANTS = {\n layout: {\n week: { classes: \"\" },\n year: { classes: \"\" },\n },\n} as const;\nexport const KAESO_HEATMAP_DEFAULT_VARIANTS = { layout: \"week\" } as const;\n\nconst RAMP = [\n \"var(--k-fill-1)\",\n \"color-mix(in oklab, var(--k-viz-1) 25%, var(--k-fill-1))\",\n \"color-mix(in oklab, var(--k-viz-1) 50%, var(--k-fill-1))\",\n \"color-mix(in oklab, var(--k-viz-1) 75%, var(--k-fill-1))\",\n \"var(--k-viz-1)\",\n];\n\nexport const Heatmap = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n {\n rows: string[];\n columns: string[];\n values: number[][];\n formatValue?: ((v: number) => string) | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n columnLabelEvery?: number | undefined;\n }\n>(function Heatmap({ rows, columns, values, formatValue = (v) => formatNumber(v), className, \"aria-label\": ariaLabel, columnLabelEvery = 3 }, ref) {\n const t = useUiText();\n const hi = d3max(values.flat()) ?? 0;\n const level = (v: number) => (v <= 0 || hi === 0 ? 0 : Math.min(4, Math.ceil((v / hi) * 4)));\n return (\n <div ref={ref} className={cn(\"flex min-w-0 max-w-full flex-col gap-12\", className)}>\n <div\n role=\"table\"\n tabIndex={0}\n aria-label={ariaLabel}\n className=\"inline-grid max-w-full gap-3 overflow-x-auto scrollbar-quiet rounded-cell focus-ring\"\n style={{ gridTemplateColumns: `40px repeat(${columns.length}, 12px)` }}\n >\n <span />\n {columns.map((c, i) => (\n <span key={c} className=\"h-16 text-micro text-fg-tertiary tabular whitespace-nowrap\" aria-hidden>\n {i % columnLabelEvery === 0 ? c : \"\"}\n </span>\n ))}\n {rows.map((r, ri) => (\n <div key={r} role=\"row\" className=\"contents\">\n <span role=\"rowheader\" className=\"flex h-12 items-center text-micro text-fg-tertiary\">\n {r}\n </span>\n {columns.map((c, ci) => {\n const v = values[ri]?.[ci] ?? 0;\n const cell = t(\"heatmap.cell\", \"{row} {column}: {value}\", { row: r, column: c, value: formatValue(v) });\n return <span key={c} role=\"cell\" aria-label={cell} title={cell} className=\"size-12 rounded-cell\" style={{ background: RAMP[level(v)] }} />;\n })}\n </div>\n ))}\n </div>\n <div className=\"flex items-center gap-3 text-caption font-medium text-fg-tertiary\" aria-hidden>\n <span className=\"mr-4\">{t(\"heatmap.less\", \"Less\")}</span>\n {RAMP.map((c) => (\n <span key={c} className=\"size-12 rounded-cell\" style={{ background: c }} />\n ))}\n <span className=\"ml-4\">{t(\"heatmap.more\", \"More\")}</span>\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Heatmap.displayName = \"Heatmap\";\n"],"mappings":";;;;;;;;AAMA,IAAaG,IAAyB,EACpC,QAAQ;CACN,MAAM,EAAE,SAAS,GAAG;CACpB,MAAM,EAAE,SAAS,GAAG;AACtB,EACF,GACaC,IAAiC,EAAE,QAAQ,OAAO,GAEzDC,IAAO;CACX;CACA;CACA;CACA;CACA;AACF,GAEaC,IAA0B,kBAWrC,SAAiB,EAAE,SAAM,YAAS,WAAQ,kBAAe,MAAMC,EAAaC,CAAC,GAAG,cAAW,cAAcC,GAAW,sBAAmB,KAAK,GAAK;CACjJ,IAAMC,IAAIR,EAAU,GACdS,IAAKX,EAAMa,EAAO,KAAK,CAAC,KAAK,GAC7BC,KAAS,MAAeN,KAAK,KAAKG,MAAO,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,KAAMH,IAAIG,IAAM,CAAC,CAAC;CAC1F,OACE,kBAAC,OAAD;EAAU;EAAK,WAAWV,EAAG,2CAA2Cc,CAAS;EAAjF,UAAA,CACE,kBAAC,OAAD;GACE,MAAK;GACL,UAAU;GACV,cAAYN;GACZ,WAAU;GACV,OAAO,EAAE,qBAAqB,eAAeO,EAAQ,OAAO,SAAS;GALvE,UAAA;IAOE,kBAAC,QAAD,CAAO,CAAA;IACNA,EAAQ,KAAK,GAAG,MACf,kBAAC,QAAD;KAAc,WAAU;KAA6D,eAAA;KAClF,UAAAC,IAAIC,MAAqB,IAAIC,IAAI;IAC9B,GAFKA,CAEL,CACP;IACAC,EAAK,KAAK,GAAG,MACZ,kBAAC,OAAD;KAAa,MAAK;KAAM,WAAU;KAAlC,UAAA,CACE,kBAAC,QAAD;MAAM,MAAK;MAAY,WAAU;MAC9B,UAAAC;KACG,CAAA,GACLL,EAAQ,KAAK,GAAG,MAAO;MACtB,IAAMR,IAAIK,EAAOS,EAAG,GAAGC,MAAO,GACxBC,IAAOd,EAAE,gBAAgB,2BAA2B;OAAE,KAAKW;OAAG,QAAQF;OAAG,OAAOM,EAAYjB,CAAC;MAAE,CAAC;MACtG,OAAO,kBAAC,QAAD;OAAc,MAAK;OAAO,cAAYgB;OAAM,OAAOA;OAAM,WAAU;OAAuB,OAAO,EAAE,YAAYnB,EAAKS,EAAMN,CAAC,GAAG;MAAI,GAAvHW,CAAuH;KAC3I,CAAC,CACE;IATK,GAAAE,CASL,CACN;GACE;EACL,CAAA,GAAA,kBAAC,OAAD;GAAK,WAAU;GAAoE,eAAA;GAAnF,UAAA;IACE,kBAAC,QAAD;KAAM,WAAU;KAAQ,UAAAX,EAAE,gBAAgB,MAAM;IAAQ,CAAA;IACvDL,EAAK,KAAK,MACT,kBAAC,QAAD;KAAc,WAAU;KAAuB,OAAO,EAAE,YAAYc,EAAE;IAAI,GAA/DA,CAA+D,CAC3E;IACD,kBAAC,QAAD;KAAM,WAAU;KAAQ,UAAAT,EAAE,gBAAgB,MAAM;IAAQ,CAAA;GACrD;EACF,CAAA,CAAA;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAQ,cAAc"}
|
|
1
|
+
{"version":3,"file":"heatmap.js","names":["d3max","cn","useUiText","useScrollFadeX","ChartFrame","ChartLive","KAESO_HEATMAP_VARIANTS","KAESO_HEATMAP_DEFAULT_VARIANTS","RAMP","CELL","GAP","Heatmap","formatNumber","v","ariaLabel","t","hi","max","values","level","empty","rows","columns","cell","setCell","useState","keyboard","setKeyboard","scroller","useRef","grid","labelWidth","setLabelWidth","useLayoutEffect","first","value","r","c","write","formatValue","line","height","table","ri","ci","move","at","next","key","scrollLeft","tip","className","visible","i","columnLabelEvery","on","ChartTooltip"],"sources":["../../../src/components/charts/heatmap.tsx"],"sourcesContent":["import { forwardRef, useLayoutEffect, useRef, useState } from \"react\";\nimport { max as d3max } from \"d3-array\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatNumber } from \"../../format/index.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { useScrollFadeX } from \"../../hooks/use-scroll-fade.js\";\nimport { ChartFrame, ChartLive, ChartTooltip } from \"./core.js\";\n\nexport const KAESO_HEATMAP_VARIANTS = {\n layout: {\n week: { classes: \"\" },\n year: { classes: \"\" },\n },\n} as const;\nexport const KAESO_HEATMAP_DEFAULT_VARIANTS = { layout: \"week\" } as const;\n\nconst RAMP = [\n \"var(--k-fill-1)\",\n \"color-mix(in oklab, var(--k-viz-1) 40%, var(--k-fill-1))\",\n \"color-mix(in oklab, var(--k-viz-1) 60%, var(--k-fill-1))\",\n \"color-mix(in oklab, var(--k-viz-1) 80%, var(--k-fill-1))\",\n \"var(--k-viz-1)\",\n];\nconst CELL = 12;\nconst GAP = 3;\nconst HEAD = 16;\n\nexport const Heatmap = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n {\n rows: string[];\n columns: string[];\n values: number[][];\n formatValue?: ((v: number) => string) | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n columnLabelEvery?: number | undefined;\n }\n>(function Heatmap({ rows, columns, values, formatValue = (v) => formatNumber(v), className, \"aria-label\": ariaLabel, columnLabelEvery = 3 }, ref) {\n const t = useUiText();\n const hi = d3max(values.flat().filter(Number.isFinite)) ?? 0;\n const level = (v: number) => (!Number.isFinite(v) || v <= 0 || hi === 0 ? 0 : Math.min(4, Math.ceil((v / hi) * 4)));\n const empty = rows.length === 0 || columns.length === 0;\n const [cell, setCell] = useState<{ r: number; c: number } | null>(null);\n const [keyboard, setKeyboard] = useState(false);\n const scroller = useRef<HTMLDivElement | null>(null);\n const grid = useRef<HTMLDivElement | null>(null);\n const [labelWidth, setLabelWidth] = useState(0);\n useScrollFadeX(scroller, \"[data-heatmap-grid]\");\n useLayoutEffect(() => {\n const first = grid.current?.querySelector<HTMLElement>(\"[data-heatmap-rows]\");\n if (first) setLabelWidth(first.offsetWidth);\n }, [rows]);\n useLayoutEffect(() => {\n if (!keyboard || !cell) return;\n grid.current?.querySelector(`[data-cell=\"${cell.r}-${cell.c}\"]`)?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n }, [cell, keyboard]);\n const value = (r: number, c: number) => values[r]?.[c] ?? 0;\n const write = (v: number) => (Number.isFinite(v) ? formatValue(v) : \"–\");\n const line = (r: number, c: number) =>\n t(\"heatmap.cell\", \"{row} {column}: {value}\", { row: rows[r] ?? \"\", column: columns[c] ?? \"\", value: write(value(r, c)) });\n const height = HEAD + GAP + rows.length * (CELL + GAP) + 8;\n const table = { columns: [t(\"heatmap.rows\", \"Row\"), ...columns], rows: rows.map((r, ri) => [r, ...columns.map((_, ci) => write(value(ri, ci)))]) };\n const move = (key: string) => {\n const at = cell ?? { r: 0, c: 0 };\n const next =\n key === \"ArrowRight\"\n ? { r: at.r, c: Math.min(columns.length - 1, at.c + 1) }\n : key === \"ArrowLeft\"\n ? { r: at.r, c: Math.max(0, at.c - 1) }\n : key === \"ArrowDown\"\n ? { r: Math.min(rows.length - 1, at.r + 1), c: at.c }\n : key === \"ArrowUp\"\n ? { r: Math.max(0, at.r - 1), c: at.c }\n : key === \"Home\"\n ? { r: at.r, c: 0 }\n : key === \"End\"\n ? { r: at.r, c: columns.length - 1 }\n : undefined;\n return cell === null && next ? at : next;\n };\n const scrollLeft = scroller.current?.scrollLeft ?? 0;\n const tip = cell\n ? {\n x: labelWidth + GAP + cell.c * (CELL + GAP) + CELL - scrollLeft,\n xLeft: labelWidth + GAP + cell.c * (CELL + GAP) - scrollLeft,\n y: HEAD + GAP + cell.r * (CELL + GAP) + 24,\n }\n : null;\n return (\n <div ref={ref} className={cn(\"w-full min-w-0\", className)}>\n <ChartFrame\n label={ariaLabel}\n height={height}\n table={empty ? undefined : table}\n state={{ empty }}\n legend={\n empty ? undefined : (\n <div className=\"flex items-center gap-3 text-caption font-medium text-fg-tertiary\" aria-hidden>\n <span className=\"mr-4\">{t(\"heatmap.less\", \"Less\")}</span>\n {RAMP.map((c) => (\n <span key={c} className=\"size-12 rounded-cell data-mark\" style={{ background: c }} />\n ))}\n <span className=\"ml-4\">{t(\"heatmap.more\", \"More\")}</span>\n </div>\n )\n }\n >\n {!empty && (\n <div className=\"absolute inset-0\">\n <div\n ref={scroller}\n role=\"group\"\n tabIndex={0}\n aria-label={ariaLabel}\n onKeyDown={(e) => {\n if (e.key === \"Escape\" && cell) {\n e.stopPropagation();\n setCell(null);\n return;\n }\n const next = move(e.key);\n if (!next) return;\n e.preventDefault();\n setKeyboard(true);\n setCell(next);\n }}\n onFocus={(e) => {\n if (e.target !== e.currentTarget || document.documentElement.hasAttribute(\"data-k-pointer\")) return;\n let visible = true;\n try {\n visible = e.currentTarget.matches(\":focus-visible\");\n } catch {}\n if (visible) {\n setKeyboard(true);\n setCell({ r: 0, c: 0 });\n }\n }}\n onBlur={() => {\n setCell(null);\n setKeyboard(false);\n }}\n onScroll={() => setCell((c) => (keyboard ? c : null))}\n className=\"size-full overflow-x-auto overflow-y-hidden rounded-cell scrollbar-quiet scroll-fade-x focus-ring-inset\"\n >\n <div\n ref={grid}\n data-heatmap-grid=\"\"\n className=\"inline-grid gap-3\"\n style={{ gridTemplateColumns: `max-content repeat(${columns.length}, ${CELL}px)` }}\n onPointerLeave={() => {\n setKeyboard(false);\n setCell(null);\n }}\n >\n <span data-heatmap-rows=\"\" />\n {columns.map((c, i) => (\n <span key={c} className=\"h-16 overflow-visible text-caption whitespace-nowrap text-fg-tertiary tabular\" aria-hidden>\n {i % columnLabelEvery === 0 ? c : \"\"}\n </span>\n ))}\n {rows.map((r, ri) => (\n <div key={r} className=\"contents\">\n <span className=\"flex h-12 items-center pr-8 text-caption whitespace-nowrap text-fg-tertiary\" aria-hidden>\n {r}\n </span>\n {columns.map((c, ci) => {\n const on = cell?.r === ri && cell.c === ci;\n return (\n <span\n key={c}\n data-cell={`${ri}-${ci}`}\n aria-hidden\n onPointerEnter={() => {\n setKeyboard(false);\n setCell({ r: ri, c: ci });\n }}\n className={cn(\"size-12 rounded-cell data-mark\", on && \"outline-2 outline-offset-1 outline-fg\")}\n style={{ background: RAMP[level(value(ri, ci))] }}\n />\n );\n })}\n </div>\n ))}\n </div>\n </div>\n {cell && tip && (\n <ChartTooltip\n x={tip.x}\n xLeft={tip.xLeft}\n y={tip.y}\n width={scroller.current?.clientWidth ?? 0}\n visible\n heading={t(\"heatmap.cellHeading\", \"{row} {column}\", { row: rows[cell.r] ?? \"\", column: columns[cell.c] ?? \"\" })}\n rows={[{ id: \"v\", label: \"\", color: RAMP[level(value(cell.r, cell.c))]!, value: write(value(cell.r, cell.c)) }]}\n />\n )}\n <ChartLive>{keyboard && cell ? line(cell.r, cell.c) : null}</ChartLive>\n </div>\n )}\n </ChartFrame>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Heatmap.displayName = \"Heatmap\";\n"],"mappings":"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"}
|