@powerhousedao/design-system 6.2.3-dev.9 → 6.2.3-dev.91
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/dist/PinFilled-cSbUqZCA.js +41 -0
- package/dist/PinFilled-cSbUqZCA.js.map +1 -0
- package/dist/{Removed-CO_5C1ce.js → Removed-OP4eTrAN.js} +1 -1
- package/dist/{Removed-CO_5C1ce.js.map → Removed-OP4eTrAN.js.map} +1 -1
- package/dist/{Tabler-FjvVqX5a.js → Tabler-rjLxlzUV.js} +1 -1
- package/dist/{Tabler-FjvVqX5a.js.map → Tabler-rjLxlzUV.js.map} +1 -1
- package/dist/add-local-drive-form.impl-COIpcmgW.js +76 -0
- package/dist/add-local-drive-form.impl-COIpcmgW.js.map +1 -0
- package/dist/add-remote-drive-form.impl-_SqOzbSt.js +123 -0
- package/dist/add-remote-drive-form.impl-_SqOzbSt.js.map +1 -0
- package/dist/address-DVC3zalI.js +92 -0
- package/dist/address-DVC3zalI.js.map +1 -0
- package/dist/button-BYcXvZXr.d.ts +13 -0
- package/dist/button-BYcXvZXr.d.ts.map +1 -0
- package/dist/{character-counter-BWoglM2P.d.ts → character-counter-BZmZZCHN.d.ts} +2 -1
- package/dist/character-counter-BZmZZCHN.d.ts.map +1 -0
- package/dist/{checkbox-CGBtXQnI.d.ts → checkbox-BIAGwP7d.d.ts} +4 -4
- package/dist/checkbox-BIAGwP7d.d.ts.map +1 -0
- package/dist/{checkbox-base-CZo-4eL0.d.ts → checkbox-base-Bm0GPWgm.d.ts} +2 -2
- package/dist/checkbox-base-Bm0GPWgm.d.ts.map +1 -0
- package/dist/combobox.impl-CQHG0NgO.js +144 -0
- package/dist/combobox.impl-CQHG0NgO.js.map +1 -0
- package/dist/{command-tFzjgzge.d.ts → command-DHHTsHfH.d.ts} +5 -5
- package/dist/command-DHHTsHfH.d.ts.map +1 -0
- package/dist/connect/components/toast/toast.d.ts +8 -10
- package/dist/connect/components/toast/toast.d.ts.map +1 -1
- package/dist/connect/components/toast/toast.js +4 -4
- package/dist/connect/components/toast/toast.js.map +1 -1
- package/dist/connect/index.d.ts +539 -364
- package/dist/connect/index.d.ts.map +1 -1
- package/dist/connect/index.js +1175 -1653
- package/dist/connect/index.js.map +1 -1
- package/dist/{content-BHWIqmio.d.ts → content-Cv0kRppo.d.ts} +3 -3
- package/dist/content-Cv0kRppo.d.ts.map +1 -0
- package/dist/default-editor.impl-a6EOuEme.js +30 -0
- package/dist/default-editor.impl-a6EOuEme.js.map +1 -0
- package/dist/document-timeline.impl-zx6f7k2d.js +254 -0
- package/dist/document-timeline.impl-zx6f7k2d.js.map +1 -0
- package/dist/drive-settings-form.impl-yV9u4h5c.js +172 -0
- package/dist/drive-settings-form.impl-yV9u4h5c.js.map +1 -0
- package/dist/{enum-field-CwZVs3Ux.d.ts → enum-field-Cub1rt3e.d.ts} +4 -4
- package/dist/enum-field-Cub1rt3e.d.ts.map +1 -0
- package/dist/{form-CKRKn0TQ.d.ts → form-Brj5AQNr.d.ts} +3 -4
- package/dist/form-Brj5AQNr.d.ts.map +1 -0
- package/dist/{form-description-CYkcMEzm.d.ts → form-description-DJrDJzJi.d.ts} +2 -1
- package/dist/form-description-DJrDJzJi.d.ts.map +1 -0
- package/dist/{form-group-C8kL6pdZ.d.ts → form-group-Ckd28lpW.d.ts} +2 -1
- package/dist/form-group-Ckd28lpW.d.ts.map +1 -0
- package/dist/{form-label-b6nQi0XO.d.ts → form-label-C8ghd_lR.d.ts} +2 -1
- package/dist/form-label-C8ghd_lR.d.ts.map +1 -0
- package/dist/{form-message-Dq72nBXz.d.ts → form-message-CnKUkvlj.d.ts} +2 -1
- package/dist/form-message-CnKUkvlj.d.ts.map +1 -0
- package/dist/form-server-error-message-D2tFtDZ0.d.ts +6 -0
- package/dist/form-server-error-message-D2tFtDZ0.d.ts.map +1 -0
- package/dist/formatted-json-viewer.impl-COERJCiE.js +58 -0
- package/dist/formatted-json-viewer.impl-COERJCiE.js.map +1 -0
- package/dist/icon-DQ2yrWYv.js +358 -0
- package/dist/icon-DQ2yrWYv.js.map +1 -0
- package/dist/{icon-C4QOpsdI.js → icon-components-NK-y5dkv.js} +7 -481
- package/dist/icon-components-NK-y5dkv.js.map +1 -0
- package/dist/{id-autocomplete-C-hwriS5.d.ts → id-autocomplete-8LcmtjSR.d.ts} +3 -3
- package/dist/id-autocomplete-8LcmtjSR.d.ts.map +1 -0
- package/dist/{id-autocomplete-input-container-DFEyPh5p.d.ts → id-autocomplete-input-container-D2L7p-Yh.d.ts} +3 -3
- package/dist/id-autocomplete-input-container-D2L7p-Yh.d.ts.map +1 -0
- package/dist/{id-autocomplete-list-EzLpF23C.d.ts → id-autocomplete-list-BXvN07Hr.d.ts} +3 -3
- package/dist/id-autocomplete-list-BXvN07Hr.d.ts.map +1 -0
- package/dist/{id-autocomplete-list-option-CB5B07Hi.d.ts → id-autocomplete-list-option-D_1BOv50.d.ts} +4 -3
- package/dist/id-autocomplete-list-option-D_1BOv50.d.ts.map +1 -0
- package/dist/{index--hDSfvJT.d.ts → index-5FEr1tXH.d.ts} +25 -59
- package/dist/index-5FEr1tXH.d.ts.map +1 -0
- package/dist/index-C-Tup7Br.d.ts +4 -0
- package/dist/index-D6Zk5OLV.d.ts +4 -0
- package/dist/index-i-xHUsLr.d.ts +30 -0
- package/dist/index-jfVVOU-H.d.ts +2 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.js +2 -2
- package/dist/{input-BpEQjaWV.d.ts → input-WDvjJFqf.d.ts} +2 -2
- package/dist/input-WDvjJFqf.d.ts.map +1 -0
- package/dist/json-viewer-Kg0IBIt-.d.ts +7 -0
- package/dist/json-viewer-Kg0IBIt-.d.ts.map +1 -0
- package/dist/label-nH2HoKfI.js +15 -0
- package/dist/label-nH2HoKfI.js.map +1 -0
- package/dist/location-info-C3YbSsV0.js +47 -0
- package/dist/location-info-C3YbSsV0.js.map +1 -0
- package/dist/{message-list-C4mPpBBa.d.ts → message-list-D8d2ltLd.d.ts} +3 -3
- package/dist/message-list-D8d2ltLd.d.ts.map +1 -0
- package/dist/{popover-XSBOuSih.d.ts → popover-TvQxa0RU.d.ts} +2 -2
- package/dist/popover-TvQxa0RU.d.ts.map +1 -0
- package/dist/{radio-eL0Oy86J.d.ts → radio-CTS4WsNy.d.ts} +2 -2
- package/dist/radio-CTS4WsNy.d.ts.map +1 -0
- package/dist/{radio-group-Bkli6nUz.d.ts → radio-group-CROIwgYz.d.ts} +2 -2
- package/dist/radio-group-CROIwgYz.d.ts.map +1 -0
- package/dist/{radio-group-field-wlqeiLN3.d.ts → radio-group-field-X18o287K.d.ts} +5 -6
- package/dist/radio-group-field-X18o287K.d.ts.map +1 -0
- package/dist/revision-history.impl-DRbeai2m.js +642 -0
- package/dist/revision-history.impl-DRbeai2m.js.map +1 -0
- package/dist/{search-autocomplete-BJJkrZ1i.d.ts → search-autocomplete-COvFRZIb.d.ts} +3 -3
- package/dist/search-autocomplete-COvFRZIb.d.ts.map +1 -0
- package/dist/{select-field-C97QIhUL.d.ts → select-field-DHaCiAso.d.ts} +5 -5
- package/dist/select-field-DHaCiAso.d.ts.map +1 -0
- package/dist/{selected-content-CGsK5PR4.d.ts → selected-content-CSTFkQr9.d.ts} +3 -3
- package/dist/selected-content-CSTFkQr9.d.ts.map +1 -0
- package/dist/{sidebar-DOoE4krt.d.ts → sidebar-DFqreKf1.d.ts} +3 -3
- package/dist/sidebar-DFqreKf1.d.ts.map +1 -0
- package/dist/{sidebar-provider-C2eyz9TL.d.ts → sidebar-provider-CZHhqW5n.d.ts} +4 -8
- package/dist/sidebar-provider-CZHhqW5n.d.ts.map +1 -0
- package/dist/splitted-input-diff-DNKcSOAB.d.ts +11 -0
- package/dist/splitted-input-diff-DNKcSOAB.d.ts.map +1 -0
- package/dist/{src-CVV6HzQZ.js → src-DhSJCeu5.js} +180 -24
- package/dist/src-DhSJCeu5.js.map +1 -0
- package/dist/style.css +144 -62
- package/dist/text-field-Dq1DTC_t.d.ts +9 -0
- package/dist/text-field-Dq1DTC_t.d.ts.map +1 -0
- package/dist/{text-input-8zXIWHLi.d.ts → text-input-CRjOT54_.d.ts} +5 -6
- package/dist/text-input-CRjOT54_.d.ts.map +1 -0
- package/dist/text-input-diff-CcF0QblL.d.ts +12 -0
- package/dist/text-input-diff-CcF0QblL.d.ts.map +1 -0
- package/dist/{tooltip-BxS9HpML.d.ts → tooltip-B4uQJPUm.d.ts} +3 -4
- package/dist/tooltip-B4uQJPUm.d.ts.map +1 -0
- package/dist/{types-Bsn62tJB.d.ts → types-BNTIrhb5.d.ts} +2 -1
- package/dist/types-BNTIrhb5.d.ts.map +1 -0
- package/dist/{types-BTq-St7H.d.ts → types-CpFPFB1a.d.ts} +2 -1
- package/dist/types-CpFPFB1a.d.ts.map +1 -0
- package/dist/{types-C04Q_Fan.d.ts → types-D4CirgNk.d.ts} +2 -2
- package/dist/types-D4CirgNk.d.ts.map +1 -0
- package/dist/{types-CNbvfWjh.d.ts → types-FTqFl5du.d.ts} +3 -3
- package/dist/types-FTqFl5du.d.ts.map +1 -0
- package/dist/types-TZijOYrE.d.ts +17 -0
- package/dist/types-TZijOYrE.d.ts.map +1 -0
- package/dist/ui/components/button/button.d.ts +3 -2
- package/dist/ui/components/button/button.js +1 -1
- package/dist/ui/components/button/button.js.map +1 -1
- package/dist/ui/components/character-counter/character-counter.d.ts +3 -2
- package/dist/ui/components/character-counter/character-counter.js.map +1 -1
- package/dist/ui/components/checkbox/checkbox-base.d.ts +3 -2
- package/dist/ui/components/checkbox/checkbox-base.js +1 -1
- package/dist/ui/components/checkbox/checkbox-base.js.map +1 -1
- package/dist/ui/components/checkbox/checkbox.d.ts +3 -2
- package/dist/ui/components/checkbox/checkbox.js +1 -1
- package/dist/ui/components/checkbox/checkbox.js.map +1 -1
- package/dist/ui/components/command/command.d.ts +3 -2
- package/dist/ui/components/command/command.js +8 -8
- package/dist/ui/components/command/command.js.map +1 -1
- package/dist/ui/components/enum-field/enum-field.d.ts +3 -2
- package/dist/ui/components/enum-field/enum-field.js +1 -1
- package/dist/ui/components/enum-field/enum-field.js.map +1 -1
- package/dist/ui/components/enum-field/types.d.ts +3 -2
- package/dist/ui/components/form/form.d.ts +3 -2
- package/dist/ui/components/form/form.js +1 -1
- package/dist/ui/components/form/form.js.map +1 -1
- package/dist/ui/components/form/utils.d.ts +4 -4
- package/dist/ui/components/form/utils.d.ts.map +1 -1
- package/dist/ui/components/form/utils.js.map +1 -1
- package/dist/ui/components/form-description/form-description.d.ts +3 -2
- package/dist/ui/components/form-description/form-description.js.map +1 -1
- package/dist/ui/components/form-group/form-group.d.ts +3 -2
- package/dist/ui/components/form-group/form-group.js.map +1 -1
- package/dist/ui/components/form-label/form-label.d.ts +3 -2
- package/dist/ui/components/form-label/form-label.js +3 -2
- package/dist/ui/components/form-label/form-label.js.map +1 -1
- package/dist/ui/components/form-message/form-message.d.ts +3 -2
- package/dist/ui/components/form-message/form-message.js.map +1 -1
- package/dist/ui/components/form-message/form-server-error-message.d.ts +3 -2
- package/dist/ui/components/form-message/form-server-error-message.js.map +1 -1
- package/dist/ui/components/form-message/message-list.d.ts +3 -2
- package/dist/ui/components/form-message/message-list.js.map +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete-context.d.ts +3 -5
- package/dist/ui/components/id-autocomplete/id-autocomplete-context.d.ts.map +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete-context.js +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete-context.js.map +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete-input-container.d.ts +3 -2
- package/dist/ui/components/id-autocomplete/id-autocomplete-input-container.js +2 -2
- package/dist/ui/components/id-autocomplete/id-autocomplete-input-container.js.map +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete-list-option.d.ts +3 -2
- package/dist/ui/components/id-autocomplete/id-autocomplete-list-option.js +2 -2
- package/dist/ui/components/id-autocomplete/id-autocomplete-list-option.js.map +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete-list.d.ts +3 -2
- package/dist/ui/components/id-autocomplete/id-autocomplete-list.js.map +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete.d.ts +3 -2
- package/dist/ui/components/id-autocomplete/id-autocomplete.js +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete.js.map +1 -1
- package/dist/ui/components/id-autocomplete/types.d.ts +3 -2
- package/dist/ui/components/id-autocomplete/use-id-autocomplete.d.ts +3 -2
- package/dist/ui/components/id-autocomplete/use-id-autocomplete.js.map +1 -1
- package/dist/ui/components/index.d.ts +42 -40
- package/dist/ui/components/input/input.d.ts +3 -2
- package/dist/ui/components/input/input.js +1 -1
- package/dist/ui/components/input/input.js.map +1 -1
- package/dist/ui/components/input/splitted-input-diff.d.ts +3 -2
- package/dist/ui/components/input/splitted-input-diff.js +10 -9
- package/dist/ui/components/input/splitted-input-diff.js.map +1 -1
- package/dist/ui/components/input/subcomponent/input-diff.d.ts +2 -11
- package/dist/ui/components/input/subcomponent/input-diff.d.ts.map +1 -1
- package/dist/ui/components/input/subcomponent/input-diff.js.map +1 -1
- package/dist/ui/components/input/subcomponent/text-diff.d.ts +3 -12
- package/dist/ui/components/input/subcomponent/text-diff.d.ts.map +1 -1
- package/dist/ui/components/input/subcomponent/text-diff.js.map +1 -1
- package/dist/ui/components/json-viewer/json-viewer.d.ts +3 -2
- package/dist/ui/components/json-viewer/json-viewer.js +1 -1
- package/dist/ui/components/json-viewer/json-viewer.js.map +1 -1
- package/dist/ui/components/popover/popover.d.ts +3 -2
- package/dist/ui/components/popover/popover.js +1 -1
- package/dist/ui/components/popover/popover.js.map +1 -1
- package/dist/ui/components/radio-group-field/radio-group-field.d.ts +3 -2
- package/dist/ui/components/radio-group-field/radio-group-field.js +4 -3
- package/dist/ui/components/radio-group-field/radio-group-field.js.map +1 -1
- package/dist/ui/components/radio-group-field/radio-group.d.ts +3 -2
- package/dist/ui/components/radio-group-field/radio-group.js +1 -1
- package/dist/ui/components/radio-group-field/radio-group.js.map +1 -1
- package/dist/ui/components/radio-group-field/radio.d.ts +3 -2
- package/dist/ui/components/radio-group-field/radio.js +1 -1
- package/dist/ui/components/radio-group-field/radio.js.map +1 -1
- package/dist/ui/components/search-autocomplete/index.d.ts +6 -4
- package/dist/ui/components/search-autocomplete/search-autocomplete.d.ts +3 -2
- package/dist/ui/components/search-autocomplete/search-autocomplete.js.map +1 -1
- package/dist/ui/components/search-autocomplete/types.d.ts +3 -2
- package/dist/ui/components/search-autocomplete/use-search-autocomplete.d.ts +3 -2
- package/dist/ui/components/search-autocomplete/use-search-autocomplete.js.map +1 -1
- package/dist/ui/components/select-field/content.d.ts +3 -2
- package/dist/ui/components/select-field/content.js +1 -1
- package/dist/ui/components/select-field/content.js.map +1 -1
- package/dist/ui/components/select-field/select-field.d.ts +3 -2
- package/dist/ui/components/select-field/select-field.js +1 -1
- package/dist/ui/components/select-field/select-field.js.map +1 -1
- package/dist/ui/components/select-field/selected-content.d.ts +3 -2
- package/dist/ui/components/select-field/selected-content.js +1 -1
- package/dist/ui/components/select-field/selected-content.js.map +1 -1
- package/dist/ui/components/select-field/subcomponents/CommandItemList.d.ts +3 -4
- package/dist/ui/components/select-field/subcomponents/CommandItemList.d.ts.map +1 -1
- package/dist/ui/components/select-field/subcomponents/CommandItemList.js +1 -1
- package/dist/ui/components/select-field/subcomponents/CommandItemList.js.map +1 -1
- package/dist/ui/components/select-field/use-select-field.d.ts +4 -12
- package/dist/ui/components/select-field/use-select-field.d.ts.map +1 -1
- package/dist/ui/components/select-field/use-select-field.js.map +1 -1
- package/dist/ui/components/sidebar/index.d.ts +6 -4
- package/dist/ui/components/sidebar/sidebar.d.ts +3 -2
- package/dist/ui/components/sidebar/sidebar.js +1 -1
- package/dist/ui/components/sidebar/sidebar.js.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-content-area.d.ts +2 -7
- package/dist/ui/components/sidebar/subcomponents/sidebar-content-area.d.ts.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-content-area.js +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-content-area.js.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-header.d.ts +2 -2
- package/dist/ui/components/sidebar/subcomponents/sidebar-header.d.ts.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-header.js.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-item.d.ts +3 -18
- package/dist/ui/components/sidebar/subcomponents/sidebar-item.d.ts.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-item.js +4 -3
- package/dist/ui/components/sidebar/subcomponents/sidebar-item.js.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-pinning-area.d.ts +2 -4
- package/dist/ui/components/sidebar/subcomponents/sidebar-pinning-area.d.ts.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-pinning-area.js.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/index.d.ts +4 -2
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-provider.d.ts +3 -2
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-provider.js +2 -2
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-provider.js.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-reducer.d.ts +7 -8
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-reducer.d.ts.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-reducer.js +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-reducer.js.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/index.d.ts +2 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-navigation-arrow.d.ts +2 -2
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-navigation-arrow.d.ts.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-navigation-arrow.js.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-result-counter.d.ts +2 -2
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-result-counter.d.ts.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-result-counter.js.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/sidebar-search.d.ts +2 -2
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/sidebar-search.d.ts.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/sidebar-search.js +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/sidebar-search.js.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton-item.d.ts +2 -8
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton-item.d.ts.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton-item.js +2 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton-item.js.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton.d.ts +2 -4
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton.d.ts.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton.js.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/status-icon.d.ts +3 -9
- package/dist/ui/components/sidebar/subcomponents/status-icon.d.ts.map +1 -1
- package/dist/ui/components/sidebar/subcomponents/status-icon.js +1 -1
- package/dist/ui/components/sidebar/subcomponents/status-icon.js.map +1 -1
- package/dist/ui/components/sidebar/types.d.ts +3 -2
- package/dist/ui/components/sidebar/types.js +1 -1
- package/dist/ui/components/sidebar/types.js.map +1 -1
- package/dist/ui/components/sidebar/use-ellipsis.d.ts +2 -2
- package/dist/ui/components/sidebar/use-ellipsis.d.ts.map +1 -1
- package/dist/ui/components/sidebar/use-ellipsis.js.map +1 -1
- package/dist/ui/components/sidebar/use-sidebar-resize.d.ts +3 -9
- package/dist/ui/components/sidebar/use-sidebar-resize.d.ts.map +1 -1
- package/dist/ui/components/sidebar/use-sidebar-resize.js.map +1 -1
- package/dist/ui/components/sidebar/utils.d.ts +10 -11
- package/dist/ui/components/sidebar/utils.d.ts.map +1 -1
- package/dist/ui/components/sidebar/utils.js.map +1 -1
- package/dist/ui/components/text-field/text-field.d.ts +3 -2
- package/dist/ui/components/text-field/text-field.js +3 -2
- package/dist/ui/components/text-field/text-field.js.map +1 -1
- package/dist/ui/components/text-input/text-input-diff.d.ts +3 -2
- package/dist/ui/components/text-input/text-input-diff.js.map +1 -1
- package/dist/ui/components/text-input/text-input.d.ts +3 -2
- package/dist/ui/components/text-input/text-input.js +1 -1
- package/dist/ui/components/text-input/text-input.js.map +1 -1
- package/dist/ui/components/text-input/types.d.ts +3 -2
- package/dist/ui/components/tooltip/tooltip.d.ts +3 -2
- package/dist/ui/components/tooltip/tooltip.js +1 -1
- package/dist/ui/components/tooltip/tooltip.js.map +1 -1
- package/dist/ui/components/types.d.ts +3 -2
- package/dist/ui/components/value-transformer/value-transformer.d.ts +3 -2
- package/dist/ui/components/value-transformer/value-transformer.js +5 -3
- package/dist/ui/components/value-transformer/value-transformer.js.map +1 -1
- package/dist/ui/components/with-field-validation/with-field-validation.d.ts +3 -2
- package/dist/ui/components/with-field-validation/with-field-validation.js +1 -1
- package/dist/ui/components/with-field-validation/with-field-validation.js.map +1 -1
- package/dist/ui/index.d.ts +44 -42
- package/dist/ui/lib/date-picker.d.ts +4 -5
- package/dist/ui/lib/date-picker.d.ts.map +1 -1
- package/dist/ui/lib/date-picker.js +2 -1
- package/dist/ui/lib/date-picker.js.map +1 -1
- package/dist/ui/lib/date-time-picker.d.ts +6 -6
- package/dist/ui/lib/date-time-picker.d.ts.map +1 -1
- package/dist/ui/lib/date-time-picker.js.map +1 -1
- package/dist/ui/lib/deep-equal.d.ts +2 -2
- package/dist/ui/lib/deep-equal.d.ts.map +1 -1
- package/dist/ui/lib/deep-equal.js.map +1 -1
- package/dist/ui/lib/index.d.ts +2 -1
- package/dist/ui/lib/is-empty.d.ts +2 -2
- package/dist/ui/lib/is-empty.d.ts.map +1 -1
- package/dist/ui/lib/is-empty.js.map +1 -1
- package/dist/ui/lib/shared-value-transformers.d.ts +3 -4
- package/dist/ui/lib/shared-value-transformers.d.ts.map +1 -1
- package/dist/ui/lib/shared-value-transformers.js.map +1 -1
- package/dist/ui/lib/types.d.ts +3 -2
- package/dist/ui/lib/value-cast.d.ts +4 -4
- package/dist/ui/lib/value-cast.d.ts.map +1 -1
- package/dist/ui/lib/value-cast.js +10 -4
- package/dist/ui/lib/value-cast.js.map +1 -1
- package/dist/ui/types.d.ts +4 -3
- package/dist/{use-id-autocomplete-By7YSChC.d.ts → use-id-autocomplete-m9Bf0qCy.d.ts} +5 -16
- package/dist/use-id-autocomplete-m9Bf0qCy.d.ts.map +1 -0
- package/dist/{use-search-autocomplete-IfcQ_gKh.d.ts → use-search-autocomplete-vSvcsvcB.d.ts} +5 -6
- package/dist/use-search-autocomplete-vSvcsvcB.d.ts.map +1 -0
- package/dist/{value-transformer-DQjqtNih.d.ts → value-transformer-BtUh3-UP.d.ts} +5 -7
- package/dist/value-transformer-BtUh3-UP.d.ts.map +1 -0
- package/dist/{with-field-validation-Di5D8vU-.d.ts → with-field-validation-Bh26a6fr.d.ts} +3 -3
- package/dist/with-field-validation-Bh26a6fr.d.ts.map +1 -0
- package/package.json +17 -12
- package/plugins.css +6 -0
- package/tailwind.css +213 -0
- package/vendor.css +3 -0
- package/dist/button-C8doazjv.d.ts +0 -15
- package/dist/button-C8doazjv.d.ts.map +0 -1
- package/dist/character-counter-BWoglM2P.d.ts.map +0 -1
- package/dist/checkbox-CGBtXQnI.d.ts.map +0 -1
- package/dist/checkbox-base-CZo-4eL0.d.ts.map +0 -1
- package/dist/command-tFzjgzge.d.ts.map +0 -1
- package/dist/content-BHWIqmio.d.ts.map +0 -1
- package/dist/enum-field-CwZVs3Ux.d.ts.map +0 -1
- package/dist/form-CKRKn0TQ.d.ts.map +0 -1
- package/dist/form-description-CYkcMEzm.d.ts.map +0 -1
- package/dist/form-group-C8kL6pdZ.d.ts.map +0 -1
- package/dist/form-label-b6nQi0XO.d.ts.map +0 -1
- package/dist/form-message-Dq72nBXz.d.ts.map +0 -1
- package/dist/form-server-error-message-DXbaiTfF.d.ts +0 -7
- package/dist/form-server-error-message-DXbaiTfF.d.ts.map +0 -1
- package/dist/icon-C4QOpsdI.js.map +0 -1
- package/dist/id-autocomplete-C-hwriS5.d.ts.map +0 -1
- package/dist/id-autocomplete-input-container-DFEyPh5p.d.ts.map +0 -1
- package/dist/id-autocomplete-list-EzLpF23C.d.ts.map +0 -1
- package/dist/id-autocomplete-list-option-CB5B07Hi.d.ts.map +0 -1
- package/dist/index--hDSfvJT.d.ts.map +0 -1
- package/dist/index--okzibnx.d.ts +0 -1
- package/dist/index-BLwMeReG.d.ts +0 -1
- package/dist/index-Cw3C7_1f.d.ts +0 -1
- package/dist/index-E7Wvm5uX.d.ts +0 -1
- package/dist/index-J3R2mDFQ.d.ts +0 -1
- package/dist/input-BpEQjaWV.d.ts.map +0 -1
- package/dist/json-viewer-DaTgmzkS.d.ts +0 -8
- package/dist/json-viewer-DaTgmzkS.d.ts.map +0 -1
- package/dist/message-list-C4mPpBBa.d.ts.map +0 -1
- package/dist/popover-XSBOuSih.d.ts.map +0 -1
- package/dist/radio-eL0Oy86J.d.ts.map +0 -1
- package/dist/radio-group-Bkli6nUz.d.ts.map +0 -1
- package/dist/radio-group-field-wlqeiLN3.d.ts.map +0 -1
- package/dist/search-autocomplete-BJJkrZ1i.d.ts.map +0 -1
- package/dist/select-field-C97QIhUL.d.ts.map +0 -1
- package/dist/selected-content-CGsK5PR4.d.ts.map +0 -1
- package/dist/sidebar-DOoE4krt.d.ts.map +0 -1
- package/dist/sidebar-provider-C2eyz9TL.d.ts.map +0 -1
- package/dist/splitted-input-diff-CwPedpov.d.ts +0 -18
- package/dist/splitted-input-diff-CwPedpov.d.ts.map +0 -1
- package/dist/src-CVV6HzQZ.js.map +0 -1
- package/dist/text-field-DSInH67J.d.ts +0 -10
- package/dist/text-field-DSInH67J.d.ts.map +0 -1
- package/dist/text-input-8zXIWHLi.d.ts.map +0 -1
- package/dist/text-input-diff-B0vLSKQm.d.ts +0 -20
- package/dist/text-input-diff-B0vLSKQm.d.ts.map +0 -1
- package/dist/tooltip-BxS9HpML.d.ts.map +0 -1
- package/dist/types-BTq-St7H.d.ts.map +0 -1
- package/dist/types-Bsn62tJB.d.ts.map +0 -1
- package/dist/types-C04Q_Fan.d.ts.map +0 -1
- package/dist/types-CNbvfWjh.d.ts.map +0 -1
- package/dist/use-id-autocomplete-By7YSChC.d.ts.map +0 -1
- package/dist/use-search-autocomplete-IfcQ_gKh.d.ts.map +0 -1
- package/dist/value-transformer-DQjqtNih.d.ts.map +0 -1
- package/dist/with-field-validation-Di5D8vU-.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-field.js","names":["twMerge","React","useCallback","useId","Button","Command","FormDescription","FormGroup","FormLabel","FormMessageList","Popover","PopoverContent","PopoverTrigger","withFieldValidation","Content","SelectedContent","useSelectField","SelectFieldRaw","forwardRef","options","favoriteOptions","defaultValue","value","onChange","onBlur","id","propId","name","label","required","disabled","errors","warnings","multiple","selectionIcon","selectionIconPosition","searchable","description","placeholder","className","contentClassName","contentAlign","props","ref","prefix","selectedValues","isPopoverOpen","commandListRef","toggleOption","handleClear","toggleAll","handleOpenChange","onTriggerBlur","e","length","preventDefault","target","control","focus","open","document","activeElement","undefined","find","opt","SelectField","displayName"],"sources":["../../../../src/ui/components/select-field/select-field.tsx"],"sourcesContent":["import { twMerge } from \"tailwind-merge\";\nimport React, { useCallback, useId } from \"react\";\nimport type { FieldErrorHandling, InputBaseProps } from \"../../types.js\";\nimport { Button } from \"../button/button.js\";\nimport { Command } from \"../command/command.js\";\nimport type { SelectOption, SelectProps } from \"../enum-field/types.js\";\nimport { FormDescription } from \"../form-description/form-description.js\";\nimport { FormGroup } from \"../form-group/form-group.js\";\nimport { FormLabel } from \"../form-label/form-label.js\";\nimport { FormMessageList } from \"../form-message/message-list.js\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../popover/popover.js\";\nimport { withFieldValidation } from \"../with-field-validation/with-field-validation.js\";\nimport { Content } from \"./content.js\";\nimport { SelectedContent } from \"./selected-content.js\";\nimport { useSelectField } from \"./use-select-field.js\";\n\ntype SelectFieldBaseProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n | keyof InputBaseProps<string | string[]>\n | keyof FieldErrorHandling\n | keyof SelectProps\n>;\n\nexport type SelectFieldProps = SelectFieldBaseProps &\n InputBaseProps<string | string[]> &\n FieldErrorHandling & {\n options?: SelectOption[];\n favoriteOptions?: SelectOption[];\n } & Omit<SelectProps, \"options\" | \"favoriteOptions\">;\n\nexport const SelectFieldRaw = React.forwardRef<\n HTMLButtonElement,\n SelectFieldProps\n>(\n (\n {\n // core functionality props\n options = [],\n favoriteOptions = [],\n defaultValue,\n value,\n onChange,\n onBlur,\n\n // form-related props\n id: propId,\n name,\n label,\n required,\n disabled,\n\n // validation props\n errors = [],\n warnings = [],\n\n // behavior props\n multiple,\n selectionIcon = \"auto\",\n selectionIconPosition = \"left\",\n searchable,\n\n // display props\n description,\n placeholder,\n className,\n contentClassName,\n contentAlign = \"start\",\n\n ...props\n },\n ref,\n ) => {\n const prefix = useId();\n const id = propId ?? `${prefix}-select`;\n\n const {\n selectedValues,\n isPopoverOpen,\n commandListRef,\n toggleOption,\n handleClear,\n toggleAll,\n handleOpenChange,\n } = useSelectField({\n options,\n multiple,\n defaultValue,\n value,\n onChange,\n });\n\n const onTriggerBlur = useCallback(\n (e: React.FocusEvent<HTMLButtonElement>) => {\n if (!isPopoverOpen) {\n // trigger the blur event when the trigger loses focus but the popover is not open,\n // because when the popover is open, the trigger loses focus but the select as a component still has the focus\n onBlur?.(e);\n }\n },\n [onBlur, isPopoverOpen],\n );\n\n return (\n <FormGroup>\n {label && (\n <FormLabel\n htmlFor={id}\n required={required}\n disabled={disabled}\n hasError={errors.length > 0}\n inline={false}\n onClick={(e) => {\n e.preventDefault();\n (e.target as HTMLLabelElement).control?.focus();\n }}\n >\n {label}\n </FormLabel>\n )}\n <Popover\n open={isPopoverOpen}\n onOpenChange={(open) => {\n handleOpenChange(open);\n // if the popover is closing and it was not by the trigger button\n if (!open && document.activeElement?.id !== id) {\n onBlur?.({ target: {} } as React.FocusEvent<HTMLButtonElement>);\n }\n }}\n >\n <PopoverTrigger asChild={true}>\n {/* TODO: create a trigger component */}\n <Button\n id={id}\n name={name}\n type=\"button\"\n role=\"combobox\"\n onBlur={onTriggerBlur}\n disabled={disabled}\n aria-invalid={errors.length > 0}\n aria-label={\n label ? undefined : multiple ? \"Multi select\" : \"Select\"\n }\n aria-required={required}\n aria-expanded={isPopoverOpen}\n className={twMerge(\n \"flex h-9 w-full items-center justify-between px-3 py-2\",\n \"rounded-md border border-border bg-background\",\n \"hover:hover-effect\",\n \"hover:hover-effect\",\n \"focus:ring-1 focus:ring-ring focus:ring-offset-0 focus:outline-none\",\n \"focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-0\",\n disabled && [\n \"pointer-events-auto! cursor-not-allowed bg-background\",\n \"hover:hover-effect\",\n ],\n className,\n )}\n {...props}\n ref={ref}\n >\n <SelectedContent\n selectedValues={selectedValues}\n options={[...favoriteOptions, ...options]}\n multiple={multiple}\n searchable={searchable}\n placeholder={placeholder}\n handleClear={handleClear}\n />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n align={contentAlign}\n onEscapeKeyDown={(e) => {\n e.preventDefault();\n handleOpenChange(false);\n }}\n className={contentClassName}\n >\n <Command\n defaultValue={\n !multiple && selectedValues[0]\n ? options.find((opt) => opt.value === selectedValues[0])\n ?.label\n : undefined\n }\n >\n <Content\n favoriteOptions={favoriteOptions}\n searchable={searchable}\n commandListRef={commandListRef}\n multiple={multiple}\n selectedValues={selectedValues}\n selectionIcon={selectionIcon}\n selectionIconPosition={selectionIconPosition}\n options={options}\n toggleAll={toggleAll}\n toggleOption={toggleOption}\n />\n </Command>\n </PopoverContent>\n </Popover>\n {description && <FormDescription>{description}</FormDescription>}\n {warnings.length > 0 && (\n <FormMessageList messages={warnings} type=\"warning\" />\n )}\n {errors.length > 0 && (\n <FormMessageList messages={errors} type=\"error\" />\n )}\n </FormGroup>\n );\n },\n);\n\nexport const SelectField =\n withFieldValidation<SelectFieldProps>(SelectFieldRaw);\n\nSelectField.displayName = \"SelectField\";\n"],"mappings":";;;;;;;;;;;;;;;AA8BA,MAAaiB,iBAAiBhB,
|
|
1
|
+
{"version":3,"file":"select-field.js","names":["twMerge","React","useCallback","useId","Button","Command","FormDescription","FormGroup","FormLabel","FormMessageList","Popover","PopoverContent","PopoverTrigger","withFieldValidation","Content","SelectedContent","useSelectField","SelectFieldRaw","forwardRef","options","favoriteOptions","defaultValue","value","onChange","onBlur","id","propId","name","label","required","disabled","errors","warnings","multiple","selectionIcon","selectionIconPosition","searchable","description","placeholder","className","contentClassName","contentAlign","props","ref","prefix","selectedValues","isPopoverOpen","commandListRef","toggleOption","handleClear","toggleAll","handleOpenChange","onTriggerBlur","e","length","preventDefault","target","control","focus","open","document","activeElement","undefined","find","opt","SelectField","displayName"],"sources":["../../../../src/ui/components/select-field/select-field.tsx"],"sourcesContent":["import { twMerge } from \"tailwind-merge\";\nimport React, { useCallback, useId } from \"react\";\nimport type { FieldErrorHandling, InputBaseProps } from \"../../types.js\";\nimport { Button } from \"../button/button.js\";\nimport { Command } from \"../command/command.js\";\nimport type { SelectOption, SelectProps } from \"../enum-field/types.js\";\nimport { FormDescription } from \"../form-description/form-description.js\";\nimport { FormGroup } from \"../form-group/form-group.js\";\nimport { FormLabel } from \"../form-label/form-label.js\";\nimport { FormMessageList } from \"../form-message/message-list.js\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../popover/popover.js\";\nimport { withFieldValidation } from \"../with-field-validation/with-field-validation.js\";\nimport { Content } from \"./content.js\";\nimport { SelectedContent } from \"./selected-content.js\";\nimport { useSelectField } from \"./use-select-field.js\";\n\ntype SelectFieldBaseProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n | keyof InputBaseProps<string | string[]>\n | keyof FieldErrorHandling\n | keyof SelectProps\n>;\n\nexport type SelectFieldProps = SelectFieldBaseProps &\n InputBaseProps<string | string[]> &\n FieldErrorHandling & {\n options?: SelectOption[];\n favoriteOptions?: SelectOption[];\n } & Omit<SelectProps, \"options\" | \"favoriteOptions\">;\n\nexport const SelectFieldRaw = React.forwardRef<\n HTMLButtonElement,\n SelectFieldProps\n>(\n (\n {\n // core functionality props\n options = [],\n favoriteOptions = [],\n defaultValue,\n value,\n onChange,\n onBlur,\n\n // form-related props\n id: propId,\n name,\n label,\n required,\n disabled,\n\n // validation props\n errors = [],\n warnings = [],\n\n // behavior props\n multiple,\n selectionIcon = \"auto\",\n selectionIconPosition = \"left\",\n searchable,\n\n // display props\n description,\n placeholder,\n className,\n contentClassName,\n contentAlign = \"start\",\n\n ...props\n },\n ref,\n ) => {\n const prefix = useId();\n const id = propId ?? `${prefix}-select`;\n\n const {\n selectedValues,\n isPopoverOpen,\n commandListRef,\n toggleOption,\n handleClear,\n toggleAll,\n handleOpenChange,\n } = useSelectField({\n options,\n multiple,\n defaultValue,\n value,\n onChange,\n });\n\n const onTriggerBlur = useCallback(\n (e: React.FocusEvent<HTMLButtonElement>) => {\n if (!isPopoverOpen) {\n // trigger the blur event when the trigger loses focus but the popover is not open,\n // because when the popover is open, the trigger loses focus but the select as a component still has the focus\n onBlur?.(e);\n }\n },\n [onBlur, isPopoverOpen],\n );\n\n return (\n <FormGroup>\n {label && (\n <FormLabel\n htmlFor={id}\n required={required}\n disabled={disabled}\n hasError={errors.length > 0}\n inline={false}\n onClick={(e) => {\n e.preventDefault();\n (e.target as HTMLLabelElement).control?.focus();\n }}\n >\n {label}\n </FormLabel>\n )}\n <Popover\n open={isPopoverOpen}\n onOpenChange={(open) => {\n handleOpenChange(open);\n // if the popover is closing and it was not by the trigger button\n if (!open && document.activeElement?.id !== id) {\n onBlur?.({ target: {} } as React.FocusEvent<HTMLButtonElement>);\n }\n }}\n >\n <PopoverTrigger asChild={true}>\n {/* TODO: create a trigger component */}\n <Button\n id={id}\n name={name}\n type=\"button\"\n role=\"combobox\"\n onBlur={onTriggerBlur}\n disabled={disabled}\n aria-invalid={errors.length > 0}\n aria-label={\n label ? undefined : multiple ? \"Multi select\" : \"Select\"\n }\n aria-required={required}\n aria-expanded={isPopoverOpen}\n className={twMerge(\n \"flex h-9 w-full items-center justify-between px-3 py-2\",\n \"rounded-md border border-border bg-background\",\n \"hover:hover-effect\",\n \"hover:hover-effect\",\n \"focus:ring-1 focus:ring-ring focus:ring-offset-0 focus:outline-none\",\n \"focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-0\",\n disabled && [\n \"pointer-events-auto! cursor-not-allowed bg-background\",\n \"hover:hover-effect\",\n ],\n className,\n )}\n {...props}\n ref={ref}\n >\n <SelectedContent\n selectedValues={selectedValues}\n options={[...favoriteOptions, ...options]}\n multiple={multiple}\n searchable={searchable}\n placeholder={placeholder}\n handleClear={handleClear}\n />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n align={contentAlign}\n onEscapeKeyDown={(e) => {\n e.preventDefault();\n handleOpenChange(false);\n }}\n className={contentClassName}\n >\n <Command\n defaultValue={\n !multiple && selectedValues[0]\n ? options.find((opt) => opt.value === selectedValues[0])\n ?.label\n : undefined\n }\n >\n <Content\n favoriteOptions={favoriteOptions}\n searchable={searchable}\n commandListRef={commandListRef}\n multiple={multiple}\n selectedValues={selectedValues}\n selectionIcon={selectionIcon}\n selectionIconPosition={selectionIconPosition}\n options={options}\n toggleAll={toggleAll}\n toggleOption={toggleOption}\n />\n </Command>\n </PopoverContent>\n </Popover>\n {description && <FormDescription>{description}</FormDescription>}\n {warnings.length > 0 && (\n <FormMessageList messages={warnings} type=\"warning\" />\n )}\n {errors.length > 0 && (\n <FormMessageList messages={errors} type=\"error\" />\n )}\n </FormGroup>\n );\n },\n);\n\nexport const SelectField =\n withFieldValidation<SelectFieldProps>(SelectFieldRaw);\n\nSelectField.displayName = \"SelectField\";\n"],"mappings":";;;;;;;;;;;;;;;AA8BA,MAAaiB,iBAAiBhB,oBAAMiB,YAKhC,EAEEC,UAAU,CAAA,GACVC,kBAAkB,CAAA,GAClBC,cACAC,OACAC,UACAC,QAGAC,IAAIC,QACJC,MACAC,OACAC,UACAC,UAGAC,SAAS,CAAA,GACTC,WAAW,CAAA,GAGXC,UACAC,gBAAgB,QAChBC,wBAAwB,QACxBC,YAGAC,aACAC,aACAC,WACAC,kBACAC,eAAe,SAEf,GAAGC,SAELC,QACG;CACH,MAAMC,SAASzC,MAAM;CACrB,MAAMsB,KAAKC,UAAU,GAAGkB,OAAM;CAE9B,MAAM,EACJC,gBACAC,eACAC,gBACAC,cACAC,aACAC,WACAC,qBACEnC,eAAe;EACjBG;EACAc;EACAZ;EACAC;EACAC;CACF,CAAC;CAED,MAAM6B,gBAAgBlD,aACnBmD,MAA2C;EAC1C,IAAI,CAACP,eAGHtB,SAAS6B,CAAC;CAEd,GACA,CAAC7B,QAAQsB,aAAa,CACxB;CAEA,OACE,qBAAC,WAAD,EAAA,UAAA;EACGlB,SACC,oBAAC,WAAD;GACE,SAASH;GACCI;GACAC;GACV,UAAUC,OAAOuB,SAAS;GAC1B,QAAQ;GACR,UAAUD,MAAM;IACdA,EAAEE,eAAe;IAChBF,EAAEG,OAA4BC,SAASC,MAAM;GAChD;GAEC9B,UAAAA;EACQ,CAAA;EAEb,qBAAC,SAAD;GACE,MAAMkB;GACN,eAAea,SAAS;IACtBR,iBAAiBQ,IAAI;IAErB,IAAI,CAACA,QAAQC,SAASC,eAAepC,OAAOA,IAC1CD,SAAS,EAAEgC,QAAQ,CAAC,EAAE,CAAwC;GAElE;GARF,UAAA,CAUE,oBAAC,gBAAD;IAAgB,SAAS;IAEvB,UAAA,oBAAC,QAAD;KACM/B;KACEE;KACN,MAAK;KACL,MAAK;KACL,QAAQyB;KACEtB;KACV,gBAAcC,OAAOuB,SAAS;KAC9B,cACE1B,QAAQkC,KAAAA,IAAY7B,WAAW,iBAAiB;KAElD,iBAAeJ;KACf,iBAAeiB;KACf,WAAW9C,QACT,0DACA,iDACA,sBACA,sBACA,uEACA,4EACA8B,YAAY,CACV,yDACA,oBAAoB,GAEtBS,SACF;KACA,GAAIG;KACCC;KAEL,UAAA,oBAAC,iBAAD;MACkBE;MAChB,SAAS,CAAC,GAAGzB,iBAAiB,GAAGD,OAAO;MAC9Bc;MACEG;MACCE;MACAW;KAAY,CAAA;IAErB,CAAA;GACM,CAAA,GAChB,oBAAC,gBAAD;IACE,OAAOR;IACP,kBAAkBY,MAAM;KACtBA,EAAEE,eAAe;KACjBJ,iBAAiB,KAAK;IACxB;IACA,WAAWX;IAEX,UAAA,oBAAC,SAAD;KACE,cACE,CAACP,YAAYY,eAAe,KACxB1B,QAAQ4C,MAAMC,QAAQA,IAAI1C,UAAUuB,eAAe,EAAE,CAAC,EAClDjB,QACJkC,KAAAA;KAGN,UAAA,oBAAC,SAAD;MACmB1C;MACLgB;MACIW;MACNd;MACMY;MACDX;MACQC;MACdhB;MACE+B;MACGF;KAAa,CAAA;IAEtB,CAAA;GACK,CAAA,CACT;;EACRX,eAAe,oBAAC,iBAAD,EAAA,UAAkBA,YAA6B,CAAA;EAC9DL,SAASsB,SAAS,KACjB,oBAAC,iBAAD;GAAiB,UAAUtB;GAAU,MAAK;EAAS,CAAA;EAEpDD,OAAOuB,SAAS,KACf,oBAAC,iBAAD;GAAiB,UAAUvB;GAAQ,MAAK;EAAO,CAAA;CAExC,EAAA,CAAA;AAEf,CACF;AAEA,MAAakC,cACXpD,oBAAsCI,cAAc;AAEtDgD,YAAYC,cAAc"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import { t as SelectedContent } from "../../../selected-content-
|
|
2
|
-
export { SelectedContent };
|
|
1
|
+
import { t as SelectedContent } from "../../../selected-content-CSTFkQr9.js";
|
|
2
|
+
export { SelectedContent };
|
|
3
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selected-content.js","names":["Icon","twMerge","React","SelectedContent","selectedValues","options","multiple","searchable","placeholder","handleClear","renderIcon","IconComponent","length","map","value","index","option","find","o","icon","label","e","preventDefault","stopPropagation"],"sources":["../../../../src/ui/components/select-field/selected-content.tsx"],"sourcesContent":["import type { IconName } from \"#design-system\";\nimport { Icon } from \"#design-system\";\nimport { twMerge } from \"tailwind-merge\";\nimport React from \"react\";\nimport type { SelectProps } from \"../enum-field/types.js\";\n\ninterface SelectedContentProps {\n selectedValues: string[];\n options: SelectProps[\"options\"];\n multiple?: boolean;\n searchable?: boolean;\n placeholder?: string;\n handleClear: () => void;\n}\n\nexport const SelectedContent: React.FC<SelectedContentProps> = ({\n selectedValues,\n options = [],\n multiple,\n searchable,\n placeholder,\n handleClear,\n}) => {\n const renderIcon = (\n IconComponent:\n | IconName\n | React.ComponentType<{ className?: string }>\n | undefined,\n ) => {\n if (typeof IconComponent === \"string\") {\n return <Icon name={IconComponent} size={16} />;\n }\n return IconComponent && <IconComponent className=\"size-4\" />;\n };\n\n if (selectedValues.length === 0) {\n return (\n <div\n className={twMerge(\n \"mx-auto flex w-full items-center\",\n placeholder ? \"justify-between\" : \"justify-end\",\n )}\n >\n {placeholder && (\n <span className=\"text-sm/5 font-normal text-foreground\">\n {placeholder}\n </span>\n )}\n {searchable ? (\n <Icon\n name=\"CaretSort\"\n size={16}\n className=\"cursor-pointer text-foreground\"\n />\n ) : (\n <Icon\n name=\"ChevronDown\"\n size={16}\n className=\"cursor-pointer text-foreground\"\n />\n )}\n </div>\n );\n }\n\n return (\n <div className=\"flex w-full items-center justify-between gap-2\">\n <div\n className={twMerge(\n \"max-w-full truncate text-foreground\",\n !multiple && \"flex items-center gap-2\",\n )}\n >\n {selectedValues.map((value, index) => {\n const option = options.find((o) => o.value === value);\n return !multiple ? (\n <React.Fragment key={value}>\n {renderIcon(option?.icon)}\n <span className=\"truncate text-sm/5 font-normal\">\n {option?.label}\n </span>\n </React.Fragment>\n ) : (\n <span\n key={value}\n className={twMerge(\n \"text-sm/5 font-normal\",\n index !== selectedValues.length - 1 && \"mr-1\",\n )}\n >\n {index !== selectedValues.length - 1\n ? `${option?.label},`\n : option?.label}\n </span>\n );\n })}\n </div>\n <div className=\"flex items-center justify-between gap-2\">\n {multiple && selectedValues.length > 0 && (\n <div\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n handleClear();\n }}\n className=\"size-4 p-0\"\n >\n <Icon\n name=\"XmarkLight\"\n size={16}\n className=\"cursor-pointer text-foreground\"\n />\n </div>\n )}\n {searchable ? (\n <Icon\n name=\"CaretSort\"\n size={16}\n className=\"cursor-pointer text-foreground\"\n />\n ) : (\n <Icon\n name=\"ChevronDown\"\n size={16}\n className=\"cursor-pointer text-foreground\"\n />\n )}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;;AAeA,MAAaG,mBAAmD,EAC9DC,gBACAC,UAAU,
|
|
1
|
+
{"version":3,"file":"selected-content.js","names":["Icon","twMerge","React","SelectedContent","selectedValues","options","multiple","searchable","placeholder","handleClear","renderIcon","IconComponent","length","map","value","index","option","find","o","icon","label","e","preventDefault","stopPropagation"],"sources":["../../../../src/ui/components/select-field/selected-content.tsx"],"sourcesContent":["import type { IconName } from \"#design-system\";\nimport { Icon } from \"#design-system\";\nimport { twMerge } from \"tailwind-merge\";\nimport React from \"react\";\nimport type { SelectProps } from \"../enum-field/types.js\";\n\ninterface SelectedContentProps {\n selectedValues: string[];\n options: SelectProps[\"options\"];\n multiple?: boolean;\n searchable?: boolean;\n placeholder?: string;\n handleClear: () => void;\n}\n\nexport const SelectedContent: React.FC<SelectedContentProps> = ({\n selectedValues,\n options = [],\n multiple,\n searchable,\n placeholder,\n handleClear,\n}) => {\n const renderIcon = (\n IconComponent:\n | IconName\n | React.ComponentType<{ className?: string }>\n | undefined,\n ) => {\n if (typeof IconComponent === \"string\") {\n return <Icon name={IconComponent} size={16} />;\n }\n return IconComponent && <IconComponent className=\"size-4\" />;\n };\n\n if (selectedValues.length === 0) {\n return (\n <div\n className={twMerge(\n \"mx-auto flex w-full items-center\",\n placeholder ? \"justify-between\" : \"justify-end\",\n )}\n >\n {placeholder && (\n <span className=\"text-sm/5 font-normal text-foreground\">\n {placeholder}\n </span>\n )}\n {searchable ? (\n <Icon\n name=\"CaretSort\"\n size={16}\n className=\"cursor-pointer text-foreground\"\n />\n ) : (\n <Icon\n name=\"ChevronDown\"\n size={16}\n className=\"cursor-pointer text-foreground\"\n />\n )}\n </div>\n );\n }\n\n return (\n <div className=\"flex w-full items-center justify-between gap-2\">\n <div\n className={twMerge(\n \"max-w-full truncate text-foreground\",\n !multiple && \"flex items-center gap-2\",\n )}\n >\n {selectedValues.map((value, index) => {\n const option = options.find((o) => o.value === value);\n return !multiple ? (\n <React.Fragment key={value}>\n {renderIcon(option?.icon)}\n <span className=\"truncate text-sm/5 font-normal\">\n {option?.label}\n </span>\n </React.Fragment>\n ) : (\n <span\n key={value}\n className={twMerge(\n \"text-sm/5 font-normal\",\n index !== selectedValues.length - 1 && \"mr-1\",\n )}\n >\n {index !== selectedValues.length - 1\n ? `${option?.label},`\n : option?.label}\n </span>\n );\n })}\n </div>\n <div className=\"flex items-center justify-between gap-2\">\n {multiple && selectedValues.length > 0 && (\n <div\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n handleClear();\n }}\n className=\"size-4 p-0\"\n >\n <Icon\n name=\"XmarkLight\"\n size={16}\n className=\"cursor-pointer text-foreground\"\n />\n </div>\n )}\n {searchable ? (\n <Icon\n name=\"CaretSort\"\n size={16}\n className=\"cursor-pointer text-foreground\"\n />\n ) : (\n <Icon\n name=\"ChevronDown\"\n size={16}\n className=\"cursor-pointer text-foreground\"\n />\n )}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;;AAeA,MAAaG,mBAAmD,EAC9DC,gBACAC,UAAU,CAAA,GACVC,UACAC,YACAC,aACAC,kBACI;CACJ,MAAMC,cACJC,kBAIG;EACH,IAAI,OAAOA,kBAAkB,UAC3B,OAAO,oBAAC,MAAD;GAAM,MAAMA;GAAe,MAAM;EAAG,CAAA;EAE7C,OAAOA,iBAAiB,oBAAC,eAAD,EAAe,WAAU,SAAQ,CAAA;CAC3D;CAEA,IAAIP,eAAeQ,WAAW,GAC5B,OACE,qBAAC,OAAD;EACE,WAAWX,QACT,oCACAO,cAAc,oBAAoB,aACpC;EAJF,UAAA,CAMGA,eACC,oBAAC,QAAD;GAAM,WAAU;GACbA,UAAAA;EACG,CAAA,GAEPD,aACC,oBAAC,MAAD;GACE,MAAK;GACL,MAAM;GACN,WAAU;EAAgC,CAAA,IAG5C,oBAAC,MAAD;GACE,MAAK;GACL,MAAM;GACN,WAAU;EAAgC,CAAA,CAG3C;;CAIT,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,oBAAC,OAAD;GACE,WAAWN,QACT,uCACA,CAACK,YAAY,yBACf;GAECF,UAAAA,eAAeS,KAAKC,OAAOC,UAAU;IACpC,MAAMC,SAASX,QAAQY,MAAMC,MAAMA,EAAEJ,UAAUA,KAAK;IACpD,OAAO,CAACR,WACN,qBAAC,MAAM,UAAP,EAAA,UAAA,CACGI,WAAWM,QAAQG,IAAI,GACxB,oBAAC,QAAD;KAAM,WAAU;KACbH,UAAAA,QAAQI;IACL,CAAA,CACQ,EAAA,GALKN,KAKL,IAEhB,oBAAC,QAAD;KAEE,WAAWb,QACT,yBACAc,UAAUX,eAAeQ,SAAS,KAAK,MACzC;KAECG,UAAAA,UAAUX,eAAeQ,SAAS,IAC/B,GAAGI,QAAQI,MAAK,KAChBJ,QAAQI;IACR,GATCN,KASD;GAEV,CAAC;EACE,CAAA,GACL,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACGR,YAAYF,eAAeQ,SAAS,KACnC,oBAAC,OAAD;IACE,UAAUS,MAAM;KACdA,EAAEC,eAAe;KACjBD,EAAEE,gBAAgB;KAClBd,YAAY;IACd;IACA,WAAU;IAEV,UAAA,oBAAC,MAAD;KACE,MAAK;KACL,MAAM;KACN,WAAU;IAAgC,CAAA;GAEzC,CAAA,GAENF,aACC,oBAAC,MAAD;IACE,MAAK;IACL,MAAM;IACN,WAAU;GAAgC,CAAA,IAG5C,oBAAC,MAAD;IACE,MAAK;IACL,MAAM;IACN,WAAU;GAAgC,CAAA,CAG3C;EACF,CAAA,CAAA;;AAET"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { C as SelectProps } from "../../../../index
|
|
1
|
+
import { C as SelectProps } from "../../../../index-5FEr1tXH.js";
|
|
2
2
|
import React from "react";
|
|
3
|
-
|
|
4
3
|
//#region src/ui/components/select-field/subcomponents/CommandItemList.d.ts
|
|
5
4
|
interface FavoriteOptionsProps {
|
|
6
5
|
options: SelectProps["options"];
|
|
@@ -12,7 +11,7 @@ interface FavoriteOptionsProps {
|
|
|
12
11
|
toggleOption: (value: string) => void;
|
|
13
12
|
tabIndex?: number;
|
|
14
13
|
}
|
|
15
|
-
declare const CommandItemList: React.FC<FavoriteOptionsProps>;
|
|
14
|
+
export declare const CommandItemList: React.FC<FavoriteOptionsProps>;
|
|
16
15
|
//#endregion
|
|
17
|
-
export {
|
|
16
|
+
export {};
|
|
18
17
|
//# sourceMappingURL=CommandItemList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandItemList.d.ts","names":[],"sources":["../../../../../src/ui/components/select-field/subcomponents/CommandItemList.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"CommandItemList.d.ts","names":[],"sources":["../../../../../src/ui/components/select-field/subcomponents/CommandItemList.tsx"],"mappings":";;;UAOU;EACR,SAAS;EACT;EACA;EACA;EACA;EACA;EACA,eAAe;EACf;;qBAyBW,iBAAiB,MAAM,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandItemList.js","names":["Icon","React","twMerge","CommandItem","renderIcon","IconComponent","CommandItemList","options","selectedValues","multiple","selectionIcon","selectionIconPosition","hasAnyIcon","toggleOption","tabIndex","map","opt","isSelected","includes","value","label","disabled","icon"],"sources":["../../../../../src/ui/components/select-field/subcomponents/CommandItemList.tsx"],"sourcesContent":["import type { IconName } from \"#design-system\";\nimport { Icon } from \"#design-system\";\nimport React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { CommandItem } from \"../../command/command.js\";\nimport type { SelectProps } from \"../../enum-field/types.js\";\n\ninterface FavoriteOptionsProps {\n options: SelectProps[\"options\"];\n selectedValues: string[];\n multiple?: boolean;\n selectionIcon: \"auto\" | \"checkmark\";\n selectionIconPosition: \"left\" | \"right\";\n hasAnyIcon: boolean;\n toggleOption: (value: string) => void;\n tabIndex?: number;\n}\n\nconst renderIcon = (\n IconComponent:\n | IconName\n | React.ComponentType<{ className?: string }>\n | undefined,\n) => {\n if (typeof IconComponent === \"string\") {\n return (\n <Icon\n name={IconComponent}\n size={16}\n className={twMerge(\"text-foreground\")}\n />\n );\n }\n return (\n IconComponent && (\n <IconComponent className={twMerge(\"size-4\", \"text-foreground\")} />\n )\n );\n};\n\nexport const CommandItemList: React.FC<FavoriteOptionsProps> = ({\n options = [],\n selectedValues,\n multiple,\n selectionIcon,\n selectionIconPosition,\n hasAnyIcon,\n toggleOption,\n tabIndex,\n}) => {\n return (\n <>\n {options.map((opt) => {\n const isSelected = selectedValues.includes(opt.value);\n return (\n <CommandItem\n tabIndex={tabIndex}\n key={`favorite-${opt.value}`}\n value={opt.label}\n onSelect={() => !opt.disabled && toggleOption(opt.value)}\n disabled={opt.disabled}\n className={twMerge(\n \"cursor-pointer\",\n \"data-[selected=true]:bg-accent\",\n opt.disabled &&\n \"pointer-events-auto! cursor-not-allowed hover:hover-effect\",\n )}\n role=\"option\"\n aria-selected={isSelected}\n >\n {selectionIcon === \"auto\" &&\n (multiple ? (\n <div\n className={twMerge(\n \"flex size-4 items-center justify-center rounded-md border\",\n \"border-foreground\",\n isSelected && \"bg-primary text-primary-foreground\",\n )}\n >\n {isSelected && <Icon name=\"Checkmark\" size={16} />}\n </div>\n ) : (\n <div\n className={twMerge(\n \"relative size-4 rounded-full border\",\n isSelected ? \"border-foreground\" : \"border-foreground\",\n \"bg-transparent\",\n )}\n >\n {isSelected && (\n <div className=\"absolute top-1/2 left-1/2 size-2.5 -translate-1/2 rounded-full bg-primary\" />\n )}\n </div>\n ))}\n {selectionIcon === \"checkmark\" &&\n !(selectionIconPosition === \"right\" && hasAnyIcon) && (\n <div className=\"size-4\">\n {selectionIconPosition === \"left\" && isSelected && (\n <Icon\n name=\"Checkmark\"\n size={16}\n className=\"text-foreground\"\n />\n )}\n </div>\n )}\n {renderIcon(opt.icon)}\n <span\n className={twMerge(\n \"flex-1 truncate text-sm/4 font-normal\",\n \"text-foreground\",\n opt.disabled && \"text-foreground\",\n )}\n >\n {opt.label}\n </span>\n {selectionIcon === \"checkmark\" &&\n selectionIconPosition === \"right\" && (\n <div className=\"size-4\">\n {isSelected && (\n <Icon\n name=\"Checkmark\"\n size={16}\n className=\"text-foreground\"\n />\n )}\n </div>\n )}\n </CommandItem>\n );\n })}\n </>\n );\n};\n"],"mappings":";;;;;;AAkBA,MAAMI,cACJC,kBAIG;
|
|
1
|
+
{"version":3,"file":"CommandItemList.js","names":["Icon","React","twMerge","CommandItem","renderIcon","IconComponent","CommandItemList","options","selectedValues","multiple","selectionIcon","selectionIconPosition","hasAnyIcon","toggleOption","tabIndex","map","opt","isSelected","includes","value","label","disabled","icon"],"sources":["../../../../../src/ui/components/select-field/subcomponents/CommandItemList.tsx"],"sourcesContent":["import type { IconName } from \"#design-system\";\nimport { Icon } from \"#design-system\";\nimport React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { CommandItem } from \"../../command/command.js\";\nimport type { SelectProps } from \"../../enum-field/types.js\";\n\ninterface FavoriteOptionsProps {\n options: SelectProps[\"options\"];\n selectedValues: string[];\n multiple?: boolean;\n selectionIcon: \"auto\" | \"checkmark\";\n selectionIconPosition: \"left\" | \"right\";\n hasAnyIcon: boolean;\n toggleOption: (value: string) => void;\n tabIndex?: number;\n}\n\nconst renderIcon = (\n IconComponent:\n | IconName\n | React.ComponentType<{ className?: string }>\n | undefined,\n) => {\n if (typeof IconComponent === \"string\") {\n return (\n <Icon\n name={IconComponent}\n size={16}\n className={twMerge(\"text-foreground\")}\n />\n );\n }\n return (\n IconComponent && (\n <IconComponent className={twMerge(\"size-4\", \"text-foreground\")} />\n )\n );\n};\n\nexport const CommandItemList: React.FC<FavoriteOptionsProps> = ({\n options = [],\n selectedValues,\n multiple,\n selectionIcon,\n selectionIconPosition,\n hasAnyIcon,\n toggleOption,\n tabIndex,\n}) => {\n return (\n <>\n {options.map((opt) => {\n const isSelected = selectedValues.includes(opt.value);\n return (\n <CommandItem\n tabIndex={tabIndex}\n key={`favorite-${opt.value}`}\n value={opt.label}\n onSelect={() => !opt.disabled && toggleOption(opt.value)}\n disabled={opt.disabled}\n className={twMerge(\n \"cursor-pointer\",\n \"data-[selected=true]:bg-accent\",\n opt.disabled &&\n \"pointer-events-auto! cursor-not-allowed hover:hover-effect\",\n )}\n role=\"option\"\n aria-selected={isSelected}\n >\n {selectionIcon === \"auto\" &&\n (multiple ? (\n <div\n className={twMerge(\n \"flex size-4 items-center justify-center rounded-md border\",\n \"border-foreground\",\n isSelected && \"bg-primary text-primary-foreground\",\n )}\n >\n {isSelected && <Icon name=\"Checkmark\" size={16} />}\n </div>\n ) : (\n <div\n className={twMerge(\n \"relative size-4 rounded-full border\",\n isSelected ? \"border-foreground\" : \"border-foreground\",\n \"bg-transparent\",\n )}\n >\n {isSelected && (\n <div className=\"absolute top-1/2 left-1/2 size-2.5 -translate-1/2 rounded-full bg-primary\" />\n )}\n </div>\n ))}\n {selectionIcon === \"checkmark\" &&\n !(selectionIconPosition === \"right\" && hasAnyIcon) && (\n <div className=\"size-4\">\n {selectionIconPosition === \"left\" && isSelected && (\n <Icon\n name=\"Checkmark\"\n size={16}\n className=\"text-foreground\"\n />\n )}\n </div>\n )}\n {renderIcon(opt.icon)}\n <span\n className={twMerge(\n \"flex-1 truncate text-sm/4 font-normal\",\n \"text-foreground\",\n opt.disabled && \"text-foreground\",\n )}\n >\n {opt.label}\n </span>\n {selectionIcon === \"checkmark\" &&\n selectionIconPosition === \"right\" && (\n <div className=\"size-4\">\n {isSelected && (\n <Icon\n name=\"Checkmark\"\n size={16}\n className=\"text-foreground\"\n />\n )}\n </div>\n )}\n </CommandItem>\n );\n })}\n </>\n );\n};\n"],"mappings":";;;;;;AAkBA,MAAMI,cACJC,kBAIG;CACH,IAAI,OAAOA,kBAAkB,UAC3B,OACE,oBAAC,MAAD;EACE,MAAMA;EACN,MAAM;EACN,WAAWH,QAAQ,iBAAiB;CAAE,CAAA;CAI5C,OACEG,iBACE,oBAAC,eAAD,EAAe,WAAWH,QAAQ,UAAU,iBAAiB,EAAE,CAAA;AAGrE;AAEA,MAAaI,mBAAmD,EAC9DC,UAAU,CAAA,GACVC,gBACAC,UACAC,eACAC,uBACAC,YACAC,cACAC,eACI;CACJ,OACE,oBAAA,YAAA,EAAA,UACGP,QAAQQ,KAAKC,QAAQ;EACpB,MAAMC,aAAaT,eAAeU,SAASF,IAAIG,KAAK;EACpD,OACE,qBAAC,aAAD;GACYL;GAEV,OAAOE,IAAII;GACX,gBAAgB,CAACJ,IAAIK,YAAYR,aAAaG,IAAIG,KAAK;GACvD,UAAUH,IAAIK;GACd,WAAWnB,QACT,kBACA,kCACAc,IAAIK,YACF,4DACJ;GACA,MAAK;GACL,iBAAeJ;GAbjB,UAAA;IAeGP,kBAAkB,WAChBD,WACC,oBAAC,OAAD;KACE,WAAWP,QACT,6DACA,qBACAe,cAAc,oCAChB;KAECA,UAAAA,cAAc,oBAAC,MAAD;MAAM,MAAK;MAAY,MAAM;KAAG,CAAA;IAC5C,CAAA,IAEL,oBAAC,OAAD;KACE,WAAWf,QACT,uCACAe,aAAa,sBAAsB,qBACnC,gBACF;KAECA,UAAAA,cACC,oBAAC,OAAD,EAAK,WAAU,4EAA2E,CAAA;IAEzF,CAAA;IAERP,kBAAkB,eACjB,EAAEC,0BAA0B,WAAWC,eACrC,oBAAC,OAAD;KAAK,WAAU;KACZD,UAAAA,0BAA0B,UAAUM,cACnC,oBAAC,MAAD;MACE,MAAK;MACL,MAAM;MACN,WAAU;KAAiB,CAAA;IAG5B,CAAA;IAERb,WAAWY,IAAIM,IAAI;IACpB,oBAAC,QAAD;KACE,WAAWpB,QACT,yCACA,mBACAc,IAAIK,YAAY,iBAClB;KAECL,UAAAA,IAAII;IACD,CAAA;IACLV,kBAAkB,eACjBC,0BAA0B,WACxB,oBAAC,OAAD;KAAK,WAAU;KACZM,UAAAA,cACC,oBAAC,MAAD;MACE,MAAK;MACL,MAAM;MACN,WAAU;KAAiB,CAAA;IAG5B,CAAA;GAEE;EAvEN,GAAA,YAAYD,IAAIG,OAuEV;CAEjB,CAAC,EACH,CAAA;AAEJ"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { C as SelectProps } from "../../../index
|
|
2
|
-
import * as react from "react";
|
|
3
|
-
|
|
1
|
+
import { C as SelectProps } from "../../../index-5FEr1tXH.js";
|
|
4
2
|
//#region src/ui/components/select-field/use-select-field.d.ts
|
|
5
3
|
interface UseSelectFieldProps {
|
|
6
4
|
options?: SelectProps["options"];
|
|
@@ -9,21 +7,15 @@ interface UseSelectFieldProps {
|
|
|
9
7
|
value?: string | string[];
|
|
10
8
|
onChange?: (value: string | string[]) => void;
|
|
11
9
|
}
|
|
12
|
-
declare function useSelectField({
|
|
13
|
-
options,
|
|
14
|
-
multiple,
|
|
15
|
-
defaultValue,
|
|
16
|
-
value,
|
|
17
|
-
onChange
|
|
18
|
-
}: UseSelectFieldProps): {
|
|
10
|
+
export declare function useSelectField({ options, multiple, defaultValue, value, onChange }: UseSelectFieldProps): {
|
|
19
11
|
selectedValues: string[];
|
|
20
12
|
isPopoverOpen: boolean;
|
|
21
|
-
commandListRef: react.RefObject<HTMLDivElement | null>;
|
|
13
|
+
commandListRef: import("react").RefObject<HTMLDivElement | null>;
|
|
22
14
|
toggleOption: (optionValue: string) => void;
|
|
23
15
|
handleClear: () => void;
|
|
24
16
|
toggleAll: () => void;
|
|
25
17
|
handleOpenChange: (open: boolean) => void;
|
|
26
18
|
};
|
|
27
19
|
//#endregion
|
|
28
|
-
export {
|
|
20
|
+
export {};
|
|
29
21
|
//# sourceMappingURL=use-select-field.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-select-field.d.ts","names":[],"sources":["../../../../src/ui/components/select-field/use-select-field.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-select-field.d.ts","names":[],"sources":["../../../../src/ui/components/select-field/use-select-field.ts"],"mappings":";;UAGU;EACR,UAAU;EACV;EACA;EACA;EACA,YAAY;;wBAGE,iBACd,SACA,UACA,cACA,OACA,YACC;;;;EA8Be,eAAA;;;EAL4B,mBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-select-field.js","names":["useCallback","useEffect","useRef","useState","useSelectField","options","multiple","defaultValue","value","onChange","isInternalChange","commandListRef","isPopoverOpen","setIsPopoverOpen","selectedValues","setSelectedValues","initialValue","Array","isArray","current","newValue","handleOpenChange","open","toggleOption","optionValue","newValues","includes","filter","v","handleClear","toggleAll","enabledOptions","opt","disabled","map","length","prevMultiple"],"sources":["../../../../src/ui/components/select-field/use-select-field.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { SelectProps } from \"../enum-field/types.js\";\n\ninterface UseSelectFieldProps {\n options?: SelectProps[\"options\"];\n multiple?: boolean;\n defaultValue?: string | string[];\n value?: string | string[];\n onChange?: (value: string | string[]) => void;\n}\n\nexport function useSelectField({\n options = [],\n multiple = false,\n defaultValue,\n value,\n onChange,\n}: UseSelectFieldProps) {\n const isInternalChange = useRef(false);\n const commandListRef = useRef<HTMLDivElement>(null);\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n const [selectedValues, setSelectedValues] = useState<string[]>(() => {\n const initialValue = value ?? defaultValue ?? [];\n if (initialValue === \"\") {\n return [];\n }\n return Array.isArray(initialValue) ? initialValue : [initialValue];\n });\n\n useEffect(() => {\n if (isInternalChange.current) {\n isInternalChange.current = false;\n return;\n }\n const newValue = value ?? defaultValue ?? [];\n if (newValue === \"\") {\n setSelectedValues([]);\n } else {\n setSelectedValues(Array.isArray(newValue) ? newValue : [newValue]);\n }\n }, [value]);\n\n const handleOpenChange = useCallback((open: boolean) => {\n setIsPopoverOpen(open);\n }, []);\n\n const toggleOption = useCallback(\n (optionValue: string) => {\n isInternalChange.current = true;\n let newValues: string[];\n\n if (multiple) {\n newValues = selectedValues.includes(optionValue)\n ? selectedValues.filter((v) => v !== optionValue)\n : [...selectedValues, optionValue];\n } else {\n newValues = selectedValues[0] === optionValue ? [] : [optionValue];\n\n setIsPopoverOpen(false);\n }\n\n setSelectedValues(newValues);\n onChange?.(multiple ? newValues : (newValues[0] ?? \"\"));\n },\n [multiple, selectedValues, options, onChange],\n );\n\n const handleClear = useCallback(() => {\n isInternalChange.current = true;\n setSelectedValues([]);\n onChange?.(multiple ? [] : \"\");\n }, [multiple, onChange]);\n\n const toggleAll = useCallback(() => {\n isInternalChange.current = true;\n const enabledOptions = options\n .filter((opt) => !opt.disabled)\n .map((opt) => opt.value);\n\n const newValues =\n selectedValues.length === enabledOptions.length ? [] : enabledOptions;\n\n setSelectedValues(newValues);\n onChange?.(multiple ? newValues : newValues[0]);\n }, [options, selectedValues, multiple, onChange]);\n\n // handles changes to the \"multiple\" prop avoiding calling onChange on mount\n const prevMultiple = useRef(multiple);\n useEffect(() => {\n if (prevMultiple.current === multiple) {\n return;\n }\n prevMultiple.current = multiple;\n\n if (!multiple && selectedValues.length > 1) {\n isInternalChange.current = true;\n setSelectedValues([selectedValues[0]]);\n onChange?.(selectedValues[0]);\n return;\n }\n if (selectedValues.length > 0) {\n isInternalChange.current = true;\n onChange?.(multiple ? [selectedValues[0]] : selectedValues[0]);\n }\n }, [multiple]);\n\n return {\n selectedValues,\n isPopoverOpen,\n commandListRef,\n toggleOption,\n handleClear,\n toggleAll,\n handleOpenChange,\n };\n}\n"],"mappings":";;AAWA,SAAgBI,eAAe,EAC7BC,UAAU,
|
|
1
|
+
{"version":3,"file":"use-select-field.js","names":["useCallback","useEffect","useRef","useState","useSelectField","options","multiple","defaultValue","value","onChange","isInternalChange","commandListRef","isPopoverOpen","setIsPopoverOpen","selectedValues","setSelectedValues","initialValue","Array","isArray","current","newValue","handleOpenChange","open","toggleOption","optionValue","newValues","includes","filter","v","handleClear","toggleAll","enabledOptions","opt","disabled","map","length","prevMultiple"],"sources":["../../../../src/ui/components/select-field/use-select-field.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { SelectProps } from \"../enum-field/types.js\";\n\ninterface UseSelectFieldProps {\n options?: SelectProps[\"options\"];\n multiple?: boolean;\n defaultValue?: string | string[];\n value?: string | string[];\n onChange?: (value: string | string[]) => void;\n}\n\nexport function useSelectField({\n options = [],\n multiple = false,\n defaultValue,\n value,\n onChange,\n}: UseSelectFieldProps) {\n const isInternalChange = useRef(false);\n const commandListRef = useRef<HTMLDivElement>(null);\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n const [selectedValues, setSelectedValues] = useState<string[]>(() => {\n const initialValue = value ?? defaultValue ?? [];\n if (initialValue === \"\") {\n return [];\n }\n return Array.isArray(initialValue) ? initialValue : [initialValue];\n });\n\n useEffect(() => {\n if (isInternalChange.current) {\n isInternalChange.current = false;\n return;\n }\n const newValue = value ?? defaultValue ?? [];\n if (newValue === \"\") {\n setSelectedValues([]);\n } else {\n setSelectedValues(Array.isArray(newValue) ? newValue : [newValue]);\n }\n }, [value]);\n\n const handleOpenChange = useCallback((open: boolean) => {\n setIsPopoverOpen(open);\n }, []);\n\n const toggleOption = useCallback(\n (optionValue: string) => {\n isInternalChange.current = true;\n let newValues: string[];\n\n if (multiple) {\n newValues = selectedValues.includes(optionValue)\n ? selectedValues.filter((v) => v !== optionValue)\n : [...selectedValues, optionValue];\n } else {\n newValues = selectedValues[0] === optionValue ? [] : [optionValue];\n\n setIsPopoverOpen(false);\n }\n\n setSelectedValues(newValues);\n onChange?.(multiple ? newValues : (newValues[0] ?? \"\"));\n },\n [multiple, selectedValues, options, onChange],\n );\n\n const handleClear = useCallback(() => {\n isInternalChange.current = true;\n setSelectedValues([]);\n onChange?.(multiple ? [] : \"\");\n }, [multiple, onChange]);\n\n const toggleAll = useCallback(() => {\n isInternalChange.current = true;\n const enabledOptions = options\n .filter((opt) => !opt.disabled)\n .map((opt) => opt.value);\n\n const newValues =\n selectedValues.length === enabledOptions.length ? [] : enabledOptions;\n\n setSelectedValues(newValues);\n onChange?.(multiple ? newValues : newValues[0]);\n }, [options, selectedValues, multiple, onChange]);\n\n // handles changes to the \"multiple\" prop avoiding calling onChange on mount\n const prevMultiple = useRef(multiple);\n useEffect(() => {\n if (prevMultiple.current === multiple) {\n return;\n }\n prevMultiple.current = multiple;\n\n if (!multiple && selectedValues.length > 1) {\n isInternalChange.current = true;\n setSelectedValues([selectedValues[0]]);\n onChange?.(selectedValues[0]);\n return;\n }\n if (selectedValues.length > 0) {\n isInternalChange.current = true;\n onChange?.(multiple ? [selectedValues[0]] : selectedValues[0]);\n }\n }, [multiple]);\n\n return {\n selectedValues,\n isPopoverOpen,\n commandListRef,\n toggleOption,\n handleClear,\n toggleAll,\n handleOpenChange,\n };\n}\n"],"mappings":";;AAWA,SAAgBI,eAAe,EAC7BC,UAAU,CAAA,GACVC,WAAW,OACXC,cACAC,OACAC,YACsB;CACtB,MAAMC,mBAAmBR,OAAO,KAAK;CACrC,MAAMS,iBAAiBT,OAAuB,IAAI;CAClD,MAAM,CAACU,eAAeC,oBAAoBV,SAAS,KAAK;CACxD,MAAM,CAACW,gBAAgBC,qBAAqBZ,eAAyB;EACnE,MAAMa,eAAeR,SAASD,gBAAgB,CAAA;EAC9C,IAAIS,iBAAiB,IACnB,OAAO,CAAA;EAET,OAAOC,MAAMC,QAAQF,YAAY,IAAIA,eAAe,CAACA,YAAY;CACnE,CAAC;CAEDf,gBAAgB;EACd,IAAIS,iBAAiBS,SAAS;GAC5BT,iBAAiBS,UAAU;GAC3B;EACF;EACA,MAAMC,WAAWZ,SAASD,gBAAgB,CAAA;EAC1C,IAAIa,aAAa,IACfL,kBAAkB,CAAA,CAAE;OAEpBA,kBAAkBE,MAAMC,QAAQE,QAAQ,IAAIA,WAAW,CAACA,QAAQ,CAAC;CAErE,GAAG,CAACZ,KAAK,CAAC;CAEV,MAAMa,mBAAmBrB,aAAasB,SAAkB;EACtDT,iBAAiBS,IAAI;CACvB,GAAG,CAAA,CAAE;CAEL,MAAMC,eAAevB,aAClBwB,gBAAwB;EACvBd,iBAAiBS,UAAU;EAC3B,IAAIM;EAEJ,IAAInB,UACFmB,YAAYX,eAAeY,SAASF,WAAW,IAC3CV,eAAea,QAAQC,MAAMA,MAAMJ,WAAW,IAC9C,CAAC,GAAGV,gBAAgBU,WAAW;OAC9B;GACLC,YAAYX,eAAe,OAAOU,cAAc,CAAA,IAAK,CAACA,WAAW;GAEjEX,iBAAiB,KAAK;EACxB;EAEAE,kBAAkBU,SAAS;EAC3BhB,WAAWH,WAAWmB,YAAaA,UAAU,MAAM,EAAG;CACxD,GACA;EAACnB;EAAUQ;EAAgBT;EAASI;CAAQ,CAC9C;CAEA,MAAMoB,cAAc7B,kBAAkB;EACpCU,iBAAiBS,UAAU;EAC3BJ,kBAAkB,CAAA,CAAE;EACpBN,WAAWH,WAAW,CAAA,IAAK,EAAE;CAC/B,GAAG,CAACA,UAAUG,QAAQ,CAAC;CAEvB,MAAMqB,YAAY9B,kBAAkB;EAClCU,iBAAiBS,UAAU;EAC3B,MAAMY,iBAAiB1B,QACpBsB,QAAQK,QAAQ,CAACA,IAAIC,QAAQ,CAAC,CAC9BC,KAAKF,QAAQA,IAAIxB,KAAK;EAEzB,MAAMiB,YACJX,eAAeqB,WAAWJ,eAAeI,SAAS,CAAA,IAAKJ;EAEzDhB,kBAAkBU,SAAS;EAC3BhB,WAAWH,WAAWmB,YAAYA,UAAU,EAAE;CAChD,GAAG;EAACpB;EAASS;EAAgBR;EAAUG;CAAQ,CAAC;CAGhD,MAAM2B,eAAelC,OAAOI,QAAQ;CACpCL,gBAAgB;EACd,IAAImC,aAAajB,YAAYb,UAC3B;EAEF8B,aAAajB,UAAUb;EAEvB,IAAI,CAACA,YAAYQ,eAAeqB,SAAS,GAAG;GAC1CzB,iBAAiBS,UAAU;GAC3BJ,kBAAkB,CAACD,eAAe,EAAE,CAAC;GACrCL,WAAWK,eAAe,EAAE;GAC5B;EACF;EACA,IAAIA,eAAeqB,SAAS,GAAG;GAC7BzB,iBAAiBS,UAAU;GAC3BV,WAAWH,WAAW,CAACQ,eAAe,EAAE,IAAIA,eAAe,EAAE;EAC/D;CACF,GAAG,CAACR,QAAQ,CAAC;CAEb,OAAO;EACLQ;EACAF;EACAD;EACAY;EACAM;EACAC;EACAT;CACF;AACF"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { a as NodeStatus, i as NodeSortType, n as NodeSortComparisonFn, o as SidebarIcon, r as NodeSortOrder, s as SidebarNode, t as FlattenedNode } from "../../../types-
|
|
2
|
-
import { n as SidebarProps, t as Sidebar } from "../../../sidebar-
|
|
3
|
-
import { n as useSidebar, t as SidebarProvider } from "../../../sidebar-provider-
|
|
4
|
-
|
|
1
|
+
import { a as NodeStatus, i as NodeSortType, n as NodeSortComparisonFn, o as SidebarIcon, r as NodeSortOrder, s as SidebarNode, t as FlattenedNode } from "../../../types-FTqFl5du.js";
|
|
2
|
+
import { n as SidebarProps, t as Sidebar } from "../../../sidebar-DFqreKf1.js";
|
|
3
|
+
import { n as useSidebar, t as SidebarProvider } from "../../../sidebar-provider-CZHhqW5n.js";
|
|
4
|
+
import "../../../index-C-Tup7Br.js";
|
|
5
|
+
export { type FlattenedNode, type NodeSortComparisonFn, type NodeSortOrder, type NodeSortType, type NodeStatus, Sidebar, type SidebarIcon, type SidebarNode, SidebarProps, SidebarProvider, useSidebar };
|
|
6
|
+
export {};
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import { n as SidebarProps, t as Sidebar } from "../../../sidebar-
|
|
2
|
-
export { Sidebar, SidebarProps };
|
|
1
|
+
import { n as SidebarProps, t as Sidebar } from "../../../sidebar-DFqreKf1.js";
|
|
2
|
+
export { Sidebar, SidebarProps };
|
|
3
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as Icon } from "../../../icon-
|
|
1
|
+
import { t as Icon } from "../../../icon-DQ2yrWYv.js";
|
|
2
2
|
import { triggerEvent } from "./utils.js";
|
|
3
3
|
import { useSidebar } from "./subcomponents/sidebar-provider/sidebar-provider.js";
|
|
4
4
|
import { SidebarContentArea } from "./subcomponents/sidebar-content-area.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.js","names":["useCallback","useEffect","twMerge","Icon","SidebarContentArea","SidebarHeader","SidebarPinningArea","useSidebar","SidebarSearch","useSidebarResize","triggerEvent","Sidebar","activeNodeId","onActiveNodeChange","nodes","sidebarIcon","sidebarTitle","defaultLevel","enableMacros","allowPinning","resizable","showSearchBar","showStatusFilter","extraFooterContent","initialWidth","maxWidth","className","handleOnTitleClick","isLoading","nodeSortType","nodeSortOrder","sidebarRef","startResizing","isResizing","isSidebarOpen","handleToggleSidebar","defaultWidth","minWidth","pinnedNodePath","setNodes","openLevel","togglePin","syncActiveNodeId","setActiveNodeChangeCallback","providerNodes","currentSortType","currentSortOrder","length","handleActiveNodeChange","node","current","hasPinnedNodes","lastPinnedNodeId","id","width"],"sources":["../../../../src/ui/components/sidebar/sidebar.tsx"],"sourcesContent":["import { useCallback, useEffect } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Icon } from \"../../../powerhouse/index.js\";\nimport { SidebarContentArea } from \"./subcomponents/sidebar-content-area.js\";\nimport { SidebarHeader } from \"./subcomponents/sidebar-header.js\";\nimport { SidebarPinningArea } from \"./subcomponents/sidebar-pinning-area.js\";\nimport { useSidebar } from \"./subcomponents/sidebar-provider/index.js\";\nimport { SidebarSearch } from \"./subcomponents/sidebar-search/index.js\";\nimport type { NodeSortOrder, NodeSortType, SidebarNode } from \"./types.js\";\nimport { useSidebarResize } from \"./use-sidebar-resize.js\";\nimport { triggerEvent } from \"./utils.js\";\n\nexport interface SidebarProps {\n /**\n * The ID of the currently active node\n */\n activeNodeId?: string;\n /**\n * Callback function to update the active node\n */\n onActiveNodeChange?: (newNode: SidebarNode) => void;\n /**\n * The nodes to be displayed in the sidebar\n */\n nodes?: SidebarNode[];\n /**\n * Which level should be shown by default (i.e., level 1).\n * @default 1 It is 1-indexed.\n */\n defaultLevel?: number;\n /**\n * Enables the vertical resizing of the sidebar\n * @default true\n */\n resizable?: boolean;\n /**\n * Whether pinning functionality is enabled for nodes\n * @default true\n */\n allowPinning?: boolean;\n /**\n * Configurable levels (e.g., 4). If its zero, then no buttons are shown (default).\n * @default 0\n */\n enableMacros?: number;\n /**\n * Whether to display the search bar in the sidebar\n * @default true\n */\n showSearchBar?: boolean;\n /**\n * Whether to display the status filter button in the sidebar. This option is ignored if `showSearchBar` is `false`.\n * @default false\n */\n showStatusFilter?: boolean;\n /**\n * The title that appears at the top of the sidebar, providing context or a heading for the hierarchy displayed within it.\n */\n sidebarTitle?: string;\n /**\n * An optional icon that can be displayed next to the sidebar title or at the top of the sidebar.\n */\n sidebarIcon?: React.ReactNode;\n /**\n * An optional footer content that can be displayed at the bottom of the sidebar.\n */\n extraFooterContent?: React.ReactNode;\n /**\n * The initial width of the sidebar.\n * @default 300\n */\n initialWidth?: number;\n /**\n * The maximum width of the sidebar.\n */\n maxWidth?: number;\n /**\n * Optional className for the sidebar container\n */\n className?: string;\n\n /**\n * Callback function triggered when the sidebar title is clicked.\n */\n handleOnTitleClick?: () => void;\n\n /**\n * Whether the sidebar is in a loading state, displaying skeleton items\n * @default false\n */\n isLoading?: boolean;\n /**\n * The type of sorting to apply to all nodes recursively.\n * Can be \"alphabetical\", \"natural\", or a custom comparison function.\n * When undefined, nodes maintain their original order.\n * Affects all levels of the tree hierarchy.\n */\n nodeSortType?: NodeSortType;\n /**\n * The order direction for sorting nodes (\"asc\" or \"desc\").\n * Only applicable when nodeSortType is defined.\n * @default \"asc\"\n */\n nodeSortOrder?: NodeSortOrder;\n}\n\n/**\n * Sidebar component that provides a collapsible and resizable navigation panel\n * with support for hierarchical data, search, pinning, and custom styling.\n */\nexport const Sidebar: React.FC<SidebarProps> = ({\n activeNodeId,\n onActiveNodeChange,\n nodes,\n sidebarIcon,\n sidebarTitle,\n defaultLevel = 1,\n enableMacros = 0,\n allowPinning = true,\n resizable = true,\n showSearchBar = true,\n showStatusFilter = false,\n extraFooterContent,\n initialWidth = 300,\n maxWidth,\n className,\n handleOnTitleClick,\n isLoading = false,\n nodeSortType,\n nodeSortOrder = \"asc\",\n}) => {\n const {\n sidebarRef,\n startResizing,\n isResizing,\n isSidebarOpen,\n handleToggleSidebar,\n } = useSidebarResize({\n defaultWidth: initialWidth,\n minWidth: 220,\n maxWidth,\n });\n\n const {\n pinnedNodePath,\n setNodes,\n openLevel,\n togglePin,\n syncActiveNodeId,\n setActiveNodeChangeCallback,\n nodes: providerNodes,\n nodeSortType: currentSortType,\n nodeSortOrder: currentSortOrder,\n } = useSidebar();\n\n useEffect(() => {\n if (nodes) {\n setNodes(nodes, nodeSortType, nodeSortOrder);\n }\n }, [nodes, setNodes, nodeSortType, nodeSortOrder]);\n\n useEffect(() => {\n if (\n !nodes &&\n providerNodes.length > 0 &&\n (nodeSortType !== currentSortType || nodeSortOrder !== currentSortOrder)\n ) {\n setNodes(providerNodes, nodeSortType, nodeSortOrder);\n }\n }, [\n nodes,\n providerNodes,\n setNodes,\n nodeSortType,\n nodeSortOrder,\n currentSortType,\n currentSortOrder,\n ]);\n\n // Initialize default expanded level on mount.\n // openLevel intentionally omitted — it changes every time currentRoots\n // changes, which would cause an infinite loop.\n useEffect(() => {\n if (defaultLevel > 1) {\n openLevel(defaultLevel);\n }\n }, [defaultLevel]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleActiveNodeChange = useCallback(\n (node: SidebarNode) => {\n onActiveNodeChange?.(node);\n triggerEvent(\"sidebar:change\", { node }, sidebarRef.current);\n },\n [onActiveNodeChange, sidebarRef],\n );\n useEffect(() => {\n syncActiveNodeId(activeNodeId);\n }, [activeNodeId, syncActiveNodeId]);\n\n useEffect(() => {\n setActiveNodeChangeCallback(handleActiveNodeChange);\n }, [handleActiveNodeChange, setActiveNodeChangeCallback]);\n\n useEffect(() => {\n const hasPinnedNodes = pinnedNodePath.length > 0;\n if (!allowPinning && hasPinnedNodes) {\n const lastPinnedNodeId = pinnedNodePath[pinnedNodePath.length - 1].id;\n togglePin(lastPinnedNodeId);\n }\n }, [allowPinning, pinnedNodePath, togglePin]);\n\n return (\n <aside\n ref={sidebarRef}\n style={{ width: \"min(100%, var(--sidebar-width))\" }}\n className={twMerge(\n \"group peer relative flex h-svh max-h-screen flex-col bg-sidebar text-sidebar-foreground shadow-lg transition-[width] duration-75 ease-linear\",\n isResizing && \"transition-none\",\n className,\n )}\n >\n {isSidebarOpen && (\n <>\n <SidebarHeader\n sidebarTitle={sidebarTitle}\n sidebarIcon={sidebarIcon}\n enableMacros={enableMacros}\n handleOnTitleClick={handleOnTitleClick}\n />\n\n {allowPinning && pinnedNodePath.length > 0 && <SidebarPinningArea />}\n <SidebarContentArea\n allowPinning={allowPinning}\n isLoading={isLoading}\n />\n {showSearchBar && (\n <SidebarSearch showStatusFilter={showStatusFilter} />\n )}\n {extraFooterContent && (\n <div className=\"w-full border-t border-sidebar-border p-2\">\n {extraFooterContent}\n </div>\n )}\n </>\n )}\n\n {resizable && (\n <div\n className=\"group/sidebar-resizer absolute top-0 right-0 h-full w-[10px] translate-x-1/2 cursor-ew-resize select-none\"\n onMouseDown={startResizing}\n >\n <div\n className={twMerge(\n \"relative h-full w-px translate-x-[5px] transition-colors group-hover/sidebar-resizer:hover-effect\",\n isResizing && \"cursor-default bg-info\",\n !isSidebarOpen && \"bg-secondary\",\n )}\n >\n <button\n type=\"button\"\n className={twMerge(\n \"absolute top-14 right-0 size-4 translate-x-1/2 rounded-full bg-muted-foreground\",\n \"opacity-0 transition-opacity group-hover/sidebar-resizer:opacity-100\",\n )}\n onClick={handleToggleSidebar}\n >\n <Icon\n name=\"Caret\"\n size={16}\n className={twMerge(\n \"min-w-4 text-foreground\",\n isSidebarOpen && \"-rotate-180\",\n )}\n />\n </button>\n </div>\n </div>\n )}\n </aside>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;AA8GA,MAAaW,WAAmC,EAC9CC,cACAC,oBACAC,OACAC,aACAC,cACAC,eAAe,GACfC,eAAe,GACfC,eAAe,MACfC,YAAY,MACZC,gBAAgB,MAChBC,mBAAmB,OACnBC,oBACAC,eAAe,KACfC,UACAC,WACAC,oBACAC,YAAY,OACZC,cACAC,gBAAgB,YACZ;CACJ,MAAM,EACJC,YACAC,eACAC,YACAC,eACAC,wBACE1B,iBAAiB;EACnB2B,cAAcZ;EACda,UAAU;EACVZ;EACD,CAAC;CAEF,MAAM,EACJa,gBACAC,UACAC,WACAC,WACAC,kBACAC,6BACA7B,OAAO8B,eACPf,cAAcgB,iBACdf,eAAegB,qBACbvC,YAAY;AAEhBN,iBAAgB;AACd,MAAIa,MACFyB,UAASzB,OAAOe,cAAcC,cAAc;IAE7C;EAAChB;EAAOyB;EAAUV;EAAcC;EAAc,CAAC;AAElD7B,iBAAgB;AACd,MACE,CAACa,SACD8B,cAAcG,SAAS,MACtBlB,iBAAiBgB,mBAAmBf,kBAAkBgB,kBAEvDP,UAASK,eAAef,cAAcC,cAAc;IAErD;EACDhB;EACA8B;EACAL;EACAV;EACAC;EACAe;EACAC;EACD,CAAC;AAKF7C,iBAAgB;AACd,MAAIgB,eAAe,EACjBuB,WAAUvB,aAAa;IAExB,CAACA,aAAa,CAAC;CAElB,MAAM+B,yBAAyBhD,aAC5BiD,SAAsB;AACrBpC,uBAAqBoC,KAAK;AAC1BvC,eAAa,kBAAkB,EAAEuC,MAAM,EAAElB,WAAWmB,QAAQ;IAE9D,CAACrC,oBAAoBkB,WACvB,CAAC;AACD9B,iBAAgB;AACdyC,mBAAiB9B,aAAa;IAC7B,CAACA,cAAc8B,iBAAiB,CAAC;AAEpCzC,iBAAgB;AACd0C,8BAA4BK,uBAAuB;IAClD,CAACA,wBAAwBL,4BAA4B,CAAC;AAEzD1C,iBAAgB;EACd,MAAMkD,iBAAiBb,eAAeS,SAAS;AAC/C,MAAI,CAAC5B,gBAAgBgC,gBAAgB;GACnC,MAAMC,mBAAmBd,eAAeA,eAAeS,SAAS,GAAGM;AACnEZ,aAAUW,iBAAiB;;IAE5B;EAACjC;EAAcmB;EAAgBG;EAAU,CAAC;AAE7C,QACE,qBAAC,SAAD;EACE,KAAKV;EACL,OAAO,EAAEuB,OAAO,mCAAmC;EACnD,WAAWpD,QACT,gJACA+B,cAAc,mBACdP,UACD;YAPH,CASGQ,iBACC,qBAAA,YAAA,EAAA,UAAA;GACE,oBAAC,eAAD;IACgBlB;IACDD;IACCG;IACMS;IAAmB,CAAA;GAGxCR,gBAAgBmB,eAAeS,SAAS,KAAK,oBAAC,oBAAD,EAAsB,CAAA;GACpE,oBAAC,oBAAD;IACgB5B;IACHS;IAAU,CAAA;GAEtBP,iBACC,oBAAC,eAAD,EAAiCC,kBAClC,CAAA;GACAC,sBACC,oBAAC,OAAD;IAAK,WAAU;cACZA;IAEJ,CAAA;GAEJ,EAAA,CAAA,EAEAH,aACC,oBAAC,OAAD;GACE,WAAU;GACV,aAAaY;aAEb,oBAAC,OAAD;IACE,WAAW9B,QACT,qGACA+B,cAAc,0BACd,CAACC,iBAAiB,eACnB;cAED,oBAAC,UAAD;KACE,MAAK;KACL,WAAWhC,QACT,mFACA,uEACD;KACD,SAASiC;eAET,oBAAC,MAAD;MACE,MAAK;MACL,MAAM;MACN,WAAWjC,QACT,2BACAgC,iBAAiB,cAClB;MAAC,CAAA;KAEE,CAAA;IACL,CAAA;GAER,CAAA,CACK"}
|
|
1
|
+
{"version":3,"file":"sidebar.js","names":["useCallback","useEffect","twMerge","Icon","SidebarContentArea","SidebarHeader","SidebarPinningArea","useSidebar","SidebarSearch","useSidebarResize","triggerEvent","Sidebar","activeNodeId","onActiveNodeChange","nodes","sidebarIcon","sidebarTitle","defaultLevel","enableMacros","allowPinning","resizable","showSearchBar","showStatusFilter","extraFooterContent","initialWidth","maxWidth","className","handleOnTitleClick","isLoading","nodeSortType","nodeSortOrder","sidebarRef","startResizing","isResizing","isSidebarOpen","handleToggleSidebar","defaultWidth","minWidth","pinnedNodePath","setNodes","openLevel","togglePin","syncActiveNodeId","setActiveNodeChangeCallback","providerNodes","currentSortType","currentSortOrder","length","handleActiveNodeChange","node","current","hasPinnedNodes","lastPinnedNodeId","id","width"],"sources":["../../../../src/ui/components/sidebar/sidebar.tsx"],"sourcesContent":["import { useCallback, useEffect } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Icon } from \"../../../powerhouse/index.js\";\nimport { SidebarContentArea } from \"./subcomponents/sidebar-content-area.js\";\nimport { SidebarHeader } from \"./subcomponents/sidebar-header.js\";\nimport { SidebarPinningArea } from \"./subcomponents/sidebar-pinning-area.js\";\nimport { useSidebar } from \"./subcomponents/sidebar-provider/index.js\";\nimport { SidebarSearch } from \"./subcomponents/sidebar-search/index.js\";\nimport type { NodeSortOrder, NodeSortType, SidebarNode } from \"./types.js\";\nimport { useSidebarResize } from \"./use-sidebar-resize.js\";\nimport { triggerEvent } from \"./utils.js\";\n\nexport interface SidebarProps {\n /**\n * The ID of the currently active node\n */\n activeNodeId?: string;\n /**\n * Callback function to update the active node\n */\n onActiveNodeChange?: (newNode: SidebarNode) => void;\n /**\n * The nodes to be displayed in the sidebar\n */\n nodes?: SidebarNode[];\n /**\n * Which level should be shown by default (i.e., level 1).\n * @default 1 It is 1-indexed.\n */\n defaultLevel?: number;\n /**\n * Enables the vertical resizing of the sidebar\n * @default true\n */\n resizable?: boolean;\n /**\n * Whether pinning functionality is enabled for nodes\n * @default true\n */\n allowPinning?: boolean;\n /**\n * Configurable levels (e.g., 4). If its zero, then no buttons are shown (default).\n * @default 0\n */\n enableMacros?: number;\n /**\n * Whether to display the search bar in the sidebar\n * @default true\n */\n showSearchBar?: boolean;\n /**\n * Whether to display the status filter button in the sidebar. This option is ignored if `showSearchBar` is `false`.\n * @default false\n */\n showStatusFilter?: boolean;\n /**\n * The title that appears at the top of the sidebar, providing context or a heading for the hierarchy displayed within it.\n */\n sidebarTitle?: string;\n /**\n * An optional icon that can be displayed next to the sidebar title or at the top of the sidebar.\n */\n sidebarIcon?: React.ReactNode;\n /**\n * An optional footer content that can be displayed at the bottom of the sidebar.\n */\n extraFooterContent?: React.ReactNode;\n /**\n * The initial width of the sidebar.\n * @default 300\n */\n initialWidth?: number;\n /**\n * The maximum width of the sidebar.\n */\n maxWidth?: number;\n /**\n * Optional className for the sidebar container\n */\n className?: string;\n\n /**\n * Callback function triggered when the sidebar title is clicked.\n */\n handleOnTitleClick?: () => void;\n\n /**\n * Whether the sidebar is in a loading state, displaying skeleton items\n * @default false\n */\n isLoading?: boolean;\n /**\n * The type of sorting to apply to all nodes recursively.\n * Can be \"alphabetical\", \"natural\", or a custom comparison function.\n * When undefined, nodes maintain their original order.\n * Affects all levels of the tree hierarchy.\n */\n nodeSortType?: NodeSortType;\n /**\n * The order direction for sorting nodes (\"asc\" or \"desc\").\n * Only applicable when nodeSortType is defined.\n * @default \"asc\"\n */\n nodeSortOrder?: NodeSortOrder;\n}\n\n/**\n * Sidebar component that provides a collapsible and resizable navigation panel\n * with support for hierarchical data, search, pinning, and custom styling.\n */\nexport const Sidebar: React.FC<SidebarProps> = ({\n activeNodeId,\n onActiveNodeChange,\n nodes,\n sidebarIcon,\n sidebarTitle,\n defaultLevel = 1,\n enableMacros = 0,\n allowPinning = true,\n resizable = true,\n showSearchBar = true,\n showStatusFilter = false,\n extraFooterContent,\n initialWidth = 300,\n maxWidth,\n className,\n handleOnTitleClick,\n isLoading = false,\n nodeSortType,\n nodeSortOrder = \"asc\",\n}) => {\n const {\n sidebarRef,\n startResizing,\n isResizing,\n isSidebarOpen,\n handleToggleSidebar,\n } = useSidebarResize({\n defaultWidth: initialWidth,\n minWidth: 220,\n maxWidth,\n });\n\n const {\n pinnedNodePath,\n setNodes,\n openLevel,\n togglePin,\n syncActiveNodeId,\n setActiveNodeChangeCallback,\n nodes: providerNodes,\n nodeSortType: currentSortType,\n nodeSortOrder: currentSortOrder,\n } = useSidebar();\n\n useEffect(() => {\n if (nodes) {\n setNodes(nodes, nodeSortType, nodeSortOrder);\n }\n }, [nodes, setNodes, nodeSortType, nodeSortOrder]);\n\n useEffect(() => {\n if (\n !nodes &&\n providerNodes.length > 0 &&\n (nodeSortType !== currentSortType || nodeSortOrder !== currentSortOrder)\n ) {\n setNodes(providerNodes, nodeSortType, nodeSortOrder);\n }\n }, [\n nodes,\n providerNodes,\n setNodes,\n nodeSortType,\n nodeSortOrder,\n currentSortType,\n currentSortOrder,\n ]);\n\n // Initialize default expanded level on mount.\n // openLevel intentionally omitted — it changes every time currentRoots\n // changes, which would cause an infinite loop.\n useEffect(() => {\n if (defaultLevel > 1) {\n openLevel(defaultLevel);\n }\n }, [defaultLevel]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleActiveNodeChange = useCallback(\n (node: SidebarNode) => {\n onActiveNodeChange?.(node);\n triggerEvent(\"sidebar:change\", { node }, sidebarRef.current);\n },\n [onActiveNodeChange, sidebarRef],\n );\n useEffect(() => {\n syncActiveNodeId(activeNodeId);\n }, [activeNodeId, syncActiveNodeId]);\n\n useEffect(() => {\n setActiveNodeChangeCallback(handleActiveNodeChange);\n }, [handleActiveNodeChange, setActiveNodeChangeCallback]);\n\n useEffect(() => {\n const hasPinnedNodes = pinnedNodePath.length > 0;\n if (!allowPinning && hasPinnedNodes) {\n const lastPinnedNodeId = pinnedNodePath[pinnedNodePath.length - 1].id;\n togglePin(lastPinnedNodeId);\n }\n }, [allowPinning, pinnedNodePath, togglePin]);\n\n return (\n <aside\n ref={sidebarRef}\n style={{ width: \"min(100%, var(--sidebar-width))\" }}\n className={twMerge(\n \"group peer relative flex h-svh max-h-screen flex-col bg-sidebar text-sidebar-foreground shadow-lg transition-[width] duration-75 ease-linear\",\n isResizing && \"transition-none\",\n className,\n )}\n >\n {isSidebarOpen && (\n <>\n <SidebarHeader\n sidebarTitle={sidebarTitle}\n sidebarIcon={sidebarIcon}\n enableMacros={enableMacros}\n handleOnTitleClick={handleOnTitleClick}\n />\n\n {allowPinning && pinnedNodePath.length > 0 && <SidebarPinningArea />}\n <SidebarContentArea\n allowPinning={allowPinning}\n isLoading={isLoading}\n />\n {showSearchBar && (\n <SidebarSearch showStatusFilter={showStatusFilter} />\n )}\n {extraFooterContent && (\n <div className=\"w-full border-t border-sidebar-border p-2\">\n {extraFooterContent}\n </div>\n )}\n </>\n )}\n\n {resizable && (\n <div\n className=\"group/sidebar-resizer absolute top-0 right-0 h-full w-[10px] translate-x-1/2 cursor-ew-resize select-none\"\n onMouseDown={startResizing}\n >\n <div\n className={twMerge(\n \"relative h-full w-px translate-x-[5px] transition-colors group-hover/sidebar-resizer:hover-effect\",\n isResizing && \"cursor-default bg-info\",\n !isSidebarOpen && \"bg-secondary\",\n )}\n >\n <button\n type=\"button\"\n className={twMerge(\n \"absolute top-14 right-0 size-4 translate-x-1/2 rounded-full bg-muted-foreground\",\n \"opacity-0 transition-opacity group-hover/sidebar-resizer:opacity-100\",\n )}\n onClick={handleToggleSidebar}\n >\n <Icon\n name=\"Caret\"\n size={16}\n className={twMerge(\n \"min-w-4 text-foreground\",\n isSidebarOpen && \"-rotate-180\",\n )}\n />\n </button>\n </div>\n </div>\n )}\n </aside>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;AA8GA,MAAaW,WAAmC,EAC9CC,cACAC,oBACAC,OACAC,aACAC,cACAC,eAAe,GACfC,eAAe,GACfC,eAAe,MACfC,YAAY,MACZC,gBAAgB,MAChBC,mBAAmB,OACnBC,oBACAC,eAAe,KACfC,UACAC,WACAC,oBACAC,YAAY,OACZC,cACAC,gBAAgB,YACZ;CACJ,MAAM,EACJC,YACAC,eACAC,YACAC,eACAC,wBACE1B,iBAAiB;EACnB2B,cAAcZ;EACda,UAAU;EACVZ;CACF,CAAC;CAED,MAAM,EACJa,gBACAC,UACAC,WACAC,WACAC,kBACAC,6BACA7B,OAAO8B,eACPf,cAAcgB,iBACdf,eAAegB,qBACbvC,WAAW;CAEfN,gBAAgB;EACd,IAAIa,OACFyB,SAASzB,OAAOe,cAAcC,aAAa;CAE/C,GAAG;EAAChB;EAAOyB;EAAUV;EAAcC;CAAa,CAAC;CAEjD7B,gBAAgB;EACd,IACE,CAACa,SACD8B,cAAcG,SAAS,MACtBlB,iBAAiBgB,mBAAmBf,kBAAkBgB,mBAEvDP,SAASK,eAAef,cAAcC,aAAa;CAEvD,GAAG;EACDhB;EACA8B;EACAL;EACAV;EACAC;EACAe;EACAC;CAAgB,CACjB;CAKD7C,gBAAgB;EACd,IAAIgB,eAAe,GACjBuB,UAAUvB,YAAY;CAE1B,GAAG,CAACA,YAAY,CAAC;CAEjB,MAAM+B,yBAAyBhD,aAC5BiD,SAAsB;EACrBpC,qBAAqBoC,IAAI;EACzBvC,aAAa,kBAAkB,EAAEuC,KAAK,GAAGlB,WAAWmB,OAAO;CAC7D,GACA,CAACrC,oBAAoBkB,UAAU,CACjC;CACA9B,gBAAgB;EACdyC,iBAAiB9B,YAAY;CAC/B,GAAG,CAACA,cAAc8B,gBAAgB,CAAC;CAEnCzC,gBAAgB;EACd0C,4BAA4BK,sBAAsB;CACpD,GAAG,CAACA,wBAAwBL,2BAA2B,CAAC;CAExD1C,gBAAgB;EACd,MAAMkD,iBAAiBb,eAAeS,SAAS;EAC/C,IAAI,CAAC5B,gBAAgBgC,gBAAgB;GACnC,MAAMC,mBAAmBd,eAAeA,eAAeS,SAAS,EAAE,CAACM;GACnEZ,UAAUW,gBAAgB;EAC5B;CACF,GAAG;EAACjC;EAAcmB;EAAgBG;CAAS,CAAC;CAE5C,OACE,qBAAC,SAAD;EACE,KAAKV;EACL,OAAO,EAAEuB,OAAO,kCAAkC;EAClD,WAAWpD,QACT,gJACA+B,cAAc,mBACdP,SACF;EAPF,UAAA,CASGQ,iBACC,qBAAA,YAAA,EAAA,UAAA;GACE,oBAAC,eAAD;IACgBlB;IACDD;IACCG;IACMS;GAAmB,CAAA;GAGxCR,gBAAgBmB,eAAeS,SAAS,KAAK,oBAAC,oBAAD,CAAmB,CAAA;GACjE,oBAAC,oBAAD;IACgB5B;IACHS;GAAU,CAAA;GAEtBP,iBACC,oBAAC,eAAD,EAAiCC,iBAAiB,CAAA;GAEnDC,sBACC,oBAAC,OAAD;IAAK,WAAU;IACZA,UAAAA;GACE,CAAA;EAET,EAAA,CAAA,GAGDH,aACC,oBAAC,OAAD;GACE,WAAU;GACV,aAAaY;GAEb,UAAA,oBAAC,OAAD;IACE,WAAW9B,QACT,qGACA+B,cAAc,0BACd,CAACC,iBAAiB,cACpB;IAEA,UAAA,oBAAC,UAAD;KACE,MAAK;KACL,WAAWhC,QACT,mFACA,sEACF;KACA,SAASiC;KAET,UAAA,oBAAC,MAAD;MACE,MAAK;MACL,MAAM;MACN,WAAWjC,QACT,2BACAgC,iBAAiB,aACnB;KAAE,CAAA;IAEE,CAAA;GACL,CAAA;EACF,CAAA,CAEF;;AAEX"}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
|
-
|
|
3
1
|
//#region src/ui/components/sidebar/subcomponents/sidebar-content-area.d.ts
|
|
4
2
|
interface SidebarContentAreaProps {
|
|
5
3
|
allowPinning?: boolean;
|
|
6
4
|
isLoading?: boolean;
|
|
7
5
|
}
|
|
8
|
-
declare const SidebarContentArea: ({
|
|
9
|
-
allowPinning,
|
|
10
|
-
isLoading
|
|
11
|
-
}: SidebarContentAreaProps) => react_jsx_runtime0.JSX.Element;
|
|
6
|
+
export declare const SidebarContentArea: ({ allowPinning, isLoading }: SidebarContentAreaProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
7
|
//#endregion
|
|
13
|
-
export {
|
|
8
|
+
export {};
|
|
14
9
|
//# sourceMappingURL=sidebar-content-area.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar-content-area.d.ts","names":[],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-content-area.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"sidebar-content-area.d.ts","names":[],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-content-area.tsx"],"mappings":";UAOU;EACR;EACA;;qBAGW,uBAAkB,cAAA,aAG5B,wDAAuB,IAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as Icon } from "../../../../icon-
|
|
1
|
+
import { t as Icon } from "../../../../icon-DQ2yrWYv.js";
|
|
2
2
|
import { SidebarItem } from "./sidebar-item.js";
|
|
3
3
|
import { useSidebar } from "./sidebar-provider/sidebar-provider.js";
|
|
4
4
|
import { SidebarSkeleton } from "./sidebar-skeleton.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar-content-area.js","names":["AutoSizer","List","twMerge","SidebarItem","useSidebar","SidebarSkeleton","Icon","SidebarContentArea","allowPinning","isLoading","flattenedNodes","toggleNode","togglePin","searchTerm","searchResults","activeSearchIndex","pinnedNodePath","activeNodeId","virtualListRef","onActiveNodeChange","hasPinnedItems","length","renderNode","index","key","style","node","id","width","height"],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-content-area.tsx"],"sourcesContent":["import { AutoSizer, List } from \"react-virtualized\";\nimport { twMerge } from \"tailwind-merge\";\nimport { SidebarItem } from \"./sidebar-item.js\";\nimport { useSidebar } from \"./sidebar-provider/index.js\";\nimport { SidebarSkeleton } from \"./sidebar-skeleton.js\";\nimport { Icon } from \"../../../../powerhouse/index.js\";\n\ninterface SidebarContentAreaProps {\n allowPinning?: boolean;\n isLoading?: boolean;\n}\n\nexport const SidebarContentArea = ({\n allowPinning,\n isLoading,\n}: SidebarContentAreaProps) => {\n const {\n flattenedNodes,\n toggleNode,\n togglePin,\n searchTerm,\n searchResults,\n activeSearchIndex,\n pinnedNodePath,\n activeNodeId,\n virtualListRef,\n onActiveNodeChange,\n } = useSidebar();\n const hasPinnedItems = allowPinning && pinnedNodePath.length > 0;\n\n const renderNode = ({\n index,\n key,\n style,\n }: {\n index: number;\n key: string;\n style: React.CSSProperties;\n }) => {\n const node = flattenedNodes[index];\n\n return (\n <SidebarItem\n key={key}\n node={node}\n toggleNode={toggleNode}\n togglePin={togglePin}\n searchTerm={searchTerm}\n searchResults={searchResults}\n activeSearchIndex={activeSearchIndex}\n allowPinning={allowPinning ?? false}\n isActive={activeNodeId === node.id}\n onChange={onActiveNodeChange}\n style={style}\n />\n );\n };\n\n return (\n <div\n className={twMerge(\n \"flex flex-1 flex-col gap-1 overflow-y-auto\",\n hasPinnedItems && \"pt-0.5\",\n )}\n >\n {isLoading ? (\n <SidebarSkeleton />\n ) : flattenedNodes.length === 0 ? (\n <div className=\"flex max-w-full items-center gap-2 p-2 text-sm/5 text-muted-foreground\">\n <Icon name=\"TreeViewSlash\" size={16} className=\"min-w-4\" />\n <span className=\"truncate\">This node is empty</span>\n </div>\n ) : (\n <div className=\"flex-1 overflow-hidden\">\n <AutoSizer>\n {({ width, height }) => (\n <List\n ref={virtualListRef}\n className=\"p-2\"\n width={width}\n height={height}\n rowCount={flattenedNodes.length}\n rowHeight={32 + 8}\n rowRenderer={renderNode}\n />\n )}\n </AutoSizer>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;AAYA,MAAaO,sBAAsB,EACjCC,cACAC,gBAC6B;CAC7B,MAAM,EACJC,gBACAC,YACAC,WACAC,YACAC,eACAC,mBACAC,gBACAC,cACAC,gBACAC,uBACEf,
|
|
1
|
+
{"version":3,"file":"sidebar-content-area.js","names":["AutoSizer","List","twMerge","SidebarItem","useSidebar","SidebarSkeleton","Icon","SidebarContentArea","allowPinning","isLoading","flattenedNodes","toggleNode","togglePin","searchTerm","searchResults","activeSearchIndex","pinnedNodePath","activeNodeId","virtualListRef","onActiveNodeChange","hasPinnedItems","length","renderNode","index","key","style","node","id","width","height"],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-content-area.tsx"],"sourcesContent":["import { AutoSizer, List } from \"react-virtualized\";\nimport { twMerge } from \"tailwind-merge\";\nimport { SidebarItem } from \"./sidebar-item.js\";\nimport { useSidebar } from \"./sidebar-provider/index.js\";\nimport { SidebarSkeleton } from \"./sidebar-skeleton.js\";\nimport { Icon } from \"../../../../powerhouse/index.js\";\n\ninterface SidebarContentAreaProps {\n allowPinning?: boolean;\n isLoading?: boolean;\n}\n\nexport const SidebarContentArea = ({\n allowPinning,\n isLoading,\n}: SidebarContentAreaProps) => {\n const {\n flattenedNodes,\n toggleNode,\n togglePin,\n searchTerm,\n searchResults,\n activeSearchIndex,\n pinnedNodePath,\n activeNodeId,\n virtualListRef,\n onActiveNodeChange,\n } = useSidebar();\n const hasPinnedItems = allowPinning && pinnedNodePath.length > 0;\n\n const renderNode = ({\n index,\n key,\n style,\n }: {\n index: number;\n key: string;\n style: React.CSSProperties;\n }) => {\n const node = flattenedNodes[index];\n\n return (\n <SidebarItem\n key={key}\n node={node}\n toggleNode={toggleNode}\n togglePin={togglePin}\n searchTerm={searchTerm}\n searchResults={searchResults}\n activeSearchIndex={activeSearchIndex}\n allowPinning={allowPinning ?? false}\n isActive={activeNodeId === node.id}\n onChange={onActiveNodeChange}\n style={style}\n />\n );\n };\n\n return (\n <div\n className={twMerge(\n \"flex flex-1 flex-col gap-1 overflow-y-auto\",\n hasPinnedItems && \"pt-0.5\",\n )}\n >\n {isLoading ? (\n <SidebarSkeleton />\n ) : flattenedNodes.length === 0 ? (\n <div className=\"flex max-w-full items-center gap-2 p-2 text-sm/5 text-muted-foreground\">\n <Icon name=\"TreeViewSlash\" size={16} className=\"min-w-4\" />\n <span className=\"truncate\">This node is empty</span>\n </div>\n ) : (\n <div className=\"flex-1 overflow-hidden\">\n <AutoSizer>\n {({ width, height }) => (\n <List\n ref={virtualListRef}\n className=\"p-2\"\n width={width}\n height={height}\n rowCount={flattenedNodes.length}\n rowHeight={32 + 8}\n rowRenderer={renderNode}\n />\n )}\n </AutoSizer>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;AAYA,MAAaO,sBAAsB,EACjCC,cACAC,gBAC6B;CAC7B,MAAM,EACJC,gBACAC,YACAC,WACAC,YACAC,eACAC,mBACAC,gBACAC,cACAC,gBACAC,uBACEf,WAAW;CACf,MAAMgB,iBAAiBZ,gBAAgBQ,eAAeK,SAAS;CAE/D,MAAMC,cAAc,EAClBC,OACAC,KACAC,YAKI;EACJ,MAAMC,OAAOhB,eAAea;EAE5B,OACE,oBAAC,aAAD;GAEQG;GACMf;GACDC;GACCC;GACGC;GACIC;GACnB,cAAcP,gBAAgB;GAC9B,UAAUS,iBAAiBS,KAAKC;GAChC,UAAUR;GACHM;EAAM,GAVRD,GAUQ;CAGnB;CAEA,OACE,oBAAC,OAAD;EACE,WAAWtB,QACT,8CACAkB,kBAAkB,QACpB;EAECX,UAAAA,YACC,oBAAC,iBAAD,CAAgB,CAAA,IACdC,eAAeW,WAAW,IAC5B,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,oBAAC,MAAD;IAAM,MAAK;IAAgB,MAAM;IAAI,WAAU;GAAS,CAAA,GACxD,oBAAC,QAAD;IAAM,WAAU;IAAW,UAAA;GAAwB,CAAA,CAChD;EAEL,CAAA,IAAA,oBAAC,OAAD;GAAK,WAAU;GACb,UAAA,oBAAC,WAAD,EAAA,WACI,EAAEO,OAAOC,aACT,oBAAC,MAAD;IACE,KAAKX;IACL,WAAU;IACHU;IACCC;IACR,UAAUnB,eAAeW;IACzB,WAAW;IACX,aAAaC;GAAW,CAAA,EAGnB,CAAA;EACR,CAAA;CAEJ,CAAA;AAET"}
|
|
@@ -5,7 +5,7 @@ interface SidebarHeaderProps {
|
|
|
5
5
|
enableMacros?: number;
|
|
6
6
|
handleOnTitleClick?: () => void;
|
|
7
7
|
}
|
|
8
|
-
declare const SidebarHeader: React.FC<SidebarHeaderProps>;
|
|
8
|
+
export declare const SidebarHeader: React.FC<SidebarHeaderProps>;
|
|
9
9
|
//#endregion
|
|
10
|
-
export {
|
|
10
|
+
export {};
|
|
11
11
|
//# sourceMappingURL=sidebar-header.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar-header.d.ts","names":[],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-header.tsx"],"mappings":";UAGU
|
|
1
|
+
{"version":3,"file":"sidebar-header.d.ts","names":[],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-header.tsx"],"mappings":";UAGU;EACR;EACA,cAAc,MAAM;EACpB;EACA;;qBAGW,eAAe,MAAM,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar-header.js","names":["twMerge","useSidebar","SidebarHeader","sidebarTitle","sidebarIcon","enableMacros","handleOnTitleClick","maxDepth","openLevel","titleElement","baseTitleClasses","Array","from","length","Math","min","map","_","index","isDisabled"],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-header.tsx"],"sourcesContent":["import { twMerge } from \"tailwind-merge\";\nimport { useSidebar } from \"./sidebar-provider/index.js\";\n\ninterface SidebarHeaderProps {\n sidebarTitle?: string;\n sidebarIcon?: React.ReactNode;\n enableMacros?: number;\n handleOnTitleClick?: () => void;\n}\n\nexport const SidebarHeader: React.FC<SidebarHeaderProps> = ({\n sidebarTitle,\n sidebarIcon,\n enableMacros = 0,\n handleOnTitleClick,\n}) => {\n const { maxDepth, openLevel } = useSidebar();\n if (!sidebarTitle && !sidebarIcon && !enableMacros) {\n return null;\n }\n let titleElement;\n const baseTitleClasses = \"truncate text-sm font-semibold text-foreground\";\n if (handleOnTitleClick) {\n titleElement = (\n <button\n type=\"button\"\n className={twMerge(baseTitleClasses, \"cursor-pointer\")}\n onClick={handleOnTitleClick}\n >\n {sidebarTitle}\n </button>\n );\n } else {\n titleElement = <div className={baseTitleClasses}>{sidebarTitle}</div>;\n }\n\n return (\n <header className=\"flex items-center justify-between gap-2 border-b border-sidebar-border bg-sidebar p-4\">\n <div className=\"flex items-center gap-2 truncate\">\n {sidebarIcon}\n {titleElement}\n </div>\n\n {enableMacros > 0 && (\n <div className=\"flex items-center gap-2 select-none\">\n {Array.from({ length: Math.min(enableMacros, 4) }).map((_, index) => {\n const isDisabled = index + 1 > maxDepth;\n\n return (\n <div\n key={`macro-${index}`}\n role=\"button\"\n tabIndex={0}\n className={twMerge(\n \"w-[26px] rounded-lg bg-sidebar p-1 text-center text-xs text-sidebar-foreground\",\n !isDisabled && \"hover:hover-effect\",\n isDisabled &&\n \"cursor-not-allowed bg-muted text-muted-foreground\",\n )}\n onClick={() => {\n if (!isDisabled) {\n openLevel(index + 1);\n }\n }}\n >\n {index + 1}\n </div>\n );\n })}\n </div>\n )}\n </header>\n );\n};\n"],"mappings":";;;;AAUA,MAAaE,iBAA+C,EAC1DC,cACAC,aACAC,eAAe,GACfC,yBACI;CACJ,MAAM,EAAEC,UAAUC,cAAcP,
|
|
1
|
+
{"version":3,"file":"sidebar-header.js","names":["twMerge","useSidebar","SidebarHeader","sidebarTitle","sidebarIcon","enableMacros","handleOnTitleClick","maxDepth","openLevel","titleElement","baseTitleClasses","Array","from","length","Math","min","map","_","index","isDisabled"],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-header.tsx"],"sourcesContent":["import { twMerge } from \"tailwind-merge\";\nimport { useSidebar } from \"./sidebar-provider/index.js\";\n\ninterface SidebarHeaderProps {\n sidebarTitle?: string;\n sidebarIcon?: React.ReactNode;\n enableMacros?: number;\n handleOnTitleClick?: () => void;\n}\n\nexport const SidebarHeader: React.FC<SidebarHeaderProps> = ({\n sidebarTitle,\n sidebarIcon,\n enableMacros = 0,\n handleOnTitleClick,\n}) => {\n const { maxDepth, openLevel } = useSidebar();\n if (!sidebarTitle && !sidebarIcon && !enableMacros) {\n return null;\n }\n let titleElement;\n const baseTitleClasses = \"truncate text-sm font-semibold text-foreground\";\n if (handleOnTitleClick) {\n titleElement = (\n <button\n type=\"button\"\n className={twMerge(baseTitleClasses, \"cursor-pointer\")}\n onClick={handleOnTitleClick}\n >\n {sidebarTitle}\n </button>\n );\n } else {\n titleElement = <div className={baseTitleClasses}>{sidebarTitle}</div>;\n }\n\n return (\n <header className=\"flex items-center justify-between gap-2 border-b border-sidebar-border bg-sidebar p-4\">\n <div className=\"flex items-center gap-2 truncate\">\n {sidebarIcon}\n {titleElement}\n </div>\n\n {enableMacros > 0 && (\n <div className=\"flex items-center gap-2 select-none\">\n {Array.from({ length: Math.min(enableMacros, 4) }).map((_, index) => {\n const isDisabled = index + 1 > maxDepth;\n\n return (\n <div\n key={`macro-${index}`}\n role=\"button\"\n tabIndex={0}\n className={twMerge(\n \"w-[26px] rounded-lg bg-sidebar p-1 text-center text-xs text-sidebar-foreground\",\n !isDisabled && \"hover:hover-effect\",\n isDisabled &&\n \"cursor-not-allowed bg-muted text-muted-foreground\",\n )}\n onClick={() => {\n if (!isDisabled) {\n openLevel(index + 1);\n }\n }}\n >\n {index + 1}\n </div>\n );\n })}\n </div>\n )}\n </header>\n );\n};\n"],"mappings":";;;;AAUA,MAAaE,iBAA+C,EAC1DC,cACAC,aACAC,eAAe,GACfC,yBACI;CACJ,MAAM,EAAEC,UAAUC,cAAcP,WAAW;CAC3C,IAAI,CAACE,gBAAgB,CAACC,eAAe,CAACC,cACpC,OAAO;CAET,IAAII;CACJ,MAAMC,mBAAmB;CACzB,IAAIJ,oBACFG,eACE,oBAAC,UAAD;EACE,MAAK;EACL,WAAWT,QAAQU,kBAAkB,gBAAgB;EACrD,SAASJ;EAERH,UAAAA;CACK,CAAA;MAGVM,eAAe,oBAAC,OAAD;EAAK,WAAWC;EAAmBP,UAAAA;CAAkB,CAAA;CAGtE,OACE,qBAAC,UAAD;EAAQ,WAAU;EAAlB,UAAA,CACE,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACGC,aACAK,YACE;EAEJJ,CAAAA,GAAAA,eAAe,KACd,oBAAC,OAAD;GAAK,WAAU;GACZM,UAAAA,MAAMC,KAAK,EAAEC,QAAQC,KAAKC,IAAIV,cAAc,CAAC,EAAE,CAAC,CAAC,CAACW,KAAKC,GAAGC,UAAU;IACnE,MAAMC,aAAaD,QAAQ,IAAIX;IAE/B,OACE,oBAAC,OAAD;KAEE,MAAK;KACL,UAAU;KACV,WAAWP,QACT,kFACA,CAACmB,cAAc,sBACfA,cACE,mDACJ;KACA,eAAe;MACb,IAAI,CAACA,YACHX,UAAUU,QAAQ,CAAC;KAEvB;KAECA,UAAAA,QAAQ;IACN,GAhBE,SAASA,OAgBX;GAET,CAAC;EACE,CAAA,CAED;;AAEZ"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { s as SidebarNode, t as FlattenedNode } from "../../../../types-
|
|
2
|
-
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
|
-
|
|
1
|
+
import { s as SidebarNode, t as FlattenedNode } from "../../../../types-FTqFl5du.js";
|
|
4
2
|
//#region src/ui/components/sidebar/subcomponents/sidebar-item.d.ts
|
|
5
3
|
interface SidebarItemProps {
|
|
6
4
|
node: FlattenedNode;
|
|
@@ -16,20 +14,7 @@ interface SidebarItemProps {
|
|
|
16
14
|
style?: React.CSSProperties;
|
|
17
15
|
onChange?: (node: SidebarNode) => void;
|
|
18
16
|
}
|
|
19
|
-
declare const SidebarItem: ({
|
|
20
|
-
node,
|
|
21
|
-
toggleNode,
|
|
22
|
-
togglePin,
|
|
23
|
-
searchTerm,
|
|
24
|
-
searchResults,
|
|
25
|
-
activeSearchIndex,
|
|
26
|
-
allowPinning,
|
|
27
|
-
pinnedMode,
|
|
28
|
-
isPinned,
|
|
29
|
-
isActive,
|
|
30
|
-
style,
|
|
31
|
-
onChange
|
|
32
|
-
}: SidebarItemProps) => react_jsx_runtime0.JSX.Element;
|
|
17
|
+
export declare const SidebarItem: ({ node, toggleNode, togglePin, searchTerm, searchResults, activeSearchIndex, allowPinning, pinnedMode, isPinned, isActive, style, onChange }: SidebarItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
33
18
|
//#endregion
|
|
34
|
-
export {
|
|
19
|
+
export {};
|
|
35
20
|
//# sourceMappingURL=sidebar-item.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar-item.d.ts","names":[],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-item.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"sidebar-item.d.ts","names":[],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-item.tsx"],"mappings":";;UAWU;EACR,MAAM;EACN,cAAc;EACd,YAAY;EACZ;EACA,eAAe;EACf;EACA;EACA;EACA;EACA;EACA,QAAQ,MAAM;EACd,YAAY,MAAM;;qBAMP,gBAAW,MAAA,YAAA,WAAA,YAAA,eAAA,mBAAA,cAAA,YAAA,UAAA,UAAA,OAAA,YAarB,iDAAgB,IAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { S as CaretDown, t as Icon } from "../../../../icon-DQ2yrWYv.js";
|
|
2
2
|
import { Tooltip, TooltipProvider as Provider } from "../../tooltip/tooltip.js";
|
|
3
|
+
import { n as Pin, t as PinFilled } from "../../../../PinFilled-cSbUqZCA.js";
|
|
3
4
|
import { NodeStatus } from "../types.js";
|
|
4
5
|
import { useEllipsis } from "../use-ellipsis.js";
|
|
5
6
|
import { StatusIcon } from "./status-icon.js";
|
|
@@ -64,7 +65,7 @@ const SidebarItem = ({ node, toggleNode, togglePin, searchTerm, searchResults, a
|
|
|
64
65
|
name: IconComponent,
|
|
65
66
|
size: 16,
|
|
66
67
|
className: "min-w-4"
|
|
67
|
-
}) :
|
|
68
|
+
}) : /*#__PURE__*/ cloneElement(IconComponent, { className: "min-w-4 w-4" }) : pinnedMode ? /* @__PURE__ */ jsx(PinnedModeCircleIcon, { isPinned }) : null,
|
|
68
69
|
/* @__PURE__ */ jsx(RenderTitle, {
|
|
69
70
|
ref: ellipsisRef,
|
|
70
71
|
title: node.title,
|
|
@@ -104,7 +105,7 @@ const SidebarItem = ({ node, toggleNode, togglePin, searchTerm, searchResults, a
|
|
|
104
105
|
})
|
|
105
106
|
}) });
|
|
106
107
|
};
|
|
107
|
-
const RenderTitle =
|
|
108
|
+
const RenderTitle = /*#__PURE__*/ forwardRef(({ title, searchTerm, isSearchActive, pinnedMode, className }, ref) => {
|
|
108
109
|
return /* @__PURE__ */ jsx("div", {
|
|
109
110
|
ref,
|
|
110
111
|
className: twMerge("truncate text-sm/5", className),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar-item.js","names":["cloneElement","forwardRef","useMemo","useRef","twMerge","CaretDown","Pin","PinFilled","Icon","Tooltip","TooltipProvider","NodeStatus","useEllipsis","StatusIcon","TOOLTIP_DELAY","TOOLTIP_DELAY_LONG","SidebarItem","node","toggleNode","togglePin","searchTerm","searchResults","activeSearchIndex","allowPinning","pinnedMode","isPinned","isActive","style","onChange","paddingLeft","depth","isSearchActive","length","id","IconComponent","isExpanded","expandedIcon","icon","isDescendenceModified","check","n","status","UNCHANGED","children","some","child","hasStatus","computedStyle","ellipsisRef","hasEllipsis","title","className","e","stopPropagation","undefined","RenderTitle","ref","toLowerCase","includes","highlightClass","parts","remaining","lowerTerm","i","idx","indexOf","push","slice","displayName","PinnedModeCircleIcon"],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-item.tsx"],"sourcesContent":["import { cloneElement, forwardRef, useMemo, useRef } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport CaretDown from \"../../../../powerhouse/components/icon-components/CaretDown.js\";\nimport Pin from \"../../../../powerhouse/components/icon-components/Pin.js\";\nimport PinFilled from \"../../../../powerhouse/components/icon-components/PinFilled.js\";\nimport { Icon } from \"../../../../powerhouse/index.js\";\nimport { Tooltip, TooltipProvider } from \"../../tooltip/tooltip.js\";\nimport { type FlattenedNode, NodeStatus, type SidebarNode } from \"../types.js\";\nimport { useEllipsis } from \"../use-ellipsis.js\";\nimport { StatusIcon } from \"./status-icon.js\";\n\ninterface SidebarItemProps {\n node: FlattenedNode;\n toggleNode?: (nodeId: string) => void;\n togglePin: (nodeId: string) => void;\n searchTerm: string;\n searchResults: SidebarNode[];\n activeSearchIndex: number;\n allowPinning: boolean;\n pinnedMode?: boolean;\n isPinned?: boolean;\n isActive?: boolean;\n style?: React.CSSProperties;\n onChange?: (node: SidebarNode) => void;\n}\n\nconst TOOLTIP_DELAY = 700;\nconst TOOLTIP_DELAY_LONG = 172800000; // 2 days to simulate no tooltip\n\nexport const SidebarItem = ({\n node,\n toggleNode,\n togglePin,\n searchTerm,\n searchResults,\n activeSearchIndex,\n allowPinning,\n pinnedMode = false,\n isPinned = false,\n isActive = false,\n style,\n onChange,\n}: SidebarItemProps) => {\n const paddingLeft = node.depth * 24;\n const isSearchActive =\n searchResults.length > 0 && searchResults[activeSearchIndex].id === node.id;\n const IconComponent = node.isExpanded\n ? (node.expandedIcon ?? node.icon)\n : node.icon;\n const isDescendenceModified = useMemo(() => {\n const check = (n: SidebarNode): boolean => {\n // Check current node's status first\n if (n.status !== NodeStatus.UNCHANGED && n.status) {\n return true;\n }\n\n // Then recursively check all children\n if (n.children && n.children.length > 0) {\n return n.children.some((child) => check(child));\n }\n\n return false;\n };\n\n return check(node);\n }, [node]);\n const hasStatus =\n (node.status && node.status !== NodeStatus.UNCHANGED) ||\n isDescendenceModified;\n\n const computedStyle = { ...style, paddingLeft };\n\n // Check if the title has ellipsis to determine if the tooltip should be delayed\n const ellipsisRef = useRef<HTMLDivElement | null>(null);\n const hasEllipsis = useEllipsis(ellipsisRef);\n\n return (\n <TooltipProvider>\n <Tooltip\n content={node.title}\n triggerAsChild\n side=\"bottom\"\n delayDuration={hasEllipsis ? TOOLTIP_DELAY : TOOLTIP_DELAY_LONG}\n >\n <div\n style={computedStyle}\n className={twMerge(\n \"group/sidebar-item-wrapper flex w-full items-center\",\n !pinnedMode && \"pb-2\",\n )}\n >\n <div\n tabIndex={0}\n data-testid=\"sidebar-item\"\n id={`sidebar-item-${node.id}`}\n className={twMerge(\n \"group/sidebar-item relative flex w-full cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-foreground select-none hover:hover-effect\",\n hasStatus && \"pr-6\",\n allowPinning && (hasStatus ? \"hover:pr-12\" : \"hover:pr-6\"),\n isPinned && (hasStatus ? \"pr-12\" : \"pr-6\"),\n isSearchActive && \"bg-warning/10\",\n // line between pinned items\n pinnedMode &&\n \"after:absolute after:-top-2.5 after:left-[15px] after:h-4 after:w-px after:bg-secondary first:group-first/sidebar-item-wrapper:after:hidden hover:hover-effect\",\n isActive &&\n \"bg-sidebar-accent font-medium text-sidebar-accent-foreground hover:hover-effect\",\n node.className,\n )}\n onClick={() => {\n toggleNode?.(node.id);\n onChange?.(node);\n }}\n >\n <div className=\"flex max-w-full items-center gap-2\">\n {!pinnedMode && (\n <div\n className=\"-m-2 -mr-1 h-full rounded-md py-2 pr-1 pl-2 hover:hover-effect\"\n onClick={(e) => {\n e.stopPropagation();\n toggleNode?.(node.id);\n }}\n >\n <CaretDown\n width=\"16\"\n height=\"16\"\n className={twMerge(\n \"min-w-4\",\n node.isExpanded &&\n node.children &&\n node.children.length > 0\n ? \"\"\n : \"-rotate-90\",\n node.children === undefined || node.children.length === 0\n ? \"text-muted-foreground\"\n : \"text-foreground\",\n )}\n />\n </div>\n )}\n\n {IconComponent ? (\n typeof IconComponent === \"string\" ? (\n <Icon name={IconComponent} size={16} className=\"min-w-4\" />\n ) : (\n // @ts-expect-error -- this is a workaround\n cloneElement(IconComponent, { className: \"min-w-4 w-4\" })\n )\n ) : pinnedMode ? (\n <PinnedModeCircleIcon isPinned={isPinned} />\n ) : null}\n\n <RenderTitle\n ref={ellipsisRef}\n title={node.title}\n searchTerm={searchTerm}\n isSearchActive={isSearchActive}\n pinnedMode={pinnedMode}\n className=\"\"\n />\n\n {allowPinning && (\n <div\n className={twMerge(\n \"absolute top-1/2 flex -translate-y-1/2 items-center justify-center\",\n hasStatus ? \"right-8\" : \"right-2\",\n isPinned\n ? \"text-foreground hover:hover-effect\"\n : \"invisible text-muted-foreground group-hover/sidebar-item:visible hover:hover-effect\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n togglePin(node.id);\n }}\n >\n {isPinned ? (\n <PinFilled width=\"16\" height=\"16\" />\n ) : (\n <Pin width=\"16\" height=\"16\" />\n )}\n </div>\n )}\n {hasStatus && (\n <div\n className={twMerge(\n \"absolute top-1/2 right-2 flex -translate-y-1/2 items-center justify-center\",\n \"text-foreground group-hover/sidebar-item:visible hover:hover-effect\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n togglePin(node.id);\n }}\n >\n <StatusIcon\n status={node.status ?? NodeStatus.UNCHANGED}\n isDescendenceModified={isDescendenceModified}\n />\n </div>\n )}\n </div>\n </div>\n </div>\n </Tooltip>\n </TooltipProvider>\n );\n};\n\nconst RenderTitle = forwardRef<\n HTMLDivElement,\n {\n title: string;\n searchTerm: string;\n isSearchActive: boolean;\n pinnedMode: boolean;\n className?: string;\n }\n>(({ title, searchTerm, isSearchActive, pinnedMode, className }, ref) => {\n return (\n <div ref={ref} className={twMerge(\"truncate text-sm/5\", className)}>\n {searchTerm &&\n title.toLowerCase().includes(searchTerm.toLowerCase()) &&\n !pinnedMode\n ? (() => {\n const highlightClass = isSearchActive\n ? \"bg-warning/10\"\n : \"bg-secondary\";\n const parts: React.ReactNode[] = [];\n let remaining = title;\n const lowerTerm = searchTerm.toLowerCase();\n let i = 0;\n while (remaining.length > 0) {\n const idx = remaining.toLowerCase().indexOf(lowerTerm);\n if (idx === -1) {\n parts.push(remaining);\n break;\n }\n if (idx > 0) parts.push(remaining.slice(0, idx));\n parts.push(\n <span key={i++} className={highlightClass}>\n {remaining.slice(idx, idx + searchTerm.length)}\n </span>,\n );\n remaining = remaining.slice(idx + searchTerm.length);\n }\n return <>{parts}</>;\n })()\n : title}\n </div>\n );\n});\n\nRenderTitle.displayName = \"RenderTitle\";\n\nconst PinnedModeCircleIcon = ({ isPinned }: { isPinned: boolean }) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"min-w-4\"\n >\n <rect width=\"16\" height=\"16\" rx=\"6.4\" fill=\"transparent\" />\n <path\n d=\"M12 8C12 10.2091 10.2091 12 8 12C5.79086 12 4 10.2091 4 8C4 5.79086 5.79086 4 8 4C10.2091 4 12 5.79086 12 8Z\"\n fill=\"currentColor\"\n className={isPinned ? \"text-muted-foreground\" : \"text-foreground\"}\n />\n </svg>\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sidebar-item.js","names":["cloneElement","forwardRef","useMemo","useRef","twMerge","CaretDown","Pin","PinFilled","Icon","Tooltip","TooltipProvider","NodeStatus","useEllipsis","StatusIcon","TOOLTIP_DELAY","TOOLTIP_DELAY_LONG","SidebarItem","node","toggleNode","togglePin","searchTerm","searchResults","activeSearchIndex","allowPinning","pinnedMode","isPinned","isActive","style","onChange","paddingLeft","depth","isSearchActive","length","id","IconComponent","isExpanded","expandedIcon","icon","isDescendenceModified","check","n","status","UNCHANGED","children","some","child","hasStatus","computedStyle","ellipsisRef","hasEllipsis","title","className","e","stopPropagation","undefined","RenderTitle","ref","toLowerCase","includes","highlightClass","parts","remaining","lowerTerm","i","idx","indexOf","push","slice","displayName","PinnedModeCircleIcon"],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-item.tsx"],"sourcesContent":["import { cloneElement, forwardRef, useMemo, useRef } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport CaretDown from \"../../../../powerhouse/components/icon-components/CaretDown.js\";\nimport Pin from \"../../../../powerhouse/components/icon-components/Pin.js\";\nimport PinFilled from \"../../../../powerhouse/components/icon-components/PinFilled.js\";\nimport { Icon } from \"../../../../powerhouse/index.js\";\nimport { Tooltip, TooltipProvider } from \"../../tooltip/tooltip.js\";\nimport { type FlattenedNode, NodeStatus, type SidebarNode } from \"../types.js\";\nimport { useEllipsis } from \"../use-ellipsis.js\";\nimport { StatusIcon } from \"./status-icon.js\";\n\ninterface SidebarItemProps {\n node: FlattenedNode;\n toggleNode?: (nodeId: string) => void;\n togglePin: (nodeId: string) => void;\n searchTerm: string;\n searchResults: SidebarNode[];\n activeSearchIndex: number;\n allowPinning: boolean;\n pinnedMode?: boolean;\n isPinned?: boolean;\n isActive?: boolean;\n style?: React.CSSProperties;\n onChange?: (node: SidebarNode) => void;\n}\n\nconst TOOLTIP_DELAY = 700;\nconst TOOLTIP_DELAY_LONG = 172800000; // 2 days to simulate no tooltip\n\nexport const SidebarItem = ({\n node,\n toggleNode,\n togglePin,\n searchTerm,\n searchResults,\n activeSearchIndex,\n allowPinning,\n pinnedMode = false,\n isPinned = false,\n isActive = false,\n style,\n onChange,\n}: SidebarItemProps) => {\n const paddingLeft = node.depth * 24;\n const isSearchActive =\n searchResults.length > 0 && searchResults[activeSearchIndex].id === node.id;\n const IconComponent = node.isExpanded\n ? (node.expandedIcon ?? node.icon)\n : node.icon;\n const isDescendenceModified = useMemo(() => {\n const check = (n: SidebarNode): boolean => {\n // Check current node's status first\n if (n.status !== NodeStatus.UNCHANGED && n.status) {\n return true;\n }\n\n // Then recursively check all children\n if (n.children && n.children.length > 0) {\n return n.children.some((child) => check(child));\n }\n\n return false;\n };\n\n return check(node);\n }, [node]);\n const hasStatus =\n (node.status && node.status !== NodeStatus.UNCHANGED) ||\n isDescendenceModified;\n\n const computedStyle = { ...style, paddingLeft };\n\n // Check if the title has ellipsis to determine if the tooltip should be delayed\n const ellipsisRef = useRef<HTMLDivElement | null>(null);\n const hasEllipsis = useEllipsis(ellipsisRef);\n\n return (\n <TooltipProvider>\n <Tooltip\n content={node.title}\n triggerAsChild\n side=\"bottom\"\n delayDuration={hasEllipsis ? TOOLTIP_DELAY : TOOLTIP_DELAY_LONG}\n >\n <div\n style={computedStyle}\n className={twMerge(\n \"group/sidebar-item-wrapper flex w-full items-center\",\n !pinnedMode && \"pb-2\",\n )}\n >\n <div\n tabIndex={0}\n data-testid=\"sidebar-item\"\n id={`sidebar-item-${node.id}`}\n className={twMerge(\n \"group/sidebar-item relative flex w-full cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-foreground select-none hover:hover-effect\",\n hasStatus && \"pr-6\",\n allowPinning && (hasStatus ? \"hover:pr-12\" : \"hover:pr-6\"),\n isPinned && (hasStatus ? \"pr-12\" : \"pr-6\"),\n isSearchActive && \"bg-warning/10\",\n // line between pinned items\n pinnedMode &&\n \"after:absolute after:-top-2.5 after:left-[15px] after:h-4 after:w-px after:bg-secondary first:group-first/sidebar-item-wrapper:after:hidden hover:hover-effect\",\n isActive &&\n \"bg-sidebar-accent font-medium text-sidebar-accent-foreground hover:hover-effect\",\n node.className,\n )}\n onClick={() => {\n toggleNode?.(node.id);\n onChange?.(node);\n }}\n >\n <div className=\"flex max-w-full items-center gap-2\">\n {!pinnedMode && (\n <div\n className=\"-m-2 -mr-1 h-full rounded-md py-2 pr-1 pl-2 hover:hover-effect\"\n onClick={(e) => {\n e.stopPropagation();\n toggleNode?.(node.id);\n }}\n >\n <CaretDown\n width=\"16\"\n height=\"16\"\n className={twMerge(\n \"min-w-4\",\n node.isExpanded &&\n node.children &&\n node.children.length > 0\n ? \"\"\n : \"-rotate-90\",\n node.children === undefined || node.children.length === 0\n ? \"text-muted-foreground\"\n : \"text-foreground\",\n )}\n />\n </div>\n )}\n\n {IconComponent ? (\n typeof IconComponent === \"string\" ? (\n <Icon name={IconComponent} size={16} className=\"min-w-4\" />\n ) : (\n // @ts-expect-error -- this is a workaround\n cloneElement(IconComponent, { className: \"min-w-4 w-4\" })\n )\n ) : pinnedMode ? (\n <PinnedModeCircleIcon isPinned={isPinned} />\n ) : null}\n\n <RenderTitle\n ref={ellipsisRef}\n title={node.title}\n searchTerm={searchTerm}\n isSearchActive={isSearchActive}\n pinnedMode={pinnedMode}\n className=\"\"\n />\n\n {allowPinning && (\n <div\n className={twMerge(\n \"absolute top-1/2 flex -translate-y-1/2 items-center justify-center\",\n hasStatus ? \"right-8\" : \"right-2\",\n isPinned\n ? \"text-foreground hover:hover-effect\"\n : \"invisible text-muted-foreground group-hover/sidebar-item:visible hover:hover-effect\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n togglePin(node.id);\n }}\n >\n {isPinned ? (\n <PinFilled width=\"16\" height=\"16\" />\n ) : (\n <Pin width=\"16\" height=\"16\" />\n )}\n </div>\n )}\n {hasStatus && (\n <div\n className={twMerge(\n \"absolute top-1/2 right-2 flex -translate-y-1/2 items-center justify-center\",\n \"text-foreground group-hover/sidebar-item:visible hover:hover-effect\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n togglePin(node.id);\n }}\n >\n <StatusIcon\n status={node.status ?? NodeStatus.UNCHANGED}\n isDescendenceModified={isDescendenceModified}\n />\n </div>\n )}\n </div>\n </div>\n </div>\n </Tooltip>\n </TooltipProvider>\n );\n};\n\nconst RenderTitle = forwardRef<\n HTMLDivElement,\n {\n title: string;\n searchTerm: string;\n isSearchActive: boolean;\n pinnedMode: boolean;\n className?: string;\n }\n>(({ title, searchTerm, isSearchActive, pinnedMode, className }, ref) => {\n return (\n <div ref={ref} className={twMerge(\"truncate text-sm/5\", className)}>\n {searchTerm &&\n title.toLowerCase().includes(searchTerm.toLowerCase()) &&\n !pinnedMode\n ? (() => {\n const highlightClass = isSearchActive\n ? \"bg-warning/10\"\n : \"bg-secondary\";\n const parts: React.ReactNode[] = [];\n let remaining = title;\n const lowerTerm = searchTerm.toLowerCase();\n let i = 0;\n while (remaining.length > 0) {\n const idx = remaining.toLowerCase().indexOf(lowerTerm);\n if (idx === -1) {\n parts.push(remaining);\n break;\n }\n if (idx > 0) parts.push(remaining.slice(0, idx));\n parts.push(\n <span key={i++} className={highlightClass}>\n {remaining.slice(idx, idx + searchTerm.length)}\n </span>,\n );\n remaining = remaining.slice(idx + searchTerm.length);\n }\n return <>{parts}</>;\n })()\n : title}\n </div>\n );\n});\n\nRenderTitle.displayName = \"RenderTitle\";\n\nconst PinnedModeCircleIcon = ({ isPinned }: { isPinned: boolean }) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"min-w-4\"\n >\n <rect width=\"16\" height=\"16\" rx=\"6.4\" fill=\"transparent\" />\n <path\n d=\"M12 8C12 10.2091 10.2091 12 8 12C5.79086 12 4 10.2091 4 8C4 5.79086 5.79086 4 8 4C10.2091 4 12 5.79086 12 8Z\"\n fill=\"currentColor\"\n className={isPinned ? \"text-muted-foreground\" : \"text-foreground\"}\n />\n </svg>\n);\n"],"mappings":"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"}
|