@powerhousedao/design-system 6.1.0-dev.2 → 6.1.0-dev.20
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/Removed-CO_5C1ce.js +178 -0
- package/dist/Removed-CO_5C1ce.js.map +1 -0
- package/dist/Tabler-FjvVqX5a.js +65 -0
- package/dist/Tabler-FjvVqX5a.js.map +1 -0
- package/dist/{button-49Walvwn.d.ts → button-C8doazjv.d.ts} +1 -1
- package/dist/{button-49Walvwn.d.ts.map → button-C8doazjv.d.ts.map} +1 -1
- package/dist/{character-counter-BcuG4STA.d.ts → character-counter-BWoglM2P.d.ts} +1 -1
- package/dist/{character-counter-BcuG4STA.d.ts.map → character-counter-BWoglM2P.d.ts.map} +1 -1
- package/dist/{checkbox-dqrYEK5V.d.ts → checkbox-CGBtXQnI.d.ts} +3 -3
- package/dist/{checkbox-dqrYEK5V.d.ts.map → checkbox-CGBtXQnI.d.ts.map} +1 -1
- package/dist/{checkbox-base-8xXJvAbj.d.ts → checkbox-base-CZo-4eL0.d.ts} +1 -1
- package/dist/{checkbox-base-8xXJvAbj.d.ts.map → checkbox-base-CZo-4eL0.d.ts.map} +1 -1
- package/dist/{command-BBihfa1C.d.ts → command-xYnJkB5j.d.ts} +14 -14
- package/dist/{command-BBihfa1C.d.ts.map → command-xYnJkB5j.d.ts.map} +1 -1
- package/dist/connect/components/toast/toast.d.ts.map +1 -1
- package/dist/connect/components/toast/toast.js +6 -6
- package/dist/connect/components/toast/toast.js.map +1 -1
- package/dist/connect/index.d.ts +55 -91
- package/dist/connect/index.d.ts.map +1 -1
- package/dist/connect/index.js +1056 -857
- package/dist/connect/index.js.map +1 -1
- package/dist/{content-OpXUtrTe.d.ts → content-BHWIqmio.d.ts} +2 -2
- package/dist/{content-OpXUtrTe.d.ts.map → content-BHWIqmio.d.ts.map} +1 -1
- package/dist/{enum-field-CjTSTf1e.d.ts → enum-field-Cct-i2Uz.d.ts} +3 -3
- package/dist/{enum-field-CjTSTf1e.d.ts.map → enum-field-Cct-i2Uz.d.ts.map} +1 -1
- package/dist/{form-B9JNvrH6.d.ts → form-CKRKn0TQ.d.ts} +1 -1
- package/dist/{form-B9JNvrH6.d.ts.map → form-CKRKn0TQ.d.ts.map} +1 -1
- package/dist/{form-description-BpST5Ww-.d.ts → form-description-CYkcMEzm.d.ts} +1 -1
- package/dist/{form-description-BpST5Ww-.d.ts.map → form-description-CYkcMEzm.d.ts.map} +1 -1
- package/dist/{form-group-BauWlFkQ.d.ts → form-group-C8kL6pdZ.d.ts} +1 -1
- package/dist/form-group-C8kL6pdZ.d.ts.map +1 -0
- package/dist/{form-label-Cz_gcj-B.d.ts → form-label-b6nQi0XO.d.ts} +1 -1
- package/dist/form-label-b6nQi0XO.d.ts.map +1 -0
- package/dist/{form-message-BPqNM4gG.d.ts → form-message-Dq72nBXz.d.ts} +1 -1
- package/dist/{form-message-BPqNM4gG.d.ts.map → form-message-Dq72nBXz.d.ts.map} +1 -1
- package/dist/{form-server-error-message-CzMQQ8ru.d.ts → form-server-error-message-DXbaiTfF.d.ts} +1 -1
- package/dist/{form-server-error-message-CzMQQ8ru.d.ts.map → form-server-error-message-DXbaiTfF.d.ts.map} +1 -1
- package/dist/{src-BgCjYazJ.js → icon-C4QOpsdI.js} +14 -964
- package/dist/icon-C4QOpsdI.js.map +1 -0
- package/dist/{id-autocomplete-jkaREmPP.d.ts → id-autocomplete-C-hwriS5.d.ts} +2 -2
- package/dist/{id-autocomplete-jkaREmPP.d.ts.map → id-autocomplete-C-hwriS5.d.ts.map} +1 -1
- package/dist/{id-autocomplete-input-container-NIuWfCB_.d.ts → id-autocomplete-input-container-DFEyPh5p.d.ts} +2 -2
- package/dist/{id-autocomplete-input-container-NIuWfCB_.d.ts.map → id-autocomplete-input-container-DFEyPh5p.d.ts.map} +1 -1
- package/dist/{id-autocomplete-list-Bi2IXdXg.d.ts → id-autocomplete-list-EzLpF23C.d.ts} +2 -2
- package/dist/{id-autocomplete-list-Bi2IXdXg.d.ts.map → id-autocomplete-list-EzLpF23C.d.ts.map} +1 -1
- package/dist/{id-autocomplete-list-option-CA9HIqEh.d.ts → id-autocomplete-list-option-CB5B07Hi.d.ts} +2 -2
- package/dist/{id-autocomplete-list-option-CA9HIqEh.d.ts.map → id-autocomplete-list-option-CB5B07Hi.d.ts.map} +1 -1
- package/dist/{index-DtPJq-vz.d.ts → index--hDSfvJT.d.ts} +3 -16
- package/dist/index--hDSfvJT.d.ts.map +1 -0
- package/dist/index-E7Wvm5uX.d.ts +1 -0
- package/dist/index-J3R2mDFQ.d.ts +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -2
- package/dist/{input-D11GgWGm.d.ts → input-BpEQjaWV.d.ts} +1 -1
- package/dist/input-BpEQjaWV.d.ts.map +1 -0
- package/dist/{json-viewer-vWp8vOvz.d.ts → json-viewer-DaTgmzkS.d.ts} +1 -1
- package/dist/{json-viewer-vWp8vOvz.d.ts.map → json-viewer-DaTgmzkS.d.ts.map} +1 -1
- package/dist/{message-list-aysvo-xf.d.ts → message-list-C4mPpBBa.d.ts} +2 -2
- package/dist/{message-list-aysvo-xf.d.ts.map → message-list-C4mPpBBa.d.ts.map} +1 -1
- package/dist/{popover-glLRVxPS.d.ts → popover-XSBOuSih.d.ts} +1 -1
- package/dist/{popover-glLRVxPS.d.ts.map → popover-XSBOuSih.d.ts.map} +1 -1
- package/dist/{radio-DZ4xl9oz.d.ts → radio-eL0Oy86J.d.ts} +1 -1
- package/dist/{radio-DZ4xl9oz.d.ts.map → radio-eL0Oy86J.d.ts.map} +1 -1
- package/dist/{radio-group-DjJbcDzB.d.ts → radio-group-Bkli6nUz.d.ts} +1 -1
- package/dist/{radio-group-DjJbcDzB.d.ts.map → radio-group-Bkli6nUz.d.ts.map} +1 -1
- package/dist/{radio-group-field-DNapUn2b.d.ts → radio-group-field-BN654-SO.d.ts} +3 -3
- package/dist/{radio-group-field-DNapUn2b.d.ts.map → radio-group-field-BN654-SO.d.ts.map} +1 -1
- package/dist/{search-autocomplete-OeZbE-VN.d.ts → search-autocomplete-BJJkrZ1i.d.ts} +2 -2
- package/dist/{search-autocomplete-OeZbE-VN.d.ts.map → search-autocomplete-BJJkrZ1i.d.ts.map} +1 -1
- package/dist/{select-field-BClhLm83.d.ts → select-field-C97QIhUL.d.ts} +2 -2
- package/dist/{select-field-BClhLm83.d.ts.map → select-field-C97QIhUL.d.ts.map} +1 -1
- package/dist/{selected-content-q33DjCYy.d.ts → selected-content-CGsK5PR4.d.ts} +2 -2
- package/dist/selected-content-CGsK5PR4.d.ts.map +1 -0
- package/dist/sidebar-DOoE4krt.d.ts +102 -0
- package/dist/sidebar-DOoE4krt.d.ts.map +1 -0
- package/dist/sidebar-provider-C2eyz9TL.d.ts +46 -0
- package/dist/sidebar-provider-C2eyz9TL.d.ts.map +1 -0
- package/dist/{splitted-input-diff-Ch6IKdEa.d.ts → splitted-input-diff-CwPedpov.d.ts} +2 -2
- package/dist/splitted-input-diff-CwPedpov.d.ts.map +1 -0
- package/dist/src-BrrPQVce.js +710 -0
- package/dist/src-BrrPQVce.js.map +1 -0
- package/dist/style.css +84 -4173
- package/dist/{text-field-Cx-EfZP6.d.ts → text-field-DSInH67J.d.ts} +3 -3
- package/dist/{text-field-Cx-EfZP6.d.ts.map → text-field-DSInH67J.d.ts.map} +1 -1
- package/dist/{text-input-DUddj4-C.d.ts → text-input-8zXIWHLi.d.ts} +3 -3
- package/dist/{text-input-DUddj4-C.d.ts.map → text-input-8zXIWHLi.d.ts.map} +1 -1
- package/dist/{text-input-diff-4i2zuulO.d.ts → text-input-diff-B0vLSKQm.d.ts} +2 -2
- package/dist/{text-input-diff-4i2zuulO.d.ts.map → text-input-diff-B0vLSKQm.d.ts.map} +1 -1
- package/dist/{tooltip-Cf5jSzdt.d.ts → tooltip-BxS9HpML.d.ts} +1 -1
- package/dist/{tooltip-Cf5jSzdt.d.ts.map → tooltip-BxS9HpML.d.ts.map} +1 -1
- package/dist/{types-tThrTH_c.d.ts → types-BTq-St7H.d.ts} +1 -1
- package/dist/{types-tThrTH_c.d.ts.map → types-BTq-St7H.d.ts.map} +1 -1
- package/dist/{types-BfmDXMrz.d.ts → types-Bsn62tJB.d.ts} +1 -1
- package/dist/{types-BfmDXMrz.d.ts.map → types-Bsn62tJB.d.ts.map} +1 -1
- package/dist/{types-9JRQnd7a.d.ts → types-C04Q_Fan.d.ts} +1 -1
- package/dist/{types-9JRQnd7a.d.ts.map → types-C04Q_Fan.d.ts.map} +1 -1
- package/dist/types-CNbvfWjh.d.ts +31 -0
- package/dist/types-CNbvfWjh.d.ts.map +1 -0
- package/dist/ui/components/button/button.d.ts +1 -1
- package/dist/ui/components/button/button.js +3 -3
- package/dist/ui/components/button/button.js.map +1 -1
- package/dist/ui/components/character-counter/character-counter.d.ts +1 -1
- package/dist/ui/components/character-counter/character-counter.js +6 -6
- package/dist/ui/components/character-counter/character-counter.js.map +1 -1
- package/dist/ui/components/checkbox/checkbox-base.d.ts +1 -1
- package/dist/ui/components/checkbox/checkbox-base.js +3 -3
- package/dist/ui/components/checkbox/checkbox-base.js.map +1 -1
- package/dist/ui/components/checkbox/checkbox.d.ts +1 -1
- package/dist/ui/components/checkbox/checkbox.js +4 -4
- package/dist/ui/components/checkbox/checkbox.js.map +1 -1
- package/dist/ui/components/command/command.d.ts +1 -1
- package/dist/ui/components/command/command.js +9 -8
- package/dist/ui/components/command/command.js.map +1 -1
- package/dist/ui/components/enum-field/enum-field.d.ts +1 -1
- package/dist/ui/components/enum-field/types.d.ts +1 -1
- package/dist/ui/components/form/form.d.ts +1 -1
- package/dist/ui/components/form/form.js +1 -1
- package/dist/ui/components/form/form.js.map +1 -1
- package/dist/ui/components/form-description/form-description.d.ts +1 -1
- package/dist/ui/components/form-description/form-description.js +2 -2
- package/dist/ui/components/form-description/form-description.js.map +1 -1
- package/dist/ui/components/form-group/form-group.d.ts +1 -1
- package/dist/ui/components/form-label/form-label.d.ts +1 -1
- package/dist/ui/components/form-label/form-label.js +5 -4
- package/dist/ui/components/form-label/form-label.js.map +1 -1
- package/dist/ui/components/form-message/form-message.d.ts +1 -1
- package/dist/ui/components/form-message/form-message.js +5 -5
- package/dist/ui/components/form-message/form-message.js.map +1 -1
- package/dist/ui/components/form-message/form-server-error-message.d.ts +1 -1
- package/dist/ui/components/form-message/message-list.d.ts +1 -1
- package/dist/ui/components/form-message/message-list.js +6 -6
- package/dist/ui/components/form-message/message-list.js.map +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete-input-container.d.ts +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete-input-container.js +10 -9
- 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 +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete-list-option.js +20 -19
- 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 +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete-list.js +6 -6
- package/dist/ui/components/id-autocomplete/id-autocomplete-list.js.map +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete.d.ts +1 -1
- package/dist/ui/components/id-autocomplete/id-autocomplete.js +4 -4
- package/dist/ui/components/id-autocomplete/id-autocomplete.js.map +1 -1
- package/dist/ui/components/id-autocomplete/types.d.ts +1 -1
- package/dist/ui/components/id-autocomplete/use-id-autocomplete.d.ts +1 -1
- package/dist/ui/components/index.d.ts +40 -37
- package/dist/ui/components/index.js +3 -1
- package/dist/ui/components/input/input.d.ts +1 -1
- package/dist/ui/components/input/input.js +2 -6
- package/dist/ui/components/input/input.js.map +1 -1
- package/dist/ui/components/input/splitted-input-diff.d.ts +1 -1
- package/dist/ui/components/input/splitted-input-diff.js +12 -11
- package/dist/ui/components/input/splitted-input-diff.js.map +1 -1
- package/dist/ui/components/input/subcomponent/input-diff.js +2 -2
- package/dist/ui/components/input/subcomponent/input-diff.js.map +1 -1
- package/dist/ui/components/input/subcomponent/text-diff.d.ts +1 -1
- package/dist/ui/components/input/subcomponent/text-diff.js +5 -5
- package/dist/ui/components/input/subcomponent/text-diff.js.map +1 -1
- package/dist/ui/components/json-viewer/json-viewer.d.ts +1 -1
- package/dist/ui/components/popover/popover.d.ts +1 -1
- package/dist/ui/components/popover/popover.js +3 -3
- package/dist/ui/components/popover/popover.js.map +1 -1
- package/dist/ui/components/radio-group-field/radio-group-field.d.ts +1 -1
- package/dist/ui/components/radio-group-field/radio-group-field.js +2 -2
- 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 +1 -1
- package/dist/ui/components/radio-group-field/radio.d.ts +1 -1
- package/dist/ui/components/radio-group-field/radio.js +4 -4
- package/dist/ui/components/radio-group-field/radio.js.map +1 -1
- package/dist/ui/components/search-autocomplete/index.d.ts +3 -3
- package/dist/ui/components/search-autocomplete/search-autocomplete.d.ts +1 -1
- package/dist/ui/components/search-autocomplete/search-autocomplete.js +16 -16
- package/dist/ui/components/search-autocomplete/search-autocomplete.js.map +1 -1
- package/dist/ui/components/search-autocomplete/types.d.ts +1 -1
- package/dist/ui/components/search-autocomplete/use-search-autocomplete.d.ts +1 -1
- package/dist/ui/components/search-autocomplete/use-search-autocomplete.js.map +1 -1
- package/dist/ui/components/select-field/content.d.ts +1 -1
- package/dist/ui/components/select-field/content.js +10 -9
- package/dist/ui/components/select-field/content.js.map +1 -1
- package/dist/ui/components/select-field/select-field.d.ts +1 -1
- package/dist/ui/components/select-field/select-field.js +2 -2
- package/dist/ui/components/select-field/select-field.js.map +1 -1
- package/dist/ui/components/select-field/selected-content.d.ts +1 -1
- package/dist/ui/components/select-field/selected-content.js +11 -10
- package/dist/ui/components/select-field/selected-content.js.map +1 -1
- package/dist/ui/components/select-field/subcomponents/CommandItemList.d.ts +1 -1
- package/dist/ui/components/select-field/subcomponents/CommandItemList.d.ts.map +1 -1
- package/dist/ui/components/select-field/subcomponents/CommandItemList.js +11 -10
- package/dist/ui/components/select-field/subcomponents/CommandItemList.js.map +1 -1
- package/dist/ui/components/select-field/use-select-field.d.ts +1 -1
- package/dist/ui/components/sidebar/index.d.ts +4 -0
- package/dist/ui/components/sidebar/index.js +3 -0
- package/dist/ui/components/sidebar/sidebar.d.ts +2 -0
- package/dist/ui/components/sidebar/sidebar.js +110 -0
- package/dist/ui/components/sidebar/sidebar.js.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-content-area.d.ts +14 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-content-area.d.ts.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-content-area.js +56 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-content-area.js.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-header.d.ts +11 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-header.d.ts.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-header.js +45 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-header.js.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-item.d.ts +35 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-item.d.ts.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-item.js +156 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-item.js.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-pinning-area.d.ts +7 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-pinning-area.d.ts.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-pinning-area.js +30 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-pinning-area.js.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/index.d.ts +2 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/index.js +2 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-provider.d.ts +2 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-provider.js +268 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-provider.js.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-reducer.d.ts +92 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-reducer.d.ts.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-reducer.js +107 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-reducer.js.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/index.d.ts +4 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/index.js +4 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-navigation-arrow.d.ts +10 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-navigation-arrow.d.ts.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-navigation-arrow.js +22 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-navigation-arrow.js.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-result-counter.d.ts +10 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-result-counter.d.ts.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-result-counter.js +22 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-result-counter.js.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/sidebar-search.d.ts +8 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/sidebar-search.d.ts.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/sidebar-search.js +85 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-search/sidebar-search.js.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton-item.d.ts +16 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton-item.d.ts.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton-item.js +21 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton-item.js.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton.d.ts +7 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton.d.ts.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton.js +63 -0
- package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton.js.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/status-icon.d.ts +16 -0
- package/dist/ui/components/sidebar/subcomponents/status-icon.d.ts.map +1 -0
- package/dist/ui/components/sidebar/subcomponents/status-icon.js +43 -0
- package/dist/ui/components/sidebar/subcomponents/status-icon.js.map +1 -0
- package/dist/ui/components/sidebar/types.d.ts +2 -0
- package/dist/ui/components/sidebar/types.js +14 -0
- package/dist/ui/components/sidebar/types.js.map +1 -0
- package/dist/ui/components/sidebar/use-ellipsis.d.ts +10 -0
- package/dist/ui/components/sidebar/use-ellipsis.d.ts.map +1 -0
- package/dist/ui/components/sidebar/use-ellipsis.js +26 -0
- package/dist/ui/components/sidebar/use-ellipsis.js.map +1 -0
- package/dist/ui/components/sidebar/use-sidebar-resize.d.ts +22 -0
- package/dist/ui/components/sidebar/use-sidebar-resize.d.ts.map +1 -0
- package/dist/ui/components/sidebar/use-sidebar-resize.js +72 -0
- package/dist/ui/components/sidebar/use-sidebar-resize.js.map +1 -0
- package/dist/ui/components/sidebar/utils.d.ts +14 -0
- package/dist/ui/components/sidebar/utils.d.ts.map +1 -0
- package/dist/ui/components/sidebar/utils.js +118 -0
- package/dist/ui/components/sidebar/utils.js.map +1 -0
- package/dist/ui/components/text-field/text-field.d.ts +1 -1
- package/dist/ui/components/text-input/text-input-diff.d.ts +1 -1
- package/dist/ui/components/text-input/text-input.d.ts +1 -1
- package/dist/ui/components/text-input/text-input.js +2 -2
- package/dist/ui/components/text-input/text-input.js.map +1 -1
- package/dist/ui/components/text-input/types.d.ts +1 -1
- package/dist/ui/components/tooltip/tooltip.d.ts +1 -1
- package/dist/ui/components/tooltip/tooltip.js +2 -2
- package/dist/ui/components/tooltip/tooltip.js.map +1 -1
- package/dist/ui/components/types.d.ts +1 -1
- package/dist/ui/components/value-transformer/value-transformer.d.ts +1 -1
- package/dist/ui/components/with-field-validation/with-field-validation.d.ts +1 -1
- 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 +42 -39
- package/dist/ui/index.js +3 -1
- package/dist/ui/lib/date-picker.d.ts +1 -1
- package/dist/ui/lib/shared-value-transformers.d.ts +1 -1
- package/dist/ui/lib/types.d.ts +1 -1
- package/dist/ui/types.d.ts +2 -2
- package/dist/{use-id-autocomplete-BPHVmVE8.d.ts → use-id-autocomplete-By7YSChC.d.ts} +2 -2
- package/dist/{use-id-autocomplete-BPHVmVE8.d.ts.map → use-id-autocomplete-By7YSChC.d.ts.map} +1 -1
- package/dist/{use-search-autocomplete-Xf7shCtk.d.ts → use-search-autocomplete-IfcQ_gKh.d.ts} +2 -2
- package/dist/{use-search-autocomplete-Xf7shCtk.d.ts.map → use-search-autocomplete-IfcQ_gKh.d.ts.map} +1 -1
- package/dist/{value-transformer-DCiU65Qa.d.ts → value-transformer-DQjqtNih.d.ts} +2 -2
- package/dist/{value-transformer-DCiU65Qa.d.ts.map → value-transformer-DQjqtNih.d.ts.map} +1 -1
- package/dist/{with-field-validation-vt0l1Sp7.d.ts → with-field-validation-Di5D8vU-.d.ts} +2 -2
- package/dist/{with-field-validation-vt0l1Sp7.d.ts.map → with-field-validation-Di5D8vU-.d.ts.map} +1 -1
- package/package.json +9 -5
- package/theme.css +60 -14
- package/dist/form-group-BauWlFkQ.d.ts.map +0 -1
- package/dist/form-label-Cz_gcj-B.d.ts.map +0 -1
- package/dist/index-DtPJq-vz.d.ts.map +0 -1
- package/dist/input-D11GgWGm.d.ts.map +0 -1
- package/dist/selected-content-q33DjCYy.d.ts.map +0 -1
- package/dist/splitted-input-diff-Ch6IKdEa.d.ts.map +0 -1
- package/dist/src-BgCjYazJ.js.map +0 -1
- /package/dist/{index-CWsYGvaO.d.ts → index--okzibnx.d.ts} +0 -0
- /package/dist/{index-qM4PwHTs.d.ts → index-BLwMeReG.d.ts} +0 -0
- /package/dist/{index-uQcTfU6c.d.ts → index-Cw3C7_1f.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-ellipsis.js","names":["useEffect","useState","useEllipsis","ref","hasEllipsis","setHasEllipsis","element","current","observer","ResizeObserver","offsetWidth","scrollWidth","observe","disconnect"],"sources":["../../../../src/ui/components/sidebar/use-ellipsis.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\n/**\n * Custom hook to detect if an element's text is truncated with ellipsis\n * @param ref - The ref of the element to detect ellipsis on\n * @returns Whether the element's text is truncated with ellipsis\n */\nexport const useEllipsis = <T extends HTMLElement>(\n ref: React.RefObject<T | null>,\n): boolean => {\n const [hasEllipsis, setHasEllipsis] = useState(false);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n const observer = new ResizeObserver(() => {\n setHasEllipsis(element.offsetWidth < element.scrollWidth);\n });\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, [ref]);\n\n return hasEllipsis;\n};\n"],"mappings":";;;;;;;AAOA,MAAaE,eACXC,QACY;CACZ,MAAM,CAACC,aAAaC,kBAAkBJ,SAAS,MAAM;AAErDD,iBAAgB;EACd,MAAMM,UAAUH,IAAII;AACpB,MAAI,CAACD,QAAS;EAEd,MAAME,WAAW,IAAIC,qBAAqB;AACxCJ,kBAAeC,QAAQI,cAAcJ,QAAQK,YAAY;IACzD;AACFH,WAASI,QAAQN,QAAQ;AAEzB,eAAa;AACXE,YAASK,YAAY;;IAEtB,CAACV,IAAI,CAAC;AAET,QAAOC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as react from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/components/sidebar/use-sidebar-resize.d.ts
|
|
4
|
+
interface SidebarResizeProps {
|
|
5
|
+
defaultWidth?: number;
|
|
6
|
+
minWidth?: number;
|
|
7
|
+
maxWidth?: number;
|
|
8
|
+
}
|
|
9
|
+
declare const useSidebarResize: ({
|
|
10
|
+
defaultWidth,
|
|
11
|
+
minWidth,
|
|
12
|
+
maxWidth
|
|
13
|
+
}: SidebarResizeProps) => {
|
|
14
|
+
sidebarRef: react.RefObject<HTMLDivElement | null>;
|
|
15
|
+
startResizing: () => void;
|
|
16
|
+
isResizing: boolean;
|
|
17
|
+
isSidebarOpen: boolean;
|
|
18
|
+
handleToggleSidebar: () => void;
|
|
19
|
+
};
|
|
20
|
+
//#endregion
|
|
21
|
+
export { useSidebarResize };
|
|
22
|
+
//# sourceMappingURL=use-sidebar-resize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-sidebar-resize.d.ts","names":[],"sources":["../../../../src/ui/components/sidebar/use-sidebar-resize.ts"],"mappings":";;;UAGU,kBAAA;EACR,YAAA;EACA,QAAA;EACA,QAAA;AAAA;AAAA,cAGW,gBAAA;EAAoB,YAAA;EAAA,QAAA;EAAA;AAAA,GAI9B,kBAAA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { triggerEvent } from "./utils.js";
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
|
+
//#region src/ui/components/sidebar/use-sidebar-resize.ts
|
|
4
|
+
const useSidebarResize = ({ defaultWidth = 300, minWidth = 100, maxWidth }) => {
|
|
5
|
+
const [isResizing, setIsResizing] = useState(false);
|
|
6
|
+
const [sidebarWidth, setSidebarWidth] = useState(Math.max(defaultWidth, minWidth));
|
|
7
|
+
const sidebarRef = useRef(null);
|
|
8
|
+
const [isSidebarOpen, setIsSidebarOpen] = useState(true);
|
|
9
|
+
const handleToggleSidebar = useCallback(() => {
|
|
10
|
+
const newState = !isSidebarOpen;
|
|
11
|
+
setIsSidebarOpen(newState);
|
|
12
|
+
triggerEvent("sidebar:resize:toggle", { isSidebarOpen: newState }, sidebarRef.current);
|
|
13
|
+
}, [isSidebarOpen]);
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
const width = isSidebarOpen ? sidebarWidth : 8;
|
|
16
|
+
document.documentElement.style.setProperty("--sidebar-width", `${width}px`);
|
|
17
|
+
}, [isSidebarOpen, sidebarWidth]);
|
|
18
|
+
const startResizing = useCallback(() => {
|
|
19
|
+
if (!isSidebarOpen) return;
|
|
20
|
+
setIsResizing(true);
|
|
21
|
+
triggerEvent("sidebar:resize:start", { isSidebarOpen }, sidebarRef.current);
|
|
22
|
+
}, [isSidebarOpen]);
|
|
23
|
+
const stopResizing = useCallback(() => {
|
|
24
|
+
if (!isResizing) return;
|
|
25
|
+
setIsResizing(false);
|
|
26
|
+
triggerEvent("sidebar:resize", {
|
|
27
|
+
isSidebarOpen,
|
|
28
|
+
sidebarWidth: isSidebarOpen ? sidebarWidth : 8
|
|
29
|
+
}, sidebarRef.current);
|
|
30
|
+
}, [
|
|
31
|
+
isResizing,
|
|
32
|
+
isSidebarOpen,
|
|
33
|
+
sidebarWidth
|
|
34
|
+
]);
|
|
35
|
+
const resize = useCallback((mouseMoveEvent) => {
|
|
36
|
+
if (!isResizing || !sidebarRef.current) return;
|
|
37
|
+
const sidebarLeft = sidebarRef.current.getBoundingClientRect().left;
|
|
38
|
+
let newWidth = mouseMoveEvent.clientX - sidebarLeft;
|
|
39
|
+
newWidth = Math.max(newWidth, minWidth);
|
|
40
|
+
if (maxWidth !== void 0) newWidth = Math.min(newWidth, maxWidth);
|
|
41
|
+
setSidebarWidth(newWidth);
|
|
42
|
+
triggerEvent("sidebar:resize:active", {
|
|
43
|
+
isSidebarOpen,
|
|
44
|
+
sidebarWidth: newWidth
|
|
45
|
+
}, sidebarRef.current);
|
|
46
|
+
}, [
|
|
47
|
+
isResizing,
|
|
48
|
+
minWidth,
|
|
49
|
+
maxWidth,
|
|
50
|
+
isSidebarOpen
|
|
51
|
+
]);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (typeof window === "undefined") return;
|
|
54
|
+
window.addEventListener("mousemove", resize);
|
|
55
|
+
window.addEventListener("mouseup", stopResizing);
|
|
56
|
+
return () => {
|
|
57
|
+
window.removeEventListener("mousemove", resize);
|
|
58
|
+
window.removeEventListener("mouseup", stopResizing);
|
|
59
|
+
};
|
|
60
|
+
}, [resize, stopResizing]);
|
|
61
|
+
return {
|
|
62
|
+
sidebarRef,
|
|
63
|
+
startResizing,
|
|
64
|
+
isResizing,
|
|
65
|
+
isSidebarOpen,
|
|
66
|
+
handleToggleSidebar
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
//#endregion
|
|
70
|
+
export { useSidebarResize };
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=use-sidebar-resize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-sidebar-resize.js","names":["useCallback","useEffect","useRef","useState","triggerEvent","useSidebarResize","defaultWidth","minWidth","maxWidth","isResizing","setIsResizing","sidebarWidth","setSidebarWidth","Math","max","sidebarRef","isSidebarOpen","setIsSidebarOpen","handleToggleSidebar","newState","current","width","document","documentElement","style","setProperty","startResizing","stopResizing","resize","mouseMoveEvent","sidebarLeft","getBoundingClientRect","left","newWidth","clientX","undefined","min","window","addEventListener","removeEventListener"],"sources":["../../../../src/ui/components/sidebar/use-sidebar-resize.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { triggerEvent } from \"./utils.js\";\n\ninterface SidebarResizeProps {\n defaultWidth?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\nexport const useSidebarResize = ({\n defaultWidth = 300,\n minWidth = 100,\n maxWidth,\n}: SidebarResizeProps) => {\n const [isResizing, setIsResizing] = useState<boolean>(false);\n\n const [sidebarWidth, setSidebarWidth] = useState<number>(\n Math.max(defaultWidth, minWidth),\n );\n\n const sidebarRef = useRef<HTMLDivElement>(null);\n\n const [isSidebarOpen, setIsSidebarOpen] = useState<boolean>(true);\n\n const handleToggleSidebar = useCallback(() => {\n const newState = !isSidebarOpen;\n setIsSidebarOpen(newState);\n\n // Trigger custom event for external listeners\n triggerEvent(\n \"sidebar:resize:toggle\",\n { isSidebarOpen: newState },\n sidebarRef.current,\n );\n }, [isSidebarOpen]);\n\n // Update CSS variable when sidebar width or open state changes\n useEffect(() => {\n const width = isSidebarOpen ? sidebarWidth : 8;\n document.documentElement.style.setProperty(\"--sidebar-width\", `${width}px`);\n }, [isSidebarOpen, sidebarWidth]);\n\n const startResizing = useCallback(() => {\n if (!isSidebarOpen) return;\n\n setIsResizing(true);\n\n // Trigger custom event for external listeners\n triggerEvent(\"sidebar:resize:start\", { isSidebarOpen }, sidebarRef.current);\n }, [isSidebarOpen]);\n\n const stopResizing = useCallback(() => {\n if (!isResizing) return;\n\n setIsResizing(false);\n\n // Trigger custom event for external listeners\n triggerEvent(\n \"sidebar:resize\",\n {\n isSidebarOpen,\n sidebarWidth: isSidebarOpen ? sidebarWidth : 8,\n },\n sidebarRef.current,\n );\n }, [isResizing, isSidebarOpen, sidebarWidth]);\n\n const resize = useCallback(\n (mouseMoveEvent: MouseEvent) => {\n if (!isResizing || !sidebarRef.current) return;\n\n const sidebarLeft = sidebarRef.current.getBoundingClientRect().left;\n let newWidth = mouseMoveEvent.clientX - sidebarLeft;\n\n newWidth = Math.max(newWidth, minWidth);\n if (maxWidth !== undefined) {\n newWidth = Math.min(newWidth, maxWidth);\n }\n\n setSidebarWidth(newWidth);\n\n // Trigger custom event for external listeners\n triggerEvent(\n \"sidebar:resize:active\",\n {\n isSidebarOpen,\n sidebarWidth: newWidth,\n },\n sidebarRef.current,\n );\n },\n [isResizing, minWidth, maxWidth, isSidebarOpen],\n );\n\n // Set up and clean up event listeners for resize operation\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n window.addEventListener(\"mousemove\", resize);\n window.addEventListener(\"mouseup\", stopResizing);\n\n return () => {\n window.removeEventListener(\"mousemove\", resize);\n window.removeEventListener(\"mouseup\", stopResizing);\n };\n }, [resize, stopResizing]);\n\n return {\n sidebarRef,\n startResizing,\n isResizing,\n isSidebarOpen,\n handleToggleSidebar,\n };\n};\n"],"mappings":";;;AASA,MAAaK,oBAAoB,EAC/BC,eAAe,KACfC,WAAW,KACXC,eACwB;CACxB,MAAM,CAACC,YAAYC,iBAAiBP,SAAkB,MAAM;CAE5D,MAAM,CAACQ,cAAcC,mBAAmBT,SACtCU,KAAKC,IAAIR,cAAcC,SACzB,CAAC;CAED,MAAMQ,aAAab,OAAuB,KAAK;CAE/C,MAAM,CAACc,eAAeC,oBAAoBd,SAAkB,KAAK;CAEjE,MAAMe,sBAAsBlB,kBAAkB;EAC5C,MAAMmB,WAAW,CAACH;AAClBC,mBAAiBE,SAAS;AAG1Bf,eACE,yBACA,EAAEY,eAAeG,UAAU,EAC3BJ,WAAWK,QACZ;IACA,CAACJ,cAAc,CAAC;AAGnBf,iBAAgB;EACd,MAAMoB,QAAQL,gBAAgBL,eAAe;AAC7CW,WAASC,gBAAgBC,MAAMC,YAAY,mBAAmB,GAAGJ,MAAK,IAAK;IAC1E,CAACL,eAAeL,aAAa,CAAC;CAEjC,MAAMe,gBAAgB1B,kBAAkB;AACtC,MAAI,CAACgB,cAAe;AAEpBN,gBAAc,KAAK;AAGnBN,eAAa,wBAAwB,EAAEY,eAAe,EAAED,WAAWK,QAAQ;IAC1E,CAACJ,cAAc,CAAC;CAEnB,MAAMW,eAAe3B,kBAAkB;AACrC,MAAI,CAACS,WAAY;AAEjBC,gBAAc,MAAM;AAGpBN,eACE,kBACA;GACEY;GACAL,cAAcK,gBAAgBL,eAAe;GAC9C,EACDI,WAAWK,QACZ;IACA;EAACX;EAAYO;EAAeL;EAAa,CAAC;CAE7C,MAAMiB,SAAS5B,aACZ6B,mBAA+B;AAC9B,MAAI,CAACpB,cAAc,CAACM,WAAWK,QAAS;EAExC,MAAMU,cAAcf,WAAWK,QAAQW,uBAAuB,CAACC;EAC/D,IAAIC,WAAWJ,eAAeK,UAAUJ;AAExCG,aAAWpB,KAAKC,IAAImB,UAAU1B,SAAS;AACvC,MAAIC,aAAa2B,KAAAA,EACfF,YAAWpB,KAAKuB,IAAIH,UAAUzB,SAAS;AAGzCI,kBAAgBqB,SAAS;AAGzB7B,eACE,yBACA;GACEY;GACAL,cAAcsB;GACf,EACDlB,WAAWK,QACZ;IAEH;EAACX;EAAYF;EAAUC;EAAUQ;EACnC,CAAC;AAGDf,iBAAgB;AACd,MAAI,OAAOoC,WAAW,YAAa;AAEnCA,SAAOC,iBAAiB,aAAaV,OAAO;AAC5CS,SAAOC,iBAAiB,WAAWX,aAAa;AAEhD,eAAa;AACXU,UAAOE,oBAAoB,aAAaX,OAAO;AAC/CS,UAAOE,oBAAoB,WAAWZ,aAAa;;IAEpD,CAACC,QAAQD,aAAa,CAAC;AAE1B,QAAO;EACLZ;EACAW;EACAjB;EACAO;EACAE;EACD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { a as NodeStatus, i as NodeSortType, r as NodeSortOrder, s as SidebarNode } from "../../../types-CNbvfWjh.js";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/components/sidebar/utils.d.ts
|
|
4
|
+
declare const nodesSearch: (nodes: SidebarNode[], searchTerm: string, searchType?: "bfs" | "dfs") => SidebarNode[];
|
|
5
|
+
declare const getOpenLevels: (items: SidebarNode[], level: number) => Set<string>;
|
|
6
|
+
declare const isOpenLevel: (items: SidebarNode[], expandedNodes: Set<string>, level: number) => boolean;
|
|
7
|
+
declare const getNodePath: (items: SidebarNode[], nodeId: string) => SidebarNode[] | null;
|
|
8
|
+
declare const getMaxDepth: (items: SidebarNode[]) => number;
|
|
9
|
+
declare const filterStatuses: (nodes: SidebarNode[], statuses: NodeStatus[]) => SidebarNode[];
|
|
10
|
+
declare const triggerEvent: (eventType: string, data: unknown, element?: Document | HTMLElement | null) => void;
|
|
11
|
+
declare const sortNodes: (nodes: SidebarNode[], sortType: NodeSortType, sortOrder: NodeSortOrder) => SidebarNode[];
|
|
12
|
+
//#endregion
|
|
13
|
+
export { filterStatuses, getMaxDepth, getNodePath, getOpenLevels, isOpenLevel, nodesSearch, sortNodes, triggerEvent };
|
|
14
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../../../src/ui/components/sidebar/utils.ts"],"mappings":";;;cAQa,WAAA,GACX,KAAA,EAAO,WAAA,IACP,UAAA,UACA,UAAA,qBACC,WAAA;AAAA,cAmDU,aAAA,GACX,KAAA,EAAO,WAAA,IACP,KAAA,aACC,GAAA;AAAA,cAsBU,WAAA,GACX,KAAA,EAAO,WAAA,IACP,aAAA,EAAe,GAAA,UACf,KAAA;AAAA,cAuCW,WAAA,GACX,KAAA,EAAO,WAAA,IACP,MAAA,aACC,WAAA;AAAA,cA2CU,WAAA,GAAe,KAAA,EAAO,WAAA;AAAA,cA2BtB,cAAA,GACX,KAAA,EAAO,WAAA,IACP,QAAA,EAAU,UAAA,OACT,WAAA;AAAA,cA6BU,YAAA,GACX,SAAA,UACA,IAAA,WACA,OAAA,GAAS,QAAA,GAAW,WAAA;AAAA,cAgBT,SAAA,GACX,KAAA,EAAO,WAAA,IACP,QAAA,EAAU,YAAA,EACV,SAAA,EAAW,aAAA,KACV,WAAA"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import naturalCompare from "natural-compare-lite";
|
|
2
|
+
//#region src/ui/components/sidebar/utils.ts
|
|
3
|
+
const nodesSearch = (nodes, searchTerm, searchType = "dfs") => {
|
|
4
|
+
if (!searchTerm.trim()) return [];
|
|
5
|
+
const lowerCaseSearchTerm = searchTerm.toLowerCase();
|
|
6
|
+
const results = [];
|
|
7
|
+
const dfs = (node) => {
|
|
8
|
+
if (node.title.toLowerCase().includes(lowerCaseSearchTerm)) results.push(node);
|
|
9
|
+
if (node.children?.length) for (const child of node.children) dfs(child);
|
|
10
|
+
};
|
|
11
|
+
const bfs = (nodes) => {
|
|
12
|
+
const queue = [...nodes];
|
|
13
|
+
while (queue.length > 0) {
|
|
14
|
+
const current = queue.shift();
|
|
15
|
+
if (!current) continue;
|
|
16
|
+
if (current.title.toLowerCase().includes(lowerCaseSearchTerm)) results.push(current);
|
|
17
|
+
if (current.children?.length) queue.push(...current.children);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
if (searchType === "dfs") for (const node of nodes) dfs(node);
|
|
21
|
+
else bfs(nodes);
|
|
22
|
+
return results;
|
|
23
|
+
};
|
|
24
|
+
const getOpenLevels = (items, level) => {
|
|
25
|
+
if (level < 1) return /* @__PURE__ */ new Set();
|
|
26
|
+
const result = /* @__PURE__ */ new Set();
|
|
27
|
+
const traverse = (nodes, currentLevel) => {
|
|
28
|
+
for (const node of nodes) {
|
|
29
|
+
if (currentLevel < level) result.add(node.id);
|
|
30
|
+
if (node.children?.length) traverse(node.children, currentLevel + 1);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
traverse(items, 1);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
const isOpenLevel = (items, expandedNodes, level) => {
|
|
37
|
+
if (!items.length || level < 1) return false;
|
|
38
|
+
const queue = [...items];
|
|
39
|
+
for (let i = 0; i < level; i++) {
|
|
40
|
+
const nextLevelQueue = [];
|
|
41
|
+
while (queue.length > 0) {
|
|
42
|
+
const current = queue.shift();
|
|
43
|
+
if (!current) continue;
|
|
44
|
+
if (!expandedNodes.has(current.id)) return false;
|
|
45
|
+
if (current.children?.length) nextLevelQueue.push(...current.children);
|
|
46
|
+
}
|
|
47
|
+
queue.push(...nextLevelQueue);
|
|
48
|
+
}
|
|
49
|
+
for (const node of queue) if (expandedNodes.has(node.id)) return false;
|
|
50
|
+
return true;
|
|
51
|
+
};
|
|
52
|
+
const getNodePath = (items, nodeId) => {
|
|
53
|
+
if (!nodeId || !items.length) return null;
|
|
54
|
+
const findPath = (node, id, path) => {
|
|
55
|
+
path.push(node);
|
|
56
|
+
if (node.id === id) return [...path];
|
|
57
|
+
if (node.children?.length) for (const child of node.children) {
|
|
58
|
+
const result = findPath(child, id, [...path]);
|
|
59
|
+
if (result) return result;
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
};
|
|
63
|
+
for (const root of items) {
|
|
64
|
+
const result = findPath(root, nodeId, []);
|
|
65
|
+
if (result) return result;
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
};
|
|
69
|
+
const getMaxDepth = (items) => {
|
|
70
|
+
if (!items.length) return 0;
|
|
71
|
+
let maxDepth = 0;
|
|
72
|
+
const traverse = (node, depth) => {
|
|
73
|
+
maxDepth = Math.max(maxDepth, depth);
|
|
74
|
+
if (node.children?.length) for (const child of node.children) traverse(child, depth + 1);
|
|
75
|
+
};
|
|
76
|
+
for (const item of items) traverse(item, 1);
|
|
77
|
+
return maxDepth;
|
|
78
|
+
};
|
|
79
|
+
const filterStatuses = (nodes, statuses) => {
|
|
80
|
+
if (!nodes.length || !statuses.length) return [];
|
|
81
|
+
return nodes.reduce((filteredNodes, node) => {
|
|
82
|
+
const nodeHasStatus = node.status !== void 0 && statuses.includes(node.status);
|
|
83
|
+
const filteredChildren = node.children ? filterStatuses(node.children, statuses) : [];
|
|
84
|
+
if (nodeHasStatus || filteredChildren.length > 0) {
|
|
85
|
+
const filteredNode = {
|
|
86
|
+
...node,
|
|
87
|
+
children: filteredChildren
|
|
88
|
+
};
|
|
89
|
+
filteredNodes.push(filteredNode);
|
|
90
|
+
}
|
|
91
|
+
return filteredNodes;
|
|
92
|
+
}, []);
|
|
93
|
+
};
|
|
94
|
+
const triggerEvent = (eventType, data, element = document) => {
|
|
95
|
+
if (!eventType) {
|
|
96
|
+
console.warn("triggerEvent called without an event type");
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const event = new CustomEvent(eventType, {
|
|
100
|
+
detail: data,
|
|
101
|
+
bubbles: true,
|
|
102
|
+
cancelable: false
|
|
103
|
+
});
|
|
104
|
+
(element ?? document).dispatchEvent(event);
|
|
105
|
+
};
|
|
106
|
+
const sortNodes = (nodes, sortType, sortOrder) => {
|
|
107
|
+
return [...nodes].sort((a, b) => {
|
|
108
|
+
const comparison = typeof sortType === "function" ? sortType(a.title, b.title) : sortType === "alphabetical" ? a.title.toLowerCase().localeCompare(b.title.toLowerCase()) : naturalCompare(a.title, b.title);
|
|
109
|
+
return sortOrder === "desc" ? -comparison : comparison;
|
|
110
|
+
}).map((node) => ({
|
|
111
|
+
...node,
|
|
112
|
+
children: node.children ? sortNodes(node.children, sortType, sortOrder) : void 0
|
|
113
|
+
}));
|
|
114
|
+
};
|
|
115
|
+
//#endregion
|
|
116
|
+
export { filterStatuses, getMaxDepth, getNodePath, getOpenLevels, isOpenLevel, nodesSearch, sortNodes, triggerEvent };
|
|
117
|
+
|
|
118
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","names":["naturalCompare","nodesSearch","nodes","searchTerm","searchType","trim","lowerCaseSearchTerm","toLowerCase","results","dfs","node","title","includes","push","children","length","child","bfs","queue","current","shift","getOpenLevels","items","level","Set","result","traverse","currentLevel","add","id","isOpenLevel","expandedNodes","i","nextLevelQueue","has","getNodePath","nodeId","findPath","path","root","getMaxDepth","maxDepth","depth","Math","max","item","filterStatuses","statuses","reduce","filteredNodes","nodeHasStatus","status","undefined","filteredChildren","filteredNode","triggerEvent","eventType","data","element","document","console","warn","event","CustomEvent","detail","bubbles","cancelable","dispatchEvent","sortNodes","sortType","sortOrder","sortedNodes","sort","a","b","comparison","localeCompare","map"],"sources":["../../../../src/ui/components/sidebar/utils.ts"],"sourcesContent":["import naturalCompare from \"natural-compare-lite\";\nimport type {\n NodeSortOrder,\n NodeSortType,\n NodeStatus,\n SidebarNode,\n} from \"./types.js\";\n\nexport const nodesSearch = (\n nodes: SidebarNode[],\n searchTerm: string,\n searchType: \"bfs\" | \"dfs\" = \"dfs\",\n): SidebarNode[] => {\n if (!searchTerm.trim()) {\n return [];\n }\n\n const lowerCaseSearchTerm = searchTerm.toLowerCase();\n const results: SidebarNode[] = [];\n\n const dfs = (node: SidebarNode): void => {\n // Check if current node matches search\n if (node.title.toLowerCase().includes(lowerCaseSearchTerm)) {\n results.push(node);\n }\n\n // Recursively search children if they exist\n if (node.children?.length) {\n for (const child of node.children) {\n dfs(child);\n }\n }\n };\n\n const bfs = (nodes: SidebarNode[]): void => {\n const queue: SidebarNode[] = [...nodes];\n\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current) continue;\n\n if (current.title.toLowerCase().includes(lowerCaseSearchTerm)) {\n results.push(current);\n }\n\n if (current.children?.length) {\n queue.push(...current.children);\n }\n }\n };\n\n // Execute the appropriate search algorithm\n if (searchType === \"dfs\") {\n for (const node of nodes) {\n dfs(node);\n }\n } else {\n bfs(nodes);\n }\n\n return results;\n};\n\nexport const getOpenLevels = (\n items: SidebarNode[],\n level: number,\n): Set<string> => {\n if (level < 1) {\n return new Set<string>();\n }\n\n const result = new Set<string>();\n\n const traverse = (nodes: SidebarNode[], currentLevel: number): void => {\n for (const node of nodes) {\n if (currentLevel < level) {\n result.add(node.id);\n }\n if (node.children?.length) {\n traverse(node.children, currentLevel + 1);\n }\n }\n };\n\n traverse(items, 1); // Start from level 1\n return result;\n};\n\nexport const isOpenLevel = (\n items: SidebarNode[],\n expandedNodes: Set<string>,\n level: number,\n): boolean => {\n if (!items.length || level < 1) {\n return false;\n }\n\n // Check if all levels up to the target level are open\n const queue: SidebarNode[] = [...items];\n\n for (let i = 0; i < level; i++) {\n const nextLevelQueue: SidebarNode[] = [];\n\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current) continue;\n\n if (!expandedNodes.has(current.id)) {\n return false;\n }\n\n if (current.children?.length) {\n nextLevelQueue.push(...current.children);\n }\n }\n\n queue.push(...nextLevelQueue);\n }\n\n // Check if there's something open one level deeper\n // If so, then the level is not fully open\n for (const node of queue) {\n if (expandedNodes.has(node.id)) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const getNodePath = (\n items: SidebarNode[],\n nodeId: string,\n): SidebarNode[] | null => {\n if (!nodeId || !items.length) {\n return null;\n }\n\n const findPath = (\n node: SidebarNode,\n id: string,\n path: SidebarNode[],\n ): SidebarNode[] | null => {\n // Add the current node to the path\n path.push(node);\n\n // Check if the current node is the target\n if (node.id === id) {\n return [...path]; // Return a copy to avoid mutation issues\n }\n\n // Recursively search in the children\n if (node.children?.length) {\n for (const child of node.children) {\n const result = findPath(child, id, [...path]);\n if (result) {\n return result;\n }\n }\n }\n\n // Not found in this path\n return null;\n };\n\n // Try to find the path starting from each root node\n for (const root of items) {\n const result = findPath(root, nodeId, []);\n if (result) {\n return result;\n }\n }\n\n return null;\n};\n\nexport const getMaxDepth = (items: SidebarNode[]): number => {\n if (!items.length) {\n return 0;\n }\n\n let maxDepth = 0;\n\n const traverse = (node: SidebarNode, depth: number): void => {\n // Update maxDepth if the current depth is greater\n maxDepth = Math.max(maxDepth, depth);\n\n // Traverse children recursively\n if (node.children?.length) {\n for (const child of node.children) {\n traverse(child, depth + 1);\n }\n }\n };\n\n // Start traversal from each root node\n for (const item of items) {\n traverse(item, 1); // Start with depth 1 for root nodes\n }\n\n return maxDepth;\n};\n\nexport const filterStatuses = (\n nodes: SidebarNode[],\n statuses: NodeStatus[],\n): SidebarNode[] => {\n if (!nodes.length || !statuses.length) {\n return [];\n }\n\n return nodes.reduce<SidebarNode[]>((filteredNodes, node) => {\n // Check if the node itself has one of the statuses\n const nodeHasStatus =\n node.status !== undefined && statuses.includes(node.status);\n\n // Recursively filter children\n const filteredChildren = node.children\n ? filterStatuses(node.children, statuses)\n : [];\n\n // Include the node if it or any of its children should be included\n if (nodeHasStatus || filteredChildren.length > 0) {\n // Create a copy of the node with filtered children\n const filteredNode: SidebarNode = {\n ...node,\n children: filteredChildren,\n };\n filteredNodes.push(filteredNode);\n }\n\n return filteredNodes;\n }, []);\n};\n\nexport const triggerEvent = (\n eventType: string,\n data: unknown,\n element: Document | HTMLElement | null = document,\n): void => {\n if (!eventType) {\n console.warn(\"triggerEvent called without an event type\");\n return;\n }\n\n const event = new CustomEvent(eventType, {\n detail: data,\n bubbles: true,\n cancelable: false,\n });\n\n (element ?? document).dispatchEvent(event);\n};\n\nexport const sortNodes = (\n nodes: SidebarNode[],\n sortType: NodeSortType,\n sortOrder: NodeSortOrder,\n): SidebarNode[] => {\n const sortedNodes = [...nodes].sort((a, b) => {\n const comparison =\n typeof sortType === \"function\"\n ? sortType(a.title, b.title)\n : sortType === \"alphabetical\"\n ? a.title.toLowerCase().localeCompare(b.title.toLowerCase())\n : naturalCompare(a.title, b.title);\n\n return sortOrder === \"desc\" ? -comparison : comparison;\n });\n\n return sortedNodes.map((node) => ({\n ...node,\n children: node.children\n ? sortNodes(node.children, sortType, sortOrder)\n : undefined,\n }));\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as TextFieldProps, t as TextField } from "../../../text-field-
|
|
1
|
+
import { n as TextFieldProps, t as TextField } from "../../../text-field-DSInH67J.js";
|
|
2
2
|
export { TextField, TextFieldProps };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as TextInputDiff } from "../../../text-input-diff-
|
|
1
|
+
import { t as TextInputDiff } from "../../../text-input-diff-B0vLSKQm.js";
|
|
2
2
|
export { TextInputDiff as default };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as TextInputProps, t as TextInput } from "../../../text-input-
|
|
1
|
+
import { n as TextInputProps, t as TextInput } from "../../../text-input-8zXIWHLi.js";
|
|
2
2
|
export { TextInput, TextInputProps };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { t as cn } from "../../../src-BgCjYazJ.js";
|
|
2
1
|
import { CharacterCounter } from "../character-counter/character-counter.js";
|
|
3
2
|
import { FormLabel } from "../form-label/form-label.js";
|
|
4
3
|
import { FormMessageList } from "../form-message/message-list.js";
|
|
@@ -9,6 +8,7 @@ import { Input } from "../input/input.js";
|
|
|
9
8
|
import { ValueTransformer } from "../value-transformer/value-transformer.js";
|
|
10
9
|
import TextInputDiff from "./text-input-diff.js";
|
|
11
10
|
import { forwardRef, useId, useMemo } from "react";
|
|
11
|
+
import { twMerge } from "tailwind-merge";
|
|
12
12
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
13
|
//#region src/ui/components/text-input/text-input.tsx
|
|
14
14
|
const TextInput = /* @__PURE__ */ forwardRef(({ label, description, value, defaultValue, onChange, errors, warnings, pattern, trim, uppercase, lowercase, maxLength, autoComplete, baseValue, viewMode = "edition", diffMode, ...props }, ref) => {
|
|
@@ -47,7 +47,7 @@ const TextInput = /* @__PURE__ */ forwardRef(({ label, description, value, defau
|
|
|
47
47
|
})
|
|
48
48
|
}),
|
|
49
49
|
typeof maxLength === "number" && maxLength > 0 && /* @__PURE__ */ jsx("div", {
|
|
50
|
-
className:
|
|
50
|
+
className: twMerge("mt-[-6px] flex justify-end", hasContentBelow && "-mb-1"),
|
|
51
51
|
children: /* @__PURE__ */ jsx(CharacterCounter, {
|
|
52
52
|
maxLength,
|
|
53
53
|
value: value ?? ""
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-input.js","names":["
|
|
1
|
+
{"version":3,"file":"text-input.js","names":["twMerge","forwardRef","useId","useMemo","sharedValueTransformers","CharacterCounter","FormDescription","FormGroup","FormLabel","FormMessageList","Input","ValueTransformer","TextInputDiff","TextInput","label","description","value","defaultValue","onChange","errors","warnings","pattern","trim","uppercase","lowercase","maxLength","autoComplete","baseValue","viewMode","diffMode","props","ref","idGenerated","id","autoCompleteValue","undefined","hasContentBelow","Array","isArray","length","transformers","trimOnBlur","lowercaseOnChange","uppercaseOnChange","trimOnEnter","required","disabled","toString","displayName"],"sources":["../../../../src/ui/components/text-input/text-input.tsx"],"sourcesContent":["import { twMerge } from \"tailwind-merge\";\nimport { forwardRef, useId, useMemo } from \"react\";\nimport { sharedValueTransformers } from \"#design-system/ui/lib\";\nimport type { DiffMode, InputBaseProps, WithDifference } from \"../../types.js\";\nimport { CharacterCounter } from \"../character-counter/character-counter.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 { Input } from \"../input/input.js\";\nimport type { TransformerType } from \"#design-system\";\nimport { ValueTransformer } from \"../value-transformer/value-transformer.js\";\nimport TextInputDiff from \"./text-input-diff.js\";\nimport type { CommonTextProps } from \"./types.js\";\n\ninterface TextInputProps\n extends\n Omit<\n InputBaseProps<string> &\n Omit<React.InputHTMLAttributes<HTMLInputElement>, \"pattern\"> &\n CommonTextProps,\n \"value\" | \"autoComplete\"\n >,\n Omit<WithDifference<string>, \"diffMode\"> {\n value?: string;\n autoComplete?: boolean;\n diffMode?: Extract<DiffMode, \"sentences\">;\n}\n\nconst TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n (\n {\n label,\n description,\n value,\n defaultValue,\n onChange,\n errors,\n warnings,\n // TextProps\n pattern,\n trim,\n uppercase,\n lowercase,\n maxLength,\n autoComplete,\n // Difference Props\n baseValue,\n viewMode = \"edition\",\n diffMode,\n ...props\n },\n ref,\n ) => {\n const idGenerated = useId();\n const id = props.id ?? idGenerated;\n const autoCompleteValue =\n autoComplete === undefined ? undefined : autoComplete ? \"on\" : \"off\";\n const hasContentBelow =\n !!description ||\n (Array.isArray(warnings) && warnings.length > 0) ||\n (Array.isArray(errors) && errors.length > 0);\n\n const transformers: TransformerType = useMemo(\n () => [\n sharedValueTransformers.trimOnBlur(!!trim),\n sharedValueTransformers.lowercaseOnChange(!!lowercase),\n sharedValueTransformers.uppercaseOnChange(!!uppercase),\n sharedValueTransformers.trimOnEnter(!!trim),\n ],\n [trim, lowercase, uppercase],\n );\n\n if (viewMode === \"edition\") {\n return (\n <FormGroup>\n {label && (\n <FormLabel\n htmlFor={id}\n required={props.required}\n disabled={props.disabled}\n hasError={!!errors?.length}\n >\n {label}\n </FormLabel>\n )}\n <ValueTransformer transformers={transformers}>\n <Input\n id={id}\n value={value ?? defaultValue ?? \"\"}\n onChange={onChange}\n pattern={pattern?.toString()}\n autoComplete={autoCompleteValue}\n {...props}\n ref={ref}\n />\n </ValueTransformer>\n {typeof maxLength === \"number\" && maxLength > 0 && (\n <div\n className={twMerge(\n \"mt-[-6px] flex justify-end\",\n hasContentBelow && \"-mb-1\",\n )}\n >\n <CharacterCounter maxLength={maxLength} value={value ?? \"\"} />\n </div>\n )}\n {description && <FormDescription>{description}</FormDescription>}\n {warnings && <FormMessageList messages={warnings} type=\"warning\" />}\n {errors && <FormMessageList messages={errors} type=\"error\" />}\n </FormGroup>\n );\n }\n\n // Diff mode\n return (\n <TextInputDiff\n value={value ?? defaultValue ?? \"\"}\n viewMode={viewMode}\n diffMode={diffMode}\n baseValue={baseValue}\n label={label}\n required={props.required}\n />\n );\n },\n);\n\nTextInput.displayName = \"TextInput\";\n\nexport { TextInput, type TextInputProps };\n"],"mappings":";;;;;;;;;;;;;AA6BA,MAAMa,YAAYZ,4BAEd,EACEa,OACAC,aACAC,OACAC,cACAC,UACAC,QACAC,UAEAC,SACAC,MACAC,WACAC,WACAC,WACAC,cAEAC,WACAC,WAAW,WACXC,UACA,GAAGC,SAELC,QACG;CACH,MAAMC,cAAc9B,OAAO;CAC3B,MAAM+B,KAAKH,MAAMG,MAAMD;CACvB,MAAME,oBACJR,iBAAiBS,KAAAA,IAAYA,KAAAA,IAAYT,eAAe,OAAO;CACjE,MAAMU,kBACJ,CAAC,CAACrB,eACDsB,MAAMC,QAAQlB,SAAS,IAAIA,SAASmB,SAAS,KAC7CF,MAAMC,QAAQnB,OAAO,IAAIA,OAAOoB,SAAS;CAE5C,MAAMC,eAAgCrC,cAC9B;EACJC,wBAAwBqC,WAAW,CAAC,CAACnB,KAAK;EAC1ClB,wBAAwBsC,kBAAkB,CAAC,CAAClB,UAAU;EACtDpB,wBAAwBuC,kBAAkB,CAAC,CAACpB,UAAU;EACtDnB,wBAAwBwC,YAAY,CAAC,CAACtB,KAAK;EAC5C,EACD;EAACA;EAAME;EAAWD;EACpB,CAAC;AAED,KAAIK,aAAa,UACf,QACE,qBAAC,WAAD,EAAA,UAAA;EACGd,SACC,oBAAC,WAAD;GACE,SAASmB;GACT,UAAUH,MAAMe;GAChB,UAAUf,MAAMgB;GAChB,UAAU,CAAC,CAAC3B,QAAQoB;aAEnBzB;GAEJ,CAAA;EACD,oBAAC,kBAAD;GAAgC0B;aAC9B,oBAAC,OAAD;IACMP;IACJ,OAAOjB,SAASC,gBAAgB;IACtBC;IACV,SAASG,SAAS0B,UAAU;IAC5B,cAAcb;IACd,GAAIJ;IACCC;IAAI,CAAA;GAEK,CAAA;EACjB,OAAON,cAAc,YAAYA,YAAY,KAC5C,oBAAC,OAAD;GACE,WAAWzB,QACT,8BACAoC,mBAAmB,QACpB;aAED,oBAAC,kBAAD;IAA6BX;IAAW,OAAOT,SAAS;IAAG,CAAA;GAE9D,CAAA;EACAD,eAAe,oBAAC,iBAAD,EAAA,UAAkBA,aAA8B,CAAA;EAC/DK,YAAY,oBAAC,iBAAD;GAAiB,UAAUA;GAAU,MAAK;GAAY,CAAA;EAClED,UAAU,oBAAC,iBAAD;GAAiB,UAAUA;GAAQ,MAAK;GAAU,CAAA;EACnD,EAAA,CAAA;AAKhB,QACE,oBAAC,eAAD;EACE,OAAOH,SAASC,gBAAgB;EACtBW;EACAC;EACCF;EACJb;EACP,UAAUgB,MAAMe;EAChB,CAAA;EAGP;AAEDhC,UAAUmC,cAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as CommonTextProps } from "../../../types-
|
|
1
|
+
import { t as CommonTextProps } from "../../../types-Bsn62tJB.js";
|
|
2
2
|
export { CommonTextProps };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as TooltipProps, i as TooltipContent, n as Root, o as Trigger, r as Tooltip, t as Provider } from "../../../tooltip-
|
|
1
|
+
import { a as TooltipProps, i as TooltipContent, n as Root, o as Trigger, r as Tooltip, t as Provider } from "../../../tooltip-BxS9HpML.js";
|
|
2
2
|
export { Tooltip, TooltipContent, TooltipProps, Provider as TooltipProvider, Root as TooltipRoot, Trigger as TooltipTrigger };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as cn } from "../../../src-BgCjYazJ.js";
|
|
2
1
|
import { forwardRef } from "react";
|
|
2
|
+
import { twMerge } from "tailwind-merge";
|
|
3
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import { Content, Portal, Provider, Root, Trigger } from "@radix-ui/react-tooltip";
|
|
5
5
|
//#region src/ui/components/tooltip/tooltip.tsx
|
|
@@ -7,7 +7,7 @@ const TooltipContent = /* @__PURE__ */ forwardRef(({ children, className, ...pro
|
|
|
7
7
|
return /* @__PURE__ */ jsx(Content, {
|
|
8
8
|
ref,
|
|
9
9
|
...props,
|
|
10
|
-
className:
|
|
10
|
+
className: twMerge("z-50 overflow-hidden rounded-md text-sm", "border border-gray-200 bg-gray-50 text-gray-900 dark:border-slate-500 dark:bg-slate-600 dark:text-slate-100", "px-3 py-1.5 shadow-md", "data-[state=open]:animate-zoom-in", "data-[state=closed]:animate-zoom-out", "data-[side=bottom]:animate-slide-in-from-top", "data-[side=left]:animate-slide-in-from-right", "data-[side=right]:animate-slide-in-from-left", "data-[side=top]:animate-slide-in-from-bottom", className),
|
|
11
11
|
children
|
|
12
12
|
});
|
|
13
13
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.js","names":["
|
|
1
|
+
{"version":3,"file":"tooltip.js","names":["twMerge","Content","Portal","Provider","Root","Trigger","forwardRef","TooltipContent","children","className","props","ref","Tooltip","content","triggerAsChild","delayDuration","open","defaultOpen","onOpenChange","rest","undefined","TooltipProvider","TooltipRoot","TooltipTrigger"],"sources":["../../../../src/ui/components/tooltip/tooltip.tsx"],"sourcesContent":["import { twMerge } from \"tailwind-merge\";\nimport type {\n TooltipContentProps,\n TooltipProps as TooltipPrimitiveProps,\n} from \"@radix-ui/react-tooltip\";\nimport {\n Content,\n Portal,\n Provider,\n Root,\n Trigger,\n} from \"@radix-ui/react-tooltip\";\nimport { forwardRef } from \"react\";\n\ninterface TooltipProps\n extends TooltipPrimitiveProps, Omit<TooltipContentProps, \"content\"> {\n content: React.ReactNode;\n className?: string;\n triggerAsChild?: boolean;\n}\n\nconst TooltipContent = forwardRef<\n React.ElementRef<typeof Content>,\n TooltipContentProps\n>(({ children, className, ...props }, ref) => {\n return (\n <Content\n ref={ref}\n {...props}\n className={twMerge(\n // Base styles\n \"z-50 overflow-hidden rounded-md text-sm\",\n // Colors & Border\n \"border border-gray-200 bg-gray-50 text-gray-900 dark:border-slate-500 dark:bg-slate-600 dark:text-slate-100\",\n // Padding & Shadow\n \"px-3 py-1.5 shadow-md\",\n // Animations\n \"data-[state=open]:animate-zoom-in\",\n \"data-[state=closed]:animate-zoom-out\",\n // Slide animations based on position\n \"data-[side=bottom]:animate-slide-in-from-top\",\n \"data-[side=left]:animate-slide-in-from-right\",\n \"data-[side=right]:animate-slide-in-from-left\",\n \"data-[side=top]:animate-slide-in-from-bottom\",\n className,\n )}\n >\n {children}\n </Content>\n );\n});\n\nconst Tooltip: React.FC<TooltipProps> = ({\n content,\n children,\n triggerAsChild = false,\n delayDuration = 0,\n ...props\n}) => {\n const { open, defaultOpen, onOpenChange, ...rest } = props;\n\n return (\n <Root\n defaultOpen={defaultOpen}\n delayDuration={delayDuration}\n onOpenChange={onOpenChange}\n open={open}\n >\n <Trigger\n asChild={triggerAsChild}\n type={triggerAsChild ? undefined : \"button\"} // Prevent form submission when default trigger is clicked\n >\n {children}\n </Trigger>\n <Portal>\n <TooltipContent sideOffset={3} {...rest}>\n {content}\n </TooltipContent>\n </Portal>\n </Root>\n );\n};\n\nexport {\n Tooltip,\n TooltipContent,\n Provider as TooltipProvider,\n Root as TooltipRoot,\n Trigger as TooltipTrigger,\n type TooltipProps,\n};\n"],"mappings":";;;;;AAqBA,MAAMO,iBAAiBD,4BAGpB,EAAEE,UAAUC,WAAW,GAAGC,SAASC,QAAQ;AAC5C,QACE,oBAAC,SAAD;EACOA;EACL,GAAID;EACJ,WAAWV,QAET,2CAEA,+GAEA,yBAEA,qCACA,wCAEA,gDACA,gDACA,gDACA,gDACAS,UACD;EAEAD;EACO,CAAA;EAEZ;AAEF,MAAMI,WAAmC,EACvCC,SACAL,UACAM,iBAAiB,OACjBC,gBAAgB,GAChB,GAAGL,YACC;CACJ,MAAM,EAAEM,MAAMC,aAAaC,cAAc,GAAGC,SAAST;AAErD,QACE,qBAAC,MAAD;EACeO;EACEF;EACDG;EACRF;YAJR,CAME,oBAAC,SAAD;GACE,SAASF;GACT,MAAMA,iBAAiBM,KAAAA,IAAY;GAElCZ;GACM,CAAA,EACT,oBAAC,QAAD,EAAA,UACE,oBAAC,gBAAD;GAAgB,YAAY;GAAG,GAAIW;aAChCN;GACa,CAAA,EACV,CAAA,CACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { C as SelectProps, S as SelectOption, b as RadioGroupProps, v as IdAutocompleteOption, x as SelectBaseProps, y as IdAutocompleteProps } from "../../index
|
|
1
|
+
import { C as SelectProps, S as SelectOption, b as RadioGroupProps, v as IdAutocompleteOption, x as SelectBaseProps, y as IdAutocompleteProps } from "../../index--hDSfvJT.js";
|
|
2
2
|
export { IdAutocompleteOption, IdAutocompleteProps, RadioGroupProps, SelectBaseProps, SelectOption, SelectProps };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as ValueTransformer } from "../../../value-transformer-
|
|
1
|
+
import { t as ValueTransformer } from "../../../value-transformer-DQjqtNih.js";
|
|
2
2
|
export { ValueTransformer };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as withFieldValidation, t as ValidationOptions } from "../../../with-field-validation-
|
|
1
|
+
import { n as withFieldValidation, t as ValidationOptions } from "../../../with-field-validation-Di5D8vU-.js";
|
|
2
2
|
export { ValidationOptions, withFieldValidation };
|
|
@@ -5,7 +5,7 @@ import { Controller, useFormContext, useFormState } from "react-hook-form";
|
|
|
5
5
|
const withFieldValidation = (Component, options) => {
|
|
6
6
|
return /* @__PURE__ */ forwardRef(({ value, name, showErrorOnBlur, showErrorOnChange, validators: customValidators, ...props }, ref) => {
|
|
7
7
|
const { onChange: onChangeProp, onBlur: onBlurProp } = props;
|
|
8
|
-
const { control, formState: { errors: formErrors, defaultValues }, trigger, setValue, getValues } = useFormContext();
|
|
8
|
+
const { control, formState: { errors: formErrors, defaultValues: _defaultValues }, trigger, setValue, getValues } = useFormContext();
|
|
9
9
|
const { submitCount } = useFormState();
|
|
10
10
|
if (!name) throw new Error(`[Field: ${Component.displayName}] The name prop is required.`);
|
|
11
11
|
const errors = [...formErrors[name]?.types ? Object.values(formErrors[name].types ?? []) : []];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-field-validation.js","names":["forwardRef","useEffect","useState","Controller","useFormContext","useFormState","withFieldValidation","Component","options","value","name","showErrorOnBlur","showErrorOnChange","validators","customValidators","props","ref","onChange","onChangeProp","onBlur","onBlurProp","control","formState","errors","formErrors","defaultValues","trigger","setValue","getValues","submitCount","Error","displayName","types","Object","values","length","push","required","initialized","setInitialized","undefined","console","warn","defaultValue","disabled","field","_","onBlurController","internalValue","rest","onBlurCallback","event","onChangeCallback","hasOwn","target","Event","HTMLElement","formFieldRef","combinedRef","element","current","message","pattern","RegExp","maxLength","minLength","minValue","min","maxValue","max","validate","fromEntries","Array","isArray","map","error","index","validations","entries","key","validatorFactory","propsWithValues","validator"],"sources":["../../../../src/ui/components/with-field-validation/with-field-validation.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n ComponentType,\n ElementRef,\n FocusEvent,\n ForwardRefExoticComponent,\n PropsWithoutRef,\n RefAttributes,\n} from \"react\";\nimport { forwardRef, useEffect, useState } from \"react\";\nimport { Controller, useFormContext, useFormState } from \"react-hook-form\";\nimport type {\n FieldErrorHandling,\n InputBaseProps,\n ValidatorHandler,\n} from \"../../types.js\";\n\ninterface PossibleProps extends InputBaseProps<unknown>, FieldErrorHandling {\n pattern?: RegExp;\n maxLength?: number;\n minLength?: number;\n minValue?: number;\n maxValue?: number;\n}\n\ninterface PossibleEventsProps {\n onChange?: (event: ChangeEvent<unknown>) => unknown;\n onBlur?: (event: FocusEvent<unknown>) => unknown;\n}\n\nexport interface ValidationOptions<T> {\n validations?: Record<string, (parentProps: T) => ValidatorHandler>;\n transformValue?: (value: any) => any;\n}\n\nexport const withFieldValidation = <\n T extends PossibleProps,\n R extends ElementRef<any> = ElementRef<any>,\n>(\n Component: ComponentType<T>,\n options?: ValidationOptions<T>,\n): ForwardRefExoticComponent<PropsWithoutRef<T> & RefAttributes<R>> => {\n return forwardRef<R, T>(\n (\n {\n value,\n name,\n showErrorOnBlur,\n showErrorOnChange,\n validators: customValidators,\n ...props\n },\n ref,\n ) => {\n const { onChange: onChangeProp, onBlur: onBlurProp } =\n props as PossibleEventsProps;\n const {\n control,\n formState: { errors: formErrors, defaultValues },\n trigger,\n setValue,\n getValues,\n } = useFormContext();\n const { submitCount } = useFormState();\n\n if (!name) {\n throw new Error(\n `[Field: ${Component.displayName}] The name prop is required.`,\n );\n }\n\n const errors = [\n ...(formErrors[name]?.types\n ? (Object.values(formErrors[name].types ?? []) as string[])\n : []),\n ];\n if (errors.length === 0 && !!formErrors[name]) {\n // the field is invalid but no error message was provided\n errors.push(\"Invalid value\");\n }\n\n useEffect(() => {\n if (submitCount > 0) {\n void trigger(name);\n }\n // we should trigger a re-validation after the form is submitted, the errors are shown\n // and the required prop is changed. Other deps can not be added, otherwise a revalidation\n // will be triggered unnecessarily\n }, [props.required]);\n\n useEffect(() => {\n // if custom errors are provided, then we need to trigger the validation\n // otherwise the errors will not be shown till the form is submitted\n if (props.errors && props.errors.length > 0) {\n void trigger(name);\n }\n }, [name, props.errors, trigger]);\n\n const [initialized, setInitialized] = useState(false);\n useEffect(() => {\n if (initialized) {\n setValue(name, value);\n }\n setInitialized(true);\n // initialized can not be in the dependencies because it would cause\n // a change of the value on initial render\n }, [name, value]);\n\n if (value !== undefined && !onChangeProp) {\n console.warn(\n `[Field: ${name}] Value prop provided without onChange so it will be ignored. Use disabled/readOnly if you want to prevent changes.`,\n );\n }\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={(value ?? props.defaultValue) as unknown}\n disabled={props.disabled}\n render={({\n field: {\n // just preventing that onChange is included in the rest of the props\n onChange: _,\n onBlur: onBlurController,\n value: internalValue,\n ...rest\n },\n }) => {\n // ignore eslint that flags an error here:\n // React Hook \"useCallback\" cannot be called inside a callback.\n // React Hooks must be called in a React function component or a custom React Hook function.\n\n const onBlurCallback = (event: FocusEvent<HTMLInputElement>) => {\n if (showErrorOnBlur) {\n void trigger(name);\n } else {\n onBlurController(); // default behavior\n }\n\n // trigger parent onBlur\n if (onBlurProp) {\n onBlurProp(event);\n }\n };\n\n // ignore eslint that flags an error here:\n // React Hook \"useCallback\" cannot be called inside a callback.\n // React Hooks must be called in a React function component or a custom React Hook function.\n\n const onChangeCallback = (event: ChangeEvent<HTMLInputElement>) => {\n // update value state\n if (onChangeProp) {\n if (Object.hasOwn(event, \"target\")) {\n // it is probably an actual event\n setValue(name, event.target.value);\n } else {\n // it is a custom onChange and it pass the value directly\n setValue(name, event);\n }\n\n // the fields is controlled by the parent\n onChangeProp(event);\n } else {\n // sometimes the onChange is overridden by the parent and use the new value as parameter instead of event\n let value: unknown = event;\n if (\n event instanceof Event ||\n event.target instanceof HTMLElement\n ) {\n value = event.target.value;\n }\n setValue(name, value); // default behavior\n }\n\n // now let's validate the field\n if (\n showErrorOnChange === undefined &&\n showErrorOnBlur === undefined\n ) {\n // use form validation mode...\n // if previously validated, then validate on change\n if (submitCount > 0) {\n void trigger(name);\n }\n } else {\n // default validation behavior was overridden\n if (showErrorOnChange) {\n void trigger(name);\n }\n }\n };\n\n // extract ref from rest\n const { ref: formFieldRef } = rest;\n\n // create a combined ref\n const combinedRef = (element: R) => {\n // apply external ref if exists\n if (typeof ref === \"function\") {\n ref(element);\n } else if (ref) {\n ref.current = element;\n }\n // apply field ref\n formFieldRef(element);\n };\n\n return (\n <Component\n {...(props as unknown as T)}\n {...rest}\n value={internalValue as unknown}\n onBlur={onBlurCallback}\n onChange={onChangeCallback}\n errors={errors}\n ref={combinedRef}\n />\n );\n }}\n rules={{\n ...(props.required\n ? {\n required: {\n value: props.required,\n message: \"This field is required\",\n },\n }\n : {\n required: undefined,\n }),\n ...(props.pattern && {\n pattern: {\n value: new RegExp(props.pattern),\n message: \"This field does not match the required pattern\",\n },\n }),\n ...(props.maxLength !== undefined && props.maxLength >= 0\n ? {\n maxLength: {\n value: props.maxLength,\n message: `This field must be at most ${props.maxLength} characters`,\n },\n }\n : {\n maxLength: undefined,\n }),\n ...(props.minLength !== undefined && props.minLength >= 0\n ? {\n minLength: {\n value: props.minLength,\n message: `This field must be at least ${props.minLength} characters`,\n },\n }\n : {\n minLength: undefined,\n }),\n ...(props.minValue && {\n min: {\n value: props.minValue,\n message: `This field must be greater than or equal to ${props.minValue}`,\n },\n }),\n ...(props.maxValue && {\n max: {\n value: props.maxValue,\n message: `This field must be less than or equal to ${props.maxValue}`,\n },\n }),\n validate: {\n // custom errors provided as props\n ...(props.errors\n ? Object.fromEntries(\n Array.isArray(props.errors)\n ? props.errors.map((error, index) => [\n `_propError${index}`,\n () => error,\n ])\n : [],\n )\n : {}),\n // built in validations by the field in the library\n ...(options?.validations\n ? Object.fromEntries(\n Object.entries(options.validations).map(\n ([key, validatorFactory]) => {\n const propsWithValues = {\n value: getValues(name) as unknown, // get the actual value of the field in the form\n name,\n showErrorOnBlur,\n showErrorOnChange,\n ...props,\n };\n return [\n key,\n validatorFactory(propsWithValues as unknown as T),\n ];\n },\n ),\n )\n : {}),\n // custom validations by the user/developer\n ...(customValidators !== undefined\n ? Object.fromEntries(\n (Array.isArray(customValidators)\n ? customValidators\n : [customValidators]\n ).map((validator, index) => [\n `customValidation${index}`,\n validator,\n ]),\n )\n : {}),\n },\n }}\n />\n );\n },\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"with-field-validation.js","names":["forwardRef","useEffect","useState","Controller","useFormContext","useFormState","withFieldValidation","Component","options","value","name","showErrorOnBlur","showErrorOnChange","validators","customValidators","props","ref","onChange","onChangeProp","onBlur","onBlurProp","control","formState","errors","formErrors","defaultValues","_defaultValues","trigger","setValue","getValues","submitCount","Error","displayName","types","Object","values","length","push","required","initialized","setInitialized","undefined","console","warn","defaultValue","disabled","field","_","onBlurController","internalValue","rest","onBlurCallback","event","onChangeCallback","hasOwn","target","Event","HTMLElement","formFieldRef","combinedRef","element","current","message","pattern","RegExp","maxLength","minLength","minValue","min","maxValue","max","validate","fromEntries","Array","isArray","map","error","index","validations","entries","key","validatorFactory","propsWithValues","validator"],"sources":["../../../../src/ui/components/with-field-validation/with-field-validation.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n ComponentType,\n ElementRef,\n FocusEvent,\n ForwardRefExoticComponent,\n PropsWithoutRef,\n RefAttributes,\n} from \"react\";\nimport { forwardRef, useEffect, useState } from \"react\";\nimport { Controller, useFormContext, useFormState } from \"react-hook-form\";\nimport type {\n FieldErrorHandling,\n InputBaseProps,\n ValidatorHandler,\n} from \"../../types.js\";\n\ninterface PossibleProps extends InputBaseProps<unknown>, FieldErrorHandling {\n pattern?: RegExp;\n maxLength?: number;\n minLength?: number;\n minValue?: number;\n maxValue?: number;\n}\n\ninterface PossibleEventsProps {\n onChange?: (event: ChangeEvent<unknown>) => unknown;\n onBlur?: (event: FocusEvent<unknown>) => unknown;\n}\n\nexport interface ValidationOptions<T> {\n validations?: Record<string, (parentProps: T) => ValidatorHandler>;\n transformValue?: (value: any) => any;\n}\n\nexport const withFieldValidation = <\n T extends PossibleProps,\n R extends ElementRef<any> = ElementRef<any>,\n>(\n Component: ComponentType<T>,\n options?: ValidationOptions<T>,\n): ForwardRefExoticComponent<PropsWithoutRef<T> & RefAttributes<R>> => {\n return forwardRef<R, T>(\n (\n {\n value,\n name,\n showErrorOnBlur,\n showErrorOnChange,\n validators: customValidators,\n ...props\n },\n ref,\n ) => {\n const { onChange: onChangeProp, onBlur: onBlurProp } =\n props as PossibleEventsProps;\n const {\n control,\n formState: { errors: formErrors, defaultValues: _defaultValues },\n trigger,\n setValue,\n getValues,\n } = useFormContext();\n const { submitCount } = useFormState();\n\n if (!name) {\n throw new Error(\n `[Field: ${Component.displayName}] The name prop is required.`,\n );\n }\n\n const errors = [\n ...(formErrors[name]?.types\n ? (Object.values(formErrors[name].types ?? []) as string[])\n : []),\n ];\n if (errors.length === 0 && !!formErrors[name]) {\n // the field is invalid but no error message was provided\n errors.push(\"Invalid value\");\n }\n\n useEffect(() => {\n if (submitCount > 0) {\n void trigger(name);\n }\n // we should trigger a re-validation after the form is submitted, the errors are shown\n // and the required prop is changed. Other deps can not be added, otherwise a revalidation\n // will be triggered unnecessarily\n }, [props.required]);\n\n useEffect(() => {\n // if custom errors are provided, then we need to trigger the validation\n // otherwise the errors will not be shown till the form is submitted\n if (props.errors && props.errors.length > 0) {\n void trigger(name);\n }\n }, [name, props.errors, trigger]);\n\n const [initialized, setInitialized] = useState(false);\n useEffect(() => {\n if (initialized) {\n setValue(name, value);\n }\n setInitialized(true);\n // initialized can not be in the dependencies because it would cause\n // a change of the value on initial render\n }, [name, value]);\n\n if (value !== undefined && !onChangeProp) {\n console.warn(\n `[Field: ${name}] Value prop provided without onChange so it will be ignored. Use disabled/readOnly if you want to prevent changes.`,\n );\n }\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={(value ?? props.defaultValue) as unknown}\n disabled={props.disabled}\n render={({\n field: {\n // just preventing that onChange is included in the rest of the props\n onChange: _,\n onBlur: onBlurController,\n value: internalValue,\n ...rest\n },\n }) => {\n // ignore eslint that flags an error here:\n // React Hook \"useCallback\" cannot be called inside a callback.\n // React Hooks must be called in a React function component or a custom React Hook function.\n\n const onBlurCallback = (event: FocusEvent<HTMLInputElement>) => {\n if (showErrorOnBlur) {\n void trigger(name);\n } else {\n onBlurController(); // default behavior\n }\n\n // trigger parent onBlur\n if (onBlurProp) {\n onBlurProp(event);\n }\n };\n\n // ignore eslint that flags an error here:\n // React Hook \"useCallback\" cannot be called inside a callback.\n // React Hooks must be called in a React function component or a custom React Hook function.\n\n const onChangeCallback = (event: ChangeEvent<HTMLInputElement>) => {\n // update value state\n if (onChangeProp) {\n if (Object.hasOwn(event, \"target\")) {\n // it is probably an actual event\n setValue(name, event.target.value);\n } else {\n // it is a custom onChange and it pass the value directly\n setValue(name, event);\n }\n\n // the fields is controlled by the parent\n onChangeProp(event);\n } else {\n // sometimes the onChange is overridden by the parent and use the new value as parameter instead of event\n let value: unknown = event;\n if (\n event instanceof Event ||\n event.target instanceof HTMLElement\n ) {\n value = event.target.value;\n }\n setValue(name, value); // default behavior\n }\n\n // now let's validate the field\n if (\n showErrorOnChange === undefined &&\n showErrorOnBlur === undefined\n ) {\n // use form validation mode...\n // if previously validated, then validate on change\n if (submitCount > 0) {\n void trigger(name);\n }\n } else {\n // default validation behavior was overridden\n if (showErrorOnChange) {\n void trigger(name);\n }\n }\n };\n\n // extract ref from rest\n const { ref: formFieldRef } = rest;\n\n // create a combined ref\n const combinedRef = (element: R) => {\n // apply external ref if exists\n if (typeof ref === \"function\") {\n ref(element);\n } else if (ref) {\n ref.current = element;\n }\n // apply field ref\n formFieldRef(element);\n };\n\n return (\n <Component\n {...(props as unknown as T)}\n {...rest}\n value={internalValue as unknown}\n onBlur={onBlurCallback}\n onChange={onChangeCallback}\n errors={errors}\n ref={combinedRef}\n />\n );\n }}\n rules={{\n ...(props.required\n ? {\n required: {\n value: props.required,\n message: \"This field is required\",\n },\n }\n : {\n required: undefined,\n }),\n ...(props.pattern && {\n pattern: {\n value: new RegExp(props.pattern),\n message: \"This field does not match the required pattern\",\n },\n }),\n ...(props.maxLength !== undefined && props.maxLength >= 0\n ? {\n maxLength: {\n value: props.maxLength,\n message: `This field must be at most ${props.maxLength} characters`,\n },\n }\n : {\n maxLength: undefined,\n }),\n ...(props.minLength !== undefined && props.minLength >= 0\n ? {\n minLength: {\n value: props.minLength,\n message: `This field must be at least ${props.minLength} characters`,\n },\n }\n : {\n minLength: undefined,\n }),\n ...(props.minValue && {\n min: {\n value: props.minValue,\n message: `This field must be greater than or equal to ${props.minValue}`,\n },\n }),\n ...(props.maxValue && {\n max: {\n value: props.maxValue,\n message: `This field must be less than or equal to ${props.maxValue}`,\n },\n }),\n validate: {\n // custom errors provided as props\n ...(props.errors\n ? Object.fromEntries(\n Array.isArray(props.errors)\n ? props.errors.map((error, index) => [\n `_propError${index}`,\n () => error,\n ])\n : [],\n )\n : {}),\n // built in validations by the field in the library\n ...(options?.validations\n ? Object.fromEntries(\n Object.entries(options.validations).map(\n ([key, validatorFactory]) => {\n const propsWithValues = {\n value: getValues(name) as unknown, // get the actual value of the field in the form\n name,\n showErrorOnBlur,\n showErrorOnChange,\n ...props,\n };\n return [\n key,\n validatorFactory(propsWithValues as unknown as T),\n ];\n },\n ),\n )\n : {}),\n // custom validations by the user/developer\n ...(customValidators !== undefined\n ? Object.fromEntries(\n (Array.isArray(customValidators)\n ? customValidators\n : [customValidators]\n ).map((validator, index) => [\n `customValidation${index}`,\n validator,\n ]),\n )\n : {}),\n },\n }}\n />\n );\n },\n );\n};\n"],"mappings":";;;;AAmCA,MAAaM,uBAIXC,WACAC,YACqE;AACrE,QAAOR,4BAEH,EACES,OACAC,MACAC,iBACAC,mBACAC,YAAYC,kBACZ,GAAGC,SAELC,QACG;EACH,MAAM,EAAEC,UAAUC,cAAcC,QAAQC,eACtCL;EACF,MAAM,EACJM,SACAC,WAAW,EAAEC,QAAQC,YAAYC,eAAeC,kBAChDC,SACAC,UACAC,cACEzB,gBAAgB;EACpB,MAAM,EAAE0B,gBAAgBzB,cAAc;AAEtC,MAAI,CAACK,KACH,OAAM,IAAIqB,MACR,WAAWxB,UAAUyB,YAAW,8BACjC;EAGH,MAAMT,SAAS,CACb,GAAIC,WAAWd,OAAOuB,QACjBC,OAAOC,OAAOX,WAAWd,MAAMuB,SAAS,EAAE,CAAC,GAC5C,EAAE,CACP;AACD,MAAIV,OAAOa,WAAW,KAAK,CAAC,CAACZ,WAAWd,MAEtCa,QAAOc,KAAK,gBAAgB;AAG9BpC,kBAAgB;AACd,OAAI6B,cAAc,EACXH,SAAQjB,KAAK;KAKnB,CAACK,MAAMuB,SAAS,CAAC;AAEpBrC,kBAAgB;AAGd,OAAIc,MAAMQ,UAAUR,MAAMQ,OAAOa,SAAS,EACnCT,SAAQjB,KAAK;KAEnB;GAACA;GAAMK,MAAMQ;GAAQI;GAAQ,CAAC;EAEjC,MAAM,CAACY,aAAaC,kBAAkBtC,SAAS,MAAM;AACrDD,kBAAgB;AACd,OAAIsC,YACFX,UAASlB,MAAMD,MAAM;AAEvB+B,kBAAe,KAAK;KAGnB,CAAC9B,MAAMD,MAAM,CAAC;AAEjB,MAAIA,UAAUgC,KAAAA,KAAa,CAACvB,aAC1BwB,SAAQC,KACN,WAAWjC,KAAI,qHAChB;AAGH,SACE,oBAAC,YAAD;GACWW;GACHX;GACN,cAAeD,SAASM,MAAM6B;GAC9B,UAAU7B,MAAM8B;GAChB,SAAS,EACPC,OAAO,EAEL7B,UAAU8B,GACV5B,QAAQ6B,kBACRvC,OAAOwC,eACP,GAAGC,aAED;IAKJ,MAAMC,kBAAkBC,UAAwC;AAC9D,SAAIzC,gBACGgB,SAAQjB,KAAK;SAElBsC,mBAAkB;AAIpB,SAAI5B,WACFA,YAAWgC,MAAM;;IAQrB,MAAMC,oBAAoBD,UAAyC;AAEjE,SAAIlC,cAAc;AAChB,UAAIgB,OAAOoB,OAAOF,OAAO,SAAS,CAEhCxB,UAASlB,MAAM0C,MAAMG,OAAO9C,MAAM;UAGlCmB,UAASlB,MAAM0C,MAAM;AAIvBlC,mBAAakC,MAAM;YACd;MAEL,IAAI3C,QAAiB2C;AACrB,UACEA,iBAAiBI,SACjBJ,MAAMG,kBAAkBE,YAExBhD,SAAQ2C,MAAMG,OAAO9C;AAEvBmB,eAASlB,MAAMD,MAAM;;AAIvB,SACEG,sBAAsB6B,KAAAA,KACtB9B,oBAAoB8B,KAAAA;UAIhBX,cAAc,EACXH,SAAQjB,KAAK;gBAIhBE,kBACGe,SAAQjB,KAAK;;IAMxB,MAAM,EAAEM,KAAK0C,iBAAiBR;IAG9B,MAAMS,eAAeC,YAAe;AAElC,SAAI,OAAO5C,QAAQ,WACjBA,KAAI4C,QAAQ;cACH5C,IACTA,KAAI6C,UAAUD;AAGhBF,kBAAaE,QAAQ;;AAGvB,WACE,oBAAC,WAAD;KACE,GAAK7C;KACL,GAAImC;KACJ,OAAOD;KACP,QAAQE;KACR,UAAUE;KACF9B;KACR,KAAKoC;KACL,CAAA;;GAGN,OAAO;IACL,GAAI5C,MAAMuB,WACN,EACEA,UAAU;KACR7B,OAAOM,MAAMuB;KACbwB,SAAS;KACX,EACD,GACD,EACExB,UAAUG,KAAAA,GACX;IACL,GAAI1B,MAAMgD,WAAW,EACnBA,SAAS;KACPtD,OAAO,IAAIuD,OAAOjD,MAAMgD,QAAQ;KAChCD,SAAS;KACX,EACD;IACD,GAAI/C,MAAMkD,cAAcxB,KAAAA,KAAa1B,MAAMkD,aAAa,IACpD,EACEA,WAAW;KACTxD,OAAOM,MAAMkD;KACbH,SAAS,8BAA8B/C,MAAMkD,UAAS;KACxD,EACD,GACD,EACEA,WAAWxB,KAAAA,GACZ;IACL,GAAI1B,MAAMmD,cAAczB,KAAAA,KAAa1B,MAAMmD,aAAa,IACpD,EACEA,WAAW;KACTzD,OAAOM,MAAMmD;KACbJ,SAAS,+BAA+B/C,MAAMmD,UAAS;KACzD,EACD,GACD,EACEA,WAAWzB,KAAAA,GACZ;IACL,GAAI1B,MAAMoD,YAAY,EACpBC,KAAK;KACH3D,OAAOM,MAAMoD;KACbL,SAAS,+CAA+C/C,MAAMoD;KAChE,EACD;IACD,GAAIpD,MAAMsD,YAAY,EACpBC,KAAK;KACH7D,OAAOM,MAAMsD;KACbP,SAAS,4CAA4C/C,MAAMsD;KAC7D,EACD;IACDE,UAAU;KAER,GAAIxD,MAAMQ,SACNW,OAAOsC,YACLC,MAAMC,QAAQ3D,MAAMQ,OAAO,GACvBR,MAAMQ,OAAOoD,KAAKC,OAAOC,UAAU,CACjC,aAAaA,eACPD,MACP,CAAC,GACF,EACN,CAAC,GACD,EAAE;KAEN,GAAIpE,SAASsE,cACT5C,OAAOsC,YACLtC,OAAO6C,QAAQvE,QAAQsE,YAAY,CAACH,KACjC,CAACK,KAAKC,sBAAsB;AAQ3B,aAAO,CACLD,KACAC,iBATsB;OACtBxE,OAAOoB,UAAUnB,KAAgB;OACjCA;OACAC;OACAC;OACA,GAAGG;OACJ,CAGkD,CAClD;OAGP,CAAC,GACD,EAAE;KAEN,GAAID,qBAAqB2B,KAAAA,IACrBP,OAAOsC,aACJC,MAAMC,QAAQ5D,iBAAiB,GAC5BA,mBACA,CAACA,iBAAiB,EACpB6D,KAAKQ,WAAWN,UAAU,CAC1B,mBAAmBA,SACnBM,UACD,CACH,CAAC,GACD,EAAE;KACR;IACD;GACD,CAAA;GAGP"}
|