@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.
Files changed (276) hide show
  1. package/dist/components/Accordion/Accordion.d.ts.map +1 -1
  2. package/dist/components/Accordion/Accordion.js +109 -0
  3. package/dist/components/Accordion/Accordion.js.map +1 -0
  4. package/dist/components/Accordion/accordion.module.css +36 -0
  5. package/dist/components/Accordion/accordion.module.css.js +27 -0
  6. package/dist/components/Accordion/accordion.module.css.js.map +1 -0
  7. package/dist/components/Alert/Alert.js +109 -0
  8. package/dist/components/Alert/Alert.js.map +1 -0
  9. package/dist/components/Alert/alert.module.css +27 -0
  10. package/dist/components/Alert/alert.module.css.js +24 -0
  11. package/dist/components/Alert/alert.module.css.js.map +1 -0
  12. package/dist/components/Avatar/Avatar.d.ts.map +1 -1
  13. package/dist/components/Avatar/Avatar.js +72 -0
  14. package/dist/components/Avatar/Avatar.js.map +1 -0
  15. package/dist/components/Avatar/avatar.module.css +14 -0
  16. package/dist/components/Avatar/avatar.module.css.js +15 -0
  17. package/dist/components/Avatar/avatar.module.css.js.map +1 -0
  18. package/dist/components/Badge/Badge.js +66 -0
  19. package/dist/components/Badge/Badge.js.map +1 -0
  20. package/dist/components/Badge/badge.module.css +3 -0
  21. package/dist/components/Badge/badge.module.css.js +9 -0
  22. package/dist/components/Badge/badge.module.css.js.map +1 -0
  23. package/dist/components/Box/Box.js +217 -0
  24. package/dist/components/Box/Box.js.map +1 -0
  25. package/dist/components/Box/borders/borders.js +91 -0
  26. package/dist/components/Box/borders/borders.js.map +1 -0
  27. package/dist/components/Box/borders/borders.module.css +49 -0
  28. package/dist/components/Box/borders/borders.module.css.js +46 -0
  29. package/dist/components/Box/borders/borders.module.css.js.map +1 -0
  30. package/dist/components/Box/colors/colors.js +45 -0
  31. package/dist/components/Box/colors/colors.js.map +1 -0
  32. package/dist/components/Box/colors/colors.module.css +113 -0
  33. package/dist/components/Box/colors/colors.module.css.js +114 -0
  34. package/dist/components/Box/colors/colors.module.css.js.map +1 -0
  35. package/dist/components/Box/display/display.js +52 -0
  36. package/dist/components/Box/display/display.js.map +1 -0
  37. package/dist/components/Box/display/display.module.css +375 -0
  38. package/dist/components/Box/display/display.module.css.js +318 -0
  39. package/dist/components/Box/display/display.module.css.js.map +1 -0
  40. package/dist/components/Box/flexbox/flexbox.js +139 -0
  41. package/dist/components/Box/flexbox/flexbox.js.map +1 -0
  42. package/dist/components/Box/flexbox/flexbox.module.css +65 -0
  43. package/dist/components/Box/flexbox/flexbox.module.css.js +62 -0
  44. package/dist/components/Box/flexbox/flexbox.module.css.js.map +1 -0
  45. package/dist/components/Box/grid/grid.js +49 -0
  46. package/dist/components/Box/grid/grid.js.map +1 -0
  47. package/dist/components/Box/grid/grid.module.css +19 -0
  48. package/dist/components/Box/grid/grid.module.css.js +20 -0
  49. package/dist/components/Box/grid/grid.module.css.js.map +1 -0
  50. package/dist/components/Box/inset/inset.js +96 -0
  51. package/dist/components/Box/inset/inset.js.map +1 -0
  52. package/dist/components/Box/inset/inset.module.css +187 -0
  53. package/dist/components/Box/inset/inset.module.css.js +174 -0
  54. package/dist/components/Box/inset/inset.module.css.js.map +1 -0
  55. package/dist/components/Box/interactions/interactions.js +45 -0
  56. package/dist/components/Box/interactions/interactions.js.map +1 -0
  57. package/dist/components/Box/interactions/interactions.module.css +43 -0
  58. package/dist/components/Box/interactions/interactions.module.css.js +44 -0
  59. package/dist/components/Box/interactions/interactions.module.css.js.map +1 -0
  60. package/dist/components/Box/margin/margin.js +96 -0
  61. package/dist/components/Box/margin/margin.js.map +1 -0
  62. package/dist/components/Box/margin/margin.module.css +187 -0
  63. package/dist/components/Box/margin/margin.module.css.js +174 -0
  64. package/dist/components/Box/margin/margin.module.css.js.map +1 -0
  65. package/dist/components/Box/opacity/opacity.js +52 -0
  66. package/dist/components/Box/opacity/opacity.js.map +1 -0
  67. package/dist/components/Box/opacity/opacity.module.css +51 -0
  68. package/dist/components/Box/opacity/opacity.module.css.js +174 -0
  69. package/dist/components/Box/opacity/opacity.module.css.js.map +1 -0
  70. package/dist/components/Box/overflow/overflow.js +69 -0
  71. package/dist/components/Box/overflow/overflow.js.map +1 -0
  72. package/dist/components/Box/overflow/overflow.module.css +155 -0
  73. package/dist/components/Box/overflow/overflow.module.css.js +510 -0
  74. package/dist/components/Box/overflow/overflow.module.css.js.map +1 -0
  75. package/dist/components/Box/padding/padding.js +96 -0
  76. package/dist/components/Box/padding/padding.js.map +1 -0
  77. package/dist/components/Box/padding/padding.module.css +187 -0
  78. package/dist/components/Box/padding/padding.module.css.js +174 -0
  79. package/dist/components/Box/padding/padding.module.css.js.map +1 -0
  80. package/dist/components/Box/position/position.js +52 -0
  81. package/dist/components/Box/position/position.js.map +1 -0
  82. package/dist/components/Box/position/position.module.css +234 -0
  83. package/dist/components/Box/position/position.module.css.js +214 -0
  84. package/dist/components/Box/position/position.module.css.js.map +1 -0
  85. package/dist/components/Box/reset/reset.js +6 -0
  86. package/dist/components/Box/reset/reset.js.map +1 -0
  87. package/dist/components/Box/reset/reset.module.css +23 -0
  88. package/dist/components/Box/reset/reset.module.css.js +9 -0
  89. package/dist/components/Box/reset/reset.module.css.js.map +1 -0
  90. package/dist/components/Box/roundness/roundness.js +92 -0
  91. package/dist/components/Box/roundness/roundness.js.map +1 -0
  92. package/dist/components/Box/roundness/roundness.module.css +47 -0
  93. package/dist/components/Box/roundness/roundness.module.css.js +46 -0
  94. package/dist/components/Box/roundness/roundness.module.css.js.map +1 -0
  95. package/dist/components/Box/shadows/shadows.js +52 -0
  96. package/dist/components/Box/shadows/shadows.js.map +1 -0
  97. package/dist/components/Box/shadows/shadows.module.css +51 -0
  98. package/dist/components/Box/shadows/shadows.module.css.js +174 -0
  99. package/dist/components/Box/shadows/shadows.module.css.js.map +1 -0
  100. package/dist/components/Box/shared/constants.js +21 -0
  101. package/dist/components/Box/shared/constants.js.map +1 -0
  102. package/dist/components/Box/shared/spacing.js +10 -0
  103. package/dist/components/Box/shared/spacing.js.map +1 -0
  104. package/dist/components/Box/sizing/sizing.js +75 -0
  105. package/dist/components/Box/sizing/sizing.js.map +1 -0
  106. package/dist/components/Box/sizing/sizing.module.css +281 -0
  107. package/dist/components/Box/sizing/sizing.module.css.js +258 -0
  108. package/dist/components/Box/sizing/sizing.module.css.js.map +1 -0
  109. package/dist/components/Box/text/text.js +45 -0
  110. package/dist/components/Box/text/text.js.map +1 -0
  111. package/dist/components/Box/text/text.module.css +29 -0
  112. package/dist/components/Box/text/text.module.css.js +30 -0
  113. package/dist/components/Box/text/text.module.css.js.map +1 -0
  114. package/dist/components/Box/typography/typography.js +27 -0
  115. package/dist/components/Box/typography/typography.js.map +1 -0
  116. package/dist/components/Box/typography/typography.module.css +26 -0
  117. package/dist/components/Box/typography/typography.module.css.js +25 -0
  118. package/dist/components/Box/typography/typography.module.css.js.map +1 -0
  119. package/dist/components/Box/zIndex/zIndex.js +52 -0
  120. package/dist/components/Box/zIndex/zIndex.js.map +1 -0
  121. package/dist/components/Box/zIndex/zIndex.module.css +90 -0
  122. package/dist/components/Box/zIndex/zIndex.module.css.js +300 -0
  123. package/dist/components/Box/zIndex/zIndex.module.css.js.map +1 -0
  124. package/dist/components/Breadcrumb/Breadcrumb.js +78 -0
  125. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
  126. package/dist/components/Breadcrumb/breadcrumb.module.css +25 -0
  127. package/dist/components/Breadcrumb/breadcrumb.module.css.js +21 -0
  128. package/dist/components/Breadcrumb/breadcrumb.module.css.js.map +1 -0
  129. package/dist/components/Button/Button.js +129 -0
  130. package/dist/components/Button/Button.js.map +1 -0
  131. package/dist/components/Button/button.module.css +17 -0
  132. package/dist/components/Button/button.module.css.js +18 -0
  133. package/dist/components/Button/button.module.css.js.map +1 -0
  134. package/dist/components/Card/Card.js +60 -0
  135. package/dist/components/Card/Card.js.map +1 -0
  136. package/dist/components/Card/card.module.css +16 -0
  137. package/dist/components/Card/card.module.css.js +18 -0
  138. package/dist/components/Card/card.module.css.js.map +1 -0
  139. package/dist/components/Checkbox/Checkbox.js +74 -0
  140. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  141. package/dist/components/Checkbox/checkbox.module.css +65 -0
  142. package/dist/components/Checkbox/checkbox.module.css.js +15 -0
  143. package/dist/components/Checkbox/checkbox.module.css.js.map +1 -0
  144. package/dist/components/Code/Code.js +32 -0
  145. package/dist/components/Code/Code.js.map +1 -0
  146. package/dist/components/Container/Container.js +44 -0
  147. package/dist/components/Container/Container.js.map +1 -0
  148. package/dist/components/Divider/Divider.js +48 -0
  149. package/dist/components/Divider/Divider.js.map +1 -0
  150. package/dist/components/Flex/Flex.js +48 -0
  151. package/dist/components/Flex/Flex.js.map +1 -0
  152. package/dist/components/FormField/FormField.js +52 -0
  153. package/dist/components/FormField/FormField.js.map +1 -0
  154. package/dist/components/Grid/Grid.js +41 -0
  155. package/dist/components/Grid/Grid.js.map +1 -0
  156. package/dist/components/HStack/HStack.js +17 -0
  157. package/dist/components/HStack/HStack.js.map +1 -0
  158. package/dist/components/Heading/Heading.js +42 -0
  159. package/dist/components/Heading/Heading.js.map +1 -0
  160. package/dist/components/IconButton/IconButton.js +93 -0
  161. package/dist/components/IconButton/IconButton.js.map +1 -0
  162. package/dist/components/IconButton/iconbutton.module.css +18 -0
  163. package/dist/components/IconButton/iconbutton.module.css.js +18 -0
  164. package/dist/components/IconButton/iconbutton.module.css.js.map +1 -0
  165. package/dist/components/Image/Image.d.ts.map +1 -1
  166. package/dist/components/Image/Image.js +101 -0
  167. package/dist/components/Image/Image.js.map +1 -0
  168. package/dist/components/Image/image.module.css +44 -0
  169. package/dist/components/Image/image.module.css.js +36 -0
  170. package/dist/components/Image/image.module.css.js.map +1 -0
  171. package/dist/components/Input/Input.js +57 -0
  172. package/dist/components/Input/Input.js.map +1 -0
  173. package/dist/components/Input/input.module.css +29 -0
  174. package/dist/components/Input/input.module.css.js +12 -0
  175. package/dist/components/Input/input.module.css.js.map +1 -0
  176. package/dist/components/Label/Label.js +36 -0
  177. package/dist/components/Label/Label.js.map +1 -0
  178. package/dist/components/Link/Link.js +38 -0
  179. package/dist/components/Link/Link.js.map +1 -0
  180. package/dist/components/Link/link.module.css +28 -0
  181. package/dist/components/Link/link.module.css.js +16 -0
  182. package/dist/components/Link/link.module.css.js.map +1 -0
  183. package/dist/components/List/List.js +51 -0
  184. package/dist/components/List/List.js.map +1 -0
  185. package/dist/components/List/list.module.css +45 -0
  186. package/dist/components/List/list.module.css.js +24 -0
  187. package/dist/components/List/list.module.css.js.map +1 -0
  188. package/dist/components/Menu/Menu.d.ts.map +1 -1
  189. package/dist/components/Menu/Menu.js +143 -0
  190. package/dist/components/Menu/Menu.js.map +1 -0
  191. package/dist/components/Menu/menu.module.css +24 -0
  192. package/dist/components/Menu/menu.module.css.js +18 -0
  193. package/dist/components/Menu/menu.module.css.js.map +1 -0
  194. package/dist/components/Modal/Modal.d.ts.map +1 -1
  195. package/dist/components/Modal/Modal.js +130 -0
  196. package/dist/components/Modal/Modal.js.map +1 -0
  197. package/dist/components/Modal/modal.module.css +26 -0
  198. package/dist/components/Modal/modal.module.css.js +21 -0
  199. package/dist/components/Modal/modal.module.css.js.map +1 -0
  200. package/dist/components/Pagination/Pagination.js +125 -0
  201. package/dist/components/Pagination/Pagination.js.map +1 -0
  202. package/dist/components/Pagination/pagination.module.css +3 -0
  203. package/dist/components/Pagination/pagination.module.css.js +9 -0
  204. package/dist/components/Pagination/pagination.module.css.js.map +1 -0
  205. package/dist/components/Popover/Popover.d.ts.map +1 -1
  206. package/dist/components/Popover/Popover.js +144 -0
  207. package/dist/components/Popover/Popover.js.map +1 -0
  208. package/dist/components/Popover/popover.module.css +11 -0
  209. package/dist/components/Popover/popover.module.css.js +15 -0
  210. package/dist/components/Popover/popover.module.css.js.map +1 -0
  211. package/dist/components/Progress/Progress.js +54 -0
  212. package/dist/components/Progress/Progress.js.map +1 -0
  213. package/dist/components/Progress/progress.module.css +24 -0
  214. package/dist/components/Progress/progress.module.css.js +15 -0
  215. package/dist/components/Progress/progress.module.css.js.map +1 -0
  216. package/dist/components/Radio/Radio.js +70 -0
  217. package/dist/components/Radio/Radio.js.map +1 -0
  218. package/dist/components/Radio/radio.module.css +48 -0
  219. package/dist/components/Radio/radio.module.css.js +12 -0
  220. package/dist/components/Radio/radio.module.css.js.map +1 -0
  221. package/dist/components/Select/Select.js +57 -0
  222. package/dist/components/Select/Select.js.map +1 -0
  223. package/dist/components/Select/select.module.css +43 -0
  224. package/dist/components/Select/select.module.css.js +12 -0
  225. package/dist/components/Select/select.module.css.js.map +1 -0
  226. package/dist/components/Skeleton/Skeleton.js +37 -0
  227. package/dist/components/Skeleton/Skeleton.js.map +1 -0
  228. package/dist/components/Skeleton/skeleton.module.css +26 -0
  229. package/dist/components/Skeleton/skeleton.module.css.js +9 -0
  230. package/dist/components/Skeleton/skeleton.module.css.js.map +1 -0
  231. package/dist/components/Spacer/Spacer.js +16 -0
  232. package/dist/components/Spacer/Spacer.js.map +1 -0
  233. package/dist/components/Spinner/Spinner.js +41 -0
  234. package/dist/components/Spinner/Spinner.js.map +1 -0
  235. package/dist/components/Spinner/spinner.module.css +21 -0
  236. package/dist/components/Spinner/spinner.module.css.js +9 -0
  237. package/dist/components/Spinner/spinner.module.css.js.map +1 -0
  238. package/dist/components/Stack/Stack.js +35 -0
  239. package/dist/components/Stack/Stack.js.map +1 -0
  240. package/dist/components/Switch/Switch.js +83 -0
  241. package/dist/components/Switch/Switch.js.map +1 -0
  242. package/dist/components/Switch/switch.module.css +48 -0
  243. package/dist/components/Switch/switch.module.css.js +15 -0
  244. package/dist/components/Switch/switch.module.css.js.map +1 -0
  245. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  246. package/dist/components/Tabs/Tabs.js +87 -0
  247. package/dist/components/Tabs/Tabs.js.map +1 -0
  248. package/dist/components/Tabs/tabs.module.css +55 -0
  249. package/dist/components/Tabs/tabs.module.css.js +27 -0
  250. package/dist/components/Tabs/tabs.module.css.js.map +1 -0
  251. package/dist/components/Text/Text.d.ts.map +1 -1
  252. package/dist/components/Text/Text.js +40 -0
  253. package/dist/components/Text/Text.js.map +1 -0
  254. package/dist/components/Text/text.module.css +9 -0
  255. package/dist/components/Text/text.module.css.js +12 -0
  256. package/dist/components/Text/text.module.css.js.map +1 -0
  257. package/dist/components/Textarea/Textarea.js +70 -0
  258. package/dist/components/Textarea/Textarea.js.map +1 -0
  259. package/dist/components/Textarea/textarea.module.css +46 -0
  260. package/dist/components/Textarea/textarea.module.css.js +24 -0
  261. package/dist/components/Textarea/textarea.module.css.js.map +1 -0
  262. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  263. package/dist/components/Tooltip/Tooltip.js +135 -0
  264. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  265. package/dist/components/Tooltip/tooltip.module.css +4 -0
  266. package/dist/components/Tooltip/tooltip.module.css.js +9 -0
  267. package/dist/components/Tooltip/tooltip.module.css.js.map +1 -0
  268. package/dist/components/VStack/VStack.js +17 -0
  269. package/dist/components/VStack/VStack.js.map +1 -0
  270. package/dist/fonts.css +23 -1
  271. package/dist/index.css +3320 -1
  272. package/dist/index.d.ts.map +1 -1
  273. package/dist/index.js +99 -5521
  274. package/dist/index.js.map +1 -1
  275. package/dist/styles/styles.css +353 -0
  276. 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":"AAAA,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"}
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":";;;;;;;AAyBA,MAAM,cAAc,cAAuC,IAAI;AAE/D,SAAS,iBAAiB;AACxB,QAAM,UAAU,WAAW,WAAW;AACtC,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,0CAA0C;AACxE,SAAO;AACT;AAqDO,SAAS,KAAK;AAAA,EACnB,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAc;AACZ,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAC1D,QAAM,eAAe,qBAAqB;AAC1C,QAAM,SAAS,eAAe,mBAAmB;AAEjD,QAAM,YAAY,OAAiC,IAAI;AAEvD,QAAM,UAAU,CAAC,SAAkB;AACjC,QAAI,CAAC,cAAc;AACjB,wBAAkB,IAAI;AAAA,IACxB;AACA,QAAI,MAAM;AACR,eAAA;AAAA,IACF,OAAO;AACL,gBAAA;AAAA,IACF;AAAA,EACF;AAGA,YAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AAEb,UAAM,cAAc,CAAC,MAAkB;AACrC,UAAI,UAAU,SAAS,SAAS,EAAE,MAAc,EAAG;AACnD,cAAQ,KAAK;AAAA,IACf;AAEA,aAAS,iBAAiB,SAAS,WAAW;AAC9C,WAAO,MAAM,SAAS,oBAAoB,SAAS,WAAW;AAAA,EAChE,GAAG,CAAC,MAAM,CAAC;AAGX,YAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AAEb,UAAM,gBAAgB,CAAC,MAAqB;AAC1C,UAAI,EAAE,QAAQ,SAAU,SAAQ,KAAK;AAAA,IACvC;AAEA,aAAS,iBAAiB,WAAW,aAAa;AAClD,WAAO,MAAM,SAAS,oBAAoB,WAAW,aAAa;AAAA,EACpE,GAAG,CAAC,MAAM,CAAC;AAEX,SACE,oBAAC,YAAY,UAAZ,EAAqB,OAAO,EAAE,QAAQ,WAAW,SAAS,UAAA,GACzD,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,UAAS;AAAA,MACT,SAAQ;AAAA,MACR,WAAW,KAAK,OAAO,MAAM,SAAS;AAAA,MAErC;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;AAOO,SAAS,WAAW,EAAE,UAAU,WAAW,GAAG,QAAyB;AAC5E,QAAM,EAAE,QAAQ,WAAW,UAAA,IAAc,eAAA;AAEzC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,iBAAc;AAAA,MACd,iBAAe;AAAA,MACf,SAAS,MAAM,UAAU,CAAC,MAAM;AAAA,MAChC;AAAA,MACC,GAAG;AAAA,MAEH;AAAA,IAAA;AAAA,EAAA;AAGP;AAOO,SAAS,SAAS,EAAE,WAAW,YAA2B;AAC/D,QAAM,EAAE,OAAA,IAAW,eAAA;AAEnB,MAAI,CAAC,OAAQ,QAAO;AAEpB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,UAAS;AAAA,MACT,KAAI;AAAA,MACJ,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,MAAK;AAAA,MACL,IAAG;AAAA,MACH,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,SAAQ;AAAA,MACR,QAAO;AAAA,MACP,QAAO;AAAA,MACP,WAAW,KAAK,OAAO,UAAU,SAAS;AAAA,MAEzC;AAAA,IAAA;AAAA,EAAA;AAGP;AAOO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAAkB;AAChB,QAAM,EAAE,UAAA,IAAc,eAAA;AAEtB,QAAM,cAAc,MAAM;AACxB,QAAI,SAAU;AACd,cAAA;AACA,cAAU,KAAK;AAAA,EACjB;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAG;AAAA,MACH,MAAK;AAAA,MACL,MAAK;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,SAAQ;AAAA,MACR,YAAW;AAAA,MACX,GAAE;AAAA,MACF,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,UAAS;AAAA,MACT,OAAO,WAAW,qBAAqB;AAAA,MACvC,IAAG;AAAA,MACH,QAAO;AAAA,MACP,QAAQ,WAAW,gBAAgB;AAAA,MACnC,WAAU;AAAA,MACV,WAAW,KAAK,OAAO,UAAU,YAAY,OAAO,UAAU,SAAS;AAAA,MAEtE;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -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":"AAAA,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"}
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":";;;;;;;;;;;;"}