@brycks/core-front 0.2.7 → 0.2.9
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/components/data/InfoItem/InfoItem.cjs +2 -0
- package/dist/components/data/InfoItem/InfoItem.cjs.map +1 -0
- package/dist/components/data/InfoItem/InfoItem.js +140 -0
- package/dist/components/data/InfoItem/InfoItem.js.map +1 -0
- package/dist/components/data/List/List.cjs +2 -0
- package/dist/components/data/List/List.cjs.map +1 -0
- package/dist/components/data/List/List.js +178 -0
- package/dist/components/data/List/List.js.map +1 -0
- package/dist/components/data/Table/Table.cjs +2 -0
- package/dist/components/data/Table/Table.cjs.map +1 -0
- package/dist/components/data/Table/Table.js +247 -0
- package/dist/components/data/Table/Table.js.map +1 -0
- package/dist/components/data.cjs +2 -0
- package/dist/components/data.cjs.map +1 -0
- package/dist/components/data.d.ts +2 -0
- package/dist/components/data.js +20 -0
- package/dist/components/data.js.map +1 -0
- package/dist/components/feedback/Alert/Alert.cjs +2 -0
- package/dist/components/feedback/Alert/Alert.cjs.map +1 -0
- package/dist/components/feedback/Alert/Alert.js +204 -0
- package/dist/components/feedback/Alert/Alert.js.map +1 -0
- package/dist/components/feedback/Drawer/Drawer.cjs +23 -0
- package/dist/components/feedback/Drawer/Drawer.cjs.map +1 -0
- package/dist/components/feedback/Drawer/Drawer.js +199 -0
- package/dist/components/feedback/Drawer/Drawer.js.map +1 -0
- package/dist/components/feedback/Modal/Modal.cjs +2 -0
- package/dist/components/feedback/Modal/Modal.cjs.map +1 -0
- package/dist/components/feedback/Modal/Modal.js +183 -0
- package/dist/components/feedback/Modal/Modal.js.map +1 -0
- package/dist/components/feedback/Popover/Popover.cjs +7 -0
- package/dist/components/feedback/Popover/Popover.cjs.map +1 -0
- package/dist/components/feedback/Popover/Popover.js +168 -0
- package/dist/components/feedback/Popover/Popover.js.map +1 -0
- package/dist/components/feedback/Progress/Progress.cjs +12 -0
- package/dist/components/feedback/Progress/Progress.cjs.map +1 -0
- package/dist/components/feedback/Progress/Progress.js +172 -0
- package/dist/components/feedback/Progress/Progress.js.map +1 -0
- package/dist/components/feedback/Toast/Toast.cjs +11 -0
- package/dist/components/feedback/Toast/Toast.cjs.map +1 -0
- package/dist/components/feedback/Toast/Toast.js +216 -0
- package/dist/components/feedback/Toast/Toast.js.map +1 -0
- package/dist/components/feedback/Toast/ToastContext.cjs +2 -0
- package/dist/components/feedback/Toast/ToastContext.cjs.map +1 -0
- package/dist/components/feedback/Toast/ToastContext.js +13 -0
- package/dist/components/feedback/Toast/ToastContext.js.map +1 -0
- package/dist/components/feedback/Tooltip/Tooltip.cjs +7 -0
- package/dist/components/feedback/Tooltip/Tooltip.cjs.map +1 -0
- package/dist/components/feedback/Tooltip/Tooltip.js +128 -0
- package/dist/components/feedback/Tooltip/Tooltip.js.map +1 -0
- package/dist/components/feedback.cjs +2 -0
- package/dist/components/feedback.cjs.map +1 -0
- package/dist/components/feedback.d.ts +2 -0
- package/dist/components/feedback.js +20 -0
- package/dist/components/feedback.js.map +1 -0
- package/dist/components/form/Checkbox/Checkbox.cjs +2 -0
- package/dist/components/form/Checkbox/Checkbox.cjs.map +1 -0
- package/dist/components/form/Checkbox/Checkbox.js +144 -0
- package/dist/components/form/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/form/DateInput/DateInput.cjs +2 -0
- package/dist/components/form/DateInput/DateInput.cjs.map +1 -0
- package/dist/components/form/DateInput/DateInput.js +119 -0
- package/dist/components/form/DateInput/DateInput.js.map +1 -0
- package/dist/components/form/DropZone/DropZone.cjs +2 -0
- package/dist/components/form/DropZone/DropZone.cjs.map +1 -0
- package/dist/components/form/DropZone/DropZone.js +132 -0
- package/dist/components/form/DropZone/DropZone.js.map +1 -0
- package/dist/components/form/FieldError/FieldError.cjs +2 -0
- package/dist/components/form/FieldError/FieldError.cjs.map +1 -0
- package/dist/components/form/FieldError/FieldError.js +77 -0
- package/dist/components/form/FieldError/FieldError.js.map +1 -0
- package/dist/components/form/FileInput/FileInput.cjs +2 -0
- package/dist/components/form/FileInput/FileInput.cjs.map +1 -0
- package/dist/components/form/FileInput/FileInput.js +163 -0
- package/dist/components/form/FileInput/FileInput.js.map +1 -0
- package/dist/components/form/Form/Form.cjs +2 -0
- package/dist/components/form/Form/Form.cjs.map +1 -0
- package/dist/components/form/Form/Form.js +67 -0
- package/dist/components/form/Form/Form.js.map +1 -0
- package/dist/components/form/FormCard/FormCard.cjs +2 -0
- package/dist/components/form/FormCard/FormCard.cjs.map +1 -0
- package/dist/components/form/FormCard/FormCard.js +91 -0
- package/dist/components/form/FormCard/FormCard.js.map +1 -0
- package/dist/components/form/FormField/FormField.cjs +2 -0
- package/dist/components/form/FormField/FormField.cjs.map +1 -0
- package/dist/components/form/FormField/FormField.js +97 -0
- package/dist/components/form/FormField/FormField.js.map +1 -0
- package/dist/components/form/FormGroup/FormGroup.cjs +2 -0
- package/dist/components/form/FormGroup/FormGroup.cjs.map +1 -0
- package/dist/components/form/FormGroup/FormGroup.js +79 -0
- package/dist/components/form/FormGroup/FormGroup.js.map +1 -0
- package/dist/components/form/FormLabel/FormLabel.cjs +2 -0
- package/dist/components/form/FormLabel/FormLabel.cjs.map +1 -0
- package/dist/components/form/FormLabel/FormLabel.js +68 -0
- package/dist/components/form/FormLabel/FormLabel.js.map +1 -0
- package/dist/components/form/Input/Input.cjs +2 -0
- package/dist/components/form/Input/Input.cjs.map +1 -0
- package/dist/components/form/Input/Input.js +155 -0
- package/dist/components/form/Input/Input.js.map +1 -0
- package/dist/components/form/Radio/Radio.cjs +2 -0
- package/dist/components/form/Radio/Radio.cjs.map +1 -0
- package/dist/components/form/Radio/Radio.js +162 -0
- package/dist/components/form/Radio/Radio.js.map +1 -0
- package/dist/components/form/Select/Select.cjs +2 -0
- package/dist/components/form/Select/Select.cjs.map +1 -0
- package/dist/components/form/Select/Select.js +114 -0
- package/dist/components/form/Select/Select.js.map +1 -0
- package/dist/components/form/Slider/Slider.cjs +2 -0
- package/dist/components/form/Slider/Slider.cjs.map +1 -0
- package/dist/components/form/Slider/Slider.js +147 -0
- package/dist/components/form/Slider/Slider.js.map +1 -0
- package/dist/components/form/Switch/Switch.cjs +2 -0
- package/dist/components/form/Switch/Switch.cjs.map +1 -0
- package/dist/components/form/Switch/Switch.js +118 -0
- package/dist/components/form/Switch/Switch.js.map +1 -0
- package/dist/components/form/TextField/TextField.cjs +2 -0
- package/dist/components/form/TextField/TextField.cjs.map +1 -0
- package/dist/components/form/TextField/TextField.js +89 -0
- package/dist/components/form/TextField/TextField.js.map +1 -0
- package/dist/components/form/Textarea/Textarea.cjs +2 -0
- package/dist/components/form/Textarea/Textarea.cjs.map +1 -0
- package/dist/components/form/Textarea/Textarea.js +121 -0
- package/dist/components/form/Textarea/Textarea.js.map +1 -0
- package/dist/components/form.cjs +2 -0
- package/dist/components/form.cjs.map +1 -0
- package/dist/components/form.d.ts +2 -0
- package/dist/components/form.js +34 -0
- package/dist/components/form.js.map +1 -0
- package/dist/components/layout/AspectRatio/AspectRatio.cjs +2 -0
- package/dist/components/layout/AspectRatio/AspectRatio.cjs.map +1 -0
- package/dist/components/layout/AspectRatio/AspectRatio.js +50 -0
- package/dist/components/layout/AspectRatio/AspectRatio.js.map +1 -0
- package/dist/components/layout/Box/Box.cjs +2 -0
- package/dist/components/layout/Box/Box.cjs.map +1 -0
- package/dist/components/layout/Box/Box.js +58 -0
- package/dist/components/layout/Box/Box.js.map +1 -0
- package/dist/components/layout/Box/Box.styles.cjs +2 -0
- package/dist/components/layout/Box/Box.styles.cjs.map +1 -0
- package/dist/components/layout/Box/Box.styles.js +30 -0
- package/dist/components/layout/Box/Box.styles.js.map +1 -0
- package/dist/components/layout/Card/Card.cjs +2 -0
- package/dist/components/layout/Card/Card.cjs.map +1 -0
- package/dist/components/layout/Card/Card.js +135 -0
- package/dist/components/layout/Card/Card.js.map +1 -0
- package/dist/components/layout/Container/Container.cjs +2 -0
- package/dist/components/layout/Container/Container.cjs.map +1 -0
- package/dist/components/layout/Container/Container.js +57 -0
- package/dist/components/layout/Container/Container.js.map +1 -0
- package/dist/components/layout/Flex/Flex.cjs +2 -0
- package/dist/components/layout/Flex/Flex.cjs.map +1 -0
- package/dist/components/layout/Flex/Flex.js +101 -0
- package/dist/components/layout/Flex/Flex.js.map +1 -0
- package/dist/components/layout/Grid/Grid.cjs +2 -0
- package/dist/components/layout/Grid/Grid.cjs.map +1 -0
- package/dist/components/layout/Grid/Grid.js +92 -0
- package/dist/components/layout/Grid/Grid.js.map +1 -0
- package/dist/components/layout/Section/Section.cjs +2 -0
- package/dist/components/layout/Section/Section.cjs.map +1 -0
- package/dist/components/layout/Section/Section.js +85 -0
- package/dist/components/layout/Section/Section.js.map +1 -0
- package/dist/components/layout/Semantic/Semantic.cjs +2 -0
- package/dist/components/layout/Semantic/Semantic.cjs.map +1 -0
- package/dist/components/layout/Semantic/Semantic.js +103 -0
- package/dist/components/layout/Semantic/Semantic.js.map +1 -0
- package/dist/components/layout/Spacer/Spacer.cjs +2 -0
- package/dist/components/layout/Spacer/Spacer.cjs.map +1 -0
- package/dist/components/layout/Spacer/Spacer.js +38 -0
- package/dist/components/layout/Spacer/Spacer.js.map +1 -0
- package/dist/components/layout/Stack/Stack.cjs +2 -0
- package/dist/components/layout/Stack/Stack.cjs.map +1 -0
- package/dist/components/layout/Stack/Stack.js +67 -0
- package/dist/components/layout/Stack/Stack.js.map +1 -0
- package/dist/components/layout.cjs +2 -0
- package/dist/components/layout.cjs.map +1 -0
- package/dist/components/layout.d.ts +2 -0
- package/dist/components/layout.js +35 -0
- package/dist/components/layout.js.map +1 -0
- package/dist/components/media/Image/Image.cjs +2 -0
- package/dist/components/media/Image/Image.cjs.map +1 -0
- package/dist/components/media/Image/Image.js +171 -0
- package/dist/components/media/Image/Image.js.map +1 -0
- package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs +2 -0
- package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs.map +1 -0
- package/dist/components/media/ImageThumbnail/ImageThumbnail.js +112 -0
- package/dist/components/media/ImageThumbnail/ImageThumbnail.js.map +1 -0
- package/dist/components/media/Video/Video.cjs +2 -0
- package/dist/components/media/Video/Video.cjs.map +1 -0
- package/dist/components/media/Video/Video.js +185 -0
- package/dist/components/media/Video/Video.js.map +1 -0
- package/dist/components/navigation/Accordion/Accordion.cjs +2 -0
- package/dist/components/navigation/Accordion/Accordion.cjs.map +1 -0
- package/dist/components/navigation/Accordion/Accordion.js +180 -0
- package/dist/components/navigation/Accordion/Accordion.js.map +1 -0
- package/dist/components/navigation/Breadcrumb/Breadcrumb.cjs +2 -0
- package/dist/components/navigation/Breadcrumb/Breadcrumb.cjs.map +1 -0
- package/dist/components/navigation/Breadcrumb/Breadcrumb.js +137 -0
- package/dist/components/navigation/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/components/navigation/Dropdown/Dropdown.cjs +7 -0
- package/dist/components/navigation/Dropdown/Dropdown.cjs.map +1 -0
- package/dist/components/navigation/Dropdown/Dropdown.js +259 -0
- package/dist/components/navigation/Dropdown/Dropdown.js.map +1 -0
- package/dist/components/navigation/Menu/Menu.cjs +2 -0
- package/dist/components/navigation/Menu/Menu.cjs.map +1 -0
- package/dist/components/navigation/Menu/Menu.js +151 -0
- package/dist/components/navigation/Menu/Menu.js.map +1 -0
- package/dist/components/navigation/Pagination/Pagination.cjs +2 -0
- package/dist/components/navigation/Pagination/Pagination.cjs.map +1 -0
- package/dist/components/navigation/Pagination/Pagination.js +201 -0
- package/dist/components/navigation/Pagination/Pagination.js.map +1 -0
- package/dist/components/navigation/Tabs/Tabs.cjs +7 -0
- package/dist/components/navigation/Tabs/Tabs.cjs.map +1 -0
- package/dist/components/navigation/Tabs/Tabs.js +196 -0
- package/dist/components/navigation/Tabs/Tabs.js.map +1 -0
- package/dist/components/navigation.cjs +2 -0
- package/dist/components/navigation.cjs.map +1 -0
- package/dist/components/navigation.d.ts +2 -0
- package/dist/components/navigation.js +29 -0
- package/dist/components/navigation.js.map +1 -0
- package/dist/components/primitives/Button/Button.cjs +2 -0
- package/dist/components/primitives/Button/Button.cjs.map +1 -0
- package/dist/components/primitives/Button/Button.js +173 -0
- package/dist/components/primitives/Button/Button.js.map +1 -0
- package/dist/components/primitives/Button/Button.styles.cjs +2 -0
- package/dist/components/primitives/Button/Button.styles.cjs.map +1 -0
- package/dist/components/primitives/Button/Button.styles.js +321 -0
- package/dist/components/primitives/Button/Button.styles.js.map +1 -0
- package/dist/components/primitives/Icon/Icon.cjs +2 -0
- package/dist/components/primitives/Icon/Icon.cjs.map +1 -0
- package/dist/components/primitives/Icon/Icon.js +58 -0
- package/dist/components/primitives/Icon/Icon.js.map +1 -0
- package/dist/components/primitives/Icon/iconPaths.cjs +2 -0
- package/dist/components/primitives/Icon/iconPaths.cjs.map +1 -0
- package/dist/components/primitives/Icon/iconPaths.js +63 -0
- package/dist/components/primitives/Icon/iconPaths.js.map +1 -0
- package/dist/components/typography/Heading/Heading.cjs +2 -0
- package/dist/components/typography/Heading/Heading.cjs.map +1 -0
- package/dist/components/typography/Heading/Heading.js +65 -0
- package/dist/components/typography/Heading/Heading.js.map +1 -0
- package/dist/components/typography/Text/Text.cjs +2 -0
- package/dist/components/typography/Text/Text.cjs.map +1 -0
- package/dist/components/typography/Text/Text.js +88 -0
- package/dist/components/typography/Text/Text.js.map +1 -0
- package/dist/components/utility/Avatar/Avatar.cjs +2 -0
- package/dist/components/utility/Avatar/Avatar.cjs.map +1 -0
- package/dist/components/utility/Avatar/Avatar.js +91 -0
- package/dist/components/utility/Avatar/Avatar.js.map +1 -0
- package/dist/components/utility/Badge/Badge.cjs +2 -0
- package/dist/components/utility/Badge/Badge.cjs.map +1 -0
- package/dist/components/utility/Badge/Badge.js +90 -0
- package/dist/components/utility/Badge/Badge.js.map +1 -0
- package/dist/components/utility/Divider/Divider.cjs +2 -0
- package/dist/components/utility/Divider/Divider.cjs.map +1 -0
- package/dist/components/utility/Divider/Divider.js +87 -0
- package/dist/components/utility/Divider/Divider.js.map +1 -0
- package/dist/components/utility/EmptyState/EmptyState.cjs +2 -0
- package/dist/components/utility/EmptyState/EmptyState.cjs.map +1 -0
- package/dist/components/utility/EmptyState/EmptyState.js +132 -0
- package/dist/components/utility/EmptyState/EmptyState.js.map +1 -0
- package/dist/components/utility/FocusTrap/FocusTrap.cjs +2 -0
- package/dist/components/utility/FocusTrap/FocusTrap.cjs.map +1 -0
- package/dist/components/utility/FocusTrap/FocusTrap.js +35 -0
- package/dist/components/utility/FocusTrap/FocusTrap.js.map +1 -0
- package/dist/components/utility/Loader/Loader.cjs +2 -0
- package/dist/components/utility/Loader/Loader.cjs.map +1 -0
- package/dist/components/utility/Loader/Loader.js +142 -0
- package/dist/components/utility/Loader/Loader.js.map +1 -0
- package/dist/components/utility/Logo/Logo.cjs +2 -0
- package/dist/components/utility/Logo/Logo.cjs.map +1 -0
- package/dist/components/utility/Logo/Logo.js +61 -0
- package/dist/components/utility/Logo/Logo.js.map +1 -0
- package/dist/components/utility/Overlay/Overlay.cjs +7 -0
- package/dist/components/utility/Overlay/Overlay.cjs.map +1 -0
- package/dist/components/utility/Overlay/Overlay.js +59 -0
- package/dist/components/utility/Overlay/Overlay.js.map +1 -0
- package/dist/components/utility/Portal/Portal.cjs +2 -0
- package/dist/components/utility/Portal/Portal.cjs.map +1 -0
- package/dist/components/utility/Portal/Portal.js +18 -0
- package/dist/components/utility/Portal/Portal.js.map +1 -0
- package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.cjs +2 -0
- package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.cjs.map +1 -0
- package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.js +53 -0
- package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.js.map +1 -0
- package/dist/components/utility/Skeleton/Skeleton.cjs +2 -0
- package/dist/components/utility/Skeleton/Skeleton.cjs.map +1 -0
- package/dist/components/utility/Skeleton/Skeleton.js +91 -0
- package/dist/components/utility/Skeleton/Skeleton.js.map +1 -0
- package/dist/components/utility.cjs +2 -0
- package/dist/components/utility.cjs.map +1 -0
- package/dist/components/utility.d.ts +2 -0
- package/dist/components/utility.js +29 -0
- package/dist/components/utility.js.map +1 -0
- package/dist/data.d.ts +198 -0
- package/dist/design-system/primitives/focus.cjs +2 -0
- package/dist/design-system/primitives/focus.cjs.map +1 -0
- package/dist/design-system/primitives/focus.js +42 -0
- package/dist/design-system/primitives/focus.js.map +1 -0
- package/dist/design-system/primitives/layout.cjs +2 -0
- package/dist/design-system/primitives/layout.cjs.map +1 -0
- package/dist/design-system/primitives/layout.js +79 -0
- package/dist/design-system/primitives/layout.js.map +1 -0
- package/dist/design-system/primitives/opacity.cjs +2 -0
- package/dist/design-system/primitives/opacity.cjs.map +1 -0
- package/dist/design-system/primitives/opacity.js +72 -0
- package/dist/design-system/primitives/opacity.js.map +1 -0
- package/dist/design-system/primitives/sizing.cjs +2 -0
- package/dist/design-system/primitives/sizing.cjs.map +1 -0
- package/dist/design-system/primitives/sizing.js +118 -0
- package/dist/design-system/primitives/sizing.js.map +1 -0
- package/dist/design-system/primitives/transitions.cjs +52 -0
- package/dist/design-system/primitives/transitions.cjs.map +1 -0
- package/dist/design-system/primitives/transitions.js +121 -0
- package/dist/design-system/primitives/transitions.js.map +1 -0
- package/dist/design-system/primitives/typography.cjs +2 -0
- package/dist/design-system/primitives/typography.cjs.map +1 -0
- package/dist/design-system/primitives/typography.js +146 -0
- package/dist/design-system/primitives/typography.js.map +1 -0
- package/dist/design-system/themes/ThemeProvider.cjs +2 -0
- package/dist/design-system/themes/ThemeProvider.cjs.map +1 -0
- package/dist/design-system/themes/ThemeProvider.js +78 -0
- package/dist/design-system/themes/ThemeProvider.js.map +1 -0
- package/dist/design-system/themes/cssVariables.cjs +2 -0
- package/dist/design-system/themes/cssVariables.cjs.map +1 -0
- package/dist/design-system/themes/cssVariables.js +57 -0
- package/dist/design-system/themes/cssVariables.js.map +1 -0
- package/dist/design-system/themes/darkTheme.cjs +2 -0
- package/dist/design-system/themes/darkTheme.cjs.map +1 -0
- package/dist/design-system/themes/darkTheme.js +76 -0
- package/dist/design-system/themes/darkTheme.js.map +1 -0
- package/dist/design-system/themes/lightTheme.cjs +2 -0
- package/dist/design-system/themes/lightTheme.cjs.map +1 -0
- package/dist/design-system/themes/lightTheme.js +76 -0
- package/dist/design-system/themes/lightTheme.js.map +1 -0
- package/dist/design-system/tokens/borders.cjs +2 -0
- package/dist/design-system/tokens/borders.cjs.map +1 -0
- package/dist/design-system/tokens/borders.js +78 -0
- package/dist/design-system/tokens/borders.js.map +1 -0
- package/dist/design-system/tokens/breakpoints.cjs +2 -0
- package/dist/design-system/tokens/breakpoints.cjs.map +1 -0
- package/dist/design-system/tokens/breakpoints.js +58 -0
- package/dist/design-system/tokens/breakpoints.js.map +1 -0
- package/dist/design-system/tokens/colors.cjs +2 -0
- package/dist/design-system/tokens/colors.cjs.map +1 -0
- package/dist/{colors-B_8a3coi.js → design-system/tokens/colors.js} +16 -16
- package/dist/design-system/tokens/colors.js.map +1 -0
- package/dist/design-system/tokens/motion.cjs +2 -0
- package/dist/design-system/tokens/motion.cjs.map +1 -0
- package/dist/design-system/tokens/motion.js +133 -0
- package/dist/design-system/tokens/motion.js.map +1 -0
- package/dist/design-system/tokens/shadows.cjs +2 -0
- package/dist/design-system/tokens/shadows.cjs.map +1 -0
- package/dist/design-system/tokens/shadows.js +46 -0
- package/dist/design-system/tokens/shadows.js.map +1 -0
- package/dist/design-system/tokens/spacing.cjs +2 -0
- package/dist/design-system/tokens/spacing.cjs.map +1 -0
- package/dist/design-system/tokens/spacing.js +96 -0
- package/dist/design-system/tokens/spacing.js.map +1 -0
- package/dist/design-system/tokens/typography.cjs +2 -0
- package/dist/design-system/tokens/typography.cjs.map +1 -0
- package/dist/design-system/tokens/typography.js +199 -0
- package/dist/design-system/tokens/typography.js.map +1 -0
- package/dist/design-system/tokens/zIndex.cjs +2 -0
- package/dist/design-system/tokens/zIndex.cjs.map +1 -0
- package/dist/design-system/tokens/zIndex.js +32 -0
- package/dist/design-system/tokens/zIndex.js.map +1 -0
- package/dist/feedback.d.ts +244 -0
- package/dist/form.d.ts +415 -0
- package/dist/hooks/useClickOutside.cjs +2 -0
- package/dist/hooks/useClickOutside.cjs.map +1 -0
- package/dist/hooks/useClickOutside.js +18 -0
- package/dist/hooks/useClickOutside.js.map +1 -0
- package/dist/hooks/useControllable.cjs +2 -0
- package/dist/hooks/useControllable.cjs.map +1 -0
- package/dist/hooks/useControllable.js +25 -0
- package/dist/hooks/useControllable.js.map +1 -0
- package/dist/hooks/useDisclosure.cjs +2 -0
- package/dist/hooks/useDisclosure.cjs.map +1 -0
- package/dist/hooks/useDisclosure.js +22 -0
- package/dist/hooks/useDisclosure.js.map +1 -0
- package/dist/hooks/useFocusTrap.cjs +2 -0
- package/dist/hooks/useFocusTrap.cjs.map +1 -0
- package/dist/hooks/useFocusTrap.js +56 -0
- package/dist/hooks/useFocusTrap.js.map +1 -0
- package/dist/hooks/useId.cjs +2 -0
- package/dist/hooks/useId.cjs.map +1 -0
- package/dist/hooks/useId.js +22 -0
- package/dist/hooks/useId.js.map +1 -0
- package/dist/hooks/useKeyboardNavigation.cjs +2 -0
- package/dist/hooks/useKeyboardNavigation.cjs.map +1 -0
- package/dist/hooks/useKeyboardNavigation.js +82 -0
- package/dist/hooks/useKeyboardNavigation.js.map +1 -0
- package/dist/hooks/useMediaQuery.cjs +2 -0
- package/dist/hooks/useMediaQuery.cjs.map +1 -0
- package/dist/hooks/useMediaQuery.js +33 -0
- package/dist/hooks/useMediaQuery.js.map +1 -0
- package/dist/hooks.cjs +2 -0
- package/dist/hooks.cjs.map +1 -0
- package/dist/hooks.d.ts +146 -0
- package/dist/hooks.js +23 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.cjs +1 -148
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4311 -141
- package/dist/index.js +291 -8305
- package/dist/index.js.map +1 -1
- package/dist/layout.d.ts +543 -0
- package/dist/navigation.d.ts +290 -0
- package/dist/styles.css +1 -1
- package/dist/themes.cjs +1 -1
- package/dist/themes.d.ts +214 -2
- package/dist/themes.js +11 -8
- package/dist/themes.js.map +1 -1
- package/dist/tokens.cjs +1 -1
- package/dist/tokens.cjs.map +1 -1
- package/dist/tokens.d.ts +976 -2
- package/dist/tokens.js +38 -624
- package/dist/tokens.js.map +1 -1
- package/dist/utility.d.ts +259 -0
- package/dist/utils/lazyComponent.cjs +2 -0
- package/dist/utils/lazyComponent.cjs.map +1 -0
- package/dist/utils/lazyComponent.js +26 -0
- package/dist/utils/lazyComponent.js.map +1 -0
- package/dist/utils/styles.cjs +2 -0
- package/dist/utils/styles.cjs.map +1 -0
- package/dist/utils/styles.js +35 -0
- package/dist/utils/styles.js.map +1 -0
- package/package.json +37 -1
- package/dist/colors-B_8a3coi.js.map +0 -1
- package/dist/colors-Bp6ROxvx.cjs +0 -2
- package/dist/colors-Bp6ROxvx.cjs.map +0 -1
- package/dist/components/data/InfoItem/InfoItem.d.ts +0 -44
- package/dist/components/data/InfoItem/InfoItem.d.ts.map +0 -1
- package/dist/components/data/InfoItem/index.d.ts +0 -2
- package/dist/components/data/InfoItem/index.d.ts.map +0 -1
- package/dist/components/data/List/List.d.ts +0 -44
- package/dist/components/data/List/List.d.ts.map +0 -1
- package/dist/components/data/List/index.d.ts +0 -3
- package/dist/components/data/List/index.d.ts.map +0 -1
- package/dist/components/data/Table/Table.d.ts +0 -74
- package/dist/components/data/Table/Table.d.ts.map +0 -1
- package/dist/components/data/Table/index.d.ts +0 -3
- package/dist/components/data/Table/index.d.ts.map +0 -1
- package/dist/components/data/index.d.ts +0 -7
- package/dist/components/data/index.d.ts.map +0 -1
- package/dist/components/feedback/Alert/Alert.d.ts +0 -29
- package/dist/components/feedback/Alert/Alert.d.ts.map +0 -1
- package/dist/components/feedback/Alert/index.d.ts +0 -3
- package/dist/components/feedback/Alert/index.d.ts.map +0 -1
- package/dist/components/feedback/Drawer/Drawer.d.ts +0 -29
- package/dist/components/feedback/Drawer/Drawer.d.ts.map +0 -1
- package/dist/components/feedback/Drawer/index.d.ts +0 -3
- package/dist/components/feedback/Drawer/index.d.ts.map +0 -1
- package/dist/components/feedback/Modal/Modal.d.ts +0 -28
- package/dist/components/feedback/Modal/Modal.d.ts.map +0 -1
- package/dist/components/feedback/Modal/index.d.ts +0 -3
- package/dist/components/feedback/Modal/index.d.ts.map +0 -1
- package/dist/components/feedback/Popover/Popover.d.ts +0 -35
- package/dist/components/feedback/Popover/Popover.d.ts.map +0 -1
- package/dist/components/feedback/Popover/index.d.ts +0 -3
- package/dist/components/feedback/Popover/index.d.ts.map +0 -1
- package/dist/components/feedback/Progress/Progress.d.ts +0 -30
- package/dist/components/feedback/Progress/Progress.d.ts.map +0 -1
- package/dist/components/feedback/Progress/index.d.ts +0 -3
- package/dist/components/feedback/Progress/index.d.ts.map +0 -1
- package/dist/components/feedback/Toast/Toast.d.ts +0 -47
- package/dist/components/feedback/Toast/Toast.d.ts.map +0 -1
- package/dist/components/feedback/Toast/index.d.ts +0 -3
- package/dist/components/feedback/Toast/index.d.ts.map +0 -1
- package/dist/components/feedback/Tooltip/Tooltip.d.ts +0 -20
- package/dist/components/feedback/Tooltip/Tooltip.d.ts.map +0 -1
- package/dist/components/feedback/Tooltip/index.d.ts +0 -3
- package/dist/components/feedback/Tooltip/index.d.ts.map +0 -1
- package/dist/components/feedback/index.d.ts +0 -13
- package/dist/components/feedback/index.d.ts.map +0 -1
- package/dist/components/form/Checkbox/Checkbox.d.ts +0 -20
- package/dist/components/form/Checkbox/Checkbox.d.ts.map +0 -1
- package/dist/components/form/Checkbox/index.d.ts +0 -3
- package/dist/components/form/Checkbox/index.d.ts.map +0 -1
- package/dist/components/form/DateInput/DateInput.d.ts +0 -28
- package/dist/components/form/DateInput/DateInput.d.ts.map +0 -1
- package/dist/components/form/DateInput/index.d.ts +0 -3
- package/dist/components/form/DateInput/index.d.ts.map +0 -1
- package/dist/components/form/DropZone/DropZone.d.ts +0 -27
- package/dist/components/form/DropZone/DropZone.d.ts.map +0 -1
- package/dist/components/form/DropZone/index.d.ts +0 -2
- package/dist/components/form/DropZone/index.d.ts.map +0 -1
- package/dist/components/form/FieldError/FieldError.d.ts +0 -18
- package/dist/components/form/FieldError/FieldError.d.ts.map +0 -1
- package/dist/components/form/FieldError/index.d.ts +0 -3
- package/dist/components/form/FieldError/index.d.ts.map +0 -1
- package/dist/components/form/FileInput/FileInput.d.ts +0 -33
- package/dist/components/form/FileInput/FileInput.d.ts.map +0 -1
- package/dist/components/form/FileInput/index.d.ts +0 -3
- package/dist/components/form/FileInput/index.d.ts.map +0 -1
- package/dist/components/form/Form/Form.d.ts +0 -16
- package/dist/components/form/Form/Form.d.ts.map +0 -1
- package/dist/components/form/Form/index.d.ts +0 -2
- package/dist/components/form/Form/index.d.ts.map +0 -1
- package/dist/components/form/FormCard/FormCard.d.ts +0 -20
- package/dist/components/form/FormCard/FormCard.d.ts.map +0 -1
- package/dist/components/form/FormCard/index.d.ts +0 -2
- package/dist/components/form/FormCard/index.d.ts.map +0 -1
- package/dist/components/form/FormField/FormField.d.ts +0 -36
- package/dist/components/form/FormField/FormField.d.ts.map +0 -1
- package/dist/components/form/FormField/index.d.ts +0 -3
- package/dist/components/form/FormField/index.d.ts.map +0 -1
- package/dist/components/form/FormGroup/FormGroup.d.ts +0 -31
- package/dist/components/form/FormGroup/FormGroup.d.ts.map +0 -1
- package/dist/components/form/FormGroup/index.d.ts +0 -2
- package/dist/components/form/FormGroup/index.d.ts.map +0 -1
- package/dist/components/form/FormLabel/FormLabel.d.ts +0 -20
- package/dist/components/form/FormLabel/FormLabel.d.ts.map +0 -1
- package/dist/components/form/FormLabel/index.d.ts +0 -2
- package/dist/components/form/FormLabel/index.d.ts.map +0 -1
- package/dist/components/form/Input/Input.d.ts +0 -21
- package/dist/components/form/Input/Input.d.ts.map +0 -1
- package/dist/components/form/Input/index.d.ts +0 -3
- package/dist/components/form/Input/index.d.ts.map +0 -1
- package/dist/components/form/Radio/Radio.d.ts +0 -46
- package/dist/components/form/Radio/Radio.d.ts.map +0 -1
- package/dist/components/form/Radio/index.d.ts +0 -3
- package/dist/components/form/Radio/index.d.ts.map +0 -1
- package/dist/components/form/Select/Select.d.ts +0 -21
- package/dist/components/form/Select/Select.d.ts.map +0 -1
- package/dist/components/form/Select/index.d.ts +0 -3
- package/dist/components/form/Select/index.d.ts.map +0 -1
- package/dist/components/form/Slider/Slider.d.ts +0 -32
- package/dist/components/form/Slider/Slider.d.ts.map +0 -1
- package/dist/components/form/Slider/index.d.ts +0 -3
- package/dist/components/form/Slider/index.d.ts.map +0 -1
- package/dist/components/form/Switch/Switch.d.ts +0 -16
- package/dist/components/form/Switch/Switch.d.ts.map +0 -1
- package/dist/components/form/Switch/index.d.ts +0 -3
- package/dist/components/form/Switch/index.d.ts.map +0 -1
- package/dist/components/form/TextField/TextField.d.ts +0 -16
- package/dist/components/form/TextField/TextField.d.ts.map +0 -1
- package/dist/components/form/TextField/index.d.ts +0 -3
- package/dist/components/form/TextField/index.d.ts.map +0 -1
- package/dist/components/form/Textarea/Textarea.d.ts +0 -27
- package/dist/components/form/Textarea/Textarea.d.ts.map +0 -1
- package/dist/components/form/Textarea/index.d.ts +0 -3
- package/dist/components/form/Textarea/index.d.ts.map +0 -1
- package/dist/components/form/index.d.ts +0 -21
- package/dist/components/form/index.d.ts.map +0 -1
- package/dist/components/index.d.ts +0 -12
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/layout/AspectRatio/AspectRatio.d.ts +0 -19
- package/dist/components/layout/AspectRatio/AspectRatio.d.ts.map +0 -1
- package/dist/components/layout/AspectRatio/index.d.ts +0 -2
- package/dist/components/layout/AspectRatio/index.d.ts.map +0 -1
- package/dist/components/layout/Box/Box.d.ts +0 -11
- package/dist/components/layout/Box/Box.d.ts.map +0 -1
- package/dist/components/layout/Box/Box.styles.d.ts +0 -4
- package/dist/components/layout/Box/Box.styles.d.ts.map +0 -1
- package/dist/components/layout/Box/Box.types.d.ts +0 -38
- package/dist/components/layout/Box/Box.types.d.ts.map +0 -1
- package/dist/components/layout/Box/index.d.ts +0 -3
- package/dist/components/layout/Box/index.d.ts.map +0 -1
- package/dist/components/layout/Card/Card.d.ts +0 -40
- package/dist/components/layout/Card/Card.d.ts.map +0 -1
- package/dist/components/layout/Card/index.d.ts +0 -3
- package/dist/components/layout/Card/index.d.ts.map +0 -1
- package/dist/components/layout/Container/Container.d.ts +0 -31
- package/dist/components/layout/Container/Container.d.ts.map +0 -1
- package/dist/components/layout/Container/index.d.ts +0 -3
- package/dist/components/layout/Container/index.d.ts.map +0 -1
- package/dist/components/layout/Flex/Flex.d.ts +0 -63
- package/dist/components/layout/Flex/Flex.d.ts.map +0 -1
- package/dist/components/layout/Flex/index.d.ts +0 -3
- package/dist/components/layout/Flex/index.d.ts.map +0 -1
- package/dist/components/layout/Grid/Grid.d.ts +0 -80
- package/dist/components/layout/Grid/Grid.d.ts.map +0 -1
- package/dist/components/layout/Grid/index.d.ts +0 -3
- package/dist/components/layout/Grid/index.d.ts.map +0 -1
- package/dist/components/layout/Section/Section.d.ts +0 -22
- package/dist/components/layout/Section/Section.d.ts.map +0 -1
- package/dist/components/layout/Section/index.d.ts +0 -3
- package/dist/components/layout/Section/index.d.ts.map +0 -1
- package/dist/components/layout/Semantic/Semantic.d.ts +0 -32
- package/dist/components/layout/Semantic/Semantic.d.ts.map +0 -1
- package/dist/components/layout/Semantic/index.d.ts +0 -3
- package/dist/components/layout/Semantic/index.d.ts.map +0 -1
- package/dist/components/layout/Spacer/Spacer.d.ts +0 -18
- package/dist/components/layout/Spacer/Spacer.d.ts.map +0 -1
- package/dist/components/layout/Spacer/index.d.ts +0 -3
- package/dist/components/layout/Spacer/index.d.ts.map +0 -1
- package/dist/components/layout/Stack/Stack.d.ts +0 -13
- package/dist/components/layout/Stack/Stack.d.ts.map +0 -1
- package/dist/components/layout/Stack/Stack.types.d.ts +0 -33
- package/dist/components/layout/Stack/Stack.types.d.ts.map +0 -1
- package/dist/components/layout/Stack/index.d.ts +0 -3
- package/dist/components/layout/Stack/index.d.ts.map +0 -1
- package/dist/components/layout/index.d.ts +0 -16
- package/dist/components/layout/index.d.ts.map +0 -1
- package/dist/components/media/Image/Image.d.ts +0 -33
- package/dist/components/media/Image/Image.d.ts.map +0 -1
- package/dist/components/media/Image/index.d.ts +0 -2
- package/dist/components/media/Image/index.d.ts.map +0 -1
- package/dist/components/media/ImageThumbnail/ImageThumbnail.d.ts +0 -27
- package/dist/components/media/ImageThumbnail/ImageThumbnail.d.ts.map +0 -1
- package/dist/components/media/ImageThumbnail/index.d.ts +0 -2
- package/dist/components/media/ImageThumbnail/index.d.ts.map +0 -1
- package/dist/components/media/Video/Video.d.ts +0 -67
- package/dist/components/media/Video/Video.d.ts.map +0 -1
- package/dist/components/media/Video/index.d.ts +0 -2
- package/dist/components/media/Video/index.d.ts.map +0 -1
- package/dist/components/media/index.d.ts +0 -8
- package/dist/components/media/index.d.ts.map +0 -1
- package/dist/components/navigation/Accordion/Accordion.d.ts +0 -41
- package/dist/components/navigation/Accordion/Accordion.d.ts.map +0 -1
- package/dist/components/navigation/Accordion/index.d.ts +0 -3
- package/dist/components/navigation/Accordion/index.d.ts.map +0 -1
- package/dist/components/navigation/Breadcrumb/Breadcrumb.d.ts +0 -31
- package/dist/components/navigation/Breadcrumb/Breadcrumb.d.ts.map +0 -1
- package/dist/components/navigation/Breadcrumb/index.d.ts +0 -3
- package/dist/components/navigation/Breadcrumb/index.d.ts.map +0 -1
- package/dist/components/navigation/Dropdown/Dropdown.d.ts +0 -47
- package/dist/components/navigation/Dropdown/Dropdown.d.ts.map +0 -1
- package/dist/components/navigation/Dropdown/index.d.ts +0 -3
- package/dist/components/navigation/Dropdown/index.d.ts.map +0 -1
- package/dist/components/navigation/Menu/Menu.d.ts +0 -45
- package/dist/components/navigation/Menu/Menu.d.ts.map +0 -1
- package/dist/components/navigation/Menu/index.d.ts +0 -3
- package/dist/components/navigation/Menu/index.d.ts.map +0 -1
- package/dist/components/navigation/Pagination/Pagination.d.ts +0 -29
- package/dist/components/navigation/Pagination/Pagination.d.ts.map +0 -1
- package/dist/components/navigation/Pagination/index.d.ts +0 -3
- package/dist/components/navigation/Pagination/index.d.ts.map +0 -1
- package/dist/components/navigation/Tabs/Tabs.d.ts +0 -52
- package/dist/components/navigation/Tabs/Tabs.d.ts.map +0 -1
- package/dist/components/navigation/Tabs/index.d.ts +0 -3
- package/dist/components/navigation/Tabs/index.d.ts.map +0 -1
- package/dist/components/navigation/index.d.ts +0 -10
- package/dist/components/navigation/index.d.ts.map +0 -1
- package/dist/components/primitives/Button/Button.d.ts +0 -12
- package/dist/components/primitives/Button/Button.d.ts.map +0 -1
- package/dist/components/primitives/Button/Button.styles.d.ts +0 -29
- package/dist/components/primitives/Button/Button.styles.d.ts.map +0 -1
- package/dist/components/primitives/Button/Button.types.d.ts +0 -37
- package/dist/components/primitives/Button/Button.types.d.ts.map +0 -1
- package/dist/components/primitives/Button/index.d.ts +0 -3
- package/dist/components/primitives/Button/index.d.ts.map +0 -1
- package/dist/components/primitives/Icon/Icon.d.ts +0 -88
- package/dist/components/primitives/Icon/Icon.d.ts.map +0 -1
- package/dist/components/primitives/Icon/index.d.ts +0 -3
- package/dist/components/primitives/Icon/index.d.ts.map +0 -1
- package/dist/components/primitives/index.d.ts +0 -8
- package/dist/components/primitives/index.d.ts.map +0 -1
- package/dist/components/typography/Heading/Heading.d.ts +0 -38
- package/dist/components/typography/Heading/Heading.d.ts.map +0 -1
- package/dist/components/typography/Heading/index.d.ts +0 -3
- package/dist/components/typography/Heading/index.d.ts.map +0 -1
- package/dist/components/typography/Text/Text.d.ts +0 -43
- package/dist/components/typography/Text/Text.d.ts.map +0 -1
- package/dist/components/typography/Text/index.d.ts +0 -3
- package/dist/components/typography/Text/index.d.ts.map +0 -1
- package/dist/components/typography/index.d.ts +0 -8
- package/dist/components/typography/index.d.ts.map +0 -1
- package/dist/components/utility/Avatar/Avatar.d.ts +0 -22
- package/dist/components/utility/Avatar/Avatar.d.ts.map +0 -1
- package/dist/components/utility/Avatar/index.d.ts +0 -3
- package/dist/components/utility/Avatar/index.d.ts.map +0 -1
- package/dist/components/utility/Badge/Badge.d.ts +0 -20
- package/dist/components/utility/Badge/Badge.d.ts.map +0 -1
- package/dist/components/utility/Badge/index.d.ts +0 -3
- package/dist/components/utility/Badge/index.d.ts.map +0 -1
- package/dist/components/utility/Divider/Divider.d.ts +0 -19
- package/dist/components/utility/Divider/Divider.d.ts.map +0 -1
- package/dist/components/utility/Divider/index.d.ts +0 -3
- package/dist/components/utility/Divider/index.d.ts.map +0 -1
- package/dist/components/utility/EmptyState/EmptyState.d.ts +0 -26
- package/dist/components/utility/EmptyState/EmptyState.d.ts.map +0 -1
- package/dist/components/utility/EmptyState/index.d.ts +0 -3
- package/dist/components/utility/EmptyState/index.d.ts.map +0 -1
- package/dist/components/utility/FocusTrap/FocusTrap.d.ts +0 -19
- package/dist/components/utility/FocusTrap/FocusTrap.d.ts.map +0 -1
- package/dist/components/utility/FocusTrap/index.d.ts +0 -3
- package/dist/components/utility/FocusTrap/index.d.ts.map +0 -1
- package/dist/components/utility/Loader/Loader.d.ts +0 -21
- package/dist/components/utility/Loader/Loader.d.ts.map +0 -1
- package/dist/components/utility/Loader/index.d.ts +0 -3
- package/dist/components/utility/Loader/index.d.ts.map +0 -1
- package/dist/components/utility/Logo/Logo.d.ts +0 -14
- package/dist/components/utility/Logo/Logo.d.ts.map +0 -1
- package/dist/components/utility/Logo/index.d.ts +0 -3
- package/dist/components/utility/Logo/index.d.ts.map +0 -1
- package/dist/components/utility/Overlay/Overlay.d.ts +0 -25
- package/dist/components/utility/Overlay/Overlay.d.ts.map +0 -1
- package/dist/components/utility/Overlay/index.d.ts +0 -3
- package/dist/components/utility/Overlay/index.d.ts.map +0 -1
- package/dist/components/utility/Portal/Portal.d.ts +0 -14
- package/dist/components/utility/Portal/Portal.d.ts.map +0 -1
- package/dist/components/utility/Portal/index.d.ts +0 -3
- package/dist/components/utility/Portal/index.d.ts.map +0 -1
- package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.d.ts +0 -17
- package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.d.ts.map +0 -1
- package/dist/components/utility/ScreenReaderOnly/index.d.ts +0 -2
- package/dist/components/utility/ScreenReaderOnly/index.d.ts.map +0 -1
- package/dist/components/utility/Skeleton/Skeleton.d.ts +0 -35
- package/dist/components/utility/Skeleton/Skeleton.d.ts.map +0 -1
- package/dist/components/utility/Skeleton/index.d.ts +0 -3
- package/dist/components/utility/Skeleton/index.d.ts.map +0 -1
- package/dist/components/utility/index.d.ts +0 -17
- package/dist/components/utility/index.d.ts.map +0 -1
- package/dist/cssVariables-BguyVeCi.cjs +0 -2
- package/dist/cssVariables-BguyVeCi.cjs.map +0 -1
- package/dist/cssVariables-D9uw0uKO.js +0 -273
- package/dist/cssVariables-D9uw0uKO.js.map +0 -1
- package/dist/design-system/index.d.ts +0 -16
- package/dist/design-system/index.d.ts.map +0 -1
- package/dist/design-system/primitives/focus.d.ts +0 -67
- package/dist/design-system/primitives/focus.d.ts.map +0 -1
- package/dist/design-system/primitives/index.d.ts +0 -15
- package/dist/design-system/primitives/index.d.ts.map +0 -1
- package/dist/design-system/primitives/layout.d.ts +0 -114
- package/dist/design-system/primitives/layout.d.ts.map +0 -1
- package/dist/design-system/primitives/opacity.d.ts +0 -88
- package/dist/design-system/primitives/opacity.d.ts.map +0 -1
- package/dist/design-system/primitives/sizing.d.ts +0 -155
- package/dist/design-system/primitives/sizing.d.ts.map +0 -1
- package/dist/design-system/primitives/transitions.d.ts +0 -92
- package/dist/design-system/primitives/transitions.d.ts.map +0 -1
- package/dist/design-system/primitives/typography.d.ts +0 -164
- package/dist/design-system/primitives/typography.d.ts.map +0 -1
- package/dist/design-system/themes/ThemeProvider.d.ts +0 -18
- package/dist/design-system/themes/ThemeProvider.d.ts.map +0 -1
- package/dist/design-system/themes/cssVariables.d.ts +0 -52
- package/dist/design-system/themes/cssVariables.d.ts.map +0 -1
- package/dist/design-system/themes/darkTheme.d.ts +0 -3
- package/dist/design-system/themes/darkTheme.d.ts.map +0 -1
- package/dist/design-system/themes/index.d.ts +0 -11
- package/dist/design-system/themes/index.d.ts.map +0 -1
- package/dist/design-system/themes/lightTheme.d.ts +0 -3
- package/dist/design-system/themes/lightTheme.d.ts.map +0 -1
- package/dist/design-system/themes/types.d.ts +0 -134
- package/dist/design-system/themes/types.d.ts.map +0 -1
- package/dist/design-system/tokens/borders.d.ts +0 -86
- package/dist/design-system/tokens/borders.d.ts.map +0 -1
- package/dist/design-system/tokens/breakpoints.d.ts +0 -66
- package/dist/design-system/tokens/breakpoints.d.ts.map +0 -1
- package/dist/design-system/tokens/colors.d.ts +0 -206
- package/dist/design-system/tokens/colors.d.ts.map +0 -1
- package/dist/design-system/tokens/index.d.ts +0 -23
- package/dist/design-system/tokens/index.d.ts.map +0 -1
- package/dist/design-system/tokens/motion.d.ts +0 -204
- package/dist/design-system/tokens/motion.d.ts.map +0 -1
- package/dist/design-system/tokens/shadows.d.ts +0 -55
- package/dist/design-system/tokens/shadows.d.ts.map +0 -1
- package/dist/design-system/tokens/spacing.d.ts +0 -104
- package/dist/design-system/tokens/spacing.d.ts.map +0 -1
- package/dist/design-system/tokens/typography.d.ts +0 -214
- package/dist/design-system/tokens/typography.d.ts.map +0 -1
- package/dist/design-system/tokens/zIndex.d.ts +0 -36
- package/dist/design-system/tokens/zIndex.d.ts.map +0 -1
- package/dist/hooks/index.d.ts +0 -13
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/useClickOutside.d.ts +0 -9
- package/dist/hooks/useClickOutside.d.ts.map +0 -1
- package/dist/hooks/useControllable.d.ts +0 -24
- package/dist/hooks/useControllable.d.ts.map +0 -1
- package/dist/hooks/useDisclosure.d.ts +0 -19
- package/dist/hooks/useDisclosure.d.ts.map +0 -1
- package/dist/hooks/useFocusTrap.d.ts +0 -21
- package/dist/hooks/useFocusTrap.d.ts.map +0 -1
- package/dist/hooks/useId.d.ts +0 -9
- package/dist/hooks/useId.d.ts.map +0 -1
- package/dist/hooks/useKeyboardNavigation.d.ts +0 -35
- package/dist/hooks/useKeyboardNavigation.d.ts.map +0 -1
- package/dist/hooks/useMediaQuery.d.ts +0 -13
- package/dist/hooks/useMediaQuery.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/types/common.d.ts +0 -90
- package/dist/types/common.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -7
- package/dist/types/index.d.ts.map +0 -1
- package/dist/utils/index.d.ts +0 -7
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/styles.d.ts +0 -17
- package/dist/utils/styles.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Drawer.cjs","sources":["../../../../src/components/feedback/Drawer/Drawer.tsx"],"sourcesContent":["/**\n * Drawer Component\n *\n * A slide-out panel that can appear from any edge of the screen.\n * Supports focus trapping and keyboard navigation.\n */\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n useCallback,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\n\nexport type DrawerPlacement = 'left' | 'right' | 'top' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\nexport interface DrawerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Whether the drawer is open */\n isOpen: boolean\n /** Callback when drawer should close */\n onClose: () => void\n /** Drawer placement */\n placement?: DrawerPlacement\n /** Drawer size */\n size?: DrawerSize\n /** Drawer title */\n title?: ReactNode\n /** Whether to close on overlay click */\n closeOnOverlayClick?: boolean\n /** Whether to close on escape key */\n closeOnEscape?: boolean\n /** Whether to show close button */\n showCloseButton?: boolean\n /** Whether to show overlay */\n showOverlay?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeMap: Record<DrawerSize, string> = {\n sm: '320px',\n md: '400px',\n lg: '560px',\n xl: '720px',\n full: '100%',\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n {\n isOpen,\n onClose,\n placement = 'right',\n size = 'md',\n title,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n showCloseButton = true,\n showOverlay = true,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const drawerRef = useRef<HTMLDivElement>(null)\n const previousActiveElement = useRef<HTMLElement | null>(null)\n\n // Focus trap and keyboard handling\n useEffect(() => {\n if (!isOpen) return\n\n previousActiveElement.current = document.activeElement as HTMLElement\n const drawer = drawerRef.current\n if (drawer) {\n drawer.focus()\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && closeOnEscape) {\n onClose()\n return\n }\n\n if (e.key === 'Tab' && drawer) {\n const focusableElements = drawer.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault()\n lastElement?.focus()\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault()\n firstElement?.focus()\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n document.body.style.overflow = ''\n previousActiveElement.current?.focus()\n }\n }, [isOpen, closeOnEscape, onClose])\n\n const handleOverlayClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && closeOnOverlayClick) {\n onClose()\n }\n },\n [closeOnOverlayClick, onClose]\n )\n\n if (!isOpen) return null\n\n const isHorizontal = placement === 'left' || placement === 'right'\n const drawerSize = sizeMap[size]\n\n const overlayStyle: CSSProperties = {\n position: 'fixed',\n inset: 0,\n zIndex: 'var(--brycks-z-drawer)' as unknown as number,\n display: 'flex',\n backgroundColor: showOverlay ? 'var(--brycks-background-overlay)' : 'transparent',\n animation: 'brycks-drawer-overlay-in 200ms ease-out',\n }\n\n const getPositionStyles = (): CSSProperties => {\n const base: CSSProperties = {\n position: 'absolute',\n backgroundColor: 'var(--brycks-background-elevated)',\n boxShadow: 'var(--brycks-shadow-2xl)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }\n\n if (isHorizontal) {\n return {\n ...base,\n top: 0,\n bottom: 0,\n [placement]: 0,\n width: drawerSize,\n maxWidth: '100vw',\n }\n }\n\n return {\n ...base,\n left: 0,\n right: 0,\n [placement]: 0,\n height: drawerSize,\n maxHeight: '100vh',\n }\n }\n\n const drawerStyle: CSSProperties = {\n ...getPositionStyles(),\n animation: `brycks-drawer-${placement}-in 250ms cubic-bezier(0.32, 0.72, 0, 1)`,\n outline: 'none',\n ...style,\n }\n\n const headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: '1px solid var(--brycks-border-muted)',\n flexShrink: 0,\n }\n\n const titleStyle: CSSProperties = {\n fontSize: 18,\n fontWeight: 600,\n color: 'var(--brycks-foreground-default)',\n margin: 0,\n }\n\n const closeButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n borderRadius: 'var(--brycks-radius-md)',\n color: 'var(--brycks-foreground-muted)',\n transition: 'all 150ms ease-out',\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n overflow: 'auto',\n padding: 20,\n }\n\n const drawerContent = (\n <>\n <style>\n {`\n @keyframes brycks-drawer-overlay-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes brycks-drawer-left-in {\n from { transform: translateX(-100%); }\n to { transform: translateX(0); }\n }\n @keyframes brycks-drawer-right-in {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n }\n @keyframes brycks-drawer-top-in {\n from { transform: translateY(-100%); }\n to { transform: translateY(0); }\n }\n @keyframes brycks-drawer-bottom-in {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n }\n `}\n </style>\n <div\n className=\"brycks-drawer-overlay\"\n style={overlayStyle}\n onClick={handleOverlayClick}\n aria-hidden=\"true\"\n >\n <div\n ref={(node) => {\n (drawerRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'brycks-drawer-title' : undefined}\n className={cx('brycks-drawer', `brycks-drawer--${placement}`, `brycks-drawer--${size}`, className)}\n style={drawerStyle}\n tabIndex={-1}\n data-testid={testId}\n {...props}\n >\n {(title || showCloseButton) && (\n <div className=\"brycks-drawer-header\" style={headerStyle}>\n {title && <h2 id=\"brycks-drawer-title\" style={titleStyle}>{title}</h2>}\n {showCloseButton && (\n <button\n type=\"button\"\n className=\"brycks-drawer-close\"\n style={closeButtonStyle}\n onClick={onClose}\n aria-label=\"Close drawer\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n >\n <CloseIcon />\n </button>\n )}\n </div>\n )}\n <div className=\"brycks-drawer-content\" style={contentStyle}>\n {children}\n </div>\n </div>\n </div>\n </>\n )\n\n return createPortal(drawerContent, document.body)\n})\n\nDrawer.displayName = 'Drawer'\n"],"names":["sizeMap","CloseIcon","jsx","Drawer","forwardRef","isOpen","onClose","placement","size","title","closeOnOverlayClick","closeOnEscape","showCloseButton","showOverlay","className","style","children","testId","props","ref","drawerRef","useRef","previousActiveElement","useEffect","drawer","handleKeyDown","e","focusableElements","firstElement","lastElement","handleOverlayClick","useCallback","isHorizontal","drawerSize","overlayStyle","drawerStyle","base","headerStyle","titleStyle","closeButtonStyle","contentStyle","drawerContent","jsxs","Fragment","node","cx","createPortal"],"mappings":"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"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { jsxs as c, Fragment as Y, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as K, useRef as g, useEffect as P, useCallback as W } from "react";
|
|
3
|
+
import { createPortal as $ } from "react-dom";
|
|
4
|
+
import { cx as A } from "../../../utils/styles.js";
|
|
5
|
+
const B = {
|
|
6
|
+
sm: "320px",
|
|
7
|
+
md: "400px",
|
|
8
|
+
lg: "560px",
|
|
9
|
+
xl: "720px",
|
|
10
|
+
full: "100%"
|
|
11
|
+
};
|
|
12
|
+
function H() {
|
|
13
|
+
return /* @__PURE__ */ e("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ e("path", { d: "M4 4l8 8M12 4l-8 8", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) });
|
|
14
|
+
}
|
|
15
|
+
const q = K(function({
|
|
16
|
+
isOpen: l,
|
|
17
|
+
onClose: a,
|
|
18
|
+
placement: t = "right",
|
|
19
|
+
size: d = "md",
|
|
20
|
+
title: n,
|
|
21
|
+
closeOnOverlayClick: u = !0,
|
|
22
|
+
closeOnEscape: y = !0,
|
|
23
|
+
showCloseButton: f = !0,
|
|
24
|
+
showOverlay: p = !0,
|
|
25
|
+
className: x,
|
|
26
|
+
style: S,
|
|
27
|
+
children: E,
|
|
28
|
+
testId: C,
|
|
29
|
+
...D
|
|
30
|
+
}, s) {
|
|
31
|
+
const m = g(null), b = g(null);
|
|
32
|
+
P(() => {
|
|
33
|
+
if (!l) return;
|
|
34
|
+
b.current = document.activeElement;
|
|
35
|
+
const r = m.current;
|
|
36
|
+
r && r.focus();
|
|
37
|
+
const h = (o) => {
|
|
38
|
+
if (o.key === "Escape" && y) {
|
|
39
|
+
a();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (o.key === "Tab" && r) {
|
|
43
|
+
const i = r.querySelectorAll(
|
|
44
|
+
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
|
45
|
+
), v = i[0], w = i[i.length - 1];
|
|
46
|
+
o.shiftKey && document.activeElement === v ? (o.preventDefault(), w?.focus()) : !o.shiftKey && document.activeElement === w && (o.preventDefault(), v?.focus());
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
return document.addEventListener("keydown", h), document.body.style.overflow = "hidden", () => {
|
|
50
|
+
document.removeEventListener("keydown", h), document.body.style.overflow = "", b.current?.focus();
|
|
51
|
+
};
|
|
52
|
+
}, [l, y, a]);
|
|
53
|
+
const z = W(
|
|
54
|
+
(r) => {
|
|
55
|
+
r.target === r.currentTarget && u && a();
|
|
56
|
+
},
|
|
57
|
+
[u, a]
|
|
58
|
+
);
|
|
59
|
+
if (!l) return null;
|
|
60
|
+
const N = t === "left" || t === "right", k = B[d], T = {
|
|
61
|
+
position: "fixed",
|
|
62
|
+
inset: 0,
|
|
63
|
+
zIndex: "var(--brycks-z-drawer)",
|
|
64
|
+
display: "flex",
|
|
65
|
+
backgroundColor: p ? "var(--brycks-background-overlay)" : "transparent",
|
|
66
|
+
animation: "brycks-drawer-overlay-in 200ms ease-out"
|
|
67
|
+
}, I = {
|
|
68
|
+
...(() => {
|
|
69
|
+
const r = {
|
|
70
|
+
position: "absolute",
|
|
71
|
+
backgroundColor: "var(--brycks-background-elevated)",
|
|
72
|
+
boxShadow: "var(--brycks-shadow-2xl)",
|
|
73
|
+
display: "flex",
|
|
74
|
+
flexDirection: "column",
|
|
75
|
+
overflow: "hidden"
|
|
76
|
+
};
|
|
77
|
+
return N ? {
|
|
78
|
+
...r,
|
|
79
|
+
top: 0,
|
|
80
|
+
bottom: 0,
|
|
81
|
+
[t]: 0,
|
|
82
|
+
width: k,
|
|
83
|
+
maxWidth: "100vw"
|
|
84
|
+
} : {
|
|
85
|
+
...r,
|
|
86
|
+
left: 0,
|
|
87
|
+
right: 0,
|
|
88
|
+
[t]: 0,
|
|
89
|
+
height: k,
|
|
90
|
+
maxHeight: "100vh"
|
|
91
|
+
};
|
|
92
|
+
})(),
|
|
93
|
+
animation: `brycks-drawer-${t}-in 250ms cubic-bezier(0.32, 0.72, 0, 1)`,
|
|
94
|
+
outline: "none",
|
|
95
|
+
...S
|
|
96
|
+
}, M = {
|
|
97
|
+
display: "flex",
|
|
98
|
+
alignItems: "center",
|
|
99
|
+
justifyContent: "space-between",
|
|
100
|
+
padding: "16px 20px",
|
|
101
|
+
borderBottom: "1px solid var(--brycks-border-muted)",
|
|
102
|
+
flexShrink: 0
|
|
103
|
+
}, j = {
|
|
104
|
+
fontSize: 18,
|
|
105
|
+
fontWeight: 600,
|
|
106
|
+
color: "var(--brycks-foreground-default)",
|
|
107
|
+
margin: 0
|
|
108
|
+
}, L = {
|
|
109
|
+
display: "flex",
|
|
110
|
+
alignItems: "center",
|
|
111
|
+
justifyContent: "center",
|
|
112
|
+
width: 32,
|
|
113
|
+
height: 32,
|
|
114
|
+
borderRadius: "var(--brycks-radius-md)",
|
|
115
|
+
color: "var(--brycks-foreground-muted)",
|
|
116
|
+
transition: "all 150ms ease-out"
|
|
117
|
+
}, R = {
|
|
118
|
+
flex: 1,
|
|
119
|
+
overflow: "auto",
|
|
120
|
+
padding: 20
|
|
121
|
+
}, X = /* @__PURE__ */ c(Y, { children: [
|
|
122
|
+
/* @__PURE__ */ e("style", { children: `
|
|
123
|
+
@keyframes brycks-drawer-overlay-in {
|
|
124
|
+
from { opacity: 0; }
|
|
125
|
+
to { opacity: 1; }
|
|
126
|
+
}
|
|
127
|
+
@keyframes brycks-drawer-left-in {
|
|
128
|
+
from { transform: translateX(-100%); }
|
|
129
|
+
to { transform: translateX(0); }
|
|
130
|
+
}
|
|
131
|
+
@keyframes brycks-drawer-right-in {
|
|
132
|
+
from { transform: translateX(100%); }
|
|
133
|
+
to { transform: translateX(0); }
|
|
134
|
+
}
|
|
135
|
+
@keyframes brycks-drawer-top-in {
|
|
136
|
+
from { transform: translateY(-100%); }
|
|
137
|
+
to { transform: translateY(0); }
|
|
138
|
+
}
|
|
139
|
+
@keyframes brycks-drawer-bottom-in {
|
|
140
|
+
from { transform: translateY(100%); }
|
|
141
|
+
to { transform: translateY(0); }
|
|
142
|
+
}
|
|
143
|
+
` }),
|
|
144
|
+
/* @__PURE__ */ e(
|
|
145
|
+
"div",
|
|
146
|
+
{
|
|
147
|
+
className: "brycks-drawer-overlay",
|
|
148
|
+
style: T,
|
|
149
|
+
onClick: z,
|
|
150
|
+
"aria-hidden": "true",
|
|
151
|
+
children: /* @__PURE__ */ c(
|
|
152
|
+
"div",
|
|
153
|
+
{
|
|
154
|
+
ref: (r) => {
|
|
155
|
+
m.current = r, typeof s == "function" ? s(r) : s && (s.current = r);
|
|
156
|
+
},
|
|
157
|
+
role: "dialog",
|
|
158
|
+
"aria-modal": "true",
|
|
159
|
+
"aria-labelledby": n ? "brycks-drawer-title" : void 0,
|
|
160
|
+
className: A("brycks-drawer", `brycks-drawer--${t}`, `brycks-drawer--${d}`, x),
|
|
161
|
+
style: I,
|
|
162
|
+
tabIndex: -1,
|
|
163
|
+
"data-testid": C,
|
|
164
|
+
...D,
|
|
165
|
+
children: [
|
|
166
|
+
(n || f) && /* @__PURE__ */ c("div", { className: "brycks-drawer-header", style: M, children: [
|
|
167
|
+
n && /* @__PURE__ */ e("h2", { id: "brycks-drawer-title", style: j, children: n }),
|
|
168
|
+
f && /* @__PURE__ */ e(
|
|
169
|
+
"button",
|
|
170
|
+
{
|
|
171
|
+
type: "button",
|
|
172
|
+
className: "brycks-drawer-close",
|
|
173
|
+
style: L,
|
|
174
|
+
onClick: a,
|
|
175
|
+
"aria-label": "Close drawer",
|
|
176
|
+
onMouseEnter: (r) => {
|
|
177
|
+
r.currentTarget.style.backgroundColor = "var(--brycks-background-muted)", r.currentTarget.style.color = "var(--brycks-foreground-default)";
|
|
178
|
+
},
|
|
179
|
+
onMouseLeave: (r) => {
|
|
180
|
+
r.currentTarget.style.backgroundColor = "transparent", r.currentTarget.style.color = "var(--brycks-foreground-muted)";
|
|
181
|
+
},
|
|
182
|
+
children: /* @__PURE__ */ e(H, {})
|
|
183
|
+
}
|
|
184
|
+
)
|
|
185
|
+
] }),
|
|
186
|
+
/* @__PURE__ */ e("div", { className: "brycks-drawer-content", style: R, children: E })
|
|
187
|
+
]
|
|
188
|
+
}
|
|
189
|
+
)
|
|
190
|
+
}
|
|
191
|
+
)
|
|
192
|
+
] });
|
|
193
|
+
return $(X, document.body);
|
|
194
|
+
});
|
|
195
|
+
q.displayName = "Drawer";
|
|
196
|
+
export {
|
|
197
|
+
q as Drawer
|
|
198
|
+
};
|
|
199
|
+
//# sourceMappingURL=Drawer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Drawer.js","sources":["../../../../src/components/feedback/Drawer/Drawer.tsx"],"sourcesContent":["/**\n * Drawer Component\n *\n * A slide-out panel that can appear from any edge of the screen.\n * Supports focus trapping and keyboard navigation.\n */\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n useCallback,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\n\nexport type DrawerPlacement = 'left' | 'right' | 'top' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\nexport interface DrawerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Whether the drawer is open */\n isOpen: boolean\n /** Callback when drawer should close */\n onClose: () => void\n /** Drawer placement */\n placement?: DrawerPlacement\n /** Drawer size */\n size?: DrawerSize\n /** Drawer title */\n title?: ReactNode\n /** Whether to close on overlay click */\n closeOnOverlayClick?: boolean\n /** Whether to close on escape key */\n closeOnEscape?: boolean\n /** Whether to show close button */\n showCloseButton?: boolean\n /** Whether to show overlay */\n showOverlay?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeMap: Record<DrawerSize, string> = {\n sm: '320px',\n md: '400px',\n lg: '560px',\n xl: '720px',\n full: '100%',\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n {\n isOpen,\n onClose,\n placement = 'right',\n size = 'md',\n title,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n showCloseButton = true,\n showOverlay = true,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const drawerRef = useRef<HTMLDivElement>(null)\n const previousActiveElement = useRef<HTMLElement | null>(null)\n\n // Focus trap and keyboard handling\n useEffect(() => {\n if (!isOpen) return\n\n previousActiveElement.current = document.activeElement as HTMLElement\n const drawer = drawerRef.current\n if (drawer) {\n drawer.focus()\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && closeOnEscape) {\n onClose()\n return\n }\n\n if (e.key === 'Tab' && drawer) {\n const focusableElements = drawer.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault()\n lastElement?.focus()\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault()\n firstElement?.focus()\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n document.body.style.overflow = ''\n previousActiveElement.current?.focus()\n }\n }, [isOpen, closeOnEscape, onClose])\n\n const handleOverlayClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && closeOnOverlayClick) {\n onClose()\n }\n },\n [closeOnOverlayClick, onClose]\n )\n\n if (!isOpen) return null\n\n const isHorizontal = placement === 'left' || placement === 'right'\n const drawerSize = sizeMap[size]\n\n const overlayStyle: CSSProperties = {\n position: 'fixed',\n inset: 0,\n zIndex: 'var(--brycks-z-drawer)' as unknown as number,\n display: 'flex',\n backgroundColor: showOverlay ? 'var(--brycks-background-overlay)' : 'transparent',\n animation: 'brycks-drawer-overlay-in 200ms ease-out',\n }\n\n const getPositionStyles = (): CSSProperties => {\n const base: CSSProperties = {\n position: 'absolute',\n backgroundColor: 'var(--brycks-background-elevated)',\n boxShadow: 'var(--brycks-shadow-2xl)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }\n\n if (isHorizontal) {\n return {\n ...base,\n top: 0,\n bottom: 0,\n [placement]: 0,\n width: drawerSize,\n maxWidth: '100vw',\n }\n }\n\n return {\n ...base,\n left: 0,\n right: 0,\n [placement]: 0,\n height: drawerSize,\n maxHeight: '100vh',\n }\n }\n\n const drawerStyle: CSSProperties = {\n ...getPositionStyles(),\n animation: `brycks-drawer-${placement}-in 250ms cubic-bezier(0.32, 0.72, 0, 1)`,\n outline: 'none',\n ...style,\n }\n\n const headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: '1px solid var(--brycks-border-muted)',\n flexShrink: 0,\n }\n\n const titleStyle: CSSProperties = {\n fontSize: 18,\n fontWeight: 600,\n color: 'var(--brycks-foreground-default)',\n margin: 0,\n }\n\n const closeButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n borderRadius: 'var(--brycks-radius-md)',\n color: 'var(--brycks-foreground-muted)',\n transition: 'all 150ms ease-out',\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n overflow: 'auto',\n padding: 20,\n }\n\n const drawerContent = (\n <>\n <style>\n {`\n @keyframes brycks-drawer-overlay-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes brycks-drawer-left-in {\n from { transform: translateX(-100%); }\n to { transform: translateX(0); }\n }\n @keyframes brycks-drawer-right-in {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n }\n @keyframes brycks-drawer-top-in {\n from { transform: translateY(-100%); }\n to { transform: translateY(0); }\n }\n @keyframes brycks-drawer-bottom-in {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n }\n `}\n </style>\n <div\n className=\"brycks-drawer-overlay\"\n style={overlayStyle}\n onClick={handleOverlayClick}\n aria-hidden=\"true\"\n >\n <div\n ref={(node) => {\n (drawerRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'brycks-drawer-title' : undefined}\n className={cx('brycks-drawer', `brycks-drawer--${placement}`, `brycks-drawer--${size}`, className)}\n style={drawerStyle}\n tabIndex={-1}\n data-testid={testId}\n {...props}\n >\n {(title || showCloseButton) && (\n <div className=\"brycks-drawer-header\" style={headerStyle}>\n {title && <h2 id=\"brycks-drawer-title\" style={titleStyle}>{title}</h2>}\n {showCloseButton && (\n <button\n type=\"button\"\n className=\"brycks-drawer-close\"\n style={closeButtonStyle}\n onClick={onClose}\n aria-label=\"Close drawer\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n >\n <CloseIcon />\n </button>\n )}\n </div>\n )}\n <div className=\"brycks-drawer-content\" style={contentStyle}>\n {children}\n </div>\n </div>\n </div>\n </>\n )\n\n return createPortal(drawerContent, document.body)\n})\n\nDrawer.displayName = 'Drawer'\n"],"names":["sizeMap","CloseIcon","jsx","Drawer","forwardRef","isOpen","onClose","placement","size","title","closeOnOverlayClick","closeOnEscape","showCloseButton","showOverlay","className","style","children","testId","props","ref","drawerRef","useRef","previousActiveElement","useEffect","drawer","handleKeyDown","e","focusableElements","firstElement","lastElement","handleOverlayClick","useCallback","isHorizontal","drawerSize","overlayStyle","drawerStyle","base","headerStyle","titleStyle","closeButtonStyle","contentStyle","drawerContent","jsxs","Fragment","node","cx","createPortal"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),r=require("react"),K=require("react-dom"),z=require("../../../utils/styles.cjs"),A={sm:"400px",md:"500px",lg:"640px",xl:"800px",full:"calc(100vw - 48px)"},B=r.memo(function(){return t.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:t.jsx("path",{d:"M4 4L12 12M12 4L4 12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}),p=r.forwardRef(function({isOpen:o,onClose:a,size:l="md",title:s,description:i,closeOnOverlayClick:m=!0,closeOnEscape:f=!0,showCloseButton:b=!0,className:w,style:v,testId:E,children:S,...M},c){const k=r.useRef(null),u=r.useRef(null),d=r.useRef(!1);r.useEffect(()=>{o&&!d.current?(u.current=document.activeElement,d.current=!0):!o&&d.current&&(document.activeElement instanceof HTMLElement&&document.activeElement.blur(),u.current?.focus(),u.current=null,d.current=!1)},[o]),r.useEffect(()=>{if(!o)return;const e=k.current;e&&e.focus();const x=n=>{if(n.key==="Escape"&&f){a();return}if(n.key==="Tab"&&e){const y=e.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),g=y[0],h=y[y.length-1];n.shiftKey&&document.activeElement===g?(n.preventDefault(),h?.focus()):!n.shiftKey&&document.activeElement===h&&(n.preventDefault(),g?.focus())}};return document.addEventListener("keydown",x),document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",x),document.body.style.overflow=""}},[o,f,a]);const C=r.useCallback(e=>{e.target===e.currentTarget&&m&&a()},[m,a]),R=r.useMemo(()=>({position:"fixed",inset:0,zIndex:"var(--brycks-z-modal)",display:"flex",alignItems:"center",justifyContent:"center",padding:24,backgroundColor:"var(--brycks-background-overlay)",backdropFilter:"blur(4px)",animation:"brycks-fade-in var(--brycks-duration-normal) var(--brycks-ease-out)"}),[]),L=r.useMemo(()=>({position:"relative",width:"100%",maxWidth:A[l],maxHeight:l==="full"?"calc(100vh - 48px)":"85vh",backgroundColor:"var(--brycks-background-elevated)",borderRadius:"var(--brycks-radius-xl)",boxShadow:"var(--brycks-shadow-2xl)",display:"flex",flexDirection:"column",overflow:"hidden",animation:"brycks-scale-in var(--brycks-duration-normal) var(--brycks-ease-spring)",outline:"none",...v}),[l,v]);if(!o)return null;const T={display:"flex",alignItems:"flex-start",justifyContent:"space-between",padding:"20px 24px",borderBottom:"1px solid var(--brycks-border-muted)"},I={display:"flex",flexDirection:"column",gap:4},D={fontSize:18,fontWeight:600,color:"var(--brycks-foreground-default)",margin:0,lineHeight:1.3},N={fontSize:14,color:"var(--brycks-foreground-muted)",margin:0},q={display:"flex",alignItems:"center",justifyContent:"center",width:32,height:32,borderRadius:"var(--brycks-radius-md)",color:"var(--brycks-foreground-muted)",transition:"all var(--brycks-duration-fast) var(--brycks-ease-out)",marginLeft:12,flexShrink:0},W={flex:1,overflow:"auto",padding:24},H=t.jsx("div",{className:"brycks-modal-overlay",style:R,onClick:C,children:t.jsxs("div",{ref:e=>{k.current=e,typeof c=="function"?c(e):c&&(c.current=e)},role:"dialog","aria-modal":"true","aria-labelledby":s?"brycks-modal-title":void 0,"aria-describedby":i?"brycks-modal-description":void 0,className:z.cx("brycks-modal",`brycks-modal--${l}`,w),style:L,tabIndex:-1,"data-testid":E,...M,children:[(s||b)&&t.jsxs("div",{className:"brycks-modal-header",style:T,children:[t.jsxs("div",{style:I,children:[s&&t.jsx("h2",{id:"brycks-modal-title",style:D,children:s}),i&&t.jsx("p",{id:"brycks-modal-description",style:N,children:i})]}),b&&t.jsx("button",{type:"button",className:"brycks-modal-close",style:q,onClick:a,"aria-label":"Close modal",onMouseEnter:e=>{e.currentTarget.style.backgroundColor="var(--brycks-background-muted)",e.currentTarget.style.color="var(--brycks-foreground-default)"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent",e.currentTarget.style.color="var(--brycks-foreground-muted)"},children:t.jsx(B,{})})]}),t.jsx("div",{className:"brycks-modal-content",style:W,children:S})]})});return K.createPortal(H,document.body)});p.displayName="Modal";exports.Modal=p;
|
|
2
|
+
//# sourceMappingURL=Modal.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.cjs","sources":["../../../../src/components/feedback/Modal/Modal.tsx"],"sourcesContent":["/**\r\n * Modal Component\r\n *\r\n * Accessible modal dialog with smooth Apple-inspired animations.\r\n * Supports focus trapping and keyboard navigation.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useEffect,\r\n useRef,\r\n useCallback,\r\n useMemo,\r\n memo,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { createPortal } from 'react-dom'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\r\n\r\nexport interface ModalProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Whether the modal is open */\r\n isOpen: boolean\r\n /** Callback when modal should close */\r\n onClose: () => void\r\n /** Modal size */\r\n size?: ModalSize\r\n /** Modal title */\r\n title?: ReactNode\r\n /** Modal description */\r\n description?: ReactNode\r\n /** Whether to close on overlay click */\r\n closeOnOverlayClick?: boolean\r\n /** Whether to close on escape key */\r\n closeOnEscape?: boolean\r\n /** Whether to show close button */\r\n showCloseButton?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Modal content */\r\n children?: ReactNode\r\n}\r\n\r\nconst sizeWidths: Record<ModalSize, string> = {\r\n sm: '400px',\r\n md: '500px',\r\n lg: '640px',\r\n xl: '800px',\r\n full: 'calc(100vw - 48px)',\r\n}\r\n\r\n/** Close icon - memoized to prevent re-renders */\r\nconst CloseIcon = memo(function CloseIcon() {\r\n return (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\r\n <path\r\n d=\"M4 4L12 12M12 4L4 12\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n )\r\n})\r\n\r\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(function Modal(\r\n {\r\n isOpen,\r\n onClose,\r\n size = 'md',\r\n title,\r\n description,\r\n closeOnOverlayClick = true,\r\n closeOnEscape = true,\r\n showCloseButton = true,\r\n className,\r\n style,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const modalRef = useRef<HTMLDivElement>(null)\r\n const previousActiveElement = useRef<HTMLElement | null>(null)\r\n const wasOpen = useRef(false)\r\n\r\n // Track previous open state to handle focus restoration before unmount\r\n useEffect(() => {\r\n // Modal just opened\r\n if (isOpen && !wasOpen.current) {\r\n previousActiveElement.current = document.activeElement as HTMLElement\r\n wasOpen.current = true\r\n }\r\n // Modal is about to close - restore focus BEFORE unmount\r\n else if (!isOpen && wasOpen.current) {\r\n // Blur any focused element inside modal to prevent aria-hidden warning\r\n if (document.activeElement instanceof HTMLElement) {\r\n document.activeElement.blur()\r\n }\r\n // Restore focus to previous element\r\n previousActiveElement.current?.focus()\r\n previousActiveElement.current = null\r\n wasOpen.current = false\r\n }\r\n }, [isOpen])\r\n\r\n // Focus trap and keyboard handling\r\n useEffect(() => {\r\n if (!isOpen) return\r\n\r\n const modal = modalRef.current\r\n if (modal) {\r\n modal.focus()\r\n }\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape' && closeOnEscape) {\r\n onClose()\r\n return\r\n }\r\n\r\n if (e.key === 'Tab' && modal) {\r\n const focusableElements = modal.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n )\r\n const firstElement = focusableElements[0]\r\n const lastElement = focusableElements[focusableElements.length - 1]\r\n\r\n if (e.shiftKey && document.activeElement === firstElement) {\r\n e.preventDefault()\r\n lastElement?.focus()\r\n } else if (!e.shiftKey && document.activeElement === lastElement) {\r\n e.preventDefault()\r\n firstElement?.focus()\r\n }\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyDown)\r\n document.body.style.overflow = 'hidden'\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleKeyDown)\r\n document.body.style.overflow = ''\r\n }\r\n }, [isOpen, closeOnEscape, onClose])\r\n\r\n const handleOverlayClick = useCallback(\r\n (e: React.MouseEvent) => {\r\n if (e.target === e.currentTarget && closeOnOverlayClick) {\r\n onClose()\r\n }\r\n },\r\n [closeOnOverlayClick, onClose]\r\n )\r\n\r\n // Memoize styles to prevent object recreation on every render\r\n const overlayStyle = useMemo<CSSProperties>(() => ({\r\n position: 'fixed',\r\n inset: 0,\r\n zIndex: 'var(--brycks-z-modal)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: 24,\r\n backgroundColor: 'var(--brycks-background-overlay)',\r\n backdropFilter: 'blur(4px)',\r\n animation: 'brycks-fade-in var(--brycks-duration-normal) var(--brycks-ease-out)',\r\n }), [])\r\n\r\n const modalStyle = useMemo<CSSProperties>(() => ({\r\n position: 'relative',\r\n width: '100%',\r\n maxWidth: sizeWidths[size],\r\n maxHeight: size === 'full' ? 'calc(100vh - 48px)' : '85vh',\r\n backgroundColor: 'var(--brycks-background-elevated)',\r\n borderRadius: 'var(--brycks-radius-xl)',\r\n boxShadow: 'var(--brycks-shadow-2xl)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden',\r\n animation: 'brycks-scale-in var(--brycks-duration-normal) var(--brycks-ease-spring)',\r\n outline: 'none',\r\n ...style,\r\n }), [size, style])\r\n\r\n if (!isOpen) return null\r\n\r\n const headerStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n justifyContent: 'space-between',\r\n padding: '20px 24px',\r\n borderBottom: '1px solid var(--brycks-border-muted)',\r\n }\r\n\r\n const titleContainerStyle: CSSProperties = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 4,\r\n }\r\n\r\n const titleStyle: CSSProperties = {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n color: 'var(--brycks-foreground-default)',\r\n margin: 0,\r\n lineHeight: 1.3,\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: 14,\r\n color: 'var(--brycks-foreground-muted)',\r\n margin: 0,\r\n }\r\n\r\n const closeButtonStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: 32,\r\n height: 32,\r\n borderRadius: 'var(--brycks-radius-md)',\r\n color: 'var(--brycks-foreground-muted)',\r\n transition: 'all var(--brycks-duration-fast) var(--brycks-ease-out)',\r\n marginLeft: 12,\r\n flexShrink: 0,\r\n }\r\n\r\n const contentStyle: CSSProperties = {\r\n flex: 1,\r\n overflow: 'auto',\r\n padding: 24,\r\n }\r\n\r\n const modalContent = (\r\n <div\r\n className=\"brycks-modal-overlay\"\r\n style={overlayStyle}\r\n onClick={handleOverlayClick}\r\n >\r\n <div\r\n ref={(node) => {\r\n (modalRef as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n if (typeof ref === 'function') ref(node)\r\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n }}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={title ? 'brycks-modal-title' : undefined}\r\n aria-describedby={description ? 'brycks-modal-description' : undefined}\r\n className={cx('brycks-modal', `brycks-modal--${size}`, className)}\r\n style={modalStyle}\r\n tabIndex={-1}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {(title || showCloseButton) && (\r\n <div className=\"brycks-modal-header\" style={headerStyle}>\r\n <div style={titleContainerStyle}>\r\n {title && (\r\n <h2 id=\"brycks-modal-title\" style={titleStyle}>\r\n {title}\r\n </h2>\r\n )}\r\n {description && (\r\n <p id=\"brycks-modal-description\" style={descriptionStyle}>\r\n {description}\r\n </p>\r\n )}\r\n </div>\r\n {showCloseButton && (\r\n <button\r\n type=\"button\"\r\n className=\"brycks-modal-close\"\r\n style={closeButtonStyle}\r\n onClick={onClose}\r\n aria-label=\"Close modal\"\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\r\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent'\r\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\r\n }}\r\n >\r\n <CloseIcon />\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n <div className=\"brycks-modal-content\" style={contentStyle}>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n\r\n return createPortal(modalContent, document.body)\r\n})\r\n\r\nModal.displayName = 'Modal'\r\n"],"names":["sizeWidths","CloseIcon","memo","jsx","Modal","forwardRef","isOpen","onClose","size","title","description","closeOnOverlayClick","closeOnEscape","showCloseButton","className","style","testId","children","props","ref","modalRef","useRef","previousActiveElement","wasOpen","useEffect","modal","handleKeyDown","e","focusableElements","firstElement","lastElement","handleOverlayClick","useCallback","overlayStyle","useMemo","modalStyle","headerStyle","titleContainerStyle","titleStyle","descriptionStyle","closeButtonStyle","contentStyle","modalContent","jsxs","node","cx","createPortal"],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { jsx as t, jsxs as m } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as B, useRef as y, useEffect as w, useCallback as q, useMemo as E, memo as F } from "react";
|
|
3
|
+
import { createPortal as P } from "react-dom";
|
|
4
|
+
import { cx as $ } from "../../../utils/styles.js";
|
|
5
|
+
const G = {
|
|
6
|
+
sm: "400px",
|
|
7
|
+
md: "500px",
|
|
8
|
+
lg: "640px",
|
|
9
|
+
xl: "800px",
|
|
10
|
+
full: "calc(100vw - 48px)"
|
|
11
|
+
}, J = F(function() {
|
|
12
|
+
return /* @__PURE__ */ t("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ t(
|
|
13
|
+
"path",
|
|
14
|
+
{
|
|
15
|
+
d: "M4 4L12 12M12 4L4 12",
|
|
16
|
+
stroke: "currentColor",
|
|
17
|
+
strokeWidth: "1.5",
|
|
18
|
+
strokeLinecap: "round"
|
|
19
|
+
}
|
|
20
|
+
) });
|
|
21
|
+
}), Q = B(function({
|
|
22
|
+
isOpen: r,
|
|
23
|
+
onClose: n,
|
|
24
|
+
size: a = "md",
|
|
25
|
+
title: l,
|
|
26
|
+
description: d,
|
|
27
|
+
closeOnOverlayClick: f = !0,
|
|
28
|
+
closeOnEscape: b = !0,
|
|
29
|
+
showCloseButton: v = !0,
|
|
30
|
+
className: C,
|
|
31
|
+
style: k,
|
|
32
|
+
testId: M,
|
|
33
|
+
children: L,
|
|
34
|
+
...I
|
|
35
|
+
}, c) {
|
|
36
|
+
const g = y(null), i = y(null), s = y(!1);
|
|
37
|
+
w(() => {
|
|
38
|
+
r && !s.current ? (i.current = document.activeElement, s.current = !0) : !r && s.current && (document.activeElement instanceof HTMLElement && document.activeElement.blur(), i.current?.focus(), i.current = null, s.current = !1);
|
|
39
|
+
}, [r]), w(() => {
|
|
40
|
+
if (!r) return;
|
|
41
|
+
const e = g.current;
|
|
42
|
+
e && e.focus();
|
|
43
|
+
const h = (o) => {
|
|
44
|
+
if (o.key === "Escape" && b) {
|
|
45
|
+
n();
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (o.key === "Tab" && e) {
|
|
49
|
+
const u = e.querySelectorAll(
|
|
50
|
+
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
|
51
|
+
), p = u[0], x = u[u.length - 1];
|
|
52
|
+
o.shiftKey && document.activeElement === p ? (o.preventDefault(), x?.focus()) : !o.shiftKey && document.activeElement === x && (o.preventDefault(), p?.focus());
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
return document.addEventListener("keydown", h), document.body.style.overflow = "hidden", () => {
|
|
56
|
+
document.removeEventListener("keydown", h), document.body.style.overflow = "";
|
|
57
|
+
};
|
|
58
|
+
}, [r, b, n]);
|
|
59
|
+
const T = q(
|
|
60
|
+
(e) => {
|
|
61
|
+
e.target === e.currentTarget && f && n();
|
|
62
|
+
},
|
|
63
|
+
[f, n]
|
|
64
|
+
), N = E(() => ({
|
|
65
|
+
position: "fixed",
|
|
66
|
+
inset: 0,
|
|
67
|
+
zIndex: "var(--brycks-z-modal)",
|
|
68
|
+
display: "flex",
|
|
69
|
+
alignItems: "center",
|
|
70
|
+
justifyContent: "center",
|
|
71
|
+
padding: 24,
|
|
72
|
+
backgroundColor: "var(--brycks-background-overlay)",
|
|
73
|
+
backdropFilter: "blur(4px)",
|
|
74
|
+
animation: "brycks-fade-in var(--brycks-duration-normal) var(--brycks-ease-out)"
|
|
75
|
+
}), []), j = E(() => ({
|
|
76
|
+
position: "relative",
|
|
77
|
+
width: "100%",
|
|
78
|
+
maxWidth: G[a],
|
|
79
|
+
maxHeight: a === "full" ? "calc(100vh - 48px)" : "85vh",
|
|
80
|
+
backgroundColor: "var(--brycks-background-elevated)",
|
|
81
|
+
borderRadius: "var(--brycks-radius-xl)",
|
|
82
|
+
boxShadow: "var(--brycks-shadow-2xl)",
|
|
83
|
+
display: "flex",
|
|
84
|
+
flexDirection: "column",
|
|
85
|
+
overflow: "hidden",
|
|
86
|
+
animation: "brycks-scale-in var(--brycks-duration-normal) var(--brycks-ease-spring)",
|
|
87
|
+
outline: "none",
|
|
88
|
+
...k
|
|
89
|
+
}), [a, k]);
|
|
90
|
+
if (!r) return null;
|
|
91
|
+
const D = {
|
|
92
|
+
display: "flex",
|
|
93
|
+
alignItems: "flex-start",
|
|
94
|
+
justifyContent: "space-between",
|
|
95
|
+
padding: "20px 24px",
|
|
96
|
+
borderBottom: "1px solid var(--brycks-border-muted)"
|
|
97
|
+
}, R = {
|
|
98
|
+
display: "flex",
|
|
99
|
+
flexDirection: "column",
|
|
100
|
+
gap: 4
|
|
101
|
+
}, W = {
|
|
102
|
+
fontSize: 18,
|
|
103
|
+
fontWeight: 600,
|
|
104
|
+
color: "var(--brycks-foreground-default)",
|
|
105
|
+
margin: 0,
|
|
106
|
+
lineHeight: 1.3
|
|
107
|
+
}, H = {
|
|
108
|
+
fontSize: 14,
|
|
109
|
+
color: "var(--brycks-foreground-muted)",
|
|
110
|
+
margin: 0
|
|
111
|
+
}, K = {
|
|
112
|
+
display: "flex",
|
|
113
|
+
alignItems: "center",
|
|
114
|
+
justifyContent: "center",
|
|
115
|
+
width: 32,
|
|
116
|
+
height: 32,
|
|
117
|
+
borderRadius: "var(--brycks-radius-md)",
|
|
118
|
+
color: "var(--brycks-foreground-muted)",
|
|
119
|
+
transition: "all var(--brycks-duration-fast) var(--brycks-ease-out)",
|
|
120
|
+
marginLeft: 12,
|
|
121
|
+
flexShrink: 0
|
|
122
|
+
}, z = {
|
|
123
|
+
flex: 1,
|
|
124
|
+
overflow: "auto",
|
|
125
|
+
padding: 24
|
|
126
|
+
}, A = /* @__PURE__ */ t(
|
|
127
|
+
"div",
|
|
128
|
+
{
|
|
129
|
+
className: "brycks-modal-overlay",
|
|
130
|
+
style: N,
|
|
131
|
+
onClick: T,
|
|
132
|
+
children: /* @__PURE__ */ m(
|
|
133
|
+
"div",
|
|
134
|
+
{
|
|
135
|
+
ref: (e) => {
|
|
136
|
+
g.current = e, typeof c == "function" ? c(e) : c && (c.current = e);
|
|
137
|
+
},
|
|
138
|
+
role: "dialog",
|
|
139
|
+
"aria-modal": "true",
|
|
140
|
+
"aria-labelledby": l ? "brycks-modal-title" : void 0,
|
|
141
|
+
"aria-describedby": d ? "brycks-modal-description" : void 0,
|
|
142
|
+
className: $("brycks-modal", `brycks-modal--${a}`, C),
|
|
143
|
+
style: j,
|
|
144
|
+
tabIndex: -1,
|
|
145
|
+
"data-testid": M,
|
|
146
|
+
...I,
|
|
147
|
+
children: [
|
|
148
|
+
(l || v) && /* @__PURE__ */ m("div", { className: "brycks-modal-header", style: D, children: [
|
|
149
|
+
/* @__PURE__ */ m("div", { style: R, children: [
|
|
150
|
+
l && /* @__PURE__ */ t("h2", { id: "brycks-modal-title", style: W, children: l }),
|
|
151
|
+
d && /* @__PURE__ */ t("p", { id: "brycks-modal-description", style: H, children: d })
|
|
152
|
+
] }),
|
|
153
|
+
v && /* @__PURE__ */ t(
|
|
154
|
+
"button",
|
|
155
|
+
{
|
|
156
|
+
type: "button",
|
|
157
|
+
className: "brycks-modal-close",
|
|
158
|
+
style: K,
|
|
159
|
+
onClick: n,
|
|
160
|
+
"aria-label": "Close modal",
|
|
161
|
+
onMouseEnter: (e) => {
|
|
162
|
+
e.currentTarget.style.backgroundColor = "var(--brycks-background-muted)", e.currentTarget.style.color = "var(--brycks-foreground-default)";
|
|
163
|
+
},
|
|
164
|
+
onMouseLeave: (e) => {
|
|
165
|
+
e.currentTarget.style.backgroundColor = "transparent", e.currentTarget.style.color = "var(--brycks-foreground-muted)";
|
|
166
|
+
},
|
|
167
|
+
children: /* @__PURE__ */ t(J, {})
|
|
168
|
+
}
|
|
169
|
+
)
|
|
170
|
+
] }),
|
|
171
|
+
/* @__PURE__ */ t("div", { className: "brycks-modal-content", style: z, children: L })
|
|
172
|
+
]
|
|
173
|
+
}
|
|
174
|
+
)
|
|
175
|
+
}
|
|
176
|
+
);
|
|
177
|
+
return P(A, document.body);
|
|
178
|
+
});
|
|
179
|
+
Q.displayName = "Modal";
|
|
180
|
+
export {
|
|
181
|
+
Q as Modal
|
|
182
|
+
};
|
|
183
|
+
//# sourceMappingURL=Modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../../../src/components/feedback/Modal/Modal.tsx"],"sourcesContent":["/**\r\n * Modal Component\r\n *\r\n * Accessible modal dialog with smooth Apple-inspired animations.\r\n * Supports focus trapping and keyboard navigation.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useEffect,\r\n useRef,\r\n useCallback,\r\n useMemo,\r\n memo,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { createPortal } from 'react-dom'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\r\n\r\nexport interface ModalProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Whether the modal is open */\r\n isOpen: boolean\r\n /** Callback when modal should close */\r\n onClose: () => void\r\n /** Modal size */\r\n size?: ModalSize\r\n /** Modal title */\r\n title?: ReactNode\r\n /** Modal description */\r\n description?: ReactNode\r\n /** Whether to close on overlay click */\r\n closeOnOverlayClick?: boolean\r\n /** Whether to close on escape key */\r\n closeOnEscape?: boolean\r\n /** Whether to show close button */\r\n showCloseButton?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Modal content */\r\n children?: ReactNode\r\n}\r\n\r\nconst sizeWidths: Record<ModalSize, string> = {\r\n sm: '400px',\r\n md: '500px',\r\n lg: '640px',\r\n xl: '800px',\r\n full: 'calc(100vw - 48px)',\r\n}\r\n\r\n/** Close icon - memoized to prevent re-renders */\r\nconst CloseIcon = memo(function CloseIcon() {\r\n return (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\r\n <path\r\n d=\"M4 4L12 12M12 4L4 12\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n )\r\n})\r\n\r\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(function Modal(\r\n {\r\n isOpen,\r\n onClose,\r\n size = 'md',\r\n title,\r\n description,\r\n closeOnOverlayClick = true,\r\n closeOnEscape = true,\r\n showCloseButton = true,\r\n className,\r\n style,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const modalRef = useRef<HTMLDivElement>(null)\r\n const previousActiveElement = useRef<HTMLElement | null>(null)\r\n const wasOpen = useRef(false)\r\n\r\n // Track previous open state to handle focus restoration before unmount\r\n useEffect(() => {\r\n // Modal just opened\r\n if (isOpen && !wasOpen.current) {\r\n previousActiveElement.current = document.activeElement as HTMLElement\r\n wasOpen.current = true\r\n }\r\n // Modal is about to close - restore focus BEFORE unmount\r\n else if (!isOpen && wasOpen.current) {\r\n // Blur any focused element inside modal to prevent aria-hidden warning\r\n if (document.activeElement instanceof HTMLElement) {\r\n document.activeElement.blur()\r\n }\r\n // Restore focus to previous element\r\n previousActiveElement.current?.focus()\r\n previousActiveElement.current = null\r\n wasOpen.current = false\r\n }\r\n }, [isOpen])\r\n\r\n // Focus trap and keyboard handling\r\n useEffect(() => {\r\n if (!isOpen) return\r\n\r\n const modal = modalRef.current\r\n if (modal) {\r\n modal.focus()\r\n }\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape' && closeOnEscape) {\r\n onClose()\r\n return\r\n }\r\n\r\n if (e.key === 'Tab' && modal) {\r\n const focusableElements = modal.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n )\r\n const firstElement = focusableElements[0]\r\n const lastElement = focusableElements[focusableElements.length - 1]\r\n\r\n if (e.shiftKey && document.activeElement === firstElement) {\r\n e.preventDefault()\r\n lastElement?.focus()\r\n } else if (!e.shiftKey && document.activeElement === lastElement) {\r\n e.preventDefault()\r\n firstElement?.focus()\r\n }\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyDown)\r\n document.body.style.overflow = 'hidden'\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleKeyDown)\r\n document.body.style.overflow = ''\r\n }\r\n }, [isOpen, closeOnEscape, onClose])\r\n\r\n const handleOverlayClick = useCallback(\r\n (e: React.MouseEvent) => {\r\n if (e.target === e.currentTarget && closeOnOverlayClick) {\r\n onClose()\r\n }\r\n },\r\n [closeOnOverlayClick, onClose]\r\n )\r\n\r\n // Memoize styles to prevent object recreation on every render\r\n const overlayStyle = useMemo<CSSProperties>(() => ({\r\n position: 'fixed',\r\n inset: 0,\r\n zIndex: 'var(--brycks-z-modal)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: 24,\r\n backgroundColor: 'var(--brycks-background-overlay)',\r\n backdropFilter: 'blur(4px)',\r\n animation: 'brycks-fade-in var(--brycks-duration-normal) var(--brycks-ease-out)',\r\n }), [])\r\n\r\n const modalStyle = useMemo<CSSProperties>(() => ({\r\n position: 'relative',\r\n width: '100%',\r\n maxWidth: sizeWidths[size],\r\n maxHeight: size === 'full' ? 'calc(100vh - 48px)' : '85vh',\r\n backgroundColor: 'var(--brycks-background-elevated)',\r\n borderRadius: 'var(--brycks-radius-xl)',\r\n boxShadow: 'var(--brycks-shadow-2xl)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden',\r\n animation: 'brycks-scale-in var(--brycks-duration-normal) var(--brycks-ease-spring)',\r\n outline: 'none',\r\n ...style,\r\n }), [size, style])\r\n\r\n if (!isOpen) return null\r\n\r\n const headerStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n justifyContent: 'space-between',\r\n padding: '20px 24px',\r\n borderBottom: '1px solid var(--brycks-border-muted)',\r\n }\r\n\r\n const titleContainerStyle: CSSProperties = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 4,\r\n }\r\n\r\n const titleStyle: CSSProperties = {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n color: 'var(--brycks-foreground-default)',\r\n margin: 0,\r\n lineHeight: 1.3,\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: 14,\r\n color: 'var(--brycks-foreground-muted)',\r\n margin: 0,\r\n }\r\n\r\n const closeButtonStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: 32,\r\n height: 32,\r\n borderRadius: 'var(--brycks-radius-md)',\r\n color: 'var(--brycks-foreground-muted)',\r\n transition: 'all var(--brycks-duration-fast) var(--brycks-ease-out)',\r\n marginLeft: 12,\r\n flexShrink: 0,\r\n }\r\n\r\n const contentStyle: CSSProperties = {\r\n flex: 1,\r\n overflow: 'auto',\r\n padding: 24,\r\n }\r\n\r\n const modalContent = (\r\n <div\r\n className=\"brycks-modal-overlay\"\r\n style={overlayStyle}\r\n onClick={handleOverlayClick}\r\n >\r\n <div\r\n ref={(node) => {\r\n (modalRef as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n if (typeof ref === 'function') ref(node)\r\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n }}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={title ? 'brycks-modal-title' : undefined}\r\n aria-describedby={description ? 'brycks-modal-description' : undefined}\r\n className={cx('brycks-modal', `brycks-modal--${size}`, className)}\r\n style={modalStyle}\r\n tabIndex={-1}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {(title || showCloseButton) && (\r\n <div className=\"brycks-modal-header\" style={headerStyle}>\r\n <div style={titleContainerStyle}>\r\n {title && (\r\n <h2 id=\"brycks-modal-title\" style={titleStyle}>\r\n {title}\r\n </h2>\r\n )}\r\n {description && (\r\n <p id=\"brycks-modal-description\" style={descriptionStyle}>\r\n {description}\r\n </p>\r\n )}\r\n </div>\r\n {showCloseButton && (\r\n <button\r\n type=\"button\"\r\n className=\"brycks-modal-close\"\r\n style={closeButtonStyle}\r\n onClick={onClose}\r\n aria-label=\"Close modal\"\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\r\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent'\r\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\r\n }}\r\n >\r\n <CloseIcon />\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n <div className=\"brycks-modal-content\" style={contentStyle}>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n\r\n return createPortal(modalContent, document.body)\r\n})\r\n\r\nModal.displayName = 'Modal'\r\n"],"names":["sizeWidths","CloseIcon","memo","jsx","Modal","forwardRef","isOpen","onClose","size","title","description","closeOnOverlayClick","closeOnEscape","showCloseButton","className","style","testId","children","props","ref","modalRef","useRef","previousActiveElement","wasOpen","useEffect","modal","handleKeyDown","e","focusableElements","firstElement","lastElement","handleOverlayClick","useCallback","overlayStyle","useMemo","modalStyle","headerStyle","titleContainerStyle","titleStyle","descriptionStyle","closeButtonStyle","contentStyle","modalContent","jsxs","node","cx","createPortal"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),t=require("react"),V=require("react-dom"),Z=require("../../../utils/styles.cjs"),$=require("../../../hooks/useClickOutside.cjs"),D=require("../../../hooks/useMediaQuery.cjs"),q=t.forwardRef(function({content:I,children:C,placement:w="bottom",trigger:r="click",isOpen:y,defaultOpen:z=!1,onOpenChange:E,offset:u=8,openDelay:M=200,closeDelay:x=200,closeOnOutsideClick:A=!0,showArrow:te=!0,className:B,style:F,testId:N,...X},h){const[Y,Q]=t.useState(z),[P,W]=t.useState({top:0,left:0}),[v,T]=t.useState(!1),R=t.useRef(null),L=t.useRef(null),d=t.useRef(null),f=t.useRef(null),O=t.useId(),_=D.usePrefersReducedMotion(),s=y??Y,n=t.useCallback(e=>{y===void 0&&Q(e),E?.(e)},[y,E]),G=$.useClickOutside(()=>{A&&r==="click"&&s&&n(!1)},{enabled:s&&r==="click"});t.useEffect(()=>(T(!0),()=>T(!1)),[]),t.useEffect(()=>{if(!s||!R.current||!v)return;const e=()=>{const S=R.current,j=L.current;if(!S||!j)return;const o=S.getBoundingClientRect(),c=j.getBoundingClientRect(),p=window.scrollX,b=window.scrollY;let a=0,i=0;switch(w){case"top":case"top-start":case"top-end":a=o.top+b-c.height-u;break;case"bottom":case"bottom-start":case"bottom-end":a=o.bottom+b+u;break;case"left":case"left-start":case"left-end":i=o.left+p-c.width-u;break;case"right":case"right-start":case"right-end":i=o.right+p+u;break}switch(w){case"top":case"bottom":i=o.left+p+(o.width-c.width)/2;break;case"top-start":case"bottom-start":i=o.left+p;break;case"top-end":case"bottom-end":i=o.right+p-c.width;break;case"left":case"right":a=o.top+b+(o.height-c.height)/2;break;case"left-start":case"right-start":a=o.top+b;break;case"left-end":case"right-end":a=o.bottom+b-c.height;break}W({top:a,left:i})};return e(),window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),()=>{window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0)}},[s,w,u,v]),t.useEffect(()=>()=>{d.current&&clearTimeout(d.current),f.current&&clearTimeout(f.current)},[]);const m=t.useCallback(()=>{f.current&&clearTimeout(f.current),r==="hover"?d.current=setTimeout(()=>n(!0),M):n(!0)},[r,M,n]),k=t.useCallback(()=>{d.current&&clearTimeout(d.current),r==="hover"?f.current=setTimeout(()=>n(!1),x):n(!1)},[r,x,n]),H=t.useCallback(()=>{s?k():m()},[s,m,k]),g=C.props,J=t.cloneElement(C,{ref:R,"aria-expanded":s,"aria-haspopup":"dialog","aria-controls":s?O:void 0,...r==="click"&&{onClick:e=>{g.onClick?.(e),H()}},...r==="hover"&&{onMouseEnter:e=>{g.onMouseEnter?.(e),m()},onMouseLeave:e=>{g.onMouseLeave?.(e),k()}}}),K={position:"absolute",top:P.top,left:P.left,zIndex:"var(--brycks-z-popover)",backgroundColor:"var(--brycks-background-elevated)",border:"1px solid var(--brycks-border-default)",borderRadius:"var(--brycks-radius-lg)",boxShadow:"var(--brycks-shadow-lg)",padding:"var(--brycks-space-3)",minWidth:120,animation:_?"none":"brycks-popover-in 150ms ease-out",...F},U=s&&v&&l.jsxs(l.Fragment,{children:[l.jsx("style",{children:`
|
|
2
|
+
@keyframes brycks-popover-in {
|
|
3
|
+
from { opacity: 0; transform: scale(0.95); }
|
|
4
|
+
to { opacity: 1; transform: scale(1); }
|
|
5
|
+
}
|
|
6
|
+
`}),l.jsx("div",{ref:e=>{L.current=e,G.current=e,typeof h=="function"?h(e):h&&(h.current=e)},id:O,className:Z.cx("brycks-popover",B),style:K,role:"dialog","aria-modal":"false","data-testid":N,onMouseEnter:r==="hover"?m:void 0,onMouseLeave:r==="hover"?k:void 0,...X,children:I})]});return l.jsxs(l.Fragment,{children:[J,v&&V.createPortal(U,document.body)]})});q.displayName="Popover";exports.Popover=q;
|
|
7
|
+
//# sourceMappingURL=Popover.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.cjs","sources":["../../../../src/components/feedback/Popover/Popover.tsx"],"sourcesContent":["/**\n * Popover Component\n *\n * A floating content panel that appears relative to a trigger element.\n * Supports different placements and can be triggered by click or hover.\n */\n\nimport React, {\n forwardRef,\n useState,\n useEffect,\n useRef,\n useCallback,\n cloneElement,\n useId,\n type CSSProperties,\n type ReactNode,\n type ReactElement,\n type HTMLAttributes,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\nimport { useClickOutside } from '../../../hooks/useClickOutside'\nimport { usePrefersReducedMotion } from '../../../hooks/useMediaQuery'\n\nexport type PopoverPlacement =\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n\nexport type PopoverTrigger = 'click' | 'hover'\n\nexport interface PopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'content'> {\n /** Popover content */\n content: ReactNode\n /** Trigger element */\n children: ReactElement\n /** Placement relative to trigger */\n placement?: PopoverPlacement\n /** How to trigger the popover */\n trigger?: PopoverTrigger\n /** Whether the popover is open (controlled) */\n isOpen?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Callback when open state changes */\n onOpenChange?: (isOpen: boolean) => void\n /** Offset from trigger in pixels */\n offset?: number\n /** Delay before showing (hover trigger) */\n openDelay?: number\n /** Delay before hiding (hover trigger) */\n closeDelay?: number\n /** Whether to close on outside click */\n closeOnOutsideClick?: boolean\n /** Whether to show arrow */\n showArrow?: boolean\n /** Custom class name for content */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(function Popover(\n {\n content,\n children,\n placement = 'bottom',\n trigger = 'click',\n isOpen: controlledIsOpen,\n defaultOpen = false,\n onOpenChange,\n offset = 8,\n openDelay = 200,\n closeDelay = 200,\n closeOnOutsideClick = true,\n showArrow: _showArrow = true,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [internalIsOpen, setInternalIsOpen] = useState(defaultOpen)\n const [position, setPosition] = useState({ top: 0, left: 0 })\n const [mounted, setMounted] = useState(false)\n const triggerRef = useRef<HTMLElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const openTimeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n const popoverId = useId()\n const prefersReducedMotion = usePrefersReducedMotion()\n\n const isOpen = controlledIsOpen ?? internalIsOpen\n\n const setIsOpen = useCallback(\n (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open)\n }\n onOpenChange?.(open)\n },\n [controlledIsOpen, onOpenChange]\n )\n\n // Click outside handler\n const clickOutsideRef = useClickOutside<HTMLDivElement>(() => {\n if (closeOnOutsideClick && trigger === 'click' && isOpen) {\n setIsOpen(false)\n }\n }, { enabled: isOpen && trigger === 'click' })\n\n useEffect(() => {\n setMounted(true)\n return () => setMounted(false)\n }, [])\n\n // Calculate position\n useEffect(() => {\n if (!isOpen || !triggerRef.current || !mounted) return\n\n const updatePosition = () => {\n const trigger = triggerRef.current\n const content = contentRef.current\n if (!trigger || !content) return\n\n const triggerRect = trigger.getBoundingClientRect()\n const contentRect = content.getBoundingClientRect()\n const scrollX = window.scrollX\n const scrollY = window.scrollY\n\n let top = 0\n let left = 0\n\n // Calculate base position\n switch (placement) {\n case 'top':\n case 'top-start':\n case 'top-end':\n top = triggerRect.top + scrollY - contentRect.height - offset\n break\n case 'bottom':\n case 'bottom-start':\n case 'bottom-end':\n top = triggerRect.bottom + scrollY + offset\n break\n case 'left':\n case 'left-start':\n case 'left-end':\n left = triggerRect.left + scrollX - contentRect.width - offset\n break\n case 'right':\n case 'right-start':\n case 'right-end':\n left = triggerRect.right + scrollX + offset\n break\n }\n\n // Calculate alignment\n switch (placement) {\n case 'top':\n case 'bottom':\n left = triggerRect.left + scrollX + (triggerRect.width - contentRect.width) / 2\n break\n case 'top-start':\n case 'bottom-start':\n left = triggerRect.left + scrollX\n break\n case 'top-end':\n case 'bottom-end':\n left = triggerRect.right + scrollX - contentRect.width\n break\n case 'left':\n case 'right':\n top = triggerRect.top + scrollY + (triggerRect.height - contentRect.height) / 2\n break\n case 'left-start':\n case 'right-start':\n top = triggerRect.top + scrollY\n break\n case 'left-end':\n case 'right-end':\n top = triggerRect.bottom + scrollY - contentRect.height\n break\n }\n\n setPosition({ top, left })\n }\n\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition, true)\n\n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition, true)\n }\n }, [isOpen, placement, offset, mounted])\n\n // Cleanup timeouts\n useEffect(() => {\n return () => {\n if (openTimeoutRef.current) clearTimeout(openTimeoutRef.current)\n if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current)\n }\n }, [])\n\n const handleOpen = useCallback(() => {\n if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current)\n if (trigger === 'hover') {\n openTimeoutRef.current = setTimeout(() => setIsOpen(true), openDelay)\n } else {\n setIsOpen(true)\n }\n }, [trigger, openDelay, setIsOpen])\n\n const handleClose = useCallback(() => {\n if (openTimeoutRef.current) clearTimeout(openTimeoutRef.current)\n if (trigger === 'hover') {\n closeTimeoutRef.current = setTimeout(() => setIsOpen(false), closeDelay)\n } else {\n setIsOpen(false)\n }\n }, [trigger, closeDelay, setIsOpen])\n\n const handleToggle = useCallback(() => {\n if (isOpen) {\n handleClose()\n } else {\n handleOpen()\n }\n }, [isOpen, handleOpen, handleClose])\n\n // Clone trigger with event handlers and ARIA attributes\n const childProps = children.props as Record<string, unknown>\n const triggerElement = cloneElement(children as ReactElement<Record<string, unknown>>, {\n ref: triggerRef,\n 'aria-expanded': isOpen,\n 'aria-haspopup': 'dialog',\n 'aria-controls': isOpen ? popoverId : undefined,\n ...(trigger === 'click' && {\n onClick: (e: React.MouseEvent) => {\n (childProps.onClick as ((e: React.MouseEvent) => void) | undefined)?.(e)\n handleToggle()\n },\n }),\n ...(trigger === 'hover' && {\n onMouseEnter: (e: React.MouseEvent) => {\n (childProps.onMouseEnter as ((e: React.MouseEvent) => void) | undefined)?.(e)\n handleOpen()\n },\n onMouseLeave: (e: React.MouseEvent) => {\n (childProps.onMouseLeave as ((e: React.MouseEvent) => void) | undefined)?.(e)\n handleClose()\n },\n }),\n })\n\n const contentStyle: CSSProperties = {\n position: 'absolute',\n top: position.top,\n left: position.left,\n zIndex: 'var(--brycks-z-popover)',\n backgroundColor: 'var(--brycks-background-elevated)',\n border: '1px solid var(--brycks-border-default)',\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n padding: 'var(--brycks-space-3)',\n minWidth: 120,\n animation: prefersReducedMotion ? 'none' : 'brycks-popover-in 150ms ease-out',\n ...style,\n }\n\n const popoverContent = isOpen && mounted && (\n <>\n <style>\n {`\n @keyframes brycks-popover-in {\n from { opacity: 0; transform: scale(0.95); }\n to { opacity: 1; transform: scale(1); }\n }\n `}\n </style>\n <div\n ref={(node) => {\n (contentRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n (clickOutsideRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n id={popoverId}\n className={cx('brycks-popover', className)}\n style={contentStyle}\n role=\"dialog\"\n aria-modal=\"false\"\n data-testid={testId}\n onMouseEnter={trigger === 'hover' ? handleOpen : undefined}\n onMouseLeave={trigger === 'hover' ? handleClose : undefined}\n {...props}\n >\n {content}\n </div>\n </>\n )\n\n return (\n <>\n {triggerElement}\n {mounted && createPortal(popoverContent, document.body)}\n </>\n )\n})\n\nPopover.displayName = 'Popover'\n"],"names":["Popover","forwardRef","content","children","placement","trigger","controlledIsOpen","defaultOpen","onOpenChange","offset","openDelay","closeDelay","closeOnOutsideClick","_showArrow","className","style","testId","props","ref","internalIsOpen","setInternalIsOpen","useState","position","setPosition","mounted","setMounted","triggerRef","useRef","contentRef","openTimeoutRef","closeTimeoutRef","popoverId","useId","prefersReducedMotion","usePrefersReducedMotion","isOpen","setIsOpen","useCallback","open","clickOutsideRef","useClickOutside","useEffect","updatePosition","triggerRect","contentRect","scrollX","scrollY","top","left","handleOpen","handleClose","handleToggle","childProps","triggerElement","cloneElement","contentStyle","popoverContent","jsxs","Fragment","jsx","node","cx","createPortal"],"mappings":"oSAwEaA,EAAUC,EAAAA,WAAyC,SAC9D,CACE,QAAAC,EACA,SAAAC,EACA,UAAAC,EAAY,SACZ,QAAAC,EAAU,QACV,OAAQC,EACR,YAAAC,EAAc,GACd,aAAAC,EACA,OAAAC,EAAS,EACT,UAAAC,EAAY,IACZ,WAAAC,EAAa,IACb,oBAAAC,EAAsB,GACtB,UAAWC,GAAa,GACxB,UAAAC,EACA,MAAAC,EACA,OAAAC,EACA,GAAGC,CACL,EACAC,EACA,CACA,KAAM,CAACC,EAAgBC,CAAiB,EAAIC,EAAAA,SAASd,CAAW,EAC1D,CAACe,EAAUC,CAAW,EAAIF,EAAAA,SAAS,CAAE,IAAK,EAAG,KAAM,EAAG,EACtD,CAACG,EAASC,CAAU,EAAIJ,EAAAA,SAAS,EAAK,EACtCK,EAAaC,EAAAA,OAAoB,IAAI,EACrCC,EAAaD,EAAAA,OAAuB,IAAI,EACxCE,EAAiBF,EAAAA,OAAsC,IAAI,EAC3DG,EAAkBH,EAAAA,OAAsC,IAAI,EAC5DI,EAAYC,EAAAA,MAAA,EACZC,EAAuBC,EAAAA,wBAAA,EAEvBC,EAAS7B,GAAoBa,EAE7BiB,EAAYC,EAAAA,YACfC,GAAkB,CACbhC,IAAqB,QACvBc,EAAkBkB,CAAI,EAExB9B,IAAe8B,CAAI,CACrB,EACA,CAAChC,EAAkBE,CAAY,CAAA,EAI3B+B,EAAkBC,EAAAA,gBAAgC,IAAM,CACxD5B,GAAuBP,IAAY,SAAW8B,GAChDC,EAAU,EAAK,CAEnB,EAAG,CAAE,QAASD,GAAU9B,IAAY,QAAS,EAE7CoC,EAAAA,UAAU,KACRhB,EAAW,EAAI,EACR,IAAMA,EAAW,EAAK,GAC5B,CAAA,CAAE,EAGLgB,EAAAA,UAAU,IAAM,CACd,GAAI,CAACN,GAAU,CAACT,EAAW,SAAW,CAACF,EAAS,OAEhD,MAAMkB,EAAiB,IAAM,CAC3B,MAAMrC,EAAUqB,EAAW,QACrBxB,EAAU0B,EAAW,QAC3B,GAAI,CAACvB,GAAW,CAACH,EAAS,OAE1B,MAAMyC,EAActC,EAAQ,sBAAA,EACtBuC,EAAc1C,EAAQ,sBAAA,EACtB2C,EAAU,OAAO,QACjBC,EAAU,OAAO,QAEvB,IAAIC,EAAM,EACNC,EAAO,EAGX,OAAQ5C,EAAA,CACN,IAAK,MACL,IAAK,YACL,IAAK,UACH2C,EAAMJ,EAAY,IAAMG,EAAUF,EAAY,OAASnC,EACvD,MACF,IAAK,SACL,IAAK,eACL,IAAK,aACHsC,EAAMJ,EAAY,OAASG,EAAUrC,EACrC,MACF,IAAK,OACL,IAAK,aACL,IAAK,WACHuC,EAAOL,EAAY,KAAOE,EAAUD,EAAY,MAAQnC,EACxD,MACF,IAAK,QACL,IAAK,cACL,IAAK,YACHuC,EAAOL,EAAY,MAAQE,EAAUpC,EACrC,KAAA,CAIJ,OAAQL,EAAA,CACN,IAAK,MACL,IAAK,SACH4C,EAAOL,EAAY,KAAOE,GAAWF,EAAY,MAAQC,EAAY,OAAS,EAC9E,MACF,IAAK,YACL,IAAK,eACHI,EAAOL,EAAY,KAAOE,EAC1B,MACF,IAAK,UACL,IAAK,aACHG,EAAOL,EAAY,MAAQE,EAAUD,EAAY,MACjD,MACF,IAAK,OACL,IAAK,QACHG,EAAMJ,EAAY,IAAMG,GAAWH,EAAY,OAASC,EAAY,QAAU,EAC9E,MACF,IAAK,aACL,IAAK,cACHG,EAAMJ,EAAY,IAAMG,EACxB,MACF,IAAK,WACL,IAAK,YACHC,EAAMJ,EAAY,OAASG,EAAUF,EAAY,OACjD,KAAA,CAGJrB,EAAY,CAAE,IAAAwB,EAAK,KAAAC,EAAM,CAC3B,EAEA,OAAAN,EAAA,EACA,OAAO,iBAAiB,SAAUA,CAAc,EAChD,OAAO,iBAAiB,SAAUA,EAAgB,EAAI,EAE/C,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAc,EACnD,OAAO,oBAAoB,SAAUA,EAAgB,EAAI,CAC3D,CACF,EAAG,CAACP,EAAQ/B,EAAWK,EAAQe,CAAO,CAAC,EAGvCiB,EAAAA,UAAU,IACD,IAAM,CACPZ,EAAe,SAAS,aAAaA,EAAe,OAAO,EAC3DC,EAAgB,SAAS,aAAaA,EAAgB,OAAO,CACnE,EACC,CAAA,CAAE,EAEL,MAAMmB,EAAaZ,EAAAA,YAAY,IAAM,CAC/BP,EAAgB,SAAS,aAAaA,EAAgB,OAAO,EAC7DzB,IAAY,QACdwB,EAAe,QAAU,WAAW,IAAMO,EAAU,EAAI,EAAG1B,CAAS,EAEpE0B,EAAU,EAAI,CAElB,EAAG,CAAC/B,EAASK,EAAW0B,CAAS,CAAC,EAE5Bc,EAAcb,EAAAA,YAAY,IAAM,CAChCR,EAAe,SAAS,aAAaA,EAAe,OAAO,EAC3DxB,IAAY,QACdyB,EAAgB,QAAU,WAAW,IAAMM,EAAU,EAAK,EAAGzB,CAAU,EAEvEyB,EAAU,EAAK,CAEnB,EAAG,CAAC/B,EAASM,EAAYyB,CAAS,CAAC,EAE7Be,EAAed,EAAAA,YAAY,IAAM,CACjCF,EACFe,EAAA,EAEAD,EAAA,CAEJ,EAAG,CAACd,EAAQc,EAAYC,CAAW,CAAC,EAG9BE,EAAajD,EAAS,MACtBkD,EAAiBC,EAAAA,aAAanD,EAAmD,CACrF,IAAKuB,EACL,gBAAiBS,EACjB,gBAAiB,SACjB,gBAAiBA,EAASJ,EAAY,OACtC,GAAI1B,IAAY,SAAW,CACzB,QAAU,GAAwB,CAC/B+C,EAAW,UAA0D,CAAC,EACvED,EAAA,CACF,CAAA,EAEF,GAAI9C,IAAY,SAAW,CACzB,aAAe,GAAwB,CACpC+C,EAAW,eAA+D,CAAC,EAC5EH,EAAA,CACF,EACA,aAAe,GAAwB,CACpCG,EAAW,eAA+D,CAAC,EAC5EF,EAAA,CACF,CAAA,CACF,CACD,EAEKK,EAA8B,CAClC,SAAU,WACV,IAAKjC,EAAS,IACd,KAAMA,EAAS,KACf,OAAQ,0BACR,gBAAiB,oCACjB,OAAQ,yCACR,aAAc,0BACd,UAAW,0BACX,QAAS,wBACT,SAAU,IACV,UAAWW,EAAuB,OAAS,mCAC3C,GAAGlB,CAAA,EAGCyC,EAAiBrB,GAAUX,GAC/BiC,EAAAA,KAAAC,EAAAA,SAAA,CACE,SAAA,CAAAC,MAAC,QAAA,CACE,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMH,EACAA,EAAAA,IAAC,MAAA,CACC,IAAMC,GAAS,CACZhC,EAA6D,QAAUgC,EACvErB,EAAkE,QAAUqB,EACzE,OAAO1C,GAAQ,WAAYA,EAAI0C,CAAI,EAC9B1C,MAAS,QAAU0C,EAC9B,EACA,GAAI7B,EACJ,UAAW8B,EAAAA,GAAG,iBAAkB/C,CAAS,EACzC,MAAOyC,EACP,KAAK,SACL,aAAW,QACX,cAAavC,EACb,aAAcX,IAAY,QAAU4C,EAAa,OACjD,aAAc5C,IAAY,QAAU6C,EAAc,OACjD,GAAGjC,EAEH,SAAAf,CAAA,CAAA,CACH,EACF,EAGF,OACEuD,EAAAA,KAAAC,WAAA,CACG,SAAA,CAAAL,EACA7B,GAAWsC,EAAAA,aAAaN,EAAgB,SAAS,IAAI,CAAA,EACxD,CAEJ,CAAC,EAEDxD,EAAQ,YAAc"}
|