@logicplanes/kaeso-ui 0.4.4 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai/component-guides.md +250 -98
- package/ai/component-registry.json +264 -236
- package/ai/component-registry.md +222 -218
- package/ai/icons.md +1 -1
- package/ai/tokens.md +18 -14
- package/dist/blocks/delete-resource.js +3 -3
- package/dist/blocks/delete-resource.js.map +1 -1
- package/dist/blocks/pages.js +47 -42
- package/dist/blocks/pages.js.map +1 -1
- package/dist/blocks/resource-list.js +68 -55
- package/dist/blocks/resource-list.js.map +1 -1
- package/dist/chunks/agent-avatar-DHieggHK.js +188 -0
- package/dist/chunks/agent-avatar-DHieggHK.js.map +1 -0
- package/dist/chunks/app-frame-DysOel2X.js +232 -0
- package/dist/chunks/app-frame-DysOel2X.js.map +1 -0
- package/dist/chunks/arrow-focus-B0KdRFX8.js +20 -0
- package/dist/chunks/arrow-focus-B0KdRFX8.js.map +1 -0
- package/dist/chunks/avatar-CYNMK7uY.js +110 -0
- package/dist/chunks/avatar-CYNMK7uY.js.map +1 -0
- package/dist/chunks/badge-C0GC3B9X.js +27 -0
- package/dist/chunks/badge-C0GC3B9X.js.map +1 -0
- package/dist/chunks/banner-B3DGLTBu.js +88 -0
- package/dist/chunks/banner-B3DGLTBu.js.map +1 -0
- package/dist/chunks/button-IblhXUyZ.js +202 -0
- package/dist/chunks/button-IblhXUyZ.js.map +1 -0
- package/dist/chunks/{calendar-BWaf2MXc.js → calendar-Dc6_dl0f.js} +4 -4
- package/dist/chunks/calendar-Dc6_dl0f.js.map +1 -0
- package/dist/chunks/checkbox-9tbimmF3.js +141 -0
- package/dist/chunks/checkbox-9tbimmF3.js.map +1 -0
- package/dist/chunks/{cn-Dj6sRgkF.js → cn-BjnOAUrA.js} +45 -4
- package/dist/chunks/cn-BjnOAUrA.js.map +1 -0
- package/dist/chunks/code-block-64e-Cy1S.js +346 -0
- package/dist/chunks/code-block-64e-Cy1S.js.map +1 -0
- package/dist/chunks/{code-block-DdNPHEzI.js → code-block-KIvuE8jg.js} +122 -114
- package/dist/chunks/code-block-KIvuE8jg.js.map +1 -0
- package/dist/chunks/{code-tqj0uhBL.js → code-xqjww4Pv.js} +5 -6
- package/dist/chunks/code-xqjww4Pv.js.map +1 -0
- package/dist/chunks/combobox-DkcjkWc6.js +352 -0
- package/dist/chunks/combobox-DkcjkWc6.js.map +1 -0
- package/dist/chunks/command-list-CypqsC4T.js +456 -0
- package/dist/chunks/command-list-CypqsC4T.js.map +1 -0
- package/dist/chunks/{copy-button-FJvPJn72.js → copy-button-CwU8t_9_.js} +22 -15
- package/dist/chunks/copy-button-CwU8t_9_.js.map +1 -0
- package/dist/chunks/core-CmK-8ObW.js +505 -0
- package/dist/chunks/core-CmK-8ObW.js.map +1 -0
- package/dist/chunks/data-table-CqY8_6IS.js +581 -0
- package/dist/chunks/data-table-CqY8_6IS.js.map +1 -0
- package/dist/chunks/date-popup-DAnjptFt.js +58 -0
- package/dist/chunks/date-popup-DAnjptFt.js.map +1 -0
- package/dist/chunks/{de-D_0mmG-k.js → de-CqC4aSIV.js} +74 -40
- package/dist/chunks/de-CqC4aSIV.js.map +1 -0
- package/dist/chunks/{dialog-Cg9A_6SF.js → dialog-2zb6ClNR.js} +156 -134
- package/dist/chunks/dialog-2zb6ClNR.js.map +1 -0
- package/dist/chunks/disclosure-BtYRTDO3.js +22 -0
- package/dist/chunks/disclosure-BtYRTDO3.js.map +1 -0
- package/dist/chunks/domain-obd_w9xk.js +28 -0
- package/dist/chunks/domain-obd_w9xk.js.map +1 -0
- package/dist/chunks/{empty-DvhyMXQq.js → empty-BpiUgGzm.js} +2 -2
- package/dist/chunks/{empty-DvhyMXQq.js.map → empty-BpiUgGzm.js.map} +1 -1
- package/dist/chunks/{field-TviMvYa2.js → field-D7m-yl-D.js} +37 -34
- package/dist/chunks/field-D7m-yl-D.js.map +1 -0
- package/dist/chunks/{icon-D7ja-_Yk.js → icon-CBzOwqrX.js} +7 -6
- package/dist/chunks/{icon-D7ja-_Yk.js.map → icon-CBzOwqrX.js.map} +1 -1
- package/dist/chunks/{icon-button-CrdF_eMG.js → icon-button-Dfwpvmav.js} +7 -6
- package/dist/chunks/icon-button-Dfwpvmav.js.map +1 -0
- package/dist/chunks/{identity-BmhQ6BQ-.js → identity-3Foi5F8w.js} +7 -7
- package/dist/chunks/{identity-BmhQ6BQ-.js.map → identity-3Foi5F8w.js.map} +1 -1
- package/dist/chunks/{input-2VJuj_M4.js → input-Bo5-UZg2.js} +15 -9
- package/dist/chunks/input-Bo5-UZg2.js.map +1 -0
- package/dist/chunks/{input-group-DQ_4DoXg.js → input-group-jPcK9T_a.js} +42 -29
- package/dist/chunks/input-group-jPcK9T_a.js.map +1 -0
- package/dist/chunks/iso-field-DoqHBg8n.js +52 -0
- package/dist/chunks/iso-field-DoqHBg8n.js.map +1 -0
- package/dist/chunks/json-view-DZ2nL2Ir.js +253 -0
- package/dist/chunks/json-view-DZ2nL2Ir.js.map +1 -0
- package/dist/chunks/{kbd-BF1vKXJf.js → kbd-8A0ML_up.js} +30 -28
- package/dist/chunks/kbd-8A0ML_up.js.map +1 -0
- package/dist/chunks/label-DW24Aj0Z.js +26 -0
- package/dist/chunks/label-DW24Aj0Z.js.map +1 -0
- package/dist/chunks/{link-KWI7PevW.js → link-CMjkcLQK.js} +14 -14
- package/dist/chunks/link-CMjkcLQK.js.map +1 -0
- package/dist/chunks/list-B4G-sWwV.js +540 -0
- package/dist/chunks/list-B4G-sWwV.js.map +1 -0
- package/dist/chunks/{loader-DCfPndXa.js → loader-zo8CCIGJ.js} +2 -2
- package/dist/chunks/{loader-DCfPndXa.js.map → loader-zo8CCIGJ.js.map} +1 -1
- package/dist/chunks/markdown-C565aBR7.js +338 -0
- package/dist/chunks/markdown-C565aBR7.js.map +1 -0
- package/dist/chunks/menu-Clvv6ftq.js +485 -0
- package/dist/chunks/menu-Clvv6ftq.js.map +1 -0
- package/dist/chunks/merge-refs-BN1FyQt9.js +20 -0
- package/dist/chunks/merge-refs-BN1FyQt9.js.map +1 -0
- package/dist/chunks/meter-CASMHlxl.js +100 -0
- package/dist/chunks/meter-CASMHlxl.js.map +1 -0
- package/dist/chunks/nav-sheet-Dt6JSvzX.js +67 -0
- package/dist/chunks/nav-sheet-Dt6JSvzX.js.map +1 -0
- package/dist/chunks/{nav-wordmark-_pjheAsZ.js → nav-wordmark-J4pB_vjr.js} +4 -8
- package/dist/chunks/nav-wordmark-J4pB_vjr.js.map +1 -0
- package/dist/chunks/page-header-kS5tdmvb.js +45 -0
- package/dist/chunks/page-header-kS5tdmvb.js.map +1 -0
- package/dist/chunks/pagination-D7fAm8qg.js +147 -0
- package/dist/chunks/pagination-D7fAm8qg.js.map +1 -0
- package/dist/chunks/picker-popover-1FHb1LQG.js +119 -0
- package/dist/chunks/picker-popover-1FHb1LQG.js.map +1 -0
- package/dist/chunks/popover-Bl5QYqnh.js +51 -0
- package/dist/chunks/popover-Bl5QYqnh.js.map +1 -0
- package/dist/chunks/{portal-context-BBbzDKmY.js → portal-context-CTatR2Z8.js} +14 -4
- package/dist/chunks/portal-context-CTatR2Z8.js.map +1 -0
- package/dist/chunks/{radio-CDDFpdtL.js → radio-C6GtzF_t.js} +38 -23
- package/dist/chunks/radio-C6GtzF_t.js.map +1 -0
- package/dist/chunks/range-popup-lGiZsG3s.js +160 -0
- package/dist/chunks/range-popup-lGiZsG3s.js.map +1 -0
- package/dist/chunks/reasoning-frame-C3HdQRRS.js +51 -0
- package/dist/chunks/reasoning-frame-C3HdQRRS.js.map +1 -0
- package/dist/chunks/release-art-ChiT4T2S.js +582 -0
- package/dist/chunks/release-art-ChiT4T2S.js.map +1 -0
- package/dist/chunks/rights-B68ocZuq.js +312 -0
- package/dist/chunks/rights-B68ocZuq.js.map +1 -0
- package/dist/chunks/{scroll-area-D8MD7Vpo.js → scroll-area-_Ljh4-bG.js} +11 -6
- package/dist/chunks/scroll-area-_Ljh4-bG.js.map +1 -0
- package/dist/chunks/section-CFBYhsUi.js +77 -0
- package/dist/chunks/section-CFBYhsUi.js.map +1 -0
- package/dist/chunks/section-header-DU1Q4Tdf.js +28 -0
- package/dist/chunks/section-header-DU1Q4Tdf.js.map +1 -0
- package/dist/chunks/segmented-D9i1avik.js +119 -0
- package/dist/chunks/segmented-D9i1avik.js.map +1 -0
- package/dist/chunks/select-BqjmQOqx.js +222 -0
- package/dist/chunks/select-BqjmQOqx.js.map +1 -0
- package/dist/chunks/{separator-D7TzNHmX.js → separator-BNWf6BBj.js} +13 -8
- package/dist/chunks/separator-BNWf6BBj.js.map +1 -0
- package/dist/chunks/sidebar-Dq7oGOje.js +664 -0
- package/dist/chunks/sidebar-Dq7oGOje.js.map +1 -0
- package/dist/chunks/{sidebar-menu-BN3jkTlK.js → sidebar-menu-QSSNu1jJ.js} +2 -2
- package/dist/chunks/{sidebar-menu-BN3jkTlK.js.map → sidebar-menu-QSSNu1jJ.js.map} +1 -1
- package/dist/chunks/{skeleton-Dcz57Zyp.js → skeleton-D-qk3mes.js} +3 -3
- package/dist/chunks/skeleton-D-qk3mes.js.map +1 -0
- package/dist/chunks/slider-CcE8GtuV.js +58 -0
- package/dist/chunks/slider-CcE8GtuV.js.map +1 -0
- package/dist/chunks/{status-dot-QJTF0Yv4.js → status-dot-CP6runiC.js} +4 -4
- package/dist/chunks/{status-dot-QJTF0Yv4.js.map → status-dot-CP6runiC.js.map} +1 -1
- package/dist/chunks/{styles-CVJU9t9v.js → styles-hkFkoBbi.js} +2 -2
- package/dist/chunks/{styles-CVJU9t9v.js.map → styles-hkFkoBbi.js.map} +1 -1
- package/dist/chunks/{swap-text-Dr0Irxz6.js → swap-text-SlUjrTlG.js} +3 -3
- package/dist/chunks/swap-text-SlUjrTlG.js.map +1 -0
- package/dist/chunks/switch-ngywMQdl.js +76 -0
- package/dist/chunks/switch-ngywMQdl.js.map +1 -0
- package/dist/chunks/table-CTK5E0J7.js +102 -0
- package/dist/chunks/table-CTK5E0J7.js.map +1 -0
- package/dist/chunks/tag-BGr6lTSV.js +100 -0
- package/dist/chunks/tag-BGr6lTSV.js.map +1 -0
- package/dist/chunks/{text-CIXH8rmT.js → text-DkKdTVUf.js} +9 -9
- package/dist/chunks/text-DkKdTVUf.js.map +1 -0
- package/dist/chunks/{textarea--4FRL3Pb.js → textarea-CO0HP6fK.js} +47 -36
- package/dist/chunks/textarea-CO0HP6fK.js.map +1 -0
- package/dist/chunks/timeseries-Ck-q0wWn.js +381 -0
- package/dist/chunks/timeseries-Ck-q0wWn.js.map +1 -0
- package/dist/chunks/toolbar-u0Gm7Q7-.js +61 -0
- package/dist/chunks/toolbar-u0Gm7Q7-.js.map +1 -0
- package/dist/chunks/tooltip-Tkm-urbi.js +202 -0
- package/dist/chunks/tooltip-Tkm-urbi.js.map +1 -0
- package/dist/chunks/tooltip-root-BC_RNNiP.js +70 -0
- package/dist/chunks/tooltip-root-BC_RNNiP.js.map +1 -0
- package/dist/chunks/truncated-d1afmUJT.js +33 -0
- package/dist/chunks/truncated-d1afmUJT.js.map +1 -0
- package/dist/chunks/use-coarse-pointer-Ml5oE6oX.js +28 -0
- package/dist/chunks/use-coarse-pointer-Ml5oE6oX.js.map +1 -0
- package/dist/chunks/use-hydrating-COtYVRo4.js +8 -0
- package/dist/chunks/use-hydrating-COtYVRo4.js.map +1 -0
- package/dist/chunks/use-scroll-fade-uc8mWSDX.js +30 -0
- package/dist/chunks/use-scroll-fade-uc8mWSDX.js.map +1 -0
- package/dist/chunks/{zh-CN-Bm6UPIbW.js → zh-CN-BlpsT6d_.js} +73 -39
- package/dist/chunks/zh-CN-BlpsT6d_.js.map +1 -0
- package/dist/components/agent-avatar.js +1 -1
- package/dist/components/app-frame.js +2 -2
- package/dist/components/avatar.js +1 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/banner.js +1 -1
- package/dist/components/button-group.js +22 -22
- package/dist/components/button-group.js.map +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/charts/bar.js +235 -160
- package/dist/components/charts/bar.js.map +1 -1
- package/dist/components/charts/donut.js +144 -99
- package/dist/components/charts/donut.js.map +1 -1
- package/dist/components/charts/gauge.js +61 -49
- package/dist/components/charts/gauge.js.map +1 -1
- package/dist/components/charts/heatmap.js +179 -70
- package/dist/components/charts/heatmap.js.map +1 -1
- package/dist/components/charts/sankey.js +144 -77
- package/dist/components/charts/sankey.js.map +1 -1
- package/dist/components/charts/sparkline.js +54 -38
- package/dist/components/charts/sparkline.js.map +1 -1
- package/dist/components/charts/timeseries.js +1 -1
- package/dist/components/charts.js +2 -2
- package/dist/components/checkbox.js +1 -1
- package/dist/components/code-block.js +3 -3
- package/dist/components/code.js +1 -1
- package/dist/components/collapsible.js +77 -1
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-list.js +2 -2
- package/dist/components/command-palette.js +89 -66
- package/dist/components/command-palette.js.map +1 -1
- package/dist/components/copy-button.js +1 -1
- package/dist/components/data-table.js +1 -459
- package/dist/components/date-picker.js +162 -151
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/dialog.js +74 -63
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/display-options.js +76 -64
- package/dist/components/display-options.js.map +1 -1
- package/dist/components/empty.js +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/figure.js +2 -2
- package/dist/components/filter-chip.js +36 -27
- package/dist/components/filter-chip.js.map +1 -1
- package/dist/components/filter-row.js +4 -4
- package/dist/components/filter-row.js.map +1 -1
- package/dist/components/flow.js +94 -63
- package/dist/components/flow.js.map +1 -1
- package/dist/components/heading.js +1 -1
- package/dist/components/icon-button.js +1 -1
- package/dist/components/icon.js +1 -1
- package/dist/components/input.js +176 -98
- package/dist/components/input.js.map +1 -1
- package/dist/components/kaeso/conversation.js +51 -46
- package/dist/components/kaeso/conversation.js.map +1 -1
- package/dist/components/kaeso/identity.js +1 -1
- package/dist/components/kaeso/moments.js +23 -20
- package/dist/components/kaeso/moments.js.map +1 -1
- package/dist/components/kaeso/rights.js +1 -1
- package/dist/components/kaeso/usage.js +90 -74
- package/dist/components/kaeso/usage.js.map +1 -1
- package/dist/components/kaeso.js +200 -187
- package/dist/components/kaeso.js.map +1 -1
- package/dist/components/kbd.js +1 -1
- package/dist/components/key-value.js +32 -47
- package/dist/components/key-value.js.map +1 -1
- package/dist/components/label.js +1 -25
- package/dist/components/layout.js +2 -2
- package/dist/components/layout.js.map +1 -1
- package/dist/components/link.js +1 -1
- package/dist/components/list.js +1 -1
- package/dist/components/loader.js +11 -10
- package/dist/components/loader.js.map +1 -1
- package/dist/components/logo.js +2 -2
- package/dist/components/markdown.js +1 -1
- package/dist/components/menu.js +2 -2
- package/dist/components/meter.js +1 -1
- package/dist/components/page-header.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/playground.js +644 -529
- package/dist/components/playground.js.map +1 -1
- package/dist/components/popover.js +4 -4
- package/dist/components/popover.js.map +1 -1
- package/dist/components/portal.js +1 -1
- package/dist/components/qr-code.js +2 -2
- package/dist/components/qr-code.js.map +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/release-art.js +1 -1
- package/dist/components/scroll-area.js +1 -1
- package/dist/components/section.js +1 -1
- package/dist/components/segmented.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/separator.js +1 -1
- package/dist/components/settings.js +39 -46
- package/dist/components/settings.js.map +1 -1
- package/dist/components/sheet.js +10 -9
- package/dist/components/sheet.js.map +1 -1
- package/dist/components/sidebar.js +1 -1
- package/dist/components/skeleton.js +1 -1
- package/dist/components/slider.js +1 -1
- package/dist/components/stat.js +98 -84
- package/dist/components/stat.js.map +1 -1
- package/dist/components/status-dot.js +1 -1
- package/dist/components/surface.js +1 -1
- package/dist/components/swap-text.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +73 -55
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/tag.js +1 -1
- package/dist/components/text.js +1 -1
- package/dist/components/theme-image.js +1 -1
- package/dist/components/theme-menu.js +5 -2
- package/dist/components/theme-menu.js.map +1 -1
- package/dist/components/theme-select.js +1 -1
- package/dist/components/thumbnail.js +35 -24
- package/dist/components/thumbnail.js.map +1 -1
- package/dist/components/timeline.js +51 -35
- package/dist/components/timeline.js.map +1 -1
- package/dist/components/toast.js +76 -66
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toc.js +14 -8
- package/dist/components/toc.js.map +1 -1
- package/dist/components/toolbar.js +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/components/visually-hidden.js +1 -1
- package/dist/i18n-provider.js +1 -1
- package/dist/index.js +100 -100
- package/dist/kaeso.css +605 -67
- package/dist/styles.css +1 -1
- package/dist/tailwind.css +1 -1
- package/dist/types/blocks/delete-resource/delete-resource.d.ts +2 -2
- package/dist/types/components/agent-avatar/agent-avatar.d.ts +24 -19
- package/dist/types/components/badge/badge.d.ts +3 -3
- package/dist/types/components/banner/banner.d.ts +3 -3
- package/dist/types/components/button/button.d.ts +2 -2
- package/dist/types/components/button-group/button-group.d.ts +1 -1
- package/dist/types/components/charts/domain.d.ts +11 -0
- package/dist/types/components/charts/marks.d.ts +1 -0
- package/dist/types/components/code/code.d.ts +3 -3
- package/dist/types/components/code-block/json-view.d.ts +2 -1
- package/dist/types/components/code-block/numbers.d.ts +1 -0
- package/dist/types/components/collapsible/collapsible.d.ts +2 -2
- package/dist/types/components/collapsible/disclosure.d.ts +2 -0
- package/dist/types/components/data-table/data-table.d.ts +6 -5
- package/dist/types/components/data-table/docs.d.ts +1 -0
- package/dist/types/components/data-table/time-columns.d.ts +1 -0
- package/dist/types/components/date-picker/focus-day.d.ts +1 -0
- package/dist/types/components/date-picker/iso-field.d.ts +8 -1
- package/dist/types/components/dialog/dialog.d.ts +7 -7
- package/dist/types/components/field/field.d.ts +1 -1
- package/dist/types/components/flow/flow.d.ts +1 -1
- package/dist/types/components/icon-button/icon-button.d.ts +1 -1
- package/dist/types/components/input/input-group.d.ts +2 -0
- package/dist/types/components/input/number-input.d.ts +4 -4
- package/dist/types/components/input/otp-input.d.ts +3 -3
- package/dist/types/components/kaeso/client-button.d.ts +2 -1
- package/dist/types/components/kaeso/provider-picker.d.ts +1 -0
- package/dist/types/components/kaeso/rights.d.ts +1 -1
- package/dist/types/components/kaeso/role-picker.d.ts +1 -0
- package/dist/types/components/key-value/key-value.d.ts +2 -2
- package/dist/types/components/layout/layout.d.ts +2 -2
- package/dist/types/components/link/link.d.ts +4 -4
- package/dist/types/components/list/list.d.ts +2 -2
- package/dist/types/components/menu/menu.d.ts +2 -1
- package/dist/types/components/menu/styles.d.ts +3 -3
- package/dist/types/components/meter/meter.d.ts +3 -3
- package/dist/types/components/page-header/page-header.d.ts +1 -1
- package/dist/types/components/pagination/pagination.d.ts +2 -2
- package/dist/types/components/playground/prompt-suggestions.d.ts +1 -0
- package/dist/types/components/playground/reasoning-frame.d.ts +14 -0
- package/dist/types/components/playground/reasoning.d.ts +1 -0
- package/dist/types/components/popover/popover.d.ts +1 -1
- package/dist/types/components/scroll-area/scroll-area.d.ts +2 -2
- package/dist/types/components/section/section-header.d.ts +6 -0
- package/dist/types/components/segmented/segmented.d.ts +1 -0
- package/dist/types/components/select/select.d.ts +1 -1
- package/dist/types/components/sheet/sheet.d.ts +3 -3
- package/dist/types/components/sidebar/sidebar.d.ts +1 -0
- package/dist/types/components/slider/slider.d.ts +2 -2
- package/dist/types/components/stat/stat.d.ts +1 -1
- package/dist/types/components/tabs/tabs.d.ts +6 -4
- package/dist/types/components/text/truncated.d.ts +7 -0
- package/dist/types/components/timeline/timeline.d.ts +5 -5
- package/dist/types/components/toc/toc.d.ts +1 -1
- package/dist/types/components/toolbar/toolbar.d.ts +1 -1
- package/dist/types/components/tooltip/tooltip.d.ts +2 -2
- package/dist/types/components/tooltip/trigger-props.d.ts +1 -0
- package/dist/types/hooks/use-coarse-pointer.d.ts +1 -0
- package/dist/types/hooks/use-hydrating.d.ts +1 -0
- package/dist/types/utils/arrow-focus.d.ts +4 -1
- package/dist/types/utils/cn.d.ts +33 -0
- package/dist/types/utils/portal-context.d.ts +7 -1
- package/dist/utils.js +2 -2
- package/foundations/accessibility.md +3 -2
- package/foundations/color.md +5 -1
- package/foundations/elevation.md +1 -0
- package/foundations/motion.md +1 -1
- package/foundations/shape.md +2 -2
- package/foundations/typography.md +12 -12
- package/package.json +2 -2
- package/dist/chunks/agent-avatar-0pdBTWkR.js +0 -171
- package/dist/chunks/agent-avatar-0pdBTWkR.js.map +0 -1
- package/dist/chunks/app-frame-DogGRmsu.js +0 -221
- package/dist/chunks/app-frame-DogGRmsu.js.map +0 -1
- package/dist/chunks/arrow-focus-BcySmwwU.js +0 -11
- package/dist/chunks/arrow-focus-BcySmwwU.js.map +0 -1
- package/dist/chunks/avatar-CWbdwbJv.js +0 -83
- package/dist/chunks/avatar-CWbdwbJv.js.map +0 -1
- package/dist/chunks/badge-C2KtxCLB.js +0 -26
- package/dist/chunks/badge-C2KtxCLB.js.map +0 -1
- package/dist/chunks/banner-BA2ALw9M.js +0 -85
- package/dist/chunks/banner-BA2ALw9M.js.map +0 -1
- package/dist/chunks/button-CzuxqawA.js +0 -164
- package/dist/chunks/button-CzuxqawA.js.map +0 -1
- package/dist/chunks/calendar-BWaf2MXc.js.map +0 -1
- package/dist/chunks/checkbox-CQjwCPkc.js +0 -126
- package/dist/chunks/checkbox-CQjwCPkc.js.map +0 -1
- package/dist/chunks/cn-Dj6sRgkF.js.map +0 -1
- package/dist/chunks/code-block-BZIe_B9l.js +0 -334
- package/dist/chunks/code-block-BZIe_B9l.js.map +0 -1
- package/dist/chunks/code-block-DdNPHEzI.js.map +0 -1
- package/dist/chunks/code-tqj0uhBL.js.map +0 -1
- package/dist/chunks/collapsible-CKrCX_T9.js +0 -87
- package/dist/chunks/collapsible-CKrCX_T9.js.map +0 -1
- package/dist/chunks/combobox-DjDI7SUC.js +0 -319
- package/dist/chunks/combobox-DjDI7SUC.js.map +0 -1
- package/dist/chunks/command-list-C2Y7V_lt.js +0 -418
- package/dist/chunks/command-list-C2Y7V_lt.js.map +0 -1
- package/dist/chunks/copy-button-FJvPJn72.js.map +0 -1
- package/dist/chunks/core-BYns5ytV.js +0 -472
- package/dist/chunks/core-BYns5ytV.js.map +0 -1
- package/dist/chunks/date-popup-CPA_zt6o.js +0 -35
- package/dist/chunks/date-popup-CPA_zt6o.js.map +0 -1
- package/dist/chunks/de-D_0mmG-k.js.map +0 -1
- package/dist/chunks/dialog-Cg9A_6SF.js.map +0 -1
- package/dist/chunks/field-TviMvYa2.js.map +0 -1
- package/dist/chunks/hidden-description-B2zSmLcn.js +0 -23
- package/dist/chunks/hidden-description-B2zSmLcn.js.map +0 -1
- package/dist/chunks/icon-button-CrdF_eMG.js.map +0 -1
- package/dist/chunks/input-2VJuj_M4.js.map +0 -1
- package/dist/chunks/input-group-DQ_4DoXg.js.map +0 -1
- package/dist/chunks/iso-field-B2rTwiBo.js +0 -33
- package/dist/chunks/iso-field-B2rTwiBo.js.map +0 -1
- package/dist/chunks/json-view-Dqd2TDkc.js +0 -175
- package/dist/chunks/json-view-Dqd2TDkc.js.map +0 -1
- package/dist/chunks/kbd-BF1vKXJf.js.map +0 -1
- package/dist/chunks/link-KWI7PevW.js.map +0 -1
- package/dist/chunks/list-M1csq-d4.js +0 -494
- package/dist/chunks/list-M1csq-d4.js.map +0 -1
- package/dist/chunks/markdown-BupwFOae.js +0 -313
- package/dist/chunks/markdown-BupwFOae.js.map +0 -1
- package/dist/chunks/menu-DEmBfdPm.js +0 -450
- package/dist/chunks/menu-DEmBfdPm.js.map +0 -1
- package/dist/chunks/meter-Bj4N3Xuh.js +0 -84
- package/dist/chunks/meter-Bj4N3Xuh.js.map +0 -1
- package/dist/chunks/nav-sheet-CzgIwgAm.js +0 -60
- package/dist/chunks/nav-sheet-CzgIwgAm.js.map +0 -1
- package/dist/chunks/nav-wordmark-_pjheAsZ.js.map +0 -1
- package/dist/chunks/page-header-DL2y2iZp.js +0 -41
- package/dist/chunks/page-header-DL2y2iZp.js.map +0 -1
- package/dist/chunks/pagination-Cn_qF4cg.js +0 -86
- package/dist/chunks/pagination-Cn_qF4cg.js.map +0 -1
- package/dist/chunks/picker-popover-BxyU1U9F.js +0 -106
- package/dist/chunks/picker-popover-BxyU1U9F.js.map +0 -1
- package/dist/chunks/popover-DNN4S47w.js +0 -50
- package/dist/chunks/popover-DNN4S47w.js.map +0 -1
- package/dist/chunks/portal-context-BBbzDKmY.js.map +0 -1
- package/dist/chunks/radio-CDDFpdtL.js.map +0 -1
- package/dist/chunks/range-popup-CRyWYUB1.js +0 -128
- package/dist/chunks/range-popup-CRyWYUB1.js.map +0 -1
- package/dist/chunks/release-art-ZwfFQImt.js +0 -561
- package/dist/chunks/release-art-ZwfFQImt.js.map +0 -1
- package/dist/chunks/rights-Cyp0Pzp-.js +0 -279
- package/dist/chunks/rights-Cyp0Pzp-.js.map +0 -1
- package/dist/chunks/scroll-area-D8MD7Vpo.js.map +0 -1
- package/dist/chunks/scroll-parent-WXvzQcUo.js +0 -14
- package/dist/chunks/scroll-parent-WXvzQcUo.js.map +0 -1
- package/dist/chunks/section-Ce1efbsP.js +0 -87
- package/dist/chunks/section-Ce1efbsP.js.map +0 -1
- package/dist/chunks/segmented-CErcoxwi.js +0 -114
- package/dist/chunks/segmented-CErcoxwi.js.map +0 -1
- package/dist/chunks/select-x4XVsdCI.js +0 -210
- package/dist/chunks/select-x4XVsdCI.js.map +0 -1
- package/dist/chunks/separator-D7TzNHmX.js.map +0 -1
- package/dist/chunks/sidebar-3r1ZRXlN.js +0 -621
- package/dist/chunks/sidebar-3r1ZRXlN.js.map +0 -1
- package/dist/chunks/skeleton-Dcz57Zyp.js.map +0 -1
- package/dist/chunks/slider-Ci83PGtj.js +0 -57
- package/dist/chunks/slider-Ci83PGtj.js.map +0 -1
- package/dist/chunks/swap-text-Dr0Irxz6.js.map +0 -1
- package/dist/chunks/switch-BNMq_kGt.js +0 -59
- package/dist/chunks/switch-BNMq_kGt.js.map +0 -1
- package/dist/chunks/table-BeOSKl_3.js +0 -84
- package/dist/chunks/table-BeOSKl_3.js.map +0 -1
- package/dist/chunks/tag-D_M1s2qS.js +0 -87
- package/dist/chunks/tag-D_M1s2qS.js.map +0 -1
- package/dist/chunks/text-CIXH8rmT.js.map +0 -1
- package/dist/chunks/textarea--4FRL3Pb.js.map +0 -1
- package/dist/chunks/timeseries-D1xjRXfk.js +0 -339
- package/dist/chunks/timeseries-D1xjRXfk.js.map +0 -1
- package/dist/chunks/toolbar-WA_oZgu-.js +0 -37
- package/dist/chunks/toolbar-WA_oZgu-.js.map +0 -1
- package/dist/chunks/tooltip-OcwO0VUT.js +0 -154
- package/dist/chunks/tooltip-OcwO0VUT.js.map +0 -1
- package/dist/chunks/tooltip-root-DzahJDVj.js +0 -60
- package/dist/chunks/tooltip-root-DzahJDVj.js.map +0 -1
- package/dist/chunks/zh-CN-Bm6UPIbW.js.map +0 -1
- package/dist/components/data-table.js.map +0 -1
- package/dist/components/label.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playground.js","names":["__icon_Add01Icon","__icon_ArrowLeft01Icon","__icon_ArrowRight01Icon","__icon_Cancel01Icon","BaseCollapsible","__icon_ArrowRight01Icon","_Fragment","__icon_SlidersHorizontalIcon","_Fragment","cn","useUiText","Icon","useTruncated","Button","IconButton","useField","useFieldControl","withField","NumberInput","Textarea","Slider","Switch","Segmented","KAESO_SELECT_VARIANTS","Select","Popover","Highlight","commandMatch","CommandList","PickerTrigger","PickerPopover","ProviderBadge","providerName","ModelLabel","CapabilityIcons","Markdown","Fragment$1","KAESO_COMPOSER_VARIANTS","KAESO_COMPOSER_DEFAULT_VARIANTS","COARSE","subscribeCoarse","q","onChange","isCoarse","useCoarsePointer","useSyncExternalStore","Composer","placeholderProp","ariaLabelProp","submitLabelProp","stopLabelProp","force","t","placeholder","ariaLabel","submitLabel","stopLabel","text","setText","useControllable","value","defaultValue","onValueChange","box","useRef","minRows","size","grow","useCallback","el","maxRows","empty","canSend","disabled","streaming","loading","send","onSubmit","clearOnSubmit","coarse","enterSends","submitOn","onKeyDown","className","ref","name","actions","onStop","KAESO_COMPARE_GRID_VARIANTS","KAESO_COMPARE_GRID_DEFAULT_VARIANTS","ColumnContext","Root","columns","Children","children","isValidElement","count","scroller","current","setCurrent","useState","shown","active","target","changed","onActiveChange","scrollTo","i","reduce","go","next","before","fade","end","ro","onScroll","first","release","full","max","add","onAdd","Add01Icon","addLabel","label","ArrowLeft01Icon","ArrowRight01Icon","col","useStickToEnd","body","content","pinned","useEffect","inner","enabled","last","near","Column","useContext","stickToEnd","index","divider","header","onRemove","Cancel01Icon","removeLabel","footer","CompareGrid","KAESO_REASONING_VARIANTS","KAESO_REASONING_DEFAULT_VARIANTS","lastLine","lines","l","Reasoning","preview","hint","live","heading","title","duration","formatDuration","Collapsible","open","defaultOpen","onOpenChange","o","KAESO_RESPONSE_VIEW_VARIANTS","KAESO_RESPONSE_VIEW_DEFAULT_VARIANTS","incompleteText","reason","ResponseView","announce","useId","status","hasText","hasReasoning","reasoning","thinking","reasoningDuration","reasoningOpen","defaultReasoningOpen","onReasoningOpenChange","onRetry","incompleteReason","error","CLAMP","UserMessage","showAll","showLess","all","setAll","clamped","maxLines","a","Thread","KAESO_RESPONSE_METRICS_VARIANTS","KAESO_RESPONSE_METRICS_DEFAULT_VARIANTS","formatLatency","ms","useElapsed","now","setNow","from","id","requestCost","amount","formatUSD","known","n","Item","width","ResponseMetrics","elapsed","startedAt","tokens","inputTokens","outputTokens","hasCost","cost","line","timeToFirstToken","reasoningTokens","show","dash","formatNumber","KAESO_PARAMETER_PANEL_VARIANTS","KAESO_PARAMETER_PANEL_DEFAULT_VARIANTS","efforts","SliderRow","digits","unset","v","min","ParameterPanel","set","patch","shownEfforts","layout","instructions","sampling","defaults","maxOutputTokensLimit","ParameterPopover","titleProp","panel","trigger","SlidersHorizontalIcon","SELECT_APPEARANCE","KAESO_MODEL_PICKER_VARIANTS","KAESO_MODEL_PICKER_DEFAULT_VARIANTS","ALL","ALL_PROVIDERS","ModelRow","model","option","details","formatContext","providerLabel","modelItem","nameOf","withBadge","modelGroups","grouped","providerOrder","models","options","useProviderOrder","locale","useLocale","provider","useMemo","providers","p","b","useModelGroups","groupByProvider","ModelPicker","openProp","props","field","fc","ownOpen","setOwnOpen","setOpen","own","setOwn","chosen","allLabel","query","setQuery","only","setOnly","showDeprecated","setShowDeprecated","wasOpen","setWasOpen","byValue","hasDeprecated","chosenKey","groups","kept","visible","out","recentItems","recent","pick","x","shownProviders","counts","providerFilter","toolbar","summary","control","appearance","invalid","fullWidth","description","KAESO_PROMPT_SUGGESTIONS_VARIANTS","KAESO_PROMPT_SUGGESTIONS_DEFAULT_VARIANTS","PromptSuggestions","align","suggestions","onSelect","s"],"sources":["../../src/components/playground/composer.tsx","../../src/components/playground/compare-grid.tsx","../../src/components/playground/reasoning.tsx","../../src/components/playground/response-view.tsx","../../src/components/playground/response-metrics.tsx","../../src/components/playground/parameter-panel.tsx","../../src/components/playground/model-picker.tsx","../../src/components/playground/prompt-suggestions.tsx"],"sourcesContent":["import { forwardRef, useCallback, useLayoutEffect, useRef, useSyncExternalStore, type FormEvent, type KeyboardEvent, type ReactNode } from \"react\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useControllable } from \"../../utils/use-controllable.js\";\nimport { Button } from \"../button/button.js\";\n\nexport const KAESO_COMPOSER_VARIANTS = {\n size: {\n md: { classes: \"rounded-frame\" },\n sm: { classes: \"rounded-frame\" },\n },\n} as const;\nexport const KAESO_COMPOSER_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nconst COARSE = \"(pointer: coarse)\";\nfunction subscribeCoarse(onChange: () => void) {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const q = window.matchMedia(COARSE);\n q.addEventListener?.(\"change\", onChange);\n return () => q.removeEventListener?.(\"change\", onChange);\n}\nconst isCoarse = () => typeof window !== \"undefined\" && !!window.matchMedia?.(COARSE).matches;\nconst useCoarsePointer = () => useSyncExternalStore(subscribeCoarse, isCoarse, () => false);\n\nexport interface ComposerProps {\n value?: string | undefined;\n defaultValue?: string | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n onSubmit?: ((value: string) => void) | undefined;\n submitOn?: \"enter\" | \"mod-enter\" | undefined;\n onStop?: (() => void) | undefined;\n streaming?: boolean | undefined;\n loading?: boolean | undefined;\n disabled?: boolean | undefined;\n clearOnSubmit?: boolean | undefined;\n placeholder?: string | undefined;\n \"aria-label\"?: string | undefined;\n maxRows?: number | undefined;\n size?: keyof typeof KAESO_COMPOSER_VARIANTS.size | undefined;\n actions?: ReactNode | undefined;\n submitLabel?: string | undefined;\n stopLabel?: string | undefined;\n autoFocus?: boolean | undefined;\n name?: string | undefined;\n \"data-force\"?: string | undefined;\n className?: string | undefined;\n}\n\nexport const Composer = /* @__PURE__ */ forwardRef<HTMLTextAreaElement, ComposerProps>(function Composer(\n {\n value,\n defaultValue = \"\",\n onValueChange,\n onSubmit,\n onStop,\n submitOn = \"enter\",\n streaming = false,\n loading = false,\n disabled = false,\n clearOnSubmit = true,\n placeholder: placeholderProp,\n \"aria-label\": ariaLabelProp,\n maxRows = 10,\n size = \"md\",\n actions,\n submitLabel: submitLabelProp,\n stopLabel: stopLabelProp,\n autoFocus,\n name,\n \"data-force\": force,\n className,\n },\n ref,\n) {\n const t = useUiText();\n const placeholder = placeholderProp ?? t(\"composer.placeholder\", \"Write a prompt\");\n const ariaLabel = ariaLabelProp ?? t(\"composer.prompt\", \"Prompt\");\n const submitLabel = submitLabelProp ?? t(\"composer.send\", \"Send\");\n const stopLabel = stopLabelProp ?? t(\"composer.stop\", \"Stop\");\n const [text, setText] = useControllable(value, defaultValue, onValueChange);\n\n const box = useRef<HTMLTextAreaElement | null>(null);\n const minRows = size === \"sm\" ? 1 : 2;\n const grow = useCallback(() => {\n const el = box.current;\n if (!el) return;\n el.style.height = \"auto\";\n el.style.height = `${Math.min(Math.max(el.scrollHeight, minRows * 20 + 16), maxRows * 20 + 16)}px`;\n }, [maxRows, minRows]);\n useLayoutEffect(grow, [grow, text]);\n\n const empty = text.trim() === \"\";\n const canSend = !disabled && !streaming && !loading && !empty;\n const send = () => {\n if (!canSend) return;\n onSubmit?.(text);\n if (clearOnSubmit && value === undefined) setText(\"\");\n };\n const coarse = useCoarsePointer();\n const enterSends = submitOn === \"enter\" && !coarse;\n const onKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key !== \"Enter\") return;\n if (e.nativeEvent.isComposing || e.keyCode === 229) return;\n const mod = e.metaKey || e.ctrlKey;\n if (!mod && (!enterSends || e.shiftKey || e.altKey)) return;\n e.preventDefault();\n send();\n };\n const onFormSubmit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n send();\n };\n\n return (\n <form\n onSubmit={onFormSubmit}\n onMouseDown={(e) => {\n if (e.target === e.currentTarget && !disabled) {\n e.preventDefault();\n box.current?.focus();\n }\n }}\n {...(force ? { \"data-force\": force } : {})}\n {...(disabled ? { \"data-disabled\": \"\" } : {})}\n className={cn(\n \"flex min-w-0 cursor-text flex-col material-composer transition-control\",\n KAESO_COMPOSER_VARIANTS.size[size].classes,\n disabled && \"cursor-not-allowed\",\n className,\n )}\n >\n <textarea\n ref={(el) => {\n box.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n rows={minRows}\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onKeyDown}\n disabled={disabled}\n placeholder={placeholder}\n aria-label={ariaLabel}\n aria-keyshortcuts={enterSends ? \"Enter Meta+Enter Control+Enter\" : \"Meta+Enter Control+Enter\"}\n {...(enterSends ? { enterKeyHint: \"send\" as const } : {})}\n autoFocus={autoFocus}\n {...(name ? { name } : {})}\n className=\"block w-full min-w-0 resize-none bg-transparent px-16 pt-12 pb-4 text-body text-fg outline-none scrollbar-quiet placeholder:text-fg-tertiary disabled:cursor-not-allowed disabled:text-fg-disabled\"\n />\n <div className=\"flex min-w-0 items-center gap-8 p-8 pt-4\">\n <div className=\"flex min-w-0 flex-1 items-center gap-4\">{actions}</div>\n {streaming ? (\n <Button type=\"button\" size=\"sm\" variant=\"secondary\" reserveLabels={[submitLabel, stopLabel]} onClick={() => onStop?.()} disabled={disabled}>\n {stopLabel}\n </Button>\n ) : (\n <Button type=\"submit\" size=\"sm\" variant=\"primary\" reserveLabels={[submitLabel, stopLabel]} loading={loading} disabled={!canSend && !loading}>\n {submitLabel}\n </Button>\n )}\n </div>\n </form>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Composer.displayName = \"Composer\";\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Add01Icon as __icon_Add01Icon, ArrowLeft01Icon as __icon_ArrowLeft01Icon, ArrowRight01Icon as __icon_ArrowRight01Icon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_COMPARE_GRID_VARIANTS = {\n divider: {\n hairline: { classes: \"hairline-l\" },\n none: { classes: \"\" },\n },\n} as const;\nexport const KAESO_COMPARE_GRID_DEFAULT_VARIANTS = { divider: \"hairline\" } as const;\n\ninterface GridContext {\n index: number;\n count: number;\n divider: keyof typeof KAESO_COMPARE_GRID_VARIANTS.divider;\n add: ReactNode;\n}\nconst ColumnContext = /* @__PURE__ */ createContext<GridContext>({ index: 0, count: 1, divider: \"hairline\", add: null });\n\nexport interface CompareGridProps {\n children: ReactNode;\n \"aria-label\": string;\n onAdd?: (() => void) | undefined;\n addLabel?: string | undefined;\n max?: number | undefined;\n active?: number | undefined;\n onActiveChange?: ((index: number) => void) | undefined;\n divider?: keyof typeof KAESO_COMPARE_GRID_VARIANTS.divider | undefined;\n className?: string | undefined;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, CompareGridProps>(function CompareGrid(\n { children, \"aria-label\": ariaLabel, onAdd, addLabel, max = 4, active, onActiveChange, divider = \"hairline\", className },\n ref,\n) {\n const t = useUiText();\n const columns = Children.toArray(children).filter(isValidElement) as ReactElement<CompareColumnProps>[];\n const count = columns.length;\n const scroller = useRef<HTMLDivElement | null>(null);\n const [current, setCurrent] = useState(0);\n const shown = Math.min(active ?? current, Math.max(0, count - 1));\n const target = useRef<number | null>(null);\n const changed = useRef(onActiveChange);\n useLayoutEffect(() => {\n changed.current = onActiveChange;\n });\n\n const scrollTo = useCallback((i: number) => {\n const el = scroller.current?.children[i] as HTMLElement | undefined;\n const box = scroller.current;\n if (!el || !box) return;\n target.current = box.scrollLeft === el.offsetLeft ? null : i;\n const reduce = typeof matchMedia === \"function\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n box.scrollTo({ left: el.offsetLeft, behavior: reduce ? \"auto\" : \"smooth\" });\n }, []);\n const go = (i: number) => {\n const next = Math.max(0, Math.min(count - 1, i));\n setCurrent(next);\n onActiveChange?.(next);\n scrollTo(next);\n };\n useEffect(() => {\n if (active !== undefined) scrollTo(active);\n }, [active, scrollTo]);\n const before = useRef(count);\n useLayoutEffect(() => {\n if (count > before.current) {\n setCurrent(count - 1);\n changed.current?.(count - 1);\n scrollTo(count - 1);\n }\n before.current = count;\n }, [count, scrollTo]);\n\n const fade = useCallback(() => {\n const box = scroller.current;\n if (!box) return;\n const end = box.scrollWidth - box.clientWidth - box.scrollLeft;\n box.style.setProperty(\"--k-fade-start\", box.scrollLeft > 1 ? \"24px\" : \"0px\");\n box.style.setProperty(\"--k-fade-end\", end > 1 ? \"24px\" : \"0px\");\n }, []);\n useLayoutEffect(() => {\n const box = scroller.current;\n if (!box || typeof ResizeObserver === \"undefined\") return;\n fade();\n const ro = new ResizeObserver(fade);\n ro.observe(box);\n return () => ro.disconnect();\n }, [fade, count]);\n\n const onScroll = () => {\n fade();\n const box = scroller.current;\n const first = box?.children[0] as HTMLElement | undefined;\n if (!box || !first || !first.offsetWidth) return;\n const i = Math.max(0, Math.min(count - 1, Math.round(box.scrollLeft / first.offsetWidth)));\n if (target.current !== null) {\n if (i !== target.current) return;\n target.current = null;\n }\n if (i !== shown) {\n setCurrent(i);\n onActiveChange?.(i);\n }\n };\n\n const release = () => {\n target.current = null;\n };\n\n const full = count >= max;\n const add = onAdd ? (\n <IconButton\n icon={__icon_Add01Icon}\n aria-label={addLabel ?? t(\"compareGrid.addModel\", \"Add model\")}\n size=\"sm\"\n onClick={onAdd}\n disabled={full}\n {...(full ? { disabledReason: t(\"compareGrid.compareUpTo\", \"Compare up to {max} at once\", { max }) } : {})}\n />\n ) : null;\n const label = columns[shown]?.props.label ?? \"\";\n\n return (\n <div ref={ref} role=\"group\" aria-label={ariaLabel} className={cn(\"flex h-full min-h-0 min-w-0 flex-col\", className)}>\n {count > 1 || onAdd ? (\n <div className=\"flex h-44 shrink-0 items-center gap-4 px-24 hairline-b md:hidden\">\n <IconButton\n icon={__icon_ArrowLeft01Icon}\n aria-label={t(\"compareGrid.previousColumn\", \"Previous column\")}\n size=\"sm\"\n disabled={shown === 0}\n onClick={() => go(shown - 1)}\n />\n <span aria-live=\"polite\" className=\"min-w-0 flex-1 truncate text-center text-small text-fg-secondary tabular\">\n <span className=\"sr-only\">{t(\"compareGrid.columnName\", \"{label}, \", { label })}</span>\n {t(\"compareGrid.position\", \"{index} of {count}\", { index: shown + 1, count })}\n </span>\n <IconButton\n icon={__icon_ArrowRight01Icon}\n aria-label={t(\"compareGrid.nextColumn\", \"Next column\")}\n size=\"sm\"\n disabled={shown >= count - 1}\n onClick={() => go(shown + 1)}\n />\n {add}\n </div>\n ) : null}\n <div\n ref={scroller}\n onScroll={onScroll}\n onPointerDown={release}\n onWheel={release}\n onTouchStart={release}\n onKeyDown={release}\n className=\"relative min-h-0 min-w-0 flex-1 compare-grid\"\n >\n {columns.map((col, i) => (\n <ColumnContext.Provider key={col.key ?? i} value={{ index: i, count, divider, add: i === count - 1 ? add : null }}>\n {col}\n </ColumnContext.Provider>\n ))}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"CompareGrid\";\n\nexport interface CompareColumnProps {\n label: string;\n header: ReactNode;\n actions?: ReactNode | undefined;\n children?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n onRemove?: (() => void) | undefined;\n removeLabel?: string | undefined;\n stickToEnd?: boolean | undefined;\n className?: string | undefined;\n}\n\nfunction useStickToEnd(enabled: boolean) {\n const body = useRef<HTMLDivElement | null>(null);\n const content = useRef<HTMLDivElement | null>(null);\n const pinned = useRef(true);\n useEffect(() => {\n const el = body.current;\n const inner = content.current;\n if (!enabled || !el || !inner || typeof ResizeObserver === \"undefined\") return;\n let last = el.scrollTop;\n const fade = () => {\n el.style.setProperty(\"--scroll-area-overflow-y-start\", `${Math.max(0, el.scrollTop)}px`);\n el.style.setProperty(\"--scroll-area-overflow-y-end\", `${Math.max(0, el.scrollHeight - el.clientHeight - el.scrollTop)}px`);\n };\n const onScroll = () => {\n fade();\n const near = el.scrollHeight - el.scrollTop - el.clientHeight <= 24;\n pinned.current = el.scrollTop < last - 1 ? near : pinned.current || near;\n last = el.scrollTop;\n };\n const ro = new ResizeObserver(() => {\n if (pinned.current) {\n el.scrollTop = el.scrollHeight;\n last = el.scrollTop;\n }\n fade();\n });\n el.addEventListener(\"scroll\", onScroll, { passive: true });\n ro.observe(inner);\n ro.observe(el);\n return () => {\n el.removeEventListener(\"scroll\", onScroll);\n ro.disconnect();\n };\n }, [enabled]);\n return { body, content };\n}\n\nconst Column = /* @__PURE__ */ forwardRef<HTMLElement, CompareColumnProps>(function CompareGridColumn(\n { label, header, actions, children, footer, onRemove, removeLabel, stickToEnd = true, className },\n ref,\n) {\n const t = useUiText();\n const { index, count, divider, add } = useContext(ColumnContext);\n const { body, content } = useStickToEnd(stickToEnd);\n return (\n <section\n ref={ref}\n aria-label={label}\n className={cn(\n \"row-span-3 grid min-h-0 min-w-0 snap-start snap-always grid-rows-subgrid\",\n index > 0 && KAESO_COMPARE_GRID_VARIANTS.divider[divider].classes,\n className,\n )}\n >\n <header className=\"flex h-52 min-w-0 items-center gap-4 px-24 hairline-b\">\n <div className=\"flex min-w-0 flex-1 items-center\">{header}</div>\n {actions}\n {onRemove && count > 1 && (\n <IconButton icon={__icon_Cancel01Icon} aria-label={removeLabel ?? t(\"compareGrid.remove\", \"Remove {label}\", { label })} size=\"sm\" onClick={onRemove} />\n )}\n {add && <span className=\"hidden md:contents\">{add}</span>}\n </header>\n <div\n ref={body}\n tabIndex={0}\n aria-label={t(\"compareGrid.thread\", \"{label} thread\", { label })}\n role=\"region\"\n className=\"relative min-h-0 overflow-y-auto overscroll-contain scrollbar-quiet scroll-fade-y focus-ring-inset\"\n >\n <div ref={content} className=\"flex min-h-full flex-col px-24 pt-16 pb-24\">\n {children}\n </div>\n </div>\n {footer !== undefined && footer !== null && (\n <footer className=\"flex min-h-44 min-w-0 items-start px-24 pt-12 pb-12\">\n <div className=\"min-w-0 px-12\">{footer}</div>\n </footer>\n )}\n </section>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Column.displayName = \"CompareGrid.Column\";\n\nexport const CompareGrid = /* @__PURE__ */ Object.assign(Root, { Column });\n","import { forwardRef, type ReactNode } from \"react\";\nimport { Collapsible as BaseCollapsible } from \"@base-ui/react/collapsible\";\nimport { cn } from \"../../utils/cn.js\";\nimport { ArrowRight01Icon as __icon_ArrowRight01Icon } from \"@hugeicons/core-free-icons\";\nimport { formatDuration } from \"../../format/index.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Markdown } from \"../markdown/markdown.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_REASONING_VARIANTS = {\n state: {\n done: { classes: \"\" },\n live: { classes: \"\" },\n },\n} as const;\nexport const KAESO_REASONING_DEFAULT_VARIANTS = { state: \"done\" } as const;\n\nexport interface ReasoningProps {\n text?: string | undefined;\n live?: boolean | undefined;\n duration?: number | undefined;\n title?: ReactNode | undefined;\n hint?: ReactNode | undefined;\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n children?: ReactNode | undefined;\n className?: string | undefined;\n}\n\nfunction lastLine(text: string) {\n const lines = text.trim().split(\"\\n\");\n for (let i = lines.length - 1; i >= 0; i--) {\n const l = (lines[i] ?? \"\").replace(/[*_`#>]+/g, \"\").trim();\n if (l) return l;\n }\n return \"\";\n}\n\nexport const Reasoning = /* @__PURE__ */ forwardRef<HTMLDivElement, ReasoningProps>(function Reasoning(\n { text = \"\", live = false, duration, title, hint, open, defaultOpen, onOpenChange, children, className },\n ref,\n) {\n const t = useUiText();\n const preview = hint ?? (live ? lastLine(text) : \"\");\n const heading =\n title ??\n (!live && duration !== undefined\n ? t(\"responseView.thoughtFor\", \"Thought for {duration}\", { duration: formatDuration(duration) })\n : t(\"responseView.thinking\", \"Thinking\"));\n return (\n <BaseCollapsible.Root\n ref={ref}\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n {...(onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {})}\n className={cn(\"flex min-w-0 flex-col\", className)}\n >\n <BaseCollapsible.Trigger className=\"group/think flex h-32 min-w-0 cursor-pointer items-center gap-6 rounded-pill px-12 text-left text-small text-fg-secondary transition-control hover:bg-fill-1 hover:text-fg focus-ring-inset\">\n <span className={cn(\"shrink-0 font-medium\", live && \"animate-pulse-quiet reduced:animate-none\")}>{heading}</span>\n <Icon\n icon={__icon_ArrowRight01Icon}\n size=\"xs\"\n className=\"shrink-0 text-fg-tertiary transition-transform duration-180 ease-overlay group-data-panel-open/think:rotate-90\"\n />\n <span aria-hidden={hint === undefined} className=\"min-w-0 flex-1 truncate text-fg-tertiary group-data-panel-open/think:invisible\">\n {preview}\n </span>\n </BaseCollapsible.Trigger>\n <BaseCollapsible.Panel className=\"collapse-motion\">\n <div className=\"flex gap-12 pt-4 pb-8 pl-12\">\n <span aria-hidden className=\"w-1 shrink-0 rounded-pill bg-line\" />\n {children ?? <Markdown text={text} size=\"small\" tone=\"secondary\" streaming={live} collapseAfter={0} wrapCode className=\"min-w-0 flex-1\" />}\n </div>\n </BaseCollapsible.Panel>\n </BaseCollapsible.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Reasoning.displayName = \"Reasoning\";\n","import { forwardRef, useId, useRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Button } from \"../button/button.js\";\nimport { Markdown } from \"../markdown/markdown.js\";\nimport { Reasoning } from \"./reasoning.js\";\nimport { useTruncated } from \"../../hooks/use-truncated.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_RESPONSE_VIEW_VARIANTS = {\n status: {\n pending: { classes: \"\" },\n streaming: { classes: \"\" },\n done: { classes: \"\" },\n stopped: { classes: \"\" },\n incomplete: { classes: \"\" },\n error: { classes: \"\" },\n },\n} as const;\nexport const KAESO_RESPONSE_VIEW_DEFAULT_VARIANTS = { status: \"done\" } as const;\n\nexport type ResponseStatus = keyof typeof KAESO_RESPONSE_VIEW_VARIANTS.status;\n\nexport interface ResponseViewProps {\n text?: string | undefined;\n reasoning?: string | undefined;\n status?: ResponseStatus | undefined;\n reasoningDuration?: number | undefined;\n reasoningOpen?: boolean | undefined;\n defaultReasoningOpen?: boolean | undefined;\n onReasoningOpenChange?: ((open: boolean) => void) | undefined;\n incompleteReason?: string | undefined;\n error?: string | undefined;\n onRetry?: (() => void) | undefined;\n footer?: ReactNode | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nfunction incompleteText(t: UiText, reason: string | undefined): string {\n if (reason === \"max_output_tokens\") return t(\"responseView.outputLimit\", \"Stopped at the output limit\");\n if (reason === \"content_filter\") return t(\"responseView.contentFilter\", \"Stopped by the provider's content filter\");\n return t(\"responseView.incomplete\", \"The model ended the response early\");\n}\n\nexport const ResponseView = /* @__PURE__ */ forwardRef<HTMLElement, ResponseViewProps>(function ResponseView(\n {\n text = \"\",\n reasoning,\n status = \"done\",\n reasoningDuration,\n reasoningOpen,\n defaultReasoningOpen,\n onReasoningOpenChange,\n incompleteReason,\n error,\n onRetry,\n footer,\n \"aria-label\": ariaLabelProp,\n className,\n },\n ref,\n) {\n const t = useUiText();\n const ariaLabel = ariaLabelProp ?? t(\"responseView.response\", \"Response\");\n const announce = useId();\n const active = status === \"pending\" || status === \"streaming\";\n const hasText = text.trim() !== \"\";\n const hasReasoning = !!reasoning && reasoning.trim() !== \"\";\n const thinking = active && hasReasoning && !hasText;\n return (\n <article\n ref={ref}\n aria-label={ariaLabel}\n aria-busy={active || undefined}\n aria-describedby={announce}\n className={cn(\"flex min-w-0 flex-col gap-8\", className)}\n >\n {hasReasoning && (\n <Reasoning\n text={reasoning}\n live={thinking}\n duration={reasoningDuration}\n open={reasoningOpen}\n defaultOpen={defaultReasoningOpen}\n onOpenChange={onReasoningOpenChange}\n />\n )}\n {hasText ? (\n <Markdown text={text} size=\"lg\" streaming={active} collapseAfter={0} wrapCode className=\"px-12\" />\n ) : active && !hasReasoning ? (\n <div aria-hidden className=\"h-22 px-12\" />\n ) : null}\n {status === \"stopped\" && (\n <div className=\"flex min-h-24 flex-wrap items-center gap-x-12 gap-y-4 px-12\">\n <span className=\"text-small text-fg-tertiary\">\n {hasText ? t(\"responseView.stopped\", \"Stopped\") : t(\"responseView.stoppedBeforeResponse\", \"Stopped before a response\")}\n </span>\n {onRetry && (\n <Button size=\"xs\" variant=\"ghost\" onClick={onRetry}>\n {t(\"responseView.retry\", \"Retry\")}\n </Button>\n )}\n </div>\n )}\n {status === \"incomplete\" && (\n <div className=\"flex min-h-24 flex-wrap items-center gap-x-12 gap-y-4 px-12\">\n <span className=\"text-small text-fg-secondary\">{incompleteText(t, incompleteReason)}</span>\n {onRetry && (\n <Button size=\"xs\" variant=\"ghost\" onClick={onRetry}>\n {t(\"responseView.retry\", \"Retry\")}\n </Button>\n )}\n </div>\n )}\n {status === \"error\" && (\n <div role=\"alert\" className=\"flex min-h-24 flex-col items-start gap-4 px-12\">\n <span className=\"text-small font-medium text-fg\">\n {hasText ? t(\"responseView.stoppedEarly\", \"The response stopped early\") : t(\"responseView.noResponse\", \"No response\")}\n </span>\n {error && <Markdown text={error} size=\"small\" tone=\"secondary\" className=\"max-w-prose min-w-0\" />}\n {onRetry && (\n <Button size=\"xs\" variant=\"secondary\" onClick={onRetry} className=\"mt-4\">\n {t(\"responseView.retry\", \"Retry\")}\n </Button>\n )}\n </div>\n )}\n {status === \"done\" && !hasText && <span className=\"px-12 text-small text-fg-tertiary\">{t(\"responseView.noText\", \"The model returned no text\")}</span>}\n {footer}\n <span id={announce} className=\"sr-only\">\n {status === \"pending\"\n ? t(\"responseView.waiting\", \"Waiting for the response\")\n : status === \"streaming\"\n ? t(\"responseView.responding\", \"Responding\")\n : \"\"}\n </span>\n </article>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ResponseView.displayName = \"ResponseView\";\n\nexport interface UserMessageProps {\n children: ReactNode;\n maxLines?: 0 | 2 | 3 | 4 | 6 | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nconst CLAMP = { 2: \"line-clamp-2\", 3: \"line-clamp-3\", 4: \"line-clamp-4\", 6: \"line-clamp-6\" } as const;\n\nexport const UserMessage = /* @__PURE__ */ forwardRef<HTMLDivElement, UserMessageProps>(function UserMessage(\n { children, maxLines = 4, \"aria-label\": ariaLabelProp, className },\n ref,\n) {\n const t = useUiText();\n const ariaLabel = ariaLabelProp ?? t(\"userMessage.prompt\", \"Prompt\");\n const showAll = t(\"userMessage.showAll\", \"Show all\");\n const showLess = t(\"userMessage.showLess\", \"Show less\");\n const [all, setAll] = useState(false);\n const text = useRef<HTMLParagraphElement | null>(null);\n const clamped = useTruncated(text, maxLines > 0 && !all);\n return (\n <div ref={ref} role=\"group\" aria-label={ariaLabel} className={cn(\"flex min-w-0 flex-col items-start gap-2 px-12\", className)}>\n <p\n ref={text}\n className={cn(\n \"max-w-prose min-w-0 text-body font-medium whitespace-pre-wrap wrap-break-word text-fg-secondary\",\n maxLines !== 0 && !all && CLAMP[maxLines],\n )}\n >\n {children}\n </p>\n {(clamped || all) && (\n <Button size=\"xs\" variant=\"link\" reserveLabels={[showAll, showLess]} onClick={() => setAll((a) => !a)} className=\"text-fg-tertiary\">\n {all ? showLess : showAll}\n </Button>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") UserMessage.displayName = \"UserMessage\";\n\nexport interface ThreadProps {\n children: ReactNode;\n className?: string | undefined;\n}\n\nexport const Thread = /* @__PURE__ */ forwardRef<HTMLDivElement, ThreadProps>(function Thread({ children, className }, ref) {\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-col gap-32\", className)}>\n {children}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Thread.displayName = \"Thread\";\n","import { forwardRef, useEffect, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatDuration, formatNumber, formatUSD } from \"../../format/index.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_RESPONSE_METRICS_VARIANTS = {\n size: {\n sm: { classes: \"text-caption gap-x-12 gap-y-2\" },\n md: { classes: \"text-small gap-x-16 gap-y-4\" },\n },\n} as const;\nexport const KAESO_RESPONSE_METRICS_DEFAULT_VARIANTS = { size: \"sm\" } as const;\n\nexport interface ResponseMetricsProps {\n timeToFirstToken?: number | null | undefined;\n duration?: number | null | undefined;\n inputTokens?: number | null | undefined;\n outputTokens?: number | null | undefined;\n reasoningTokens?: number | null | undefined;\n reasoning?: boolean | undefined;\n live?: boolean | undefined;\n startedAt?: number | undefined;\n cost?: string | null | undefined;\n size?: keyof typeof KAESO_RESPONSE_METRICS_VARIANTS.size | undefined;\n className?: string | undefined;\n}\n\nexport function formatLatency(ms: number): string {\n if (!Number.isFinite(ms) || ms < 0) return \"—\";\n return formatDuration(ms, { precise: true });\n}\n\nfunction useElapsed(from: number | undefined) {\n const [now, setNow] = useState(() => Date.now());\n useEffect(() => {\n if (from === undefined) return;\n setNow(Date.now());\n const id = setInterval(() => setNow(Date.now()), 100);\n return () => clearInterval(id);\n }, [from]);\n return from === undefined ? undefined : Math.max(0, now - from);\n}\n\nfunction requestCost(amount: string): string {\n return /[1-9]/.test(amount) ? formatUSD(amount, { decimals: 6 }) : formatUSD(\"0\", { decimals: 0 });\n}\n\nfunction known(n: number | null | undefined): n is number {\n return typeof n === \"number\" && Number.isFinite(n);\n}\n\nfunction Item({ label, width, children }: { label: string; width: string; children: ReactNode }) {\n return (\n <div className=\"flex items-baseline gap-4 whitespace-nowrap\">\n <dt className=\"text-fg-tertiary\">{label}</dt>\n <dd className={cn(\"text-fg-secondary tabular\", width)}>{children}</dd>\n </div>\n );\n}\n\nexport const ResponseMetrics = /* @__PURE__ */ forwardRef<HTMLDListElement, ResponseMetricsProps>(function ResponseMetrics(\n { timeToFirstToken, duration, inputTokens, outputTokens, reasoningTokens, reasoning, live = false, startedAt, cost, size = \"sm\", className },\n ref,\n) {\n const t = useUiText();\n const counting = live && startedAt !== undefined && !known(duration);\n const elapsed = useElapsed(counting ? startedAt : undefined);\n const tokens = known(inputTokens) || known(outputTokens);\n const hasCost = cost != null && cost !== \"\";\n const line = cn(\"flex min-w-0 flex-wrap items-baseline\", KAESO_RESPONSE_METRICS_VARIANTS.size[size].classes, className);\n if (!live && !tokens && !hasCost && !known(timeToFirstToken) && !known(duration) && !known(reasoningTokens)) {\n return <dl ref={ref} aria-label={t(\"responseMetrics.metrics\", \"Metrics\")} className={cn(line, size === \"sm\" ? \"min-h-16\" : \"min-h-18\")} />;\n }\n const show = (value: boolean) => live || value;\n const dash = (\n <span className=\"text-fg-tertiary\">\n <span aria-hidden>—</span>\n <span className=\"sr-only\">{t(\"responseMetrics.notYetKnown\", \"not yet known\")}</span>\n </span>\n );\n return (\n <dl ref={ref} aria-label={t(\"responseMetrics.metrics\", \"Metrics\")} className={line}>\n {show(known(timeToFirstToken)) && (\n <Item label={t(\"responseMetrics.firstToken\", \"First token\")} width=\"min-w-40\">\n {known(timeToFirstToken) ? formatLatency(timeToFirstToken) : dash}\n </Item>\n )}\n {show(known(duration)) && (\n <Item label={t(\"responseMetrics.total\", \"Total\")} width=\"min-w-40\">\n {known(duration) ? formatLatency(duration) : elapsed !== undefined ? <span className=\"text-fg-tertiary\">{formatLatency(elapsed)}</span> : dash}\n </Item>\n )}\n {show(tokens) && (\n <Item label={t(\"responseMetrics.tokens\", \"Tokens\")} width=\"min-w-48\">\n {tokens\n ? t(\"responseMetrics.tokensValue\", \"{input} in · {output} out\", {\n input: known(inputTokens) ? formatNumber(inputTokens) : \"—\",\n output: known(outputTokens) ? formatNumber(outputTokens) : \"—\",\n })\n : dash}\n </Item>\n )}\n {(known(reasoningTokens) || (live && reasoning)) && (\n <Item label={t(\"responseMetrics.reasoning\", \"Reasoning\")} width=\"min-w-24\">\n {known(reasoningTokens) ? formatNumber(reasoningTokens) : dash}\n </Item>\n )}\n {show(hasCost) && (\n <Item label={t(\"responseMetrics.cost\", \"Cost\")} width=\"min-w-40\">\n {hasCost ? requestCost(cost) : dash}\n </Item>\n )}\n </dl>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ResponseMetrics.displayName = \"ResponseMetrics\";\n","import { forwardRef, useId, type ReactElement } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { SlidersHorizontalIcon as __icon_SlidersHorizontalIcon } from \"@hugeicons/core-free-icons\";\nimport { formatNumber } from \"../../format/index.js\";\nimport { Button } from \"../button/button.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { NumberInput } from \"../input/number-input.js\";\nimport { Textarea } from \"../input/textarea.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { Segmented } from \"../segmented/segmented.js\";\nimport { Select } from \"../select/select.js\";\nimport { Slider } from \"../slider/slider.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_PARAMETER_PANEL_VARIANTS = {\n layout: {\n popover: { classes: \"w-full gap-20\" },\n panel: { classes: \"w-full gap-24\" },\n },\n} as const;\nexport const KAESO_PARAMETER_PANEL_DEFAULT_VARIANTS = { layout: \"popover\" } as const;\n\nexport type ReasoningEffort = \"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\nexport type ReasoningSummary = \"auto\" | \"concise\" | \"detailed\" | \"off\";\n\nexport interface PlaygroundParameters {\n instructions?: string | undefined;\n temperature?: number | undefined;\n topP?: number | undefined;\n maxOutputTokens?: number | undefined;\n reasoningEffort?: ReasoningEffort | undefined;\n reasoningSummary?: ReasoningSummary | undefined;\n}\n\nfunction efforts(t: UiText): { value: ReasoningEffort; label: string }[] {\n return [\n { value: \"none\", label: t(\"parameterPanel.effortNone\", \"None\") },\n { value: \"minimal\", label: t(\"parameterPanel.effortMinimal\", \"Minimal\") },\n { value: \"low\", label: t(\"parameterPanel.effortLow\", \"Low\") },\n { value: \"medium\", label: t(\"parameterPanel.effortMedium\", \"Medium\") },\n { value: \"high\", label: t(\"parameterPanel.effortHigh\", \"High\") },\n { value: \"xhigh\", label: t(\"parameterPanel.effortExtraHigh\", \"Extra high\") },\n { value: \"max\", label: t(\"parameterPanel.effortMax\", \"Max\") },\n ];\n}\n\nexport interface ParameterPanelProps {\n value: PlaygroundParameters;\n onValueChange: (next: PlaygroundParameters) => void;\n defaults?: Pick<PlaygroundParameters, \"temperature\" | \"topP\"> | undefined;\n instructions?: boolean | undefined;\n sampling?: boolean | undefined;\n reasoning?: ReasoningEffort[] | boolean | undefined;\n maxOutputTokensLimit?: number | undefined;\n disabled?: boolean | undefined;\n layout?: keyof typeof KAESO_PARAMETER_PANEL_VARIANTS.layout | undefined;\n className?: string | undefined;\n}\n\nfunction SliderRow({\n label,\n value,\n unset,\n min,\n max,\n step,\n digits,\n disabled,\n onChange,\n}: {\n label: string;\n value: number;\n unset: boolean;\n min: number;\n max: number;\n step: number;\n digits: number;\n disabled: boolean;\n onChange: (v: number) => void;\n}) {\n const id = useId();\n const t = useUiText();\n const shown = formatNumber(value, { minimumFractionDigits: digits, maximumFractionDigits: digits });\n return (\n <div className=\"flex flex-col gap-8\">\n <div className=\"flex items-baseline justify-between gap-12\">\n <span id={id} className={cn(\"text-body font-medium\", disabled ? \"text-fg-disabled\" : \"text-fg\")}>\n {label}\n </span>\n <span className={cn(\"text-small tabular\", unset ? \"text-fg-tertiary\" : \"text-fg-secondary\")}>\n {unset ? t(\"parameterPanel.valueDefault\", \"{value} default\", { value: shown }) : shown}\n </span>\n </div>\n <div className=\"px-8\">\n <Slider\n aria-label={label}\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n formatValue={(v) => formatNumber(v, { minimumFractionDigits: digits, maximumFractionDigits: digits })}\n onValueChange={(v) => onChange(Array.isArray(v) ? (v[0] ?? min) : v)}\n />\n </div>\n </div>\n );\n}\n\nexport const ParameterPanel = /* @__PURE__ */ forwardRef<HTMLDivElement, ParameterPanelProps>(function ParameterPanel(\n {\n value,\n onValueChange,\n defaults,\n instructions = true,\n sampling = true,\n reasoning = false,\n maxOutputTokensLimit,\n disabled = false,\n layout = \"popover\",\n className,\n },\n ref,\n) {\n const t = useUiText();\n const set = (patch: Partial<PlaygroundParameters>) => onValueChange({ ...value, ...patch });\n const all = efforts(t);\n const shownEfforts = reasoning === true ? all : Array.isArray(reasoning) ? all.filter((e) => reasoning.includes(e.value)) : [];\n const changed =\n value.temperature !== undefined ||\n value.topP !== undefined ||\n value.maxOutputTokens !== undefined ||\n value.reasoningEffort !== undefined ||\n value.reasoningSummary !== undefined;\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-col\", KAESO_PARAMETER_PANEL_VARIANTS.layout[layout].classes, className)}>\n {instructions && (\n <Textarea\n label={t(\"parameterPanel.systemInstructions\", \"System instructions\")}\n rows={3}\n maxRows={8}\n placeholder={t(\"parameterPanel.instructionsPlaceholder\", \"You are a helpful assistant.\")}\n value={value.instructions ?? \"\"}\n disabled={disabled}\n onChange={(e) => set({ instructions: e.target.value === \"\" ? undefined : e.target.value })}\n />\n )}\n {sampling && (\n <>\n <SliderRow\n label={t(\"parameterPanel.temperature\", \"Temperature\")}\n value={value.temperature ?? defaults?.temperature ?? 1}\n unset={value.temperature === undefined}\n min={0}\n max={2}\n step={0.05}\n digits={2}\n disabled={disabled}\n onChange={(v) => set({ temperature: v })}\n />\n <SliderRow\n label={t(\"parameterPanel.topP\", \"Top P\")}\n value={value.topP ?? defaults?.topP ?? 1}\n unset={value.topP === undefined}\n min={0}\n max={1}\n step={0.01}\n digits={2}\n disabled={disabled}\n onChange={(v) => set({ topP: v })}\n />\n </>\n )}\n <NumberInput\n label={t(\"parameterPanel.maxOutputTokens\", \"Max output tokens\")}\n size=\"sm\"\n placeholder={t(\"parameterPanel.modelDefault\", \"Model default\")}\n align=\"start\"\n min=\"1\"\n {...(maxOutputTokensLimit ? { max: String(maxOutputTokensLimit) } : {})}\n step=\"256\"\n value={value.maxOutputTokens === undefined ? \"\" : String(value.maxOutputTokens)}\n disabled={disabled}\n onValueChange={(v) => {\n const n = Number(v);\n set({ maxOutputTokens: v.trim() === \"\" || !Number.isFinite(n) || n <= 0 ? undefined : Math.round(n) });\n }}\n />\n {shownEfforts.length > 0 && (\n <>\n <Select\n label={t(\"parameterPanel.reasoningEffort\", \"Reasoning effort\")}\n size=\"sm\"\n fullWidth\n disabled={disabled}\n value={value.reasoningEffort ?? \"default\"}\n options={[{ value: \"default\", label: t(\"parameterPanel.modelDefault\", \"Model default\") }, ...shownEfforts]}\n onValueChange={(v: string) => set({ reasoningEffort: v === \"default\" ? undefined : (v as ReasoningEffort) })}\n />\n <div className=\"flex flex-col gap-8\">\n <span className={cn(\"text-body font-medium\", disabled ? \"text-fg-disabled\" : \"text-fg\")}>\n {t(\"parameterPanel.reasoningSummary\", \"Reasoning summary\")}\n </span>\n <Segmented\n aria-label={t(\"parameterPanel.reasoningSummary\", \"Reasoning summary\")}\n size=\"sm\"\n fullWidth\n disabled={disabled}\n value={value.reasoningSummary ?? \"auto\"}\n options={[\n { value: \"auto\", label: t(\"parameterPanel.summaryAuto\", \"Auto\") },\n { value: \"concise\", label: t(\"parameterPanel.summaryConcise\", \"Concise\") },\n { value: \"detailed\", label: t(\"parameterPanel.summaryDetailed\", \"Detailed\") },\n { value: \"off\", label: t(\"parameterPanel.summaryOff\", \"Off\") },\n ]}\n onValueChange={(v) => set({ reasoningSummary: v === \"auto\" ? undefined : (v as ReasoningSummary) })}\n />\n </div>\n </>\n )}\n <div className=\"flex justify-end\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={disabled || !changed}\n onClick={() => onValueChange(value.instructions !== undefined ? { instructions: value.instructions } : {})}\n >\n {t(\"parameterPanel.resetToDefaults\", \"Reset to defaults\")}\n </Button>\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ParameterPanel.displayName = \"ParameterPanel\";\n\nexport interface ParameterPopoverProps extends Omit<ParameterPanelProps, \"layout\" | \"className\"> {\n trigger?: ReactElement | undefined;\n title?: string | undefined;\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\" | undefined;\n align?: \"start\" | \"center\" | \"end\" | undefined;\n}\n\nexport const ParameterPopover = /* @__PURE__ */ forwardRef<HTMLDivElement, ParameterPopoverProps>(function ParameterPopover(\n { trigger, title: titleProp, open, defaultOpen, onOpenChange, side = \"bottom\", align = \"end\", ...panel },\n ref,\n) {\n const t = useUiText();\n const title = titleProp ?? t(\"parameterPopover.parameters\", \"Parameters\");\n return (\n <Popover\n trapFocus\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n {...(onOpenChange ? { onOpenChange } : {})}\n >\n <Popover.Trigger>{trigger ?? <IconButton icon={__icon_SlidersHorizontalIcon} aria-label={title} size=\"sm\" />}</Popover.Trigger>\n <Popover.Content ref={ref} title={title} side={side} align={align} className=\"w-320 max-w-(--available-width)\">\n <ParameterPanel {...panel} />\n </Popover.Content>\n </Popover>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ParameterPopover.displayName = \"ParameterPopover\";\n","import { forwardRef, useCallback, useMemo, useState, type ReactNode } from \"react\";\nimport { useLocale, useUiText } from \"../../i18n/context.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatContext, formatNumber } from \"../../format/index.js\";\nimport { CommandList, type CommandListGroup, type CommandListItem } from \"../command-list/command-list.js\";\nimport { PickerPopover, PickerTrigger } from \"../command-list/picker-popover.js\";\nimport { Highlight } from \"../combobox/combobox.js\";\nimport { Switch } from \"../switch/switch.js\";\nimport { KAESO_SELECT_VARIANTS, Select } from \"../select/select.js\";\nimport { commandMatch } from \"../command-list/match.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { CapabilityIcons, ModelLabel, ProviderBadge, providerName, type Capability } from \"../kaeso/identity.js\";\n\nconst SELECT_APPEARANCE = { ghost: \"header\", default: \"default\" } as const;\n\nexport const KAESO_MODEL_PICKER_VARIANTS = {\n appearance: {\n ghost: { classes: KAESO_SELECT_VARIANTS.appearance.header.classes },\n default: { classes: KAESO_SELECT_VARIANTS.appearance.default.classes },\n },\n} as const;\nexport const KAESO_MODEL_PICKER_DEFAULT_VARIANTS = { appearance: \"ghost\" } as const;\n\nexport interface ModelPickerOption {\n value: string;\n provider: string;\n model?: string | undefined;\n name?: string | undefined;\n capabilities?: Capability[] | undefined;\n context?: number | undefined;\n price?: string | undefined;\n note?: string | undefined;\n deprecated?: boolean | undefined;\n disabled?: boolean | undefined;\n}\n\nexport interface ModelPickerProvider {\n id: string;\n name?: string | undefined;\n connected?: boolean | undefined;\n}\n\ninterface BaseProps extends FieldWrapProps {\n options: ModelPickerOption[];\n providers?: ModelPickerProvider[] | undefined;\n recent?: readonly string[] | undefined;\n groupByProvider?: boolean | undefined;\n placeholder?: string | undefined;\n \"aria-label\"?: string | undefined;\n appearance?: keyof typeof KAESO_MODEL_PICKER_VARIANTS.appearance | undefined;\n size?: \"sm\" | \"md\" | undefined;\n fullWidth?: boolean | undefined;\n disabled?: boolean | undefined;\n invalid?: boolean | undefined;\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n \"data-force\"?: string | undefined;\n className?: string | undefined;\n}\nexport interface SingleModelPickerProps extends BaseProps {\n multiple?: false | undefined;\n allLabel?: string | undefined;\n value?: string | null | undefined;\n defaultValue?: string | null | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n}\nexport interface MultiModelPickerProps extends BaseProps {\n multiple: true;\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onValueChange?: ((value: string[]) => void) | undefined;\n}\nexport type ModelPickerProps = SingleModelPickerProps | MultiModelPickerProps;\n\nconst ALL = \"\";\nconst ALL_PROVIDERS = \"*\";\n\nfunction ModelRow({ option, query, providerLabel }: { option: ModelPickerOption; query: string; providerLabel?: string | undefined }) {\n const model = option.model ?? option.value;\n const details = [option.context ? formatContext(option.context) : \"\", option.price ?? \"\"].filter(Boolean).join(\" · \");\n return (\n <>\n {providerLabel !== undefined && (\n <span aria-hidden className=\"flex\">\n <ProviderBadge provider={option.provider} name={providerLabel} />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 items-baseline gap-8\">\n <span className=\"min-w-0 shrink truncate\">\n <Highlight text={option.name ?? model} query={query} />\n </span>\n {option.name && option.name !== model && (\n <span className=\"min-w-0 flex-1 truncate mono text-small font-regular text-fg-tertiary\">\n <Highlight text={model} query={query} />\n </span>\n )}\n </span>\n {option.capabilities && option.capabilities.length > 0 && <CapabilityIcons capabilities={option.capabilities} className=\"hidden sm:flex\" />}\n {(option.note ?? details) && (\n <span className={cn(\"shrink-0 text-caption font-regular tabular\", option.note ? \"text-fg-secondary\" : \"hidden text-fg-tertiary sm:inline\")}>\n {option.note ?? details}\n </span>\n )}\n </>\n );\n}\n\nfunction modelItem(o: ModelPickerOption, nameOf: (provider: string) => string, withBadge: boolean): CommandListItem {\n const model = o.model ?? o.value;\n const providerLabel = nameOf(o.provider);\n return {\n value: o.value,\n label: o.name ?? model,\n keywords: [model, providerLabel, o.provider],\n render: ({ query: q }) => <ModelRow option={o} query={q} {...(withBadge ? { providerLabel } : {})} />,\n ...(o.disabled ? { disabled: true } : {}),\n };\n}\n\nfunction modelGroups(options: ModelPickerOption[], providerOrder: string[], grouped: boolean, nameOf: (provider: string) => string): CommandListGroup[] {\n if (!grouped) return [{ id: \"models\", items: options.map((o) => modelItem(o, nameOf, true)) }];\n return providerOrder.flatMap((id) => {\n const models = options.filter((o) => o.provider === id);\n if (!models.length) return [];\n return [\n {\n id: `provider:${id}`,\n label: nameOf(id),\n leading: (\n <span aria-hidden className=\"flex\">\n <ProviderBadge provider={id} name={nameOf(id)} size=\"sm\" />\n </span>\n ),\n count: models.length,\n items: models.map((o) => modelItem(o, nameOf, false)),\n },\n ];\n });\n}\n\nfunction useProviderOrder(options: ModelPickerOption[], providers: ModelPickerProvider[]) {\n const locale = useLocale();\n const provider = useMemo(() => new Map(providers.map((p) => [p.id, p])), [providers]);\n const nameOf = useCallback((id: string) => providerName(id, provider.get(id)?.name), [provider]);\n const providerOrder = useMemo(() => {\n const ids = [...new Set(options.map((o) => o.provider))];\n return ids.sort(\n (a, b) =>\n Number(!!provider.get(b)?.connected) - Number(!!provider.get(a)?.connected) || nameOf(a).localeCompare(nameOf(b), locale, { sensitivity: \"base\" }),\n );\n }, [options, provider, nameOf, locale]);\n return { nameOf, providerOrder };\n}\n\nexport function useModelGroups(\n options: ModelPickerOption[],\n { providers = [], groupByProvider }: { providers?: ModelPickerProvider[] | undefined; groupByProvider?: boolean | undefined } = {},\n): CommandListGroup[] {\n const { nameOf, providerOrder } = useProviderOrder(options, providers);\n const grouped = groupByProvider ?? providerOrder.length > 1;\n return useMemo(() => modelGroups(options, providerOrder, grouped, nameOf), [options, providerOrder, grouped, nameOf]);\n}\n\nexport const ModelPicker = /* @__PURE__ */ forwardRef<HTMLButtonElement, ModelPickerProps>(function ModelPicker(props, ref) {\n const {\n options,\n providers = [],\n recent = [],\n groupByProvider,\n placeholder,\n \"aria-label\": ariaLabel,\n appearance = \"ghost\",\n size = \"sm\",\n fullWidth,\n disabled,\n invalid,\n open: openProp,\n onOpenChange,\n \"data-force\": force,\n className,\n label,\n description,\n error,\n optional,\n required,\n layout,\n } = props;\n const t = useUiText();\n const field = useField();\n const fc = useFieldControl(props);\n const [ownOpen, setOwnOpen] = useState(false);\n const open = openProp ?? ownOpen;\n const setOpen = (o: boolean) => {\n if (openProp === undefined) setOwnOpen(o);\n onOpenChange?.(o);\n };\n const [own, setOwn] = useState<string | string[] | null>(() => props.defaultValue ?? (props.multiple ? [] : null));\n const current = props.value !== undefined ? props.value : own;\n const chosen = Array.isArray(current) ? current : current ? [current] : [];\n const allLabel = props.multiple ? undefined : props.allLabel;\n const [query, setQuery] = useState(\"\");\n const [only, setOnly] = useState<string | null>(null);\n const [showDeprecated, setShowDeprecated] = useState(false);\n const [wasOpen, setWasOpen] = useState(open);\n if (open !== wasOpen) {\n setWasOpen(open);\n if (open) {\n setQuery(\"\");\n setOnly(null);\n }\n }\n\n const byValue = useMemo(() => new Map(options.map((o) => [o.value, o])), [options]);\n const { nameOf, providerOrder } = useProviderOrder(options, providers);\n const grouped = groupByProvider ?? providerOrder.length > 1;\n const hasDeprecated = options.some((o) => o.deprecated && !chosen.includes(o.value));\n\n const chosenKey = chosen.join(\"\\u0000\");\n const groups = useMemo<CommandListGroup[]>(() => {\n const kept = new Set(chosenKey.split(\"\\u0000\"));\n const visible = (o: ModelPickerOption) => (showDeprecated || !o.deprecated || kept.has(o.value)) && (!only || o.provider === only);\n const out: CommandListGroup[] = [];\n if (allLabel && !only) out.push({ id: \"all\", items: [{ value: ALL, label: allLabel }] });\n const recentItems =\n query.trim() || only ? [] : recent.flatMap((v) => (byValue.get(v) && visible(byValue.get(v)!) ? [modelItem(byValue.get(v)!, nameOf, true)] : []));\n if (recentItems.length) out.push({ id: \"recent\", label: t(\"modelPicker.recent\", \"Recent\"), items: recentItems });\n return [...out, ...modelGroups(options.filter(visible), providerOrder, grouped, nameOf)];\n }, [options, providerOrder, grouped, recent, byValue, query, only, showDeprecated, chosenKey, allLabel, t, nameOf]);\n\n const pick = (v: string) => {\n if (props.multiple) {\n const next = chosen.includes(v) ? chosen.filter((x) => x !== v) : [...chosen, v];\n if (props.value === undefined) setOwn(next);\n props.onValueChange?.(next);\n return;\n }\n if (props.value === undefined) setOwn(v === ALL ? null : v);\n props.onValueChange?.(v);\n setOpen(false);\n };\n\n const shownProviders = useMemo(() => {\n const q = query.trim();\n const kept = new Set(chosenKey.split(\"\\u0000\"));\n const counts = new Map<string, number>();\n for (const o of options) {\n if (o.deprecated && !showDeprecated && !kept.has(o.value)) continue;\n const model = o.model ?? o.value;\n if (q && commandMatch(q, [o.name ?? model, model, nameOf(o.provider), o.provider]) <= 0) continue;\n counts.set(o.provider, (counts.get(o.provider) ?? 0) + 1);\n }\n return providerOrder.filter((id) => counts.has(id) || id === only).map((id) => ({ id, count: counts.get(id) ?? 0 }));\n }, [options, providerOrder, query, showDeprecated, chosenKey, only, nameOf]);\n const providerFilter =\n grouped && providerOrder.length > 1 ? (\n <Select\n aria-label={t(\"modelPicker.provider\", \"Provider\")}\n size=\"sm\"\n appearance=\"ghost\"\n value={only ?? ALL_PROVIDERS}\n onValueChange={(v: string) => setOnly(v === ALL_PROVIDERS ? null : v)}\n options={[\n { value: ALL_PROVIDERS, label: t(\"modelPicker.everyProvider\", \"All providers\") },\n ...shownProviders.map(({ id, count }) => ({\n value: id,\n textValue: nameOf(id),\n label: (\n <span className=\"flex min-w-0 items-center gap-8\">\n <span aria-hidden className=\"flex shrink-0\">\n <ProviderBadge provider={id} size=\"sm\" />\n </span>\n <span className=\"min-w-0 truncate\">{nameOf(id)}</span>\n <span className=\"shrink-0 text-fg-tertiary tabular\">{formatNumber(count)}</span>\n </span>\n ),\n })),\n ]}\n />\n ) : null;\n const toolbar =\n providerFilter || hasDeprecated ? (\n <>\n {providerFilter}\n {hasDeprecated && (\n <Switch size=\"sm\" label={t(\"modelPicker.showDeprecated\", \"Deprecated\")} checked={showDeprecated} onCheckedChange={setShowDeprecated} />\n )}\n </>\n ) : undefined;\n\n const first = chosen[0] ? byValue.get(chosen[0]) : undefined;\n const summary = props.multiple ? (\n first ? (\n chosen.length === 1 ? (\n <ModelLabel\n provider={first.provider}\n providerName={nameOf(first.provider)}\n model={first.model ?? first.value}\n {...(first.name ? { name: first.name } : {})}\n />\n ) : (\n t(\"modelPicker.firstAndMore\", \"{first} +{count}\", { first: first.name ?? first.model ?? first.value, count: String(chosen.length - 1) })\n )\n ) : undefined\n ) : first ? (\n <ModelLabel\n provider={first.provider}\n providerName={nameOf(first.provider)}\n model={first.model ?? first.value}\n {...(first.name ? { name: first.name } : {})}\n />\n ) : current === ALL || (current === null && allLabel) ? (\n allLabel\n ) : undefined;\n const title = ariaLabel ?? (typeof label === \"string\" ? label : t(\"modelPicker.model\", \"Model\"));\n\n const control = (\n <PickerPopover\n title={title}\n width=\"lg\"\n open={open}\n onOpenChange={setOpen}\n trigger={\n <PickerTrigger\n ref={ref}\n appearance={SELECT_APPEARANCE[appearance]}\n size={size}\n {...fc.controlProps}\n {...(ariaLabel || !label ? { \"aria-label\": title } : {})}\n {...(disabled ? { disabled } : {})}\n {...(invalid ? { invalid } : {})}\n {...(fullWidth ? { fullWidth } : {})}\n {...(force ? { \"data-force\": force } : {})}\n placeholder={placeholder ?? (props.multiple ? t(\"modelPicker.chooseSome\", \"Choose models\") : t(\"modelPicker.choose\", \"Choose a model\"))}\n className={cn(\"max-w-full\", !(label || description || error) && className)}\n >\n {summary as ReactNode}\n </PickerTrigger>\n }\n >\n <CommandList\n groups={groups}\n aria-label={title}\n value={props.multiple ? chosen : (chosen[0] ?? (allLabel ? ALL : null))}\n {...(props.multiple ? { multiple: true } : {})}\n onSelect={pick}\n query={query}\n onQueryChange={setQuery}\n placeholder={t(\"modelPicker.search\", \"Search models\")}\n emptyText={t(\"modelPicker.noMatch\", \"No models match\")}\n toolbar={toolbar}\n autoFocus\n />\n </PickerPopover>\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") ModelPicker.displayName = \"ModelPicker\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_PROMPT_SUGGESTIONS_VARIANTS = {\n align: {\n start: { classes: \"items-stretch\" },\n center: { classes: \"items-center text-center\" },\n },\n} as const;\nexport const KAESO_PROMPT_SUGGESTIONS_DEFAULT_VARIANTS = { align: \"start\" } as const;\n\nexport interface PromptSuggestionsProps {\n suggestions: string[];\n onSelect: (prompt: string) => void;\n \"aria-label\"?: string | undefined;\n align?: keyof typeof KAESO_PROMPT_SUGGESTIONS_VARIANTS.align | undefined;\n className?: string | undefined;\n}\n\nexport const PromptSuggestions = /* @__PURE__ */ forwardRef<HTMLUListElement, PromptSuggestionsProps>(function PromptSuggestions(\n { suggestions, onSelect, \"aria-label\": ariaLabelProp, align = \"start\", className },\n ref,\n) {\n const t = useUiText();\n const ariaLabel = ariaLabelProp ?? t(\"promptSuggestions.examplePrompts\", \"Example prompts\");\n return (\n <ul ref={ref} aria-label={ariaLabel} className={cn(\"flex min-w-0 flex-col gap-2\", KAESO_PROMPT_SUGGESTIONS_VARIANTS.align[align].classes, className)}>\n {suggestions.slice(0, 3).map((s) => (\n <li key={s} className={cn(\"flex min-w-0\", align === \"center\" && \"justify-center\")}>\n <button\n type=\"button\"\n onClick={() => onSelect(s)}\n className={cn(\n \"flex h-36 max-w-full min-w-0 cursor-pointer items-center rounded-item px-16 text-body text-fg-secondary transition-control hover:bg-fill-1 hover:text-fg focus-ring-inset\",\n align === \"start\" && \"flex-1\",\n )}\n >\n <span className=\"min-w-0 truncate\">{s}</span>\n </button>\n </li>\n ))}\n </ul>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PromptSuggestions.displayName = \"PromptSuggestions\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"playground.js","names":["__icon_Add01Icon","__icon_ArrowLeft01Icon","__icon_ArrowRight01Icon","__icon_Cancel01Icon","_Fragment","__icon_SlidersHorizontalIcon","__icon_Cancel01Icon","_Fragment","cn","useUiText","Tooltip","useTruncated","Button","IconButton","useField","useFieldControl","withField","NumberInput","Textarea","Slider","Switch","Segmented","KAESO_SELECT_VARIANTS","Select","Popover","Highlight","commandMatch","CommandList","PickerTrigger","PickerPopover","ProviderBadge","providerName","ModelLabel","CapabilityIcons","ReasoningFrame","Markdown","Fragment$1","KAESO_COMPOSER_VARIANTS","KAESO_COMPOSER_DEFAULT_VARIANTS","COARSE","subscribeCoarse","q","onChange","isCoarse","useCoarsePointer","useSyncExternalStore","Composer","placeholderProp","ariaLabelProp","submitLabelProp","stopLabelProp","force","t","placeholder","ariaLabel","submitLabel","stopLabel","text","setText","useControllable","value","defaultValue","onValueChange","waitHint","useId","box","useRef","minRows","size","fade","useCallback","el","grow","maxRows","empty","canSend","disabled","streaming","loading","send","onSubmit","clearOnSubmit","coarse","enterSends","submitOn","onKeyDown","control","className","ref","name","actions","onStop","KAESO_COMPARE_GRID_VARIANTS","KAESO_COMPARE_GRID_DEFAULT_VARIANTS","ColumnContext","FOCUSABLE","focusIn","header","column","preferred","Root","columns","Children","children","isValidElement","count","scroller","current","setCurrent","useState","shown","active","target","changed","onActiveChange","scrollTo","i","reduce","go","next","before","adding","removed","columnsNow","at","removing","index","edges","setEdges","end","ro","onScroll","first","release","full","max","add","onAdd","Add01Icon","addLabel","label","switcher","atStart","atEnd","position","ArrowLeft01Icon","ArrowRight01Icon","col","divider","useStickToEnd","body","content","pinned","useEffect","inner","enabled","last","near","Column","useContext","stickToEnd","onRemove","Cancel01Icon","removeLabel","footer","CompareGrid","KAESO_REASONING_VARIANTS","KAESO_REASONING_DEFAULT_VARIANTS","lastLine","lines","l","Reasoning","heading","title","live","duration","formatDuration","hint","KAESO_RESPONSE_VIEW_VARIANTS","KAESO_RESPONSE_VIEW_DEFAULT_VARIANTS","incompleteText","reason","STREAM_CARET","useEndAnnouncement","said","setSaid","status","was","ended","ResponseView","announce","hasText","hasReasoning","reasoning","thinking","incompleteReason","retry","onRetry","reasoningDuration","reasoningOpen","defaultReasoningOpen","onReasoningOpenChange","error","CLAMP","UserMessage","showAll","showLess","all","setAll","clamped","maxLines","a","Thread","KAESO_RESPONSE_METRICS_VARIANTS","KAESO_RESPONSE_METRICS_DEFAULT_VARIANTS","formatLatency","ms","useElapsed","now","setNow","from","id","requestCost","amount","formatPrice","formatUSD","known","n","Item","reserve","ResponseMetrics","elapsed","startedAt","tokens","inputTokens","outputTokens","hasCost","cost","line","timeToFirstToken","reasoningTokens","show","dash","seconds","formatNumber","time","KAESO_PARAMETER_PANEL_VARIANTS","KAESO_PARAMETER_PANEL_DEFAULT_VARIANTS","efforts","SliderRow","digits","unset","v","min","ParameterPanel","set","patch","shownEfforts","layout","instructions","sampling","defaults","maxOutputTokensLimit","ParameterPopover","titleProp","panel","open","defaultOpen","onOpenChange","trigger","SlidersHorizontalIcon","SELECT_APPEARANCE","KAESO_MODEL_PICKER_VARIANTS","KAESO_MODEL_PICKER_DEFAULT_VARIANTS","ALL","ALL_PROVIDERS","ModelRow","model","option","details","formatContext","providerLabel","modelItem","o","nameOf","withBadge","modelGroups","grouped","providerOrder","models","options","useProviderOrder","locale","useLocale","provider","useMemo","providers","p","b","useModelGroups","groupByProvider","ModelPicker","openProp","props","field","fc","ownOpen","setOwnOpen","setOpen","own","setOwn","chosen","allLabel","query","setQuery","only","setOnly","showDeprecated","setShowDeprecated","wasOpen","setWasOpen","byValue","hasDeprecated","chosenKey","groups","kept","visible","out","recentItems","recent","pick","x","shownProviders","counts","providerFilter","toolbar","summary","appearance","invalid","fullWidth","description","KAESO_PROMPT_SUGGESTIONS_VARIANTS","KAESO_PROMPT_SUGGESTIONS_DEFAULT_VARIANTS","Suggestion","truncated","align","prompt","onSelect","PromptSuggestions","suggestions","s"],"sources":["../../src/components/playground/composer.tsx","../../src/components/playground/compare-grid.tsx","../../src/components/playground/reasoning.tsx","../../src/components/playground/response-view.tsx","../../src/components/playground/response-metrics.tsx","../../src/components/playground/parameter-panel.tsx","../../src/components/playground/model-picker.tsx","../../src/components/playground/prompt-suggestions.tsx"],"sourcesContent":["import { forwardRef, useCallback, useId, useLayoutEffect, useRef, useSyncExternalStore, type FormEvent, type KeyboardEvent, type ReactNode } from \"react\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useControllable } from \"../../utils/use-controllable.js\";\nimport { Button } from \"../button/button.js\";\n\nexport const KAESO_COMPOSER_VARIANTS = {\n size: {\n md: { classes: \"rounded-frame\" },\n sm: { classes: \"rounded-frame\" },\n },\n} as const;\nexport const KAESO_COMPOSER_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nconst COARSE = \"(pointer: coarse)\";\nfunction subscribeCoarse(onChange: () => void) {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const q = window.matchMedia(COARSE);\n q.addEventListener?.(\"change\", onChange);\n return () => q.removeEventListener?.(\"change\", onChange);\n}\nconst isCoarse = () => typeof window !== \"undefined\" && !!window.matchMedia?.(COARSE).matches;\nconst useCoarsePointer = () => useSyncExternalStore(subscribeCoarse, isCoarse, () => false);\n\nexport interface ComposerProps {\n value?: string | undefined;\n defaultValue?: string | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n onSubmit?: ((value: string) => void) | undefined;\n submitOn?: \"enter\" | \"mod-enter\" | undefined;\n onStop?: (() => void) | undefined;\n streaming?: boolean | undefined;\n loading?: boolean | undefined;\n disabled?: boolean | undefined;\n clearOnSubmit?: boolean | undefined;\n placeholder?: string | undefined;\n \"aria-label\"?: string | undefined;\n maxRows?: number | undefined;\n size?: keyof typeof KAESO_COMPOSER_VARIANTS.size | undefined;\n actions?: ReactNode | undefined;\n submitLabel?: string | undefined;\n stopLabel?: string | undefined;\n autoFocus?: boolean | undefined;\n name?: string | undefined;\n \"data-force\"?: string | undefined;\n className?: string | undefined;\n}\n\nexport const Composer = /* @__PURE__ */ forwardRef<HTMLTextAreaElement, ComposerProps>(function Composer(\n {\n value,\n defaultValue = \"\",\n onValueChange,\n onSubmit,\n onStop,\n submitOn = \"enter\",\n streaming = false,\n loading = false,\n disabled = false,\n clearOnSubmit = true,\n placeholder: placeholderProp,\n \"aria-label\": ariaLabelProp,\n maxRows = 10,\n size = \"md\",\n actions,\n submitLabel: submitLabelProp,\n stopLabel: stopLabelProp,\n autoFocus,\n name,\n \"data-force\": force,\n className,\n },\n ref,\n) {\n const t = useUiText();\n const placeholder = placeholderProp ?? t(\"composer.placeholder\", \"Write a prompt\");\n const ariaLabel = ariaLabelProp ?? t(\"composer.prompt\", \"Prompt\");\n const submitLabel = submitLabelProp ?? t(\"composer.send\", \"Send\");\n const stopLabel = stopLabelProp ?? t(\"composer.stop\", \"Stop\");\n const [text, setText] = useControllable(value, defaultValue, onValueChange);\n const waitHint = useId();\n\n const box = useRef<HTMLTextAreaElement | null>(null);\n const minRows = size === \"sm\" ? 1 : 2;\n const fade = useCallback(() => {\n const el = box.current;\n if (!el) return;\n el.style.setProperty(\"--scroll-area-overflow-y-start\", `${Math.max(0, el.scrollTop)}px`);\n el.style.setProperty(\"--scroll-area-overflow-y-end\", `${Math.max(0, el.scrollHeight - el.clientHeight - el.scrollTop)}px`);\n }, []);\n const grow = useCallback(() => {\n const el = box.current;\n if (!el) return;\n el.style.height = \"auto\";\n el.style.height = `${Math.min(Math.max(el.scrollHeight, minRows * 20 + 16), maxRows * 20 + 16)}px`;\n fade();\n }, [maxRows, minRows, fade]);\n useLayoutEffect(grow, [grow, text]);\n\n const empty = text.trim() === \"\";\n const canSend = !disabled && !streaming && !loading && !empty;\n const send = () => {\n if (!canSend) return;\n onSubmit?.(text);\n if (clearOnSubmit && value === undefined) setText(\"\");\n };\n const coarse = useCoarsePointer();\n const enterSends = submitOn === \"enter\" && !coarse;\n const onKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key !== \"Enter\") return;\n if (e.nativeEvent.isComposing || e.keyCode === 229) return;\n const mod = e.metaKey || e.ctrlKey;\n if (!mod && (!enterSends || e.shiftKey || e.altKey)) return;\n e.preventDefault();\n send();\n };\n const onFormSubmit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n send();\n };\n\n return (\n <form\n onSubmit={onFormSubmit}\n onMouseDown={(e) => {\n if (disabled || e.button !== 0 || !e.currentTarget.contains(e.target as Node)) return;\n const control = (e.target as Element).closest(\"textarea, button, a, input, select, label, [role], [tabindex]\");\n if (control && e.currentTarget.contains(control)) return;\n e.preventDefault();\n box.current?.focus();\n }}\n {...(force ? { \"data-force\": force } : {})}\n {...(disabled ? { \"data-disabled\": \"\" } : {})}\n className={cn(\n \"flex min-w-0 cursor-text flex-col material-composer transition-control\",\n KAESO_COMPOSER_VARIANTS.size[size].classes,\n disabled && \"cursor-not-allowed\",\n className,\n )}\n >\n <textarea\n ref={(el) => {\n box.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n rows={minRows}\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onKeyDown}\n onScroll={fade}\n disabled={disabled}\n placeholder={placeholder}\n aria-label={ariaLabel}\n {...(streaming && !empty ? { \"aria-describedby\": waitHint } : {})}\n aria-keyshortcuts={enterSends ? \"Enter Meta+Enter Control+Enter\" : \"Meta+Enter Control+Enter\"}\n {...(enterSends ? { enterKeyHint: \"send\" as const } : {})}\n autoFocus={autoFocus}\n {...(name ? { name } : {})}\n className=\"block w-full min-w-0 resize-none bg-transparent px-16 pt-12 pb-4 text-body text-fg outline-none scrollbar-quiet scroll-fade-y placeholder:text-fg-tertiary disabled:cursor-not-allowed disabled:text-fg-disabled disabled:placeholder:text-fg-disabled\"\n />\n <span id={waitHint} className=\"sr-only\">\n {t(\"composer.stopToSend\", \"A response is arriving; stop it to send this prompt.\")}\n </span>\n <div className=\"flex min-w-0 items-center gap-8 p-8 pt-4 controls-on-fill\">\n <div className=\"flex min-w-0 flex-1 items-center gap-4\">{actions}</div>\n {streaming ? (\n <Button type=\"button\" size=\"sm\" variant=\"secondary\" reserveLabels={[submitLabel, stopLabel]} onClick={() => onStop?.()} disabled={disabled}>\n {stopLabel}\n </Button>\n ) : (\n <Button type=\"submit\" size=\"sm\" variant=\"primary\" reserveLabels={[submitLabel, stopLabel]} loading={loading} disabled={!canSend && !loading}>\n {submitLabel}\n </Button>\n )}\n </div>\n </form>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Composer.displayName = \"Composer\";\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Add01Icon as __icon_Add01Icon, ArrowLeft01Icon as __icon_ArrowLeft01Icon, ArrowRight01Icon as __icon_ArrowRight01Icon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_COMPARE_GRID_VARIANTS = {\n divider: {\n hairline: { classes: \"hairline-l\" },\n none: { classes: \"\" },\n },\n} as const;\nexport const KAESO_COMPARE_GRID_DEFAULT_VARIANTS = { divider: \"hairline\" } as const;\n\ninterface GridContext {\n index: number;\n count: number;\n divider: keyof typeof KAESO_COMPARE_GRID_VARIANTS.divider;\n add: ReactNode;\n removing: (index: number) => void;\n}\nconst ColumnContext = /* @__PURE__ */ createContext<GridContext>({ index: 0, count: 1, divider: \"hairline\", add: null, removing: () => {} });\n\nconst FOCUSABLE = \"button:not([disabled]), [href], input:not([disabled]), select, textarea, [tabindex]:not([tabindex='-1'])\";\n\nfunction focusIn(column: Element | undefined, preferred?: string) {\n const header = column?.querySelector(\"header\");\n const el = (preferred ? header?.querySelector<HTMLElement>(preferred) : null) ?? header?.querySelector<HTMLElement>(FOCUSABLE);\n el?.focus({ preventScroll: true });\n}\n\nexport interface CompareGridProps {\n children: ReactNode;\n \"aria-label\": string;\n onAdd?: (() => void) | undefined;\n addLabel?: string | undefined;\n max?: number | undefined;\n active?: number | undefined;\n onActiveChange?: ((index: number) => void) | undefined;\n divider?: keyof typeof KAESO_COMPARE_GRID_VARIANTS.divider | undefined;\n className?: string | undefined;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, CompareGridProps>(function CompareGrid(\n { children, \"aria-label\": ariaLabel, onAdd, addLabel, max = 4, active, onActiveChange, divider = \"hairline\", className },\n ref,\n) {\n const t = useUiText();\n const columns = Children.toArray(children).filter(isValidElement) as ReactElement<CompareColumnProps>[];\n const count = columns.length;\n const scroller = useRef<HTMLDivElement | null>(null);\n const [current, setCurrent] = useState(0);\n const shown = Math.min(active ?? current, Math.max(0, count - 1));\n const target = useRef<number | null>(null);\n const changed = useRef(onActiveChange);\n useLayoutEffect(() => {\n changed.current = onActiveChange;\n });\n\n const scrollTo = useCallback((i: number) => {\n const el = scroller.current?.children[i] as HTMLElement | undefined;\n const box = scroller.current;\n if (!el || !box) return;\n target.current = box.scrollLeft === el.offsetLeft ? null : i;\n const reduce = typeof matchMedia === \"function\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n box.scrollTo({ left: el.offsetLeft, behavior: reduce ? \"auto\" : \"smooth\" });\n }, []);\n const go = (i: number) => {\n const next = Math.max(0, Math.min(count - 1, i));\n setCurrent(next);\n onActiveChange?.(next);\n scrollTo(next);\n };\n useEffect(() => {\n if (active !== undefined) scrollTo(active);\n }, [active, scrollTo]);\n const before = useRef(count);\n const adding = useRef(false);\n const removed = useRef<number | null>(null);\n useLayoutEffect(() => {\n const columnsNow = scroller.current?.children;\n if (count > before.current) {\n setCurrent(count - 1);\n changed.current?.(count - 1);\n scrollTo(count - 1);\n if (adding.current) focusIn(columnsNow?.[count - 1]);\n } else if (count < before.current && removed.current !== null) {\n const at = Math.min(removed.current, count - 1);\n focusIn(columnsNow?.[at], \"[data-compare-remove]\");\n }\n adding.current = false;\n removed.current = null;\n before.current = count;\n }, [count, scrollTo]);\n const removing = useCallback((index: number) => {\n removed.current = index;\n }, []);\n\n const [edges, setEdges] = useState<{ overflow: boolean; start: boolean; end: boolean } | null>(null);\n const fade = useCallback(() => {\n const box = scroller.current;\n if (!box) return;\n const end = box.scrollWidth - box.clientWidth - box.scrollLeft;\n box.style.setProperty(\"--k-fade-start\", box.scrollLeft > 1 ? \"24px\" : \"0px\");\n box.style.setProperty(\"--k-fade-end\", end > 1 ? \"24px\" : \"0px\");\n const next = { overflow: box.scrollWidth - box.clientWidth > 1, start: box.scrollLeft <= 1, end: end <= 1 };\n setEdges((e) => (e && e.overflow === next.overflow && e.start === next.start && e.end === next.end ? e : next));\n }, []);\n useLayoutEffect(() => {\n const box = scroller.current;\n if (!box || typeof ResizeObserver === \"undefined\") return;\n fade();\n const ro = new ResizeObserver(fade);\n ro.observe(box);\n for (const column of box.children) ro.observe(column);\n return () => ro.disconnect();\n }, [fade, count]);\n\n const onScroll = () => {\n fade();\n const box = scroller.current;\n const first = box?.children[0] as HTMLElement | undefined;\n if (!box || !first || !first.offsetWidth) return;\n const i = Math.max(0, Math.min(count - 1, Math.round(box.scrollLeft / first.offsetWidth)));\n if (target.current !== null) {\n if (i !== target.current) return;\n target.current = null;\n }\n if (i !== shown) {\n setCurrent(i);\n onActiveChange?.(i);\n }\n };\n\n const release = () => {\n target.current = null;\n };\n\n const full = count >= max;\n const add = onAdd ? (\n <IconButton\n icon={__icon_Add01Icon}\n aria-label={addLabel ?? t(\"compareGrid.addModel\", \"Add model\")}\n size=\"sm\"\n onClick={() => {\n adding.current = true;\n onAdd();\n }}\n disabled={full}\n {...(full ? { disabledReason: t(\"compareGrid.compareUpTo\", \"Compare up to {max} at once\", { max }) } : {})}\n />\n ) : null;\n const label = columns[shown]?.props.label ?? \"\";\n const switcher = edges?.overflow ? \"flex\" : \"flex md:hidden\";\n const atStart = edges?.overflow ? edges.start : shown === 0;\n const atEnd = edges?.overflow ? edges.end : shown >= count - 1;\n const position = { index: shown + 1, count };\n\n return (\n <div ref={ref} role=\"group\" aria-label={ariaLabel} className={cn(\"flex h-full min-h-0 min-w-0 flex-col\", className)}>\n {(count > 1 || edges?.overflow) && (\n <div className={cn(\"h-44 shrink-0 items-center gap-4 px-24 hairline-b\", switcher)}>\n <IconButton\n icon={__icon_ArrowLeft01Icon}\n aria-label={t(\"compareGrid.previousColumn\", \"Previous column\")}\n size=\"sm\"\n disabled={atStart}\n onClick={() => go(shown - 1)}\n />\n <span aria-live=\"polite\" className=\"min-w-0 flex-1 truncate text-center text-small text-fg-secondary tabular\">\n <span className=\"sr-only\">{t(\"compareGrid.namedPosition\", \"{label}, {index} of {count}\", { label, ...position })}</span>\n <span aria-hidden>{t(\"compareGrid.position\", \"{index} of {count}\", position)}</span>\n </span>\n <IconButton\n icon={__icon_ArrowRight01Icon}\n aria-label={t(\"compareGrid.nextColumn\", \"Next column\")}\n size=\"sm\"\n disabled={atEnd}\n onClick={() => go(shown + 1)}\n />\n {add && <span className=\"contents md:hidden\">{add}</span>}\n </div>\n )}\n <div className=\"flex min-h-0 min-w-0 flex-1\">\n <div\n ref={scroller}\n onScroll={onScroll}\n onPointerDown={release}\n onWheel={release}\n onTouchStart={release}\n onKeyDown={release}\n className=\"relative min-h-0 min-w-0 flex-1 compare-grid\"\n >\n {columns.map((col, i) => (\n <ColumnContext.Provider key={col.key ?? i} value={{ index: i, count, divider, add: count === 1 ? add : null, removing }}>\n {col}\n </ColumnContext.Provider>\n ))}\n </div>\n {add && (\n <div className={cn(\"hidden w-56 shrink-0 flex-col md:flex\", KAESO_COMPARE_GRID_VARIANTS.divider[divider].classes)}>\n <div className=\"flex h-52 shrink-0 items-center justify-center hairline-b\">{add}</div>\n </div>\n )}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"CompareGrid\";\n\nexport interface CompareColumnProps {\n label: string;\n header: ReactNode;\n actions?: ReactNode | undefined;\n children?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n onRemove?: (() => void) | undefined;\n removeLabel?: string | undefined;\n stickToEnd?: boolean | undefined;\n className?: string | undefined;\n}\n\nfunction useStickToEnd(enabled: boolean) {\n const body = useRef<HTMLDivElement | null>(null);\n const content = useRef<HTMLDivElement | null>(null);\n const pinned = useRef(true);\n useEffect(() => {\n const el = body.current;\n const inner = content.current;\n if (!enabled || !el || !inner || typeof ResizeObserver === \"undefined\") return;\n let last = el.scrollTop;\n const fade = () => {\n el.style.setProperty(\"--scroll-area-overflow-y-start\", `${Math.max(0, el.scrollTop)}px`);\n el.style.setProperty(\"--scroll-area-overflow-y-end\", `${Math.max(0, el.scrollHeight - el.clientHeight - el.scrollTop)}px`);\n };\n const onScroll = () => {\n fade();\n const near = el.scrollHeight - el.scrollTop - el.clientHeight <= 24;\n pinned.current = el.scrollTop < last - 1 ? near : pinned.current || near;\n last = el.scrollTop;\n };\n const ro = new ResizeObserver(() => {\n if (pinned.current) {\n el.scrollTop = el.scrollHeight;\n last = el.scrollTop;\n }\n fade();\n });\n el.addEventListener(\"scroll\", onScroll, { passive: true });\n ro.observe(inner);\n ro.observe(el);\n return () => {\n el.removeEventListener(\"scroll\", onScroll);\n ro.disconnect();\n };\n }, [enabled]);\n return { body, content };\n}\n\nconst Column = /* @__PURE__ */ forwardRef<HTMLElement, CompareColumnProps>(function CompareGridColumn(\n { label, header, actions, children, footer, onRemove, removeLabel, stickToEnd = true, className },\n ref,\n) {\n const t = useUiText();\n const { index, count, divider, add, removing } = useContext(ColumnContext);\n const { body, content } = useStickToEnd(stickToEnd);\n return (\n <section\n ref={ref}\n aria-label={label}\n className={cn(\n \"row-span-3 grid min-h-0 min-w-0 snap-start snap-always grid-rows-subgrid\",\n index > 0 && KAESO_COMPARE_GRID_VARIANTS.divider[divider].classes,\n className,\n )}\n >\n <header className=\"flex h-52 min-w-0 items-center gap-4 px-24 hairline-b\">\n <div className=\"flex min-w-0 flex-1 items-center\">{header}</div>\n {actions}\n {onRemove && count > 1 && (\n <IconButton\n data-compare-remove=\"\"\n icon={__icon_Cancel01Icon}\n aria-label={removeLabel ?? t(\"compareGrid.remove\", \"Remove {label}\", { label })}\n size=\"sm\"\n onClick={() => {\n removing(index);\n onRemove();\n }}\n />\n )}\n {add && <span className=\"flex shrink-0 md:hidden\">{add}</span>}\n </header>\n <div className=\"min-h-0 min-w-0 compare-thread\">\n <div\n ref={body}\n tabIndex={0}\n aria-label={t(\"compareGrid.thread\", \"{label} thread\", { label })}\n role=\"region\"\n className=\"relative h-full min-h-0 overflow-y-auto overscroll-contain outline-none scrollbar-quiet scroll-fade-y\"\n >\n <div ref={content} className=\"flex min-h-full flex-col px-24 pt-16 pb-24\">\n {children}\n </div>\n </div>\n </div>\n {footer !== undefined && footer !== null && (\n <footer className=\"flex min-h-44 min-w-0 items-start px-24 pt-12 pb-12\">\n <div className=\"min-w-0 px-12\">{footer}</div>\n </footer>\n )}\n </section>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Column.displayName = \"CompareGrid.Column\";\n\nexport const CompareGrid = /* @__PURE__ */ Object.assign(Root, { Column });\n","import { forwardRef, type ReactNode } from \"react\";\nimport { formatDuration } from \"../../format/index.js\";\nimport { Markdown } from \"../markdown/markdown.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { ReasoningFrame } from \"./reasoning-frame.js\";\n\nexport const KAESO_REASONING_VARIANTS = {\n state: {\n done: { classes: \"\" },\n live: { classes: \"\" },\n },\n} as const;\nexport const KAESO_REASONING_DEFAULT_VARIANTS = { state: \"done\" } as const;\n\nexport interface ReasoningProps {\n text?: string | undefined;\n live?: boolean | undefined;\n duration?: number | undefined;\n title?: ReactNode | undefined;\n hint?: ReactNode | undefined;\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n children?: ReactNode | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nfunction lastLine(text: string) {\n const lines = text.trim().split(\"\\n\");\n for (let i = lines.length - 1; i >= 0; i--) {\n const l = (lines[i] ?? \"\").replace(/[*_`#>]+/g, \"\").trim();\n if (l) return l;\n }\n return \"\";\n}\n\nexport const Reasoning = /* @__PURE__ */ forwardRef<HTMLDivElement, ReasoningProps>(function Reasoning(\n { text = \"\", live = false, duration, title, hint, open, defaultOpen, onOpenChange, children, className, \"data-force\": force },\n ref,\n) {\n const t = useUiText();\n const heading =\n title ??\n (!live && duration !== undefined\n ? t(\"responseView.thoughtFor\", \"Thought for {duration}\", { duration: formatDuration(duration) })\n : t(\"responseView.thinking\", \"Thinking\"));\n return (\n <ReasoningFrame\n ref={ref}\n heading={heading}\n preview={hint ?? (live ? lastLine(text) : \"\")}\n previewHidden={hint === undefined}\n live={live}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n className={className}\n data-force={force}\n >\n {children ?? <Markdown text={text} size=\"small\" tone=\"secondary\" streaming={live} collapseAfter={0} wrapCode className=\"min-w-0\" />}\n </ReasoningFrame>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Reasoning.displayName = \"Reasoning\";\n","import { forwardRef, useEffect, useId, useRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Button } from \"../button/button.js\";\nimport { Markdown } from \"../markdown/markdown.js\";\nimport { Reasoning } from \"./reasoning.js\";\nimport { useTruncated } from \"../../hooks/use-truncated.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_RESPONSE_VIEW_VARIANTS = {\n status: {\n pending: { classes: \"\" },\n streaming: { classes: \"\" },\n done: { classes: \"\" },\n stopped: { classes: \"\" },\n incomplete: { classes: \"\" },\n error: { classes: \"\" },\n },\n} as const;\nexport const KAESO_RESPONSE_VIEW_DEFAULT_VARIANTS = { status: \"done\" } as const;\n\nexport type ResponseStatus = keyof typeof KAESO_RESPONSE_VIEW_VARIANTS.status;\n\nexport interface ResponseViewProps {\n text?: string | undefined;\n reasoning?: string | undefined;\n status?: ResponseStatus | undefined;\n reasoningDuration?: number | undefined;\n reasoningOpen?: boolean | undefined;\n defaultReasoningOpen?: boolean | undefined;\n onReasoningOpenChange?: ((open: boolean) => void) | undefined;\n incompleteReason?: string | undefined;\n error?: string | undefined;\n onRetry?: (() => void) | undefined;\n footer?: ReactNode | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nfunction incompleteText(t: UiText, reason: string | undefined): string {\n if (reason === \"max_output_tokens\") return t(\"responseView.outputLimit\", \"Stopped at the output limit\");\n if (reason === \"content_filter\") return t(\"responseView.contentFilter\", \"Stopped by the provider's content filter\");\n return t(\"responseView.incomplete\", \"The model ended the response early\");\n}\n\nconst STREAM_CARET = (\n <span\n aria-hidden\n data-caret=\"\"\n className=\"ml-2 inline-block h-16 w-2 rounded-pill bg-fg-tertiary align-text-bottom animate-pulse-quiet forced-line reduced:animate-none\"\n />\n);\n\nfunction useEndAnnouncement(status: ResponseStatus, ended: string) {\n const [said, setSaid] = useState(\"\");\n const before = useRef(status);\n useEffect(() => {\n const was = before.current;\n before.current = status;\n if (status === \"pending\" || status === \"streaming\") setSaid(\"\");\n else if ((was === \"pending\" || was === \"streaming\") && status !== \"error\") setSaid(ended);\n }, [status, ended]);\n return said;\n}\n\nexport const ResponseView = /* @__PURE__ */ forwardRef<HTMLElement, ResponseViewProps>(function ResponseView(\n {\n text = \"\",\n reasoning,\n status = \"done\",\n reasoningDuration,\n reasoningOpen,\n defaultReasoningOpen,\n onReasoningOpenChange,\n incompleteReason,\n error,\n onRetry,\n footer,\n \"aria-label\": ariaLabelProp,\n className,\n },\n ref,\n) {\n const t = useUiText();\n const ariaLabel = ariaLabelProp ?? t(\"responseView.response\", \"Response\");\n const announce = useId();\n const active = status === \"pending\" || status === \"streaming\";\n const hasText = text.trim() !== \"\";\n const hasReasoning = !!reasoning && reasoning.trim() !== \"\";\n const thinking = active && hasReasoning && !hasText;\n const ended =\n status === \"stopped\"\n ? t(\"responseView.endedStopped\", \"{label} stopped\", { label: ariaLabel })\n : status === \"incomplete\"\n ? t(\"responseView.endedIncomplete\", \"{label}: {reason}\", { label: ariaLabel, reason: incompleteText(t, incompleteReason) })\n : t(\"responseView.endedDone\", \"{label} finished\", { label: ariaLabel });\n const said = useEndAnnouncement(status, ended);\n const retry = onRetry ? (\n <Button size=\"sm\" variant=\"secondary\" onClick={onRetry}>\n {t(\"responseView.retry\", \"Retry\")}\n </Button>\n ) : null;\n return (\n <article\n ref={ref}\n aria-label={ariaLabel}\n aria-busy={active || undefined}\n aria-describedby={announce}\n className={cn(\"flex min-w-0 flex-col gap-8\", className)}\n >\n {hasReasoning && (\n <Reasoning\n text={reasoning}\n live={thinking}\n duration={reasoningDuration}\n open={reasoningOpen}\n defaultOpen={defaultReasoningOpen}\n onOpenChange={onReasoningOpenChange}\n />\n )}\n {hasText ? (\n <Markdown\n text={text}\n size=\"lg\"\n streaming={active}\n collapseAfter={0}\n wrapCode\n trailing={status === \"streaming\" ? STREAM_CARET : undefined}\n className=\"markdown-text-inset\"\n />\n ) : active && !hasReasoning ? (\n <div aria-hidden data-pending=\"\" className=\"flex h-22 items-center px-12\">\n <span className=\"h-16 w-2 rounded-pill bg-fg-tertiary animate-pulse-quiet forced-line reduced:animate-none\" />\n </div>\n ) : null}\n {(status === \"stopped\" || status === \"incomplete\") && (\n <div className=\"flex min-h-32 flex-wrap items-center gap-x-12 gap-y-4 px-12\">\n <span className=\"text-small text-fg-secondary\">\n {status === \"incomplete\"\n ? incompleteText(t, incompleteReason)\n : hasText\n ? t(\"responseView.stopped\", \"Stopped\")\n : t(\"responseView.stoppedBeforeResponse\", \"Stopped before a response\")}\n </span>\n {retry}\n </div>\n )}\n {status === \"error\" && (\n <div className=\"flex flex-col items-start gap-8 px-12\">\n <div role=\"alert\" className=\"flex min-w-0 flex-col gap-4\">\n <span className=\"text-small font-medium text-fg\">\n {hasText ? t(\"responseView.failedPartway\", \"The response failed partway\") : t(\"responseView.noResponse\", \"No response\")}\n </span>\n {error && <Markdown text={error} size=\"small\" tone=\"secondary\" className=\"max-w-prose min-w-0\" />}\n </div>\n {retry}\n </div>\n )}\n {status === \"done\" && !hasText && <span className=\"px-12 text-small text-fg-tertiary\">{t(\"responseView.noText\", \"The model returned no text\")}</span>}\n {footer !== undefined && footer !== null && <div className=\"min-w-0 px-12\">{footer}</div>}\n <span id={announce} className=\"sr-only\">\n {status === \"pending\"\n ? t(\"responseView.waiting\", \"Waiting for the response\")\n : status === \"streaming\"\n ? t(\"responseView.responding\", \"Responding\")\n : \"\"}\n </span>\n <span role=\"status\" className=\"sr-only\">\n {said}\n </span>\n </article>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ResponseView.displayName = \"ResponseView\";\n\nexport interface UserMessageProps {\n children: ReactNode;\n maxLines?: 0 | 2 | 3 | 4 | 6 | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nconst CLAMP = { 2: \"line-clamp-2\", 3: \"line-clamp-3\", 4: \"line-clamp-4\", 6: \"line-clamp-6\" } as const;\n\nexport const UserMessage = /* @__PURE__ */ forwardRef<HTMLDivElement, UserMessageProps>(function UserMessage(\n { children, maxLines = 4, \"aria-label\": ariaLabelProp, className },\n ref,\n) {\n const t = useUiText();\n const ariaLabel = ariaLabelProp ?? t(\"userMessage.prompt\", \"Prompt\");\n const showAll = t(\"userMessage.showAll\", \"Show all\");\n const showLess = t(\"userMessage.showLess\", \"Show less\");\n const [all, setAll] = useState(false);\n const body = useId();\n const text = useRef<HTMLParagraphElement | null>(null);\n const clamped = useTruncated(text, maxLines > 0 && !all);\n return (\n <div ref={ref} role=\"group\" aria-label={ariaLabel} className={cn(\"flex min-w-0 flex-col items-start gap-2\", className)}>\n <p\n id={body}\n ref={text}\n className={cn(\n \"max-w-prose min-w-0 px-12 text-body font-medium whitespace-pre-wrap wrap-break-word text-fg-secondary\",\n maxLines !== 0 && !all && CLAMP[maxLines],\n )}\n >\n {children}\n </p>\n {(clamped || all) && (\n <Button size=\"sm\" variant=\"quiet\" aria-expanded={all} aria-controls={body} reserveLabels={[showAll, showLess]} onClick={() => setAll((a) => !a)}>\n {all ? showLess : showAll}\n </Button>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") UserMessage.displayName = \"UserMessage\";\n\nexport interface ThreadProps {\n children: ReactNode;\n className?: string | undefined;\n}\n\nexport const Thread = /* @__PURE__ */ forwardRef<HTMLDivElement, ThreadProps>(function Thread({ children, className }, ref) {\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-col gap-32\", className)}>\n {children}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Thread.displayName = \"Thread\";\n","import { forwardRef, useEffect, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatDuration, formatNumber, formatPrice, formatUSD } from \"../../format/index.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_RESPONSE_METRICS_VARIANTS = {\n size: {\n sm: { classes: \"text-caption gap-x-12 gap-y-2\" },\n md: { classes: \"text-small gap-x-16 gap-y-4\" },\n },\n} as const;\nexport const KAESO_RESPONSE_METRICS_DEFAULT_VARIANTS = { size: \"sm\" } as const;\n\nexport interface ResponseMetricsProps {\n timeToFirstToken?: number | null | undefined;\n duration?: number | null | undefined;\n inputTokens?: number | null | undefined;\n outputTokens?: number | null | undefined;\n reasoningTokens?: number | null | undefined;\n reasoning?: boolean | undefined;\n live?: boolean | undefined;\n startedAt?: number | undefined;\n cost?: string | null | undefined;\n size?: keyof typeof KAESO_RESPONSE_METRICS_VARIANTS.size | undefined;\n className?: string | undefined;\n}\n\nexport function formatLatency(ms: number): string {\n if (!Number.isFinite(ms) || ms < 0) return \"—\";\n return formatDuration(ms, { precise: true });\n}\n\nfunction useElapsed(from: number | undefined) {\n const [now, setNow] = useState(() => Date.now());\n useEffect(() => {\n if (from === undefined) return;\n setNow(Date.now());\n const id = setInterval(() => setNow(Date.now()), 100);\n return () => clearInterval(id);\n }, [from]);\n return from === undefined ? undefined : Math.max(0, now - from);\n}\n\nfunction requestCost(amount: string): string {\n return /[1-9]/.test(amount) ? formatPrice(amount) : formatUSD(\"0\", { decimals: 0 });\n}\n\nfunction known(n: number | null | undefined): n is number {\n return typeof n === \"number\" && Number.isFinite(n);\n}\n\nfunction Item({ label, reserve, children }: { label: string; reserve: string; children: ReactNode }) {\n return (\n <div className=\"flex items-baseline gap-4 whitespace-nowrap\">\n <dt className=\"text-fg-tertiary\">{label}</dt>\n <dd className=\"inline-grid justify-items-start text-fg-secondary tabular\">\n <span className=\"col-start-1 row-start-1\">{children}</span>\n {/* The reserve is drawn by CSS so the value's text stays the value alone. */}\n <span aria-hidden data-reserve={reserve} className=\"invisible col-start-1 row-start-1 reserve-text\" />\n </dd>\n </div>\n );\n}\n\nexport const ResponseMetrics = /* @__PURE__ */ forwardRef<HTMLDListElement, ResponseMetricsProps>(function ResponseMetrics(\n { timeToFirstToken, duration, inputTokens, outputTokens, reasoningTokens, reasoning, live = false, startedAt, cost, size = \"sm\", className },\n ref,\n) {\n const t = useUiText();\n const counting = live && startedAt !== undefined && !known(duration);\n const elapsed = useElapsed(counting ? startedAt : undefined);\n const tokens = known(inputTokens) || known(outputTokens);\n const hasCost = cost != null && cost !== \"\";\n const line = cn(\"flex min-w-0 flex-wrap items-baseline\", KAESO_RESPONSE_METRICS_VARIANTS.size[size].classes, className);\n if (!live && !tokens && !hasCost && !known(timeToFirstToken) && !known(duration) && !known(reasoningTokens)) {\n return <dl ref={ref} aria-label={t(\"responseMetrics.metrics\", \"Metrics\")} className={cn(line, size === \"sm\" ? \"min-h-16\" : \"min-h-18\")} />;\n }\n const show = (value: boolean) => live || value;\n const dash = (\n <span className=\"text-fg-tertiary\">\n <span aria-hidden>—</span>\n <span className=\"sr-only\">{live ? t(\"responseMetrics.notYetKnown\", \"not yet known\") : t(\"responseMetrics.notReported\", \"not reported\")}</span>\n </span>\n );\n const seconds = (ms: number) =>\n ms < 10_000\n ? t(\"format.seconds\", \"{s} s\", { s: formatNumber(Math.floor(ms / 100) / 10, { minimumFractionDigits: 1, maximumFractionDigits: 1 }) })\n : ms < 60_000\n ? t(\"format.seconds\", \"{s} s\", { s: formatNumber(Math.floor(ms / 1000)) })\n : formatDuration(Math.floor(ms / 1000) * 1000);\n const time = formatLatency(8880);\n return (\n <dl ref={ref} aria-label={t(\"responseMetrics.metrics\", \"Metrics\")} className={line}>\n {show(known(timeToFirstToken)) && (\n <Item label={t(\"responseMetrics.firstToken\", \"First token\")} reserve={time}>\n {known(timeToFirstToken) ? formatLatency(timeToFirstToken) : dash}\n </Item>\n )}\n {show(known(duration)) && (\n <Item label={t(\"responseMetrics.total\", \"Total\")} reserve={time}>\n {known(duration) ? formatLatency(duration) : elapsed !== undefined ? <span className=\"text-fg-tertiary\">{seconds(elapsed)}</span> : dash}\n </Item>\n )}\n {show(tokens) && (\n <Item\n label={t(\"responseMetrics.tokens\", \"Tokens\")}\n reserve={t(\"responseMetrics.tokensValue\", \"{input} in · {output} out\", { input: formatNumber(8888), output: formatNumber(888) })}\n >\n {tokens\n ? t(\"responseMetrics.tokensValue\", \"{input} in · {output} out\", {\n input: known(inputTokens) ? formatNumber(inputTokens) : \"—\",\n output: known(outputTokens) ? formatNumber(outputTokens) : \"—\",\n })\n : dash}\n </Item>\n )}\n {(known(reasoningTokens) || reasoning) && (\n <Item label={t(\"responseMetrics.reasoning\", \"Reasoning\")} reserve={formatNumber(888)}>\n {known(reasoningTokens) ? formatNumber(reasoningTokens) : dash}\n </Item>\n )}\n {show(hasCost) && (\n <Item label={t(\"responseMetrics.cost\", \"Cost\")} reserve={formatPrice(\"0.008888\")}>\n {hasCost ? requestCost(cost) : dash}\n </Item>\n )}\n </dl>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ResponseMetrics.displayName = \"ResponseMetrics\";\n","import { forwardRef, type ReactElement } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { SlidersHorizontalIcon as __icon_SlidersHorizontalIcon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { formatNumber } from \"../../format/index.js\";\nimport { Button } from \"../button/button.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { NumberInput } from \"../input/number-input.js\";\nimport { Textarea } from \"../input/textarea.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { Segmented } from \"../segmented/segmented.js\";\nimport { Select } from \"../select/select.js\";\nimport { Slider } from \"../slider/slider.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_PARAMETER_PANEL_VARIANTS = {\n layout: {\n popover: { classes: \"w-full gap-20\" },\n panel: { classes: \"w-full gap-24\" },\n },\n} as const;\nexport const KAESO_PARAMETER_PANEL_DEFAULT_VARIANTS = { layout: \"popover\" } as const;\n\nexport type ReasoningEffort = \"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\nexport type ReasoningSummary = \"auto\" | \"concise\" | \"detailed\" | \"off\";\n\nexport interface PlaygroundParameters {\n instructions?: string | undefined;\n temperature?: number | undefined;\n topP?: number | undefined;\n maxOutputTokens?: number | undefined;\n reasoningEffort?: ReasoningEffort | undefined;\n reasoningSummary?: ReasoningSummary | undefined;\n}\n\nfunction efforts(t: UiText): { value: ReasoningEffort; label: string }[] {\n return [\n { value: \"none\", label: t(\"parameterPanel.effortNone\", \"None\") },\n { value: \"minimal\", label: t(\"parameterPanel.effortMinimal\", \"Minimal\") },\n { value: \"low\", label: t(\"parameterPanel.effortLow\", \"Low\") },\n { value: \"medium\", label: t(\"parameterPanel.effortMedium\", \"Medium\") },\n { value: \"high\", label: t(\"parameterPanel.effortHigh\", \"High\") },\n { value: \"xhigh\", label: t(\"parameterPanel.effortExtraHigh\", \"Extra high\") },\n { value: \"max\", label: t(\"parameterPanel.effortMax\", \"Max\") },\n ];\n}\n\nexport interface ParameterPanelProps {\n value: PlaygroundParameters;\n onValueChange: (next: PlaygroundParameters) => void;\n defaults?: Pick<PlaygroundParameters, \"temperature\" | \"topP\"> | undefined;\n instructions?: boolean | undefined;\n sampling?: boolean | undefined;\n reasoning?: ReasoningEffort[] | boolean | undefined;\n maxOutputTokensLimit?: number | undefined;\n disabled?: boolean | undefined;\n layout?: keyof typeof KAESO_PARAMETER_PANEL_VARIANTS.layout | undefined;\n className?: string | undefined;\n}\n\nfunction SliderRow({\n label,\n value,\n unset,\n min,\n max,\n step,\n digits,\n disabled,\n onChange,\n}: {\n label: string;\n value: number;\n unset: boolean;\n min: number;\n max: number;\n step: number;\n digits: number;\n disabled: boolean;\n onChange: (v: number) => void;\n}) {\n const t = useUiText();\n const shown = formatNumber(value, { minimumFractionDigits: digits, maximumFractionDigits: digits });\n return (\n <div className=\"flex flex-col gap-8\">\n <div className=\"flex items-baseline justify-between gap-12\">\n <span className={cn(\"text-body font-medium\", disabled ? \"text-fg-disabled\" : \"text-fg\")}>{label}</span>\n <span className={cn(\"text-small tabular\", unset ? \"text-fg-tertiary\" : \"text-fg-secondary\")}>\n {unset ? t(\"parameterPanel.valueDefault\", \"{value} (default)\", { value: shown }) : shown}\n </span>\n </div>\n <div className=\"px-8\">\n <Slider\n aria-label={label}\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n formatValue={(v) => formatNumber(v, { minimumFractionDigits: digits, maximumFractionDigits: digits })}\n onValueChange={(v) => onChange(Array.isArray(v) ? (v[0] ?? min) : v)}\n />\n </div>\n </div>\n );\n}\n\nexport const ParameterPanel = /* @__PURE__ */ forwardRef<HTMLDivElement, ParameterPanelProps>(function ParameterPanel(\n {\n value,\n onValueChange,\n defaults,\n instructions = true,\n sampling = true,\n reasoning = false,\n maxOutputTokensLimit,\n disabled = false,\n layout = \"popover\",\n className,\n },\n ref,\n) {\n const t = useUiText();\n const set = (patch: Partial<PlaygroundParameters>) => onValueChange({ ...value, ...patch });\n const all = efforts(t);\n const shownEfforts = reasoning === true ? all : Array.isArray(reasoning) ? all.filter((e) => reasoning.includes(e.value)) : [];\n const changed =\n value.temperature !== undefined ||\n value.topP !== undefined ||\n value.maxOutputTokens !== undefined ||\n value.reasoningEffort !== undefined ||\n value.reasoningSummary !== undefined;\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-col\", KAESO_PARAMETER_PANEL_VARIANTS.layout[layout].classes, className)}>\n {instructions && (\n <Textarea\n label={t(\"parameterPanel.systemInstructions\", \"System instructions\")}\n rows={3}\n maxRows={8}\n placeholder={t(\"parameterPanel.instructionsPlaceholder\", \"You are a helpful assistant.\")}\n value={value.instructions ?? \"\"}\n disabled={disabled}\n onChange={(e) => set({ instructions: e.target.value === \"\" ? undefined : e.target.value })}\n />\n )}\n {sampling && (\n <>\n <SliderRow\n label={t(\"parameterPanel.temperature\", \"Temperature\")}\n value={value.temperature ?? defaults?.temperature ?? 1}\n unset={value.temperature === undefined}\n min={0}\n max={2}\n step={0.05}\n digits={2}\n disabled={disabled}\n onChange={(v) => set({ temperature: v })}\n />\n <SliderRow\n label={t(\"parameterPanel.topP\", \"Top P\")}\n value={value.topP ?? defaults?.topP ?? 1}\n unset={value.topP === undefined}\n min={0}\n max={1}\n step={0.01}\n digits={2}\n disabled={disabled}\n onChange={(v) => set({ topP: v })}\n />\n </>\n )}\n <NumberInput\n label={t(\"parameterPanel.maxOutputTokens\", \"Max output tokens\")}\n size=\"sm\"\n placeholder={t(\"parameterPanel.modelDefault\", \"Model default\")}\n align=\"start\"\n min=\"1\"\n {...(maxOutputTokensLimit\n ? {\n max: String(maxOutputTokensLimit),\n description: t(\"parameterPanel.maxOutputTokensLimit\", \"Up to {max} for this model\", { max: formatNumber(maxOutputTokensLimit) }),\n }\n : {})}\n step=\"256\"\n value={value.maxOutputTokens === undefined ? \"\" : String(value.maxOutputTokens)}\n disabled={disabled}\n onValueChange={(v) => {\n const n = Number(v);\n set({ maxOutputTokens: v.trim() === \"\" || !Number.isFinite(n) || n <= 0 ? undefined : Math.round(n) });\n }}\n />\n {shownEfforts.length > 0 && (\n <>\n <Select\n label={t(\"parameterPanel.reasoningEffort\", \"Reasoning effort\")}\n size=\"sm\"\n fullWidth\n disabled={disabled}\n value={value.reasoningEffort ?? \"default\"}\n options={[{ value: \"default\", label: t(\"parameterPanel.modelDefault\", \"Model default\") }, ...shownEfforts]}\n onValueChange={(v: string) => set({ reasoningEffort: v === \"default\" ? undefined : (v as ReasoningEffort) })}\n />\n <div className=\"flex flex-col gap-8\">\n <span className={cn(\"text-body font-medium\", disabled ? \"text-fg-disabled\" : \"text-fg\")}>\n {t(\"parameterPanel.reasoningSummary\", \"Reasoning summary\")}\n </span>\n <Segmented\n aria-label={t(\"parameterPanel.reasoningSummary\", \"Reasoning summary\")}\n size=\"sm\"\n fullWidth\n disabled={disabled}\n value={value.reasoningSummary ?? \"auto\"}\n options={[\n { value: \"auto\", label: t(\"parameterPanel.summaryAuto\", \"Auto\") },\n { value: \"concise\", label: t(\"parameterPanel.summaryConcise\", \"Concise\") },\n { value: \"detailed\", label: t(\"parameterPanel.summaryDetailed\", \"Detailed\") },\n { value: \"off\", label: t(\"parameterPanel.summaryOff\", \"Off\") },\n ]}\n onValueChange={(v) => set({ reasoningSummary: v === \"auto\" ? undefined : (v as ReasoningSummary) })}\n />\n </div>\n </>\n )}\n <div className=\"flex justify-end\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={disabled || !changed}\n onClick={() => onValueChange(value.instructions !== undefined ? { instructions: value.instructions } : {})}\n >\n {t(\"parameterPanel.resetToDefaults\", \"Reset to defaults\")}\n </Button>\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ParameterPanel.displayName = \"ParameterPanel\";\n\nexport interface ParameterPopoverProps extends Omit<ParameterPanelProps, \"layout\" | \"className\"> {\n trigger?: ReactElement | undefined;\n title?: string | undefined;\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\" | undefined;\n align?: \"start\" | \"center\" | \"end\" | undefined;\n}\n\nexport const ParameterPopover = /* @__PURE__ */ forwardRef<HTMLDivElement, ParameterPopoverProps>(function ParameterPopover(\n { trigger, title: titleProp, open, defaultOpen, onOpenChange, side = \"bottom\", align = \"end\", ...panel },\n ref,\n) {\n const t = useUiText();\n const title = titleProp ?? t(\"parameterPopover.parameters\", \"Parameters\");\n return (\n <Popover\n trapFocus\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n {...(onOpenChange ? { onOpenChange } : {})}\n >\n <Popover.Trigger>{trigger ?? <IconButton icon={__icon_SlidersHorizontalIcon} aria-label={title} size=\"sm\" />}</Popover.Trigger>\n <Popover.Content ref={ref} aria-label={title} side={side} align={align} className=\"w-320 max-w-(--available-width)\">\n <div className=\"relative\">\n <p className=\"mb-16 flex min-h-32 items-center pr-40 text-body font-semibold text-fg\">{title}</p>\n <ParameterPanel {...panel} />\n <div className=\"absolute top-0 right-0\">\n <Popover.Close>\n <IconButton icon={__icon_Cancel01Icon} aria-label={t(\"parameterPopover.close\", \"Close parameters\")} size=\"sm\" />\n </Popover.Close>\n </div>\n </div>\n </Popover.Content>\n </Popover>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ParameterPopover.displayName = \"ParameterPopover\";\n","import { forwardRef, useCallback, useMemo, useState, type ReactNode } from \"react\";\nimport { useLocale, useUiText } from \"../../i18n/context.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatContext, formatNumber } from \"../../format/index.js\";\nimport { CommandList, type CommandListGroup, type CommandListItem } from \"../command-list/command-list.js\";\nimport { PickerPopover, PickerTrigger } from \"../command-list/picker-popover.js\";\nimport { Highlight } from \"../combobox/combobox.js\";\nimport { Switch } from \"../switch/switch.js\";\nimport { KAESO_SELECT_VARIANTS, Select } from \"../select/select.js\";\nimport { commandMatch } from \"../command-list/match.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { CapabilityIcons, ModelLabel, ProviderBadge, providerName, type Capability } from \"../kaeso/identity.js\";\n\nconst SELECT_APPEARANCE = { ghost: \"header\", default: \"default\" } as const;\n\nexport const KAESO_MODEL_PICKER_VARIANTS = {\n appearance: {\n ghost: { classes: KAESO_SELECT_VARIANTS.appearance.header.classes },\n default: { classes: KAESO_SELECT_VARIANTS.appearance.default.classes },\n },\n} as const;\nexport const KAESO_MODEL_PICKER_DEFAULT_VARIANTS = { appearance: \"ghost\" } as const;\n\nexport interface ModelPickerOption {\n value: string;\n provider: string;\n model?: string | undefined;\n name?: string | undefined;\n capabilities?: Capability[] | undefined;\n context?: number | undefined;\n price?: string | undefined;\n note?: string | undefined;\n deprecated?: boolean | undefined;\n disabled?: boolean | undefined;\n}\n\nexport interface ModelPickerProvider {\n id: string;\n name?: string | undefined;\n connected?: boolean | undefined;\n}\n\ninterface BaseProps extends FieldWrapProps {\n options: ModelPickerOption[];\n providers?: ModelPickerProvider[] | undefined;\n recent?: readonly string[] | undefined;\n groupByProvider?: boolean | undefined;\n placeholder?: string | undefined;\n \"aria-label\"?: string | undefined;\n appearance?: keyof typeof KAESO_MODEL_PICKER_VARIANTS.appearance | undefined;\n size?: \"sm\" | \"md\" | undefined;\n fullWidth?: boolean | undefined;\n disabled?: boolean | undefined;\n invalid?: boolean | undefined;\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n \"data-force\"?: string | undefined;\n className?: string | undefined;\n}\nexport interface SingleModelPickerProps extends BaseProps {\n multiple?: false | undefined;\n allLabel?: string | undefined;\n value?: string | null | undefined;\n defaultValue?: string | null | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n}\nexport interface MultiModelPickerProps extends BaseProps {\n multiple: true;\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onValueChange?: ((value: string[]) => void) | undefined;\n}\nexport type ModelPickerProps = SingleModelPickerProps | MultiModelPickerProps;\n\nconst ALL = \"\";\nconst ALL_PROVIDERS = \"*\";\n\nfunction ModelRow({ option, query, providerLabel }: { option: ModelPickerOption; query: string; providerLabel?: string | undefined }) {\n const model = option.model ?? option.value;\n const details = [option.context ? formatContext(option.context) : \"\", option.price ?? \"\"].filter(Boolean).join(\" · \");\n return (\n <>\n {providerLabel !== undefined && (\n <span aria-hidden className=\"flex\">\n <ProviderBadge provider={option.provider} name={providerLabel} />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 items-baseline gap-8\">\n <span className=\"min-w-0 shrink truncate\">\n <Highlight text={option.name ?? model} query={query} />\n </span>\n {option.name && option.name !== model && (\n <span className=\"min-w-0 flex-1 truncate mono text-small font-regular text-fg-tertiary\">\n <Highlight text={model} query={query} />\n </span>\n )}\n </span>\n {option.capabilities && option.capabilities.length > 0 && <CapabilityIcons capabilities={option.capabilities} className=\"hidden sm:flex\" />}\n {(option.note ?? details) && (\n <span className={cn(\"shrink-0 text-caption font-regular tabular\", option.note ? \"text-fg-secondary\" : \"hidden text-fg-tertiary sm:inline\")}>\n {option.note ?? details}\n </span>\n )}\n </>\n );\n}\n\nfunction modelItem(o: ModelPickerOption, nameOf: (provider: string) => string, withBadge: boolean): CommandListItem {\n const model = o.model ?? o.value;\n const providerLabel = nameOf(o.provider);\n return {\n value: o.value,\n label: o.name ?? model,\n keywords: [model, providerLabel, o.provider],\n render: ({ query: q }) => <ModelRow option={o} query={q} {...(withBadge ? { providerLabel } : {})} />,\n ...(o.disabled ? { disabled: true } : {}),\n };\n}\n\nfunction modelGroups(options: ModelPickerOption[], providerOrder: string[], grouped: boolean, nameOf: (provider: string) => string): CommandListGroup[] {\n if (!grouped) return [{ id: \"models\", items: options.map((o) => modelItem(o, nameOf, true)) }];\n return providerOrder.flatMap((id) => {\n const models = options.filter((o) => o.provider === id);\n if (!models.length) return [];\n return [\n {\n id: `provider:${id}`,\n label: nameOf(id),\n leading: (\n <span aria-hidden className=\"flex\">\n <ProviderBadge provider={id} name={nameOf(id)} size=\"sm\" />\n </span>\n ),\n count: models.length,\n items: models.map((o) => modelItem(o, nameOf, false)),\n },\n ];\n });\n}\n\nfunction useProviderOrder(options: ModelPickerOption[], providers: ModelPickerProvider[]) {\n const locale = useLocale();\n const provider = useMemo(() => new Map(providers.map((p) => [p.id, p])), [providers]);\n const nameOf = useCallback((id: string) => providerName(id, provider.get(id)?.name), [provider]);\n const providerOrder = useMemo(() => {\n const ids = [...new Set(options.map((o) => o.provider))];\n return ids.sort(\n (a, b) =>\n Number(!!provider.get(b)?.connected) - Number(!!provider.get(a)?.connected) || nameOf(a).localeCompare(nameOf(b), locale, { sensitivity: \"base\" }),\n );\n }, [options, provider, nameOf, locale]);\n return { nameOf, providerOrder };\n}\n\nexport function useModelGroups(\n options: ModelPickerOption[],\n { providers = [], groupByProvider }: { providers?: ModelPickerProvider[] | undefined; groupByProvider?: boolean | undefined } = {},\n): CommandListGroup[] {\n const { nameOf, providerOrder } = useProviderOrder(options, providers);\n const grouped = groupByProvider ?? providerOrder.length > 1;\n return useMemo(() => modelGroups(options, providerOrder, grouped, nameOf), [options, providerOrder, grouped, nameOf]);\n}\n\nexport const ModelPicker = /* @__PURE__ */ forwardRef<HTMLButtonElement, ModelPickerProps>(function ModelPicker(props, ref) {\n const {\n options,\n providers = [],\n recent = [],\n groupByProvider,\n placeholder,\n \"aria-label\": ariaLabel,\n appearance = \"ghost\",\n size = \"sm\",\n fullWidth,\n disabled,\n invalid,\n open: openProp,\n onOpenChange,\n \"data-force\": force,\n className,\n label,\n description,\n error,\n optional,\n required,\n layout,\n } = props;\n const t = useUiText();\n const field = useField();\n const fc = useFieldControl(props);\n const [ownOpen, setOwnOpen] = useState(false);\n const open = openProp ?? ownOpen;\n const setOpen = (o: boolean) => {\n if (openProp === undefined) setOwnOpen(o);\n onOpenChange?.(o);\n };\n const [own, setOwn] = useState<string | string[] | null>(() => props.defaultValue ?? (props.multiple ? [] : null));\n const current = props.value !== undefined ? props.value : own;\n const chosen = Array.isArray(current) ? current : current ? [current] : [];\n const allLabel = props.multiple ? undefined : props.allLabel;\n const [query, setQuery] = useState(\"\");\n const [only, setOnly] = useState<string | null>(null);\n const [showDeprecated, setShowDeprecated] = useState(false);\n const [wasOpen, setWasOpen] = useState(open);\n if (open !== wasOpen) {\n setWasOpen(open);\n if (open) {\n setQuery(\"\");\n setOnly(null);\n }\n }\n\n const byValue = useMemo(() => new Map(options.map((o) => [o.value, o])), [options]);\n const { nameOf, providerOrder } = useProviderOrder(options, providers);\n const grouped = groupByProvider ?? providerOrder.length > 1;\n const hasDeprecated = options.some((o) => o.deprecated && !chosen.includes(o.value));\n\n const chosenKey = chosen.join(\"\\u0000\");\n const groups = useMemo<CommandListGroup[]>(() => {\n const kept = new Set(chosenKey.split(\"\\u0000\"));\n const visible = (o: ModelPickerOption) => (showDeprecated || !o.deprecated || kept.has(o.value)) && (!only || o.provider === only);\n const out: CommandListGroup[] = [];\n if (allLabel && !only) out.push({ id: \"all\", items: [{ value: ALL, label: allLabel }] });\n const recentItems =\n query.trim() || only ? [] : recent.flatMap((v) => (byValue.get(v) && visible(byValue.get(v)!) ? [modelItem(byValue.get(v)!, nameOf, true)] : []));\n if (recentItems.length) out.push({ id: \"recent\", label: t(\"modelPicker.recent\", \"Recent\"), items: recentItems });\n return [...out, ...modelGroups(options.filter(visible), providerOrder, grouped, nameOf)];\n }, [options, providerOrder, grouped, recent, byValue, query, only, showDeprecated, chosenKey, allLabel, t, nameOf]);\n\n const pick = (v: string) => {\n if (props.multiple) {\n const next = chosen.includes(v) ? chosen.filter((x) => x !== v) : [...chosen, v];\n if (props.value === undefined) setOwn(next);\n props.onValueChange?.(next);\n return;\n }\n if (props.value === undefined) setOwn(v === ALL ? null : v);\n props.onValueChange?.(v);\n setOpen(false);\n };\n\n const shownProviders = useMemo(() => {\n const q = query.trim();\n const kept = new Set(chosenKey.split(\"\\u0000\"));\n const counts = new Map<string, number>();\n for (const o of options) {\n if (o.deprecated && !showDeprecated && !kept.has(o.value)) continue;\n const model = o.model ?? o.value;\n if (q && commandMatch(q, [o.name ?? model, model, nameOf(o.provider), o.provider]) <= 0) continue;\n counts.set(o.provider, (counts.get(o.provider) ?? 0) + 1);\n }\n return providerOrder.filter((id) => counts.has(id) || id === only).map((id) => ({ id, count: counts.get(id) ?? 0 }));\n }, [options, providerOrder, query, showDeprecated, chosenKey, only, nameOf]);\n const providerFilter =\n grouped && providerOrder.length > 1 ? (\n <Select\n aria-label={t(\"modelPicker.provider\", \"Provider\")}\n size=\"sm\"\n appearance=\"ghost\"\n value={only ?? ALL_PROVIDERS}\n onValueChange={(v: string) => setOnly(v === ALL_PROVIDERS ? null : v)}\n options={[\n { value: ALL_PROVIDERS, label: t(\"modelPicker.everyProvider\", \"All providers\") },\n ...shownProviders.map(({ id, count }) => ({\n value: id,\n textValue: nameOf(id),\n label: (\n <span className=\"flex min-w-0 items-center gap-8\">\n <span aria-hidden className=\"flex shrink-0\">\n <ProviderBadge provider={id} size=\"sm\" />\n </span>\n <span className=\"min-w-0 truncate\">{nameOf(id)}</span>\n <span className=\"shrink-0 text-fg-tertiary tabular\">{formatNumber(count)}</span>\n </span>\n ),\n })),\n ]}\n />\n ) : null;\n const toolbar =\n providerFilter || hasDeprecated ? (\n <>\n {providerFilter}\n {hasDeprecated && (\n <Switch size=\"sm\" label={t(\"modelPicker.showDeprecated\", \"Show deprecated\")} checked={showDeprecated} onCheckedChange={setShowDeprecated} />\n )}\n </>\n ) : undefined;\n\n const first = chosen[0] ? byValue.get(chosen[0]) : undefined;\n const summary = props.multiple ? (\n first ? (\n chosen.length === 1 ? (\n <ModelLabel\n provider={first.provider}\n providerName={nameOf(first.provider)}\n model={first.model ?? first.value}\n {...(first.name ? { name: first.name } : {})}\n />\n ) : (\n <span className=\"flex min-w-0 items-center\">\n <span className=\"min-w-0 truncate\">{first.name ?? first.model ?? first.value}</span>{\" \"}\n <span className=\"shrink-0 pl-4 tabular\">{t(\"select.more\", \"+{count}\", { count: String(chosen.length - 1) })}</span>\n </span>\n )\n ) : undefined\n ) : first ? (\n <ModelLabel\n provider={first.provider}\n providerName={nameOf(first.provider)}\n model={first.model ?? first.value}\n {...(first.name ? { name: first.name } : {})}\n />\n ) : current === ALL || (current === null && allLabel) ? (\n allLabel\n ) : undefined;\n const title = ariaLabel ?? (typeof label === \"string\" ? label : t(\"modelPicker.model\", \"Model\"));\n\n const control = (\n <PickerPopover\n title={title}\n width=\"lg\"\n open={open}\n onOpenChange={setOpen}\n trigger={\n <PickerTrigger\n ref={ref}\n appearance={SELECT_APPEARANCE[appearance]}\n size={size}\n {...fc.controlProps}\n {...(ariaLabel || !label ? { \"aria-label\": title } : {})}\n {...(disabled ? { disabled } : {})}\n {...(invalid ? { invalid } : {})}\n {...(fullWidth ? { fullWidth } : {})}\n {...(force ? { \"data-force\": force } : {})}\n {...(first && !props.multiple\n ? {\n title:\n first.name && first.name !== (first.model ?? first.value) ? `${first.name} · ${first.model ?? first.value}` : (first.model ?? first.value),\n }\n : {})}\n placeholder={placeholder ?? (props.multiple ? t(\"modelPicker.chooseSome\", \"Choose models\") : t(\"modelPicker.choose\", \"Choose a model\"))}\n className={cn(\"max-w-full\", !(label || description || error) && className)}\n >\n {summary as ReactNode}\n </PickerTrigger>\n }\n >\n <CommandList\n groups={groups}\n aria-label={title}\n value={props.multiple ? chosen : (chosen[0] ?? (allLabel ? ALL : null))}\n {...(props.multiple ? { multiple: true } : {})}\n onSelect={pick}\n query={query}\n onQueryChange={setQuery}\n placeholder={t(\"modelPicker.search\", \"Search models\")}\n emptyText={t(\"modelPicker.noMatch\", \"No models match\")}\n toolbar={toolbar}\n autoFocus\n />\n </PickerPopover>\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") ModelPicker.displayName = \"ModelPicker\";\n","import { forwardRef, useRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { useTruncated } from \"../../hooks/use-truncated.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\n\nexport const KAESO_PROMPT_SUGGESTIONS_VARIANTS = {\n align: {\n start: { classes: \"items-stretch\" },\n center: { classes: \"items-center text-center\" },\n },\n} as const;\nexport const KAESO_PROMPT_SUGGESTIONS_DEFAULT_VARIANTS = { align: \"start\" } as const;\n\nexport interface PromptSuggestionsProps {\n suggestions: string[];\n onSelect: (prompt: string) => void;\n \"aria-label\"?: string | undefined;\n align?: keyof typeof KAESO_PROMPT_SUGGESTIONS_VARIANTS.align | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nfunction Suggestion({\n prompt,\n align,\n force,\n onSelect,\n}: {\n prompt: string;\n align: keyof typeof KAESO_PROMPT_SUGGESTIONS_VARIANTS.align;\n force: string | undefined;\n onSelect: (prompt: string) => void;\n}) {\n const text = useRef<HTMLSpanElement | null>(null);\n const truncated = useTruncated(text);\n return (\n <li className={cn(\"flex min-w-0\", align === \"center\" && \"justify-center\")}>\n <Tooltip content={prompt} disabled={!truncated} shape=\"multiline\">\n <button\n type=\"button\"\n {...(force ? { \"data-force\": force } : {})}\n onClick={() => onSelect(prompt)}\n className={cn(\n \"flex h-36 max-w-full min-w-0 cursor-pointer items-center rounded-pill px-16 text-body text-fg-secondary transition-control hover:bg-fill-1 hover:text-fg focus-visible:text-fg active:bg-fill-2 active:text-fg focus-ring-inset coarse:h-44\",\n align === \"start\" && \"flex-1\",\n )}\n >\n <span ref={text} className=\"min-w-0 truncate\">\n {prompt}\n </span>\n </button>\n </Tooltip>\n </li>\n );\n}\n\nexport const PromptSuggestions = /* @__PURE__ */ forwardRef<HTMLUListElement, PromptSuggestionsProps>(function PromptSuggestions(\n { suggestions, onSelect, \"aria-label\": ariaLabelProp, align = \"start\", className, \"data-force\": force },\n ref,\n) {\n const t = useUiText();\n const ariaLabel = ariaLabelProp ?? t(\"promptSuggestions.examplePrompts\", \"Example prompts\");\n return (\n <ul ref={ref} aria-label={ariaLabel} className={cn(\"flex min-w-0 flex-col gap-2\", KAESO_PROMPT_SUGGESTIONS_VARIANTS.align[align].classes, className)}>\n {suggestions.slice(0, 3).map((s, i) => (\n <Suggestion key={i} prompt={s} align={align} force={force} onSelect={onSelect} />\n ))}\n </ul>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PromptSuggestions.displayName = \"PromptSuggestions\";\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "../chunks/cn-
|
|
3
|
-
import { n as t, r as n } from "../chunks/portal-context-
|
|
4
|
-
import { i as r, n as i, r as a, t as o } from "../chunks/popover-
|
|
2
|
+
import { t as e } from "../chunks/cn-BjnOAUrA.js";
|
|
3
|
+
import { n as t, r as n } from "../chunks/portal-context-CTatR2Z8.js";
|
|
4
|
+
import { i as r, n as i, r as a, t as o } from "../chunks/popover-Bl5QYqnh.js";
|
|
5
5
|
import { forwardRef as s } from "react";
|
|
6
6
|
import { jsx as c } from "react/jsx-runtime";
|
|
7
7
|
import { PreviewCard as l } from "@base-ui/react/preview-card";
|
|
@@ -24,7 +24,7 @@ function p({ children: e, delay: t = 600 }) {
|
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
26
|
process.env.NODE_ENV !== "production" && (p.displayName = "HoverCard.Trigger");
|
|
27
|
-
var m = /* @__PURE__ */ s(function({ children: r, side: i = "bottom", align: o = "start", sideOffset: s =
|
|
27
|
+
var m = /* @__PURE__ */ s(function({ children: r, side: i = "bottom", align: o = "start", sideOffset: s = 6, className: u }, d) {
|
|
28
28
|
return /* @__PURE__ */ c(l.Portal, {
|
|
29
29
|
container: n(),
|
|
30
30
|
children: /* @__PURE__ */ c(l.Positioner, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover.js","names":["BasePreviewCard","cn","pageBoundary","usePortalContainer","Popover","KAESO_POPOVER_VARIANTS","POPOVER_POPUP","KAESO_POPOVER_DEFAULT_VARIANTS","KAESO_HOVER_CARD_VARIANTS","KAESO_HOVER_CARD_DEFAULT_VARIANTS","HoverRoot","PreviewCard","open","defaultOpen","onOpenChange","o","HoverTrigger","children","HoverContent","className","HoverCard"],"sources":["../../src/components/popover/hover-card.tsx"],"sourcesContent":["import { forwardRef, type ReactElement, type ReactNode } from \"react\";\nimport { PreviewCard as BasePreviewCard } from \"@base-ui/react/preview-card\";\nimport { pageBoundary, usePortalContainer } from \"../../utils/portal-context.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { POPOVER_POPUP, type PopoverContentProps } from \"./popover.js\";\n\nexport const KAESO_HOVER_CARD_VARIANTS = {} as const;\nexport const KAESO_HOVER_CARD_DEFAULT_VARIANTS = {} as const;\n\nexport interface HoverCardProps {\n children: ReactNode;\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n}\n\nfunction HoverRoot({ children, open, defaultOpen, onOpenChange }: HoverCardProps) {\n return (\n <BasePreviewCard.Root\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n {...(onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {})}\n >\n {children}\n </BasePreviewCard.Root>\n );\n}\nif (process.env.NODE_ENV !== \"production\") HoverRoot.displayName = \"HoverCard\";\nfunction HoverTrigger({ children, delay = 600 }: { children: ReactElement; delay?: number | undefined }) {\n return <BasePreviewCard.Trigger render={children} delay={delay} closeDelay={150} />;\n}\nif (process.env.NODE_ENV !== \"production\") HoverTrigger.displayName = \"HoverCard.Trigger\";\nconst HoverContent = /* @__PURE__ */ forwardRef<HTMLDivElement, Omit<PopoverContentProps, \"title\" | \"padding\" | \"aria-label\">>(function HoverCardContent(\n { children, side = \"bottom\", align = \"start\", sideOffset =
|
|
1
|
+
{"version":3,"file":"popover.js","names":["BasePreviewCard","cn","pageBoundary","usePortalContainer","Popover","KAESO_POPOVER_VARIANTS","POPOVER_POPUP","KAESO_POPOVER_DEFAULT_VARIANTS","KAESO_HOVER_CARD_VARIANTS","KAESO_HOVER_CARD_DEFAULT_VARIANTS","HoverRoot","PreviewCard","open","defaultOpen","onOpenChange","o","HoverTrigger","children","HoverContent","className","HoverCard"],"sources":["../../src/components/popover/hover-card.tsx"],"sourcesContent":["import { forwardRef, type ReactElement, type ReactNode } from \"react\";\nimport { PreviewCard as BasePreviewCard } from \"@base-ui/react/preview-card\";\nimport { pageBoundary, usePortalContainer } from \"../../utils/portal-context.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { POPOVER_POPUP, type PopoverContentProps } from \"./popover.js\";\n\nexport const KAESO_HOVER_CARD_VARIANTS = {} as const;\nexport const KAESO_HOVER_CARD_DEFAULT_VARIANTS = {} as const;\n\nexport interface HoverCardProps {\n children: ReactNode;\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n}\n\nfunction HoverRoot({ children, open, defaultOpen, onOpenChange }: HoverCardProps) {\n return (\n <BasePreviewCard.Root\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n {...(onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {})}\n >\n {children}\n </BasePreviewCard.Root>\n );\n}\nif (process.env.NODE_ENV !== \"production\") HoverRoot.displayName = \"HoverCard\";\nfunction HoverTrigger({ children, delay = 600 }: { children: ReactElement; delay?: number | undefined }) {\n return <BasePreviewCard.Trigger render={children} delay={delay} closeDelay={150} />;\n}\nif (process.env.NODE_ENV !== \"production\") HoverTrigger.displayName = \"HoverCard.Trigger\";\nconst HoverContent = /* @__PURE__ */ forwardRef<HTMLDivElement, Omit<PopoverContentProps, \"title\" | \"padding\" | \"aria-label\">>(function HoverCardContent(\n { children, side = \"bottom\", align = \"start\", sideOffset = 6, className },\n ref,\n) {\n return (\n <BasePreviewCard.Portal container={usePortalContainer()}>\n <BasePreviewCard.Positioner\n positionMethod=\"fixed\"\n collisionBoundary={pageBoundary()}\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={8}\n className=\"z-50\"\n >\n <BasePreviewCard.Popup ref={ref} className={cn(POPOVER_POPUP, \"w-320 p-16\", className)}>\n {children}\n </BasePreviewCard.Popup>\n </BasePreviewCard.Positioner>\n </BasePreviewCard.Portal>\n );\n});\nif (process.env.NODE_ENV !== \"production\") HoverContent.displayName = \"HoverCard.Content\";\nexport const HoverCard = /* @__PURE__ */ Object.assign(HoverRoot, { Trigger: HoverTrigger, Content: HoverContent });\n"],"mappings":";;;;;;;;AAMA,IAAaQ,IAA4B,CAAC,GAC7BC,IAAoC,CAAC;AASlD,SAASC,EAAU,EAAE,aAAU,SAAM,gBAAa,mBAAgC;CAChF,OACE,kBAACV,EAAgB,MAAjB;EACE,GAAKY,MAAS,KAAA,IAAuB,CAAC,IAAZ,EAAE,QAAK;EACjC,GAAKC,MAAgB,KAAA,IAA8B,CAAC,IAAnB,EAAE,eAAY;EAC/C,GAAKC,IAAe,EAAE,eAAe,MAAeA,EAAaC,CAAC,EAAE,IAAI,CAAC;EAExE;CACmB,CAAA;AAE1B;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAU,cAAc;AACnE,SAASC,EAAa,EAAE,aAAU,WAAQ,OAA+D;CACvG,OAAO,kBAAChB,EAAgB,SAAjB;EAAyB,QAAQiB;EAAiB;EAAO,YAAY;CAAM,CAAA;AACpF;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAa,cAAc;AACtE,IAAMC,IAA+B,kBAA0F,SAC7H,EAAE,aAAU,UAAO,UAAU,WAAQ,SAAS,gBAAa,GAAG,gBAC9D,GACA;CACA,OACE,kBAAClB,EAAgB,QAAjB;EAAwB,WAAWG,EAAmB;EACpD,UAAA,kBAACH,EAAgB,YAAjB;GACE,gBAAe;GACf,mBAAmBE,EAAa;GAC1B;GACC;GACK;GACZ,kBAAkB;GAClB,WAAU;GAEV,UAAA,kBAACF,EAAgB,OAAjB;IAA4B;IAAK,WAAWC,EAAGK,GAAe,cAAca,CAAS;IAClF;GACoB,CAAA;EACG,CAAA;CACN,CAAA;AAE5B,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAa,cAAc;AACtE,IAAaC,IAA4B,uBAAO,OAAOV,GAAW;CAAE,SAASM;CAAc,SAASE;AAAa,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { r as e } from "../chunks/portal-context-
|
|
2
|
+
import { r as e } from "../chunks/portal-context-CTatR2Z8.js";
|
|
3
3
|
import { useEffect as t, useState as n } from "react";
|
|
4
4
|
import { createPortal as r } from "react-dom";
|
|
5
5
|
//#region src/components/portal/portal.tsx
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "../chunks/cn-
|
|
2
|
+
import { t as e } from "../chunks/cn-BjnOAUrA.js";
|
|
3
3
|
import { forwardRef as t, useMemo as n } from "react";
|
|
4
4
|
import { jsx as r } from "react/jsx-runtime";
|
|
5
5
|
import { encode as i } from "uqr";
|
|
@@ -11,7 +11,7 @@ var a = { size: {
|
|
|
11
11
|
let { path: u, extent: d } = n(() => {
|
|
12
12
|
let { data: e, size: n } = i(t, {
|
|
13
13
|
ecc: "M",
|
|
14
|
-
border:
|
|
14
|
+
border: 4
|
|
15
15
|
}), r = "";
|
|
16
16
|
return e.forEach((e, t) => e.forEach((e, n) => e && (r += `M${n} ${t}h1v1h-1z`))), {
|
|
17
17
|
path: r,
|