@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/ai/component-guides.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# @logicplanes/kaeso-ui component guides
|
|
2
2
|
|
|
3
|
-
Version 0.4.
|
|
3
|
+
Version 0.4.5. Generated from the showcase's demo modules (apps/showcase/src/demos); do not edit. For each component: what it is for, its import, keyboard, accessibility, do and don't, and every example's code. Props and variants: `component-registry.md`.
|
|
4
4
|
|
|
5
5
|
## AgentAttribution
|
|
6
6
|
|
|
7
|
-
A person's avatar with the agent that acted for them as a badge on its corner, for audit rows and activity.
|
|
7
|
+
A person's avatar with the agent that acted for them as a small round badge on its corner, for audit rows and activity.
|
|
8
8
|
|
|
9
9
|
`import { AgentAttribution } from "@logicplanes/kaeso-ui";`
|
|
10
10
|
|
|
@@ -39,7 +39,7 @@ A person's avatar with the agent that acted for them as a badge on its corner, f
|
|
|
39
39
|
|
|
40
40
|
## AgentAvatar
|
|
41
41
|
|
|
42
|
-
An agent acting for a person: one bot face on
|
|
42
|
+
An agent acting for a person: one bot face on a square, the same for every agent.
|
|
43
43
|
|
|
44
44
|
`import { AgentAvatar, useModelName } from "@logicplanes/kaeso-ui";`
|
|
45
45
|
|
|
@@ -96,8 +96,9 @@ Confirms an irreversible action: names it, says the consequence, can ask for typ
|
|
|
96
96
|
|
|
97
97
|
### Accessibility
|
|
98
98
|
|
|
99
|
-
- role=alertdialog
|
|
99
|
+
- role=alertdialog. The focus starts on the typed field when there is one; otherwise on Cancel, or on the confirm for an info confirmation.
|
|
100
100
|
- The confirm names the verb and object (“Delete key”).
|
|
101
|
+
- The Enter that finishes typing in an input method never confirms.
|
|
101
102
|
|
|
102
103
|
### Examples
|
|
103
104
|
|
|
@@ -136,8 +137,9 @@ The console frame: the sidebar on the grey chrome, content in an inset rounded p
|
|
|
136
137
|
|
|
137
138
|
- The sidebar is a nav landmark and the panel is main.
|
|
138
139
|
- The first Tab stop is Skip to content, shown only while it has focus; it moves the focus to the panel, so the next Tab reaches the page's first control without passing the navigation.
|
|
139
|
-
- Below 1024px a bar above the panel shows the wordmark alone at the top left,
|
|
140
|
-
- A collapsed sidebar peeks when its expand button is held under the pointer for 750ms.
|
|
140
|
+
- Below 1024px a bar above the panel shows the wordmark alone at the top left, on the page's 24px gutter and 28px down, and the navigation toggle at the right; the toggle is named Open navigation, says whether the sheet is open (aria-expanded), and takes the focus back when the sheet closes.
|
|
141
|
+
- A collapsed sidebar peeks when its expand button is held under the pointer for 750ms; the peek closes when the pointer leaves for the page, never dims it, and stays inside an embedded frame.
|
|
142
|
+
- Expanding the sidebar with the button or [ gives the focus back to the item that collapsed it, or to its collapse button.
|
|
141
143
|
|
|
142
144
|
### Examples
|
|
143
145
|
|
|
@@ -602,11 +604,14 @@ Related actions side by side: connected pills, or spaced.
|
|
|
602
604
|
| Key | Action |
|
|
603
605
|
|---|---|
|
|
604
606
|
| Tab | Moves between the buttons |
|
|
607
|
+
| Enter | Activates the focused button |
|
|
608
|
+
| Space | Activates the focused button |
|
|
605
609
|
|
|
606
610
|
### Accessibility
|
|
607
611
|
|
|
608
612
|
- The group has role=group; give it an aria-label when the buttons alone do not explain it.
|
|
609
613
|
- Icon-only items need an aria-label and show it as a tooltip.
|
|
614
|
+
- Items with pressed are toggles: aria-pressed says which is selected, and the selected item turns ink, well above 3:1 in both themes, so the choice never rests on a faint fill.
|
|
610
615
|
|
|
611
616
|
### Examples
|
|
612
617
|
|
|
@@ -639,6 +644,29 @@ Related actions side by side: connected pills, or spaced.
|
|
|
639
644
|
</ButtonGroup>
|
|
640
645
|
```
|
|
641
646
|
|
|
647
|
+
#### Toggle
|
|
648
|
+
|
|
649
|
+
Pass pressed to make items toggles, such as display options in a log view; selected items turn ink. Choosing one view among a few is Segmented.
|
|
650
|
+
|
|
651
|
+
```tsx
|
|
652
|
+
function Toggle() {
|
|
653
|
+
const [on, setOn] = useState<Record<string, boolean>>({ wrap: true, time: false, ids: true });
|
|
654
|
+
return (
|
|
655
|
+
<ButtonGroup size="sm" aria-label="Log display">
|
|
656
|
+
{[
|
|
657
|
+
["wrap", "Wrap lines"],
|
|
658
|
+
["time", "Timestamps"],
|
|
659
|
+
["ids", "Request IDs"],
|
|
660
|
+
].map(([id = "", label]) => (
|
|
661
|
+
<ButtonGroup.Item key={id} pressed={!!on[id]} onClick={() => setOn((o) => ({ ...o, [id]: !o[id] }))}>
|
|
662
|
+
{label}
|
|
663
|
+
</ButtonGroup.Item>
|
|
664
|
+
))}
|
|
665
|
+
</ButtonGroup>
|
|
666
|
+
);
|
|
667
|
+
}
|
|
668
|
+
```
|
|
669
|
+
|
|
642
670
|
## Checkbox
|
|
643
671
|
|
|
644
672
|
An 18px box: raised and ringed, ink when checked, with a check that draws itself.
|
|
@@ -676,13 +704,14 @@ An 18px box: raised and ringed, ink when checked, with a check that draws itself
|
|
|
676
704
|
|
|
677
705
|
## ClientButton
|
|
678
706
|
|
|
679
|
-
An agent client's mark
|
|
707
|
+
An agent client's mark in a raised circle, such as Claude, Cursor or GitHub Copilot, that opens how to connect it.
|
|
680
708
|
|
|
681
709
|
`import { ClientButton } from "@logicplanes/kaeso-ui";`
|
|
682
710
|
|
|
683
711
|
### Accessibility
|
|
684
712
|
|
|
685
713
|
- A button named by `aria-label`, which is also its tooltip; the mark is decorative.
|
|
714
|
+
- A 32px circle with a 44px hit area on touch screens.
|
|
686
715
|
|
|
687
716
|
### Examples
|
|
688
717
|
|
|
@@ -712,6 +741,7 @@ Copy a value: a read-only pill field, a copy circle, or inline text that copies
|
|
|
712
741
|
### Accessibility
|
|
713
742
|
|
|
714
743
|
- The copy circle's name changes to “Copied” for 1.2 seconds and the tooltip says it.
|
|
744
|
+
- A value too long for its pill ends in an ellipsis; the text then becomes focusable and shows the whole value in a tooltip.
|
|
715
745
|
- InlineCopyText announces “Copied” through a polite live region.
|
|
716
746
|
- Nothing changes size when the state changes.
|
|
717
747
|
|
|
@@ -746,7 +776,7 @@ A read-only pill with the value in mono and a copy circle inside.
|
|
|
746
776
|
|
|
747
777
|
## Code
|
|
748
778
|
|
|
749
|
-
Inline code: Geist Mono 13 on a soft fill
|
|
779
|
+
Inline code: Geist Mono 13 on a soft fill, radius 6 in running text.
|
|
750
780
|
|
|
751
781
|
`import { Code } from "@logicplanes/kaeso-ui";`
|
|
752
782
|
|
|
@@ -766,13 +796,14 @@ Inline code: Geist Mono 13 on a soft fill. A pill for one word.
|
|
|
766
796
|
|
|
767
797
|
## CodeBlock
|
|
768
798
|
|
|
769
|
-
Highlighted code on a well in Kaeso's monochrome theme: copy on hover, tabs, line numbers, collapse.
|
|
799
|
+
Highlighted code on a well in Kaeso's monochrome theme: copy in the header or on hover, tabs, line numbers, collapse.
|
|
770
800
|
|
|
771
801
|
`import { CodeBlock } from "@logicplanes/kaeso-ui";`
|
|
772
802
|
|
|
773
803
|
### Accessibility
|
|
774
804
|
|
|
775
|
-
- The copy circle is named “Copy code” and confirms with “Copied
|
|
805
|
+
- The copy circle is named “Copy code” and confirms with “Copied”; with a title or tabs it stays in the header.
|
|
806
|
+
- The code is one tab stop, named after its title, and scrolls sideways with the arrow keys.
|
|
776
807
|
|
|
777
808
|
### Examples
|
|
778
809
|
|
|
@@ -808,7 +839,7 @@ Highlighted code on a well in Kaeso's monochrome theme: copy on hover, tabs, lin
|
|
|
808
839
|
|
|
809
840
|
## Collapsible
|
|
810
841
|
|
|
811
|
-
Disclosure rows with a chevron that turns in
|
|
842
|
+
Disclosure rows: a pill row with the title 12px in, a chevron at its end that turns in 200ms, and a measured height animation; Accordion groups them.
|
|
812
843
|
|
|
813
844
|
`import { Collapsible, Accordion } from "@logicplanes/kaeso-ui";`
|
|
814
845
|
|
|
@@ -818,6 +849,11 @@ Disclosure rows with a chevron that turns in 180ms and a measured height animati
|
|
|
818
849
|
|---|---|
|
|
819
850
|
| Enter Space | Opens and closes |
|
|
820
851
|
|
|
852
|
+
### Accessibility
|
|
853
|
+
|
|
854
|
+
- The title is a button with aria-expanded; its content follows it in the reading order.
|
|
855
|
+
- The same row recipe as the sidebar's groups: a pill that fills on hover, a focus ring inside it, 44px tall with a coarse pointer.
|
|
856
|
+
|
|
821
857
|
### Examples
|
|
822
858
|
|
|
823
859
|
#### Collapsible
|
|
@@ -914,6 +950,7 @@ A search field over a long list that stays fast with thousands of rows, grouped
|
|
|
914
950
|
|
|
915
951
|
### Accessibility
|
|
916
952
|
|
|
953
|
+
- After typing pauses, a screen reader hears how many rows match, or that none do.
|
|
917
954
|
- The search field is a combobox that points at the active row; the list is a listbox with one group per caption.
|
|
918
955
|
- Each row says its position in the whole list, so a screen reader counts every row, not just those drawn.
|
|
919
956
|
|
|
@@ -993,11 +1030,14 @@ function Thousands() {
|
|
|
993
1030
|
| Up Down | Moves |
|
|
994
1031
|
| Enter | Opens the item or its page |
|
|
995
1032
|
| Backspace | Goes back a page when the search is empty |
|
|
996
|
-
| Escape | Closes |
|
|
1033
|
+
| Escape | Closes; on a nested page, clears the search, then goes back a page |
|
|
997
1034
|
|
|
998
1035
|
### Accessibility
|
|
999
1036
|
|
|
1000
1037
|
- The input is a combobox controlling the results listbox; the active result is announced.
|
|
1038
|
+
- A result is named by its label, with its hint and shortcut after a pause.
|
|
1039
|
+
- On a nested page, the chip before the search goes back a page.
|
|
1040
|
+
- After typing pauses, a screen reader hears how many results match.
|
|
1001
1041
|
|
|
1002
1042
|
### Examples
|
|
1003
1043
|
|
|
@@ -1032,7 +1072,8 @@ Models side by side: one to four equal columns, each with a header, a thread tha
|
|
|
1032
1072
|
### Accessibility
|
|
1033
1073
|
|
|
1034
1074
|
- The grid is a named group; each column is a region named after its model, and its thread a region of its own.
|
|
1035
|
-
- On a phone, Previous column and Next column move between columns, and “2 of 3” is announced.
|
|
1075
|
+
- On a phone, or when the columns don't fit, Previous column and Next column move between columns, and “Claude Sonnet 4.5, 2 of 3” is announced.
|
|
1076
|
+
- Adding a column moves the focus to its header; removing one moves it to the column that takes its place.
|
|
1036
1077
|
- A thread stays at its end while a response grows, unless the person scrolled up to read.
|
|
1037
1078
|
|
|
1038
1079
|
### Examples
|
|
@@ -1073,6 +1114,8 @@ The prompt box: grows with what is written, then scrolls; Send, which becomes St
|
|
|
1073
1114
|
- Enter never sends while an input method is composing (Chinese, Japanese, Korean): the Enter that picks a candidate stays the input method's.
|
|
1074
1115
|
- On a touch screen Enter adds a line and the Send button sends, as in the messaging apps there; elsewhere the on-screen keyboard's Enter key reads Send (enterkeyhint).
|
|
1075
1116
|
- Send and Stop are one button that keeps its place and width, so the focus stays on it when a response starts or ends.
|
|
1117
|
+
- While a response arrives, the text box's description says to stop it to send the next prompt.
|
|
1118
|
+
- A click anywhere in the box, the button row included, puts the cursor in the text box.
|
|
1076
1119
|
|
|
1077
1120
|
### Examples
|
|
1078
1121
|
|
|
@@ -1130,11 +1173,13 @@ The same menu on right-click and the context-menu key.
|
|
|
1130
1173
|
|
|
1131
1174
|
| Key | Action |
|
|
1132
1175
|
|---|---|
|
|
1133
|
-
| Shift F10 | Opens the menu for the focused
|
|
1176
|
+
| Shift F10 | Opens the menu for the focused row |
|
|
1177
|
+
| Escape | Closes and returns focus to the row |
|
|
1134
1178
|
|
|
1135
1179
|
### Accessibility
|
|
1136
1180
|
|
|
1137
1181
|
- Every action in a context menu must also be reachable another way.
|
|
1182
|
+
- An area with nothing focusable in it becomes a focus stop, so the keyboard can open its menu.
|
|
1138
1183
|
|
|
1139
1184
|
### Examples
|
|
1140
1185
|
|
|
@@ -1142,9 +1187,7 @@ The same menu on right-click and the context-menu key.
|
|
|
1142
1187
|
|
|
1143
1188
|
```tsx
|
|
1144
1189
|
<ContextMenu>
|
|
1145
|
-
<ContextMenu.Trigger className=
|
|
1146
|
-
Right-click this request
|
|
1147
|
-
</ContextMenu.Trigger>
|
|
1190
|
+
<ContextMenu.Trigger className={ROW}>Right-click this request</ContextMenu.Trigger>
|
|
1148
1191
|
<ContextMenu.Content>
|
|
1149
1192
|
<ContextMenu.Item icon={icons.openExternal}>Open in a sheet</ContextMenu.Item>
|
|
1150
1193
|
<ContextMenu.Item icon={icons.copy}>Copy request id</ContextMenu.Item>
|
|
@@ -1196,18 +1239,24 @@ The console's table: a 36px header, 40px rows without lines, numbers right, sort
|
|
|
1196
1239
|
|
|
1197
1240
|
| Key | Action |
|
|
1198
1241
|
|---|---|
|
|
1199
|
-
| Tab | Moves into the table, to the row last in focus, and out again |
|
|
1200
|
-
| Up Down | Move between rows |
|
|
1201
|
-
|
|
|
1242
|
+
| Tab | Moves into the table, to the row or header last in focus, and out again: the table is one tab stop |
|
|
1243
|
+
| Up Down | Move between rows; Up from the first row reaches the header |
|
|
1244
|
+
| Left Right | Move between the header's sort buttons; on a row, Right reaches the row's controls and Left comes back |
|
|
1245
|
+
| shift Left Right | Resize the column, on its header |
|
|
1246
|
+
| Home End | First and last row, or first and last header |
|
|
1202
1247
|
| Page Up Page Down | A screen of rows up or down |
|
|
1203
1248
|
| Enter | Opens the row |
|
|
1204
|
-
| Space | Selects the row, in a selectable table |
|
|
1205
|
-
|
|
|
1206
|
-
|
|
|
1249
|
+
| Space | Selects the row, in a selectable table (also x) |
|
|
1250
|
+
| shift Up Down | Extends the selection |
|
|
1251
|
+
| mod A | Selects every row |
|
|
1252
|
+
| Escape | Returns from a row's control to its row; on a row, clears the selection |
|
|
1253
|
+
| shift F10 | Opens the row menu, or the column's width menu on its header |
|
|
1207
1254
|
|
|
1208
1255
|
### Accessibility
|
|
1209
1256
|
|
|
1210
|
-
-
|
|
1257
|
+
- An ARIA table whose rows are one tab stop, moved through with the arrow keys; sorted columns carry aria-sort, the open row aria-current.
|
|
1258
|
+
- One tab stop: checkboxes, row controls and resize handles stay out of the tab order and are reached with the arrow keys.
|
|
1259
|
+
- A column's width changes by dragging its handle, with Shift and the arrow keys on its header, or from the header's context menu (Widen, Narrow, Reset width), so no drag is required.
|
|
1211
1260
|
- Columns declare a priority; low-priority columns hide first when space is short. A growing column then shrinks to its readable minimum (minWidth, 136px by default) and truncates. On a screen narrower still, the other priority 1 columns give way from the row's end backwards, keeping its last column (the actions) and the selection boxes; only a row with nothing left to give way scrolls sideways, its last column pinned at the end.
|
|
1212
1261
|
- Over 100 rows render virtually; the row count is in aria-rowcount and each row's place in aria-rowindex.
|
|
1213
1262
|
|
|
@@ -1359,16 +1408,28 @@ The destructive flow: the object and the consequence, typed confirmation, a dang
|
|
|
1359
1408
|
|
|
1360
1409
|
### Examples
|
|
1361
1410
|
|
|
1362
|
-
####
|
|
1411
|
+
#### Delete a project
|
|
1363
1412
|
|
|
1364
1413
|
```tsx
|
|
1365
1414
|
<DeleteResource
|
|
1366
1415
|
kind="project"
|
|
1367
|
-
verb="Archive"
|
|
1368
1416
|
name="Checkout assistant"
|
|
1369
|
-
consequence="Its keys stop working
|
|
1417
|
+
consequence="Its keys stop working at once, and its request logs are deleted. This can't be undone."
|
|
1418
|
+
onConfirm={() => new Promise((r) => setTimeout(r, 900))}
|
|
1419
|
+
trigger={<Button variant="danger-secondary">Delete project</Button>}
|
|
1420
|
+
/>
|
|
1421
|
+
```
|
|
1422
|
+
|
|
1423
|
+
#### Delete a key
|
|
1424
|
+
|
|
1425
|
+
```tsx
|
|
1426
|
+
<DeleteResource
|
|
1427
|
+
kind="key"
|
|
1428
|
+
name="checkout-web"
|
|
1429
|
+
confirm="simple"
|
|
1430
|
+
consequence="Applications using it stop authenticating with the gateway."
|
|
1370
1431
|
onConfirm={() => new Promise((r) => setTimeout(r, 900))}
|
|
1371
|
-
trigger={<Button variant="danger-secondary">
|
|
1432
|
+
trigger={<Button variant="danger-secondary">Delete key</Button>}
|
|
1372
1433
|
/>
|
|
1373
1434
|
```
|
|
1374
1435
|
|
|
@@ -1635,19 +1696,14 @@ function Changing() {
|
|
|
1635
1696
|
#### Sizes
|
|
1636
1697
|
|
|
1637
1698
|
```tsx
|
|
1638
|
-
<div className="flex gap-12">
|
|
1639
|
-
{
|
|
1699
|
+
<div className="flex flex-wrap gap-12">
|
|
1700
|
+
{sizes.map((s) => (
|
|
1640
1701
|
<Dialog
|
|
1641
|
-
key={s}
|
|
1642
|
-
size={s}
|
|
1643
|
-
trigger={<Button>{s}</Button>}
|
|
1644
|
-
title={
|
|
1702
|
+
key={s.size}
|
|
1703
|
+
size={s.size}
|
|
1704
|
+
trigger={<Button>{s.open}</Button>}
|
|
1705
|
+
title={`${s.width} pixels wide`}
|
|
1645
1706
|
description="Sizes are 440, 560 and 720 pixels."
|
|
1646
|
-
footer={
|
|
1647
|
-
<Dialog.Close>
|
|
1648
|
-
<Button>Close</Button>
|
|
1649
|
-
</Dialog.Close>
|
|
1650
|
-
}
|
|
1651
1707
|
/>
|
|
1652
1708
|
))}
|
|
1653
1709
|
</div>
|
|
@@ -1686,6 +1742,35 @@ function CreateKey() {
|
|
|
1686
1742
|
}
|
|
1687
1743
|
```
|
|
1688
1744
|
|
|
1745
|
+
## DiffView
|
|
1746
|
+
|
|
1747
|
+
Two versions in one column: removed lines on red, added on green, changed words marked, unchanged runs folded.
|
|
1748
|
+
|
|
1749
|
+
`import { DiffView } from "@logicplanes/kaeso-ui";`
|
|
1750
|
+
|
|
1751
|
+
### Accessibility
|
|
1752
|
+
|
|
1753
|
+
- Each changed line starts with “Added” or “Removed” for screen readers; the + and − marks and the colour are only for sight.
|
|
1754
|
+
- The title bar says how many lines were added and removed, and each folded run is a button that names how many lines it shows.
|
|
1755
|
+
|
|
1756
|
+
### Examples
|
|
1757
|
+
|
|
1758
|
+
#### An audit event
|
|
1759
|
+
|
|
1760
|
+
```tsx
|
|
1761
|
+
<div className="w-560 max-w-full">
|
|
1762
|
+
<DiffView title="Before → after" lang="json" before={json(credential)} after={json(moved)} wrap />
|
|
1763
|
+
</div>
|
|
1764
|
+
```
|
|
1765
|
+
|
|
1766
|
+
#### With line numbers
|
|
1767
|
+
|
|
1768
|
+
```tsx
|
|
1769
|
+
<div className="w-560 max-w-full">
|
|
1770
|
+
<DiffView title="limit.json" lang="json" before={json(limit)} after={json(raised)} lineNumbers />
|
|
1771
|
+
</div>
|
|
1772
|
+
```
|
|
1773
|
+
|
|
1689
1774
|
## DisplayOptions
|
|
1690
1775
|
|
|
1691
1776
|
View, grouping and ordering, toggles, and the properties to show, behind one circle at the end of a toolbar.
|
|
@@ -1762,7 +1847,7 @@ What someone can do at a glance: a row per group, in words, under the roles it c
|
|
|
1762
1847
|
|
|
1763
1848
|
## Empty
|
|
1764
1849
|
|
|
1765
|
-
What is absent and the next step:
|
|
1850
|
+
What is absent and the next step: a title, one sentence, one action.
|
|
1766
1851
|
|
|
1767
1852
|
`import { Empty } from "@logicplanes/kaeso-ui";`
|
|
1768
1853
|
|
|
@@ -1773,13 +1858,12 @@ What is absent and the next step: an icon circle, a title, one sentence, one or
|
|
|
1773
1858
|
```tsx
|
|
1774
1859
|
<Empty
|
|
1775
1860
|
title="No keys yet"
|
|
1776
|
-
description=
|
|
1777
|
-
actions={
|
|
1861
|
+
description={
|
|
1778
1862
|
<>
|
|
1779
|
-
<
|
|
1780
|
-
<Button>Read about keys</Button>
|
|
1863
|
+
Create a key so an application can call the gateway. <Link href="https://docs.kaeso.app">Read about keys</Link>
|
|
1781
1864
|
</>
|
|
1782
1865
|
}
|
|
1866
|
+
actions={<Button variant="primary">Create key</Button>}
|
|
1783
1867
|
/>
|
|
1784
1868
|
```
|
|
1785
1869
|
|
|
@@ -1800,6 +1884,8 @@ A label, a control and its help, wired together; an error shows under the contro
|
|
|
1800
1884
|
- The label points at the control; help is in aria-describedby.
|
|
1801
1885
|
- invalid sets aria-invalid and the danger ring; error shows what is wrong under the control and is its description for a screen reader.
|
|
1802
1886
|
- Optional fields are marked, not required ones.
|
|
1887
|
+
- Fieldset's legend names the group, so each field inside is heard with it; its description describes the group.
|
|
1888
|
+
- After a failed submit, move focus to the first invalid field: its error is then read with it.
|
|
1803
1889
|
|
|
1804
1890
|
### Examples
|
|
1805
1891
|
|
|
@@ -1830,8 +1916,8 @@ A label, a control and its help, wired together; an error shows under the contro
|
|
|
1830
1916
|
<Field label="Name" layout="horizontal" description="Shown in logs.">
|
|
1831
1917
|
<Input defaultValue="checkout-web" />
|
|
1832
1918
|
</Field>
|
|
1833
|
-
<Field label="Monthly budget" layout="horizontal"
|
|
1834
|
-
<Input defaultValue="-20" suffix="USD" />
|
|
1919
|
+
<Field label="Monthly budget" layout="horizontal" error="Enter an amount of 0 or more.">
|
|
1920
|
+
<Input defaultValue="-20" suffix="USD" align="end" />
|
|
1835
1921
|
</Field>
|
|
1836
1922
|
</div>
|
|
1837
1923
|
```
|
|
@@ -2011,6 +2097,33 @@ A node-and-connector diagram for the route: app → Kaeso → provider and model
|
|
|
2011
2097
|
<Flow columns={columns} edges={edges} aria-label="Requests go from your app through the Kaeso gateway to gpt-5 or claude-sonnet-4-5" />
|
|
2012
2098
|
```
|
|
2013
2099
|
|
|
2100
|
+
#### A route that changes
|
|
2101
|
+
|
|
2102
|
+
With animated, a dot runs once along each connector when the route changes; never on load and never with reduced motion.
|
|
2103
|
+
|
|
2104
|
+
```tsx
|
|
2105
|
+
function Changes() {
|
|
2106
|
+
const [fallback, setFallback] = useState(false);
|
|
2107
|
+
const target = fallback ? "anthropic" : "openai";
|
|
2108
|
+
return (
|
|
2109
|
+
<div className="flex flex-col items-start gap-16">
|
|
2110
|
+
<Flow
|
|
2111
|
+
animated
|
|
2112
|
+
columns={columns}
|
|
2113
|
+
edges={[
|
|
2114
|
+
["app", "kaeso"],
|
|
2115
|
+
["kaeso", target],
|
|
2116
|
+
]}
|
|
2117
|
+
aria-label={`Requests go from your app through the Kaeso gateway to ${fallback ? "claude-sonnet-4-5" : "gpt-5"}`}
|
|
2118
|
+
/>
|
|
2119
|
+
<Button variant="secondary" size="sm" onClick={() => setFallback(!fallback)}>
|
|
2120
|
+
{fallback ? "Route to gpt-5" : "Route to claude-sonnet-4-5"}
|
|
2121
|
+
</Button>
|
|
2122
|
+
</div>
|
|
2123
|
+
);
|
|
2124
|
+
}
|
|
2125
|
+
```
|
|
2126
|
+
|
|
2014
2127
|
## Gauge
|
|
2015
2128
|
|
|
2016
2129
|
A semicircle for “budget used”; thresholds as ticks.
|
|
@@ -2142,11 +2255,11 @@ Hugeicons free, Stroke Rounded, in currentColor. One icon per Kaeso concept.
|
|
|
2142
2255
|
#### Vocabulary
|
|
2143
2256
|
|
|
2144
2257
|
```tsx
|
|
2145
|
-
<div className="grid w-full grid-cols-2 gap-x-
|
|
2258
|
+
<div className="grid w-full grid-cols-2 gap-x-8 gap-y-4 sm:grid-cols-4 sm:gap-x-16">
|
|
2146
2259
|
{(Object.keys(icons) as IconName[]).map((n) => (
|
|
2147
|
-
<div key={n} className="flex h-32 items-center gap-8 text-small text-fg-secondary">
|
|
2260
|
+
<div key={n} className="flex min-h-32 items-center gap-8 text-small text-fg-secondary">
|
|
2148
2261
|
<Icon icon={icons[n]} size="sm" className="text-fg" />
|
|
2149
|
-
<span className="mono
|
|
2262
|
+
<span className="mono min-w-0 text-caption wrap-anywhere sm:text-small">{n}</span>
|
|
2150
2263
|
</div>
|
|
2151
2264
|
))}
|
|
2152
2265
|
</div>
|
|
@@ -2169,7 +2282,7 @@ A circle with an icon, a required name, and a tooltip that says it.
|
|
|
2169
2282
|
|
|
2170
2283
|
- aria-label is required by the types; it is also the tooltip, so sighted and screen-reader users get the same name.
|
|
2171
2284
|
- Shortcuts appear in the tooltip as key caps.
|
|
2172
|
-
- Disabled icon buttons have no tooltip unless they carry a disabledReason.
|
|
2285
|
+
- Disabled icon buttons have no tooltip unless they carry a disabledReason, which the tooltip shows and screen readers read as the description.
|
|
2173
2286
|
|
|
2174
2287
|
### Examples
|
|
2175
2288
|
|
|
@@ -2239,12 +2352,12 @@ A pill text field with the secondary material and a soft focus halo.
|
|
|
2239
2352
|
|
|
2240
2353
|
#### With label and help
|
|
2241
2354
|
|
|
2242
|
-
An invalid value gets the danger ring
|
|
2355
|
+
An invalid value gets the danger ring and a message under the field that says what to enter.
|
|
2243
2356
|
|
|
2244
2357
|
```tsx
|
|
2245
2358
|
<div className="flex w-360 flex-col gap-24">
|
|
2246
2359
|
<Input label="Key name" description="Shown in logs and the audit log." placeholder="checkout-web" />
|
|
2247
|
-
<Input label="Monthly budget" defaultValue="-20" suffix="USD"
|
|
2360
|
+
<Input label="Monthly budget" defaultValue="-20" suffix="USD" align="end" error="Enter an amount of 0 or more." />
|
|
2248
2361
|
</div>
|
|
2249
2362
|
```
|
|
2250
2363
|
|
|
@@ -2286,6 +2399,7 @@ Addons inside the pill: text, icons, a ghost circle or a key cap, sharing one fo
|
|
|
2286
2399
|
### Accessibility
|
|
2287
2400
|
|
|
2288
2401
|
- Addons are text the input's label should not repeat; buttons inside need their own names.
|
|
2402
|
+
- invalid on the group also marks the input aria-invalid, and disabled turns off its input and buttons.
|
|
2289
2403
|
|
|
2290
2404
|
### Examples
|
|
2291
2405
|
|
|
@@ -2294,12 +2408,12 @@ Addons inside the pill: text, icons, a ghost circle or a key cap, sharing one fo
|
|
|
2294
2408
|
```tsx
|
|
2295
2409
|
<div className="flex w-400 flex-col gap-12">
|
|
2296
2410
|
<InputGroup>
|
|
2297
|
-
<InputGroup.Addon>https://</InputGroup.Addon>
|
|
2411
|
+
<InputGroup.Addon data-join>https://</InputGroup.Addon>
|
|
2298
2412
|
<InputGroup.Input aria-label="Host" placeholder="kaeso.example.com" />
|
|
2299
2413
|
<InputGroup.Addon>/v1</InputGroup.Addon>
|
|
2300
2414
|
</InputGroup>
|
|
2301
2415
|
<InputGroup trailingButton>
|
|
2302
|
-
<InputGroup.Input aria-label="Token" defaultValue="sk-kso-AbC123…wxyz"
|
|
2416
|
+
<InputGroup.Input aria-label="Token" defaultValue="sk-kso-AbC123…wxyz" data-mono />
|
|
2303
2417
|
<InputGroup.Button icon={icons.copy} aria-label="Copy" />
|
|
2304
2418
|
</InputGroup>
|
|
2305
2419
|
<InputGroup leadingIcon>
|
|
@@ -2315,6 +2429,20 @@ A folding JSON tree: copy any path, highlight a search.
|
|
|
2315
2429
|
|
|
2316
2430
|
`import { JsonView } from "@logicplanes/kaeso-ui";`
|
|
2317
2431
|
|
|
2432
|
+
### Keyboard
|
|
2433
|
+
|
|
2434
|
+
| Key | Action |
|
|
2435
|
+
|---|---|
|
|
2436
|
+
| Tab | Moves into the tree, then out of it: the tree is one tab stop |
|
|
2437
|
+
| ↑ ↓ | Moves between rows |
|
|
2438
|
+
| → ← | Opens and closes an object or array, or moves into it and back to its parent |
|
|
2439
|
+
| Enter Space | Opens or closes an object or array |
|
|
2440
|
+
| ⌘C Ctrl C | Copies the row's path |
|
|
2441
|
+
|
|
2442
|
+
### Accessibility
|
|
2443
|
+
|
|
2444
|
+
- The tree is a tree of rows with their level and open state; a copied path is announced.
|
|
2445
|
+
|
|
2318
2446
|
### Examples
|
|
2319
2447
|
|
|
2320
2448
|
#### Request body
|
|
@@ -2339,7 +2467,8 @@ Key caps and shortcuts: ⌘ ⌥ ⇧ ⌃ on macOS, words elsewhere; sequences lik
|
|
|
2339
2467
|
|
|
2340
2468
|
### Accessibility
|
|
2341
2469
|
|
|
2342
|
-
-
|
|
2470
|
+
- A symbol such as ⌘ is hidden from screen readers and its name (“Command”) is read instead; letters need no extra name.
|
|
2471
|
+
- Inside a button, the shortcut stays out of the button's name, which is its visible label.
|
|
2343
2472
|
|
|
2344
2473
|
### Examples
|
|
2345
2474
|
|
|
@@ -2490,6 +2619,7 @@ The name of a field: 14/500, with an optional “Optional”.
|
|
|
2490
2619
|
### Accessibility
|
|
2491
2620
|
|
|
2492
2621
|
- Connect it to its control with htmlFor; Field does this for you.
|
|
2622
|
+
- Beside a disabled control, pass data-disabled so the label dims with it.
|
|
2493
2623
|
|
|
2494
2624
|
### Examples
|
|
2495
2625
|
|
|
@@ -2518,7 +2648,7 @@ A second layer slides over the first (add model → review values); Back returns
|
|
|
2518
2648
|
|
|
2519
2649
|
| Key | Action |
|
|
2520
2650
|
|---|---|
|
|
2521
|
-
| Escape | Closes and returns focus to the trigger |
|
|
2651
|
+
| Escape | Closes the dialog from any layer and returns focus to the trigger |
|
|
2522
2652
|
| Tab | Moves within the layer shown |
|
|
2523
2653
|
| mod Enter | Calls onSubmit, on every layer |
|
|
2524
2654
|
|
|
@@ -2636,7 +2766,7 @@ function Wizard() {
|
|
|
2636
2766
|
|
|
2637
2767
|
## Link
|
|
2638
2768
|
|
|
2639
|
-
Links look like links: text color with a
|
|
2769
|
+
Links look like links: text color with a grey underline that takes the text color on hover.
|
|
2640
2770
|
|
|
2641
2771
|
`import { Link } from "@logicplanes/kaeso-ui";`
|
|
2642
2772
|
|
|
@@ -2650,6 +2780,7 @@ Links look like links: text color with a quiet underline that turns solid on hov
|
|
|
2650
2780
|
|
|
2651
2781
|
- External links open in a new tab, add rel="noopener noreferrer" and say so to screen readers.
|
|
2652
2782
|
- Router links come from LinkProvider.
|
|
2783
|
+
- The underline is the cue that text is a link, so it stays visible at rest; color alone never marks a link.
|
|
2653
2784
|
|
|
2654
2785
|
### Examples
|
|
2655
2786
|
|
|
@@ -2954,6 +3085,7 @@ A rounded dropdown: 16px radius, 34px rows, icons that wake on highlight.
|
|
|
2954
3085
|
- role=menu with menuitem, menuitemcheckbox and menuitemradio.
|
|
2955
3086
|
- Groups of more than seven items get a caption or a separator.
|
|
2956
3087
|
- Danger items name the action: “Delete key”.
|
|
3088
|
+
- An item's shortcut and hint describe it; its name is the label alone.
|
|
2957
3089
|
|
|
2958
3090
|
### Examples
|
|
2959
3091
|
|
|
@@ -2970,9 +3102,7 @@ A rounded dropdown: 16px radius, 34px rows, icons that wake on highlight.
|
|
|
2970
3102
|
<Menu.Item icon={icons.limit}>Edit limits</Menu.Item>
|
|
2971
3103
|
<Menu.Separator />
|
|
2972
3104
|
<Menu.Item icon={icons.hide}>Disable</Menu.Item>
|
|
2973
|
-
<Menu.Item
|
|
2974
|
-
Archive key
|
|
2975
|
-
</Menu.Item>
|
|
3105
|
+
<Menu.Item variant="danger">Archive key</Menu.Item>
|
|
2976
3106
|
</Menu.Content>
|
|
2977
3107
|
</Menu>
|
|
2978
3108
|
```
|
|
@@ -3174,7 +3304,7 @@ function Catalogue() {
|
|
|
3174
3304
|
|
|
3175
3305
|
## NumberInput
|
|
3176
3306
|
|
|
3177
|
-
Exact numbers:
|
|
3307
|
+
Exact numbers: end-aligned tabular digits, a unit, quiet steppers, a decimal string value.
|
|
3178
3308
|
|
|
3179
3309
|
`import { NumberInput } from "@logicplanes/kaeso-ui";`
|
|
3180
3310
|
|
|
@@ -3184,11 +3314,14 @@ Exact numbers: right-aligned tabular digits, a unit, steppers on hover, a decima
|
|
|
3184
3314
|
|---|---|
|
|
3185
3315
|
| Up | Increases by the step |
|
|
3186
3316
|
| Down | Decreases by the step |
|
|
3317
|
+
| Tab | Moves past the field; the steppers are not tab stops, since the arrows do the same |
|
|
3187
3318
|
|
|
3188
3319
|
### Accessibility
|
|
3189
3320
|
|
|
3190
3321
|
- The value is a decimal string, so money never passes through a float.
|
|
3191
3322
|
- Thousands separators appear on blur and are removed while editing.
|
|
3323
|
+
- The input is a spin button: screen readers hear its value with the unit, its limits, and that the arrow keys change it.
|
|
3324
|
+
- A stepper turns off at the minimum or maximum.
|
|
3192
3325
|
|
|
3193
3326
|
### Examples
|
|
3194
3327
|
|
|
@@ -3220,10 +3353,21 @@ Six cells for a TOTP code over one accessible input: paste fills, Backspace move
|
|
|
3220
3353
|
|
|
3221
3354
|
`import { OTPInput } from "@logicplanes/kaeso-ui";`
|
|
3222
3355
|
|
|
3356
|
+
### Keyboard
|
|
3357
|
+
|
|
3358
|
+
| Key | Action |
|
|
3359
|
+
|---|---|
|
|
3360
|
+
| 0–9 | Types a digit into the focused cell and moves to the next |
|
|
3361
|
+
| Backspace | Clears the focused digit |
|
|
3362
|
+
| ← → | Moves between cells |
|
|
3363
|
+
| Home, End | Moves to the first cell, or the next empty one |
|
|
3364
|
+
|
|
3223
3365
|
### Accessibility
|
|
3224
3366
|
|
|
3225
3367
|
- One real input with autocomplete="one-time-code", so the browser can offer the code.
|
|
3226
3368
|
- Cells are decorative; the input carries the label.
|
|
3369
|
+
- A pasted code fills every cell even when it is shown with spaces or dashes, such as 418 207.
|
|
3370
|
+
- Clicking a cell puts the caret there, so one wrong digit can be fixed without retyping the code.
|
|
3227
3371
|
|
|
3228
3372
|
### Examples
|
|
3229
3373
|
|
|
@@ -3384,7 +3528,7 @@ A request's parameters: system instructions, temperature, top P, max output toke
|
|
|
3384
3528
|
|
|
3385
3529
|
### Accessibility
|
|
3386
3530
|
|
|
3387
|
-
- Every control has a visible label that names it; the popover holds a form
|
|
3531
|
+
- Every control has a visible label that names it; the popover holds a form, keeps the focus inside until it closes and has a Close button; Escape closes it too.
|
|
3388
3532
|
|
|
3389
3533
|
### Examples
|
|
3390
3534
|
|
|
@@ -3444,6 +3588,8 @@ A floating panel next to its trigger; HoverCard previews on hover, never as the
|
|
|
3444
3588
|
### Accessibility
|
|
3445
3589
|
|
|
3446
3590
|
- Popovers with a form trap focus (trapFocus); others do not.
|
|
3591
|
+
- The title names the popover's dialog; without a title, give the content an aria-label.
|
|
3592
|
+
- A popover and a hover card are never wider than the screen.
|
|
3447
3593
|
|
|
3448
3594
|
### Examples
|
|
3449
3595
|
|
|
@@ -3475,9 +3621,9 @@ A floating panel next to its trigger; HoverCard previews on hover, never as the
|
|
|
3475
3621
|
```tsx
|
|
3476
3622
|
<HoverCard>
|
|
3477
3623
|
<HoverCard.Trigger>
|
|
3478
|
-
<
|
|
3624
|
+
<Link href="#models/claude-sonnet-4-5" className="mono text-small">
|
|
3479
3625
|
claude-sonnet-4-5
|
|
3480
|
-
</
|
|
3626
|
+
</Link>
|
|
3481
3627
|
</HoverCard.Trigger>
|
|
3482
3628
|
<HoverCard.Content>
|
|
3483
3629
|
<div className="flex flex-col gap-12">
|
|
@@ -3496,13 +3642,14 @@ A floating panel next to its trigger; HoverCard previews on hover, never as the
|
|
|
3496
3642
|
|
|
3497
3643
|
## PromptSuggestions
|
|
3498
3644
|
|
|
3499
|
-
Example prompts before a thread starts: up to three quiet
|
|
3645
|
+
Example prompts before a thread starts: up to three quiet rows that take a fill on hover and go once a prompt is sent.
|
|
3500
3646
|
|
|
3501
3647
|
`import { PromptSuggestions } from "@logicplanes/kaeso-ui/playground";`
|
|
3502
3648
|
|
|
3503
3649
|
### Accessibility
|
|
3504
3650
|
|
|
3505
3651
|
- A list named “Example prompts”; each suggestion is a button that reads its prompt.
|
|
3652
|
+
- Choosing one puts it in the composer and moves the focus there.
|
|
3506
3653
|
|
|
3507
3654
|
### Examples
|
|
3508
3655
|
|
|
@@ -3511,10 +3658,19 @@ Example prompts before a thread starts: up to three quiet lines that take a fill
|
|
|
3511
3658
|
```tsx
|
|
3512
3659
|
function Basic() {
|
|
3513
3660
|
const [draft, setDraft] = useState("");
|
|
3661
|
+
const composer = useRef<HTMLTextAreaElement | null>(null);
|
|
3514
3662
|
return (
|
|
3515
3663
|
<div className="flex w-full max-w-640 flex-col gap-12">
|
|
3516
|
-
{draft === "" &&
|
|
3517
|
-
|
|
3664
|
+
{draft === "" && (
|
|
3665
|
+
<PromptSuggestions
|
|
3666
|
+
suggestions={suggestions}
|
|
3667
|
+
onSelect={(p) => {
|
|
3668
|
+
setDraft(p);
|
|
3669
|
+
composer.current?.focus();
|
|
3670
|
+
}}
|
|
3671
|
+
/>
|
|
3672
|
+
)}
|
|
3673
|
+
<Composer ref={composer} value={draft} onValueChange={setDraft} aria-label="Message all models" placeholder="Message 3 models" />
|
|
3518
3674
|
</div>
|
|
3519
3675
|
);
|
|
3520
3676
|
}
|
|
@@ -3745,7 +3901,7 @@ A response's numbers on one line: time to first token, total time, tokens in and
|
|
|
3745
3901
|
|
|
3746
3902
|
## ResponseView
|
|
3747
3903
|
|
|
3748
|
-
A model's response as it arrives:
|
|
3904
|
+
A model's response as it arrives: a quiet caret until the first token, Markdown as it streams, reasoning in a Thinking disclosure, and calm stopped, cut-off and failed states.
|
|
3749
3905
|
|
|
3750
3906
|
`import { ResponseView, UserMessage, Thread } from "@logicplanes/kaeso-ui/playground";`
|
|
3751
3907
|
|
|
@@ -3760,6 +3916,7 @@ A model's response as it arrives: Markdown with a quiet caret, reasoning in a Th
|
|
|
3760
3916
|
- Each response is an article named by aria-label (“GPT-5 response” in a comparison) and is aria-busy while it streams, so its words aren't read out one by one.
|
|
3761
3917
|
- Thinking is a disclosure button; closed, its row shows the latest line of the summary, hidden from screen readers, which read the summary when opened.
|
|
3762
3918
|
- A failure is an alert in place of the response: “No response”, then the error.
|
|
3919
|
+
- When a response finishes, stops or is cut off, a status message says so once, by name: “GPT-5 response finished”.
|
|
3763
3920
|
|
|
3764
3921
|
### Examples
|
|
3765
3922
|
|
|
@@ -3989,13 +4146,14 @@ Requests from keys to models to providers; hover a node to follow its path.
|
|
|
3989
4146
|
|
|
3990
4147
|
## ScrollArea
|
|
3991
4148
|
|
|
3992
|
-
A scroll container with thin scrollbars that appear on hover.
|
|
4149
|
+
A scroll container with thin scrollbars that appear on hover, fading at every edge with more to scroll to.
|
|
3993
4150
|
|
|
3994
4151
|
`import { ScrollArea } from "@logicplanes/kaeso-ui";`
|
|
3995
4152
|
|
|
3996
4153
|
### Accessibility
|
|
3997
4154
|
|
|
3998
4155
|
- Give a focusable scroll region an aria-label so keyboard users know what they scroll.
|
|
4156
|
+
- The focus ring is drawn above the fade, so all four sides show while the content scrolls.
|
|
3999
4157
|
|
|
4000
4158
|
### Examples
|
|
4001
4159
|
|
|
@@ -4029,6 +4187,7 @@ Search with a leading icon, a clear circle when filled, and a shortcut hint wher
|
|
|
4029
4187
|
|
|
4030
4188
|
- The clear button is named “Clear search”.
|
|
4031
4189
|
- type=search lets assistive technology announce it as a search field.
|
|
4190
|
+
- A shortcut hint hides while the field has focus, where it no longer applies; its room stays, so nothing moves.
|
|
4032
4191
|
|
|
4033
4192
|
### Examples
|
|
4034
4193
|
|
|
@@ -4036,7 +4195,7 @@ Search with a leading icon, a clear circle when filled, and a shortcut hint wher
|
|
|
4036
4195
|
|
|
4037
4196
|
```tsx
|
|
4038
4197
|
<div className="w-240">
|
|
4039
|
-
<SearchInput aria-label="Search logs" placeholder="
|
|
4198
|
+
<SearchInput aria-label="Search logs" placeholder="gpt-5, req_01…" shortcut={["mod", "k"]} />
|
|
4040
4199
|
</div>
|
|
4041
4200
|
```
|
|
4042
4201
|
|
|
@@ -4044,21 +4203,22 @@ Search with a leading icon, a clear circle when filled, and a shortcut hint wher
|
|
|
4044
4203
|
|
|
4045
4204
|
```tsx
|
|
4046
4205
|
<div className="w-240">
|
|
4047
|
-
<SearchInput size="md" aria-label="Search settings" placeholder="
|
|
4206
|
+
<SearchInput size="md" aria-label="Search settings" placeholder="Rate limit, budget" />
|
|
4048
4207
|
</div>
|
|
4049
4208
|
```
|
|
4050
4209
|
|
|
4051
4210
|
## SecretReveal
|
|
4052
4211
|
|
|
4053
|
-
The one-time
|
|
4212
|
+
The one-time key: calm, centered, certain. Copy it, store it, see how to use it.
|
|
4054
4213
|
|
|
4055
4214
|
`import { SecretReveal, EnvironmentSnippet } from "@logicplanes/kaeso-ui";`
|
|
4056
4215
|
|
|
4057
4216
|
### Accessibility
|
|
4058
4217
|
|
|
4059
|
-
- The
|
|
4060
|
-
- “Copy key” becomes “
|
|
4061
|
-
- The warning is text, not only color.
|
|
4218
|
+
- The key is a read-only text box named “Key for …”; a click selects all of it.
|
|
4219
|
+
- “Copy key” becomes “Key copied” without changing size.
|
|
4220
|
+
- The warning comes before the button, so it is read before the key is copied; it is text, not only color.
|
|
4221
|
+
- The snippets start with a .env line and read the key from the environment, so no code example hard-codes it.
|
|
4062
4222
|
|
|
4063
4223
|
### Examples
|
|
4064
4224
|
|
|
@@ -4279,8 +4439,9 @@ Secrets masked by default, an eye to reveal, mono when revealed, never autocompl
|
|
|
4279
4439
|
|
|
4280
4440
|
### Accessibility
|
|
4281
4441
|
|
|
4282
|
-
- The reveal circle is named Show or Hide.
|
|
4283
|
-
-
|
|
4442
|
+
- The reveal circle is named “Show key” or “Hide key” (“Show password” for passwords).
|
|
4443
|
+
- With Caps Lock on, a password field shows “Caps Lock” beside the reveal circle and announces it once; the field's own description stays.
|
|
4444
|
+
- A revealed key is set in mono at the same size as every other id.
|
|
4284
4445
|
|
|
4285
4446
|
### Examples
|
|
4286
4447
|
|
|
@@ -4346,7 +4507,7 @@ Settings rows in a rounded group, title and description left, the control right.
|
|
|
4346
4507
|
#### Preferences
|
|
4347
4508
|
|
|
4348
4509
|
```tsx
|
|
4349
|
-
<div className="w-
|
|
4510
|
+
<div className="w-560">
|
|
4350
4511
|
<SettingsSection title="General">
|
|
4351
4512
|
<SettingsGroup>
|
|
4352
4513
|
<SettingsRow
|
|
@@ -4408,7 +4569,7 @@ Settings rows in a rounded group, title and description left, the control right.
|
|
|
4408
4569
|
#### Navigation rows
|
|
4409
4570
|
|
|
4410
4571
|
```tsx
|
|
4411
|
-
<div className="w-
|
|
4572
|
+
<div className="w-560">
|
|
4412
4573
|
<SettingsGroup>
|
|
4413
4574
|
<SettingsRow icon={icons.members} title="Members" description="Who can use this organization." value="5 members" href="#" />
|
|
4414
4575
|
<SettingsRow icon={icons.providerKey} title="Provider keys" description="Credentials the gateway uses upstream." value="2" href="#" />
|
|
@@ -4461,6 +4622,7 @@ A panel from the edge that keeps the list behind it readable: the request inspec
|
|
|
4461
4622
|
|
|
4462
4623
|
- A dialog; the title names it, the subtitle carries the id.
|
|
4463
4624
|
- Apps make it URL-addressable so links can open it.
|
|
4625
|
+
- A sheet that isn't modal stays open when the page behind it is pressed, so the next row can fill it.
|
|
4464
4626
|
|
|
4465
4627
|
### Examples
|
|
4466
4628
|
|
|
@@ -4902,10 +5064,15 @@ A reference table of five or more columns puts 8px between them, so it fits the
|
|
|
4902
5064
|
|
|
4903
5065
|
## TableOfContents
|
|
4904
5066
|
|
|
4905
|
-
“On this page”: the heading in view in text color with a 2px ink bar.
|
|
5067
|
+
“On this page”: the heading in view in text color with a 2px ink bar on the rail.
|
|
4906
5068
|
|
|
4907
5069
|
`import { TableOfContents } from "@logicplanes/kaeso-ui";`
|
|
4908
5070
|
|
|
5071
|
+
### Accessibility
|
|
5072
|
+
|
|
5073
|
+
- A navigation landmark named by its title; the heading in view has aria-current=location.
|
|
5074
|
+
- Links are 32px tall, 44px with a coarse pointer; the rail and the bar sit on the start side, so they move to the right in right-to-left pages.
|
|
5075
|
+
|
|
4909
5076
|
### Examples
|
|
4910
5077
|
|
|
4911
5078
|
#### Basic
|
|
@@ -4924,12 +5091,14 @@ Underline tabs for detail pages and pill tabs for page headers.
|
|
|
4924
5091
|
|
|
4925
5092
|
| Key | Action |
|
|
4926
5093
|
|---|---|
|
|
4927
|
-
| Left Right | Moves between tabs |
|
|
4928
|
-
| Home End |
|
|
5094
|
+
| Left Right | Moves focus between tabs |
|
|
5095
|
+
| Home End | Moves focus to the first or last tab |
|
|
5096
|
+
| Enter Space | Opens the focused tab |
|
|
4929
5097
|
|
|
4930
5098
|
### Accessibility
|
|
4931
5099
|
|
|
4932
|
-
- role=tablist with tabs and panels wired by Base UI.
|
|
5100
|
+
- role=tablist with tabs and panels wired by Base UI; arrows move focus and Enter or Space opens the tab, so a slow panel never loads on the way past.
|
|
5101
|
+
- Focus rings sit inside the pill, so a scrolling tab list never cuts them; in forced colours the selected tab keeps a Highlight outline and the indicator a solid line.
|
|
4933
5102
|
|
|
4934
5103
|
### Examples
|
|
4935
5104
|
|
|
@@ -5018,7 +5187,7 @@ function Toggle() {
|
|
|
5018
5187
|
|
|
5019
5188
|
## TagInput
|
|
5020
5189
|
|
|
5021
|
-
Removable tags in a field: Enter, comma and paste split them; Backspace
|
|
5190
|
+
Removable tags in a field: Enter, comma and paste split them; Backspace selects the last, a second press removes it.
|
|
5022
5191
|
|
|
5023
5192
|
`import { TagInput } from "@logicplanes/kaeso-ui";`
|
|
5024
5193
|
|
|
@@ -5028,11 +5197,15 @@ Removable tags in a field: Enter, comma and paste split them; Backspace removes
|
|
|
5028
5197
|
|---|---|
|
|
5029
5198
|
| Enter | Adds the typed tag |
|
|
5030
5199
|
| , | Adds the typed tag |
|
|
5031
|
-
| Backspace |
|
|
5200
|
+
| Backspace | Selects the last tag from the start of the field; a second press removes it |
|
|
5201
|
+
| ← → | Moves the selection between tags from the start of the field |
|
|
5202
|
+
| Delete | Removes the selected tag |
|
|
5203
|
+
| Escape | Lets go of the selected tag |
|
|
5032
5204
|
|
|
5033
5205
|
### Accessibility
|
|
5034
5206
|
|
|
5035
|
-
- Each tag's remove circle is named “Remove
|
|
5207
|
+
- Each tag's remove circle is named “Remove …”; after it, focus goes back to the field.
|
|
5208
|
+
- Selecting and removing a tag is announced through a polite live region, so nothing goes silently.
|
|
5036
5209
|
- Invalid tags stay, marked with the danger ring; each says what is wrong in its tooltip, and the first problem shows under the field.
|
|
5037
5210
|
|
|
5038
5211
|
### Examples
|
|
@@ -5055,7 +5228,7 @@ Text in the type scale: one scale, used the same way everywhere.
|
|
|
5055
5228
|
|
|
5056
5229
|
- Text renders a span by default; pass as="p" for paragraphs.
|
|
5057
5230
|
- Truncated text gets a tooltip with the full string and becomes focusable so keyboard users can read it.
|
|
5058
|
-
- Tertiary
|
|
5231
|
+
- Tertiary measures at least 4.5:1 on every surface, and still never carries meaning alone.
|
|
5059
5232
|
|
|
5060
5233
|
### Examples
|
|
5061
5234
|
|
|
@@ -5368,8 +5541,9 @@ An ink capsule at the bottom center: brief, calm, at most three.
|
|
|
5368
5541
|
### Accessibility
|
|
5369
5542
|
|
|
5370
5543
|
- role=status; errors are alerts.
|
|
5371
|
-
- Five seconds, paused on hover and focus; swipe
|
|
5372
|
-
-
|
|
5544
|
+
- Five seconds, paused on hover and focus; swipe, Escape or the close button dismisses.
|
|
5545
|
+
- An error, or a toast with Undo, stays until it is dismissed, so nobody has to race it.
|
|
5546
|
+
- F6 moves the focus to the toasts.
|
|
5373
5547
|
|
|
5374
5548
|
### Examples
|
|
5375
5549
|
|
|
@@ -5378,16 +5552,16 @@ An ink capsule at the bottom center: brief, calm, at most three.
|
|
|
5378
5552
|
```tsx
|
|
5379
5553
|
<>
|
|
5380
5554
|
<Inline gap={8}>
|
|
5381
|
-
<Button onClick={() => toast("Key copied")}>
|
|
5382
|
-
<Button onClick={() => toast.success("Provider saved")}>
|
|
5383
|
-
<Button onClick={() => toast.error("Couldn't reach the provider.", { description: "Check the provider key, then try again." })}>
|
|
5384
|
-
<Button onClick={() => toast("Key disabled", { action: { label: "Undo", onClick: () => toast("Key enabled") } })}>
|
|
5555
|
+
<Button onClick={() => toast("Key copied")}>Copy key</Button>
|
|
5556
|
+
<Button onClick={() => toast.success("Provider saved")}>Save provider</Button>
|
|
5557
|
+
<Button onClick={() => toast.error("Couldn't reach the provider.", { description: "Check the provider key, then try again." })}>Test provider</Button>
|
|
5558
|
+
<Button onClick={() => toast("Key disabled", { action: { label: "Undo", onClick: () => toast("Key enabled") } })}>Disable key</Button>
|
|
5385
5559
|
<Button
|
|
5386
5560
|
onClick={() =>
|
|
5387
5561
|
void toast.promise(new Promise((r) => setTimeout(r, 1600)), { loading: "Syncing models…", success: "Models synced", error: "Couldn't sync models" })
|
|
5388
5562
|
}
|
|
5389
5563
|
>
|
|
5390
|
-
|
|
5564
|
+
Sync models
|
|
5391
5565
|
</Button>
|
|
5392
5566
|
</Inline>
|
|
5393
5567
|
</>
|
|
@@ -5403,7 +5577,12 @@ Filters, search and display options on one 48px row, with arrow-key focus across
|
|
|
5403
5577
|
|
|
5404
5578
|
| Key | Action |
|
|
5405
5579
|
|---|---|
|
|
5406
|
-
|
|
|
5580
|
+
| Tab | Enters the toolbar on the control used last, and leaves it |
|
|
5581
|
+
| Left Right | Moves between controls, wrapping at the ends |
|
|
5582
|
+
|
|
5583
|
+
### Accessibility
|
|
5584
|
+
|
|
5585
|
+
- One tab stop: arrows move inside, skipping the parts of a filter chip that aren't controls; a filled search keeps the arrows for its caret.
|
|
5407
5586
|
|
|
5408
5587
|
### Examples
|
|
5409
5588
|
|
|
@@ -5421,7 +5600,7 @@ function Logs() {
|
|
|
5421
5600
|
Add filter
|
|
5422
5601
|
</Button>
|
|
5423
5602
|
<Toolbar.Spacer />
|
|
5424
|
-
<div className="w-240">
|
|
5603
|
+
<div className="order-last basis-full sm:order-none sm:basis-auto sm:w-240">
|
|
5425
5604
|
<SearchInput aria-label="Search logs" placeholder="Search logs" />
|
|
5426
5605
|
</div>
|
|
5427
5606
|
<DisplayOptions {...display} />
|
|
@@ -5449,6 +5628,8 @@ A short label on hover and focus: a pill, with a shortcut when there is one.
|
|
|
5449
5628
|
- Opens after 500ms, instantly when moving between tooltipped siblings.
|
|
5450
5629
|
- Never the only place for essential information.
|
|
5451
5630
|
- Disabled controls show a tooltip only with a disabledReason.
|
|
5631
|
+
- role=tooltip. When it says more than the control's name, it is also the control's accessible description.
|
|
5632
|
+
- A single-line tooltip too long for the screen wraps into the box of several lines.
|
|
5452
5633
|
|
|
5453
5634
|
### Examples
|
|
5454
5635
|
|
|
@@ -5486,8 +5667,8 @@ Token kinds in their fixed colors, and limits with their scope, window, kind and
|
|
|
5486
5667
|
|
|
5487
5668
|
### Accessibility
|
|
5488
5669
|
|
|
5489
|
-
- Token kinds always map to the same series: input
|
|
5490
|
-
- Limits say hard or soft in words.
|
|
5670
|
+
- Token kinds always map to the same series: input blue, cache read a soft blue edged in blue, cache write amber, output emerald, reasoning violet.
|
|
5671
|
+
- Limits say hard or soft in words, and say so when they are over.
|
|
5491
5672
|
|
|
5492
5673
|
### Examples
|
|
5493
5674
|
|