@bricks-toolkit/toolkit 0.1.1 → 0.1.2
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/README.md +9 -9
- package/dist/avatar/index.cjs +11 -1
- package/dist/avatar/index.mjs +2 -1
- package/dist/badge/index.cjs +11 -1
- package/dist/badge/index.mjs +2 -1
- package/dist/breadcrumbs/index.cjs +11 -1
- package/dist/breadcrumbs/index.mjs +2 -1
- package/dist/button/index.cjs +13 -2
- package/dist/button/index.mjs +4 -2
- package/dist/card/index.cjs +31 -1
- package/dist/card/index.mjs +2 -1
- package/dist/checkbox/index.cjs +11 -1
- package/dist/checkbox/index.mjs +2 -1
- package/dist/chunk-2POU3NX4.mjs +192 -0
- package/dist/chunk-32SKYPQW.mjs +156 -0
- package/dist/chunk-446OJWC6.mjs +285 -0
- package/dist/chunk-4DA7CRNV.mjs +376 -0
- package/dist/chunk-4DR57X7U.mjs +182 -0
- package/dist/chunk-4QSDPHPI.mjs +285 -0
- package/dist/chunk-56ILK7Y4.cjs +315 -0
- package/dist/chunk-5J3OMAO4.cjs +222 -0
- package/dist/chunk-5RKET2JO.cjs +287 -0
- package/dist/chunk-65UZC3FK.mjs +312 -0
- package/dist/chunk-6CC5KIA5.cjs +148 -0
- package/dist/chunk-6R3OYBQ6.cjs +209 -0
- package/dist/chunk-6UO72EJA.cjs +2 -0
- package/dist/chunk-6ZCY4O5M.mjs +63 -0
- package/dist/chunk-7364SUK6.mjs +359 -0
- package/dist/chunk-7DDDQ3RH.cjs +66 -0
- package/dist/chunk-7PDGAIC3.cjs +189 -0
- package/dist/chunk-7R5JRJ2W.cjs +255 -0
- package/dist/chunk-7WNJ7L4Z.mjs +335 -0
- package/dist/chunk-AJXVELXK.cjs +218 -0
- package/dist/chunk-ARTXRQO6.mjs +1 -0
- package/dist/chunk-B4OV5GRT.cjs +510 -0
- package/dist/chunk-B5MYGYJY.mjs +122 -0
- package/dist/chunk-BBVWG5GH.cjs +75 -0
- package/dist/chunk-BVBCAAES.mjs +35 -0
- package/dist/chunk-CBA54EY4.mjs +508 -0
- package/dist/chunk-CMER5LO3.mjs +330 -0
- package/dist/chunk-DHC5LI2P.cjs +338 -0
- package/dist/chunk-DMLPA65B.mjs +107 -0
- package/dist/chunk-DN2GFJF4.mjs +175 -0
- package/dist/chunk-ECLNLPOR.cjs +70 -0
- package/dist/chunk-EV463QT5.cjs +53 -0
- package/dist/chunk-FOVJHEWH.mjs +51 -0
- package/dist/chunk-G4HVY6FM.mjs +203 -0
- package/dist/chunk-H77YWN3L.mjs +220 -0
- package/dist/chunk-HIWJDLIS.cjs +124 -0
- package/dist/chunk-HQGDSOSN.mjs +274 -0
- package/dist/chunk-JKPNJ4PZ.mjs +313 -0
- package/dist/chunk-JV6AWBN5.mjs +113 -0
- package/dist/chunk-KA35BV7V.mjs +207 -0
- package/dist/chunk-KLBABQEJ.cjs +378 -0
- package/dist/chunk-L5VQZZVR.cjs +3197 -0
- package/dist/chunk-LTG6YP5I.cjs +69 -0
- package/dist/chunk-MVUNJPGH.cjs +184 -0
- package/dist/chunk-NMJ5CVZH.cjs +2 -0
- package/dist/chunk-NRCNRHXL.cjs +109 -0
- package/dist/chunk-NRZIXK35.cjs +276 -0
- package/dist/chunk-OCPFOFJ4.mjs +3195 -0
- package/dist/chunk-OEU5VG3D.cjs +362 -0
- package/dist/chunk-OPOCCRJG.cjs +193 -0
- package/dist/chunk-OQPCL5XX.mjs +187 -0
- package/dist/chunk-PCYGJNEQ.cjs +280 -0
- package/dist/chunk-PJH2KEWK.mjs +200 -0
- package/dist/chunk-PJWELBN2.cjs +115 -0
- package/dist/chunk-Q3IFXFFD.cjs +202 -0
- package/dist/chunk-R72GDCWE.cjs +314 -0
- package/dist/chunk-RAD5VJHR.mjs +146 -0
- package/dist/chunk-RYWDZHKG.mjs +274 -0
- package/dist/chunk-S7VEND5Z.cjs +162 -0
- package/dist/chunk-SBNNV6FE.mjs +1 -0
- package/dist/chunk-SFUOCZJY.mjs +187 -0
- package/dist/chunk-SHQ2MPBE.mjs +73 -0
- package/dist/chunk-TIVSMCXZ.mjs +253 -0
- package/dist/chunk-TNGW5YHA.cjs +37 -0
- package/dist/chunk-VC7MOPU6.cjs +287 -0
- package/dist/chunk-VHVFRWF5.mjs +64 -0
- package/dist/chunk-VKQDW7C2.mjs +336 -0
- package/dist/chunk-VRZFAKSV.cjs +177 -0
- package/dist/chunk-W2ZAPLQH.cjs +337 -0
- package/dist/chunk-XFNRKHHF.cjs +332 -0
- package/dist/chunk-Y3NTKFUE.mjs +66 -0
- package/dist/chunk-Y6AN7AWX.cjs +205 -0
- package/dist/chunk-YMMNWJT6.cjs +134 -0
- package/dist/chunk-YOTCXSXL.mjs +132 -0
- package/dist/combo-box/index.cjs +11 -1
- package/dist/combo-box/index.mjs +2 -1
- package/dist/date-picker/index.cjs +11 -2
- package/dist/date-picker/index.mjs +2 -2
- package/dist/dialog/index.cjs +27 -1
- package/dist/dialog/index.mjs +2 -1
- package/dist/dropdown-menu/index.cjs +27 -1
- package/dist/dropdown-menu/index.mjs +2 -1
- package/dist/email/index.cjs +11 -2
- package/dist/email/index.mjs +2 -2
- package/dist/file-upload/index.cjs +11 -1
- package/dist/file-upload/index.mjs +2 -1
- package/dist/header/index.cjs +14 -2
- package/dist/header/index.mjs +5 -2
- package/dist/icon-button/index.cjs +13 -2
- package/dist/icon-button/index.mjs +4 -2
- package/dist/image/index.cjs +12 -1
- package/dist/image/index.mjs +3 -1
- package/dist/index.cjs +839 -2
- package/dist/index.d.ts +141 -75
- package/dist/index.mjs +601 -2
- package/dist/link/index.cjs +11 -1
- package/dist/link/index.mjs +2 -1
- package/dist/loader/index.cjs +11 -2
- package/dist/loader/index.mjs +2 -2
- package/dist/modal/index.cjs +27 -1
- package/dist/modal/index.mjs +2 -1
- package/dist/multi-select/index.cjs +11 -2
- package/dist/multi-select/index.mjs +2 -2
- package/dist/otp-input/index.cjs +11 -1
- package/dist/otp-input/index.mjs +2 -1
- package/dist/password-input/index.cjs +11 -2
- package/dist/password-input/index.mjs +2 -2
- package/dist/phone/index.cjs +11 -2
- package/dist/phone/index.mjs +2 -2
- package/dist/radio-button/index.cjs +11 -1
- package/dist/radio-button/index.mjs +2 -1
- package/dist/search-input/index.cjs +12 -2
- package/dist/search-input/index.mjs +3 -2
- package/dist/select/index.cjs +11 -2
- package/dist/select/index.mjs +2 -2
- package/dist/sidebar/index.cjs +11 -1
- package/dist/sidebar/index.mjs +2 -1
- package/dist/skeleton/index.cjs +27 -1
- package/dist/skeleton/index.mjs +2 -1
- package/dist/styles.css +5074 -1
- package/dist/table/index.cjs +15 -1
- package/dist/table/index.mjs +2 -1
- package/dist/tabs/index.cjs +14 -2
- package/dist/tabs/index.mjs +5 -2
- package/dist/text-input/index.cjs +11 -2
- package/dist/text-input/index.mjs +2 -2
- package/dist/theme-provider/index.cjs +14 -1
- package/dist/theme-provider/index.mjs +1 -1
- package/dist/time-picker/index.cjs +11 -2
- package/dist/time-picker/index.mjs +2 -2
- package/dist/toaster/index.cjs +11 -1
- package/dist/toaster/index.mjs +2 -1
- package/dist/tooltip/index.cjs +12 -1
- package/dist/tooltip/index.mjs +3 -1
- package/package.json +122 -141
- package/dist/components/Accordion/Accordion.d.ts +0 -5
- package/dist/components/Accordion/Accordion.types.d.ts +0 -32
- package/dist/components/Accordion/index.d.ts +0 -2
- package/dist/components/Avatar/Avatar.d.ts +0 -2
- package/dist/components/Avatar/Avatar.stories.d.ts +0 -11
- package/dist/components/Avatar/Avatar.test.d.ts +0 -1
- package/dist/components/Avatar/Avatar.types.d.ts +0 -24
- package/dist/components/Avatar/index.d.ts +0 -2
- package/dist/components/Badge/Badge.d.ts +0 -11
- package/dist/components/Badge/Badge.stories.d.ts +0 -21
- package/dist/components/Badge/Badge.test.d.ts +0 -1
- package/dist/components/Badge/Badge.types.d.ts +0 -43
- package/dist/components/Badge/index.d.ts +0 -2
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +0 -2
- package/dist/components/Breadcrumbs/Breadcrumbs.stories.d.ts +0 -13
- package/dist/components/Breadcrumbs/Breadcrumbs.test.d.ts +0 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.types.d.ts +0 -27
- package/dist/components/Breadcrumbs/index.d.ts +0 -2
- package/dist/components/Button/Button.d.ts +0 -2
- package/dist/components/Button/Button.stories.d.ts +0 -20
- package/dist/components/Button/Button.test.d.ts +0 -1
- package/dist/components/Button/Button.types.d.ts +0 -24
- package/dist/components/Button/index.d.ts +0 -2
- package/dist/components/Card/Card.d.ts +0 -25
- package/dist/components/Card/Card.stories.d.ts +0 -8
- package/dist/components/Card/Card.test.d.ts +0 -1
- package/dist/components/Card/Card.types.d.ts +0 -14
- package/dist/components/Card/index.d.ts +0 -2
- package/dist/components/Checkbox/Checkbox.d.ts +0 -2
- package/dist/components/Checkbox/Checkbox.stories.d.ts +0 -16
- package/dist/components/Checkbox/Checkbox.test.d.ts +0 -1
- package/dist/components/Checkbox/Checkbox.types.d.ts +0 -31
- package/dist/components/Checkbox/index.d.ts +0 -2
- package/dist/components/ComboBox/ComboBox.d.ts +0 -2
- package/dist/components/ComboBox/ComboBox.stories.d.ts +0 -12
- package/dist/components/ComboBox/ComboBox.test.d.ts +0 -1
- package/dist/components/ComboBox/ComboBox.types.d.ts +0 -57
- package/dist/components/ComboBox/index.d.ts +0 -2
- package/dist/components/DatePicker/DatePicker.d.ts +0 -2
- package/dist/components/DatePicker/DatePicker.stories.d.ts +0 -25
- package/dist/components/DatePicker/DatePicker.test.d.ts +0 -1
- package/dist/components/DatePicker/DatePicker.types.d.ts +0 -27
- package/dist/components/DatePicker/index.d.ts +0 -2
- package/dist/components/Dialog/Dialog.d.ts +0 -6
- package/dist/components/Dialog/Dialog.stories.d.ts +0 -9
- package/dist/components/Dialog/Dialog.test.d.ts +0 -1
- package/dist/components/Dialog/Dialog.types.d.ts +0 -52
- package/dist/components/Dialog/index.d.ts +0 -2
- package/dist/components/DropdownMenu/DropdownMenu.d.ts +0 -7
- package/dist/components/DropdownMenu/DropdownMenu.stories.d.ts +0 -9
- package/dist/components/DropdownMenu/DropdownMenu.test.d.ts +0 -1
- package/dist/components/DropdownMenu/DropdownMenu.types.d.ts +0 -24
- package/dist/components/DropdownMenu/index.d.ts +0 -2
- package/dist/components/Email/Email.d.ts +0 -2
- package/dist/components/Email/Email.stories.d.ts +0 -11
- package/dist/components/Email/Email.test.d.ts +0 -1
- package/dist/components/Email/Email.types.d.ts +0 -33
- package/dist/components/Email/index.d.ts +0 -2
- package/dist/components/FileUpload/FileUpload.d.ts +0 -2
- package/dist/components/FileUpload/FileUpload.stories.d.ts +0 -10
- package/dist/components/FileUpload/FileUpload.test.d.ts +0 -1
- package/dist/components/FileUpload/FileUpload.types.d.ts +0 -22
- package/dist/components/FileUpload/index.d.ts +0 -2
- package/dist/components/Header/Header.d.ts +0 -7
- package/dist/components/Header/Header.stories.d.ts +0 -8
- package/dist/components/Header/Header.test.d.ts +0 -1
- package/dist/components/Header/Header.types.d.ts +0 -19
- package/dist/components/Header/index.d.ts +0 -2
- package/dist/components/IconButton/IconButton.d.ts +0 -2
- package/dist/components/IconButton/IconButton.stories.d.ts +0 -17
- package/dist/components/IconButton/IconButton.types.d.ts +0 -10
- package/dist/components/IconButton/index.d.ts +0 -2
- package/dist/components/Image/Image.d.ts +0 -6
- package/dist/components/Image/Image.stories.d.ts +0 -13
- package/dist/components/Image/Image.test.d.ts +0 -1
- package/dist/components/Image/Image.types.d.ts +0 -40
- package/dist/components/Image/index.d.ts +0 -2
- package/dist/components/Link/Link.d.ts +0 -2
- package/dist/components/Link/Link.stories.d.ts +0 -15
- package/dist/components/Link/Link.test.d.ts +0 -1
- package/dist/components/Link/Link.types.d.ts +0 -20
- package/dist/components/Link/index.d.ts +0 -2
- package/dist/components/Loader/Loader.d.ts +0 -2
- package/dist/components/Loader/Loader.stories.d.ts +0 -12
- package/dist/components/Loader/Loader.test.d.ts +0 -1
- package/dist/components/Loader/Loader.types.d.ts +0 -17
- package/dist/components/Loader/index.d.ts +0 -2
- package/dist/components/Modal/Modal.d.ts +0 -14
- package/dist/components/Modal/Modal.stories.d.ts +0 -14
- package/dist/components/Modal/Modal.test.d.ts +0 -1
- package/dist/components/Modal/Modal.types.d.ts +0 -100
- package/dist/components/Modal/index.d.ts +0 -2
- package/dist/components/MultiSelect/MultiSelect.d.ts +0 -2
- package/dist/components/MultiSelect/MultiSelect.stories.d.ts +0 -15
- package/dist/components/MultiSelect/MultiSelect.test.d.ts +0 -1
- package/dist/components/MultiSelect/MultiSelect.types.d.ts +0 -55
- package/dist/components/MultiSelect/index.d.ts +0 -2
- package/dist/components/OtpInput/OtpInput.d.ts +0 -2
- package/dist/components/OtpInput/OtpInput.stories.d.ts +0 -10
- package/dist/components/OtpInput/OtpInput.test.d.ts +0 -1
- package/dist/components/OtpInput/OtpInput.types.d.ts +0 -53
- package/dist/components/OtpInput/index.d.ts +0 -2
- package/dist/components/PasswordInput/PasswordInput.d.ts +0 -2
- package/dist/components/PasswordInput/PasswordInput.stories.d.ts +0 -23
- package/dist/components/PasswordInput/PasswordInput.test.d.ts +0 -1
- package/dist/components/PasswordInput/PasswordInput.types.d.ts +0 -27
- package/dist/components/PasswordInput/index.d.ts +0 -2
- package/dist/components/Phone/Phone.d.ts +0 -2
- package/dist/components/Phone/Phone.stories.d.ts +0 -11
- package/dist/components/Phone/Phone.test.d.ts +0 -1
- package/dist/components/Phone/Phone.types.d.ts +0 -36
- package/dist/components/Phone/countries.d.ts +0 -8
- package/dist/components/Phone/index.d.ts +0 -2
- package/dist/components/RadioButton/RadioButton.d.ts +0 -2
- package/dist/components/RadioButton/RadioButton.stories.d.ts +0 -21
- package/dist/components/RadioButton/RadioButton.test.d.ts +0 -1
- package/dist/components/RadioButton/RadioButton.types.d.ts +0 -51
- package/dist/components/RadioButton/index.d.ts +0 -2
- package/dist/components/SearchInput/SearchInput.d.ts +0 -6
- package/dist/components/SearchInput/SearchInput.stories.d.ts +0 -8
- package/dist/components/SearchInput/SearchInput.test.d.ts +0 -1
- package/dist/components/SearchInput/SearchInput.types.d.ts +0 -12
- package/dist/components/SearchInput/index.d.ts +0 -2
- package/dist/components/Select/Select.d.ts +0 -2
- package/dist/components/Select/Select.stories.d.ts +0 -12
- package/dist/components/Select/Select.test.d.ts +0 -1
- package/dist/components/Select/Select.types.d.ts +0 -31
- package/dist/components/Select/index.d.ts +0 -2
- package/dist/components/Sidebar/Sidebar.d.ts +0 -7
- package/dist/components/Sidebar/Sidebar.stories.d.ts +0 -10
- package/dist/components/Sidebar/Sidebar.test.d.ts +0 -1
- package/dist/components/Sidebar/Sidebar.types.d.ts +0 -87
- package/dist/components/Sidebar/index.d.ts +0 -2
- package/dist/components/Skeleton/Skeleton.d.ts +0 -26
- package/dist/components/Skeleton/Skeleton.stories.d.ts +0 -13
- package/dist/components/Skeleton/Skeleton.types.d.ts +0 -47
- package/dist/components/Skeleton/index.d.ts +0 -2
- package/dist/components/Stepper/Stepper.d.ts +0 -2
- package/dist/components/Stepper/Stepper.stories.d.ts +0 -23
- package/dist/components/Stepper/Stepper.test.d.ts +0 -1
- package/dist/components/Stepper/Stepper.types.d.ts +0 -47
- package/dist/components/Stepper/index.d.ts +0 -2
- package/dist/components/Table/Pagination.d.ts +0 -3
- package/dist/components/Table/Table.d.ts +0 -3
- package/dist/components/Table/Table.stories.d.ts +0 -13
- package/dist/components/Table/Table.test.d.ts +0 -1
- package/dist/components/Table/Table.types.d.ts +0 -85
- package/dist/components/Table/index.d.ts +0 -3
- package/dist/components/Tabs/Tabs.d.ts +0 -2
- package/dist/components/Tabs/Tabs.stories.d.ts +0 -17
- package/dist/components/Tabs/Tabs.test.d.ts +0 -1
- package/dist/components/Tabs/Tabs.types.d.ts +0 -21
- package/dist/components/Tabs/index.d.ts +0 -2
- package/dist/components/TextInput/TextInput.d.ts +0 -2
- package/dist/components/TextInput/TextInput.stories.d.ts +0 -25
- package/dist/components/TextInput/TextInput.test.d.ts +0 -1
- package/dist/components/TextInput/TextInput.types.d.ts +0 -29
- package/dist/components/TextInput/index.d.ts +0 -2
- package/dist/components/ThemeProvider/ThemeProvider.d.ts +0 -8
- package/dist/components/ThemeProvider/ThemeProvider.stories.d.ts +0 -16
- package/dist/components/ThemeProvider/ThemeProvider.test.d.ts +0 -1
- package/dist/components/ThemeProvider/ThemeProvider.types.d.ts +0 -112
- package/dist/components/ThemeProvider/index.d.ts +0 -2
- package/dist/components/TimePicker/TimePicker.d.ts +0 -2
- package/dist/components/TimePicker/TimePicker.stories.d.ts +0 -23
- package/dist/components/TimePicker/TimePicker.test.d.ts +0 -1
- package/dist/components/TimePicker/TimePicker.types.d.ts +0 -27
- package/dist/components/TimePicker/index.d.ts +0 -2
- package/dist/components/Toaster/Toaster.d.ts +0 -2
- package/dist/components/Toaster/Toaster.stories.d.ts +0 -13
- package/dist/components/Toaster/Toaster.test.d.ts +0 -1
- package/dist/components/Toaster/Toaster.types.d.ts +0 -23
- package/dist/components/Toaster/index.d.ts +0 -2
- package/dist/components/Toggle/Toggle.d.ts +0 -2
- package/dist/components/Toggle/Toggle.stories.d.ts +0 -11
- package/dist/components/Toggle/Toggle.types.d.ts +0 -10
- package/dist/components/Toggle/index.d.ts +0 -2
- package/dist/components/Tooltip/Tooltip.d.ts +0 -2
- package/dist/components/Tooltip/Tooltip.stories.d.ts +0 -13
- package/dist/components/Tooltip/Tooltip.test.d.ts +0 -1
- package/dist/components/Tooltip/Tooltip.types.d.ts +0 -33
- package/dist/components/Tooltip/index.d.ts +0 -2
- package/dist/utils/cn.d.ts +0 -2
- package/dist/utils/index.d.ts +0 -1
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { cn } from './chunk-OCPFOFJ4.mjs';
|
|
2
|
+
import { XMarkIcon } from '@heroicons/react/20/solid';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var solidClasses = {
|
|
6
|
+
primary: "bg-primary text-text-inverse shadow-sm shadow-primary/30",
|
|
7
|
+
secondary: "bg-secondary text-text shadow-sm shadow-secondary/30",
|
|
8
|
+
success: "bg-success text-text-inverse shadow-sm shadow-success/30",
|
|
9
|
+
error: "bg-error text-text-inverse shadow-sm shadow-error/30",
|
|
10
|
+
warning: "bg-warning text-text-inverse shadow-sm shadow-warning/30",
|
|
11
|
+
info: "bg-info text-text-inverse shadow-sm shadow-info/30",
|
|
12
|
+
accent: "bg-accent text-text-inverse shadow-sm shadow-accent/30",
|
|
13
|
+
gray: "bg-surface-secondary text-text-secondary shadow-sm",
|
|
14
|
+
blue: "bg-primary text-text-inverse shadow-sm shadow-primary/30",
|
|
15
|
+
green: "bg-success text-text-inverse shadow-sm shadow-success/30",
|
|
16
|
+
red: "bg-error text-text-inverse shadow-sm shadow-error/30",
|
|
17
|
+
yellow: "bg-warning text-text-inverse shadow-sm shadow-warning/30",
|
|
18
|
+
purple: "bg-purple-600 text-white shadow-sm shadow-purple-500/30",
|
|
19
|
+
pink: "bg-pink-500 text-white shadow-sm shadow-pink-500/30",
|
|
20
|
+
orange: "bg-orange-500 text-white shadow-sm shadow-orange-500/30",
|
|
21
|
+
cyan: "bg-cyan-500 text-white shadow-sm shadow-cyan-500/30",
|
|
22
|
+
teal: "bg-teal-500 text-white shadow-sm shadow-teal-500/30",
|
|
23
|
+
indigo: "bg-indigo-500 text-white shadow-sm shadow-indigo-500/30"
|
|
24
|
+
};
|
|
25
|
+
var softClasses = {
|
|
26
|
+
primary: "bg-primary/10 text-primary ring-1 ring-inset ring-primary/20",
|
|
27
|
+
secondary: "bg-secondary/10 text-secondary ring-1 ring-inset ring-secondary/20",
|
|
28
|
+
success: "bg-success/10 text-success ring-1 ring-inset ring-success/20",
|
|
29
|
+
error: "bg-error/10 text-error ring-1 ring-inset ring-error/20",
|
|
30
|
+
warning: "bg-warning/10 text-warning ring-1 ring-inset ring-warning/20",
|
|
31
|
+
info: "bg-info/10 text-info ring-1 ring-inset ring-info/20",
|
|
32
|
+
accent: "bg-accent/10 text-accent ring-1 ring-inset ring-accent/20",
|
|
33
|
+
gray: "bg-surface-secondary/60 text-text-secondary ring-1 ring-inset ring-border/40",
|
|
34
|
+
blue: "bg-primary/10 text-primary ring-1 ring-inset ring-primary/20",
|
|
35
|
+
green: "bg-success/10 text-success ring-1 ring-inset ring-success/20",
|
|
36
|
+
red: "bg-error/10 text-error ring-1 ring-inset ring-error/20",
|
|
37
|
+
yellow: "bg-warning/10 text-warning ring-1 ring-inset ring-warning/20",
|
|
38
|
+
purple: "bg-purple-500/10 text-purple-500 ring-1 ring-inset ring-purple-500/25",
|
|
39
|
+
pink: "bg-pink-500/10 text-pink-500 ring-1 ring-inset ring-pink-500/25",
|
|
40
|
+
orange: "bg-orange-500/10 text-orange-500 ring-1 ring-inset ring-orange-500/25",
|
|
41
|
+
cyan: "bg-cyan-500/10 text-cyan-500 ring-1 ring-inset ring-cyan-500/25",
|
|
42
|
+
teal: "bg-teal-500/10 text-teal-500 ring-1 ring-inset ring-teal-500/25",
|
|
43
|
+
indigo: "bg-indigo-500/10 text-indigo-500 ring-1 ring-inset ring-indigo-500/25"
|
|
44
|
+
};
|
|
45
|
+
var outlineClasses = {
|
|
46
|
+
primary: "border border-primary/60 text-primary bg-transparent",
|
|
47
|
+
secondary: "border border-secondary/60 text-secondary bg-transparent",
|
|
48
|
+
success: "border border-success/60 text-success bg-transparent",
|
|
49
|
+
error: "border border-error/60 text-error bg-transparent",
|
|
50
|
+
warning: "border border-warning/60 text-warning bg-transparent",
|
|
51
|
+
info: "border border-info/60 text-info bg-transparent",
|
|
52
|
+
accent: "border border-accent/60 text-accent bg-transparent",
|
|
53
|
+
gray: "border border-border text-text-secondary bg-transparent",
|
|
54
|
+
blue: "border border-primary/60 text-primary bg-transparent",
|
|
55
|
+
green: "border border-success/60 text-success bg-transparent",
|
|
56
|
+
red: "border border-error/60 text-error bg-transparent",
|
|
57
|
+
yellow: "border border-warning/60 text-warning bg-transparent",
|
|
58
|
+
purple: "border border-purple-500/60 text-purple-500 bg-transparent",
|
|
59
|
+
pink: "border border-pink-500/60 text-pink-500 bg-transparent",
|
|
60
|
+
orange: "border border-orange-500/60 text-orange-500 bg-transparent",
|
|
61
|
+
cyan: "border border-cyan-500/60 text-cyan-500 bg-transparent",
|
|
62
|
+
teal: "border border-teal-500/60 text-teal-500 bg-transparent",
|
|
63
|
+
indigo: "border border-indigo-500/60 text-indigo-500 bg-transparent"
|
|
64
|
+
};
|
|
65
|
+
var gradientClasses = {
|
|
66
|
+
primary: "bg-gradient-to-r from-blue-500 to-indigo-600 text-white shadow-sm shadow-blue-500/30",
|
|
67
|
+
secondary: "bg-gradient-to-r from-slate-500 to-slate-700 text-white shadow-sm shadow-slate-500/30",
|
|
68
|
+
success: "bg-gradient-to-r from-green-400 to-emerald-600 text-white shadow-sm shadow-green-500/30",
|
|
69
|
+
error: "bg-gradient-to-r from-red-500 to-rose-600 text-white shadow-sm shadow-red-500/30",
|
|
70
|
+
warning: "bg-gradient-to-r from-amber-400 to-orange-500 text-white shadow-sm shadow-amber-500/30",
|
|
71
|
+
info: "bg-gradient-to-r from-sky-400 to-blue-600 text-white shadow-sm shadow-blue-500/30",
|
|
72
|
+
accent: "bg-gradient-to-r from-cyan-400 to-sky-600 text-white shadow-sm shadow-cyan-500/30",
|
|
73
|
+
gray: "bg-gradient-to-r from-slate-400 to-slate-500 text-white shadow-sm",
|
|
74
|
+
blue: "bg-gradient-to-r from-blue-500 to-indigo-600 text-white shadow-sm shadow-blue-500/30",
|
|
75
|
+
green: "bg-gradient-to-r from-green-400 to-emerald-600 text-white shadow-sm shadow-green-500/30",
|
|
76
|
+
red: "bg-gradient-to-r from-red-500 to-rose-600 text-white shadow-sm shadow-red-500/30",
|
|
77
|
+
yellow: "bg-gradient-to-r from-amber-400 to-orange-500 text-white shadow-sm shadow-amber-500/30",
|
|
78
|
+
purple: "bg-gradient-to-r from-purple-500 to-violet-600 text-white shadow-sm shadow-purple-500/30",
|
|
79
|
+
pink: "bg-gradient-to-r from-pink-500 to-fuchsia-600 text-white shadow-sm shadow-pink-500/30",
|
|
80
|
+
orange: "bg-gradient-to-r from-orange-400 to-red-500 text-white shadow-sm shadow-orange-500/30",
|
|
81
|
+
cyan: "bg-gradient-to-r from-cyan-400 to-sky-500 text-white shadow-sm shadow-cyan-500/30",
|
|
82
|
+
teal: "bg-gradient-to-r from-teal-400 to-cyan-500 text-white shadow-sm shadow-teal-500/30",
|
|
83
|
+
indigo: "bg-gradient-to-r from-indigo-500 to-purple-600 text-white shadow-sm shadow-indigo-500/30"
|
|
84
|
+
};
|
|
85
|
+
var dotColorClasses = {
|
|
86
|
+
primary: "bg-primary",
|
|
87
|
+
secondary: "bg-secondary",
|
|
88
|
+
success: "bg-success",
|
|
89
|
+
error: "bg-error",
|
|
90
|
+
warning: "bg-warning",
|
|
91
|
+
info: "bg-info",
|
|
92
|
+
accent: "bg-accent",
|
|
93
|
+
gray: "bg-slate-400",
|
|
94
|
+
blue: "bg-primary",
|
|
95
|
+
green: "bg-success",
|
|
96
|
+
red: "bg-error",
|
|
97
|
+
yellow: "bg-warning",
|
|
98
|
+
purple: "bg-purple-500",
|
|
99
|
+
pink: "bg-pink-500",
|
|
100
|
+
orange: "bg-orange-500",
|
|
101
|
+
cyan: "bg-cyan-500",
|
|
102
|
+
teal: "bg-teal-500",
|
|
103
|
+
indigo: "bg-indigo-500"
|
|
104
|
+
};
|
|
105
|
+
var variantMap = {
|
|
106
|
+
solid: (c) => solidClasses[c],
|
|
107
|
+
soft: (c) => softClasses[c],
|
|
108
|
+
outline: (c) => outlineClasses[c],
|
|
109
|
+
gradient: (c) => gradientClasses[c]
|
|
110
|
+
};
|
|
111
|
+
var sizeClasses = {
|
|
112
|
+
xs: "px-1.5 py-px text-[10px] leading-4 gap-1",
|
|
113
|
+
sm: "px-2 py-0.5 text-xs leading-4 gap-1",
|
|
114
|
+
md: "px-2.5 py-0.5 text-xs leading-5 gap-1",
|
|
115
|
+
lg: "px-3 py-1 text-sm leading-5 gap-1.5"
|
|
116
|
+
};
|
|
117
|
+
var dotSizeClasses = {
|
|
118
|
+
xs: "w-1.5 h-1.5",
|
|
119
|
+
sm: "w-1.5 h-1.5",
|
|
120
|
+
md: "w-2 h-2",
|
|
121
|
+
lg: "w-2.5 h-2.5"
|
|
122
|
+
};
|
|
123
|
+
var removeSizeClasses = {
|
|
124
|
+
xs: "w-3 h-3",
|
|
125
|
+
sm: "w-3 h-3",
|
|
126
|
+
md: "w-3.5 h-3.5",
|
|
127
|
+
lg: "w-4 h-4"
|
|
128
|
+
};
|
|
129
|
+
var shapeClasses = {
|
|
130
|
+
rounded: "rounded-md",
|
|
131
|
+
pill: "rounded-full",
|
|
132
|
+
square: "rounded-none"
|
|
133
|
+
};
|
|
134
|
+
function XIcon() {
|
|
135
|
+
return /* @__PURE__ */ jsx(XMarkIcon, { className: "w-full h-full", "aria-hidden": "true" });
|
|
136
|
+
}
|
|
137
|
+
function Badge({
|
|
138
|
+
children,
|
|
139
|
+
variant = "soft",
|
|
140
|
+
color = "blue",
|
|
141
|
+
size = "md",
|
|
142
|
+
shape = "pill",
|
|
143
|
+
icon,
|
|
144
|
+
trailingIcon,
|
|
145
|
+
onRemove,
|
|
146
|
+
pulse = false,
|
|
147
|
+
count,
|
|
148
|
+
maxCount = 99,
|
|
149
|
+
uppercase = false,
|
|
150
|
+
tracking = false,
|
|
151
|
+
as: Tag = "span",
|
|
152
|
+
className,
|
|
153
|
+
...rest
|
|
154
|
+
}) {
|
|
155
|
+
const isDot = variant === "dot";
|
|
156
|
+
const colorClass = isDot ? softClasses[color] : variantMap[variant](color);
|
|
157
|
+
const countLabel = count !== void 0 ? count > maxCount ? `${maxCount.toString()}+` : String(count) : null;
|
|
158
|
+
return /* @__PURE__ */ jsxs(
|
|
159
|
+
Tag,
|
|
160
|
+
{
|
|
161
|
+
className: cn(
|
|
162
|
+
// base
|
|
163
|
+
"inline-flex items-center font-medium leading-none select-none whitespace-nowrap",
|
|
164
|
+
"transition-all duration-150 ease-out",
|
|
165
|
+
sizeClasses[size],
|
|
166
|
+
shapeClasses[shape],
|
|
167
|
+
colorClass,
|
|
168
|
+
uppercase && "uppercase",
|
|
169
|
+
tracking && "tracking-wide",
|
|
170
|
+
// clickable cursor when role="button" or Tag is 'button'/'a'
|
|
171
|
+
(Tag === "button" || Tag === "a") && "cursor-pointer",
|
|
172
|
+
className
|
|
173
|
+
),
|
|
174
|
+
...rest,
|
|
175
|
+
children: [
|
|
176
|
+
isDot && /* @__PURE__ */ jsxs("span", { className: "relative inline-flex shrink-0", "aria-hidden": "true", children: [
|
|
177
|
+
pulse && /* @__PURE__ */ jsx(
|
|
178
|
+
"span",
|
|
179
|
+
{
|
|
180
|
+
className: cn(
|
|
181
|
+
"absolute inset-0 rounded-full animate-ping opacity-60",
|
|
182
|
+
dotColorClasses[color]
|
|
183
|
+
)
|
|
184
|
+
}
|
|
185
|
+
),
|
|
186
|
+
/* @__PURE__ */ jsx(
|
|
187
|
+
"span",
|
|
188
|
+
{
|
|
189
|
+
className: cn("rounded-full shrink-0", dotSizeClasses[size], dotColorClasses[color])
|
|
190
|
+
}
|
|
191
|
+
)
|
|
192
|
+
] }),
|
|
193
|
+
!isDot && icon != null && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "shrink-0 inline-flex", children: icon }),
|
|
194
|
+
countLabel ?? children,
|
|
195
|
+
!isDot && trailingIcon != null && onRemove == null && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "shrink-0 inline-flex", children: trailingIcon }),
|
|
196
|
+
onRemove != null && /* @__PURE__ */ jsx(
|
|
197
|
+
"button",
|
|
198
|
+
{
|
|
199
|
+
type: "button",
|
|
200
|
+
"aria-label": "Remove",
|
|
201
|
+
onClick: (e) => {
|
|
202
|
+
e.stopPropagation();
|
|
203
|
+
onRemove();
|
|
204
|
+
},
|
|
205
|
+
className: cn(
|
|
206
|
+
"inline-flex items-center justify-center rounded-full shrink-0 -mr-0.5",
|
|
207
|
+
"opacity-70 hover:opacity-100",
|
|
208
|
+
"hover:bg-black/10 dark:hover:bg-white/15",
|
|
209
|
+
"transition-all duration-100",
|
|
210
|
+
removeSizeClasses[size]
|
|
211
|
+
),
|
|
212
|
+
children: /* @__PURE__ */ jsx(XIcon, {})
|
|
213
|
+
}
|
|
214
|
+
)
|
|
215
|
+
]
|
|
216
|
+
}
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export { Badge };
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkL5VQZZVR_cjs = require('./chunk-L5VQZZVR.cjs');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var solid = require('@heroicons/react/24/solid');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
var sizeClasses = {
|
|
9
|
+
"2xs": "w-4 h-4 text-[10px]",
|
|
10
|
+
xs: "w-6 h-6 text-xs",
|
|
11
|
+
sm: "w-8 h-8 text-sm",
|
|
12
|
+
md: "w-10 h-10 text-base",
|
|
13
|
+
lg: "w-12 h-12 text-lg",
|
|
14
|
+
xl: "w-14 h-14 text-xl",
|
|
15
|
+
"2xl": "w-16 h-16 text-2xl",
|
|
16
|
+
"3xl": "w-20 h-20 text-3xl",
|
|
17
|
+
"4xl": "w-24 h-24 text-4xl"
|
|
18
|
+
};
|
|
19
|
+
var variantClasses = {
|
|
20
|
+
circle: "rounded-full",
|
|
21
|
+
square: "rounded-none",
|
|
22
|
+
rounded: "rounded-md"
|
|
23
|
+
};
|
|
24
|
+
var stateBorderClasses = {
|
|
25
|
+
default: "ring-0",
|
|
26
|
+
error: "ring-2 ring-error ring-offset-2 ring-offset-surface",
|
|
27
|
+
success: "ring-2 ring-success ring-offset-2 ring-offset-surface",
|
|
28
|
+
warning: "ring-2 ring-warning ring-offset-2 ring-offset-surface",
|
|
29
|
+
offline: "ring-2 ring-border ring-offset-2 ring-offset-surface",
|
|
30
|
+
online: "ring-2 ring-success ring-offset-2 ring-offset-surface",
|
|
31
|
+
busy: "ring-2 ring-error ring-offset-2 ring-offset-surface",
|
|
32
|
+
away: "ring-2 ring-warning ring-offset-2 ring-offset-surface"
|
|
33
|
+
};
|
|
34
|
+
var stateBadgeClasses = {
|
|
35
|
+
default: "hidden",
|
|
36
|
+
error: "bg-error",
|
|
37
|
+
success: "bg-success",
|
|
38
|
+
warning: "bg-warning",
|
|
39
|
+
offline: "bg-border",
|
|
40
|
+
online: "bg-success",
|
|
41
|
+
busy: "bg-error",
|
|
42
|
+
away: "bg-warning"
|
|
43
|
+
};
|
|
44
|
+
function getInitials(name) {
|
|
45
|
+
const parts = name.trim().split(/\s+/);
|
|
46
|
+
if (parts.length === 0) return "";
|
|
47
|
+
if (parts.length === 1) return parts[0]?.substring(0, 2).toUpperCase() ?? "";
|
|
48
|
+
const first = parts[0];
|
|
49
|
+
const last = parts[parts.length - 1];
|
|
50
|
+
return `${first?.[0] ?? ""}${last?.[0] ?? ""}`.toUpperCase();
|
|
51
|
+
}
|
|
52
|
+
var Avatar = react.forwardRef(function Avatar2({
|
|
53
|
+
size = "md",
|
|
54
|
+
variant = "circle",
|
|
55
|
+
state = "default",
|
|
56
|
+
stateType = "border",
|
|
57
|
+
fallback,
|
|
58
|
+
alt,
|
|
59
|
+
src,
|
|
60
|
+
className,
|
|
61
|
+
containerClassName,
|
|
62
|
+
fallbackClassName,
|
|
63
|
+
...rest
|
|
64
|
+
}, ref) {
|
|
65
|
+
const [hasError, setHasError] = react.useState(false);
|
|
66
|
+
const showFallback = typeof src !== "string" || src.length === 0 || hasError;
|
|
67
|
+
let initial = "";
|
|
68
|
+
if (typeof fallback === "string") {
|
|
69
|
+
initial = getInitials(fallback);
|
|
70
|
+
} else if (typeof alt === "string" && alt.length > 0) {
|
|
71
|
+
initial = getInitials(alt);
|
|
72
|
+
}
|
|
73
|
+
const renderedFallback = typeof fallback === "string" || typeof fallback === "undefined" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
74
|
+
"span",
|
|
75
|
+
{
|
|
76
|
+
className: chunkL5VQZZVR_cjs.cn(
|
|
77
|
+
"flex h-full w-full items-center justify-center font-bold text-text-muted",
|
|
78
|
+
fallbackClassName
|
|
79
|
+
),
|
|
80
|
+
children: initial || /* @__PURE__ */ jsxRuntime.jsx(solid.UserIcon, { className: "h-3/5 w-3/5 text-text-muted/40", "aria-hidden": "true" })
|
|
81
|
+
}
|
|
82
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkL5VQZZVR_cjs.cn("flex h-full w-full items-center justify-center", fallbackClassName), children: fallback });
|
|
83
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkL5VQZZVR_cjs.cn("relative inline-block", containerClassName), children: [
|
|
84
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
85
|
+
"div",
|
|
86
|
+
{
|
|
87
|
+
ref,
|
|
88
|
+
className: chunkL5VQZZVR_cjs.cn(
|
|
89
|
+
"relative inline-flex shrink-0 items-center justify-center overflow-hidden bg-surface-secondary",
|
|
90
|
+
sizeClasses[size],
|
|
91
|
+
variantClasses[variant],
|
|
92
|
+
stateType === "border" ? stateBorderClasses[state] : "",
|
|
93
|
+
className
|
|
94
|
+
),
|
|
95
|
+
children: showFallback ? renderedFallback : /* @__PURE__ */ jsxRuntime.jsx(
|
|
96
|
+
"img",
|
|
97
|
+
{
|
|
98
|
+
src,
|
|
99
|
+
alt,
|
|
100
|
+
onError: () => {
|
|
101
|
+
setHasError(true);
|
|
102
|
+
},
|
|
103
|
+
className: "h-full w-full object-cover",
|
|
104
|
+
...rest
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
),
|
|
109
|
+
stateType === "badge" && state !== "default" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
110
|
+
"span",
|
|
111
|
+
{
|
|
112
|
+
className: chunkL5VQZZVR_cjs.cn(
|
|
113
|
+
"absolute bottom-0 right-0 block rounded-full border-2 border-surface",
|
|
114
|
+
stateBadgeClasses[state],
|
|
115
|
+
size === "2xs" || size === "xs" ? "h-2 w-2" : size === "sm" ? "h-2.5 w-2.5" : size === "md" ? "h-3 w-3" : size === "lg" ? "h-3.5 w-3.5" : size === "xl" ? "h-4 w-4" : size === "2xl" ? "h-4.5 w-4.5" : size === "3xl" ? "h-5 w-5" : "h-6 w-6",
|
|
116
|
+
variant === "square" ? "-translate-x-1/2 -translate-y-1/2" : ""
|
|
117
|
+
)
|
|
118
|
+
}
|
|
119
|
+
)
|
|
120
|
+
] });
|
|
121
|
+
});
|
|
122
|
+
Avatar.displayName = "Avatar";
|
|
123
|
+
|
|
124
|
+
exports.Avatar = Avatar;
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { cn } from './chunk-OCPFOFJ4.mjs';
|
|
2
|
+
import { useRef, useCallback, useEffect } from 'react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
|
+
import { XMarkIcon } from '@heroicons/react/24/outline';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var sizeClasses = {
|
|
8
|
+
xs: "max-w-xs",
|
|
9
|
+
sm: "max-w-sm",
|
|
10
|
+
md: "max-w-md",
|
|
11
|
+
lg: "max-w-lg",
|
|
12
|
+
xl: "max-w-xl",
|
|
13
|
+
"2xl": "max-w-2xl",
|
|
14
|
+
"3xl": "max-w-3xl",
|
|
15
|
+
"4xl": "max-w-4xl",
|
|
16
|
+
"5xl": "max-w-5xl",
|
|
17
|
+
"6xl": "max-w-6xl",
|
|
18
|
+
"7xl": "max-w-7xl",
|
|
19
|
+
full: "max-w-full w-full h-full m-0 rounded-none"
|
|
20
|
+
};
|
|
21
|
+
var sideSheetWidthClasses = {
|
|
22
|
+
xs: "w-64",
|
|
23
|
+
sm: "w-80",
|
|
24
|
+
md: "w-96",
|
|
25
|
+
lg: "w-[30rem]",
|
|
26
|
+
xl: "w-[36rem]",
|
|
27
|
+
"2xl": "w-[42rem]",
|
|
28
|
+
"3xl": "w-[48rem]",
|
|
29
|
+
"4xl": "w-[56rem]",
|
|
30
|
+
"5xl": "w-[64rem]",
|
|
31
|
+
"6xl": "w-[72rem]",
|
|
32
|
+
"7xl": "w-[80rem]",
|
|
33
|
+
full: "w-full"
|
|
34
|
+
};
|
|
35
|
+
var variantClasses = {
|
|
36
|
+
default: "bg-surface border border-border shadow-[0_20px_60px_-10px_rgba(0,0,0,0.2),0_8px_20px_-8px_rgba(0,0,0,0.1)]",
|
|
37
|
+
glass: "bg-white/10 dark:bg-black/20 backdrop-blur-xl border border-white/20 dark:border-white/10 shadow-[0_25px_50px_-12px_rgba(0,0,0,0.4)]",
|
|
38
|
+
flat: "bg-surface shadow-[0_4px_24px_rgba(0,0,0,0.08)]"
|
|
39
|
+
};
|
|
40
|
+
var overlayPositionClasses = {
|
|
41
|
+
top: "items-start pt-16",
|
|
42
|
+
center: "items-center",
|
|
43
|
+
bottom: "items-end pb-0",
|
|
44
|
+
left: "items-stretch justify-start p-0",
|
|
45
|
+
right: "items-stretch justify-end p-0"
|
|
46
|
+
};
|
|
47
|
+
var contentPositionClasses = {
|
|
48
|
+
top: "",
|
|
49
|
+
center: "",
|
|
50
|
+
bottom: "rounded-b-none w-full max-w-full",
|
|
51
|
+
left: "rounded-l-none rounded-r-2xl h-full max-h-full my-0",
|
|
52
|
+
right: "rounded-r-none rounded-l-2xl h-full max-h-full my-0"
|
|
53
|
+
};
|
|
54
|
+
var Modal = function Modal2({
|
|
55
|
+
isOpen,
|
|
56
|
+
onClose,
|
|
57
|
+
children,
|
|
58
|
+
size = "md",
|
|
59
|
+
variant = "default",
|
|
60
|
+
position = "center",
|
|
61
|
+
closeOnOverlayClick = true,
|
|
62
|
+
closeOnEsc = true,
|
|
63
|
+
trapFocus = true,
|
|
64
|
+
lockScroll = true,
|
|
65
|
+
contentClassName,
|
|
66
|
+
overlayClassName,
|
|
67
|
+
showBackdrop = true,
|
|
68
|
+
ariaLabel,
|
|
69
|
+
ariaLabelledby,
|
|
70
|
+
ariaDescribedby
|
|
71
|
+
}) {
|
|
72
|
+
const modalRef = useRef(null);
|
|
73
|
+
const previousFocusRef = useRef(null);
|
|
74
|
+
const handleClose = useCallback(() => {
|
|
75
|
+
onClose();
|
|
76
|
+
}, [onClose]);
|
|
77
|
+
useEffect(() => {
|
|
78
|
+
if (isOpen) {
|
|
79
|
+
previousFocusRef.current = document.activeElement;
|
|
80
|
+
if (lockScroll) {
|
|
81
|
+
document.body.style.overflow = "hidden";
|
|
82
|
+
}
|
|
83
|
+
const handleKeyDown = (e) => {
|
|
84
|
+
if (closeOnEsc && e.key === "Escape") {
|
|
85
|
+
handleClose();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (trapFocus && e.key === "Tab") {
|
|
89
|
+
const focusableElements = modalRef.current?.querySelectorAll(
|
|
90
|
+
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
|
91
|
+
);
|
|
92
|
+
if (!focusableElements || focusableElements.length === 0) return;
|
|
93
|
+
const firstElement = focusableElements[0];
|
|
94
|
+
const lastElement = focusableElements[focusableElements.length - 1];
|
|
95
|
+
if (e.shiftKey) {
|
|
96
|
+
if (document.activeElement === firstElement) {
|
|
97
|
+
lastElement.focus();
|
|
98
|
+
e.preventDefault();
|
|
99
|
+
}
|
|
100
|
+
} else {
|
|
101
|
+
if (document.activeElement === lastElement) {
|
|
102
|
+
firstElement.focus();
|
|
103
|
+
e.preventDefault();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
109
|
+
setTimeout(() => {
|
|
110
|
+
const firstFocusable = modalRef.current?.querySelector(
|
|
111
|
+
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
|
112
|
+
);
|
|
113
|
+
if (firstFocusable != null) {
|
|
114
|
+
firstFocusable.focus();
|
|
115
|
+
} else {
|
|
116
|
+
modalRef.current?.focus();
|
|
117
|
+
}
|
|
118
|
+
}, 50);
|
|
119
|
+
return () => {
|
|
120
|
+
document.removeEventListener("keydown", handleKeyDown);
|
|
121
|
+
if (lockScroll) {
|
|
122
|
+
document.body.style.overflow = "";
|
|
123
|
+
}
|
|
124
|
+
previousFocusRef.current?.focus();
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return void 0;
|
|
128
|
+
}, [isOpen, closeOnEsc, handleClose, lockScroll, trapFocus]);
|
|
129
|
+
if (!isOpen) return null;
|
|
130
|
+
const isBottomSheet = position === "bottom";
|
|
131
|
+
const isLeftSheet = position === "left";
|
|
132
|
+
const isRightSheet = position === "right";
|
|
133
|
+
const isSideSheet = isLeftSheet || isRightSheet;
|
|
134
|
+
let entryAnimation = "animate-[modal-zoom-in_200ms_cubic-bezier(0.34,1.56,0.64,1)_forwards]";
|
|
135
|
+
if (isBottomSheet)
|
|
136
|
+
entryAnimation = "animate-[modal-slide-up_250ms_cubic-bezier(0.32,0.72,0,1)_forwards]";
|
|
137
|
+
if (isLeftSheet)
|
|
138
|
+
entryAnimation = "animate-[modal-slide-right_250ms_cubic-bezier(0.32,0.72,0,1)_forwards]";
|
|
139
|
+
if (isRightSheet)
|
|
140
|
+
entryAnimation = "animate-[modal-slide-left_250ms_cubic-bezier(0.32,0.72,0,1)_forwards]";
|
|
141
|
+
const sizeClass = isSideSheet ? sideSheetWidthClasses[size] : sizeClasses[size];
|
|
142
|
+
return createPortal(
|
|
143
|
+
/* @__PURE__ */ jsx(
|
|
144
|
+
"div",
|
|
145
|
+
{
|
|
146
|
+
role: "presentation",
|
|
147
|
+
className: cn(
|
|
148
|
+
"fixed inset-0 z-[1050] flex justify-center",
|
|
149
|
+
// Side sheets don't scroll — they're full-height
|
|
150
|
+
!isSideSheet && "overflow-y-auto p-4",
|
|
151
|
+
showBackdrop && "bg-black/50 backdrop-blur-[3px]",
|
|
152
|
+
"animate-[modal-overlay-in_200ms_ease-out_forwards]",
|
|
153
|
+
overlayPositionClasses[position],
|
|
154
|
+
overlayClassName
|
|
155
|
+
),
|
|
156
|
+
onClick: (e) => {
|
|
157
|
+
if (closeOnOverlayClick && e.target === e.currentTarget) {
|
|
158
|
+
handleClose();
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
children: /* @__PURE__ */ jsx(
|
|
162
|
+
"div",
|
|
163
|
+
{
|
|
164
|
+
ref: modalRef,
|
|
165
|
+
role: "dialog",
|
|
166
|
+
tabIndex: -1,
|
|
167
|
+
"aria-modal": "true",
|
|
168
|
+
"aria-label": ariaLabel,
|
|
169
|
+
"aria-labelledby": ariaLabelledby,
|
|
170
|
+
"aria-describedby": ariaDescribedby,
|
|
171
|
+
className: cn(
|
|
172
|
+
// Base
|
|
173
|
+
"relative flex flex-col",
|
|
174
|
+
// Standard dialogs are centered with max-height
|
|
175
|
+
!isSideSheet && !isBottomSheet && size !== "full" && "w-full mx-auto max-h-[90vh] my-4 rounded-2xl",
|
|
176
|
+
// Bottom sheet
|
|
177
|
+
isBottomSheet && "rounded-2xl",
|
|
178
|
+
// Side sheets: no mx-auto, no max-height
|
|
179
|
+
isSideSheet && "mx-0",
|
|
180
|
+
// Entry animation
|
|
181
|
+
entryAnimation,
|
|
182
|
+
// Variant
|
|
183
|
+
variantClasses[variant],
|
|
184
|
+
// Size (width for side sheets, max-width otherwise)
|
|
185
|
+
sizeClass,
|
|
186
|
+
// Position-specific shape overrides
|
|
187
|
+
contentPositionClasses[position],
|
|
188
|
+
contentClassName
|
|
189
|
+
),
|
|
190
|
+
children
|
|
191
|
+
}
|
|
192
|
+
)
|
|
193
|
+
}
|
|
194
|
+
),
|
|
195
|
+
document.body
|
|
196
|
+
);
|
|
197
|
+
};
|
|
198
|
+
function ModalHeader({
|
|
199
|
+
children,
|
|
200
|
+
className,
|
|
201
|
+
icon,
|
|
202
|
+
description
|
|
203
|
+
}) {
|
|
204
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("relative px-6 py-5 border-b border-border/60 flex-shrink-0", className), children: [
|
|
205
|
+
icon && /* @__PURE__ */ jsx("div", { className: "mb-3 w-10 h-10 rounded-xl bg-primary/10 flex items-center justify-center text-primary", children: icon }),
|
|
206
|
+
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold text-text leading-tight tracking-tight", children }),
|
|
207
|
+
description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-text-muted leading-relaxed", children: description })
|
|
208
|
+
] });
|
|
209
|
+
}
|
|
210
|
+
function ModalBody({
|
|
211
|
+
children,
|
|
212
|
+
className,
|
|
213
|
+
noPadding = false
|
|
214
|
+
}) {
|
|
215
|
+
return /* @__PURE__ */ jsx(
|
|
216
|
+
"div",
|
|
217
|
+
{
|
|
218
|
+
className: cn(
|
|
219
|
+
"flex-1 overflow-y-auto text-text-secondary text-sm leading-relaxed",
|
|
220
|
+
!noPadding && "px-6 py-5",
|
|
221
|
+
className
|
|
222
|
+
),
|
|
223
|
+
children
|
|
224
|
+
}
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
var footerAlignClasses = {
|
|
228
|
+
left: "justify-start",
|
|
229
|
+
center: "justify-center",
|
|
230
|
+
right: "justify-end"
|
|
231
|
+
};
|
|
232
|
+
function ModalFooter({
|
|
233
|
+
children,
|
|
234
|
+
className,
|
|
235
|
+
align = "right"
|
|
236
|
+
}) {
|
|
237
|
+
return /* @__PURE__ */ jsx(
|
|
238
|
+
"div",
|
|
239
|
+
{
|
|
240
|
+
className: cn(
|
|
241
|
+
"flex-shrink-0 px-6 py-4 border-t border-border/60 bg-surface-secondary/30 flex flex-wrap items-center gap-3 rounded-b-2xl",
|
|
242
|
+
footerAlignClasses[align],
|
|
243
|
+
className
|
|
244
|
+
),
|
|
245
|
+
children
|
|
246
|
+
}
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
function ModalCloseButton({ onClick, className }) {
|
|
250
|
+
return /* @__PURE__ */ jsx(
|
|
251
|
+
"button",
|
|
252
|
+
{
|
|
253
|
+
type: "button",
|
|
254
|
+
onClick,
|
|
255
|
+
className: cn(
|
|
256
|
+
"absolute top-4 right-4 z-10",
|
|
257
|
+
"w-8 h-8 flex items-center justify-center rounded-lg",
|
|
258
|
+
"text-text-muted hover:text-text",
|
|
259
|
+
"bg-transparent hover:bg-hover",
|
|
260
|
+
"transition-all duration-150",
|
|
261
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",
|
|
262
|
+
className
|
|
263
|
+
),
|
|
264
|
+
"aria-label": "Close modal",
|
|
265
|
+
children: /* @__PURE__ */ jsx(XMarkIcon, { className: "w-4 h-4", strokeWidth: 2 })
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
Modal.Header = ModalHeader;
|
|
270
|
+
Modal.Body = ModalBody;
|
|
271
|
+
Modal.Footer = ModalFooter;
|
|
272
|
+
Modal.CloseButton = ModalCloseButton;
|
|
273
|
+
|
|
274
|
+
export { Modal, ModalBody, ModalCloseButton, ModalFooter, ModalHeader };
|