@techzyapp/ui-library 1.0.0
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/Accordion-CAxa1I-m.js +112 -0
- package/dist/Accordion-CAxa1I-m.js.map +1 -0
- package/dist/Accordion-Dy_dM79Y.cjs +2 -0
- package/dist/Accordion-Dy_dM79Y.cjs.map +1 -0
- package/dist/Alert-BQpA48PY.js +71 -0
- package/dist/Alert-BQpA48PY.js.map +1 -0
- package/dist/Alert-DKIjM-9x.cjs +2 -0
- package/dist/Alert-DKIjM-9x.cjs.map +1 -0
- package/dist/Avatar-BJVCdo-K.js +60 -0
- package/dist/Avatar-BJVCdo-K.js.map +1 -0
- package/dist/Avatar-_ufXh3AY.cjs +2 -0
- package/dist/Avatar-_ufXh3AY.cjs.map +1 -0
- package/dist/AvatarGroup-DdJf4aT7.js +33 -0
- package/dist/AvatarGroup-DdJf4aT7.js.map +1 -0
- package/dist/AvatarGroup-TW1pt4tj.cjs +2 -0
- package/dist/AvatarGroup-TW1pt4tj.cjs.map +1 -0
- package/dist/Badge-BQpr2Jee.cjs +2 -0
- package/dist/Badge-BQpr2Jee.cjs.map +1 -0
- package/dist/Badge-DSWigoGC.js +50 -0
- package/dist/Badge-DSWigoGC.js.map +1 -0
- package/dist/Breadcrumbs-Bx5UgwDy.js +35 -0
- package/dist/Breadcrumbs-Bx5UgwDy.js.map +1 -0
- package/dist/Breadcrumbs-CHONper7.cjs +2 -0
- package/dist/Breadcrumbs-CHONper7.cjs.map +1 -0
- package/dist/Button-D4bfVNNa.cjs +2 -0
- package/dist/Button-D4bfVNNa.cjs.map +1 -0
- package/dist/Button-DhEv0YFk.js +72 -0
- package/dist/Button-DhEv0YFk.js.map +1 -0
- package/dist/Calendar-Bh317SaV.js +267 -0
- package/dist/Calendar-Bh317SaV.js.map +1 -0
- package/dist/Calendar-C8uNezI-.cjs +2 -0
- package/dist/Calendar-C8uNezI-.cjs.map +1 -0
- package/dist/Card-CfyaerZZ.cjs +2 -0
- package/dist/Card-CfyaerZZ.cjs.map +1 -0
- package/dist/Card-DzClqJuu.js +118 -0
- package/dist/Card-DzClqJuu.js.map +1 -0
- package/dist/Checkbox-DXOzYIAz.cjs +2 -0
- package/dist/Checkbox-DXOzYIAz.cjs.map +1 -0
- package/dist/Checkbox-XKL_Q5qj.js +84 -0
- package/dist/Checkbox-XKL_Q5qj.js.map +1 -0
- package/dist/Chip-Cfo0v3Z8.js +92 -0
- package/dist/Chip-Cfo0v3Z8.js.map +1 -0
- package/dist/Chip-DSrdXLBU.cjs +2 -0
- package/dist/Chip-DSrdXLBU.cjs.map +1 -0
- package/dist/ChoiceCardGroup-6eFM1eL0.cjs +2 -0
- package/dist/ChoiceCardGroup-6eFM1eL0.cjs.map +1 -0
- package/dist/ChoiceCardGroup-CvFzZlgI.js +181 -0
- package/dist/ChoiceCardGroup-CvFzZlgI.js.map +1 -0
- package/dist/CodeBlock-DOk5wekc.cjs +2 -0
- package/dist/CodeBlock-DOk5wekc.cjs.map +1 -0
- package/dist/CodeBlock-n3KExtTO.js +104 -0
- package/dist/CodeBlock-n3KExtTO.js.map +1 -0
- package/dist/Col-D2TfZKiM.js +13 -0
- package/dist/Col-D2TfZKiM.js.map +1 -0
- package/dist/Col-R5mAy8T9.cjs +2 -0
- package/dist/Col-R5mAy8T9.cjs.map +1 -0
- package/dist/ColorPicker-2udt1ORM.js +119 -0
- package/dist/ColorPicker-2udt1ORM.js.map +1 -0
- package/dist/ColorPicker-BwmaXCOy.cjs +2 -0
- package/dist/ColorPicker-BwmaXCOy.cjs.map +1 -0
- package/dist/ColorPickerPanel-BM9OwDDE.js +336 -0
- package/dist/ColorPickerPanel-BM9OwDDE.js.map +1 -0
- package/dist/ColorPickerPanel-ByB1mLSi.cjs +2 -0
- package/dist/ColorPickerPanel-ByB1mLSi.cjs.map +1 -0
- package/dist/ConfigProvider-2c94kUOk.js +291 -0
- package/dist/ConfigProvider-2c94kUOk.js.map +1 -0
- package/dist/ConfigProvider-ByOFXVyP.cjs +2 -0
- package/dist/ConfigProvider-ByOFXVyP.cjs.map +1 -0
- package/dist/DatePicker-DF4Epkn8.cjs +2 -0
- package/dist/DatePicker-DF4Epkn8.cjs.map +1 -0
- package/dist/DatePicker-WM9TC6L_.js +191 -0
- package/dist/DatePicker-WM9TC6L_.js.map +1 -0
- package/dist/DatePicker.module-BZDftL4g.js +138 -0
- package/dist/DatePicker.module-BZDftL4g.js.map +1 -0
- package/dist/DatePicker.module-tE-tGNBd.cjs +2 -0
- package/dist/DatePicker.module-tE-tGNBd.cjs.map +1 -0
- package/dist/DateTimePicker-C557OjBU.cjs +2 -0
- package/dist/DateTimePicker-C557OjBU.cjs.map +1 -0
- package/dist/DateTimePicker-DBtcWK0F.js +245 -0
- package/dist/DateTimePicker-DBtcWK0F.js.map +1 -0
- package/dist/Divider-CzbhdCiD.cjs +2 -0
- package/dist/Divider-CzbhdCiD.cjs.map +1 -0
- package/dist/Divider-LtH3dLgw.js +36 -0
- package/dist/Divider-LtH3dLgw.js.map +1 -0
- package/dist/Dropdown-DKAXue5_.js +146 -0
- package/dist/Dropdown-DKAXue5_.js.map +1 -0
- package/dist/Dropdown-DygP50OB.cjs +2 -0
- package/dist/Dropdown-DygP50OB.cjs.map +1 -0
- package/dist/EmptyState-CCCpZ-ZA.cjs +2 -0
- package/dist/EmptyState-CCCpZ-ZA.cjs.map +1 -0
- package/dist/EmptyState-CetM49vk.js +38 -0
- package/dist/EmptyState-CetM49vk.js.map +1 -0
- package/dist/FileUploader-B4TJHyoi.cjs +2 -0
- package/dist/FileUploader-B4TJHyoi.cjs.map +1 -0
- package/dist/FileUploader-VtmmwUFE.js +684 -0
- package/dist/FileUploader-VtmmwUFE.js.map +1 -0
- package/dist/Flag-BWCX6oSR.js +24 -0
- package/dist/Flag-BWCX6oSR.js.map +1 -0
- package/dist/Flag-EPZOrH-U.cjs +2 -0
- package/dist/Flag-EPZOrH-U.cjs.map +1 -0
- package/dist/Flex-Bj3mMF5A.js +50 -0
- package/dist/Flex-Bj3mMF5A.js.map +1 -0
- package/dist/Flex-CqL3Ghda.cjs +2 -0
- package/dist/Flex-CqL3Ghda.cjs.map +1 -0
- package/dist/FloatingPanel-BG9Uag__.js +131 -0
- package/dist/FloatingPanel-BG9Uag__.js.map +1 -0
- package/dist/FloatingPanel-U6sGYiSK.cjs +2 -0
- package/dist/FloatingPanel-U6sGYiSK.cjs.map +1 -0
- package/dist/Form-Bz2xgkEm.cjs +2 -0
- package/dist/Form-Bz2xgkEm.cjs.map +1 -0
- package/dist/Form-kglaJYr5.js +9 -0
- package/dist/Form-kglaJYr5.js.map +1 -0
- package/dist/FullscreenToggle-DDKN5n8B.cjs +2 -0
- package/dist/FullscreenToggle-DDKN5n8B.cjs.map +1 -0
- package/dist/FullscreenToggle-oWzYqUPH.js +42 -0
- package/dist/FullscreenToggle-oWzYqUPH.js.map +1 -0
- package/dist/Grid-Bw95bKkJ.cjs +2 -0
- package/dist/Grid-Bw95bKkJ.cjs.map +1 -0
- package/dist/Grid-CY-syhTX.js +24 -0
- package/dist/Grid-CY-syhTX.js.map +1 -0
- package/dist/Icon-CXTl_QAP.cjs +2 -0
- package/dist/Icon-CXTl_QAP.cjs.map +1 -0
- package/dist/Icon-CophpkHo.js +1228 -0
- package/dist/Icon-CophpkHo.js.map +1 -0
- package/dist/IconButton-CBusrDa9.js +68 -0
- package/dist/IconButton-CBusrDa9.js.map +1 -0
- package/dist/IconButton-D6TenQZ_.cjs +2 -0
- package/dist/IconButton-D6TenQZ_.cjs.map +1 -0
- package/dist/List-BHgFI9Ll.js +26 -0
- package/dist/List-BHgFI9Ll.js.map +1 -0
- package/dist/List-CNz2M3-q.cjs +2 -0
- package/dist/List-CNz2M3-q.cjs.map +1 -0
- package/dist/ListItem-B4yqZR-Z.js +74 -0
- package/dist/ListItem-B4yqZR-Z.js.map +1 -0
- package/dist/ListItem-RH-D-Wey.cjs +2 -0
- package/dist/ListItem-RH-D-Wey.cjs.map +1 -0
- package/dist/Loader-C4JoXOyA.js +28 -0
- package/dist/Loader-C4JoXOyA.js.map +1 -0
- package/dist/Loader-D1MtlQOH.cjs +2 -0
- package/dist/Loader-D1MtlQOH.cjs.map +1 -0
- package/dist/Modal-B2YSCVVt.cjs +2 -0
- package/dist/Modal-B2YSCVVt.cjs.map +1 -0
- package/dist/Modal-BuaPDlKV.js +195 -0
- package/dist/Modal-BuaPDlKV.js.map +1 -0
- package/dist/MultiSelect-BGRT_B60.js +350 -0
- package/dist/MultiSelect-BGRT_B60.js.map +1 -0
- package/dist/MultiSelect-CSJKSWpA.cjs +2 -0
- package/dist/MultiSelect-CSJKSWpA.cjs.map +1 -0
- package/dist/MultilineTextField-CwNCJ9lZ.js +123 -0
- package/dist/MultilineTextField-CwNCJ9lZ.js.map +1 -0
- package/dist/MultilineTextField-Dz6Fg8RJ.cjs +2 -0
- package/dist/MultilineTextField-Dz6Fg8RJ.cjs.map +1 -0
- package/dist/NumberField-DBpO-Z_7.cjs +2 -0
- package/dist/NumberField-DBpO-Z_7.cjs.map +1 -0
- package/dist/NumberField-DBvhSQCw.js +183 -0
- package/dist/NumberField-DBvhSQCw.js.map +1 -0
- package/dist/OtpField-BUBYyorC.cjs +2 -0
- package/dist/OtpField-BUBYyorC.cjs.map +1 -0
- package/dist/OtpField-CTq-CUbF.js +171 -0
- package/dist/OtpField-CTq-CUbF.js.map +1 -0
- package/dist/PageLayout-DddzYw2B.js +12 -0
- package/dist/PageLayout-DddzYw2B.js.map +1 -0
- package/dist/PageLayout-Dfbjw6jD.cjs +2 -0
- package/dist/PageLayout-Dfbjw6jD.cjs.map +1 -0
- package/dist/Pagination-CN9V8M5C.js +139 -0
- package/dist/Pagination-CN9V8M5C.js.map +1 -0
- package/dist/Pagination-DRwTLPh8.cjs +2 -0
- package/dist/Pagination-DRwTLPh8.cjs.map +1 -0
- package/dist/Popover-CBI1icIM.cjs +2 -0
- package/dist/Popover-CBI1icIM.cjs.map +1 -0
- package/dist/Popover-CgIU4Rhg.js +65 -0
- package/dist/Popover-CgIU4Rhg.js.map +1 -0
- package/dist/RadioGroup-C8u7eNBS.cjs +2 -0
- package/dist/RadioGroup-C8u7eNBS.cjs.map +1 -0
- package/dist/RadioGroup-DbodUJW8.js +141 -0
- package/dist/RadioGroup-DbodUJW8.js.map +1 -0
- package/dist/RemoveDialog-Bvt6sH79.js +47 -0
- package/dist/RemoveDialog-Bvt6sH79.js.map +1 -0
- package/dist/RemoveDialog-ClyZKyUG.cjs +2 -0
- package/dist/RemoveDialog-ClyZKyUG.cjs.map +1 -0
- package/dist/RichTextEditor-BTx8Py3I.js +806 -0
- package/dist/RichTextEditor-BTx8Py3I.js.map +1 -0
- package/dist/RichTextEditor-CAYt1Zm1.cjs +2 -0
- package/dist/RichTextEditor-CAYt1Zm1.cjs.map +1 -0
- package/dist/RootLayout-Cp-9CVjP.cjs +2 -0
- package/dist/RootLayout-Cp-9CVjP.cjs.map +1 -0
- package/dist/RootLayout-DCpfuFWF.js +405 -0
- package/dist/RootLayout-DCpfuFWF.js.map +1 -0
- package/dist/Select-PbTyxB1Q.js +338 -0
- package/dist/Select-PbTyxB1Q.js.map +1 -0
- package/dist/Select-_6WogC0u.cjs +2 -0
- package/dist/Select-_6WogC0u.cjs.map +1 -0
- package/dist/Sidebar-AaIlRzgk.cjs +2 -0
- package/dist/Sidebar-AaIlRzgk.cjs.map +1 -0
- package/dist/Sidebar-DRCs2ygZ.js +422 -0
- package/dist/Sidebar-DRCs2ygZ.js.map +1 -0
- package/dist/Slider-dxYVXRev.cjs +2 -0
- package/dist/Slider-dxYVXRev.cjs.map +1 -0
- package/dist/Slider-oGXd5e9X.js +184 -0
- package/dist/Slider-oGXd5e9X.js.map +1 -0
- package/dist/SpeedDial-C4jxIXTr.cjs +2 -0
- package/dist/SpeedDial-C4jxIXTr.cjs.map +1 -0
- package/dist/SpeedDial-DgFj16BQ.js +165 -0
- package/dist/SpeedDial-DgFj16BQ.js.map +1 -0
- package/dist/Stepper-7pPEBRLI.cjs +2 -0
- package/dist/Stepper-7pPEBRLI.cjs.map +1 -0
- package/dist/Stepper-COKAyN1L.js +165 -0
- package/dist/Stepper-COKAyN1L.js.map +1 -0
- package/dist/SwatchPicker-D30aSrbY.js +129 -0
- package/dist/SwatchPicker-D30aSrbY.js.map +1 -0
- package/dist/SwatchPicker-DbAU9-ux.cjs +2 -0
- package/dist/SwatchPicker-DbAU9-ux.cjs.map +1 -0
- package/dist/Switch-DMPJ0fhB.js +85 -0
- package/dist/Switch-DMPJ0fhB.js.map +1 -0
- package/dist/Switch-DRkZ6kHJ.cjs +2 -0
- package/dist/Switch-DRkZ6kHJ.cjs.map +1 -0
- package/dist/Table-BeOumGng.cjs +2 -0
- package/dist/Table-BeOumGng.cjs.map +1 -0
- package/dist/Table-BjPLvMbf.js +1090 -0
- package/dist/Table-BjPLvMbf.js.map +1 -0
- package/dist/Tabs--DDM-zKe.js +190 -0
- package/dist/Tabs--DDM-zKe.js.map +1 -0
- package/dist/Tabs-BZcMnjdC.cjs +2 -0
- package/dist/Tabs-BZcMnjdC.cjs.map +1 -0
- package/dist/TagsField-BTJcZS9P.js +186 -0
- package/dist/TagsField-BTJcZS9P.js.map +1 -0
- package/dist/TagsField-kknWiJZZ.cjs +2 -0
- package/dist/TagsField-kknWiJZZ.cjs.map +1 -0
- package/dist/TextField-BPefnD5M.cjs +2 -0
- package/dist/TextField-BPefnD5M.cjs.map +1 -0
- package/dist/TextField-DMI1X09n.js +266 -0
- package/dist/TextField-DMI1X09n.js.map +1 -0
- package/dist/TextField.module-QePvGeJ3.js +27 -0
- package/dist/TextField.module-QePvGeJ3.js.map +1 -0
- package/dist/TextField.module-m-UllwzG.cjs +2 -0
- package/dist/TextField.module-m-UllwzG.cjs.map +1 -0
- package/dist/ThemeToggle-DTal3RX5.cjs +2 -0
- package/dist/ThemeToggle-DTal3RX5.cjs.map +1 -0
- package/dist/ThemeToggle-Deh9j8pm.js +28 -0
- package/dist/ThemeToggle-Deh9j8pm.js.map +1 -0
- package/dist/TimeColumns-BCNmu4b_.js +147 -0
- package/dist/TimeColumns-BCNmu4b_.js.map +1 -0
- package/dist/TimeColumns-Duh4DcYJ.cjs +2 -0
- package/dist/TimeColumns-Duh4DcYJ.cjs.map +1 -0
- package/dist/TimePicker-3JgvK2on.js +194 -0
- package/dist/TimePicker-3JgvK2on.js.map +1 -0
- package/dist/TimePicker-CfGrCH9T.cjs +2 -0
- package/dist/TimePicker-CfGrCH9T.cjs.map +1 -0
- package/dist/Timeline-CoxW0Ia_.cjs +2 -0
- package/dist/Timeline-CoxW0Ia_.cjs.map +1 -0
- package/dist/Timeline-WkV4k_we.js +71 -0
- package/dist/Timeline-WkV4k_we.js.map +1 -0
- package/dist/Toaster-Bk5GtPjX.cjs +2 -0
- package/dist/Toaster-Bk5GtPjX.cjs.map +1 -0
- package/dist/Toaster-D-eG1xv7.js +63 -0
- package/dist/Toaster-D-eG1xv7.js.map +1 -0
- package/dist/ToggleButtonGroup-BWd7MOcc.js +123 -0
- package/dist/ToggleButtonGroup-BWd7MOcc.js.map +1 -0
- package/dist/ToggleButtonGroup-DYRLwKKh.cjs +2 -0
- package/dist/ToggleButtonGroup-DYRLwKKh.cjs.map +1 -0
- package/dist/Tooltip-Ao7az09p.cjs +2 -0
- package/dist/Tooltip-Ao7az09p.cjs.map +1 -0
- package/dist/Tooltip-Cb_FKxT9.js +65 -0
- package/dist/Tooltip-Cb_FKxT9.js.map +1 -0
- package/dist/TranslatedFields-CI0F9bHw.js +82 -0
- package/dist/TranslatedFields-CI0F9bHw.js.map +1 -0
- package/dist/TranslatedFields-DT3bYse6.cjs +2 -0
- package/dist/TranslatedFields-DT3bYse6.cjs.map +1 -0
- package/dist/Typography-BFatE1_A.cjs +2 -0
- package/dist/Typography-BFatE1_A.cjs.map +1 -0
- package/dist/Typography-Cta6Rg4L.js +51 -0
- package/dist/Typography-Cta6Rg4L.js.map +1 -0
- package/dist/UserCard-BhqtX1vU.js +74 -0
- package/dist/UserCard-BhqtX1vU.js.map +1 -0
- package/dist/UserCard-OlLeyyS0.cjs +2 -0
- package/dist/UserCard-OlLeyyS0.cjs.map +1 -0
- package/dist/access-DPUHbE-S.cjs +2 -0
- package/dist/access-DPUHbE-S.cjs.map +1 -0
- package/dist/access-Db4knwyR.js +25 -0
- package/dist/access-Db4knwyR.js.map +1 -0
- package/dist/components/Accordion/Accordion.d.cts +43 -0
- package/dist/components/Accordion/Accordion.d.ts +43 -0
- package/dist/components/Accordion/AccordionItem.d.cts +20 -0
- package/dist/components/Accordion/AccordionItem.d.ts +20 -0
- package/dist/components/Accordion/accordionContext.d.cts +13 -0
- package/dist/components/Accordion/accordionContext.d.ts +13 -0
- package/dist/components/Accordion/index.cjs +2 -0
- package/dist/components/Accordion/index.cjs.map +1 -0
- package/dist/components/Accordion/index.d.cts +4 -0
- package/dist/components/Accordion/index.d.ts +4 -0
- package/dist/components/Accordion/index.js +7 -0
- package/dist/components/Accordion/index.js.map +1 -0
- package/dist/components/Alert/Alert.d.cts +30 -0
- package/dist/components/Alert/Alert.d.ts +30 -0
- package/dist/components/Alert/index.cjs +2 -0
- package/dist/components/Alert/index.cjs.map +1 -0
- package/dist/components/Alert/index.d.cts +2 -0
- package/dist/components/Alert/index.d.ts +2 -0
- package/dist/components/Alert/index.js +6 -0
- package/dist/components/Alert/index.js.map +1 -0
- package/dist/components/Avatar/Avatar.d.cts +28 -0
- package/dist/components/Avatar/Avatar.d.ts +28 -0
- package/dist/components/Avatar/AvatarGroup.d.cts +19 -0
- package/dist/components/Avatar/AvatarGroup.d.ts +19 -0
- package/dist/components/Avatar/index.cjs +2 -0
- package/dist/components/Avatar/index.cjs.map +1 -0
- package/dist/components/Avatar/index.d.cts +4 -0
- package/dist/components/Avatar/index.d.ts +4 -0
- package/dist/components/Avatar/index.js +8 -0
- package/dist/components/Avatar/index.js.map +1 -0
- package/dist/components/Badge/Badge.d.cts +26 -0
- package/dist/components/Badge/Badge.d.ts +26 -0
- package/dist/components/Badge/index.cjs +2 -0
- package/dist/components/Badge/index.cjs.map +1 -0
- package/dist/components/Badge/index.d.cts +2 -0
- package/dist/components/Badge/index.d.ts +2 -0
- package/dist/components/Badge/index.js +6 -0
- package/dist/components/Badge/index.js.map +1 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.cts +17 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +17 -0
- package/dist/components/Breadcrumbs/index.cjs +2 -0
- package/dist/components/Breadcrumbs/index.cjs.map +1 -0
- package/dist/components/Breadcrumbs/index.d.cts +2 -0
- package/dist/components/Breadcrumbs/index.d.ts +2 -0
- package/dist/components/Breadcrumbs/index.js +6 -0
- package/dist/components/Breadcrumbs/index.js.map +1 -0
- package/dist/components/Button/Button.d.cts +23 -0
- package/dist/components/Button/Button.d.ts +23 -0
- package/dist/components/Button/index.cjs +2 -0
- package/dist/components/Button/index.cjs.map +1 -0
- package/dist/components/Button/index.d.cts +2 -0
- package/dist/components/Button/index.d.ts +2 -0
- package/dist/components/Button/index.js +6 -0
- package/dist/components/Button/index.js.map +1 -0
- package/dist/components/Card/Card.d.cts +37 -0
- package/dist/components/Card/Card.d.ts +37 -0
- package/dist/components/Card/index.cjs +2 -0
- package/dist/components/Card/index.cjs.map +1 -0
- package/dist/components/Card/index.d.cts +2 -0
- package/dist/components/Card/index.d.ts +2 -0
- package/dist/components/Card/index.js +6 -0
- package/dist/components/Card/index.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.d.cts +29 -0
- package/dist/components/Checkbox/Checkbox.d.ts +29 -0
- package/dist/components/Checkbox/index.cjs +2 -0
- package/dist/components/Checkbox/index.cjs.map +1 -0
- package/dist/components/Checkbox/index.d.cts +2 -0
- package/dist/components/Checkbox/index.d.ts +2 -0
- package/dist/components/Checkbox/index.js +6 -0
- package/dist/components/Checkbox/index.js.map +1 -0
- package/dist/components/Chip/Chip.d.cts +37 -0
- package/dist/components/Chip/Chip.d.ts +37 -0
- package/dist/components/Chip/index.cjs +2 -0
- package/dist/components/Chip/index.cjs.map +1 -0
- package/dist/components/Chip/index.d.cts +2 -0
- package/dist/components/Chip/index.d.ts +2 -0
- package/dist/components/Chip/index.js +6 -0
- package/dist/components/Chip/index.js.map +1 -0
- package/dist/components/ChoiceCard/ChoiceCard.d.cts +41 -0
- package/dist/components/ChoiceCard/ChoiceCard.d.ts +41 -0
- package/dist/components/ChoiceCard/ChoiceCardGroup.d.cts +72 -0
- package/dist/components/ChoiceCard/ChoiceCardGroup.d.ts +72 -0
- package/dist/components/ChoiceCard/choiceCardContext.d.cts +21 -0
- package/dist/components/ChoiceCard/choiceCardContext.d.ts +21 -0
- package/dist/components/ChoiceCard/index.cjs +2 -0
- package/dist/components/ChoiceCard/index.cjs.map +1 -0
- package/dist/components/ChoiceCard/index.d.cts +4 -0
- package/dist/components/ChoiceCard/index.d.ts +4 -0
- package/dist/components/ChoiceCard/index.js +7 -0
- package/dist/components/ChoiceCard/index.js.map +1 -0
- package/dist/components/CodeBlock/CodeBlock.d.cts +30 -0
- package/dist/components/CodeBlock/CodeBlock.d.ts +30 -0
- package/dist/components/CodeBlock/index.cjs +2 -0
- package/dist/components/CodeBlock/index.cjs.map +1 -0
- package/dist/components/CodeBlock/index.d.cts +2 -0
- package/dist/components/CodeBlock/index.d.ts +2 -0
- package/dist/components/CodeBlock/index.js +6 -0
- package/dist/components/CodeBlock/index.js.map +1 -0
- package/dist/components/ColorPicker/ColorPicker.d.cts +47 -0
- package/dist/components/ColorPicker/ColorPicker.d.ts +47 -0
- package/dist/components/ColorPicker/ColorPickerPanel.d.cts +20 -0
- package/dist/components/ColorPicker/ColorPickerPanel.d.ts +20 -0
- package/dist/components/ColorPicker/colorUtils.d.cts +44 -0
- package/dist/components/ColorPicker/colorUtils.d.ts +44 -0
- package/dist/components/ColorPicker/index.cjs +2 -0
- package/dist/components/ColorPicker/index.cjs.map +1 -0
- package/dist/components/ColorPicker/index.d.cts +2 -0
- package/dist/components/ColorPicker/index.d.ts +2 -0
- package/dist/components/ColorPicker/index.js +6 -0
- package/dist/components/ColorPicker/index.js.map +1 -0
- package/dist/components/DatePicker/Calendar.d.cts +29 -0
- package/dist/components/DatePicker/Calendar.d.ts +29 -0
- package/dist/components/DatePicker/DatePicker.d.cts +66 -0
- package/dist/components/DatePicker/DatePicker.d.ts +66 -0
- package/dist/components/DatePicker/dateUtils.d.cts +86 -0
- package/dist/components/DatePicker/dateUtils.d.ts +86 -0
- package/dist/components/DatePicker/index.cjs +2 -0
- package/dist/components/DatePicker/index.cjs.map +1 -0
- package/dist/components/DatePicker/index.d.cts +2 -0
- package/dist/components/DatePicker/index.d.ts +2 -0
- package/dist/components/DatePicker/index.js +6 -0
- package/dist/components/DatePicker/index.js.map +1 -0
- package/dist/components/DateTimePicker/DateTimePicker.d.cts +79 -0
- package/dist/components/DateTimePicker/DateTimePicker.d.ts +79 -0
- package/dist/components/DateTimePicker/TimeColumns.d.cts +22 -0
- package/dist/components/DateTimePicker/TimeColumns.d.ts +22 -0
- package/dist/components/DateTimePicker/index.cjs +2 -0
- package/dist/components/DateTimePicker/index.cjs.map +1 -0
- package/dist/components/DateTimePicker/index.d.cts +2 -0
- package/dist/components/DateTimePicker/index.d.ts +2 -0
- package/dist/components/DateTimePicker/index.js +6 -0
- package/dist/components/DateTimePicker/index.js.map +1 -0
- package/dist/components/Divider/Divider.d.cts +17 -0
- package/dist/components/Divider/Divider.d.ts +17 -0
- package/dist/components/Divider/index.cjs +2 -0
- package/dist/components/Divider/index.cjs.map +1 -0
- package/dist/components/Divider/index.d.cts +2 -0
- package/dist/components/Divider/index.d.ts +2 -0
- package/dist/components/Divider/index.js +6 -0
- package/dist/components/Divider/index.js.map +1 -0
- package/dist/components/Dropdown/Dropdown.d.cts +44 -0
- package/dist/components/Dropdown/Dropdown.d.ts +44 -0
- package/dist/components/Dropdown/index.cjs +2 -0
- package/dist/components/Dropdown/index.cjs.map +1 -0
- package/dist/components/Dropdown/index.d.cts +2 -0
- package/dist/components/Dropdown/index.d.ts +2 -0
- package/dist/components/Dropdown/index.js +6 -0
- package/dist/components/Dropdown/index.js.map +1 -0
- package/dist/components/EmptyState/EmptyState.d.cts +29 -0
- package/dist/components/EmptyState/EmptyState.d.ts +29 -0
- package/dist/components/EmptyState/index.cjs +2 -0
- package/dist/components/EmptyState/index.cjs.map +1 -0
- package/dist/components/EmptyState/index.d.cts +2 -0
- package/dist/components/EmptyState/index.d.ts +2 -0
- package/dist/components/EmptyState/index.js +6 -0
- package/dist/components/EmptyState/index.js.map +1 -0
- package/dist/components/FileUploader/FileUploader.d.cts +144 -0
- package/dist/components/FileUploader/FileUploader.d.ts +144 -0
- package/dist/components/FileUploader/FileUploaderEditDialog.d.cts +34 -0
- package/dist/components/FileUploader/FileUploaderEditDialog.d.ts +34 -0
- package/dist/components/FileUploader/FileUploaderPreview.d.cts +23 -0
- package/dist/components/FileUploader/FileUploaderPreview.d.ts +23 -0
- package/dist/components/FileUploader/index.cjs +2 -0
- package/dist/components/FileUploader/index.cjs.map +1 -0
- package/dist/components/FileUploader/index.d.cts +2 -0
- package/dist/components/FileUploader/index.d.ts +2 -0
- package/dist/components/FileUploader/index.js +6 -0
- package/dist/components/FileUploader/index.js.map +1 -0
- package/dist/components/Flag/Flag.d.cts +14 -0
- package/dist/components/Flag/Flag.d.ts +14 -0
- package/dist/components/Flag/index.cjs +2 -0
- package/dist/components/Flag/index.cjs.map +1 -0
- package/dist/components/Flag/index.d.cts +2 -0
- package/dist/components/Flag/index.d.ts +2 -0
- package/dist/components/Flag/index.js +6 -0
- package/dist/components/Flag/index.js.map +1 -0
- package/dist/components/Flex/Col.d.cts +8 -0
- package/dist/components/Flex/Col.d.ts +8 -0
- package/dist/components/Flex/Flex.d.cts +32 -0
- package/dist/components/Flex/Flex.d.ts +32 -0
- package/dist/components/Flex/Grid.d.cts +28 -0
- package/dist/components/Flex/Grid.d.ts +28 -0
- package/dist/components/Flex/Row.d.cts +8 -0
- package/dist/components/Flex/Row.d.ts +8 -0
- package/dist/components/Flex/index.cjs +2 -0
- package/dist/components/Flex/index.cjs.map +1 -0
- package/dist/components/Flex/index.d.cts +8 -0
- package/dist/components/Flex/index.d.ts +8 -0
- package/dist/components/Flex/index.js +11 -0
- package/dist/components/Flex/index.js.map +1 -0
- package/dist/components/FloatingPanel/FloatingPanel.d.cts +39 -0
- package/dist/components/FloatingPanel/FloatingPanel.d.ts +39 -0
- package/dist/components/FullscreenToggle/FullscreenToggle.d.cts +12 -0
- package/dist/components/FullscreenToggle/FullscreenToggle.d.ts +12 -0
- package/dist/components/FullscreenToggle/index.cjs +2 -0
- package/dist/components/FullscreenToggle/index.cjs.map +1 -0
- package/dist/components/FullscreenToggle/index.d.cts +2 -0
- package/dist/components/FullscreenToggle/index.d.ts +2 -0
- package/dist/components/FullscreenToggle/index.js +6 -0
- package/dist/components/FullscreenToggle/index.js.map +1 -0
- package/dist/components/Icon/Icon.d.cts +19 -0
- package/dist/components/Icon/Icon.d.ts +19 -0
- package/dist/components/Icon/index.cjs +2 -0
- package/dist/components/Icon/index.cjs.map +1 -0
- package/dist/components/Icon/index.d.cts +4 -0
- package/dist/components/Icon/index.d.ts +4 -0
- package/dist/components/Icon/index.js +9 -0
- package/dist/components/Icon/index.js.map +1 -0
- package/dist/components/IconButton/IconButton.d.cts +28 -0
- package/dist/components/IconButton/IconButton.d.ts +28 -0
- package/dist/components/IconButton/index.cjs +2 -0
- package/dist/components/IconButton/index.cjs.map +1 -0
- package/dist/components/IconButton/index.d.cts +2 -0
- package/dist/components/IconButton/index.d.ts +2 -0
- package/dist/components/IconButton/index.js +6 -0
- package/dist/components/IconButton/index.js.map +1 -0
- package/dist/components/List/List.d.cts +20 -0
- package/dist/components/List/List.d.ts +20 -0
- package/dist/components/List/ListItem.d.cts +33 -0
- package/dist/components/List/ListItem.d.ts +33 -0
- package/dist/components/List/index.cjs +2 -0
- package/dist/components/List/index.cjs.map +1 -0
- package/dist/components/List/index.d.cts +4 -0
- package/dist/components/List/index.d.ts +4 -0
- package/dist/components/List/index.js +8 -0
- package/dist/components/List/index.js.map +1 -0
- package/dist/components/List/listContext.d.cts +5 -0
- package/dist/components/List/listContext.d.ts +5 -0
- package/dist/components/Loader/Loader.d.cts +15 -0
- package/dist/components/Loader/Loader.d.ts +15 -0
- package/dist/components/Loader/index.cjs +2 -0
- package/dist/components/Loader/index.cjs.map +1 -0
- package/dist/components/Loader/index.d.cts +2 -0
- package/dist/components/Loader/index.d.ts +2 -0
- package/dist/components/Loader/index.js +6 -0
- package/dist/components/Loader/index.js.map +1 -0
- package/dist/components/Modal/Modal.d.cts +63 -0
- package/dist/components/Modal/Modal.d.ts +63 -0
- package/dist/components/Modal/index.cjs +2 -0
- package/dist/components/Modal/index.cjs.map +1 -0
- package/dist/components/Modal/index.d.cts +2 -0
- package/dist/components/Modal/index.d.ts +2 -0
- package/dist/components/Modal/index.js +6 -0
- package/dist/components/Modal/index.js.map +1 -0
- package/dist/components/MultiSelect/MultiSelect.d.cts +72 -0
- package/dist/components/MultiSelect/MultiSelect.d.ts +72 -0
- package/dist/components/MultiSelect/index.cjs +2 -0
- package/dist/components/MultiSelect/index.cjs.map +1 -0
- package/dist/components/MultiSelect/index.d.cts +2 -0
- package/dist/components/MultiSelect/index.d.ts +2 -0
- package/dist/components/MultiSelect/index.js +6 -0
- package/dist/components/MultiSelect/index.js.map +1 -0
- package/dist/components/MultilineTextField/MultilineTextField.d.cts +28 -0
- package/dist/components/MultilineTextField/MultilineTextField.d.ts +28 -0
- package/dist/components/MultilineTextField/index.cjs +2 -0
- package/dist/components/MultilineTextField/index.cjs.map +1 -0
- package/dist/components/MultilineTextField/index.d.cts +2 -0
- package/dist/components/MultilineTextField/index.d.ts +2 -0
- package/dist/components/MultilineTextField/index.js +6 -0
- package/dist/components/MultilineTextField/index.js.map +1 -0
- package/dist/components/NumberField/NumberField.d.cts +45 -0
- package/dist/components/NumberField/NumberField.d.ts +45 -0
- package/dist/components/NumberField/index.cjs +2 -0
- package/dist/components/NumberField/index.cjs.map +1 -0
- package/dist/components/NumberField/index.d.cts +2 -0
- package/dist/components/NumberField/index.d.ts +2 -0
- package/dist/components/NumberField/index.js +6 -0
- package/dist/components/NumberField/index.js.map +1 -0
- package/dist/components/OtpField/OtpField.d.cts +55 -0
- package/dist/components/OtpField/OtpField.d.ts +55 -0
- package/dist/components/OtpField/index.cjs +2 -0
- package/dist/components/OtpField/index.cjs.map +1 -0
- package/dist/components/OtpField/index.d.cts +2 -0
- package/dist/components/OtpField/index.d.ts +2 -0
- package/dist/components/OtpField/index.js +6 -0
- package/dist/components/OtpField/index.js.map +1 -0
- package/dist/components/Overlay/Overlay.d.cts +29 -0
- package/dist/components/Overlay/Overlay.d.ts +29 -0
- package/dist/components/PageLayout/PageLayout.d.cts +13 -0
- package/dist/components/PageLayout/PageLayout.d.ts +13 -0
- package/dist/components/PageLayout/index.cjs +2 -0
- package/dist/components/PageLayout/index.cjs.map +1 -0
- package/dist/components/PageLayout/index.d.cts +2 -0
- package/dist/components/PageLayout/index.d.ts +2 -0
- package/dist/components/PageLayout/index.js +6 -0
- package/dist/components/PageLayout/index.js.map +1 -0
- package/dist/components/Pagination/Pagination.d.cts +44 -0
- package/dist/components/Pagination/Pagination.d.ts +44 -0
- package/dist/components/Pagination/index.cjs +2 -0
- package/dist/components/Pagination/index.cjs.map +1 -0
- package/dist/components/Pagination/index.d.cts +2 -0
- package/dist/components/Pagination/index.d.ts +2 -0
- package/dist/components/Pagination/index.js +6 -0
- package/dist/components/Pagination/index.js.map +1 -0
- package/dist/components/Pagination/paginationRange.d.cts +21 -0
- package/dist/components/Pagination/paginationRange.d.ts +21 -0
- package/dist/components/Popover/Popover.d.cts +43 -0
- package/dist/components/Popover/Popover.d.ts +43 -0
- package/dist/components/Popover/index.cjs +2 -0
- package/dist/components/Popover/index.cjs.map +1 -0
- package/dist/components/Popover/index.d.cts +2 -0
- package/dist/components/Popover/index.d.ts +2 -0
- package/dist/components/Popover/index.js +6 -0
- package/dist/components/Popover/index.js.map +1 -0
- package/dist/components/Radio/Radio.d.cts +27 -0
- package/dist/components/Radio/Radio.d.ts +27 -0
- package/dist/components/Radio/RadioGroup.d.cts +47 -0
- package/dist/components/Radio/RadioGroup.d.ts +47 -0
- package/dist/components/Radio/index.cjs +2 -0
- package/dist/components/Radio/index.cjs.map +1 -0
- package/dist/components/Radio/index.d.cts +4 -0
- package/dist/components/Radio/index.d.ts +4 -0
- package/dist/components/Radio/index.js +7 -0
- package/dist/components/Radio/index.js.map +1 -0
- package/dist/components/Radio/radioContext.d.cts +18 -0
- package/dist/components/Radio/radioContext.d.ts +18 -0
- package/dist/components/RemoveDialog/RemoveDialog.d.cts +35 -0
- package/dist/components/RemoveDialog/RemoveDialog.d.ts +35 -0
- package/dist/components/RemoveDialog/index.cjs +2 -0
- package/dist/components/RemoveDialog/index.cjs.map +1 -0
- package/dist/components/RemoveDialog/index.d.cts +2 -0
- package/dist/components/RemoveDialog/index.d.ts +2 -0
- package/dist/components/RemoveDialog/index.js +6 -0
- package/dist/components/RemoveDialog/index.js.map +1 -0
- package/dist/components/RichTextEditor/RichTextEditor.d.cts +48 -0
- package/dist/components/RichTextEditor/RichTextEditor.d.ts +48 -0
- package/dist/components/RichTextEditor/Toolbar.d.cts +10 -0
- package/dist/components/RichTextEditor/Toolbar.d.ts +10 -0
- package/dist/components/RichTextEditor/index.cjs +2 -0
- package/dist/components/RichTextEditor/index.cjs.map +1 -0
- package/dist/components/RichTextEditor/index.d.cts +2 -0
- package/dist/components/RichTextEditor/index.d.ts +2 -0
- package/dist/components/RichTextEditor/index.js +6 -0
- package/dist/components/RichTextEditor/index.js.map +1 -0
- package/dist/components/RichTextEditor/nodes/ImageNode.d.cts +33 -0
- package/dist/components/RichTextEditor/nodes/ImageNode.d.ts +33 -0
- package/dist/components/RichTextEditor/nodes/VideoNode.d.cts +36 -0
- package/dist/components/RichTextEditor/nodes/VideoNode.d.ts +36 -0
- package/dist/components/RichTextEditor/urlSafety.d.cts +16 -0
- package/dist/components/RichTextEditor/urlSafety.d.ts +16 -0
- package/dist/components/RootLayout/RootLayout.d.cts +46 -0
- package/dist/components/RootLayout/RootLayout.d.ts +46 -0
- package/dist/components/RootLayout/SettingsDrawer.d.cts +23 -0
- package/dist/components/RootLayout/SettingsDrawer.d.ts +23 -0
- package/dist/components/RootLayout/index.cjs +2 -0
- package/dist/components/RootLayout/index.cjs.map +1 -0
- package/dist/components/RootLayout/index.d.cts +2 -0
- package/dist/components/RootLayout/index.d.ts +2 -0
- package/dist/components/RootLayout/index.js +6 -0
- package/dist/components/RootLayout/index.js.map +1 -0
- package/dist/components/Select/Select.d.cts +85 -0
- package/dist/components/Select/Select.d.ts +85 -0
- package/dist/components/Select/index.cjs +2 -0
- package/dist/components/Select/index.cjs.map +1 -0
- package/dist/components/Select/index.d.cts +2 -0
- package/dist/components/Select/index.d.ts +2 -0
- package/dist/components/Select/index.js +6 -0
- package/dist/components/Select/index.js.map +1 -0
- package/dist/components/Sidebar/Sidebar.d.cts +90 -0
- package/dist/components/Sidebar/Sidebar.d.ts +90 -0
- package/dist/components/Sidebar/index.cjs +2 -0
- package/dist/components/Sidebar/index.cjs.map +1 -0
- package/dist/components/Sidebar/index.d.cts +1 -0
- package/dist/components/Sidebar/index.d.ts +1 -0
- package/dist/components/Sidebar/index.js +7 -0
- package/dist/components/Sidebar/index.js.map +1 -0
- package/dist/components/Slider/Slider.d.cts +58 -0
- package/dist/components/Slider/Slider.d.ts +58 -0
- package/dist/components/Slider/index.cjs +2 -0
- package/dist/components/Slider/index.cjs.map +1 -0
- package/dist/components/Slider/index.d.cts +2 -0
- package/dist/components/Slider/index.d.ts +2 -0
- package/dist/components/Slider/index.js +6 -0
- package/dist/components/Slider/index.js.map +1 -0
- package/dist/components/SpeedDial/SpeedDial.d.cts +56 -0
- package/dist/components/SpeedDial/SpeedDial.d.ts +56 -0
- package/dist/components/SpeedDial/SpeedDialAction.d.cts +18 -0
- package/dist/components/SpeedDial/SpeedDialAction.d.ts +18 -0
- package/dist/components/SpeedDial/index.cjs +2 -0
- package/dist/components/SpeedDial/index.cjs.map +1 -0
- package/dist/components/SpeedDial/index.d.cts +4 -0
- package/dist/components/SpeedDial/index.d.ts +4 -0
- package/dist/components/SpeedDial/index.js +7 -0
- package/dist/components/SpeedDial/index.js.map +1 -0
- package/dist/components/SpeedDial/speedDialContext.d.cts +19 -0
- package/dist/components/SpeedDial/speedDialContext.d.ts +19 -0
- package/dist/components/Stepper/Stepper.d.cts +94 -0
- package/dist/components/Stepper/Stepper.d.ts +94 -0
- package/dist/components/Stepper/index.cjs +2 -0
- package/dist/components/Stepper/index.cjs.map +1 -0
- package/dist/components/Stepper/index.d.cts +2 -0
- package/dist/components/Stepper/index.d.ts +2 -0
- package/dist/components/Stepper/index.js +6 -0
- package/dist/components/Stepper/index.js.map +1 -0
- package/dist/components/SwatchPicker/SwatchPicker.d.cts +43 -0
- package/dist/components/SwatchPicker/SwatchPicker.d.ts +43 -0
- package/dist/components/SwatchPicker/index.cjs +2 -0
- package/dist/components/SwatchPicker/index.cjs.map +1 -0
- package/dist/components/SwatchPicker/index.d.cts +2 -0
- package/dist/components/SwatchPicker/index.d.ts +2 -0
- package/dist/components/SwatchPicker/index.js +6 -0
- package/dist/components/SwatchPicker/index.js.map +1 -0
- package/dist/components/Switch/Switch.d.cts +29 -0
- package/dist/components/Switch/Switch.d.ts +29 -0
- package/dist/components/Switch/index.cjs +2 -0
- package/dist/components/Switch/index.cjs.map +1 -0
- package/dist/components/Switch/index.d.cts +2 -0
- package/dist/components/Switch/index.d.ts +2 -0
- package/dist/components/Switch/index.js +6 -0
- package/dist/components/Switch/index.js.map +1 -0
- package/dist/components/Table/Table.d.cts +248 -0
- package/dist/components/Table/Table.d.ts +248 -0
- package/dist/components/Table/TableFilters.d.cts +16 -0
- package/dist/components/Table/TableFilters.d.ts +16 -0
- package/dist/components/Table/index.cjs +2 -0
- package/dist/components/Table/index.cjs.map +1 -0
- package/dist/components/Table/index.d.cts +3 -0
- package/dist/components/Table/index.d.ts +3 -0
- package/dist/components/Table/index.js +6 -0
- package/dist/components/Table/index.js.map +1 -0
- package/dist/components/Table/tableFilter.d.cts +65 -0
- package/dist/components/Table/tableFilter.d.ts +65 -0
- package/dist/components/Tabs/Tabs.d.cts +80 -0
- package/dist/components/Tabs/Tabs.d.ts +80 -0
- package/dist/components/Tabs/index.cjs +2 -0
- package/dist/components/Tabs/index.cjs.map +1 -0
- package/dist/components/Tabs/index.d.cts +2 -0
- package/dist/components/Tabs/index.d.ts +2 -0
- package/dist/components/Tabs/index.js +6 -0
- package/dist/components/Tabs/index.js.map +1 -0
- package/dist/components/TagsField/TagsField.d.cts +47 -0
- package/dist/components/TagsField/TagsField.d.ts +47 -0
- package/dist/components/TagsField/index.cjs +2 -0
- package/dist/components/TagsField/index.cjs.map +1 -0
- package/dist/components/TagsField/index.d.cts +2 -0
- package/dist/components/TagsField/index.d.ts +2 -0
- package/dist/components/TagsField/index.js +6 -0
- package/dist/components/TagsField/index.js.map +1 -0
- package/dist/components/TextField/TextField.d.cts +62 -0
- package/dist/components/TextField/TextField.d.ts +62 -0
- package/dist/components/TextField/index.cjs +2 -0
- package/dist/components/TextField/index.cjs.map +1 -0
- package/dist/components/TextField/index.d.cts +2 -0
- package/dist/components/TextField/index.d.ts +2 -0
- package/dist/components/TextField/index.js +6 -0
- package/dist/components/TextField/index.js.map +1 -0
- package/dist/components/ThemeToggle/ThemeToggle.d.cts +9 -0
- package/dist/components/ThemeToggle/ThemeToggle.d.ts +9 -0
- package/dist/components/ThemeToggle/index.cjs +2 -0
- package/dist/components/ThemeToggle/index.cjs.map +1 -0
- package/dist/components/ThemeToggle/index.d.cts +2 -0
- package/dist/components/ThemeToggle/index.d.ts +2 -0
- package/dist/components/ThemeToggle/index.js +6 -0
- package/dist/components/ThemeToggle/index.js.map +1 -0
- package/dist/components/TimePicker/TimePicker.d.cts +68 -0
- package/dist/components/TimePicker/TimePicker.d.ts +68 -0
- package/dist/components/TimePicker/index.cjs +2 -0
- package/dist/components/TimePicker/index.cjs.map +1 -0
- package/dist/components/TimePicker/index.d.cts +2 -0
- package/dist/components/TimePicker/index.d.ts +2 -0
- package/dist/components/TimePicker/index.js +6 -0
- package/dist/components/TimePicker/index.js.map +1 -0
- package/dist/components/Timeline/Timeline.d.cts +37 -0
- package/dist/components/Timeline/Timeline.d.ts +37 -0
- package/dist/components/Timeline/TimelineItem.d.cts +26 -0
- package/dist/components/Timeline/TimelineItem.d.ts +26 -0
- package/dist/components/Timeline/index.cjs +2 -0
- package/dist/components/Timeline/index.cjs.map +1 -0
- package/dist/components/Timeline/index.d.cts +4 -0
- package/dist/components/Timeline/index.d.ts +4 -0
- package/dist/components/Timeline/index.js +7 -0
- package/dist/components/Timeline/index.js.map +1 -0
- package/dist/components/Timeline/timelineContext.d.cts +10 -0
- package/dist/components/Timeline/timelineContext.d.ts +10 -0
- package/dist/components/Toast/ToastItem.d.cts +12 -0
- package/dist/components/Toast/ToastItem.d.ts +12 -0
- package/dist/components/Toast/Toaster.d.cts +18 -0
- package/dist/components/Toast/Toaster.d.ts +18 -0
- package/dist/components/Toast/index.cjs +2 -0
- package/dist/components/Toast/index.cjs.map +1 -0
- package/dist/components/Toast/index.d.cts +4 -0
- package/dist/components/Toast/index.d.ts +4 -0
- package/dist/components/Toast/index.js +8 -0
- package/dist/components/Toast/index.js.map +1 -0
- package/dist/components/Toast/toastStore.d.cts +45 -0
- package/dist/components/Toast/toastStore.d.ts +45 -0
- package/dist/components/ToggleButton/ToggleButton.d.cts +26 -0
- package/dist/components/ToggleButton/ToggleButton.d.ts +26 -0
- package/dist/components/ToggleButton/ToggleButtonGroup.d.cts +52 -0
- package/dist/components/ToggleButton/ToggleButtonGroup.d.ts +52 -0
- package/dist/components/ToggleButton/index.cjs +2 -0
- package/dist/components/ToggleButton/index.cjs.map +1 -0
- package/dist/components/ToggleButton/index.d.cts +4 -0
- package/dist/components/ToggleButton/index.d.ts +4 -0
- package/dist/components/ToggleButton/index.js +7 -0
- package/dist/components/ToggleButton/index.js.map +1 -0
- package/dist/components/ToggleButton/toggleButtonGroupContext.d.cts +15 -0
- package/dist/components/ToggleButton/toggleButtonGroupContext.d.ts +15 -0
- package/dist/components/Tooltip/Tooltip.d.cts +21 -0
- package/dist/components/Tooltip/Tooltip.d.ts +21 -0
- package/dist/components/Tooltip/index.cjs +2 -0
- package/dist/components/Tooltip/index.cjs.map +1 -0
- package/dist/components/Tooltip/index.d.cts +2 -0
- package/dist/components/Tooltip/index.d.ts +2 -0
- package/dist/components/Tooltip/index.js +6 -0
- package/dist/components/Tooltip/index.js.map +1 -0
- package/dist/components/TranslatedFields/TranslatedFields.d.cts +56 -0
- package/dist/components/TranslatedFields/TranslatedFields.d.ts +56 -0
- package/dist/components/TranslatedFields/index.cjs +2 -0
- package/dist/components/TranslatedFields/index.cjs.map +1 -0
- package/dist/components/TranslatedFields/index.d.cts +2 -0
- package/dist/components/TranslatedFields/index.d.ts +2 -0
- package/dist/components/TranslatedFields/index.js +6 -0
- package/dist/components/TranslatedFields/index.js.map +1 -0
- package/dist/components/Typography/Typography.d.cts +30 -0
- package/dist/components/Typography/Typography.d.ts +30 -0
- package/dist/components/Typography/index.cjs +2 -0
- package/dist/components/Typography/index.cjs.map +1 -0
- package/dist/components/Typography/index.d.cts +2 -0
- package/dist/components/Typography/index.d.ts +2 -0
- package/dist/components/Typography/index.js +6 -0
- package/dist/components/Typography/index.js.map +1 -0
- package/dist/components/UserCard/UserCard.d.cts +33 -0
- package/dist/components/UserCard/UserCard.d.ts +33 -0
- package/dist/components/UserCard/index.cjs +2 -0
- package/dist/components/UserCard/index.cjs.map +1 -0
- package/dist/components/UserCard/index.d.cts +2 -0
- package/dist/components/UserCard/index.d.ts +2 -0
- package/dist/components/UserCard/index.js +6 -0
- package/dist/components/UserCard/index.js.map +1 -0
- package/dist/components/index.d.cts +57 -0
- package/dist/components/index.d.ts +57 -0
- package/dist/entries/components.cjs +2 -0
- package/dist/entries/components.cjs.map +1 -0
- package/dist/entries/components.d.cts +3 -0
- package/dist/entries/components.d.ts +3 -0
- package/dist/entries/components.js +140 -0
- package/dist/entries/components.js.map +1 -0
- package/dist/entries/helpers.cjs +2 -0
- package/dist/entries/helpers.cjs.map +1 -0
- package/dist/entries/helpers.d.cts +4 -0
- package/dist/entries/helpers.d.ts +4 -0
- package/dist/entries/helpers.js +17 -0
- package/dist/entries/helpers.js.map +1 -0
- package/dist/entries/hooks.cjs +2 -0
- package/dist/entries/hooks.cjs.map +1 -0
- package/dist/entries/hooks.d.cts +7 -0
- package/dist/entries/hooks.d.ts +7 -0
- package/dist/entries/hooks.js +12 -0
- package/dist/entries/hooks.js.map +1 -0
- package/dist/entries/i18n.cjs +2 -0
- package/dist/entries/i18n.cjs.map +1 -0
- package/dist/entries/i18n.d.cts +3 -0
- package/dist/entries/i18n.d.ts +3 -0
- package/dist/entries/i18n.js +11 -0
- package/dist/entries/i18n.js.map +1 -0
- package/dist/entries/icons.cjs +2 -0
- package/dist/entries/icons.cjs.map +1 -0
- package/dist/entries/icons.d.cts +2 -0
- package/dist/entries/icons.d.ts +2 -0
- package/dist/entries/icons.js +9 -0
- package/dist/entries/icons.js.map +1 -0
- package/dist/entries/theme.cjs +2 -0
- package/dist/entries/theme.cjs.map +1 -0
- package/dist/entries/theme.d.cts +2 -0
- package/dist/entries/theme.d.ts +2 -0
- package/dist/entries/theme.js +18 -0
- package/dist/entries/theme.js.map +1 -0
- package/dist/form/Form.d.cts +14 -0
- package/dist/form/Form.d.ts +14 -0
- package/dist/form/formContext.d.cts +8 -0
- package/dist/form/formContext.d.ts +8 -0
- package/dist/form/index.d.cts +5 -0
- package/dist/form/index.d.ts +5 -0
- package/dist/form/useForm.d.cts +81 -0
- package/dist/form/useForm.d.ts +81 -0
- package/dist/formContext-B7ln1Miy.js +10 -0
- package/dist/formContext-B7ln1Miy.js.map +1 -0
- package/dist/formContext-bTWrqdEV.cjs +2 -0
- package/dist/formContext-bTWrqdEV.cjs.map +1 -0
- package/dist/helpers/access.d.cts +11 -0
- package/dist/helpers/access.d.ts +11 -0
- package/dist/helpers/table.d.cts +41 -0
- package/dist/helpers/table.d.ts +41 -0
- package/dist/helpers/translations.d.cts +63 -0
- package/dist/helpers/translations.d.ts +63 -0
- package/dist/hooks/index.d.cts +4 -0
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/useDisclosure.d.cts +7 -0
- package/dist/hooks/useDisclosure.d.ts +7 -0
- package/dist/hooks/useFloatingPanel.d.cts +45 -0
- package/dist/hooks/useFloatingPanel.d.ts +45 -0
- package/dist/hooks/useLockBodyScroll.d.cts +7 -0
- package/dist/hooks/useLockBodyScroll.d.ts +7 -0
- package/dist/hooks/useMediaQuery.d.cts +13 -0
- package/dist/hooks/useMediaQuery.d.ts +13 -0
- package/dist/i18n/locales/de.d.cts +5 -0
- package/dist/i18n/locales/de.d.ts +5 -0
- package/dist/i18n/locales/en.d.cts +9 -0
- package/dist/i18n/locales/en.d.ts +9 -0
- package/dist/i18n/locales/es.d.cts +5 -0
- package/dist/i18n/locales/es.d.ts +5 -0
- package/dist/i18n/locales/fr.d.cts +5 -0
- package/dist/i18n/locales/fr.d.ts +5 -0
- package/dist/i18n/locales/it.d.cts +5 -0
- package/dist/i18n/locales/it.d.ts +5 -0
- package/dist/i18n/locales/ka.d.cts +8 -0
- package/dist/i18n/locales/ka.d.ts +8 -0
- package/dist/i18n/locales/ru.d.cts +5 -0
- package/dist/i18n/locales/ru.d.ts +5 -0
- package/dist/i18n/messages.d.cts +241 -0
- package/dist/i18n/messages.d.ts +241 -0
- package/dist/icons/icons.d.cts +2 -0
- package/dist/icons/icons.d.ts +2 -0
- package/dist/icons/names.d.cts +3 -0
- package/dist/icons/names.d.ts +3 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +203 -0
- package/dist/index.d.cts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +185 -0
- package/dist/index.js.map +1 -0
- package/dist/messages-C-zecFBE.js +1363 -0
- package/dist/messages-C-zecFBE.js.map +1 -0
- package/dist/messages-Cy-qK5xU.cjs +36 -0
- package/dist/messages-Cy-qK5xU.cjs.map +1 -0
- package/dist/names-C2Yj1p3u.cjs +2 -0
- package/dist/names-C2Yj1p3u.cjs.map +1 -0
- package/dist/names-D8ABK2Wk.js +1205 -0
- package/dist/names-D8ABK2Wk.js.map +1 -0
- package/dist/reset.css +78 -0
- package/dist/table-CZRQGNdk.cjs +2 -0
- package/dist/table-CZRQGNdk.cjs.map +1 -0
- package/dist/table-DF3zTrC3.js +49 -0
- package/dist/table-DF3zTrC3.js.map +1 -0
- package/dist/theme/ConfigProvider.d.cts +362 -0
- package/dist/theme/ConfigProvider.d.ts +362 -0
- package/dist/theme/applyTheme.d.cts +28 -0
- package/dist/theme/applyTheme.d.ts +28 -0
- package/dist/theme/index.d.cts +5 -0
- package/dist/theme/index.d.ts +5 -0
- package/dist/toastStore-B4Tk2Xk7.cjs +2 -0
- package/dist/toastStore-B4Tk2Xk7.cjs.map +1 -0
- package/dist/toastStore-Cx_JOKwS.js +32 -0
- package/dist/toastStore-Cx_JOKwS.js.map +1 -0
- package/dist/translations-CXEeeUDL.cjs +2 -0
- package/dist/translations-CXEeeUDL.cjs.map +1 -0
- package/dist/translations-D15tFHM1.js +74 -0
- package/dist/translations-D15tFHM1.js.map +1 -0
- package/dist/useForm-B_5wDIER.js +126 -0
- package/dist/useForm-B_5wDIER.js.map +1 -0
- package/dist/useForm-C7erBHt0.cjs +2 -0
- package/dist/useForm-C7erBHt0.cjs.map +1 -0
- package/dist/useLockBodyScroll-CIXHZo-Q.cjs +2 -0
- package/dist/useLockBodyScroll-CIXHZo-Q.cjs.map +1 -0
- package/dist/useLockBodyScroll-DwBILLPK.js +35 -0
- package/dist/useLockBodyScroll-DwBILLPK.js.map +1 -0
- package/dist/useMediaQuery-BCsNfMA1.cjs +2 -0
- package/dist/useMediaQuery-BCsNfMA1.cjs.map +1 -0
- package/dist/useMediaQuery-_1EcFoC5.js +17 -0
- package/dist/useMediaQuery-_1EcFoC5.js.map +1 -0
- package/package.json +244 -0
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import { jsxs as p, jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as Me, useId as Oe, useState as B, useRef as T, useCallback as G, useMemo as qe, useEffect as K } from "react";
|
|
3
|
+
import { clsx as R } from "clsx";
|
|
4
|
+
import { u as Ae } from "./formContext-B7ln1Miy.js";
|
|
5
|
+
import { F as Be } from "./FloatingPanel-BG9Uag__.js";
|
|
6
|
+
import { a as Ke } from "./names-D8ABK2Wk.js";
|
|
7
|
+
import { I as E } from "./Icon-CophpkHo.js";
|
|
8
|
+
import { L as Re } from "./List-BHgFI9Ll.js";
|
|
9
|
+
import { L as We } from "./ListItem-B4yqZR-Z.js";
|
|
10
|
+
import { L as Fe } from "./Loader-C4JoXOyA.js";
|
|
11
|
+
import { T as W } from "./Typography-Cta6Rg4L.js";
|
|
12
|
+
import { a as Pe } from "./ConfigProvider-2c94kUOk.js";
|
|
13
|
+
const Ve = "_field_17o9l_1", $e = "_fullWidth_17o9l_7", He = "_label_17o9l_13", je = "_required_17o9l_22", Qe = "_control_17o9l_28", ze = "_open_17o9l_47", Ue = "_error_17o9l_52", Ge = "_disabled_17o9l_60", Je = "_value_17o9l_70", Xe = "_valueIcon_17o9l_78", Ye = "_valueLabel_17o9l_82", Ze = "_placeholder_17o9l_87", eo = "_clear_17o9l_92", oo = "_chevron_17o9l_111", lo = "_sm_17o9l_121", ro = "_md_17o9l_125", to = "_lg_17o9l_129", ao = "_helper_17o9l_134", no = "_popover_17o9l_139", so = "_search_17o9l_147", co = "_searchIcon_17o9l_156", io = "_searchInput_17o9l_160", uo = "_listbox_17o9l_176", fo = "_active_17o9l_184", mo = "_noOptions_17o9l_188", po = "_loading_17o9l_194", l = {
|
|
14
|
+
field: Ve,
|
|
15
|
+
fullWidth: $e,
|
|
16
|
+
label: He,
|
|
17
|
+
required: je,
|
|
18
|
+
control: Qe,
|
|
19
|
+
open: ze,
|
|
20
|
+
error: Ue,
|
|
21
|
+
disabled: Ge,
|
|
22
|
+
value: Je,
|
|
23
|
+
valueIcon: Xe,
|
|
24
|
+
valueLabel: Ye,
|
|
25
|
+
placeholder: Ze,
|
|
26
|
+
clear: eo,
|
|
27
|
+
chevron: oo,
|
|
28
|
+
sm: lo,
|
|
29
|
+
md: ro,
|
|
30
|
+
lg: to,
|
|
31
|
+
helper: ao,
|
|
32
|
+
popover: no,
|
|
33
|
+
search: so,
|
|
34
|
+
searchIcon: co,
|
|
35
|
+
searchInput: io,
|
|
36
|
+
listbox: uo,
|
|
37
|
+
active: fo,
|
|
38
|
+
noOptions: mo,
|
|
39
|
+
loading: po
|
|
40
|
+
}, _o = new Set(Ke);
|
|
41
|
+
function ho(_, h) {
|
|
42
|
+
return _ == null ? null : typeof _ == "string" && _o.has(_) ? /* @__PURE__ */ a(E, { name: _, size: h }) : _;
|
|
43
|
+
}
|
|
44
|
+
const Eo = Me(function({
|
|
45
|
+
label: h,
|
|
46
|
+
options: C,
|
|
47
|
+
size: y = "md",
|
|
48
|
+
error: ie,
|
|
49
|
+
helperText: de,
|
|
50
|
+
required: J = !1,
|
|
51
|
+
fullWidth: ue = !0,
|
|
52
|
+
disabled: f = !1,
|
|
53
|
+
value: F,
|
|
54
|
+
defaultValue: fe,
|
|
55
|
+
onChange: P,
|
|
56
|
+
placeholder: me,
|
|
57
|
+
clearable: pe = !0,
|
|
58
|
+
searchable: i = !1,
|
|
59
|
+
searchPlaceholder: _e,
|
|
60
|
+
onSearchChange: w,
|
|
61
|
+
loading: he = !1,
|
|
62
|
+
loadingText: ve,
|
|
63
|
+
noOptionsText: S,
|
|
64
|
+
showSelectedTick: be = !0,
|
|
65
|
+
name: v,
|
|
66
|
+
id: Ie,
|
|
67
|
+
className: ge,
|
|
68
|
+
style: ye
|
|
69
|
+
}, x) {
|
|
70
|
+
const we = Oe(), N = Ie ?? we, V = `${N}-label`, $ = `${N}-listbox`, X = `${N}-helper`, H = (e) => `${N}-opt-${e}`, k = Pe(), Y = _e ?? k("common.search"), M = Ae(), O = !!(M && v), s = O ? M.field(v) : void 0, xe = F !== void 0 ? F : O ? M.values[v] ?? "" : void 0, Z = F !== void 0 || O, [Ne, ke] = B(fe ?? ""), q = Z ? xe : Ne, j = ie ?? (s == null ? void 0 : s.error) ?? !1, Q = de ?? (s == null ? void 0 : s.helperText), m = C.find((e) => e.value === q), De = m != null, ee = (e) => {
|
|
71
|
+
Z || ke(e), O && M.setValue(v, e), P == null || P(e);
|
|
72
|
+
}, b = T(null), oe = T(null), z = T({ buffer: "", timer: 0 }), A = T(void 0);
|
|
73
|
+
A.current = s ? () => s.onBlur({}) : void 0;
|
|
74
|
+
const [r, le] = B(!1), [I, re] = B(""), [d, c] = B(-1), Le = G(
|
|
75
|
+
(e) => {
|
|
76
|
+
b.current = e, typeof x == "function" ? x(e) : x && (x.current = e);
|
|
77
|
+
},
|
|
78
|
+
[x]
|
|
79
|
+
), n = qe(() => {
|
|
80
|
+
if (!i || w || !I.trim()) return C;
|
|
81
|
+
const e = I.trim().toLowerCase();
|
|
82
|
+
return C.filter((o) => o.label.toLowerCase().includes(e));
|
|
83
|
+
}, [i, w, I, C]), g = G(
|
|
84
|
+
(e, o) => {
|
|
85
|
+
let t = e;
|
|
86
|
+
for (; t >= 0 && t < n.length; ) {
|
|
87
|
+
if (!n[t].disabled) return t;
|
|
88
|
+
t += o;
|
|
89
|
+
}
|
|
90
|
+
return -1;
|
|
91
|
+
},
|
|
92
|
+
[n]
|
|
93
|
+
), te = T(null), D = G((e) => {
|
|
94
|
+
var o, t;
|
|
95
|
+
le(!1), re(""), window.clearTimeout(z.current.timer), z.current.buffer = "", (o = A.current) == null || o.call(A), e && ((t = b.current) == null || t.focus());
|
|
96
|
+
}, []);
|
|
97
|
+
K(() => {
|
|
98
|
+
if (!r) return;
|
|
99
|
+
const e = n.findIndex((o) => o.value === q);
|
|
100
|
+
c(
|
|
101
|
+
e >= 0 && !n[e].disabled ? e : g(0, 1)
|
|
102
|
+
), i && requestAnimationFrame(() => {
|
|
103
|
+
var o;
|
|
104
|
+
return (o = oe.current) == null ? void 0 : o.focus();
|
|
105
|
+
});
|
|
106
|
+
}, [r]), K(() => {
|
|
107
|
+
var e, o;
|
|
108
|
+
!r || d < 0 || (o = (e = document.getElementById(H(d))) == null ? void 0 : e.scrollIntoView) == null || o.call(e, { block: "nearest" });
|
|
109
|
+
}, [r, d]), K(() => {
|
|
110
|
+
r && i && c(g(0, 1));
|
|
111
|
+
}, [I]), K(() => {
|
|
112
|
+
r && c((e) => e < n.length ? e : g(0, 1));
|
|
113
|
+
}, [n.length]);
|
|
114
|
+
const L = () => {
|
|
115
|
+
f || le(!0);
|
|
116
|
+
}, U = (e) => {
|
|
117
|
+
!e || e.disabled || (ee(e.value), D(!0));
|
|
118
|
+
}, ae = (e) => {
|
|
119
|
+
c((o) => {
|
|
120
|
+
const t = o < 0 ? e > 0 ? 0 : n.length - 1 : o + e, u = g(t, e);
|
|
121
|
+
return u === -1 ? o : u;
|
|
122
|
+
});
|
|
123
|
+
}, Te = (e) => {
|
|
124
|
+
const o = z.current;
|
|
125
|
+
window.clearTimeout(o.timer), o.buffer += e.toLowerCase(), o.timer = window.setTimeout(() => o.buffer = "", 500);
|
|
126
|
+
const t = n.findIndex(
|
|
127
|
+
(u) => !u.disabled && u.label.toLowerCase().startsWith(o.buffer)
|
|
128
|
+
);
|
|
129
|
+
t >= 0 && c(t);
|
|
130
|
+
}, ne = (e) => {
|
|
131
|
+
if (!f)
|
|
132
|
+
switch (e.key) {
|
|
133
|
+
case "ArrowDown":
|
|
134
|
+
e.preventDefault(), r ? ae(1) : L();
|
|
135
|
+
break;
|
|
136
|
+
case "ArrowUp":
|
|
137
|
+
e.preventDefault(), r ? ae(-1) : L();
|
|
138
|
+
break;
|
|
139
|
+
case "Enter":
|
|
140
|
+
e.preventDefault(), r ? U(n[d]) : L();
|
|
141
|
+
break;
|
|
142
|
+
case " ":
|
|
143
|
+
r ? i || (e.preventDefault(), U(n[d])) : (e.preventDefault(), L());
|
|
144
|
+
break;
|
|
145
|
+
case "Escape":
|
|
146
|
+
r && (e.preventDefault(), e.stopPropagation(), D(!0));
|
|
147
|
+
break;
|
|
148
|
+
case "Tab":
|
|
149
|
+
r && D(!0);
|
|
150
|
+
break;
|
|
151
|
+
case "Home":
|
|
152
|
+
r && (e.preventDefault(), c(g(0, 1)));
|
|
153
|
+
break;
|
|
154
|
+
case "End":
|
|
155
|
+
r && (e.preventDefault(), c(g(n.length - 1, -1)));
|
|
156
|
+
break;
|
|
157
|
+
default:
|
|
158
|
+
!i && r && e.key.length === 1 && !e.metaKey && !e.ctrlKey && !e.altKey && Te(e.key);
|
|
159
|
+
}
|
|
160
|
+
}, Ee = (e) => {
|
|
161
|
+
var t, u;
|
|
162
|
+
const o = e.relatedTarget;
|
|
163
|
+
o && ((t = te.current) != null && t.contains(o) || (u = b.current) != null && u.contains(o)) || s == null || s.onBlur(e);
|
|
164
|
+
}, Ce = (e) => {
|
|
165
|
+
var o;
|
|
166
|
+
e.stopPropagation(), ee(""), (o = b.current) == null || o.focus();
|
|
167
|
+
}, se = r && d >= 0 ? H(d) : void 0, Se = y === "sm" ? "sm" : "md", ce = y === "sm" ? 16 : y === "md" ? 14 : 12;
|
|
168
|
+
return /* @__PURE__ */ p(
|
|
169
|
+
"div",
|
|
170
|
+
{
|
|
171
|
+
className: R(
|
|
172
|
+
l.field,
|
|
173
|
+
l[y],
|
|
174
|
+
ue && l.fullWidth,
|
|
175
|
+
j && l.error,
|
|
176
|
+
f && l.disabled,
|
|
177
|
+
ge
|
|
178
|
+
),
|
|
179
|
+
style: ye,
|
|
180
|
+
children: [
|
|
181
|
+
h != null && /* @__PURE__ */ p(
|
|
182
|
+
"span",
|
|
183
|
+
{
|
|
184
|
+
id: V,
|
|
185
|
+
className: l.label,
|
|
186
|
+
onClick: () => {
|
|
187
|
+
var e;
|
|
188
|
+
return !f && ((e = b.current) == null ? void 0 : e.focus());
|
|
189
|
+
},
|
|
190
|
+
children: [
|
|
191
|
+
/* @__PURE__ */ a(W, { as: "span", variant: "bodySmall", color: "muted", children: h }),
|
|
192
|
+
J && /* @__PURE__ */ a("span", { className: l.required, "aria-hidden": "true", children: "*" })
|
|
193
|
+
]
|
|
194
|
+
}
|
|
195
|
+
),
|
|
196
|
+
/* @__PURE__ */ p(
|
|
197
|
+
"div",
|
|
198
|
+
{
|
|
199
|
+
ref: Le,
|
|
200
|
+
id: N,
|
|
201
|
+
...v ? { name: v } : {},
|
|
202
|
+
role: "combobox",
|
|
203
|
+
tabIndex: f ? -1 : 0,
|
|
204
|
+
"aria-haspopup": "listbox",
|
|
205
|
+
"aria-expanded": r,
|
|
206
|
+
"aria-controls": r ? $ : void 0,
|
|
207
|
+
"aria-activedescendant": i ? void 0 : se,
|
|
208
|
+
"aria-labelledby": h != null ? V : void 0,
|
|
209
|
+
"aria-disabled": f || void 0,
|
|
210
|
+
"aria-required": J || void 0,
|
|
211
|
+
"aria-invalid": j || void 0,
|
|
212
|
+
"aria-describedby": Q != null ? X : void 0,
|
|
213
|
+
className: R(l.control, r && l.open),
|
|
214
|
+
onClick: () => r ? D(!1) : L(),
|
|
215
|
+
onKeyDown: ne,
|
|
216
|
+
onBlur: Ee,
|
|
217
|
+
children: [
|
|
218
|
+
/* @__PURE__ */ p("span", { className: R(l.value, !De && l.placeholder), children: [
|
|
219
|
+
(m == null ? void 0 : m.icon) != null && /* @__PURE__ */ a("span", { className: l.valueIcon, children: ho(m.icon, Se) }),
|
|
220
|
+
/* @__PURE__ */ a("span", { className: l.valueLabel, children: m ? m.label : me ?? k("select.placeholder") })
|
|
221
|
+
] }),
|
|
222
|
+
pe && q !== "" && !f && /* @__PURE__ */ a(
|
|
223
|
+
"button",
|
|
224
|
+
{
|
|
225
|
+
type: "button",
|
|
226
|
+
className: l.clear,
|
|
227
|
+
"aria-label": k("select.clear"),
|
|
228
|
+
tabIndex: -1,
|
|
229
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
230
|
+
onClick: Ce,
|
|
231
|
+
children: /* @__PURE__ */ a(E, { name: "CloseCircle", size: "sm" })
|
|
232
|
+
}
|
|
233
|
+
),
|
|
234
|
+
/* @__PURE__ */ a(
|
|
235
|
+
E,
|
|
236
|
+
{
|
|
237
|
+
name: "ArrowDown4",
|
|
238
|
+
className: l.chevron,
|
|
239
|
+
style: { width: ce, height: ce },
|
|
240
|
+
"aria-hidden": "true"
|
|
241
|
+
}
|
|
242
|
+
)
|
|
243
|
+
]
|
|
244
|
+
}
|
|
245
|
+
),
|
|
246
|
+
/* @__PURE__ */ p(
|
|
247
|
+
Be,
|
|
248
|
+
{
|
|
249
|
+
ref: te,
|
|
250
|
+
open: r,
|
|
251
|
+
triggerRef: b,
|
|
252
|
+
onClose: D,
|
|
253
|
+
matchTriggerWidth: !0,
|
|
254
|
+
className: l.popover,
|
|
255
|
+
children: [
|
|
256
|
+
i && /* @__PURE__ */ p("div", { className: l.search, children: [
|
|
257
|
+
/* @__PURE__ */ a(E, { name: "SearchNormal", size: "sm", className: l.searchIcon, "aria-hidden": "true" }),
|
|
258
|
+
/* @__PURE__ */ a(
|
|
259
|
+
"input",
|
|
260
|
+
{
|
|
261
|
+
ref: oe,
|
|
262
|
+
className: l.searchInput,
|
|
263
|
+
type: "text",
|
|
264
|
+
role: "combobox",
|
|
265
|
+
"aria-expanded": "true",
|
|
266
|
+
"aria-controls": $,
|
|
267
|
+
"aria-activedescendant": se,
|
|
268
|
+
"aria-autocomplete": "list",
|
|
269
|
+
"aria-label": Y,
|
|
270
|
+
placeholder: Y,
|
|
271
|
+
value: I,
|
|
272
|
+
spellCheck: !1,
|
|
273
|
+
onChange: (e) => {
|
|
274
|
+
re(e.target.value), w == null || w(e.target.value);
|
|
275
|
+
},
|
|
276
|
+
onKeyDown: ne
|
|
277
|
+
}
|
|
278
|
+
)
|
|
279
|
+
] }),
|
|
280
|
+
/* @__PURE__ */ a(
|
|
281
|
+
Re,
|
|
282
|
+
{
|
|
283
|
+
role: "listbox",
|
|
284
|
+
id: $,
|
|
285
|
+
"aria-labelledby": h != null ? V : void 0,
|
|
286
|
+
size: y,
|
|
287
|
+
className: l.listbox,
|
|
288
|
+
onMouseLeave: () => c(-1),
|
|
289
|
+
children: he ? /* @__PURE__ */ p("div", { className: l.loading, children: [
|
|
290
|
+
/* @__PURE__ */ a(Fe, { size: "sm" }),
|
|
291
|
+
/* @__PURE__ */ a(W, { as: "span", variant: "bodySmall", color: "muted", children: ve ?? k("common.loading") })
|
|
292
|
+
] }) : n.length === 0 ? /* @__PURE__ */ a("div", { className: l.noOptions, children: /* @__PURE__ */ a(W, { as: "span", variant: "bodySmall", color: "muted", children: S == null ? k("select.noOptions") : typeof S == "function" ? S(I) : S }) }) : n.map((e, o) => {
|
|
293
|
+
const t = e.value === q;
|
|
294
|
+
return /* @__PURE__ */ a(
|
|
295
|
+
We,
|
|
296
|
+
{
|
|
297
|
+
id: H(o),
|
|
298
|
+
role: "option",
|
|
299
|
+
tabIndex: -1,
|
|
300
|
+
"aria-selected": t,
|
|
301
|
+
"aria-current": void 0,
|
|
302
|
+
clickable: !0,
|
|
303
|
+
selected: t,
|
|
304
|
+
disabled: e.disabled,
|
|
305
|
+
icon: e.icon,
|
|
306
|
+
className: R(o === d && l.active),
|
|
307
|
+
trailing: t && be ? /* @__PURE__ */ a(E, { name: "TickCircle", size: "sm" }) : void 0,
|
|
308
|
+
onMouseEnter: () => !e.disabled && c(o),
|
|
309
|
+
onClick: () => U(e),
|
|
310
|
+
children: e.label
|
|
311
|
+
},
|
|
312
|
+
e.value
|
|
313
|
+
);
|
|
314
|
+
})
|
|
315
|
+
}
|
|
316
|
+
)
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
),
|
|
320
|
+
Q != null && /* @__PURE__ */ a(
|
|
321
|
+
W,
|
|
322
|
+
{
|
|
323
|
+
as: "span",
|
|
324
|
+
id: X,
|
|
325
|
+
variant: "bodySmall",
|
|
326
|
+
color: j ? "error" : "muted",
|
|
327
|
+
className: l.helper,
|
|
328
|
+
children: Q
|
|
329
|
+
}
|
|
330
|
+
)
|
|
331
|
+
]
|
|
332
|
+
}
|
|
333
|
+
);
|
|
334
|
+
});
|
|
335
|
+
export {
|
|
336
|
+
Eo as S
|
|
337
|
+
};
|
|
338
|
+
//# sourceMappingURL=Select-PbTyxB1Q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Select-PbTyxB1Q.js","sources":["../src/components/Select/Select.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type FocusEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { useFormContext } from '../../form/formContext'\nimport { FloatingPanel } from '../FloatingPanel/FloatingPanel'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { Icon } from '../Icon'\nimport { List, ListItem } from '../List'\nimport { Loader } from '../Loader'\nimport { Typography } from '../Typography'\nimport styles from './Select.module.css'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\nexport type SelectSize = 'sm' | 'md' | 'lg'\n\n/** A single selectable option. */\nexport interface SelectOption {\n /** The value committed when this option is chosen. */\n value: string\n /** Display + search text. */\n label: string\n /** Greys out and blocks selecting this option. */\n disabled?: boolean\n /** Leading icon — a known `IconName` (rendered as `<Icon>`) or any node. */\n icon?: IconName | ReactNode\n}\n\n/** Renders an option's icon (an `IconName` becomes an `<Icon>`; anything else is used as-is). */\nfunction renderIcon(icon: IconName | ReactNode, size: 'sm' | 'md'): ReactNode {\n if (icon == null) return null\n if (typeof icon === 'string' && ICON_NAME_SET.has(icon))\n return <Icon name={icon as IconName} size={size} />\n return icon\n}\n\nexport interface SelectProps {\n /** Label rendered above the field. */\n label?: ReactNode\n /** The selectable options. */\n options: SelectOption[]\n /** Preset size — control height, font and option density. */\n size?: SelectSize\n /** Marks the field invalid: red border/ring + the `helperText` in the error color. */\n error?: boolean\n /** Helper / validation text under the field. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Stretches the field to fill its container width. Defaults to `true`. */\n fullWidth?: boolean\n /** Disables the field. */\n disabled?: boolean\n /** Controlled value — the chosen option's `value` (`''` = nothing selected). */\n value?: string\n /** Initial value for uncontrolled use. */\n defaultValue?: string\n /** Fires with the next value (`''` when cleared). */\n onChange?: (value: string) => void\n /** Text shown in the trigger when nothing is selected. Defaults to `\"Select…\"`. */\n placeholder?: string\n /** Shows a clear (×) button in the trigger when a value is set. Defaults to `true`. */\n clearable?: boolean\n /** Adds a search box inside the popover that filters options by label. */\n searchable?: boolean\n /** Placeholder for the search box. Defaults to `\"Search…\"`. */\n searchPlaceholder?: string\n /**\n * Fires with the search query as the user types. **Providing this switches off the built-in\n * local filtering** — you own `options` (e.g. fetch them from a server for the current query).\n */\n onSearchChange?: (query: string) => void\n /** Shows a loading indicator in the popover (e.g. while fetching server-side search results). */\n loading?: boolean\n /** Text shown next to the loader while `loading`. Defaults to `\"Loading…\"`. */\n loadingText?: ReactNode\n /**\n * Shown in the popover when no option matches. Defaults to `\"No options\"`. Pass a function\n * `(query) => node` to vary the message by the current search text — e.g. a \"Type to search\" hint\n * while it's empty vs a \"No results\" message after typing.\n */\n noOptionsText?: ReactNode | ((query: string) => ReactNode)\n /** Show the trailing tick on the selected option. Defaults to `true` (the row still gets its tint). */\n showSelectedTick?: boolean\n /** Form field name — auto-binds to a surrounding `<Form>` (value is the option's `value`). */\n name?: string\n /** Id for the trigger (label association). */\n id?: string\n className?: string\n style?: CSSProperties\n}\n\n/**\n * A labeled single-select. The trigger reuses TextField-style chrome (label, helper/error, sizes,\n * `required`, `fullWidth`, `disabled`); clicking it opens a `Dropdown`-style popover — portaled to\n * `<body>`, opening below (flipping above only when it would overflow), locking page scroll,\n * re-positioning on scroll/resize, matching the trigger width, and entering with the shared\n * opacity + translate animation. Options render as `ListItem`s in a `role=\"listbox\"`; the chosen\n * option is highlighted with a tick, disabled options are inert. Full keyboard support\n * (Arrow/Home/End to move, Enter/Space to select, Escape to close, type-ahead) and ARIA\n * (`listbox`/`option`, `aria-activedescendant`, `aria-expanded`). Optionally `searchable` (a filter\n * box) and `clearable` (a × to reset); pass `onSearchChange` to drive the search **server-side** (the\n * consumer owns `options` for the current query — local filtering is skipped) with a `loading`\n * indicator. Controlled (`value` + `onChange`) or uncontrolled\n * (`defaultValue`), and binds to a surrounding `<Form>` by `name` (value = the option's `value`;\n * validate with e.g. `z.string().min(1, 'Required')`). Token-only styling.\n */\nexport const Select = forwardRef<HTMLDivElement, SelectProps>(function Select(\n {\n label,\n options,\n size = 'md',\n error,\n helperText,\n required = false,\n fullWidth = true,\n disabled = false,\n value,\n defaultValue,\n onChange,\n placeholder,\n clearable = true,\n searchable = false,\n searchPlaceholder,\n onSearchChange,\n loading = false,\n loadingText,\n noOptionsText,\n showSelectedTick = true,\n name,\n id: idProp,\n className,\n style,\n },\n ref,\n) {\n const reactId = useId()\n const id = idProp ?? reactId\n const labelId = `${id}-label`\n const listboxId = `${id}-listbox`\n const helperId = `${id}-helper`\n const optionId = (index: number) => `${id}-opt-${index}`\n\n const t = useT()\n const searchPh = searchPlaceholder ?? t('common.search')\n\n // ── value (controlled / form-bound / uncontrolled) ─────────────────────────────────────────────\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = isFormBound ? form!.field(name!) : undefined\n const externalValue =\n value !== undefined\n ? value\n : isFormBound\n ? ((form!.values[name!] as string | undefined) ?? '')\n : undefined\n const isControlled = value !== undefined || isFormBound\n const [internal, setInternal] = useState<string>(defaultValue ?? '')\n const currentValue = isControlled ? externalValue! : internal\n\n const resolvedError = error ?? bound?.error ?? false\n const resolvedHelperText = helperText ?? bound?.helperText\n\n const selected = options.find((o) => o.value === currentValue)\n const hasValue = selected != null\n\n const commit = (next: string) => {\n if (!isControlled) setInternal(next)\n if (isFormBound) form!.setValue(name!, next)\n onChange?.(next)\n }\n\n // ── popover open state ─────────────────────────────────────────────────────────────────────────\n const triggerRef = useRef<HTMLDivElement | null>(null)\n const searchInputRef = useRef<HTMLInputElement | null>(null)\n const typeahead = useRef({ buffer: '', timer: 0 })\n // stable handle to the form field's blur (touched) callback — field() returns a fresh object each render\n const fieldBlur = useRef<(() => void) | undefined>(undefined)\n fieldBlur.current = bound ? () => bound.onBlur({} as FocusEvent<HTMLInputElement>) : undefined\n const [open, setOpen] = useState(false)\n const [searchQuery, setSearchQuery] = useState('')\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n\n const setTriggerRef = useCallback(\n (node: HTMLDivElement | null) => {\n triggerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as { current: HTMLDivElement | null }).current = node\n },\n [ref],\n )\n\n // options shown right now. When `onSearchChange` is set the consumer owns `options` (server-side\n // search) — skip the built-in local filter; otherwise filter the given options by label.\n const filteredOptions = useMemo(() => {\n if (!searchable || onSearchChange || !searchQuery.trim()) return options\n const q = searchQuery.trim().toLowerCase()\n return options.filter((o) => o.label.toLowerCase().includes(q))\n }, [searchable, onSearchChange, searchQuery, options])\n\n const findEnabled = useCallback(\n (start: number, delta: number) => {\n let i = start\n while (i >= 0 && i < filteredOptions.length) {\n if (!filteredOptions[i].disabled) return i\n i += delta\n }\n return -1\n },\n [filteredOptions],\n )\n\n // the floating panel forwards its node here, for the focus-leaves-the-widget check on blur\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n // single dismiss path: clears search + type-ahead buffer, marks the field touched, optionally refocuses\n const closeMenu = useCallback((refocus: boolean) => {\n setOpen(false)\n setSearchQuery('')\n window.clearTimeout(typeahead.current.timer)\n typeahead.current.buffer = ''\n fieldBlur.current?.()\n if (refocus) triggerRef.current?.focus()\n }, [])\n\n // on open: highlight the selected option (or first enabled), focus the search box if searchable\n useEffect(() => {\n if (!open) return\n const selIdx = filteredOptions.findIndex((o) => o.value === currentValue)\n setHighlightedIndex(\n selIdx >= 0 && !filteredOptions[selIdx].disabled ? selIdx : findEnabled(0, 1),\n )\n if (searchable) requestAnimationFrame(() => searchInputRef.current?.focus())\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n // keep the highlighted option scrolled into view\n useEffect(() => {\n if (!open || highlightedIndex < 0) return\n document.getElementById(optionId(highlightedIndex))?.scrollIntoView?.({ block: 'nearest' })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, highlightedIndex])\n\n // when the search filter changes, re-anchor the highlight to the first match\n useEffect(() => {\n if (open && searchable) setHighlightedIndex(findEnabled(0, 1))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchQuery])\n\n // if the option count changes while open (async load / list shrink), keep the highlight in range\n useEffect(() => {\n if (open) setHighlightedIndex((i) => (i < filteredOptions.length ? i : findEnabled(0, 1)))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filteredOptions.length])\n\n const openMenu = () => {\n if (!disabled) setOpen(true)\n }\n const selectOption = (opt: SelectOption | undefined) => {\n if (!opt || opt.disabled) return\n commit(opt.value)\n closeMenu(true)\n }\n const moveHighlight = (delta: number) => {\n setHighlightedIndex((cur) => {\n const start = cur < 0 ? (delta > 0 ? 0 : filteredOptions.length - 1) : cur + delta\n const found = findEnabled(start, delta)\n return found === -1 ? cur : found\n })\n }\n\n // type-ahead (non-searchable): jump to the option whose label starts with the typed buffer\n const handleTypeahead = (char: string) => {\n const t = typeahead.current\n window.clearTimeout(t.timer)\n t.buffer += char.toLowerCase()\n t.timer = window.setTimeout(() => (t.buffer = ''), 500)\n const match = filteredOptions.findIndex(\n (o) => !o.disabled && o.label.toLowerCase().startsWith(t.buffer),\n )\n if (match >= 0) setHighlightedIndex(match)\n }\n\n const handleKeyDown = (event: ReactKeyboardEvent) => {\n if (disabled) return\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n open ? moveHighlight(1) : openMenu()\n break\n case 'ArrowUp':\n event.preventDefault()\n open ? moveHighlight(-1) : openMenu()\n break\n case 'Enter':\n event.preventDefault()\n if (!open) openMenu()\n else selectOption(filteredOptions[highlightedIndex])\n break\n case ' ':\n // Space opens a closed menu (any mode); selects only when open & not searchable\n // (so a focused search box can still type spaces)\n if (!open) {\n event.preventDefault()\n openMenu()\n } else if (!searchable) {\n event.preventDefault()\n selectOption(filteredOptions[highlightedIndex])\n }\n break\n case 'Escape':\n if (open) {\n event.preventDefault()\n event.stopPropagation() // don't let FloatingPanel's own Escape also fire closeMenu/onBlur\n closeMenu(true)\n }\n break\n case 'Tab':\n // refocus the trigger so Tab continues from the field's visual location, not the portaled\n // search input's DOM position (end of <body>); don't preventDefault — let Tab move on\n if (open) closeMenu(true)\n break\n case 'Home':\n if (open) {\n event.preventDefault()\n setHighlightedIndex(findEnabled(0, 1))\n }\n break\n case 'End':\n if (open) {\n event.preventDefault()\n setHighlightedIndex(findEnabled(filteredOptions.length - 1, -1))\n }\n break\n default:\n if (\n !searchable &&\n open &&\n event.key.length === 1 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey\n ) {\n handleTypeahead(event.key)\n }\n }\n }\n\n const handleTriggerBlur = (event: FocusEvent<HTMLDivElement>) => {\n // mark the form field touched only when focus leaves the whole widget (not into the popover)\n const next = event.relatedTarget as Node | null\n if (next && (popoverRef.current?.contains(next) || triggerRef.current?.contains(next))) return\n bound?.onBlur(event as unknown as FocusEvent<HTMLInputElement>)\n }\n\n const handleClear = (event: ReactMouseEvent) => {\n event.stopPropagation()\n commit('')\n triggerRef.current?.focus()\n }\n\n const activeId = open && highlightedIndex >= 0 ? optionId(highlightedIndex) : undefined\n const iconSize: 'sm' | 'md' = size === 'sm' ? 'sm' : 'md'\n // chevron size per field size: sm 16 · md 14 · lg 12\n const chevronPx = size === 'sm' ? 16 : size === 'md' ? 14 : 12\n\n return (\n <div\n className={clsx(\n styles.field,\n styles[size],\n fullWidth && styles.fullWidth,\n resolvedError && styles.error,\n disabled && styles.disabled,\n className,\n )}\n style={style}\n >\n {label != null && (\n <span\n id={labelId}\n className={styles.label}\n onClick={() => !disabled && triggerRef.current?.focus()}\n >\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </span>\n )}\n\n <div\n ref={setTriggerRef}\n id={id}\n // `name` lets the form's scroll-to-error find + focus this field\n {...(name ? { name } : {})}\n role=\"combobox\"\n tabIndex={disabled ? -1 : 0}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={searchable ? undefined : activeId}\n aria-labelledby={label != null ? labelId : undefined}\n aria-disabled={disabled || undefined}\n aria-required={required || undefined}\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n className={clsx(styles.control, open && styles.open)}\n onClick={() => (open ? closeMenu(false) : openMenu())}\n onKeyDown={handleKeyDown}\n onBlur={handleTriggerBlur}\n >\n <span className={clsx(styles.value, !hasValue && styles.placeholder)}>\n {selected?.icon != null && (\n <span className={styles.valueIcon}>{renderIcon(selected.icon, iconSize)}</span>\n )}\n <span className={styles.valueLabel}>\n {selected ? selected.label : (placeholder ?? t('select.placeholder'))}\n </span>\n </span>\n\n {clearable && currentValue !== '' && !disabled && (\n <button\n type=\"button\"\n className={styles.clear}\n aria-label={t('select.clear')}\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleClear}\n >\n <Icon name=\"CloseCircle\" size=\"sm\" />\n </button>\n )}\n\n <Icon\n name=\"ArrowDown4\"\n className={styles.chevron}\n style={{ width: chevronPx, height: chevronPx }}\n aria-hidden=\"true\"\n />\n </div>\n\n <FloatingPanel\n ref={popoverRef}\n open={open}\n triggerRef={triggerRef}\n onClose={closeMenu}\n matchTriggerWidth\n className={styles.popover}\n >\n {searchable && (\n <div className={styles.search}>\n <Icon name=\"SearchNormal\" size=\"sm\" className={styles.searchIcon} aria-hidden=\"true\" />\n <input\n ref={searchInputRef}\n className={styles.searchInput}\n type=\"text\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listboxId}\n aria-activedescendant={activeId}\n aria-autocomplete=\"list\"\n aria-label={searchPh}\n placeholder={searchPh}\n value={searchQuery}\n spellCheck={false}\n onChange={(e) => {\n setSearchQuery(e.target.value)\n onSearchChange?.(e.target.value)\n }}\n onKeyDown={handleKeyDown}\n />\n </div>\n )}\n\n {/* the listbox always carries `listboxId` (even when empty) so aria-controls never dangles */}\n <List\n role=\"listbox\"\n id={listboxId}\n aria-labelledby={label != null ? labelId : undefined}\n size={size}\n className={styles.listbox}\n // clear the mouse highlight when the pointer leaves the list (no lingering hover)\n onMouseLeave={() => setHighlightedIndex(-1)}\n >\n {loading ? (\n <div className={styles.loading}>\n <Loader size=\"sm\" />\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {loadingText ?? t('common.loading')}\n </Typography>\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className={styles.noOptions}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {noOptionsText == null\n ? t('select.noOptions')\n : typeof noOptionsText === 'function'\n ? noOptionsText(searchQuery)\n : noOptionsText}\n </Typography>\n </div>\n ) : (\n filteredOptions.map((opt, index) => {\n const isSelected = opt.value === currentValue\n return (\n <ListItem\n key={opt.value}\n id={optionId(index)}\n role=\"option\"\n tabIndex={-1}\n aria-selected={isSelected}\n aria-current={undefined}\n clickable\n selected={isSelected}\n disabled={opt.disabled}\n icon={opt.icon}\n className={clsx(index === highlightedIndex && styles.active)}\n trailing={\n isSelected && showSelectedTick ? (\n <Icon name=\"TickCircle\" size=\"sm\" />\n ) : undefined\n }\n onMouseEnter={() => !opt.disabled && setHighlightedIndex(index)}\n onClick={() => selectOption(opt)}\n >\n {opt.label}\n </ListItem>\n )\n })\n )}\n </List>\n </FloatingPanel>\n\n {resolvedHelperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={resolvedError ? 'error' : 'muted'}\n className={styles.helper}\n >\n {resolvedHelperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["ICON_NAME_SET","ICON_NAMES","renderIcon","icon","size","jsx","Icon","Select","forwardRef","label","options","error","helperText","required","fullWidth","disabled","value","defaultValue","onChange","placeholder","clearable","searchable","searchPlaceholder","onSearchChange","loading","loadingText","noOptionsText","showSelectedTick","name","idProp","className","style","ref","reactId","useId","id","labelId","listboxId","helperId","optionId","index","t","useT","searchPh","form","useFormContext","isFormBound","bound","externalValue","isControlled","internal","setInternal","useState","currentValue","resolvedError","resolvedHelperText","selected","o","hasValue","commit","next","triggerRef","useRef","searchInputRef","typeahead","fieldBlur","open","setOpen","searchQuery","setSearchQuery","highlightedIndex","setHighlightedIndex","setTriggerRef","useCallback","node","filteredOptions","useMemo","q","findEnabled","start","delta","i","popoverRef","closeMenu","refocus","_a","_b","useEffect","selIdx","openMenu","selectOption","opt","moveHighlight","cur","found","handleTypeahead","char","match","handleKeyDown","event","handleTriggerBlur","handleClear","activeId","iconSize","chevronPx","jsxs","clsx","styles","Typography","FloatingPanel","List","Loader","isSelected","ListItem"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyBMA,KAAgB,IAAI,IAAYC,EAAU;AAiBhD,SAASC,GAAWC,GAA4BC,GAA8B;AAC5E,SAAID,KAAQ,OAAa,OACrB,OAAOA,KAAS,YAAYH,GAAc,IAAIG,CAAI,IAC7C,gBAAAE,EAACC,GAAA,EAAK,MAAMH,GAAkB,MAAAC,EAAA,CAAY,IAC5CD;AACT;AAyEO,MAAMI,KAASC,GAAwC,SAC5D;AAAA,EACE,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAN,IAAO;AAAA,EACP,OAAAO;AAAA,EACA,YAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,KAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC,KAAY;AAAA,EACZ,YAAAC,IAAa;AAAA,EACb,mBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,SAAAC,KAAU;AAAA,EACV,aAAAC;AAAA,EACA,eAAAC;AAAA,EACA,kBAAAC,KAAmB;AAAA,EACnB,MAAAC;AAAA,EACA,IAAIC;AAAA,EACJ,WAAAC;AAAA,EACA,OAAAC;AACF,GACAC,GACA;AACA,QAAMC,KAAUC,GAAA,GACVC,IAAKN,MAAUI,IACfG,IAAU,GAAGD,CAAE,UACfE,IAAY,GAAGF,CAAE,YACjBG,IAAW,GAAGH,CAAE,WAChBI,IAAW,CAACC,MAAkB,GAAGL,CAAE,QAAQK,CAAK,IAEhDC,IAAIC,GAAA,GACJC,IAAWrB,MAAqBmB,EAAE,eAAe,GAGjDG,IAAOC,GAAA,GACPC,IAAc,GAAQF,KAAQhB,IAC9BmB,IAAQD,IAAcF,EAAM,MAAMhB,CAAK,IAAI,QAC3CoB,KACJhC,MAAU,SACNA,IACA8B,IACIF,EAAM,OAAOhB,CAAK,KAA4B,KAChD,QACFqB,IAAejC,MAAU,UAAa8B,GACtC,CAACI,IAAUC,EAAW,IAAIC,EAAiBnC,MAAgB,EAAE,GAC7DoC,IAAeJ,IAAeD,KAAiBE,IAE/CI,IAAgB3C,OAASoC,KAAA,gBAAAA,EAAO,UAAS,IACzCQ,IAAqB3C,OAAcmC,KAAA,gBAAAA,EAAO,aAE1CS,IAAW9C,EAAQ,KAAK,CAAC+C,MAAMA,EAAE,UAAUJ,CAAY,GACvDK,KAAWF,KAAY,MAEvBG,KAAS,CAACC,MAAiB;AAC/B,IAAKX,KAAcE,GAAYS,CAAI,GAC/Bd,KAAaF,EAAM,SAAShB,GAAOgC,CAAI,GAC3C1C,KAAA,QAAAA,EAAW0C;AAAA,EACb,GAGMC,IAAaC,EAA8B,IAAI,GAC/CC,KAAiBD,EAAgC,IAAI,GACrDE,IAAYF,EAAO,EAAE,QAAQ,IAAI,OAAO,GAAG,GAE3CG,IAAYH,EAAiC,MAAS;AAC5D,EAAAG,EAAU,UAAUlB,IAAQ,MAAMA,EAAM,OAAO,CAAA,CAAkC,IAAI;AACrF,QAAM,CAACmB,GAAMC,EAAO,IAAIf,EAAS,EAAK,GAChC,CAACgB,GAAaC,EAAc,IAAIjB,EAAS,EAAE,GAC3C,CAACkB,GAAkBC,CAAmB,IAAInB,EAAS,EAAE,GAErDoB,KAAgBC;AAAA,IACpB,CAACC,MAAgC;AAC/B,MAAAb,EAAW,UAAUa,GACjB,OAAO1C,KAAQ,aAAYA,EAAI0C,CAAI,IAC9B1C,MAAMA,EAA2C,UAAU0C;AAAA,IACtE;AAAA,IACA,CAAC1C,CAAG;AAAA,EAAA,GAKA2C,IAAkBC,GAAQ,MAAM;AACpC,QAAI,CAACvD,KAAcE,KAAkB,CAAC6C,EAAY,KAAA,EAAQ,QAAO1D;AACjE,UAAMmE,IAAIT,EAAY,KAAA,EAAO,YAAA;AAC7B,WAAO1D,EAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,YAAA,EAAc,SAASmE,CAAC,CAAC;AAAA,EAChE,GAAG,CAACxD,GAAYE,GAAgB6C,GAAa1D,CAAO,CAAC,GAE/CoE,IAAcL;AAAA,IAClB,CAACM,GAAeC,MAAkB;AAChC,UAAIC,IAAIF;AACR,aAAOE,KAAK,KAAKA,IAAIN,EAAgB,UAAQ;AAC3C,YAAI,CAACA,EAAgBM,CAAC,EAAE,SAAU,QAAOA;AACzC,QAAAA,KAAKD;AAAA,MACP;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAACL,CAAe;AAAA,EAAA,GAIZO,KAAapB,EAA8B,IAAI,GAG/CqB,IAAYV,EAAY,CAACW,MAAqB;;AAClD,IAAAjB,GAAQ,EAAK,GACbE,GAAe,EAAE,GACjB,OAAO,aAAaL,EAAU,QAAQ,KAAK,GAC3CA,EAAU,QAAQ,SAAS,KAC3BqB,IAAApB,EAAU,YAAV,QAAAoB,EAAA,KAAApB,IACImB,OAASE,IAAAzB,EAAW,YAAX,QAAAyB,EAAoB;AAAA,EACnC,GAAG,CAAA,CAAE;AAGL,EAAAC,EAAU,MAAM;AACd,QAAI,CAACrB,EAAM;AACX,UAAMsB,IAASb,EAAgB,UAAU,CAAC,MAAM,EAAE,UAAUtB,CAAY;AACxE,IAAAkB;AAAA,MACEiB,KAAU,KAAK,CAACb,EAAgBa,CAAM,EAAE,WAAWA,IAASV,EAAY,GAAG,CAAC;AAAA,IAAA,GAE1EzD,KAAY,sBAAsB,MAAA;;AAAM,cAAAgE,IAAAtB,GAAe,YAAf,gBAAAsB,EAAwB;AAAA,KAAO;AAAA,EAE7E,GAAG,CAACnB,CAAI,CAAC,GAGTqB,EAAU,MAAM;;AACd,IAAI,CAACrB,KAAQI,IAAmB,MAChCgB,KAAAD,IAAA,SAAS,eAAe9C,EAAS+B,CAAgB,CAAC,MAAlD,gBAAAe,EAAqD,mBAArD,QAAAC,EAAA,KAAAD,GAAsE,EAAE,OAAO;EAEjF,GAAG,CAACnB,GAAMI,CAAgB,CAAC,GAG3BiB,EAAU,MAAM;AACd,IAAIrB,KAAQ7C,KAAYkD,EAAoBO,EAAY,GAAG,CAAC,CAAC;AAAA,EAE/D,GAAG,CAACV,CAAW,CAAC,GAGhBmB,EAAU,MAAM;AACd,IAAIrB,KAAMK,EAAoB,CAACU,MAAOA,IAAIN,EAAgB,SAASM,IAAIH,EAAY,GAAG,CAAC,CAAE;AAAA,EAE3F,GAAG,CAACH,EAAgB,MAAM,CAAC;AAE3B,QAAMc,IAAW,MAAM;AACrB,IAAK1E,KAAUoD,GAAQ,EAAI;AAAA,EAC7B,GACMuB,IAAe,CAACC,MAAkC;AACtD,IAAI,CAACA,KAAOA,EAAI,aAChBhC,GAAOgC,EAAI,KAAK,GAChBR,EAAU,EAAI;AAAA,EAChB,GACMS,KAAgB,CAACZ,MAAkB;AACvC,IAAAT,EAAoB,CAACsB,MAAQ;AAC3B,YAAMd,IAAQc,IAAM,IAAKb,IAAQ,IAAI,IAAIL,EAAgB,SAAS,IAAKkB,IAAMb,GACvEc,IAAQhB,EAAYC,GAAOC,CAAK;AACtC,aAAOc,MAAU,KAAKD,IAAMC;AAAA,IAC9B,CAAC;AAAA,EACH,GAGMC,KAAkB,CAACC,MAAiB;AACxC,UAAMvD,IAAIuB,EAAU;AACpB,WAAO,aAAavB,EAAE,KAAK,GAC3BA,EAAE,UAAUuD,EAAK,YAAA,GACjBvD,EAAE,QAAQ,OAAO,WAAW,MAAOA,EAAE,SAAS,IAAK,GAAG;AACtD,UAAMwD,IAAQtB,EAAgB;AAAA,MAC5B,CAAClB,MAAM,CAACA,EAAE,YAAYA,EAAE,MAAM,YAAA,EAAc,WAAWhB,EAAE,MAAM;AAAA,IAAA;AAEjE,IAAIwD,KAAS,KAAG1B,EAAoB0B,CAAK;AAAA,EAC3C,GAEMC,KAAgB,CAACC,MAA8B;AACnD,QAAI,CAAApF;AACJ,cAAQoF,EAAM,KAAA;AAAA,QACZ,KAAK;AACH,UAAAA,EAAM,eAAA,GACNjC,IAAO0B,GAAc,CAAC,IAAIH,EAAA;AAC1B;AAAA,QACF,KAAK;AACH,UAAAU,EAAM,eAAA,GACNjC,IAAO0B,GAAc,EAAE,IAAIH,EAAA;AAC3B;AAAA,QACF,KAAK;AACH,UAAAU,EAAM,eAAA,GACDjC,IACAwB,EAAaf,EAAgBL,CAAgB,CAAC,IADxCmB,EAAA;AAEX;AAAA,QACF,KAAK;AAGH,UAAKvB,IAGO7C,MACV8E,EAAM,eAAA,GACNT,EAAaf,EAAgBL,CAAgB,CAAC,MAJ9C6B,EAAM,eAAA,GACNV,EAAA;AAKF;AAAA,QACF,KAAK;AACH,UAAIvB,MACFiC,EAAM,eAAA,GACNA,EAAM,gBAAA,GACNhB,EAAU,EAAI;AAEhB;AAAA,QACF,KAAK;AAGH,UAAIjB,OAAgB,EAAI;AACxB;AAAA,QACF,KAAK;AACH,UAAIA,MACFiC,EAAM,eAAA,GACN5B,EAAoBO,EAAY,GAAG,CAAC,CAAC;AAEvC;AAAA,QACF,KAAK;AACH,UAAIZ,MACFiC,EAAM,eAAA,GACN5B,EAAoBO,EAAYH,EAAgB,SAAS,GAAG,EAAE,CAAC;AAEjE;AAAA,QACF;AACE,UACE,CAACtD,KACD6C,KACAiC,EAAM,IAAI,WAAW,KACrB,CAACA,EAAM,WACP,CAACA,EAAM,WACP,CAACA,EAAM,UAEPJ,GAAgBI,EAAM,GAAG;AAAA,MAC3B;AAAA,EAEN,GAEMC,KAAoB,CAACD,MAAsC;;AAE/D,UAAMvC,IAAOuC,EAAM;AACnB,IAAIvC,OAASyB,IAAAH,GAAW,YAAX,QAAAG,EAAoB,SAASzB,OAAS0B,IAAAzB,EAAW,YAAX,QAAAyB,EAAoB,SAAS1B,OAChFb,KAAA,QAAAA,EAAO,OAAOoD;AAAA,EAChB,GAEME,KAAc,CAACF,MAA2B;;AAC9C,IAAAA,EAAM,gBAAA,GACNxC,GAAO,EAAE,IACT0B,IAAAxB,EAAW,YAAX,QAAAwB,EAAoB;AAAA,EACtB,GAEMiB,KAAWpC,KAAQI,KAAoB,IAAI/B,EAAS+B,CAAgB,IAAI,QACxEiC,KAAwBnG,MAAS,OAAO,OAAO,MAE/CoG,KAAYpG,MAAS,OAAO,KAAKA,MAAS,OAAO,KAAK;AAE5D,SACE,gBAAAqG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACTC,EAAO;AAAA,QACPA,EAAOvG,CAAI;AAAA,QACXU,MAAa6F,EAAO;AAAA,QACpBrD,KAAiBqD,EAAO;AAAA,QACxB5F,KAAY4F,EAAO;AAAA,QACnB7E;AAAA,MAAA;AAAA,MAEF,OAAAC;AAAA,MAEC,UAAA;AAAA,QAAAtB,KAAS,QACR,gBAAAgG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAIrE;AAAA,YACJ,WAAWuE,EAAO;AAAA,YAClB,SAAS,MAAA;;AAAM,sBAAC5F,OAAYsE,IAAAxB,EAAW,YAAX,gBAAAwB,EAAoB;AAAA;AAAA,YAEhD,UAAA;AAAA,cAAA,gBAAAhF,EAACuG,KAAW,IAAG,QAAO,SAAQ,aAAY,OAAM,SAC7C,UAAAnG,EAAA,CACH;AAAA,cACCI,uBACE,QAAA,EAAK,WAAW8F,EAAO,UAAU,eAAY,QAAO,UAAA,IAAA,CAErD;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAKN,gBAAAF;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAKjC;AAAA,YACL,IAAArC;AAAA,YAEC,GAAIP,IAAO,EAAE,MAAAA,EAAA,IAAS,CAAA;AAAA,YACvB,MAAK;AAAA,YACL,UAAUb,IAAW,KAAK;AAAA,YAC1B,iBAAc;AAAA,YACd,iBAAemD;AAAA,YACf,iBAAeA,IAAO7B,IAAY;AAAA,YAClC,yBAAuBhB,IAAa,SAAYiF;AAAA,YAChD,mBAAiB7F,KAAS,OAAO2B,IAAU;AAAA,YAC3C,iBAAerB,KAAY;AAAA,YAC3B,iBAAeF,KAAY;AAAA,YAC3B,gBAAcyC,KAAiB;AAAA,YAC/B,oBAAkBC,KAAsB,OAAOjB,IAAW;AAAA,YAC1D,WAAWoE,EAAKC,EAAO,SAASzC,KAAQyC,EAAO,IAAI;AAAA,YACnD,SAAS,MAAOzC,IAAOiB,EAAU,EAAK,IAAIM,EAAA;AAAA,YAC1C,WAAWS;AAAA,YACX,QAAQE;AAAA,YAER,UAAA;AAAA,cAAA,gBAAAK,EAAC,QAAA,EAAK,WAAWC,EAAKC,EAAO,OAAO,CAACjD,MAAYiD,EAAO,WAAW,GAChE,UAAA;AAAA,iBAAAnD,KAAA,gBAAAA,EAAU,SAAQ,QACjB,gBAAAnD,EAAC,QAAA,EAAK,WAAWsG,EAAO,WAAY,UAAAzG,GAAWsD,EAAS,MAAM+C,EAAQ,EAAA,CAAE;AAAA,gBAE1E,gBAAAlG,EAAC,QAAA,EAAK,WAAWsG,EAAO,YACrB,UAAAnD,IAAWA,EAAS,QAASrC,MAAesB,EAAE,oBAAoB,EAAA,CACrE;AAAA,cAAA,GACF;AAAA,cAECrB,MAAaiC,MAAiB,MAAM,CAACtC,KACpC,gBAAAV;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAWsG,EAAO;AAAA,kBAClB,cAAYlE,EAAE,cAAc;AAAA,kBAC5B,UAAU;AAAA,kBACV,aAAa,CAAC,MAAM,EAAE,eAAA;AAAA,kBACtB,SAAS4D;AAAA,kBAET,UAAA,gBAAAhG,EAACC,GAAA,EAAK,MAAK,eAAc,MAAK,KAAA,CAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,cAIvC,gBAAAD;AAAA,gBAACC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAWqG,EAAO;AAAA,kBAClB,OAAO,EAAE,OAAOH,IAAW,QAAQA,GAAA;AAAA,kBACnC,eAAY;AAAA,gBAAA;AAAA,cAAA;AAAA,YACd;AAAA,UAAA;AAAA,QAAA;AAAA,QAGF,gBAAAC;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,KAAK3B;AAAA,YACL,MAAAhB;AAAA,YACA,YAAAL;AAAA,YACA,SAASsB;AAAA,YACT,mBAAiB;AAAA,YACjB,WAAWwB,EAAO;AAAA,YAEjB,UAAA;AAAA,cAAAtF,KACC,gBAAAoF,EAAC,OAAA,EAAI,WAAWE,EAAO,QACrB,UAAA;AAAA,gBAAA,gBAAAtG,EAACC,GAAA,EAAK,MAAK,gBAAe,MAAK,MAAK,WAAWqG,EAAO,YAAY,eAAY,OAAA,CAAO;AAAA,gBACrF,gBAAAtG;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,KAAK0D;AAAA,oBACL,WAAW4C,EAAO;AAAA,oBAClB,MAAK;AAAA,oBACL,MAAK;AAAA,oBACL,iBAAc;AAAA,oBACd,iBAAetE;AAAA,oBACf,yBAAuBiE;AAAA,oBACvB,qBAAkB;AAAA,oBAClB,cAAY3D;AAAA,oBACZ,aAAaA;AAAA,oBACb,OAAOyB;AAAA,oBACP,YAAY;AAAA,oBACZ,UAAU,CAAC,MAAM;AACf,sBAAAC,GAAe,EAAE,OAAO,KAAK,GAC7B9C,KAAA,QAAAA,EAAiB,EAAE,OAAO;AAAA,oBAC5B;AAAA,oBACA,WAAW2E;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACb,GACF;AAAA,cAIF,gBAAA7F;AAAA,gBAACyG;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,IAAIzE;AAAA,kBACJ,mBAAiB5B,KAAS,OAAO2B,IAAU;AAAA,kBAC3C,MAAAhC;AAAA,kBACA,WAAWuG,EAAO;AAAA,kBAElB,cAAc,MAAMpC,EAAoB,EAAE;AAAA,kBAEzC,UAAA/C,KACC,gBAAAiF,EAAC,OAAA,EAAI,WAAWE,EAAO,SACrB,UAAA;AAAA,oBAAA,gBAAAtG,EAAC0G,IAAA,EAAO,MAAK,KAAA,CAAK;AAAA,oBAClB,gBAAA1G,EAACuG,GAAA,EAAW,IAAG,QAAO,SAAQ,aAAY,OAAM,SAC7C,UAAAnF,MAAegB,EAAE,gBAAgB,EAAA,CACpC;AAAA,kBAAA,EAAA,CACF,IACEkC,EAAgB,WAAW,sBAC5B,OAAA,EAAI,WAAWgC,EAAO,WACrB,4BAACC,GAAA,EAAW,IAAG,QAAO,SAAQ,aAAY,OAAM,SAC7C,UAAAlF,KAAiB,OACde,EAAE,kBAAkB,IACpB,OAAOf,KAAkB,aACvBA,EAAc0C,CAAW,IACzB1C,EAAA,CACR,GACF,IAEAiD,EAAgB,IAAI,CAACgB,GAAKnD,MAAU;AAClC,0BAAMwE,IAAarB,EAAI,UAAUtC;AACjC,2BACE,gBAAAhD;AAAA,sBAAC4G;AAAA,sBAAA;AAAA,wBAEC,IAAI1E,EAASC,CAAK;AAAA,wBAClB,MAAK;AAAA,wBACL,UAAU;AAAA,wBACV,iBAAewE;AAAA,wBACf,gBAAc;AAAA,wBACd,WAAS;AAAA,wBACT,UAAUA;AAAA,wBACV,UAAUrB,EAAI;AAAA,wBACd,MAAMA,EAAI;AAAA,wBACV,WAAWe,EAAKlE,MAAU8B,KAAoBqC,EAAO,MAAM;AAAA,wBAC3D,UACEK,KAAcrF,KACZ,gBAAAtB,EAACC,KAAK,MAAK,cAAa,MAAK,KAAA,CAAK,IAChC;AAAA,wBAEN,cAAc,MAAM,CAACqF,EAAI,YAAYpB,EAAoB/B,CAAK;AAAA,wBAC9D,SAAS,MAAMkD,EAAaC,CAAG;AAAA,wBAE9B,UAAAA,EAAI;AAAA,sBAAA;AAAA,sBAnBAA,EAAI;AAAA,oBAAA;AAAA,kBAsBf,CAAC;AAAA,gBAAA;AAAA,cAAA;AAAA,YAEL;AAAA,UAAA;AAAA,QAAA;AAAA,QAGDpC,KAAsB,QACrB,gBAAAlD;AAAA,UAACuG;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,IAAItE;AAAA,YACJ,SAAQ;AAAA,YACR,OAAOgB,IAAgB,UAAU;AAAA,YACjC,WAAWqD,EAAO;AAAA,YAEjB,UAAApD;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const s=require("react/jsx-runtime"),n=require("react"),M=require("clsx"),Te=require("./formContext-bTWrqdEV.cjs"),De=require("./FloatingPanel-U6sGYiSK.cjs"),Le=require("./names-C2Yj1p3u.cjs"),T=require("./Icon-CXTl_QAP.cjs"),Ce=require("./List-CNz2M3-q.cjs"),Ee=require("./ListItem-RH-D-Wey.cjs"),Se=require("./Loader-D1MtlQOH.cjs"),O=require("./Typography-BFatE1_A.cjs"),Re=require("./ConfigProvider-ByOFXVyP.cjs"),Me="_field_17o9l_1",Oe="_fullWidth_17o9l_7",Pe="_label_17o9l_13",Ae="_required_17o9l_22",Be="_control_17o9l_28",Ke="_open_17o9l_47",We="_error_17o9l_52",Fe="_disabled_17o9l_60",Ve="_value_17o9l_70",$e="_valueIcon_17o9l_78",He="_valueLabel_17o9l_82",Qe="_placeholder_17o9l_87",ze="_clear_17o9l_92",Ue="_chevron_17o9l_111",Ge="_sm_17o9l_121",Je="_md_17o9l_125",Xe="_lg_17o9l_129",Ye="_helper_17o9l_134",Ze="_popover_17o9l_139",el="_search_17o9l_147",ll="_searchIcon_17o9l_156",sl="_searchInput_17o9l_160",ol="_listbox_17o9l_176",rl="_active_17o9l_184",tl="_noOptions_17o9l_188",nl="_loading_17o9l_194",o={field:Me,fullWidth:Oe,label:Pe,required:Ae,control:Be,open:Ke,error:We,disabled:Fe,value:Ve,valueIcon:$e,valueLabel:He,placeholder:Qe,clear:ze,chevron:Ue,sm:Ge,md:Je,lg:Xe,helper:Ye,popover:Ze,search:el,searchIcon:ll,searchInput:sl,listbox:ol,active:rl,noOptions:tl,loading:nl},al=new Set(Le.ICON_NAMES);function cl(m,h){return m==null?null:typeof m=="string"&&al.has(m)?s.jsx(T.Icon,{name:m,size:h}):m}const il=n.forwardRef(function({label:h,options:D,size:y="md",error:te,helperText:ne,required:Q=!1,fullWidth:ae=!0,disabled:p=!1,value:P,defaultValue:ce,onChange:A,placeholder:ie,clearable:ue=!0,searchable:u=!1,searchPlaceholder:de,onSearchChange:g,loading:fe=!1,loadingText:pe,noOptionsText:L,showSelectedTick:_e=!0,name:v,id:me,className:he,style:ve},j){const be=n.useId(),w=me??be,B=`${w}-label`,K=`${w}-listbox`,z=`${w}-helper`,W=e=>`${w}-opt-${e}`,N=Re.useT(),U=de??N("common.search"),C=Te.useFormContext(),E=!!(C&&v),c=E?C.field(v):void 0,xe=P!==void 0?P:E?C.values[v]??"":void 0,G=P!==void 0||E,[Ie,ye]=n.useState(ce??""),S=G?xe:Ie,F=te??(c==null?void 0:c.error)??!1,V=ne??(c==null?void 0:c.helperText),_=D.find(e=>e.value===S),ge=_!=null,J=e=>{G||ye(e),E&&C.setValue(v,e),A==null||A(e)},b=n.useRef(null),X=n.useRef(null),$=n.useRef({buffer:"",timer:0}),R=n.useRef(void 0);R.current=c?()=>c.onBlur({}):void 0;const[r,Y]=n.useState(!1),[x,Z]=n.useState(""),[d,i]=n.useState(-1),je=n.useCallback(e=>{b.current=e,typeof j=="function"?j(e):j&&(j.current=e)},[j]),a=n.useMemo(()=>{if(!u||g||!x.trim())return D;const e=x.trim().toLowerCase();return D.filter(l=>l.label.toLowerCase().includes(e))},[u,g,x,D]),I=n.useCallback((e,l)=>{let t=e;for(;t>=0&&t<a.length;){if(!a[t].disabled)return t;t+=l}return-1},[a]),ee=n.useRef(null),k=n.useCallback(e=>{var l,t;Y(!1),Z(""),window.clearTimeout($.current.timer),$.current.buffer="",(l=R.current)==null||l.call(R),e&&((t=b.current)==null||t.focus())},[]);n.useEffect(()=>{if(!r)return;const e=a.findIndex(l=>l.value===S);i(e>=0&&!a[e].disabled?e:I(0,1)),u&&requestAnimationFrame(()=>{var l;return(l=X.current)==null?void 0:l.focus()})},[r]),n.useEffect(()=>{var e,l;!r||d<0||(l=(e=document.getElementById(W(d)))==null?void 0:e.scrollIntoView)==null||l.call(e,{block:"nearest"})},[r,d]),n.useEffect(()=>{r&&u&&i(I(0,1))},[x]),n.useEffect(()=>{r&&i(e=>e<a.length?e:I(0,1))},[a.length]);const q=()=>{p||Y(!0)},H=e=>{!e||e.disabled||(J(e.value),k(!0))},le=e=>{i(l=>{const t=l<0?e>0?0:a.length-1:l+e,f=I(t,e);return f===-1?l:f})},we=e=>{const l=$.current;window.clearTimeout(l.timer),l.buffer+=e.toLowerCase(),l.timer=window.setTimeout(()=>l.buffer="",500);const t=a.findIndex(f=>!f.disabled&&f.label.toLowerCase().startsWith(l.buffer));t>=0&&i(t)},se=e=>{if(!p)switch(e.key){case"ArrowDown":e.preventDefault(),r?le(1):q();break;case"ArrowUp":e.preventDefault(),r?le(-1):q();break;case"Enter":e.preventDefault(),r?H(a[d]):q();break;case" ":r?u||(e.preventDefault(),H(a[d])):(e.preventDefault(),q());break;case"Escape":r&&(e.preventDefault(),e.stopPropagation(),k(!0));break;case"Tab":r&&k(!0);break;case"Home":r&&(e.preventDefault(),i(I(0,1)));break;case"End":r&&(e.preventDefault(),i(I(a.length-1,-1)));break;default:!u&&r&&e.key.length===1&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&we(e.key)}},Ne=e=>{var t,f;const l=e.relatedTarget;l&&((t=ee.current)!=null&&t.contains(l)||(f=b.current)!=null&&f.contains(l))||c==null||c.onBlur(e)},ke=e=>{var l;e.stopPropagation(),J(""),(l=b.current)==null||l.focus()},oe=r&&d>=0?W(d):void 0,qe=y==="sm"?"sm":"md",re=y==="sm"?16:y==="md"?14:12;return s.jsxs("div",{className:M.clsx(o.field,o[y],ae&&o.fullWidth,F&&o.error,p&&o.disabled,he),style:ve,children:[h!=null&&s.jsxs("span",{id:B,className:o.label,onClick:()=>{var e;return!p&&((e=b.current)==null?void 0:e.focus())},children:[s.jsx(O.Typography,{as:"span",variant:"bodySmall",color:"muted",children:h}),Q&&s.jsx("span",{className:o.required,"aria-hidden":"true",children:"*"})]}),s.jsxs("div",{ref:je,id:w,...v?{name:v}:{},role:"combobox",tabIndex:p?-1:0,"aria-haspopup":"listbox","aria-expanded":r,"aria-controls":r?K:void 0,"aria-activedescendant":u?void 0:oe,"aria-labelledby":h!=null?B:void 0,"aria-disabled":p||void 0,"aria-required":Q||void 0,"aria-invalid":F||void 0,"aria-describedby":V!=null?z:void 0,className:M.clsx(o.control,r&&o.open),onClick:()=>r?k(!1):q(),onKeyDown:se,onBlur:Ne,children:[s.jsxs("span",{className:M.clsx(o.value,!ge&&o.placeholder),children:[(_==null?void 0:_.icon)!=null&&s.jsx("span",{className:o.valueIcon,children:cl(_.icon,qe)}),s.jsx("span",{className:o.valueLabel,children:_?_.label:ie??N("select.placeholder")})]}),ue&&S!==""&&!p&&s.jsx("button",{type:"button",className:o.clear,"aria-label":N("select.clear"),tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:ke,children:s.jsx(T.Icon,{name:"CloseCircle",size:"sm"})}),s.jsx(T.Icon,{name:"ArrowDown4",className:o.chevron,style:{width:re,height:re},"aria-hidden":"true"})]}),s.jsxs(De.FloatingPanel,{ref:ee,open:r,triggerRef:b,onClose:k,matchTriggerWidth:!0,className:o.popover,children:[u&&s.jsxs("div",{className:o.search,children:[s.jsx(T.Icon,{name:"SearchNormal",size:"sm",className:o.searchIcon,"aria-hidden":"true"}),s.jsx("input",{ref:X,className:o.searchInput,type:"text",role:"combobox","aria-expanded":"true","aria-controls":K,"aria-activedescendant":oe,"aria-autocomplete":"list","aria-label":U,placeholder:U,value:x,spellCheck:!1,onChange:e=>{Z(e.target.value),g==null||g(e.target.value)},onKeyDown:se})]}),s.jsx(Ce.List,{role:"listbox",id:K,"aria-labelledby":h!=null?B:void 0,size:y,className:o.listbox,onMouseLeave:()=>i(-1),children:fe?s.jsxs("div",{className:o.loading,children:[s.jsx(Se.Loader,{size:"sm"}),s.jsx(O.Typography,{as:"span",variant:"bodySmall",color:"muted",children:pe??N("common.loading")})]}):a.length===0?s.jsx("div",{className:o.noOptions,children:s.jsx(O.Typography,{as:"span",variant:"bodySmall",color:"muted",children:L==null?N("select.noOptions"):typeof L=="function"?L(x):L})}):a.map((e,l)=>{const t=e.value===S;return s.jsx(Ee.ListItem,{id:W(l),role:"option",tabIndex:-1,"aria-selected":t,"aria-current":void 0,clickable:!0,selected:t,disabled:e.disabled,icon:e.icon,className:M.clsx(l===d&&o.active),trailing:t&&_e?s.jsx(T.Icon,{name:"TickCircle",size:"sm"}):void 0,onMouseEnter:()=>!e.disabled&&i(l),onClick:()=>H(e),children:e.label},e.value)})})]}),V!=null&&s.jsx(O.Typography,{as:"span",id:z,variant:"bodySmall",color:F?"error":"muted",className:o.helper,children:V})]})});exports.Select=il;
|
|
2
|
+
//# sourceMappingURL=Select-_6WogC0u.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Select-_6WogC0u.cjs","sources":["../src/components/Select/Select.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type FocusEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { useFormContext } from '../../form/formContext'\nimport { FloatingPanel } from '../FloatingPanel/FloatingPanel'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { Icon } from '../Icon'\nimport { List, ListItem } from '../List'\nimport { Loader } from '../Loader'\nimport { Typography } from '../Typography'\nimport styles from './Select.module.css'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\nexport type SelectSize = 'sm' | 'md' | 'lg'\n\n/** A single selectable option. */\nexport interface SelectOption {\n /** The value committed when this option is chosen. */\n value: string\n /** Display + search text. */\n label: string\n /** Greys out and blocks selecting this option. */\n disabled?: boolean\n /** Leading icon — a known `IconName` (rendered as `<Icon>`) or any node. */\n icon?: IconName | ReactNode\n}\n\n/** Renders an option's icon (an `IconName` becomes an `<Icon>`; anything else is used as-is). */\nfunction renderIcon(icon: IconName | ReactNode, size: 'sm' | 'md'): ReactNode {\n if (icon == null) return null\n if (typeof icon === 'string' && ICON_NAME_SET.has(icon))\n return <Icon name={icon as IconName} size={size} />\n return icon\n}\n\nexport interface SelectProps {\n /** Label rendered above the field. */\n label?: ReactNode\n /** The selectable options. */\n options: SelectOption[]\n /** Preset size — control height, font and option density. */\n size?: SelectSize\n /** Marks the field invalid: red border/ring + the `helperText` in the error color. */\n error?: boolean\n /** Helper / validation text under the field. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Stretches the field to fill its container width. Defaults to `true`. */\n fullWidth?: boolean\n /** Disables the field. */\n disabled?: boolean\n /** Controlled value — the chosen option's `value` (`''` = nothing selected). */\n value?: string\n /** Initial value for uncontrolled use. */\n defaultValue?: string\n /** Fires with the next value (`''` when cleared). */\n onChange?: (value: string) => void\n /** Text shown in the trigger when nothing is selected. Defaults to `\"Select…\"`. */\n placeholder?: string\n /** Shows a clear (×) button in the trigger when a value is set. Defaults to `true`. */\n clearable?: boolean\n /** Adds a search box inside the popover that filters options by label. */\n searchable?: boolean\n /** Placeholder for the search box. Defaults to `\"Search…\"`. */\n searchPlaceholder?: string\n /**\n * Fires with the search query as the user types. **Providing this switches off the built-in\n * local filtering** — you own `options` (e.g. fetch them from a server for the current query).\n */\n onSearchChange?: (query: string) => void\n /** Shows a loading indicator in the popover (e.g. while fetching server-side search results). */\n loading?: boolean\n /** Text shown next to the loader while `loading`. Defaults to `\"Loading…\"`. */\n loadingText?: ReactNode\n /**\n * Shown in the popover when no option matches. Defaults to `\"No options\"`. Pass a function\n * `(query) => node` to vary the message by the current search text — e.g. a \"Type to search\" hint\n * while it's empty vs a \"No results\" message after typing.\n */\n noOptionsText?: ReactNode | ((query: string) => ReactNode)\n /** Show the trailing tick on the selected option. Defaults to `true` (the row still gets its tint). */\n showSelectedTick?: boolean\n /** Form field name — auto-binds to a surrounding `<Form>` (value is the option's `value`). */\n name?: string\n /** Id for the trigger (label association). */\n id?: string\n className?: string\n style?: CSSProperties\n}\n\n/**\n * A labeled single-select. The trigger reuses TextField-style chrome (label, helper/error, sizes,\n * `required`, `fullWidth`, `disabled`); clicking it opens a `Dropdown`-style popover — portaled to\n * `<body>`, opening below (flipping above only when it would overflow), locking page scroll,\n * re-positioning on scroll/resize, matching the trigger width, and entering with the shared\n * opacity + translate animation. Options render as `ListItem`s in a `role=\"listbox\"`; the chosen\n * option is highlighted with a tick, disabled options are inert. Full keyboard support\n * (Arrow/Home/End to move, Enter/Space to select, Escape to close, type-ahead) and ARIA\n * (`listbox`/`option`, `aria-activedescendant`, `aria-expanded`). Optionally `searchable` (a filter\n * box) and `clearable` (a × to reset); pass `onSearchChange` to drive the search **server-side** (the\n * consumer owns `options` for the current query — local filtering is skipped) with a `loading`\n * indicator. Controlled (`value` + `onChange`) or uncontrolled\n * (`defaultValue`), and binds to a surrounding `<Form>` by `name` (value = the option's `value`;\n * validate with e.g. `z.string().min(1, 'Required')`). Token-only styling.\n */\nexport const Select = forwardRef<HTMLDivElement, SelectProps>(function Select(\n {\n label,\n options,\n size = 'md',\n error,\n helperText,\n required = false,\n fullWidth = true,\n disabled = false,\n value,\n defaultValue,\n onChange,\n placeholder,\n clearable = true,\n searchable = false,\n searchPlaceholder,\n onSearchChange,\n loading = false,\n loadingText,\n noOptionsText,\n showSelectedTick = true,\n name,\n id: idProp,\n className,\n style,\n },\n ref,\n) {\n const reactId = useId()\n const id = idProp ?? reactId\n const labelId = `${id}-label`\n const listboxId = `${id}-listbox`\n const helperId = `${id}-helper`\n const optionId = (index: number) => `${id}-opt-${index}`\n\n const t = useT()\n const searchPh = searchPlaceholder ?? t('common.search')\n\n // ── value (controlled / form-bound / uncontrolled) ─────────────────────────────────────────────\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = isFormBound ? form!.field(name!) : undefined\n const externalValue =\n value !== undefined\n ? value\n : isFormBound\n ? ((form!.values[name!] as string | undefined) ?? '')\n : undefined\n const isControlled = value !== undefined || isFormBound\n const [internal, setInternal] = useState<string>(defaultValue ?? '')\n const currentValue = isControlled ? externalValue! : internal\n\n const resolvedError = error ?? bound?.error ?? false\n const resolvedHelperText = helperText ?? bound?.helperText\n\n const selected = options.find((o) => o.value === currentValue)\n const hasValue = selected != null\n\n const commit = (next: string) => {\n if (!isControlled) setInternal(next)\n if (isFormBound) form!.setValue(name!, next)\n onChange?.(next)\n }\n\n // ── popover open state ─────────────────────────────────────────────────────────────────────────\n const triggerRef = useRef<HTMLDivElement | null>(null)\n const searchInputRef = useRef<HTMLInputElement | null>(null)\n const typeahead = useRef({ buffer: '', timer: 0 })\n // stable handle to the form field's blur (touched) callback — field() returns a fresh object each render\n const fieldBlur = useRef<(() => void) | undefined>(undefined)\n fieldBlur.current = bound ? () => bound.onBlur({} as FocusEvent<HTMLInputElement>) : undefined\n const [open, setOpen] = useState(false)\n const [searchQuery, setSearchQuery] = useState('')\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n\n const setTriggerRef = useCallback(\n (node: HTMLDivElement | null) => {\n triggerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as { current: HTMLDivElement | null }).current = node\n },\n [ref],\n )\n\n // options shown right now. When `onSearchChange` is set the consumer owns `options` (server-side\n // search) — skip the built-in local filter; otherwise filter the given options by label.\n const filteredOptions = useMemo(() => {\n if (!searchable || onSearchChange || !searchQuery.trim()) return options\n const q = searchQuery.trim().toLowerCase()\n return options.filter((o) => o.label.toLowerCase().includes(q))\n }, [searchable, onSearchChange, searchQuery, options])\n\n const findEnabled = useCallback(\n (start: number, delta: number) => {\n let i = start\n while (i >= 0 && i < filteredOptions.length) {\n if (!filteredOptions[i].disabled) return i\n i += delta\n }\n return -1\n },\n [filteredOptions],\n )\n\n // the floating panel forwards its node here, for the focus-leaves-the-widget check on blur\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n // single dismiss path: clears search + type-ahead buffer, marks the field touched, optionally refocuses\n const closeMenu = useCallback((refocus: boolean) => {\n setOpen(false)\n setSearchQuery('')\n window.clearTimeout(typeahead.current.timer)\n typeahead.current.buffer = ''\n fieldBlur.current?.()\n if (refocus) triggerRef.current?.focus()\n }, [])\n\n // on open: highlight the selected option (or first enabled), focus the search box if searchable\n useEffect(() => {\n if (!open) return\n const selIdx = filteredOptions.findIndex((o) => o.value === currentValue)\n setHighlightedIndex(\n selIdx >= 0 && !filteredOptions[selIdx].disabled ? selIdx : findEnabled(0, 1),\n )\n if (searchable) requestAnimationFrame(() => searchInputRef.current?.focus())\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n // keep the highlighted option scrolled into view\n useEffect(() => {\n if (!open || highlightedIndex < 0) return\n document.getElementById(optionId(highlightedIndex))?.scrollIntoView?.({ block: 'nearest' })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, highlightedIndex])\n\n // when the search filter changes, re-anchor the highlight to the first match\n useEffect(() => {\n if (open && searchable) setHighlightedIndex(findEnabled(0, 1))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchQuery])\n\n // if the option count changes while open (async load / list shrink), keep the highlight in range\n useEffect(() => {\n if (open) setHighlightedIndex((i) => (i < filteredOptions.length ? i : findEnabled(0, 1)))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filteredOptions.length])\n\n const openMenu = () => {\n if (!disabled) setOpen(true)\n }\n const selectOption = (opt: SelectOption | undefined) => {\n if (!opt || opt.disabled) return\n commit(opt.value)\n closeMenu(true)\n }\n const moveHighlight = (delta: number) => {\n setHighlightedIndex((cur) => {\n const start = cur < 0 ? (delta > 0 ? 0 : filteredOptions.length - 1) : cur + delta\n const found = findEnabled(start, delta)\n return found === -1 ? cur : found\n })\n }\n\n // type-ahead (non-searchable): jump to the option whose label starts with the typed buffer\n const handleTypeahead = (char: string) => {\n const t = typeahead.current\n window.clearTimeout(t.timer)\n t.buffer += char.toLowerCase()\n t.timer = window.setTimeout(() => (t.buffer = ''), 500)\n const match = filteredOptions.findIndex(\n (o) => !o.disabled && o.label.toLowerCase().startsWith(t.buffer),\n )\n if (match >= 0) setHighlightedIndex(match)\n }\n\n const handleKeyDown = (event: ReactKeyboardEvent) => {\n if (disabled) return\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n open ? moveHighlight(1) : openMenu()\n break\n case 'ArrowUp':\n event.preventDefault()\n open ? moveHighlight(-1) : openMenu()\n break\n case 'Enter':\n event.preventDefault()\n if (!open) openMenu()\n else selectOption(filteredOptions[highlightedIndex])\n break\n case ' ':\n // Space opens a closed menu (any mode); selects only when open & not searchable\n // (so a focused search box can still type spaces)\n if (!open) {\n event.preventDefault()\n openMenu()\n } else if (!searchable) {\n event.preventDefault()\n selectOption(filteredOptions[highlightedIndex])\n }\n break\n case 'Escape':\n if (open) {\n event.preventDefault()\n event.stopPropagation() // don't let FloatingPanel's own Escape also fire closeMenu/onBlur\n closeMenu(true)\n }\n break\n case 'Tab':\n // refocus the trigger so Tab continues from the field's visual location, not the portaled\n // search input's DOM position (end of <body>); don't preventDefault — let Tab move on\n if (open) closeMenu(true)\n break\n case 'Home':\n if (open) {\n event.preventDefault()\n setHighlightedIndex(findEnabled(0, 1))\n }\n break\n case 'End':\n if (open) {\n event.preventDefault()\n setHighlightedIndex(findEnabled(filteredOptions.length - 1, -1))\n }\n break\n default:\n if (\n !searchable &&\n open &&\n event.key.length === 1 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey\n ) {\n handleTypeahead(event.key)\n }\n }\n }\n\n const handleTriggerBlur = (event: FocusEvent<HTMLDivElement>) => {\n // mark the form field touched only when focus leaves the whole widget (not into the popover)\n const next = event.relatedTarget as Node | null\n if (next && (popoverRef.current?.contains(next) || triggerRef.current?.contains(next))) return\n bound?.onBlur(event as unknown as FocusEvent<HTMLInputElement>)\n }\n\n const handleClear = (event: ReactMouseEvent) => {\n event.stopPropagation()\n commit('')\n triggerRef.current?.focus()\n }\n\n const activeId = open && highlightedIndex >= 0 ? optionId(highlightedIndex) : undefined\n const iconSize: 'sm' | 'md' = size === 'sm' ? 'sm' : 'md'\n // chevron size per field size: sm 16 · md 14 · lg 12\n const chevronPx = size === 'sm' ? 16 : size === 'md' ? 14 : 12\n\n return (\n <div\n className={clsx(\n styles.field,\n styles[size],\n fullWidth && styles.fullWidth,\n resolvedError && styles.error,\n disabled && styles.disabled,\n className,\n )}\n style={style}\n >\n {label != null && (\n <span\n id={labelId}\n className={styles.label}\n onClick={() => !disabled && triggerRef.current?.focus()}\n >\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </span>\n )}\n\n <div\n ref={setTriggerRef}\n id={id}\n // `name` lets the form's scroll-to-error find + focus this field\n {...(name ? { name } : {})}\n role=\"combobox\"\n tabIndex={disabled ? -1 : 0}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={searchable ? undefined : activeId}\n aria-labelledby={label != null ? labelId : undefined}\n aria-disabled={disabled || undefined}\n aria-required={required || undefined}\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n className={clsx(styles.control, open && styles.open)}\n onClick={() => (open ? closeMenu(false) : openMenu())}\n onKeyDown={handleKeyDown}\n onBlur={handleTriggerBlur}\n >\n <span className={clsx(styles.value, !hasValue && styles.placeholder)}>\n {selected?.icon != null && (\n <span className={styles.valueIcon}>{renderIcon(selected.icon, iconSize)}</span>\n )}\n <span className={styles.valueLabel}>\n {selected ? selected.label : (placeholder ?? t('select.placeholder'))}\n </span>\n </span>\n\n {clearable && currentValue !== '' && !disabled && (\n <button\n type=\"button\"\n className={styles.clear}\n aria-label={t('select.clear')}\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleClear}\n >\n <Icon name=\"CloseCircle\" size=\"sm\" />\n </button>\n )}\n\n <Icon\n name=\"ArrowDown4\"\n className={styles.chevron}\n style={{ width: chevronPx, height: chevronPx }}\n aria-hidden=\"true\"\n />\n </div>\n\n <FloatingPanel\n ref={popoverRef}\n open={open}\n triggerRef={triggerRef}\n onClose={closeMenu}\n matchTriggerWidth\n className={styles.popover}\n >\n {searchable && (\n <div className={styles.search}>\n <Icon name=\"SearchNormal\" size=\"sm\" className={styles.searchIcon} aria-hidden=\"true\" />\n <input\n ref={searchInputRef}\n className={styles.searchInput}\n type=\"text\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listboxId}\n aria-activedescendant={activeId}\n aria-autocomplete=\"list\"\n aria-label={searchPh}\n placeholder={searchPh}\n value={searchQuery}\n spellCheck={false}\n onChange={(e) => {\n setSearchQuery(e.target.value)\n onSearchChange?.(e.target.value)\n }}\n onKeyDown={handleKeyDown}\n />\n </div>\n )}\n\n {/* the listbox always carries `listboxId` (even when empty) so aria-controls never dangles */}\n <List\n role=\"listbox\"\n id={listboxId}\n aria-labelledby={label != null ? labelId : undefined}\n size={size}\n className={styles.listbox}\n // clear the mouse highlight when the pointer leaves the list (no lingering hover)\n onMouseLeave={() => setHighlightedIndex(-1)}\n >\n {loading ? (\n <div className={styles.loading}>\n <Loader size=\"sm\" />\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {loadingText ?? t('common.loading')}\n </Typography>\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className={styles.noOptions}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {noOptionsText == null\n ? t('select.noOptions')\n : typeof noOptionsText === 'function'\n ? noOptionsText(searchQuery)\n : noOptionsText}\n </Typography>\n </div>\n ) : (\n filteredOptions.map((opt, index) => {\n const isSelected = opt.value === currentValue\n return (\n <ListItem\n key={opt.value}\n id={optionId(index)}\n role=\"option\"\n tabIndex={-1}\n aria-selected={isSelected}\n aria-current={undefined}\n clickable\n selected={isSelected}\n disabled={opt.disabled}\n icon={opt.icon}\n className={clsx(index === highlightedIndex && styles.active)}\n trailing={\n isSelected && showSelectedTick ? (\n <Icon name=\"TickCircle\" size=\"sm\" />\n ) : undefined\n }\n onMouseEnter={() => !opt.disabled && setHighlightedIndex(index)}\n onClick={() => selectOption(opt)}\n >\n {opt.label}\n </ListItem>\n )\n })\n )}\n </List>\n </FloatingPanel>\n\n {resolvedHelperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={resolvedError ? 'error' : 'muted'}\n className={styles.helper}\n >\n {resolvedHelperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["ICON_NAME_SET","ICON_NAMES","renderIcon","icon","size","jsx","Icon","Select","forwardRef","label","options","error","helperText","required","fullWidth","disabled","value","defaultValue","onChange","placeholder","clearable","searchable","searchPlaceholder","onSearchChange","loading","loadingText","noOptionsText","showSelectedTick","name","idProp","className","style","ref","reactId","useId","id","labelId","listboxId","helperId","optionId","index","t","useT","searchPh","form","useFormContext","isFormBound","bound","externalValue","isControlled","internal","setInternal","useState","currentValue","resolvedError","resolvedHelperText","selected","o","hasValue","commit","next","triggerRef","useRef","searchInputRef","typeahead","fieldBlur","open","setOpen","searchQuery","setSearchQuery","highlightedIndex","setHighlightedIndex","setTriggerRef","useCallback","node","filteredOptions","useMemo","q","findEnabled","start","delta","i","popoverRef","closeMenu","refocus","_a","_b","useEffect","selIdx","openMenu","selectOption","opt","moveHighlight","cur","found","handleTypeahead","char","match","handleKeyDown","event","handleTriggerBlur","handleClear","activeId","iconSize","chevronPx","jsxs","clsx","styles","Typography","FloatingPanel","List","Loader","isSelected","ListItem"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const i=require("react/jsx-runtime"),v=require("react"),g=require("@tanstack/react-router"),y=require("clsx"),S=require("./Icon-CXTl_QAP.cjs"),D=require("./List-CNz2M3-q.cjs"),k=require("./ListItem-RH-D-Wey.cjs"),R=require("./TextField-BPefnD5M.cjs"),P=require("./access-DPUHbE-S.cjs"),E=require("./ConfigProvider-ByOFXVyP.cjs"),$="_nav_a1zzi_4",B="_module_a1zzi_17",F="_search_a1zzi_25",q="_searchPanel_a1zzi_31",M="_moduleLabel_a1zzi_46",A="_leaves_a1zzi_61",O="_navBadge_a1zzi_66",K="_navDot_a1zzi_78",V="_leafDot_a1zzi_86",Y="_collapsible_a1zzi_95",U="_collapsibleClosed_a1zzi_100",H="_collapsibleInner_a1zzi_103",G="_chevron_a1zzi_109",Q="_chevronButton_a1zzi_119",m={nav:$,module:B,search:F,searchPanel:q,moduleLabel:M,leaves:A,navBadge:O,navDot:K,leafDot:V,collapsible:Y,collapsibleClosed:U,collapsibleInner:H,chevron:G,chevronButton:Q},L=k.ListItem,W=e=>e.split("-").map(s=>s.charAt(0).toUpperCase()+s.slice(1)).join(" "),T=e=>e.replace(/^\/+|\/+$/g,""),z=(e,s)=>e.order-s.order||e.label.localeCompare(s.label);function X(e){const s=[];for(const o of e){const c=o.staticData,n=T(o.fullPath);!(c!=null&&c.name)||!n||s.push({path:n,name:c.name,sd:c})}const a=new Map(s.map(o=>[o.path,o])),t=s.map(o=>o.path),l=o=>t.some(c=>c!==o&&c.startsWith(`${o}/`)),f=new Set(e.map(o=>o.fullPath)),h=o=>f.has(`/${o}/`),b=(o,c)=>{const n=a.get(o);return{label:(n==null?void 0:n.name)??W(c),icon:n==null?void 0:n.sd.icon,badge:n==null?void 0:n.sd.badge,dot:n==null?void 0:n.sd.dot,order:(n==null?void 0:n.sd.order)??Number.POSITIVE_INFINITY}},p=new Map,d=o=>{let c=p.get(o);if(!c){const n=b(o,o);c={label:n.label,icon:n.icon,order:n.order,groups:new Map},p.set(o,c)}return c},x=[];for(const{path:o,name:c,sd:n}of s){const I=o.split("/");if(I.length<=2&&l(o)||n.hidden)continue;if(I.length===1){x.push({label:c,to:`/${o}`,icon:n.icon,badge:n.badge,dot:n.dot,order:n.order??Number.POSITIVE_INFINITY});continue}const r=d(I[0]);if(I.length===2)r.groups.set(o,{label:c,icon:n.icon,to:`/${o}`,badge:n.badge,dot:n.dot,order:n.order??Number.POSITIVE_INFINITY,leaves:[],isContainer:!1});else{const u=I.slice(0,2).join("/");let _=r.groups.get(u);if(!_){const N=b(u,I[1]);_={label:N.label,icon:N.icon,badge:N.badge,dot:N.dot,order:N.order,to:h(u)?`/${u}`:void 0,leaves:[],isContainer:!0},r.groups.set(u,_)}_.leaves.push({label:c,to:`/${o}`,icon:n.icon,badge:n.badge,dot:n.dot,order:n.order??Number.POSITIVE_INFINITY})}}return{links:x.sort(z).map(o=>({label:o.label,to:o.to,icon:o.icon,badge:o.badge,dot:o.dot})),modules:[...p.values()].sort(z).map(o=>({module:o.label,icon:o.icon,groups:[...o.groups.values()].sort(z).map(c=>({label:c.label,icon:c.icon,to:c.to,badge:c.badge,dot:c.dot,children:c.isContainer?c.leaves.sort(z).map(n=>({label:n.label,to:n.to,icon:n.icon,badge:n.badge,dot:n.dot})):void 0}))}))}}function C(){const e=g.useRouter(),s=P.useAccessKeys();return v.useMemo(()=>X(Object.values(e.looseRoutesById).map(a=>{var t;return{fullPath:a.fullPath,staticData:(t=a.options)==null?void 0:t.staticData}}).filter(a=>{var t;return P.hasAccess((t=a.staticData)==null?void 0:t.roles)})),[e,s])}function w(e){var s;if(e.links[0])return e.links[0].to;for(const a of e.modules)for(const t of a.groups){if(t.to)return t.to;const l=(s=t.children)==null?void 0:s[0];if(l)return l.to}}function J(){return w(C())}function Z(){var a,t;const e=g.useRouter(),s=g.useRouterState({select:l=>l.matches});for(let l=s.length-1;l>=0;l--){const f=e.looseRoutesById[s[l].routeId],h=(t=(a=f==null?void 0:f.options)==null?void 0:a.staticData)==null?void 0:t.name;if(h)return h}}function ee(e){const s=new Set;for(const a of e.links)s.add(a.to);for(const a of e.modules)for(const t of a.groups){t.to&&s.add(t.to);for(const l of t.children??[])s.add(l.to)}return s}function te(){var f;const e=C(),s=g.useRouterState({select:h=>h.matches}),a=w(e),t=ee(e),l=[];for(const h of s){const b=(f=h.staticData)==null?void 0:f.name;if(!b)continue;const p=`/${T(h.pathname)}`;l.push({label:b,to:t.has(p)?p:void 0})}return l.length>0&&(l[l.length-1]={label:l[l.length-1].label}),{homeTo:a,items:l}}function oe(){const e=J();return e?i.jsx(g.Navigate,{to:e}):null}function ne(){const{links:e,modules:s}=C(),a=g.useRouterState({select:t=>t.location.pathname});return i.jsxs("nav",{className:m.nav,children:[e.length>0?i.jsx(D.List,{children:e.map(t=>i.jsx(L,{as:g.Link,to:t.to,icon:t.icon,selected:a===t.to,clickable:!0,trailing:j(t.badge,t.dot),children:t.label},t.to))}):null,s.map(t=>i.jsxs("div",{className:m.module,children:[i.jsx("div",{className:m.moduleLabel,children:t.module}),i.jsx(D.List,{children:t.groups.map(l=>i.jsx(ue,{group:l,pathname:a},l.label))})]},t.module))]})}function se(e){const s=[];for(const a of e.links)s.push({label:a.label,to:a.to});for(const a of e.modules)for(const t of a.groups){t.to&&s.push({label:t.label,to:t.to,context:a.module});for(const l of t.children??[])s.push({label:l.label,to:l.to,context:`${a.module} · ${t.label}`})}return s}const ae=8;function le(){const e=E.useT(),s=C(),a=g.useNavigate(),t=v.useMemo(()=>se(s),[s]),[l,f]=v.useState(""),[h,b]=v.useState(!1),[p,d]=v.useState(0),x=v.useRef(null),o=v.useMemo(()=>{const r=l.trim().toLowerCase();return r?t.filter(u=>{var _;return u.label.toLowerCase().includes(r)||(((_=u.context)==null?void 0:_.toLowerCase().includes(r))??!1)}).slice(0,ae):[]},[t,l]),c=h&&o.length>0;v.useEffect(()=>d(0),[l]),v.useEffect(()=>{d(r=>r>o.length-1?Math.max(0,o.length-1):r)},[o.length]),v.useEffect(()=>{if(!h)return;const r=u=>{x.current&&!x.current.contains(u.target)&&b(!1)};return document.addEventListener("pointerdown",r),()=>document.removeEventListener("pointerdown",r)},[h]);const n=r=>{a({to:r}),f(""),b(!1)},I=r=>{if(c)if(r.key==="ArrowDown")r.preventDefault(),d(u=>(u+1)%o.length);else if(r.key==="ArrowUp")r.preventDefault(),d(u=>(u-1+o.length)%o.length);else if(r.key==="Enter"){r.preventDefault();const u=o[p];u&&n(u.to)}else r.key==="Escape"&&b(!1)};return i.jsxs("div",{ref:x,className:m.search,role:"combobox","aria-expanded":c,"aria-haspopup":"listbox",children:[i.jsx(R.TextField,{value:l,onChange:r=>{f(r.target.value),b(!0)},onFocus:()=>b(!0),onKeyDown:I,adornment:i.jsx(S.Icon,{name:"SearchNormal"}),placeholder:e("sidebar.searchPages"),"aria-label":e("sidebar.searchPages"),autoComplete:"off"}),c?i.jsx("div",{className:m.searchPanel,children:i.jsx(D.List,{role:"listbox",children:o.map((r,u)=>i.jsx(k.ListItem,{description:r.context,clickable:!0,selected:u===p,onMouseDown:_=>_.preventDefault(),onMouseEnter:()=>d(u),onClick:()=>n(r.to),children:r.label},r.to))})}):null]})}function ce(e,s){var a;return e.to&&s===e.to?!0:((a=e.children)==null?void 0:a.some(t=>t.to===s))??!1}function re(e){return e?i.jsx("span",{className:m.navBadge,children:e}):null}function ie(e){return e?i.jsx("span",{className:m.navDot,style:{background:`var(--tz-color-${e})`}}):null}function j(e,s,a){if(!(e==null&&s==null&&a==null))return i.jsxs(i.Fragment,{children:[re(e),ie(s),a]})}function ue({group:e,pathname:s}){var b,p;const a=ce(e,s),t=!!((b=e.children)!=null&&b.length),[l,f]=v.useState(a);if(v.useEffect(()=>{a&&f(!0)},[a]),!t&&e.to)return i.jsx(L,{as:g.Link,to:e.to,icon:e.icon,selected:a,clickable:!0,trailing:j(e.badge,e.dot),children:e.label});const h=i.jsx(S.Icon,{name:"ArrowDown4",size:"sm",className:m.chevron,"data-open":l?"true":"false"});return i.jsxs(i.Fragment,{children:[t&&e.to?i.jsx(L,{as:g.Link,to:e.to,icon:e.icon,selected:a,clickable:!0,onClick:()=>f(!0),trailing:j(e.badge,e.dot,i.jsx("button",{type:"button",className:m.chevronButton,"aria-label":`${l?"Collapse":"Expand"} ${e.label}`,"aria-expanded":l,onClick:d=>{d.preventDefault(),d.stopPropagation(),f(x=>!x)},children:h})),children:e.label}):i.jsx(k.ListItem,{icon:e.icon,selected:a,clickable:!0,"aria-expanded":l,onClick:()=>f(d=>!d),trailing:j(e.badge,e.dot,h),children:e.label}),t?i.jsx("div",{className:y.clsx(m.collapsible,!l&&m.collapsibleClosed),children:i.jsx("div",{className:m.collapsibleInner,children:i.jsx(D.List,{className:m.leaves,children:(p=e.children)==null?void 0:p.map(d=>i.jsx(L,{as:g.Link,to:d.to,icon:i.jsx("span",{className:m.leafDot}),selected:s===d.to,size:"md",clickable:!0,trailing:j(d.badge,d.dot),children:d.label},d.to))})})}):null]})}exports.FirstRouteRedirect=oe;exports.NavSearch=le;exports.Sidebar=ne;exports.useBreadcrumbs=te;exports.usePageTitle=Z;
|
|
2
|
+
//# sourceMappingURL=Sidebar-AaIlRzgk.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sidebar-AaIlRzgk.cjs","sources":["../src/components/Sidebar/Sidebar.tsx"],"sourcesContent":["import {\n useEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from 'react'\nimport {\n Link,\n Navigate,\n useNavigate,\n useRouter,\n useRouterState,\n type LinkProps,\n type StaticDataRouteOption,\n} from '@tanstack/react-router'\nimport { clsx } from 'clsx'\nimport { Icon } from '../Icon'\nimport { List, ListItem, type ListItemProps } from '../List'\nimport { TextField } from '../TextField'\nimport { useT, type ThemeColor } from '../../theme'\nimport type { IconName } from '../../icons/names'\nimport { hasAccess, useAccessKeys } from '../../helpers/access'\nimport styles from './Sidebar.module.css'\n\n// `ListItem` rendered as a TanStack `Link` — it forwards unrecognized props (like `to`) to the\n// element, so this typed alias lets us pass `to` while keeping `ListItem`'s look + behavior.\nconst NavLink = ListItem as unknown as (props: ListItemProps & { to: string }) => ReactNode\n\nexport type { IconName }\n\n// Typed `staticData` for consumers — every route describes its own menu entry.\ndeclare module '@tanstack/react-router' {\n interface StaticDataRouteOption {\n /** Menu label. A route with no `name` never appears in the menu. */\n name?: string\n /** Optional menu icon (the library's `IconName` union). */\n icon?: IconName\n /** Sort order within the parent (ascending); falls back to alphabetical. */\n order?: number\n /** Routed but hidden from the menu. */\n hidden?: boolean\n /** Allowed accessKeys (OR — user needs any one). Omitted/empty = public. */\n roles?: string[]\n /** Small text label (e.g. `\"New\"`) shown as a pill on the menu row. */\n badge?: string\n /** Theme color of a small dot indicator on the menu row (e.g. `\"error\"`). */\n dot?: ThemeColor\n }\n}\n\nexport interface NavLeaf {\n label: string\n to: string\n icon?: IconName\n badge?: string\n dot?: ThemeColor\n}\nexport interface NavGroup {\n label: string\n icon?: IconName\n to?: string\n badge?: string\n dot?: ThemeColor\n children?: NavLeaf[]\n}\nexport interface NavModule {\n module: string\n icon?: IconName\n groups: NavGroup[]\n}\n\nconst prettify = (seg: string) =>\n seg\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ')\nconst trimSlashes = (p: string) => p.replace(/^\\/+|\\/+$/g, '')\nconst byOrderThenLabel = (\n a: { order: number; label: string },\n b: { order: number; label: string },\n) => a.order - b.order || a.label.localeCompare(b.label)\n\ninterface LeafAcc {\n label: string\n to: string\n icon?: IconName\n badge?: string\n dot?: ThemeColor\n order: number\n}\ninterface GroupAcc {\n label: string\n icon?: IconName\n to?: string\n badge?: string\n dot?: ThemeColor\n order: number\n leaves: LeafAcc[]\n isContainer: boolean\n}\ninterface ModuleAcc {\n label: string\n icon?: IconName\n order: number\n groups: Map<string, GroupAcc>\n}\n\n/** A single route, reduced to what the menu needs. */\nexport interface NavRoute {\n fullPath: string\n staticData?: StaticDataRouteOption\n}\n\n/**\n * Pure menu builder — derives the 3-level nav tree (module → group → page) from a flat route list.\n * Kept router-free so it's unit-testable; `useNavTree` feeds it the live routes.\n */\nexport function buildNavTree(routes: NavRoute[]): { links: NavLeaf[]; modules: NavModule[] } {\n const entries: Array<{ path: string; name: string; sd: StaticDataRouteOption }> = []\n for (const route of routes) {\n const sd = route.staticData\n const path = trimSlashes(route.fullPath)\n if (!sd?.name || !path) continue\n entries.push({ path, name: sd.name, sd })\n }\n\n const metaByPath = new Map(entries.map((e) => [e.path, e]))\n const paths = entries.map((e) => e.path)\n const isContainer = (p: string) => paths.some((o) => o !== p && o.startsWith(`${p}/`))\n const rawFullPaths = new Set(routes.map((r) => r.fullPath))\n const groupHasOwnPage = (groupKey: string) => rawFullPaths.has(`/${groupKey}/`)\n\n const chrome = (key: string, seg: string) => {\n const e = metaByPath.get(key)\n return {\n label: e?.name ?? prettify(seg),\n icon: e?.sd.icon,\n badge: e?.sd.badge,\n dot: e?.sd.dot,\n order: e?.sd.order ?? Number.POSITIVE_INFINITY,\n }\n }\n\n const modules = new Map<string, ModuleAcc>()\n const getModule = (seg: string) => {\n let mod = modules.get(seg)\n if (!mod) {\n const c = chrome(seg, seg)\n mod = { label: c.label, icon: c.icon, order: c.order, groups: new Map() }\n modules.set(seg, mod)\n }\n return mod\n }\n\n const topLinks: LeafAcc[] = []\n for (const { path, name, sd } of entries) {\n const segs = path.split('/')\n // The menu is 3 levels deep by design (module → group → page). A path only counts as a\n // \"container\" (holds children instead of being its own row) at the module/group levels; a\n // depth-3+ route is always a leaf, so a named page with even-deeper children isn't dropped.\n // Routes deeper than 3 segments still appear — flattened as leaves under their depth-2 group\n // (their `to` stays correct) — the nav just can't nest beyond level 3.\n if ((segs.length <= 2 && isContainer(path)) || sd.hidden) continue\n if (segs.length === 1) {\n topLinks.push({\n label: name,\n to: `/${path}`,\n icon: sd.icon,\n badge: sd.badge,\n dot: sd.dot,\n order: sd.order ?? Number.POSITIVE_INFINITY,\n })\n continue\n }\n const mod = getModule(segs[0])\n if (segs.length === 2) {\n mod.groups.set(path, {\n label: name,\n icon: sd.icon,\n to: `/${path}`,\n badge: sd.badge,\n dot: sd.dot,\n order: sd.order ?? Number.POSITIVE_INFINITY,\n leaves: [],\n isContainer: false,\n })\n } else {\n const groupKey = segs.slice(0, 2).join('/')\n let group = mod.groups.get(groupKey)\n if (!group) {\n const c = chrome(groupKey, segs[1])\n group = {\n label: c.label,\n icon: c.icon,\n badge: c.badge,\n dot: c.dot,\n order: c.order,\n to: groupHasOwnPage(groupKey) ? `/${groupKey}` : undefined,\n leaves: [],\n isContainer: true,\n }\n mod.groups.set(groupKey, group)\n }\n group.leaves.push({\n label: name,\n to: `/${path}`,\n icon: sd.icon,\n badge: sd.badge,\n dot: sd.dot,\n order: sd.order ?? Number.POSITIVE_INFINITY,\n })\n }\n }\n\n return {\n links: topLinks\n .sort(byOrderThenLabel)\n .map((l) => ({ label: l.label, to: l.to, icon: l.icon, badge: l.badge, dot: l.dot })),\n modules: [...modules.values()].sort(byOrderThenLabel).map(\n (mod): NavModule => ({\n module: mod.label,\n icon: mod.icon,\n groups: [...mod.groups.values()].sort(byOrderThenLabel).map(\n (g): NavGroup => ({\n label: g.label,\n icon: g.icon,\n to: g.to,\n badge: g.badge,\n dot: g.dot,\n children: g.isContainer\n ? g.leaves.sort(byOrderThenLabel).map((l) => ({\n label: l.label,\n to: l.to,\n icon: l.icon,\n badge: l.badge,\n dot: l.dot,\n }))\n : undefined,\n }),\n ),\n }),\n ),\n }\n}\n\nfunction useNavTree(): { links: NavLeaf[]; modules: NavModule[] } {\n const router = useRouter()\n const accessKeys = useAccessKeys() // re-render the menu when the user's roles change (login/logout)\n return useMemo(\n () =>\n buildNavTree(\n Object.values(router.looseRoutesById)\n .map((route) => ({\n fullPath: route.fullPath,\n staticData: route.options?.staticData,\n }))\n // Drop pages the current user can't access — empty groups/modules then vanish on their own.\n .filter((route) => hasAccess(route.staticData?.roles)),\n ),\n [router, accessKeys],\n )\n}\n\n/** The first menu destination (top link, else first group/leaf) — used by `FirstRouteRedirect`. */\nexport function firstNavTo(tree: { links: NavLeaf[]; modules: NavModule[] }): string | undefined {\n if (tree.links[0]) return tree.links[0].to\n for (const mod of tree.modules)\n for (const group of mod.groups) {\n if (group.to) return group.to\n const firstChild = group.children?.[0]\n if (firstChild) return firstChild.to\n }\n return undefined\n}\n\nfunction useFirstNavTo() {\n return firstNavTo(useNavTree())\n}\n\n/**\n * The current page's title — the `staticData.name` of the deepest matched route that declares one.\n * Used by `RootLayout` to label the header automatically (e.g. \"Dashboard\").\n */\nexport function usePageTitle(): string | undefined {\n const router = useRouter()\n const matches = useRouterState({ select: (s) => s.matches })\n for (let i = matches.length - 1; i >= 0; i--) {\n const route = router.looseRoutesById[matches[i].routeId]\n const name = route?.options?.staticData?.name\n if (name) return name\n }\n return undefined\n}\n\n/** One breadcrumb. `to` is set only when the crumb points at a real, navigable menu page. */\nexport interface Breadcrumb {\n label: string\n to?: string\n}\n\n/** Every `to` that the menu actually navigates to (top links, group pages, leaves). */\nfunction navigablePaths(tree: { links: NavLeaf[]; modules: NavModule[] }): Set<string> {\n const set = new Set<string>()\n for (const link of tree.links) set.add(link.to)\n for (const mod of tree.modules)\n for (const group of mod.groups) {\n if (group.to) set.add(group.to)\n for (const leaf of group.children ?? []) set.add(leaf.to)\n }\n return set\n}\n\n/**\n * Breadcrumb trail for the current route, derived from the active match chain: one crumb per matched\n * route that declares a `staticData.name` (module → group → page). `homeTo` is the first allowed menu\n * page (same target as `FirstRouteRedirect`). Intermediate crumbs link only when they map to a real\n * navigable page; the last crumb (the current page) is always plain text.\n */\nexport function useBreadcrumbs(): { homeTo?: string; items: Breadcrumb[] } {\n const tree = useNavTree()\n const matches = useRouterState({ select: (s) => s.matches })\n const homeTo = firstNavTo(tree)\n const navigable = navigablePaths(tree)\n\n const items: Breadcrumb[] = []\n for (const match of matches) {\n const name = match.staticData?.name\n if (!name) continue\n const full = `/${trimSlashes(match.pathname)}`\n items.push({ label: name, to: navigable.has(full) ? full : undefined })\n }\n // The current page is where you already are — never a link.\n if (items.length > 0) items[items.length - 1] = { label: items[items.length - 1].label }\n return { homeTo, items }\n}\n\n/** Drop-in component for the `/` route: forwards to whatever sits FIRST in the menu. */\nexport function FirstRouteRedirect() {\n const to = useFirstNavTo()\n return to ? <Navigate to={to as LinkProps['to']} /> : null\n}\n\n/** Auto-generated navigation, derived from the routes' `staticData`. Rendered inside `RootLayout`. */\nexport function Sidebar() {\n const { links, modules } = useNavTree()\n const pathname = useRouterState({ select: (s) => s.location.pathname })\n\n return (\n <nav className={styles.nav}>\n {links.length > 0 ? (\n <List>\n {links.map((link) => (\n <NavLink\n key={link.to}\n as={Link}\n to={link.to}\n icon={link.icon}\n selected={pathname === link.to}\n clickable\n trailing={navTrailing(link.badge, link.dot)}\n >\n {link.label}\n </NavLink>\n ))}\n </List>\n ) : null}\n {modules.map((mod) => (\n <div className={styles.module} key={mod.module}>\n <div className={styles.moduleLabel}>{mod.module}</div>\n <List>\n {mod.groups.map((group) => (\n <NavGroupItem key={group.label} group={group} pathname={pathname} />\n ))}\n </List>\n </div>\n ))}\n </nav>\n )\n}\n\n/** A single searchable destination — a nav page flattened out of the tree, with a breadcrumb context. */\ninterface NavPage {\n label: string\n to: string\n /** Where it lives — e.g. `\"Components · Forms\"` — shown as the muted second line. */\n context?: string\n}\n\n/** Flatten the nav tree into every navigable page (top links + group pages + leaves). */\nfunction flattenPages(tree: { links: NavLeaf[]; modules: NavModule[] }): NavPage[] {\n const pages: NavPage[] = []\n for (const link of tree.links) pages.push({ label: link.label, to: link.to })\n for (const mod of tree.modules)\n for (const group of mod.groups) {\n if (group.to) pages.push({ label: group.label, to: group.to, context: mod.module })\n for (const leaf of group.children ?? [])\n pages.push({\n label: leaf.label,\n to: leaf.to,\n context: `${mod.module} · ${group.label}`,\n })\n }\n return pages\n}\n\nconst MAX_SEARCH_RESULTS = 8\n\n/**\n * Header search over the sidebar's pages — type to filter the nav (by page name or its section) and\n * pick a suggestion to jump there. Data comes from the same `useNavTree` the sidebar uses (so it\n * respects RBAC). Keyboard: Up/Down move, Enter opens, Escape closes. Rendered by `RootLayout`'s header.\n */\nexport function NavSearch() {\n const t = useT()\n const tree = useNavTree()\n const navigate = useNavigate()\n const pages = useMemo(() => flattenPages(tree), [tree])\n\n const [query, setQuery] = useState('')\n const [open, setOpen] = useState(false)\n const [active, setActive] = useState(0)\n const rootRef = useRef<HTMLDivElement | null>(null)\n\n const results = useMemo(() => {\n const q = query.trim().toLowerCase()\n if (!q) return []\n return pages\n .filter(\n (p) => p.label.toLowerCase().includes(q) || (p.context?.toLowerCase().includes(q) ?? false),\n )\n .slice(0, MAX_SEARCH_RESULTS)\n }, [pages, query])\n\n const showList = open && results.length > 0\n\n // reset the highlighted row whenever the query changes\n useEffect(() => setActive(0), [query])\n\n // clamp the highlight if the result set shrinks without a query change (e.g. RBAC pages update)\n useEffect(() => {\n setActive((a) => (a > results.length - 1 ? Math.max(0, results.length - 1) : a))\n }, [results.length])\n\n // close the suggestions on an outside pointerdown\n useEffect(() => {\n if (!open) return\n const onDown = (event: PointerEvent) => {\n if (rootRef.current && !rootRef.current.contains(event.target as Node)) setOpen(false)\n }\n document.addEventListener('pointerdown', onDown)\n return () => document.removeEventListener('pointerdown', onDown)\n }, [open])\n\n const go = (to: string) => {\n navigate({ to: to as LinkProps['to'] })\n setQuery('')\n setOpen(false)\n }\n\n const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (!showList) return\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n setActive((i) => (i + 1) % results.length)\n } else if (event.key === 'ArrowUp') {\n event.preventDefault()\n setActive((i) => (i - 1 + results.length) % results.length)\n } else if (event.key === 'Enter') {\n event.preventDefault()\n const hit = results[active]\n if (hit) go(hit.to)\n } else if (event.key === 'Escape') {\n setOpen(false)\n }\n }\n\n return (\n <div\n ref={rootRef}\n className={styles.search}\n role=\"combobox\"\n aria-expanded={showList}\n aria-haspopup=\"listbox\"\n >\n <TextField\n value={query}\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n setQuery(event.target.value)\n setOpen(true)\n }}\n onFocus={() => setOpen(true)}\n onKeyDown={onKeyDown}\n adornment={<Icon name=\"SearchNormal\" />}\n placeholder={t('sidebar.searchPages')}\n aria-label={t('sidebar.searchPages')}\n autoComplete=\"off\"\n />\n {showList ? (\n <div className={styles.searchPanel}>\n <List role=\"listbox\">\n {results.map((page, i) => (\n <ListItem\n key={page.to}\n description={page.context}\n clickable\n selected={i === active}\n // keep the input focused through the click so blur doesn't close the list first\n onMouseDown={(event: MouseEvent) => event.preventDefault()}\n onMouseEnter={() => setActive(i)}\n onClick={() => go(page.to)}\n >\n {page.label}\n </ListItem>\n ))}\n </List>\n </div>\n ) : null}\n </div>\n )\n}\n\nfunction groupIsActive(group: NavGroup, pathname: string): boolean {\n if (group.to && pathname === group.to) return true\n return group.children?.some((leaf) => leaf.to === pathname) ?? false\n}\n\n/** A small \"New\"-style pill rendered on a menu row from `staticData.badge`. */\nfunction navBadge(text?: string) {\n return text ? <span className={styles.navBadge}>{text}</span> : null\n}\n\n/** A small colored dot indicator on a menu row from `staticData.dot`. */\nfunction navDot(color?: ThemeColor) {\n return color ? (\n <span className={styles.navDot} style={{ background: `var(--tz-color-${color})` }} />\n ) : null\n}\n\n/** The menu row's trailing slot: dot + badge + an optional chevron (omitted entirely when empty). */\nfunction navTrailing(badge?: string, dot?: ThemeColor, chevron?: ReactNode): ReactNode {\n if (badge == null && dot == null && chevron == null) return undefined\n return (\n <>\n {navBadge(badge)}\n {navDot(dot)}\n {chevron}\n </>\n )\n}\n\nfunction NavGroupItem({ group, pathname }: { group: NavGroup; pathname: string }) {\n const active = groupIsActive(group, pathname)\n const hasChildren = !!group.children?.length\n const [open, setOpen] = useState(active)\n\n // re-open when navigation makes this group active via a path the mount-time seed missed\n // (NavSearch, Breadcrumbs, back/forward) — collapsing an active group hides the current page\n useEffect(() => {\n if (active) setOpen(true)\n }, [active])\n\n // a plain level-2 page (no children) — just a link row\n if (!hasChildren && group.to) {\n return (\n <NavLink\n as={Link}\n to={group.to}\n icon={group.icon}\n selected={active}\n clickable\n trailing={navTrailing(group.badge, group.dot)}\n >\n {group.label}\n </NavLink>\n )\n }\n\n const chevron = (\n <Icon\n name=\"ArrowDown4\"\n size=\"sm\"\n className={styles.chevron}\n data-open={open ? 'true' : 'false'}\n />\n )\n\n return (\n <>\n {hasChildren && group.to ? (\n // \"Case B\": the row navigates (and expands); a separate chevron only toggles.\n <NavLink\n as={Link}\n to={group.to}\n icon={group.icon}\n selected={active}\n clickable\n onClick={() => setOpen(true)}\n trailing={navTrailing(\n group.badge,\n group.dot,\n <button\n type=\"button\"\n className={styles.chevronButton}\n aria-label={`${open ? 'Collapse' : 'Expand'} ${group.label}`}\n aria-expanded={open}\n onClick={(event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n setOpen((o) => !o)\n }}\n >\n {chevron}\n </button>,\n )}\n >\n {group.label}\n </NavLink>\n ) : (\n // a pure container — the whole row toggles its children\n <ListItem\n icon={group.icon}\n selected={active}\n clickable\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n trailing={navTrailing(group.badge, group.dot, chevron)}\n >\n {group.label}\n </ListItem>\n )}\n {hasChildren ? (\n // smooth collapse, same grid-template-rows technique as Card\n <div className={clsx(styles.collapsible, !open && styles.collapsibleClosed)}>\n <div className={styles.collapsibleInner}>\n <List className={styles.leaves}>\n {group.children?.map((leaf) => (\n <NavLink\n key={leaf.to}\n as={Link}\n to={leaf.to}\n icon={<span className={styles.leafDot} />}\n selected={pathname === leaf.to}\n size=\"md\"\n clickable\n trailing={navTrailing(leaf.badge, leaf.dot)}\n >\n {leaf.label}\n </NavLink>\n ))}\n </List>\n </div>\n </div>\n ) : null}\n </>\n )\n}\n"],"names":["NavLink","ListItem","prettify","seg","w","trimSlashes","p","byOrderThenLabel","a","b","buildNavTree","routes","entries","route","sd","path","metaByPath","e","paths","isContainer","o","rawFullPaths","r","groupHasOwnPage","groupKey","chrome","key","modules","getModule","mod","c","topLinks","name","segs","group","l","g","useNavTree","router","useRouter","accessKeys","useAccessKeys","useMemo","_a","hasAccess","firstNavTo","tree","firstChild","useFirstNavTo","usePageTitle","matches","useRouterState","s","i","_b","navigablePaths","set","link","leaf","useBreadcrumbs","homeTo","navigable","items","match","full","FirstRouteRedirect","to","jsx","Navigate","Sidebar","links","pathname","jsxs","styles","List","Link","navTrailing","NavGroupItem","flattenPages","pages","MAX_SEARCH_RESULTS","NavSearch","t","useT","navigate","useNavigate","query","setQuery","useState","open","setOpen","active","setActive","rootRef","useRef","results","q","showList","useEffect","onDown","event","go","onKeyDown","hit","TextField","Icon","page","groupIsActive","navBadge","text","navDot","color","badge","dot","chevron","Fragment","hasChildren","clsx"],"mappings":"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"}
|