@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,38 @@
|
|
|
1
|
+
import { jsx as n, jsxs as S } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as y } from "react";
|
|
3
|
+
import { clsx as z } from "clsx";
|
|
4
|
+
import { I as l } from "./Icon-CophpkHo.js";
|
|
5
|
+
import { a as N } from "./names-D8ABK2Wk.js";
|
|
6
|
+
import { a as h } from "./ConfigProvider-2c94kUOk.js";
|
|
7
|
+
const v = "_emptyState_tu8zp_3", E = "_sm_tu8zp_17", I = "_md_tu8zp_23", g = "_lg_tu8zp_29", x = "_icon_tu8zp_37", O = "_title_tu8zp_53", T = "_description_tu8zp_59", j = "_action_tu8zp_68", w = "_pattern_tu8zp_75", t = {
|
|
8
|
+
emptyState: v,
|
|
9
|
+
sm: E,
|
|
10
|
+
md: I,
|
|
11
|
+
lg: g,
|
|
12
|
+
icon: x,
|
|
13
|
+
title: O,
|
|
14
|
+
description: T,
|
|
15
|
+
action: j,
|
|
16
|
+
pattern: w
|
|
17
|
+
}, A = new Set(N), B = y(function({ icon: e, title: c, description: s, action: o, size: i = "md", pattern: m = !0, className: p, children: _, ...d }, u) {
|
|
18
|
+
const f = h(), a = c ?? f("emptyState.title"), r = e === !1 ? null : e == null ? /* @__PURE__ */ n(l, { name: "FolderOpen" }) : typeof e == "string" && A.has(e) ? /* @__PURE__ */ n(l, { name: e }) : e;
|
|
19
|
+
return /* @__PURE__ */ S(
|
|
20
|
+
"div",
|
|
21
|
+
{
|
|
22
|
+
ref: u,
|
|
23
|
+
className: z(t.emptyState, t[i], m && t.pattern, p),
|
|
24
|
+
...d,
|
|
25
|
+
children: [
|
|
26
|
+
r != null && /* @__PURE__ */ n("div", { className: t.icon, "aria-hidden": !0, children: r }),
|
|
27
|
+
a != null && /* @__PURE__ */ n("div", { className: t.title, children: a }),
|
|
28
|
+
s != null && /* @__PURE__ */ n("div", { className: t.description, children: s }),
|
|
29
|
+
o != null && /* @__PURE__ */ n("div", { className: t.action, children: o }),
|
|
30
|
+
_
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
});
|
|
35
|
+
export {
|
|
36
|
+
B as E
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=EmptyState-CetM49vk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyState-CetM49vk.js","sources":["../src/components/EmptyState/EmptyState.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { Icon } from '../Icon'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport styles from './EmptyState.module.css'\n\nexport type EmptyStateSize = 'sm' | 'md' | 'lg'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\nexport interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Leading glyph shown in a soft circle — an `IconName`, any node, or `false` to hide it. Defaults to `FolderOpen`. */\n icon?: IconName | ReactNode | false\n /** Heading line. Defaults to `\"No Results Found\"`. */\n title?: ReactNode\n /** Muted description under the title (e.g. a hint on what to do next). */\n description?: ReactNode\n /** Action slot under the text — e.g. an \"Add Item\" or \"Clear Filters\" button. */\n action?: ReactNode\n /** Size — scales the icon, text, and vertical padding. Defaults to `md`. */\n size?: EmptyStateSize\n /**\n * Polished \"hero\" look: a faded grid backdrop (fades out toward the edges) + an elevated icon\n * (gradient + drop shadow). Defaults to `true`; pass `pattern={false}` for the flat, compact placeholder.\n */\n pattern?: boolean\n /** Extra content rendered below the action. */\n children?: ReactNode\n}\n\n/**\n * The empty-state placeholder — drop it in wherever a page, table, list, or gallery has nothing to\n * show (no records yet, no search matches). A centered, muted glyph in a soft circle + a `title` +\n * an optional `description` and `action` (e.g. a \"Add Item\" / \"Clear Filters\" button). Neutral by\n * design; pass a custom `icon` node for a tinted glyph. Token-only styling.\n */\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(\n { icon, title, description, action, size = 'md', pattern = true, className, children, ...props },\n ref,\n) {\n const t = useT()\n const resolvedTitle = title ?? t('emptyState.title')\n const renderedIcon =\n icon === false ? null : icon == null ? (\n <Icon name=\"FolderOpen\" />\n ) : typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} />\n ) : (\n icon\n )\n\n return (\n <div\n ref={ref}\n className={clsx(styles.emptyState, styles[size], pattern && styles.pattern, className)}\n {...props}\n >\n {renderedIcon != null && (\n <div className={styles.icon} aria-hidden>\n {renderedIcon}\n </div>\n )}\n {resolvedTitle != null && <div className={styles.title}>{resolvedTitle}</div>}\n {description != null && <div className={styles.description}>{description}</div>}\n {action != null && <div className={styles.action}>{action}</div>}\n {children}\n </div>\n )\n})\n"],"names":["ICON_NAME_SET","ICON_NAMES","EmptyState","forwardRef","icon","title","description","action","size","pattern","className","children","props","ref","t","useT","resolvedTitle","renderedIcon","jsx","Icon","jsxs","clsx","styles"],"mappings":";;;;;;;;;;;;;;;;GASMA,IAAgB,IAAI,IAAYC,CAAU,GA4BnCC,IAAaC,EAA4C,SACpE,EAAE,MAAAC,GAAM,OAAAC,GAAO,aAAAC,GAAa,QAAAC,GAAQ,MAAAC,IAAO,MAAM,SAAAC,IAAU,IAAM,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GACzFC,GACA;AACA,QAAMC,IAAIC,EAAA,GACJC,IAAgBX,KAASS,EAAE,kBAAkB,GAC7CG,IACJb,MAAS,KAAQ,OAAOA,KAAQ,OAC9B,gBAAAc,EAACC,GAAA,EAAK,MAAK,aAAA,CAAa,IACtB,OAAOf,KAAS,YAAYJ,EAAc,IAAII,CAAI,IACpD,gBAAAc,EAACC,GAAA,EAAK,MAAMf,EAAA,CAAkB,IAE9BA;AAGJ,SACE,gBAAAgB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAP;AAAA,MACA,WAAWQ,EAAKC,EAAO,YAAYA,EAAOd,CAAI,GAAGC,KAAWa,EAAO,SAASZ,CAAS;AAAA,MACpF,GAAGE;AAAA,MAEH,UAAA;AAAA,QAAAK,KAAgB,0BACd,OAAA,EAAI,WAAWK,EAAO,MAAM,eAAW,IACrC,UAAAL,EAAA,CACH;AAAA,QAEDD,KAAiB,QAAQ,gBAAAE,EAAC,SAAI,WAAWI,EAAO,OAAQ,UAAAN,GAAc;AAAA,QACtEV,KAAe,QAAQ,gBAAAY,EAAC,SAAI,WAAWI,EAAO,aAAc,UAAAhB,GAAY;AAAA,QACxEC,KAAU,QAAQ,gBAAAW,EAAC,SAAI,WAAWI,EAAO,QAAS,UAAAf,GAAO;AAAA,QACzDI;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const t=require("react/jsx-runtime"),d=require("react"),H=require("clsx"),W=require("@dnd-kit/core"),se=require("@dnd-kit/sortable"),Nt=require("@dnd-kit/utilities"),kt=require("@formkit/auto-animate/react"),Ft=require("react-dropzone"),Rt=require("./formContext-bTWrqdEV.cjs"),He=require("./toastStore-B4Tk2Xk7.cjs"),C=require("./Icon-CXTl_QAP.cjs"),ae=require("./Typography-BFatE1_A.cjs"),zt=require("react-image-crop"),Ke=require("./Button-D4bfVNNa.cjs"),Ve=require("./Modal-B2YSCVVt.cjs"),Ct=require("./TextField-BPefnD5M.cjs"),ie=require("./ConfigProvider-ByOFXVyP.cjs"),Se=require("./TextField.module-m-UllwzG.cjs"),Dt="_cropSection_1j2zs_4",Mt="_cropHead_1j2zs_10",Pt="_cropStage_1j2zs_16",Bt="_crop_1j2zs_4",$t="_cropImg_1j2zs_30",Ot="_altFields_1j2zs_35",Y={cropSection:Dt,cropHead:Mt,cropStage:Pt,crop:Bt,cropImg:$t,altFields:Ot};function Lt({mode:n,name:o,imageUrl:u,mimeType:g,editLocales:y,initialDraft:U,onClose:I,onSave:D}){const h=ie.useT(),k=d.useRef(null),[_,M]=d.useState(),[a,P]=d.useState(null),[B,K]=d.useState(null),[V,$]=d.useState(U),[O,J]=d.useState(null),[E,j]=d.useState(!1),Q=(i,w)=>{M(w);const f=k.current;if(f&&f.width>0&&i.width>=1&&i.height>=1){const L=f.naturalWidth/f.width,G=f.naturalHeight/f.height;P({x:Math.round(i.x*L),y:Math.round(i.y*G),width:Math.round(i.width*L),height:Math.round(i.height*G)})}else P(null)},S=async()=>{const i=k.current;if(!i||!a||a.width<1||a.height<1)return;const w=document.createElement("canvas");w.width=a.width,w.height=a.height;const f=w.getContext("2d");if(!f)return;f.imageSmoothingEnabled=!1,f.drawImage(i,a.x,a.y,a.width,a.height,0,0,a.width,a.height);const L=await new Promise(G=>w.toBlob(G,g,1));if(!L)throw new Error("canvas.toBlob returned null");return new File([L],o,{type:g,lastModified:Date.now()})},X=async()=>{if(n==="altText"){D({draft:V});return}j(!0);try{const i=a&&a.width>=1&&a.height>=1?await S():void 0;D({croppedFile:i})}catch{J(h("fileUploader.cropError")),j(!1)}};return t.jsx(Ve.Modal,{open:!0,onClose:I,size:n==="crop"?"lg":"sm",icon:n==="crop"?"Crop":"Text",title:h(n==="crop"?"fileUploader.cropTitle":"fileUploader.altTitle"),description:o,footer:t.jsxs(t.Fragment,{children:[t.jsx(Ke.Button,{variant:"text",color:"accent",onClick:I,disabled:E,children:h("common.cancel")}),t.jsx(Ke.Button,{onClick:X,loading:E,children:h("common.save")})]}),children:n==="crop"?t.jsxs("div",{className:Y.cropSection,children:[t.jsxs("div",{className:Y.cropHead,children:[t.jsx(ae.Typography,{variant:"bodySmall",color:"muted",children:h("fileUploader.cropHint")}),t.jsx(ae.Typography,{variant:"bodySmall",color:a?"text":"muted",children:a?`${a.width} × ${a.height} px`:B?`${B.w} × ${B.h} px`:""})]}),t.jsx("div",{className:Y.cropStage,children:t.jsx(zt,{crop:_,onChange:Q,className:Y.crop,children:t.jsx("img",{ref:k,src:u??void 0,alt:"",className:Y.cropImg,onLoad:i=>K({w:i.currentTarget.naturalWidth,h:i.currentTarget.naturalHeight})})})}),O&&t.jsx(ae.Typography,{variant:"bodySmall",color:"error",children:O})]}):t.jsx("div",{className:Y.altFields,children:y.map(i=>t.jsx(Ct.TextField,{label:i.label??(i.code||h("fileUploader.altTitle")),placeholder:h("fileUploader.altPlaceholder"),value:V[i.code]??"",onChange:w=>$(f=>({...f,[i.code]:w.target.value}))},i.code))})})}const qt="_backdrop_1c3fg_5",At="_media_1c3fg_9",Wt="_mediaSvg_1c3fg_19",Ht="_close_1c3fg_27",re={backdrop:qt,media:At,mediaSvg:Wt,close:Ht};function Kt({url:n,isVideo:o,isSvg:u,name:g,onClose:y}){const U=ie.useT();return t.jsxs(Ve.Overlay,{open:!0,onClose:y,dim:.85,className:re.backdrop,role:"dialog","aria-modal":"true","aria-label":U("fileUploader.preview",{name:g}),children:[t.jsx("button",{type:"button",className:re.close,"aria-label":U("fileUploader.closePreview"),onClick:y,autoFocus:!0,children:t.jsx(C.Icon,{name:"Close",size:"lg"})}),o?t.jsx("video",{src:n,className:re.media,controls:!0,playsInline:!0}):t.jsx("img",{src:n,alt:g,className:H.clsx(re.media,u&&re.mediaSvg)})]})}const Vt="_root_1ed4u_4",Gt="_fullWidth_1ed4u_9",Yt="_disabled_1ed4u_14",Jt="_dropzone_1ed4u_17",Qt="_dropText_1ed4u_41",Xt="_dropping_1ed4u_56",Zt="_error_1ed4u_61",eo="_dropIcon_1ed4u_65",to="_prompt_1ed4u_77",oo="_accent_1ed4u_82",no="_hint_1ed4u_87",ro="_list_1ed4u_93",so="_populated_1ed4u_102",lo="_tile_1ed4u_120",ao="_grabbable_1ed4u_129",io="_entering_1ed4u_138",co="_dragging_1ed4u_141",uo="_tileError_1ed4u_147",fo="_tileImg_1ed4u_152",po="_tileFallback_1ed4u_159",go="_tilePlay_1ed4u_169",ho="_tileTop_1ed4u_188",mo="_tileBottom_1ed4u_198",_o="_tileRemove_1ed4u_208",xo="_tileAction_1ed4u_209",bo="_tileActionEnd_1ed4u_244",vo="_tileText_1ed4u_247",yo="_name_1ed4u_254",jo="_nameBase_1ed4u_261",So="_nameExt_1ed4u_267",wo="_tileMeta_1ed4u_271",To="_metaError_1ed4u_275",s={root:Vt,fullWidth:Gt,disabled:Yt,dropzone:Jt,dropText:Qt,dropping:Xt,error:Zt,dropIcon:eo,prompt:to,accent:oo,hint:no,list:ro,populated:so,tile:lo,grabbable:ao,entering:io,dragging:co,tileError:uo,tileImg:fo,tileFallback:po,tilePlay:go,tileTop:ho,tileBottom:mo,tileRemove:_o,tileAction:xo,tileActionEnd:bo,tileText:vo,name:yo,nameBase:jo,nameExt:So,tileMeta:wo,metaError:To},Ge=()=>typeof URL<"u"&&typeof URL.createObjectURL=="function",Uo=300,Io=(n,o,u,g)=>{let y=[{},{}],U=Uo;if(o==="add")U=0;else if(o==="remove")y=[{opacity:1,transform:"translateY(0)"},{opacity:0,transform:"translateY(-8px)"}];else if(u&&g){const I=u.left-g.left,D=u.top-g.top;y=[{transform:`translate(${I}px, ${D}px)`},{transform:"translate(0, 0)"}]}return new KeyframeEffect(n,y,{duration:U,easing:"ease-out"})},le=n=>{if(n<1024)return`${n} B`;const o=["KB","MB","GB","TB"];let u=n/1024,g=0;for(;u>=1024&&g<o.length-1;)u/=1024,g+=1;return`${u.toFixed(u<10?1:0)} ${o[g]}`},Eo=n=>{if(typeof n=="number")return n;const o=/^\s*([\d.]+)\s*(b|kb|mb|gb|tb)?\s*$/i.exec(n);if(!o)return;const u={b:1,kb:1024,mb:1024**2,gb:1024**3,tb:1024**4};return parseFloat(o[1])*(u[(o[2]||"b").toLowerCase()]??1)},Ye=n=>`f:${n.name}:${n.size}:${n.lastModified}`,No=n=>n.file?Ye(n.file):`s:${n.source??""}`,pe=n=>n.file?n.file.name:n.source?/^(data|blob):/i.test(n.source)?"File":n.source.split(/[?#]/)[0].split("/").pop()||"File":"File",we=n=>{if(n.file)return n.file.type.startsWith("image/");const o=n.source;return o?/^data:image\//i.test(o)?!0:/^data:/i.test(o)?!1:/\.(png|jpe?g|gif|webp|avif|svg|bmp|ico|heic|heif)(?:[?#]|$)/i.test(o)||!/\.[a-z0-9]{1,8}(?:[?#]|$)/i.test(o):!1},Te=n=>{if(n.file)return n.file.type.startsWith("video/");const o=n.source;return o?/^data:video\//i.test(o)||/\.(mp4|webm|ogg|ogv|mov|m4v|avi|mkv)(?:[?#]|$)/i.test(o):!1},ko=n=>{if(typeof document>"u")return;const o=document.createElement("a");if(o.style.display="none",n.file){if(!Ge())return;const u=URL.createObjectURL(n.file);o.href=u,o.download=n.file.name,document.body.appendChild(o),o.click(),o.remove(),setTimeout(()=>URL.revokeObjectURL(u),1e3)}else n.source&&(o.href=n.source,o.download=pe(n),o.target="_blank",o.rel="noopener",document.body.appendChild(o),o.click(),o.remove())},Fo=n=>{const o=n.lastIndexOf(".");return o>0&&n.length-o<=7?{base:n.slice(0,o),ext:n.slice(o)}:{base:n,ext:""}};function Ro({id:n,item:o,preview:u,sortable:g,entering:y,disabled:U,error:I,onRemove:D,onCrop:h,onAltText:k,onDownload:_,onView:M,onPreviewError:a}){const{attributes:P,listeners:B,setNodeRef:K,transform:V,transition:$,isDragging:O}=se.useSortable({id:n,disabled:!g}),J={transform:Nt.CSS.Transform.toString(V),transition:$},E=ie.useT(),j=pe(o),{base:Q,ext:S}=Fo(j),X=o.file?le(o.file.size):E("fileUploader.uploaded"),i=Te(o),w=_?t.jsx("button",{type:"button",className:s.tileAction,"aria-label":E("fileUploader.download",{name:j}),onClick:_,onPointerDown:f=>f.stopPropagation(),children:t.jsx(C.Icon,{name:"DocumentDownload",size:"sm"})}):null;return t.jsxs("div",{ref:K,style:J,className:H.clsx(s.tile,g&&s.grabbable,y&&s.entering,O&&s.dragging,I&&s.tileError),...P,...B,children:[u?i?t.jsxs(t.Fragment,{children:[t.jsx("video",{src:u,className:s.tileImg,muted:!0,playsInline:!0,preload:"metadata",draggable:!1,onError:a}),t.jsx("span",{className:s.tilePlay,"aria-hidden":"true",children:t.jsx(C.Icon,{name:"Play",size:"lg"})})]}):t.jsx("img",{src:u,alt:"",className:s.tileImg,draggable:!1,onError:a}):t.jsx("span",{className:s.tileFallback,"aria-hidden":"true",children:t.jsx(C.Icon,{name:"Document",size:"lg"})}),t.jsxs("div",{className:s.tileTop,children:[t.jsxs("span",{className:s.tileText,children:[t.jsxs("span",{className:s.name,title:j,children:[t.jsx("span",{className:s.nameBase,children:Q}),S&&t.jsx("span",{className:s.nameExt,children:S})]}),t.jsx("span",{className:H.clsx(s.tileMeta,I&&s.metaError),children:I??X})]}),!U&&t.jsx("button",{type:"button",className:s.tileRemove,"aria-label":E("fileUploader.remove",{name:j}),onClick:D,onPointerDown:f=>f.stopPropagation(),children:t.jsx(C.Icon,{name:"Close",size:"sm"})})]}),(h||k||_||M)&&t.jsxs("div",{className:s.tileBottom,children:[h&&t.jsx("button",{type:"button",className:s.tileAction,"aria-label":E("fileUploader.crop",{name:j}),onClick:h,onPointerDown:f=>f.stopPropagation(),children:t.jsx(C.Icon,{name:"Crop",size:"sm"})}),k&&t.jsx("button",{type:"button",className:s.tileAction,"aria-label":E("fileUploader.editAlt",{name:j}),onClick:k,onPointerDown:f=>f.stopPropagation(),children:t.jsx(C.Icon,{name:"Text",size:"sm"})}),w,M&&t.jsx("button",{type:"button",className:H.clsx(s.tileAction,s.tileActionEnd),"aria-label":E("fileUploader.preview",{name:j}),onClick:M,onPointerDown:f=>f.stopPropagation(),children:t.jsx(C.Icon,{name:"Eye",size:"sm"})})]})]})}const zo=d.forwardRef(function({multiple:o=!1,allowDrop:u=!0,allowReorder:g=!0,allowDownload:y=!0,allowPreview:U=!0,allowAltText:I=!0,altTextLocales:D,localizedAltText:h=!0,allowDuplicates:k=!1,disabled:_=!1,accept:M,maxFiles:a,maxFileSize:P,itemInsertLocation:B="end",value:K,defaultValue:V,onChange:$,label:O,error:J,helperText:E,required:j=!1,fullWidth:Q=!0,name:S,id:X,onBlur:i,className:w,style:f,...L},G){var qe;const Je=d.useId(),Ue=X??Je,Ie=`${Ue}-helper`,F=P!=null?Eo(P):void 0,[ce,ge]=d.useState(null);d.useEffect(()=>{if(!ce)return;const e=window.setTimeout(()=>ge(null),4e3);return()=>window.clearTimeout(e)},[ce]);const Z=Rt.useFormContext(),Ee=!!(Z&&S),R=Z&&S?Z.field(S):void 0,Ne=o?[]:null,ke=K!==void 0?K:Ee?Z.values[S]??Ne:void 0,Fe=ke!==void 0,[Qe,Xe]=d.useState(V??Ne),ee=Fe?ke:Qe,m=ee==null?[]:Array.isArray(ee)?ee:[ee],he=J??(R==null?void 0:R.error)??!1,Ze=E??(R==null?void 0:R.helperText),me=ce??Ze,et=!!ce||he,de=g&&o&&!_,Re=d.useRef(new WeakMap),ze=d.useRef(0),tt=(e,r)=>{if(e.file){let l=Re.current.get(e.file);return l||(ze.current+=1,l=`f${ze.current}`,Re.current.set(e.file,l)),l}return e.source?`s:${e.source}`:`i:${r}`},T=m.map((e,r)=>tt(e,r)),Ce=d.useRef(new Set),ot=new Set(T.filter(e=>!Ce.current.has(e)));d.useEffect(()=>{Ce.current=new Set(T)});const[nt,De]=d.useState(()=>new Set),rt=e=>De(r=>r.has(e)?r:new Set(r).add(e)),[st,lt]=d.useState(()=>new Set),at=e=>lt(r=>r.has(e)?r:new Set(r).add(e)),ue=d.useRef(new Map),fe=e=>{if(e.file){const r=e.file.type;if(!r.startsWith("image/")&&!r.startsWith("video/")||!Ge()||st.has(e.file))return null;let l=ue.current.get(e.file);return l||(l=URL.createObjectURL(e.file),ue.current.set(e.file,l)),l}return e.source&&!nt.has(e.source)?e.source:null},[z,Me]=d.useState(null);d.useEffect(()=>{const e=ue.current,r=new Set(m.map(c=>c.file).filter(Boolean)),l=new Set(m.filter(c=>!c.file&&c.source).map(c=>c.source));for(const[c,p]of e)!r.has(c)&&p!==(z==null?void 0:z.url)&&(URL.revokeObjectURL(p),e.delete(c));De(c=>{if(c.size===0)return c;const p=new Set([...c].filter(b=>l.has(b)));return p.size===c.size?c:p})},[ee,z]),d.useEffect(()=>{const e=ue.current;return()=>{for(const r of e.values())URL.revokeObjectURL(r);e.clear()}},[]);const it=e=>e.map((r,l)=>r.sortIndex===l?r:{...r,sortIndex:l}),te=e=>{const r=it(e),l=o?r:r[0]??null;Fe||Xe(l),Ee&&Z.setValue(S,l),$==null||$(l)},_e=()=>R==null?void 0:R.onBlur({}),x=ie.useT(),ct=ie.useLocales(),Pe=D??ct,dt=h&&Pe.length>0?Pe:[{code:""}],[oe,xe]=d.useState(null),[Be,$e]=d.useState("altText"),be=oe!=null?T.indexOf(oe):-1,N=be!==-1?m[be]:null,ut=e=>{$e("crop"),xe(T[e]??null)},ft=e=>{$e("altText"),xe(T[e]??null)},ve=()=>xe(null),pt=e=>{const r=fe(e);if(!r)return;const l=e.file?e.file.type==="image/svg+xml":/^data:image\/svg/i.test(e.source??"")||/\.svg(?:[?#]|$)/i.test(e.source??"");Me({url:r,isVideo:Te(e),isSvg:l,name:pe(e)})},gt=N?h?N.altText&&typeof N.altText=="object"?{...N.altText}:{}:{"":typeof N.altText=="string"?N.altText:""}:{},ht=({draft:e,croppedFile:r})=>{if(be===-1)return ve();te(m.map((l,c)=>{if(T[c]!==oe)return l;const p={...l};if(e!==void 0)if(h){const b=Object.fromEntries(Object.entries(e).map(([q,v])=>[q,v.trim()]).filter(([,q])=>q!==""));p.altText=Object.keys(b).length>0?b:void 0}else p.altText=(e[""]??"").trim()||void 0;return r&&(p.file=r,p.source=""),p})),ve()},mt=(e,r=[])=>{const l=r.filter(v=>v.errors.some(A=>A.code==="file-invalid-type")),c=r.filter(v=>v.errors.some(A=>A.code==="file-too-large"));l.length>0&&He.toast.error(l.length===1?x("fileUploader.wrongTypeOne",{name:l[0].file.name}):x("fileUploader.wrongTypeMany",{count:l.length})),c.length>0&&F!=null&&He.toast.error(c.length===1?x("fileUploader.tooLargeOne",{name:c[0].file.name,size:le(F)}):x("fileUploader.tooLargeMany",{count:c.length,size:le(F)}));const p=[];let b=e;if(o&&!k){const v=new Set(m.map(No)),A=[];for(const Ae of b){const We=Ye(Ae);v.has(We)||(v.add(We),A.push(Ae))}A.length<b.length&&p.push(x("fileUploader.duplicate")),b=A}if(o&&a!=null){const v=Math.max(0,a-m.length);b.length>v&&(b=b.slice(0,v),p.push(a===1?x("fileUploader.hintUpToOne",{count:a}):x("fileUploader.hintUpToMany",{count:a})))}if(ge(p.length>0?p.join(" · "):null),b.length===0)return;const q=b.map(v=>({file:v,source:"",sortIndex:0}));if(!o){te([q[0]]);return}te(B==="start"?[...q,...m]:[...m,...q])},_t=e=>{ge(null),te(m.filter((r,l)=>l!==e)),_e()},[xt,ye]=kt.useAutoAnimate(Io),Oe=()=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>ye(!0)):ye(!0)},bt=()=>ye(!1),vt=()=>Oe(),yt=e=>{const{active:r,over:l}=e;if(l&&r.id!==l.id){const c=T.indexOf(String(r.id)),p=T.indexOf(String(l.id));c!==-1&&p!==-1&&te(se.arrayMove(m,c,p))}Oe()},jt=W.useSensors(W.useSensor(W.PointerSensor,{activationConstraint:{distance:5}}),W.useSensor(W.KeyboardSensor,{coordinateGetter:se.sortableKeyboardCoordinates})),ne=d.useRef(!1),{getRootProps:St,getInputProps:wt,isDragActive:Tt}=Ft.useDropzone({multiple:o,accept:M,maxSize:F,disabled:_,noKeyboard:!1,noDrag:!u,onFileDialogOpen:()=>{ne.current=!0},onFileDialogCancel:()=>{ne.current=!1,_e()},onDrop:(e,r)=>{ne.current=!1,mt(e,r)}}),Ut=o||m.length===0,je=[];o&&a!=null&&je.push(a===1?x("fileUploader.hintUpToOne",{count:a}):x("fileUploader.hintUpToMany",{count:a})),F!=null&&je.push(x("fileUploader.hintMax",{size:le(F)}));const Le=je.join(" · "),It=u?t.jsxs(t.Fragment,{children:[t.jsx("span",{className:s.accent,children:x("fileUploader.choose")})," ",x("fileUploader.dropSuffix")]}):t.jsx("span",{className:s.accent,children:x("fileUploader.choose")}),Et=e=>{if(i==null||i(e),!e.currentTarget.contains(e.relatedTarget)&&oe==null){if(ne.current){ne.current=!1;return}_e()}};return t.jsxs("div",{ref:G,id:Ue,className:H.clsx(s.root,Q&&s.fullWidth,he&&s.error,_&&s.disabled,w),style:f,"aria-invalid":he||void 0,"aria-describedby":me!=null?Ie:void 0,onBlur:Et,...L,...S?{name:S,tabIndex:-1}:{},children:[O!=null&&t.jsxs("label",{className:Se.fieldStyles.label,children:[t.jsx(ae.Typography,{as:"span",variant:"bodySmall",color:"muted",children:O}),j&&t.jsx("span",{className:Se.fieldStyles.required,"aria-hidden":"true",children:"*"})]}),Ut&&t.jsxs("div",{...St({className:H.clsx(s.dropzone,Tt&&s.dropping)}),children:[t.jsx("input",{...wt()}),t.jsx("span",{className:s.dropIcon,"aria-hidden":"true",children:t.jsx(C.Icon,{name:"DocumentUpload",size:"lg"})}),t.jsxs("span",{className:s.dropText,children:[t.jsx("span",{className:s.prompt,children:It}),Le&&t.jsx("span",{className:s.hint,children:Le})]})]}),t.jsx(W.DndContext,{sensors:jt,collisionDetection:W.closestCenter,onDragStart:de?bt:void 0,onDragEnd:de?yt:void 0,onDragCancel:de?vt:void 0,children:t.jsx(se.SortableContext,{items:T,strategy:se.rectSortingStrategy,children:t.jsx("div",{ref:xt,className:H.clsx(s.list,m.length>0&&s.populated),children:m.map((e,r)=>t.jsx(Ro,{id:T[r],item:e,preview:fe(e),sortable:de&&m.length>1,entering:ot.has(T[r]),disabled:_,error:e.file&&F!=null&&e.file.size>F?x("fileUploader.exceedsLimit",{size:le(F)}):void 0,onRemove:()=>_t(r),onCrop:I&&!_&&we(e)?()=>ut(r):void 0,onAltText:I&&!_&&we(e)?()=>ft(r):void 0,onDownload:y&&!_?()=>ko(e):void 0,onView:U&&!_&&fe(e)!=null&&(we(e)||Te(e))?()=>pt(e):void 0,onPreviewError:e.file?()=>at(e.file):e.source?()=>rt(e.source):void 0},T[r]))})})}),me!=null&&t.jsx(ae.Typography,{as:"span",id:Ie,variant:"bodySmall",color:et?"error":"muted",className:Se.fieldStyles.helper,role:"status","aria-live":"polite",children:me}),N&&t.jsx(Lt,{mode:Be,name:pe(N),imageUrl:fe(N),mimeType:((qe=N.file)==null?void 0:qe.type)||"image/png",editLocales:dt,initialDraft:gt,onClose:ve,onSave:ht},`${oe}:${Be}`),z&&t.jsx(Kt,{url:z.url,isVideo:z.isVideo,isSvg:z.isSvg,name:z.name,onClose:()=>Me(null)})]})});exports.FileUploader=zo;
|
|
2
|
+
//# sourceMappingURL=FileUploader-B4TJHyoi.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUploader-B4TJHyoi.cjs","sources":["../src/components/FileUploader/FileUploaderEditDialog.tsx","../src/components/FileUploader/FileUploaderPreview.tsx","../src/components/FileUploader/FileUploader.tsx"],"sourcesContent":["import { useRef, useState, type ChangeEvent } from 'react'\nimport ReactCrop, { type Crop, type PercentCrop, type PixelCrop } from 'react-image-crop'\nimport 'react-image-crop/dist/ReactCrop.css'\nimport { useT, type LocaleConfig } from '../../theme'\nimport { Button } from '../Button'\nimport { Modal } from '../Modal'\nimport { TextField } from '../TextField'\nimport { Typography } from '../Typography'\nimport styles from './FileUploaderEditDialog.module.css'\n\n/** What a dialog hands back on Save: the alt-text draft (alt-text mode) or a cropped File (crop mode). */\nexport interface EditDialogResult {\n /** Alt-text values keyed by locale code (or the single `''` key in non-localized mode). */\n draft?: Record<string, string>\n /** A freshly-cropped File (native-resolution, lossless). */\n croppedFile?: File\n}\n\nexport interface FileUploaderEditDialogProps {\n /** Which editor to show — the **crop** stage or the **alt text** fields (each is its own modal). */\n mode: 'crop' | 'altText'\n /** Display name (modal description + the cropped File's name). */\n name: string\n /** Image URL for crop mode (object URL for a File, or the source URL). */\n imageUrl: string | null\n /** MIME type for the cropped output — keeps the original (PNG ⇒ lossless). */\n mimeType: string\n /** Locales for the alt-text editor (one field each); a single `{ code: '' }` ⇒ one plain field. */\n editLocales: LocaleConfig[]\n /** The alt-text draft to seed from the item's current value. */\n initialDraft: Record<string, string>\n /** Close without saving. */\n onClose: () => void\n /** Commit the result (alt-text draft or cropped File). */\n onSave: (result: EditDialogResult) => void\n}\n\n/** The crop selection in the image's NATIVE pixels — what actually gets exported (no resample / resize). */\ninterface NaturalCrop {\n x: number\n y: number\n width: number\n height: number\n}\n\n/**\n * The FileUploader per-item edit modal. Two separate modes (each opened from its own card button):\n * **`crop`** — a draggable selection over the image, exported at the image's native resolution (lossless,\n * dimensions shown live); **`altText`** — one `TextField` per locale (stacked, no tabs). Built on the\n * library's `Modal` + `TextField` and **`react-image-crop`** (an optional peer). Internal — not exported.\n */\nexport function FileUploaderEditDialog({\n mode,\n name,\n imageUrl,\n mimeType,\n editLocales,\n initialDraft,\n onClose,\n onSave,\n}: FileUploaderEditDialogProps) {\n const t = useT()\n const imgRef = useRef<HTMLImageElement>(null)\n const [crop, setCrop] = useState<Crop>()\n // store the crop in NATIVE coords (computed on every drag) so the export never depends on display size\n const [naturalCrop, setNaturalCrop] = useState<NaturalCrop | null>(null)\n // the image's intrinsic size (captured on load) — shown as the readout until a crop is selected\n const [naturalSize, setNaturalSize] = useState<{ w: number; h: number } | null>(null)\n const [draft, setDraft] = useState<Record<string, string>>(initialDraft)\n const [cropError, setCropError] = useState<string | null>(null)\n const [busy, setBusy] = useState(false)\n\n const onCropChange = (px: PixelCrop, percent: PercentCrop) => {\n setCrop(percent)\n const img = imgRef.current\n if (img && img.width > 0 && px.width >= 1 && px.height >= 1) {\n const sx = img.naturalWidth / img.width\n const sy = img.naturalHeight / img.height\n setNaturalCrop({\n x: Math.round(px.x * sx),\n y: Math.round(px.y * sy),\n width: Math.round(px.width * sx),\n height: Math.round(px.height * sy),\n })\n } else {\n setNaturalCrop(null)\n }\n }\n\n // Crop at native resolution: copy the selected region 1:1 (no resample → no quality loss, no resize).\n const buildCroppedFile = async (): Promise<File | undefined> => {\n const image = imgRef.current\n if (!image || !naturalCrop || naturalCrop.width < 1 || naturalCrop.height < 1) return undefined\n const canvas = document.createElement('canvas')\n canvas.width = naturalCrop.width\n canvas.height = naturalCrop.height\n const ctx = canvas.getContext('2d')\n if (!ctx) return undefined\n ctx.imageSmoothingEnabled = false // 1:1 native-pixel copy — no resampling\n ctx.drawImage(\n image,\n naturalCrop.x,\n naturalCrop.y,\n naturalCrop.width,\n naturalCrop.height,\n 0,\n 0,\n naturalCrop.width,\n naturalCrop.height,\n )\n // toBlob throws on a cross-origin-tainted canvas — let handleSave catch it\n const blob = await new Promise<Blob | null>((resolve) => canvas.toBlob(resolve, mimeType, 1))\n // a null blob is a failed export too (not just tainted) — throw so it surfaces as a crop error\n // instead of silently resolving to `undefined` and discarding the crop with no feedback\n if (!blob) throw new Error('canvas.toBlob returned null')\n return new File([blob], name, { type: mimeType, lastModified: Date.now() })\n }\n\n const handleSave = async () => {\n if (mode === 'altText') {\n onSave({ draft })\n return\n }\n setBusy(true)\n try {\n const croppedFile =\n naturalCrop && naturalCrop.width >= 1 && naturalCrop.height >= 1\n ? await buildCroppedFile()\n : undefined\n onSave({ croppedFile }) // parent commits + closes (this dialog unmounts)\n } catch {\n setCropError(t('fileUploader.cropError'))\n setBusy(false)\n }\n }\n\n return (\n <Modal\n open\n onClose={onClose}\n size={mode === 'crop' ? 'lg' : 'sm'}\n icon={mode === 'crop' ? 'Crop' : 'Text'}\n title={mode === 'crop' ? t('fileUploader.cropTitle') : t('fileUploader.altTitle')}\n description={name}\n footer={\n <>\n <Button variant=\"text\" color=\"accent\" onClick={onClose} disabled={busy}>\n {t('common.cancel')}\n </Button>\n <Button onClick={handleSave} loading={busy}>\n {t('common.save')}\n </Button>\n </>\n }\n >\n {mode === 'crop' ? (\n <div className={styles.cropSection}>\n <div className={styles.cropHead}>\n <Typography variant=\"bodySmall\" color=\"muted\">\n {t('fileUploader.cropHint')}\n </Typography>\n <Typography variant=\"bodySmall\" color={naturalCrop ? 'text' : 'muted'}>\n {naturalCrop\n ? `${naturalCrop.width} × ${naturalCrop.height} px`\n : naturalSize\n ? `${naturalSize.w} × ${naturalSize.h} px`\n : ''}\n </Typography>\n </div>\n <div className={styles.cropStage}>\n <ReactCrop crop={crop} onChange={onCropChange} className={styles.crop}>\n <img\n ref={imgRef}\n src={imageUrl ?? undefined}\n alt=\"\"\n className={styles.cropImg}\n onLoad={(e) =>\n setNaturalSize({\n w: e.currentTarget.naturalWidth,\n h: e.currentTarget.naturalHeight,\n })\n }\n />\n </ReactCrop>\n </div>\n {cropError && (\n <Typography variant=\"bodySmall\" color=\"error\">\n {cropError}\n </Typography>\n )}\n </div>\n ) : (\n <div className={styles.altFields}>\n {editLocales.map((l) => (\n <TextField\n key={l.code}\n label={l.label ?? (l.code || t('fileUploader.altTitle'))}\n placeholder={t('fileUploader.altPlaceholder')}\n value={draft[l.code] ?? ''}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n setDraft((d) => ({ ...d, [l.code]: e.target.value }))\n }\n />\n ))}\n </div>\n )}\n </Modal>\n )\n}\n","import { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { Icon } from '../Icon'\nimport { Overlay } from '../Overlay/Overlay'\nimport styles from './FileUploaderPreview.module.css'\n\nexport interface FileUploaderPreviewProps {\n /** The media URL (a File's object URL or a source URL). */\n url: string\n /** Render a `<video controls>` instead of an `<img>`. */\n isVideo: boolean\n /**\n * The image is an SVG — a vector has no reliable pixel size (a viewBox-only icon shows tiny, a sizeless\n * one collapses to nothing), so when set the image is given a floored box (`min-*` + `object-fit:\n * contain`): a small SVG scales up to a visible minimum while a larger one keeps its real size.\n */\n isSvg?: boolean\n /** Accessible name / image alt. */\n name: string\n /** Dismiss the overlay. */\n onClose: () => void\n}\n\n/**\n * A fullscreen media lightbox for the FileUploader — a dark backdrop with the image (or a `<video>` with\n * controls) centered. Built on the shared `<Overlay>` (portal to `<body>`, scroll-lock, fade-in, backdrop\n * / Escape dismissal); a darker scrim (`dim={0.85}`) than a Modal since media reads over black. Opened\n * from a card's **Eye** button (image + video items only). Internal — not exported.\n */\nexport function FileUploaderPreview({\n url,\n isVideo,\n isSvg,\n name,\n onClose,\n}: FileUploaderPreviewProps) {\n const t = useT()\n return (\n <Overlay\n open\n onClose={onClose}\n dim={0.85}\n className={styles.backdrop}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={t('fileUploader.preview', { name })}\n >\n <button\n type=\"button\"\n className={styles.close}\n aria-label={t('fileUploader.closePreview')}\n onClick={onClose}\n autoFocus\n >\n <Icon name=\"Close\" size=\"lg\" />\n </button>\n {isVideo ? (\n <video src={url} className={styles.media} controls playsInline />\n ) : (\n // an SVG's natural size is unreliable, so it always gets the floored box (`.mediaSvg`); a raster\n // keeps its natural size, only capped to the viewport (`.media`)\n <img src={url} alt={name} className={clsx(styles.media, isSvg && styles.mediaSvg)} />\n )}\n </Overlay>\n )\n}\n","import {\n forwardRef,\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type FocusEvent,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport {\n DndContext,\n KeyboardSensor,\n PointerSensor,\n closestCenter,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core'\nimport {\n SortableContext,\n arrayMove,\n useSortable,\n sortableKeyboardCoordinates,\n rectSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport type { AutoAnimationPlugin } from '@formkit/auto-animate'\nimport { useAutoAnimate } from '@formkit/auto-animate/react'\nimport { useDropzone, type Accept, type FileRejection } from 'react-dropzone'\nimport { useFormContext } from '../../form/formContext'\nimport { useLocales, useT, type LocaleConfig } from '../../theme'\nimport { toast } from '../Toast/toastStore'\nimport { Icon } from '../Icon'\nimport { Typography } from '../Typography'\nimport { FileUploaderEditDialog, type EditDialogResult } from './FileUploaderEditDialog'\nimport { FileUploaderPreview } from './FileUploaderPreview'\n// shared field chrome (wrapper / label / required / helper) — the Slider precedent\nimport fieldStyles from '../TextField/TextField.module.css'\nimport styles from './FileUploader.module.css'\n\n/**\n * A single file entry. A freshly-picked file carries its binary in `file`; an already-uploaded one\n * (a backend response, edit mode) carries only its URL in `source` — then `file` is absent.\n */\nexport interface FileUploaderItem {\n /** The picked binary — present for a newly-selected file, absent for an already-uploaded one. */\n file?: File\n /** Server URL of an already-uploaded file (edit mode); `''` for a fresh pick. */\n source?: string\n /** Position in the list (0-based) — kept in sync with the visual order on every change. */\n sortIndex: number\n /**\n * Optional alt text, edited per card via the `allowAltText` modal. **Per-locale by default** —\n * `Record<localeCode, string>` (e.g. `{ 'en-US': 'A red car', 'ka-GE': '…' }`); with\n * **`localizedAltText={false}`** it's a single **`string`**. Absent until something is typed.\n */\n altText?: Record<string, string> | string\n}\n\n/** Single mode → one item (or `null`); `multiple` mode → an array. */\nexport type FileUploaderValue = FileUploaderItem | FileUploaderItem[] | null\n\nexport interface FileUploaderProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue'\n> {\n /** Accept more than one file — the value becomes an array. Defaults to `false`. */\n multiple?: boolean\n /** Allow dropping files onto the dropzone (drag from the OS). Defaults to `true`. */\n allowDrop?: boolean\n /** Allow drag + keyboard reordering of the rows (only meaningful with `multiple`). Defaults to `true`. */\n allowReorder?: boolean\n /** Show a download button on each item (downloads the File / source). Defaults to `true`. */\n allowDownload?: boolean\n /**\n * Show a per-card **preview** (Eye) button — opens a fullscreen lightbox of the image / video. Defaults\n * to `true`. Only rendered for **image + video** items (a PDF / doc has nothing to preview).\n */\n allowPreview?: boolean\n /**\n * Show a per-card **edit** button that opens a modal for editing the item's `altText`. Defaults to\n * `true` — pass `false` to hide it. The modal renders one input per content locale (a tab strip when\n * there are several), so the edited value lands in `item.altText` keyed by locale code (or a single\n * string with `localizedAltText={false}`).\n */\n allowAltText?: boolean\n /**\n * Locales for the `allowAltText` editor (one input/tab each). Defaults to the app's `ConfigProvider`\n * locales (`useLocales()`); pass this to override — mirrors `<TranslatedFields locales>`. Ignored when\n * `localizedAltText` is `false`.\n */\n altTextLocales?: LocaleConfig[]\n /**\n * Whether the `allowAltText` editor is **per-locale**. Defaults to `true` — `altText` is a\n * `Record<localeCode, string>` with one input/tab per locale. Pass **`false`** for a single plain input\n * (no locales), so `altText` is just a **`string`**.\n */\n localizedAltText?: boolean\n /**\n * Allow the same file to be added more than once. By default (`false`) a pick that matches an\n * already-present item by content (a File by name + size + last-modified, a source by URL) is skipped\n * and a notice is shown. Only meaningful with `multiple` (single mode replaces, so it can't stack).\n */\n allowDuplicates?: boolean\n /** Disables the whole control — no adding, removing, reordering, or downloading; dimmed + inert. */\n disabled?: boolean\n /**\n * Accepted file types (react-dropzone's format: a MIME type → file-extensions map) — restricts the file\n * picker and rejects non-matching picks/drops (a rejection raises a `toast.error`). E.g. `{ 'image/*': [] }`\n * or `{ 'image/*': [], 'application/pdf': ['.pdf'] }`. Omit to accept any type.\n */\n accept?: Accept\n /** Maximum number of files (only meaningful with `multiple`). Picks beyond it are rejected with a notice. */\n maxFiles?: number\n /**\n * Maximum size per file — a bytes `number`, or a human string like `\"5MB\"` / `\"500KB\"`. A picked file\n * over the limit is **rejected** (not added) and raises a **`toast.error`** (so a `<Toaster>` — mounted\n * by `RootLayout` by default — must be present to see it). A file supplied via `value`/`defaultValue`\n * that exceeds the limit is still rendered but flagged in an error state (red ring + `\"Exceeds … limit\"`).\n */\n maxFileSize?: number | string\n /** Where a newly added file lands in the list (`multiple` only): `'start'` (top) or `'end'` (bottom). Defaults to `'end'`. */\n itemInsertLocation?: 'start' | 'end'\n /** Controlled value — one item (or `null`) when single, an array when `multiple`. */\n value?: FileUploaderValue\n /** Initial value for uncontrolled use. */\n defaultValue?: FileUploaderValue\n /** Fires with the next value whenever files are added, removed, or reordered. */\n onChange?: (value: FileUploaderValue) => void\n /** Label rendered above the control. */\n label?: ReactNode\n /** Marks the field invalid: red dropzone border + the `helperText` in the error color. */\n error?: boolean\n /** Helper / validation text under the control. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Stretches the control to fill its container width. Defaults to `true`. */\n fullWidth?: boolean\n /**\n * Binds the field to a surrounding `<Form>` — the form value is the item / array, validated with e.g.\n * `z.array(fileItemSchema).min(1)`. Reads the raw `form.values[name]` and writes via `setValue`;\n * error/touched come from the form, and the form's scroll-to-error can focus the field.\n */\n name?: string\n}\n\nconst canMakeObjectUrl = (): boolean =>\n typeof URL !== 'undefined' && typeof URL.createObjectURL === 'function'\n\n// auto-animate plugin: the ENTER (add) is handled by a CSS mount animation on `.row` (a reliable, visible\n// drop-in), so here `add` is a no-op to avoid double-animating; auto-animate still smoothly animates the\n// `remove` (lift + fade) and the `remain` reflow (rows sliding up to fill a gap).\nconst ANIM_MS = 300\nconst listAnimation: AutoAnimationPlugin = (el, action, oldCoords, newCoords) => {\n let keyframes: Keyframe[] = [{}, {}]\n let duration = ANIM_MS\n if (action === 'add') {\n duration = 0\n } else if (action === 'remove') {\n keyframes = [\n { opacity: 1, transform: 'translateY(0)' },\n { opacity: 0, transform: 'translateY(-8px)' },\n ]\n } else if (oldCoords && newCoords) {\n const dx = oldCoords.left - newCoords.left\n const dy = oldCoords.top - newCoords.top\n keyframes = [{ transform: `translate(${dx}px, ${dy}px)` }, { transform: 'translate(0, 0)' }]\n }\n return new KeyframeEffect(el, keyframes, { duration, easing: 'ease-out' })\n}\n\n/** Human-readable byte size, e.g. `2.4 MB`. (Exported for unit tests; not part of the public surface.) */\nexport const formatBytes = (bytes: number): string => {\n if (bytes < 1024) return `${bytes} B`\n const units = ['KB', 'MB', 'GB', 'TB']\n let value = bytes / 1024\n let i = 0\n while (value >= 1024 && i < units.length - 1) {\n value /= 1024\n i += 1\n }\n return `${value.toFixed(value < 10 ? 1 : 0)} ${units[i]}`\n}\n\n/** Coerce a `maxFileSize` (a bytes number, or a human string like `\"5MB\"` / `\"500 KB\"`) to bytes. */\nexport const toBytes = (size: number | string): number | undefined => {\n if (typeof size === 'number') return size\n const match = /^\\s*([\\d.]+)\\s*(b|kb|mb|gb|tb)?\\s*$/i.exec(size)\n if (!match) return undefined\n const units: Record<string, number> = {\n b: 1,\n kb: 1024,\n mb: 1024 ** 2,\n gb: 1024 ** 3,\n tb: 1024 ** 4,\n }\n return parseFloat(match[1]) * (units[(match[2] || 'b').toLowerCase()] ?? 1)\n}\n\n/**\n * A content-identity key for de-duplication. The same file picked twice arrives as two distinct `File`\n * objects (so a `WeakMap`/reference check can't catch it), but its name + size + last-modified match.\n */\nexport const fileKey = (file: File): string => `f:${file.name}:${file.size}:${file.lastModified}`\n/** The dedup key for an existing item — a File by its content, an already-uploaded one by its URL. */\nexport const itemKey = (item: FileUploaderItem): string =>\n item.file ? fileKey(item.file) : `s:${item.source ?? ''}`\n\n/** Display name — the File's name or the last path segment of a source URL. */\nexport const labelOf = (item: FileUploaderItem): string => {\n if (item.file) return item.file.name\n if (item.source) {\n if (/^(data|blob):/i.test(item.source)) return 'File'\n return item.source.split(/[?#]/)[0].split('/').pop() || 'File'\n }\n return 'File'\n}\n\n/**\n * Whether an item is an image — the only kind that gets the **crop** + **alt-text** editors (a video / PDF\n * / doc has nothing to crop or describe). A File is judged by its MIME `type`; a source URL by a known\n * image extension or a `data:image/…` URI, defaulting to `true` when it carries no recognizable extension\n * (the image-first assumption — e.g. extensionless CDN URLs).\n */\nexport const isImageItem = (item: FileUploaderItem): boolean => {\n if (item.file) return item.file.type.startsWith('image/')\n const src = item.source\n if (!src) return false\n if (/^data:image\\//i.test(src)) return true\n if (/^data:/i.test(src)) return false // a non-image data URI\n return (\n /\\.(png|jpe?g|gif|webp|avif|svg|bmp|ico|heic|heif)(?:[?#]|$)/i.test(src) ||\n !/\\.[a-z0-9]{1,8}(?:[?#]|$)/i.test(src)\n )\n}\n\n/** Whether an item is a video — rendered as a playable `<video controls>` preview instead of an `<img>`. */\nexport const isVideoItem = (item: FileUploaderItem): boolean => {\n if (item.file) return item.file.type.startsWith('video/')\n const src = item.source\n if (!src) return false\n return /^data:video\\//i.test(src) || /\\.(mp4|webm|ogg|ogv|mov|m4v|avi|mkv)(?:[?#]|$)/i.test(src)\n}\n\n/** Download an item — a File via a fresh object URL, a source URL via a download link. */\nconst triggerDownload = (item: FileUploaderItem) => {\n if (typeof document === 'undefined') return\n const a = document.createElement('a')\n a.style.display = 'none'\n if (item.file) {\n if (!canMakeObjectUrl()) return\n const url = URL.createObjectURL(item.file)\n a.href = url\n a.download = item.file.name\n document.body.appendChild(a)\n a.click()\n a.remove()\n setTimeout(() => URL.revokeObjectURL(url), 1000)\n } else if (item.source) {\n a.href = item.source\n a.download = labelOf(item)\n a.target = '_blank'\n a.rel = 'noopener'\n document.body.appendChild(a)\n a.click()\n a.remove()\n }\n}\n\n/**\n * Split a name into the part that may truncate and a short trailing extension that should always stay\n * visible — so a long name middle-ellipses as `name….ext` instead of overflowing or losing the type.\n */\nexport const splitName = (name: string): { base: string; ext: string } => {\n const dot = name.lastIndexOf('.')\n // only peel off a real, short extension (\".png\", \".jpeg\") — not a dot buried in a long hash\n return dot > 0 && name.length - dot <= 7\n ? { base: name.slice(0, dot), ext: name.slice(dot) }\n : { base: name, ext: '' }\n}\n\n// ── one row ─────────────────────────────────────────────────────────────────────────────────────\n\ninterface RowProps {\n id: string\n item: FileUploaderItem\n preview: string | null\n sortable: boolean\n entering: boolean\n disabled?: boolean\n error?: string\n onRemove: () => void\n onCrop?: () => void\n onAltText?: () => void\n onDownload?: () => void\n onView?: () => void\n onPreviewError?: () => void\n}\n\nfunction Row({\n id,\n item,\n preview,\n sortable,\n entering,\n disabled,\n error,\n onRemove,\n onCrop,\n onAltText,\n onDownload,\n onView,\n onPreviewError,\n}: RowProps) {\n // the whole tile is the drag handle (no separate grip — matches the image-card visual)\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id,\n disabled: !sortable,\n })\n const style: CSSProperties = {\n transform: CSS.Transform.toString(transform),\n transition,\n }\n const t = useT()\n const label = labelOf(item)\n const { base, ext } = splitName(label)\n const meta = item.file ? formatBytes(item.file.size) : t('fileUploader.uploaded')\n const video = isVideoItem(item)\n\n const downloadBtn = onDownload ? (\n <button\n type=\"button\"\n className={styles.tileAction}\n aria-label={t('fileUploader.download', { name: label })}\n onClick={onDownload}\n onPointerDown={(e) => e.stopPropagation()}\n >\n <Icon name=\"DocumentDownload\" size=\"sm\" />\n </button>\n ) : null\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={clsx(\n styles.tile,\n sortable && styles.grabbable,\n entering && styles.entering,\n isDragging && styles.dragging,\n error && styles.tileError,\n )}\n {...attributes}\n {...listeners}\n >\n {preview ? (\n video ? (\n <>\n {/* first-frame thumbnail (no controls) + a centred play badge so it reads as a video */}\n <video\n src={preview}\n className={styles.tileImg}\n muted\n playsInline\n preload=\"metadata\"\n draggable={false}\n onError={onPreviewError}\n />\n <span className={styles.tilePlay} aria-hidden=\"true\">\n <Icon name=\"Play\" size=\"lg\" />\n </span>\n </>\n ) : (\n <img\n src={preview}\n alt=\"\"\n className={styles.tileImg}\n draggable={false}\n onError={onPreviewError}\n />\n )\n ) : (\n <span className={styles.tileFallback} aria-hidden=\"true\">\n <Icon name=\"Document\" size=\"lg\" />\n </span>\n )}\n\n {/* top scrim: name/meta on the left, the remove × pinned top-right */}\n <div className={styles.tileTop}>\n <span className={styles.tileText}>\n <span className={styles.name} title={label}>\n <span className={styles.nameBase}>{base}</span>\n {ext && <span className={styles.nameExt}>{ext}</span>}\n </span>\n <span className={clsx(styles.tileMeta, error && styles.metaError)}>{error ?? meta}</span>\n </span>\n {!disabled && (\n <button\n type=\"button\"\n className={styles.tileRemove}\n aria-label={t('fileUploader.remove', { name: label })}\n onClick={onRemove}\n onPointerDown={(e) => e.stopPropagation()} // don't start a drag from the remove button\n >\n <Icon name=\"Close\" size=\"sm\" />\n </button>\n )}\n </div>\n\n {/* bottom scrim: crop (Crop) + alt text (Text) + download on the left (crop/alt are image-only),\n the view (Eye) fullscreen-preview button pinned bottom-right */}\n {(onCrop || onAltText || onDownload || onView) && (\n <div className={styles.tileBottom}>\n {onCrop && (\n <button\n type=\"button\"\n className={styles.tileAction}\n aria-label={t('fileUploader.crop', { name: label })}\n onClick={onCrop}\n onPointerDown={(e) => e.stopPropagation()}\n >\n <Icon name=\"Crop\" size=\"sm\" />\n </button>\n )}\n {onAltText && (\n <button\n type=\"button\"\n className={styles.tileAction}\n aria-label={t('fileUploader.editAlt', { name: label })}\n onClick={onAltText}\n onPointerDown={(e) => e.stopPropagation()}\n >\n <Icon name=\"Text\" size=\"sm\" />\n </button>\n )}\n {downloadBtn}\n {onView && (\n <button\n type=\"button\"\n className={clsx(styles.tileAction, styles.tileActionEnd)}\n aria-label={t('fileUploader.preview', { name: label })}\n onClick={onView}\n onPointerDown={(e) => e.stopPropagation()}\n >\n <Icon name=\"Eye\" size=\"sm\" />\n </button>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// ── the field ───────────────────────────────────────────────────────────────────────────────────\n\n/**\n * A small, clean file field that **collects** files for the consumer to upload on save — it never\n * uploads itself. New picks carry their binary in `file`; already-uploaded files arrive with a\n * `source` URL. A soft dropzone panel sits above a grid of image cards (thumbnail/file-icon + name +\n * size, with overlaid remove + download buttons). `allowDrop` enables drag-from-OS (via\n * `react-dropzone`); `allowReorder` enables drag + keyboard reordering (via `@dnd-kit`); cards animate\n * in/out (via `@formkit/auto-animate`). Controlled (`value` + `onChange`) or uncontrolled\n * (`defaultValue`); binds to a `<Form>` by `name`. The forwarded ref points at the root.\n */\nexport const FileUploader = forwardRef<HTMLDivElement, FileUploaderProps>(function FileUploader(\n {\n multiple = false,\n allowDrop = true,\n allowReorder = true,\n allowDownload = true,\n allowPreview = true,\n allowAltText = true,\n altTextLocales,\n localizedAltText = true,\n allowDuplicates = false,\n disabled = false,\n accept,\n maxFiles,\n maxFileSize,\n itemInsertLocation = 'end',\n value,\n defaultValue,\n onChange,\n label,\n error,\n helperText,\n required = false,\n fullWidth = true,\n name,\n id: idProp,\n onBlur,\n className,\n style,\n ...props\n },\n ref,\n) {\n const reactId = useId()\n const id = idProp ?? reactId\n const helperId = `${id}-helper`\n\n const maxBytes = maxFileSize != null ? toBytes(maxFileSize) : undefined\n const [notice, setNotice] = useState<string | null>(null)\n // the rejection notice auto-dismisses so it doesn't linger forever\n useEffect(() => {\n if (!notice) return\n const timer = window.setTimeout(() => setNotice(null), 4000)\n return () => window.clearTimeout(timer)\n }, [notice])\n\n // Auto-bind to a surrounding <Form> by `name`. The value is a typed object/array, so read it RAW from\n // values[name] (never field().value, which String-coerces); error/touched come from field().\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = form && name ? form.field(name) : undefined\n\n const fallback: FileUploaderValue = multiple ? [] : null\n const externalValue: FileUploaderValue | undefined =\n value !== undefined\n ? value\n : isFormBound\n ? ((form!.values[name!] as FileUploaderValue | undefined) ?? fallback)\n : undefined\n const isControlled = externalValue !== undefined\n const [internal, setInternal] = useState<FileUploaderValue>(defaultValue ?? fallback)\n const current = isControlled ? externalValue! : internal\n const items: FileUploaderItem[] =\n current == null ? [] : Array.isArray(current) ? current : [current]\n\n const resolvedError = error ?? bound?.error ?? false\n const resolvedHelperText = helperText ?? bound?.helperText\n const shownHelper = notice ?? resolvedHelperText\n const helperIsError = Boolean(notice) || resolvedError\n\n const reorderEnabled = allowReorder && multiple && !disabled\n\n // Stable ids per item so a row keeps its identity (and focus) across reorders.\n const fileIds = useRef(new WeakMap<File, string>())\n const seed = useRef(0)\n const idOf = (item: FileUploaderItem, index: number): string => {\n if (item.file) {\n let id = fileIds.current.get(item.file)\n if (!id) {\n seed.current += 1\n id = `f${seed.current}`\n fileIds.current.set(item.file, id)\n }\n return id\n }\n return item.source ? `s:${item.source}` : `i:${index}`\n }\n const ids = items.map((item, i) => idOf(item, i))\n\n // Ids that have already animated in, so only genuinely new rows get the entrance animation — a reorder\n // re-inserts the moved/shifted nodes, which would otherwise restart the CSS drop-in on them.\n const enteredIds = useRef<Set<string>>(new Set())\n const enteringIds = new Set(ids.filter((id) => !enteredIds.current.has(id)))\n useEffect(() => {\n enteredIds.current = new Set(ids)\n })\n\n // Source URLs that failed to load as an image (so we fall back to the file icon).\n const [failedSources, setFailedSources] = useState<ReadonlySet<string>>(() => new Set())\n const markSourceFailed = (src: string) =>\n setFailedSources((prev) => (prev.has(src) ? prev : new Set(prev).add(src)))\n\n // Files whose object-URL preview failed to load (a corrupt/undecodable image) — same fallback.\n const [failedFiles, setFailedFiles] = useState<ReadonlySet<File>>(() => new Set())\n const markFileFailed = (file: File) =>\n setFailedFiles((prev) => (prev.has(file) ? prev : new Set(prev).add(file)))\n\n // Object URLs for image/video File previews, revoked when the File leaves the value / on unmount.\n const objectUrls = useRef(new Map<File, string>())\n const previewOf = (item: FileUploaderItem): string | null => {\n if (item.file) {\n const type = item.file.type\n if (\n (!type.startsWith('image/') && !type.startsWith('video/')) ||\n !canMakeObjectUrl() ||\n failedFiles.has(item.file)\n )\n return null\n let url = objectUrls.current.get(item.file)\n if (!url) {\n url = URL.createObjectURL(item.file)\n objectUrls.current.set(item.file, url)\n }\n return url\n }\n // an already-uploaded item is assumed to be a previewable image/video (image-first uploader); a\n // non-media URL just falls the row back to the file icon via the <img> onError handler\n if (item.source && !failedSources.has(item.source)) return item.source\n return null\n }\n // fullscreen preview (Eye) — snapshot the media so the lightbox is self-contained. Declared above\n // the object-URL cleanup effect below so that effect can spare the URL the lightbox is showing.\n const [preview, setPreview] = useState<{\n url: string\n isVideo: boolean\n isSvg: boolean\n name: string\n } | null>(null)\n useEffect(() => {\n const cache = objectUrls.current\n const liveFiles = new Set(items.map((it) => it.file).filter(Boolean) as File[])\n const liveSources = new Set(items.filter((it) => !it.file && it.source).map((it) => it.source!))\n for (const [file, url] of cache) {\n // don't revoke the URL the open lightbox is showing — a controlled value swap that removes the\n // item would otherwise break the media mid-display; the deferred revoke runs once it closes\n // (this effect re-runs on `preview` change) or on unmount\n if (!liveFiles.has(file) && url !== preview?.url) {\n URL.revokeObjectURL(url)\n cache.delete(file)\n }\n }\n setFailedSources((prev) => {\n if (prev.size === 0) return prev\n const next = new Set([...prev].filter((s) => liveSources.has(s)))\n return next.size === prev.size ? prev : next\n })\n }, [current, preview]) // eslint-disable-line react-hooks/exhaustive-deps -- `current` is the value identity\n useEffect(() => {\n const cache = objectUrls.current\n return () => {\n for (const url of cache.values()) URL.revokeObjectURL(url)\n cache.clear()\n }\n }, [])\n\n const reindex = (arr: FileUploaderItem[]): FileUploaderItem[] =>\n arr.map((it, i) => (it.sortIndex === i ? it : { ...it, sortIndex: i }))\n\n const commit = (next: FileUploaderItem[]) => {\n const ordered = reindex(next)\n const out: FileUploaderValue = multiple ? ordered : (ordered[0] ?? null)\n if (!isControlled) setInternal(out)\n if (isFormBound) form!.setValue(name!, out)\n onChange?.(out)\n }\n\n // mark the bound form field touched (the impl ignores the event — it just flips the touched flag)\n const markTouched = () => bound?.onBlur({} as FocusEvent<HTMLInputElement>)\n\n const t = useT()\n // ── edit dialogs (separate Crop and Alt-text modals, opened from a card's two buttons) ────────────\n const configLocales = useLocales()\n const altLocales = altTextLocales ?? configLocales\n // per-locale (default): one field per locale (falling back to a single field if none configured);\n // non-localized: always a single field, keyed under '' (the value is a plain string)\n const editLocales = localizedAltText && altLocales.length > 0 ? altLocales : [{ code: '' }]\n // track the edited item by its STABLE id (not its index) so an external value change while a dialog is\n // open — reorder/remove/refetch — can't retarget the save onto the wrong item\n const [editId, setEditId] = useState<string | null>(null)\n const [editMode, setEditMode] = useState<'crop' | 'altText'>('altText')\n const editPos = editId != null ? ids.indexOf(editId) : -1\n const editingItem = editPos !== -1 ? items[editPos] : null\n const openCropEditor = (index: number) => {\n setEditMode('crop')\n setEditId(ids[index] ?? null)\n }\n const openAltEditor = (index: number) => {\n setEditMode('altText')\n setEditId(ids[index] ?? null)\n }\n const closeEditor = () => setEditId(null)\n\n const openPreview = (item: FileUploaderItem) => {\n const url = previewOf(item)\n if (!url) return\n // SVGs need an explicit box in the lightbox (they often lack an intrinsic pixel size)\n const isSvg = item.file\n ? item.file.type === 'image/svg+xml'\n : /^data:image\\/svg/i.test(item.source ?? '') || /\\.svg(?:[?#]|$)/i.test(item.source ?? '')\n setPreview({ url, isVideo: isVideoItem(item), isSvg, name: labelOf(item) })\n }\n // seed the alt-text dialog's draft from the item's current value (record vs single string)\n const editInitialDraft: Record<string, string> = editingItem\n ? localizedAltText\n ? editingItem.altText && typeof editingItem.altText === 'object'\n ? { ...editingItem.altText }\n : {}\n : { '': typeof editingItem.altText === 'string' ? editingItem.altText : '' }\n : {}\n const saveEdit = ({ draft, croppedFile }: EditDialogResult) => {\n if (editPos === -1) return closeEditor() // the item went away under us — bail\n commit(\n items.map((it, i) => {\n if (ids[i] !== editId) return it\n const next: FileUploaderItem = { ...it }\n // alt-text dialog → rebuild altText from the draft (localized record / single string)\n if (draft !== undefined) {\n if (localizedAltText) {\n // prune empty/whitespace entries so the model isn't littered with blank locales\n const cleaned = Object.fromEntries(\n Object.entries(draft)\n .map(([code, text]) => [code, text.trim()] as [string, string])\n .filter(([, text]) => text !== ''),\n )\n next.altText = Object.keys(cleaned).length > 0 ? cleaned : undefined\n } else {\n next.altText = (draft[''] ?? '').trim() || undefined\n }\n }\n // crop dialog → replace the image with the cropped File (native-res, lossless); a source item\n // becomes a fresh pick (the cropped version uploads on save)\n if (croppedFile) {\n next.file = croppedFile\n next.source = ''\n }\n return next\n }),\n )\n closeEditor()\n }\n\n const addFiles = (accepted: File[], rejections: FileRejection[] = []) => {\n // Hard rejections (the file is invalid: wrong type, or over `maxFileSize` — react-dropzone rejects\n // both, so they never reach `accepted`) surface as a Toast error and are not added.\n const wrongType = rejections.filter((r) => r.errors.some((e) => e.code === 'file-invalid-type'))\n const tooLarge = rejections.filter((r) => r.errors.some((e) => e.code === 'file-too-large'))\n if (wrongType.length > 0)\n toast.error(\n wrongType.length === 1\n ? t('fileUploader.wrongTypeOne', { name: wrongType[0].file.name })\n : t('fileUploader.wrongTypeMany', { count: wrongType.length }),\n )\n if (tooLarge.length > 0 && maxBytes != null)\n toast.error(\n tooLarge.length === 1\n ? t('fileUploader.tooLargeOne', {\n name: tooLarge[0].file.name,\n size: formatBytes(maxBytes),\n })\n : t('fileUploader.tooLargeMany', { count: tooLarge.length, size: formatBytes(maxBytes) }),\n )\n\n // Soft notices (the file is valid, just not added now) stay in the inline helper slot + auto-dismiss.\n const reasons: string[] = []\n let taken = accepted\n // drop files already present (same content) + intra-batch dupes, unless explicitly allowed\n if (multiple && !allowDuplicates) {\n const seen = new Set(items.map(itemKey))\n const unique: File[] = []\n for (const file of taken) {\n const key = fileKey(file)\n if (seen.has(key)) continue\n seen.add(key)\n unique.push(file)\n }\n if (unique.length < taken.length) reasons.push(t('fileUploader.duplicate'))\n taken = unique\n }\n if (multiple && maxFiles != null) {\n const room = Math.max(0, maxFiles - items.length)\n if (taken.length > room) {\n taken = taken.slice(0, room)\n reasons.push(\n maxFiles === 1\n ? t('fileUploader.hintUpToOne', { count: maxFiles })\n : t('fileUploader.hintUpToMany', { count: maxFiles }),\n )\n }\n }\n\n setNotice(reasons.length > 0 ? reasons.join(' · ') : null)\n if (taken.length === 0) return\n const picked = taken.map<FileUploaderItem>((file) => ({ file, source: '', sortIndex: 0 }))\n if (!multiple) {\n commit([picked[0]])\n return\n }\n commit(itemInsertLocation === 'start' ? [...picked, ...items] : [...items, ...picked])\n }\n const removeAt = (index: number) => {\n setNotice(null)\n commit(items.filter((_, i) => i !== index))\n // removing is an explicit interaction — mark touched so an emptied required field reveals its error\n markTouched()\n }\n\n // auto-animate handles add / remove / shift on the list; it's paused during a dnd-kit drag so the two\n // don't both animate the reorder (dnd-kit owns the drag visuals, auto-animate owns enter/exit).\n const [listRef, enableAnimations] = useAutoAnimate(listAnimation)\n const reEnableAnimations = () => {\n if (typeof requestAnimationFrame === 'function')\n requestAnimationFrame(() => enableAnimations(true))\n else enableAnimations(true)\n }\n const handleDragStart = () => enableAnimations(false)\n const handleDragCancel = () => reEnableAnimations()\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n if (over && active.id !== over.id) {\n const from = ids.indexOf(String(active.id))\n const to = ids.indexOf(String(over.id))\n if (from !== -1 && to !== -1) commit(arrayMove(items, from, to))\n }\n reEnableAnimations() // after the reorder DOM settles, so the move isn't double-animated\n }\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n )\n\n // opening the native file dialog blurs the window, which would otherwise mark the field touched and flash\n // a \"required\" error before the user picks anything; suppress that one blur and only mark touched when the\n // dialog is *canceled* with no selection (the real \"engaged, added nothing\" signal)\n const fileDialogOpen = useRef(false)\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n multiple,\n accept,\n // reject oversized picks here so they never get added; the rejection surfaces as a Toast in addFiles\n maxSize: maxBytes,\n disabled,\n noKeyboard: false,\n noDrag: !allowDrop,\n onFileDialogOpen: () => {\n fileDialogOpen.current = true\n },\n onFileDialogCancel: () => {\n fileDialogOpen.current = false\n markTouched()\n },\n onDrop: (accepted, rejections) => {\n fileDialogOpen.current = false\n addFiles(accepted, rejections)\n },\n })\n\n const showDropzone = multiple || items.length === 0\n\n // static constraint hint shown inside the dropzone (e.g. \"Up to 5 files · Max 5 MB each\")\n const hintParts: string[] = []\n if (multiple && maxFiles != null)\n hintParts.push(\n maxFiles === 1\n ? t('fileUploader.hintUpToOne', { count: maxFiles })\n : t('fileUploader.hintUpToMany', { count: maxFiles }),\n )\n if (maxBytes != null) hintParts.push(t('fileUploader.hintMax', { size: formatBytes(maxBytes) }))\n const hint = hintParts.join(' · ')\n\n const prompt: ReactNode = allowDrop ? (\n <>\n <span className={styles.accent}>{t('fileUploader.choose')}</span>{' '}\n {t('fileUploader.dropSuffix')}\n </>\n ) : (\n <span className={styles.accent}>{t('fileUploader.choose')}</span>\n )\n\n // mark the field touched once focus leaves the whole widget (so blurThenLive errors reveal on blur)\n const onRootBlur = (event: FocusEvent<HTMLDivElement>) => {\n onBlur?.(event)\n if (event.currentTarget.contains(event.relatedTarget as Node | null)) return\n // opening the alt-text editor moves focus into the body-portaled Modal (outside the root); that's not\n // focus leaving the widget, so don't mark touched (mirrors Select's portaled-popover guard)\n if (editId != null) return\n // the native file-dialog blur isn't \"leaving the widget\" either — consume it (touched is set instead on\n // dialog cancel); only a genuine blur-away marks touched\n if (fileDialogOpen.current) {\n fileDialogOpen.current = false\n return\n }\n markTouched()\n }\n\n return (\n <div\n ref={ref}\n id={id}\n className={clsx(\n styles.root,\n fullWidth && styles.fullWidth,\n resolvedError && styles.error,\n disabled && styles.disabled,\n className,\n )}\n style={style}\n aria-invalid={resolvedError || undefined}\n aria-describedby={shownHelper != null ? helperId : undefined}\n onBlur={onRootBlur}\n {...props}\n // name + tabIndex are load-bearing for the form's scroll-to-error → spread last so props can't clobber\n {...(name ? { name, tabIndex: -1 } : {})}\n >\n {label != null && (\n <label className={fieldStyles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={fieldStyles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n\n {showDropzone && (\n <div\n {...getRootProps({ className: clsx(styles.dropzone, isDragActive && styles.dropping) })}\n >\n <input {...getInputProps()} />\n <span className={styles.dropIcon} aria-hidden=\"true\">\n <Icon name=\"DocumentUpload\" size=\"lg\" />\n </span>\n <span className={styles.dropText}>\n <span className={styles.prompt}>{prompt}</span>\n {hint && <span className={styles.hint}>{hint}</span>}\n </span>\n </div>\n )}\n\n {/* always rendered (even when empty) so auto-animate can animate the last card out on removal */}\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={reorderEnabled ? handleDragStart : undefined}\n onDragEnd={reorderEnabled ? handleDragEnd : undefined}\n onDragCancel={reorderEnabled ? handleDragCancel : undefined}\n >\n <SortableContext items={ids} strategy={rectSortingStrategy}>\n <div ref={listRef} className={clsx(styles.list, items.length > 0 && styles.populated)}>\n {items.map((item, index) => (\n <Row\n key={ids[index]}\n id={ids[index]}\n item={item}\n preview={previewOf(item)}\n sortable={reorderEnabled && items.length > 1}\n entering={enteringIds.has(ids[index])}\n disabled={disabled}\n error={\n item.file && maxBytes != null && item.file.size > maxBytes\n ? t('fileUploader.exceedsLimit', { size: formatBytes(maxBytes) })\n : undefined\n }\n onRemove={() => removeAt(index)}\n // crop + alt text are image-only — a video / PDF / doc has nothing to crop or describe\n onCrop={\n allowAltText && !disabled && isImageItem(item)\n ? () => openCropEditor(index)\n : undefined\n }\n onAltText={\n allowAltText && !disabled && isImageItem(item)\n ? () => openAltEditor(index)\n : undefined\n }\n onDownload={allowDownload && !disabled ? () => triggerDownload(item) : undefined}\n // fullscreen preview — image + video only (a PDF / doc has nothing to preview)\n onView={\n allowPreview &&\n !disabled &&\n previewOf(item) != null &&\n (isImageItem(item) || isVideoItem(item))\n ? () => openPreview(item)\n : undefined\n }\n onPreviewError={\n item.file\n ? () => markFileFailed(item.file!)\n : item.source\n ? () => markSourceFailed(item.source!)\n : undefined\n }\n />\n ))}\n </div>\n </SortableContext>\n </DndContext>\n\n {shownHelper != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={helperIsError ? 'error' : 'muted'}\n className={fieldStyles.helper}\n role=\"status\"\n aria-live=\"polite\"\n >\n {shownHelper}\n </Typography>\n )}\n\n {editingItem && (\n <FileUploaderEditDialog\n key={`${editId}:${editMode}`}\n mode={editMode}\n name={labelOf(editingItem)}\n imageUrl={previewOf(editingItem)}\n mimeType={editingItem.file?.type || 'image/png'}\n editLocales={editLocales}\n initialDraft={editInitialDraft}\n onClose={closeEditor}\n onSave={saveEdit}\n />\n )}\n\n {preview && (\n <FileUploaderPreview\n url={preview.url}\n isVideo={preview.isVideo}\n isSvg={preview.isSvg}\n name={preview.name}\n onClose={() => setPreview(null)}\n />\n )}\n </div>\n )\n})\n"],"names":["FileUploaderEditDialog","mode","name","imageUrl","mimeType","editLocales","initialDraft","onClose","onSave","t","useT","imgRef","useRef","crop","setCrop","useState","naturalCrop","setNaturalCrop","naturalSize","setNaturalSize","draft","setDraft","cropError","setCropError","busy","setBusy","onCropChange","px","percent","img","sx","sy","buildCroppedFile","image","canvas","ctx","blob","resolve","handleSave","croppedFile","jsx","Modal","jsxs","Fragment","Button","styles","Typography","ReactCrop","e","l","TextField","d","FileUploaderPreview","url","isVideo","isSvg","Overlay","Icon","clsx","canMakeObjectUrl","ANIM_MS","listAnimation","el","action","oldCoords","newCoords","keyframes","duration","dx","dy","formatBytes","bytes","units","value","i","toBytes","size","match","fileKey","file","itemKey","item","labelOf","isImageItem","src","isVideoItem","triggerDownload","a","splitName","dot","Row","id","preview","sortable","entering","disabled","error","onRemove","onCrop","onAltText","onDownload","onView","onPreviewError","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","style","CSS","label","base","ext","meta","video","downloadBtn","FileUploader","forwardRef","multiple","allowDrop","allowReorder","allowDownload","allowPreview","allowAltText","altTextLocales","localizedAltText","allowDuplicates","accept","maxFiles","maxFileSize","itemInsertLocation","defaultValue","onChange","helperText","required","fullWidth","idProp","onBlur","className","props","ref","reactId","useId","helperId","maxBytes","notice","setNotice","useEffect","timer","form","useFormContext","isFormBound","bound","fallback","externalValue","isControlled","internal","setInternal","current","items","resolvedError","resolvedHelperText","shownHelper","helperIsError","reorderEnabled","fileIds","seed","idOf","index","ids","enteredIds","enteringIds","failedSources","setFailedSources","markSourceFailed","prev","failedFiles","setFailedFiles","markFileFailed","objectUrls","previewOf","type","setPreview","cache","liveFiles","it","liveSources","next","s","reindex","arr","commit","ordered","out","markTouched","configLocales","useLocales","altLocales","editId","setEditId","editMode","setEditMode","editPos","editingItem","openCropEditor","openAltEditor","closeEditor","openPreview","editInitialDraft","saveEdit","cleaned","code","text","addFiles","accepted","rejections","wrongType","r","tooLarge","toast","reasons","taken","seen","unique","key","room","picked","removeAt","_","listRef","enableAnimations","useAutoAnimate","reEnableAnimations","handleDragStart","handleDragCancel","handleDragEnd","event","active","over","from","to","arrayMove","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","fileDialogOpen","getRootProps","getInputProps","isDragActive","useDropzone","showDropzone","hintParts","hint","prompt","onRootBlur","fieldStyles","DndContext","closestCenter","SortableContext","rectSortingStrategy","_a"],"mappings":"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"}
|