@ryuzaki13/react-foundation-ui 1.8.13 → 1.8.15
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/chunks/picker-BcB3rSQt.js.map +1 -1
- package/dist/chunks/ui.module-BsDio9A3.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/storybook-static/assets/{Badge-BFhBl7yM.js → Badge-Cd8wL2_5.js} +1 -1
- package/storybook-static/assets/{Badge.stories-BEu55X4s.js → Badge.stories-qmcgnZqp.js} +1 -1
- package/storybook-static/assets/{BadgeList-mqmnGtRR.js → BadgeList-D_recioK.js} +1 -1
- package/storybook-static/assets/{Button-_YPAu9sd.js → Button-mFmU1oOO.js} +1 -1
- package/storybook-static/assets/{Button-CESdnWrO.js → Button-r1m3WVSm.js} +1 -1
- package/storybook-static/assets/{Button.stories-B0Y_T17B.js → Button.stories-KC_rNhgy.js} +1 -1
- package/storybook-static/assets/{CalendarView-DLuO2Ywz.js → CalendarView-Ca-92AB8.js} +1 -1
- package/storybook-static/assets/{CheckBox-l0pbBm9z.js → CheckBox-PjOM6PPb.js} +1 -1
- package/storybook-static/assets/{CheckBox-CGiNmAPT.js → CheckBox-_CT1F9ZI.js} +1 -1
- package/storybook-static/assets/{CheckBox.stories-ROPAnqh8.js → CheckBox.stories-CskXA_JJ.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-kPaRN0HS.js → Color-6AOWCN3U-DZxFz7kD.js} +1 -1
- package/storybook-static/assets/{ContextMenu-DxfUAeJS.js → ContextMenu-BO54N0H5.js} +1 -1
- package/storybook-static/assets/{ContextMenu-Bob4DtRn.js → ContextMenu-BU04Ps17.js} +1 -1
- package/storybook-static/assets/{ContextMenu.stories-DCJmWy5n.js → ContextMenu.stories-DResblYn.js} +1 -1
- package/storybook-static/assets/{CustomOptionButton-DuEz9CXt.js → CustomOptionButton-DNEfpxa7.js} +1 -1
- package/storybook-static/assets/{DateInput-BQ8SoeLE.js → DateInput-2J6-7drW.js} +1 -1
- package/storybook-static/assets/{DateInput-DmNLD4Dz.js → DateInput-Bf45fonQ.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-sTpYf7Ob.js → DateInput.stories-BFRRZEeq.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-DRq4eJ2n.js → DateRangePresetSelect-B65sw1lG.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-fgJfLaLO.js → DateRangePresetSelect-C9PLmxCa.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-ib7Qh_BB.js → DateRangePresetSelect.stories-kyRkdliY.js} +1 -1
- package/storybook-static/assets/{Detail-CJniLn1R.js → Detail-j86sQMaj.js} +1 -1
- package/storybook-static/assets/{Detail.stories-BXjdNaL-.js → Detail.stories-BuMO8Gt-.js} +1 -1
- package/storybook-static/assets/{Dialog-D6a_qzr3.js → Dialog-0hxZqrhn.js} +1 -1
- package/storybook-static/assets/{Dialog-DOYnnXlU.js → Dialog-CCDasyH8.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-B1cZLRK3.js → Dialog.stories-BP9A6sTr.js} +1 -1
- package/storybook-static/assets/{Disclosure-Chh5o_0s.js → Disclosure--fLgwSlX.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-Cvdvf7V8.js → Disclosure.stories-CtKC0jM5.js} +1 -1
- package/storybook-static/assets/{DisclosureGroup-CRnQOgVj.js → DisclosureGroup-Bx82uKUx.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-BBiErkeC.js → DocsRenderer-JROSPFPF-BjLzZKur.js} +1 -1
- package/storybook-static/assets/{DropZone-C4L7JAlq.js → DropZone-BZIVV2iW.js} +1 -1
- package/storybook-static/assets/{DropZone-Bm5gqdi9.js → DropZone-pi2vfqkg.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-BhA9q8Qv.js → DropZone.stories-yl0Iutrj.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-DtZNSUHF.js → DropdownMenu-C9AAgqp1.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel-0ugXlJy_.js → ExpandableActionPanel-PwZx0riF.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-CLgMlA9k.js → ExpandableActionPanel.stories-BGPaWW2r.js} +1 -1
- package/storybook-static/assets/{Flex-CJlia-8f.js → Flex-Cx_mK6Wv.js} +1 -1
- package/storybook-static/assets/{Flex.stories-DCvfi1EY.js → Flex.stories-BaUUOqvt.js} +1 -1
- package/storybook-static/assets/{FloatingPopover-CsnfPiwV.js → FloatingPopover-B2gHujX_.js} +1 -1
- package/storybook-static/assets/{FormattedTableCell-Dz5xWVYO.js → FormattedTableCell-D13-RWK3.js} +1 -1
- package/storybook-static/assets/{Grid-C-KwTRAM.js → Grid-BsEEqRWi.js} +1 -1
- package/storybook-static/assets/{Grid.stories-CzbqknNR.js → Grid.stories-BFCff6aq.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-DaE-gm-b.js → ImageCropper.stories-BV3XnFOB.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-IsNCXCrZ.js → ImageRenderer-Dm25cMqu.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-BbsjUEfJ.js → ImageRenderer.stories-jpNl-qca.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-DY0UITYz.js → ImageView.stories-ENY_p3Tr.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories--9q9b9nv.js → ImageViewer.stories-DYDopb5z.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-CNEH3XGN.js → ImageViewerRuntime-BnX6E5BX.js} +1 -1
- package/storybook-static/assets/{Input-DLubbE7P.js → Input-CUuoFQuS.js} +1 -1
- package/storybook-static/assets/{Input-Dw2JblYt.js → Input-D6v6vXs2.js} +1 -1
- package/storybook-static/assets/{Input.stories-DQeyDULG.js → Input.stories-Bl11Boc0.js} +1 -1
- package/storybook-static/assets/{InputDateTime-BRzl8Vrt.js → InputDateTime-Btte1yb6.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-BJTj5v8J.js → InputDateTime.stories-DED8uY8v.js} +1 -1
- package/storybook-static/assets/{InputFile-B8UroZji.js → InputFile-0mGcNzjQ.js} +1 -1
- package/storybook-static/assets/{InputFile-DPftxjGw.js → InputFile-D03Y9DS1.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-C7yyqHqc.js → InputFile.stories-Dwn11IMZ.js} +1 -1
- package/storybook-static/assets/{InputFiles-UD_9S7-N.js → InputFiles-DNv9_Zl9.js} +1 -1
- package/storybook-static/assets/{InputFiles-BQVXHVLy.js → InputFiles-DxZWFfGH.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-DjjJS5pZ.js → InputFiles.stories-6RMS6Do3.js} +1 -1
- package/storybook-static/assets/{InputFilesList-BNjijD3Y.js → InputFilesList-B8p3HnCy.js} +1 -1
- package/storybook-static/assets/{InputImage-C-pHr-Sx.js → InputImage-Dn09jypu.js} +1 -1
- package/storybook-static/assets/{InputImage-DbcbqIhY.js → InputImage-Zz-edaAa.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-D-TC9r9t.js → InputImage.stories-DxTFle9L.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents-DbhWgM9y.js → InteractiveComponents-DUg07Olo.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-B4mkVSea.js → InteractiveComponents.stories-N4s2n_Ls.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-w1EsRpYP.js → LayoutPicker-5H2ojo6P.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-BoV_E3qt.js → LayoutPicker-Dn11ot6_.js} +1 -1
- package/storybook-static/assets/{LayoutPicker.stories--ChGnGxf.js → LayoutPicker.stories-LxtmabZA.js} +1 -1
- package/storybook-static/assets/{Listbox-qZdTi11b.js → Listbox-CHr5iujw.js} +1 -1
- package/storybook-static/assets/{Listbox-CzZRsr6a.js → Listbox-mLHxtn2O.js} +1 -1
- package/storybook-static/assets/{Listbox.stories-C9k_1850.js → Listbox.stories-CsXyGW1Q.js} +1 -1
- package/storybook-static/assets/{Modal-DCpul8QM.js → Modal-BI1dVE-m.js} +1 -1
- package/storybook-static/assets/{Modal.stories-Cy0Xd4LF.js → Modal.stories-BHW8jSr8.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-BrPVMcHV.js → ModalManagerProvider-CeMOCTK8.js} +1 -1
- package/storybook-static/assets/{MultiSelect-Dy4X94E2.js → MultiSelect-C6YHy5R-.js} +1 -1
- package/storybook-static/assets/{MultiSelect-BEQdl-F4.js → MultiSelect-DpEKWJmz.js} +1 -1
- package/storybook-static/assets/{MultiSelect.stories-FuzejJmz.js → MultiSelect.stories-D02Hsz16.js} +1 -1
- package/storybook-static/assets/{NoData-BsQ9EfkA.js → NoData-C-yIjnFD.js} +1 -1
- package/storybook-static/assets/{NotificationsHost-BSrODvw7.js → NotificationsHost-CJ8NevoN.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-DeiWspcY.js → NotificationsHost.stories-Deeqj-vL.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-BEz9gcd2.js → ODataMultiSelect-BM8MOWSh.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-BwMgAkbE.js → ODataMultiSelect.stories-HDwtUh6c.js} +1 -1
- package/storybook-static/assets/{ODataSelect-BgC7GHOv.js → ODataSelect-DRV0B3jq.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-DEIRAB-s.js → ODataSelect.stories-Z2JAZ57N.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-WyZZuX0_.js → ODataTreeMultiSelect-DKdF_F6p.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-B6cxuagy.js → ODataTreeMultiSelect.stories-VuY_QHoo.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-OJGi3-S7.js → ODataTreeSelect-B-XFZOpe.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-wGRGErCH.js → ODataTreeSelect.stories-Ab-RXekm.js} +1 -1
- package/storybook-static/assets/{OneStepScroller-DycQ3RuL.js → OneStepScroller-9mds5c53.js} +1 -1
- package/storybook-static/assets/Option-B2xqGECu.css +1 -0
- package/storybook-static/assets/{Option-taxbFfjo.js → Option-DfkEWwzD.js} +1 -1
- package/storybook-static/assets/{OptionButton-Q0QaPCII.js → OptionButton-DWahCIT8.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-DUJ2nF3F.js → PeriodSelect-BW3YoxkQ.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-DnM7x-uC.js → PeriodSelect-Dq-W37HF.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-Db0bqe3J.js → PeriodSelect.stories-BjQPbsn1.js} +1 -1
- package/storybook-static/assets/{PickerTriggerActions-CGJd7xmR.js → PickerTriggerActions-VPjVDsB8.js} +1 -1
- package/storybook-static/assets/{Popover-B6oidz5p.js → Popover-Bpkc-QNI.js} +1 -1
- package/storybook-static/assets/{Popover-Tbhf8T81.js → Popover-CRYM_B6x.js} +1 -1
- package/storybook-static/assets/{Popover.stories-DE1LxZvv.js → Popover.stories-CujicoB1.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-DfgoR0My.js → PresetRangeDateInput-KZTPa5UU.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-CQ5FfmrL.js → PresetRangeDateInput-_UvZ2UBk.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-CgoYAYBG.js → PresetRangeDateInput.stories-B22ecf4X.js} +1 -1
- package/storybook-static/assets/{PresetSelect-BPtAknAr.js → PresetSelect-V3Q5wvgb.js} +1 -1
- package/storybook-static/assets/{README-DlwhWCvQ.js → README-3HMf3yqR.js} +1 -1
- package/storybook-static/assets/{README-iqQHdhZ4.js → README-AQt7qJ7W.js} +1 -1
- package/storybook-static/assets/{README-eg1emlll.js → README-BAjxvhwh.js} +1 -1
- package/storybook-static/assets/{README-Gfd9tLTw.js → README-BB7Lgly2.js} +1 -1
- package/storybook-static/assets/{README-Bu5uvhAT.js → README-BEQrIZ5L.js} +1 -1
- package/storybook-static/assets/{README-ByhxsX44.js → README-BLSofAtH.js} +1 -1
- package/storybook-static/assets/{README-D0rzQthv.js → README-BNJPNc8i.js} +1 -1
- package/storybook-static/assets/{README-UDBM7ZMT.js → README-BOv7ezhv.js} +1 -1
- package/storybook-static/assets/{README-D_NqWPa9.js → README-BQRECe8d.js} +1 -1
- package/storybook-static/assets/{README-YHNWrTZv.js → README-BRnBh6Tu.js} +1 -1
- package/storybook-static/assets/{README-C9S83J_G.js → README-BRpU8Fmy.js} +1 -1
- package/storybook-static/assets/{README-wFnEIGl4.js → README-BnVgUfhv.js} +1 -1
- package/storybook-static/assets/{README-Cb_q420B.js → README-BpkW8U_K.js} +1 -1
- package/storybook-static/assets/{README--TpGcM95.js → README-Br1dErfo.js} +1 -1
- package/storybook-static/assets/{README-Byi1FFpw.js → README-Bs6F_Q3w.js} +1 -1
- package/storybook-static/assets/{README-BbNHvOoR.js → README-ByLk-5zd.js} +1 -1
- package/storybook-static/assets/{README-llxZAtCj.js → README-C36uF9yM.js} +1 -1
- package/storybook-static/assets/{README-DhJ5Rb1w.js → README-C3BIg5v-.js} +1 -1
- package/storybook-static/assets/{README-CzO3Dchr.js → README-CDdbM2Np.js} +1 -1
- package/storybook-static/assets/{README-Bx6fvSBE.js → README-CEEqW78q.js} +1 -1
- package/storybook-static/assets/{README-CtIDPNJ3.js → README-CK26ng6m.js} +1 -1
- package/storybook-static/assets/{README-4iBHWAP5.js → README-CKG6cGUV.js} +1 -1
- package/storybook-static/assets/{README-CNGCAm5d.js → README-CKbCeGtT.js} +1 -1
- package/storybook-static/assets/{README-aw2Xu9xu.js → README-CPMEu0i6.js} +1 -1
- package/storybook-static/assets/{README-Kfawetke.js → README-CQv7zPT0.js} +1 -1
- package/storybook-static/assets/{README-BK6Epio1.js → README-CjEYaXjX.js} +1 -1
- package/storybook-static/assets/{README-BWhXgC_o.js → README-Cwuvy0IL.js} +1 -1
- package/storybook-static/assets/{README-C6prwAXw.js → README-D-1skID-.js} +1 -1
- package/storybook-static/assets/{README-B6vU5_7I.js → README-D4wzYKw5.js} +1 -1
- package/storybook-static/assets/{README-DMiWsyv_.js → README-DAcezYb8.js} +1 -1
- package/storybook-static/assets/{README-GTBkSG4_.js → README-DD6e3Ydn.js} +1 -1
- package/storybook-static/assets/{README-C3Is3a3B.js → README-DDF9EAsj.js} +1 -1
- package/storybook-static/assets/{README-wtreGRCe.js → README-DQMX-YcN.js} +1 -1
- package/storybook-static/assets/{README-Dxi73a2Q.js → README-DQiDg0Ej.js} +1 -1
- package/storybook-static/assets/{README-Dycov6NP.js → README-DU0PNr5g.js} +1 -1
- package/storybook-static/assets/{README-DPhDjr43.js → README-DVDC23OS.js} +1 -1
- package/storybook-static/assets/{README-CGgxP5Zo.js → README-DhZIv1bb.js} +1 -1
- package/storybook-static/assets/{README-BbunUo8b.js → README-DizFKrIu.js} +1 -1
- package/storybook-static/assets/{README-Bx6gIGiA.js → README-DqOV9xsd.js} +1 -1
- package/storybook-static/assets/{README-B6II8p0W.js → README-DtFQrkdB.js} +1 -1
- package/storybook-static/assets/{README-BIT4HlFP.js → README-Dy7OTSF0.js} +1 -1
- package/storybook-static/assets/{README-CJ2ZVG2U.js → README-KdXavYiv.js} +1 -1
- package/storybook-static/assets/{README-BRlPB5_k.js → README-LsX8KGnt.js} +1 -1
- package/storybook-static/assets/{README-98KIgy5G.js → README-Voaet1kf.js} +1 -1
- package/storybook-static/assets/{README-DOx8lXXk.js → README-b5MI0JTI.js} +1 -1
- package/storybook-static/assets/{README-BmYpfZKr.js → README-b7R84daq.js} +1 -1
- package/storybook-static/assets/{README-DEQu7djz.js → README-hPA4N5GJ.js} +1 -1
- package/storybook-static/assets/{README-DFihT_sm.js → README-kwAqsQcU.js} +1 -1
- package/storybook-static/assets/{README-webB1yH0.js → README-qNxuNw1o.js} +1 -1
- package/storybook-static/assets/{README-BTFpEaXG.js → README-r-PjVZ4j.js} +1 -1
- package/storybook-static/assets/{README-VTWQxLm_.js → README-sT7fyFbS.js} +1 -1
- package/storybook-static/assets/{README-BFJVjjZR.js → README-xoMblSgw.js} +1 -1
- package/storybook-static/assets/{README-_0Otw0eD.js → README-zz7qZ-kP.js} +1 -1
- package/storybook-static/assets/{RadioButton-Ce05_q7s.js → RadioButton-Bdj7tRvi.js} +1 -1
- package/storybook-static/assets/{RadioButton-CNOLDk_o.js → RadioButton-C5mgdhJV.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-CPd4lTl0.js → RadioButton.stories-68HY8Tq3.js} +1 -1
- package/storybook-static/assets/{RadioGroup-BtfD5Szd.js → RadioGroup-B2_rfL8_.js} +1 -1
- package/storybook-static/assets/{RadioGroup-Ccm7G-dv.js → RadioGroup-Btm4bb1t.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-D-RRPHwi.js → RadioGroup.stories-CTIJUhxX.js} +1 -1
- package/storybook-static/assets/{Scrollable-DvdBIeig.js → Scrollable-DgEQLGqG.js} +1 -1
- package/storybook-static/assets/{Select-8PV9PBKF.js → Select-CmRKt9b9.js} +1 -1
- package/storybook-static/assets/{Select-G04B41FM.js → Select-DYvqpskM.js} +1 -1
- package/storybook-static/assets/{Select.stories-Cf6CBhV8.js → Select.stories-DujGCH5v.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-CdQdHIVp.js → SerializableSelect-Bi82ktzK.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-0AKUGpbS.js → SerializableSelect.stories-DeDjYO8N.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-DWT1ORhL.js → SingleDateTimeInput-D99JYks1.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-DattLt6w.js → SingleDateTimeInput-Dl-IhEW3.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput.stories-BLJV3jzV.js → SingleDateTimeInput.stories-xnJ7YLK0.js} +1 -1
- package/storybook-static/assets/{Slider-Dci-mJt_.js → Slider-CaSDog2H.js} +1 -1
- package/storybook-static/assets/{Slider-DKEI4cDd.js → Slider-cWqU8bNG.js} +1 -1
- package/storybook-static/assets/{Slider.stories-Dp7oQueF.js → Slider.stories-BLDOG5FI.js} +1 -1
- package/storybook-static/assets/{SliderInput-BGPQmlgY.js → SliderInput-CaJdS2i0.js} +1 -1
- package/storybook-static/assets/{SliderInput-BhjqGOKt.js → SliderInput-Rr6wAXtQ.js} +1 -1
- package/storybook-static/assets/{SliderInput.stories-DXNhRU3X.js → SliderInput.stories-BAVJpHS2.js} +1 -1
- package/storybook-static/assets/{Sortable-CMd9l1Gd.js → Sortable-Cbc2J4vg.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-BN1cFEFJ.js → Sortable.stories-BaOT8ABG.js} +1 -1
- package/storybook-static/assets/{Splitter-GL65TlI9.js → Splitter-Bs2oNH3V.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-q5PlI6rB.js → Splitter.stories-mKXGWtPi.js} +1 -1
- package/storybook-static/assets/{StateSelect-CT0JF2V6.js → StateSelect-BZ6KJPLV.js} +1 -1
- package/storybook-static/assets/{StateSelect-Byik5-iZ.js → StateSelect-QEzHQr08.js} +1 -1
- package/storybook-static/assets/{StateSelect.stories-pPEPmgnN.js → StateSelect.stories-DUwa5Z9a.js} +1 -1
- package/storybook-static/assets/{StringToggle.stories-BQlFmCE7.js → StringToggle.stories-CTZgmKuF.js} +1 -1
- package/storybook-static/assets/{Switch-DhaLI9CG.js → Switch-Bu7xZxcM.js} +1 -1
- package/storybook-static/assets/{Switch--xGPiYk-.js → Switch-DQf6-y-M.js} +1 -1
- package/storybook-static/assets/{Switch.stories-5DisgIyj.js → Switch.stories-CLldFQjp.js} +1 -1
- package/storybook-static/assets/{Table-Bf6MicdG.js → Table-Dy4kTsgo.js} +1 -1
- package/storybook-static/assets/{Table.stories-CS7rQgj9.js → Table.stories-DItrtEro.js} +1 -1
- package/storybook-static/assets/{Tabs-B4y4y8Ap.js → Tabs-Cou2-9__.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-C0SpdGkh.js → Tabs.stories-Db-FIby8.js} +1 -1
- package/storybook-static/assets/{TabsBox-C5LLLhnj.js → TabsBox-DNC_y4n9.js} +1 -1
- package/storybook-static/assets/{TagInput-D4BpuCoH.js → TagInput-BvbklpLy.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-rn2wtZP_.js → TagInput.stories-D3CMF9Sv.js} +1 -1
- package/storybook-static/assets/{Text-BhBt9e7C.js → Text-CsENWaU0.js} +1 -1
- package/storybook-static/assets/{Textarea-BHHxY5sd.js → Textarea-C6Hs-eqJ.js} +1 -1
- package/storybook-static/assets/{Textarea-B-Hz7ujq.js → Textarea-DFI5Ws1q.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-CZ2kWz20.js → Textarea.stories-B0FsLDeK.js} +1 -1
- package/storybook-static/assets/{TimePanel-Cg8fgFsn.js → TimePanel-eOsTI1dD.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-BxdwtK2e.js → TimePanel.stories-B9l1v3Dv.js} +1 -1
- package/storybook-static/assets/{Toggle-BWwfk9fi.js → Toggle-CGszrbXe.js} +1 -1
- package/storybook-static/assets/{Toggle-Ce9rbjBc.js → Toggle-CZKgT4N3.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-0fzcmzKy.js → Toggle.stories-C_PUmN6S.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-B06Y0lIc.js → TreeMultiSelect-D83bkKbO.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-CrAdR_jM.js → TreeMultiSelect-DAW7XHTo.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-CAVoj56E.js → TreeMultiSelect.stories-B6-GbDaH.js} +1 -1
- package/storybook-static/assets/{TreePickerBase-qU2xPlar.js → TreePickerBase-BjfNILPl.js} +1 -1
- package/storybook-static/assets/{TreeSelect-BIHydJFy.js → TreeSelect-BHgUefe4.js} +1 -1
- package/storybook-static/assets/{TreeSelect-BKnWu0C7.js → TreeSelect-C-Z5-9OC.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-Dp_8ybAf.js → TreeSelect.stories-CBRtO9Kj.js} +1 -1
- package/storybook-static/assets/{TreeTable-pVXjU9dG.js → TreeTable-DU7jAfe0.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-CV_8Ui6R.js → TreeTable.stories-BuLbhkTe.js} +1 -1
- package/storybook-static/assets/{blocks-BY40djCc.js → blocks-DkP-disW.js} +3 -3
- package/storybook-static/assets/{check-CVkPTDzp.js → check-Byph9hF2.js} +1 -1
- package/storybook-static/assets/{chevron-down-BtNO4Vhe.js → chevron-down-Cw1FtGoD.js} +1 -1
- package/storybook-static/assets/{chevron-left-kceSK3sZ.js → chevron-left-nghJb29y.js} +1 -1
- package/storybook-static/assets/{chevron-right-BA_LO2El.js → chevron-right-V6j6RRCv.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-yJiFPv6e.js → chunk-W22LQPXL-BkQl_PH8.js} +1 -1
- package/storybook-static/assets/{circle-alert-B2m4a1zz.js → circle-alert-DgyD41ma.js} +1 -1
- package/storybook-static/assets/{circle-check-Cfjhotlm.js → circle-check-BM0j7r-l.js} +1 -1
- package/storybook-static/assets/{components-D6yV8PLX.js → components-BK9LfJzq.js} +3 -3
- package/storybook-static/assets/{contextMenu-B0pQBIW0.js → contextMenu-BoxcMgou.js} +1 -1
- package/storybook-static/assets/{download-Lba8elK9.js → download-aeiRfPxZ.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-BFNvfMpU.js → floating-ui.react-BJVEMSdr.js} +1 -1
- package/storybook-static/assets/{foundationApi-DZhnQ2cC.js → foundationApi-Cvd7KXQf.js} +1 -1
- package/storybook-static/assets/{foundationLib-CoVTo22U.js → foundationLib-YaTlXhRE.js} +1 -1
- package/storybook-static/assets/{hooks-Cc6eXN6U.js → hooks-DKYy0I_A.js} +1 -1
- package/storybook-static/assets/{iframe-o7sH2IXC.js → iframe-B3ihFulv.js} +3 -3
- package/storybook-static/assets/iframe-awhs6Z_E.js +1 -0
- package/storybook-static/assets/{info-BpsVP_dM.js → info-C5owkkN0.js} +1 -1
- package/storybook-static/assets/{odata-CXsbxsRY.js → odata-DlmzpDS_.js} +1 -1
- package/storybook-static/assets/{odataStoryFixtures-Dj_bzRqh.js → odataStoryFixtures-DhTYIcsn.js} +1 -1
- package/storybook-static/assets/{react-DeJ0JTHb.js → react-CtnlOSTm.js} +1 -1
- package/storybook-static/assets/{refresh-cw-BvGyjEXe.js → refresh-cw-MQmDpoTF.js} +1 -1
- package/storybook-static/assets/{settings-2-BdXxnHos.js → settings-2-D9zikB_Q.js} +1 -1
- package/storybook-static/assets/{sortable-XkyN-9r5.js → sortable-BOK4domV.js} +1 -1
- package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-Cafn3LV1.js → syntaxhighlighter-QEQV7K2Y-7Y8VrHOy.js} +1 -1
- package/storybook-static/assets/{trash-2-uPH9-fND.js → trash-2-Dqzyyc3b.js} +1 -1
- package/storybook-static/assets/{triangle-alert-tT01vSMw.js → triangle-alert-CEwrrnW4.js} +1 -1
- package/storybook-static/assets/{ui-CatTcSJL.css → ui-aDejsbZB.css} +1 -1
- package/storybook-static/assets/{uiClasses-B9c6dZuu.js → uiClasses-Cmg8Dx0X.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-B2LlOwPZ.js → useODataSelectBase-CyWP1bEx.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-CU7Rqcb9.js → useODataTreeData-B1cOjoqN.js} +1 -1
- package/storybook-static/assets/{usePickerQuery-D8GHQ6KR.js → usePickerQuery-D0p27nY5.js} +1 -1
- package/storybook-static/assets/{usePickerTriggerController-CcK1jmDy.js → usePickerTriggerController-glJ8CgZA.js} +1 -1
- package/storybook-static/assets/{x-BlAURbAH.js → x-DRl6_8D4.js} +1 -1
- package/storybook-static/iframe.html +2 -2
- package/storybook-static/project.json +1 -1
- package/storybook-static/assets/Option-D4QaJs-4.css +0 -1
- package/storybook-static/assets/iframe-BXM-JBuH.js +0 -1
- /package/storybook-static/assets/{ui.module-Cat84Nza.js → ui.module-BDnTp43_.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker-BcB3rSQt.js","names":[],"sources":["../../src/picker/PickerField.tsx","../../src/picker/PickerClearButton.tsx","../../src/picker/Picker.module.scss","../../src/picker/PickerSelectionToolbar.tsx","../../src/picker/PickerOptions.tsx","../../src/picker/model/extractPickerTextContent.ts","../../src/picker/PickerPlaceholder.ts","../../src/picker/PickerPopup.tsx","../../src/picker/PickerSelectedToken.tsx","../../src/picker/PickerStatus.tsx","../../src/picker/PickerTriggerActions.tsx","../../src/picker/PickerTriggerInput.tsx","../../src/picker/PickerTrigger.tsx","../../src/picker/model/createPickerTriggerPolicy.ts","../../src/picker/model/usePickerDefaultFilter.ts","../../src/picker/model/usePickerFloatingListbox.ts","../../src/picker/model/usePickerQuery.ts","../../src/picker/model/usePickerSelectionLifecycle.ts","../../src/picker/model/usePickerTriggerController.ts"],"sourcesContent":["import { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\n\nimport { InputUI } from \"../input\";\nimport { useInputFieldIds } from \"../input/lib/useInputFieldIds\";\n\nimport { PickerFieldProps } from \"./types\";\n\nexport function PickerField<TValue extends InputType>({\n\tid,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tsize,\n\tclassName,\n\terror,\n\tchildren\n}: PickerFieldProps<TValue>) {\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\tid,\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\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\tsize={size}\n\t\t\tclassName={className}\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{children({ controlId, labelId, descriptionId, errorId, describedBy })}\n\t\t</InputUI>\n\t);\n}\n","import { type MouseEvent } from \"react\";\n\nimport { XIcon } from \"lucide-react\";\n\nimport uiStyles from \"../ui.module.scss\";\n\ntype PickerClearButtonProps = {\n\tdisabled?: boolean;\n\tariaLabel?: string;\n\tonClear: () => void;\n};\n\n/** Единое действие очистки выбранного значения во всех clearable picker-компонентах. */\nexport function PickerClearButton({ disabled, ariaLabel = \"Очистить выбор\", onClear }: PickerClearButtonProps) {\n\tconst stopTriggerInteraction = (event: MouseEvent<HTMLButtonElement>) => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t};\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tdisabled={disabled}\n\t\t\tclassName={uiStyles.uiClearButton}\n\t\t\tdata-ui=\"picker-clear-button\"\n\t\t\tdata-action=\"clear-picker\"\n\t\t\tonMouseDown={stopTriggerInteraction}\n\t\t\tonClick={(event) => {\n\t\t\t\tstopTriggerInteraction(event);\n\t\t\t\tonClear();\n\t\t\t}}\n\t\t\taria-label={ariaLabel}>\n\t\t\t<XIcon />\n\t\t</button>\n\t);\n}\n","@use \"@/styles/mixins\" as *;\n\n.popupPositioner {\n\t--anchor-gap: var(--space-xs);\n\t--anchor-padding: var(--space-xs);\n\t--anchor-offset: 0;\n\n\tmin-width: 0;\n\tz-index: var(--z-dropdown);\n\tbox-shadow: var(--shadow-md);\n\toverflow: hidden;\n\tdisplay: grid;\n\tgrid-template-rows: minmax(0, 1fr);\n}\n\n.options {\n\t--input-width: min(100vw, var(--base-width, 15em));\n\n\tdisplay: grid;\n\tgrid-template-rows: minmax(0, 1fr);\n\twidth: 100%;\n\tmin-width: var(--input-width);\n\tmin-height: 0;\n\tmax-height: 75vh;\n\n\toverflow: hidden;\n\n\tpadding: var(--space-sm);\n\tbackground-color: var(--surface-0);\n\tborder: var(--border);\n\tborder-radius: var(--radius-sm);\n\n\t&:empty {\n\t\tvisibility: hidden;\n\t}\n\n\t&[data-has-toolbar=\"true\"] {\n\t\tgrid-template-rows: auto minmax(0, 1fr);\n\t}\n}\n\n.optionsToolbar {\n\tdisplay: grid;\n\tgap: var(--space-xs);\n\tpadding: var(--space-xs);\n}\n\n.optionsBody {\n\tmin-height: 0;\n}\n\n.status {\n\tpadding: var(--space-xs) var(--space-sm);\n\tcolor: var(--content-2);\n}\n\n.statusError {\n\tcolor: var(--status-error-text);\n}\n\n.triggerContainer {\n\tposition: relative;\n\n\t&[data-has-overlay=\"true\"] input {\n\t\t--ui-color: transparent;\n\t\t--ui-color-hover: transparent;\n\t\t--ui-color-active: transparent;\n\n\t\tcolor: transparent;\n\t\tcaret-color: transparent;\n\t\t-webkit-text-fill-color: transparent;\n\t}\n}\n\n.triggerHasClear {\n\t--trigger-count: 2;\n}\n\n.selectedToken {\n\tposition: absolute;\n\tinset: 0 calc(var(--control-height) * var(--trigger-count, 1) + var(--space-sm)) 0 var(--space-sm);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\tmin-width: 0;\n\tpointer-events: none;\n}\n\n.selectedTokenText {\n\toverflow: hidden;\n\twhite-space: nowrap;\n\ttext-overflow: ellipsis;\n}\n\n@include mobile {\n\t.options {\n\t\t--input-width: calc(100dvw - var(--space-xl));\n\t}\n}\n\n.selectionActionButton {\n\tpadding-block: var(--space-xs);\n\tborder-radius: var(--radius-sm);\n\n\t&:hover {\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n","import { type Ref } from \"react\";\n\nimport { Grid } from \"../grid\";\n\nimport styles from \"./Picker.module.scss\";\n\ntype PickerSelectionToolbarProps = {\n\tonSelectAll: () => void;\n\tonDeselectAll: () => void;\n\tselectAllButtonRef?: Ref<HTMLButtonElement>;\n};\n\n/**\n * Общая панель массовых действий для picker-компонентов с множественным выбором.\n * Компонент не знает формат значения и делегирует изменение владельцу selection-модели.\n */\nexport function PickerSelectionToolbar({ onSelectAll, onDeselectAll, selectAllButtonRef }: PickerSelectionToolbarProps) {\n\treturn (\n\t\t<Grid.Container gap=\"xs\" templateColumns=\"1fr 1fr\">\n\t\t\t<button\n\t\t\t\tref={selectAllButtonRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectionActionButton}\n\t\t\t\tonClick={onSelectAll}\n\t\t\t\tdata-ui=\"picker-select-all\"\n\t\t\t\tdata-action=\"select-all\">\n\t\t\t\tВыбрать все\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectionActionButton}\n\t\t\t\tonClick={onDeselectAll}\n\t\t\t\tdata-ui=\"picker-deselect-all\"\n\t\t\t\tdata-action=\"deselect-all\">\n\t\t\t\tСнять выбор\n\t\t\t</button>\n\t\t</Grid.Container>\n\t);\n}\n","import { type HTMLAttributes, type ReactNode, type Ref } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { Separator } from \"../separator\";\n\nimport styles from \"./Picker.module.scss\";\nimport { PickerSelectionToolbar } from \"./PickerSelectionToolbar\";\n\nexport type PickerSelectionActions = {\n\tonSelectAll: () => void;\n\tonDeselectAll: () => void;\n\tselectAllButtonRef?: Ref<HTMLButtonElement>;\n};\n\nexport interface PickerOptionsProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n\trootRef?: Ref<HTMLDivElement>;\n\tchildren: ReactNode;\n\ttoolbar?: ReactNode | false;\n\tselectionActions?: PickerSelectionActions;\n\tlayoutClassName?: string;\n\tbodyClassName?: string;\n\tscrollable?: boolean;\n}\n\n/**\n * Единая оболочка списка опций для picker, listbox и menu. Если переданы\n * selectionActions, но не передан toolbar, компонент показывает стандартные\n * действия выбора и снятия выбора.\n */\nexport function PickerOptions({\n\trootRef,\n\tchildren,\n\ttoolbar,\n\tselectionActions,\n\tlayoutClassName,\n\tbodyClassName,\n\tscrollable = true,\n\tclassName,\n\t...props\n}: PickerOptionsProps) {\n\tconst resolvedToolbar = toolbar === undefined && selectionActions ? <PickerSelectionToolbar {...selectionActions} /> : toolbar || null;\n\n\treturn (\n\t\t<div\n\t\t\t{...props}\n\t\t\tref={rootRef}\n\t\t\tclassName={cn(styles.options, layoutClassName, className)}\n\t\t\tdata-ui=\"picker-options\"\n\t\t\tdata-has-toolbar={resolvedToolbar ? \"true\" : undefined}>\n\t\t\t{resolvedToolbar ? (\n\t\t\t\t<div className={styles.optionsToolbar}>\n\t\t\t\t\t{resolvedToolbar}\n\t\t\t\t\t<Separator />\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<div className={cn(styles.optionsBody, scrollable && \"scrollable\", bodyClassName)}>{children}</div>\n\t\t</div>\n\t);\n}\n","import { isValidElement, type ReactNode } from \"react\";\n\nexport function extractPickerTextContent(node: ReactNode): string | undefined {\n\tif (typeof node === \"string\" || typeof node === \"number\") {\n\t\treturn String(node);\n\t}\n\n\tif (Array.isArray(node)) {\n\t\tconst values = node\n\t\t\t.map(extractPickerTextContent)\n\t\t\t.filter((value): value is string => Boolean(value))\n\t\t\t.map((value) => value.trim())\n\t\t\t.filter(Boolean);\n\t\treturn values.length ? values.join(\" \") : undefined;\n\t}\n\n\tif (isValidElement<{ children?: ReactNode; searchText?: unknown }>(node)) {\n\t\tif (typeof node.props.searchText === \"string\") {\n\t\t\treturn node.props.searchText;\n\t\t}\n\n\t\treturn extractPickerTextContent(node.props.children);\n\t}\n\n\treturn undefined;\n}\n","import { type ReactNode } from \"react\";\n\nimport { extractPickerTextContent } from \"./model/extractPickerTextContent\";\n\ntype PickerPlaceholderParams = {\n\tplaceholder?: string;\n\tlabel?: ReactNode;\n\toptionCount: number;\n\tfallback?: string;\n};\n\n/**\n * Формирует единый текст placeholder для picker-компонентов и всегда показывает\n * актуальное количество доступных вариантов.\n */\nexport function getPickerPlaceholder({ placeholder, label, optionCount, fallback = \"Выберите значение\" }: PickerPlaceholderParams) {\n\tconst labelText = extractPickerTextContent(label);\n\tconst text = placeholder ?? labelText ?? fallback;\n\n\treturn `${text} <${optionCount}>`;\n}\n","import { type CSSProperties, type KeyboardEvent, type MouseEvent, type ReactNode } from \"react\";\n\nimport { FloatingContext, FloatingFocusManager, FloatingPortal } from \"@floating-ui/react\";\nimport { AnimatePresence, motion } from \"motion/react\";\n\nimport styles from \"./Picker.module.scss\";\nimport { PickerOptions, type PickerSelectionActions } from \"./PickerOptions\";\n\ninterface PickerPopupProps {\n\topen: boolean;\n\tcontext: FloatingContext;\n\tfloatingStyles: CSSProperties;\n\tlistId: string;\n\tlabelId?: string;\n\tpopupAriaLabel?: string;\n\tdescriptionId?: string;\n\tactiveOptionId?: string;\n\tariaMultiselectable?: boolean;\n\tpopupRole?: \"listbox\" | \"dialog\";\n\tsetFloating: (node: HTMLElement | null) => void;\n\tgetFloatingProps: (userProps?: Record<string, unknown>) => Record<string, unknown>;\n\tonKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n\tinitialFocus?: number;\n\treturnFocus?: boolean;\n\ttabIndex?: number;\n\tclassName?: string;\n\tmaxWidth?: CSSProperties[\"maxWidth\"];\n\tlayoutClassName?: string;\n\tbodyClassName?: string;\n\ttoolbar?: ReactNode | false;\n\tselectionActions?: PickerSelectionActions;\n\tchildren: ReactNode;\n}\n\nfunction stopNestedFloatingMouseDown(event: MouseEvent<HTMLElement>): void {\n\tevent.stopPropagation();\n}\n\nexport function PickerPopup({\n\topen,\n\tcontext,\n\tfloatingStyles,\n\tlistId,\n\tlabelId,\n\tpopupAriaLabel,\n\tdescriptionId,\n\tactiveOptionId,\n\tariaMultiselectable,\n\tpopupRole = \"listbox\",\n\tsetFloating,\n\tgetFloatingProps,\n\tonKeyDown,\n\tinitialFocus = -1,\n\treturnFocus = false,\n\ttabIndex = 0,\n\tclassName,\n\tmaxWidth,\n\tlayoutClassName,\n\tbodyClassName,\n\ttoolbar,\n\tselectionActions,\n\tchildren\n}: PickerPopupProps) {\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<FloatingPortal>\n\t\t\t\t\t<FloatingFocusManager context={context} modal={false} initialFocus={initialFocus} returnFocus={returnFocus}>\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tref={setFloating}\n\t\t\t\t\t\t\tstyle={{ ...floatingStyles, maxWidth }}\n\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\t{...getFloatingProps({\n\t\t\t\t\t\t\t\tid: listId,\n\t\t\t\t\t\t\t\trole: popupRole,\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\t\"aria-labelledby\": labelId,\n\t\t\t\t\t\t\t\t\"aria-label\": labelId ? undefined : popupAriaLabel,\n\t\t\t\t\t\t\t\t\"aria-describedby\": descriptionId,\n\t\t\t\t\t\t\t\t\"aria-activedescendant\": activeOptionId,\n\t\t\t\t\t\t\t\t\"aria-multiselectable\": ariaMultiselectable || undefined,\n\t\t\t\t\t\t\t\tonMouseDown: stopNestedFloatingMouseDown,\n\t\t\t\t\t\t\t\tonKeyDown,\n\t\t\t\t\t\t\t\tclassName: styles.popupPositioner\n\t\t\t\t\t\t\t})}>\n\t\t\t\t\t\t\t<PickerOptions\n\t\t\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t\t\t\tlayoutClassName={layoutClassName}\n\t\t\t\t\t\t\t\tbodyClassName={bodyClassName}\n\t\t\t\t\t\t\t\ttoolbar={toolbar}\n\t\t\t\t\t\t\t\tselectionActions={selectionActions}\n\t\t\t\t\t\t\t\tscrollable={false}>\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</PickerOptions>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t</FloatingFocusManager>\n\t\t\t\t</FloatingPortal>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n}\n","import { type HTMLAttributes, type ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport styles from \"./Picker.module.scss\";\n\nexport interface PickerSelectedTokenProps extends Omit<HTMLAttributes<HTMLSpanElement>, \"children\"> {\n\tchildren: ReactNode;\n}\n\n/** Единое визуальное представление выбранного значения внутри picker-trigger. */\nexport function PickerSelectedToken({ children, className, ...props }: PickerSelectedTokenProps) {\n\treturn (\n\t\t<span {...props} className={cn(styles.selectedToken, className)} data-ui=\"picker-selected-token\">\n\t\t\t<span className={styles.selectedTokenText}>{children}</span>\n\t\t</span>\n\t);\n}\n","import { ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerStatusProps {\n\temptyState?: ReactNode;\n\t// loadingState?: ReactNode;\n\terrorState?: ReactNode;\n}\n\nexport function PickerStatus({ emptyState, errorState }: PickerStatusProps) {\n\tconst content = errorState ?? emptyState;\n\n\tif (content === undefined || content === null) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className={cn(uiStyles.uiPopupOption, styles.status, errorState !== undefined && styles.statusError)} aria-disabled={true}>\n\t\t\t{content}\n\t\t</div>\n\t);\n}\n","import { MouseEvent, ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { ChevronDownIcon } from \"lucide-react\";\n\nimport uiStyles from \"../ui.module.scss\";\n\ninterface PickerTriggerActionsProps {\n\topen: boolean;\n\tdisabled?: boolean;\n\tchildren?: ReactNode;\n\tonToggleMouseDown?: (event: MouseEvent<HTMLButtonElement>) => void;\n\tonToggleClick: () => void;\n\topenAriaLabel?: string;\n\tcloseAriaLabel?: string;\n}\n\nexport function PickerTriggerActions({\n\topen,\n\tdisabled,\n\tchildren,\n\tonToggleMouseDown,\n\tonToggleClick,\n\topenAriaLabel = \"Открыть список\",\n\tcloseAriaLabel = \"Закрыть список\"\n}: PickerTriggerActionsProps) {\n\treturn (\n\t\t<div className={uiStyles.uiToggleButtonContainer} data-disabled={disabled || undefined}>\n\t\t\t{children}\n\n\t\t\t<div className={uiStyles.uiButtonSeparator} />\n\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-label={open ? closeAriaLabel : openAriaLabel}\n\t\t\t\tclassName={uiStyles.uiToggleButton}\n\t\t\t\tonMouseDown={onToggleMouseDown}\n\t\t\t\tonClick={onToggleClick}>\n\t\t\t\t<ChevronDownIcon className={cn(uiStyles.uiToggleIcon, open && uiStyles.uiToggleIconOpen)} />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n","import { ComponentPropsWithoutRef, forwardRef, ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputControl, InputLoadingFrame } from \"../input\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\nexport interface PickerTriggerInputProps extends Omit<ComponentPropsWithoutRef<\"input\">, \"size\"> {\n\trootRef?: (node: HTMLDivElement | null) => void;\n\tendAdornment?: ReactNode;\n\toverlay?: ReactNode;\n\trootClassName?: string;\n\tinputClassName?: string;\n\tisLoading?: boolean;\n}\n\nexport const PickerTriggerInput = forwardRef<HTMLInputElement, PickerTriggerInputProps>(\n\t({ rootRef, endAdornment, overlay, rootClassName, inputClassName, isLoading, ...props }, ref) => {\n\t\tconst hasOverlay = overlay !== undefined && overlay !== null;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={rootRef}\n\t\t\t\tclassName={cn(uiStyles.uiInputContainer, styles.triggerContainer, rootClassName)}\n\t\t\t\tdata-has-overlay={hasOverlay || undefined}>\n\t\t\t\t{isLoading ? (\n\t\t\t\t\t<InputLoadingFrame />\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<InputControl endAdornment={endAdornment}>\n\t\t\t\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t\t\t\t<input {...props} ref={ref} className={cn(uiStyles.uiInputWithToggle, controlClassName, inputClassName)} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</InputControl>\n\t\t\t\t\t\t{hasOverlay ? overlay : null}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nPickerTriggerInput.displayName = \"PickerTriggerInput\";\n","import { type ReactNode, type Ref } from \"react\";\n\nimport styles from \"./Picker.module.scss\";\nimport { PickerClearButton } from \"./PickerClearButton\";\nimport { getPickerPlaceholder } from \"./PickerPlaceholder\";\nimport { PickerSelectedToken } from \"./PickerSelectedToken\";\nimport { PickerTriggerActions } from \"./PickerTriggerActions\";\nimport { PickerTriggerInput, type PickerTriggerInputProps } from \"./PickerTriggerInput\";\n\nexport interface PickerTriggerProps extends Omit<PickerTriggerInputProps, \"placeholder\" | \"overlay\" | \"endAdornment\"> {\n\tref?: Ref<HTMLInputElement>;\n\topen: boolean;\n\toptionCount: number;\n\tplaceholder?: string;\n\tlabel?: ReactNode;\n\tplaceholderFallback?: string;\n\tselectedValue?: ReactNode;\n\thasSelection?: boolean;\n\tshowSelectedValue?: boolean;\n\tclearable?: boolean;\n\tonClear?: () => void;\n\tclearAriaLabel?: string;\n\tonToggleMouseDown?: PickerTriggerActionsProps[\"onToggleMouseDown\"];\n\tonToggleClick: PickerTriggerActionsProps[\"onToggleClick\"];\n\topenAriaLabel?: string;\n\tcloseAriaLabel?: string;\n}\n\ntype PickerTriggerActionsProps = Parameters<typeof PickerTriggerActions>[0];\n\n/**\n * Общая композиция picker-trigger: input, выбранное значение, очистка и кнопка\n * открытия. Владельцы picker-моделей передают только состояние и обработчики.\n */\nexport function PickerTrigger({\n\tref,\n\topen,\n\toptionCount,\n\tplaceholder,\n\tlabel,\n\tplaceholderFallback,\n\tselectedValue,\n\thasSelection,\n\tshowSelectedValue = selectedValue !== undefined && selectedValue !== null,\n\tclearable = false,\n\tonClear,\n\tclearAriaLabel,\n\tonToggleMouseDown,\n\tonToggleClick,\n\topenAriaLabel,\n\tcloseAriaLabel,\n\tdisabled,\n\tinputClassName,\n\t...inputProps\n}: PickerTriggerProps) {\n\tconst hasSelectedValue = hasSelection ?? (selectedValue !== undefined && selectedValue !== null);\n\tconst canClear = clearable && hasSelectedValue && onClear !== undefined && !disabled;\n\n\treturn (\n\t\t<PickerTriggerInput\n\t\t\t{...inputProps}\n\t\t\tref={ref}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={\n\t\t\t\tshowSelectedValue ? undefined : getPickerPlaceholder({ placeholder, label, optionCount, fallback: placeholderFallback })\n\t\t\t}\n\t\t\tinputClassName={inputClassName}\n\t\t\trootClassName={clearable ? styles.triggerHasClear : undefined}\n\t\t\toverlay={showSelectedValue ? <PickerSelectedToken>{selectedValue}</PickerSelectedToken> : undefined}\n\t\t\tendAdornment={\n\t\t\t\t<PickerTriggerActions\n\t\t\t\t\topen={open}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonToggleMouseDown={onToggleMouseDown}\n\t\t\t\t\tonToggleClick={onToggleClick}\n\t\t\t\t\topenAriaLabel={openAriaLabel}\n\t\t\t\t\tcloseAriaLabel={closeAriaLabel}>\n\t\t\t\t\t{canClear ? <PickerClearButton ariaLabel={clearAriaLabel} onClear={onClear} /> : null}\n\t\t\t\t</PickerTriggerActions>\n\t\t\t}\n\t\t/>\n\t);\n}\n","export type PickerTriggerMode = \"display\" | \"search-single\" | \"search-multi\";\n\ninterface PickerTriggerTextFocusParams {\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n}\n\nexport interface PickerTriggerPolicy {\n\tfocusFloatingOnOpen: boolean;\n\trestoreFocusOnClose: boolean;\n\tresetQueryOnClose: boolean;\n\tshouldOpenOnTriggerClick: (open: boolean) => boolean;\n\tshouldOpenOnInputChange: (open: boolean) => boolean;\n\tshouldFocusReferenceOnToggle: (open: boolean) => boolean;\n\tshouldSelectTriggerTextOnFocus: (params: PickerTriggerTextFocusParams) => boolean;\n}\n\n/**\n * Единая политика поведения trigger-input для picker-компонентов.\n * Нормализует различия между display-режимом, single-search и multi-search.\n */\nexport function createPickerTriggerPolicy(mode: PickerTriggerMode): PickerTriggerPolicy {\n\tswitch (mode) {\n\t\tcase \"search-single\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: ({ open, currentQuery, hasDisplayValue }) =>\n\t\t\t\t\t!open && currentQuery.length === 0 && hasDisplayValue\n\t\t\t};\n\t\tcase \"search-multi\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t\tcase \"display\":\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: true,\n\t\t\t\trestoreFocusOnClose: true,\n\t\t\t\tresetQueryOnClose: false,\n\t\t\t\tshouldOpenOnTriggerClick: (open) => !open,\n\t\t\t\tshouldOpenOnInputChange: () => false,\n\t\t\t\tshouldFocusReferenceOnToggle: () => false,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t}\n}\n","import { useMemo } from \"react\";\n\nimport { normalizeTextToLower } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\ninterface UsePickerDefaultFilterOptions<T> {\n\toptions: readonly T[];\n\tquery: string;\n\tenabled?: boolean;\n\tgetSearchText: (option: T) => unknown;\n}\n\nfunction normalizeSearchText(value: unknown) {\n\tconst parts = Array.isArray(value) ? value : [value];\n\n\treturn normalizeTextToLower(parts.filter(Boolean).join(\" \"));\n}\n\nexport function usePickerDefaultFilter<T>({ options, query, enabled = true, getSearchText }: UsePickerDefaultFilterOptions<T>) {\n\tconst normalizedQuery = normalizeTextToLower(query);\n\n\treturn useMemo(() => {\n\t\tif (!enabled || !normalizedQuery) {\n\t\t\treturn [...options];\n\t\t}\n\n\t\treturn options.filter((option) => normalizeSearchText(getSearchText(option)).includes(normalizedQuery));\n\t}, [enabled, getSearchText, normalizedQuery, options]);\n}\n","import { Placement } from \"@floating-ui/react\";\nimport {\n\ttype FloatingListboxPlacementStrategy,\n\ttype FloatingListboxSizeResolver,\n\tuseFloatingListbox\n} from \"@ryuzaki13/react-foundation-lib/hooks\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerFloatingListboxParams<T> {\n\toptions: readonly T[];\n\tselectedIndex: number;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n\tgetOptionDisabled?: (option: T) => boolean;\n\tonSelect?: (option: T) => void;\n\tdisabled?: boolean;\n\tplacement?: Placement;\n\tplacementStrategy?: FloatingListboxPlacementStrategy;\n\tcloseOnSelect?: boolean;\n\tfocusFloatingOnOpen?: boolean;\n\tallowOpenWithoutOptions?: boolean;\n\trestoreFocusOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n\tresolveFloatingSize?: FloatingListboxSizeResolver;\n}\n\n/**\n * Единая точка входа для popup/listbox поведения во всех picker-компонентах.\n */\nexport function usePickerFloatingListbox<T>(params: UsePickerFloatingListboxParams<T>) {\n\tconst triggerPolicy = params.triggerMode ? createPickerTriggerPolicy(params.triggerMode) : undefined;\n\n\treturn useFloatingListbox({\n\t\t...params,\n\t\tfocusFloatingOnOpen: params.focusFloatingOnOpen ?? triggerPolicy?.focusFloatingOnOpen,\n\t\trestoreFocusOnClose: params.restoreFocusOnClose ?? triggerPolicy?.restoreFocusOnClose\n\t});\n}\n","import { useState } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerQueryOptions {\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tresetOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n}\n\n/**\n * Управляет controlled/uncontrolled query и возвращает policy закрытия владельцу open-state.\n * Сброс выполняется самим владельцем в событии close, поэтому hook не зеркалит lifecycle через effect.\n */\nexport function usePickerQuery({ query, defaultQuery, onQuery, resetOnClose, triggerMode }: UsePickerQueryOptions) {\n\tconst isControlled = query !== undefined;\n\tconst [internalQuery, setInternalQuery] = useState(defaultQuery ?? \"\");\n\tconst currentQuery = isControlled ? (query ?? \"\") : internalQuery;\n\tconst resolvedResetOnClose = resetOnClose ?? (triggerMode ? createPickerTriggerPolicy(triggerMode).resetQueryOnClose : true);\n\n\tconst setQuery = (nextValue: string) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalQuery(nextValue);\n\t\t}\n\n\t\tonQuery?.(nextValue);\n\t};\n\n\treturn {\n\t\tquery: currentQuery,\n\t\tsetQuery,\n\t\tclearQuery: () => setQuery(\"\"),\n\t\tresetQueryOnClose: resolvedResetOnClose\n\t};\n}\n","import { useEffect, useRef, useState } from \"react\";\n\ninterface UsePickerSelectionLifecycleOptions<TValue> {\n\tvalue: TValue;\n\topen: boolean;\n\tonCommit: (value: TValue) => void;\n\tonOpen?: () => void;\n\tonClose?: (value: TValue) => void;\n\tisEqual: (left: TValue, right: TValue) => boolean;\n}\n\n/**\n * Общий жизненный цикл чернового выбора для picker-компонентов,\n * где изменения подтверждаются при закрытии popup.\n */\nexport function usePickerSelectionLifecycle<TValue>({\n\tvalue,\n\topen,\n\tonCommit,\n\tonOpen,\n\tonClose,\n\tisEqual\n}: UsePickerSelectionLifecycleOptions<TValue>) {\n\tconst previousOpenRef = useRef(false);\n\tconst [draftValue, setDraftValue] = useState(value);\n\n\tuseEffect(() => {\n\t\tif (previousOpenRef.current && !open) {\n\t\t\tif (!isEqual(draftValue, value)) {\n\t\t\t\tonCommit(draftValue);\n\t\t\t}\n\n\t\t\tonClose?.(draftValue);\n\t\t}\n\n\t\tpreviousOpenRef.current = open;\n\t}, [draftValue, isEqual, onClose, onCommit, open, value]);\n\n\tconst prepareOpen = () => {\n\t\tsetDraftValue(value);\n\t\tonOpen?.();\n\t};\n\n\treturn {\n\t\tdraftValue,\n\t\tsetDraftValue,\n\t\tprepareOpen\n\t};\n}\n","import { MouseEvent, RefObject } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerTriggerControllerOptions {\n\tmode: PickerTriggerMode;\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n\tinputRef: RefObject<HTMLInputElement | null>;\n\tsetQuery?: (value: string) => void;\n\topenList?: () => void;\n\tclose?: () => void;\n\ttoggleOpen?: () => void;\n\tonBeforeOpen?: () => void;\n}\n\ninterface HandleTriggerKeyDownOptions {\n\tevent: React.KeyboardEvent<HTMLElement>;\n\tonActivateWhenOpen?: () => void;\n\tenableSpaceActivation?: boolean;\n\tenableClosedArrowDownOpen?: boolean;\n\tsuppressClosedArrowUp?: boolean;\n}\n\nfunction focusInput(inputRef: RefObject<HTMLInputElement | null>) {\n\trequestAnimationFrame(() => {\n\t\tinputRef.current?.focus();\n\t});\n}\n\n/**\n * Единый контроллер пользовательских действий на trigger-input.\n * Держит поведение display/search-single/search-multi в одном месте.\n */\nexport function usePickerTriggerController({\n\tmode,\n\topen,\n\tcurrentQuery,\n\thasDisplayValue,\n\tinputRef,\n\tsetQuery,\n\topenList,\n\tclose,\n\ttoggleOpen,\n\tonBeforeOpen\n}: UsePickerTriggerControllerOptions) {\n\tconst policy = createPickerTriggerPolicy(mode);\n\n\tconst openTrigger = () => {\n\t\tonBeforeOpen?.();\n\n\t\tif (openList) {\n\t\t\topenList();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst closeTrigger = () => {\n\t\tif (close) {\n\t\t\tclose();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst toggleTrigger = () => {\n\t\tif (open) {\n\t\t\tcloseTrigger();\n\t\t} else {\n\t\t\topenTrigger();\n\t\t}\n\n\t\tif (policy.shouldFocusReferenceOnToggle(open)) {\n\t\t\tfocusInput(inputRef);\n\t\t}\n\t};\n\n\treturn {\n\t\tpolicy,\n\t\thandleTriggerInputChange: (nextValue: string) => {\n\t\t\tsetQuery?.(nextValue);\n\n\t\t\tif (policy.shouldOpenOnInputChange(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerClick: () => {\n\t\t\tif (policy.shouldOpenOnTriggerClick(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerFocus: (input: HTMLInputElement) => {\n\t\t\tif (\n\t\t\t\tpolicy.shouldSelectTriggerTextOnFocus({\n\t\t\t\t\topen,\n\t\t\t\t\tcurrentQuery,\n\t\t\t\t\thasDisplayValue\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tinput.select();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\thandleToggleMouseDown: (event: MouseEvent<HTMLButtonElement>) => {\n\t\t\tevent.preventDefault();\n\t\t},\n\t\thandleToggleClick: () => {\n\t\t\ttoggleTrigger();\n\t\t},\n\t\thandleTriggerKeyDown: ({\n\t\t\tevent,\n\t\t\tonActivateWhenOpen,\n\t\t\tenableSpaceActivation = false,\n\t\t\tenableClosedArrowDownOpen = false,\n\t\t\tsuppressClosedArrowUp = false\n\t\t}: HandleTriggerKeyDownOptions) => {\n\t\t\tif (!open && suppressClosedArrowUp && event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!open && enableClosedArrowDownOpen && event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleTrigger();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Enter\") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (enableSpaceActivation && event.key === \" \") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttoggleTrigger\n\t};\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"picker-BcB3rSQt.js","names":[],"sources":["../../src/picker/PickerField.tsx","../../src/picker/PickerClearButton.tsx","../../src/picker/Picker.module.scss","../../src/picker/PickerSelectionToolbar.tsx","../../src/picker/PickerOptions.tsx","../../src/picker/model/extractPickerTextContent.ts","../../src/picker/PickerPlaceholder.ts","../../src/picker/PickerPopup.tsx","../../src/picker/PickerSelectedToken.tsx","../../src/picker/PickerStatus.tsx","../../src/picker/PickerTriggerActions.tsx","../../src/picker/PickerTriggerInput.tsx","../../src/picker/PickerTrigger.tsx","../../src/picker/model/createPickerTriggerPolicy.ts","../../src/picker/model/usePickerDefaultFilter.ts","../../src/picker/model/usePickerFloatingListbox.ts","../../src/picker/model/usePickerQuery.ts","../../src/picker/model/usePickerSelectionLifecycle.ts","../../src/picker/model/usePickerTriggerController.ts"],"sourcesContent":["import { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\n\nimport { InputUI } from \"../input\";\nimport { useInputFieldIds } from \"../input/lib/useInputFieldIds\";\n\nimport { PickerFieldProps } from \"./types\";\n\nexport function PickerField<TValue extends InputType>({\n\tid,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tsize,\n\tclassName,\n\terror,\n\tchildren\n}: PickerFieldProps<TValue>) {\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\tid,\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\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\tsize={size}\n\t\t\tclassName={className}\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{children({ controlId, labelId, descriptionId, errorId, describedBy })}\n\t\t</InputUI>\n\t);\n}\n","import { type MouseEvent } from \"react\";\n\nimport { XIcon } from \"lucide-react\";\n\nimport uiStyles from \"../ui.module.scss\";\n\ntype PickerClearButtonProps = {\n\tdisabled?: boolean;\n\tariaLabel?: string;\n\tonClear: () => void;\n};\n\n/** Единое действие очистки выбранного значения во всех clearable picker-компонентах. */\nexport function PickerClearButton({ disabled, ariaLabel = \"Очистить выбор\", onClear }: PickerClearButtonProps) {\n\tconst stopTriggerInteraction = (event: MouseEvent<HTMLButtonElement>) => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t};\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tdisabled={disabled}\n\t\t\tclassName={uiStyles.uiClearButton}\n\t\t\tdata-ui=\"picker-clear-button\"\n\t\t\tdata-action=\"clear-picker\"\n\t\t\tonMouseDown={stopTriggerInteraction}\n\t\t\tonClick={(event) => {\n\t\t\t\tstopTriggerInteraction(event);\n\t\t\t\tonClear();\n\t\t\t}}\n\t\t\taria-label={ariaLabel}>\n\t\t\t<XIcon />\n\t\t</button>\n\t);\n}\n","@use \"@/styles/mixins\" as *;\n\n.popupPositioner {\n\t--anchor-gap: var(--space-xs);\n\t--anchor-padding: var(--space-xs);\n\t--anchor-offset: 0;\n\n\tmin-width: 0;\n\tz-index: var(--z-dropdown);\n\tbox-shadow: var(--shadow-md);\n\toverflow: hidden;\n\tdisplay: grid;\n\tgrid-template-rows: minmax(0, 1fr);\n}\n\n.options {\n\t--input-width: min(100vw, var(--base-width, 15em));\n\n\tdisplay: grid;\n\tgrid-template-rows: minmax(0, 1fr);\n\twidth: 100%;\n\tmin-width: var(--input-width);\n\tmin-height: 0;\n\tmax-height: 75vh;\n\n\toverflow: hidden;\n\n\tpadding: var(--space-sm);\n\tbackground-color: var(--surface-0);\n\tborder: var(--border);\n\tborder-radius: var(--radius-sm);\n\n\t&:empty {\n\t\tvisibility: hidden;\n\t}\n\n\t&[data-has-toolbar=\"true\"] {\n\t\tgrid-template-rows: auto minmax(0, 1fr);\n\t}\n}\n\n.optionsToolbar {\n\tdisplay: grid;\n\tgap: var(--space-xs);\n\tpadding: var(--space-xs);\n}\n\n.optionsBody {\n\tmin-height: 0;\n\toverflow: hidden;\n}\n\n.status {\n\tpadding: var(--space-xs) var(--space-sm);\n\tcolor: var(--content-2);\n}\n\n.statusError {\n\tcolor: var(--status-error-text);\n}\n\n.triggerContainer {\n\tposition: relative;\n\n\t&[data-has-overlay=\"true\"] input {\n\t\t--ui-color: transparent;\n\t\t--ui-color-hover: transparent;\n\t\t--ui-color-active: transparent;\n\n\t\tcolor: transparent;\n\t\tcaret-color: transparent;\n\t\t-webkit-text-fill-color: transparent;\n\t}\n}\n\n.triggerHasClear {\n\t--trigger-count: 2;\n}\n\n.selectedToken {\n\tposition: absolute;\n\tinset: 0 calc(var(--control-height) * var(--trigger-count, 1) + var(--space-sm)) 0 var(--space-sm);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\tmin-width: 0;\n\tpointer-events: none;\n}\n\n.selectedTokenText {\n\toverflow: hidden;\n\twhite-space: nowrap;\n\ttext-overflow: ellipsis;\n}\n\n@include mobile {\n\t.options {\n\t\t--input-width: calc(100dvw - var(--space-xl));\n\t}\n}\n\n.selectionActionButton {\n\tpadding-block: var(--space-xs);\n\tborder-radius: var(--radius-sm);\n\n\t&:hover {\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n","import { type Ref } from \"react\";\n\nimport { Grid } from \"../grid\";\n\nimport styles from \"./Picker.module.scss\";\n\ntype PickerSelectionToolbarProps = {\n\tonSelectAll: () => void;\n\tonDeselectAll: () => void;\n\tselectAllButtonRef?: Ref<HTMLButtonElement>;\n};\n\n/**\n * Общая панель массовых действий для picker-компонентов с множественным выбором.\n * Компонент не знает формат значения и делегирует изменение владельцу selection-модели.\n */\nexport function PickerSelectionToolbar({ onSelectAll, onDeselectAll, selectAllButtonRef }: PickerSelectionToolbarProps) {\n\treturn (\n\t\t<Grid.Container gap=\"xs\" templateColumns=\"1fr 1fr\">\n\t\t\t<button\n\t\t\t\tref={selectAllButtonRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectionActionButton}\n\t\t\t\tonClick={onSelectAll}\n\t\t\t\tdata-ui=\"picker-select-all\"\n\t\t\t\tdata-action=\"select-all\">\n\t\t\t\tВыбрать все\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectionActionButton}\n\t\t\t\tonClick={onDeselectAll}\n\t\t\t\tdata-ui=\"picker-deselect-all\"\n\t\t\t\tdata-action=\"deselect-all\">\n\t\t\t\tСнять выбор\n\t\t\t</button>\n\t\t</Grid.Container>\n\t);\n}\n","import { type HTMLAttributes, type ReactNode, type Ref } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { Separator } from \"../separator\";\n\nimport styles from \"./Picker.module.scss\";\nimport { PickerSelectionToolbar } from \"./PickerSelectionToolbar\";\n\nexport type PickerSelectionActions = {\n\tonSelectAll: () => void;\n\tonDeselectAll: () => void;\n\tselectAllButtonRef?: Ref<HTMLButtonElement>;\n};\n\nexport interface PickerOptionsProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n\trootRef?: Ref<HTMLDivElement>;\n\tchildren: ReactNode;\n\ttoolbar?: ReactNode | false;\n\tselectionActions?: PickerSelectionActions;\n\tlayoutClassName?: string;\n\tbodyClassName?: string;\n\tscrollable?: boolean;\n}\n\n/**\n * Единая оболочка списка опций для picker, listbox и menu. Если переданы\n * selectionActions, но не передан toolbar, компонент показывает стандартные\n * действия выбора и снятия выбора.\n */\nexport function PickerOptions({\n\trootRef,\n\tchildren,\n\ttoolbar,\n\tselectionActions,\n\tlayoutClassName,\n\tbodyClassName,\n\tscrollable = true,\n\tclassName,\n\t...props\n}: PickerOptionsProps) {\n\tconst resolvedToolbar = toolbar === undefined && selectionActions ? <PickerSelectionToolbar {...selectionActions} /> : toolbar || null;\n\n\treturn (\n\t\t<div\n\t\t\t{...props}\n\t\t\tref={rootRef}\n\t\t\tclassName={cn(styles.options, layoutClassName, className)}\n\t\t\tdata-ui=\"picker-options\"\n\t\t\tdata-has-toolbar={resolvedToolbar ? \"true\" : undefined}>\n\t\t\t{resolvedToolbar ? (\n\t\t\t\t<div className={styles.optionsToolbar}>\n\t\t\t\t\t{resolvedToolbar}\n\t\t\t\t\t<Separator />\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<div className={cn(styles.optionsBody, scrollable && \"scrollable\", bodyClassName)}>{children}</div>\n\t\t</div>\n\t);\n}\n","import { isValidElement, type ReactNode } from \"react\";\n\nexport function extractPickerTextContent(node: ReactNode): string | undefined {\n\tif (typeof node === \"string\" || typeof node === \"number\") {\n\t\treturn String(node);\n\t}\n\n\tif (Array.isArray(node)) {\n\t\tconst values = node\n\t\t\t.map(extractPickerTextContent)\n\t\t\t.filter((value): value is string => Boolean(value))\n\t\t\t.map((value) => value.trim())\n\t\t\t.filter(Boolean);\n\t\treturn values.length ? values.join(\" \") : undefined;\n\t}\n\n\tif (isValidElement<{ children?: ReactNode; searchText?: unknown }>(node)) {\n\t\tif (typeof node.props.searchText === \"string\") {\n\t\t\treturn node.props.searchText;\n\t\t}\n\n\t\treturn extractPickerTextContent(node.props.children);\n\t}\n\n\treturn undefined;\n}\n","import { type ReactNode } from \"react\";\n\nimport { extractPickerTextContent } from \"./model/extractPickerTextContent\";\n\ntype PickerPlaceholderParams = {\n\tplaceholder?: string;\n\tlabel?: ReactNode;\n\toptionCount: number;\n\tfallback?: string;\n};\n\n/**\n * Формирует единый текст placeholder для picker-компонентов и всегда показывает\n * актуальное количество доступных вариантов.\n */\nexport function getPickerPlaceholder({ placeholder, label, optionCount, fallback = \"Выберите значение\" }: PickerPlaceholderParams) {\n\tconst labelText = extractPickerTextContent(label);\n\tconst text = placeholder ?? labelText ?? fallback;\n\n\treturn `${text} <${optionCount}>`;\n}\n","import { type CSSProperties, type KeyboardEvent, type MouseEvent, type ReactNode } from \"react\";\n\nimport { FloatingContext, FloatingFocusManager, FloatingPortal } from \"@floating-ui/react\";\nimport { AnimatePresence, motion } from \"motion/react\";\n\nimport styles from \"./Picker.module.scss\";\nimport { PickerOptions, type PickerSelectionActions } from \"./PickerOptions\";\n\ninterface PickerPopupProps {\n\topen: boolean;\n\tcontext: FloatingContext;\n\tfloatingStyles: CSSProperties;\n\tlistId: string;\n\tlabelId?: string;\n\tpopupAriaLabel?: string;\n\tdescriptionId?: string;\n\tactiveOptionId?: string;\n\tariaMultiselectable?: boolean;\n\tpopupRole?: \"listbox\" | \"dialog\";\n\tsetFloating: (node: HTMLElement | null) => void;\n\tgetFloatingProps: (userProps?: Record<string, unknown>) => Record<string, unknown>;\n\tonKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n\tinitialFocus?: number;\n\treturnFocus?: boolean;\n\ttabIndex?: number;\n\tclassName?: string;\n\tmaxWidth?: CSSProperties[\"maxWidth\"];\n\tlayoutClassName?: string;\n\tbodyClassName?: string;\n\ttoolbar?: ReactNode | false;\n\tselectionActions?: PickerSelectionActions;\n\tchildren: ReactNode;\n}\n\nfunction stopNestedFloatingMouseDown(event: MouseEvent<HTMLElement>): void {\n\tevent.stopPropagation();\n}\n\nexport function PickerPopup({\n\topen,\n\tcontext,\n\tfloatingStyles,\n\tlistId,\n\tlabelId,\n\tpopupAriaLabel,\n\tdescriptionId,\n\tactiveOptionId,\n\tariaMultiselectable,\n\tpopupRole = \"listbox\",\n\tsetFloating,\n\tgetFloatingProps,\n\tonKeyDown,\n\tinitialFocus = -1,\n\treturnFocus = false,\n\ttabIndex = 0,\n\tclassName,\n\tmaxWidth,\n\tlayoutClassName,\n\tbodyClassName,\n\ttoolbar,\n\tselectionActions,\n\tchildren\n}: PickerPopupProps) {\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<FloatingPortal>\n\t\t\t\t\t<FloatingFocusManager context={context} modal={false} initialFocus={initialFocus} returnFocus={returnFocus}>\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tref={setFloating}\n\t\t\t\t\t\t\tstyle={{ ...floatingStyles, maxWidth }}\n\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\t{...getFloatingProps({\n\t\t\t\t\t\t\t\tid: listId,\n\t\t\t\t\t\t\t\trole: popupRole,\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\t\"aria-labelledby\": labelId,\n\t\t\t\t\t\t\t\t\"aria-label\": labelId ? undefined : popupAriaLabel,\n\t\t\t\t\t\t\t\t\"aria-describedby\": descriptionId,\n\t\t\t\t\t\t\t\t\"aria-activedescendant\": activeOptionId,\n\t\t\t\t\t\t\t\t\"aria-multiselectable\": ariaMultiselectable || undefined,\n\t\t\t\t\t\t\t\tonMouseDown: stopNestedFloatingMouseDown,\n\t\t\t\t\t\t\t\tonKeyDown,\n\t\t\t\t\t\t\t\tclassName: styles.popupPositioner\n\t\t\t\t\t\t\t})}>\n\t\t\t\t\t\t\t<PickerOptions\n\t\t\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t\t\t\tlayoutClassName={layoutClassName}\n\t\t\t\t\t\t\t\tbodyClassName={bodyClassName}\n\t\t\t\t\t\t\t\ttoolbar={toolbar}\n\t\t\t\t\t\t\t\tselectionActions={selectionActions}\n\t\t\t\t\t\t\t\tscrollable={false}>\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</PickerOptions>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t</FloatingFocusManager>\n\t\t\t\t</FloatingPortal>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n}\n","import { type HTMLAttributes, type ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport styles from \"./Picker.module.scss\";\n\nexport interface PickerSelectedTokenProps extends Omit<HTMLAttributes<HTMLSpanElement>, \"children\"> {\n\tchildren: ReactNode;\n}\n\n/** Единое визуальное представление выбранного значения внутри picker-trigger. */\nexport function PickerSelectedToken({ children, className, ...props }: PickerSelectedTokenProps) {\n\treturn (\n\t\t<span {...props} className={cn(styles.selectedToken, className)} data-ui=\"picker-selected-token\">\n\t\t\t<span className={styles.selectedTokenText}>{children}</span>\n\t\t</span>\n\t);\n}\n","import { ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerStatusProps {\n\temptyState?: ReactNode;\n\t// loadingState?: ReactNode;\n\terrorState?: ReactNode;\n}\n\nexport function PickerStatus({ emptyState, errorState }: PickerStatusProps) {\n\tconst content = errorState ?? emptyState;\n\n\tif (content === undefined || content === null) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className={cn(uiStyles.uiPopupOption, styles.status, errorState !== undefined && styles.statusError)} aria-disabled={true}>\n\t\t\t{content}\n\t\t</div>\n\t);\n}\n","import { MouseEvent, ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { ChevronDownIcon } from \"lucide-react\";\n\nimport uiStyles from \"../ui.module.scss\";\n\ninterface PickerTriggerActionsProps {\n\topen: boolean;\n\tdisabled?: boolean;\n\tchildren?: ReactNode;\n\tonToggleMouseDown?: (event: MouseEvent<HTMLButtonElement>) => void;\n\tonToggleClick: () => void;\n\topenAriaLabel?: string;\n\tcloseAriaLabel?: string;\n}\n\nexport function PickerTriggerActions({\n\topen,\n\tdisabled,\n\tchildren,\n\tonToggleMouseDown,\n\tonToggleClick,\n\topenAriaLabel = \"Открыть список\",\n\tcloseAriaLabel = \"Закрыть список\"\n}: PickerTriggerActionsProps) {\n\treturn (\n\t\t<div className={uiStyles.uiToggleButtonContainer} data-disabled={disabled || undefined}>\n\t\t\t{children}\n\n\t\t\t<div className={uiStyles.uiButtonSeparator} />\n\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-label={open ? closeAriaLabel : openAriaLabel}\n\t\t\t\tclassName={uiStyles.uiToggleButton}\n\t\t\t\tonMouseDown={onToggleMouseDown}\n\t\t\t\tonClick={onToggleClick}>\n\t\t\t\t<ChevronDownIcon className={cn(uiStyles.uiToggleIcon, open && uiStyles.uiToggleIconOpen)} />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n","import { ComponentPropsWithoutRef, forwardRef, ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputControl, InputLoadingFrame } from \"../input\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\nexport interface PickerTriggerInputProps extends Omit<ComponentPropsWithoutRef<\"input\">, \"size\"> {\n\trootRef?: (node: HTMLDivElement | null) => void;\n\tendAdornment?: ReactNode;\n\toverlay?: ReactNode;\n\trootClassName?: string;\n\tinputClassName?: string;\n\tisLoading?: boolean;\n}\n\nexport const PickerTriggerInput = forwardRef<HTMLInputElement, PickerTriggerInputProps>(\n\t({ rootRef, endAdornment, overlay, rootClassName, inputClassName, isLoading, ...props }, ref) => {\n\t\tconst hasOverlay = overlay !== undefined && overlay !== null;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={rootRef}\n\t\t\t\tclassName={cn(uiStyles.uiInputContainer, styles.triggerContainer, rootClassName)}\n\t\t\t\tdata-has-overlay={hasOverlay || undefined}>\n\t\t\t\t{isLoading ? (\n\t\t\t\t\t<InputLoadingFrame />\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<InputControl endAdornment={endAdornment}>\n\t\t\t\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t\t\t\t<input {...props} ref={ref} className={cn(uiStyles.uiInputWithToggle, controlClassName, inputClassName)} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</InputControl>\n\t\t\t\t\t\t{hasOverlay ? overlay : null}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nPickerTriggerInput.displayName = \"PickerTriggerInput\";\n","import { type ReactNode, type Ref } from \"react\";\n\nimport styles from \"./Picker.module.scss\";\nimport { PickerClearButton } from \"./PickerClearButton\";\nimport { getPickerPlaceholder } from \"./PickerPlaceholder\";\nimport { PickerSelectedToken } from \"./PickerSelectedToken\";\nimport { PickerTriggerActions } from \"./PickerTriggerActions\";\nimport { PickerTriggerInput, type PickerTriggerInputProps } from \"./PickerTriggerInput\";\n\nexport interface PickerTriggerProps extends Omit<PickerTriggerInputProps, \"placeholder\" | \"overlay\" | \"endAdornment\"> {\n\tref?: Ref<HTMLInputElement>;\n\topen: boolean;\n\toptionCount: number;\n\tplaceholder?: string;\n\tlabel?: ReactNode;\n\tplaceholderFallback?: string;\n\tselectedValue?: ReactNode;\n\thasSelection?: boolean;\n\tshowSelectedValue?: boolean;\n\tclearable?: boolean;\n\tonClear?: () => void;\n\tclearAriaLabel?: string;\n\tonToggleMouseDown?: PickerTriggerActionsProps[\"onToggleMouseDown\"];\n\tonToggleClick: PickerTriggerActionsProps[\"onToggleClick\"];\n\topenAriaLabel?: string;\n\tcloseAriaLabel?: string;\n}\n\ntype PickerTriggerActionsProps = Parameters<typeof PickerTriggerActions>[0];\n\n/**\n * Общая композиция picker-trigger: input, выбранное значение, очистка и кнопка\n * открытия. Владельцы picker-моделей передают только состояние и обработчики.\n */\nexport function PickerTrigger({\n\tref,\n\topen,\n\toptionCount,\n\tplaceholder,\n\tlabel,\n\tplaceholderFallback,\n\tselectedValue,\n\thasSelection,\n\tshowSelectedValue = selectedValue !== undefined && selectedValue !== null,\n\tclearable = false,\n\tonClear,\n\tclearAriaLabel,\n\tonToggleMouseDown,\n\tonToggleClick,\n\topenAriaLabel,\n\tcloseAriaLabel,\n\tdisabled,\n\tinputClassName,\n\t...inputProps\n}: PickerTriggerProps) {\n\tconst hasSelectedValue = hasSelection ?? (selectedValue !== undefined && selectedValue !== null);\n\tconst canClear = clearable && hasSelectedValue && onClear !== undefined && !disabled;\n\n\treturn (\n\t\t<PickerTriggerInput\n\t\t\t{...inputProps}\n\t\t\tref={ref}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={\n\t\t\t\tshowSelectedValue ? undefined : getPickerPlaceholder({ placeholder, label, optionCount, fallback: placeholderFallback })\n\t\t\t}\n\t\t\tinputClassName={inputClassName}\n\t\t\trootClassName={clearable ? styles.triggerHasClear : undefined}\n\t\t\toverlay={showSelectedValue ? <PickerSelectedToken>{selectedValue}</PickerSelectedToken> : undefined}\n\t\t\tendAdornment={\n\t\t\t\t<PickerTriggerActions\n\t\t\t\t\topen={open}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonToggleMouseDown={onToggleMouseDown}\n\t\t\t\t\tonToggleClick={onToggleClick}\n\t\t\t\t\topenAriaLabel={openAriaLabel}\n\t\t\t\t\tcloseAriaLabel={closeAriaLabel}>\n\t\t\t\t\t{canClear ? <PickerClearButton ariaLabel={clearAriaLabel} onClear={onClear} /> : null}\n\t\t\t\t</PickerTriggerActions>\n\t\t\t}\n\t\t/>\n\t);\n}\n","export type PickerTriggerMode = \"display\" | \"search-single\" | \"search-multi\";\n\ninterface PickerTriggerTextFocusParams {\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n}\n\nexport interface PickerTriggerPolicy {\n\tfocusFloatingOnOpen: boolean;\n\trestoreFocusOnClose: boolean;\n\tresetQueryOnClose: boolean;\n\tshouldOpenOnTriggerClick: (open: boolean) => boolean;\n\tshouldOpenOnInputChange: (open: boolean) => boolean;\n\tshouldFocusReferenceOnToggle: (open: boolean) => boolean;\n\tshouldSelectTriggerTextOnFocus: (params: PickerTriggerTextFocusParams) => boolean;\n}\n\n/**\n * Единая политика поведения trigger-input для picker-компонентов.\n * Нормализует различия между display-режимом, single-search и multi-search.\n */\nexport function createPickerTriggerPolicy(mode: PickerTriggerMode): PickerTriggerPolicy {\n\tswitch (mode) {\n\t\tcase \"search-single\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: ({ open, currentQuery, hasDisplayValue }) =>\n\t\t\t\t\t!open && currentQuery.length === 0 && hasDisplayValue\n\t\t\t};\n\t\tcase \"search-multi\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t\tcase \"display\":\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: true,\n\t\t\t\trestoreFocusOnClose: true,\n\t\t\t\tresetQueryOnClose: false,\n\t\t\t\tshouldOpenOnTriggerClick: (open) => !open,\n\t\t\t\tshouldOpenOnInputChange: () => false,\n\t\t\t\tshouldFocusReferenceOnToggle: () => false,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t}\n}\n","import { useMemo } from \"react\";\n\nimport { normalizeTextToLower } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\ninterface UsePickerDefaultFilterOptions<T> {\n\toptions: readonly T[];\n\tquery: string;\n\tenabled?: boolean;\n\tgetSearchText: (option: T) => unknown;\n}\n\nfunction normalizeSearchText(value: unknown) {\n\tconst parts = Array.isArray(value) ? value : [value];\n\n\treturn normalizeTextToLower(parts.filter(Boolean).join(\" \"));\n}\n\nexport function usePickerDefaultFilter<T>({ options, query, enabled = true, getSearchText }: UsePickerDefaultFilterOptions<T>) {\n\tconst normalizedQuery = normalizeTextToLower(query);\n\n\treturn useMemo(() => {\n\t\tif (!enabled || !normalizedQuery) {\n\t\t\treturn [...options];\n\t\t}\n\n\t\treturn options.filter((option) => normalizeSearchText(getSearchText(option)).includes(normalizedQuery));\n\t}, [enabled, getSearchText, normalizedQuery, options]);\n}\n","import { Placement } from \"@floating-ui/react\";\nimport {\n\ttype FloatingListboxPlacementStrategy,\n\ttype FloatingListboxSizeResolver,\n\tuseFloatingListbox\n} from \"@ryuzaki13/react-foundation-lib/hooks\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerFloatingListboxParams<T> {\n\toptions: readonly T[];\n\tselectedIndex: number;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n\tgetOptionDisabled?: (option: T) => boolean;\n\tonSelect?: (option: T) => void;\n\tdisabled?: boolean;\n\tplacement?: Placement;\n\tplacementStrategy?: FloatingListboxPlacementStrategy;\n\tcloseOnSelect?: boolean;\n\tfocusFloatingOnOpen?: boolean;\n\tallowOpenWithoutOptions?: boolean;\n\trestoreFocusOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n\tresolveFloatingSize?: FloatingListboxSizeResolver;\n}\n\n/**\n * Единая точка входа для popup/listbox поведения во всех picker-компонентах.\n */\nexport function usePickerFloatingListbox<T>(params: UsePickerFloatingListboxParams<T>) {\n\tconst triggerPolicy = params.triggerMode ? createPickerTriggerPolicy(params.triggerMode) : undefined;\n\n\treturn useFloatingListbox({\n\t\t...params,\n\t\tfocusFloatingOnOpen: params.focusFloatingOnOpen ?? triggerPolicy?.focusFloatingOnOpen,\n\t\trestoreFocusOnClose: params.restoreFocusOnClose ?? triggerPolicy?.restoreFocusOnClose\n\t});\n}\n","import { useState } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerQueryOptions {\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tresetOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n}\n\n/**\n * Управляет controlled/uncontrolled query и возвращает policy закрытия владельцу open-state.\n * Сброс выполняется самим владельцем в событии close, поэтому hook не зеркалит lifecycle через effect.\n */\nexport function usePickerQuery({ query, defaultQuery, onQuery, resetOnClose, triggerMode }: UsePickerQueryOptions) {\n\tconst isControlled = query !== undefined;\n\tconst [internalQuery, setInternalQuery] = useState(defaultQuery ?? \"\");\n\tconst currentQuery = isControlled ? (query ?? \"\") : internalQuery;\n\tconst resolvedResetOnClose = resetOnClose ?? (triggerMode ? createPickerTriggerPolicy(triggerMode).resetQueryOnClose : true);\n\n\tconst setQuery = (nextValue: string) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalQuery(nextValue);\n\t\t}\n\n\t\tonQuery?.(nextValue);\n\t};\n\n\treturn {\n\t\tquery: currentQuery,\n\t\tsetQuery,\n\t\tclearQuery: () => setQuery(\"\"),\n\t\tresetQueryOnClose: resolvedResetOnClose\n\t};\n}\n","import { useEffect, useRef, useState } from \"react\";\n\ninterface UsePickerSelectionLifecycleOptions<TValue> {\n\tvalue: TValue;\n\topen: boolean;\n\tonCommit: (value: TValue) => void;\n\tonOpen?: () => void;\n\tonClose?: (value: TValue) => void;\n\tisEqual: (left: TValue, right: TValue) => boolean;\n}\n\n/**\n * Общий жизненный цикл чернового выбора для picker-компонентов,\n * где изменения подтверждаются при закрытии popup.\n */\nexport function usePickerSelectionLifecycle<TValue>({\n\tvalue,\n\topen,\n\tonCommit,\n\tonOpen,\n\tonClose,\n\tisEqual\n}: UsePickerSelectionLifecycleOptions<TValue>) {\n\tconst previousOpenRef = useRef(false);\n\tconst [draftValue, setDraftValue] = useState(value);\n\n\tuseEffect(() => {\n\t\tif (previousOpenRef.current && !open) {\n\t\t\tif (!isEqual(draftValue, value)) {\n\t\t\t\tonCommit(draftValue);\n\t\t\t}\n\n\t\t\tonClose?.(draftValue);\n\t\t}\n\n\t\tpreviousOpenRef.current = open;\n\t}, [draftValue, isEqual, onClose, onCommit, open, value]);\n\n\tconst prepareOpen = () => {\n\t\tsetDraftValue(value);\n\t\tonOpen?.();\n\t};\n\n\treturn {\n\t\tdraftValue,\n\t\tsetDraftValue,\n\t\tprepareOpen\n\t};\n}\n","import { MouseEvent, RefObject } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerTriggerControllerOptions {\n\tmode: PickerTriggerMode;\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n\tinputRef: RefObject<HTMLInputElement | null>;\n\tsetQuery?: (value: string) => void;\n\topenList?: () => void;\n\tclose?: () => void;\n\ttoggleOpen?: () => void;\n\tonBeforeOpen?: () => void;\n}\n\ninterface HandleTriggerKeyDownOptions {\n\tevent: React.KeyboardEvent<HTMLElement>;\n\tonActivateWhenOpen?: () => void;\n\tenableSpaceActivation?: boolean;\n\tenableClosedArrowDownOpen?: boolean;\n\tsuppressClosedArrowUp?: boolean;\n}\n\nfunction focusInput(inputRef: RefObject<HTMLInputElement | null>) {\n\trequestAnimationFrame(() => {\n\t\tinputRef.current?.focus();\n\t});\n}\n\n/**\n * Единый контроллер пользовательских действий на trigger-input.\n * Держит поведение display/search-single/search-multi в одном месте.\n */\nexport function usePickerTriggerController({\n\tmode,\n\topen,\n\tcurrentQuery,\n\thasDisplayValue,\n\tinputRef,\n\tsetQuery,\n\topenList,\n\tclose,\n\ttoggleOpen,\n\tonBeforeOpen\n}: UsePickerTriggerControllerOptions) {\n\tconst policy = createPickerTriggerPolicy(mode);\n\n\tconst openTrigger = () => {\n\t\tonBeforeOpen?.();\n\n\t\tif (openList) {\n\t\t\topenList();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst closeTrigger = () => {\n\t\tif (close) {\n\t\t\tclose();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst toggleTrigger = () => {\n\t\tif (open) {\n\t\t\tcloseTrigger();\n\t\t} else {\n\t\t\topenTrigger();\n\t\t}\n\n\t\tif (policy.shouldFocusReferenceOnToggle(open)) {\n\t\t\tfocusInput(inputRef);\n\t\t}\n\t};\n\n\treturn {\n\t\tpolicy,\n\t\thandleTriggerInputChange: (nextValue: string) => {\n\t\t\tsetQuery?.(nextValue);\n\n\t\t\tif (policy.shouldOpenOnInputChange(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerClick: () => {\n\t\t\tif (policy.shouldOpenOnTriggerClick(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerFocus: (input: HTMLInputElement) => {\n\t\t\tif (\n\t\t\t\tpolicy.shouldSelectTriggerTextOnFocus({\n\t\t\t\t\topen,\n\t\t\t\t\tcurrentQuery,\n\t\t\t\t\thasDisplayValue\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tinput.select();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\thandleToggleMouseDown: (event: MouseEvent<HTMLButtonElement>) => {\n\t\t\tevent.preventDefault();\n\t\t},\n\t\thandleToggleClick: () => {\n\t\t\ttoggleTrigger();\n\t\t},\n\t\thandleTriggerKeyDown: ({\n\t\t\tevent,\n\t\t\tonActivateWhenOpen,\n\t\t\tenableSpaceActivation = false,\n\t\t\tenableClosedArrowDownOpen = false,\n\t\t\tsuppressClosedArrowUp = false\n\t\t}: HandleTriggerKeyDownOptions) => {\n\t\t\tif (!open && suppressClosedArrowUp && event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!open && enableClosedArrowDownOpen && event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleTrigger();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Enter\") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (enableSpaceActivation && event.key === \" \") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttoggleTrigger\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;AAOA,SAAgB,EAAsC,EACrD,OACA,UACA,gBACA,aACA,SACA,cACA,UACA,eAC4B;CAC5B,IAAM,EAAE,cAAW,YAAS,kBAAe,YAAS,mBAAgB,EAAiB;EACpF;EACA,UAAU,KAAiC;EAC3C,gBAAgB,CAAC,CAAC;EAClB,UAAU,CAAC,CAAC;CACb,CAAC;CAED,OACC,kBAAC,GAAD;EACQ;EACM;EACH;EACJ;EACK;EACJ;EACI;EACF;EACM;EACN;EACR,UAAA,EAAS;GAAE;GAAW;GAAS;GAAe;GAAS;EAAY,CAAC;CAC7D,CAAA;AAEX;;;AC1BA,SAAgB,EAAkB,EAAE,aAAU,eAAY,kBAAkB,cAAmC;CAC9G,IAAM,KAA0B,MAAyC;EAExE,AADA,EAAM,eAAe,GACrB,EAAM,gBAAgB;CACvB;CAEA,OACC,kBAAC,UAAD;EACC,MAAK;EACK;EACV,WAAW,EAAS;EACpB,WAAQ;EACR,eAAY;EACZ,aAAa;EACb,UAAU,MAAU;GAEnB,AADA,EAAuB,CAAK,GAC5B,EAAQ;EACT;EACA,cAAY;EACZ,UAAA,kBAAC,GAAD,CAAQ,CAAA;CACD,CAAA;AAEV;;;;;;;;;;;;;;;;AEnBA,SAAgB,EAAuB,EAAE,gBAAa,kBAAe,yBAAmD;CACvH,OACC,kBAAC,EAAK,WAAN;EAAgB,KAAI;EAAK,iBAAgB;EAAzC,UAAA,CACC,kBAAC,UAAD;GACC,KAAK;GACL,MAAK;GACL,WAAW,EAAO;GAClB,SAAS;GACT,WAAQ;GACR,eAAY;GAAa,UAAA;EAElB,CAAA,GACR,kBAAC,UAAD;GACC,MAAK;GACL,WAAW,EAAO;GAClB,SAAS;GACT,WAAQ;GACR,eAAY;GAAe,UAAA;EAEpB,CAAA,CACO;;AAElB;;;ACRA,SAAgB,EAAc,EAC7B,YACA,aACA,YACA,qBACA,oBACA,kBACA,gBAAa,IACb,cACA,GAAG,KACmB;CACtB,IAAM,IAAkB,MAAY,KAAA,KAAa,IAAmB,kBAAC,GAAD,EAAwB,GAAI,EAAmB,CAAA,IAAI,KAAW;CAElI,OACC,kBAAC,OAAD;EACC,GAAI;EACJ,KAAK;EACL,WAAW,EAAG,EAAO,SAAS,GAAiB,CAAS;EACxD,WAAQ;EACR,oBAAkB,IAAkB,SAAS,KAAA;EAL9C,UAAA,CAME,IACA,kBAAC,OAAD;GAAK,WAAW,EAAO;GAAvB,UAAA,CACE,GACD,kBAAC,GAAD,CAAY,CAAA,CACR;EACF,CAAA,IAAA,MACJ,kBAAC,OAAD;GAAK,WAAW,EAAG,EAAO,aAAa,KAAc,cAAc,CAAa;GAAI;EAAc,CAAA,CAC9F;;AAEP;;;ACzDA,SAAgB,EAAyB,GAAqC;CAC7E,IAAI,OAAO,KAAS,YAAY,OAAO,KAAS,UAC/C,OAAO,OAAO,CAAI;CAGnB,IAAI,MAAM,QAAQ,CAAI,GAAG;EACxB,IAAM,IAAS,EACb,IAAI,CAAwB,CAAC,CAC7B,QAAQ,MAA2B,EAAQ,CAAM,CAAC,CAClD,KAAK,MAAU,EAAM,KAAK,CAAC,CAAC,CAC5B,OAAO,OAAO;EAChB,OAAO,EAAO,SAAS,EAAO,KAAK,GAAG,IAAI,KAAA;CAC3C;CAEA,IAAI,EAA+D,CAAI,GAKtE,OAJI,OAAO,EAAK,MAAM,cAAe,WAC7B,EAAK,MAAM,aAGZ,EAAyB,EAAK,MAAM,QAAQ;AAIrD;;;ACVA,SAAgB,EAAqB,EAAE,gBAAa,UAAO,gBAAa,cAAW,uBAAgD;CAClI,IAAM,IAAY,EAAyB,CAAK;CAGhD,OAAO,GAFM,KAAe,KAAa,EAE1B,IAAI,EAAY;AAChC;;;ACcA,SAAS,EAA4B,GAAsC;CAC1E,EAAM,gBAAgB;AACvB;AAEA,SAAgB,EAAY,EAC3B,SACA,YACA,mBACA,WACA,YACA,mBACA,kBACA,mBACA,wBACA,eAAY,WACZ,gBACA,qBACA,cACA,kBAAe,IACf,iBAAc,IACd,cAAW,GACX,cACA,aACA,oBACA,kBACA,YACA,qBACA,eACoB;CACpB,OACC,kBAAC,GAAD,EAAA,UACE,KACA,kBAAC,GAAD,EAAA,UACC,kBAAC,GAAD;EAA+B;EAAS,OAAO;EAAqB;EAA2B;EAC9F,UAAA,kBAAC,EAAO,KAAR;GACC,KAAK;GACL,OAAO;IAAE,GAAG;IAAgB;GAAS;GACrC,SAAS;IAAE,SAAS;IAAG,OAAO;GAAK;GACnC,SAAS;IAAE,SAAS;IAAG,OAAO;GAAE;GAChC,MAAM;IAAE,SAAS;IAAG,OAAO;GAAK;GAChC,GAAI,EAAiB;IACpB,IAAI;IACJ,MAAM;IACN;IACA,mBAAmB;IACnB,cAAc,IAAU,KAAA,IAAY;IACpC,oBAAoB;IACpB,yBAAyB;IACzB,wBAAwB,KAAuB,KAAA;IAC/C,aAAa;IACb;IACA,WAAW,EAAO;GACnB,CAAC;GACD,UAAA,kBAAC,GAAD;IACY;IACM;IACF;IACN;IACS;IAClB,YAAY;IACX;GACa,CAAA;EACJ,CAAA;CACS,CAAA,EACP,CAAA,EAED,CAAA;AAEnB;;;AC3FA,SAAgB,EAAoB,EAAE,aAAU,cAAW,GAAG,KAAmC;CAChG,OACC,kBAAC,QAAD;EAAM,GAAI;EAAO,WAAW,EAAG,EAAO,eAAe,CAAS;EAAG,WAAQ;EACxE,UAAA,kBAAC,QAAD;GAAM,WAAW,EAAO;GAAoB;EAAe,CAAA;CACtD,CAAA;AAER;;;ACHA,SAAgB,EAAa,EAAE,eAAY,iBAAiC;CAC3E,IAAM,IAAU,KAAc;CAM9B,OAJI,KAAqC,OACjC,OAIP,kBAAC,OAAD;EAAK,WAAW,EAAG,EAAS,eAAe,EAAO,QAAQ,MAAe,KAAA,KAAa,EAAO,WAAW;EAAG,iBAAe;EACxH,UAAA;CACG,CAAA;AAEP;;;ACTA,SAAgB,EAAqB,EACpC,SACA,aACA,aACA,sBACA,kBACA,mBAAgB,kBAChB,oBAAiB,oBACY;CAC7B,OACC,kBAAC,OAAD;EAAK,WAAW,EAAS;EAAyB,iBAAe,KAAY,KAAA;EAA7E,UAAA;GACE;GAED,kBAAC,OAAD,EAAK,WAAW,EAAS,kBAAoB,CAAA;GAE7C,kBAAC,UAAD;IACC,MAAK;IACK;IACV,cAAY,IAAO,IAAiB;IACpC,WAAW,EAAS;IACpB,aAAa;IACb,SAAS;IACT,UAAA,kBAAC,GAAD,EAAiB,WAAW,EAAG,EAAS,cAAc,KAAQ,EAAS,gBAAgB,EAAI,CAAA;GACpF,CAAA;EACJ;;AAEP;;;ACzBA,IAAa,IAAqB,GAChC,EAAE,YAAS,iBAAc,YAAS,kBAAe,mBAAgB,cAAW,GAAG,KAAS,MAAQ;CAChG,IAAM,IAAa,KAAqC;CAExD,OACC,kBAAC,OAAD;EACC,KAAK;EACL,WAAW,EAAG,EAAS,kBAAkB,EAAO,kBAAkB,CAAa;EAC/E,oBAAkB,KAAc,KAAA;EAC/B,UAAA,IACA,kBAAC,GAAD,CAAoB,CAAA,IAEpB,kBAAA,GAAA,EAAA,UAAA,CACC,kBAAC,GAAD;GAA4B;GACzB,WAAA,EAAE,0BACH,kBAAC,SAAD;IAAO,GAAI;IAAY;IAAK,WAAW,EAAG,EAAS,mBAAmB,GAAkB,CAAc;GAAI,CAAA;EAE9F,CAAA,GACb,IAAa,IAAU,IACvB,EAAA,CAAA;CAEC,CAAA;AAEP,CACD;AAEA,EAAmB,cAAc;;;ACVjC,SAAgB,EAAc,EAC7B,QACA,SACA,gBACA,gBACA,UACA,wBACA,kBACA,iBACA,uBAAoB,KAAiD,MACrE,eAAY,IACZ,YACA,mBACA,sBACA,kBACA,kBACA,mBACA,aACA,mBACA,GAAG,KACmB;CAEtB,IAAM,IAAW,MADQ,KAAiB,KAAiD,SACzC,MAAY,KAAA,KAAa,CAAC;CAE5E,OACC,kBAAC,GAAD;EACC,GAAI;EACC;EACK;EACV,aACC,IAAoB,KAAA,IAAY,EAAqB;GAAE;GAAa;GAAO;GAAa,UAAU;EAAoB,CAAC;EAExG;EAChB,eAAe,IAAY,EAAO,kBAAkB,KAAA;EACpD,SAAS,IAAoB,kBAAC,GAAD,EAAA,UAAsB,EAAmC,CAAA,IAAI,KAAA;EAC1F,cACC,kBAAC,GAAD;GACO;GACI;GACS;GACJ;GACA;GACC;GACf,UAAA,IAAW,kBAAC,GAAD;IAAmB,WAAW;IAAyB;GAAU,CAAA,IAAI;EAC5D,CAAA;CAEvB,CAAA;AAEH;;;AC5DA,SAAgB,EAA0B,GAA8C;CACvF,QAAQ,GAAR;EACC,KAAK,iBACJ,OAAO;GACN,qBAAqB;GACrB,qBAAqB;GACrB,mBAAmB;GACnB,gCAAgC;GAChC,0BAA0B,MAAS,CAAC;GACpC,+BAA+B,MAAS,CAAC;GACzC,iCAAiC,EAAE,SAAM,iBAAc,yBACtD,CAAC,KAAQ,EAAa,WAAW,KAAK;EACxC;EACD,KAAK,gBACJ,OAAO;GACN,qBAAqB;GACrB,qBAAqB;GACrB,mBAAmB;GACnB,gCAAgC;GAChC,0BAA0B,MAAS,CAAC;GACpC,+BAA+B,MAAS,CAAC;GACzC,sCAAsC;EACvC;EAED,SACC,OAAO;GACN,qBAAqB;GACrB,qBAAqB;GACrB,mBAAmB;GACnB,2BAA2B,MAAS,CAAC;GACrC,+BAA+B;GAC/B,oCAAoC;GACpC,sCAAsC;EACvC;CACF;AACD;;;AC9CA,SAAS,EAAoB,GAAgB;CAG5C,OAAO,GAFO,MAAM,QAAQ,CAAK,IAAI,IAAQ,CAAC,CAAK,EAAA,CAEjB,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC;AAC5D;AAEA,SAAgB,EAA0B,EAAE,YAAS,UAAO,aAAU,IAAM,oBAAmD;CAC9H,IAAM,IAAkB,EAAqB,CAAK;CAElD,OAAO,QACF,CAAC,KAAW,CAAC,IACT,CAAC,GAAG,CAAO,IAGZ,EAAQ,QAAQ,MAAW,EAAoB,EAAc,CAAM,CAAC,CAAC,CAAC,SAAS,CAAe,CAAC,GACpG;EAAC;EAAS;EAAe;EAAiB;CAAO,CAAC;AACtD;;;ACGA,SAAgB,EAA4B,GAA2C;CACtF,IAAM,IAAgB,EAAO,cAAc,EAA0B,EAAO,WAAW,IAAI,KAAA;CAE3F,OAAO,EAAmB;EACzB,GAAG;EACH,qBAAqB,EAAO,uBAAuB,GAAe;EAClE,qBAAqB,EAAO,uBAAuB,GAAe;CACnE,CAAC;AACF;;;ACtBA,SAAgB,EAAe,EAAE,UAAO,iBAAc,YAAS,iBAAc,kBAAsC;CAClH,IAAM,IAAe,MAAU,KAAA,GACzB,CAAC,GAAe,KAAoB,EAAS,KAAgB,EAAE,GAC/D,IAAe,IAAgB,KAAS,KAAM,GAC9C,IAAuB,MAAiB,MAAc,EAA0B,CAAW,CAAC,CAAC,oBAE7F,KAAY,MAAsB;EAKvC,AAJK,KACJ,EAAiB,CAAS,GAG3B,IAAU,CAAS;CACpB;CAEA,OAAO;EACN,OAAO;EACP;EACA,kBAAkB,EAAS,EAAE;EAC7B,mBAAmB;CACpB;AACD;;;ACrBA,SAAgB,EAAoC,EACnD,UACA,SACA,aACA,WACA,YACA,cAC8C;CAC9C,IAAM,IAAkB,EAAO,EAAK,GAC9B,CAAC,GAAY,KAAiB,EAAS,CAAK;CAmBlD,OAjBA,QAAgB;EASf,AARI,EAAgB,WAAW,CAAC,MAC1B,EAAQ,GAAY,CAAK,KAC7B,EAAS,CAAU,GAGpB,IAAU,CAAU,IAGrB,EAAgB,UAAU;CAC3B,GAAG;EAAC;EAAY;EAAS;EAAS;EAAU;EAAM;CAAK,CAAC,GAOjD;EACN;EACA;EACA,mBARyB;GAEzB,AADA,EAAc,CAAK,GACnB,IAAS;EACV;CAMA;AACD;;;ACvBA,SAAS,EAAW,GAA8C;CACjE,4BAA4B;EAC3B,EAAS,SAAS,MAAM;CACzB,CAAC;AACF;AAMA,SAAgB,EAA2B,EAC1C,SACA,SACA,iBACA,oBACA,aACA,aACA,aACA,UACA,eACA,mBACqC;CACrC,IAAM,IAAS,EAA0B,CAAI,GAEvC,UAAoB;EAGzB,IAFA,IAAe,GAEX,GAAU;GACb,EAAS;GACT;EACD;EAEA,IAAa;CACd,GAEM,UAAqB;EAC1B,IAAI,GAAO;GACV,EAAM;GACN;EACD;EAEA,IAAa;CACd,GAEM,UAAsB;EAO3B,AANI,IACH,EAAa,IAEb,EAAY,GAGT,EAAO,6BAA6B,CAAI,KAC3C,EAAW,CAAQ;CAErB;CAEA,OAAO;EACN;EACA,2BAA2B,MAAsB;GAGhD,AAFA,IAAW,CAAS,GAEhB,EAAO,wBAAwB,CAAI,KACtC,EAAY;EAEd;EACA,0BAA0B;GACzB,AAAI,EAAO,yBAAyB,CAAI,KACvC,EAAY;EAEd;EACA,qBAAqB,MAA4B;GAChD,AACC,EAAO,+BAA+B;IACrC;IACA;IACA;GACD,CAAC,KAED,4BAA4B;IAC3B,EAAM,OAAO;GACd,CAAC;EAEH;EACA,wBAAwB,MAAyC;GAChE,EAAM,eAAe;EACtB;EACA,yBAAyB;GACxB,EAAc;EACf;EACA,uBAAuB,EACtB,UACA,uBACA,2BAAwB,IACxB,+BAA4B,IAC5B,2BAAwB,SACU;GAClC,IAAI,CAAC,KAAQ,KAAyB,EAAM,QAAQ,WAAW;IAC9D,EAAM,eAAe;IACrB;GACD;GAEA,IAAI,CAAC,KAAQ,KAA6B,EAAM,QAAQ,aAAa;IAEpE,AADA,EAAM,eAAe,GACrB,EAAc;IACd;GACD;GAEA,IAAI,EAAM,QAAQ,SAAS;IAG1B,AAFA,EAAM,eAAe,GAEjB,IACH,IAAqB,IAErB,EAAc;IAGf;GACD;GAEA,AAAI,KAAyB,EAAM,QAAQ,QAC1C,EAAM,eAAe,GAEjB,IACH,IAAqB,IAErB,EAAc;EAGjB;EACA;CACD;AACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.module-BsDio9A3.js","names":[],"sources":["../../src/ui.module.scss"],"sourcesContent":["@use \"@/styles/mixins\" as *;\n\n.uiSizable {\n\t--base-width: 100%;\n\n\twidth: var(--base-width);\n\n\t&.xs {\n\t\t--base-width: calc(var(--drp-ui-width-xs, var(--ui-width-xs)) - var(--width-add));\n\t}\n\n\t&.sm {\n\t\t--base-width: calc(var(--drp-ui-width-sm, var(--ui-width-sm)) - var(--width-add));\n\t}\n\n\t&.md {\n\t\t--base-width: calc(var(--drp-ui-width-md, var(--ui-width-md)) - var(--width-add));\n\t}\n\n\t&.lg {\n\t\t--base-width: calc(var(--drp-ui-width-lg, var(--ui-width-lg)) - var(--width-add));\n\t}\n\n\t&.xl {\n\t\t--base-width: calc(var(--drp-ui-width-xl, var(--ui-width-xl)) - var(--width-add));\n\t}\n}\n\n// TODO: Тестовый класс\n.uiErrorElement {\n\t--grid-size: var(--space-sm);\n\t--grid-line-size: var(--border-width);\n\t--grid-line-color: var(--status-error-soft);\n\n\theight: var(--control-height);\n\twidth: 100%; // calc(10em - var(--width-add));\n\tflex-shrink: 0;\n\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\tborder: var(--focus-width) solid var(--status-error-border);\n\tborder-radius: var(--radius-sm);\n\toutline: none;\n\n\tfont-weight: 700;\n\tfont-variation-settings: \"wght\" 700;\n\n\tcolor: var(--status-error-text);\n\tbackground-color: var(--surface-0);\n\tbackground-image:\n\t\trepeating-linear-gradient(\n\t\t\t45deg,\n\t\t\tvar(--grid-line-color) 0 var(--grid-line-size),\n\t\t\ttransparent var(--grid-line-size) var(--grid-size)\n\t\t),\n\t\trepeating-linear-gradient(\n\t\t\t-45deg,\n\t\t\tvar(--grid-line-color) 0 var(--grid-line-size),\n\t\t\ttransparent var(--grid-line-size) var(--grid-size)\n\t\t);\n}\n\n.uiContainer {\n\tposition: relative;\n\twidth: 100%;\n}\n\n.uiInputContainer {\n\t@extend .uiContainer;\n\n\t--padding-right: var(--control-height);\n}\n\n.uiLabelBase {\n\tdisplay: inline-block;\n\tfont-weight: 400;\n\tfont-variation-settings: \"wght\" 400;\n}\n\n.uiLabel {\n\t@extend .uiLabelBase;\n\n\tmargin-block: var(--space-xs);\n}\n\n.uiDescription {\n\t--paragraph-margin: 0;\n\n\tpadding-bottom: var(--space-xs);\n\tcolor: var(--content-1);\n\tfont-weight: 300;\n\tfont-variation-settings: \"wght\" 300;\n}\n\n.uiLabel,\n.uiDescription {\n\tmargin-inline: var(--space-xs);\n}\n\n.uiPlaceholder {\n\tcolor: var(--content-2);\n\tfont-weight: 100;\n\tfont-variation-settings: \"wght\" 100;\n\t// font-size: var(--font-size-sm);\n\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.required {\n\t.uiLabelBase::after {\n\t\tcontent: \" *\";\n\t\tcolor: var(--status-error-text);\n\t}\n}\n\n.uiControl {\n\t@include ui-tone(\"neutral\");\n\t@include ui-appearance-outline;\n\t@include ui-control-base;\n\n\t--ui-radius: var(--radius-sm);\n\n\t&.invalid,\n\t&:invalid {\n\t\t@include ui-tone(\"error\");\n\t\t@include ui-appearance-outline;\n\t}\n\n\t&::placeholder {\n\t\t@extend .uiPlaceholder;\n\t}\n}\n\n.uiToneNeutral {\n\t@include ui-tone(\"neutral\");\n}\n\n.uiToneBrand {\n\t@include ui-tone(\"brand\");\n}\n\n.uiToneError {\n\t@include ui-tone(\"error\");\n}\n\n.uiToneWarning {\n\t@include ui-tone(\"warning\");\n}\n\n.uiToneSuccess {\n\t@include ui-tone(\"success\");\n}\n\n.uiToneInfo {\n\t@include ui-tone(\"info\");\n}\n\n.uiAppearanceSolid {\n\t@include ui-appearance-solid;\n}\n\n.uiAppearanceOutline {\n\t@include ui-appearance-outline;\n}\n\n.uiAppearanceGhost {\n\t@include ui-appearance-ghost;\n}\n\n.uiAppearanceTransparent {\n\t@include ui-appearance-transparent;\n}\n\n.uiInputControl {\n\t@extend .uiControl;\n\n\theight: var(--control-height);\n}\n\n.uiInputWithToggle {\n\t@extend .uiInputControl;\n\n\tcolor: var(--content-0);\n\n\tpadding: 0 var(--padding-right) 0 var(--space-sm);\n\twidth: 100%;\n\ttext-align: left;\n\n\t// &[type=\"button\"] {\n\t// \twhite-space: nowrap;\n\t// }\n}\n\n.uiSelectionControl {\n\t@include ui-control-base;\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\t--ui-background: var(--surface-0);\n\t--ui-background-hover: var(--ui-tone-soft);\n\t--ui-background-active: var(--ui-tone-soft);\n\t--ui-border-color: var(--ui-tone-border);\n\t--ui-border-hover: var(--ui-tone-border-hover);\n\t--ui-border-active: var(--ui-tone-border-active);\n\t--ui-border-focus: var(--ui-tone-border-focus);\n\n\tappearance: none;\n\tmargin: 0;\n\tcursor: pointer;\n\n\t&:checked {\n\t\tborder-color: var(--ui-tone-border-active);\n\n\t\t& + .uiSelectionIcon {\n\t\t\tcolor: var(--ui-tone-fill);\n\t\t}\n\t}\n\n\t&:disabled {\n\t\tcursor: default;\n\n\t\tborder-color: var(--border-0);\n\n\t\t&:checked {\n\t\t\t& + .uiSelectionIcon {\n\t\t\t\tcolor: var(--border-0);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.uiSelectionIcon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%);\n\tpointer-events: none;\n\tcolor: transparent;\n\ttransition:\n\t\tcolor var(--transition-fast) ease,\n\t\topacity var(--transition-fast) ease;\n}\n\n.uiElement,\n.uiPopupOption {\n\t&.disabled,\n\t&:disabled {\n\t\tcursor: default;\n\t\tpointer-events: none;\n\t\tuser-select: none;\n\n\t\t.uiLabel,\n\t\t.uiDescription {\n\t\t\tcolor: var(--content-2);\n\t\t}\n\n\t\t.uiPlaceholder,\n\t\t.uiOptionText,\n\t\t.uiOptionCode {\n\t\t\topacity: 0.25;\n\t\t}\n\t}\n}\n\n.uiPanelTonePrimary {\n\t--ui-panel-background: var(--surface-0);\n}\n\n.uiPanelToneSecondary {\n\t--ui-panel-background: var(--surface-1);\n}\n\n.uiPanelToneTertiary {\n\t--ui-panel-background: var(--surface-2);\n}\n\n.uiFilledPanel {\n\tbackground-color: var(--ui-panel-background, var(--surface-0));\n}\n\n.uiFramedPanel {\n\tborder: var(--border);\n\tborder-radius: var(--radius-sm);\n\tpadding: var(--space-sm);\n}\n\n.uiPanel {\n\t@extend .uiFramedPanel;\n\t@extend .uiFilledPanel;\n}\n\n.uiStateFocus {\n\t@include focusVisible;\n\n\tbackground-color: var(--surface-1);\n\tborder-color: var(--border-1);\n\tcursor: pointer;\n}\n\n.uiOptionBase {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-start;\n\tgap: var(--space-sm);\n\theight: 100%;\n\twidth: 100%;\n\ttext-align: left;\n}\n\n.uiPopupOption {\n\t@extend .uiOptionBase;\n\n\theight: auto;\n\tmin-height: var(--control-height);\n}\n\n.uiPopupOption {\n\tborder-radius: var(--radius-sm);\n\tborder: none;\n\tbackground-color: transparent;\n\tcolor: var(--content-0);\n\n\ttransition:\n\t\tbackground-color var(--transition-fast) ease,\n\t\tcolor var(--transition-fast) ease;\n\n\t.uiMenuOptionIcon,\n\t.uiPopupOptionIcon {\n\t\tflex-shrink: 0;\n\t\tfont-size: var(--font-size-sm);\n\t\twidth: var(--icon-size);\n\t\theight: var(--icon-size);\n\t}\n\n\t.uiMenuOptionIcon,\n\t.keyboard {\n\t\tcolor: var(--content-2);\n\t}\n\n\t&.selected {\n\t\tcolor: var(--interactive-selected-content);\n\t\tbackground-color: var(--interactive-selected-surface);\n\t\tcursor: default;\n\t}\n\n\t&.uiPopupOptionActive,\n\t&:active {\n\t\tcolor: var(--interactive-active-content);\n\t\tbackground-color: var(--interactive-active-surface);\n\t}\n\n\t@include hover(true) {\n\t\tcolor: var(--interactive-hover-content);\n\t\tbackground-color: var(--interactive-hover-surface);\n\t\tcursor: pointer;\n\t}\n\n\t&.disabled {\n\t\t// background-color: var(--surface-2);\n\t\tcolor: var(--content-2);\n\t}\n\n\t&:focus-within {\n\t\t// @extend .uiStateFocus;\n\t\t@include focusVisible;\n\t}\n}\n\n.uiOptionButton,\n.uiOptionLink {\n\t@extend .uiOptionBase;\n\n\tflex: 1 1 0;\n\tmin-width: 0;\n\theight: 100%;\n\tpadding: var(--space-xs) var(--space-sm);\n\tborder: none;\n\tborder-radius: inherit;\n\toutline: none;\n\tbackground: transparent;\n\tcolor: inherit;\n\tcursor: inherit;\n\ttext-decoration: none;\n}\n\n.uiPopupOptionSeparator {\n\tborder-top: var(--border);\n\tmargin-block: var(--space-xs);\n}\n\n.uiPopupGroupLabel {\n\tpadding: var(--space-xs) var(--space-sm);\n\tcolor: var(--content-2);\n\tfont-weight: 300;\n\ttext-transform: uppercase;\n\tfont-size: var(--font-size-sm);\n}\n\n.uiMenuOptionIcon {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.uiOptionText {\n\t// font-size: var(--font-size-sm);\n\tflex: 1;\n\tmin-width: 0;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.uiOptionCode {\n\tfont-family: var(--font-family-mono);\n\t// font-size: var(--font-size-sm);\n\tcolor: var(--content-1);\n\tfont-weight: 300;\n\tfont-variation-settings: \"wght\" 300;\n}\n\n.uiOptionContentEmphasize {\n\tfont-weight: 600;\n\tfont-variation-settings: \"wght\" 600;\n}\n\n.uiToggleButtonContainer {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\theight: 100%;\n\twidth: 100%;\n\n\ttransition-property: width;\n\ttransition-duration: var(--transition-fast);\n\ttransition-timing-function: cubic-bezier(1, 0, 0.5, 0.5);\n\n\t> button {\n\t\tbackground: transparent;\n\t\tborder: none;\n\t\tcursor: pointer;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\theight: var(--control-height);\n\t\twidth: var(--control-height);\n\t\tborder-radius: var(--radius-sm);\n\t\tflex: 0 0 var(--control-height);\n\t}\n\n\t// &[data-disabled] {\n\t// \tcursor: default;\n\t// \tpointer-events: none;\n\t// \topacity: var(--disabled-opacity);\n\t// }\n}\n\n.uiToggleButton {\n\tcolor: var(--content-0);\n\n\t&:hover {\n\t\tcolor: var(--content-accent);\n\t}\n}\n\n.uiToggleIcon {\n\ttransition: transform var(--transition-fast) ease-in-out;\n\n\t&.uiToggleIconOpen {\n\t\ttransform: rotate(180deg);\n\t}\n}\n\n// TODO: пока в свалку стили для дата-подобных компонентов\n\n// Для компонентов, который не являются input, но выставляют себя за него\n.uiInputControlFake {\n\t@extend .uiInputControl;\n\n\twidth: 100%;\n\tpadding: 0 var(--space-sm);\n\tfont-size: var(--font-size-md);\n\n\tdisplay: flex;\n\talign-items: center;\n\n\tcursor: text;\n}\n\n.uiClearButton {\n\tcolor: var(--status-error-text);\n\n\t&:disabled {\n\t\topacity: 0;\n\t\tpointer-events: none;\n\t\twidth: 0;\n\t\theight: 0;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\toverflow: hidden;\n\t}\n}\n\n.uiButtonSeparator {\n\tborder-left: var(--border);\n\theight: calc(100% - var(--space-sm));\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"ui.module-BsDio9A3.js","names":[],"sources":["../../src/ui.module.scss"],"sourcesContent":["@use \"@/styles/mixins\" as *;\n\n.uiSizable {\n\t--base-width: 100%;\n\n\twidth: var(--base-width);\n\n\t&.xs {\n\t\t--base-width: calc(var(--drp-ui-width-xs, var(--ui-width-xs)) - var(--width-add));\n\t}\n\n\t&.sm {\n\t\t--base-width: calc(var(--drp-ui-width-sm, var(--ui-width-sm)) - var(--width-add));\n\t}\n\n\t&.md {\n\t\t--base-width: calc(var(--drp-ui-width-md, var(--ui-width-md)) - var(--width-add));\n\t}\n\n\t&.lg {\n\t\t--base-width: calc(var(--drp-ui-width-lg, var(--ui-width-lg)) - var(--width-add));\n\t}\n\n\t&.xl {\n\t\t--base-width: calc(var(--drp-ui-width-xl, var(--ui-width-xl)) - var(--width-add));\n\t}\n}\n\n// TODO: Тестовый класс\n.uiErrorElement {\n\t--grid-size: var(--space-sm);\n\t--grid-line-size: var(--border-width);\n\t--grid-line-color: var(--status-error-soft);\n\n\theight: var(--control-height);\n\twidth: 100%; // calc(10em - var(--width-add));\n\tflex-shrink: 0;\n\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\tborder: var(--focus-width) solid var(--status-error-border);\n\tborder-radius: var(--radius-sm);\n\toutline: none;\n\n\tfont-weight: 700;\n\tfont-variation-settings: \"wght\" 700;\n\n\tcolor: var(--status-error-text);\n\tbackground-color: var(--surface-0);\n\tbackground-image:\n\t\trepeating-linear-gradient(\n\t\t\t45deg,\n\t\t\tvar(--grid-line-color) 0 var(--grid-line-size),\n\t\t\ttransparent var(--grid-line-size) var(--grid-size)\n\t\t),\n\t\trepeating-linear-gradient(\n\t\t\t-45deg,\n\t\t\tvar(--grid-line-color) 0 var(--grid-line-size),\n\t\t\ttransparent var(--grid-line-size) var(--grid-size)\n\t\t);\n}\n\n.uiContainer {\n\tposition: relative;\n\twidth: 100%;\n}\n\n.uiInputContainer {\n\t@extend .uiContainer;\n\n\t--padding-right: var(--control-height);\n}\n\n.uiLabelBase {\n\tdisplay: inline-block;\n\tfont-weight: 400;\n\tfont-variation-settings: \"wght\" 400;\n}\n\n.uiLabel {\n\t@extend .uiLabelBase;\n\n\tmargin-block: var(--space-xs);\n}\n\n.uiDescription {\n\t--paragraph-margin: 0;\n\n\tpadding-bottom: var(--space-xs);\n\tcolor: var(--content-1);\n\tfont-weight: 300;\n\tfont-variation-settings: \"wght\" 300;\n}\n\n.uiLabel,\n.uiDescription {\n\tmargin-inline: var(--space-xs);\n}\n\n.uiPlaceholder {\n\tcolor: var(--content-2);\n\tfont-weight: 100;\n\tfont-variation-settings: \"wght\" 100;\n\t// font-size: var(--font-size-sm);\n\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.required {\n\t.uiLabelBase::after {\n\t\tcontent: \" *\";\n\t\tcolor: var(--status-error-text);\n\t}\n}\n\n.uiControl {\n\t@include ui-tone(\"neutral\");\n\t@include ui-appearance-outline;\n\t@include ui-control-base;\n\n\t--ui-radius: var(--radius-sm);\n\n\t&.invalid,\n\t&:invalid {\n\t\t@include ui-tone(\"error\");\n\t\t@include ui-appearance-outline;\n\t}\n\n\t&::placeholder {\n\t\t@extend .uiPlaceholder;\n\t}\n}\n\n.uiToneNeutral {\n\t@include ui-tone(\"neutral\");\n}\n\n.uiToneBrand {\n\t@include ui-tone(\"brand\");\n}\n\n.uiToneError {\n\t@include ui-tone(\"error\");\n}\n\n.uiToneWarning {\n\t@include ui-tone(\"warning\");\n}\n\n.uiToneSuccess {\n\t@include ui-tone(\"success\");\n}\n\n.uiToneInfo {\n\t@include ui-tone(\"info\");\n}\n\n.uiAppearanceSolid {\n\t@include ui-appearance-solid;\n}\n\n.uiAppearanceOutline {\n\t@include ui-appearance-outline;\n}\n\n.uiAppearanceGhost {\n\t@include ui-appearance-ghost;\n}\n\n.uiAppearanceTransparent {\n\t@include ui-appearance-transparent;\n}\n\n.uiInputControl {\n\t@extend .uiControl;\n\n\theight: var(--control-height);\n}\n\n.uiInputWithToggle {\n\t@extend .uiInputControl;\n\n\tcolor: var(--content-0);\n\n\tpadding: 0 var(--padding-right) 0 var(--space-sm);\n\twidth: 100%;\n\ttext-align: left;\n\n\t// &[type=\"button\"] {\n\t// \twhite-space: nowrap;\n\t// }\n}\n\n.uiSelectionControl {\n\t@include ui-control-base;\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\t--ui-background: var(--surface-0);\n\t--ui-background-hover: var(--ui-tone-soft);\n\t--ui-background-active: var(--ui-tone-soft);\n\t--ui-border-color: var(--ui-tone-border);\n\t--ui-border-hover: var(--ui-tone-border-hover);\n\t--ui-border-active: var(--ui-tone-border-active);\n\t--ui-border-focus: var(--ui-tone-border-focus);\n\n\tappearance: none;\n\tmargin: 0;\n\tcursor: pointer;\n\n\t&:checked {\n\t\tborder-color: var(--ui-tone-border-active);\n\n\t\t& + .uiSelectionIcon {\n\t\t\tcolor: var(--ui-tone-fill);\n\t\t}\n\t}\n\n\t&:disabled {\n\t\tcursor: default;\n\n\t\tborder-color: var(--border-0);\n\n\t\t&:checked {\n\t\t\t& + .uiSelectionIcon {\n\t\t\t\tcolor: var(--border-0);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.uiSelectionIcon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%);\n\tpointer-events: none;\n\tcolor: transparent;\n\ttransition:\n\t\tcolor var(--transition-fast) ease,\n\t\topacity var(--transition-fast) ease;\n}\n\n.uiElement,\n.uiPopupOption {\n\t&.disabled,\n\t&:disabled {\n\t\tcursor: default;\n\t\tpointer-events: none;\n\t\tuser-select: none;\n\n\t\t.uiLabel,\n\t\t.uiDescription {\n\t\t\tcolor: var(--content-2);\n\t\t}\n\n\t\t.uiPlaceholder,\n\t\t.uiOptionText,\n\t\t.uiOptionCode {\n\t\t\topacity: 0.25;\n\t\t}\n\t}\n}\n\n.uiPanelTonePrimary {\n\t--ui-panel-background: var(--surface-0);\n}\n\n.uiPanelToneSecondary {\n\t--ui-panel-background: var(--surface-1);\n}\n\n.uiPanelToneTertiary {\n\t--ui-panel-background: var(--surface-2);\n}\n\n.uiFilledPanel {\n\tbackground-color: var(--ui-panel-background, var(--surface-0));\n}\n\n.uiFramedPanel {\n\tborder: var(--border);\n\tborder-radius: var(--radius-sm);\n\tpadding: var(--space-sm);\n}\n\n.uiPanel {\n\t@extend .uiFramedPanel;\n\t@extend .uiFilledPanel;\n}\n\n.uiStateFocus {\n\t@include focusVisible;\n\n\tbackground-color: var(--surface-1);\n\tborder-color: var(--border-1);\n\tcursor: pointer;\n}\n\n.uiOptionBase {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-start;\n\tgap: var(--space-sm);\n\theight: 100%;\n\twidth: 100%;\n\ttext-align: left;\n}\n\n.uiPopupOption {\n\t@extend .uiOptionBase;\n\n\theight: auto;\n\tmin-height: var(--control-height);\n}\n\n.uiPopupOption {\n\tborder-radius: var(--radius-sm);\n\tborder: none;\n\tbackground-color: transparent;\n\tcolor: var(--content-0);\n\n\ttransition:\n\t\tbackground-color var(--transition-fast) ease,\n\t\tcolor var(--transition-fast) ease;\n\n\t.uiMenuOptionIcon,\n\t.uiPopupOptionIcon {\n\t\tflex-shrink: 0;\n\t\tfont-size: var(--font-size-sm);\n\t\twidth: var(--icon-size);\n\t\theight: var(--icon-size);\n\t}\n\n\t.uiMenuOptionIcon,\n\t.keyboard {\n\t\tcolor: var(--content-2);\n\t}\n\n\t&.selected {\n\t\tcolor: var(--interactive-selected-color);\n\t\tbackground-color: var(--interactive-selected-surface);\n\t\tcursor: default;\n\t}\n\n\t&.uiPopupOptionActive,\n\t&:active {\n\t\tcolor: var(--interactive-active-color);\n\t\tbackground-color: var(--interactive-active-surface);\n\t}\n\n\t@include hover(true) {\n\t\tcolor: var(--interactive-hover-color);\n\t\tbackground-color: var(--interactive-hover-surface);\n\t\tcursor: pointer;\n\t}\n\n\t&.disabled {\n\t\t// background-color: var(--surface-2);\n\t\tcolor: var(--content-2);\n\t}\n\n\t&:focus-within {\n\t\t// @extend .uiStateFocus;\n\t\t@include focusVisible;\n\t}\n}\n\n.uiOptionButton,\n.uiOptionLink {\n\t@extend .uiOptionBase;\n\n\tflex: 1 1 0;\n\tmin-width: 0;\n\theight: 100%;\n\tpadding: var(--space-xs) var(--space-sm);\n\tborder: none;\n\tborder-radius: inherit;\n\toutline: none;\n\tbackground: transparent;\n\tcolor: inherit;\n\tcursor: inherit;\n\ttext-decoration: none;\n}\n\n.uiPopupOptionSeparator {\n\tborder-top: var(--border);\n\tmargin-block: var(--space-xs);\n}\n\n.uiPopupGroupLabel {\n\tpadding: var(--space-xs) var(--space-sm);\n\tcolor: var(--content-2);\n\tfont-weight: 300;\n\ttext-transform: uppercase;\n\tfont-size: var(--font-size-sm);\n}\n\n.uiMenuOptionIcon {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.uiOptionText {\n\t// font-size: var(--font-size-sm);\n\tflex: 1;\n\tmin-width: 0;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.uiOptionCode {\n\tfont-family: var(--font-family-mono);\n\t// font-size: var(--font-size-sm);\n\tcolor: var(--content-1);\n\tfont-weight: 300;\n\tfont-variation-settings: \"wght\" 300;\n}\n\n.uiOptionContentEmphasize {\n\tfont-weight: 600;\n\tfont-variation-settings: \"wght\" 600;\n}\n\n.uiToggleButtonContainer {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\theight: 100%;\n\twidth: 100%;\n\n\ttransition-property: width;\n\ttransition-duration: var(--transition-fast);\n\ttransition-timing-function: cubic-bezier(1, 0, 0.5, 0.5);\n\n\t> button {\n\t\tbackground: transparent;\n\t\tborder: none;\n\t\tcursor: pointer;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\theight: var(--control-height);\n\t\twidth: var(--control-height);\n\t\tborder-radius: var(--radius-sm);\n\t\tflex: 0 0 var(--control-height);\n\t}\n\n\t// &[data-disabled] {\n\t// \tcursor: default;\n\t// \tpointer-events: none;\n\t// \topacity: var(--disabled-opacity);\n\t// }\n}\n\n.uiToggleButton {\n\tcolor: var(--content-0);\n\n\t&:hover {\n\t\tcolor: var(--content-accent);\n\t}\n}\n\n.uiToggleIcon {\n\ttransition: transform var(--transition-fast) ease-in-out;\n\n\t&.uiToggleIconOpen {\n\t\ttransform: rotate(180deg);\n\t}\n}\n\n// TODO: пока в свалку стили для дата-подобных компонентов\n\n// Для компонентов, который не являются input, но выставляют себя за него\n.uiInputControlFake {\n\t@extend .uiInputControl;\n\n\twidth: 100%;\n\tpadding: 0 var(--space-sm);\n\tfont-size: var(--font-size-md);\n\n\tdisplay: flex;\n\talign-items: center;\n\n\tcursor: text;\n}\n\n.uiClearButton {\n\tcolor: var(--status-error-text);\n\n\t&:disabled {\n\t\topacity: 0;\n\t\tpointer-events: none;\n\t\twidth: 0;\n\t\theight: 0;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\toverflow: hidden;\n\t}\n}\n\n.uiButtonSeparator {\n\tborder-left: var(--border);\n\theight: calc(100% - var(--space-sm));\n}\n"],"mappings":""}
|