@ryuzaki13/react-foundation-ui 1.0.7 → 1.0.11
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/advanced-search/index.js +11 -11
- package/dist/badge/index.js +1 -1
- package/dist/base-table/index.js +1 -1
- package/dist/button/index.js +2 -23
- package/dist/check-box/index.js +1 -1
- package/dist/chunks/{CalendarView-DjeTJkTT.js → CalendarView-DCQjO2ho.js} +2 -2
- package/dist/chunks/{CalendarView-DjeTJkTT.js.map → CalendarView-DCQjO2ho.js.map} +1 -1
- package/dist/chunks/{odata-DSW7z3nh.js → SelectOptionContent-lfEtHXfO.js} +404 -381
- package/dist/chunks/SelectOptionContent-lfEtHXfO.js.map +1 -0
- package/dist/chunks/{TextEditorLexicalClient-uvFboXlh.js → TextEditorLexicalClient-Bca3FOUs.js} +8 -8
- package/dist/chunks/{TextEditorLexicalClient-uvFboXlh.js.map → TextEditorLexicalClient-Bca3FOUs.js.map} +1 -1
- package/dist/chunks/{BadgeList-DYgun2rf.js → badge-BfbLPk0z.js} +2 -2
- package/dist/chunks/badge-BfbLPk0z.js.map +1 -0
- package/dist/chunks/{base-table-CoQlKABk.js → base-table-CiYSRI_J.js} +4 -4
- package/dist/chunks/{base-table-CoQlKABk.js.map → base-table-CiYSRI_J.js.map} +1 -1
- package/dist/chunks/button-CC0Jdx1j.js +72 -0
- package/dist/chunks/button-CC0Jdx1j.js.map +1 -0
- package/dist/chunks/{CheckBox-BowNqqd3.js → check-box-BowNqqd3.js} +1 -1
- package/dist/chunks/check-box-BowNqqd3.js.map +1 -0
- package/dist/chunks/{DropdownMenu-DQeR3y7M.js → context-menu-DQeR3y7M.js} +1 -1
- package/dist/chunks/context-menu-DQeR3y7M.js.map +1 -0
- package/dist/chunks/{DateInput-CaKGXluL.js → date-input-DjAQ75n9.js} +5 -5
- package/dist/chunks/date-input-DjAQ75n9.js.map +1 -0
- package/dist/chunks/{DateRangePresetSelect-UgsfaOeM.js → date-range-preset-select-UgsfaOeM.js} +1 -1
- package/dist/chunks/date-range-preset-select-UgsfaOeM.js.map +1 -0
- package/dist/chunks/{Flex-DUYSL5TE.js → flex-CPO6xlPR.js} +38 -33
- package/dist/chunks/{Flex-DUYSL5TE.js.map → flex-CPO6xlPR.js.map} +1 -1
- package/dist/chunks/{Grid-ByIIytjh.js → grid-ByIIytjh.js} +1 -1
- package/dist/chunks/{Grid-ByIIytjh.js.map → grid-ByIIytjh.js.map} +1 -1
- package/dist/chunks/{Input-BYUl3UFn.js → input-CZLUUggm.js} +12 -4
- package/dist/chunks/input-CZLUUggm.js.map +1 -0
- package/dist/chunks/{InputFiles-gIxOPv5y.js → input-files-aB8iaqGk.js} +5 -5
- package/dist/chunks/input-files-aB8iaqGk.js.map +1 -0
- package/dist/chunks/{input-search-BR4LDmyb.js → input-search-eMvnvgV0.js} +2 -2
- package/dist/chunks/{input-search-BR4LDmyb.js.map → input-search-eMvnvgV0.js.map} +1 -1
- package/dist/chunks/{misc-DoqZBMof.js → misc-1PxS8OWD.js} +2 -2
- package/dist/chunks/{misc-DoqZBMof.js.map → misc-1PxS8OWD.js.map} +1 -1
- package/dist/chunks/{modal-ByNRME3b.js → modal-C0j0hEIt.js} +5 -5
- package/dist/chunks/{modal-ByNRME3b.js.map → modal-C0j0hEIt.js.map} +1 -1
- package/dist/chunks/multi-select-r0ekR6Bh.js +541 -0
- package/dist/chunks/multi-select-r0ekR6Bh.js.map +1 -0
- package/dist/chunks/{picker-DGXq3ikg.js → picker-beNX-cW9.js} +11 -11
- package/dist/chunks/{picker-DGXq3ikg.js.map → picker-beNX-cW9.js.map} +1 -1
- package/dist/chunks/{RadioGroup-B9XjkcOy.js → radio-group-B9XjkcOy.js} +1 -1
- package/dist/chunks/radio-group-B9XjkcOy.js.map +1 -0
- package/dist/chunks/select-CFbZS7fx.js +284 -0
- package/dist/chunks/select-CFbZS7fx.js.map +1 -0
- package/dist/chunks/{table-Dc3AqMzP.js → table-BR2VqeEg.js} +2 -2
- package/dist/chunks/{table-Dc3AqMzP.js.map → table-BR2VqeEg.js.map} +1 -1
- package/dist/chunks/{toolbar-BCZNdRXM.js → toolbar-XCDeS2Li.js} +2 -2
- package/dist/chunks/{toolbar-BCZNdRXM.js.map → toolbar-XCDeS2Li.js.map} +1 -1
- package/dist/chunks/{useODataSelectBase-BbeKdq6x.js → useODataSelectBase-BxAvhDww.js} +2 -2
- package/dist/chunks/{useODataSelectBase-BbeKdq6x.js.map → useODataSelectBase-BxAvhDww.js.map} +1 -1
- package/dist/context-menu/index.js +1 -1
- package/dist/date-input/index.js +2 -2
- package/dist/date-range-preset-select/index.js +1 -1
- package/dist/date-time-input/index.js +458 -2
- package/dist/date-time-input/index.js.map +1 -0
- package/dist/detail/index.js +80 -2
- package/dist/detail/index.js.map +1 -0
- package/dist/dialog/index.js +50 -2
- package/dist/dialog/index.js.map +1 -0
- package/dist/disclosure/index.js +49 -2
- package/dist/disclosure/index.js.map +1 -0
- package/dist/drop-zone/index.js +98 -2
- package/dist/drop-zone/index.js.map +1 -0
- package/dist/errors/index.js +1 -1
- package/dist/expandable-action-panel/index.js +82 -2
- package/dist/expandable-action-panel/index.js.map +1 -0
- package/dist/flex/index.js +2 -14
- package/dist/grid/index.js +1 -1
- package/dist/image/index.js +5 -5
- package/dist/input/Input.d.ts +2 -2
- package/dist/input/Input.d.ts.map +1 -1
- package/dist/input/index.js +2 -14
- package/dist/input-date-time/index.js +258 -2
- package/dist/input-date-time/index.js.map +1 -0
- package/dist/input-file/index.js +105 -2
- package/dist/input-file/index.js.map +1 -0
- package/dist/input-files/index.js +1 -1
- package/dist/input-image/index.js +100 -2
- package/dist/input-image/index.js.map +1 -0
- package/dist/input-search/index.js +1 -1
- package/dist/layout-picker/index.js +1171 -2
- package/dist/layout-picker/index.js.map +1 -0
- package/dist/list/index.js +2 -2
- package/dist/listbox/index.js +81 -2
- package/dist/listbox/index.js.map +1 -0
- package/dist/misc/index.js +1 -1
- package/dist/modal/index.js +1 -1
- package/dist/multi-select/index.js +2 -3
- package/dist/notifications/index.js +151 -3
- package/dist/notifications/index.js.map +1 -0
- package/dist/picker/index.js +1 -1
- package/dist/preset-range-date-input/index.js +52 -3
- package/dist/preset-range-date-input/index.js.map +1 -1
- package/dist/preset-select/index.js +1 -1
- package/dist/radio-button/index.js +48 -2
- package/dist/radio-button/index.js.map +1 -0
- package/dist/radio-group/index.js +1 -1
- package/dist/select/index.js +2 -4
- package/dist/simple-table/index.js +1 -1
- package/dist/slider/index.js +695 -2
- package/dist/slider/index.js.map +1 -0
- package/dist/splitter/index.js +168 -2
- package/dist/splitter/index.js.map +1 -0
- package/dist/state-select/index.js +78 -2
- package/dist/state-select/index.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/switch/index.js +81 -2
- package/dist/switch/index.js.map +1 -0
- package/dist/table/index.js +1 -1
- package/dist/table-sorting/index.js +1 -1
- package/dist/tabs/index.js +384 -2
- package/dist/tabs/index.js.map +1 -0
- package/dist/text-editor/index.js +3 -3
- package/dist/text-editor/toolbar/index.js +1 -1
- package/dist/textarea/index.js +44 -2
- package/dist/textarea/index.js.map +1 -0
- package/dist/toggle/index.js +73 -2
- package/dist/toggle/index.js.map +1 -0
- package/dist/toolbar/index.js +2 -3
- package/dist/toolbar/index.js.map +1 -1
- package/dist/tree-select/index.js +569 -89
- package/dist/tree-select/index.js.map +1 -1
- package/dist/tree-table/index.js +1 -1
- package/package.json +5 -304
- package/src/styles/_base.scss +11 -3
- package/src/styles/config/_index.scss +21 -37
- package/src/styles/themes/dark/_default.scss +0 -17
- package/storybook-static/assets/Badge-Cr7bAbxa.css +1 -0
- package/storybook-static/assets/Badge-Q8iX86Mn.js +139 -0
- package/storybook-static/assets/Badge.stories-BEMBzR2f.js +51 -0
- package/storybook-static/assets/Button-BN8Cuwsy.css +1 -0
- package/storybook-static/assets/Button-BUkCW8Zg.js +12 -0
- package/storybook-static/assets/Button-CfX05aoR.js +124 -0
- package/storybook-static/assets/Button.stories-BoNLZb6w.js +75 -0
- package/storybook-static/assets/CheckBox-B1xm2kwz.css +1 -0
- package/storybook-static/assets/CheckBox-CcXGzkSE.js +42 -0
- package/storybook-static/assets/CheckBox-DTSi8Yok.js +2 -0
- package/storybook-static/assets/CheckBox.module-Hr3mvdAC.js +1 -0
- package/storybook-static/assets/CheckBox.stories-Bo53TxC7.js +60 -0
- package/storybook-static/assets/Color-KMSTOMOX-Mbprgrbi.js +1 -0
- package/storybook-static/assets/ContextMenu-DYlSojIE.js +40 -0
- package/storybook-static/assets/ContextMenu.stories-BJr53bsq.js +90 -0
- package/storybook-static/assets/DateInput-Bc-MiPp1.css +1 -0
- package/storybook-static/assets/DateInput-BrmilavO.js +40 -0
- package/storybook-static/assets/DateInput-C72jV86j.js +1 -0
- package/storybook-static/assets/DateInput.stories-0hU_T1iZ.js +115 -0
- package/storybook-static/assets/DateRangePresetSelect-BklzgpCR.js +3 -0
- package/storybook-static/assets/DateRangePresetSelect-C7gJVkMB.js +30 -0
- package/storybook-static/assets/DateRangePresetSelect.stories-DQKDcAdP.js +11 -0
- package/storybook-static/assets/Detail-BKSBSfTO.css +1 -0
- package/storybook-static/assets/Detail-BMu0MY4h.js +40 -0
- package/storybook-static/assets/Detail.stories-CgBJjWQd.js +44 -0
- package/storybook-static/assets/Dialog-M7Uy3LiO.js +40 -0
- package/storybook-static/assets/Dialog.stories-BZ0opvaJ.js +31 -0
- package/storybook-static/assets/Disclosure-BXnfHC6v.js +29 -0
- package/storybook-static/assets/Disclosure-zNgXNDkm.css +1 -0
- package/storybook-static/assets/Disclosure.stories-C7wh6KJU.js +35 -0
- package/storybook-static/assets/DocsRenderer-JROSPFPF-BjXFJaat.js +2 -0
- package/storybook-static/assets/DropZone-C7HIN5ml.css +1 -0
- package/storybook-static/assets/DropZone-cd1aCNT1.js +36 -0
- package/storybook-static/assets/DropZone.stories-CVu731Lk.js +44 -0
- package/storybook-static/assets/DropdownMenu-B97Ad5Dg.js +1 -0
- package/storybook-static/assets/DropdownMenu-BgzIzwzM.css +1 -0
- package/storybook-static/assets/ExpandableActionPanel-D7q9two4.css +1 -0
- package/storybook-static/assets/ExpandableActionPanel.stories-k-eTxMyV.js +20 -0
- package/storybook-static/assets/Flex-BQkqAqL5.js +61 -0
- package/storybook-static/assets/Flex-C_VnI9xY.js +3 -0
- package/storybook-static/assets/Flex-IXK2se1Y.css +1 -0
- package/storybook-static/assets/Flex.stories-C1VO9Ct3.js +300 -0
- package/storybook-static/assets/Grid-Dr3BuEgd.js +61 -0
- package/storybook-static/assets/Grid-K9R_IHaw.css +1 -0
- package/storybook-static/assets/Grid-y8wKyEwc.js +163 -0
- package/storybook-static/assets/Grid.stories-6WUp6Tof.js +495 -0
- package/storybook-static/assets/Input-B7DWcGCL.js +3 -0
- package/storybook-static/assets/Input-BioMOZju.css +1 -0
- package/storybook-static/assets/Input-yly8wxYE.js +39 -0
- package/storybook-static/assets/Input.stories-CkVqvY-C.js +38 -0
- package/storybook-static/assets/InputDateTime-Cv8gmBe0.css +1 -0
- package/storybook-static/assets/InputDateTime-DHirw8rp.js +39 -0
- package/storybook-static/assets/InputDateTime.stories-Dci_81MA.js +35 -0
- package/storybook-static/assets/InputFile-DBFfWIkJ.js +37 -0
- package/storybook-static/assets/InputFile-hNjZ_wlG.css +1 -0
- package/storybook-static/assets/InputFile.stories-Bar27dP5.js +36 -0
- package/storybook-static/assets/InputFiles-ByK52qUe.css +1 -0
- package/storybook-static/assets/InputFiles-DPz7PiOC.js +1 -0
- package/storybook-static/assets/InputFiles-tULKp1KR.js +37 -0
- package/storybook-static/assets/InputFiles.stories-CkZ8et32.js +33 -0
- package/storybook-static/assets/InputImage-C-pnIXhT.css +1 -0
- package/storybook-static/assets/InputImage-D8VckxKl.js +37 -0
- package/storybook-static/assets/InputImage.stories-Dq8ORce3.js +51 -0
- package/storybook-static/assets/LayoutPicker-9tLTatHF.css +1 -0
- package/storybook-static/assets/LayoutPicker-l3XFAkqv.js +65 -0
- package/storybook-static/assets/LayoutPicker.stories-BjUmm2cg.js +449 -0
- package/storybook-static/assets/Listbox-B_6QVPAJ.js +38 -0
- package/storybook-static/assets/Listbox.stories-Cf_ApbmT.js +47 -0
- package/storybook-static/assets/Modal-BL_cTIW7.css +1 -0
- package/storybook-static/assets/Modal-BzienAaa.js +54 -0
- package/storybook-static/assets/Modal.stories-cPIHRa9a.js +180 -0
- package/storybook-static/assets/MultiSelect-CK2D25RA.js +56 -0
- package/storybook-static/assets/MultiSelect-CUQV67Ev.css +1 -0
- package/storybook-static/assets/MultiSelect-CjGBd2pC.js +2 -0
- package/storybook-static/assets/MultiSelect.stories--f_FoBzR.js +29 -0
- package/storybook-static/assets/NotificationsHost-D5Pvn4eu.css +1 -0
- package/storybook-static/assets/NotificationsHost-DKmlmqh0.js +44 -0
- package/storybook-static/assets/NotificationsHost.stories-1bPUJXfm.js +25 -0
- package/storybook-static/assets/ODataMultiSelect-BWUXuzlr.js +53 -0
- package/storybook-static/assets/ODataMultiSelect.stories-DA0f6SUG.js +73 -0
- package/storybook-static/assets/ODataSelect-D7GAFOcM.js +1 -0
- package/storybook-static/assets/ODataSelect-aNdHSjo_.js +52 -0
- package/storybook-static/assets/ODataSelect.stories-CjXA9Y9l.js +73 -0
- package/storybook-static/assets/ODataTreeMultiSelect-DKodulQ8.js +17 -0
- package/storybook-static/assets/ODataTreeMultiSelect.stories-BjRcb4W0.js +24 -0
- package/storybook-static/assets/ODataTreeSelect-Ck8HCh74.js +16 -0
- package/storybook-static/assets/ODataTreeSelect.stories-BgDj08mH.js +21 -0
- package/storybook-static/assets/PeriodSelect-Db7QmUfi.js +35 -0
- package/storybook-static/assets/PeriodSelect.stories-BI6yLRCK.js +23 -0
- package/storybook-static/assets/Popover-DR-r8iC5.js +45 -0
- package/storybook-static/assets/Popover.stories-ReRFMWiO.js +69 -0
- package/storybook-static/assets/PresetRangeDateInput-tSpiPAT9.js +31 -0
- package/storybook-static/assets/PresetRangeDateInput.stories-LVQa2_DG.js +15 -0
- package/storybook-static/assets/RadioButton-C-RjN-wY.css +1 -0
- package/storybook-static/assets/RadioButton-sEzdlL1y.js +38 -0
- package/storybook-static/assets/RadioButton.stories-CR0km0zF.js +36 -0
- package/storybook-static/assets/RadioGroup-BtNCd3Je.js +1 -0
- package/storybook-static/assets/RadioGroup-D-J7t20C.css +1 -0
- package/storybook-static/assets/RadioGroup-DR0H6Z0w.js +42 -0
- package/storybook-static/assets/RadioGroup.stories-FEqmkrs7.js +42 -0
- package/storybook-static/assets/Select-CO4ZHP9h.css +1 -0
- package/storybook-static/assets/Select-CUAevk01.js +57 -0
- package/storybook-static/assets/Select-DYVS7SCZ.js +9 -0
- package/storybook-static/assets/Select.stories-Df_c0IfC.js +37 -0
- package/storybook-static/assets/SelectOptionContent-B7W0Mned.js +1 -0
- package/storybook-static/assets/SerializableSelect-D63xBqOT.js +48 -0
- package/storybook-static/assets/SerializableSelect-DwCnuBgv.js +4 -0
- package/storybook-static/assets/SerializableSelect.stories-BLPXVOtP.js +43 -0
- package/storybook-static/assets/SingleDateTimeInput-mOllNfg2.css +1 -0
- package/storybook-static/assets/SingleDateTimeInput-xMkDodYz.js +53 -0
- package/storybook-static/assets/SingleDateTimeInput.stories-kcuSwx76.js +78 -0
- package/storybook-static/assets/Slider-BHZgpCjC.js +63 -0
- package/storybook-static/assets/Slider.stories-Bias_Soq.js +77 -0
- package/storybook-static/assets/SliderInput-jzFZcWr7.js +58 -0
- package/storybook-static/assets/SliderInput.stories-B7w8bp86.js +67 -0
- package/storybook-static/assets/Sortable-DcmDaPBw.js +72 -0
- package/storybook-static/assets/Sortable.stories-CwhHGCih.js +141 -0
- package/storybook-static/assets/Splitter-Bn7AJiD_.js +83 -0
- package/storybook-static/assets/Splitter-D-LmmQad.css +1 -0
- package/storybook-static/assets/Splitter.stories-CSvjKF-O.js +22 -0
- package/storybook-static/assets/StateSelect-MIGiXD10.js +36 -0
- package/storybook-static/assets/StateSelect-pIMkhj9A.css +1 -0
- package/storybook-static/assets/StateSelect.stories-BGDCnVqb.js +47 -0
- package/storybook-static/assets/Switch-C5zxOq_O.js +36 -0
- package/storybook-static/assets/Switch-DGYGWtPw.css +1 -0
- package/storybook-static/assets/Switch.stories-BmCl_Ts5.js +26 -0
- package/storybook-static/assets/Table-BGvRn9y0.css +1 -0
- package/storybook-static/assets/Table-CoySXvs5.js +197 -0
- package/storybook-static/assets/Table.stories-CA7ARhwC.js +122 -0
- package/storybook-static/assets/Tabs-BLkTB6pp.css +1 -0
- package/storybook-static/assets/Tabs-CQdzU18E.js +72 -0
- package/storybook-static/assets/Tabs.stories-SBWTpiy2.js +58 -0
- package/storybook-static/assets/Textarea-Bo-I0cnE.js +37 -0
- package/storybook-static/assets/Textarea-CPNMR88I.css +1 -0
- package/storybook-static/assets/Textarea.stories-C1wO9PKR.js +27 -0
- package/storybook-static/assets/TimePanel-0-mzaXky.js +1 -0
- package/storybook-static/assets/TimePanel-Bh98qsCo.css +1 -0
- package/storybook-static/assets/TimePanel.stories-C1VM13qN.js +25 -0
- package/storybook-static/assets/Toggle-B9H63WWC.js +37 -0
- package/storybook-static/assets/Toggle-DHulCX3T.css +1 -0
- package/storybook-static/assets/Toggle.stories-CKlGFcZW.js +30 -0
- package/storybook-static/assets/TreeMultiSelect-AXIl2Ge2.js +15 -0
- package/storybook-static/assets/TreeMultiSelect-Ci3bUpmv.js +1 -0
- package/storybook-static/assets/TreeMultiSelect.stories-CXGt4Q_u.js +14 -0
- package/storybook-static/assets/TreePickerBase-Md6Mt9qF.js +19 -0
- package/storybook-static/assets/TreePickerBase-qreyVjhY.css +1 -0
- package/storybook-static/assets/TreeSelect-BWoURakw.js +15 -0
- package/storybook-static/assets/TreeSelect-bOgRYtQQ.js +1 -0
- package/storybook-static/assets/TreeSelect.stories-By0h6wRi.js +16 -0
- package/storybook-static/assets/TreeTable--ZoksUiw.css +1 -0
- package/storybook-static/assets/TreeTable-C52Jh7O_.js +175 -0
- package/storybook-static/assets/TreeTable.stories-BH9Q8NPP.js +83 -0
- package/storybook-static/assets/WithTooltip-7X4HQR7L-DQXHhZoH.js +9 -0
- package/storybook-static/assets/axe-GLfyhAYL.js +20 -0
- package/storybook-static/assets/base-table-BNO0lnTL.css +1 -0
- package/storybook-static/assets/base-table-BSkQBgdx.js +18 -0
- package/storybook-static/assets/blocks-CwEU-ME1.js +285 -0
- package/storybook-static/assets/button-Bl3Hu8CS.js +1 -0
- package/storybook-static/assets/check-box-BrnNQnSi.js +1 -0
- package/storybook-static/assets/chunk-242VQQM5-Dtm7LRbQ.js +1 -0
- package/storybook-static/assets/chunk-3LY4VQVK-BxHCYS2R.js +6 -0
- package/storybook-static/assets/chunk-LITCR56V-euffoZAN.js +18 -0
- package/storybook-static/assets/contextMenu-Do6qEwKB.js +2 -0
- package/storybook-static/assets/date-segments-CzU9k5bl.js +1 -0
- package/storybook-static/assets/error-RVOk7zpw.js +1 -0
- package/storybook-static/assets/file-hArYcyES.js +1 -0
- package/storybook-static/assets/flex-DuYzsEBQ.js +1 -0
- package/storybook-static/assets/floating-ui.react-BR04wkLx.js +1 -0
- package/storybook-static/assets/formatter-L2YTDE3Q-Cdp-Jp2M.js +1 -0
- package/storybook-static/assets/formatters-yIBztcem.js +3 -0
- package/storybook-static/assets/grid-D0WOuGlB.js +1 -0
- package/storybook-static/assets/hooks-BEB2Gqy0.js +5 -0
- package/storybook-static/assets/iframe-SfMJGCsn.js +1117 -0
- package/storybook-static/assets/input-Be5K9_B7.js +1 -0
- package/storybook-static/assets/jsx-runtime-BBQGix-2.js +1 -0
- package/storybook-static/assets/lucide-react-CK2oyDtF.js +1 -0
- package/storybook-static/assets/matchers-JIUQ3HVY-BPS-eazD.js +28 -0
- package/storybook-static/assets/mdx-react-shim-DnKFgFHy.js +1 -0
- package/storybook-static/assets/media-Djn0SUaN.js +1 -0
- package/storybook-static/assets/misc-CPvLzCFJ.js +5 -0
- package/storybook-static/assets/misc-CerLA5Xh.css +1 -0
- package/storybook-static/assets/notifications-Zk996KvR.js +1 -0
- package/storybook-static/assets/odata-C2BNbnc9.js +1 -0
- package/storybook-static/assets/odata-service-8sDCOQ3I.js +1 -0
- package/storybook-static/assets/odataStoryFixtures-BBfdskiC.js +25 -0
- package/storybook-static/assets/picker-BmTTr59E.css +1 -0
- package/storybook-static/assets/picker-De4ZbESe.js +1 -0
- package/storybook-static/assets/popover-BiQHI7Wi.css +1 -0
- package/storybook-static/assets/popover-DWA5VOMQ.js +2 -0
- package/storybook-static/assets/preload-helper-B45gAKPr.js +1 -0
- package/storybook-static/assets/preset-select-DozCGhmu.js +5 -0
- package/storybook-static/assets/react-18-CfpYK14y.js +9 -0
- package/storybook-static/assets/react-BWN-5oQj.js +9 -0
- package/storybook-static/assets/react-dom-CncQzc_h.js +1 -0
- package/storybook-static/assets/select-BPvMbVDe.js +1 -0
- package/storybook-static/assets/slider-39Mty47U.js +2 -0
- package/storybook-static/assets/slider-DMDFRH6B.css +1 -0
- package/storybook-static/assets/sortable-CgCCp3dq.js +1 -0
- package/storybook-static/assets/sortable-DiBavgm0.css +1 -0
- package/storybook-static/assets/syntaxhighlighter-RTCFPKCB-Di6cCrDX.js +6 -0
- package/storybook-static/assets/text-BxA8yj6Z.js +4 -0
- package/storybook-static/assets/theming-DZauqOKI.js +39 -0
- package/storybook-static/assets/treeStoryFixtures-Cd984L7t.js +1 -0
- package/storybook-static/assets/ui-CmVy0trY.js +1 -0
- package/storybook-static/assets/ui-ZWM9zG1I.css +1 -0
- package/storybook-static/assets/ui.module-DS2qtZts.js +1 -0
- package/storybook-static/assets/uiClasses-CZ_HVS3Y.js +1 -0
- package/storybook-static/assets/useODataSelectBase-D33B4x2W.js +1 -0
- package/storybook-static/assets/useODataTreeData-CDdzN-LC.js +1 -0
- package/storybook-static/assets/utils-CReRlw17.js +1 -0
- package/storybook-static/favicon-wrapper.svg +46 -0
- package/storybook-static/favicon.svg +1 -0
- package/storybook-static/iframe.html +709 -0
- package/storybook-static/index.html +146 -0
- package/storybook-static/index.json +1 -0
- package/storybook-static/nunito-sans-bold-italic.woff2 +0 -0
- package/storybook-static/nunito-sans-bold.woff2 +0 -0
- package/storybook-static/nunito-sans-italic.woff2 +0 -0
- package/storybook-static/nunito-sans-regular.woff2 +0 -0
- package/storybook-static/project.json +1 -0
- package/storybook-static/sb-addons/a11y-2/manager-bundle.js +57 -0
- package/storybook-static/sb-addons/docs-1/manager-bundle.js +3 -0
- package/storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +630 -0
- package/storybook-static/sb-common-assets/favicon-wrapper.svg +46 -0
- package/storybook-static/sb-common-assets/favicon.svg +1 -0
- package/storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
- package/storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
- package/storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
- package/storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
- package/storybook-static/sb-manager/globals-runtime.js +76714 -0
- package/storybook-static/sb-manager/globals.js +24 -0
- package/storybook-static/sb-manager/manager-stores.js +23 -0
- package/storybook-static/sb-manager/runtime.js +27451 -0
- package/storybook-static/vite-inject-mocker-entry.js +2 -0
- package/dist/badge/stories/Badge.stories.d.ts +0 -54
- package/dist/badge/stories/Badge.stories.d.ts.map +0 -1
- package/dist/badge/stories/Badge.stories.js +0 -147
- package/dist/badge/stories/Badge.stories.js.map +0 -1
- package/dist/button/index.js.map +0 -1
- package/dist/button/stories/Button.stories.d.ts +0 -69
- package/dist/button/stories/Button.stories.d.ts.map +0 -1
- package/dist/button/stories/Button.stories.js +0 -223
- package/dist/button/stories/Button.stories.js.map +0 -1
- package/dist/check-box/stories/CheckBox.stories.d.ts +0 -58
- package/dist/check-box/stories/CheckBox.stories.d.ts.map +0 -1
- package/dist/check-box/stories/CheckBox.stories.js +0 -150
- package/dist/check-box/stories/CheckBox.stories.js.map +0 -1
- package/dist/chunks/BadgeList-DYgun2rf.js.map +0 -1
- package/dist/chunks/Button-CCWuggdA.js +0 -55
- package/dist/chunks/Button-CCWuggdA.js.map +0 -1
- package/dist/chunks/CheckBox-BowNqqd3.js.map +0 -1
- package/dist/chunks/DateInput-CaKGXluL.js.map +0 -1
- package/dist/chunks/DateRangePresetSelect-UgsfaOeM.js.map +0 -1
- package/dist/chunks/Detail-DHDMsg8q.js +0 -80
- package/dist/chunks/Detail-DHDMsg8q.js.map +0 -1
- package/dist/chunks/Dialog-CFIvGxER.js +0 -50
- package/dist/chunks/Dialog-CFIvGxER.js.map +0 -1
- package/dist/chunks/DisclosureGroup-CfRTkl6Z.js +0 -49
- package/dist/chunks/DisclosureGroup-CfRTkl6Z.js.map +0 -1
- package/dist/chunks/DropZone-DdFdnC9X.js +0 -98
- package/dist/chunks/DropZone-DdFdnC9X.js.map +0 -1
- package/dist/chunks/DropdownMenu-DQeR3y7M.js.map +0 -1
- package/dist/chunks/Input-BYUl3UFn.js.map +0 -1
- package/dist/chunks/InputDateTime-DBkWb0lk.js +0 -258
- package/dist/chunks/InputDateTime-DBkWb0lk.js.map +0 -1
- package/dist/chunks/InputFile-Bo3CN73O.js +0 -105
- package/dist/chunks/InputFile-Bo3CN73O.js.map +0 -1
- package/dist/chunks/InputFiles-gIxOPv5y.js.map +0 -1
- package/dist/chunks/InputImage-k4l1J_tm.js +0 -100
- package/dist/chunks/InputImage-k4l1J_tm.js.map +0 -1
- package/dist/chunks/LabeledExpandableActionPanel-D3kUvmFH.js +0 -82
- package/dist/chunks/LabeledExpandableActionPanel-D3kUvmFH.js.map +0 -1
- package/dist/chunks/Listbox-BZlp5qHz.js +0 -81
- package/dist/chunks/Listbox-BZlp5qHz.js.map +0 -1
- package/dist/chunks/MultiSelect-B0nfMSpS.js +0 -422
- package/dist/chunks/MultiSelect-B0nfMSpS.js.map +0 -1
- package/dist/chunks/NotificationsHost-_icJx4xR.js +0 -151
- package/dist/chunks/NotificationsHost-_icJx4xR.js.map +0 -1
- package/dist/chunks/PresetRangeDateInput-C5HqkOCG.js +0 -53
- package/dist/chunks/PresetRangeDateInput-C5HqkOCG.js.map +0 -1
- package/dist/chunks/RadioButton-D0uA0rX_.js +0 -48
- package/dist/chunks/RadioButton-D0uA0rX_.js.map +0 -1
- package/dist/chunks/RadioGroup-B9XjkcOy.js.map +0 -1
- package/dist/chunks/Select-B6kxgxK2.js +0 -182
- package/dist/chunks/Select-B6kxgxK2.js.map +0 -1
- package/dist/chunks/SelectOptionContent-CI7wq9Oi.js +0 -27
- package/dist/chunks/SelectOptionContent-CI7wq9Oi.js.map +0 -1
- package/dist/chunks/SerializableSelect-CVGFjCGK.js +0 -33
- package/dist/chunks/SerializableSelect-CVGFjCGK.js.map +0 -1
- package/dist/chunks/SingleDateTimeInput-D2fDMQnI.js +0 -331
- package/dist/chunks/SingleDateTimeInput-D2fDMQnI.js.map +0 -1
- package/dist/chunks/Splitter-BFkVGVRb.js +0 -168
- package/dist/chunks/Splitter-BFkVGVRb.js.map +0 -1
- package/dist/chunks/StateSelect-CEp7kGGg.js +0 -78
- package/dist/chunks/StateSelect-CEp7kGGg.js.map +0 -1
- package/dist/chunks/Switch-B57Qmy1z.js +0 -81
- package/dist/chunks/Switch-B57Qmy1z.js.map +0 -1
- package/dist/chunks/Textarea-T8gXua35.js +0 -44
- package/dist/chunks/Textarea-T8gXua35.js.map +0 -1
- package/dist/chunks/TimePanel-b4saqoUY.js +0 -135
- package/dist/chunks/TimePanel-b4saqoUY.js.map +0 -1
- package/dist/chunks/Toggle-DVqOQXmt.js +0 -73
- package/dist/chunks/Toggle-DVqOQXmt.js.map +0 -1
- package/dist/chunks/TreeMultiSelect-BcPr2Phe.js +0 -40
- package/dist/chunks/TreeMultiSelect-BcPr2Phe.js.map +0 -1
- package/dist/chunks/TreePickerBase-ClXn2q3u.js +0 -423
- package/dist/chunks/TreePickerBase-ClXn2q3u.js.map +0 -1
- package/dist/chunks/TreeSelect-DYWkgryS.js +0 -37
- package/dist/chunks/TreeSelect-DYWkgryS.js.map +0 -1
- package/dist/chunks/layout-picker-C1sizRYa.js +0 -1171
- package/dist/chunks/layout-picker-C1sizRYa.js.map +0 -1
- package/dist/chunks/multi-select-DCY3fonG.js +0 -126
- package/dist/chunks/multi-select-DCY3fonG.js.map +0 -1
- package/dist/chunks/odata-DSW7z3nh.js.map +0 -1
- package/dist/chunks/select-Di99RAVO.js +0 -81
- package/dist/chunks/select-Di99RAVO.js.map +0 -1
- package/dist/chunks/slider-BqeYbdrg.js +0 -695
- package/dist/chunks/slider-BqeYbdrg.js.map +0 -1
- package/dist/chunks/tabs-DlnVVMJl.js +0 -384
- package/dist/chunks/tabs-DlnVVMJl.js.map +0 -1
- package/dist/chunks/treeStoryFixtures-Bhm3Gdky.js +0 -113
- package/dist/chunks/treeStoryFixtures-Bhm3Gdky.js.map +0 -1
- package/dist/context-menu/stories/ContextMenu.stories.d.ts +0 -16
- package/dist/context-menu/stories/ContextMenu.stories.d.ts.map +0 -1
- package/dist/context-menu/stories/ContextMenu.stories.js +0 -136
- package/dist/context-menu/stories/ContextMenu.stories.js.map +0 -1
- package/dist/date-input/stories/DateInput.stories.d.ts +0 -132
- package/dist/date-input/stories/DateInput.stories.d.ts.map +0 -1
- package/dist/date-input/stories/DateInput.stories.js +0 -247
- package/dist/date-input/stories/DateInput.stories.js.map +0 -1
- package/dist/date-range-preset-select/stories/DateRangePresetSelect.stories.d.ts +0 -22
- package/dist/date-range-preset-select/stories/DateRangePresetSelect.stories.d.ts.map +0 -1
- package/dist/date-range-preset-select/stories/DateRangePresetSelect.stories.js +0 -41
- package/dist/date-range-preset-select/stories/DateRangePresetSelect.stories.js.map +0 -1
- package/dist/date-time-input/stories/SingleDateTimeInput.stories.d.ts +0 -95
- package/dist/date-time-input/stories/SingleDateTimeInput.stories.d.ts.map +0 -1
- package/dist/date-time-input/stories/SingleDateTimeInput.stories.js +0 -195
- package/dist/date-time-input/stories/SingleDateTimeInput.stories.js.map +0 -1
- package/dist/date-time-input/stories/TimePanel.stories.d.ts +0 -26
- package/dist/date-time-input/stories/TimePanel.stories.d.ts.map +0 -1
- package/dist/date-time-input/stories/TimePanel.stories.js +0 -53
- package/dist/date-time-input/stories/TimePanel.stories.js.map +0 -1
- package/dist/detail/stories/Detail.stories.d.ts +0 -67
- package/dist/detail/stories/Detail.stories.d.ts.map +0 -1
- package/dist/detail/stories/Detail.stories.js +0 -170
- package/dist/detail/stories/Detail.stories.js.map +0 -1
- package/dist/dialog/stories/Dialog.stories.d.ts +0 -50
- package/dist/dialog/stories/Dialog.stories.d.ts.map +0 -1
- package/dist/dialog/stories/Dialog.stories.js +0 -89
- package/dist/dialog/stories/Dialog.stories.js.map +0 -1
- package/dist/disclosure/stories/Disclosure.stories.d.ts +0 -35
- package/dist/disclosure/stories/Disclosure.stories.d.ts.map +0 -1
- package/dist/disclosure/stories/Disclosure.stories.js +0 -70
- package/dist/disclosure/stories/Disclosure.stories.js.map +0 -1
- package/dist/drop-zone/stories/DropZone.stories.d.ts +0 -63
- package/dist/drop-zone/stories/DropZone.stories.d.ts.map +0 -1
- package/dist/drop-zone/stories/DropZone.stories.js +0 -97
- package/dist/drop-zone/stories/DropZone.stories.js.map +0 -1
- package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.d.ts +0 -44
- package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.d.ts.map +0 -1
- package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.js +0 -117
- package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.js.map +0 -1
- package/dist/flex/index.js.map +0 -1
- package/dist/flex/stories/Flex.stories.d.ts +0 -24
- package/dist/flex/stories/Flex.stories.d.ts.map +0 -1
- package/dist/flex/stories/Flex.stories.js +0 -607
- package/dist/flex/stories/Flex.stories.js.map +0 -1
- package/dist/grid/stories/Grid.stories.d.ts +0 -24
- package/dist/grid/stories/Grid.stories.d.ts.map +0 -1
- package/dist/grid/stories/Grid.stories.js +0 -840
- package/dist/grid/stories/Grid.stories.js.map +0 -1
- package/dist/input/index.js.map +0 -1
- package/dist/input/stories/Input.stories.d.ts +0 -69
- package/dist/input/stories/Input.stories.d.ts.map +0 -1
- package/dist/input/stories/Input.stories.js +0 -132
- package/dist/input/stories/Input.stories.js.map +0 -1
- package/dist/input-date-time/stories/InputDateTime.stories.d.ts +0 -69
- package/dist/input-date-time/stories/InputDateTime.stories.d.ts.map +0 -1
- package/dist/input-date-time/stories/InputDateTime.stories.js +0 -125
- package/dist/input-date-time/stories/InputDateTime.stories.js.map +0 -1
- package/dist/input-file/stories/InputFile.stories.d.ts +0 -85
- package/dist/input-file/stories/InputFile.stories.d.ts.map +0 -1
- package/dist/input-file/stories/InputFile.stories.js +0 -158
- package/dist/input-file/stories/InputFile.stories.js.map +0 -1
- package/dist/input-files/stories/InputFiles.stories.d.ts +0 -86
- package/dist/input-files/stories/InputFiles.stories.d.ts.map +0 -1
- package/dist/input-files/stories/InputFiles.stories.js +0 -158
- package/dist/input-files/stories/InputFiles.stories.js.map +0 -1
- package/dist/input-image/stories/InputImage.stories.d.ts +0 -81
- package/dist/input-image/stories/InputImage.stories.d.ts.map +0 -1
- package/dist/input-image/stories/InputImage.stories.js +0 -174
- package/dist/input-image/stories/InputImage.stories.js.map +0 -1
- package/dist/layout-picker/stories/LayoutPicker.stories.d.ts +0 -873
- package/dist/layout-picker/stories/LayoutPicker.stories.d.ts.map +0 -1
- package/dist/layout-picker/stories/LayoutPicker.stories.js +0 -422
- package/dist/layout-picker/stories/LayoutPicker.stories.js.map +0 -1
- package/dist/listbox/stories/Listbox.stories.d.ts +0 -76
- package/dist/listbox/stories/Listbox.stories.d.ts.map +0 -1
- package/dist/listbox/stories/Listbox.stories.js +0 -140
- package/dist/listbox/stories/Listbox.stories.js.map +0 -1
- package/dist/modal/stories/Modal.stories.d.ts +0 -74
- package/dist/modal/stories/Modal.stories.d.ts.map +0 -1
- package/dist/modal/stories/Modal.stories.js +0 -320
- package/dist/modal/stories/Modal.stories.js.map +0 -1
- package/dist/multi-select/ui/stories/MultiSelect.stories.d.ts +0 -67
- package/dist/multi-select/ui/stories/MultiSelect.stories.d.ts.map +0 -1
- package/dist/multi-select/ui/stories/MultiSelect.stories.js +0 -114
- package/dist/multi-select/ui/stories/MultiSelect.stories.js.map +0 -1
- package/dist/multi-select/ui/stories/ODataMultiSelect.stories.d.ts +0 -44
- package/dist/multi-select/ui/stories/ODataMultiSelect.stories.d.ts.map +0 -1
- package/dist/notifications/ui/stories/NotificationsHost.stories.d.ts +0 -21
- package/dist/notifications/ui/stories/NotificationsHost.stories.d.ts.map +0 -1
- package/dist/notifications/ui/stories/NotificationsHost.stories.js +0 -326
- package/dist/notifications/ui/stories/NotificationsHost.stories.js.map +0 -1
- package/dist/period-select/stories/PeriodSelect.stories.d.ts +0 -96
- package/dist/period-select/stories/PeriodSelect.stories.d.ts.map +0 -1
- package/dist/period-select/stories/PeriodSelect.stories.js +0 -166
- package/dist/period-select/stories/PeriodSelect.stories.js.map +0 -1
- package/dist/popover/stories/Popover.stories.d.ts +0 -10
- package/dist/popover/stories/Popover.stories.d.ts.map +0 -1
- package/dist/popover/stories/Popover.stories.js +0 -75
- package/dist/popover/stories/Popover.stories.js.map +0 -1
- package/dist/preset-range-date-input/ui/stories/PresetRangeDateInput.stories.d.ts +0 -22
- package/dist/preset-range-date-input/ui/stories/PresetRangeDateInput.stories.d.ts.map +0 -1
- package/dist/preset-range-date-input/ui/stories/PresetRangeDateInput.stories.js +0 -45
- package/dist/preset-range-date-input/ui/stories/PresetRangeDateInput.stories.js.map +0 -1
- package/dist/radio-button/stories/RadioButton.stories.d.ts +0 -60
- package/dist/radio-button/stories/RadioButton.stories.d.ts.map +0 -1
- package/dist/radio-button/stories/RadioButton.stories.js +0 -121
- package/dist/radio-button/stories/RadioButton.stories.js.map +0 -1
- package/dist/radio-group/stories/RadioGroup.stories.d.ts +0 -74
- package/dist/radio-group/stories/RadioGroup.stories.d.ts.map +0 -1
- package/dist/radio-group/stories/RadioGroup.stories.js +0 -146
- package/dist/radio-group/stories/RadioGroup.stories.js.map +0 -1
- package/dist/select/stories/ODataSelect.stories.d.ts +0 -46
- package/dist/select/stories/ODataSelect.stories.d.ts.map +0 -1
- package/dist/select/stories/Select.stories.d.ts +0 -127
- package/dist/select/stories/Select.stories.d.ts.map +0 -1
- package/dist/select/stories/Select.stories.js +0 -214
- package/dist/select/stories/Select.stories.js.map +0 -1
- package/dist/select/stories/SerializableSelect.stories.d.ts +0 -91
- package/dist/select/stories/SerializableSelect.stories.d.ts.map +0 -1
- package/dist/select/stories/SerializableSelect.stories.js +0 -165
- package/dist/select/stories/SerializableSelect.stories.js.map +0 -1
- package/dist/select/stories/odataStoryCollection.d.ts +0 -2
- package/dist/select/stories/odataStoryCollection.d.ts.map +0 -1
- package/dist/select/stories/odataStoryFixtures.d.ts +0 -35
- package/dist/select/stories/odataStoryFixtures.d.ts.map +0 -1
- package/dist/slider/stories/Slider.stories.d.ts +0 -29
- package/dist/slider/stories/Slider.stories.d.ts.map +0 -1
- package/dist/slider/stories/Slider.stories.js +0 -310
- package/dist/slider/stories/Slider.stories.js.map +0 -1
- package/dist/slider/stories/SliderInput.stories.d.ts +0 -30
- package/dist/slider/stories/SliderInput.stories.d.ts.map +0 -1
- package/dist/slider/stories/SliderInput.stories.js +0 -282
- package/dist/slider/stories/SliderInput.stories.js.map +0 -1
- package/dist/sortable/stories/Sortable.stories.d.ts +0 -58
- package/dist/sortable/stories/Sortable.stories.d.ts.map +0 -1
- package/dist/sortable/stories/Sortable.stories.js +0 -255
- package/dist/sortable/stories/Sortable.stories.js.map +0 -1
- package/dist/splitter/stories/Splitter.stories.d.ts +0 -66
- package/dist/splitter/stories/Splitter.stories.d.ts.map +0 -1
- package/dist/splitter/stories/Splitter.stories.js +0 -223
- package/dist/splitter/stories/Splitter.stories.js.map +0 -1
- package/dist/state-select/stories/StateSelect.stories.d.ts +0 -70
- package/dist/state-select/stories/StateSelect.stories.d.ts.map +0 -1
- package/dist/state-select/stories/StateSelect.stories.js +0 -145
- package/dist/state-select/stories/StateSelect.stories.js.map +0 -1
- package/dist/switch/stories/Switch.stories.d.ts +0 -59
- package/dist/switch/stories/Switch.stories.d.ts.map +0 -1
- package/dist/switch/stories/Switch.stories.js +0 -90
- package/dist/switch/stories/Switch.stories.js.map +0 -1
- package/dist/table/stories/Table.stories.d.ts +0 -155
- package/dist/table/stories/Table.stories.d.ts.map +0 -1
- package/dist/tabs/stories/Tabs.stories.d.ts +0 -94
- package/dist/tabs/stories/Tabs.stories.d.ts.map +0 -1
- package/dist/tabs/stories/Tabs.stories.js +0 -283
- package/dist/tabs/stories/Tabs.stories.js.map +0 -1
- package/dist/textarea/stories/Textarea.stories.d.ts +0 -64
- package/dist/textarea/stories/Textarea.stories.d.ts.map +0 -1
- package/dist/textarea/stories/Textarea.stories.js +0 -98
- package/dist/textarea/stories/Textarea.stories.js.map +0 -1
- package/dist/toggle/stories/Toggle.stories.d.ts +0 -61
- package/dist/toggle/stories/Toggle.stories.d.ts.map +0 -1
- package/dist/toggle/stories/Toggle.stories.js +0 -102
- package/dist/toggle/stories/Toggle.stories.js.map +0 -1
- package/dist/tree-select/stories/ODataTreeMultiSelect.stories.d.ts +0 -55
- package/dist/tree-select/stories/ODataTreeMultiSelect.stories.d.ts.map +0 -1
- package/dist/tree-select/stories/ODataTreeSelect.stories.d.ts +0 -54
- package/dist/tree-select/stories/ODataTreeSelect.stories.d.ts.map +0 -1
- package/dist/tree-select/stories/TreeMultiSelect.stories.d.ts +0 -35
- package/dist/tree-select/stories/TreeMultiSelect.stories.d.ts.map +0 -1
- package/dist/tree-select/stories/TreeMultiSelect.stories.js +0 -64
- package/dist/tree-select/stories/TreeMultiSelect.stories.js.map +0 -1
- package/dist/tree-select/stories/TreeSelect.stories.d.ts +0 -35
- package/dist/tree-select/stories/TreeSelect.stories.d.ts.map +0 -1
- package/dist/tree-select/stories/TreeSelect.stories.js +0 -66
- package/dist/tree-select/stories/TreeSelect.stories.js.map +0 -1
- package/dist/tree-select/stories/treeStoryFixtures.d.ts +0 -3
- package/dist/tree-select/stories/treeStoryFixtures.d.ts.map +0 -1
- package/dist/tree-table/stories/TreeTable.stories.d.ts +0 -158
- package/dist/tree-table/stories/TreeTable.stories.d.ts.map +0 -1
- package/src/styles/fonts.scss +0 -47
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { t as e } from "./ui.module-BisoTevy.js";
|
|
2
|
-
import { c as t, n, o as r, r as i } from "./Input-BYUl3UFn.js";
|
|
3
|
-
import { useCallback as a, useRef as o } from "react";
|
|
4
|
-
import { cn as s, handleKeyboardActivation as c } from "@ryuzaki13/react-foundation-lib/utils";
|
|
5
|
-
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
6
|
-
import { ReadFileError as d, assertValidAccept as f, assertValidAllowedMime as p, readFile as m } from "@ryuzaki13/react-foundation-lib/file";
|
|
7
|
-
var h = {
|
|
8
|
-
control: "Ggxyuj",
|
|
9
|
-
fileName: "fthcmO",
|
|
10
|
-
hiddenInput: "wyY60X"
|
|
11
|
-
};
|
|
12
|
-
//#endregion
|
|
13
|
-
//#region src/input-file/InputFile.tsx
|
|
14
|
-
function g(g) {
|
|
15
|
-
let { value: _, onClear: v, onReadError: y, accept: b, allowedMime: x, maxBytes: S, label: C, description: w, placeholder: T = "Выберите файл", disabled: E, size: D, error: O, onClearError: k, className: A } = g;
|
|
16
|
-
p(x), f(b);
|
|
17
|
-
let j = o(null), { controlId: M, labelId: N, descriptionId: P, errorId: F, describedBy: I } = t({
|
|
18
|
-
hasLabel: C != null,
|
|
19
|
-
hasDescription: !!w,
|
|
20
|
-
hasError: !!O
|
|
21
|
-
}), L = a(async (e) => {
|
|
22
|
-
let t = e.target.files?.[0];
|
|
23
|
-
if (t) {
|
|
24
|
-
e.target.value = "", O && k && k();
|
|
25
|
-
try {
|
|
26
|
-
if (g.readMode === "array-buffer") {
|
|
27
|
-
let e = await m(t, {
|
|
28
|
-
allowedMime: x,
|
|
29
|
-
maxBytes: S,
|
|
30
|
-
mode: "array-buffer"
|
|
31
|
-
});
|
|
32
|
-
g.onChange(e);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
let e = await m(t, {
|
|
36
|
-
allowedMime: x,
|
|
37
|
-
maxBytes: S
|
|
38
|
-
});
|
|
39
|
-
g.onChange(e);
|
|
40
|
-
} catch (e) {
|
|
41
|
-
e instanceof d && y && y(e);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}, [
|
|
45
|
-
g,
|
|
46
|
-
x,
|
|
47
|
-
S,
|
|
48
|
-
y,
|
|
49
|
-
O,
|
|
50
|
-
k
|
|
51
|
-
]), R = a(() => {
|
|
52
|
-
j.current?.click();
|
|
53
|
-
}, []);
|
|
54
|
-
return /* @__PURE__ */ u(r, {
|
|
55
|
-
label: C,
|
|
56
|
-
description: w,
|
|
57
|
-
disabled: E,
|
|
58
|
-
className: A,
|
|
59
|
-
size: D,
|
|
60
|
-
error: O,
|
|
61
|
-
controlId: M,
|
|
62
|
-
labelId: N,
|
|
63
|
-
descriptionId: P,
|
|
64
|
-
errorId: F,
|
|
65
|
-
children: [/* @__PURE__ */ l("input", {
|
|
66
|
-
ref: j,
|
|
67
|
-
id: M,
|
|
68
|
-
type: "file",
|
|
69
|
-
accept: (b ?? x)?.join(","),
|
|
70
|
-
disabled: E,
|
|
71
|
-
className: h.hiddenInput,
|
|
72
|
-
onChange: L,
|
|
73
|
-
tabIndex: -1
|
|
74
|
-
}), /* @__PURE__ */ l(i, {
|
|
75
|
-
endAdornment: v ? /* @__PURE__ */ l(n, {
|
|
76
|
-
onClick: v,
|
|
77
|
-
disabled: E
|
|
78
|
-
}) : void 0,
|
|
79
|
-
endAdornmentWidth: v ? "var(--control-height)" : void 0,
|
|
80
|
-
children: ({ controlClassName: t }) => /* @__PURE__ */ l("div", {
|
|
81
|
-
role: "button",
|
|
82
|
-
tabIndex: E ? -1 : 0,
|
|
83
|
-
onClick: R,
|
|
84
|
-
onKeyDown: (e) => c(e, R, { disabled: E }),
|
|
85
|
-
className: s(e.uiInputControl, h.control, t, !!O && e.invalid),
|
|
86
|
-
"data-disabled": E || void 0,
|
|
87
|
-
"aria-invalid": !!O || void 0,
|
|
88
|
-
"aria-disabled": E,
|
|
89
|
-
"aria-labelledby": N,
|
|
90
|
-
"aria-describedby": I,
|
|
91
|
-
children: _ ? /* @__PURE__ */ l("span", {
|
|
92
|
-
className: h.fileName,
|
|
93
|
-
children: _.meta.name
|
|
94
|
-
}) : /* @__PURE__ */ l("span", {
|
|
95
|
-
className: e.uiPlaceholder,
|
|
96
|
-
children: T
|
|
97
|
-
})
|
|
98
|
-
})
|
|
99
|
-
})]
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
//#endregion
|
|
103
|
-
export { g as t };
|
|
104
|
-
|
|
105
|
-
//# sourceMappingURL=InputFile-Bo3CN73O.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InputFile-Bo3CN73O.js","names":[],"sources":["../../src/input-file/InputFile.module.scss","../../src/input-file/InputFile.tsx"],"sourcesContent":[".control {\n\theight: var(--control-height);\n\twidth: 100%;\n\tpadding: 0 var(--space-sm);\n\tfont-size: var(--font-size-md);\n\tcursor: pointer;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.fileName {\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.hiddenInput {\n\tposition: absolute;\n\twidth: 0;\n\theight: 0;\n\topacity: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n}\n","import { useCallback, useRef } from \"react\";\n\nimport {\n\tassertValidAccept,\n\tassertValidAllowedMime,\n\treadFile,\n\tReadFileError,\n\tReadFileResult,\n\tReadMode\n} from \"@ryuzaki13/react-foundation-lib/file\";\nimport { cn, handleKeyboardActivation } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputClearButton, InputControl, InputUI, useInputFieldIds } from \"../input\";\nimport { UiBaseProps } from \"../types\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./InputFile.module.scss\";\n\ninterface InputFileCommonProps extends Omit<UiBaseProps<undefined>, \"value\" | \"onChange\"> {\n\t/** Callback очистки выбранного файла. Если передан — отображается кнопка «крестик» */\n\tonClear?: () => void;\n\t/** Callback ошибки чтения файла (невалидный MIME, превышение размера и т.д.) */\n\tonReadError?: (error: ReadFileError) => void;\n\n\t/** HTML-атрибут accept для нативного input[type=\"file\"] (например `[\".pdf\", \".docx\"]`) */\n\taccept?: readonly string[];\n\t/** Список допустимых MIME-типов — передаётся в readFile для валидации */\n\tallowedMime?: readonly string[];\n\t/** Максимальный размер файла в байтах — передаётся в readFile для валидации */\n\tmaxBytes?: number;\n\t/** Режим чтения файла: \"data-url\" (по умолчанию) или \"array-buffer\" */\n\treadMode?: ReadMode;\n\n\t/** Текст ошибки под полем */\n\terror?: string;\n\t/** Callback сброса ошибки (вызывается при повторном выборе файла) */\n\tonClearError?: () => void;\n\t/** CSS-класс обёртки */\n\tclassName?: string;\n}\n\ntype InputFileDataUrlResult = Extract<ReadFileResult, { mode: \"data-url\" }>;\ntype InputFileArrayBufferResult = Extract<ReadFileResult, { mode: \"array-buffer\" }>;\n\n/**\n * Пропсы компонента InputFile.\n *\n * Компонент предназначен для выбора одного файла.\n * Внешний вид идентичен InputText — label, description, error, кнопка очистки.\n *\n * В onChange передаётся результат чтения файла через readFile:\n * - В режиме \"data-url\" — объект с dataUrl и метаданными\n * - В режиме \"array-buffer\" — объект с ArrayBuffer и метаданными\n */\nexport type InputFileProps =\n\t| (InputFileCommonProps & {\n\t\t\tvalue: ReadFileResult | undefined;\n\t\t\tonChange: (value: InputFileDataUrlResult) => void;\n\t\t\treadMode?: \"data-url\";\n\t })\n\t| (InputFileCommonProps & {\n\t\t\tvalue: ReadFileResult | undefined;\n\t\t\tonChange: (value: InputFileArrayBufferResult) => void;\n\t\t\treadMode: \"array-buffer\";\n\t });\n\n/**\n * InputFile — компонент выбора одного файла.\n *\n * Визуально идентичен InputText: поле с label, description, placeholder,\n * кнопкой очистки (крестик) и блоком ошибки.\n *\n * При клике открывается нативный диалог выбора файла.\n * После выбора файл читается через readFile, результат передаётся в onChange.\n *\n * InputFile позволяет выбрать один файл и передаёт наружу типизированный результат чтения.\n * Если `readMode` не задан или равен `\"data-url\"`, в `onChange` приходит объект с `dataUrl`.\n * Если `readMode` равен `\"array-buffer\"`, в `onChange` приходит объект с `buffer`.\n */\nexport function InputFile(props: InputFileProps) {\n\tconst {\n\t\tvalue,\n\t\tonClear,\n\t\tonReadError,\n\t\taccept,\n\t\tallowedMime,\n\t\tmaxBytes,\n\t\tlabel,\n\t\tdescription,\n\t\tplaceholder = \"Выберите файл\",\n\t\tdisabled,\n\t\tsize,\n\t\terror,\n\t\tonClearError,\n\t\tclassName\n\t} = props;\n\n\tassertValidAllowedMime(allowedMime);\n\tassertValidAccept(accept);\n\n\t/** Реф на скрытый нативный input[type=\"file\"] */\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\t/**\n\t * Обработчик выбора файла из нативного диалога.\n\t * Читает файл через readFile и передаёт результат в onChange.\n\t * При ошибке чтения вызывает onReadError.\n\t */\n\tconst handleChange = useCallback(\n\t\tasync (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst file = e.target.files?.[0];\n\t\t\tif (!file) return;\n\n\t\t\t// Сбрасываем значение input чтобы можно было выбрать тот же файл повторно\n\t\t\te.target.value = \"\";\n\n\t\t\t// Сбрасываем ошибку при повторном выборе\n\t\t\tif (error && onClearError) onClearError();\n\n\t\t\ttry {\n\t\t\t\tif (props.readMode === \"array-buffer\") {\n\t\t\t\t\tconst result = await readFile(file, { allowedMime, maxBytes, mode: \"array-buffer\" });\n\t\t\t\t\tprops.onChange(result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst result = await readFile(file, { allowedMime, maxBytes });\n\t\t\t\tprops.onChange(result);\n\t\t\t} catch (err) {\n\t\t\t\tif (err instanceof ReadFileError && onReadError) {\n\t\t\t\t\tonReadError(err);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[props, allowedMime, maxBytes, onReadError, error, onClearError]\n\t);\n\n\t/** Клик по видимому контролу открывает нативный диалог */\n\tconst handleClick = useCallback(() => {\n\t\tinputRef.current?.click();\n\t}, []);\n\n\treturn (\n\t\t<InputUI\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tclassName={className}\n\t\t\tsize={size}\n\t\t\terror={error}\n\t\t\tcontrolId={controlId}\n\t\t\tlabelId={labelId}\n\t\t\tdescriptionId={descriptionId}\n\t\t\terrorId={errorId}>\n\t\t\t<input\n\t\t\t\tref={inputRef}\n\t\t\t\tid={controlId}\n\t\t\t\ttype=\"file\"\n\t\t\t\taccept={(accept ?? allowedMime)?.join(\",\")}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={styles.hiddenInput}\n\t\t\t\tonChange={handleChange}\n\t\t\t\ttabIndex={-1}\n\t\t\t/>\n\n\t\t\t<InputControl\n\t\t\t\tendAdornment={onClear ? <InputClearButton onClick={onClear} disabled={disabled} /> : undefined}\n\t\t\t\tendAdornmentWidth={onClear ? \"var(--control-height)\" : undefined}>\n\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonKeyDown={(event) => handleKeyboardActivation(event, handleClick, { disabled })}\n\t\t\t\t\t\tclassName={cn(uiStyles.uiInputControl, styles.control, controlClassName, !!error && uiStyles.invalid)}\n\t\t\t\t\t\tdata-disabled={disabled || undefined}\n\t\t\t\t\t\taria-invalid={!!error || undefined}\n\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\taria-describedby={describedBy}>\n\t\t\t\t\t\t{value ? (\n\t\t\t\t\t\t\t<span className={styles.fileName}>{value.meta.name}</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className={uiStyles.uiPlaceholder}>{placeholder}</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</InputControl>\n\t\t</InputUI>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;AC+EA,SAAgB,EAAU,GAAuB;CAChD,IAAM,EACL,UACA,YACA,gBACA,WACA,gBACA,aACA,UACA,gBACA,iBAAc,iBACd,aACA,SACA,UACA,iBACA,iBACG;CAGJ,AADA,EAAuB,CAAW,GAClC,EAAkB,CAAM;CAGxB,IAAM,IAAW,EAAyB,IAAI,GACxC,EAAE,cAAW,YAAS,kBAAe,YAAS,mBAAgB,EAAiB;EACpF,UAAU,KAAiC;EAC3C,gBAAgB,CAAC,CAAC;EAClB,UAAU,CAAC,CAAC;CACb,CAAC,GAOK,IAAe,EACpB,OAAO,MAA2C;EACjD,IAAM,IAAO,EAAE,OAAO,QAAQ;EACzB,OAML;GAHA,EAAE,OAAO,QAAQ,IAGb,KAAS,KAAc,EAAa;GAExC,IAAI;IACH,IAAI,EAAM,aAAa,gBAAgB;KACtC,IAAM,IAAS,MAAM,EAAS,GAAM;MAAE;MAAa;MAAU,MAAM;KAAe,CAAC;KACnF,EAAM,SAAS,CAAM;KACrB;IACD;IAEA,IAAM,IAAS,MAAM,EAAS,GAAM;KAAE;KAAa;IAAS,CAAC;IAC7D,EAAM,SAAS,CAAM;GACtB,SAAS,GAAK;IACb,AAAI,aAAe,KAAiB,KACnC,EAAY,CAAG;GAEjB;EAfwC;CAgBzC,GACA;EAAC;EAAO;EAAa;EAAU;EAAa;EAAO;CAAY,CAChE,GAGM,IAAc,QAAkB;EACrC,EAAS,SAAS,MAAM;CACzB,GAAG,CAAC,CAAC;CAEL,OACC,kBAAC,GAAD;EACQ;EACM;EACH;EACC;EACL;EACC;EACI;EACF;EACM;EACN;YAVV,CAWC,kBAAC,SAAD;GACC,KAAK;GACL,IAAI;GACJ,MAAK;GACL,SAAS,KAAU,EAAA,EAAc,KAAK,GAAG;GAC/B;GACV,WAAW,EAAO;GAClB,UAAU;GACV,UAAU;EACV,CAAA,GAED,kBAAC,GAAD;GACC,cAAc,IAAU,kBAAC,GAAD;IAAkB,SAAS;IAAmB;GAAW,CAAA,IAAI,KAAA;GACrF,mBAAmB,IAAU,0BAA0B,KAAA;cACrD,EAAE,0BACH,kBAAC,OAAD;IACC,MAAK;IACL,UAAU,IAAW,KAAK;IAC1B,SAAS;IACT,YAAY,MAAU,EAAyB,GAAO,GAAa,EAAE,YAAS,CAAC;IAC/E,WAAW,EAAG,EAAS,gBAAgB,EAAO,SAAS,GAAkB,CAAC,CAAC,KAAS,EAAS,OAAO;IACpG,iBAAe,KAAY,KAAA;IAC3B,gBAAc,CAAC,CAAC,KAAS,KAAA;IACzB,iBAAe;IACf,mBAAiB;IACjB,oBAAkB;cACjB,IACA,kBAAC,QAAD;KAAM,WAAW,EAAO;eAAW,EAAM,KAAK;IAAW,CAAA,IAEzD,kBAAC,QAAD;KAAM,WAAW,EAAS;eAAgB;IAAkB,CAAA;GAEzD,CAAA;EAEO,CAAA,CACN;;AAEX"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InputFiles-gIxOPv5y.js","names":[],"sources":["../../src/input-files/InputFiles.module.scss","../../src/input-files/InputFilesList.tsx","../../src/input-files/InputFiles.tsx"],"sourcesContent":["/* Контрол, имитирующий внешний вид InputText */\n.control {\n\theight: var(--control-height);\n\twidth: 100%;\n\tpadding: 0 var(--space-sm);\n\tfont-size: var(--font-size-md);\n\tcursor: pointer;\n\n\tdisplay: flex;\n\talign-items: center;\n}\n\n/* Скрытый нативный input[type=\"file\"] */\n.hiddenInput {\n\tposition: absolute;\n\twidth: 0;\n\theight: 0;\n\topacity: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n}\n\n/* Список выбранных файлов */\n.fileList {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--space-xs);\n\tmargin-top: var(--space-xs);\n}\n\n/* Элемент списка — строка с именем файла и кнопкой удаления */\n.fileItem {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--space-xs);\n\tpadding: var(--space-xs) var(--space-sm);\n\tbackground-color: var(--surface-2);\n\tborder-radius: var(--radius-sm);\n\t// font-size: var(--font-size-sm);\n}\n\n/* Имя файла — обрезка с троеточием */\n.fileItemName {\n\tflex: 1;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n/* Кнопка удаления файла из списка */\n.removeButton {\n\tflex-shrink: 0;\n\twidth: 1.25em;\n\theight: 1.25em;\n\tcolor: var(--content-2);\n\n\t&:hover {\n\t\tcolor: var(--content-accent);\n\t}\n}\n","import { useCallback } from \"react\";\n\nimport { ReadFileResult } from \"@ryuzaki13/react-foundation-lib/file\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { XIcon } from \"lucide-react\";\n\nimport styles from \"./InputFiles.module.scss\";\n\ninterface InputFilesListProps<TFile extends ReadFileResult> {\n\tfiles: TFile[];\n\tonChange: (files: TFile[]) => void;\n}\n\nexport function InputFilesList<TFile extends ReadFileResult>({ files, onChange }: InputFilesListProps<TFile>) {\n\tconst handleRemove = useCallback(\n\t\t(index: number) => {\n\t\t\tonChange(files.filter((_, i) => i !== index));\n\t\t},\n\t\t[files, onChange]\n\t);\n\n\tif (!files || !files.length) return null;\n\n\treturn (\n\t\t<ul className={styles.fileList}>\n\t\t\t{files.map((item, index) => (\n\t\t\t\t<li key={`${item.meta.name}-${item.meta.lastModified}`} className={styles.fileItem}>\n\t\t\t\t\t<span className={styles.fileItemName}>{item.meta.name}</span>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={cn(styles.removeButton, \"flexCenter\")}\n\t\t\t\t\t\tonClick={() => handleRemove(index)}\n\t\t\t\t\t\taria-label={`Удалить ${item.meta.name}`}>\n\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t</button>\n\t\t\t\t</li>\n\t\t\t))}\n\t\t</ul>\n\t);\n}\n","import { useCallback, useRef } from \"react\";\n\nimport { assertValidAccept, assertValidAllowedMime, readFile, ReadFileError, ReadFileResult } from \"@ryuzaki13/react-foundation-lib/file\";\nimport { cn, handleKeyboardActivation } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputControl, InputUI, useInputFieldIds } from \"../input\";\nimport { UiBaseProps } from \"../types\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./InputFiles.module.scss\";\nimport { InputFilesList } from \"./InputFilesList\";\n\ninterface InputFilesCommonProps extends Omit<UiBaseProps<undefined>, \"value\" | \"onChange\"> {\n\t/** Callback ошибки чтения файла */\n\tonReadError?: (error: ReadFileError) => void;\n\n\t/** HTML-атрибут accept для нативного input[type=\"file\"] (например `[\".pdf\", \".docx\"]`) */\n\taccept?: readonly string[];\n\t/** Список допустимых MIME-типов — передаётся в readFile */\n\tallowedMime?: readonly string[];\n\t/** Максимальный размер одного файла в байтах */\n\tmaxBytes?: number;\n\t/** Максимальное количество файлов. При достижении лимита input блокируется */\n\tmaxFiles?: number;\n\n\t/** Текст ошибки под полем */\n\terror?: string;\n\t/** Callback сброса ошибки */\n\tonClearError?: () => void;\n\t/** CSS-класс обёртки */\n\tclassName?: string;\n}\n\ntype InputFilesDataUrlResult = Extract<ReadFileResult, { mode: \"data-url\" }>;\ntype InputFilesArrayBufferResult = Extract<ReadFileResult, { mode: \"array-buffer\" }>;\n\n/**\n * Пропсы компонента InputFiles.\n *\n * Компонент предназначен для выбора нескольких файлов.\n * Выбранные файлы отображаются списком под полем ввода,\n * каждый с кнопкой удаления (крестик).\n *\n * В onChange передаётся обновлённый массив результатов readFile.\n */\nexport type InputFilesProps =\n\t| (InputFilesCommonProps & {\n\t\t\tvalue: InputFilesDataUrlResult[];\n\t\t\tonChange: (value: InputFilesDataUrlResult[]) => void;\n\t\t\t/** Режим чтения: \"data-url\" по умолчанию */\n\t\t\treadMode?: \"data-url\";\n\t })\n\t| (InputFilesCommonProps & {\n\t\t\tvalue: InputFilesArrayBufferResult[];\n\t\t\tonChange: (value: InputFilesArrayBufferResult[]) => void;\n\t\t\t/** Режим чтения файла как ArrayBuffer */\n\t\t\treadMode: \"array-buffer\";\n\t });\n\n/**\n * InputFiles — компонент выбора нескольких файлов.\n *\n * Поле стилизовано как InputText. При клике открывается нативный\n * диалог с multiple. Каждый выбранный файл читается через readFile\n * и добавляется в массив value.\n *\n * Список выбранных файлов отображается под полем.\n * Каждый файл можно удалить кнопкой «крестик».\n *\n * InputFiles типизирует массив по `readMode`.\n * Если `readMode` не задан или равен `\"data-url\"`, в `value` и `onChange`\n * используется массив объектов с `dataUrl`. Если `readMode` равен\n * `\"array-buffer\"`, используется массив объектов с `buffer`.\n */\nexport function InputFiles(props: InputFilesProps) {\n\tconst {\n\t\tvalue,\n\t\tonReadError,\n\t\taccept,\n\t\tallowedMime,\n\t\tmaxBytes,\n\t\tmaxFiles,\n\t\tlabel,\n\t\tdescription,\n\t\tplaceholder = \"Выберите файлы\",\n\t\tdisabled,\n\t\tsize,\n\t\terror,\n\t\tonClearError,\n\t\tclassName\n\t} = props;\n\n\tassertValidAllowedMime(allowedMime);\n\tassertValidAccept(accept);\n\n\t/** Реф на скрытый нативный input[type=\"file\"] */\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\t/** Достигнут ли лимит файлов */\n\tconst isLimitReached = typeof maxFiles === \"number\" && value.length >= maxFiles;\n\n\t/**\n\t * Обработчик выбора файлов из нативного диалога.\n\t * Каждый файл читается через readFile.\n\t * Успешно прочитанные файлы добавляются к текущему массиву value.\n\t */\n\tconst handleChange = useCallback(\n\t\tasync (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst files = e.target.files;\n\t\t\tif (!files || files.length === 0) return;\n\n\t\t\tconst selectedFiles = Array.from(files);\n\n\t\t\t// Сбрасываем значение input чтобы можно было выбрать те же файлы повторно\n\t\t\te.target.value = \"\";\n\n\t\t\t// Сбрасываем ошибку при выборе новых файлов\n\t\t\tif (error && onClearError) onClearError();\n\n\t\t\t// Определяем сколько файлов можно ещё добавить\n\t\t\tconst remaining = typeof maxFiles === \"number\" ? maxFiles - value.length : selectedFiles.length;\n\t\t\tconst filesToProcess = selectedFiles.slice(0, remaining);\n\n\t\t\tif (props.readMode === \"array-buffer\") {\n\t\t\t\t// Читаем файлы как ArrayBuffer и сохраняем точный тип массива для потребителя.\n\t\t\t\tconst results: InputFilesArrayBufferResult[] = [];\n\n\t\t\t\tfor (const file of filesToProcess) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await readFile(file, { allowedMime, maxBytes, mode: \"array-buffer\" });\n\t\t\t\t\t\tresults.push(result);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (err instanceof ReadFileError && onReadError) {\n\t\t\t\t\t\t\tonReadError(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (results.length > 0) {\n\t\t\t\t\tprops.onChange([...props.value, ...results]);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Читаем файлы как Data URL и сохраняем точный тип массива для потребителя.\n\t\t\tconst results: InputFilesDataUrlResult[] = [];\n\t\t\tfor (const file of filesToProcess) {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await readFile(file, { allowedMime, maxBytes });\n\t\t\t\t\tresults.push(result);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (err instanceof ReadFileError && onReadError) {\n\t\t\t\t\t\tonReadError(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (results.length > 0) {\n\t\t\t\tprops.onChange([...props.value, ...results]);\n\t\t\t}\n\t\t},\n\t\t[props, maxFiles, value.length, allowedMime, maxBytes, onReadError, error, onClearError]\n\t);\n\n\t/** Клик по видимому контролу открывает нативный диалог */\n\tconst handleClick = useCallback(() => {\n\t\tinputRef.current?.click();\n\t}, []);\n\n\tconst filesList =\n\t\tprops.readMode === \"array-buffer\" ? (\n\t\t\t<InputFilesList files={props.value} onChange={props.onChange} />\n\t\t) : (\n\t\t\t<InputFilesList files={props.value} onChange={props.onChange} />\n\t\t);\n\n\treturn (\n\t\t<InputUI\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tclassName={className}\n\t\t\tsize={size}\n\t\t\terror={error}\n\t\t\tcontrolId={controlId}\n\t\t\tlabelId={labelId}\n\t\t\tdescriptionId={descriptionId}\n\t\t\terrorId={errorId}>\n\t\t\t<input\n\t\t\t\tref={inputRef}\n\t\t\t\tid={controlId}\n\t\t\t\ttype=\"file\"\n\t\t\t\taccept={(accept ?? allowedMime)?.join(\",\")}\n\t\t\t\tmultiple\n\t\t\t\tdisabled={disabled || isLimitReached}\n\t\t\t\tclassName={styles.hiddenInput}\n\t\t\t\tonChange={handleChange}\n\t\t\t\ttabIndex={-1}\n\t\t\t/>\n\n\t\t\t<InputControl>\n\t\t\t\t{() => (\n\t\t\t\t\t<div\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\ttabIndex={disabled || isLimitReached ? -1 : 0}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonKeyDown={(event) => handleKeyboardActivation(event, handleClick, { disabled: disabled || isLimitReached })}\n\t\t\t\t\t\tclassName={cn(uiStyles.uiInputControl, styles.control, !!error && \"invalid\")}\n\t\t\t\t\t\tdata-disabled={disabled || undefined}\n\t\t\t\t\t\taria-invalid={!!error || undefined}\n\t\t\t\t\t\taria-disabled={disabled || isLimitReached}\n\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\taria-describedby={describedBy}>\n\t\t\t\t\t\t<span className={uiStyles.uiPlaceholder}>{isLimitReached ? `Максимум ${maxFiles} файлов` : placeholder}</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</InputControl>\n\n\t\t\t{/* Список выбранных файлов */}\n\t\t\t{filesList}\n\t\t</InputUI>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { t as e } from "./ui.module-BisoTevy.js";
|
|
2
|
-
import { c as t, n, o as r, r as i } from "./Input-BYUl3UFn.js";
|
|
3
|
-
import { useCallback as a, useMemo as o, useRef as s } from "react";
|
|
4
|
-
import { cn as c, handleKeyboardActivation as l } from "@ryuzaki13/react-foundation-lib/utils";
|
|
5
|
-
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
6
|
-
import { ReadImageError as f, readImageFile as p } from "@ryuzaki13/react-foundation-lib/file";
|
|
7
|
-
var m = {
|
|
8
|
-
control: "EV-Vji",
|
|
9
|
-
fileName: "A5-T93",
|
|
10
|
-
hiddenInput: "V1Rhiv"
|
|
11
|
-
};
|
|
12
|
-
//#endregion
|
|
13
|
-
//#region src/input-image/InputImage.tsx
|
|
14
|
-
function h({ value: h, onChange: g, onClear: _, onReadError: v, allowedMime: y, maxBytes: b, readMode: x, label: S, description: C, placeholder: w = "Выберите изображение", disabled: T, size: E, error: D, onClearError: O, className: k }) {
|
|
15
|
-
let A = s(null), { controlId: j, labelId: M, descriptionId: N, errorId: P, describedBy: F } = t({
|
|
16
|
-
hasLabel: S != null,
|
|
17
|
-
hasDescription: !!C,
|
|
18
|
-
hasError: !!D
|
|
19
|
-
}), I = a((e) => x === "array-buffer" ? p(e, {
|
|
20
|
-
allowedMime: y,
|
|
21
|
-
maxBytes: b,
|
|
22
|
-
mode: "array-buffer"
|
|
23
|
-
}) : p(e, {
|
|
24
|
-
allowedMime: y,
|
|
25
|
-
maxBytes: b
|
|
26
|
-
}), [
|
|
27
|
-
y,
|
|
28
|
-
b,
|
|
29
|
-
x
|
|
30
|
-
]), L = o(() => y && y.length > 0 ? y.join(",") : "image/*", [y]), R = a(async (e) => {
|
|
31
|
-
let t = e.target.files?.[0];
|
|
32
|
-
if (t) {
|
|
33
|
-
e.target.value = "", D && O && O();
|
|
34
|
-
try {
|
|
35
|
-
g(await I(t));
|
|
36
|
-
} catch (e) {
|
|
37
|
-
e instanceof f && v && v(e);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}, [
|
|
41
|
-
I,
|
|
42
|
-
g,
|
|
43
|
-
v,
|
|
44
|
-
D,
|
|
45
|
-
O
|
|
46
|
-
]), z = a(() => {
|
|
47
|
-
A.current?.click();
|
|
48
|
-
}, []);
|
|
49
|
-
return /* @__PURE__ */ d(r, {
|
|
50
|
-
label: S,
|
|
51
|
-
description: C,
|
|
52
|
-
disabled: T,
|
|
53
|
-
className: k,
|
|
54
|
-
size: E,
|
|
55
|
-
error: D,
|
|
56
|
-
controlId: j,
|
|
57
|
-
labelId: M,
|
|
58
|
-
descriptionId: N,
|
|
59
|
-
errorId: P,
|
|
60
|
-
children: [/* @__PURE__ */ u("input", {
|
|
61
|
-
ref: A,
|
|
62
|
-
id: j,
|
|
63
|
-
type: "file",
|
|
64
|
-
accept: L,
|
|
65
|
-
disabled: T,
|
|
66
|
-
className: m.hiddenInput,
|
|
67
|
-
onChange: R,
|
|
68
|
-
tabIndex: -1
|
|
69
|
-
}), /* @__PURE__ */ u(i, {
|
|
70
|
-
endAdornment: _ ? /* @__PURE__ */ u(n, {
|
|
71
|
-
onClick: _,
|
|
72
|
-
disabled: T
|
|
73
|
-
}) : void 0,
|
|
74
|
-
endAdornmentWidth: _ ? "var(--control-height)" : void 0,
|
|
75
|
-
children: ({ controlClassName: t }) => /* @__PURE__ */ u("div", {
|
|
76
|
-
role: "button",
|
|
77
|
-
tabIndex: T ? -1 : 0,
|
|
78
|
-
onClick: z,
|
|
79
|
-
onKeyDown: (e) => l(e, z, { disabled: T }),
|
|
80
|
-
className: c(e.uiInputControl, m.control, t, !!D && "invalid"),
|
|
81
|
-
"data-disabled": T || void 0,
|
|
82
|
-
"aria-invalid": !!D || void 0,
|
|
83
|
-
"aria-disabled": T,
|
|
84
|
-
"aria-labelledby": M,
|
|
85
|
-
"aria-describedby": F,
|
|
86
|
-
children: h ? /* @__PURE__ */ u("span", {
|
|
87
|
-
className: m.fileName,
|
|
88
|
-
children: h.meta.name
|
|
89
|
-
}) : /* @__PURE__ */ u("span", {
|
|
90
|
-
className: e.uiPlaceholder,
|
|
91
|
-
children: w
|
|
92
|
-
})
|
|
93
|
-
})
|
|
94
|
-
})]
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
//#endregion
|
|
98
|
-
export { h as t };
|
|
99
|
-
|
|
100
|
-
//# sourceMappingURL=InputImage-k4l1J_tm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InputImage-k4l1J_tm.js","names":[],"sources":["../../src/input-image/InputImage.module.scss","../../src/input-image/InputImage.tsx"],"sourcesContent":[".control {\n\theight: var(--control-height);\n\twidth: 100%;\n\tpadding: 0 var(--space-sm);\n\tfont-size: var(--font-size-md);\n\tcursor: pointer;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.fileName {\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.hiddenInput {\n\tposition: absolute;\n\twidth: 0;\n\theight: 0;\n\topacity: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n}\n","import { useCallback, useMemo, useRef } from \"react\";\n\nimport { ImageMime, ReadImageError, readImageFile, ReadImageResult, ReadMode } from \"@ryuzaki13/react-foundation-lib/file\";\nimport { cn, handleKeyboardActivation } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputClearButton, InputControl, InputUI, useInputFieldIds } from \"../input\";\nimport { UiBaseProps } from \"../types\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./InputImage.module.scss\";\n\n/**\n * Пропсы компонента InputImage.\n *\n * Компонент предназначен для выбора одного изображения.\n * Внешний вид идентичен InputText.\n *\n * Под капотом использует readImageFile, который:\n * - Проверяет что файл является изображением (image/*)\n * - Валидирует MIME-тип по списку allowedMime\n * - В режиме \"data-url\" автоматически извлекает размеры изображения (dimensions)\n */\nexport interface InputImageProps extends UiBaseProps<ReadImageResult, ReadImageResult | undefined> {\n\t/** Callback очистки выбранного изображения. Если передан — отображается кнопка «крестик» */\n\tonClear?: () => void;\n\t/** Callback ошибки чтения (невалидный формат, не изображение, превышение размера и т.д.) */\n\tonReadError?: (error: ReadImageError) => void;\n\n\t/** Допустимые MIME-типы изображений — передаётся в readImageFile */\n\tallowedMime?: readonly ImageMime[];\n\t/** Максимальный размер файла в байтах — передаётся в readImageFile */\n\tmaxBytes?: number;\n\t/** Режим чтения: \"data-url\" (по умолчанию, с извлечением dimensions) или \"array-buffer\" */\n\treadMode?: ReadMode;\n\n\t/** Текст ошибки под полем */\n\terror?: string;\n\t/** Callback сброса ошибки (вызывается при повторном выборе изображения) */\n\tonClearError?: () => void;\n\t/** CSS-класс обёртки */\n\tclassName?: string;\n}\n\n/**\n * InputImage — компонент выбора одного изображения.\n *\n * Визуально идентичен InputText. Под капотом использует readImageFile,\n * который валидирует что файл — изображение и извлекает его размеры.\n *\n * HTML-атрибут accept формируется автоматически из allowedMime\n * или по умолчанию равен \"image/*\".\n */\nexport function InputImage({\n\tvalue,\n\tonChange,\n\tonClear,\n\tonReadError,\n\tallowedMime,\n\tmaxBytes,\n\treadMode,\n\tlabel,\n\tdescription,\n\tplaceholder = \"Выберите изображение\",\n\tdisabled,\n\tsize,\n\terror,\n\tonClearError,\n\tclassName\n}: InputImageProps) {\n\t/** Реф на скрытый нативный input[type=\"file\"] */\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\tconst readSelectedImage = useCallback(\n\t\t(file: File) => {\n\t\t\tif (readMode === \"array-buffer\") {\n\t\t\t\treturn readImageFile(file, { allowedMime, maxBytes, mode: \"array-buffer\" });\n\t\t\t}\n\n\t\t\treturn readImageFile(file, { allowedMime, maxBytes });\n\t\t},\n\t\t[allowedMime, maxBytes, readMode]\n\t);\n\n\t/**\n\t * Формируем HTML-атрибут accept из allowedMime.\n\t * Если allowedMime не указан — принимаем любые изображения (image/*).\n\t */\n\tconst accept = useMemo(() => {\n\t\tif (allowedMime && allowedMime.length > 0) {\n\t\t\treturn allowedMime.join(\",\");\n\t\t}\n\t\treturn \"image/*\";\n\t}, [allowedMime]);\n\n\t/**\n\t * Обработчик выбора файла из нативного диалога.\n\t * Читает файл через readImageFile и передаёт результат в onChange.\n\t */\n\tconst handleChange = useCallback(\n\t\tasync (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst file = e.target.files?.[0];\n\t\t\tif (!file) return;\n\n\t\t\t// Сбрасываем значение input чтобы можно было выбрать тот же файл повторно\n\t\t\te.target.value = \"\";\n\n\t\t\t// Сбрасываем ошибку при повторном выборе\n\t\t\tif (error && onClearError) onClearError();\n\n\t\t\ttry {\n\t\t\t\tconst result = await readSelectedImage(file);\n\t\t\t\tonChange(result);\n\t\t\t} catch (err) {\n\t\t\t\tif (err instanceof ReadImageError && onReadError) {\n\t\t\t\t\tonReadError(err);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[readSelectedImage, onChange, onReadError, error, onClearError]\n\t);\n\n\t/** Клик по видимому контролу открывает нативный диалог */\n\tconst handleClick = useCallback(() => {\n\t\tinputRef.current?.click();\n\t}, []);\n\n\treturn (\n\t\t<InputUI\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tclassName={className}\n\t\t\tsize={size}\n\t\t\terror={error}\n\t\t\tcontrolId={controlId}\n\t\t\tlabelId={labelId}\n\t\t\tdescriptionId={descriptionId}\n\t\t\terrorId={errorId}>\n\t\t\t<input\n\t\t\t\tref={inputRef}\n\t\t\t\tid={controlId}\n\t\t\t\ttype=\"file\"\n\t\t\t\taccept={accept}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={styles.hiddenInput}\n\t\t\t\tonChange={handleChange}\n\t\t\t\ttabIndex={-1}\n\t\t\t/>\n\n\t\t\t{/* Видимый контрол, стилизованный под InputText */}\n\t\t\t<InputControl\n\t\t\t\tendAdornment={onClear ? <InputClearButton onClick={onClear} disabled={disabled} /> : undefined}\n\t\t\t\tendAdornmentWidth={onClear ? \"var(--control-height)\" : undefined}>\n\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonKeyDown={(event) => handleKeyboardActivation(event, handleClick, { disabled })}\n\t\t\t\t\t\tclassName={cn(uiStyles.uiInputControl, styles.control, controlClassName, !!error && \"invalid\")}\n\t\t\t\t\t\tdata-disabled={disabled || undefined}\n\t\t\t\t\t\taria-invalid={!!error || undefined}\n\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\taria-describedby={describedBy}>\n\t\t\t\t\t\t{value ? (\n\t\t\t\t\t\t\t<span className={styles.fileName}>{value.meta.name}</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className={uiStyles.uiPlaceholder}>{placeholder}</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</InputControl>\n\t\t</InputUI>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;ACoDA,SAAgB,EAAW,EAC1B,UACA,aACA,YACA,gBACA,gBACA,aACA,aACA,UACA,gBACA,iBAAc,wBACd,aACA,SACA,UACA,iBACA,gBACmB;CAEnB,IAAM,IAAW,EAAyB,IAAI,GACxC,EAAE,cAAW,YAAS,kBAAe,YAAS,mBAAgB,EAAiB;EACpF,UAAU,KAAiC;EAC3C,gBAAgB,CAAC,CAAC;EAClB,UAAU,CAAC,CAAC;CACb,CAAC,GAEK,IAAoB,GACxB,MACI,MAAa,iBACT,EAAc,GAAM;EAAE;EAAa;EAAU,MAAM;CAAe,CAAC,IAGpE,EAAc,GAAM;EAAE;EAAa;CAAS,CAAC,GAErD;EAAC;EAAa;EAAU;CAAQ,CACjC,GAMM,IAAS,QACV,KAAe,EAAY,SAAS,IAChC,EAAY,KAAK,GAAG,IAErB,WACL,CAAC,CAAW,CAAC,GAMV,IAAe,EACpB,OAAO,MAA2C;EACjD,IAAM,IAAO,EAAE,OAAO,QAAQ;EACzB,OAML;GAHA,EAAE,OAAO,QAAQ,IAGb,KAAS,KAAc,EAAa;GAExC,IAAI;IAEH,EAAS,MADY,EAAkB,CAAI,CAC5B;GAChB,SAAS,GAAK;IACb,AAAI,aAAe,KAAkB,KACpC,EAAY,CAAG;GAEjB;EATwC;CAUzC,GACA;EAAC;EAAmB;EAAU;EAAa;EAAO;CAAY,CAC/D,GAGM,IAAc,QAAkB;EACrC,EAAS,SAAS,MAAM;CACzB,GAAG,CAAC,CAAC;CAEL,OACC,kBAAC,GAAD;EACQ;EACM;EACH;EACC;EACL;EACC;EACI;EACF;EACM;EACN;YAVV,CAWC,kBAAC,SAAD;GACC,KAAK;GACL,IAAI;GACJ,MAAK;GACG;GACE;GACV,WAAW,EAAO;GAClB,UAAU;GACV,UAAU;EACV,CAAA,GAGD,kBAAC,GAAD;GACC,cAAc,IAAU,kBAAC,GAAD;IAAkB,SAAS;IAAmB;GAAW,CAAA,IAAI,KAAA;GACrF,mBAAmB,IAAU,0BAA0B,KAAA;cACrD,EAAE,0BACH,kBAAC,OAAD;IACC,MAAK;IACL,UAAU,IAAW,KAAK;IAC1B,SAAS;IACT,YAAY,MAAU,EAAyB,GAAO,GAAa,EAAE,YAAS,CAAC;IAC/E,WAAW,EAAG,EAAS,gBAAgB,EAAO,SAAS,GAAkB,CAAC,CAAC,KAAS,SAAS;IAC7F,iBAAe,KAAY,KAAA;IAC3B,gBAAc,CAAC,CAAC,KAAS,KAAA;IACzB,iBAAe;IACf,mBAAiB;IACjB,oBAAkB;cACjB,IACA,kBAAC,QAAD;KAAM,WAAW,EAAO;eAAW,EAAM,KAAK;IAAW,CAAA,IAEzD,kBAAC,QAAD;KAAM,WAAW,EAAS;eAAgB;IAAkB,CAAA;GAEzD,CAAA;EAEO,CAAA,CACN;;AAEX"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { t as e } from "./Button-CCWuggdA.js";
|
|
2
|
-
import { l as t } from "./misc-DoqZBMof.js";
|
|
3
|
-
import { useCallback as n, useId as r, useState as i } from "react";
|
|
4
|
-
import { cn as a } from "@ryuzaki13/react-foundation-lib/utils";
|
|
5
|
-
import { ChevronsLeftIcon as o, ChevronsRightIcon as s } from "lucide-react";
|
|
6
|
-
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
7
|
-
var u = {
|
|
8
|
-
expandableActionPanel: "sj-rIq",
|
|
9
|
-
content: "_3anR7j",
|
|
10
|
-
contentScroller: "gMRIsT",
|
|
11
|
-
labeledPanel: "f5Pv1e",
|
|
12
|
-
label: "q7eZzv",
|
|
13
|
-
labeledActionPanel: "maUL24"
|
|
14
|
-
};
|
|
15
|
-
//#endregion
|
|
16
|
-
//#region src/expandable-action-panel/ExpandableActionPanel.tsx
|
|
17
|
-
function d({ children: d, className: f, contentClassName: p, toggleClassName: m, open: h, defaultOpen: g = !1, disabled: _, onOpenChange: v, expandLabel: y = "Раскрыть панель действий влево", collapseLabel: b = "Свернуть панель действий", panelLabel: x = "Действия панели", itemSelector: S, scrollPadding: C, smoothScroll: w }) {
|
|
18
|
-
let [T, E] = i(g), D = r(), O = h !== void 0, k = O ? h : T, A = n((e) => {
|
|
19
|
-
let t = typeof e == "function" ? e(k) : e;
|
|
20
|
-
O || E(t), v?.(t);
|
|
21
|
-
}, [
|
|
22
|
-
O,
|
|
23
|
-
v,
|
|
24
|
-
k
|
|
25
|
-
]), j = () => A((e) => !e), M = k ? s : o;
|
|
26
|
-
return /* @__PURE__ */ l("div", {
|
|
27
|
-
className: a(u.expandableActionPanel, f),
|
|
28
|
-
"data-ui": "expandable-action-panel",
|
|
29
|
-
"data-open": k ? "" : void 0,
|
|
30
|
-
children: [/* @__PURE__ */ c(e, {
|
|
31
|
-
className: m,
|
|
32
|
-
icon: /* @__PURE__ */ c(M, {}),
|
|
33
|
-
title: k ? b : y,
|
|
34
|
-
disabled: _,
|
|
35
|
-
variant: "neutralOutline",
|
|
36
|
-
"aria-expanded": k,
|
|
37
|
-
"aria-controls": D,
|
|
38
|
-
"data-ui": "expandable-action-panel-toggle",
|
|
39
|
-
"data-action": k ? "collapse-action-panel" : "expand-action-panel",
|
|
40
|
-
onClick: j
|
|
41
|
-
}), k && /* @__PURE__ */ c("div", {
|
|
42
|
-
id: D,
|
|
43
|
-
role: "group",
|
|
44
|
-
"aria-label": x,
|
|
45
|
-
className: a(u.content, p),
|
|
46
|
-
children: /* @__PURE__ */ c(t, {
|
|
47
|
-
className: u.contentScroller,
|
|
48
|
-
itemSelector: S,
|
|
49
|
-
scrollPadding: C,
|
|
50
|
-
smooth: w,
|
|
51
|
-
children: d
|
|
52
|
-
})
|
|
53
|
-
})]
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
//#endregion
|
|
57
|
-
//#region src/expandable-action-panel/LabeledExpandableActionPanel.tsx
|
|
58
|
-
function f({ label: e, className: t, labelClassName: n, labelStyle: r, labelMinWidth: i = "12em", panelClassName: o, open: s, defaultOpen: f, ...p }) {
|
|
59
|
-
let m = {
|
|
60
|
-
...r,
|
|
61
|
-
minWidth: i
|
|
62
|
-
}, h = typeof e == "string" ? e : void 0;
|
|
63
|
-
return /* @__PURE__ */ l("div", {
|
|
64
|
-
className: a(u.labeledPanel, t),
|
|
65
|
-
"data-ui": "labeled-expandable-action-panel",
|
|
66
|
-
children: [/* @__PURE__ */ c("div", {
|
|
67
|
-
className: a("flexEllipsis", u.label, n),
|
|
68
|
-
style: m,
|
|
69
|
-
title: h,
|
|
70
|
-
children: e
|
|
71
|
-
}), /* @__PURE__ */ c(d, {
|
|
72
|
-
...p,
|
|
73
|
-
open: s,
|
|
74
|
-
defaultOpen: f,
|
|
75
|
-
className: a(u.labeledActionPanel, o)
|
|
76
|
-
})]
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
//#endregion
|
|
80
|
-
export { d as n, f as t };
|
|
81
|
-
|
|
82
|
-
//# sourceMappingURL=LabeledExpandableActionPanel-D3kUvmFH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LabeledExpandableActionPanel-D3kUvmFH.js","names":[],"sources":["../../src/expandable-action-panel/ExpandableActionPanel.module.scss","../../src/expandable-action-panel/ExpandableActionPanel.tsx","../../src/expandable-action-panel/LabeledExpandableActionPanel.tsx"],"sourcesContent":[".expandableActionPanel {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\tgap: var(--space-sm);\n\tmin-width: var(--control-height);\n\tmax-width: 100%;\n\toverflow: hidden;\n}\n\n.content {\n\tmin-width: 0;\n\tmax-width: 100%;\n\tflex: 1 1 auto;\n\toverflow: hidden;\n}\n\n.contentScroller {\n\twidth: 100%;\n\tmin-width: 0;\n}\n\n.labeledPanel {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--space-sm);\n\twidth: 100%;\n\tmin-width: 0;\n}\n\n.label {\n\tcolor: var(--content-0);\n}\n\n.labeledActionPanel {\n\tflex: 0 1 auto;\n}\n","import React, { PropsWithChildren, useCallback, useId, useState } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { ChevronsLeftIcon, ChevronsRightIcon } from \"lucide-react\";\n\nimport { Button } from \"../button\";\nimport { OneStepScroller } from \"../misc\";\n\nimport styles from \"./ExpandableActionPanel.module.scss\";\n\nexport interface ExpandableActionPanelProps extends PropsWithChildren {\n\tclassName?: string;\n\tcontentClassName?: string;\n\ttoggleClassName?: string;\n\topen?: boolean;\n\tdefaultOpen?: boolean;\n\tdisabled?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n\texpandLabel?: string;\n\tcollapseLabel?: string;\n\tpanelLabel?: string;\n\titemSelector?: string;\n\tscrollPadding?: number;\n\tsmoothScroll?: boolean;\n}\n\n/**\n * Горизонтальная раскрывающаяся панель действий.\n * Не знает о внешнем layout и может использоваться рядом с любым содержимым.\n */\nexport function ExpandableActionPanel({\n\tchildren,\n\tclassName,\n\tcontentClassName,\n\ttoggleClassName,\n\topen: controlledOpen,\n\tdefaultOpen = false,\n\tdisabled,\n\tonOpenChange,\n\texpandLabel = \"Раскрыть панель действий влево\",\n\tcollapseLabel = \"Свернуть панель действий\",\n\tpanelLabel = \"Действия панели\",\n\titemSelector,\n\tscrollPadding,\n\tsmoothScroll\n}: ExpandableActionPanelProps) {\n\tconst [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n\tconst panelId = useId();\n\tconst isControlled = controlledOpen !== undefined;\n\tconst open = isControlled ? controlledOpen : uncontrolledOpen;\n\n\tconst setOpen = useCallback<React.Dispatch<React.SetStateAction<boolean>>>(\n\t\t(value) => {\n\t\t\tconst nextOpen = typeof value === \"function\" ? value(open) : value;\n\n\t\t\tif (!isControlled) {\n\t\t\t\tsetUncontrolledOpen(nextOpen);\n\t\t\t}\n\n\t\t\tonOpenChange?.(nextOpen);\n\t\t},\n\t\t[isControlled, onOpenChange, open]\n\t);\n\n\tconst handleToggle = () => setOpen((prevOpen) => !prevOpen);\n\tconst ToggleIcon = open ? ChevronsRightIcon : ChevronsLeftIcon;\n\n\treturn (\n\t\t<div className={cn(styles.expandableActionPanel, className)} data-ui=\"expandable-action-panel\" data-open={open ? \"\" : undefined}>\n\t\t\t<Button\n\t\t\t\tclassName={toggleClassName}\n\t\t\t\ticon={<ToggleIcon />}\n\t\t\t\ttitle={open ? collapseLabel : expandLabel}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tvariant=\"neutralOutline\"\n\t\t\t\taria-expanded={open}\n\t\t\t\taria-controls={panelId}\n\t\t\t\tdata-ui=\"expandable-action-panel-toggle\"\n\t\t\t\tdata-action={open ? \"collapse-action-panel\" : \"expand-action-panel\"}\n\t\t\t\tonClick={handleToggle}\n\t\t\t/>\n\n\t\t\t{open && (\n\t\t\t\t<div id={panelId} role=\"group\" aria-label={panelLabel} className={cn(styles.content, contentClassName)}>\n\t\t\t\t\t<OneStepScroller\n\t\t\t\t\t\tclassName={styles.contentScroller}\n\t\t\t\t\t\titemSelector={itemSelector}\n\t\t\t\t\t\tscrollPadding={scrollPadding}\n\t\t\t\t\t\tsmooth={smoothScroll}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</OneStepScroller>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { ExpandableActionPanel, ExpandableActionPanelProps } from \"./ExpandableActionPanel\";\nimport styles from \"./ExpandableActionPanel.module.scss\";\n\nexport interface LabeledExpandableActionPanelProps extends Omit<ExpandableActionPanelProps, \"className\"> {\n\tlabel: React.ReactNode;\n\tclassName?: string;\n\tlabelClassName?: string;\n\tlabelStyle?: React.CSSProperties;\n\tlabelMinWidth?: React.CSSProperties[\"minWidth\"];\n\tpanelClassName?: string;\n}\n\n/**\n * Раскрывающаяся панель действий с левым текстом, который сжимается через `flexEllipsis`.\n */\nexport function LabeledExpandableActionPanel({\n\tlabel,\n\tclassName,\n\tlabelClassName,\n\tlabelStyle,\n\tlabelMinWidth = \"12em\",\n\tpanelClassName,\n\topen,\n\tdefaultOpen,\n\t...panelProps\n}: LabeledExpandableActionPanelProps) {\n\tconst resolvedLabelStyle: React.CSSProperties = {\n\t\t...labelStyle,\n\t\tminWidth: labelMinWidth\n\t};\n\tconst title = typeof label === \"string\" ? label : undefined;\n\n\treturn (\n\t\t<div className={cn(styles.labeledPanel, className)} data-ui=\"labeled-expandable-action-panel\">\n\t\t\t<div className={cn(\"flexEllipsis\", styles.label, labelClassName)} style={resolvedLabelStyle} title={title}>\n\t\t\t\t{label}\n\t\t\t</div>\n\t\t\t<ExpandableActionPanel\n\t\t\t\t{...panelProps}\n\t\t\t\topen={open}\n\t\t\t\tdefaultOpen={defaultOpen}\n\t\t\t\tclassName={cn(styles.labeledActionPanel, panelClassName)}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;AC8BA,SAAgB,EAAsB,EACrC,aACA,cACA,qBACA,oBACA,MAAM,GACN,iBAAc,IACd,aACA,iBACA,iBAAc,kCACd,mBAAgB,4BAChB,gBAAa,mBACb,iBACA,kBACA,mBAC8B;CAC9B,IAAM,CAAC,GAAkB,KAAuB,EAAS,CAAW,GAC9D,IAAU,EAAM,GAChB,IAAe,MAAmB,KAAA,GAClC,IAAO,IAAe,IAAiB,GAEvC,IAAU,GACd,MAAU;EACV,IAAM,IAAW,OAAO,KAAU,aAAa,EAAM,CAAI,IAAI;EAM7D,AAJK,KACJ,EAAoB,CAAQ,GAG7B,IAAe,CAAQ;CACxB,GACA;EAAC;EAAc;EAAc;CAAI,CAClC,GAEM,UAAqB,GAAS,MAAa,CAAC,CAAQ,GACpD,IAAa,IAAO,IAAoB;CAE9C,OACC,kBAAC,OAAD;EAAK,WAAW,EAAG,EAAO,uBAAuB,CAAS;EAAG,WAAQ;EAA0B,aAAW,IAAO,KAAK,KAAA;YAAtH,CACC,kBAAC,GAAD;GACC,WAAW;GACX,MAAM,kBAAC,GAAD,CAAa,CAAA;GACnB,OAAO,IAAO,IAAgB;GACpB;GACV,SAAQ;GACR,iBAAe;GACf,iBAAe;GACf,WAAQ;GACR,eAAa,IAAO,0BAA0B;GAC9C,SAAS;EACT,CAAA,GAEA,KACA,kBAAC,OAAD;GAAK,IAAI;GAAS,MAAK;GAAQ,cAAY;GAAY,WAAW,EAAG,EAAO,SAAS,CAAgB;aACpG,kBAAC,GAAD;IACC,WAAW,EAAO;IACJ;IACC;IACf,QAAQ;IACP;GACe,CAAA;EACb,CAAA,CAEF;;AAEP;;;AC5EA,SAAgB,EAA6B,EAC5C,UACA,cACA,mBACA,eACA,mBAAgB,QAChB,mBACA,SACA,gBACA,GAAG,KACkC;CACrC,IAAM,IAA0C;EAC/C,GAAG;EACH,UAAU;CACX,GACM,IAAQ,OAAO,KAAU,WAAW,IAAQ,KAAA;CAElD,OACC,kBAAC,OAAD;EAAK,WAAW,EAAG,EAAO,cAAc,CAAS;EAAG,WAAQ;YAA5D,CACC,kBAAC,OAAD;GAAK,WAAW,EAAG,gBAAgB,EAAO,OAAO,CAAc;GAAG,OAAO;GAA2B;aAClG;EACG,CAAA,GACL,kBAAC,GAAD;GACC,GAAI;GACE;GACO;GACb,WAAW,EAAG,EAAO,oBAAoB,CAAc;EACvD,CAAA,CACG;;AAEP"}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { t as e } from "./ui.module-BisoTevy.js";
|
|
2
|
-
import { useEffect as t, useId as n, useLayoutEffect as r, useMemo as i, useRef as a, useState as o } from "react";
|
|
3
|
-
import { cn as s, findFirstEnabledIndex as c, findLastEnabledIndex as l, findNextEnabledIndex as u, handleKeyboardActivation as d } from "@ryuzaki13/react-foundation-lib/utils";
|
|
4
|
-
import { CheckIcon as f } from "lucide-react";
|
|
5
|
-
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
6
|
-
//#region src/listbox/Listbox.tsx
|
|
7
|
-
var h = (e) => e.disabled === !0;
|
|
8
|
-
function g(e, t, n) {
|
|
9
|
-
if (n) {
|
|
10
|
-
if (Array.isArray(t) && t.length > 0) {
|
|
11
|
-
let n = e.findIndex((e) => t.includes(e.value) && !e.disabled);
|
|
12
|
-
if (n >= 0) return n;
|
|
13
|
-
}
|
|
14
|
-
return c(e, h);
|
|
15
|
-
}
|
|
16
|
-
if (t !== void 0) {
|
|
17
|
-
let n = e.findIndex((e) => e.value === t && !e.disabled);
|
|
18
|
-
if (n >= 0) return n;
|
|
19
|
-
}
|
|
20
|
-
return c(e, h);
|
|
21
|
-
}
|
|
22
|
-
function _(_) {
|
|
23
|
-
let { value: v, defaultValue: y, multiple: b, focusOnMount: x, renderItem: S, getKey: C, options: w, onChange: T, id: E, ...D } = _, O = v !== void 0, k = n(), A = E ?? `${k}-listbox`, [j, M] = o(y), N = a(null), [P, F] = o(() => g(w, v ?? y, b)), I = i(() => (O ? v : j) ?? (b ? [] : null), [
|
|
24
|
-
j,
|
|
25
|
-
O,
|
|
26
|
-
b,
|
|
27
|
-
v
|
|
28
|
-
]), L = P, R = (e) => {
|
|
29
|
-
if (e.disabled) return;
|
|
30
|
-
let t;
|
|
31
|
-
if (_.multiple) {
|
|
32
|
-
let n = Array.isArray(I) ? I : [];
|
|
33
|
-
t = n.includes(e.value) ? n.filter((t) => t !== e.value) : [...n, e.value], _.onChange?.(t, e);
|
|
34
|
-
} else t = e.value, _.onChange?.(t, e);
|
|
35
|
-
O || M(t);
|
|
36
|
-
};
|
|
37
|
-
return t(() => {
|
|
38
|
-
let e = N.current?.querySelectorAll("[role=\"option\"]")[L];
|
|
39
|
-
e && e.scrollIntoView({ block: "nearest" });
|
|
40
|
-
}, [L]), r(() => {
|
|
41
|
-
x && N.current?.focus();
|
|
42
|
-
}, [x]), /* @__PURE__ */ p("ul", {
|
|
43
|
-
ref: N,
|
|
44
|
-
id: A,
|
|
45
|
-
role: "listbox",
|
|
46
|
-
"aria-multiselectable": b || void 0,
|
|
47
|
-
"aria-activedescendant": L >= 0 ? `${A}-option-${L}` : void 0,
|
|
48
|
-
tabIndex: 0,
|
|
49
|
-
onKeyDown: (e) => {
|
|
50
|
-
if (e.key === "ArrowDown") e.preventDefault(), F((e) => u(w, e, 1, h));
|
|
51
|
-
else if (e.key === "ArrowUp") e.preventDefault(), F((e) => u(w, e, -1, h));
|
|
52
|
-
else if (e.key === "Home") e.preventDefault(), F(c(w, h));
|
|
53
|
-
else if (e.key === "End") e.preventDefault(), F(l(w, h));
|
|
54
|
-
else if (d(e, () => {
|
|
55
|
-
let e = w[L];
|
|
56
|
-
e && R(e);
|
|
57
|
-
})) return;
|
|
58
|
-
},
|
|
59
|
-
...D,
|
|
60
|
-
className: s(e.uiPanel, "scrollable"),
|
|
61
|
-
children: w.map((t, n) => {
|
|
62
|
-
let r = b ? Array.isArray(I) && I.includes(t.value) : I === t.value, i = n === L;
|
|
63
|
-
return /* @__PURE__ */ m("li", {
|
|
64
|
-
id: `${A}-option-${n}`,
|
|
65
|
-
role: "option",
|
|
66
|
-
"aria-selected": r,
|
|
67
|
-
"aria-disabled": t.disabled || void 0,
|
|
68
|
-
onMouseDown: (e) => {
|
|
69
|
-
e.preventDefault(), !t.disabled && (F(n), R(t));
|
|
70
|
-
},
|
|
71
|
-
tabIndex: -1,
|
|
72
|
-
className: s(e.uiPopupOption, t.disabled && e.disabled, i && e.uiPopupOptionActive, r && e.selected),
|
|
73
|
-
children: [p(r ? f : "span", { className: e.uiPopupOptionIcon }), /* @__PURE__ */ p("div", { children: S ? S(t, r, i) : t.label ?? String(t.value) })]
|
|
74
|
-
}, C ? C(t, n) : n);
|
|
75
|
-
})
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
//#endregion
|
|
79
|
-
export { _ as t };
|
|
80
|
-
|
|
81
|
-
//# sourceMappingURL=Listbox-BZlp5qHz.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Listbox-BZlp5qHz.js","names":[],"sources":["../../src/listbox/Listbox.tsx"],"sourcesContent":["import { HTMLAttributes, JSX, KeyboardEvent, ReactNode, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from \"react\";\n\nimport {\n\tcn,\n\tfindFirstEnabledIndex,\n\tfindLastEnabledIndex,\n\tfindNextEnabledIndex,\n\thandleKeyboardActivation\n} from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { CheckIcon } from \"lucide-react\";\n\nimport uiStyles from \"../ui.module.scss\";\n\ntype ListboxOption<T> = {\n\tvalue: T;\n\tlabel?: string;\n\tdisabled?: boolean;\n};\n\ninterface ListboxBaseProps<T> extends Omit<HTMLAttributes<HTMLUListElement>, \"onChange\" | \"defaultValue\" | \"value\"> {\n\toptions: ListboxOption<T>[];\n\tfocusOnMount?: boolean;\n\trenderItem?: (option: ListboxOption<T>, selected: boolean, active: boolean) => ReactNode;\n\tgetKey?: (option: ListboxOption<T>, index: number) => string;\n}\n\n// Вариант для single-select\ninterface ListboxSingleProps<T> extends ListboxBaseProps<T> {\n\tmultiple?: false;\n\tvalue?: T;\n\tdefaultValue?: T;\n\tonChange?: (value: T, option: ListboxOption<T>) => void;\n}\n\n// Вариант для multi-select\ninterface ListboxMultiProps<T> extends ListboxBaseProps<T> {\n\tmultiple: true;\n\tvalue?: T[];\n\tdefaultValue?: T[];\n\tonChange?: (value: T[], option: ListboxOption<T>) => void;\n}\n\ntype ListboxProps<T> = ListboxSingleProps<T> | ListboxMultiProps<T>;\n\nconst isOptionDisabled = <T,>(option: ListboxOption<T>) => option.disabled === true;\n\nfunction getInitialFocusIndex<T>(options: ListboxOption<T>[], value: T | T[] | undefined, multiple: boolean | undefined) {\n\tif (multiple) {\n\t\tif (Array.isArray(value) && value.length > 0) {\n\t\t\tconst selectedIndex = options.findIndex((option) => value.includes(option.value) && !option.disabled);\n\t\t\tif (selectedIndex >= 0) {\n\t\t\t\treturn selectedIndex;\n\t\t\t}\n\t\t}\n\n\t\treturn findFirstEnabledIndex(options, isOptionDisabled);\n\t}\n\n\tif (value !== undefined) {\n\t\tconst selectedIndex = options.findIndex((option) => option.value === value && !option.disabled);\n\t\tif (selectedIndex >= 0) {\n\t\t\treturn selectedIndex;\n\t\t}\n\t}\n\n\treturn findFirstEnabledIndex(options, isOptionDisabled);\n}\n\n/**\n * Компонент выбора одного или нескольких элементов из списка. Поддерживает controlled API, поиск по данным и рендер кастомных опций.\n */\nexport function Listbox<T>(props: ListboxSingleProps<T>): JSX.Element;\nexport function Listbox<T>(props: ListboxMultiProps<T>): JSX.Element;\nexport function Listbox<T>(props: ListboxProps<T>): JSX.Element {\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst { value, defaultValue, multiple, focusOnMount, renderItem, getKey, options, onChange, id: externalId, ...rest } = props;\n\n\tconst isControlled = value !== undefined;\n\tconst autoId = useId();\n\tconst listId = externalId ?? `${autoId}-listbox`;\n\tconst [internalValue, setInternalValue] = useState<T | T[] | undefined>(defaultValue);\n\tconst listRef = useRef<HTMLUListElement>(null);\n\tconst [focusedIndex, setFocusedIndex] = useState(() => getInitialFocusIndex(options, value ?? defaultValue, multiple));\n\t// const [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n\n\tconst selectedValues = useMemo(\n\t\t() => (isControlled ? value : internalValue) ?? (multiple ? [] : null),\n\t\t[internalValue, isControlled, multiple, value]\n\t);\n\tconst activeIndex = /*hoveredIndex ??*/ focusedIndex;\n\n\tconst handleSelect = (option: ListboxOption<T>) => {\n\t\tif (option.disabled) return;\n\n\t\tlet newValue: T | T[];\n\t\tif (props.multiple) {\n\t\t\tconst arr = Array.isArray(selectedValues) ? selectedValues : [];\n\t\t\tnewValue = arr.includes(option.value) ? arr.filter((v) => v !== option.value) : [...arr, option.value];\n\n\t\t\tprops.onChange?.(newValue, option);\n\t\t} else {\n\t\t\tnewValue = option.value;\n\n\t\t\tprops.onChange?.(newValue, option);\n\t\t}\n\n\t\tif (!isControlled) setInternalValue(newValue);\n\t};\n\n\tconst handleKeyDown = (e: KeyboardEvent<HTMLUListElement>) => {\n\t\tif (e.key === \"ArrowDown\") {\n\t\t\te.preventDefault();\n\t\t\t// setHoveredIndex(null);\n\t\t\tsetFocusedIndex((index) => findNextEnabledIndex(options, index, 1, isOptionDisabled));\n\t\t} else if (e.key === \"ArrowUp\") {\n\t\t\te.preventDefault();\n\t\t\t// setHoveredIndex(null);\n\t\t\tsetFocusedIndex((index) => findNextEnabledIndex(options, index, -1, isOptionDisabled));\n\t\t} else if (e.key === \"Home\") {\n\t\t\te.preventDefault();\n\t\t\t// setHoveredIndex(null);\n\t\t\tsetFocusedIndex(findFirstEnabledIndex(options, isOptionDisabled));\n\t\t} else if (e.key === \"End\") {\n\t\t\te.preventDefault();\n\t\t\t// setHoveredIndex(null);\n\t\t\tsetFocusedIndex(findLastEnabledIndex(options, isOptionDisabled));\n\t\t} else if (\n\t\t\thandleKeyboardActivation(e, () => {\n\t\t\t\tconst activeOption = options[activeIndex];\n\t\t\t\tif (activeOption) {\n\t\t\t\t\thandleSelect(activeOption);\n\t\t\t\t}\n\t\t\t})\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tconst el = listRef.current?.querySelectorAll<HTMLElement>('[role=\"option\"]')[activeIndex];\n\t\tif (el) el.scrollIntoView({ block: \"nearest\" });\n\t}, [activeIndex]);\n\n\tuseLayoutEffect(() => {\n\t\tif (focusOnMount) {\n\t\t\tlistRef.current?.focus();\n\t\t}\n\t}, [focusOnMount]);\n\n\treturn (\n\t\t<ul\n\t\t\tref={listRef}\n\t\t\tid={listId}\n\t\t\trole=\"listbox\"\n\t\t\taria-multiselectable={multiple || undefined}\n\t\t\taria-activedescendant={activeIndex >= 0 ? `${listId}-option-${activeIndex}` : undefined}\n\t\t\ttabIndex={0}\n\t\t\t// onMouseLeave={() => setHoveredIndex(null)}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\t{...rest}\n\t\t\tclassName={cn(uiStyles.uiPanel, \"scrollable\")}>\n\t\t\t{options.map((option, index) => {\n\t\t\t\tconst selected = multiple\n\t\t\t\t\t? Array.isArray(selectedValues) && selectedValues.includes(option.value)\n\t\t\t\t\t: selectedValues === option.value;\n\t\t\t\tconst active = index === activeIndex;\n\n\t\t\t\treturn (\n\t\t\t\t\t<li\n\t\t\t\t\t\tkey={getKey ? getKey(option, index) : index}\n\t\t\t\t\t\tid={`${listId}-option-${index}`}\n\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\taria-selected={selected}\n\t\t\t\t\t\taria-disabled={option.disabled || undefined}\n\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\te.preventDefault(); // чтобы не сбрасывался фокус listbox\n\t\t\t\t\t\t\tif (option.disabled) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetFocusedIndex(index);\n\t\t\t\t\t\t\t// setHoveredIndex(index);\n\t\t\t\t\t\t\thandleSelect(option);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\t// onMouseEnter={() => setHoveredIndex(index)}\n\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tuiStyles.uiPopupOption,\n\t\t\t\t\t\t\toption.disabled && uiStyles.disabled,\n\t\t\t\t\t\t\tactive && uiStyles.uiPopupOptionActive,\n\t\t\t\t\t\t\tselected && uiStyles.selected\n\t\t\t\t\t\t)}>\n\t\t\t\t\t\t{selected ? (\n\t\t\t\t\t\t\t<CheckIcon className={uiStyles.uiPopupOptionIcon} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className={uiStyles.uiPopupOptionIcon}></span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div /*className={uiStyles.uiOptionText}*/>\n\t\t\t\t\t\t\t{renderItem ? renderItem(option, selected, active) : (option.label ?? String(option.value))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t);\n\t\t\t})}\n\t\t</ul>\n\t);\n}\n"],"mappings":"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"}
|