@ryuzaki13/react-foundation-ui 1.5.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/advanced-search/index.js +4 -4
- package/dist/base-table/index.js +1 -1
- package/dist/chunks/CalendarView-Cfih7hjD.js +439 -0
- package/dist/chunks/{CalendarView-DtacoN_c.js.map → CalendarView-Cfih7hjD.js.map} +1 -1
- package/dist/chunks/CheckBox.module-C5SjPwSj.js.map +1 -1
- package/dist/chunks/{TextEditorLexicalClient-DVML-Nhd.js → TextEditorLexicalClient-BSafrkLJ.js} +241 -275
- package/dist/chunks/TextEditorLexicalClient-BSafrkLJ.js.map +1 -0
- package/dist/chunks/{base-table-BPcdSitC.js → base-table-X7aSSjXa.js} +2 -2
- package/dist/chunks/{base-table-BPcdSitC.js.map → base-table-X7aSSjXa.js.map} +1 -1
- package/dist/chunks/{context-menu-BY4pYGwB.js → context-menu-tcD3kVAc.js} +58 -62
- package/dist/chunks/context-menu-tcD3kVAc.js.map +1 -0
- package/dist/chunks/date-input-Bsl9dxxY.js +341 -0
- package/dist/chunks/date-input-Bsl9dxxY.js.map +1 -0
- package/dist/chunks/{input-BWCaVC06.js → input-CAw1Loze.js} +54 -47
- package/dist/chunks/input-CAw1Loze.js.map +1 -0
- package/dist/chunks/{input-files-62qH2TMj.js → input-files-CLtQ7p8j.js} +2 -2
- package/dist/chunks/{input-files-62qH2TMj.js.map → input-files-CLtQ7p8j.js.map} +1 -1
- package/dist/chunks/{input-search-CdPI1cb6.js → input-search-F6MPrUGF.js} +2 -2
- package/dist/chunks/{input-search-CdPI1cb6.js.map → input-search-F6MPrUGF.js.map} +1 -1
- package/dist/chunks/{multi-select-01xmD1nZ.js → multi-select-Dypew65l.js} +60 -59
- package/dist/chunks/multi-select-Dypew65l.js.map +1 -0
- package/dist/chunks/{picker-Mdb73_uW.js → picker-TYLwgl1c.js} +82 -92
- package/dist/chunks/{picker-Mdb73_uW.js.map → picker-TYLwgl1c.js.map} +1 -1
- package/dist/chunks/{select-DRf4_a1Z.js → select-DCSNVEYW.js} +34 -33
- package/dist/chunks/select-DCSNVEYW.js.map +1 -0
- package/dist/chunks/{table-DSg9gi_l.js → table-DihiNNJt.js} +2 -2
- package/dist/chunks/{table-DSg9gi_l.js.map → table-DihiNNJt.js.map} +1 -1
- package/dist/context-menu/components/MenuRoot.d.ts.map +1 -1
- package/dist/context-menu/index.js +1 -1
- package/dist/date-input/index.js +2 -2
- package/dist/date-input/lib/dateInputValue.d.ts +2 -6
- package/dist/date-input/lib/dateInputValue.d.ts.map +1 -1
- package/dist/date-input/lib/types.d.ts +0 -4
- package/dist/date-input/lib/types.d.ts.map +1 -1
- package/dist/date-input/model/useDateInput.d.ts +2 -2
- package/dist/date-input/model/useDateInput.d.ts.map +1 -1
- package/dist/date-input/ui/CalendarView.d.ts.map +1 -1
- package/dist/date-input/ui/DateInput.d.ts +0 -4
- package/dist/date-input/ui/DateInput.d.ts.map +1 -1
- package/dist/date-time-input/index.js +229 -234
- package/dist/date-time-input/index.js.map +1 -1
- package/dist/date-time-input/model/useDateTimeSegments.d.ts.map +1 -1
- package/dist/date-time-input/ui/SingleDateTimeInput.d.ts.map +1 -1
- package/dist/disclosure/index.js.map +1 -1
- package/dist/drop-zone/index.js +1 -1
- package/dist/image/index.js +2 -2
- package/dist/input/Input.d.ts.map +1 -1
- package/dist/input/index.js +1 -1
- package/dist/input-date-time/index.js +1 -1
- package/dist/input-file/index.js +1 -1
- package/dist/input-files/index.js +1 -1
- package/dist/input-image/index.js +1 -1
- package/dist/input-search/index.js +1 -1
- package/dist/layout-picker/index.js +1 -1
- package/dist/list/List.d.ts.map +1 -1
- package/dist/list/index.js +74 -45
- package/dist/list/index.js.map +1 -1
- package/dist/list/useListVirtualizer.d.ts +13 -0
- package/dist/list/useListVirtualizer.d.ts.map +1 -0
- package/dist/multi-select/index.js +1 -1
- package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
- package/dist/picker/index.js +1 -1
- package/dist/picker/model/usePickerQuery.d.ts +6 -2
- package/dist/picker/model/usePickerQuery.d.ts.map +1 -1
- package/dist/picker/model/usePickerSelectionLifecycle.d.ts.map +1 -1
- package/dist/preset-range-date-input/index.js +1 -1
- package/dist/preset-select/index.js +1 -1
- package/dist/select/Select.d.ts.map +1 -1
- package/dist/select/index.js +1 -1
- package/dist/simple-table/index.js +1 -1
- package/dist/slider/SliderInput.d.ts.map +1 -1
- package/dist/slider/index.js +333 -290
- package/dist/slider/index.js.map +1 -1
- package/dist/state-select/index.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/table/index.js +1 -1
- package/dist/table-sorting/index.js +1 -1
- package/dist/tabs/index.js.map +1 -1
- package/dist/tag-input/TagInput.d.ts.map +1 -1
- package/dist/tag-input/index.js +1 -1
- package/dist/tag-input/index.js.map +1 -1
- package/dist/text-editor/EmailDialog.d.ts +1 -2
- package/dist/text-editor/EmailDialog.d.ts.map +1 -1
- package/dist/text-editor/LinkDialog.d.ts +1 -2
- package/dist/text-editor/LinkDialog.d.ts.map +1 -1
- package/dist/text-editor/PhoneDialog.d.ts +1 -2
- package/dist/text-editor/PhoneDialog.d.ts.map +1 -1
- package/dist/text-editor/SemanticDialog.d.ts +1 -2
- package/dist/text-editor/SemanticDialog.d.ts.map +1 -1
- package/dist/text-editor/TextEditorDialogs.d.ts +2 -1
- package/dist/text-editor/TextEditorDialogs.d.ts.map +1 -1
- package/dist/text-editor/TimeDialog.d.ts +1 -2
- package/dist/text-editor/TimeDialog.d.ts.map +1 -1
- package/dist/text-editor/index.js +1 -1
- package/dist/textarea/index.js +1 -1
- package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
- package/dist/tree-select/index.js +243 -248
- package/dist/tree-select/index.js.map +1 -1
- package/dist/tree-table/index.js +1 -1
- package/package.json +1 -1
- package/storybook-static/assets/{Badge-CblO4qSx.js → Badge-DUTHAQCE.js} +1 -1
- package/storybook-static/assets/{Badge.stories-CtRrqjAo.js → Badge.stories-6iI-UG0f.js} +1 -1
- package/storybook-static/assets/{Button-BVt4jmN4.js → Button-B0C3LMAw.js} +1 -1
- package/storybook-static/assets/{Button-Bzc9jBAF.js → Button-CqVTrqw2.js} +1 -1
- package/storybook-static/assets/{Button.stories-tqfxm0ox.js → Button.stories-DjUmGByS.js} +1 -1
- package/storybook-static/assets/{CalendarView-MkrPd5D-.js → CalendarView-hiZ9ETaP.js} +1 -1
- package/storybook-static/assets/{CheckBox-CWipX4CI.js → CheckBox-DBQ50PCI.js} +1 -1
- package/storybook-static/assets/{CheckBox-0BK2dgdD.js → CheckBox-De010n9y.js} +1 -1
- package/storybook-static/assets/CheckBox-Dw4nDCv8.css +1 -0
- package/storybook-static/assets/{CheckBox.stories-B5yWzlQa.js → CheckBox.stories-BfC6OQx3.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-WdTzF_2p.js → Color-6AOWCN3U-C_KzRv-S.js} +1 -1
- package/storybook-static/assets/ContextMenu-BwrqtNnY.js +1 -0
- package/storybook-static/assets/{ContextMenu-kbSWsoCE.js → ContextMenu-CGLg47OY.js} +1 -1
- package/storybook-static/assets/{ContextMenu.stories-CQcrX3sj.js → ContextMenu.stories-JnUlLk_E.js} +1 -1
- package/storybook-static/assets/DateInput-BWbKmFEc.js +1 -0
- package/storybook-static/assets/{DateInput-CyNIW9Md.js → DateInput-CUPdoLCw.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-DyB3PjTl.js → DateInput.stories-DOOukQsB.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-BwibZk_q.js → DateRangePresetSelect-BWm1txZP.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-CBZ0OAmn.js → DateRangePresetSelect-CegjuKSa.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-kmmKl-3j.js → DateRangePresetSelect.stories-BGCOqCf7.js} +1 -1
- package/storybook-static/assets/{Detail-pHBZ5bkR.js → Detail-DLDL5IhK.js} +1 -1
- package/storybook-static/assets/{Detail.stories-Bs5YNmLn.js → Detail.stories-BcP01iwW.js} +1 -1
- package/storybook-static/assets/{Dialog-DbFhCtF1.js → Dialog-BYLrz-6d.js} +1 -1
- package/storybook-static/assets/{Dialog-DBTU-LRR.js → Dialog-DcQbPiWK.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-_WQW8YNs.js → Dialog.stories-C5o4OhEy.js} +1 -1
- package/storybook-static/assets/{Disclosure-vOJWmhLt.js → Disclosure-ChpGjvgZ.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-wyulIOoJ.js → Disclosure.stories-CTL8h6Q3.js} +1 -1
- package/storybook-static/assets/{DisclosureGroup-DjObX5Qs.css → DisclosureGroup-CNoH2D1R.css} +1 -1
- package/storybook-static/assets/{DisclosureGroup-BUDxwl5C.js → DisclosureGroup-CUelavR4.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-B7vhvrpB.js → DocsRenderer-JROSPFPF-BQTqLgKs.js} +1 -1
- package/storybook-static/assets/{DropZone-BvRT0gUm.js → DropZone-5Xw6HUNa.js} +1 -1
- package/storybook-static/assets/{DropZone-B7Q1qQqP.js → DropZone-ULl7tScR.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-WmoR3uPj.js → DropZone.stories-Btud72HY.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-BW35W6_U.js → DropdownMenu-CZDVKXjD.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel-C9G9PsZx.js → ExpandableActionPanel-CwamleZX.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-Dllpmeu_.js → ExpandableActionPanel.stories-BUBvJAPp.js} +1 -1
- package/storybook-static/assets/{Flex-Cydb-4MR.js → Flex-cO3yZG-t.js} +1 -1
- package/storybook-static/assets/{Flex.stories-Dczj9g4W.js → Flex.stories-BAuXOTSJ.js} +1 -1
- package/storybook-static/assets/{FloatingPopover-C-W77AcJ.js → FloatingPopover-C56UHmzH.js} +1 -1
- package/storybook-static/assets/{FormattedTableCell-fePg_bmP.js → FormattedTableCell-B4ObrqF1.js} +1 -1
- package/storybook-static/assets/{Grid-Dal3v5dj.js → Grid-B3-t0FmJ.js} +1 -1
- package/storybook-static/assets/{Grid.stories-Byb4mMpE.js → Grid.stories-Cr_GpL6X.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-B9OD2pur.js → ImageCropper.stories-BDqwBC8C.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-BcUjptiu.js → ImageRenderer-CigIY2hD.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-BuO2nhom.js → ImageRenderer.stories-CI8r-V1l.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-mSkR535R.js → ImageView.stories-D_OG6Deg.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-DVdR3-_j.js → ImageViewer.stories-CQSqogxL.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-DiR_HwIE.js → ImageViewerRuntime-DerEzrYU.js} +1 -1
- package/storybook-static/assets/{Input-BdCavSu1.js → Input-Bm1cMHGo.js} +1 -1
- package/storybook-static/assets/{Input-DZQKV4DP.js → Input-Bot494Bx.js} +1 -1
- package/storybook-static/assets/{Input.stories-Cu66SvKb.js → Input.stories-BovBOurM.js} +1 -1
- package/storybook-static/assets/{InputDateTime-Day94W-O.js → InputDateTime-BekBAEPs.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-990MuicZ.js → InputDateTime.stories-w3S5IslS.js} +1 -1
- package/storybook-static/assets/{InputFile-Cp8x84ZG.js → InputFile-CuQb2x1k.js} +1 -1
- package/storybook-static/assets/{InputFile-CJll5mC-.js → InputFile-GBGGdgQh.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-fNNwbNfa.js → InputFile.stories-f_IZth6c.js} +1 -1
- package/storybook-static/assets/{InputFiles-OusF5Lfq.js → InputFiles-C74DVQhN.js} +1 -1
- package/storybook-static/assets/{InputFiles-CBvR3Szf.js → InputFiles-CrLCcwgR.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-DcpEbOOo.js → InputFiles.stories-BsuddNi0.js} +1 -1
- package/storybook-static/assets/{InputFilesList-zuNP1QIB.js → InputFilesList-Djxwuhlq.js} +1 -1
- package/storybook-static/assets/{InputImage-Dl2bJNZk.js → InputImage-CwlTJmns.js} +1 -1
- package/storybook-static/assets/{InputImage-CjMAL3uq.js → InputImage-DMaYEhTE.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-BzxEndIe.js → InputImage.stories-CnN_t-Bq.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-CXF1nGLl.js → InteractiveComponents.stories-B87LSnhG.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-BahcFBzK.js → LayoutPicker-DKMVqnzr.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-DzAN3gGO.js → LayoutPicker-I0mjwTRq.js} +1 -1
- package/storybook-static/assets/{LayoutPicker.stories-ByamaGlv.js → LayoutPicker.stories-B94m5_5E.js} +1 -1
- package/storybook-static/assets/{Listbox-C5hwzE4s.js → Listbox-2CNZxFrM.js} +1 -1
- package/storybook-static/assets/{Listbox-CHsNGsDc.js → Listbox-BOCPTICI.js} +1 -1
- package/storybook-static/assets/{Listbox.stories-CvXZeESb.js → Listbox.stories-DkRL364d.js} +1 -1
- package/storybook-static/assets/{Modal-Dib11Lzy.js → Modal-BF5Wtu_Z.js} +1 -1
- package/storybook-static/assets/{Modal.stories-DYMy-kLP.js → Modal.stories-BuBDjhkS.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-natWXnSM.js → ModalManagerProvider-DtAfcujR.js} +1 -1
- package/storybook-static/assets/{MultiSelect-Cl9MkPZw.js → MultiSelect-B5MJePks.js} +1 -1
- package/storybook-static/assets/{MultiSelect-DlCZ7dhH.js → MultiSelect-B75x42Va.js} +1 -1
- package/storybook-static/assets/{MultiSelect.stories-202TRBKq.js → MultiSelect.stories-pCDFxnvP.js} +1 -1
- package/storybook-static/assets/{NoData-DcHZdLTJ.js → NoData-kWRpCxvl.js} +1 -1
- package/storybook-static/assets/{NotificationsHost-DzqEi2vc.js → NotificationsHost-lblab1gc.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-CvoQfIjj.js → NotificationsHost.stories-a3NIcVIj.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-CHQguikm.js → ODataMultiSelect-BDqBjXSe.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-BZbWK4CP.js → ODataMultiSelect.stories-8nYfEOBa.js} +1 -1
- package/storybook-static/assets/{ODataSelect-C1YGDpg_.js → ODataSelect-BmcZs-Q9.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-D4tQXs2c.js → ODataSelect.stories-fiEuKGVT.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-BjR7zhyJ.js → ODataTreeMultiSelect-ZAlccR5J.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-Drg8mLhi.js → ODataTreeMultiSelect.stories-sP-IANic.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-D_fcT3Aw.js → ODataTreeSelect-DSpeH-SQ.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-BWFdmmvf.js → ODataTreeSelect.stories-C_G-ryCy.js} +1 -1
- package/storybook-static/assets/{OneStepScroller-DWCRXFHq.js → OneStepScroller-BPYnBbTY.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-DtfTzrNK.js → PeriodSelect-Dj1G9UDW.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-C7QQKxZ4.js → PeriodSelect-v-ybkTTW.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-CF65LIHm.js → PeriodSelect.stories-DcAJ8fkJ.js} +1 -1
- package/storybook-static/assets/{PickerSelectionToolbar-D9atWyWj.js → PickerSelectionToolbar-7gktfdu3.js} +1 -1
- package/storybook-static/assets/{PickerTriggerActions-C7WeaOKN.js → PickerTriggerActions-Bd-vIbv8.js} +1 -1
- package/storybook-static/assets/{Popover-DQJIeny_.js → Popover-5dsoQ1_b.js} +1 -1
- package/storybook-static/assets/{Popover-CUJF-IMC.js → Popover-BoMs5h0y.js} +1 -1
- package/storybook-static/assets/{Popover.stories-BON0z3PX.js → Popover.stories-CbNVj_hu.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-DpA1KOCo.js → PresetRangeDateInput-BeQMoRpC.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-D3_uzWzQ.js → PresetRangeDateInput-DyGnRjp4.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-CDDJDiei.js → PresetRangeDateInput.stories-C7gwDup9.js} +1 -1
- package/storybook-static/assets/{PresetSelect-DlV2eC-b.js → PresetSelect-C8e1Xzbh.js} +1 -1
- package/storybook-static/assets/{RadioButton-BLyqp88m.js → RadioButton-blBN8xkq.js} +1 -1
- package/storybook-static/assets/{RadioButton-wkLEwRaH.js → RadioButton-kIVy3cCo.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-DS9RYBEJ.js → RadioButton.stories-B8U30Wqk.js} +1 -1
- package/storybook-static/assets/{RadioGroup-CsWIje1J.js → RadioGroup-CuWLCtLr.js} +1 -1
- package/storybook-static/assets/{RadioGroup-DERcyzA0.js → RadioGroup-D4fwjGGp.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-DkgUPavS.js → RadioGroup.stories-CGo-8-Bv.js} +1 -1
- package/storybook-static/assets/{Scrollable-DvJ3T3Ik.js → Scrollable-CeGzYD_u.js} +1 -1
- package/storybook-static/assets/{Select-DmEm2boi.js → Select-rdcqkPnE.js} +1 -1
- package/storybook-static/assets/Select-txovgbTh.js +12 -0
- package/storybook-static/assets/{Select.stories-BEPJovVd.js → Select.stories-DPM22VkR.js} +1 -1
- package/storybook-static/assets/{SelectOptionContent-B5E2W8PZ.js → SelectOptionContent-HqUICxHy.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-wgzDfqEi.js → SerializableSelect-btIwjUkv.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-V8IqyO9Y.js → SerializableSelect.stories-EodX_I8R.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-B7v0t9f5.js → SingleDateTimeInput-CMKsQ13r.js} +1 -1
- package/storybook-static/assets/SingleDateTimeInput-coulKUC8.js +1 -0
- package/storybook-static/assets/{SingleDateTimeInput.stories-FOoEMoyF.js → SingleDateTimeInput.stories-BkSaW82_.js} +1 -1
- package/storybook-static/assets/{Slider-24H5ASxG.js → Slider-BDjIIhGp.js} +1 -1
- package/storybook-static/assets/{Slider-3HQKHpoi.js → Slider-DhBLW1at.js} +1 -1
- package/storybook-static/assets/{Slider.stories-DeeP8cmV.js → Slider.stories-DpTr65-r.js} +1 -1
- package/storybook-static/assets/SliderInput-BEV5I_1l.js +2 -0
- package/storybook-static/assets/{SliderInput-CFbx-GW7.js → SliderInput-CiuILy6K.js} +1 -1
- package/storybook-static/assets/{SliderInput.stories-Djli653m.js → SliderInput.stories-CL7SlLhr.js} +1 -1
- package/storybook-static/assets/{Sortable-CMo2PMKX.js → Sortable-CtNygGoQ.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-BFsQvwMx.js → Sortable.stories-BbNoyvN9.js} +1 -1
- package/storybook-static/assets/{Splitter-dwOhGuIg.js → Splitter-BYaydk0U.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-DZ3nAxpo.js → Splitter.stories-Bo2rHdcD.js} +1 -1
- package/storybook-static/assets/{StateSelect-j3gi4kbM.js → StateSelect-D2MILxIu.js} +1 -1
- package/storybook-static/assets/{StateSelect-IigEzRom.js → StateSelect-DNKjfPR-.js} +1 -1
- package/storybook-static/assets/{StateSelect.stories-Bj-2m2hS.js → StateSelect.stories-D_NhQBcN.js} +1 -1
- package/storybook-static/assets/{StringToggle.stories-ClSl76ts.js → StringToggle.stories-CS507_cT.js} +1 -1
- package/storybook-static/assets/{Switch-C9OAPzUM.js → Switch-9gK7d4Is.js} +1 -1
- package/storybook-static/assets/{Switch-BDbBZjMA.js → Switch-i3aW21Wi.js} +1 -1
- package/storybook-static/assets/{Switch.stories-CQ3ueThx.js → Switch.stories-BRIuS4_o.js} +1 -1
- package/storybook-static/assets/{Table-BbGcLQ81.js → Table-CytIsA37.js} +1 -1
- package/storybook-static/assets/{Table.stories-DvaHP59R.js → Table.stories-DYPLk3TC.js} +1 -1
- package/storybook-static/assets/{Tabs-CNEYvzUv.js → Tabs-BMee-SUy.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-BpyQokl8.js → Tabs.stories-KqQTRqYo.js} +1 -1
- package/storybook-static/assets/TabsBox-B5ugO318.css +1 -0
- package/storybook-static/assets/{TabsBox-ClZCbgKB.js → TabsBox-BM1mIOmT.js} +1 -1
- package/storybook-static/assets/{TagInput-DorsSF_V.js → TagInput-yEIGCMwZ.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-ChgRz4Co.js → TagInput.stories-DmuVnRfR.js} +1 -1
- package/storybook-static/assets/{Text-DUqtop-c.js → Text-DUN8T0sU.js} +1 -1
- package/storybook-static/assets/{Textarea-ZfZJmHsp.js → Textarea-BeKW8LG0.js} +1 -1
- package/storybook-static/assets/{Textarea-yZWv6QdW.js → Textarea-W648f4l-.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-B5Q7syxH.js → Textarea.stories-BbZ-hCVF.js} +1 -1
- package/storybook-static/assets/{TimePanel-C39f__j8.js → TimePanel-D-RygTSo.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-DtjILTPk.js → TimePanel.stories-CzVur3oq.js} +1 -1
- package/storybook-static/assets/{Toggle-CdpPJI_O.js → Toggle-CCZ3ekPb.js} +1 -1
- package/storybook-static/assets/{Toggle-BndjhQFY.js → Toggle-Dc5aTAHb.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-BD_C0YTw.js → Toggle.stories-R3abtezP.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-BPz5kISi.js → TreeMultiSelect-Bi-LirPw.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect--M1WiE_f.js → TreeMultiSelect-CzKVkvZd.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-BgkDJur9.js → TreeMultiSelect.stories-Co_PUawN.js} +1 -1
- package/storybook-static/assets/TreePickerBase-BIbhsg5t.js +22 -0
- package/storybook-static/assets/{TreeSelect-BrQGgG40.js → TreeSelect-B4G9gk8x.js} +1 -1
- package/storybook-static/assets/{TreeSelect-B0RWsDT4.js → TreeSelect-Dm3zEY1S.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-DkgdJ5XX.js → TreeSelect.stories-sRek_0PI.js} +1 -1
- package/storybook-static/assets/{TreeTable-HQr8pb9r.js → TreeTable-ybfR3-5k.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-C4hcph6x.js → TreeTable.stories-BoZjeFKM.js} +1 -1
- package/storybook-static/assets/{async-lzSWdC34.js → async-Df2RUQlC.js} +1 -1
- package/storybook-static/assets/{blocks-D8l_hmHU.js → blocks-BcJ54T3V.js} +3 -3
- package/storybook-static/assets/{browserAndReact-BwvRFhzI.js → browserAndReact-Bfk1cWqT.js} +1 -1
- package/storybook-static/assets/{check-DpX8PMs_.js → check-Dl-iF50o.js} +1 -1
- package/storybook-static/assets/{chevron-down-DE8FRR-h.js → chevron-down-DOIDj8WF.js} +1 -1
- package/storybook-static/assets/{chevron-left-Cy3TEG_Y.js → chevron-left-DHEBK_X7.js} +1 -1
- package/storybook-static/assets/{chevron-right-CZ4-4s1X.js → chevron-right-Cf6T-grH.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-Ci-XApFb.js → chunk-W22LQPXL-DLMJSt_s.js} +1 -1
- package/storybook-static/assets/{circle-alert-CWbgc3Jn.js → circle-alert-DmNt0Uwi.js} +1 -1
- package/storybook-static/assets/{circle-check-DODquDnH.js → circle-check-DN8HwnBX.js} +1 -1
- package/storybook-static/assets/{components-BdUOCBP9.js → components-DI9O99vY.js} +3 -3
- package/storybook-static/assets/{contextMenu-XvvXJEpW.js → contextMenu-DWXX4ZHr.js} +1 -1
- package/storybook-static/assets/defaultRenderers-DwI2nLiY.js +1 -0
- package/storybook-static/assets/{download-BEGaHxQc.js → download-oMaZX_8z.js} +1 -1
- package/storybook-static/assets/{filesAndExcel-C9FnZv9P.js → filesAndExcel-ur50Ve27.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-GziJy4gA.js → floating-ui.react-zHdvT_EM.js} +1 -1
- package/storybook-static/assets/{formatters-CVj-3Vn0-C5-BLq9O.js → formatters-CVj-3Vn0-BFaHJqZL.js} +1 -1
- package/storybook-static/assets/{formatters-vWial7jf.js → formatters-CnFJmQFO.js} +1 -1
- package/storybook-static/assets/{formatters-runtime-DO0szrYr.js → formatters-runtime-LyrD5drJ.js} +1 -1
- package/storybook-static/assets/{foundationLib-CIqc9fhG.js → foundationLib-D-8O61ay.js} +1 -1
- package/storybook-static/assets/{hooks-DfgvMSqN.js → hooks-DbzqJvP-.js} +1 -1
- package/storybook-static/assets/iframe-hjgtoR20.js +1 -0
- package/storybook-static/assets/{iframe-BHhbrImE.js → iframe-jqJCNVG-.js} +3 -3
- package/storybook-static/assets/{info-DSZ4aUvi.js → info-DTU0XXKY.js} +1 -1
- package/storybook-static/assets/{odata-DmijE2H9.js → odata-BBbQt4pn.js} +1 -1
- package/storybook-static/assets/odata-service-B5w4YBao-BW9QLSrS.js +3 -0
- package/storybook-static/assets/{odataAndTables-m2AMS6oI.js → odataAndTables-VK5X4V6B.js} +1 -1
- package/storybook-static/assets/{odataFetchFn-CwpkgKoz.js → odataFetchFn-T6FIbpPz.js} +1 -1
- package/storybook-static/assets/{odataStoryFixtures-CBtJYQsv.js → odataStoryFixtures-pMgI1q6n.js} +1 -1
- package/storybook-static/assets/{persisted-DpSU25AR.js → persisted-EtS4vVCD.js} +1 -1
- package/storybook-static/assets/{pureUtilities-BG4ZSO63.js → pureUtilities-BIjOnY3J.js} +1 -1
- package/storybook-static/assets/{react-Bz35HWpn.js → react-BG6GAoHo.js} +1 -1
- package/storybook-static/assets/{refresh-cw-ltgf4cUB.js → refresh-cw-1qKqpsOV.js} +1 -1
- package/storybook-static/assets/{runtimeAndState-C_GrWjr8.js → runtimeAndState-BorNVnh8.js} +1 -1
- package/storybook-static/assets/{settings-2-qpVYfZn_.js → settings-2-CPrjOIso.js} +1 -1
- package/storybook-static/assets/{sortable-CrCQ3H1V.js → sortable-D6C8wTse.js} +1 -1
- package/storybook-static/assets/{syntaxhighlighter-T5IQBZDB-eOr9ght-.js → syntaxhighlighter-T5IQBZDB-ifBULuBx.js} +1 -1
- package/storybook-static/assets/{trash-2-lfhUDclN.js → trash-2-CIrQtNzc.js} +1 -1
- package/storybook-static/assets/{triangle-alert-D9YGTafY.js → triangle-alert-D3piZGn9.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-BVgxJPNn.js → useODataSelectBase-CwDThJRi.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-CdLHOBnD.js → useODataTreeData-C4v28uFV.js} +1 -1
- package/storybook-static/assets/{usePickerQuery-B6U-oOS6.js → usePickerQuery-BodFjGup.js} +1 -1
- package/storybook-static/assets/{usePickerTriggerController-C-VxrzSe.js → usePickerTriggerController-BjnU7tfr.js} +1 -1
- package/storybook-static/assets/{x-CNM39xuu.js → x-CaGImgpS.js} +1 -1
- package/storybook-static/iframe.html +2 -2
- package/storybook-static/project.json +1 -1
- package/dist/chunks/CalendarView-DtacoN_c.js +0 -439
- package/dist/chunks/TextEditorLexicalClient-DVML-Nhd.js.map +0 -1
- package/dist/chunks/context-menu-BY4pYGwB.js.map +0 -1
- package/dist/chunks/date-input-DKkJO_-h.js +0 -340
- package/dist/chunks/date-input-DKkJO_-h.js.map +0 -1
- package/dist/chunks/input-BWCaVC06.js.map +0 -1
- package/dist/chunks/multi-select-01xmD1nZ.js.map +0 -1
- package/dist/chunks/select-DRf4_a1Z.js.map +0 -1
- package/storybook-static/assets/CheckBox-8XczNrjq.css +0 -1
- package/storybook-static/assets/ContextMenu-BjWu5DHB.js +0 -1
- package/storybook-static/assets/DateInput-BUgBb3aH.js +0 -1
- package/storybook-static/assets/Select-g0c0XGQY.js +0 -12
- package/storybook-static/assets/SingleDateTimeInput-CN7PyOsb.js +0 -1
- package/storybook-static/assets/SliderInput-bqFr-Lyp.js +0 -2
- package/storybook-static/assets/TabsBox-Co1vxD90.css +0 -1
- package/storybook-static/assets/TreePickerBase-Dup03AiC.js +0 -22
- package/storybook-static/assets/defaultRenderers-lMEgLPIU.js +0 -1
- package/storybook-static/assets/iframe-oIP1aL7X.js +0 -1
- package/storybook-static/assets/odata-service-B5w4YBao-BcP2cvfZ.js +0 -3
- /package/storybook-static/assets/{CheckBox.module-DPvJxTHD.js → CheckBox.module-CM_GPl_E.js} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./ui.module-BfaIVBba.js";
|
|
2
|
-
import {
|
|
2
|
+
import { useId as t, useLayoutEffect as n, useRef as r, useState as i } from "react";
|
|
3
3
|
import { cn as a } from "@ryuzaki13/react-foundation-lib/utils";
|
|
4
4
|
import { XIcon as o } from "lucide-react";
|
|
5
5
|
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
@@ -16,8 +16,8 @@ var u = {
|
|
|
16
16
|
};
|
|
17
17
|
//#endregion
|
|
18
18
|
//#region src/input/lib/useInputFieldIds.ts
|
|
19
|
-
function d({ id: e, hasLabel:
|
|
20
|
-
let a =
|
|
19
|
+
function d({ id: e, hasLabel: n, hasDescription: r, hasError: i }) {
|
|
20
|
+
let a = t(), o = e ?? a, s = n ? `${o}-label` : void 0, c = r ? `${o}-description` : void 0, l = i ? `${o}-error` : void 0;
|
|
21
21
|
return {
|
|
22
22
|
controlId: o,
|
|
23
23
|
labelId: s,
|
|
@@ -167,55 +167,62 @@ function y({ label: t, description: n, disabled: r, className: o, onClear: c, er
|
|
|
167
167
|
})
|
|
168
168
|
});
|
|
169
169
|
}
|
|
170
|
-
function b({ label:
|
|
171
|
-
let
|
|
172
|
-
id:
|
|
173
|
-
hasLabel:
|
|
174
|
-
hasDescription: !!
|
|
175
|
-
hasError: !!
|
|
176
|
-
}),
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
P(
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
},
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
170
|
+
function b({ label: t, description: i, disabled: o, className: c, onClear: f, error: p, onClearError: g, onChange: y, value: b, size: x, endAdornment: S, endAdornmentClassName: C, endAdornmentWidth: w, ...T }) {
|
|
171
|
+
let E = T, { controlId: D, labelId: O, descriptionId: k, errorId: A, describedBy: j } = d({
|
|
172
|
+
id: T.id,
|
|
173
|
+
hasLabel: t != null,
|
|
174
|
+
hasDescription: !!i,
|
|
175
|
+
hasError: !!p
|
|
176
|
+
}), M = r(null), N = r(null), P = b !== void 0 && typeof b == "number" && !isNaN(b) ? String(b) : "";
|
|
177
|
+
n(() => {
|
|
178
|
+
let e = N.current;
|
|
179
|
+
if (e && Object.is(e.value, b)) {
|
|
180
|
+
M.current && M.current.value !== e.raw && (M.current.value = e.raw);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
N.current = null, M.current && M.current.value !== P && (M.current.value = P);
|
|
184
|
+
}, [P, b]);
|
|
185
|
+
let F = f ? () => {
|
|
186
|
+
f();
|
|
187
|
+
} : void 0, I = (e) => {
|
|
188
|
+
let t = e.target.value, n = l(t);
|
|
189
|
+
N.current = {
|
|
190
|
+
value: n,
|
|
191
|
+
raw: t
|
|
192
|
+
}, y(n), p && g && g();
|
|
193
|
+
}, L = v({
|
|
194
|
+
endAdornment: S,
|
|
195
|
+
onClear: F,
|
|
196
|
+
disabled: o
|
|
197
|
+
}), R = _(S != null, !!F, w);
|
|
192
198
|
return /* @__PURE__ */ s(m, {
|
|
193
|
-
label:
|
|
194
|
-
description:
|
|
195
|
-
disabled:
|
|
196
|
-
required:
|
|
197
|
-
className:
|
|
198
|
-
size:
|
|
199
|
-
error:
|
|
200
|
-
controlId:
|
|
201
|
-
labelId:
|
|
202
|
-
descriptionId:
|
|
203
|
-
errorId:
|
|
199
|
+
label: t,
|
|
200
|
+
description: i,
|
|
201
|
+
disabled: o,
|
|
202
|
+
required: T.required,
|
|
203
|
+
className: c,
|
|
204
|
+
size: x,
|
|
205
|
+
error: p,
|
|
206
|
+
controlId: D,
|
|
207
|
+
labelId: O,
|
|
208
|
+
descriptionId: k,
|
|
209
|
+
errorId: A,
|
|
204
210
|
children: /* @__PURE__ */ s(h, {
|
|
205
|
-
endAdornment:
|
|
206
|
-
endAdornmentClassName:
|
|
207
|
-
endAdornmentWidth:
|
|
211
|
+
endAdornment: L,
|
|
212
|
+
endAdornmentClassName: C,
|
|
213
|
+
endAdornmentWidth: R,
|
|
208
214
|
children: ({ controlClassName: t }) => /* @__PURE__ */ s("input", {
|
|
209
|
-
...
|
|
210
|
-
|
|
215
|
+
...E,
|
|
216
|
+
ref: M,
|
|
217
|
+
id: D,
|
|
211
218
|
type: "number",
|
|
212
219
|
inputMode: "decimal",
|
|
213
|
-
disabled:
|
|
214
|
-
|
|
215
|
-
"aria-labelledby":
|
|
216
|
-
"aria-describedby":
|
|
220
|
+
disabled: o,
|
|
221
|
+
defaultValue: P,
|
|
222
|
+
"aria-labelledby": O,
|
|
223
|
+
"aria-describedby": j,
|
|
217
224
|
className: a(e.uiInputControl, u.input, u.inputNumber, t),
|
|
218
|
-
onChange:
|
|
225
|
+
onChange: I
|
|
219
226
|
})
|
|
220
227
|
})
|
|
221
228
|
});
|
|
@@ -232,4 +239,4 @@ function S({ text: t }) {
|
|
|
232
239
|
//#endregion
|
|
233
240
|
export { b as a, p as c, h as i, d as l, x as n, y as o, g as r, m as s, S as t, u };
|
|
234
241
|
|
|
235
|
-
//# sourceMappingURL=input-
|
|
242
|
+
//# sourceMappingURL=input-CAw1Loze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-CAw1Loze.js","names":[],"sources":["../../src/input/Input.module.scss","../../src/input/lib/useInputFieldIds.ts","../../src/input/Input.tsx","../../src/input/InputErrorComponent.tsx"],"sourcesContent":["@use \"@/styles/mixins\" as *;\n\n.controlLayout {\n\tposition: relative;\n\twidth: 100%;\n}\n\n.input {\n\theight: var(--control-height);\n\twidth: 100%;\n\tpadding: var(--space-xs) var(--space-sm);\n\tfont-size: var(--font-size-md);\n\n\t--ui-color: var(--content-0);\n\t--ui-color-hover: var(--content-0);\n\t--ui-color-active: var(--content-0);\n\n\t--button-size: cacl(var(--control-height) - var(--border-width) * 2);\n}\n\n.inputNumber {\n\tappearance: textfield;\n\t-moz-appearance: textfield;\n\n\t&::-webkit-inner-spin-button,\n\t&::-webkit-outer-spin-button {\n\t\t-webkit-appearance: none;\n\t\tmargin: 0;\n\t}\n}\n\n.controlWithEndAdornment {\n\tpadding-right: calc(var(--input-end-adornment-width, var(--control-height)) + var(--space-sm));\n}\n\n.controlEndAdornment {\n\tposition: absolute;\n\theight: 100%;\n\ttop: 0;\n\tright: calc(var(--border-width) * 2);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\tmax-width: calc(100% - var(--space-md));\n}\n\n.endAdornmentGroup {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--space-xs);\n}\n\n.clearButton {\n\twidth: var(--button-size);\n\theight: var(--button-size);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tborder: none;\n\tborder-radius: var(--radius-sm);\n\n\tbackground: transparent;\n\tcolor: var(--content-2);\n\n\ttransition:\n\t\tcolor var(--transition-fast) ease,\n\t\tbackground-color var(--transition-fast) ease;\n\n\t&:hover {\n\t\tcolor: var(--content-accent);\n\t}\n\n\t&:focus-visible {\n\t\t@include focusVisible;\n\t}\n\n\t&:disabled {\n\t\tpointer-events: none;\n\t\topacity: var(--disabled-opacity);\n\t}\n}\n\n.error {\n\tposition: absolute;\n\tz-index: 11;\n\tbottom: calc(var(--space-xs) * -1);\n\tleft: 0;\n\tright: 0;\n\ttransform: translateY(100%);\n\t// font-size: var(--font-size-sm);\n\tcolor: var(--status-error-on-fill);\n\tbackground: var(--status-error-fill);\n\tborder-radius: var(--radius-sm);\n\tpadding: var(--space-xs) var(--space-sm);\n\tbox-shadow: var(--shadow-sm);\n\topacity: 0.9;\n}\n","import { useId } from \"react\";\n\nexport interface UseInputFieldIdsOptions {\n\tid?: string;\n\thasLabel?: boolean;\n\thasDescription?: boolean;\n\thasError?: boolean;\n}\n\nexport interface InputFieldIds {\n\tcontrolId: string;\n\tlabelId?: string;\n\tdescriptionId?: string;\n\terrorId?: string;\n\tdescribedBy?: string;\n}\n\nexport function useInputFieldIds({ id: externalId, hasLabel, hasDescription, hasError }: UseInputFieldIdsOptions): InputFieldIds {\n\tconst autoId = useId();\n\tconst controlId = externalId ?? autoId;\n\tconst labelId = hasLabel ? `${controlId}-label` : undefined;\n\tconst descriptionId = hasDescription ? `${controlId}-description` : undefined;\n\tconst errorId = hasError ? `${controlId}-error` : undefined;\n\tconst describedBy = [descriptionId, errorId].filter(Boolean).join(\" \") || undefined;\n\n\treturn {\n\t\tcontrolId,\n\t\tlabelId,\n\t\tdescriptionId,\n\t\terrorId,\n\t\tdescribedBy\n\t};\n}\n","import React, { CSSProperties, InputHTMLAttributes, ReactNode, useLayoutEffect, useRef, useState } from \"react\";\n\nimport { toFiniteNumber } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { XIcon } from \"lucide-react\";\n\nimport { UiBaseProps, UiSize } from \"../types\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Input.module.scss\";\nimport { useInputFieldIds } from \"./lib/useInputFieldIds\";\n\nexport interface InputUIProps extends Omit<UiBaseProps<never>, \"value\" | \"onChange\"> {\n\tclassName?: string;\n\terror?: string;\n\tcontrolId?: string;\n\tlabelId?: string;\n\tdescriptionId?: string;\n\terrorId?: string;\n\trequired?: boolean;\n\tchildren: React.ReactNode;\n}\n\nexport interface InputControlRenderProps {\n\tcontrolClassName?: string;\n}\n\nexport interface InputControlProps {\n\tclassName?: string;\n\tendAdornment?: ReactNode;\n\tendAdornmentClassName?: string;\n\tendAdornmentWidth?: string;\n\tchildren: (props: InputControlRenderProps) => ReactNode;\n}\n\nexport interface InputClearButtonProps {\n\tonClick?: () => void;\n\tdisabled?: boolean;\n\tclassName?: string;\n\tariaLabel?: string;\n}\n\nfunction InputLabel({ label, controlId, labelId }: { label: React.ReactNode; controlId?: string; labelId?: string }) {\n\treturn (\n\t\t<label id={labelId} htmlFor={controlId} className={uiStyles.uiLabel}>\n\t\t\t{label}\n\t\t</label>\n\t);\n}\n\nexport function InputUILoading({\n\tlabel,\n\tdescription,\n\tsize,\n\tdisabled,\n\tclassName\n}: Pick<InputUIProps, \"label\" | \"description\" | \"size\" | \"disabled\" | \"className\">) {\n\tconst { controlId, labelId, descriptionId } = useInputFieldIds({\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description\n\t});\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(uiStyles.uiElement, uiStyles.uiSizable, size && uiStyles[size as UiSize], uiStyles.disabled, className)}\n\t\t\taria-disabled={disabled || undefined}>\n\t\t\t{label && <InputLabel label={label} controlId={controlId} labelId={labelId} />}\n\t\t\t{description && (\n\t\t\t\t<p id={descriptionId} className={uiStyles.uiDescription}>\n\t\t\t\t\t{description}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t\t<div className={cn(uiStyles.uiInputControlFake, \"skeletonLine\")} />\n\t\t</div>\n\t);\n}\n\n/**\n * Низкоуровневая оболочка поля ввода с общими элементами оформления.\n */\nexport function InputUI({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tclassName,\n\terror,\n\tsize,\n\tcontrolId,\n\tlabelId,\n\tdescriptionId,\n\terrorId,\n\trequired,\n\tchildren\n}: InputUIProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tuiStyles.uiElement,\n\t\t\t\tuiStyles.uiSizable,\n\t\t\t\tsize && uiStyles[size as UiSize],\n\t\t\t\tdisabled && uiStyles.disabled,\n\t\t\t\trequired && uiStyles.required,\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-disabled={disabled || undefined}>\n\t\t\t{label && <InputLabel label={label} controlId={controlId} labelId={labelId} />}\n\t\t\t{description && (\n\t\t\t\t<p id={descriptionId} className={uiStyles.uiDescription}>\n\t\t\t\t\t{description}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t\t<div className={styles.controlLayout}>\n\t\t\t\t{children}\n\n\t\t\t\t{error && (\n\t\t\t\t\t<p id={errorId} className={styles.error} role=\"alert\">\n\t\t\t\t\t\t{error}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport function InputControl({ className, endAdornment, endAdornmentClassName, endAdornmentWidth, children }: InputControlProps) {\n\tconst hasEndAdornment = endAdornment !== undefined && endAdornment !== null;\n\tconst style =\n\t\thasEndAdornment && endAdornmentWidth ? ({ \"--input-end-adornment-width\": endAdornmentWidth } as CSSProperties) : undefined;\n\n\treturn (\n\t\t<div className={cn(styles.controlLayout, className)} style={style}>\n\t\t\t{children({ controlClassName: hasEndAdornment ? styles.controlWithEndAdornment : undefined })}\n\t\t\t{hasEndAdornment && <div className={cn(styles.controlEndAdornment, endAdornmentClassName)}>{endAdornment}</div>}\n\t\t</div>\n\t);\n}\n\nexport function InputClearButton({ onClick, disabled, className, ariaLabel = \"Очистить значение\" }: InputClearButtonProps) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tdisabled={disabled || !onClick}\n\t\t\tclassName={cn(styles.clearButton, className)}\n\t\t\tonClick={onClick}\n\t\t\taria-label={ariaLabel}>\n\t\t\t<XIcon />\n\t\t</button>\n\t);\n}\n\nfunction resolveEndAdornmentWidth(hasAdornment: boolean, hasClearAction: boolean, explicitWidth?: string) {\n\tif (explicitWidth) {\n\t\treturn explicitWidth;\n\t}\n\n\tif (hasAdornment && hasClearAction) {\n\t\treturn \"calc((var(--control-height) * 2) + var(--space-xs))\";\n\t}\n\n\tif (hasAdornment || hasClearAction) {\n\t\treturn \"var(--control-height)\";\n\t}\n\n\treturn undefined;\n}\n\nfunction createEndAdornment({ endAdornment, onClear, disabled }: { endAdornment?: ReactNode; onClear?: () => void; disabled?: boolean }) {\n\tif ((endAdornment === undefined || endAdornment === null) && !onClear) {\n\t\treturn undefined;\n\t}\n\n\treturn (\n\t\t<div className={styles.endAdornmentGroup}>\n\t\t\t{endAdornment}\n\t\t\t{onClear && <InputClearButton onClick={onClear} disabled={disabled} />}\n\t\t</div>\n\t);\n}\n\nexport interface BaseInputProps<T extends number | string | undefined, V = T>\n\textends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"value\" | \"type\" | \"defaultValue\" | \"onChange\">, UiBaseProps<T, V> {\n\tonClear?: () => void;\n\terror?: string;\n\tonClearError?: () => void;\n\tdefaultValue?: T;\n\tendAdornment?: ReactNode;\n\tendAdornmentClassName?: string;\n\tendAdornmentWidth?: string;\n}\n\nexport interface InputTextProps extends BaseInputProps<string> {\n\ttype?: \"email\" | \"password\" | \"search\" | \"tel\" | \"text\" | \"url\";\n\n\t/**\n\t * Регулярное выражение для валидации всего введённого значения.\n\t * При несоответствии поле подсвечивается как невалидное, но текст не удаляется.\n\t * Пример: `/^\\d*$/`\n\t */\n\tallowedPattern?: RegExp;\n}\n\n/**\n * Базовое текстовое поле ввода для строковых значений.\n */\nexport function InputText({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tclassName,\n\tonClear,\n\terror,\n\tonClearError,\n\tonChange,\n\tvalue,\n\tsize,\n\tallowedPattern,\n\tendAdornment,\n\tendAdornmentClassName,\n\tendAdornmentWidth,\n\ttype = \"text\",\n\t...props\n}: InputTextProps) {\n\tconst [internalInvalid, setInternalInvalid] = useState(false);\n\n\tconst handleInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst newValue = e.target.value;\n\n\t\tif (allowedPattern !== undefined) {\n\t\t\tsetInternalInvalid(newValue !== \"\" && !allowedPattern.test(newValue));\n\t\t}\n\n\t\tonChange(newValue);\n\t\tif (error && onClearError) onClearError();\n\t};\n\n\tconst hasValue = Boolean(value && value.length > 0);\n\tconst visibleError = hasValue ? error : undefined;\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\tid: props.id,\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!visibleError\n\t});\n\tconst isInvalid = hasValue && (!!error || internalInvalid);\n\tconst resolvedEndAdornment = createEndAdornment({ endAdornment, onClear, disabled: disabled || !hasValue });\n\tconst hasCustomAdornment = endAdornment !== undefined && endAdornment !== null;\n\tconst resolvedEndAdornmentWidth = resolveEndAdornmentWidth(hasCustomAdornment, !!onClear, endAdornmentWidth);\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\trequired={props.required}\n\t\t\tclassName={className}\n\t\t\tsize={size}\n\t\t\terror={visibleError}\n\t\t\tcontrolId={controlId}\n\t\t\tlabelId={labelId}\n\t\t\tdescriptionId={descriptionId}\n\t\t\terrorId={errorId}>\n\t\t\t<InputControl\n\t\t\t\tendAdornment={resolvedEndAdornment}\n\t\t\t\tendAdornmentClassName={endAdornmentClassName}\n\t\t\t\tendAdornmentWidth={resolvedEndAdornmentWidth}>\n\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t<input\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\ttype={type}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\taria-invalid={isInvalid || undefined}\n\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\tdata-invalid={isInvalid ? \"\" : undefined}\n\t\t\t\t\t\tclassName={cn(uiStyles.uiInputControl, styles.input, controlClassName)}\n\t\t\t\t\t\tonChange={handleInput}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</InputControl>\n\t\t</InputUI>\n\t);\n}\n\n/**\n * Числовое поле ввода с нормализацией значения и защитой от промежуточного невалидного ввода.\n */\nexport function InputNumber({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tclassName,\n\tonClear,\n\terror,\n\tonClearError,\n\tonChange,\n\tvalue,\n\tsize,\n\tendAdornment,\n\tendAdornmentClassName,\n\tendAdornmentWidth,\n\t...props\n}: BaseInputProps<number | undefined>) {\n\tconst inputProps = props as InputHTMLAttributes<HTMLInputElement>;\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\tid: props.id,\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst numberDraftRef = useRef<{ readonly value: number | undefined; readonly raw: string } | null>(null);\n\tconst externalRawValue = value !== undefined && typeof value === \"number\" && !isNaN(value) ? String(value) : \"\";\n\n\t/**\n\t * Числовой input хранит промежуточную строку в DOM, а controlled number остаётся\n\t * источником истины. Layout-effect синхронизирует именно внешнюю DOM-систему,\n\t * поэтому не создаёт каскадного React render и не ломает ввод неполных чисел.\n\t */\n\tuseLayoutEffect(() => {\n\t\tconst numberDraft = numberDraftRef.current;\n\t\tif (numberDraft && Object.is(numberDraft.value, value)) {\n\t\t\tif (inputRef.current && inputRef.current.value !== numberDraft.raw) {\n\t\t\t\tinputRef.current.value = numberDraft.raw;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tnumberDraftRef.current = null;\n\t\tif (inputRef.current && inputRef.current.value !== externalRawValue) {\n\t\t\tinputRef.current.value = externalRawValue;\n\t\t}\n\t}, [externalRawValue, value]);\n\n\tconst handleClear = onClear\n\t\t? () => {\n\t\t\t\tonClear();\n\t\t\t}\n\t\t: undefined;\n\n\tconst handleInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst raw = e.target.value;\n\n\t\tconst parsed = toFiniteNumber(raw); // ?? value ?? 0;\n\t\tnumberDraftRef.current = { value: parsed, raw };\n\n\t\tonChange(parsed);\n\t\tif (error && onClearError) onClearError();\n\t};\n\n\tconst resolvedEndAdornment = createEndAdornment({ endAdornment, onClear: handleClear, disabled });\n\tconst hasCustomAdornment = endAdornment !== undefined && endAdornment !== null;\n\tconst resolvedEndAdornmentWidth = resolveEndAdornmentWidth(hasCustomAdornment, !!handleClear, endAdornmentWidth);\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\trequired={props.required}\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<InputControl\n\t\t\t\tendAdornment={resolvedEndAdornment}\n\t\t\t\tendAdornmentClassName={endAdornmentClassName}\n\t\t\t\tendAdornmentWidth={resolvedEndAdornmentWidth}>\n\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t<input\n\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tinputMode=\"decimal\"\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tdefaultValue={externalRawValue}\n\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\tclassName={cn(uiStyles.uiInputControl, styles.input, styles.inputNumber, controlClassName)}\n\t\t\t\t\t\tonChange={handleInput}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</InputControl>\n\t\t</InputUI>\n\t);\n}\n\n/**\n * Совместимый алиас для `InputText`.\n */\nexport const Input = InputText;\n","import styles from \"../ui.module.scss\";\n\ninterface InputErrorComponentProps {\n\ttext: string;\n}\n\nexport function InputErrorComponent({ text }: InputErrorComponentProps) {\n\treturn <div className={styles.uiErrorElement}>{text}</div>;\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./ui.module-BfaIVBba.js";
|
|
2
|
-
import { i as t, l as n, s as r } from "./input-
|
|
2
|
+
import { i as t, l as n, s as r } from "./input-CAw1Loze.js";
|
|
3
3
|
import { useCallback as i, useRef as a } from "react";
|
|
4
4
|
import { cn as o, handleKeyboardActivation as s } from "@ryuzaki13/react-foundation-lib/utils";
|
|
5
5
|
import { XIcon as c } from "lucide-react";
|
|
@@ -138,4 +138,4 @@ function _(c) {
|
|
|
138
138
|
//#endregion
|
|
139
139
|
export { g as n, _ as t };
|
|
140
140
|
|
|
141
|
-
//# sourceMappingURL=input-files-
|
|
141
|
+
//# sourceMappingURL=input-files-CLtQ7p8j.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-files-62qH2TMj.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
|
+
{"version":3,"file":"input-files-CLtQ7p8j.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,4 +1,4 @@
|
|
|
1
|
-
import { n as e } from "./input-
|
|
1
|
+
import { n as e } from "./input-CAw1Loze.js";
|
|
2
2
|
import { useState as t } from "react";
|
|
3
3
|
import { jsx as n } from "react/jsx-runtime";
|
|
4
4
|
//#region src/input-search/InputSearch.tsx
|
|
@@ -27,4 +27,4 @@ function r({ onChange: r, ...i }) {
|
|
|
27
27
|
//#endregion
|
|
28
28
|
export { r as t };
|
|
29
29
|
|
|
30
|
-
//# sourceMappingURL=input-search-
|
|
30
|
+
//# sourceMappingURL=input-search-F6MPrUGF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-search-
|
|
1
|
+
{"version":3,"file":"input-search-F6MPrUGF.js","names":[],"sources":["../../src/input-search/InputSearch.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nimport { BaseInputProps, Input } from \"../input\";\n\ninterface SearchInputProps extends BaseInputProps<string> {\n\tonChange: (value: string) => void;\n}\n\nexport function InputSearch({ onChange, ...props }: SearchInputProps) {\n\tconst [searchTerm, setSearchTerm] = useState(() => props.defaultValue ?? props.value ?? \"\");\n\tconst [previousSearch, setPreviousSearch] = useState(() => props.defaultValue ?? props.value ?? \"\");\n\n\tconst handleSearch = (term: string) => {\n\t\tconst changedTerm = term.trim();\n\n\t\t// Проверяем, изменилось ли значение с предыдущего поиска\n\t\tif (changedTerm === previousSearch) return;\n\n\t\tsetPreviousSearch(changedTerm);\n\t\tonChange(changedTerm);\n\t};\n\n\tconst handleClear = () => {\n\t\tsetSearchTerm(\"\");\n\t\tsetPreviousSearch(\"\");\n\t\tonChange(\"\");\n\t};\n\n\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (event.key === \"Enter\") {\n\t\t\tevent.preventDefault();\n\t\t\thandleSearch(searchTerm);\n\t\t}\n\t};\n\n\tconst handleBlur = () => {\n\t\thandleSearch(searchTerm);\n\t};\n\n\tconst handleChange = (value: string) => {\n\t\tsetSearchTerm(value);\n\t\t// Не вызываем onSearch здесь - только по Enter/blur\n\t};\n\n\treturn (\n\t\t<Input {...props} value={searchTerm} onChange={handleChange} onKeyDown={handleKeyDown} onBlur={handleBlur} onClear={handleClear} />\n\t);\n}\n"],"mappings":";;;;AAQA,SAAgB,EAAY,EAAE,aAAU,GAAG,KAA2B;CACrE,IAAM,CAAC,GAAY,KAAiB,QAAe,EAAM,gBAAgB,EAAM,SAAS,EAAE,GACpF,CAAC,GAAgB,KAAqB,QAAe,EAAM,gBAAgB,EAAM,SAAS,EAAE,GAE5F,KAAgB,MAAiB;EACtC,IAAM,IAAc,EAAK,KAAK;EAG1B,MAAgB,MAEpB,EAAkB,CAAW,GAC7B,EAAS,CAAW;CACrB,GAEM,UAAoB;EAGzB,AAFA,EAAc,EAAE,GAChB,EAAkB,EAAE,GACpB,EAAS,EAAE;CACZ,GAEM,KAAiB,MAAiD;EACvE,AAAI,EAAM,QAAQ,YACjB,EAAM,eAAe,GACrB,EAAa,CAAU;CAEzB,GAEM,UAAmB;EACxB,EAAa,CAAU;CACxB,GAEM,KAAgB,MAAkB;EACvC,EAAc,CAAK;CAEpB;CAEA,OACC,kBAAC,GAAD;EAAO,GAAI;EAAO,OAAO;EAAY,UAAU;EAAc,WAAW;EAAe,QAAQ;EAAY,SAAS;CAAc,CAAA;AAEpI"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Text as e } from "../text/index.js";
|
|
2
2
|
import { t } from "./ui.module-BfaIVBba.js";
|
|
3
3
|
import { t as n } from "./check-box-6HGX_KOy.js";
|
|
4
|
-
import { a as r, c as i, d as a, f as o, i as s, l as c, n as l, p as u, r as d, t as f, u as p } from "./picker-
|
|
4
|
+
import { a as r, c as i, d as a, f as o, i as s, l as c, n as l, p as u, r as d, t as f, u as p } from "./picker-TYLwgl1c.js";
|
|
5
5
|
import { t as ee } from "./separator-B72Aq-6a.js";
|
|
6
6
|
import { n as m, r as h, t as g } from "./useODataSelectBase-DI_wwKgw.js";
|
|
7
7
|
import { forwardRef as _, useCallback as te, useMemo as v, useRef as ne, useState as y } from "react";
|
|
@@ -168,13 +168,14 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
|
|
|
168
168
|
z,
|
|
169
169
|
p,
|
|
170
170
|
n
|
|
171
|
-
]), { query: V, setQuery: Se } = d({
|
|
172
|
-
open: L,
|
|
171
|
+
]), { query: V, setQuery: Se, resetQueryOnClose: Ce } = d({
|
|
173
172
|
query: ae,
|
|
174
173
|
defaultQuery: ce,
|
|
175
174
|
onQuery: C,
|
|
176
175
|
triggerMode: R
|
|
177
|
-
}),
|
|
176
|
+
}), we = (e) => {
|
|
177
|
+
L && !e && Ce && Se(""), ye(e);
|
|
178
|
+
}, H = r({
|
|
178
179
|
options: z,
|
|
179
180
|
query: V,
|
|
180
181
|
enabled: w,
|
|
@@ -184,14 +185,14 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
|
|
|
184
185
|
query: V,
|
|
185
186
|
enabled: w,
|
|
186
187
|
getSearchText: (t) => ge(t, e, B)
|
|
187
|
-
}), W = v(() => [...H, ...U], [U, H]),
|
|
188
|
+
}), W = v(() => [...H, ...U], [U, H]), Te = H.length > 0 ? 0 : -1, { draftValue: G, setDraftValue: K, prepareOpen: Ee } = l({
|
|
188
189
|
value: z,
|
|
189
190
|
open: L,
|
|
190
191
|
onCommit: h,
|
|
191
192
|
onOpen: T,
|
|
192
193
|
onClose: ue,
|
|
193
194
|
isEqual: (t, n) => _e(t, n, e)
|
|
194
|
-
}), q = v(() => new Set(G.map((t) => O(t, e))), [e, G]),
|
|
195
|
+
}), q = v(() => new Set(G.map((t) => O(t, e))), [e, G]), De = v(() => ({
|
|
195
196
|
selectedItems: G,
|
|
196
197
|
committedSelectedItems: z,
|
|
197
198
|
selectedKeys: q,
|
|
@@ -201,29 +202,29 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
|
|
|
201
202
|
G,
|
|
202
203
|
L,
|
|
203
204
|
q
|
|
204
|
-
]), J = te((e) => D?.(e,
|
|
205
|
+
]), J = te((e) => D?.(e, De) ?? !1, [D, De]), { activeIndex: Y, context: Oe, floatingStyles: ke, getFloatingProps: Ae, setReference: je, setFloating: Me, setOptionRef: Ne, close: Pe, openList: Fe, toggleOpen: Ie, selectActiveOption: Le, handleReferenceKeyDown: Re, handleFloatingKeyDown: ze, getOptionId: Be, getActiveOptionId: Ve } = s({
|
|
205
206
|
options: W,
|
|
206
|
-
selectedIndex:
|
|
207
|
+
selectedIndex: Te,
|
|
207
208
|
open: L,
|
|
208
|
-
onOpenChange:
|
|
209
|
+
onOpenChange: we,
|
|
209
210
|
onSelect: void 0,
|
|
210
211
|
disabled: k,
|
|
211
212
|
getOptionDisabled: J,
|
|
212
213
|
closeOnSelect: !1,
|
|
213
214
|
allowOpenWithoutOptions: !0,
|
|
214
215
|
triggerMode: R
|
|
215
|
-
}),
|
|
216
|
+
}), He = le ?? V, X = (t) => {
|
|
216
217
|
let n = O(t, e);
|
|
217
218
|
K((r) => r.some((t) => O(t, e) === n) ? r.filter((t) => O(t, e) !== n) : J(t) ? r : [...r, t]);
|
|
218
|
-
},
|
|
219
|
+
}, Ue = (e) => {
|
|
219
220
|
if (I.current = e, typeof F == "function") {
|
|
220
221
|
F(e);
|
|
221
222
|
return;
|
|
222
223
|
}
|
|
223
224
|
F && (F.current = e);
|
|
224
|
-
},
|
|
225
|
+
}, We = () => {
|
|
225
226
|
K([]), L || h([]);
|
|
226
|
-
},
|
|
227
|
+
}, Ge = () => {
|
|
227
228
|
K((t) => {
|
|
228
229
|
let n = [...t], r = new Set(t.map((t) => O(t, e)));
|
|
229
230
|
for (let t of W) {
|
|
@@ -232,44 +233,44 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
|
|
|
232
233
|
}
|
|
233
234
|
return n;
|
|
234
235
|
});
|
|
235
|
-
},
|
|
236
|
+
}, Ke = () => {
|
|
236
237
|
K([]);
|
|
237
|
-
},
|
|
238
|
-
J(e) || (K([e]),
|
|
239
|
-
},
|
|
240
|
-
selectedItems:
|
|
238
|
+
}, qe = (e) => {
|
|
239
|
+
J(e) || (K([e]), Pe());
|
|
240
|
+
}, Je = L ? G : z, Z = Je.length > 0, Ye = {
|
|
241
|
+
selectedItems: Je,
|
|
241
242
|
committedSelectedItems: z,
|
|
242
243
|
availableItems: U,
|
|
243
244
|
query: V,
|
|
244
245
|
open: L,
|
|
245
|
-
clearSelection:
|
|
246
|
-
selectAll:
|
|
247
|
-
deselectAll:
|
|
248
|
-
},
|
|
246
|
+
clearSelection: We,
|
|
247
|
+
selectAll: Ge,
|
|
248
|
+
deselectAll: Ke
|
|
249
|
+
}, Xe = M === void 0 ? de({
|
|
249
250
|
codeKey: e,
|
|
250
251
|
textKey: B
|
|
251
|
-
}) : M,
|
|
252
|
+
}) : M, Ze = N === void 0 ? fe : N, Qe = P ?? pe({
|
|
252
253
|
codeKey: e,
|
|
253
254
|
textKey: B,
|
|
254
255
|
hideCode: a
|
|
255
|
-
}),
|
|
256
|
+
}), $e = typeof Xe == "function" ? Xe(Ye) : null, et = typeof Ze == "function" ? Ze(Ye) : null, Q = H.map((e, t) => ({
|
|
256
257
|
item: e,
|
|
257
258
|
index: t
|
|
258
|
-
})),
|
|
259
|
+
})), tt = U.map((e, t) => ({
|
|
259
260
|
item: e,
|
|
260
261
|
index: t + Q.length
|
|
261
|
-
})),
|
|
262
|
+
})), nt = !j && !A && W.length === 0, $ = f({
|
|
262
263
|
mode: R,
|
|
263
264
|
open: L,
|
|
264
265
|
currentQuery: V,
|
|
265
266
|
hasDisplayValue: !1,
|
|
266
267
|
inputRef: I,
|
|
267
268
|
setQuery: Se,
|
|
268
|
-
openList:
|
|
269
|
-
close:
|
|
270
|
-
toggleOpen:
|
|
269
|
+
openList: Fe,
|
|
270
|
+
close: Pe,
|
|
271
|
+
toggleOpen: Ie,
|
|
271
272
|
onBeforeOpen: () => {
|
|
272
|
-
L ||
|
|
273
|
+
L || Ee();
|
|
273
274
|
}
|
|
274
275
|
});
|
|
275
276
|
return /* @__PURE__ */ b(u, {
|
|
@@ -281,22 +282,22 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
|
|
|
281
282
|
children: ({ controlId: n, labelId: r, describedBy: a }) => {
|
|
282
283
|
let s = `${n}-listbox`;
|
|
283
284
|
return /* @__PURE__ */ x(se, { children: [/* @__PURE__ */ b(i, {
|
|
284
|
-
ref:
|
|
285
|
-
rootRef:
|
|
285
|
+
ref: Ue,
|
|
286
|
+
rootRef: je,
|
|
286
287
|
id: n,
|
|
287
288
|
type: "text",
|
|
288
289
|
role: "combobox",
|
|
289
290
|
autoComplete: "off",
|
|
290
291
|
disabled: k,
|
|
291
292
|
value: V,
|
|
292
|
-
placeholder:
|
|
293
|
+
placeholder: Z ? void 0 : `${re ?? g ?? "Выберите значения"} <${p.length}>`,
|
|
293
294
|
"aria-labelledby": r,
|
|
294
295
|
"aria-describedby": a,
|
|
295
296
|
"aria-haspopup": "listbox",
|
|
296
297
|
"aria-expanded": L,
|
|
297
298
|
"aria-controls": L ? s : void 0,
|
|
298
299
|
"aria-autocomplete": "list",
|
|
299
|
-
"aria-activedescendant": L ?
|
|
300
|
+
"aria-activedescendant": L ? Ve(s) : void 0,
|
|
300
301
|
rootClassName: "flex alignItemsCenter",
|
|
301
302
|
endAdornment: /* @__PURE__ */ b(c, {
|
|
302
303
|
open: L,
|
|
@@ -305,16 +306,16 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
|
|
|
305
306
|
onToggleClick: $.handleToggleClick,
|
|
306
307
|
children: /* @__PURE__ */ b("button", {
|
|
307
308
|
type: "button",
|
|
308
|
-
disabled: !
|
|
309
|
+
disabled: !Z,
|
|
309
310
|
className: t.uiClearButton,
|
|
310
311
|
"data-ui": "multi-select-clear-button",
|
|
311
312
|
"data-action": "clear-multi-select",
|
|
312
|
-
onClick:
|
|
313
|
+
onClick: We,
|
|
313
314
|
"aria-label": "Очистить все",
|
|
314
315
|
children: /* @__PURE__ */ b(oe, {})
|
|
315
316
|
})
|
|
316
317
|
}),
|
|
317
|
-
overlay:
|
|
318
|
+
overlay: $e,
|
|
318
319
|
onChange: (e) => {
|
|
319
320
|
$.handleTriggerInputChange(e.target.value);
|
|
320
321
|
},
|
|
@@ -323,7 +324,7 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
|
|
|
323
324
|
$.handleTriggerFocus(e.currentTarget);
|
|
324
325
|
},
|
|
325
326
|
onKeyDown: (e) => {
|
|
326
|
-
|
|
327
|
+
Re(e), !e.defaultPrevented && $.handleTriggerKeyDown({
|
|
327
328
|
event: e,
|
|
328
329
|
onActivateWhenOpen: () => {
|
|
329
330
|
if (Y >= 0) {
|
|
@@ -333,7 +334,7 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
|
|
|
333
334
|
return;
|
|
334
335
|
}
|
|
335
336
|
}
|
|
336
|
-
|
|
337
|
+
Le();
|
|
337
338
|
},
|
|
338
339
|
enableClosedArrowDownOpen: !0,
|
|
339
340
|
suppressClosedArrowUp: !0
|
|
@@ -341,22 +342,22 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
|
|
|
341
342
|
}
|
|
342
343
|
}), /* @__PURE__ */ b(o, {
|
|
343
344
|
open: L,
|
|
344
|
-
context:
|
|
345
|
-
floatingStyles:
|
|
345
|
+
context: Oe,
|
|
346
|
+
floatingStyles: ke,
|
|
346
347
|
listId: s,
|
|
347
348
|
labelId: r,
|
|
348
349
|
descriptionId: a,
|
|
349
|
-
activeOptionId: L ?
|
|
350
|
-
setFloating:
|
|
351
|
-
getFloatingProps:
|
|
352
|
-
onKeyDown:
|
|
350
|
+
activeOptionId: L ? Ve(s) : void 0,
|
|
351
|
+
setFloating: Me,
|
|
352
|
+
getFloatingProps: Ae,
|
|
353
|
+
onKeyDown: ze,
|
|
353
354
|
initialFocus: -1,
|
|
354
355
|
returnFocus: !1,
|
|
355
356
|
tabIndex: -1,
|
|
356
357
|
className: t.uiPopupOptions,
|
|
357
|
-
header:
|
|
358
|
+
header: et,
|
|
358
359
|
children: /* @__PURE__ */ b(me, {
|
|
359
|
-
isNoData:
|
|
360
|
+
isNoData: nt,
|
|
360
361
|
isLoading: j,
|
|
361
362
|
error: A,
|
|
362
363
|
children: /* @__PURE__ */ x("div", {
|
|
@@ -369,29 +370,29 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
|
|
|
369
370
|
selectedKeys: q,
|
|
370
371
|
codeKey: e,
|
|
371
372
|
query: V,
|
|
372
|
-
highlightQuery:
|
|
373
|
+
highlightQuery: He,
|
|
373
374
|
getOptionDisabled: J,
|
|
374
|
-
getOptionId:
|
|
375
|
-
setOptionRef:
|
|
375
|
+
getOptionId: Be,
|
|
376
|
+
setOptionRef: Ne,
|
|
376
377
|
toggleOption: X,
|
|
377
|
-
selectOnlyOption:
|
|
378
|
-
renderItem:
|
|
378
|
+
selectOnlyOption: qe,
|
|
379
|
+
renderItem: Qe
|
|
379
380
|
}),
|
|
380
381
|
Q.length > 0 && xe.length > 0 && /* @__PURE__ */ b(ee, { className: "marginBlockSm" }),
|
|
381
382
|
/* @__PURE__ */ b(ve, {
|
|
382
|
-
entries:
|
|
383
|
+
entries: tt,
|
|
383
384
|
listId: s,
|
|
384
385
|
activeIndex: Y,
|
|
385
386
|
selectedKeys: q,
|
|
386
387
|
codeKey: e,
|
|
387
388
|
query: V,
|
|
388
|
-
highlightQuery:
|
|
389
|
+
highlightQuery: He,
|
|
389
390
|
getOptionDisabled: J,
|
|
390
|
-
getOptionId:
|
|
391
|
-
setOptionRef:
|
|
391
|
+
getOptionId: Be,
|
|
392
|
+
setOptionRef: Ne,
|
|
392
393
|
toggleOption: X,
|
|
393
|
-
selectOnlyOption:
|
|
394
|
-
renderItem:
|
|
394
|
+
selectOnlyOption: qe,
|
|
395
|
+
renderItem: Qe
|
|
395
396
|
})
|
|
396
397
|
]
|
|
397
398
|
})
|
|
@@ -522,4 +523,4 @@ function I({ label: e, description: t, disabled: n, placeholder: r, size: i, opt
|
|
|
522
523
|
//#endregion
|
|
523
524
|
export { k as a, j as i, N as n, T as o, M as r, C as s, I as t };
|
|
524
525
|
|
|
525
|
-
//# sourceMappingURL=multi-select-
|
|
526
|
+
//# sourceMappingURL=multi-select-Dypew65l.js.map
|