@tosui/react 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) 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.js +40 -0
  252. package/dist/components/Text/Text.js.map +1 -0
  253. package/dist/components/Text/text.module.css +9 -0
  254. package/dist/components/Text/text.module.css.js +12 -0
  255. package/dist/components/Text/text.module.css.js.map +1 -0
  256. package/dist/components/Textarea/Textarea.js +70 -0
  257. package/dist/components/Textarea/Textarea.js.map +1 -0
  258. package/dist/components/Textarea/textarea.module.css +46 -0
  259. package/dist/components/Textarea/textarea.module.css.js +24 -0
  260. package/dist/components/Textarea/textarea.module.css.js.map +1 -0
  261. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  262. package/dist/components/Tooltip/Tooltip.js +135 -0
  263. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  264. package/dist/components/Tooltip/tooltip.module.css +4 -0
  265. package/dist/components/Tooltip/tooltip.module.css.js +9 -0
  266. package/dist/components/Tooltip/tooltip.module.css.js.map +1 -0
  267. package/dist/components/VStack/VStack.js +17 -0
  268. package/dist/components/VStack/VStack.js.map +1 -0
  269. package/dist/fonts.css +23 -1
  270. package/dist/index.css +3320 -1
  271. package/dist/index.d.ts.map +1 -1
  272. package/dist/index.js +99 -5521
  273. package/dist/index.js.map +1 -1
  274. package/dist/styles/styles.css +353 -0
  275. package/package.json +8 -4
@@ -0,0 +1,42 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ import { Text } from "../Text/Text.js";
4
+ const defaultSizes = {
5
+ 1: "3xl",
6
+ 2: "2xl",
7
+ 3: "xl",
8
+ 4: "lg",
9
+ 5: "md",
10
+ 6: "sm"
11
+ };
12
+ function Heading({
13
+ as,
14
+ level = 1,
15
+ size,
16
+ weight = "bold",
17
+ color,
18
+ children,
19
+ ...rest
20
+ }) {
21
+ const headingElement = `h${level}`;
22
+ const defaultSize = defaultSizes[level];
23
+ const element = as ?? headingElement;
24
+ return (
25
+ // @ts-expect-error - Polymorphic component prop forwarding
26
+ /* @__PURE__ */ jsx(
27
+ Text,
28
+ {
29
+ as: element,
30
+ size: size ?? defaultSize,
31
+ weight,
32
+ color,
33
+ ...rest,
34
+ children
35
+ }
36
+ )
37
+ );
38
+ }
39
+ export {
40
+ Heading
41
+ };
42
+ //# sourceMappingURL=Heading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Heading.js","sources":["../../../src/components/Heading/Heading.tsx"],"sourcesContent":["import { type ElementType } from \"react\";\nimport { Text, type TextOwnProps } from \"../Text/Text\";\nimport { type Polymorphic } from \"@/types/Polymorphic\";\n\n// Import types from Box styleParts\ntype FontSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\" | \"5xl\";\ntype FontWeight = \"normal\" | \"medium\" | \"semibold\" | \"bold\";\ntype Color =\n | \"foreground\"\n | \"foreground-muted\"\n | \"foreground-subtle\"\n | \"accent\"\n | \"accent-emphasis\"\n | \"primary\"\n | \"primary-emphasis\"\n | \"success\"\n | \"success-emphasis\"\n | \"warning\"\n | \"warning-emphasis\"\n | \"error\"\n | \"error-emphasis\";\n\ntype HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nconst defaultSizes: Record<HeadingLevel, FontSize> = {\n 1: \"3xl\",\n 2: \"2xl\",\n 3: \"xl\",\n 4: \"lg\",\n 5: \"md\",\n 6: \"sm\",\n};\n\ntype HeadingOwnProps = Omit<TextOwnProps, \"size\" | \"weight\" | \"color\"> & {\n level?: HeadingLevel;\n size?: FontSize;\n weight?: FontWeight;\n color?: Color;\n};\n\nexport type HeadingProps<T extends ElementType = \"h1\"> = Polymorphic<\n T,\n HeadingOwnProps\n>;\n\n/**\n * Heading - Semantic heading component with predefined sizes\n *\n * Built on top of Text with heading-specific defaults:\n * - level prop maps to h1-h6 elements (default: h1)\n * - Each level has a default font size\n * - Default font weight: bold\n * - Size can be overridden via size prop\n * - Can be changed to any element via `as` prop\n */\nexport function Heading<T extends ElementType = \"h1\">({\n as,\n level = 1,\n size,\n weight = \"bold\",\n color,\n children,\n ...rest\n}: HeadingProps<T>) {\n const headingElement = `h${level}` as const;\n const defaultSize = defaultSizes[level];\n const element = as ?? headingElement;\n\n return (\n // @ts-expect-error - Polymorphic component prop forwarding\n <Text\n as={element}\n size={size ?? defaultSize}\n weight={weight}\n color={color}\n {...rest}\n >\n {children}\n </Text>\n );\n}\n"],"names":[],"mappings":";;;AAwBA,MAAM,eAA+C;AAAA,EACnD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAwBO,SAAS,QAAsC;AAAA,EACpD;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAoB;AAClB,QAAM,iBAAiB,IAAI,KAAK;AAChC,QAAM,cAAc,aAAa,KAAK;AACtC,QAAM,UAAU,MAAM;AAEtB;AAAA;AAAA,IAEE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,QACJ,MAAM,QAAQ;AAAA,QACd;AAAA,QACA;AAAA,QACC,GAAG;AAAA,QAEH;AAAA,MAAA;AAAA,IAAA;AAAA;AAGP;"}
@@ -0,0 +1,93 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import clsx from "clsx";
4
+ import { Box } from "../Box/Box.js";
5
+ import { Spinner } from "../Spinner/Spinner.js";
6
+ import styles from "./iconbutton.module.css.js";
7
+ const sizeConfig = {
8
+ sm: { dimension: "28px", iconSize: "14px", fontSize: "sm" },
9
+ md: { dimension: "36px", iconSize: "18px", fontSize: "md" },
10
+ lg: { dimension: "44px", iconSize: "22px", fontSize: "lg" }
11
+ };
12
+ function getColorConfig(variant, colorScheme) {
13
+ switch (variant) {
14
+ case "solid":
15
+ return {
16
+ bg: `${colorScheme}-default`,
17
+ color: "foreground-inverted",
18
+ borderColor: void 0,
19
+ hoverBg: `var(--t-color-${colorScheme}-emphasis)`
20
+ };
21
+ case "outline":
22
+ return {
23
+ bg: "transparent",
24
+ color: colorScheme,
25
+ borderColor: colorScheme,
26
+ hoverBg: `var(--t-color-${colorScheme}-subtle)`
27
+ };
28
+ case "ghost":
29
+ return {
30
+ bg: "transparent",
31
+ color: colorScheme,
32
+ borderColor: void 0,
33
+ hoverBg: `var(--t-color-${colorScheme}-subtle)`
34
+ };
35
+ }
36
+ }
37
+ const variantBorderConfig = {
38
+ solid: "none",
39
+ outline: "thin",
40
+ ghost: "none"
41
+ };
42
+ const IconButton = forwardRef(
43
+ function IconButton2({
44
+ icon,
45
+ "aria-label": ariaLabel,
46
+ variant = "solid",
47
+ size = "md",
48
+ colorScheme = "primary",
49
+ disabled = false,
50
+ loading = false,
51
+ className,
52
+ onClick,
53
+ ...rest
54
+ }, ref) {
55
+ const isDisabled = disabled || loading;
56
+ const colorConfig = getColorConfig(variant, colorScheme);
57
+ const sizeProps = sizeConfig[size];
58
+ return /* @__PURE__ */ jsx(
59
+ Box,
60
+ {
61
+ as: "button",
62
+ ref,
63
+ display: "inline-flex",
64
+ alignItems: "center",
65
+ justifyContent: "center",
66
+ w: sizeProps.dimension,
67
+ h: sizeProps.dimension,
68
+ fontSize: sizeProps.fontSize,
69
+ rounded: "md",
70
+ bg: colorConfig.bg,
71
+ color: colorConfig.color,
72
+ border: variantBorderConfig[variant],
73
+ borderColor: colorConfig.borderColor,
74
+ cursor: isDisabled ? "not-allowed" : "pointer",
75
+ pointerEvents: isDisabled ? "none" : void 0,
76
+ opacity: isDisabled ? "faint" : void 0,
77
+ className: clsx(styles.iconButton, styles[variant], className),
78
+ style: { "--iconbutton-hover-bg": colorConfig.hoverBg },
79
+ "aria-label": ariaLabel,
80
+ disabled: isDisabled,
81
+ "aria-disabled": isDisabled,
82
+ "aria-busy": loading,
83
+ onClick,
84
+ ...rest,
85
+ children: loading ? /* @__PURE__ */ jsx(Spinner, { size: "sm", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(Box, { as: "span", display: "inline-flex", alignItems: "center", "aria-hidden": "true", children: icon })
86
+ }
87
+ );
88
+ }
89
+ );
90
+ export {
91
+ IconButton
92
+ };
93
+ //# sourceMappingURL=IconButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconButton.js","sources":["../../../src/components/IconButton/IconButton.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type ReactNode } from \"react\";\nimport clsx from \"clsx\";\nimport { Box } from \"@/components/Box/Box\";\nimport { Spinner } from \"@/components/Spinner/Spinner\";\nimport styles from \"./iconbutton.module.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type IconButtonVariant = \"solid\" | \"outline\" | \"ghost\";\nexport type IconButtonSize = \"sm\" | \"md\" | \"lg\";\nexport type IconButtonColorScheme =\n | \"primary\"\n | \"accent\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\";\n\nexport type IconButtonProps = {\n /** The icon to display */\n icon: ReactNode;\n /** Accessible label (required for screen readers) */\n \"aria-label\": string;\n /** Visual variant */\n variant?: IconButtonVariant;\n /** Size of the button */\n size?: IconButtonSize;\n /** Color scheme */\n colorScheme?: IconButtonColorScheme;\n /** Whether the button is disabled */\n disabled?: boolean;\n /** Whether to show loading spinner */\n loading?: boolean;\n /** Additional class name */\n className?: string;\n /** Click handler */\n onClick?: () => void;\n};\n\n// ============================================================================\n// Size configurations\n// ============================================================================\n\nconst sizeConfig = {\n sm: { dimension: \"28px\", iconSize: \"14px\", fontSize: \"sm\" },\n md: { dimension: \"36px\", iconSize: \"18px\", fontSize: \"md\" },\n lg: { dimension: \"44px\", iconSize: \"22px\", fontSize: \"lg\" },\n} as const;\n\n// ============================================================================\n// Color configurations\n// ============================================================================\n\ntype ColorConfig = {\n bg: string;\n color: string;\n borderColor: string | undefined;\n hoverBg: string;\n};\n\nfunction getColorConfig(\n variant: IconButtonVariant,\n colorScheme: IconButtonColorScheme\n): ColorConfig {\n switch (variant) {\n case \"solid\":\n return {\n bg: `${colorScheme}-default`,\n color: \"foreground-inverted\",\n borderColor: undefined,\n hoverBg: `var(--t-color-${colorScheme}-emphasis)`,\n };\n case \"outline\":\n return {\n bg: \"transparent\",\n color: colorScheme,\n borderColor: colorScheme,\n hoverBg: `var(--t-color-${colorScheme}-subtle)`,\n };\n case \"ghost\":\n return {\n bg: \"transparent\",\n color: colorScheme,\n borderColor: undefined,\n hoverBg: `var(--t-color-${colorScheme}-subtle)`,\n };\n }\n}\n\n// ============================================================================\n// Variant border configurations\n// ============================================================================\n\nconst variantBorderConfig = {\n solid: \"none\",\n outline: \"thin\",\n ghost: \"none\",\n} as const;\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * IconButton - Icon-only button component\n *\n * A compact button for icons that provides:\n * - Square sizing for icon-only use\n * - All Button variants (solid, outline, ghost)\n * - All color schemes\n * - Loading state with spinner\n * - Required aria-label for accessibility\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n function IconButton(\n {\n icon,\n \"aria-label\": ariaLabel,\n variant = \"solid\",\n size = \"md\",\n colorScheme = \"primary\",\n disabled = false,\n loading = false,\n className,\n onClick,\n ...rest\n },\n ref\n ) {\n const isDisabled = disabled || loading;\n const colorConfig = getColorConfig(variant, colorScheme);\n const sizeProps = sizeConfig[size];\n\n return (\n <Box\n as=\"button\"\n ref={ref}\n // Layout\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n // Size (square)\n w={sizeProps.dimension}\n h={sizeProps.dimension}\n fontSize={sizeProps.fontSize}\n rounded=\"md\"\n // Colors (type assertions for computed values)\n bg={colorConfig.bg as any}\n color={colorConfig.color as any}\n border={variantBorderConfig[variant]}\n borderColor={colorConfig.borderColor as any}\n // Interaction states\n cursor={isDisabled ? \"not-allowed\" : \"pointer\"}\n pointerEvents={isDisabled ? \"none\" : undefined}\n opacity={isDisabled ? \"faint\" : undefined}\n // CSS module styles\n className={clsx(styles.iconButton, styles[variant], className)}\n // Hover color via CSS variable\n style={{ \"--iconbutton-hover-bg\": colorConfig.hoverBg } as CSSProperties}\n // Accessibility\n aria-label={ariaLabel}\n disabled={isDisabled}\n aria-disabled={isDisabled}\n aria-busy={loading}\n onClick={onClick}\n {...rest}\n >\n {loading ? (\n <Spinner size=\"sm\" aria-hidden=\"true\" />\n ) : (\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" aria-hidden=\"true\">\n {icon}\n </Box>\n )}\n </Box>\n );\n }\n);\n"],"names":["IconButton"],"mappings":";;;;;;AA6CA,MAAM,aAAa;AAAA,EACjB,IAAI,EAAE,WAAW,QAAQ,UAAU,QAAQ,UAAU,KAAA;AAAA,EACrD,IAAI,EAAE,WAAW,QAAQ,UAAU,QAAQ,UAAU,KAAA;AAAA,EACrD,IAAI,EAAE,WAAW,QAAQ,UAAU,QAAQ,UAAU,KAAA;AACvD;AAaA,SAAS,eACP,SACA,aACa;AACb,UAAQ,SAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,QACL,IAAI,GAAG,WAAW;AAAA,QAClB,OAAO;AAAA,QACP,aAAa;AAAA,QACb,SAAS,iBAAiB,WAAW;AAAA,MAAA;AAAA,IAEzC,KAAK;AACH,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,aAAa;AAAA,QACb,SAAS,iBAAiB,WAAW;AAAA,MAAA;AAAA,IAEzC,KAAK;AACH,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,aAAa;AAAA,QACb,SAAS,iBAAiB,WAAW;AAAA,MAAA;AAAA,EACvC;AAEN;AAMA,MAAM,sBAAsB;AAAA,EAC1B,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AACT;AAgBO,MAAM,aAAa;AAAA,EACxB,SAASA,YACP;AAAA,IACE;AAAA,IACA,cAAc;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,IACP,cAAc;AAAA,IACd,WAAW;AAAA,IACX,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,GAEL,KACA;AACA,UAAM,aAAa,YAAY;AAC/B,UAAM,cAAc,eAAe,SAAS,WAAW;AACvD,UAAM,YAAY,WAAW,IAAI;AAEjC,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH;AAAA,QAEA,SAAQ;AAAA,QACR,YAAW;AAAA,QACX,gBAAe;AAAA,QAEf,GAAG,UAAU;AAAA,QACb,GAAG,UAAU;AAAA,QACb,UAAU,UAAU;AAAA,QACpB,SAAQ;AAAA,QAER,IAAI,YAAY;AAAA,QAChB,OAAO,YAAY;AAAA,QACnB,QAAQ,oBAAoB,OAAO;AAAA,QACnC,aAAa,YAAY;AAAA,QAEzB,QAAQ,aAAa,gBAAgB;AAAA,QACrC,eAAe,aAAa,SAAS;AAAA,QACrC,SAAS,aAAa,UAAU;AAAA,QAEhC,WAAW,KAAK,OAAO,YAAY,OAAO,OAAO,GAAG,SAAS;AAAA,QAE7D,OAAO,EAAE,yBAAyB,YAAY,QAAA;AAAA,QAE9C,cAAY;AAAA,QACZ,UAAU;AAAA,QACV,iBAAe;AAAA,QACf,aAAW;AAAA,QACX;AAAA,QACC,GAAG;AAAA,QAEH,oBACC,oBAAC,SAAA,EAAQ,MAAK,MAAK,eAAY,QAAO,IAEtC,oBAAC,KAAA,EAAI,IAAG,QAAO,SAAQ,eAAc,YAAW,UAAS,eAAY,QAClE,UAAA,KAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;"}
@@ -0,0 +1,18 @@
1
+ ._iconButton_1xb56_1 {
2
+ transition-duration: 150ms;
3
+ transition-property: background-color, border-color, opacity;
4
+ transition-timing-function: ease-in-out;
5
+ flex-shrink: 0;
6
+ }
7
+
8
+ ._solid_1xb56_8:hover:not(:disabled) {
9
+ background-color: var(--iconbutton-hover-bg);
10
+ }
11
+
12
+ ._outline_1xb56_12:hover:not(:disabled) {
13
+ background-color: var(--iconbutton-hover-bg);
14
+ }
15
+
16
+ ._ghost_1xb56_16:hover:not(:disabled) {
17
+ background-color: var(--iconbutton-hover-bg);
18
+ }
@@ -0,0 +1,18 @@
1
+ const iconButton = "_iconButton_1xb56_1";
2
+ const solid = "_solid_1xb56_8";
3
+ const outline = "_outline_1xb56_12";
4
+ const ghost = "_ghost_1xb56_16";
5
+ const styles = {
6
+ iconButton,
7
+ solid,
8
+ outline,
9
+ ghost
10
+ };
11
+ export {
12
+ styles as default,
13
+ ghost,
14
+ iconButton,
15
+ outline,
16
+ solid
17
+ };
18
+ //# sourceMappingURL=iconbutton.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconbutton.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../src/components/Image/Image.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAOzE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnE,MAAM,MAAM,UAAU,GAAG;IACvB,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,wBAAwB;IACxB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,yBAAyB;IACzB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAMF;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,EACpB,GAAG,EACH,GAAG,EACH,CAAC,EACD,CAAC,EACD,SAAmB,EACnB,WAAW,EACX,OAAgB,EAChB,SAAS,GACV,EAAE,UAAU,2CA6EZ"}
1
+ {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../src/components/Image/Image.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAOzE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnE,MAAM,MAAM,UAAU,GAAG;IACvB,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,wBAAwB;IACxB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,yBAAyB;IACzB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAMF;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,EACpB,GAAG,EACH,GAAG,EACH,CAAC,EACD,CAAC,EACD,SAAmB,EACnB,WAAW,EACX,OAAgB,EAChB,SAAS,GACV,EAAE,UAAU,2CA6EZ"}
@@ -0,0 +1,101 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import clsx from "clsx";
5
+ import { Box } from "../Box/Box.js";
6
+ import { Skeleton } from "../Skeleton/Skeleton.js";
7
+ import styles from "./image.module.css.js";
8
+ function Image({
9
+ src,
10
+ alt,
11
+ w,
12
+ h,
13
+ objectFit = "cover",
14
+ fallbackSrc,
15
+ rounded = "none",
16
+ className
17
+ }) {
18
+ const [isLoading, setIsLoading] = useState(true);
19
+ const [hasError, setHasError] = useState(false);
20
+ const [currentSrc, setCurrentSrc] = useState(src);
21
+ const handleLoad = () => {
22
+ setIsLoading(false);
23
+ };
24
+ const handleError = () => {
25
+ if (fallbackSrc && currentSrc !== fallbackSrc) {
26
+ setCurrentSrc(fallbackSrc);
27
+ setIsLoading(true);
28
+ } else {
29
+ setIsLoading(false);
30
+ setHasError(true);
31
+ }
32
+ };
33
+ const style = {
34
+ width: w,
35
+ height: h
36
+ };
37
+ if (hasError) {
38
+ return /* @__PURE__ */ jsx(
39
+ Box,
40
+ {
41
+ display: "flex",
42
+ alignItems: "center",
43
+ justifyContent: "center",
44
+ bg: "surface",
45
+ color: "foreground-muted",
46
+ rounded,
47
+ className: clsx(styles.placeholder, className),
48
+ style,
49
+ children: /* @__PURE__ */ jsx(
50
+ "svg",
51
+ {
52
+ viewBox: "0 0 24 24",
53
+ fill: "currentColor",
54
+ className: styles.placeholderIcon,
55
+ children: /* @__PURE__ */ jsx("path", { d: "M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z" })
56
+ }
57
+ )
58
+ }
59
+ );
60
+ }
61
+ return /* @__PURE__ */ jsxs(
62
+ Box,
63
+ {
64
+ position: "relative",
65
+ display: "inline-block",
66
+ overflow: "hidden",
67
+ rounded,
68
+ className: clsx(styles.container, className),
69
+ style,
70
+ children: [
71
+ isLoading && /* @__PURE__ */ jsx(
72
+ Skeleton,
73
+ {
74
+ w: "100%",
75
+ h: "100%",
76
+ rounded,
77
+ className: styles.skeleton
78
+ }
79
+ ),
80
+ /* @__PURE__ */ jsx(
81
+ "img",
82
+ {
83
+ src: currentSrc,
84
+ alt,
85
+ onLoad: handleLoad,
86
+ onError: handleError,
87
+ className: clsx(
88
+ styles.image,
89
+ styles[objectFit],
90
+ isLoading && styles.hidden
91
+ )
92
+ }
93
+ )
94
+ ]
95
+ }
96
+ );
97
+ }
98
+ export {
99
+ Image
100
+ };
101
+ //# sourceMappingURL=Image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Image.js","sources":["../../../src/components/Image/Image.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, type CSSProperties } from \"react\";\nimport clsx from \"clsx\";\nimport { Box } from \"@/components/Box/Box\";\nimport { Skeleton } from \"@/components/Skeleton/Skeleton\";\nimport type { RoundedValue } from \"@/components/Box/roundness/roundness\";\nimport styles from \"./image.module.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type ImageObjectFit = \"cover\" | \"contain\" | \"fill\" | \"none\";\n\nexport type ImageProps = {\n /** Image source URL */\n src: string;\n /** Alt text (required for accessibility) */\n alt: string;\n /** Width (CSS value) */\n w?: string;\n /** Height (CSS value) */\n h?: string;\n /** Object fit behavior */\n objectFit?: ImageObjectFit;\n /** Fallback source if main image fails */\n fallbackSrc?: string;\n /** Border radius */\n rounded?: RoundedValue;\n /** Additional class name */\n className?: string;\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Image - Enhanced img element\n *\n * An image component with:\n * - Loading state with Skeleton placeholder\n * - Error fallback support\n * - Object-fit options\n * - Rounded corner variants\n */\nexport function Image({\n src,\n alt,\n w,\n h,\n objectFit = \"cover\",\n fallbackSrc,\n rounded = \"none\",\n className,\n}: ImageProps) {\n const [isLoading, setIsLoading] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [currentSrc, setCurrentSrc] = useState(src);\n\n const handleLoad = () => {\n setIsLoading(false);\n };\n\n const handleError = () => {\n if (fallbackSrc && currentSrc !== fallbackSrc) {\n setCurrentSrc(fallbackSrc);\n setIsLoading(true);\n } else {\n setIsLoading(false);\n setHasError(true);\n }\n };\n\n const style: CSSProperties = {\n width: w,\n height: h,\n };\n\n if (hasError) {\n return (\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n bg=\"surface\"\n color=\"foreground-muted\"\n rounded={rounded}\n className={clsx(styles.placeholder, className)}\n style={style}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={styles.placeholderIcon}\n >\n <path d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\" />\n </svg>\n </Box>\n );\n }\n\n return (\n <Box\n position=\"relative\"\n display=\"inline-block\"\n overflow=\"hidden\"\n rounded={rounded}\n className={clsx(styles.container, className)}\n style={style}\n >\n {isLoading && (\n <Skeleton\n w=\"100%\"\n h=\"100%\"\n rounded={rounded}\n className={styles.skeleton}\n />\n )}\n <img\n src={currentSrc}\n alt={alt}\n onLoad={handleLoad}\n onError={handleError}\n className={clsx(\n styles.image,\n styles[objectFit],\n isLoading && styles.hidden\n )}\n />\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;AA+CO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,EACV;AACF,GAAe;AACb,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,IAAI;AAC/C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,GAAG;AAEhD,QAAM,aAAa,MAAM;AACvB,iBAAa,KAAK;AAAA,EACpB;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,eAAe,eAAe,aAAa;AAC7C,oBAAc,WAAW;AACzB,mBAAa,IAAI;AAAA,IACnB,OAAO;AACL,mBAAa,KAAK;AAClB,kBAAY,IAAI;AAAA,IAClB;AAAA,EACF;AAEA,QAAM,QAAuB;AAAA,IAC3B,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAGV,MAAI,UAAU;AACZ,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,YAAW;AAAA,QACX,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,OAAM;AAAA,QACN;AAAA,QACA,WAAW,KAAK,OAAO,aAAa,SAAS;AAAA,QAC7C;AAAA,QAEA,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,WAAW,OAAO;AAAA,YAElB,UAAA,oBAAC,QAAA,EAAK,GAAE,2HAAA,CAA2H;AAAA,UAAA;AAAA,QAAA;AAAA,MACrI;AAAA,IAAA;AAAA,EAGN;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,UAAS;AAAA,MACT,SAAQ;AAAA,MACR,UAAS;AAAA,MACT;AAAA,MACA,WAAW,KAAK,OAAO,WAAW,SAAS;AAAA,MAC3C;AAAA,MAEC,UAAA;AAAA,QAAA,aACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAE;AAAA,YACF,GAAE;AAAA,YACF;AAAA,YACA,WAAW,OAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QAGtB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK;AAAA,YACL;AAAA,YACA,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,WAAW;AAAA,cACT,OAAO;AAAA,cACP,OAAO,SAAS;AAAA,cAChB,aAAa,OAAO;AAAA,YAAA;AAAA,UACtB;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -0,0 +1,44 @@
1
+ ._container_ctyvb_1 {
2
+ line-height: 0;
3
+ }
4
+
5
+ ._skeleton_ctyvb_5 {
6
+ position: absolute;
7
+ inset: 0;
8
+ }
9
+
10
+ ._image_ctyvb_10 {
11
+ width: 100%;
12
+ height: 100%;
13
+ display: block;
14
+ }
15
+
16
+ ._hidden_ctyvb_16 {
17
+ opacity: 0;
18
+ }
19
+
20
+ ._cover_ctyvb_20 {
21
+ object-fit: cover;
22
+ }
23
+
24
+ ._contain_ctyvb_1 {
25
+ object-fit: contain;
26
+ }
27
+
28
+ ._fill_ctyvb_28 {
29
+ object-fit: fill;
30
+ }
31
+
32
+ ._none_ctyvb_32 {
33
+ object-fit: none;
34
+ }
35
+
36
+ ._placeholder_ctyvb_36 {
37
+ min-height: 100px;
38
+ }
39
+
40
+ ._placeholderIcon_ctyvb_40 {
41
+ width: 48px;
42
+ height: 48px;
43
+ opacity: 0.5;
44
+ }
@@ -0,0 +1,36 @@
1
+ const container = "_container_ctyvb_1";
2
+ const skeleton = "_skeleton_ctyvb_5";
3
+ const image = "_image_ctyvb_10";
4
+ const hidden = "_hidden_ctyvb_16";
5
+ const cover = "_cover_ctyvb_20";
6
+ const contain = "_contain_ctyvb_1";
7
+ const fill = "_fill_ctyvb_28";
8
+ const none = "_none_ctyvb_32";
9
+ const placeholder = "_placeholder_ctyvb_36";
10
+ const placeholderIcon = "_placeholderIcon_ctyvb_40";
11
+ const styles = {
12
+ container,
13
+ skeleton,
14
+ image,
15
+ hidden,
16
+ cover,
17
+ contain,
18
+ fill,
19
+ none,
20
+ placeholder,
21
+ placeholderIcon
22
+ };
23
+ export {
24
+ contain,
25
+ container,
26
+ cover,
27
+ styles as default,
28
+ fill,
29
+ hidden,
30
+ image,
31
+ none,
32
+ placeholder,
33
+ placeholderIcon,
34
+ skeleton
35
+ };
36
+ //# sourceMappingURL=image.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,57 @@
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 "./input.module.css.js";
6
+ const sizeConfig = {
7
+ sm: { h: 8, px: 2, fontSize: "sm", rounded: "sm" },
8
+ md: { h: 10, px: 3, fontSize: "md", rounded: "md" },
9
+ lg: { h: 12, px: 4, fontSize: "lg", rounded: "md" }
10
+ };
11
+ function Input({
12
+ as,
13
+ size = "md",
14
+ variant = "outline",
15
+ disabled = false,
16
+ isInvalid = false,
17
+ className,
18
+ ...rest
19
+ }) {
20
+ const Component = as || "input";
21
+ const sizeProps = sizeConfig[size];
22
+ const variantStyles = variant === "outline" ? {
23
+ bg: "transparent",
24
+ border: "thin",
25
+ borderColor: "border"
26
+ } : {
27
+ bg: "surface",
28
+ border: "thin",
29
+ borderColor: "border-muted"
30
+ };
31
+ return (
32
+ // @ts-expect-error - Polymorphic component type forwarding
33
+ /* @__PURE__ */ jsx(
34
+ Box,
35
+ {
36
+ as: Component,
37
+ h: sizeProps.h,
38
+ px: sizeProps.px,
39
+ fontSize: sizeProps.fontSize,
40
+ rounded: sizeProps.rounded,
41
+ bg: variantStyles.bg,
42
+ border: variantStyles.border,
43
+ borderColor: variantStyles.borderColor,
44
+ w: "100%",
45
+ color: "foreground",
46
+ className: clsx(styles.input, isInvalid && styles.invalid, className),
47
+ disabled,
48
+ "aria-invalid": isInvalid || void 0,
49
+ ...rest
50
+ }
51
+ )
52
+ );
53
+ }
54
+ export {
55
+ Input
56
+ };
57
+ //# sourceMappingURL=Input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.js","sources":["../../../src/components/Input/Input.tsx"],"sourcesContent":["import { type ElementType } from \"react\";\nimport clsx from \"clsx\";\nimport { type Polymorphic } from \"@/types/Polymorphic\";\nimport { Box, type BoxOwnProps } from \"@/components/Box/Box\";\nimport styles from \"./input.module.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\nexport type InputVariant = \"outline\" | \"filled\";\n\nexport type InputOwnProps = Omit<\n BoxOwnProps,\n \"as\" | \"h\" | \"fontSize\" | \"rounded\" | \"border\" | \"borderColor\" | \"bg\"\n> & {\n /** Input size affecting height and font size */\n size?: InputSize;\n /** Visual variant: outline (border) or filled (surface background) */\n variant?: InputVariant;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Whether the input is in an invalid state */\n isInvalid?: boolean;\n};\n\nexport type InputProps<T extends ElementType = \"input\"> = Polymorphic<\n T,\n InputOwnProps\n>;\n\n// ============================================================================\n// Size configurations\n// ============================================================================\n\nconst sizeConfig = {\n sm: { h: 8, px: 2, fontSize: \"sm\", rounded: \"sm\" },\n md: { h: 10, px: 3, fontSize: \"md\", rounded: \"md\" },\n lg: { h: 12, px: 4, fontSize: \"lg\", rounded: \"md\" },\n} as const;\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Input - Text input field component\n *\n * A polymorphic input component that provides:\n * - Default element: <input>\n * - Sizes: sm, md (default), lg\n * - Variants: outline (default), filled\n * - Disabled and invalid states\n * - Focus ring styling\n */\nexport function Input<T extends ElementType = \"input\">({\n as,\n size = \"md\",\n variant = \"outline\",\n disabled = false,\n isInvalid = false,\n className,\n ...rest\n}: InputProps<T>) {\n const Component = as || \"input\";\n const sizeProps = sizeConfig[size];\n\n // Variant-specific styling\n const variantStyles =\n variant === \"outline\"\n ? {\n bg: \"transparent\" as const,\n border: \"thin\" as const,\n borderColor: \"border\" as const,\n }\n : {\n bg: \"surface\" as const,\n border: \"thin\" as const,\n borderColor: \"border-muted\" as const,\n };\n\n return (\n // @ts-expect-error - Polymorphic component type forwarding\n <Box\n as={Component}\n // Size props\n h={sizeProps.h}\n px={sizeProps.px}\n fontSize={sizeProps.fontSize}\n rounded={sizeProps.rounded}\n // Variant props\n bg={variantStyles.bg}\n border={variantStyles.border}\n borderColor={variantStyles.borderColor}\n // Full width by default\n w=\"100%\"\n // Colors\n color=\"foreground\"\n // CSS module for states\n className={clsx(styles.input, isInvalid && styles.invalid, className)}\n // Native disabled\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n {...rest}\n />\n );\n}\n"],"names":[],"mappings":";;;;;AAoCA,MAAM,aAAa;AAAA,EACjB,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,UAAU,MAAM,SAAS,KAAA;AAAA,EAC5C,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,UAAU,MAAM,SAAS,KAAA;AAAA,EAC7C,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,UAAU,MAAM,SAAS,KAAA;AAC/C;AAgBO,SAAS,MAAuC;AAAA,EACrD;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,GAAkB;AAChB,QAAM,YAAY,MAAM;AACxB,QAAM,YAAY,WAAW,IAAI;AAGjC,QAAM,gBACJ,YAAY,YACR;AAAA,IACE,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,aAAa;AAAA,EAAA,IAEf;AAAA,IACE,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,aAAa;AAAA,EAAA;AAGrB;AAAA;AAAA,IAEE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,QAEJ,GAAG,UAAU;AAAA,QACb,IAAI,UAAU;AAAA,QACd,UAAU,UAAU;AAAA,QACpB,SAAS,UAAU;AAAA,QAEnB,IAAI,cAAc;AAAA,QAClB,QAAQ,cAAc;AAAA,QACtB,aAAa,cAAc;AAAA,QAE3B,GAAE;AAAA,QAEF,OAAM;AAAA,QAEN,WAAW,KAAK,OAAO,OAAO,aAAa,OAAO,SAAS,SAAS;AAAA,QAEpE;AAAA,QACA,gBAAc,aAAa;AAAA,QAC1B,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA;AAGV;"}
@@ -0,0 +1,29 @@
1
+ ._input_72e18_1 {
2
+ transition-duration: 150ms;
3
+ transition-property: border-color, background-color, box-shadow;
4
+ transition-timing-function: ease-in-out;
5
+ }
6
+
7
+ ._input_72e18_1::placeholder {
8
+ color: var(--t-color-foreground-subtle);
9
+ }
10
+
11
+ ._input_72e18_1:focus-visible {
12
+ outline: none;
13
+ border-color: var(--t-color-primary-default);
14
+ box-shadow: 0 0 0 3px var(--t-color-primary-subtle);
15
+ }
16
+
17
+ ._input_72e18_1:disabled {
18
+ cursor: not-allowed;
19
+ opacity: 0.5;
20
+ }
21
+
22
+ ._input_72e18_1._invalid_72e18_22 {
23
+ border-color: var(--t-color-error-default);
24
+ }
25
+
26
+ ._input_72e18_1._invalid_72e18_22:focus-visible {
27
+ border-color: var(--t-color-error-default);
28
+ box-shadow: 0 0 0 3px var(--t-color-error-subtle);
29
+ }
@@ -0,0 +1,12 @@
1
+ const input = "_input_72e18_1";
2
+ const invalid = "_invalid_72e18_22";
3
+ const styles = {
4
+ input,
5
+ invalid
6
+ };
7
+ export {
8
+ styles as default,
9
+ input,
10
+ invalid
11
+ };
12
+ //# sourceMappingURL=input.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,36 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ import { Box } from "../Box/Box.js";
4
+ function Label({
5
+ as,
6
+ size = "sm",
7
+ weight = "medium",
8
+ required = false,
9
+ children,
10
+ ...rest
11
+ }) {
12
+ const Component = as || "label";
13
+ return (
14
+ // @ts-expect-error - Polymorphic component type forwarding
15
+ /* @__PURE__ */ jsxs(
16
+ Box,
17
+ {
18
+ as: Component,
19
+ fontSize: size,
20
+ fontWeight: weight,
21
+ color: "foreground",
22
+ display: "inline-block",
23
+ mb: 1,
24
+ ...rest,
25
+ children: [
26
+ children,
27
+ required && /* @__PURE__ */ jsx(Box, { as: "span", color: "error", ml: 1, "aria-hidden": "true", children: "*" })
28
+ ]
29
+ }
30
+ )
31
+ );
32
+ }
33
+ export {
34
+ Label
35
+ };
36
+ //# sourceMappingURL=Label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Label.js","sources":["../../../src/components/Label/Label.tsx"],"sourcesContent":["import { type ElementType } from \"react\";\nimport { type Polymorphic } from \"@/types/Polymorphic\";\nimport { Box, type BoxOwnProps } from \"@/components/Box/Box\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype FontSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\ntype FontWeight = \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n\nexport type LabelOwnProps = Omit<\n BoxOwnProps,\n \"as\" | \"fontSize\" | \"fontWeight\"\n> & {\n /** Label text size */\n size?: FontSize;\n /** Label font weight */\n weight?: FontWeight;\n /** Show required asterisk */\n required?: boolean;\n};\n\nexport type LabelProps<T extends ElementType = \"label\"> = Polymorphic<\n T,\n LabelOwnProps\n>;\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Label - Form label component\n *\n * A polymorphic label component that provides:\n * - Default element: <label>\n * - Size and weight props for typography\n * - Required indicator (red asterisk)\n * - Passes through htmlFor for accessibility\n */\nexport function Label<T extends ElementType = \"label\">({\n as,\n size = \"sm\",\n weight = \"medium\",\n required = false,\n children,\n ...rest\n}: LabelProps<T>) {\n const Component = as || \"label\";\n\n return (\n // @ts-expect-error - Polymorphic component type forwarding\n <Box\n as={Component}\n fontSize={size}\n fontWeight={weight}\n color=\"foreground\"\n display=\"inline-block\"\n mb={1}\n {...rest}\n >\n {children}\n {required && (\n <Box as=\"span\" color=\"error\" ml={1} aria-hidden=\"true\">\n *\n </Box>\n )}\n </Box>\n );\n}\n"],"names":[],"mappings":";;;AAyCO,SAAS,MAAuC;AAAA,EACrD;AAAA,EACA,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,EACX;AAAA,EACA,GAAG;AACL,GAAkB;AAChB,QAAM,YAAY,MAAM;AAExB;AAAA;AAAA,IAEE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,IAAI;AAAA,QACH,GAAG;AAAA,QAEH,UAAA;AAAA,UAAA;AAAA,UACA,YACC,oBAAC,KAAA,EAAI,IAAG,QAAO,OAAM,SAAQ,IAAI,GAAG,eAAY,QAAO,UAAA,IAAA,CAEvD;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA;AAIR;"}
@@ -0,0 +1,38 @@
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 "./link.module.css.js";
6
+ function Link({
7
+ as,
8
+ variant = "default",
9
+ external = false,
10
+ children,
11
+ className,
12
+ ...rest
13
+ }) {
14
+ const Component = as || "a";
15
+ const externalProps = external ? {
16
+ target: "_blank",
17
+ rel: "noopener noreferrer"
18
+ } : {};
19
+ return (
20
+ // @ts-expect-error - Polymorphic component type forwarding
21
+ /* @__PURE__ */ jsx(
22
+ Box,
23
+ {
24
+ as: Component,
25
+ color: variant === "subtle" ? void 0 : "primary",
26
+ cursor: "pointer",
27
+ className: clsx(styles.link, styles[variant], className),
28
+ ...externalProps,
29
+ ...rest,
30
+ children
31
+ }
32
+ )
33
+ );
34
+ }
35
+ export {
36
+ Link
37
+ };
38
+ //# sourceMappingURL=Link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link.js","sources":["../../../src/components/Link/Link.tsx"],"sourcesContent":["import { type ElementType, type ReactNode } from \"react\";\nimport clsx from \"clsx\";\nimport { type Polymorphic } from \"@/types/Polymorphic\";\nimport { Box, type BoxOwnProps } from \"@/components/Box/Box\";\nimport styles from \"./link.module.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type LinkVariant = \"default\" | \"underline\" | \"subtle\";\n\nexport type LinkOwnProps = Omit<BoxOwnProps, \"as\"> & {\n /** Visual variant */\n variant?: LinkVariant;\n /** External link (opens in new tab) */\n external?: boolean;\n /** Link content */\n children?: ReactNode;\n};\n\nexport type LinkProps<T extends ElementType = \"a\"> = Polymorphic<T, LinkOwnProps>;\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Link - Styled anchor element\n *\n * A polymorphic link component that provides:\n * - Default element: <a>\n * - Variants: default (underline on hover), underline (always), subtle (inherits color)\n * - External link support with target=\"_blank\"\n * - Router support via as prop\n */\nexport function Link<T extends ElementType = \"a\">({\n as,\n variant = \"default\",\n external = false,\n children,\n className,\n ...rest\n}: LinkProps<T>) {\n const Component = as || \"a\";\n\n const externalProps = external\n ? {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n }\n : {};\n\n return (\n // @ts-expect-error - Polymorphic component type forwarding\n <Box\n as={Component}\n color={variant === \"subtle\" ? undefined : \"primary\"}\n cursor=\"pointer\"\n className={clsx(styles.link, styles[variant], className)}\n {...externalProps}\n {...rest}\n >\n {children}\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;AAoCO,SAAS,KAAkC;AAAA,EAChD;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAiB;AACf,QAAM,YAAY,MAAM;AAExB,QAAM,gBAAgB,WAClB;AAAA,IACE,QAAQ;AAAA,IACR,KAAK;AAAA,EAAA,IAEP,CAAA;AAEJ;AAAA;AAAA,IAEE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,QACJ,OAAO,YAAY,WAAW,SAAY;AAAA,QAC1C,QAAO;AAAA,QACP,WAAW,KAAK,OAAO,MAAM,OAAO,OAAO,GAAG,SAAS;AAAA,QACtD,GAAG;AAAA,QACH,GAAG;AAAA,QAEH;AAAA,MAAA;AAAA,IAAA;AAAA;AAGP;"}
@@ -0,0 +1,28 @@
1
+ ._link_1xu5z_1 {
2
+ transition: color 0.15s ease, opacity 0.15s ease;
3
+ }
4
+
5
+ ._link_1xu5z_1:hover {
6
+ opacity: 0.8;
7
+ }
8
+
9
+ ._default_1xu5z_9 {
10
+ text-decoration: none;
11
+ }
12
+
13
+ ._default_1xu5z_9:hover {
14
+ text-decoration: underline;
15
+ }
16
+
17
+ ._underline_1xu5z_17 {
18
+ text-decoration: underline;
19
+ }
20
+
21
+ ._subtle_1xu5z_21 {
22
+ text-decoration: none;
23
+ color: inherit;
24
+ }
25
+
26
+ ._subtle_1xu5z_21:hover {
27
+ color: var(--t-color-primary-default);
28
+ }