@logicplanes/kaeso-ui 0.4.4 → 0.4.6
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
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.6. 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."
|
|
1370
1418
|
onConfirm={() => new Promise((r) => setTimeout(r, 900))}
|
|
1371
|
-
trigger={<Button variant="danger-secondary">
|
|
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."
|
|
1431
|
+
onConfirm={() => new Promise((r) => setTimeout(r, 900))}
|
|
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>
|
|
@@ -1791,7 +1847,7 @@ What someone can do at a glance: a row per group, in words, under the roles it c
|
|
|
1791
1847
|
|
|
1792
1848
|
## Empty
|
|
1793
1849
|
|
|
1794
|
-
What is absent and the next step:
|
|
1850
|
+
What is absent and the next step: a title, one sentence, one action.
|
|
1795
1851
|
|
|
1796
1852
|
`import { Empty } from "@logicplanes/kaeso-ui";`
|
|
1797
1853
|
|
|
@@ -1802,13 +1858,12 @@ What is absent and the next step: an icon circle, a title, one sentence, one or
|
|
|
1802
1858
|
```tsx
|
|
1803
1859
|
<Empty
|
|
1804
1860
|
title="No keys yet"
|
|
1805
|
-
description=
|
|
1806
|
-
actions={
|
|
1861
|
+
description={
|
|
1807
1862
|
<>
|
|
1808
|
-
<
|
|
1809
|
-
<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>
|
|
1810
1864
|
</>
|
|
1811
1865
|
}
|
|
1866
|
+
actions={<Button variant="primary">Create key</Button>}
|
|
1812
1867
|
/>
|
|
1813
1868
|
```
|
|
1814
1869
|
|
|
@@ -1829,6 +1884,8 @@ A label, a control and its help, wired together; an error shows under the contro
|
|
|
1829
1884
|
- The label points at the control; help is in aria-describedby.
|
|
1830
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.
|
|
1831
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.
|
|
1832
1889
|
|
|
1833
1890
|
### Examples
|
|
1834
1891
|
|
|
@@ -1859,8 +1916,8 @@ A label, a control and its help, wired together; an error shows under the contro
|
|
|
1859
1916
|
<Field label="Name" layout="horizontal" description="Shown in logs.">
|
|
1860
1917
|
<Input defaultValue="checkout-web" />
|
|
1861
1918
|
</Field>
|
|
1862
|
-
<Field label="Monthly budget" layout="horizontal"
|
|
1863
|
-
<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" />
|
|
1864
1921
|
</Field>
|
|
1865
1922
|
</div>
|
|
1866
1923
|
```
|
|
@@ -2040,6 +2097,33 @@ A node-and-connector diagram for the route: app → Kaeso → provider and model
|
|
|
2040
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" />
|
|
2041
2098
|
```
|
|
2042
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
|
+
|
|
2043
2127
|
## Gauge
|
|
2044
2128
|
|
|
2045
2129
|
A semicircle for “budget used”; thresholds as ticks.
|
|
@@ -2171,11 +2255,11 @@ Hugeicons free, Stroke Rounded, in currentColor. One icon per Kaeso concept.
|
|
|
2171
2255
|
#### Vocabulary
|
|
2172
2256
|
|
|
2173
2257
|
```tsx
|
|
2174
|
-
<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">
|
|
2175
2259
|
{(Object.keys(icons) as IconName[]).map((n) => (
|
|
2176
|
-
<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">
|
|
2177
2261
|
<Icon icon={icons[n]} size="sm" className="text-fg" />
|
|
2178
|
-
<span className="mono
|
|
2262
|
+
<span className="mono min-w-0 text-caption wrap-anywhere sm:text-small">{n}</span>
|
|
2179
2263
|
</div>
|
|
2180
2264
|
))}
|
|
2181
2265
|
</div>
|
|
@@ -2198,7 +2282,7 @@ A circle with an icon, a required name, and a tooltip that says it.
|
|
|
2198
2282
|
|
|
2199
2283
|
- aria-label is required by the types; it is also the tooltip, so sighted and screen-reader users get the same name.
|
|
2200
2284
|
- Shortcuts appear in the tooltip as key caps.
|
|
2201
|
-
- 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.
|
|
2202
2286
|
|
|
2203
2287
|
### Examples
|
|
2204
2288
|
|
|
@@ -2268,12 +2352,12 @@ A pill text field with the secondary material and a soft focus halo.
|
|
|
2268
2352
|
|
|
2269
2353
|
#### With label and help
|
|
2270
2354
|
|
|
2271
|
-
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.
|
|
2272
2356
|
|
|
2273
2357
|
```tsx
|
|
2274
2358
|
<div className="flex w-360 flex-col gap-24">
|
|
2275
2359
|
<Input label="Key name" description="Shown in logs and the audit log." placeholder="checkout-web" />
|
|
2276
|
-
<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." />
|
|
2277
2361
|
</div>
|
|
2278
2362
|
```
|
|
2279
2363
|
|
|
@@ -2315,6 +2399,7 @@ Addons inside the pill: text, icons, a ghost circle or a key cap, sharing one fo
|
|
|
2315
2399
|
### Accessibility
|
|
2316
2400
|
|
|
2317
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.
|
|
2318
2403
|
|
|
2319
2404
|
### Examples
|
|
2320
2405
|
|
|
@@ -2323,12 +2408,12 @@ Addons inside the pill: text, icons, a ghost circle or a key cap, sharing one fo
|
|
|
2323
2408
|
```tsx
|
|
2324
2409
|
<div className="flex w-400 flex-col gap-12">
|
|
2325
2410
|
<InputGroup>
|
|
2326
|
-
<InputGroup.Addon>https://</InputGroup.Addon>
|
|
2411
|
+
<InputGroup.Addon data-join>https://</InputGroup.Addon>
|
|
2327
2412
|
<InputGroup.Input aria-label="Host" placeholder="kaeso.example.com" />
|
|
2328
2413
|
<InputGroup.Addon>/v1</InputGroup.Addon>
|
|
2329
2414
|
</InputGroup>
|
|
2330
2415
|
<InputGroup trailingButton>
|
|
2331
|
-
<InputGroup.Input aria-label="Token" defaultValue="sk-kso-AbC123…wxyz"
|
|
2416
|
+
<InputGroup.Input aria-label="Token" defaultValue="sk-kso-AbC123…wxyz" data-mono />
|
|
2332
2417
|
<InputGroup.Button icon={icons.copy} aria-label="Copy" />
|
|
2333
2418
|
</InputGroup>
|
|
2334
2419
|
<InputGroup leadingIcon>
|
|
@@ -2344,6 +2429,20 @@ A folding JSON tree: copy any path, highlight a search.
|
|
|
2344
2429
|
|
|
2345
2430
|
`import { JsonView } from "@logicplanes/kaeso-ui";`
|
|
2346
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
|
+
|
|
2347
2446
|
### Examples
|
|
2348
2447
|
|
|
2349
2448
|
#### Request body
|
|
@@ -2368,7 +2467,8 @@ Key caps and shortcuts: ⌘ ⌥ ⇧ ⌃ on macOS, words elsewhere; sequences lik
|
|
|
2368
2467
|
|
|
2369
2468
|
### Accessibility
|
|
2370
2469
|
|
|
2371
|
-
-
|
|
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.
|
|
2372
2472
|
|
|
2373
2473
|
### Examples
|
|
2374
2474
|
|
|
@@ -2519,6 +2619,7 @@ The name of a field: 14/500, with an optional “Optional”.
|
|
|
2519
2619
|
### Accessibility
|
|
2520
2620
|
|
|
2521
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.
|
|
2522
2623
|
|
|
2523
2624
|
### Examples
|
|
2524
2625
|
|
|
@@ -2547,7 +2648,7 @@ A second layer slides over the first (add model → review values); Back returns
|
|
|
2547
2648
|
|
|
2548
2649
|
| Key | Action |
|
|
2549
2650
|
|---|---|
|
|
2550
|
-
| Escape | Closes and returns focus to the trigger |
|
|
2651
|
+
| Escape | Closes the dialog from any layer and returns focus to the trigger |
|
|
2551
2652
|
| Tab | Moves within the layer shown |
|
|
2552
2653
|
| mod Enter | Calls onSubmit, on every layer |
|
|
2553
2654
|
|
|
@@ -2665,7 +2766,7 @@ function Wizard() {
|
|
|
2665
2766
|
|
|
2666
2767
|
## Link
|
|
2667
2768
|
|
|
2668
|
-
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.
|
|
2669
2770
|
|
|
2670
2771
|
`import { Link } from "@logicplanes/kaeso-ui";`
|
|
2671
2772
|
|
|
@@ -2679,6 +2780,7 @@ Links look like links: text color with a quiet underline that turns solid on hov
|
|
|
2679
2780
|
|
|
2680
2781
|
- External links open in a new tab, add rel="noopener noreferrer" and say so to screen readers.
|
|
2681
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.
|
|
2682
2784
|
|
|
2683
2785
|
### Examples
|
|
2684
2786
|
|
|
@@ -2983,6 +3085,7 @@ A rounded dropdown: 16px radius, 34px rows, icons that wake on highlight.
|
|
|
2983
3085
|
- role=menu with menuitem, menuitemcheckbox and menuitemradio.
|
|
2984
3086
|
- Groups of more than seven items get a caption or a separator.
|
|
2985
3087
|
- Danger items name the action: “Delete key”.
|
|
3088
|
+
- An item's shortcut and hint describe it; its name is the label alone.
|
|
2986
3089
|
|
|
2987
3090
|
### Examples
|
|
2988
3091
|
|
|
@@ -2999,9 +3102,7 @@ A rounded dropdown: 16px radius, 34px rows, icons that wake on highlight.
|
|
|
2999
3102
|
<Menu.Item icon={icons.limit}>Edit limits</Menu.Item>
|
|
3000
3103
|
<Menu.Separator />
|
|
3001
3104
|
<Menu.Item icon={icons.hide}>Disable</Menu.Item>
|
|
3002
|
-
<Menu.Item
|
|
3003
|
-
Archive key
|
|
3004
|
-
</Menu.Item>
|
|
3105
|
+
<Menu.Item variant="danger">Archive key</Menu.Item>
|
|
3005
3106
|
</Menu.Content>
|
|
3006
3107
|
</Menu>
|
|
3007
3108
|
```
|
|
@@ -3203,7 +3304,7 @@ function Catalogue() {
|
|
|
3203
3304
|
|
|
3204
3305
|
## NumberInput
|
|
3205
3306
|
|
|
3206
|
-
Exact numbers:
|
|
3307
|
+
Exact numbers: end-aligned tabular digits, a unit, quiet steppers, a decimal string value.
|
|
3207
3308
|
|
|
3208
3309
|
`import { NumberInput } from "@logicplanes/kaeso-ui";`
|
|
3209
3310
|
|
|
@@ -3213,11 +3314,14 @@ Exact numbers: right-aligned tabular digits, a unit, steppers on hover, a decima
|
|
|
3213
3314
|
|---|---|
|
|
3214
3315
|
| Up | Increases by the step |
|
|
3215
3316
|
| Down | Decreases by the step |
|
|
3317
|
+
| Tab | Moves past the field; the steppers are not tab stops, since the arrows do the same |
|
|
3216
3318
|
|
|
3217
3319
|
### Accessibility
|
|
3218
3320
|
|
|
3219
3321
|
- The value is a decimal string, so money never passes through a float.
|
|
3220
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.
|
|
3221
3325
|
|
|
3222
3326
|
### Examples
|
|
3223
3327
|
|
|
@@ -3249,10 +3353,21 @@ Six cells for a TOTP code over one accessible input: paste fills, Backspace move
|
|
|
3249
3353
|
|
|
3250
3354
|
`import { OTPInput } from "@logicplanes/kaeso-ui";`
|
|
3251
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
|
+
|
|
3252
3365
|
### Accessibility
|
|
3253
3366
|
|
|
3254
3367
|
- One real input with autocomplete="one-time-code", so the browser can offer the code.
|
|
3255
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.
|
|
3256
3371
|
|
|
3257
3372
|
### Examples
|
|
3258
3373
|
|
|
@@ -3413,7 +3528,7 @@ A request's parameters: system instructions, temperature, top P, max output toke
|
|
|
3413
3528
|
|
|
3414
3529
|
### Accessibility
|
|
3415
3530
|
|
|
3416
|
-
- 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.
|
|
3417
3532
|
|
|
3418
3533
|
### Examples
|
|
3419
3534
|
|
|
@@ -3473,6 +3588,8 @@ A floating panel next to its trigger; HoverCard previews on hover, never as the
|
|
|
3473
3588
|
### Accessibility
|
|
3474
3589
|
|
|
3475
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.
|
|
3476
3593
|
|
|
3477
3594
|
### Examples
|
|
3478
3595
|
|
|
@@ -3504,9 +3621,9 @@ A floating panel next to its trigger; HoverCard previews on hover, never as the
|
|
|
3504
3621
|
```tsx
|
|
3505
3622
|
<HoverCard>
|
|
3506
3623
|
<HoverCard.Trigger>
|
|
3507
|
-
<
|
|
3624
|
+
<Link href="#models/claude-sonnet-4-5" className="mono text-small">
|
|
3508
3625
|
claude-sonnet-4-5
|
|
3509
|
-
</
|
|
3626
|
+
</Link>
|
|
3510
3627
|
</HoverCard.Trigger>
|
|
3511
3628
|
<HoverCard.Content>
|
|
3512
3629
|
<div className="flex flex-col gap-12">
|
|
@@ -3525,13 +3642,14 @@ A floating panel next to its trigger; HoverCard previews on hover, never as the
|
|
|
3525
3642
|
|
|
3526
3643
|
## PromptSuggestions
|
|
3527
3644
|
|
|
3528
|
-
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.
|
|
3529
3646
|
|
|
3530
3647
|
`import { PromptSuggestions } from "@logicplanes/kaeso-ui/playground";`
|
|
3531
3648
|
|
|
3532
3649
|
### Accessibility
|
|
3533
3650
|
|
|
3534
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.
|
|
3535
3653
|
|
|
3536
3654
|
### Examples
|
|
3537
3655
|
|
|
@@ -3540,10 +3658,19 @@ Example prompts before a thread starts: up to three quiet lines that take a fill
|
|
|
3540
3658
|
```tsx
|
|
3541
3659
|
function Basic() {
|
|
3542
3660
|
const [draft, setDraft] = useState("");
|
|
3661
|
+
const composer = useRef<HTMLTextAreaElement | null>(null);
|
|
3543
3662
|
return (
|
|
3544
3663
|
<div className="flex w-full max-w-640 flex-col gap-12">
|
|
3545
|
-
{draft === "" &&
|
|
3546
|
-
|
|
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" />
|
|
3547
3674
|
</div>
|
|
3548
3675
|
);
|
|
3549
3676
|
}
|
|
@@ -3774,7 +3901,7 @@ A response's numbers on one line: time to first token, total time, tokens in and
|
|
|
3774
3901
|
|
|
3775
3902
|
## ResponseView
|
|
3776
3903
|
|
|
3777
|
-
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.
|
|
3778
3905
|
|
|
3779
3906
|
`import { ResponseView, UserMessage, Thread } from "@logicplanes/kaeso-ui/playground";`
|
|
3780
3907
|
|
|
@@ -3789,6 +3916,7 @@ A model's response as it arrives: Markdown with a quiet caret, reasoning in a Th
|
|
|
3789
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.
|
|
3790
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.
|
|
3791
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”.
|
|
3792
3920
|
|
|
3793
3921
|
### Examples
|
|
3794
3922
|
|
|
@@ -4018,13 +4146,14 @@ Requests from keys to models to providers; hover a node to follow its path.
|
|
|
4018
4146
|
|
|
4019
4147
|
## ScrollArea
|
|
4020
4148
|
|
|
4021
|
-
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.
|
|
4022
4150
|
|
|
4023
4151
|
`import { ScrollArea } from "@logicplanes/kaeso-ui";`
|
|
4024
4152
|
|
|
4025
4153
|
### Accessibility
|
|
4026
4154
|
|
|
4027
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.
|
|
4028
4157
|
|
|
4029
4158
|
### Examples
|
|
4030
4159
|
|
|
@@ -4058,6 +4187,7 @@ Search with a leading icon, a clear circle when filled, and a shortcut hint wher
|
|
|
4058
4187
|
|
|
4059
4188
|
- The clear button is named “Clear search”.
|
|
4060
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.
|
|
4061
4191
|
|
|
4062
4192
|
### Examples
|
|
4063
4193
|
|
|
@@ -4065,7 +4195,7 @@ Search with a leading icon, a clear circle when filled, and a shortcut hint wher
|
|
|
4065
4195
|
|
|
4066
4196
|
```tsx
|
|
4067
4197
|
<div className="w-240">
|
|
4068
|
-
<SearchInput aria-label="Search logs" placeholder="
|
|
4198
|
+
<SearchInput aria-label="Search logs" placeholder="gpt-5, req_01…" shortcut={["mod", "k"]} />
|
|
4069
4199
|
</div>
|
|
4070
4200
|
```
|
|
4071
4201
|
|
|
@@ -4073,21 +4203,22 @@ Search with a leading icon, a clear circle when filled, and a shortcut hint wher
|
|
|
4073
4203
|
|
|
4074
4204
|
```tsx
|
|
4075
4205
|
<div className="w-240">
|
|
4076
|
-
<SearchInput size="md" aria-label="Search settings" placeholder="
|
|
4206
|
+
<SearchInput size="md" aria-label="Search settings" placeholder="Rate limit, budget" />
|
|
4077
4207
|
</div>
|
|
4078
4208
|
```
|
|
4079
4209
|
|
|
4080
4210
|
## SecretReveal
|
|
4081
4211
|
|
|
4082
|
-
The one-time
|
|
4212
|
+
The one-time key: calm, centered, certain. Copy it, store it, see how to use it.
|
|
4083
4213
|
|
|
4084
4214
|
`import { SecretReveal, EnvironmentSnippet } from "@logicplanes/kaeso-ui";`
|
|
4085
4215
|
|
|
4086
4216
|
### Accessibility
|
|
4087
4217
|
|
|
4088
|
-
- The
|
|
4089
|
-
- “Copy key” becomes “
|
|
4090
|
-
- 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.
|
|
4091
4222
|
|
|
4092
4223
|
### Examples
|
|
4093
4224
|
|
|
@@ -4308,8 +4439,9 @@ Secrets masked by default, an eye to reveal, mono when revealed, never autocompl
|
|
|
4308
4439
|
|
|
4309
4440
|
### Accessibility
|
|
4310
4441
|
|
|
4311
|
-
- The reveal circle is named Show or Hide.
|
|
4312
|
-
-
|
|
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.
|
|
4313
4445
|
|
|
4314
4446
|
### Examples
|
|
4315
4447
|
|
|
@@ -4375,7 +4507,7 @@ Settings rows in a rounded group, title and description left, the control right.
|
|
|
4375
4507
|
#### Preferences
|
|
4376
4508
|
|
|
4377
4509
|
```tsx
|
|
4378
|
-
<div className="w-
|
|
4510
|
+
<div className="w-560">
|
|
4379
4511
|
<SettingsSection title="General">
|
|
4380
4512
|
<SettingsGroup>
|
|
4381
4513
|
<SettingsRow
|
|
@@ -4437,7 +4569,7 @@ Settings rows in a rounded group, title and description left, the control right.
|
|
|
4437
4569
|
#### Navigation rows
|
|
4438
4570
|
|
|
4439
4571
|
```tsx
|
|
4440
|
-
<div className="w-
|
|
4572
|
+
<div className="w-560">
|
|
4441
4573
|
<SettingsGroup>
|
|
4442
4574
|
<SettingsRow icon={icons.members} title="Members" description="Who can use this organization." value="5 members" href="#" />
|
|
4443
4575
|
<SettingsRow icon={icons.providerKey} title="Provider keys" description="Credentials the gateway uses upstream." value="2" href="#" />
|
|
@@ -4490,6 +4622,7 @@ A panel from the edge that keeps the list behind it readable: the request inspec
|
|
|
4490
4622
|
|
|
4491
4623
|
- A dialog; the title names it, the subtitle carries the id.
|
|
4492
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.
|
|
4493
4626
|
|
|
4494
4627
|
### Examples
|
|
4495
4628
|
|
|
@@ -4931,10 +5064,15 @@ A reference table of five or more columns puts 8px between them, so it fits the
|
|
|
4931
5064
|
|
|
4932
5065
|
## TableOfContents
|
|
4933
5066
|
|
|
4934
|
-
“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.
|
|
4935
5068
|
|
|
4936
5069
|
`import { TableOfContents } from "@logicplanes/kaeso-ui";`
|
|
4937
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
|
+
|
|
4938
5076
|
### Examples
|
|
4939
5077
|
|
|
4940
5078
|
#### Basic
|
|
@@ -4953,12 +5091,14 @@ Underline tabs for detail pages and pill tabs for page headers.
|
|
|
4953
5091
|
|
|
4954
5092
|
| Key | Action |
|
|
4955
5093
|
|---|---|
|
|
4956
|
-
| Left Right | Moves between tabs |
|
|
4957
|
-
| 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 |
|
|
4958
5097
|
|
|
4959
5098
|
### Accessibility
|
|
4960
5099
|
|
|
4961
|
-
- 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.
|
|
4962
5102
|
|
|
4963
5103
|
### Examples
|
|
4964
5104
|
|
|
@@ -5047,7 +5187,7 @@ function Toggle() {
|
|
|
5047
5187
|
|
|
5048
5188
|
## TagInput
|
|
5049
5189
|
|
|
5050
|
-
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.
|
|
5051
5191
|
|
|
5052
5192
|
`import { TagInput } from "@logicplanes/kaeso-ui";`
|
|
5053
5193
|
|
|
@@ -5057,11 +5197,15 @@ Removable tags in a field: Enter, comma and paste split them; Backspace removes
|
|
|
5057
5197
|
|---|---|
|
|
5058
5198
|
| Enter | Adds the typed tag |
|
|
5059
5199
|
| , | Adds the typed tag |
|
|
5060
|
-
| 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 |
|
|
5061
5204
|
|
|
5062
5205
|
### Accessibility
|
|
5063
5206
|
|
|
5064
|
-
- 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.
|
|
5065
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.
|
|
5066
5210
|
|
|
5067
5211
|
### Examples
|
|
@@ -5084,7 +5228,7 @@ Text in the type scale: one scale, used the same way everywhere.
|
|
|
5084
5228
|
|
|
5085
5229
|
- Text renders a span by default; pass as="p" for paragraphs.
|
|
5086
5230
|
- Truncated text gets a tooltip with the full string and becomes focusable so keyboard users can read it.
|
|
5087
|
-
- Tertiary
|
|
5231
|
+
- Tertiary measures at least 4.5:1 on every surface, and still never carries meaning alone.
|
|
5088
5232
|
|
|
5089
5233
|
### Examples
|
|
5090
5234
|
|
|
@@ -5397,8 +5541,9 @@ An ink capsule at the bottom center: brief, calm, at most three.
|
|
|
5397
5541
|
### Accessibility
|
|
5398
5542
|
|
|
5399
5543
|
- role=status; errors are alerts.
|
|
5400
|
-
- Five seconds, paused on hover and focus; swipe
|
|
5401
|
-
-
|
|
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.
|
|
5402
5547
|
|
|
5403
5548
|
### Examples
|
|
5404
5549
|
|
|
@@ -5407,16 +5552,16 @@ An ink capsule at the bottom center: brief, calm, at most three.
|
|
|
5407
5552
|
```tsx
|
|
5408
5553
|
<>
|
|
5409
5554
|
<Inline gap={8}>
|
|
5410
|
-
<Button onClick={() => toast("Key copied")}>
|
|
5411
|
-
<Button onClick={() => toast.success("Provider saved")}>
|
|
5412
|
-
<Button onClick={() => toast.error("Couldn't reach the provider.", { description: "Check the provider key, then try again." })}>
|
|
5413
|
-
<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>
|
|
5414
5559
|
<Button
|
|
5415
5560
|
onClick={() =>
|
|
5416
5561
|
void toast.promise(new Promise((r) => setTimeout(r, 1600)), { loading: "Syncing models…", success: "Models synced", error: "Couldn't sync models" })
|
|
5417
5562
|
}
|
|
5418
5563
|
>
|
|
5419
|
-
|
|
5564
|
+
Sync models
|
|
5420
5565
|
</Button>
|
|
5421
5566
|
</Inline>
|
|
5422
5567
|
</>
|
|
@@ -5432,7 +5577,12 @@ Filters, search and display options on one 48px row, with arrow-key focus across
|
|
|
5432
5577
|
|
|
5433
5578
|
| Key | Action |
|
|
5434
5579
|
|---|---|
|
|
5435
|
-
|
|
|
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.
|
|
5436
5586
|
|
|
5437
5587
|
### Examples
|
|
5438
5588
|
|
|
@@ -5450,7 +5600,7 @@ function Logs() {
|
|
|
5450
5600
|
Add filter
|
|
5451
5601
|
</Button>
|
|
5452
5602
|
<Toolbar.Spacer />
|
|
5453
|
-
<div className="w-240">
|
|
5603
|
+
<div className="order-last basis-full sm:order-none sm:basis-auto sm:w-240">
|
|
5454
5604
|
<SearchInput aria-label="Search logs" placeholder="Search logs" />
|
|
5455
5605
|
</div>
|
|
5456
5606
|
<DisplayOptions {...display} />
|
|
@@ -5478,6 +5628,8 @@ A short label on hover and focus: a pill, with a shortcut when there is one.
|
|
|
5478
5628
|
- Opens after 500ms, instantly when moving between tooltipped siblings.
|
|
5479
5629
|
- Never the only place for essential information.
|
|
5480
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.
|
|
5481
5633
|
|
|
5482
5634
|
### Examples
|
|
5483
5635
|
|
|
@@ -5515,8 +5667,8 @@ Token kinds in their fixed colors, and limits with their scope, window, kind and
|
|
|
5515
5667
|
|
|
5516
5668
|
### Accessibility
|
|
5517
5669
|
|
|
5518
|
-
- Token kinds always map to the same series: input
|
|
5519
|
-
- 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.
|
|
5520
5672
|
|
|
5521
5673
|
### Examples
|
|
5522
5674
|
|