@tosui/react 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Accordion/Accordion.d.ts.map +1 -1
- package/dist/components/Accordion/Accordion.js +109 -0
- package/dist/components/Accordion/Accordion.js.map +1 -0
- package/dist/components/Accordion/accordion.module.css +36 -0
- package/dist/components/Accordion/accordion.module.css.js +27 -0
- package/dist/components/Accordion/accordion.module.css.js.map +1 -0
- package/dist/components/Alert/Alert.js +109 -0
- package/dist/components/Alert/Alert.js.map +1 -0
- package/dist/components/Alert/alert.module.css +27 -0
- package/dist/components/Alert/alert.module.css.js +24 -0
- package/dist/components/Alert/alert.module.css.js.map +1 -0
- package/dist/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar/Avatar.js +72 -0
- package/dist/components/Avatar/Avatar.js.map +1 -0
- package/dist/components/Avatar/avatar.module.css +14 -0
- package/dist/components/Avatar/avatar.module.css.js +15 -0
- package/dist/components/Avatar/avatar.module.css.js.map +1 -0
- package/dist/components/Badge/Badge.js +66 -0
- package/dist/components/Badge/Badge.js.map +1 -0
- package/dist/components/Badge/badge.module.css +3 -0
- package/dist/components/Badge/badge.module.css.js +9 -0
- package/dist/components/Badge/badge.module.css.js.map +1 -0
- package/dist/components/Box/Box.js +217 -0
- package/dist/components/Box/Box.js.map +1 -0
- package/dist/components/Box/borders/borders.js +91 -0
- package/dist/components/Box/borders/borders.js.map +1 -0
- package/dist/components/Box/borders/borders.module.css +49 -0
- package/dist/components/Box/borders/borders.module.css.js +46 -0
- package/dist/components/Box/borders/borders.module.css.js.map +1 -0
- package/dist/components/Box/colors/colors.js +45 -0
- package/dist/components/Box/colors/colors.js.map +1 -0
- package/dist/components/Box/colors/colors.module.css +113 -0
- package/dist/components/Box/colors/colors.module.css.js +114 -0
- package/dist/components/Box/colors/colors.module.css.js.map +1 -0
- package/dist/components/Box/display/display.js +52 -0
- package/dist/components/Box/display/display.js.map +1 -0
- package/dist/components/Box/display/display.module.css +375 -0
- package/dist/components/Box/display/display.module.css.js +318 -0
- package/dist/components/Box/display/display.module.css.js.map +1 -0
- package/dist/components/Box/flexbox/flexbox.js +139 -0
- package/dist/components/Box/flexbox/flexbox.js.map +1 -0
- package/dist/components/Box/flexbox/flexbox.module.css +65 -0
- package/dist/components/Box/flexbox/flexbox.module.css.js +62 -0
- package/dist/components/Box/flexbox/flexbox.module.css.js.map +1 -0
- package/dist/components/Box/grid/grid.js +49 -0
- package/dist/components/Box/grid/grid.js.map +1 -0
- package/dist/components/Box/grid/grid.module.css +19 -0
- package/dist/components/Box/grid/grid.module.css.js +20 -0
- package/dist/components/Box/grid/grid.module.css.js.map +1 -0
- package/dist/components/Box/inset/inset.js +96 -0
- package/dist/components/Box/inset/inset.js.map +1 -0
- package/dist/components/Box/inset/inset.module.css +187 -0
- package/dist/components/Box/inset/inset.module.css.js +174 -0
- package/dist/components/Box/inset/inset.module.css.js.map +1 -0
- package/dist/components/Box/interactions/interactions.js +45 -0
- package/dist/components/Box/interactions/interactions.js.map +1 -0
- package/dist/components/Box/interactions/interactions.module.css +43 -0
- package/dist/components/Box/interactions/interactions.module.css.js +44 -0
- package/dist/components/Box/interactions/interactions.module.css.js.map +1 -0
- package/dist/components/Box/margin/margin.js +96 -0
- package/dist/components/Box/margin/margin.js.map +1 -0
- package/dist/components/Box/margin/margin.module.css +187 -0
- package/dist/components/Box/margin/margin.module.css.js +174 -0
- package/dist/components/Box/margin/margin.module.css.js.map +1 -0
- package/dist/components/Box/opacity/opacity.js +52 -0
- package/dist/components/Box/opacity/opacity.js.map +1 -0
- package/dist/components/Box/opacity/opacity.module.css +51 -0
- package/dist/components/Box/opacity/opacity.module.css.js +174 -0
- package/dist/components/Box/opacity/opacity.module.css.js.map +1 -0
- package/dist/components/Box/overflow/overflow.js +69 -0
- package/dist/components/Box/overflow/overflow.js.map +1 -0
- package/dist/components/Box/overflow/overflow.module.css +155 -0
- package/dist/components/Box/overflow/overflow.module.css.js +510 -0
- package/dist/components/Box/overflow/overflow.module.css.js.map +1 -0
- package/dist/components/Box/padding/padding.js +96 -0
- package/dist/components/Box/padding/padding.js.map +1 -0
- package/dist/components/Box/padding/padding.module.css +187 -0
- package/dist/components/Box/padding/padding.module.css.js +174 -0
- package/dist/components/Box/padding/padding.module.css.js.map +1 -0
- package/dist/components/Box/position/position.js +52 -0
- package/dist/components/Box/position/position.js.map +1 -0
- package/dist/components/Box/position/position.module.css +234 -0
- package/dist/components/Box/position/position.module.css.js +214 -0
- package/dist/components/Box/position/position.module.css.js.map +1 -0
- package/dist/components/Box/reset/reset.js +6 -0
- package/dist/components/Box/reset/reset.js.map +1 -0
- package/dist/components/Box/reset/reset.module.css +23 -0
- package/dist/components/Box/reset/reset.module.css.js +9 -0
- package/dist/components/Box/reset/reset.module.css.js.map +1 -0
- package/dist/components/Box/roundness/roundness.js +92 -0
- package/dist/components/Box/roundness/roundness.js.map +1 -0
- package/dist/components/Box/roundness/roundness.module.css +47 -0
- package/dist/components/Box/roundness/roundness.module.css.js +46 -0
- package/dist/components/Box/roundness/roundness.module.css.js.map +1 -0
- package/dist/components/Box/shadows/shadows.js +52 -0
- package/dist/components/Box/shadows/shadows.js.map +1 -0
- package/dist/components/Box/shadows/shadows.module.css +51 -0
- package/dist/components/Box/shadows/shadows.module.css.js +174 -0
- package/dist/components/Box/shadows/shadows.module.css.js.map +1 -0
- package/dist/components/Box/shared/constants.js +21 -0
- package/dist/components/Box/shared/constants.js.map +1 -0
- package/dist/components/Box/shared/spacing.js +10 -0
- package/dist/components/Box/shared/spacing.js.map +1 -0
- package/dist/components/Box/sizing/sizing.js +75 -0
- package/dist/components/Box/sizing/sizing.js.map +1 -0
- package/dist/components/Box/sizing/sizing.module.css +281 -0
- package/dist/components/Box/sizing/sizing.module.css.js +258 -0
- package/dist/components/Box/sizing/sizing.module.css.js.map +1 -0
- package/dist/components/Box/text/text.js +45 -0
- package/dist/components/Box/text/text.js.map +1 -0
- package/dist/components/Box/text/text.module.css +29 -0
- package/dist/components/Box/text/text.module.css.js +30 -0
- package/dist/components/Box/text/text.module.css.js.map +1 -0
- package/dist/components/Box/typography/typography.js +27 -0
- package/dist/components/Box/typography/typography.js.map +1 -0
- package/dist/components/Box/typography/typography.module.css +26 -0
- package/dist/components/Box/typography/typography.module.css.js +25 -0
- package/dist/components/Box/typography/typography.module.css.js.map +1 -0
- package/dist/components/Box/zIndex/zIndex.js +52 -0
- package/dist/components/Box/zIndex/zIndex.js.map +1 -0
- package/dist/components/Box/zIndex/zIndex.module.css +90 -0
- package/dist/components/Box/zIndex/zIndex.module.css.js +300 -0
- package/dist/components/Box/zIndex/zIndex.module.css.js.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.js +78 -0
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/components/Breadcrumb/breadcrumb.module.css +25 -0
- package/dist/components/Breadcrumb/breadcrumb.module.css.js +21 -0
- package/dist/components/Breadcrumb/breadcrumb.module.css.js.map +1 -0
- package/dist/components/Button/Button.js +129 -0
- package/dist/components/Button/Button.js.map +1 -0
- package/dist/components/Button/button.module.css +17 -0
- package/dist/components/Button/button.module.css.js +18 -0
- package/dist/components/Button/button.module.css.js.map +1 -0
- package/dist/components/Card/Card.js +60 -0
- package/dist/components/Card/Card.js.map +1 -0
- package/dist/components/Card/card.module.css +16 -0
- package/dist/components/Card/card.module.css.js +18 -0
- package/dist/components/Card/card.module.css.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.js +74 -0
- package/dist/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/Checkbox/checkbox.module.css +65 -0
- package/dist/components/Checkbox/checkbox.module.css.js +15 -0
- package/dist/components/Checkbox/checkbox.module.css.js.map +1 -0
- package/dist/components/Code/Code.js +32 -0
- package/dist/components/Code/Code.js.map +1 -0
- package/dist/components/Container/Container.js +44 -0
- package/dist/components/Container/Container.js.map +1 -0
- package/dist/components/Divider/Divider.js +48 -0
- package/dist/components/Divider/Divider.js.map +1 -0
- package/dist/components/Flex/Flex.js +48 -0
- package/dist/components/Flex/Flex.js.map +1 -0
- package/dist/components/FormField/FormField.js +52 -0
- package/dist/components/FormField/FormField.js.map +1 -0
- package/dist/components/Grid/Grid.js +41 -0
- package/dist/components/Grid/Grid.js.map +1 -0
- package/dist/components/HStack/HStack.js +17 -0
- package/dist/components/HStack/HStack.js.map +1 -0
- package/dist/components/Heading/Heading.js +42 -0
- package/dist/components/Heading/Heading.js.map +1 -0
- package/dist/components/IconButton/IconButton.js +93 -0
- package/dist/components/IconButton/IconButton.js.map +1 -0
- package/dist/components/IconButton/iconbutton.module.css +18 -0
- package/dist/components/IconButton/iconbutton.module.css.js +18 -0
- package/dist/components/IconButton/iconbutton.module.css.js.map +1 -0
- package/dist/components/Image/Image.d.ts.map +1 -1
- package/dist/components/Image/Image.js +101 -0
- package/dist/components/Image/Image.js.map +1 -0
- package/dist/components/Image/image.module.css +44 -0
- package/dist/components/Image/image.module.css.js +36 -0
- package/dist/components/Image/image.module.css.js.map +1 -0
- package/dist/components/Input/Input.js +57 -0
- package/dist/components/Input/Input.js.map +1 -0
- package/dist/components/Input/input.module.css +29 -0
- package/dist/components/Input/input.module.css.js +12 -0
- package/dist/components/Input/input.module.css.js.map +1 -0
- package/dist/components/Label/Label.js +36 -0
- package/dist/components/Label/Label.js.map +1 -0
- package/dist/components/Link/Link.js +38 -0
- package/dist/components/Link/Link.js.map +1 -0
- package/dist/components/Link/link.module.css +28 -0
- package/dist/components/Link/link.module.css.js +16 -0
- package/dist/components/Link/link.module.css.js.map +1 -0
- package/dist/components/List/List.js +51 -0
- package/dist/components/List/List.js.map +1 -0
- package/dist/components/List/list.module.css +45 -0
- package/dist/components/List/list.module.css.js +24 -0
- package/dist/components/List/list.module.css.js.map +1 -0
- package/dist/components/Menu/Menu.d.ts.map +1 -1
- package/dist/components/Menu/Menu.js +143 -0
- package/dist/components/Menu/Menu.js.map +1 -0
- package/dist/components/Menu/menu.module.css +24 -0
- package/dist/components/Menu/menu.module.css.js +18 -0
- package/dist/components/Menu/menu.module.css.js.map +1 -0
- package/dist/components/Modal/Modal.d.ts.map +1 -1
- package/dist/components/Modal/Modal.js +130 -0
- package/dist/components/Modal/Modal.js.map +1 -0
- package/dist/components/Modal/modal.module.css +26 -0
- package/dist/components/Modal/modal.module.css.js +21 -0
- package/dist/components/Modal/modal.module.css.js.map +1 -0
- package/dist/components/Pagination/Pagination.js +125 -0
- package/dist/components/Pagination/Pagination.js.map +1 -0
- package/dist/components/Pagination/pagination.module.css +3 -0
- package/dist/components/Pagination/pagination.module.css.js +9 -0
- package/dist/components/Pagination/pagination.module.css.js.map +1 -0
- package/dist/components/Popover/Popover.d.ts.map +1 -1
- package/dist/components/Popover/Popover.js +144 -0
- package/dist/components/Popover/Popover.js.map +1 -0
- package/dist/components/Popover/popover.module.css +11 -0
- package/dist/components/Popover/popover.module.css.js +15 -0
- package/dist/components/Popover/popover.module.css.js.map +1 -0
- package/dist/components/Progress/Progress.js +54 -0
- package/dist/components/Progress/Progress.js.map +1 -0
- package/dist/components/Progress/progress.module.css +24 -0
- package/dist/components/Progress/progress.module.css.js +15 -0
- package/dist/components/Progress/progress.module.css.js.map +1 -0
- package/dist/components/Radio/Radio.js +70 -0
- package/dist/components/Radio/Radio.js.map +1 -0
- package/dist/components/Radio/radio.module.css +48 -0
- package/dist/components/Radio/radio.module.css.js +12 -0
- package/dist/components/Radio/radio.module.css.js.map +1 -0
- package/dist/components/Select/Select.js +57 -0
- package/dist/components/Select/Select.js.map +1 -0
- package/dist/components/Select/select.module.css +43 -0
- package/dist/components/Select/select.module.css.js +12 -0
- package/dist/components/Select/select.module.css.js.map +1 -0
- package/dist/components/Skeleton/Skeleton.js +37 -0
- package/dist/components/Skeleton/Skeleton.js.map +1 -0
- package/dist/components/Skeleton/skeleton.module.css +26 -0
- package/dist/components/Skeleton/skeleton.module.css.js +9 -0
- package/dist/components/Skeleton/skeleton.module.css.js.map +1 -0
- package/dist/components/Spacer/Spacer.js +16 -0
- package/dist/components/Spacer/Spacer.js.map +1 -0
- package/dist/components/Spinner/Spinner.js +41 -0
- package/dist/components/Spinner/Spinner.js.map +1 -0
- package/dist/components/Spinner/spinner.module.css +21 -0
- package/dist/components/Spinner/spinner.module.css.js +9 -0
- package/dist/components/Spinner/spinner.module.css.js.map +1 -0
- package/dist/components/Stack/Stack.js +35 -0
- package/dist/components/Stack/Stack.js.map +1 -0
- package/dist/components/Switch/Switch.js +83 -0
- package/dist/components/Switch/Switch.js.map +1 -0
- package/dist/components/Switch/switch.module.css +48 -0
- package/dist/components/Switch/switch.module.css.js +15 -0
- package/dist/components/Switch/switch.module.css.js.map +1 -0
- package/dist/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/components/Tabs/Tabs.js +87 -0
- package/dist/components/Tabs/Tabs.js.map +1 -0
- package/dist/components/Tabs/tabs.module.css +55 -0
- package/dist/components/Tabs/tabs.module.css.js +27 -0
- package/dist/components/Tabs/tabs.module.css.js.map +1 -0
- package/dist/components/Text/Text.d.ts.map +1 -1
- package/dist/components/Text/Text.js +40 -0
- package/dist/components/Text/Text.js.map +1 -0
- package/dist/components/Text/text.module.css +9 -0
- package/dist/components/Text/text.module.css.js +12 -0
- package/dist/components/Text/text.module.css.js.map +1 -0
- package/dist/components/Textarea/Textarea.js +70 -0
- package/dist/components/Textarea/Textarea.js.map +1 -0
- package/dist/components/Textarea/textarea.module.css +46 -0
- package/dist/components/Textarea/textarea.module.css.js +24 -0
- package/dist/components/Textarea/textarea.module.css.js.map +1 -0
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/Tooltip/Tooltip.js +135 -0
- package/dist/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/components/Tooltip/tooltip.module.css +4 -0
- package/dist/components/Tooltip/tooltip.module.css.js +9 -0
- package/dist/components/Tooltip/tooltip.module.css.js.map +1 -0
- package/dist/components/VStack/VStack.js +17 -0
- package/dist/components/VStack/VStack.js.map +1 -0
- package/dist/fonts.css +23 -1
- package/dist/index.css +3320 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +99 -5521
- package/dist/index.js.map +1 -1
- package/dist/styles/styles.css +353 -0
- package/package.json +8 -4
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const link = "_link_1xu5z_1";
|
|
2
|
+
const underline = "_underline_1xu5z_17";
|
|
3
|
+
const subtle = "_subtle_1xu5z_21";
|
|
4
|
+
const styles = {
|
|
5
|
+
link,
|
|
6
|
+
"default": "_default_1xu5z_9",
|
|
7
|
+
underline,
|
|
8
|
+
subtle
|
|
9
|
+
};
|
|
10
|
+
export {
|
|
11
|
+
styles as default,
|
|
12
|
+
link,
|
|
13
|
+
subtle,
|
|
14
|
+
underline
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=link.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
import clsx from "clsx";
|
|
4
|
+
import { Box } from "../Box/Box.js";
|
|
5
|
+
import styles from "./list.module.css.js";
|
|
6
|
+
function List({
|
|
7
|
+
as = "ul",
|
|
8
|
+
styleType,
|
|
9
|
+
spacing = 0,
|
|
10
|
+
className,
|
|
11
|
+
children
|
|
12
|
+
}) {
|
|
13
|
+
const defaultStyleType = as === "ol" ? "decimal" : "none";
|
|
14
|
+
const actualStyleType = styleType ?? defaultStyleType;
|
|
15
|
+
return /* @__PURE__ */ jsx(
|
|
16
|
+
Box,
|
|
17
|
+
{
|
|
18
|
+
as,
|
|
19
|
+
display: "flex",
|
|
20
|
+
flexDirection: "column",
|
|
21
|
+
gap: spacing,
|
|
22
|
+
className: clsx(styles.list, styles[actualStyleType], className),
|
|
23
|
+
children
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
function ListItem({ className, children }) {
|
|
28
|
+
return /* @__PURE__ */ jsx(Box, { as: "li", display: "flex", alignItems: "center", className: clsx(styles.listItem, className), children });
|
|
29
|
+
}
|
|
30
|
+
function ListIcon({ className, children }) {
|
|
31
|
+
return /* @__PURE__ */ jsx(
|
|
32
|
+
Box,
|
|
33
|
+
{
|
|
34
|
+
as: "span",
|
|
35
|
+
display: "inline-flex",
|
|
36
|
+
alignItems: "center",
|
|
37
|
+
justifyContent: "center",
|
|
38
|
+
flexShrink: 0,
|
|
39
|
+
mr: 2,
|
|
40
|
+
color: "primary",
|
|
41
|
+
className: clsx(styles.listIcon, className),
|
|
42
|
+
children
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
export {
|
|
47
|
+
List,
|
|
48
|
+
ListIcon,
|
|
49
|
+
ListItem
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=List.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"List.js","sources":["../../../src/components/List/List.tsx"],"sourcesContent":["import { type ReactNode } from \"react\";\nimport clsx from \"clsx\";\nimport { Box } from \"@/components/Box/Box\";\nimport styles from \"./list.module.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type ListStyleType = \"none\" | \"disc\" | \"decimal\";\n\nexport type ListProps = {\n /** List element type */\n as?: \"ul\" | \"ol\";\n /** List style type */\n styleType?: ListStyleType;\n /** Spacing between items (gap multiplier) */\n spacing?: number;\n /** Additional class name */\n className?: string;\n /** List items */\n children?: ReactNode;\n};\n\nexport type ListItemProps = {\n /** Additional class name */\n className?: string;\n /** Item content */\n children?: ReactNode;\n};\n\nexport type ListIconProps = {\n /** Additional class name */\n className?: string;\n /** Icon content */\n children?: ReactNode;\n};\n\n// ============================================================================\n// Components\n// ============================================================================\n\n/**\n * List - Semantic list container\n *\n * A list component supporting:\n * - Unordered (ul) or ordered (ol) lists\n * - Various list style types\n * - Configurable spacing between items\n */\nexport function List({\n as = \"ul\",\n styleType,\n spacing = 0,\n className,\n children,\n}: ListProps) {\n const defaultStyleType = as === \"ol\" ? \"decimal\" : \"none\";\n const actualStyleType = styleType ?? defaultStyleType;\n\n return (\n <Box\n as={as}\n display=\"flex\"\n flexDirection=\"column\"\n gap={spacing}\n className={clsx(styles.list, styles[actualStyleType], className)}\n >\n {children}\n </Box>\n );\n}\n\n/**\n * ListItem - Individual list item\n *\n * Use inside List for semantic list items.\n */\nexport function ListItem({ className, children }: ListItemProps) {\n return (\n <Box as=\"li\" display=\"flex\" alignItems=\"center\" className={clsx(styles.listItem, className)}>\n {children}\n </Box>\n );\n}\n\n/**\n * ListIcon - Icon prefix for list items\n *\n * Use inside ListItem to add an icon before content.\n */\nexport function ListIcon({ className, children }: ListIconProps) {\n return (\n <Box\n as=\"span\"\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n mr={2}\n color=\"primary\"\n className={clsx(styles.listIcon, className)}\n >\n {children}\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;AAkDO,SAAS,KAAK;AAAA,EACnB,KAAK;AAAA,EACL;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AACF,GAAc;AACZ,QAAM,mBAAmB,OAAO,OAAO,YAAY;AACnD,QAAM,kBAAkB,aAAa;AAErC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,SAAQ;AAAA,MACR,eAAc;AAAA,MACd,KAAK;AAAA,MACL,WAAW,KAAK,OAAO,MAAM,OAAO,eAAe,GAAG,SAAS;AAAA,MAE9D;AAAA,IAAA;AAAA,EAAA;AAGP;AAOO,SAAS,SAAS,EAAE,WAAW,YAA2B;AAC/D,SACE,oBAAC,KAAA,EAAI,IAAG,MAAK,SAAQ,QAAO,YAAW,UAAS,WAAW,KAAK,OAAO,UAAU,SAAS,GACvF,UACH;AAEJ;AAOO,SAAS,SAAS,EAAE,WAAW,YAA2B;AAC/D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAG;AAAA,MACH,SAAQ;AAAA,MACR,YAAW;AAAA,MACX,gBAAe;AAAA,MACf,YAAY;AAAA,MACZ,IAAI;AAAA,MACJ,OAAM;AAAA,MACN,WAAW,KAAK,OAAO,UAAU,SAAS;AAAA,MAEzC;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
._list_3tn6m_1 {
|
|
2
|
+
margin: 0;
|
|
3
|
+
padding: 0;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
._none_3tn6m_6 {
|
|
7
|
+
list-style-type: none;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* Disc bullets via ::before */
|
|
11
|
+
._disc_3tn6m_11 {
|
|
12
|
+
list-style-type: none;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
._disc_3tn6m_11 > ._listItem_3tn6m_15::before {
|
|
16
|
+
content: "\2022";
|
|
17
|
+
flex-shrink: 0;
|
|
18
|
+
width: 1.25em;
|
|
19
|
+
text-align: center;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Decimal numbers via CSS counter */
|
|
23
|
+
._decimal_3tn6m_23 {
|
|
24
|
+
list-style-type: none;
|
|
25
|
+
counter-reset: list-counter;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
._decimal_3tn6m_23 > ._listItem_3tn6m_15 {
|
|
29
|
+
counter-increment: list-counter;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
._decimal_3tn6m_23 > ._listItem_3tn6m_15::before {
|
|
33
|
+
content: counter(list-counter) ".";
|
|
34
|
+
flex-shrink: 0;
|
|
35
|
+
width: 1.5em;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
._listItem_3tn6m_15 {
|
|
39
|
+
margin: 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
._listIcon_3tn6m_42 {
|
|
43
|
+
width: 1.25em;
|
|
44
|
+
height: 1.25em;
|
|
45
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const list = "_list_3tn6m_1";
|
|
2
|
+
const none = "_none_3tn6m_6";
|
|
3
|
+
const disc = "_disc_3tn6m_11";
|
|
4
|
+
const listItem = "_listItem_3tn6m_15";
|
|
5
|
+
const decimal = "_decimal_3tn6m_23";
|
|
6
|
+
const listIcon = "_listIcon_3tn6m_42";
|
|
7
|
+
const styles = {
|
|
8
|
+
list,
|
|
9
|
+
none,
|
|
10
|
+
disc,
|
|
11
|
+
listItem,
|
|
12
|
+
decimal,
|
|
13
|
+
listIcon
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
decimal,
|
|
17
|
+
styles as default,
|
|
18
|
+
disc,
|
|
19
|
+
list,
|
|
20
|
+
listIcon,
|
|
21
|
+
listItem,
|
|
22
|
+
none
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=list.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/Menu.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/Menu.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAGf,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAyB/D,MAAM,MAAM,SAAS,GAAG;IACtB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG;IAChE,qBAAqB;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAMF;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,EACnB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EACN,OAAO,EACP,SAAS,EACT,QAAQ,GACT,EAAE,SAAS,2CAsDX;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,eAAe,2CAe3E;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,aAAa,kDAyB9D;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,QAAgB,EAChB,SAAS,EACT,QAAQ,GACT,EAAE,aAAa,2CAgCf"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useState, useRef, useEffect, useContext } from "react";
|
|
4
|
+
import clsx from "clsx";
|
|
5
|
+
import { Box } from "../Box/Box.js";
|
|
6
|
+
import { Button } from "../Button/Button.js";
|
|
7
|
+
import styles from "./menu.module.css.js";
|
|
8
|
+
const MenuContext = createContext(null);
|
|
9
|
+
function useMenuContext() {
|
|
10
|
+
const context = useContext(MenuContext);
|
|
11
|
+
if (!context) throw new Error("Menu components must be used within Menu");
|
|
12
|
+
return context;
|
|
13
|
+
}
|
|
14
|
+
function Menu({
|
|
15
|
+
isOpen: controlledIsOpen,
|
|
16
|
+
onOpen,
|
|
17
|
+
onClose,
|
|
18
|
+
className,
|
|
19
|
+
children
|
|
20
|
+
}) {
|
|
21
|
+
const [internalIsOpen, setInternalIsOpen] = useState(false);
|
|
22
|
+
const isControlled = controlledIsOpen !== void 0;
|
|
23
|
+
const isOpen = isControlled ? controlledIsOpen : internalIsOpen;
|
|
24
|
+
const buttonRef = useRef(null);
|
|
25
|
+
const setOpen = (open) => {
|
|
26
|
+
if (!isControlled) {
|
|
27
|
+
setInternalIsOpen(open);
|
|
28
|
+
}
|
|
29
|
+
if (open) {
|
|
30
|
+
onOpen?.();
|
|
31
|
+
} else {
|
|
32
|
+
onClose?.();
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (!isOpen) return;
|
|
37
|
+
const handleClick = (e) => {
|
|
38
|
+
if (buttonRef.current?.contains(e.target)) return;
|
|
39
|
+
setOpen(false);
|
|
40
|
+
};
|
|
41
|
+
document.addEventListener("click", handleClick);
|
|
42
|
+
return () => document.removeEventListener("click", handleClick);
|
|
43
|
+
}, [isOpen]);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (!isOpen) return;
|
|
46
|
+
const handleKeyDown = (e) => {
|
|
47
|
+
if (e.key === "Escape") setOpen(false);
|
|
48
|
+
};
|
|
49
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
50
|
+
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
51
|
+
}, [isOpen]);
|
|
52
|
+
return /* @__PURE__ */ jsx(MenuContext.Provider, { value: { isOpen, setIsOpen: setOpen, buttonRef }, children: /* @__PURE__ */ jsx(
|
|
53
|
+
Box,
|
|
54
|
+
{
|
|
55
|
+
position: "relative",
|
|
56
|
+
display: "inline-block",
|
|
57
|
+
className: clsx(styles.menu, className),
|
|
58
|
+
children
|
|
59
|
+
}
|
|
60
|
+
) });
|
|
61
|
+
}
|
|
62
|
+
function MenuButton({ children, className, ...rest }) {
|
|
63
|
+
const { isOpen, setIsOpen, buttonRef } = useMenuContext();
|
|
64
|
+
return /* @__PURE__ */ jsx(
|
|
65
|
+
Button,
|
|
66
|
+
{
|
|
67
|
+
ref: buttonRef,
|
|
68
|
+
"aria-haspopup": "menu",
|
|
69
|
+
"aria-expanded": isOpen,
|
|
70
|
+
onClick: () => setIsOpen(!isOpen),
|
|
71
|
+
className,
|
|
72
|
+
...rest,
|
|
73
|
+
children
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
function MenuList({ className, children }) {
|
|
78
|
+
const { isOpen } = useMenuContext();
|
|
79
|
+
if (!isOpen) return null;
|
|
80
|
+
return /* @__PURE__ */ jsx(
|
|
81
|
+
Box,
|
|
82
|
+
{
|
|
83
|
+
role: "menu",
|
|
84
|
+
position: "absolute",
|
|
85
|
+
top: "100%",
|
|
86
|
+
left: 0,
|
|
87
|
+
mt: 1,
|
|
88
|
+
py: 1,
|
|
89
|
+
minW: "160px",
|
|
90
|
+
bg: "surface",
|
|
91
|
+
border: "thin",
|
|
92
|
+
borderColor: "border",
|
|
93
|
+
rounded: "md",
|
|
94
|
+
shadow: "md",
|
|
95
|
+
zIndex: "dropdown",
|
|
96
|
+
className: clsx(styles.menuList, className),
|
|
97
|
+
children
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
function MenuItem({
|
|
102
|
+
onClick,
|
|
103
|
+
disabled = false,
|
|
104
|
+
className,
|
|
105
|
+
children
|
|
106
|
+
}) {
|
|
107
|
+
const { setIsOpen } = useMenuContext();
|
|
108
|
+
const handleClick = () => {
|
|
109
|
+
if (disabled) return;
|
|
110
|
+
onClick?.();
|
|
111
|
+
setIsOpen(false);
|
|
112
|
+
};
|
|
113
|
+
return /* @__PURE__ */ jsx(
|
|
114
|
+
Box,
|
|
115
|
+
{
|
|
116
|
+
as: "button",
|
|
117
|
+
type: "button",
|
|
118
|
+
role: "menuitem",
|
|
119
|
+
onClick: handleClick,
|
|
120
|
+
disabled,
|
|
121
|
+
display: "flex",
|
|
122
|
+
alignItems: "center",
|
|
123
|
+
w: "100%",
|
|
124
|
+
py: 2,
|
|
125
|
+
px: 3,
|
|
126
|
+
fontSize: "sm",
|
|
127
|
+
color: disabled ? "foreground-muted" : "foreground",
|
|
128
|
+
bg: "transparent",
|
|
129
|
+
border: "none",
|
|
130
|
+
cursor: disabled ? "not-allowed" : "pointer",
|
|
131
|
+
textAlign: "left",
|
|
132
|
+
className: clsx(styles.menuItem, disabled && styles.disabled, className),
|
|
133
|
+
children
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
export {
|
|
138
|
+
Menu,
|
|
139
|
+
MenuButton,
|
|
140
|
+
MenuItem,
|
|
141
|
+
MenuList
|
|
142
|
+
};
|
|
143
|
+
//# sourceMappingURL=Menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.js","sources":["../../../src/components/Menu/Menu.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type ReactNode,\n createContext,\n useContext,\n useState,\n useRef,\n useEffect,\n} from \"react\";\nimport clsx from \"clsx\";\nimport { Box } from \"@/components/Box/Box\";\nimport { Button, type ButtonProps } from \"@/components/Button\";\nimport styles from \"./menu.module.css\";\n\n// ============================================================================\n// Context\n// ============================================================================\n\ntype MenuContextValue = {\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n buttonRef: React.RefObject<HTMLButtonElement | null>;\n};\n\nconst MenuContext = createContext<MenuContextValue | null>(null);\n\nfunction useMenuContext() {\n const context = useContext(MenuContext);\n if (!context) throw new Error(\"Menu components must be used within Menu\");\n return context;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type MenuProps = {\n /** Controlled open state */\n isOpen?: boolean;\n /** Callback when menu opens */\n onOpen?: () => void;\n /** Callback when menu closes */\n onClose?: () => void;\n /** Additional class name */\n className?: string;\n /** Menu components */\n children?: ReactNode;\n};\n\nexport type MenuButtonProps = Omit<ButtonProps<\"button\">, \"as\"> & {\n /** Button content */\n children?: ReactNode;\n};\n\nexport type MenuListProps = {\n /** Additional class name */\n className?: string;\n /** Menu items */\n children?: ReactNode;\n};\n\nexport type MenuItemProps = {\n /** Click handler */\n onClick?: () => void;\n /** Disabled state */\n disabled?: boolean;\n /** Additional class name */\n className?: string;\n /** Item content */\n children?: ReactNode;\n};\n\n// ============================================================================\n// Components\n// ============================================================================\n\n/**\n * Menu - Dropdown menu container\n *\n * Provides context for MenuButton, MenuList, and MenuItem.\n * Handles open/close state and click-outside behavior.\n * Supports controlled mode via isOpen/onOpen/onClose.\n */\nexport function Menu({\n isOpen: controlledIsOpen,\n onOpen,\n onClose,\n className,\n children,\n}: MenuProps) {\n const [internalIsOpen, setInternalIsOpen] = useState(false);\n const isControlled = controlledIsOpen !== undefined;\n const isOpen = isControlled ? controlledIsOpen : internalIsOpen;\n\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n const setOpen = (open: boolean) => {\n if (!isControlled) {\n setInternalIsOpen(open);\n }\n if (open) {\n onOpen?.();\n } else {\n onClose?.();\n }\n };\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return;\n\n const handleClick = (e: MouseEvent) => {\n if (buttonRef.current?.contains(e.target as Node)) return;\n setOpen(false);\n };\n\n document.addEventListener(\"click\", handleClick);\n return () => document.removeEventListener(\"click\", handleClick);\n }, [isOpen]);\n\n // Close on Escape\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [isOpen]);\n\n return (\n <MenuContext.Provider value={{ isOpen, setIsOpen: setOpen, buttonRef }}>\n <Box\n position=\"relative\"\n display=\"inline-block\"\n className={clsx(styles.menu, className)}\n >\n {children}\n </Box>\n </MenuContext.Provider>\n );\n}\n\n/**\n * MenuButton - Trigger button for the menu\n *\n * Renders as a Button component with dropdown indicators.\n */\nexport function MenuButton({ children, className, ...rest }: MenuButtonProps) {\n const { isOpen, setIsOpen, buttonRef } = useMenuContext();\n\n return (\n <Button\n ref={buttonRef}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n onClick={() => setIsOpen(!isOpen)}\n className={className}\n {...rest}\n >\n {children}\n </Button>\n );\n}\n\n/**\n * MenuList - Dropdown container for menu items\n *\n * Only renders when menu is open.\n */\nexport function MenuList({ className, children }: MenuListProps) {\n const { isOpen } = useMenuContext();\n\n if (!isOpen) return null;\n\n return (\n <Box\n role=\"menu\"\n position=\"absolute\"\n top=\"100%\"\n left={0}\n mt={1}\n py={1}\n minW=\"160px\"\n bg=\"surface\"\n border=\"thin\"\n borderColor=\"border\"\n rounded=\"md\"\n shadow=\"md\"\n zIndex=\"dropdown\"\n className={clsx(styles.menuList, className)}\n >\n {children}\n </Box>\n );\n}\n\n/**\n * MenuItem - Individual menu item\n *\n * Closes the menu when clicked (unless disabled).\n */\nexport function MenuItem({\n onClick,\n disabled = false,\n className,\n children,\n}: MenuItemProps) {\n const { setIsOpen } = useMenuContext();\n\n const handleClick = () => {\n if (disabled) return;\n onClick?.();\n setIsOpen(false);\n };\n\n return (\n <Box\n as=\"button\"\n type=\"button\"\n role=\"menuitem\"\n onClick={handleClick}\n disabled={disabled}\n display=\"flex\"\n alignItems=\"center\"\n w=\"100%\"\n py={2}\n px={3}\n fontSize=\"sm\"\n color={disabled ? \"foreground-muted\" : \"foreground\"}\n bg=\"transparent\"\n border=\"none\"\n cursor={disabled ? \"not-allowed\" : \"pointer\"}\n textAlign=\"left\"\n className={clsx(styles.menuItem, disabled && styles.disabled, className)}\n >\n {children}\n </Box>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
._menu_ezbl0_1 {
|
|
2
|
+
/* Container */
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
._menuList_ezbl0_5 {
|
|
6
|
+
/* Dropdown */
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
._menuItem_ezbl0_9 {
|
|
10
|
+
transition: background-color 0.15s ease;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
._menuItem_ezbl0_9:hover:not(:disabled) {
|
|
14
|
+
background-color: var(--t-color-surface-hover, rgba(0, 0, 0, 0.05));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
._menuItem_ezbl0_9:focus {
|
|
18
|
+
outline: none;
|
|
19
|
+
background-color: var(--t-color-surface-hover, rgba(0, 0, 0, 0.05));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
._menuItem_ezbl0_9._disabled_ezbl0_22 {
|
|
23
|
+
opacity: 0.5;
|
|
24
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const menu = "_menu_ezbl0_1";
|
|
2
|
+
const menuList = "_menuList_ezbl0_5";
|
|
3
|
+
const menuItem = "_menuItem_ezbl0_9";
|
|
4
|
+
const disabled = "_disabled_ezbl0_22";
|
|
5
|
+
const styles = {
|
|
6
|
+
menu,
|
|
7
|
+
menuList,
|
|
8
|
+
menuItem,
|
|
9
|
+
disabled
|
|
10
|
+
};
|
|
11
|
+
export {
|
|
12
|
+
styles as default,
|
|
13
|
+
disabled,
|
|
14
|
+
menu,
|
|
15
|
+
menuItem,
|
|
16
|
+
menuList
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=menu.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/Modal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/Modal.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAkC,MAAM,OAAO,CAAC;AAUvE,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG;IACvB,4BAA4B;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,uCAAuC;IACvC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iBAAiB;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,8BAA8B;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,0BAA0B;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAkBF;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,EACpB,MAAM,EACN,OAAO,EACP,IAAW,EACX,mBAA0B,EAC1B,UAAiB,EACjB,SAAS,EACT,QAAQ,GACT,EAAE,UAAU,sCA2EZ;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAYpE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,cAAc,2CAMhE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAepE"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useRef, useEffect, useCallback } from "react";
|
|
4
|
+
import { createPortal } from "react-dom";
|
|
5
|
+
import clsx from "clsx";
|
|
6
|
+
import { Box } from "../Box/Box.js";
|
|
7
|
+
import styles from "./modal.module.css.js";
|
|
8
|
+
const sizeConfig = {
|
|
9
|
+
sm: "400px",
|
|
10
|
+
md: "500px",
|
|
11
|
+
lg: "700px",
|
|
12
|
+
xl: "900px",
|
|
13
|
+
full: "100%"
|
|
14
|
+
};
|
|
15
|
+
function Modal({
|
|
16
|
+
isOpen,
|
|
17
|
+
onClose,
|
|
18
|
+
size = "md",
|
|
19
|
+
closeOnOverlayClick = true,
|
|
20
|
+
closeOnEsc = true,
|
|
21
|
+
className,
|
|
22
|
+
children
|
|
23
|
+
}) {
|
|
24
|
+
const modalRef = useRef(null);
|
|
25
|
+
const previousFocusRef = useRef(null);
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (isOpen) {
|
|
28
|
+
previousFocusRef.current = document.activeElement;
|
|
29
|
+
modalRef.current?.focus();
|
|
30
|
+
} else if (previousFocusRef.current) {
|
|
31
|
+
previousFocusRef.current.focus();
|
|
32
|
+
}
|
|
33
|
+
}, [isOpen]);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (!isOpen || !closeOnEsc) return;
|
|
36
|
+
const handleKeyDown = (e) => {
|
|
37
|
+
if (e.key === "Escape") onClose();
|
|
38
|
+
};
|
|
39
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
40
|
+
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
41
|
+
}, [isOpen, closeOnEsc, onClose]);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (isOpen) {
|
|
44
|
+
document.body.style.overflow = "hidden";
|
|
45
|
+
} else {
|
|
46
|
+
document.body.style.overflow = "";
|
|
47
|
+
}
|
|
48
|
+
return () => {
|
|
49
|
+
document.body.style.overflow = "";
|
|
50
|
+
};
|
|
51
|
+
}, [isOpen]);
|
|
52
|
+
const handleOverlayClick = useCallback(
|
|
53
|
+
(e) => {
|
|
54
|
+
if (closeOnOverlayClick && e.target === e.currentTarget) {
|
|
55
|
+
onClose();
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
[closeOnOverlayClick, onClose]
|
|
59
|
+
);
|
|
60
|
+
if (!isOpen) return null;
|
|
61
|
+
return createPortal(
|
|
62
|
+
/* @__PURE__ */ jsx(
|
|
63
|
+
Box,
|
|
64
|
+
{
|
|
65
|
+
className: clsx(styles.overlay, className),
|
|
66
|
+
onClick: handleOverlayClick,
|
|
67
|
+
role: "dialog",
|
|
68
|
+
"aria-modal": "true",
|
|
69
|
+
children: /* @__PURE__ */ jsx(
|
|
70
|
+
Box,
|
|
71
|
+
{
|
|
72
|
+
ref: modalRef,
|
|
73
|
+
tabIndex: -1,
|
|
74
|
+
bg: "surface",
|
|
75
|
+
rounded: size === "full" ? "none" : "lg",
|
|
76
|
+
shadow: "lg",
|
|
77
|
+
maxH: size === "full" ? "100vh" : "90vh",
|
|
78
|
+
overflow: "auto",
|
|
79
|
+
className: styles.modal,
|
|
80
|
+
style: {
|
|
81
|
+
width: sizeConfig[size],
|
|
82
|
+
maxWidth: size === "full" ? "100%" : "calc(100% - 2rem)"
|
|
83
|
+
},
|
|
84
|
+
children
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
),
|
|
89
|
+
document.body
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
function ModalHeader({ className, children }) {
|
|
93
|
+
return /* @__PURE__ */ jsx(
|
|
94
|
+
Box,
|
|
95
|
+
{
|
|
96
|
+
px: 6,
|
|
97
|
+
py: 4,
|
|
98
|
+
borderBottom: "thin",
|
|
99
|
+
borderColor: "border",
|
|
100
|
+
className: clsx(styles.header, className),
|
|
101
|
+
children
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
function ModalBody({ className, children }) {
|
|
106
|
+
return /* @__PURE__ */ jsx(Box, { px: 6, py: 4, className: clsx(styles.body, className), children });
|
|
107
|
+
}
|
|
108
|
+
function ModalFooter({ className, children }) {
|
|
109
|
+
return /* @__PURE__ */ jsx(
|
|
110
|
+
Box,
|
|
111
|
+
{
|
|
112
|
+
px: 6,
|
|
113
|
+
py: 4,
|
|
114
|
+
borderTop: "thin",
|
|
115
|
+
borderColor: "border",
|
|
116
|
+
display: "flex",
|
|
117
|
+
justifyContent: "end",
|
|
118
|
+
gap: 2,
|
|
119
|
+
className: clsx(styles.footer, className),
|
|
120
|
+
children
|
|
121
|
+
}
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
export {
|
|
125
|
+
Modal,
|
|
126
|
+
ModalBody,
|
|
127
|
+
ModalFooter,
|
|
128
|
+
ModalHeader
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=Modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ReactNode, useEffect, useRef, useCallback } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport clsx from \"clsx\";\nimport { Box } from \"@/components/Box/Box\";\nimport styles from \"./modal.module.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type ModalSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\nexport type ModalProps = {\n /** Whether modal is open */\n isOpen: boolean;\n /** Callback when modal should close */\n onClose: () => void;\n /** Modal size */\n size?: ModalSize;\n /** Close on backdrop click */\n closeOnOverlayClick?: boolean;\n /** Close on Escape key */\n closeOnEsc?: boolean;\n /** Additional class name */\n className?: string;\n /** Modal content */\n children?: ReactNode;\n};\n\nexport type ModalHeaderProps = {\n /** Additional class name */\n className?: string;\n /** Header content */\n children?: ReactNode;\n};\n\nexport type ModalBodyProps = {\n /** Additional class name */\n className?: string;\n /** Body content */\n children?: ReactNode;\n};\n\nexport type ModalFooterProps = {\n /** Additional class name */\n className?: string;\n /** Footer content */\n children?: ReactNode;\n};\n\n// ============================================================================\n// Size configuration\n// ============================================================================\n\nconst sizeConfig = {\n sm: \"400px\",\n md: \"500px\",\n lg: \"700px\",\n xl: \"900px\",\n full: \"100%\",\n} as const;\n\n// ============================================================================\n// Components\n// ============================================================================\n\n/**\n * Modal - Dialog overlay component\n *\n * A modal dialog that:\n * - Renders via portal to document.body\n * - Traps focus when open\n * - Prevents body scroll when open\n * - Closes on backdrop click and Escape key\n * - Returns focus after closing\n */\nexport function Modal({\n isOpen,\n onClose,\n size = \"md\",\n closeOnOverlayClick = true,\n closeOnEsc = true,\n className,\n children,\n}: ModalProps) {\n const modalRef = useRef<HTMLDivElement>(null);\n const previousFocusRef = useRef<HTMLElement | null>(null);\n\n // Store previous focus and focus modal when open\n useEffect(() => {\n if (isOpen) {\n previousFocusRef.current = document.activeElement as HTMLElement;\n modalRef.current?.focus();\n } else if (previousFocusRef.current) {\n previousFocusRef.current.focus();\n }\n }, [isOpen]);\n\n // Handle Escape key\n useEffect(() => {\n if (!isOpen || !closeOnEsc) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [isOpen, closeOnEsc, onClose]);\n\n // Prevent body scroll when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"\";\n }\n return () => {\n document.body.style.overflow = \"\";\n };\n }, [isOpen]);\n\n const handleOverlayClick = useCallback(\n (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onClose();\n }\n },\n [closeOnOverlayClick, onClose]\n );\n\n if (!isOpen) return null;\n\n return createPortal(\n <Box\n className={clsx(styles.overlay, className)}\n onClick={handleOverlayClick}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <Box\n ref={modalRef}\n tabIndex={-1}\n bg=\"surface\"\n rounded={size === \"full\" ? \"none\" : \"lg\"}\n shadow=\"lg\"\n maxH={size === \"full\" ? \"100vh\" : \"90vh\"}\n overflow=\"auto\"\n className={styles.modal}\n style={{\n width: sizeConfig[size],\n maxWidth: size === \"full\" ? \"100%\" : \"calc(100% - 2rem)\",\n }}\n >\n {children}\n </Box>\n </Box>,\n document.body\n );\n}\n\n/**\n * ModalHeader - Header section for modal\n */\nexport function ModalHeader({ className, children }: ModalHeaderProps) {\n return (\n <Box\n px={6}\n py={4}\n borderBottom=\"thin\"\n borderColor=\"border\"\n className={clsx(styles.header, className)}\n >\n {children}\n </Box>\n );\n}\n\n/**\n * ModalBody - Body section for modal\n */\nexport function ModalBody({ className, children }: ModalBodyProps) {\n return (\n <Box px={6} py={4} className={clsx(styles.body, className)}>\n {children}\n </Box>\n );\n}\n\n/**\n * ModalFooter - Footer section for modal\n */\nexport function ModalFooter({ className, children }: ModalFooterProps) {\n return (\n <Box\n px={6}\n py={4}\n borderTop=\"thin\"\n borderColor=\"border\"\n display=\"flex\"\n justifyContent=\"end\"\n gap={2}\n className={clsx(styles.footer, className)}\n >\n {children}\n </Box>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
._overlay_196fp_1 {
|
|
2
|
+
position: fixed;
|
|
3
|
+
inset: 0;
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
background-color: rgba(0, 0, 0, 0.5);
|
|
8
|
+
z-index: var(--t-z-index-modal);
|
|
9
|
+
padding: 1rem;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
._modal_196fp_12 {
|
|
13
|
+
outline: none;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
._header_196fp_16 {
|
|
17
|
+
/* Header styles */
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
._body_196fp_20 {
|
|
21
|
+
/* Body styles */
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
._footer_196fp_24 {
|
|
25
|
+
/* Footer styles */
|
|
26
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const overlay = "_overlay_196fp_1";
|
|
2
|
+
const modal = "_modal_196fp_12";
|
|
3
|
+
const header = "_header_196fp_16";
|
|
4
|
+
const body = "_body_196fp_20";
|
|
5
|
+
const footer = "_footer_196fp_24";
|
|
6
|
+
const styles = {
|
|
7
|
+
overlay,
|
|
8
|
+
modal,
|
|
9
|
+
header,
|
|
10
|
+
body,
|
|
11
|
+
footer
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
body,
|
|
15
|
+
styles as default,
|
|
16
|
+
footer,
|
|
17
|
+
header,
|
|
18
|
+
modal,
|
|
19
|
+
overlay
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=modal.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|