frey-ui 1.0.12 → 1.0.13
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 +35 -1
- package/dist/cjs/Accordion/accordion.css +80 -0
- package/dist/cjs/Accordion/accordion.module.css.cjs +1 -0
- package/dist/cjs/Alert/alert.css +63 -0
- package/dist/cjs/Alert/alert.module.css.cjs +1 -0
- package/dist/cjs/Avatar/avatar.css +107 -0
- package/dist/cjs/Avatar/avatar.module.css.cjs +1 -0
- package/dist/cjs/Badge/badge.css +75 -0
- package/dist/cjs/Badge/badge.module.css.cjs +1 -0
- package/dist/cjs/Box/box.css +3 -0
- package/dist/cjs/Box/box.module.css.cjs +1 -0
- package/dist/cjs/Breadcrumbs/breadcrumbs.css +34 -0
- package/dist/cjs/Breadcrumbs/breadcrumbs.module.css.cjs +1 -0
- package/dist/cjs/Button/button.css +112 -0
- package/dist/cjs/Button/button.module.css.cjs +1 -0
- package/dist/cjs/Button/index.cjs +29 -10
- package/dist/cjs/Card/card.css +37 -0
- package/dist/cjs/Card/card.module.css.cjs +1 -0
- package/dist/cjs/Checkbox/checkbox.css +135 -0
- package/dist/cjs/Checkbox/checkbox.module.css.cjs +1 -0
- package/dist/cjs/Chip/chip.css +55 -0
- package/dist/cjs/Chip/chip.module.css.cjs +1 -0
- package/dist/cjs/Dialog/dialog.css +144 -0
- package/dist/cjs/Dialog/dialog.module.css.cjs +1 -0
- package/dist/cjs/Dialog/index.cjs +10 -10
- package/dist/cjs/DropdownMenu/dropdownmenu.css +61 -0
- package/dist/cjs/DropdownMenu/dropdownmenu.module.css.cjs +1 -0
- package/dist/cjs/DropdownMenu/index.cjs +47 -30
- package/dist/cjs/Field/field.css +51 -0
- package/dist/cjs/Field/field.module.css.cjs +1 -0
- package/dist/cjs/Icons/icons.css +5 -0
- package/dist/cjs/Icons/icons.module.css.cjs +1 -0
- package/dist/cjs/Link/link.css +57 -0
- package/dist/cjs/Link/link.module.css.cjs +1 -0
- package/dist/cjs/Popover/index.cjs +9 -7
- package/dist/cjs/Popover/popover.css +25 -0
- package/dist/cjs/Popover/popover.module.css.cjs +1 -0
- package/dist/cjs/Progress/progress.css +86 -0
- package/dist/cjs/Progress/progress.module.css.cjs +1 -0
- package/dist/cjs/RadioGroup/radiogroup.css +59 -0
- package/dist/cjs/RadioGroup/radiogroup.module.css.cjs +1 -0
- package/dist/cjs/Select/index.cjs +2 -3
- package/dist/cjs/Select/select.css +77 -0
- package/dist/cjs/Select/select.module.css.cjs +1 -0
- package/dist/cjs/Skeleton/skeleton.css +29 -0
- package/dist/cjs/Skeleton/skeleton.module.css.cjs +1 -0
- package/dist/cjs/Spinner/spinner.css +35 -0
- package/dist/cjs/Spinner/spinner.module.css.cjs +1 -0
- package/dist/cjs/Stack/index.cjs +2 -1
- package/dist/cjs/Switch/switch.css +123 -0
- package/dist/cjs/Switch/switch.module.css.cjs +1 -0
- package/dist/cjs/Table/table.css +57 -0
- package/dist/cjs/Table/table.module.css.cjs +1 -0
- package/dist/cjs/Tabs/index.cjs +50 -21
- package/dist/cjs/Tabs/tabs.css +62 -0
- package/dist/cjs/Tabs/tabs.module.css.cjs +1 -0
- package/dist/cjs/TextInput/index.cjs +7 -15
- package/dist/cjs/TextInput/textinput.css +93 -0
- package/dist/cjs/TextInput/textinput.module.css.cjs +2 -1
- package/dist/cjs/Textarea/index.cjs +2 -3
- package/dist/cjs/Textarea/textarea.css +62 -0
- package/dist/cjs/Textarea/textarea.module.css.cjs +1 -0
- package/dist/cjs/ThemeProvider/index.cjs +4 -1
- package/dist/cjs/ThemeProvider/themeprovider.css +3 -0
- package/dist/cjs/ThemeProvider/themeprovider.module.css.cjs +1 -0
- package/dist/cjs/Toast/index.cjs +5 -5
- package/dist/cjs/Toast/toast.css +151 -0
- package/dist/cjs/Toast/toast.module.css.cjs +1 -0
- package/dist/cjs/Tooltip/index.cjs +3 -4
- package/dist/cjs/Tooltip/tooltip.css +26 -0
- package/dist/cjs/Tooltip/tooltip.module.css.cjs +1 -0
- package/dist/cjs/hooks/useRovingCollection.cjs +107 -0
- package/dist/cjs/theme.css +243 -0
- package/dist/cjs/utils/Portal.cjs +49 -0
- package/dist/cjs/utils/aria.cjs +14 -0
- package/dist/esm/Accordion/accordion.css +80 -0
- package/dist/esm/Accordion/accordion.module.css.mjs +1 -0
- package/dist/esm/Alert/alert.css +63 -0
- package/dist/esm/Alert/alert.module.css.mjs +1 -0
- package/dist/esm/Avatar/avatar.css +107 -0
- package/dist/esm/Avatar/avatar.module.css.mjs +1 -0
- package/dist/esm/Badge/badge.css +75 -0
- package/dist/esm/Badge/badge.module.css.mjs +1 -0
- package/dist/esm/Box/box.css +3 -0
- package/dist/esm/Box/box.module.css.mjs +1 -0
- package/dist/esm/Breadcrumbs/breadcrumbs.css +34 -0
- package/dist/esm/Breadcrumbs/breadcrumbs.module.css.mjs +1 -0
- package/dist/esm/Button/button.css +112 -0
- package/dist/esm/Button/button.module.css.mjs +1 -0
- package/dist/esm/Button/index.mjs +30 -11
- package/dist/esm/Card/card.css +37 -0
- package/dist/esm/Card/card.module.css.mjs +1 -0
- package/dist/esm/Checkbox/checkbox.css +135 -0
- package/dist/esm/Checkbox/checkbox.module.css.mjs +1 -0
- package/dist/esm/Chip/chip.css +55 -0
- package/dist/esm/Chip/chip.module.css.mjs +1 -0
- package/dist/esm/Dialog/dialog.css +144 -0
- package/dist/esm/Dialog/dialog.module.css.mjs +1 -0
- package/dist/esm/Dialog/index.mjs +10 -10
- package/dist/esm/DropdownMenu/dropdownmenu.css +61 -0
- package/dist/esm/DropdownMenu/dropdownmenu.module.css.mjs +1 -0
- package/dist/esm/DropdownMenu/index.mjs +48 -31
- package/dist/esm/Field/field.css +51 -0
- package/dist/esm/Field/field.module.css.mjs +1 -0
- package/dist/esm/Icons/icons.css +5 -0
- package/dist/esm/Icons/icons.module.css.mjs +1 -0
- package/dist/esm/Link/link.css +57 -0
- package/dist/esm/Link/link.module.css.mjs +1 -0
- package/dist/esm/Popover/index.mjs +10 -8
- package/dist/esm/Popover/popover.css +25 -0
- package/dist/esm/Popover/popover.module.css.mjs +1 -0
- package/dist/esm/Progress/progress.css +86 -0
- package/dist/esm/Progress/progress.module.css.mjs +1 -0
- package/dist/esm/RadioGroup/radiogroup.css +59 -0
- package/dist/esm/RadioGroup/radiogroup.module.css.mjs +1 -0
- package/dist/esm/Select/index.mjs +2 -3
- package/dist/esm/Select/select.css +77 -0
- package/dist/esm/Select/select.module.css.mjs +1 -0
- package/dist/esm/Skeleton/skeleton.css +29 -0
- package/dist/esm/Skeleton/skeleton.module.css.mjs +1 -0
- package/dist/esm/Spinner/spinner.css +35 -0
- package/dist/esm/Spinner/spinner.module.css.mjs +1 -0
- package/dist/esm/Stack/index.mjs +2 -1
- package/dist/esm/Switch/switch.css +123 -0
- package/dist/esm/Switch/switch.module.css.mjs +1 -0
- package/dist/esm/Table/table.css +57 -0
- package/dist/esm/Table/table.module.css.mjs +1 -0
- package/dist/esm/Tabs/index.mjs +50 -21
- package/dist/esm/Tabs/tabs.css +62 -0
- package/dist/esm/Tabs/tabs.module.css.mjs +1 -0
- package/dist/esm/TextInput/index.mjs +9 -17
- package/dist/esm/TextInput/textinput.css +93 -0
- package/dist/esm/TextInput/textinput.module.css.mjs +2 -1
- package/dist/esm/Textarea/index.mjs +2 -3
- package/dist/esm/Textarea/textarea.css +62 -0
- package/dist/esm/Textarea/textarea.module.css.mjs +1 -0
- package/dist/esm/ThemeProvider/index.mjs +5 -3
- package/dist/esm/ThemeProvider/themeprovider.css +3 -0
- package/dist/esm/ThemeProvider/themeprovider.module.css.mjs +1 -0
- package/dist/esm/Toast/index.mjs +5 -5
- package/dist/esm/Toast/toast.css +151 -0
- package/dist/esm/Toast/toast.module.css.mjs +1 -0
- package/dist/esm/Tooltip/index.mjs +3 -4
- package/dist/esm/Tooltip/tooltip.css +26 -0
- package/dist/esm/Tooltip/tooltip.module.css.mjs +1 -0
- package/dist/esm/hooks/useRovingCollection.mjs +105 -0
- package/dist/esm/theme.css +243 -0
- package/dist/esm/utils/Portal.mjs +45 -0
- package/dist/esm/utils/aria.mjs +12 -0
- package/dist/index.d.ts +7 -9
- package/dist/types/src/Button/index.d.ts +4 -7
- package/dist/types/src/DropdownMenu/index.d.ts +2 -2
- package/dist/types/src/ThemeProvider/index.d.ts +5 -0
- package/dist/types/src/hooks/useRovingCollection.d.ts +16 -0
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/utils/Portal.d.ts +8 -0
- package/dist/types/src/utils/aria.d.ts +3 -0
- package/dist/types/src/utils/testUtils.d.ts +7 -0
- package/package.json +8 -5
- package/dist/cjs/Accordion/accordion.module.css.cjs.map +0 -1
- package/dist/cjs/Accordion/index.cjs.map +0 -1
- package/dist/cjs/Alert/alert.module.css.cjs.map +0 -1
- package/dist/cjs/Alert/index.cjs.map +0 -1
- package/dist/cjs/Avatar/avatar.module.css.cjs.map +0 -1
- package/dist/cjs/Avatar/index.cjs.map +0 -1
- package/dist/cjs/Badge/badge.module.css.cjs.map +0 -1
- package/dist/cjs/Badge/index.cjs.map +0 -1
- package/dist/cjs/Box/box.module.css.cjs.map +0 -1
- package/dist/cjs/Box/index.cjs.map +0 -1
- package/dist/cjs/Breadcrumbs/breadcrumbs.module.css.cjs.map +0 -1
- package/dist/cjs/Breadcrumbs/index.cjs.map +0 -1
- package/dist/cjs/Button/button.module.css.cjs.map +0 -1
- package/dist/cjs/Button/index.cjs.map +0 -1
- package/dist/cjs/Card/card.module.css.cjs.map +0 -1
- package/dist/cjs/Card/index.cjs.map +0 -1
- package/dist/cjs/Checkbox/checkbox.module.css.cjs.map +0 -1
- package/dist/cjs/Checkbox/index.cjs.map +0 -1
- package/dist/cjs/Chip/chip.module.css.cjs.map +0 -1
- package/dist/cjs/Chip/index.cjs.map +0 -1
- package/dist/cjs/Dialog/dialog.module.css.cjs.map +0 -1
- package/dist/cjs/Dialog/index.cjs.map +0 -1
- package/dist/cjs/DropdownMenu/dropdownmenu.module.css.cjs.map +0 -1
- package/dist/cjs/DropdownMenu/index.cjs.map +0 -1
- package/dist/cjs/Field/field.module.css.cjs.map +0 -1
- package/dist/cjs/Field/index.cjs.map +0 -1
- package/dist/cjs/Flex/index.cjs.map +0 -1
- package/dist/cjs/Grid/index.cjs.map +0 -1
- package/dist/cjs/Icons/CheckIcon.cjs.map +0 -1
- package/dist/cjs/Icons/ChevronDownIcon.cjs.map +0 -1
- package/dist/cjs/Icons/CircleCheckIcon.cjs.map +0 -1
- package/dist/cjs/Icons/CircleInfoIcon.cjs.map +0 -1
- package/dist/cjs/Icons/CircleXIcon.cjs.map +0 -1
- package/dist/cjs/Icons/CloseIcon.cjs.map +0 -1
- package/dist/cjs/Icons/IconSvg.cjs.map +0 -1
- package/dist/cjs/Icons/MinusIcon.cjs.map +0 -1
- package/dist/cjs/Icons/TriangleAlertIcon.cjs.map +0 -1
- package/dist/cjs/Icons/icons.module.css.cjs.map +0 -1
- package/dist/cjs/Link/index.cjs.map +0 -1
- package/dist/cjs/Link/link.module.css.cjs.map +0 -1
- package/dist/cjs/Popover/index.cjs.map +0 -1
- package/dist/cjs/Popover/popover.module.css.cjs.map +0 -1
- package/dist/cjs/Progress/index.cjs.map +0 -1
- package/dist/cjs/Progress/progress.module.css.cjs.map +0 -1
- package/dist/cjs/RadioGroup/index.cjs.map +0 -1
- package/dist/cjs/RadioGroup/radiogroup.module.css.cjs.map +0 -1
- package/dist/cjs/Select/index.cjs.map +0 -1
- package/dist/cjs/Select/select.module.css.cjs.map +0 -1
- package/dist/cjs/Skeleton/index.cjs.map +0 -1
- package/dist/cjs/Skeleton/skeleton.module.css.cjs.map +0 -1
- package/dist/cjs/Spinner/index.cjs.map +0 -1
- package/dist/cjs/Spinner/spinner.module.css.cjs.map +0 -1
- package/dist/cjs/Stack/index.cjs.map +0 -1
- package/dist/cjs/Switch/index.cjs.map +0 -1
- package/dist/cjs/Switch/switch.module.css.cjs.map +0 -1
- package/dist/cjs/Table/index.cjs.map +0 -1
- package/dist/cjs/Table/table.module.css.cjs.map +0 -1
- package/dist/cjs/Tabs/index.cjs.map +0 -1
- package/dist/cjs/Tabs/tabs.module.css.cjs.map +0 -1
- package/dist/cjs/TextInput/index.cjs.map +0 -1
- package/dist/cjs/TextInput/textinput.module.css.cjs.map +0 -1
- package/dist/cjs/Textarea/index.cjs.map +0 -1
- package/dist/cjs/Textarea/textarea.module.css.cjs.map +0 -1
- package/dist/cjs/ThemeProvider/index.cjs.map +0 -1
- package/dist/cjs/ThemeProvider/themeprovider.module.css.cjs.map +0 -1
- package/dist/cjs/Toast/index.cjs.map +0 -1
- package/dist/cjs/Toast/toast.module.css.cjs.map +0 -1
- package/dist/cjs/Tooltip/index.cjs.map +0 -1
- package/dist/cjs/Tooltip/tooltip.module.css.cjs.map +0 -1
- package/dist/cjs/hooks/floatingConfig.cjs.map +0 -1
- package/dist/cjs/hooks/useControllableState.cjs.map +0 -1
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs/utils/mergeRefs.cjs.map +0 -1
- package/dist/cjs/utils/slot.cjs.map +0 -1
- package/dist/esm/Accordion/accordion.module.css.mjs.map +0 -1
- package/dist/esm/Accordion/index.mjs.map +0 -1
- package/dist/esm/Alert/alert.module.css.mjs.map +0 -1
- package/dist/esm/Alert/index.mjs.map +0 -1
- package/dist/esm/Avatar/avatar.module.css.mjs.map +0 -1
- package/dist/esm/Avatar/index.mjs.map +0 -1
- package/dist/esm/Badge/badge.module.css.mjs.map +0 -1
- package/dist/esm/Badge/index.mjs.map +0 -1
- package/dist/esm/Box/box.module.css.mjs.map +0 -1
- package/dist/esm/Box/index.mjs.map +0 -1
- package/dist/esm/Breadcrumbs/breadcrumbs.module.css.mjs.map +0 -1
- package/dist/esm/Breadcrumbs/index.mjs.map +0 -1
- package/dist/esm/Button/button.module.css.mjs.map +0 -1
- package/dist/esm/Button/index.mjs.map +0 -1
- package/dist/esm/Card/card.module.css.mjs.map +0 -1
- package/dist/esm/Card/index.mjs.map +0 -1
- package/dist/esm/Checkbox/checkbox.module.css.mjs.map +0 -1
- package/dist/esm/Checkbox/index.mjs.map +0 -1
- package/dist/esm/Chip/chip.module.css.mjs.map +0 -1
- package/dist/esm/Chip/index.mjs.map +0 -1
- package/dist/esm/Dialog/dialog.module.css.mjs.map +0 -1
- package/dist/esm/Dialog/index.mjs.map +0 -1
- package/dist/esm/DropdownMenu/dropdownmenu.module.css.mjs.map +0 -1
- package/dist/esm/DropdownMenu/index.mjs.map +0 -1
- package/dist/esm/Field/field.module.css.mjs.map +0 -1
- package/dist/esm/Field/index.mjs.map +0 -1
- package/dist/esm/Flex/index.mjs.map +0 -1
- package/dist/esm/Grid/index.mjs.map +0 -1
- package/dist/esm/Icons/CheckIcon.mjs.map +0 -1
- package/dist/esm/Icons/ChevronDownIcon.mjs.map +0 -1
- package/dist/esm/Icons/CircleCheckIcon.mjs.map +0 -1
- package/dist/esm/Icons/CircleInfoIcon.mjs.map +0 -1
- package/dist/esm/Icons/CircleXIcon.mjs.map +0 -1
- package/dist/esm/Icons/CloseIcon.mjs.map +0 -1
- package/dist/esm/Icons/IconSvg.mjs.map +0 -1
- package/dist/esm/Icons/MinusIcon.mjs.map +0 -1
- package/dist/esm/Icons/TriangleAlertIcon.mjs.map +0 -1
- package/dist/esm/Icons/icons.module.css.mjs.map +0 -1
- package/dist/esm/Link/index.mjs.map +0 -1
- package/dist/esm/Link/link.module.css.mjs.map +0 -1
- package/dist/esm/Popover/index.mjs.map +0 -1
- package/dist/esm/Popover/popover.module.css.mjs.map +0 -1
- package/dist/esm/Progress/index.mjs.map +0 -1
- package/dist/esm/Progress/progress.module.css.mjs.map +0 -1
- package/dist/esm/RadioGroup/index.mjs.map +0 -1
- package/dist/esm/RadioGroup/radiogroup.module.css.mjs.map +0 -1
- package/dist/esm/Select/index.mjs.map +0 -1
- package/dist/esm/Select/select.module.css.mjs.map +0 -1
- package/dist/esm/Skeleton/index.mjs.map +0 -1
- package/dist/esm/Skeleton/skeleton.module.css.mjs.map +0 -1
- package/dist/esm/Spinner/index.mjs.map +0 -1
- package/dist/esm/Spinner/spinner.module.css.mjs.map +0 -1
- package/dist/esm/Stack/index.mjs.map +0 -1
- package/dist/esm/Switch/index.mjs.map +0 -1
- package/dist/esm/Switch/switch.module.css.mjs.map +0 -1
- package/dist/esm/Table/index.mjs.map +0 -1
- package/dist/esm/Table/table.module.css.mjs.map +0 -1
- package/dist/esm/Tabs/index.mjs.map +0 -1
- package/dist/esm/Tabs/tabs.module.css.mjs.map +0 -1
- package/dist/esm/TextInput/index.mjs.map +0 -1
- package/dist/esm/TextInput/textinput.module.css.mjs.map +0 -1
- package/dist/esm/Textarea/index.mjs.map +0 -1
- package/dist/esm/Textarea/textarea.module.css.mjs.map +0 -1
- package/dist/esm/ThemeProvider/index.mjs.map +0 -1
- package/dist/esm/ThemeProvider/themeprovider.module.css.mjs.map +0 -1
- package/dist/esm/Toast/index.mjs.map +0 -1
- package/dist/esm/Toast/toast.module.css.mjs.map +0 -1
- package/dist/esm/Tooltip/index.mjs.map +0 -1
- package/dist/esm/Tooltip/tooltip.module.css.mjs.map +0 -1
- package/dist/esm/hooks/floatingConfig.mjs.map +0 -1
- package/dist/esm/hooks/useControllableState.mjs.map +0 -1
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/utils/mergeRefs.mjs.map +0 -1
- package/dist/esm/utils/slot.mjs.map +0 -1
- package/dist/styles.css +0 -3
- package/dist/styles.css.map +0 -1
- package/dist/types/src/Accordion/index.d.ts.map +0 -1
- package/dist/types/src/Alert/index.d.ts.map +0 -1
- package/dist/types/src/Avatar/index.d.ts.map +0 -1
- package/dist/types/src/Badge/index.d.ts.map +0 -1
- package/dist/types/src/Box/index.d.ts.map +0 -1
- package/dist/types/src/Breadcrumbs/index.d.ts.map +0 -1
- package/dist/types/src/Button/index.d.ts.map +0 -1
- package/dist/types/src/Card/index.d.ts.map +0 -1
- package/dist/types/src/Checkbox/index.d.ts.map +0 -1
- package/dist/types/src/Chip/index.d.ts.map +0 -1
- package/dist/types/src/Dialog/index.d.ts.map +0 -1
- package/dist/types/src/DropdownMenu/index.d.ts.map +0 -1
- package/dist/types/src/Field/index.d.ts.map +0 -1
- package/dist/types/src/Flex/index.d.ts.map +0 -1
- package/dist/types/src/Grid/index.d.ts.map +0 -1
- package/dist/types/src/Icons/CheckIcon.d.ts.map +0 -1
- package/dist/types/src/Icons/ChevronDownIcon.d.ts.map +0 -1
- package/dist/types/src/Icons/CircleCheckIcon.d.ts.map +0 -1
- package/dist/types/src/Icons/CircleInfoIcon.d.ts.map +0 -1
- package/dist/types/src/Icons/CircleXIcon.d.ts.map +0 -1
- package/dist/types/src/Icons/CloseIcon.d.ts.map +0 -1
- package/dist/types/src/Icons/IconSvg.d.ts.map +0 -1
- package/dist/types/src/Icons/MinusIcon.d.ts.map +0 -1
- package/dist/types/src/Icons/TriangleAlertIcon.d.ts.map +0 -1
- package/dist/types/src/Icons/index.d.ts.map +0 -1
- package/dist/types/src/Link/index.d.ts.map +0 -1
- package/dist/types/src/Popover/index.d.ts.map +0 -1
- package/dist/types/src/Progress/index.d.ts.map +0 -1
- package/dist/types/src/RadioGroup/index.d.ts.map +0 -1
- package/dist/types/src/Select/index.d.ts.map +0 -1
- package/dist/types/src/Skeleton/index.d.ts.map +0 -1
- package/dist/types/src/Spinner/index.d.ts.map +0 -1
- package/dist/types/src/Stack/index.d.ts.map +0 -1
- package/dist/types/src/Switch/index.d.ts.map +0 -1
- package/dist/types/src/Table/index.d.ts.map +0 -1
- package/dist/types/src/Tabs/index.d.ts.map +0 -1
- package/dist/types/src/TextInput/index.d.ts.map +0 -1
- package/dist/types/src/Textarea/index.d.ts.map +0 -1
- package/dist/types/src/ThemeProvider/index.d.ts.map +0 -1
- package/dist/types/src/Toast/index.d.ts.map +0 -1
- package/dist/types/src/Tooltip/index.d.ts.map +0 -1
- package/dist/types/src/hooks/floatingConfig.d.ts.map +0 -1
- package/dist/types/src/hooks/useControllableState.d.ts.map +0 -1
- package/dist/types/src/index.d.ts.map +0 -1
- package/dist/types/src/types/polymorphic.d.ts.map +0 -1
- package/dist/types/src/utils/clamp.d.ts +0 -2
- package/dist/types/src/utils/clamp.d.ts.map +0 -1
- package/dist/types/src/utils/mergeRefs.d.ts.map +0 -1
- package/dist/types/src/utils/slot.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -21,6 +21,18 @@ Frey UI is built with **WCAG 2.1 AA** compliance as a goal:
|
|
|
21
21
|
|
|
22
22
|
Automated checks run through [`jest-axe`](https://github.com/nickcolley/jest-axe) in unit tests and [`@storybook/addon-a11y`](https://storybook.js.org/addons/@storybook/addon-a11y) in Storybook.
|
|
23
23
|
|
|
24
|
+
### Test Environment Notes
|
|
25
|
+
|
|
26
|
+
Unit tests run in JSDOM, which does not provide a full layout engine. Positioning assertions for portal overlays may require mocked geometry APIs (`getBoundingClientRect`, viewport size), and focus-trap behavior is validated at a best-effort level in unit tests.
|
|
27
|
+
|
|
28
|
+
Browser E2E coverage is available via Playwright in `apps/playwright` for real-world overlay focus and positioning checks, and can be expanded as overlay scenarios grow.
|
|
29
|
+
|
|
30
|
+
### Overlay Focus Management
|
|
31
|
+
|
|
32
|
+
- `Dialog` uses the native `<dialog>` element and modal behavior.
|
|
33
|
+
- `Popover` and `DropdownMenu` use `FloatingFocusManager` in modal mode.
|
|
34
|
+
- When a `Popover` or `DropdownMenu` is open, keyboard focus is trapped inside the overlay and focus returns to the trigger when it closes.
|
|
35
|
+
|
|
24
36
|
## Installation
|
|
25
37
|
|
|
26
38
|
```bash
|
|
@@ -34,7 +46,7 @@ npm install frey-ui
|
|
|
34
46
|
Import the stylesheet once in your app root (for example `App.tsx` or `layout.tsx`):
|
|
35
47
|
|
|
36
48
|
```tsx
|
|
37
|
-
import 'frey-ui/
|
|
49
|
+
import 'frey-ui/theme.css';
|
|
38
50
|
```
|
|
39
51
|
|
|
40
52
|
## Public Subpath Imports
|
|
@@ -74,6 +86,28 @@ pnpm install
|
|
|
74
86
|
pnpm storybook
|
|
75
87
|
```
|
|
76
88
|
|
|
89
|
+
## Brand Token Generator
|
|
90
|
+
|
|
91
|
+
Frey UI includes a contributor CLI utility to generate CSS variable overrides from a small set of brand colors.
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
pnpm theme:tokens -- --primary "#0f62fe"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
You can optionally override additional semantic colors:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
pnpm theme:tokens -- --primary "#0f62fe" --success "#198038" --warning "#f1c21b" --error "#da1e28" --info "#0043ce" > brand-theme.css
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Then load the generated CSS after `frey-ui/theme.css` in your application so your brand tokens override defaults.
|
|
104
|
+
|
|
105
|
+
## Roadmap Notes
|
|
106
|
+
|
|
107
|
+
- `Combobox / Autocomplete`: planned to support searchable long-option datasets with robust keyboard semantics.
|
|
108
|
+
- `Drawer / Slide-over`: planned for mobile-first and dense settings workflows.
|
|
109
|
+
- Accordion content animation: current grid-based animation uses `overflow: hidden` on the inner content wrapper, which can clip inner tooltips and extended focus rings. Prefer external tooltip portals and avoid relying on overflow-visible descendants inside accordion content.
|
|
110
|
+
|
|
77
111
|
## License
|
|
78
112
|
|
|
79
113
|
[MIT](./LICENSE)
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
.accordion_8f91be6e {
|
|
2
|
+
width: 100%;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.accordion_item_2d6abc63 {
|
|
6
|
+
border-bottom: 1px solid var(--frey-color-border-subtle);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.accordion_item_2d6abc63:last-child {
|
|
10
|
+
border-bottom: none;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.accordion_header_c9933178 {
|
|
14
|
+
display: flex;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.accordion_trigger_1c357514 {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex: 1;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: space-between;
|
|
22
|
+
padding: 1rem 0;
|
|
23
|
+
font-weight: 500;
|
|
24
|
+
font-size: 0.875rem;
|
|
25
|
+
background: none;
|
|
26
|
+
border: none;
|
|
27
|
+
cursor: pointer;
|
|
28
|
+
color: var(--frey-color-text);
|
|
29
|
+
transition: all 0.2s ease-in-out;
|
|
30
|
+
text-align: left;
|
|
31
|
+
outline: none;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.accordion_trigger_1c357514:hover {
|
|
35
|
+
text-decoration: underline;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.accordion_trigger_1c357514:focus-visible {
|
|
39
|
+
border-radius: var(--frey-radius-sm);
|
|
40
|
+
box-shadow:
|
|
41
|
+
0 0 0 2px var(--frey-color-surface),
|
|
42
|
+
0 0 0 4px var(--frey-color-focus-ring);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.accordion_chevron_c55f991e {
|
|
46
|
+
transition: transform 0.2s ease-in-out;
|
|
47
|
+
color: var(--frey-color-text-muted);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.accordion_chevron_open_44560e91 {
|
|
51
|
+
transform: rotate(180deg);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/*
|
|
55
|
+
CSS Grid trick for animating height
|
|
56
|
+
Transitions from 0fr to 1fr
|
|
57
|
+
*/
|
|
58
|
+
.accordion_content_wrapper_357a0679 {
|
|
59
|
+
display: grid;
|
|
60
|
+
grid-template-rows: 0fr;
|
|
61
|
+
transition: grid-template-rows 0.2s ease-out;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.accordion_content_wrapper_open_02841768 {
|
|
65
|
+
grid-template-rows: 1fr;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.accordion_content_945ef079 {
|
|
69
|
+
overflow: hidden; /* Important for grid animation to hide contents when 0fr */
|
|
70
|
+
padding-bottom: 1rem;
|
|
71
|
+
color: var(--frey-color-text-muted);
|
|
72
|
+
font-size: 0.875rem;
|
|
73
|
+
line-height: 1.5;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* Remove padding if closed to avoid seeing whitespace inside 0fr */
|
|
77
|
+
.accordion_content_wrapper_357a0679:not(.accordion_content_wrapper_open_02841768)
|
|
78
|
+
.accordion_content_945ef079 {
|
|
79
|
+
padding-bottom: 0;
|
|
80
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
.alert_7c07a8c0 {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: flex-start;
|
|
4
|
+
gap: 0.75rem;
|
|
5
|
+
padding: 0.75rem 1rem;
|
|
6
|
+
border-radius: 0.375rem;
|
|
7
|
+
border: 1px solid;
|
|
8
|
+
font-size: 0.875rem;
|
|
9
|
+
line-height: 1.5;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/* Variants */
|
|
13
|
+
.alert-error_1de19fed {
|
|
14
|
+
color: var(--frey-color-error);
|
|
15
|
+
background-color: var(--frey-color-error-bg);
|
|
16
|
+
border-color: var(--frey-color-error-border);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.alert-success_38713508 {
|
|
20
|
+
color: var(--frey-color-success);
|
|
21
|
+
background-color: var(--frey-color-success-bg);
|
|
22
|
+
border-color: var(--frey-color-success-border);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.alert-warning_931806ff {
|
|
26
|
+
color: var(--frey-color-warning);
|
|
27
|
+
background-color: var(--frey-color-warning-bg);
|
|
28
|
+
border-color: var(--frey-color-warning-border);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.alert-info_183c5a6f {
|
|
32
|
+
color: var(--frey-color-info);
|
|
33
|
+
background-color: var(--frey-color-info-bg);
|
|
34
|
+
border-color: var(--frey-color-info-border);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.alert-icon_b4aefb94 {
|
|
38
|
+
flex-shrink: 0;
|
|
39
|
+
width: 1.25rem;
|
|
40
|
+
height: 1.3125rem;
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
justify-content: center;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.alert_icon_svg_1e243ee4 {
|
|
47
|
+
width: 1.25rem;
|
|
48
|
+
height: 1.25rem;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.alert-content_17fc1725 {
|
|
52
|
+
flex: 1;
|
|
53
|
+
min-width: 0;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.alert-title_1260729c {
|
|
57
|
+
font-weight: 600;
|
|
58
|
+
margin: 0 0 0.25rem;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.alert-message_af65e832 {
|
|
62
|
+
margin: 0;
|
|
63
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
.avatar_69ecdff2 {
|
|
2
|
+
position: relative;
|
|
3
|
+
display: inline-flex;
|
|
4
|
+
align-items: center;
|
|
5
|
+
justify-content: center;
|
|
6
|
+
vertical-align: middle;
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
user-select: none;
|
|
9
|
+
border-radius: 9999px;
|
|
10
|
+
border: 1px solid var(--frey-color-border-subtle);
|
|
11
|
+
background-color: var(--frey-color-surface-hover);
|
|
12
|
+
color: var(--frey-color-text);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.avatar_sm_a7074618 {
|
|
16
|
+
width: 2rem;
|
|
17
|
+
height: 2rem;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.avatar_md_b160648e {
|
|
21
|
+
width: 2.5rem;
|
|
22
|
+
height: 2.5rem;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.avatar_lg_470c9abd {
|
|
26
|
+
width: 3.5rem;
|
|
27
|
+
height: 3.5rem;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.avatar_image_7164259b {
|
|
31
|
+
width: 100%;
|
|
32
|
+
height: 100%;
|
|
33
|
+
object-fit: cover;
|
|
34
|
+
border-radius: inherit;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.avatar_fallback_f8d02776 {
|
|
38
|
+
width: 100%;
|
|
39
|
+
height: 100%;
|
|
40
|
+
display: flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
justify-content: center;
|
|
43
|
+
background-color: var(--frey-color-surface-active);
|
|
44
|
+
font-weight: 500;
|
|
45
|
+
text-transform: uppercase;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.avatar_sm_a7074618 .avatar_fallback_f8d02776 {
|
|
49
|
+
font-size: 0.875rem;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.avatar_md_b160648e .avatar_fallback_f8d02776 {
|
|
53
|
+
font-size: 1rem;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.avatar_lg_470c9abd .avatar_fallback_f8d02776 {
|
|
57
|
+
font-size: 1.25rem;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* Status Indicator */
|
|
61
|
+
.avatar_status_indicator_3b42fd0a {
|
|
62
|
+
position: absolute;
|
|
63
|
+
bottom: 0;
|
|
64
|
+
right: 0;
|
|
65
|
+
border-radius: 50%;
|
|
66
|
+
border: 2px solid var(--frey-color-surface);
|
|
67
|
+
background-color: var(--frey-color-border-subtle); /* default offline color */
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* Size adjustments for status indicator */
|
|
71
|
+
.avatar_sm_a7074618 .avatar_status_indicator_3b42fd0a {
|
|
72
|
+
width: 0.5rem;
|
|
73
|
+
height: 0.5rem;
|
|
74
|
+
right: 0.1rem;
|
|
75
|
+
bottom: 0.1rem;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.avatar_md_b160648e .avatar_status_indicator_3b42fd0a {
|
|
79
|
+
width: 0.625rem;
|
|
80
|
+
height: 0.625rem;
|
|
81
|
+
right: 0.125rem;
|
|
82
|
+
bottom: 0.125rem;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.avatar_lg_470c9abd .avatar_status_indicator_3b42fd0a {
|
|
86
|
+
width: 0.875rem;
|
|
87
|
+
height: 0.875rem;
|
|
88
|
+
right: 0.15rem;
|
|
89
|
+
bottom: 0.15rem;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* Status variants */
|
|
93
|
+
.avatar_status_online_5ccf7e50 {
|
|
94
|
+
background-color: var(--frey-color-success);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.avatar_status_idle_f558cd51 {
|
|
98
|
+
background-color: var(--frey-color-warning);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.avatar_status_dnd_38c6115c {
|
|
102
|
+
background-color: var(--frey-color-error);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.avatar_status_offline_c805801a {
|
|
106
|
+
background-color: var(--frey-color-border-subtle);
|
|
107
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
.badge_bce67ff7 {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
justify-content: center;
|
|
5
|
+
border-radius: var(--frey-radius-full);
|
|
6
|
+
border: 1px solid transparent;
|
|
7
|
+
font-weight: 600;
|
|
8
|
+
line-height: 1;
|
|
9
|
+
white-space: nowrap;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.badge-sm_dc3de36d {
|
|
13
|
+
padding: 0.125rem 0.5rem;
|
|
14
|
+
font-size: 0.75rem;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.badge-md_d88ccac8 {
|
|
18
|
+
padding: 0.25rem 0.625rem;
|
|
19
|
+
font-size: 0.8125rem;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.badge-subtle-neutral_dc27f7b9 {
|
|
23
|
+
background-color: var(--frey-color-surface-subtle);
|
|
24
|
+
color: var(--frey-color-text-primary);
|
|
25
|
+
border-color: var(--frey-color-border-subtle);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.badge-subtle-info_9088d0b2 {
|
|
29
|
+
background-color: var(--frey-color-info-bg);
|
|
30
|
+
color: var(--frey-color-info);
|
|
31
|
+
border-color: var(--frey-color-info-border);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.badge-subtle-success_a8938864 {
|
|
35
|
+
background-color: var(--frey-color-success-bg);
|
|
36
|
+
color: var(--frey-color-success);
|
|
37
|
+
border-color: var(--frey-color-success-border);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.badge-subtle-warning_9b7640b7 {
|
|
41
|
+
background-color: var(--frey-color-warning-bg);
|
|
42
|
+
color: var(--frey-color-warning);
|
|
43
|
+
border-color: var(--frey-color-warning-border);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.badge-subtle-error_e6426ff9 {
|
|
47
|
+
background-color: var(--frey-color-error-bg);
|
|
48
|
+
color: var(--frey-color-error);
|
|
49
|
+
border-color: var(--frey-color-error-border);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.badge-solid-neutral_ac7e9431 {
|
|
53
|
+
background-color: var(--frey-color-text-primary);
|
|
54
|
+
color: var(--frey-color-surface);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.badge-solid-info_ecba7d59 {
|
|
58
|
+
background-color: var(--frey-color-info);
|
|
59
|
+
color: var(--frey-palette-white);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.badge-solid-success_28241077 {
|
|
63
|
+
background-color: var(--frey-color-success);
|
|
64
|
+
color: var(--frey-palette-white);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.badge-solid-warning_d28d237d {
|
|
68
|
+
background-color: var(--frey-color-warning);
|
|
69
|
+
color: var(--frey-palette-black);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.badge-solid-error_e87eabc7 {
|
|
73
|
+
background-color: var(--frey-color-error);
|
|
74
|
+
color: var(--frey-palette-white);
|
|
75
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
.breadcrumbs_aa9de1de {
|
|
2
|
+
--frey-breadcrumb-separator: '/';
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.breadcrumbs_list_6dce73e5 {
|
|
6
|
+
display: flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
flex-wrap: wrap;
|
|
9
|
+
list-style: none;
|
|
10
|
+
margin: 0;
|
|
11
|
+
padding: 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.breadcrumbs_item_b875e8cd {
|
|
15
|
+
display: inline-flex;
|
|
16
|
+
align-items: center;
|
|
17
|
+
min-width: 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.breadcrumbs_item_b875e8cd + .breadcrumbs_item_b875e8cd::before {
|
|
21
|
+
content: var(--frey-breadcrumb-separator, '/');
|
|
22
|
+
margin-inline: var(--frey-space-2);
|
|
23
|
+
color: var(--frey-color-text-muted);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.breadcrumbs_link_c337ab74 {
|
|
27
|
+
white-space: nowrap;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.breadcrumbs_current_6e6bd611 {
|
|
31
|
+
color: var(--frey-color-text);
|
|
32
|
+
font-weight: 500;
|
|
33
|
+
white-space: nowrap;
|
|
34
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
.button_e3685226 {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
justify-content: center;
|
|
5
|
+
gap: 0.5rem;
|
|
6
|
+
padding: 0.5rem 1rem;
|
|
7
|
+
font-size: 0.875rem;
|
|
8
|
+
font-weight: 500;
|
|
9
|
+
line-height: 1.5;
|
|
10
|
+
border-radius: 0.375rem;
|
|
11
|
+
border: none;
|
|
12
|
+
cursor: pointer;
|
|
13
|
+
text-decoration: none;
|
|
14
|
+
transition:
|
|
15
|
+
background-color 0.2s,
|
|
16
|
+
color 0.2s,
|
|
17
|
+
border-color 0.2s,
|
|
18
|
+
opacity 0.2s;
|
|
19
|
+
user-select: none;
|
|
20
|
+
white-space: nowrap;
|
|
21
|
+
box-sizing: border-box;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.button_e3685226:focus-visible {
|
|
25
|
+
outline: 2px solid var(--frey-focus-ring);
|
|
26
|
+
outline-offset: 2px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* Sizes */
|
|
30
|
+
.button-sm_b760748b {
|
|
31
|
+
padding: 0.25rem 0.75rem;
|
|
32
|
+
font-size: 0.8125rem;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.button-md_c5122fd1 {
|
|
36
|
+
padding: 0.5rem 1rem;
|
|
37
|
+
font-size: 0.875rem;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.button-lg_96785747 {
|
|
41
|
+
padding: 0.625rem 1.25rem;
|
|
42
|
+
font-size: 1rem;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* Primary */
|
|
46
|
+
.button-primary_78ca6a16 {
|
|
47
|
+
background-color: var(--frey-button-primary-bg);
|
|
48
|
+
color: var(--frey-button-primary-text);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.button-primary_78ca6a16:hover:not(:disabled) {
|
|
52
|
+
background-color: var(--frey-button-primary-hover);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* Secondary */
|
|
56
|
+
.button-secondary_a67ce4ae {
|
|
57
|
+
background-color: transparent;
|
|
58
|
+
color: var(--frey-button-secondary-text);
|
|
59
|
+
border: 1px solid var(--frey-button-secondary-border);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.button-secondary_a67ce4ae:hover:not(:disabled) {
|
|
63
|
+
background-color: var(--frey-button-secondary-hover-bg);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* Ghost */
|
|
67
|
+
.button-ghost_406aeb5f {
|
|
68
|
+
background-color: transparent;
|
|
69
|
+
color: var(--frey-button-ghost-text);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.button-ghost_406aeb5f:hover:not(:disabled) {
|
|
73
|
+
background-color: var(--frey-button-ghost-hover-bg);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* Destructive */
|
|
77
|
+
.button-destructive_f9faa5ef {
|
|
78
|
+
background-color: var(--frey-button-destructive-bg);
|
|
79
|
+
color: var(--frey-button-destructive-text);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.button-destructive_f9faa5ef:hover:not(:disabled) {
|
|
83
|
+
background-color: var(--frey-button-destructive-hover);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* Disabled */
|
|
87
|
+
.button_e3685226:disabled {
|
|
88
|
+
opacity: 0.5;
|
|
89
|
+
cursor: not-allowed;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* Loading */
|
|
93
|
+
.button-loading_0d5b6d36 {
|
|
94
|
+
pointer-events: none;
|
|
95
|
+
opacity: 0.7;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.spinner_9bcc821b {
|
|
99
|
+
display: inline-block;
|
|
100
|
+
width: 1em;
|
|
101
|
+
height: 1em;
|
|
102
|
+
border: 2px solid currentColor;
|
|
103
|
+
border-right-color: transparent;
|
|
104
|
+
border-radius: 50%;
|
|
105
|
+
animation: spin_c3a3352d 0.6s linear infinite;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
@keyframes spin_c3a3352d {
|
|
109
|
+
to {
|
|
110
|
+
transform: rotate(360deg);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
7
|
var clsx = require('clsx');
|
|
8
8
|
var React = require('react');
|
|
9
|
+
var slot = require('../utils/slot.cjs');
|
|
9
10
|
var button_module = require('./button.module.css.cjs');
|
|
10
11
|
|
|
11
12
|
const VariantClassMap = {
|
|
@@ -19,16 +20,34 @@ const SizeClassMap = {
|
|
|
19
20
|
md: button_module.default['button-md'],
|
|
20
21
|
lg: button_module.default['button-lg']
|
|
21
22
|
};
|
|
22
|
-
const Button = React.forwardRef(function Button({
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
const Button = React.forwardRef(function Button({ asChild = false, variant = 'primary', size = 'md', loading = false, disabled = false, className, style, children, type, onClick, ...restProps }, ref) {
|
|
24
|
+
const isDisabled = disabled || loading;
|
|
25
|
+
const combinedClassName = clsx(button_module.default.button, VariantClassMap[variant], SizeClassMap[size], { [button_module.default['button-loading']]: loading }, className);
|
|
26
|
+
const commonProps = {
|
|
27
|
+
className: combinedClassName,
|
|
28
|
+
style,
|
|
29
|
+
'aria-busy': loading || undefined
|
|
30
|
+
};
|
|
31
|
+
const handleClick = (event) => {
|
|
32
|
+
if (isDisabled) {
|
|
33
|
+
event.preventDefault();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
onClick?.(event);
|
|
37
|
+
};
|
|
38
|
+
if (asChild) {
|
|
39
|
+
if (!React.isValidElement(children)) {
|
|
40
|
+
throw new Error('Button with asChild expects a single valid React element child.');
|
|
41
|
+
}
|
|
42
|
+
const childElement = children;
|
|
43
|
+
const slotChild = loading
|
|
44
|
+
? React.cloneElement(childElement, {
|
|
45
|
+
children: (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { className: button_module.default.spinner, "aria-hidden": 'true' }), childElement.props.children] }))
|
|
46
|
+
})
|
|
47
|
+
: childElement;
|
|
48
|
+
return (jsxRuntime.jsx(slot.Slot, { ...restProps, ref: ref, ...commonProps, "aria-disabled": isDisabled || undefined, "data-disabled": isDisabled ? true : undefined, onClick: handleClick, children: slotChild }));
|
|
49
|
+
}
|
|
50
|
+
return (jsxRuntime.jsxs("button", { ...restProps, ref: ref, ...commonProps, disabled: isDisabled, type: type ?? 'button', onClick: handleClick, children: [loading && jsxRuntime.jsx("span", { className: button_module.default.spinner, "aria-hidden": 'true' }), children] }));
|
|
32
51
|
});
|
|
33
52
|
Button.displayName = 'Button';
|
|
34
53
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
.card_7757267c {
|
|
2
|
+
background-color: var(--frey-color-surface);
|
|
3
|
+
border: 1px solid var(--frey-color-border-subtle);
|
|
4
|
+
border-radius: var(--frey-radius-lg);
|
|
5
|
+
box-shadow: var(--frey-shadow-sm);
|
|
6
|
+
color: var(--frey-color-text);
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
display: flex;
|
|
9
|
+
flex-direction: column;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.card_header_e87ce16b {
|
|
13
|
+
padding: 1.5rem 1.5rem 0;
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
gap: 0.25rem;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.card_title_fbeee077 {
|
|
20
|
+
margin: 0;
|
|
21
|
+
font-size: 1.125rem;
|
|
22
|
+
font-weight: 600;
|
|
23
|
+
line-height: 1.5;
|
|
24
|
+
color: var(--frey-color-text-title);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.card_content_7f98971d {
|
|
28
|
+
padding: 1.5rem;
|
|
29
|
+
flex: 1;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.card_footer_198e5d93 {
|
|
33
|
+
padding: 0 1.5rem 1.5rem;
|
|
34
|
+
display: flex;
|
|
35
|
+
align-items: center;
|
|
36
|
+
gap: 0.5rem;
|
|
37
|
+
}
|