@cloudraker/reki 2.6.1 → 2.7.1
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/CHANGELOG.md +20 -0
- package/README.md +1 -1
- package/ai/component-registry.json +1271 -41
- package/ai/component-registry.md +1310 -34
- package/ai/schemas.ts +226 -2
- package/dist/.build-complete +1 -1
- package/dist/ai/schemas.d.ts +554 -5
- package/dist/ai/schemas.d.ts.map +1 -1
- package/dist/ai/schemas.js +1699 -1405
- package/dist/ai/schemas.js.map +1 -1
- package/dist/chunks/{SankeyChart-jwwpwps4npqzbrvn.js → SankeyChart-gogf860o4u387kjn.js} +2 -2
- package/dist/chunks/{SankeyChart-jwwpwps4npqzbrvn.js.map → SankeyChart-gogf860o4u387kjn.js.map} +1 -1
- package/dist/chunks/actor-display-izds1bhw0yswurqm.js +35 -0
- package/dist/chunks/actor-display-izds1bhw0yswurqm.js.map +1 -0
- package/dist/chunks/address-input-g1la0xqrpg8ic6ak.js +80 -0
- package/dist/chunks/address-input-g1la0xqrpg8ic6ak.js.map +1 -0
- package/dist/chunks/array-display-lu1259ap3qrl847e.js +12 -0
- package/dist/chunks/array-display-lu1259ap3qrl847e.js.map +1 -0
- package/dist/chunks/{autocomplete-f4vetako14h2aqsw.js → autocomplete-htuy5t9ag29qhuwa.js} +4 -4
- package/dist/chunks/{autocomplete-f4vetako14h2aqsw.js.map → autocomplete-htuy5t9ag29qhuwa.js.map} +1 -1
- package/dist/chunks/avatar-g40cun6cn17fcxd4.js +57 -0
- package/dist/chunks/avatar-g40cun6cn17fcxd4.js.map +1 -0
- package/dist/chunks/avatar-group-fpcaziey1yu7226v.js +23 -0
- package/dist/chunks/avatar-group-fpcaziey1yu7226v.js.map +1 -0
- package/dist/chunks/{breadcrumbs-d6149hyct4puz3x4.js → breadcrumbs-mq1utzm0q4u2r5v5.js} +2 -2
- package/dist/chunks/{breadcrumbs-d6149hyct4puz3x4.js.map → breadcrumbs-mq1utzm0q4u2r5v5.js.map} +1 -1
- package/dist/chunks/{button-nc5p1h28cwes0tjw.js → button-fvlz1rzc3s1hpyxs.js} +14 -14
- package/dist/chunks/button-fvlz1rzc3s1hpyxs.js.map +1 -0
- package/dist/chunks/{checkbox-g2661n3eodgoispq.js → checkbox-h3kfhlron3b6sfhv.js} +3 -3
- package/dist/chunks/{checkbox-g2661n3eodgoispq.js.map → checkbox-h3kfhlron3b6sfhv.js.map} +1 -1
- package/dist/chunks/chip-iu7movvthovdurgb.js +69 -0
- package/dist/chunks/chip-iu7movvthovdurgb.js.map +1 -0
- package/dist/chunks/circular-progress-bar-ofg0ps2axad1wsr6.js +60 -0
- package/dist/chunks/circular-progress-bar-ofg0ps2axad1wsr6.js.map +1 -0
- package/dist/chunks/{clipboard-text-g3659lejx2d7i93e.js → clipboard-text-ogue8iq06n1z7q7v.js} +4 -4
- package/dist/chunks/{clipboard-text-g3659lejx2d7i93e.js.map → clipboard-text-ogue8iq06n1z7q7v.js.map} +1 -1
- package/dist/chunks/{collapsible-ndvmgo29s5iqfcor.js → collapsible-ivqat099ene9z3bv.js} +2 -2
- package/dist/chunks/{collapsible-ndvmgo29s5iqfcor.js.map → collapsible-ivqat099ene9z3bv.js.map} +1 -1
- package/dist/chunks/color-sample-h7hspma3rb91go3z.js +32 -0
- package/dist/chunks/color-sample-h7hspma3rb91go3z.js.map +1 -0
- package/dist/chunks/{combobox-i38w67netm8ukw4f.js → combobox-iytvpzp5poljxgek.js} +4 -4
- package/dist/chunks/{combobox-i38w67netm8ukw4f.js.map → combobox-iytvpzp5poljxgek.js.map} +1 -1
- package/dist/chunks/{command-palette-fe5cjfdgsg3t17vq.js → command-palette-k6vrx8ely8rmf4a5.js} +4 -4
- package/dist/chunks/command-palette-k6vrx8ely8rmf4a5.js.map +1 -0
- package/dist/chunks/data-grid-i7kfgm7zr5tj0e0a.js +3110 -0
- package/dist/chunks/data-grid-i7kfgm7zr5tj0e0a.js.map +1 -0
- package/dist/chunks/{dialog-m4go8xof25fospqo.js → dialog-ggx34i6k4eulfvgk.js} +3 -3
- package/dist/chunks/{dialog-m4go8xof25fospqo.js.map → dialog-ggx34i6k4eulfvgk.js.map} +1 -1
- package/dist/chunks/double-text-input-k0i5xnfq6khv01wu.js +39 -0
- package/dist/chunks/double-text-input-k0i5xnfq6khv01wu.js.map +1 -0
- package/dist/chunks/{dropdown-j5uht8mn4z7xc9fc.js → dropdown-bt1lfs2jli0khnex.js} +2 -2
- package/dist/chunks/{dropdown-j5uht8mn4z7xc9fc.js.map → dropdown-bt1lfs2jli0khnex.js.map} +1 -1
- package/dist/chunks/emails-display-nsbqzscr0f9bqimg.js +12 -0
- package/dist/chunks/emails-display-nsbqzscr0f9bqimg.js.map +1 -0
- package/dist/chunks/{empty-kazxr0248zjemw6n.js → empty-dxy8jti5bsxxh905.js} +2 -2
- package/dist/chunks/{empty-kazxr0248zjemw6n.js.map → empty-dxy8jti5bsxxh905.js.map} +1 -1
- package/dist/chunks/expandable-list-bjceh467ocazog53.js +26 -0
- package/dist/chunks/expandable-list-bjceh467ocazog53.js.map +1 -0
- package/dist/chunks/{field-fe5m8z3vbpvtctbe.js → field-b0aywboxuss4rpu7.js} +3 -3
- package/dist/chunks/{field-fe5m8z3vbpvtctbe.js.map → field-b0aywboxuss4rpu7.js.map} +1 -1
- package/dist/chunks/{input-area-ciw85g3fno06t4tw.js → input-area-cuijpofpark5w5qq.js} +4 -4
- package/dist/chunks/{input-area-ciw85g3fno06t4tw.js.map → input-area-cuijpofpark5w5qq.js.map} +1 -1
- package/dist/chunks/{input-i5nefqk213n4z7pr.js → input-eno4q26x68rx3i8q.js} +3 -3
- package/dist/chunks/{input-i5nefqk213n4z7pr.js.map → input-eno4q26x68rx3i8q.js.map} +1 -1
- package/dist/chunks/{input-group-mo7tq7jr19hmgor5.js → input-group-dl9htnza7kq4om4c.js} +5 -5
- package/dist/chunks/{input-group-mo7tq7jr19hmgor5.js.map → input-group-dl9htnza7kq4om4c.js.map} +1 -1
- package/dist/chunks/json-display-fy0t2khc4itn130p.js +31 -0
- package/dist/chunks/json-display-fy0t2khc4itn130p.js.map +1 -0
- package/dist/chunks/{label-fcho4757rbdess0c.js → label-ld57mr4ocdxsf06p.js} +3 -3
- package/dist/chunks/{label-fcho4757rbdess0c.js.map → label-ld57mr4ocdxsf06p.js.map} +1 -1
- package/dist/chunks/{layer-card-kzu48dhzxm3e9p4u.js → layer-card-iuquuc1w3116umfw.js} +2 -2
- package/dist/chunks/{layer-card-kzu48dhzxm3e9p4u.js.map → layer-card-iuquuc1w3116umfw.js.map} +1 -1
- package/dist/chunks/{link-j2gu5dr3nr4i4yf0.js → link-8pn6y27h3m3ud8fl.js} +2 -2
- package/dist/chunks/{link-j2gu5dr3nr4i4yf0.js.map → link-8pn6y27h3m3ud8fl.js.map} +1 -1
- package/dist/chunks/link-chip-cz5v6lw9icmcndzl.js +58 -0
- package/dist/chunks/link-chip-cz5v6lw9icmcndzl.js.map +1 -0
- package/dist/chunks/links-display-dfaehepz86s2wxx1.js +20 -0
- package/dist/chunks/links-display-dfaehepz86s2wxx1.js.map +1 -0
- package/dist/chunks/menu-item-kyqq7o2krghxbpw5.js +178 -0
- package/dist/chunks/menu-item-kyqq7o2krghxbpw5.js.map +1 -0
- package/dist/chunks/{menubar-ir5gbjmsizsddz7g.js → menubar-56kqktsa5a28xyzj.js} +2 -2
- package/dist/chunks/{menubar-ir5gbjmsizsddz7g.js.map → menubar-56kqktsa5a28xyzj.js.map} +1 -1
- package/dist/chunks/{meter-o5yd7ctjf80vvyjx.js → meter-b5rnmibceu4z8i6a.js} +2 -2
- package/dist/chunks/{meter-o5yd7ctjf80vvyjx.js.map → meter-b5rnmibceu4z8i6a.js.map} +1 -1
- package/dist/chunks/notification-counter-hiq85elmcydnhzoo.js +30 -0
- package/dist/chunks/notification-counter-hiq85elmcydnhzoo.js.map +1 -0
- package/dist/chunks/overflowing-text-mm8bkx7voc6h8ra4.js +49 -0
- package/dist/chunks/overflowing-text-mm8bkx7voc6h8ra4.js.map +1 -0
- package/dist/chunks/{pagination-bryw6rohfr7mm3km.js → pagination-iczb9ooenevbxslx.js} +3 -3
- package/dist/chunks/{pagination-bryw6rohfr7mm3km.js.map → pagination-iczb9ooenevbxslx.js.map} +1 -1
- package/dist/chunks/phones-display-cdsrl07dv6obf4eg.js +19 -0
- package/dist/chunks/phones-display-cdsrl07dv6obf4eg.js.map +1 -0
- package/dist/chunks/pill-pfpvgbcnqhtyksz5.js +22 -0
- package/dist/chunks/pill-pfpvgbcnqhtyksz5.js.map +1 -0
- package/dist/chunks/{popover-elxcmvv7mu7m7uk4.js → popover-ldqdlpv6sqvkjume.js} +2 -2
- package/dist/chunks/{popover-elxcmvv7mu7m7uk4.js.map → popover-ldqdlpv6sqvkjume.js.map} +1 -1
- package/dist/chunks/{radio-newyq331uk4lltr6.js → radio-lyeniil3x20cyb8z.js} +2 -2
- package/dist/chunks/{radio-newyq331uk4lltr6.js.map → radio-lyeniil3x20cyb8z.js.map} +1 -1
- package/dist/chunks/rating-yyd4t8e62ast4obo.js +48 -0
- package/dist/chunks/rating-yyd4t8e62ast4obo.js.map +1 -0
- package/dist/chunks/record-board-iapx3cw5rusehrta.js +3395 -0
- package/dist/chunks/record-board-iapx3cw5rusehrta.js.map +1 -0
- package/dist/chunks/{select-h5480mbro0ypxu0b.js → select-hmoccee4zagd34tq.js} +6 -6
- package/dist/chunks/{select-h5480mbro0ypxu0b.js.map → select-hmoccee4zagd34tq.js.map} +1 -1
- package/dist/chunks/{sensitive-input-lqugq6uvx0lkpu0u.js → sensitive-input-nkfx72rduc7aijaf.js} +4 -4
- package/dist/chunks/{sensitive-input-lqugq6uvx0lkpu0u.js.map → sensitive-input-nkfx72rduc7aijaf.js.map} +1 -1
- package/dist/chunks/{sidebar-noz668nhdu2gso12.js → sidebar-gwfibai76tw069d4.js} +34 -33
- package/dist/chunks/sidebar-gwfibai76tw069d4.js.map +1 -0
- package/dist/chunks/status-ot0itdwxloqgahi0.js +29 -0
- package/dist/chunks/status-ot0itdwxloqgahi0.js.map +1 -0
- package/dist/chunks/{surface-cyxme7mlr49l33f8.js → surface-fqmma34ju0agh5pe.js} +2 -2
- package/dist/chunks/{surface-cyxme7mlr49l33f8.js.map → surface-fqmma34ju0agh5pe.js.map} +1 -1
- package/dist/chunks/{switch-bigo96fyjlh7ivbi.js → switch-nhtmn65n5s7gg6vb.js} +3 -3
- package/dist/chunks/{switch-bigo96fyjlh7ivbi.js.map → switch-nhtmn65n5s7gg6vb.js.map} +1 -1
- package/dist/chunks/{table-mwcmwp6a80zvyrxw.js → table-cjj894o3niouq4tg.js} +2 -2
- package/dist/chunks/{table-mwcmwp6a80zvyrxw.js.map → table-cjj894o3niouq4tg.js.map} +1 -1
- package/dist/chunks/{tabs-e4pcjkw94kpe35x0.js → tabs-klj6wapad6fpd9at.js} +14 -16
- package/dist/chunks/tabs-klj6wapad6fpd9at.js.map +1 -0
- package/dist/chunks/tag-h5kwf5eh7dyyvc2c.js +58 -0
- package/dist/chunks/tag-h5kwf5eh7dyyvc2c.js.map +1 -0
- package/dist/chunks/timeline-lqurr2lcxkayomk2.js +109 -0
- package/dist/chunks/timeline-lqurr2lcxkayomk2.js.map +1 -0
- package/dist/chunks/{toast-ivr4097bstjcjotf.js → toast-j47dl441zpxa1yw3.js} +3 -3
- package/dist/chunks/{toast-ivr4097bstjcjotf.js.map → toast-j47dl441zpxa1yw3.js.map} +1 -1
- package/dist/chunks/{tooltip-ncaia8n1lavkyw8n.js → tooltip-bkgxuz77xzg5fooc.js} +2 -2
- package/dist/chunks/{tooltip-ncaia8n1lavkyw8n.js.map → tooltip-bkgxuz77xzg5fooc.js.map} +1 -1
- package/dist/chunks/{vendor-base-ui-bgl9g5nkvqy3tn36.js → vendor-base-ui-djdjrfuoxlb1lubi.js} +2358 -2358
- package/dist/chunks/{vendor-base-ui-bgl9g5nkvqy3tn36.js.map → vendor-base-ui-djdjrfuoxlb1lubi.js.map} +1 -1
- package/dist/code.js +1 -1
- package/dist/components/actor-display.js +6 -0
- package/dist/components/actor-display.js.map +1 -0
- package/dist/components/address-input.js +6 -0
- package/dist/components/address-input.js.map +1 -0
- package/dist/components/array-display.js +6 -0
- package/dist/components/array-display.js.map +1 -0
- package/dist/components/autocomplete.js +1 -1
- package/dist/components/avatar-group.js +6 -0
- package/dist/components/avatar-group.js.map +1 -0
- package/dist/components/avatar.js +6 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/breadcrumbs.js +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/chart.js +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/chip.js +8 -0
- package/dist/components/chip.js.map +1 -0
- package/dist/components/circular-progress-bar.js +6 -0
- package/dist/components/circular-progress-bar.js.map +1 -0
- package/dist/components/clipboard-text.js +1 -1
- package/dist/components/collapsible.js +1 -1
- package/dist/components/color-sample.js +6 -0
- package/dist/components/color-sample.js.map +1 -0
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-palette.js +1 -1
- package/dist/components/data-grid.js +8 -0
- package/dist/components/data-grid.js.map +1 -0
- package/dist/components/dialog.js +1 -1
- package/dist/components/double-text-input.js +6 -0
- package/dist/components/double-text-input.js.map +1 -0
- package/dist/components/dropdown.js +1 -1
- package/dist/components/emails-display.js +6 -0
- package/dist/components/emails-display.js.map +1 -0
- package/dist/components/empty.js +1 -1
- package/dist/components/expandable-list.js +6 -0
- package/dist/components/expandable-list.js.map +1 -0
- package/dist/components/field.js +1 -1
- package/dist/components/input-group.js +1 -1
- package/dist/components/input.js +3 -3
- package/dist/components/json-display.js +6 -0
- package/dist/components/json-display.js.map +1 -0
- package/dist/components/label.js +1 -1
- package/dist/components/layer-card.js +1 -1
- package/dist/components/link-chip.js +6 -0
- package/dist/components/link-chip.js.map +1 -0
- package/dist/components/link.js +1 -1
- package/dist/components/links-display.js +6 -0
- package/dist/components/links-display.js.map +1 -0
- package/dist/components/menu-item.js +11 -0
- package/dist/components/menu-item.js.map +1 -0
- package/dist/components/menubar.js +1 -1
- package/dist/components/meter.js +1 -1
- package/dist/components/notification-counter.js +6 -0
- package/dist/components/notification-counter.js.map +1 -0
- package/dist/components/overflowing-text.js +6 -0
- package/dist/components/overflowing-text.js.map +1 -0
- package/dist/components/pagination.js +1 -1
- package/dist/components/phones-display.js +6 -0
- package/dist/components/phones-display.js.map +1 -0
- package/dist/components/pill.js +6 -0
- package/dist/components/pill.js.map +1 -0
- package/dist/components/popover.js +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/rating.js +6 -0
- package/dist/components/rating.js.map +1 -0
- package/dist/components/record-board.js +8 -0
- package/dist/components/record-board.js.map +1 -0
- package/dist/components/select.js +1 -1
- package/dist/components/sensitive-input.js +1 -1
- package/dist/components/sidebar.js +1 -1
- package/dist/components/status.js +6 -0
- package/dist/components/status.js.map +1 -0
- package/dist/components/surface.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/tag.js +10 -0
- package/dist/components/tag.js.map +1 -0
- package/dist/components/timeline.js +8 -0
- package/dist/components/timeline.js.map +1 -0
- package/dist/components/toast.js +2 -2
- package/dist/components/tooltip.js +1 -1
- package/dist/index.js +380 -251
- package/dist/index.js.map +1 -1
- package/dist/primitives/accordion.js +1 -1
- package/dist/primitives/alert-dialog.js +1 -1
- package/dist/primitives/autocomplete.js +1 -1
- package/dist/primitives/avatar.js +1 -1
- package/dist/primitives/button.js +1 -1
- package/dist/primitives/checkbox-group.js +1 -1
- package/dist/primitives/checkbox.js +1 -1
- package/dist/primitives/collapsible.js +1 -1
- package/dist/primitives/combobox.js +1 -1
- package/dist/primitives/context-menu.js +1 -1
- package/dist/primitives/csp-provider.js +1 -1
- package/dist/primitives/dialog.js +1 -1
- package/dist/primitives/direction-provider.js +1 -1
- package/dist/primitives/drawer.js +1 -1
- package/dist/primitives/field.js +1 -1
- package/dist/primitives/fieldset.js +1 -1
- package/dist/primitives/form.js +1 -1
- package/dist/primitives/input.js +1 -1
- package/dist/primitives/menu.js +1 -1
- package/dist/primitives/menubar.js +1 -1
- package/dist/primitives/meter.js +1 -1
- package/dist/primitives/navigation-menu.js +1 -1
- package/dist/primitives/number-field.js +1 -1
- package/dist/primitives/otp-field.js +1 -1
- package/dist/primitives/popover.js +1 -1
- package/dist/primitives/preview-card.js +1 -1
- package/dist/primitives/progress.js +1 -1
- package/dist/primitives/radio-group.js +1 -1
- package/dist/primitives/radio.js +1 -1
- package/dist/primitives/scroll-area.js +1 -1
- package/dist/primitives/select.js +1 -1
- package/dist/primitives/separator.js +1 -1
- package/dist/primitives/slider.js +1 -1
- package/dist/primitives/switch.js +1 -1
- package/dist/primitives/tabs.js +1 -1
- package/dist/primitives/toast.js +1 -1
- package/dist/primitives/toggle-group.js +1 -1
- package/dist/primitives/toggle.js +1 -1
- package/dist/primitives/toolbar.js +1 -1
- package/dist/primitives/tooltip.js +1 -1
- package/dist/primitives.js +1 -1
- package/dist/scripts/theme-generator/config.d.ts.map +1 -1
- package/dist/scripts/theme-generator/config.js +229 -5
- package/dist/scripts/theme-generator/config.js.map +1 -1
- package/dist/src/components/actor-display/actor-display.d.ts +33 -0
- package/dist/src/components/actor-display/actor-display.d.ts.map +1 -0
- package/dist/src/components/actor-display/index.d.ts +2 -0
- package/dist/src/components/actor-display/index.d.ts.map +1 -0
- package/dist/src/components/address-input/address-input.d.ts +42 -0
- package/dist/src/components/address-input/address-input.d.ts.map +1 -0
- package/dist/src/components/address-input/index.d.ts +2 -0
- package/dist/src/components/address-input/index.d.ts.map +1 -0
- package/dist/src/components/array-display/array-display.d.ts +30 -0
- package/dist/src/components/array-display/array-display.d.ts.map +1 -0
- package/dist/src/components/array-display/index.d.ts +2 -0
- package/dist/src/components/array-display/index.d.ts.map +1 -0
- package/dist/src/components/avatar/avatar.d.ts +80 -0
- package/dist/src/components/avatar/avatar.d.ts.map +1 -0
- package/dist/src/components/avatar/index.d.ts +2 -0
- package/dist/src/components/avatar/index.d.ts.map +1 -0
- package/dist/src/components/avatar-group/avatar-group.d.ts +35 -0
- package/dist/src/components/avatar-group/avatar-group.d.ts.map +1 -0
- package/dist/src/components/avatar-group/index.d.ts +2 -0
- package/dist/src/components/avatar-group/index.d.ts.map +1 -0
- package/dist/src/components/button/button.d.ts +4 -4
- package/dist/src/components/chip/chip.d.ts +78 -0
- package/dist/src/components/chip/chip.d.ts.map +1 -0
- package/dist/src/components/chip/index.d.ts +2 -0
- package/dist/src/components/chip/index.d.ts.map +1 -0
- package/dist/src/components/circular-progress-bar/circular-progress-bar.d.ts +35 -0
- package/dist/src/components/circular-progress-bar/circular-progress-bar.d.ts.map +1 -0
- package/dist/src/components/circular-progress-bar/index.d.ts +2 -0
- package/dist/src/components/circular-progress-bar/index.d.ts.map +1 -0
- package/dist/src/components/color-sample/color-sample.d.ts +56 -0
- package/dist/src/components/color-sample/color-sample.d.ts.map +1 -0
- package/dist/src/components/color-sample/index.d.ts +2 -0
- package/dist/src/components/color-sample/index.d.ts.map +1 -0
- package/dist/src/components/data-grid/data-grid.d.ts +25 -0
- package/dist/src/components/data-grid/data-grid.d.ts.map +1 -0
- package/dist/src/components/data-grid/index.d.ts +3 -0
- package/dist/src/components/data-grid/index.d.ts.map +1 -0
- package/dist/src/components/data-grid/types.d.ts +103 -0
- package/dist/src/components/data-grid/types.d.ts.map +1 -0
- package/dist/src/components/data-grid/use-data-grid-edit.d.ts +34 -0
- package/dist/src/components/data-grid/use-data-grid-edit.d.ts.map +1 -0
- package/dist/src/components/double-text-input/double-text-input.d.ts +47 -0
- package/dist/src/components/double-text-input/double-text-input.d.ts.map +1 -0
- package/dist/src/components/double-text-input/index.d.ts +2 -0
- package/dist/src/components/double-text-input/index.d.ts.map +1 -0
- package/dist/src/components/emails-display/emails-display.d.ts +30 -0
- package/dist/src/components/emails-display/emails-display.d.ts.map +1 -0
- package/dist/src/components/emails-display/index.d.ts +2 -0
- package/dist/src/components/emails-display/index.d.ts.map +1 -0
- package/dist/src/components/expandable-list/expandable-list.d.ts +41 -0
- package/dist/src/components/expandable-list/expandable-list.d.ts.map +1 -0
- package/dist/src/components/expandable-list/index.d.ts +2 -0
- package/dist/src/components/expandable-list/index.d.ts.map +1 -0
- package/dist/src/components/json-display/index.d.ts +2 -0
- package/dist/src/components/json-display/index.d.ts.map +1 -0
- package/dist/src/components/json-display/json-display.d.ts +29 -0
- package/dist/src/components/json-display/json-display.d.ts.map +1 -0
- package/dist/src/components/link-chip/index.d.ts +2 -0
- package/dist/src/components/link-chip/index.d.ts.map +1 -0
- package/dist/src/components/link-chip/link-chip.d.ts +50 -0
- package/dist/src/components/link-chip/link-chip.d.ts.map +1 -0
- package/dist/src/components/links-display/index.d.ts +2 -0
- package/dist/src/components/links-display/index.d.ts.map +1 -0
- package/dist/src/components/links-display/links-display.d.ts +37 -0
- package/dist/src/components/links-display/links-display.d.ts.map +1 -0
- package/dist/src/components/menu-item/index.d.ts +2 -0
- package/dist/src/components/menu-item/index.d.ts.map +1 -0
- package/dist/src/components/menu-item/menu-item.d.ts +104 -0
- package/dist/src/components/menu-item/menu-item.d.ts.map +1 -0
- package/dist/src/components/notification-counter/index.d.ts +2 -0
- package/dist/src/components/notification-counter/index.d.ts.map +1 -0
- package/dist/src/components/notification-counter/notification-counter.d.ts +51 -0
- package/dist/src/components/notification-counter/notification-counter.d.ts.map +1 -0
- package/dist/src/components/overflowing-text/index.d.ts +2 -0
- package/dist/src/components/overflowing-text/index.d.ts.map +1 -0
- package/dist/src/components/overflowing-text/overflowing-text.d.ts +48 -0
- package/dist/src/components/overflowing-text/overflowing-text.d.ts.map +1 -0
- package/dist/src/components/phones-display/index.d.ts +2 -0
- package/dist/src/components/phones-display/index.d.ts.map +1 -0
- package/dist/src/components/phones-display/phones-display.d.ts +31 -0
- package/dist/src/components/phones-display/phones-display.d.ts.map +1 -0
- package/dist/src/components/pill/index.d.ts +2 -0
- package/dist/src/components/pill/index.d.ts.map +1 -0
- package/dist/src/components/pill/pill.d.ts +31 -0
- package/dist/src/components/pill/pill.d.ts.map +1 -0
- package/dist/src/components/rating/index.d.ts +2 -0
- package/dist/src/components/rating/index.d.ts.map +1 -0
- package/dist/src/components/rating/rating.d.ts +37 -0
- package/dist/src/components/rating/rating.d.ts.map +1 -0
- package/dist/src/components/record-board/index.d.ts +2 -0
- package/dist/src/components/record-board/index.d.ts.map +1 -0
- package/dist/src/components/record-board/record-board.d.ts +75 -0
- package/dist/src/components/record-board/record-board.d.ts.map +1 -0
- package/dist/src/components/sidebar/sidebar.d.ts.map +1 -1
- package/dist/src/components/status/index.d.ts +2 -0
- package/dist/src/components/status/index.d.ts.map +1 -0
- package/dist/src/components/status/status.d.ts +52 -0
- package/dist/src/components/status/status.d.ts.map +1 -0
- package/dist/src/components/tabs/tabs.d.ts.map +1 -1
- package/dist/src/components/tag/index.d.ts +2 -0
- package/dist/src/components/tag/index.d.ts.map +1 -0
- package/dist/src/components/tag/tag.d.ts +153 -0
- package/dist/src/components/tag/tag.d.ts.map +1 -0
- package/dist/src/components/timeline/index.d.ts +2 -0
- package/dist/src/components/timeline/index.d.ts.map +1 -0
- package/dist/src/components/timeline/timeline.d.ts +155 -0
- package/dist/src/components/timeline/timeline.d.ts.map +1 -0
- package/dist/src/index.d.ts +26 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/utils/use-is-dark-mode.d.ts +18 -0
- package/dist/src/utils/use-is-dark-mode.d.ts.map +1 -0
- package/dist/styles/reki-standalone.css +1 -1
- package/dist/styles/reki.css +19 -0
- package/dist/styles/theme-fedramp.css +6 -0
- package/dist/styles/theme-reki.css +164 -10
- package/package.json +118 -4
- package/scripts/component-registry/index.ts +6 -11
- package/scripts/extract-demo-examples.ts +323 -0
- package/scripts/generate-stories.ts +205 -0
- package/scripts/theme-generator/config.ts +230 -5
- package/dist/chunks/button-nc5p1h28cwes0tjw.js.map +0 -1
- package/dist/chunks/command-palette-fe5cjfdgsg3t17vq.js.map +0 -1
- package/dist/chunks/sidebar-noz668nhdu2gso12.js.map +0 -1
- package/dist/chunks/tabs-e4pcjkw94kpe35x0.js.map +0 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as e, jsxs as h, Fragment as g } from "react/jsx-runtime";
|
|
3
|
+
import { O as x } from "./overflowing-text-mm8bkx7voc6h8ra4.js";
|
|
4
|
+
import { c as b } from "./cn-ct4n7r74mh8y0f48.js";
|
|
5
|
+
const k = {
|
|
6
|
+
variant: {
|
|
7
|
+
regular: {
|
|
8
|
+
classes: "ring ring-inset ring-reki-hairline bg-reki-base",
|
|
9
|
+
description: "Bordered chip on the surface background (default)"
|
|
10
|
+
},
|
|
11
|
+
highlighted: {
|
|
12
|
+
classes: "bg-reki-fill",
|
|
13
|
+
description: "Filled chip with a subtle background"
|
|
14
|
+
},
|
|
15
|
+
transparent: {
|
|
16
|
+
classes: "bg-transparent",
|
|
17
|
+
description: "No background or border"
|
|
18
|
+
},
|
|
19
|
+
static: {
|
|
20
|
+
classes: "bg-reki-fill",
|
|
21
|
+
description: "Non-interactive filled chip"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}, N = "inline-flex w-fit min-w-0 max-w-full items-center gap-1 rounded-sm align-middle text-reki-default", I = {
|
|
25
|
+
small: "h-5 px-1.5 text-xs",
|
|
26
|
+
large: "h-6 px-2 text-sm"
|
|
27
|
+
};
|
|
28
|
+
function v({
|
|
29
|
+
label: s,
|
|
30
|
+
tooltipLabel: m,
|
|
31
|
+
variant: t = "regular",
|
|
32
|
+
size: p = "small",
|
|
33
|
+
accent: r = "primary",
|
|
34
|
+
isBold: u = !1,
|
|
35
|
+
leftComponent: i,
|
|
36
|
+
rightComponent: n,
|
|
37
|
+
disabled: a = !1,
|
|
38
|
+
onClick: l,
|
|
39
|
+
className: f
|
|
40
|
+
}) {
|
|
41
|
+
const c = !!l && !a && t !== "static", o = b(
|
|
42
|
+
N,
|
|
43
|
+
I[p],
|
|
44
|
+
k.variant[t].classes,
|
|
45
|
+
(u || r === "secondary") && "font-medium",
|
|
46
|
+
r === "secondary" && "text-reki-subtle",
|
|
47
|
+
a && "opacity-50",
|
|
48
|
+
c && "cursor-pointer hover:bg-reki-fill",
|
|
49
|
+
f
|
|
50
|
+
), d = /* @__PURE__ */ h(g, { children: [
|
|
51
|
+
i ? /* @__PURE__ */ e("span", { className: "flex shrink-0 items-center", children: i }) : null,
|
|
52
|
+
/* @__PURE__ */ e(
|
|
53
|
+
x,
|
|
54
|
+
{
|
|
55
|
+
text: s,
|
|
56
|
+
tooltipContent: m ?? s,
|
|
57
|
+
className: "text-inherit"
|
|
58
|
+
}
|
|
59
|
+
),
|
|
60
|
+
n ? /* @__PURE__ */ e("span", { className: "flex shrink-0 items-center", children: n }) : null
|
|
61
|
+
] });
|
|
62
|
+
return c ? /* @__PURE__ */ e("button", { type: "button", onClick: l, className: o, children: d }) : /* @__PURE__ */ e("span", { className: o, children: d });
|
|
63
|
+
}
|
|
64
|
+
export {
|
|
65
|
+
v as C,
|
|
66
|
+
N as R,
|
|
67
|
+
k as a
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=chip-iu7movvthovdurgb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chip-iu7movvthovdurgb.js","sources":["../../src/components/chip/chip.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { OverflowingText } from \"../overflowing-text\";\nimport { cn } from \"../../utils/cn\";\nexport const REKI_CHIP_DEFAULT_VARIANTS = {\n variant: \"regular\",\n size: \"small\",\n accent: \"primary\",\n} as const;\n\nexport type ChipSize = \"small\" | \"large\";\nexport type ChipVariant = \"regular\" | \"highlighted\" | \"transparent\" | \"static\";\nexport type ChipAccent = \"primary\" | \"secondary\";\n\n/** Variant background/border definitions for the chip. */\nexport const REKI_CHIP_VARIANTS = {\n variant: {\n regular: {\n classes: \"ring ring-inset ring-reki-hairline bg-reki-base\",\n description: \"Bordered chip on the surface background (default)\",\n },\n highlighted: {\n classes: \"bg-reki-fill\",\n description: \"Filled chip with a subtle background\",\n },\n transparent: {\n classes: \"bg-transparent\",\n description: \"No background or border\",\n },\n static: {\n classes: \"bg-reki-fill\",\n description: \"Non-interactive filled chip\",\n },\n },\n} as const;\n\n/** Base styles shared by all chip variants. */\nexport const REKI_CHIP_BASE_STYLES =\n \"inline-flex w-fit min-w-0 max-w-full items-center gap-1 rounded-sm align-middle text-reki-default\";\n\nconst SIZE_STYLES: Record<ChipSize, string> = {\n small: \"h-5 px-1.5 text-xs\",\n large: \"h-6 px-2 text-sm\",\n};\n\n/**\n * Chip component props.\n *\n * @example\n * ```tsx\n * <Chip label=\"Acme Inc.\" leftComponent={<Avatar initials=\"A\" size=\"xs\" />} />\n * ```\n */\nexport interface ChipProps {\n /** Text label (truncated with a tooltip on overflow). */\n label: string;\n /** Tooltip content shown when the label overflows. Defaults to `label`. */\n tooltipLabel?: string;\n /** Visual variant. @default \"regular\" */\n variant?: ChipVariant;\n /** Size of the chip. @default \"small\" */\n size?: ChipSize;\n /** Text emphasis. `\"secondary\"` renders muted, medium-weight text. @default \"primary\" */\n accent?: ChipAccent;\n /** Renders the label in a medium font weight. */\n isBold?: boolean;\n /** Node rendered before the label (e.g. an avatar or icon). */\n leftComponent?: ReactNode;\n /** Node rendered after the label (e.g. a remove button or count). */\n rightComponent?: ReactNode;\n /** Disables the chip and dims it. */\n disabled?: boolean;\n /** Makes the chip interactive; renders as a button with hover affordance. */\n onClick?: () => void;\n /** Additional CSS classes merged via `cn()`. Use reki semantic tokens only. */\n className?: string;\n}\n\n/**\n * Compact reference token for a record or entity (a relation value, a tag with\n * an avatar, a removable selection). Presentational only — wire `onClick` /\n * `rightComponent` to your data layer. For a navigable chip, use\n * {@link LinkChip}.\n *\n * @example\n * ```tsx\n * <Chip label=\"Jane Doe\" leftComponent={<Avatar initials=\"JD\" size=\"xs\" />} onClick={open} />\n * <Chip label=\"Closed Won\" variant=\"highlighted\" accent=\"secondary\" />\n * ```\n */\nexport function Chip({\n label,\n tooltipLabel,\n variant = \"regular\",\n size = \"small\",\n accent = \"primary\",\n isBold = false,\n leftComponent,\n rightComponent,\n disabled = false,\n onClick,\n className,\n}: ChipProps) {\n const isInteractive = Boolean(onClick) && !disabled && variant !== \"static\";\n\n const classes = cn(\n REKI_CHIP_BASE_STYLES,\n SIZE_STYLES[size],\n REKI_CHIP_VARIANTS.variant[variant].classes,\n (isBold || accent === \"secondary\") && \"font-medium\",\n accent === \"secondary\" && \"text-reki-subtle\",\n disabled && \"opacity-50\",\n isInteractive && \"cursor-pointer hover:bg-reki-fill\",\n className,\n );\n\n const content = (\n <>\n {leftComponent ? (\n <span className=\"flex shrink-0 items-center\">{leftComponent}</span>\n ) : null}\n <OverflowingText\n text={label}\n tooltipContent={tooltipLabel ?? label}\n className=\"text-inherit\"\n />\n {rightComponent ? (\n <span className=\"flex shrink-0 items-center\">{rightComponent}</span>\n ) : null}\n </>\n );\n\n if (isInteractive) {\n return (\n <button type=\"button\" onClick={onClick} className={classes}>\n {content}\n </button>\n );\n }\n\n return <span className={classes}>{content}</span>;\n}\n"],"names":["REKI_CHIP_VARIANTS","REKI_CHIP_BASE_STYLES","SIZE_STYLES","Chip","label","tooltipLabel","variant","size","accent","isBold","leftComponent","rightComponent","disabled","onClick","className","isInteractive","classes","cn","content","jsxs","Fragment","jsx","OverflowingText"],"mappings":";;;;AAcO,MAAMA,IAAqB;AAAA,EAChC,SAAS;AAAA,IACP,SAAS;AAAA,MACP,SAAS;AAAA,MACT,aAAa;AAAA,IAAA;AAAA,IAEf,aAAa;AAAA,MACX,SAAS;AAAA,MACT,aAAa;AAAA,IAAA;AAAA,IAEf,aAAa;AAAA,MACX,SAAS;AAAA,MACT,aAAa;AAAA,IAAA;AAAA,IAEf,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ,GAGaC,IACX,qGAEIC,IAAwC;AAAA,EAC5C,OAAO;AAAA,EACP,OAAO;AACT;AA+CO,SAASC,EAAK;AAAA,EACnB,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,QAAAC,IAAS;AAAA,EACT,QAAAC,IAAS;AAAA,EACT,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,SAAAC;AAAA,EACA,WAAAC;AACF,GAAc;AACZ,QAAMC,IAAgB,EAAQF,KAAY,CAACD,KAAYN,MAAY,UAE7DU,IAAUC;AAAA,IACdhB;AAAA,IACAC,EAAYK,CAAI;AAAA,IAChBP,EAAmB,QAAQM,CAAO,EAAE;AAAA,KACnCG,KAAUD,MAAW,gBAAgB;AAAA,IACtCA,MAAW,eAAe;AAAA,IAC1BI,KAAY;AAAA,IACZG,KAAiB;AAAA,IACjBD;AAAA,EAAA,GAGII,IACJ,gBAAAC,EAAAC,GAAA,EACG,UAAA;AAAA,IAAAV,IACC,gBAAAW,EAAC,QAAA,EAAK,WAAU,8BAA8B,aAAc,IAC1D;AAAA,IACJ,gBAAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,MAAMlB;AAAA,QACN,gBAAgBC,KAAgBD;AAAA,QAChC,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAEXO,IACC,gBAAAU,EAAC,QAAA,EAAK,WAAU,8BAA8B,aAAe,IAC3D;AAAA,EAAA,GACN;AAGF,SAAIN,sBAEC,UAAA,EAAO,MAAK,UAAS,SAAAF,GAAkB,WAAWG,GAChD,UAAAE,GACH,IAIG,gBAAAG,EAAC,QAAA,EAAK,WAAWL,GAAU,UAAAE,GAAQ;AAC5C;"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as i, jsx as s } from "react/jsx-runtime";
|
|
3
|
+
import { c as h } from "./cn-ct4n7r74mh8y0f48.js";
|
|
4
|
+
function f({
|
|
5
|
+
value: n,
|
|
6
|
+
size: r = 40,
|
|
7
|
+
barWidth: e = 4,
|
|
8
|
+
label: c = "Progress",
|
|
9
|
+
className: l
|
|
10
|
+
}) {
|
|
11
|
+
const t = Math.max(0, Math.min(100, n)), o = r / 2 - e / 2, a = r / 2;
|
|
12
|
+
return /* @__PURE__ */ i(
|
|
13
|
+
"svg",
|
|
14
|
+
{
|
|
15
|
+
width: r,
|
|
16
|
+
height: r,
|
|
17
|
+
viewBox: `0 0 ${r} ${r}`,
|
|
18
|
+
role: "progressbar",
|
|
19
|
+
"aria-label": c,
|
|
20
|
+
"aria-valuemin": 0,
|
|
21
|
+
"aria-valuemax": 100,
|
|
22
|
+
"aria-valuenow": Math.round(t),
|
|
23
|
+
className: h(l),
|
|
24
|
+
children: [
|
|
25
|
+
/* @__PURE__ */ s(
|
|
26
|
+
"circle",
|
|
27
|
+
{
|
|
28
|
+
cx: a,
|
|
29
|
+
cy: a,
|
|
30
|
+
r: o,
|
|
31
|
+
fill: "none",
|
|
32
|
+
strokeWidth: e,
|
|
33
|
+
pathLength: 100,
|
|
34
|
+
className: "stroke-reki-fill"
|
|
35
|
+
}
|
|
36
|
+
),
|
|
37
|
+
/* @__PURE__ */ s(
|
|
38
|
+
"circle",
|
|
39
|
+
{
|
|
40
|
+
cx: a,
|
|
41
|
+
cy: a,
|
|
42
|
+
r: o,
|
|
43
|
+
fill: "none",
|
|
44
|
+
strokeWidth: e,
|
|
45
|
+
strokeLinecap: "round",
|
|
46
|
+
className: "stroke-reki-brand",
|
|
47
|
+
pathLength: 100,
|
|
48
|
+
strokeDasharray: 100,
|
|
49
|
+
strokeDashoffset: 100 - t,
|
|
50
|
+
transform: `rotate(-90 ${a} ${a})`
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
export {
|
|
58
|
+
f as C
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=circular-progress-bar-ofg0ps2axad1wsr6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circular-progress-bar-ofg0ps2axad1wsr6.js","sources":["../../src/components/circular-progress-bar/circular-progress-bar.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn\";\n\n/** Variant standard export (reki convention). */\nexport const REKI_CIRCULAR_PROGRESS_BAR_VARIANTS = {} as const;\n\nexport const REKI_CIRCULAR_PROGRESS_BAR_DEFAULT_VARIANTS = {} as const;\n\n/**\n * CircularProgressBar component props.\n *\n * @example\n * ```tsx\n * <CircularProgressBar value={75} />\n * ```\n */\nexport interface CircularProgressBarProps {\n /** Progress as a percentage (0–100). */\n value: number;\n /** Diameter in pixels. @default 40 */\n size?: number;\n /** Stroke width in pixels. @default 4 */\n barWidth?: number;\n /** Accessible label. @default \"Progress\" */\n label?: string;\n /** Additional CSS classes merged via `cn()`. Use reki semantic tokens only. */\n className?: string;\n}\n\n/**\n * A determinate circular progress ring — for record completeness, quota usage,\n * and similar single-value metrics. For a linear bar use `Meter`; for an\n * indeterminate spinner use `Loader`.\n *\n * @example\n * ```tsx\n * <CircularProgressBar value={profile.completeness} />\n * ```\n */\nexport function CircularProgressBar({\n value,\n size = 40,\n barWidth = 4,\n label = \"Progress\",\n className,\n}: CircularProgressBarProps) {\n const clamped = Math.max(0, Math.min(100, value));\n const radius = size / 2 - barWidth / 2;\n const center = size / 2;\n\n return (\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(clamped)}\n className={cn(className)}\n >\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={barWidth}\n pathLength={100}\n className=\"stroke-reki-fill\"\n />\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={barWidth}\n strokeLinecap=\"round\"\n className=\"stroke-reki-brand\"\n pathLength={100}\n strokeDasharray={100}\n strokeDashoffset={100 - clamped}\n transform={`rotate(-90 ${center} ${center})`}\n />\n </svg>\n );\n}\n"],"names":["CircularProgressBar","value","size","barWidth","label","className","clamped","radius","center","jsxs","cn","jsx"],"mappings":";;;AAsCO,SAASA,EAAoB;AAAA,EAClC,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,UAAAC,IAAW;AAAA,EACX,OAAAC,IAAQ;AAAA,EACR,WAAAC;AACF,GAA6B;AAC3B,QAAMC,IAAU,KAAK,IAAI,GAAG,KAAK,IAAI,KAAKL,CAAK,CAAC,GAC1CM,IAASL,IAAO,IAAIC,IAAW,GAC/BK,IAASN,IAAO;AAEtB,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAOP;AAAA,MACP,QAAQA;AAAA,MACR,SAAS,OAAOA,CAAI,IAAIA,CAAI;AAAA,MAC5B,MAAK;AAAA,MACL,cAAYE;AAAA,MACZ,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe,KAAK,MAAME,CAAO;AAAA,MACjC,WAAWI,EAAGL,CAAS;AAAA,MAEvB,UAAA;AAAA,QAAA,gBAAAM;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAIH;AAAA,YACJ,IAAIA;AAAA,YACJ,GAAGD;AAAA,YACH,MAAK;AAAA,YACL,aAAaJ;AAAA,YACb,YAAY;AAAA,YACZ,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAEZ,gBAAAQ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAIH;AAAA,YACJ,IAAIA;AAAA,YACJ,GAAGD;AAAA,YACH,MAAK;AAAA,YACL,aAAaJ;AAAA,YACb,eAAc;AAAA,YACd,WAAU;AAAA,YACV,YAAY;AAAA,YACZ,iBAAiB;AAAA,YACjB,kBAAkB,MAAMG;AAAA,YACxB,WAAW,cAAcE,CAAM,IAAIA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MAC3C;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
package/dist/chunks/{clipboard-text-g3659lejx2d7i93e.js → clipboard-text-ogue8iq06n1z7q7v.js}
RENAMED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import { jsxs as c, jsx as e } from "react/jsx-runtime";
|
|
3
3
|
import { CheckIcon as A, CopyIcon as S } from "@phosphor-icons/react";
|
|
4
4
|
import { forwardRef as I, useState as P, useRef as _, useCallback as V } from "react";
|
|
5
|
-
import { B as E } from "./button-
|
|
6
|
-
import { i as j } from "./input-
|
|
5
|
+
import { B as E } from "./button-fvlz1rzc3s1hpyxs.js";
|
|
6
|
+
import { i as j } from "./input-eno4q26x68rx3i8q.js";
|
|
7
7
|
import { c as s } from "./cn-ct4n7r74mh8y0f48.js";
|
|
8
8
|
import { r as y } from "./resolve-variant-t8jcltsizeg29ege.js";
|
|
9
|
-
import { V as B, W as O, X as D, Y as L, Z as M, _ as X, $ as K, a0 as U, a1 as W, a2 as F, a3 as Y, a4 as Z, a5 as $ } from "./vendor-base-ui-
|
|
9
|
+
import { V as B, W as O, X as D, Y as L, Z as M, _ as X, $ as K, a0 as U, a1 as W, a2 as F, a3 as Y, a4 as Z, a5 as $ } from "./vendor-base-ui-djdjrfuoxlb1lubi.js";
|
|
10
10
|
const v = X(), C = {
|
|
11
11
|
size: {
|
|
12
12
|
sm: {
|
|
@@ -188,4 +188,4 @@ J.displayName = "ClipboardText";
|
|
|
188
188
|
export {
|
|
189
189
|
J as C
|
|
190
190
|
};
|
|
191
|
-
//# sourceMappingURL=clipboard-text-
|
|
191
|
+
//# sourceMappingURL=clipboard-text-ogue8iq06n1z7q7v.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clipboard-text-g3659lejx2d7i93e.js","sources":["../../src/components/clipboard-text/clipboard-text.tsx"],"sourcesContent":["import { CheckIcon, CopyIcon } from \"@phosphor-icons/react\";\nimport { forwardRef, useCallback, useRef, useState } from \"react\";\nimport { Toast } from \"@base-ui/react/toast\";\nimport { Tooltip } from \"@base-ui/react/tooltip\";\nimport { Button } from \"../button\";\nimport { inputVariants } from \"../input\";\nimport { cn } from \"../../utils/cn\";\nimport { resolveVariant } from \"../../utils/resolve-variant\";\n\n// Create a toast manager for anchored \"Copied\" toasts\nconst clipboardToastManager = Toast.createToastManager();\n\n/** ClipboardText size variant definitions mapping sizes to their Tailwind classes. */\nexport const REKI_CLIPBOARD_TEXT_VARIANTS = {\n size: {\n sm: {\n classes: \"text-xs\",\n buttonSize: \"sm\" as const,\n description: \"Small clipboard text for compact UIs\",\n },\n base: {\n classes: \"text-sm\",\n buttonSize: \"base\" as const,\n description: \"Default clipboard text size\",\n },\n lg: {\n classes: \"text-sm\",\n buttonSize: \"lg\" as const,\n description: \"Large clipboard text for prominent display\",\n },\n },\n} as const;\n\nexport const REKI_CLIPBOARD_TEXT_DEFAULT_VARIANTS = {\n size: \"lg\",\n} as const;\n\nconst clipboardTextAnimations = {\n slide: {\n initial:\n \"pointer-events-none absolute inset-0 flex items-center justify-center opacity-0 translate-y-full\",\n animate: \"translate-y-0 opacity-100\",\n end: \"pointer-events-none absolute inset-0 flex items-center justify-center opacity-0 -translate-y-full\",\n },\n} as const;\n\n// Derived types from REKI_CLIPBOARD_TEXT_VARIANTS\nexport type RekiClipboardTextSize =\n keyof typeof REKI_CLIPBOARD_TEXT_VARIANTS.size;\n\nexport interface RekiClipboardTextVariantsProps {\n /**\n * Size of the clipboard text field.\n * - `\"sm\"` — Small clipboard text for compact UIs\n * - `\"base\"` — Default clipboard text size\n * - `\"lg\"` — Large clipboard text for prominent display\n * @default \"lg\"\n */\n size?: RekiClipboardTextSize;\n}\n\nexport function clipboardTextVariants({\n size = REKI_CLIPBOARD_TEXT_DEFAULT_VARIANTS.size,\n}: RekiClipboardTextVariantsProps = {}) {\n return cn(\n // Base styles\n \"flex items-center overflow-hidden bg-reki-base px-0 font-mono\",\n // Apply size styles from REKI_CLIPBOARD_TEXT_VARIANTS\n resolveVariant(REKI_CLIPBOARD_TEXT_VARIANTS.size, size, REKI_CLIPBOARD_TEXT_DEFAULT_VARIANTS.size).classes,\n );\n}\n\n// Legacy type alias for backwards compatibility\nexport type ClipboardTextSize = RekiClipboardTextSize;\n\n/**\n * ClipboardText component props.\n *\n * @example\n * ```tsx\n * <ClipboardText text=\"sk_live_abc123\" />\n * <ClipboardText text=\"npm install @cloudraker/reki\" size=\"sm\" />\n * ```\n */\nexport interface ClipboardTextProps extends RekiClipboardTextVariantsProps {\n /** The text to display and copy to clipboard. */\n text: string;\n /** If provided, this text will be copied to clipboard instead of the `text` prop. */\n textToCopy?: string;\n /** Additional CSS classes merged via `cn()`. */\n className?: string;\n /** Callback fired after text is copied to clipboard. */\n onCopy?: () => void;\n /**\n * Tooltip config. Shows tooltip on hover, anchored toast on click.\n * @example\n * ```tsx\n * <ClipboardText\n * text=\"abc123\"\n * tooltip={{ text: \"Copy\", copiedText: \"Copied!\", side: \"top\" }}\n * />\n * ```\n */\n tooltip?: {\n /** Text shown in tooltip on hover. @default \"Copy\" */\n text?: string;\n /** Text shown in toast after copying. @default \"Copied\" */\n copiedText?: string;\n /** Tooltip/toast placement. @default \"top\" */\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n };\n /** Accessible labels for i18n. */\n labels?: {\n /** @default \"Copy to clipboard\" */\n copyAction?: string;\n };\n}\n\n/**\n * Anchored toasts viewport - renders \"Copied\" toasts anchored to buttons\n */\nfunction AnchoredToasts() {\n const { toasts } = Toast.useToastManager();\n return (\n <Toast.Viewport className=\"pointer-events-none fixed inset-0 isolate\">\n {toasts.map((toast) => (\n <Toast.Positioner key={toast.id} toast={toast} className=\"absolute\">\n <Toast.Root\n toast={toast}\n className={cn(\n \"flex origin-[var(--transform-origin)] flex-col rounded-md bg-reki-base px-3 py-1.5 text-xs text-reki-default font-sans\",\n \"shadow-lg shadow-reki-tip-shadow outline outline-reki-fill\",\n )}\n >\n <Toast.Description />\n </Toast.Root>\n </Toast.Positioner>\n ))}\n </Toast.Viewport>\n );\n}\n\n/**\n * Internal wrapper that provides Toast context when tooltip is enabled.\n */\nfunction TooltipWrapper({ children }: { children: React.ReactNode }) {\n return (\n <Tooltip.Provider>\n <Toast.Provider toastManager={clipboardToastManager}>\n <AnchoredToasts />\n {children}\n </Toast.Provider>\n </Tooltip.Provider>\n );\n}\n\n/**\n * Read-only text field with a one-click copy-to-clipboard button.\n *\n * @example\n * ```tsx\n * <ClipboardText text=\"0c239dd2\" />\n * ```\n */\nexport const ClipboardText = forwardRef<HTMLDivElement, ClipboardTextProps>(\n (\n {\n text,\n textToCopy,\n className,\n size = REKI_CLIPBOARD_TEXT_DEFAULT_VARIANTS.size,\n onCopy,\n tooltip,\n labels: { copyAction = \"Copy to clipboard\" } = {},\n },\n ref,\n ) => {\n const [copied, setCopied] = useState(false);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n const sizeConfig = resolveVariant(REKI_CLIPBOARD_TEXT_VARIANTS.size, size, REKI_CLIPBOARD_TEXT_DEFAULT_VARIANTS.size);\n\n // Destructure tooltip config with defaults\n const {\n text: tooltipText = \"Copy\",\n copiedText = \"Copied\",\n side: tooltipSide = \"top\",\n } = tooltip ?? {};\n\n const copyToClipboard = useCallback(async () => {\n try {\n if (\n typeof navigator !== \"undefined\" &&\n navigator.clipboard &&\n typeof navigator.clipboard.writeText === \"function\"\n ) {\n await navigator.clipboard.writeText(textToCopy ?? text);\n } else if (typeof document !== \"undefined\") {\n // Fallback for older browsers\n const textarea = document.createElement(\"textarea\");\n textarea.value = textToCopy ?? text;\n textarea.setAttribute(\"readonly\", \"\");\n textarea.style.position = \"absolute\";\n textarea.style.left = \"-9999px\";\n document.body.appendChild(textarea);\n const selection = document.getSelection();\n const previousRange = selection?.rangeCount\n ? selection.getRangeAt(0)\n : null;\n textarea.select();\n try {\n document.execCommand(\"copy\");\n } finally {\n document.body.removeChild(textarea);\n if (previousRange) {\n selection?.removeAllRanges();\n selection?.addRange(previousRange);\n }\n }\n }\n\n setCopied(true);\n\n // Show anchored toast if tooltip mode is enabled\n if (tooltip) {\n clipboardToastManager.add({\n description: copiedText,\n positionerProps: {\n anchor: buttonRef.current,\n side: tooltipSide,\n sideOffset: 8,\n },\n timeout: 1500,\n onClose() {\n setCopied(false);\n },\n });\n } else {\n // Reset copied state after delay when no tooltip\n setTimeout(() => setCopied(false), 1500);\n }\n\n onCopy?.();\n } catch (error) {\n console.warn(\"Clipboard copy failed\", error);\n }\n }, [text, onCopy, tooltip, copiedText, tooltipSide]);\n\n const copyButton = (\n <Button\n ref={buttonRef}\n size={sizeConfig.buttonSize}\n variant=\"ghost\"\n className={cn(\n \"rounded-l-none rounded-r-[inherit] border-l! border-reki-line! px-3 relative isolate overflow-hidden transition-all duration-200\",\n \"focus:ring-inset focus:ring-reki-focus/50\",\n \"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-reki-brand\",\n )}\n onClick={copyToClipboard}\n aria-label={copyAction}\n >\n <span\n className={cn(\n \"flex items-center gap-1 transition-all duration-200\",\n copied\n ? clipboardTextAnimations.slide.animate\n : clipboardTextAnimations.slide.initial,\n )}\n >\n <CheckIcon />\n </span>\n <span\n className={cn(\n \"flex items-center justify-center transition-all duration-200\",\n copied\n ? clipboardTextAnimations.slide.end\n : clipboardTextAnimations.slide.animate,\n )}\n >\n <CopyIcon />\n </span>\n </Button>\n );\n\n return (\n <div\n ref={ref}\n className={cn(\n inputVariants({ size: sizeConfig.buttonSize }),\n clipboardTextVariants({ size }),\n className,\n )}\n >\n <span className=\"grow truncate ps-4 pe-2\">{text}</span>\n {tooltip ? (\n <TooltipWrapper>\n <Tooltip.Root\n disabled={copied}\n onOpenChange={(open, eventDetails) => {\n // Prevent tooltip from closing when button is clicked\n if (eventDetails.reason === \"trigger-press\") {\n eventDetails.cancel();\n }\n }}\n >\n <Tooltip.Trigger render={copyButton} />\n <Tooltip.Portal>\n <Tooltip.Positioner side={tooltipSide} sideOffset={8}>\n <Tooltip.Popup\n className={cn(\n \"flex origin-[var(--transform-origin)] flex-col rounded-md bg-reki-base px-3 py-1.5 text-xs text-reki-default\",\n \"shadow-lg shadow-reki-tip-shadow outline outline-reki-fill\",\n )}\n >\n {tooltipText}\n </Tooltip.Popup>\n </Tooltip.Positioner>\n </Tooltip.Portal>\n </Tooltip.Root>\n </TooltipWrapper>\n ) : (\n copyButton\n )}\n <span className=\"sr-only\" aria-live=\"polite\">\n {copied ? copiedText : \"\"}\n </span>\n </div>\n );\n },\n);\n\nClipboardText.displayName = \"ClipboardText\";\n"],"names":["clipboardToastManager","Toast.createToastManager","REKI_CLIPBOARD_TEXT_VARIANTS","REKI_CLIPBOARD_TEXT_DEFAULT_VARIANTS","clipboardTextAnimations","clipboardTextVariants","size","cn","resolveVariant","AnchoredToasts","toasts","Toast.useToastManager","Toast.Viewport","toast","Toast.Positioner","jsx","Toast.Root","Toast.Description","TooltipWrapper","children","Tooltip.Provider","Toast.Provider","ClipboardText","forwardRef","text","textToCopy","className","onCopy","tooltip","copyAction","ref","copied","setCopied","useState","buttonRef","useRef","sizeConfig","tooltipText","copiedText","tooltipSide","copyToClipboard","useCallback","textarea","selection","previousRange","error","copyButton","jsxs","Button","CheckIcon","CopyIcon","inputVariants","Tooltip.Root","open","eventDetails","Tooltip.Trigger","Tooltip.Portal","Tooltip.Positioner","Tooltip.Popup"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"clipboard-text-ogue8iq06n1z7q7v.js","sources":["../../src/components/clipboard-text/clipboard-text.tsx"],"sourcesContent":["import { CheckIcon, CopyIcon } from \"@phosphor-icons/react\";\nimport { forwardRef, useCallback, useRef, useState } from \"react\";\nimport { Toast } from \"@base-ui/react/toast\";\nimport { Tooltip } from \"@base-ui/react/tooltip\";\nimport { Button } from \"../button\";\nimport { inputVariants } from \"../input\";\nimport { cn } from \"../../utils/cn\";\nimport { resolveVariant } from \"../../utils/resolve-variant\";\n\n// Create a toast manager for anchored \"Copied\" toasts\nconst clipboardToastManager = Toast.createToastManager();\n\n/** ClipboardText size variant definitions mapping sizes to their Tailwind classes. */\nexport const REKI_CLIPBOARD_TEXT_VARIANTS = {\n size: {\n sm: {\n classes: \"text-xs\",\n buttonSize: \"sm\" as const,\n description: \"Small clipboard text for compact UIs\",\n },\n base: {\n classes: \"text-sm\",\n buttonSize: \"base\" as const,\n description: \"Default clipboard text size\",\n },\n lg: {\n classes: \"text-sm\",\n buttonSize: \"lg\" as const,\n description: \"Large clipboard text for prominent display\",\n },\n },\n} as const;\n\nexport const REKI_CLIPBOARD_TEXT_DEFAULT_VARIANTS = {\n size: \"lg\",\n} as const;\n\nconst clipboardTextAnimations = {\n slide: {\n initial:\n \"pointer-events-none absolute inset-0 flex items-center justify-center opacity-0 translate-y-full\",\n animate: \"translate-y-0 opacity-100\",\n end: \"pointer-events-none absolute inset-0 flex items-center justify-center opacity-0 -translate-y-full\",\n },\n} as const;\n\n// Derived types from REKI_CLIPBOARD_TEXT_VARIANTS\nexport type RekiClipboardTextSize =\n keyof typeof REKI_CLIPBOARD_TEXT_VARIANTS.size;\n\nexport interface RekiClipboardTextVariantsProps {\n /**\n * Size of the clipboard text field.\n * - `\"sm\"` — Small clipboard text for compact UIs\n * - `\"base\"` — Default clipboard text size\n * - `\"lg\"` — Large clipboard text for prominent display\n * @default \"lg\"\n */\n size?: RekiClipboardTextSize;\n}\n\nexport function clipboardTextVariants({\n size = REKI_CLIPBOARD_TEXT_DEFAULT_VARIANTS.size,\n}: RekiClipboardTextVariantsProps = {}) {\n return cn(\n // Base styles\n \"flex items-center overflow-hidden bg-reki-base px-0 font-mono\",\n // Apply size styles from REKI_CLIPBOARD_TEXT_VARIANTS\n resolveVariant(REKI_CLIPBOARD_TEXT_VARIANTS.size, size, REKI_CLIPBOARD_TEXT_DEFAULT_VARIANTS.size).classes,\n );\n}\n\n// Legacy type alias for backwards compatibility\nexport type ClipboardTextSize = RekiClipboardTextSize;\n\n/**\n * ClipboardText component props.\n *\n * @example\n * ```tsx\n * <ClipboardText text=\"sk_live_abc123\" />\n * <ClipboardText text=\"npm install @cloudraker/reki\" size=\"sm\" />\n * ```\n */\nexport interface ClipboardTextProps extends RekiClipboardTextVariantsProps {\n /** The text to display and copy to clipboard. */\n text: string;\n /** If provided, this text will be copied to clipboard instead of the `text` prop. */\n textToCopy?: string;\n /** Additional CSS classes merged via `cn()`. */\n className?: string;\n /** Callback fired after text is copied to clipboard. */\n onCopy?: () => void;\n /**\n * Tooltip config. Shows tooltip on hover, anchored toast on click.\n * @example\n * ```tsx\n * <ClipboardText\n * text=\"abc123\"\n * tooltip={{ text: \"Copy\", copiedText: \"Copied!\", side: \"top\" }}\n * />\n * ```\n */\n tooltip?: {\n /** Text shown in tooltip on hover. @default \"Copy\" */\n text?: string;\n /** Text shown in toast after copying. @default \"Copied\" */\n copiedText?: string;\n /** Tooltip/toast placement. @default \"top\" */\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n };\n /** Accessible labels for i18n. */\n labels?: {\n /** @default \"Copy to clipboard\" */\n copyAction?: string;\n };\n}\n\n/**\n * Anchored toasts viewport - renders \"Copied\" toasts anchored to buttons\n */\nfunction AnchoredToasts() {\n const { toasts } = Toast.useToastManager();\n return (\n <Toast.Viewport className=\"pointer-events-none fixed inset-0 isolate\">\n {toasts.map((toast) => (\n <Toast.Positioner key={toast.id} toast={toast} className=\"absolute\">\n <Toast.Root\n toast={toast}\n className={cn(\n \"flex origin-[var(--transform-origin)] flex-col rounded-md bg-reki-base px-3 py-1.5 text-xs text-reki-default font-sans\",\n \"shadow-lg shadow-reki-tip-shadow outline outline-reki-fill\",\n )}\n >\n <Toast.Description />\n </Toast.Root>\n </Toast.Positioner>\n ))}\n </Toast.Viewport>\n );\n}\n\n/**\n * Internal wrapper that provides Toast context when tooltip is enabled.\n */\nfunction TooltipWrapper({ children }: { children: React.ReactNode }) {\n return (\n <Tooltip.Provider>\n <Toast.Provider toastManager={clipboardToastManager}>\n <AnchoredToasts />\n {children}\n </Toast.Provider>\n </Tooltip.Provider>\n );\n}\n\n/**\n * Read-only text field with a one-click copy-to-clipboard button.\n *\n * @example\n * ```tsx\n * <ClipboardText text=\"0c239dd2\" />\n * ```\n */\nexport const ClipboardText = forwardRef<HTMLDivElement, ClipboardTextProps>(\n (\n {\n text,\n textToCopy,\n className,\n size = REKI_CLIPBOARD_TEXT_DEFAULT_VARIANTS.size,\n onCopy,\n tooltip,\n labels: { copyAction = \"Copy to clipboard\" } = {},\n },\n ref,\n ) => {\n const [copied, setCopied] = useState(false);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n const sizeConfig = resolveVariant(REKI_CLIPBOARD_TEXT_VARIANTS.size, size, REKI_CLIPBOARD_TEXT_DEFAULT_VARIANTS.size);\n\n // Destructure tooltip config with defaults\n const {\n text: tooltipText = \"Copy\",\n copiedText = \"Copied\",\n side: tooltipSide = \"top\",\n } = tooltip ?? {};\n\n const copyToClipboard = useCallback(async () => {\n try {\n if (\n typeof navigator !== \"undefined\" &&\n navigator.clipboard &&\n typeof navigator.clipboard.writeText === \"function\"\n ) {\n await navigator.clipboard.writeText(textToCopy ?? text);\n } else if (typeof document !== \"undefined\") {\n // Fallback for older browsers\n const textarea = document.createElement(\"textarea\");\n textarea.value = textToCopy ?? text;\n textarea.setAttribute(\"readonly\", \"\");\n textarea.style.position = \"absolute\";\n textarea.style.left = \"-9999px\";\n document.body.appendChild(textarea);\n const selection = document.getSelection();\n const previousRange = selection?.rangeCount\n ? selection.getRangeAt(0)\n : null;\n textarea.select();\n try {\n document.execCommand(\"copy\");\n } finally {\n document.body.removeChild(textarea);\n if (previousRange) {\n selection?.removeAllRanges();\n selection?.addRange(previousRange);\n }\n }\n }\n\n setCopied(true);\n\n // Show anchored toast if tooltip mode is enabled\n if (tooltip) {\n clipboardToastManager.add({\n description: copiedText,\n positionerProps: {\n anchor: buttonRef.current,\n side: tooltipSide,\n sideOffset: 8,\n },\n timeout: 1500,\n onClose() {\n setCopied(false);\n },\n });\n } else {\n // Reset copied state after delay when no tooltip\n setTimeout(() => setCopied(false), 1500);\n }\n\n onCopy?.();\n } catch (error) {\n console.warn(\"Clipboard copy failed\", error);\n }\n }, [text, onCopy, tooltip, copiedText, tooltipSide]);\n\n const copyButton = (\n <Button\n ref={buttonRef}\n size={sizeConfig.buttonSize}\n variant=\"ghost\"\n className={cn(\n \"rounded-l-none rounded-r-[inherit] border-l! border-reki-line! px-3 relative isolate overflow-hidden transition-all duration-200\",\n \"focus:ring-inset focus:ring-reki-focus/50\",\n \"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-reki-brand\",\n )}\n onClick={copyToClipboard}\n aria-label={copyAction}\n >\n <span\n className={cn(\n \"flex items-center gap-1 transition-all duration-200\",\n copied\n ? clipboardTextAnimations.slide.animate\n : clipboardTextAnimations.slide.initial,\n )}\n >\n <CheckIcon />\n </span>\n <span\n className={cn(\n \"flex items-center justify-center transition-all duration-200\",\n copied\n ? clipboardTextAnimations.slide.end\n : clipboardTextAnimations.slide.animate,\n )}\n >\n <CopyIcon />\n </span>\n </Button>\n );\n\n return (\n <div\n ref={ref}\n className={cn(\n inputVariants({ size: sizeConfig.buttonSize }),\n clipboardTextVariants({ size }),\n className,\n )}\n >\n <span className=\"grow truncate ps-4 pe-2\">{text}</span>\n {tooltip ? (\n <TooltipWrapper>\n <Tooltip.Root\n disabled={copied}\n onOpenChange={(open, eventDetails) => {\n // Prevent tooltip from closing when button is clicked\n if (eventDetails.reason === \"trigger-press\") {\n eventDetails.cancel();\n }\n }}\n >\n <Tooltip.Trigger render={copyButton} />\n <Tooltip.Portal>\n <Tooltip.Positioner side={tooltipSide} sideOffset={8}>\n <Tooltip.Popup\n className={cn(\n \"flex origin-[var(--transform-origin)] flex-col rounded-md bg-reki-base px-3 py-1.5 text-xs text-reki-default\",\n \"shadow-lg shadow-reki-tip-shadow outline outline-reki-fill\",\n )}\n >\n {tooltipText}\n </Tooltip.Popup>\n </Tooltip.Positioner>\n </Tooltip.Portal>\n </Tooltip.Root>\n </TooltipWrapper>\n ) : (\n copyButton\n )}\n <span className=\"sr-only\" aria-live=\"polite\">\n {copied ? copiedText : \"\"}\n </span>\n </div>\n );\n },\n);\n\nClipboardText.displayName = \"ClipboardText\";\n"],"names":["clipboardToastManager","Toast.createToastManager","REKI_CLIPBOARD_TEXT_VARIANTS","REKI_CLIPBOARD_TEXT_DEFAULT_VARIANTS","clipboardTextAnimations","clipboardTextVariants","size","cn","resolveVariant","AnchoredToasts","toasts","Toast.useToastManager","Toast.Viewport","toast","Toast.Positioner","jsx","Toast.Root","Toast.Description","TooltipWrapper","children","Tooltip.Provider","Toast.Provider","ClipboardText","forwardRef","text","textToCopy","className","onCopy","tooltip","copyAction","ref","copied","setCopied","useState","buttonRef","useRef","sizeConfig","tooltipText","copiedText","tooltipSide","copyToClipboard","useCallback","textarea","selection","previousRange","error","copyButton","jsxs","Button","CheckIcon","CopyIcon","inputVariants","Tooltip.Root","open","eventDetails","Tooltip.Trigger","Tooltip.Portal","Tooltip.Positioner","Tooltip.Popup"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { jsx as r, jsxs as f } from "react/jsx-runtime";
|
|
|
3
3
|
import { CaretDownIcon as C } from "@phosphor-icons/react";
|
|
4
4
|
import { forwardRef as o } from "react";
|
|
5
5
|
import { c as s } from "./cn-ct4n7r74mh8y0f48.js";
|
|
6
|
-
import { aQ as d, aR as i, aS as n } from "./vendor-base-ui-
|
|
6
|
+
import { aQ as d, aR as i, aS as n } from "./vendor-base-ui-djdjrfuoxlb1lubi.js";
|
|
7
7
|
function t({ className: e, ...l }) {
|
|
8
8
|
return /* @__PURE__ */ r(d, { className: e, ...l });
|
|
9
9
|
}
|
|
@@ -73,4 +73,4 @@ const P = Object.assign(t, {
|
|
|
73
73
|
export {
|
|
74
74
|
P as C
|
|
75
75
|
};
|
|
76
|
-
//# sourceMappingURL=collapsible-
|
|
76
|
+
//# sourceMappingURL=collapsible-ivqat099ene9z3bv.js.map
|
package/dist/chunks/{collapsible-ndvmgo29s5iqfcor.js.map → collapsible-ivqat099ene9z3bv.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collapsible-ndvmgo29s5iqfcor.js","sources":["../../src/components/collapsible/collapsible.tsx"],"sourcesContent":["import { Collapsible as CollapsibleBase } from \"@base-ui/react/collapsible\";\nimport { CaretDownIcon } from \"@phosphor-icons/react\";\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n// =============================================================================\n// Variants\n// =============================================================================\n\nexport const REKI_COLLAPSIBLE_VARIANTS = {} as const;\n\nexport const REKI_COLLAPSIBLE_DEFAULT_VARIANTS = {} as const;\n\nexport interface RekiCollapsibleVariantsProps {}\n\nexport function collapsibleVariants(_props: RekiCollapsibleVariantsProps = {}) {\n return cn();\n}\n\n// =============================================================================\n// Collapsible Root\n// =============================================================================\n\ntype BaseRootProps = ComponentPropsWithoutRef<typeof CollapsibleBase.Root>;\n\nexport interface CollapsibleRootProps extends BaseRootProps {\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Root component that manages collapsible state.\n *\n * @example\n * ```tsx\n * <Collapsible.Root open={open} onOpenChange={setOpen}>\n * <Collapsible.Trigger>Toggle</Collapsible.Trigger>\n * <Collapsible.Panel>Content</Collapsible.Panel>\n * </Collapsible.Root>\n * ```\n */\nfunction CollapsibleRoot({ className, ...props }: CollapsibleRootProps) {\n return <CollapsibleBase.Root className={className} {...props} />;\n}\n\nCollapsibleRoot.displayName = \"Collapsible.Root\";\n\n// =============================================================================\n// Collapsible Trigger\n// =============================================================================\n\ntype BaseTriggerProps = ComponentPropsWithoutRef<\n typeof CollapsibleBase.Trigger\n>;\n\nexport interface CollapsibleTriggerProps extends BaseTriggerProps {\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Button that toggles the collapsible panel visibility.\n * Use the `render` prop to customize the trigger element.\n *\n * @example\n * ```tsx\n * // Default button\n * <Collapsible.Trigger>Show more</Collapsible.Trigger>\n *\n * // Custom trigger element\n * <Collapsible.Trigger render={<Button variant=\"ghost\" />}>\n * Toggle details\n * </Collapsible.Trigger>\n * ```\n */\nconst CollapsibleTrigger = forwardRef<HTMLButtonElement, CollapsibleTriggerProps>(\n ({ className, ...props }, ref) => {\n return (\n <CollapsibleBase.Trigger\n ref={ref}\n data-reki-component=\"Collapsible\"\n data-reki-part=\"trigger\"\n className={cn(\"cursor-pointer\", className)}\n {...props}\n />\n );\n },\n);\n\nCollapsibleTrigger.displayName = \"Collapsible.Trigger\";\n\n// =============================================================================\n// Collapsible Panel\n// =============================================================================\n\ntype BasePanelProps = ComponentPropsWithoutRef<typeof CollapsibleBase.Panel>;\n\nexport interface CollapsiblePanelProps extends BasePanelProps {\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Container for collapsible content. Renders when the collapsible is open.\n *\n * @example\n * ```tsx\n * <Collapsible.Panel className=\"mt-2 space-y-4\">\n * <Text>Revealed content here</Text>\n * </Collapsible.Panel>\n * ```\n */\nconst CollapsiblePanel = forwardRef<HTMLDivElement, CollapsiblePanelProps>(\n ({ className, ...props }, ref) => {\n return (\n <CollapsibleBase.Panel\n ref={ref}\n className={className}\n {...props}\n />\n );\n },\n);\n\nCollapsiblePanel.displayName = \"Collapsible.Panel\";\n\n// =============================================================================\n// Default Trigger (Migration Affordance)\n// =============================================================================\n\nexport interface CollapsibleDefaultTriggerProps {\n /** Label text displayed in the trigger */\n children: ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Pre-styled trigger with text label and animated caret icon.\n * Provides the same visual style as the previous Collapsible API.\n *\n * Use this for quick migration or when you want the default Reki style.\n *\n * @example\n * ```tsx\n * <Collapsible.Root>\n * <Collapsible.DefaultTrigger>Show details</Collapsible.DefaultTrigger>\n * <Collapsible.Panel>Content</Collapsible.Panel>\n * </Collapsible.Root>\n * ```\n */\nconst CollapsibleDefaultTrigger = forwardRef<\n HTMLButtonElement,\n CollapsibleDefaultTriggerProps\n>(({ children, className }, ref) => {\n return (\n <CollapsibleBase.Trigger\n ref={ref}\n data-reki-component=\"Collapsible\"\n data-reki-part=\"default-trigger\"\n className={cn(\n // Defensive resets to prevent global button styles from polluting the trigger\n \"bg-transparent border-none shadow-none p-0 m-0\",\n // Base styles for the trigger\n \"flex cursor-pointer items-center gap-1 text-sm text-reki-link select-none\",\n className,\n )}\n >\n {children}{\" \"}\n <CaretDownIcon className=\"h-4 w-4 transition-transform [[data-panel-open]_&]:rotate-180\" />\n </CollapsibleBase.Trigger>\n );\n});\n\nCollapsibleDefaultTrigger.displayName = \"Collapsible.DefaultTrigger\";\n\n// =============================================================================\n// Default Panel (Migration Affordance)\n// =============================================================================\n\nexport interface CollapsibleDefaultPanelProps extends BasePanelProps {\n /** Panel content */\n children: ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Pre-styled panel with left border accent and standard spacing.\n * Provides the same visual style as the previous Collapsible API.\n *\n * @example\n * ```tsx\n * <Collapsible.Root>\n * <Collapsible.DefaultTrigger>Show details</Collapsible.DefaultTrigger>\n * <Collapsible.DefaultPanel>\n * <Text>Content with default styling</Text>\n * </Collapsible.DefaultPanel>\n * </Collapsible.Root>\n * ```\n */\nconst CollapsibleDefaultPanel = forwardRef<\n HTMLDivElement,\n CollapsibleDefaultPanelProps\n>(({ children, className, ...props }, ref) => {\n return (\n <CollapsibleBase.Panel\n ref={ref}\n className={cn(\"my-2 space-y-4 border-l-2 border-reki-fill pl-4\", className)}\n {...props}\n >\n {children}\n </CollapsibleBase.Panel>\n );\n});\n\nCollapsibleDefaultPanel.displayName = \"Collapsible.DefaultPanel\";\n\n// =============================================================================\n// Compound Component Export\n// =============================================================================\n\n/**\n * Collapsible — a composable disclosure component for showing/hiding content.\n *\n * Built on Base UI's Collapsible with full composition support.\n *\n * ## Basic Usage\n *\n * ```tsx\n * const [open, setOpen] = useState(false);\n *\n * <Collapsible.Root open={open} onOpenChange={setOpen}>\n * <Collapsible.Trigger render={<Button variant=\"ghost\" />}>\n * Show details\n * </Collapsible.Trigger>\n * <Collapsible.Panel className=\"mt-2\">\n * <Text>Hidden content revealed when expanded.</Text>\n * </Collapsible.Panel>\n * </Collapsible.Root>\n * ```\n *\n * ## With Default Styling\n *\n * Use `DefaultTrigger` and `DefaultPanel` for the classic Reki style:\n *\n * ```tsx\n * <Collapsible.Root>\n * <Collapsible.DefaultTrigger>Show details</Collapsible.DefaultTrigger>\n * <Collapsible.DefaultPanel>\n * <Text>Content with border-left accent</Text>\n * </Collapsible.DefaultPanel>\n * </Collapsible.Root>\n * ```\n *\n * ## Controlled Accordion Pattern\n *\n * ```tsx\n * const [activeIndex, setActiveIndex] = useState<number | null>(null);\n *\n * {items.map((item, i) => (\n * <Collapsible.Root\n * key={i}\n * open={activeIndex === i}\n * onOpenChange={(open) => setActiveIndex(open ? i : null)}\n * >\n * <Collapsible.DefaultTrigger>{item.title}</Collapsible.DefaultTrigger>\n * <Collapsible.DefaultPanel>{item.content}</Collapsible.DefaultPanel>\n * </Collapsible.Root>\n * ))}\n * ```\n */\nexport const Collapsible = Object.assign(CollapsibleRoot, {\n Root: CollapsibleRoot,\n Trigger: CollapsibleTrigger,\n Panel: CollapsiblePanel,\n DefaultTrigger: CollapsibleDefaultTrigger,\n DefaultPanel: CollapsibleDefaultPanel,\n});\n\n// =============================================================================\n// Type Exports\n// =============================================================================\n\nexport type CollapsibleProps = CollapsibleRootProps;\n"],"names":["CollapsibleRoot","className","props","CollapsibleBase.Root","CollapsibleTrigger","forwardRef","ref","jsx","CollapsibleBase.Trigger","cn","CollapsiblePanel","CollapsibleBase.Panel","CollapsibleDefaultTrigger","children","jsxs","CaretDownIcon","CollapsibleDefaultPanel","Collapsible"],"mappings":";;;;;;AA6CA,SAASA,EAAgB,EAAE,WAAAC,GAAW,GAAGC,KAA+B;AACtE,2BAAQC,GAAA,EAAqB,WAAAF,GAAuB,GAAGC,EAAA,CAAO;AAChE;AAEAF,EAAgB,cAAc;AA8B9B,MAAMI,IAAqBC;AAAA,EACzB,CAAC,EAAE,WAAAJ,GAAW,GAAGC,EAAA,GAASI,MAEtB,gBAAAC;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,KAAAF;AAAA,MACA,uBAAoB;AAAA,MACpB,kBAAe;AAAA,MACf,WAAWG,EAAG,kBAAkBR,CAAS;AAAA,MACxC,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AAEAE,EAAmB,cAAc;AAuBjC,MAAMM,IAAmBL;AAAA,EACvB,CAAC,EAAE,WAAAJ,GAAW,GAAGC,EAAA,GAASI,MAEtB,gBAAAC;AAAA,IAACI;AAAAA,IAAA;AAAA,MACC,KAAAL;AAAA,MACA,WAAAL;AAAA,MACC,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AAEAQ,EAAiB,cAAc;AA2B/B,MAAME,IAA4BP,EAGhC,CAAC,EAAE,UAAAQ,GAAU,WAAAZ,EAAA,GAAaK,MAExB,gBAAAQ;AAAA,EAACN;AAAAA,EAAA;AAAA,IACC,KAAAF;AAAA,IACA,uBAAoB;AAAA,IACpB,kBAAe;AAAA,IACf,WAAWG;AAAA;AAAA,MAET;AAAA;AAAA,MAEA;AAAA,MACAR;AAAA,IAAA;AAAA,IAGD,UAAA;AAAA,MAAAY;AAAA,MAAU;AAAA,MACX,gBAAAN,EAACQ,GAAA,EAAc,WAAU,gEAAA,CAAgE;AAAA,IAAA;AAAA,EAAA;AAAA,CAG9F;AAEDH,EAA0B,cAAc;AA2BxC,MAAMI,IAA0BX,EAG9B,CAAC,EAAE,UAAAQ,GAAU,WAAAZ,GAAW,GAAGC,EAAA,GAASI,MAElC,gBAAAC;AAAA,EAACI;AAAAA,EAAA;AAAA,IACC,KAAAL;AAAA,IACA,WAAWG,EAAG,mDAAmDR,CAAS;AAAA,IACzE,GAAGC;AAAA,IAEH,UAAAW;AAAA,EAAA;AAAA,CAGN;AAEDG,EAAwB,cAAc;AAwD/B,MAAMC,IAAc,OAAO,OAAOjB,GAAiB;AAAA,EACxD,MAAMA;AAAA,EACN,SAASI;AAAA,EACT,OAAOM;AAAA,EACP,gBAAgBE;AAAA,EAChB,cAAcI;AAChB,CAAC;"}
|
|
1
|
+
{"version":3,"file":"collapsible-ivqat099ene9z3bv.js","sources":["../../src/components/collapsible/collapsible.tsx"],"sourcesContent":["import { Collapsible as CollapsibleBase } from \"@base-ui/react/collapsible\";\nimport { CaretDownIcon } from \"@phosphor-icons/react\";\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n// =============================================================================\n// Variants\n// =============================================================================\n\nexport const REKI_COLLAPSIBLE_VARIANTS = {} as const;\n\nexport const REKI_COLLAPSIBLE_DEFAULT_VARIANTS = {} as const;\n\nexport interface RekiCollapsibleVariantsProps {}\n\nexport function collapsibleVariants(_props: RekiCollapsibleVariantsProps = {}) {\n return cn();\n}\n\n// =============================================================================\n// Collapsible Root\n// =============================================================================\n\ntype BaseRootProps = ComponentPropsWithoutRef<typeof CollapsibleBase.Root>;\n\nexport interface CollapsibleRootProps extends BaseRootProps {\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Root component that manages collapsible state.\n *\n * @example\n * ```tsx\n * <Collapsible.Root open={open} onOpenChange={setOpen}>\n * <Collapsible.Trigger>Toggle</Collapsible.Trigger>\n * <Collapsible.Panel>Content</Collapsible.Panel>\n * </Collapsible.Root>\n * ```\n */\nfunction CollapsibleRoot({ className, ...props }: CollapsibleRootProps) {\n return <CollapsibleBase.Root className={className} {...props} />;\n}\n\nCollapsibleRoot.displayName = \"Collapsible.Root\";\n\n// =============================================================================\n// Collapsible Trigger\n// =============================================================================\n\ntype BaseTriggerProps = ComponentPropsWithoutRef<\n typeof CollapsibleBase.Trigger\n>;\n\nexport interface CollapsibleTriggerProps extends BaseTriggerProps {\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Button that toggles the collapsible panel visibility.\n * Use the `render` prop to customize the trigger element.\n *\n * @example\n * ```tsx\n * // Default button\n * <Collapsible.Trigger>Show more</Collapsible.Trigger>\n *\n * // Custom trigger element\n * <Collapsible.Trigger render={<Button variant=\"ghost\" />}>\n * Toggle details\n * </Collapsible.Trigger>\n * ```\n */\nconst CollapsibleTrigger = forwardRef<HTMLButtonElement, CollapsibleTriggerProps>(\n ({ className, ...props }, ref) => {\n return (\n <CollapsibleBase.Trigger\n ref={ref}\n data-reki-component=\"Collapsible\"\n data-reki-part=\"trigger\"\n className={cn(\"cursor-pointer\", className)}\n {...props}\n />\n );\n },\n);\n\nCollapsibleTrigger.displayName = \"Collapsible.Trigger\";\n\n// =============================================================================\n// Collapsible Panel\n// =============================================================================\n\ntype BasePanelProps = ComponentPropsWithoutRef<typeof CollapsibleBase.Panel>;\n\nexport interface CollapsiblePanelProps extends BasePanelProps {\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Container for collapsible content. Renders when the collapsible is open.\n *\n * @example\n * ```tsx\n * <Collapsible.Panel className=\"mt-2 space-y-4\">\n * <Text>Revealed content here</Text>\n * </Collapsible.Panel>\n * ```\n */\nconst CollapsiblePanel = forwardRef<HTMLDivElement, CollapsiblePanelProps>(\n ({ className, ...props }, ref) => {\n return (\n <CollapsibleBase.Panel\n ref={ref}\n className={className}\n {...props}\n />\n );\n },\n);\n\nCollapsiblePanel.displayName = \"Collapsible.Panel\";\n\n// =============================================================================\n// Default Trigger (Migration Affordance)\n// =============================================================================\n\nexport interface CollapsibleDefaultTriggerProps {\n /** Label text displayed in the trigger */\n children: ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Pre-styled trigger with text label and animated caret icon.\n * Provides the same visual style as the previous Collapsible API.\n *\n * Use this for quick migration or when you want the default Reki style.\n *\n * @example\n * ```tsx\n * <Collapsible.Root>\n * <Collapsible.DefaultTrigger>Show details</Collapsible.DefaultTrigger>\n * <Collapsible.Panel>Content</Collapsible.Panel>\n * </Collapsible.Root>\n * ```\n */\nconst CollapsibleDefaultTrigger = forwardRef<\n HTMLButtonElement,\n CollapsibleDefaultTriggerProps\n>(({ children, className }, ref) => {\n return (\n <CollapsibleBase.Trigger\n ref={ref}\n data-reki-component=\"Collapsible\"\n data-reki-part=\"default-trigger\"\n className={cn(\n // Defensive resets to prevent global button styles from polluting the trigger\n \"bg-transparent border-none shadow-none p-0 m-0\",\n // Base styles for the trigger\n \"flex cursor-pointer items-center gap-1 text-sm text-reki-link select-none\",\n className,\n )}\n >\n {children}{\" \"}\n <CaretDownIcon className=\"h-4 w-4 transition-transform [[data-panel-open]_&]:rotate-180\" />\n </CollapsibleBase.Trigger>\n );\n});\n\nCollapsibleDefaultTrigger.displayName = \"Collapsible.DefaultTrigger\";\n\n// =============================================================================\n// Default Panel (Migration Affordance)\n// =============================================================================\n\nexport interface CollapsibleDefaultPanelProps extends BasePanelProps {\n /** Panel content */\n children: ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Pre-styled panel with left border accent and standard spacing.\n * Provides the same visual style as the previous Collapsible API.\n *\n * @example\n * ```tsx\n * <Collapsible.Root>\n * <Collapsible.DefaultTrigger>Show details</Collapsible.DefaultTrigger>\n * <Collapsible.DefaultPanel>\n * <Text>Content with default styling</Text>\n * </Collapsible.DefaultPanel>\n * </Collapsible.Root>\n * ```\n */\nconst CollapsibleDefaultPanel = forwardRef<\n HTMLDivElement,\n CollapsibleDefaultPanelProps\n>(({ children, className, ...props }, ref) => {\n return (\n <CollapsibleBase.Panel\n ref={ref}\n className={cn(\"my-2 space-y-4 border-l-2 border-reki-fill pl-4\", className)}\n {...props}\n >\n {children}\n </CollapsibleBase.Panel>\n );\n});\n\nCollapsibleDefaultPanel.displayName = \"Collapsible.DefaultPanel\";\n\n// =============================================================================\n// Compound Component Export\n// =============================================================================\n\n/**\n * Collapsible — a composable disclosure component for showing/hiding content.\n *\n * Built on Base UI's Collapsible with full composition support.\n *\n * ## Basic Usage\n *\n * ```tsx\n * const [open, setOpen] = useState(false);\n *\n * <Collapsible.Root open={open} onOpenChange={setOpen}>\n * <Collapsible.Trigger render={<Button variant=\"ghost\" />}>\n * Show details\n * </Collapsible.Trigger>\n * <Collapsible.Panel className=\"mt-2\">\n * <Text>Hidden content revealed when expanded.</Text>\n * </Collapsible.Panel>\n * </Collapsible.Root>\n * ```\n *\n * ## With Default Styling\n *\n * Use `DefaultTrigger` and `DefaultPanel` for the classic Reki style:\n *\n * ```tsx\n * <Collapsible.Root>\n * <Collapsible.DefaultTrigger>Show details</Collapsible.DefaultTrigger>\n * <Collapsible.DefaultPanel>\n * <Text>Content with border-left accent</Text>\n * </Collapsible.DefaultPanel>\n * </Collapsible.Root>\n * ```\n *\n * ## Controlled Accordion Pattern\n *\n * ```tsx\n * const [activeIndex, setActiveIndex] = useState<number | null>(null);\n *\n * {items.map((item, i) => (\n * <Collapsible.Root\n * key={i}\n * open={activeIndex === i}\n * onOpenChange={(open) => setActiveIndex(open ? i : null)}\n * >\n * <Collapsible.DefaultTrigger>{item.title}</Collapsible.DefaultTrigger>\n * <Collapsible.DefaultPanel>{item.content}</Collapsible.DefaultPanel>\n * </Collapsible.Root>\n * ))}\n * ```\n */\nexport const Collapsible = Object.assign(CollapsibleRoot, {\n Root: CollapsibleRoot,\n Trigger: CollapsibleTrigger,\n Panel: CollapsiblePanel,\n DefaultTrigger: CollapsibleDefaultTrigger,\n DefaultPanel: CollapsibleDefaultPanel,\n});\n\n// =============================================================================\n// Type Exports\n// =============================================================================\n\nexport type CollapsibleProps = CollapsibleRootProps;\n"],"names":["CollapsibleRoot","className","props","CollapsibleBase.Root","CollapsibleTrigger","forwardRef","ref","jsx","CollapsibleBase.Trigger","cn","CollapsiblePanel","CollapsibleBase.Panel","CollapsibleDefaultTrigger","children","jsxs","CaretDownIcon","CollapsibleDefaultPanel","Collapsible"],"mappings":";;;;;;AA6CA,SAASA,EAAgB,EAAE,WAAAC,GAAW,GAAGC,KAA+B;AACtE,2BAAQC,GAAA,EAAqB,WAAAF,GAAuB,GAAGC,EAAA,CAAO;AAChE;AAEAF,EAAgB,cAAc;AA8B9B,MAAMI,IAAqBC;AAAA,EACzB,CAAC,EAAE,WAAAJ,GAAW,GAAGC,EAAA,GAASI,MAEtB,gBAAAC;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,KAAAF;AAAA,MACA,uBAAoB;AAAA,MACpB,kBAAe;AAAA,MACf,WAAWG,EAAG,kBAAkBR,CAAS;AAAA,MACxC,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AAEAE,EAAmB,cAAc;AAuBjC,MAAMM,IAAmBL;AAAA,EACvB,CAAC,EAAE,WAAAJ,GAAW,GAAGC,EAAA,GAASI,MAEtB,gBAAAC;AAAA,IAACI;AAAAA,IAAA;AAAA,MACC,KAAAL;AAAA,MACA,WAAAL;AAAA,MACC,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AAEAQ,EAAiB,cAAc;AA2B/B,MAAME,IAA4BP,EAGhC,CAAC,EAAE,UAAAQ,GAAU,WAAAZ,EAAA,GAAaK,MAExB,gBAAAQ;AAAA,EAACN;AAAAA,EAAA;AAAA,IACC,KAAAF;AAAA,IACA,uBAAoB;AAAA,IACpB,kBAAe;AAAA,IACf,WAAWG;AAAA;AAAA,MAET;AAAA;AAAA,MAEA;AAAA,MACAR;AAAA,IAAA;AAAA,IAGD,UAAA;AAAA,MAAAY;AAAA,MAAU;AAAA,MACX,gBAAAN,EAACQ,GAAA,EAAc,WAAU,gEAAA,CAAgE;AAAA,IAAA;AAAA,EAAA;AAAA,CAG9F;AAEDH,EAA0B,cAAc;AA2BxC,MAAMI,IAA0BX,EAG9B,CAAC,EAAE,UAAAQ,GAAU,WAAAZ,GAAW,GAAGC,EAAA,GAASI,MAElC,gBAAAC;AAAA,EAACI;AAAAA,EAAA;AAAA,IACC,KAAAL;AAAA,IACA,WAAWG,EAAG,mDAAmDR,CAAS;AAAA,IACzE,GAAGC;AAAA,IAEH,UAAAW;AAAA,EAAA;AAAA,CAGN;AAEDG,EAAwB,cAAc;AAwD/B,MAAMC,IAAc,OAAO,OAAOjB,GAAiB;AAAA,EACxD,MAAMA;AAAA,EACN,SAASI;AAAA,EACT,OAAOM;AAAA,EACP,gBAAgBE;AAAA,EAChB,cAAcI;AAChB,CAAC;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as s } from "react/jsx-runtime";
|
|
3
|
+
import { a as t } from "./tag-h5kwf5eh7dyyvc2c.js";
|
|
4
|
+
import { c as a } from "./cn-ct4n7r74mh8y0f48.js";
|
|
5
|
+
const l = {
|
|
6
|
+
default: "size-3.5 rounded-sm",
|
|
7
|
+
circle: "size-3.5 rounded-full",
|
|
8
|
+
pipeline: "h-3.5 w-6 rounded-sm"
|
|
9
|
+
};
|
|
10
|
+
function u({
|
|
11
|
+
colorName: n,
|
|
12
|
+
variant: r = "default",
|
|
13
|
+
className: e
|
|
14
|
+
}) {
|
|
15
|
+
const i = n === "transparent" ? "bg-transparent" : t[n].bg;
|
|
16
|
+
return /* @__PURE__ */ s(
|
|
17
|
+
"span",
|
|
18
|
+
{
|
|
19
|
+
"aria-hidden": !0,
|
|
20
|
+
className: a(
|
|
21
|
+
"inline-block ring ring-inset ring-reki-hairline",
|
|
22
|
+
l[r],
|
|
23
|
+
i,
|
|
24
|
+
e
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
u as C
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=color-sample-h7hspma3rb91go3z.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-sample-h7hspma3rb91go3z.js","sources":["../../src/components/color-sample/color-sample.tsx"],"sourcesContent":["import { REKI_TAG_COLORS, type TagColor } from \"../tag\";\nimport { cn } from \"../../utils/cn\";\n\n/** Variant standard export (reki convention). */\nexport const REKI_COLOR_SAMPLE_VARIANTS = {\n variant: {\n default: { classes: \"size-3.5 rounded-sm\", description: \"Rounded square (default)\" },\n circle: { classes: \"size-3.5 rounded-full\", description: \"Circle\" },\n pipeline: { classes: \"h-3.5 w-6 rounded-sm\", description: \"Wide pipeline bar\" },\n },\n} as const;\n\nexport const REKI_COLOR_SAMPLE_DEFAULT_VARIANTS = {\n variant: \"default\",\n} as const;\n\nexport type ColorSampleVariant = \"default\" | \"circle\" | \"pipeline\";\n\n/**\n * ColorSample component props.\n *\n * @example\n * ```tsx\n * <ColorSample colorName=\"green\" />\n * ```\n */\nexport interface ColorSampleProps {\n /** Named CRM tag color to display. */\n colorName: TagColor;\n /**\n * Swatch shape.\n * - `\"default\"` — small rounded square (default)\n * - `\"circle\"` — full circle\n * - `\"pipeline\"` — wider rounded bar (for pipeline/stage pickers)\n * @default \"default\"\n */\n variant?: ColorSampleVariant;\n /** Additional CSS classes merged via `cn()`. Use reki semantic tokens only. */\n className?: string;\n}\n\nconst VARIANT_SHAPE: Record<ColorSampleVariant, string> = {\n default: \"size-3.5 rounded-sm\",\n circle: \"size-3.5 rounded-full\",\n pipeline: \"h-3.5 w-6 rounded-sm\",\n};\n\n/**\n * A color swatch for color pickers and tag-color selection. Uses the same\n * `reki-tag-*` palette as {@link Tag} so the swatch always matches the tag it\n * represents, in both light and dark mode.\n *\n * @example\n * ```tsx\n * <ColorSample colorName=\"purple\" variant=\"circle\" />\n * ```\n */\nexport function ColorSample({\n colorName,\n variant = \"default\",\n className,\n}: ColorSampleProps) {\n const fill =\n colorName === \"transparent\"\n ? \"bg-transparent\"\n : REKI_TAG_COLORS[colorName].bg;\n\n return (\n <span\n aria-hidden\n className={cn(\n \"inline-block ring ring-inset ring-reki-hairline\",\n VARIANT_SHAPE[variant],\n fill,\n className,\n )}\n />\n );\n}\n"],"names":["VARIANT_SHAPE","ColorSample","colorName","variant","className","fill","REKI_TAG_COLORS","jsx","cn"],"mappings":";;;;AAyCA,MAAMA,IAAoD;AAAA,EACxD,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AACZ;AAYO,SAASC,EAAY;AAAA,EAC1B,WAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,WAAAC;AACF,GAAqB;AACnB,QAAMC,IACJH,MAAc,gBACV,mBACAI,EAAgBJ,CAAS,EAAE;AAEjC,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAW;AAAA,MACX,WAAWC;AAAA,QACT;AAAA,QACAR,EAAcG,CAAO;AAAA,QACrBE;AAAA,QACAD;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;"}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import { jsx as e, jsxs as m } from "react/jsx-runtime";
|
|
3
3
|
import { CheckIcon as T, XIcon as C, CaretDownIcon as N } from "@phosphor-icons/react";
|
|
4
4
|
import { useContext as h, Fragment as E, createContext as V } from "react";
|
|
5
|
-
import { i as p, R as P } from "./input-
|
|
5
|
+
import { i as p, R as P } from "./input-eno4q26x68rx3i8q.js";
|
|
6
6
|
import { c as r } from "./cn-ct4n7r74mh8y0f48.js";
|
|
7
|
-
import { F as j } from "./field-
|
|
7
|
+
import { F as j } from "./field-b0aywboxuss4rpu7.js";
|
|
8
8
|
import { u as F } from "./portal-provider-off76og7tjyz96ys.js";
|
|
9
|
-
import { a6 as G, a7 as u, a8 as x, a9 as f, aa as L, ab as M, ac as _, ad as A, ae as W, af as B, ag as b, ah as D, ai as H, aj as K, ak as O, al as U, am as X, an as q, ao as J, ap as Q } from "./vendor-base-ui-
|
|
9
|
+
import { a6 as G, a7 as u, a8 as x, a9 as f, aa as L, ab as M, ac as _, ad as A, ae as W, af as B, ag as b, ah as D, ai as H, aj as K, ak as O, al as U, am as X, an as q, ao as J, ap as Q } from "./vendor-base-ui-djdjrfuoxlb1lubi.js";
|
|
10
10
|
P.size;
|
|
11
11
|
const g = V({ size: "base", hasError: !1 });
|
|
12
12
|
function y({
|
|
@@ -405,4 +405,4 @@ const pe = Object.assign(y, {
|
|
|
405
405
|
export {
|
|
406
406
|
pe as C
|
|
407
407
|
};
|
|
408
|
-
//# sourceMappingURL=combobox-
|
|
408
|
+
//# sourceMappingURL=combobox-iytvpzp5poljxgek.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox-i38w67netm8ukw4f.js","sources":["../../src/components/combobox/combobox.tsx"],"sourcesContent":["import { Combobox as ComboboxBase } from \"@base-ui/react/combobox\";\nimport { CaretDownIcon, CheckIcon, XIcon } from \"@phosphor-icons/react\";\nimport {\n Fragment,\n createContext,\n useContext,\n type PropsWithChildren,\n type ReactNode,\n} from \"react\";\nimport {\n inputVariants,\n REKI_INPUT_VARIANTS,\n type RekiInputSize,\n} from \"../input/input\";\nimport { cn } from \"../../utils/cn\";\nimport { resolveVariant } from \"../../utils/resolve-variant\";\nimport { Field, type FieldErrorMatch } from \"../field/field\";\nimport {\n usePortalContainer,\n type PortalContainer,\n} from \"../../utils/portal-provider\";\n\n/** Combobox variant definitions. */\nexport const REKI_COMBOBOX_VARIANTS = {\n size: REKI_INPUT_VARIANTS.size,\n inputSide: {\n right: {\n classes: \"\",\n description: \"Input positioned inline to the right of chips\",\n },\n top: {\n classes: \"\",\n description: \"Input positioned above chips\",\n },\n },\n} as const;\n\nexport const REKI_COMBOBOX_DEFAULT_VARIANTS = {\n size: \"base\",\n inputSide: \"right\",\n} as const;\n\n// Context to pass size and error state down to sub-components\nconst ComboboxContext = createContext<{\n size: RekiInputSize;\n hasError: boolean;\n}>({ size: \"base\", hasError: false });\n\n// Derived types from REKI_COMBOBOX_VARIANTS\nexport type RekiComboboxSize = keyof typeof REKI_COMBOBOX_VARIANTS.size;\nexport type RekiComboboxInputSide =\n keyof typeof REKI_COMBOBOX_VARIANTS.inputSide;\n\nexport interface RekiComboboxVariantsProps {\n /**\n * Size of the combobox trigger. Matches Input component sizes.\n * - `\"xs\"` — Extra small for compact UIs (h-5 / 20px)\n * - `\"sm\"` — Small for secondary fields (h-6.5 / 26px)\n * - `\"base\"` — Default size (h-9 / 36px)\n * - `\"lg\"` — Large for prominent fields (h-10 / 40px)\n * @default \"base\"\n */\n size?: RekiComboboxSize;\n /**\n * Position of the text input relative to chips in multi-select mode.\n * - `\"right\"` — Input inline to the right of chips\n * - `\"top\"` — Input above chips\n * @default \"right\"\n */\n inputSide?: RekiComboboxInputSide;\n}\n\nexport function comboboxVariants({\n inputSide = REKI_COMBOBOX_DEFAULT_VARIANTS.inputSide,\n}: RekiComboboxVariantsProps = {}) {\n return cn(\n resolveVariant(\n REKI_COMBOBOX_VARIANTS.inputSide,\n inputSide,\n REKI_COMBOBOX_DEFAULT_VARIANTS.inputSide,\n ).classes,\n );\n}\n\n// Legacy type alias for backwards compatibility\nexport type ComboboxInputSide = RekiComboboxInputSide;\nexport type ComboboxSize = RekiComboboxSize;\n\nexport type ComboboxRootProps<\n Value = unknown,\n Multiple extends boolean | undefined = false,\n> = ComboboxBase.Root.Props<Value, Multiple>;\n\n/**\n * Combobox component props (simplified for documentation; the actual Root is generic).\n *\n * Combobox provides an autocomplete/typeahead input with a filterable dropdown.\n * Supports single-select, multi-select with chips, grouped items, and Field wrapper integration.\n *\n * @example\n * ```tsx\n * // Single-select with search input\n * <Combobox value={value} onValueChange={setValue} items={options}>\n * <Combobox.TriggerInput placeholder=\"Search…\" />\n * <Combobox.Content>\n * <Combobox.List>\n * {(item) => <Combobox.Item value={item}>{item.label}</Combobox.Item>}\n * </Combobox.List>\n * <Combobox.Empty>No results</Combobox.Empty>\n * </Combobox.Content>\n * </Combobox>\n *\n * // Multi-select with chips\n * <Combobox multiple items={options} label=\"Tags\">\n * <Combobox.TriggerMultipleWithInput\n * placeholder=\"Add tag…\"\n * renderItem={(item) => <Combobox.Chip value={item}>{item.label}</Combobox.Chip>}\n * />\n * <Combobox.Content>\n * <Combobox.List>\n * {(item) => <Combobox.Item value={item}>{item.label}</Combobox.Item>}\n * </Combobox.List>\n * </Combobox.Content>\n * </Combobox>\n * ```\n */\nexport interface ComboboxProps extends RekiComboboxVariantsProps {\n /** Array of items to display in the dropdown */\n items: unknown[];\n /** Currently selected value(s) */\n value?: unknown;\n /** Callback when selection changes */\n onValueChange?: (value: unknown) => void;\n /** Enable multi-select mode */\n multiple?: boolean;\n /** Combobox content (trigger, content, items) */\n children: ReactNode;\n /** Additional CSS classes */\n className?: string;\n /** Label content for the combobox (enables Field wrapper) - can be a string or any React node */\n label?: ReactNode;\n /** Whether the combobox is required */\n required?: boolean;\n /** Tooltip content to display next to the label via an info icon */\n labelTooltip?: ReactNode;\n /** Helper text displayed below the combobox */\n description?: ReactNode;\n /** Error message or validation error object */\n error?: string | { message: ReactNode; match: FieldErrorMatch };\n}\n\nfunction Root<Value, Multiple extends boolean | undefined = false>({\n label,\n required,\n labelTooltip,\n description,\n error,\n children,\n size = \"base\",\n ...props\n}: ComboboxBase.Root.Props<Value, Multiple> & {\n label?: ReactNode;\n required?: boolean;\n labelTooltip?: ReactNode;\n description?: ReactNode;\n error?: string | { message: ReactNode; match: FieldErrorMatch };\n size?: RekiComboboxSize;\n}) {\n const comboboxControl = (\n <ComboboxContext.Provider value={{ size, hasError: Boolean(error) }}>\n <ComboboxBase.Root {...props}>{children}</ComboboxBase.Root>\n </ComboboxContext.Provider>\n );\n\n // Render with Field wrapper if label, description, or error are provided\n if (label) {\n return (\n <Field\n label={label}\n required={required}\n labelTooltip={labelTooltip}\n description={description}\n error={\n error\n ? typeof error === \"string\"\n ? { message: error, match: true }\n : error\n : undefined\n }\n >\n {comboboxControl}\n </Field>\n );\n }\n\n // Render bare combobox without Field wrapper\n return comboboxControl;\n}\n\nfunction Content({\n children,\n className,\n align = \"start\",\n sideOffset = 4,\n alignOffset,\n side,\n container: containerProp,\n}: PropsWithChildren<{\n className?: string;\n align?: ComboboxBase.Positioner.Props[\"align\"];\n alignOffset?: ComboboxBase.Positioner.Props[\"alignOffset\"];\n side?: ComboboxBase.Positioner.Props[\"side\"];\n sideOffset?: ComboboxBase.Positioner.Props[\"sideOffset\"];\n /**\n * Container element for the portal. Use this to render the combobox inside\n * a Shadow DOM or custom container. Overrides `RekiPortalProvider` context.\n * @default document.body (or RekiPortalProvider container if set)\n */\n container?: PortalContainer;\n}>) {\n const contextContainer = usePortalContainer();\n const container = containerProp ?? contextContainer ?? undefined;\n\n return (\n <ComboboxBase.Portal container={container}>\n <ComboboxBase.Positioner\n className=\"\"\n align={align}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n side={side}\n >\n <ComboboxBase.Popup\n className={cn(\n \"flex flex-col\", // flexbox layout for sticky input + scrollable list\n \"max-h-[min(var(--available-height),24rem)] max-w-(--available-width) min-w-(--anchor-width) py-1.5\",\n \"bg-reki-base text-reki-default\", // background\n \"rounded-lg shadow-lg ring ring-reki-line\", // border part\n className,\n )}\n >\n {children}\n </ComboboxBase.Popup>\n </ComboboxBase.Positioner>\n </ComboboxBase.Portal>\n );\n}\n\n// Size-dependent styles for TriggerValue icon\nconst triggerValueIconStyles: Record<\n RekiComboboxSize,\n { padding: string; iconSize: number; iconRight: string }\n> = {\n xs: { padding: \"pr-5\", iconSize: 12, iconRight: \"right-1\" },\n sm: { padding: \"pr-6\", iconSize: 14, iconRight: \"right-1.5\" },\n base: { padding: \"pr-8\", iconSize: 16, iconRight: \"right-2\" },\n lg: { padding: \"pr-10\", iconSize: 18, iconRight: \"right-3\" },\n};\n\nfunction TriggerValue({\n className,\n ...props\n}: ComboboxBase.Value.Props & { className?: string }) {\n const { size, hasError } = useContext(ComboboxContext);\n const iconStyles = triggerValueIconStyles[size];\n\n return (\n <ComboboxBase.Trigger\n data-reki-component=\"Combobox\"\n data-reki-part=\"trigger\"\n className={cn(\n inputVariants({ size, variant: hasError ? \"error\" : \"default\" }),\n \"relative flex items-center\",\n \"data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed\",\n \"data-[placeholder]:text-reki-placeholder\",\n iconStyles.padding,\n className,\n )}\n >\n <ComboboxBase.Value {...props} />\n <ComboboxBase.Icon\n className={cn(\n \"absolute top-1/2 -translate-y-1/2 flex items-center text-reki-subtle\",\n iconStyles.iconRight,\n )}\n >\n <CaretDownIcon size={iconStyles.iconSize} className=\"fill-current\" />\n </ComboboxBase.Icon>\n </ComboboxBase.Trigger>\n );\n}\n\n// Size-dependent styles for TriggerInput icons\nconst triggerInputIconStyles: Record<\n RekiComboboxSize,\n { padding: string; iconSize: number; clearRight: string; caretRight: string }\n> = {\n xs: {\n padding: \"pr-7\",\n iconSize: 12,\n clearRight: \"right-5\",\n caretRight: \"right-1\",\n },\n sm: {\n padding: \"pr-9\",\n iconSize: 14,\n clearRight: \"right-6\",\n caretRight: \"right-1.5\",\n },\n base: {\n padding: \"pr-12\",\n iconSize: 16,\n clearRight: \"right-8\",\n caretRight: \"right-2\",\n },\n lg: {\n padding: \"pr-14\",\n iconSize: 18,\n clearRight: \"right-9\",\n caretRight: \"right-3\",\n },\n};\n\nfunction TriggerInput({\n clearLabel = \"Clear selection\",\n showOptionsLabel = \"Show options\",\n ...props\n}: ComboboxBase.Input.Props & {\n /** Accessible label for the clear button. Pass a translated string for i18n.\n * @default \"Clear selection\"\n */\n clearLabel?: string;\n /** Accessible label for the dropdown trigger. Pass a translated string for i18n.\n * @default \"Show options\"\n */\n showOptionsLabel?: string;\n}) {\n const { size, hasError } = useContext(ComboboxContext);\n const iconStyles = triggerInputIconStyles[size];\n\n return (\n <div\n className={cn(\n \"relative inline-block w-full max-w-xs\",\n \"has-[:disabled]:opacity-50 has-[:disabled]:cursor-not-allowed\",\n props.className,\n )}\n >\n <ComboboxBase.Input\n {...props}\n className={cn(\n inputVariants({ size, variant: hasError ? \"error\" : \"default\" }),\n \"w-full\",\n iconStyles.padding,\n \"disabled:cursor-not-allowed\",\n )}\n />\n\n <ComboboxBase.Clear\n data-reki-component=\"Combobox\"\n data-reki-part=\"clear\"\n aria-label={clearLabel}\n className={cn(\n \"absolute top-1/2 flex -translate-y-1/2 cursor-pointer bg-transparent p-0\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-0\",\n iconStyles.clearRight,\n )}\n >\n <XIcon size={iconStyles.iconSize} />\n </ComboboxBase.Clear>\n\n <ComboboxBase.Trigger\n data-reki-component=\"Combobox\"\n data-reki-part=\"trigger\"\n aria-label={showOptionsLabel}\n className={cn(\n \"absolute top-1/2 -translate-y-1/2 flex items-center justify-center cursor-pointer text-reki-subtle\",\n \"m-0 bg-transparent p-0\", // Reset Stratus global button styles\n iconStyles.caretRight,\n )}\n >\n <ComboboxBase.Icon className=\"flex items-center\">\n <CaretDownIcon size={iconStyles.iconSize} className=\"fill-current\" />\n </ComboboxBase.Icon>\n </ComboboxBase.Trigger>\n </div>\n );\n}\n\nfunction Item({\n children,\n className,\n ...props\n}: ComboboxBase.Item.Props & { className?: string }) {\n return (\n <ComboboxBase.Item\n data-reki-component=\"Combobox\"\n data-reki-part=\"item\"\n {...props}\n className={cn(\n \"group mx-1.5 grid grid-cols-[1fr_16px] gap-2 rounded px-2 py-1.5 text-base\",\n \"cursor-pointer data-highlighted:bg-reki-tint\",\n // Disabled rows: muted text, no pointer, suppress highlight bg even\n // when keyboard nav lands on them. Base UI sets `data-disabled` on\n // the element when the `disabled` prop is true.\n \"data-[disabled]:cursor-not-allowed data-[disabled]:text-reki-subtle data-[disabled]:opacity-60 data-[disabled]:data-highlighted:bg-transparent\",\n className,\n )}\n >\n <div className=\"col-start-1\">{children}</div>\n <ComboboxBase.ItemIndicator className=\"col-start-2 flex items-center\">\n <CheckIcon />\n </ComboboxBase.ItemIndicator>\n </ComboboxBase.Item>\n );\n}\n\nfunction Empty(props: ComboboxBase.Empty.Props) {\n return (\n <ComboboxBase.Empty\n {...props}\n className={cn(\n \"mx-1.5 shrink-0 px-4 py-2 text-[0.925rem] leading-4 text-reki-subtle empty:m-0 empty:p-0\",\n )}\n children={props.children ?? \"No labels found.\"}\n />\n );\n}\n\nfunction Input(props: ComboboxBase.Input.Props) {\n return (\n <ComboboxBase.Input\n {...props}\n className={cn(\n inputVariants(),\n \"mx-1.5 w-[calc(100%-0.75rem)] shrink-0 first:mb-2\",\n props.className,\n )}\n />\n );\n}\n\nfunction List({\n className,\n ...props\n}: ComboboxBase.List.Props & { className?: string }) {\n return (\n <ComboboxBase.List\n {...props}\n className={cn(\n \"min-h-0 flex-1 overflow-y-auto overscroll-contain scroll-pt-2 scroll-pb-2\",\n className,\n )}\n />\n );\n}\n\nfunction GroupLabel(props: ComboboxBase.GroupLabel.Props) {\n return (\n <ComboboxBase.GroupLabel\n {...props}\n className={cn(\n \"mx-1.5 px-2 py-1.5 text-sm text-reki-subtle\",\n props.className,\n )}\n />\n );\n}\n\nfunction Group(props: ComboboxBase.Group.Props) {\n return (\n <ComboboxBase.Group\n {...props}\n className=\"border-t border-reki-hairline mt-2 pt-2 first:border-t-0 first:mt-0 first:pt-0\"\n />\n );\n}\n\nfunction Chip({\n removeLabel = \"Remove\",\n ...props\n}: ComboboxBase.Chip.Props & {\n /** Accessible label for the chip remove button. Pass a translated string for i18n.\n * @default \"Remove\"\n */\n removeLabel?: string;\n}) {\n return (\n <ComboboxBase.Chip\n {...props}\n className={cn(\n \"flex items-center gap-2.5\", // Layout\n \"h-6 pl-2 pr-[3px]\", // Dimensions\n \"rounded-sm ring-1 ring-reki-hairline\", // Border\n \"bg-reki-overlay\", // Background\n \"text-sm\", // Typography\n )}\n >\n {props.children}\n <ComboboxBase.ChipRemove\n data-reki-component=\"Combobox\"\n data-reki-part=\"chip-remove\"\n aria-label={removeLabel}\n className={cn(\n \"cursor-pointer rounded-md p-1 hover:bg-reki-fill-hover\",\n \"bg-transparent flex\",\n )}\n >\n <XIcon size={10} />\n </ComboboxBase.ChipRemove>\n </ComboboxBase.Chip>\n );\n}\n\n// Map size to min-height class for TriggerMultipleWithInput\nconst sizeToMinHeight: Record<RekiComboboxSize, string> = {\n xs: \"min-h-5\",\n sm: \"min-h-6.5\",\n base: \"min-h-9\",\n lg: \"min-h-10\",\n};\n\nfunction TriggerMultipleWithInput<ValueType>({\n placeholder,\n renderItem,\n className,\n inputSide = \"right\",\n value: controlledValue,\n}: {\n placeholder?: string;\n renderItem: (value: ValueType) => React.ReactNode;\n className?: string;\n inputSide?: \"right\" | \"top\";\n /** Optional controlled value for rendering chips (use when pre-selecting values) */\n value?: ValueType[];\n}) {\n const { size, hasError } = useContext(ComboboxContext);\n // Determine which value to use for rendering chips\n const chipsToRender = controlledValue;\n\n return (\n <ComboboxBase.Chips\n className={cn(\n inputVariants({ size, variant: hasError ? \"error\" : \"default\" }),\n \"flex flex-col\",\n \"gap-1 py-1 px-1.5\",\n sizeToMinHeight[size],\n \"h-auto\",\n \"data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed\",\n className,\n )}\n >\n {inputSide === \"top\" && (\n <ComboboxBase.Input\n placeholder={placeholder}\n className=\"w-full px-2 py-1 border-0 bg-inherit\"\n />\n )}\n {/* Chips container */}\n <div className=\"flex items-center flex-wrap gap-1.5 flex-1\">\n {/* Render chips from controlled value if provided */}\n {chipsToRender !== undefined &&\n chipsToRender.length > 0 &&\n chipsToRender.map((item) => renderItem(item))}\n {/* Also render from BaseUI's internal value for user selections */}\n <ComboboxBase.Value>\n {(internalValue: ValueType[]) => {\n // Skip rendering if using controlled value (to avoid duplicates)\n if (chipsToRender !== undefined) return null;\n return (\n <Fragment>\n {internalValue.map((item) => renderItem(item))}\n </Fragment>\n );\n }}\n </ComboboxBase.Value>\n {inputSide === \"right\" && (\n <ComboboxBase.Input\n placeholder={placeholder}\n className=\"min-w-[100px] flex-1 px-2 py-1 border-0 bg-inherit\"\n />\n )}\n </div>\n </ComboboxBase.Chips>\n );\n}\n\nRoot.displayName = \"Combobox.Root\";\nContent.displayName = \"Combobox.Content\";\nTriggerValue.displayName = \"Combobox.TriggerValue\";\nTriggerInput.displayName = \"Combobox.TriggerInput\";\nItem.displayName = \"Combobox.Item\";\nChip.displayName = \"Combobox.Chip\";\nTriggerMultipleWithInput.displayName = \"Combobox.TriggerMultipleWithInput\";\n\n/**\n * Combobox — autocomplete input with filterable dropdown list.\n *\n * Compound component: `Combobox` (Root), `.TriggerInput`, `.TriggerValue`,\n * `.TriggerMultipleWithInput`, `.Content`, `.Item`, `.Chip`, `.Input`,\n * `.Empty`, `.GroupLabel`, `.Group`, `.List`, `.Collection`.\n *\n * @example\n * ```tsx\n * <Combobox items={fruits} label=\"Fruit\">\n * <Combobox.TriggerInput placeholder=\"Pick a fruit…\" />\n * <Combobox.Content>\n * <Combobox.List>\n * {(item) => <Combobox.Item value={item}>{item}</Combobox.Item>}\n * </Combobox.List>\n * </Combobox.Content>\n * </Combobox>\n * ```\n *\n * @see https://base-ui.com/react/components/combobox\n */\nexport const Combobox = Object.assign(Root, {\n // Helper components\n Content,\n TriggerValue,\n TriggerInput,\n TriggerMultipleWithInput,\n\n // Slightly modified BaseUI\n Chip,\n Item,\n\n // Styled BaseUI\n Input,\n Empty,\n GroupLabel,\n Group,\n\n // Styled BaseUI\n List,\n\n // BaseUI\n Collection: ComboboxBase.Collection,\n\n Trigger: ComboboxBase.Trigger,\n Value: ComboboxBase.Value,\n Icon: ComboboxBase.Icon,\n\n // Filtering\n useFilter: ComboboxBase.useFilter,\n});\n"],"names":["REKI_INPUT_VARIANTS","ComboboxContext","createContext","Root","label","required","labelTooltip","description","error","children","size","props","comboboxControl","ComboboxBase.Root","jsx","Field","Content","className","align","sideOffset","alignOffset","side","containerProp","contextContainer","usePortalContainer","ComboboxBase.Portal","ComboboxBase.Positioner","ComboboxBase.Popup","cn","triggerValueIconStyles","TriggerValue","hasError","useContext","iconStyles","jsxs","ComboboxBase.Trigger","inputVariants","ComboboxBase.Value","ComboboxBase.Icon","CaretDownIcon","triggerInputIconStyles","TriggerInput","clearLabel","showOptionsLabel","ComboboxBase.Input","ComboboxBase.Clear","XIcon","Item","ComboboxBase.Item","ComboboxBase.ItemIndicator","CheckIcon","Empty","ComboboxBase.Empty","Input","List","ComboboxBase.List","GroupLabel","ComboboxBase.GroupLabel","Group","ComboboxBase.Group","Chip","removeLabel","ComboboxBase.Chip","ComboboxBase.ChipRemove","sizeToMinHeight","TriggerMultipleWithInput","placeholder","renderItem","inputSide","controlledValue","chipsToRender","ComboboxBase.Chips","item","internalValue","Fragment","Combobox","ComboboxBase.Collection","ComboboxBase.useFilter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"combobox-iytvpzp5poljxgek.js","sources":["../../src/components/combobox/combobox.tsx"],"sourcesContent":["import { Combobox as ComboboxBase } from \"@base-ui/react/combobox\";\nimport { CaretDownIcon, CheckIcon, XIcon } from \"@phosphor-icons/react\";\nimport {\n Fragment,\n createContext,\n useContext,\n type PropsWithChildren,\n type ReactNode,\n} from \"react\";\nimport {\n inputVariants,\n REKI_INPUT_VARIANTS,\n type RekiInputSize,\n} from \"../input/input\";\nimport { cn } from \"../../utils/cn\";\nimport { resolveVariant } from \"../../utils/resolve-variant\";\nimport { Field, type FieldErrorMatch } from \"../field/field\";\nimport {\n usePortalContainer,\n type PortalContainer,\n} from \"../../utils/portal-provider\";\n\n/** Combobox variant definitions. */\nexport const REKI_COMBOBOX_VARIANTS = {\n size: REKI_INPUT_VARIANTS.size,\n inputSide: {\n right: {\n classes: \"\",\n description: \"Input positioned inline to the right of chips\",\n },\n top: {\n classes: \"\",\n description: \"Input positioned above chips\",\n },\n },\n} as const;\n\nexport const REKI_COMBOBOX_DEFAULT_VARIANTS = {\n size: \"base\",\n inputSide: \"right\",\n} as const;\n\n// Context to pass size and error state down to sub-components\nconst ComboboxContext = createContext<{\n size: RekiInputSize;\n hasError: boolean;\n}>({ size: \"base\", hasError: false });\n\n// Derived types from REKI_COMBOBOX_VARIANTS\nexport type RekiComboboxSize = keyof typeof REKI_COMBOBOX_VARIANTS.size;\nexport type RekiComboboxInputSide =\n keyof typeof REKI_COMBOBOX_VARIANTS.inputSide;\n\nexport interface RekiComboboxVariantsProps {\n /**\n * Size of the combobox trigger. Matches Input component sizes.\n * - `\"xs\"` — Extra small for compact UIs (h-5 / 20px)\n * - `\"sm\"` — Small for secondary fields (h-6.5 / 26px)\n * - `\"base\"` — Default size (h-9 / 36px)\n * - `\"lg\"` — Large for prominent fields (h-10 / 40px)\n * @default \"base\"\n */\n size?: RekiComboboxSize;\n /**\n * Position of the text input relative to chips in multi-select mode.\n * - `\"right\"` — Input inline to the right of chips\n * - `\"top\"` — Input above chips\n * @default \"right\"\n */\n inputSide?: RekiComboboxInputSide;\n}\n\nexport function comboboxVariants({\n inputSide = REKI_COMBOBOX_DEFAULT_VARIANTS.inputSide,\n}: RekiComboboxVariantsProps = {}) {\n return cn(\n resolveVariant(\n REKI_COMBOBOX_VARIANTS.inputSide,\n inputSide,\n REKI_COMBOBOX_DEFAULT_VARIANTS.inputSide,\n ).classes,\n );\n}\n\n// Legacy type alias for backwards compatibility\nexport type ComboboxInputSide = RekiComboboxInputSide;\nexport type ComboboxSize = RekiComboboxSize;\n\nexport type ComboboxRootProps<\n Value = unknown,\n Multiple extends boolean | undefined = false,\n> = ComboboxBase.Root.Props<Value, Multiple>;\n\n/**\n * Combobox component props (simplified for documentation; the actual Root is generic).\n *\n * Combobox provides an autocomplete/typeahead input with a filterable dropdown.\n * Supports single-select, multi-select with chips, grouped items, and Field wrapper integration.\n *\n * @example\n * ```tsx\n * // Single-select with search input\n * <Combobox value={value} onValueChange={setValue} items={options}>\n * <Combobox.TriggerInput placeholder=\"Search…\" />\n * <Combobox.Content>\n * <Combobox.List>\n * {(item) => <Combobox.Item value={item}>{item.label}</Combobox.Item>}\n * </Combobox.List>\n * <Combobox.Empty>No results</Combobox.Empty>\n * </Combobox.Content>\n * </Combobox>\n *\n * // Multi-select with chips\n * <Combobox multiple items={options} label=\"Tags\">\n * <Combobox.TriggerMultipleWithInput\n * placeholder=\"Add tag…\"\n * renderItem={(item) => <Combobox.Chip value={item}>{item.label}</Combobox.Chip>}\n * />\n * <Combobox.Content>\n * <Combobox.List>\n * {(item) => <Combobox.Item value={item}>{item.label}</Combobox.Item>}\n * </Combobox.List>\n * </Combobox.Content>\n * </Combobox>\n * ```\n */\nexport interface ComboboxProps extends RekiComboboxVariantsProps {\n /** Array of items to display in the dropdown */\n items: unknown[];\n /** Currently selected value(s) */\n value?: unknown;\n /** Callback when selection changes */\n onValueChange?: (value: unknown) => void;\n /** Enable multi-select mode */\n multiple?: boolean;\n /** Combobox content (trigger, content, items) */\n children: ReactNode;\n /** Additional CSS classes */\n className?: string;\n /** Label content for the combobox (enables Field wrapper) - can be a string or any React node */\n label?: ReactNode;\n /** Whether the combobox is required */\n required?: boolean;\n /** Tooltip content to display next to the label via an info icon */\n labelTooltip?: ReactNode;\n /** Helper text displayed below the combobox */\n description?: ReactNode;\n /** Error message or validation error object */\n error?: string | { message: ReactNode; match: FieldErrorMatch };\n}\n\nfunction Root<Value, Multiple extends boolean | undefined = false>({\n label,\n required,\n labelTooltip,\n description,\n error,\n children,\n size = \"base\",\n ...props\n}: ComboboxBase.Root.Props<Value, Multiple> & {\n label?: ReactNode;\n required?: boolean;\n labelTooltip?: ReactNode;\n description?: ReactNode;\n error?: string | { message: ReactNode; match: FieldErrorMatch };\n size?: RekiComboboxSize;\n}) {\n const comboboxControl = (\n <ComboboxContext.Provider value={{ size, hasError: Boolean(error) }}>\n <ComboboxBase.Root {...props}>{children}</ComboboxBase.Root>\n </ComboboxContext.Provider>\n );\n\n // Render with Field wrapper if label, description, or error are provided\n if (label) {\n return (\n <Field\n label={label}\n required={required}\n labelTooltip={labelTooltip}\n description={description}\n error={\n error\n ? typeof error === \"string\"\n ? { message: error, match: true }\n : error\n : undefined\n }\n >\n {comboboxControl}\n </Field>\n );\n }\n\n // Render bare combobox without Field wrapper\n return comboboxControl;\n}\n\nfunction Content({\n children,\n className,\n align = \"start\",\n sideOffset = 4,\n alignOffset,\n side,\n container: containerProp,\n}: PropsWithChildren<{\n className?: string;\n align?: ComboboxBase.Positioner.Props[\"align\"];\n alignOffset?: ComboboxBase.Positioner.Props[\"alignOffset\"];\n side?: ComboboxBase.Positioner.Props[\"side\"];\n sideOffset?: ComboboxBase.Positioner.Props[\"sideOffset\"];\n /**\n * Container element for the portal. Use this to render the combobox inside\n * a Shadow DOM or custom container. Overrides `RekiPortalProvider` context.\n * @default document.body (or RekiPortalProvider container if set)\n */\n container?: PortalContainer;\n}>) {\n const contextContainer = usePortalContainer();\n const container = containerProp ?? contextContainer ?? undefined;\n\n return (\n <ComboboxBase.Portal container={container}>\n <ComboboxBase.Positioner\n className=\"\"\n align={align}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n side={side}\n >\n <ComboboxBase.Popup\n className={cn(\n \"flex flex-col\", // flexbox layout for sticky input + scrollable list\n \"max-h-[min(var(--available-height),24rem)] max-w-(--available-width) min-w-(--anchor-width) py-1.5\",\n \"bg-reki-base text-reki-default\", // background\n \"rounded-lg shadow-lg ring ring-reki-line\", // border part\n className,\n )}\n >\n {children}\n </ComboboxBase.Popup>\n </ComboboxBase.Positioner>\n </ComboboxBase.Portal>\n );\n}\n\n// Size-dependent styles for TriggerValue icon\nconst triggerValueIconStyles: Record<\n RekiComboboxSize,\n { padding: string; iconSize: number; iconRight: string }\n> = {\n xs: { padding: \"pr-5\", iconSize: 12, iconRight: \"right-1\" },\n sm: { padding: \"pr-6\", iconSize: 14, iconRight: \"right-1.5\" },\n base: { padding: \"pr-8\", iconSize: 16, iconRight: \"right-2\" },\n lg: { padding: \"pr-10\", iconSize: 18, iconRight: \"right-3\" },\n};\n\nfunction TriggerValue({\n className,\n ...props\n}: ComboboxBase.Value.Props & { className?: string }) {\n const { size, hasError } = useContext(ComboboxContext);\n const iconStyles = triggerValueIconStyles[size];\n\n return (\n <ComboboxBase.Trigger\n data-reki-component=\"Combobox\"\n data-reki-part=\"trigger\"\n className={cn(\n inputVariants({ size, variant: hasError ? \"error\" : \"default\" }),\n \"relative flex items-center\",\n \"data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed\",\n \"data-[placeholder]:text-reki-placeholder\",\n iconStyles.padding,\n className,\n )}\n >\n <ComboboxBase.Value {...props} />\n <ComboboxBase.Icon\n className={cn(\n \"absolute top-1/2 -translate-y-1/2 flex items-center text-reki-subtle\",\n iconStyles.iconRight,\n )}\n >\n <CaretDownIcon size={iconStyles.iconSize} className=\"fill-current\" />\n </ComboboxBase.Icon>\n </ComboboxBase.Trigger>\n );\n}\n\n// Size-dependent styles for TriggerInput icons\nconst triggerInputIconStyles: Record<\n RekiComboboxSize,\n { padding: string; iconSize: number; clearRight: string; caretRight: string }\n> = {\n xs: {\n padding: \"pr-7\",\n iconSize: 12,\n clearRight: \"right-5\",\n caretRight: \"right-1\",\n },\n sm: {\n padding: \"pr-9\",\n iconSize: 14,\n clearRight: \"right-6\",\n caretRight: \"right-1.5\",\n },\n base: {\n padding: \"pr-12\",\n iconSize: 16,\n clearRight: \"right-8\",\n caretRight: \"right-2\",\n },\n lg: {\n padding: \"pr-14\",\n iconSize: 18,\n clearRight: \"right-9\",\n caretRight: \"right-3\",\n },\n};\n\nfunction TriggerInput({\n clearLabel = \"Clear selection\",\n showOptionsLabel = \"Show options\",\n ...props\n}: ComboboxBase.Input.Props & {\n /** Accessible label for the clear button. Pass a translated string for i18n.\n * @default \"Clear selection\"\n */\n clearLabel?: string;\n /** Accessible label for the dropdown trigger. Pass a translated string for i18n.\n * @default \"Show options\"\n */\n showOptionsLabel?: string;\n}) {\n const { size, hasError } = useContext(ComboboxContext);\n const iconStyles = triggerInputIconStyles[size];\n\n return (\n <div\n className={cn(\n \"relative inline-block w-full max-w-xs\",\n \"has-[:disabled]:opacity-50 has-[:disabled]:cursor-not-allowed\",\n props.className,\n )}\n >\n <ComboboxBase.Input\n {...props}\n className={cn(\n inputVariants({ size, variant: hasError ? \"error\" : \"default\" }),\n \"w-full\",\n iconStyles.padding,\n \"disabled:cursor-not-allowed\",\n )}\n />\n\n <ComboboxBase.Clear\n data-reki-component=\"Combobox\"\n data-reki-part=\"clear\"\n aria-label={clearLabel}\n className={cn(\n \"absolute top-1/2 flex -translate-y-1/2 cursor-pointer bg-transparent p-0\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-0\",\n iconStyles.clearRight,\n )}\n >\n <XIcon size={iconStyles.iconSize} />\n </ComboboxBase.Clear>\n\n <ComboboxBase.Trigger\n data-reki-component=\"Combobox\"\n data-reki-part=\"trigger\"\n aria-label={showOptionsLabel}\n className={cn(\n \"absolute top-1/2 -translate-y-1/2 flex items-center justify-center cursor-pointer text-reki-subtle\",\n \"m-0 bg-transparent p-0\", // Reset Stratus global button styles\n iconStyles.caretRight,\n )}\n >\n <ComboboxBase.Icon className=\"flex items-center\">\n <CaretDownIcon size={iconStyles.iconSize} className=\"fill-current\" />\n </ComboboxBase.Icon>\n </ComboboxBase.Trigger>\n </div>\n );\n}\n\nfunction Item({\n children,\n className,\n ...props\n}: ComboboxBase.Item.Props & { className?: string }) {\n return (\n <ComboboxBase.Item\n data-reki-component=\"Combobox\"\n data-reki-part=\"item\"\n {...props}\n className={cn(\n \"group mx-1.5 grid grid-cols-[1fr_16px] gap-2 rounded px-2 py-1.5 text-base\",\n \"cursor-pointer data-highlighted:bg-reki-tint\",\n // Disabled rows: muted text, no pointer, suppress highlight bg even\n // when keyboard nav lands on them. Base UI sets `data-disabled` on\n // the element when the `disabled` prop is true.\n \"data-[disabled]:cursor-not-allowed data-[disabled]:text-reki-subtle data-[disabled]:opacity-60 data-[disabled]:data-highlighted:bg-transparent\",\n className,\n )}\n >\n <div className=\"col-start-1\">{children}</div>\n <ComboboxBase.ItemIndicator className=\"col-start-2 flex items-center\">\n <CheckIcon />\n </ComboboxBase.ItemIndicator>\n </ComboboxBase.Item>\n );\n}\n\nfunction Empty(props: ComboboxBase.Empty.Props) {\n return (\n <ComboboxBase.Empty\n {...props}\n className={cn(\n \"mx-1.5 shrink-0 px-4 py-2 text-[0.925rem] leading-4 text-reki-subtle empty:m-0 empty:p-0\",\n )}\n children={props.children ?? \"No labels found.\"}\n />\n );\n}\n\nfunction Input(props: ComboboxBase.Input.Props) {\n return (\n <ComboboxBase.Input\n {...props}\n className={cn(\n inputVariants(),\n \"mx-1.5 w-[calc(100%-0.75rem)] shrink-0 first:mb-2\",\n props.className,\n )}\n />\n );\n}\n\nfunction List({\n className,\n ...props\n}: ComboboxBase.List.Props & { className?: string }) {\n return (\n <ComboboxBase.List\n {...props}\n className={cn(\n \"min-h-0 flex-1 overflow-y-auto overscroll-contain scroll-pt-2 scroll-pb-2\",\n className,\n )}\n />\n );\n}\n\nfunction GroupLabel(props: ComboboxBase.GroupLabel.Props) {\n return (\n <ComboboxBase.GroupLabel\n {...props}\n className={cn(\n \"mx-1.5 px-2 py-1.5 text-sm text-reki-subtle\",\n props.className,\n )}\n />\n );\n}\n\nfunction Group(props: ComboboxBase.Group.Props) {\n return (\n <ComboboxBase.Group\n {...props}\n className=\"border-t border-reki-hairline mt-2 pt-2 first:border-t-0 first:mt-0 first:pt-0\"\n />\n );\n}\n\nfunction Chip({\n removeLabel = \"Remove\",\n ...props\n}: ComboboxBase.Chip.Props & {\n /** Accessible label for the chip remove button. Pass a translated string for i18n.\n * @default \"Remove\"\n */\n removeLabel?: string;\n}) {\n return (\n <ComboboxBase.Chip\n {...props}\n className={cn(\n \"flex items-center gap-2.5\", // Layout\n \"h-6 pl-2 pr-[3px]\", // Dimensions\n \"rounded-sm ring-1 ring-reki-hairline\", // Border\n \"bg-reki-overlay\", // Background\n \"text-sm\", // Typography\n )}\n >\n {props.children}\n <ComboboxBase.ChipRemove\n data-reki-component=\"Combobox\"\n data-reki-part=\"chip-remove\"\n aria-label={removeLabel}\n className={cn(\n \"cursor-pointer rounded-md p-1 hover:bg-reki-fill-hover\",\n \"bg-transparent flex\",\n )}\n >\n <XIcon size={10} />\n </ComboboxBase.ChipRemove>\n </ComboboxBase.Chip>\n );\n}\n\n// Map size to min-height class for TriggerMultipleWithInput\nconst sizeToMinHeight: Record<RekiComboboxSize, string> = {\n xs: \"min-h-5\",\n sm: \"min-h-6.5\",\n base: \"min-h-9\",\n lg: \"min-h-10\",\n};\n\nfunction TriggerMultipleWithInput<ValueType>({\n placeholder,\n renderItem,\n className,\n inputSide = \"right\",\n value: controlledValue,\n}: {\n placeholder?: string;\n renderItem: (value: ValueType) => React.ReactNode;\n className?: string;\n inputSide?: \"right\" | \"top\";\n /** Optional controlled value for rendering chips (use when pre-selecting values) */\n value?: ValueType[];\n}) {\n const { size, hasError } = useContext(ComboboxContext);\n // Determine which value to use for rendering chips\n const chipsToRender = controlledValue;\n\n return (\n <ComboboxBase.Chips\n className={cn(\n inputVariants({ size, variant: hasError ? \"error\" : \"default\" }),\n \"flex flex-col\",\n \"gap-1 py-1 px-1.5\",\n sizeToMinHeight[size],\n \"h-auto\",\n \"data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed\",\n className,\n )}\n >\n {inputSide === \"top\" && (\n <ComboboxBase.Input\n placeholder={placeholder}\n className=\"w-full px-2 py-1 border-0 bg-inherit\"\n />\n )}\n {/* Chips container */}\n <div className=\"flex items-center flex-wrap gap-1.5 flex-1\">\n {/* Render chips from controlled value if provided */}\n {chipsToRender !== undefined &&\n chipsToRender.length > 0 &&\n chipsToRender.map((item) => renderItem(item))}\n {/* Also render from BaseUI's internal value for user selections */}\n <ComboboxBase.Value>\n {(internalValue: ValueType[]) => {\n // Skip rendering if using controlled value (to avoid duplicates)\n if (chipsToRender !== undefined) return null;\n return (\n <Fragment>\n {internalValue.map((item) => renderItem(item))}\n </Fragment>\n );\n }}\n </ComboboxBase.Value>\n {inputSide === \"right\" && (\n <ComboboxBase.Input\n placeholder={placeholder}\n className=\"min-w-[100px] flex-1 px-2 py-1 border-0 bg-inherit\"\n />\n )}\n </div>\n </ComboboxBase.Chips>\n );\n}\n\nRoot.displayName = \"Combobox.Root\";\nContent.displayName = \"Combobox.Content\";\nTriggerValue.displayName = \"Combobox.TriggerValue\";\nTriggerInput.displayName = \"Combobox.TriggerInput\";\nItem.displayName = \"Combobox.Item\";\nChip.displayName = \"Combobox.Chip\";\nTriggerMultipleWithInput.displayName = \"Combobox.TriggerMultipleWithInput\";\n\n/**\n * Combobox — autocomplete input with filterable dropdown list.\n *\n * Compound component: `Combobox` (Root), `.TriggerInput`, `.TriggerValue`,\n * `.TriggerMultipleWithInput`, `.Content`, `.Item`, `.Chip`, `.Input`,\n * `.Empty`, `.GroupLabel`, `.Group`, `.List`, `.Collection`.\n *\n * @example\n * ```tsx\n * <Combobox items={fruits} label=\"Fruit\">\n * <Combobox.TriggerInput placeholder=\"Pick a fruit…\" />\n * <Combobox.Content>\n * <Combobox.List>\n * {(item) => <Combobox.Item value={item}>{item}</Combobox.Item>}\n * </Combobox.List>\n * </Combobox.Content>\n * </Combobox>\n * ```\n *\n * @see https://base-ui.com/react/components/combobox\n */\nexport const Combobox = Object.assign(Root, {\n // Helper components\n Content,\n TriggerValue,\n TriggerInput,\n TriggerMultipleWithInput,\n\n // Slightly modified BaseUI\n Chip,\n Item,\n\n // Styled BaseUI\n Input,\n Empty,\n GroupLabel,\n Group,\n\n // Styled BaseUI\n List,\n\n // BaseUI\n Collection: ComboboxBase.Collection,\n\n Trigger: ComboboxBase.Trigger,\n Value: ComboboxBase.Value,\n Icon: ComboboxBase.Icon,\n\n // Filtering\n useFilter: ComboboxBase.useFilter,\n});\n"],"names":["REKI_INPUT_VARIANTS","ComboboxContext","createContext","Root","label","required","labelTooltip","description","error","children","size","props","comboboxControl","ComboboxBase.Root","jsx","Field","Content","className","align","sideOffset","alignOffset","side","containerProp","contextContainer","usePortalContainer","ComboboxBase.Portal","ComboboxBase.Positioner","ComboboxBase.Popup","cn","triggerValueIconStyles","TriggerValue","hasError","useContext","iconStyles","jsxs","ComboboxBase.Trigger","inputVariants","ComboboxBase.Value","ComboboxBase.Icon","CaretDownIcon","triggerInputIconStyles","TriggerInput","clearLabel","showOptionsLabel","ComboboxBase.Input","ComboboxBase.Clear","XIcon","Item","ComboboxBase.Item","ComboboxBase.ItemIndicator","CheckIcon","Empty","ComboboxBase.Empty","Input","List","ComboboxBase.List","GroupLabel","ComboboxBase.GroupLabel","Group","ComboboxBase.Group","Chip","removeLabel","ComboboxBase.Chip","ComboboxBase.ChipRemove","sizeToMinHeight","TriggerMultipleWithInput","placeholder","renderItem","inputSide","controlledValue","chipsToRender","ComboboxBase.Chips","item","internalValue","Fragment","Combobox","ComboboxBase.Collection","ComboboxBase.useFilter"],"mappings":"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"}
|
package/dist/chunks/{command-palette-fe5cjfdgsg3t17vq.js → command-palette-k6vrx8ely8rmf4a5.js}
RENAMED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import { jsx as e, jsxs as g, Fragment as P } from "react/jsx-runtime";
|
|
3
3
|
import { forwardRef as T, useContext as N, useCallback as b, useRef as K, createContext as w } from "react";
|
|
4
4
|
import { CaretRightIcon as H, ArrowSquareOutIcon as M, ArrowRightIcon as _, MagnifyingGlassIcon as F } from "@phosphor-icons/react";
|
|
5
|
-
import { L as G } from "./layer-card-
|
|
5
|
+
import { L as G } from "./layer-card-iuquuc1w3116umfw.js";
|
|
6
6
|
import { L as j } from "./loader-cxzp72mn53lzbv9c.js";
|
|
7
7
|
import { c as f } from "./cn-ct4n7r74mh8y0f48.js";
|
|
8
8
|
import { u as z } from "./portal-provider-off76og7tjyz96ys.js";
|
|
9
|
-
import { aa as V, ac as $, af as q, bw as v, ae as B, ad as U, ag as J, bx as O, at as Q, ax as W, ay as X, az as Y } from "./vendor-base-ui-
|
|
9
|
+
import { aa as V, ac as $, af as q, bw as v, ae as B, ad as U, ag as J, bx as O, at as Q, ax as W, ay as X, az as Y } from "./vendor-base-ui-djdjrfuoxlb1lubi.js";
|
|
10
10
|
const C = w({});
|
|
11
11
|
function I({
|
|
12
12
|
open: t,
|
|
@@ -33,7 +33,7 @@ function I({
|
|
|
33
33
|
{
|
|
34
34
|
render: /* @__PURE__ */ e(Y, {}),
|
|
35
35
|
className: f(
|
|
36
|
-
"fixed top-[10vh] left-1/2 w-full max-w-2xl -translate-x-1/2",
|
|
36
|
+
"fixed top-[10vh] left-1/2 w-full max-w-2xl -translate-x-1/2 shadow-lg",
|
|
37
37
|
"overflow-hidden rounded-lg",
|
|
38
38
|
"duration-150 data-[ending-style]:scale-90 data-[ending-style]:opacity-0 data-[starting-style]:scale-90 data-[starting-style]:opacity-0"
|
|
39
39
|
),
|
|
@@ -400,4 +400,4 @@ export {
|
|
|
400
400
|
we as R,
|
|
401
401
|
Ne as a
|
|
402
402
|
};
|
|
403
|
-
//# sourceMappingURL=command-palette-
|
|
403
|
+
//# sourceMappingURL=command-palette-k6vrx8ely8rmf4a5.js.map
|