@tomny-dev/uzi 0.5.0 → 0.6.0

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 (277) hide show
  1. package/README.md +4 -1
  2. package/dist/components/card/Card.d.ts +7 -5
  3. package/dist/components/card/Card.d.ts.map +1 -1
  4. package/dist/components/surface/Surface.d.ts +16 -0
  5. package/dist/components/surface/Surface.d.ts.map +1 -0
  6. package/dist/components/toolbar/Toolbar.d.ts +13 -0
  7. package/dist/components/toolbar/Toolbar.d.ts.map +1 -0
  8. package/dist/index.cjs +36 -31
  9. package/dist/index.d.ts +4 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +34 -32
  12. package/dist/index10.cjs.map +1 -1
  13. package/dist/index10.js +19 -15
  14. package/dist/index10.js.map +1 -1
  15. package/dist/index11.cjs +21 -18
  16. package/dist/index11.cjs.map +1 -1
  17. package/dist/index11.js +8 -15
  18. package/dist/index11.js.map +1 -1
  19. package/dist/index12.cjs +7 -14
  20. package/dist/index12.cjs.map +1 -1
  21. package/dist/index12.js +15 -37
  22. package/dist/index12.js.map +1 -1
  23. package/dist/index13.cjs +18 -52
  24. package/dist/index13.cjs.map +1 -1
  25. package/dist/index13.js +15 -77
  26. package/dist/index13.js.map +1 -1
  27. package/dist/index14.cjs +15 -80
  28. package/dist/index14.cjs.map +1 -1
  29. package/dist/index14.js +37 -13
  30. package/dist/index14.js.map +1 -1
  31. package/dist/index15.cjs +52 -18
  32. package/dist/index15.cjs.map +1 -1
  33. package/dist/index15.js +77 -9
  34. package/dist/index15.js.map +1 -1
  35. package/dist/index16.cjs +79 -8
  36. package/dist/index16.cjs.map +1 -1
  37. package/dist/index16.js +13 -41
  38. package/dist/index16.js.map +1 -1
  39. package/dist/index17.cjs +18 -60
  40. package/dist/index17.cjs.map +1 -1
  41. package/dist/index17.js +9 -428
  42. package/dist/index17.js.map +1 -1
  43. package/dist/index18.cjs +8 -430
  44. package/dist/index18.cjs.map +1 -1
  45. package/dist/index18.js +42 -4
  46. package/dist/index18.js.map +1 -1
  47. package/dist/index19.cjs +61 -5
  48. package/dist/index19.cjs.map +1 -1
  49. package/dist/index19.js +430 -13
  50. package/dist/index19.js.map +1 -1
  51. package/dist/index20.cjs +430 -12
  52. package/dist/index20.cjs.map +1 -1
  53. package/dist/index20.js +4 -4
  54. package/dist/index20.js.map +1 -1
  55. package/dist/index21.cjs +5 -5
  56. package/dist/index21.cjs.map +1 -1
  57. package/dist/index21.js +12 -9
  58. package/dist/index21.js.map +1 -1
  59. package/dist/index22.cjs +12 -9
  60. package/dist/index22.cjs.map +1 -1
  61. package/dist/index22.js +4 -4
  62. package/dist/index22.js.map +1 -1
  63. package/dist/index23.cjs +5 -5
  64. package/dist/index23.cjs.map +1 -1
  65. package/dist/index23.js +9 -12
  66. package/dist/index23.js.map +1 -1
  67. package/dist/index24.cjs +9 -12
  68. package/dist/index24.cjs.map +1 -1
  69. package/dist/index24.js +4 -38
  70. package/dist/index24.js.map +1 -1
  71. package/dist/index25.cjs +5 -55
  72. package/dist/index25.cjs.map +1 -1
  73. package/dist/index25.js +11 -116
  74. package/dist/index25.js.map +1 -1
  75. package/dist/index26.cjs +10 -116
  76. package/dist/index26.cjs.map +1 -1
  77. package/dist/index26.js +31 -19
  78. package/dist/index26.js.map +1 -1
  79. package/dist/index27.cjs +42 -24
  80. package/dist/index27.cjs.map +1 -1
  81. package/dist/index27.js +106 -93
  82. package/dist/index27.js.map +1 -1
  83. package/dist/index28.cjs +106 -93
  84. package/dist/index28.cjs.map +1 -1
  85. package/dist/index28.js +26 -23
  86. package/dist/index28.js.map +1 -1
  87. package/dist/index29.cjs +37 -25
  88. package/dist/index29.cjs.map +1 -1
  89. package/dist/index29.js +107 -26
  90. package/dist/index29.js.map +1 -1
  91. package/dist/index30.cjs +110 -37
  92. package/dist/index30.cjs.map +1 -1
  93. package/dist/index30.js +21 -113
  94. package/dist/index30.js.map +1 -1
  95. package/dist/index31.cjs +19 -125
  96. package/dist/index31.cjs.map +1 -1
  97. package/dist/index31.js +26 -17
  98. package/dist/index31.js.map +1 -1
  99. package/dist/index32.cjs +37 -20
  100. package/dist/index32.cjs.map +1 -1
  101. package/dist/index32.js +108 -104
  102. package/dist/index32.js.map +1 -1
  103. package/dist/index33.cjs +122 -103
  104. package/dist/index33.cjs.map +1 -1
  105. package/dist/index33.js +17 -4
  106. package/dist/index33.js.map +1 -1
  107. package/dist/index34.cjs +20 -5
  108. package/dist/index34.cjs.map +1 -1
  109. package/dist/index34.js +106 -58
  110. package/dist/index34.js.map +1 -1
  111. package/dist/index35.cjs +106 -57
  112. package/dist/index35.cjs.map +1 -1
  113. package/dist/index35.js +4 -22
  114. package/dist/index35.js.map +1 -1
  115. package/dist/index36.cjs +5 -31
  116. package/dist/index36.cjs.map +1 -1
  117. package/dist/index36.js +55 -44
  118. package/dist/index36.js.map +1 -1
  119. package/dist/index37.cjs +55 -44
  120. package/dist/index37.cjs.map +1 -1
  121. package/dist/index37.js +21 -31
  122. package/dist/index37.js.map +1 -1
  123. package/dist/index38.cjs +30 -45
  124. package/dist/index38.cjs.map +1 -1
  125. package/dist/index38.js +46 -141
  126. package/dist/index38.js.map +1 -1
  127. package/dist/index39.cjs +46 -141
  128. package/dist/index39.cjs.map +1 -1
  129. package/dist/index39.js +31 -41
  130. package/dist/index39.js.map +1 -1
  131. package/dist/index40.cjs +45 -60
  132. package/dist/index40.cjs.map +1 -1
  133. package/dist/index40.js +139 -163
  134. package/dist/index40.js.map +1 -1
  135. package/dist/index41.cjs +137 -161
  136. package/dist/index41.cjs.map +1 -1
  137. package/dist/index41.js +41 -12
  138. package/dist/index41.js.map +1 -1
  139. package/dist/index42.cjs +60 -14
  140. package/dist/index42.cjs.map +1 -1
  141. package/dist/index42.js +167 -15
  142. package/dist/index42.js.map +1 -1
  143. package/dist/index43.cjs +166 -14
  144. package/dist/index43.cjs.map +1 -1
  145. package/dist/index43.js +12 -15
  146. package/dist/index43.js.map +1 -1
  147. package/dist/index44.cjs +14 -21
  148. package/dist/index44.cjs.map +1 -1
  149. package/dist/index44.js +15 -28
  150. package/dist/index44.js.map +1 -1
  151. package/dist/index45.cjs +14 -27
  152. package/dist/index45.cjs.map +1 -1
  153. package/dist/index45.js +10 -8
  154. package/dist/index45.js.map +1 -1
  155. package/dist/index46.cjs +11 -8
  156. package/dist/index46.cjs.map +1 -1
  157. package/dist/index46.js +22 -15
  158. package/dist/index46.js.map +1 -1
  159. package/dist/index47.cjs +22 -15
  160. package/dist/index47.cjs.map +1 -1
  161. package/dist/index47.js +9 -13
  162. package/dist/index47.js.map +1 -1
  163. package/dist/index48.cjs +10 -16
  164. package/dist/index48.cjs.map +1 -1
  165. package/dist/index48.js +18 -25
  166. package/dist/index48.js.map +1 -1
  167. package/dist/index49.cjs +18 -25
  168. package/dist/index49.cjs.map +1 -1
  169. package/dist/index49.js +17 -14
  170. package/dist/index49.js.map +1 -1
  171. package/dist/index50.cjs +24 -17
  172. package/dist/index50.cjs.map +1 -1
  173. package/dist/index50.js +28 -28
  174. package/dist/index50.js.map +1 -1
  175. package/dist/index51.cjs +27 -28
  176. package/dist/index51.cjs.map +1 -1
  177. package/dist/index51.js +14 -17
  178. package/dist/index51.js.map +1 -1
  179. package/dist/index52.cjs +17 -22
  180. package/dist/index52.cjs.map +1 -1
  181. package/dist/index52.js +23 -23
  182. package/dist/index52.js.map +1 -1
  183. package/dist/index53.cjs +23 -23
  184. package/dist/index53.cjs.map +1 -1
  185. package/dist/index53.js +17 -10
  186. package/dist/index53.js.map +1 -1
  187. package/dist/index54.cjs +22 -11
  188. package/dist/index54.cjs.map +1 -1
  189. package/dist/index54.js +28 -14
  190. package/dist/index54.js.map +1 -1
  191. package/dist/index55.cjs +28 -13
  192. package/dist/index55.cjs.map +1 -1
  193. package/dist/index55.js +17 -11
  194. package/dist/index55.js.map +1 -1
  195. package/dist/index56.cjs +23 -13
  196. package/dist/index56.cjs.map +1 -1
  197. package/dist/index56.js +24 -16
  198. package/dist/index56.js.map +1 -1
  199. package/dist/index57.cjs +24 -15
  200. package/dist/index57.cjs.map +1 -1
  201. package/dist/index57.js +10 -9
  202. package/dist/index57.js.map +1 -1
  203. package/dist/index58.cjs +11 -12
  204. package/dist/index58.cjs.map +1 -1
  205. package/dist/index58.js +12 -87
  206. package/dist/index58.js.map +1 -1
  207. package/dist/index59.cjs +12 -89
  208. package/dist/index59.cjs.map +1 -1
  209. package/dist/index59.js +11 -21
  210. package/dist/index59.js.map +1 -1
  211. package/dist/index60.cjs +13 -30
  212. package/dist/index60.cjs.map +1 -1
  213. package/dist/index60.js +17 -43
  214. package/dist/index60.js.map +1 -1
  215. package/dist/index61.cjs +16 -44
  216. package/dist/index61.cjs.map +1 -1
  217. package/dist/index61.js +9 -57
  218. package/dist/index61.js.map +1 -1
  219. package/dist/index62.cjs +11 -83
  220. package/dist/index62.cjs.map +1 -1
  221. package/dist/index62.js +83 -426
  222. package/dist/index62.js.map +1 -1
  223. package/dist/index63.cjs +82 -427
  224. package/dist/index63.cjs.map +1 -1
  225. package/dist/index63.js +21 -59
  226. package/dist/index63.js.map +1 -1
  227. package/dist/index64.cjs +30 -87
  228. package/dist/index64.cjs.map +1 -1
  229. package/dist/index64.js +44 -240
  230. package/dist/index64.js.map +1 -1
  231. package/dist/index65.cjs +43 -239
  232. package/dist/index65.cjs.map +1 -1
  233. package/dist/index65.js +57 -43
  234. package/dist/index65.js.map +1 -1
  235. package/dist/index66.cjs +84 -63
  236. package/dist/index66.cjs.map +1 -1
  237. package/dist/index66.js +426 -73
  238. package/dist/index66.js.map +1 -1
  239. package/dist/index67.cjs +426 -71
  240. package/dist/index67.cjs.map +1 -1
  241. package/dist/index67.js +59 -21
  242. package/dist/index67.js.map +1 -1
  243. package/dist/index68.cjs +87 -30
  244. package/dist/index68.cjs.map +1 -1
  245. package/dist/index68.js +233 -88
  246. package/dist/index68.js.map +1 -1
  247. package/dist/index69.cjs +232 -89
  248. package/dist/index69.cjs.map +1 -1
  249. package/dist/index69.js +40 -16
  250. package/dist/index69.js.map +1 -1
  251. package/dist/index70.cjs +56 -20
  252. package/dist/index70.cjs.map +1 -1
  253. package/dist/index70.js +72 -145
  254. package/dist/index70.js.map +1 -1
  255. package/dist/index71.cjs +72 -145
  256. package/dist/index71.cjs.map +1 -1
  257. package/dist/index71.js +25 -0
  258. package/dist/index71.js.map +1 -0
  259. package/dist/index72.cjs +34 -0
  260. package/dist/index72.cjs.map +1 -0
  261. package/dist/index72.js +101 -0
  262. package/dist/index72.js.map +1 -0
  263. package/dist/index73.cjs +105 -0
  264. package/dist/index73.cjs.map +1 -0
  265. package/dist/index73.js +23 -0
  266. package/dist/index73.js.map +1 -0
  267. package/dist/index74.cjs +31 -0
  268. package/dist/index74.cjs.map +1 -0
  269. package/dist/index74.js +159 -0
  270. package/dist/index74.js.map +1 -0
  271. package/dist/index75.cjs +161 -0
  272. package/dist/index75.cjs.map +1 -0
  273. package/dist/index8.js.map +1 -1
  274. package/dist/index9.cjs.map +1 -1
  275. package/dist/index9.js.map +1 -1
  276. package/dist/style.css +215 -45
  277. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index9.cjs","names":[],"sources":["../src/components/card/card.module.css"],"sourcesContent":[".card {\n position: relative;\n overflow: visible;\n border-radius: var(--ts-card-radius, 12px);\n border: 1px solid var(--ts-card-border, var(--border));\n background: var(--ts-card-bg, var(--panel));\n color: var(--ts-card-fg, var(--foreground));\n box-shadow: var(--ts-card-shadow, 0 16px 36px rgba(0, 0, 0, 0.28));\n padding: var(--ts-card-padding, 16px);\n transition:\n transform 140ms ease,\n box-shadow 140ms ease,\n border-color 140ms ease,\n background-color 140ms ease;\n}\n\n.tone-default {\n --ts-card-bg: var(--panel);\n --ts-card-border: var(--border);\n --ts-card-shadow: 0 16px 36px rgba(0, 0, 0, 0.28);\n}\n\n.tone-muted {\n --ts-card-bg: var(--muted);\n --ts-card-border: var(--border);\n --ts-card-shadow: 0 10px 26px rgba(0, 0, 0, 0.22);\n}\n\n.tone-contrast {\n --ts-card-bg: var(--ts-card-contrast-bg, color-mix(in srgb, var(--background) 60%, black));\n --ts-card-border: var(--border);\n --ts-card-shadow: 0 18px 50px rgba(0, 0, 0, 0.32);\n}\n\n.interactive {\n cursor: default;\n}\n\n.interactive:hover {\n transform: translateY(-1px);\n box-shadow: 0 22px 60px rgba(0, 0, 0, 0.32);\n border-color: var(--ts-card-hover-border, color-mix(in srgb, var(--primary) 40%, transparent));\n}\n\n.interactive:focus-within {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.padding-none { --ts-card-padding: 0; }\n.padding-sm { --ts-card-padding: 10px; }\n.padding-md { --ts-card-padding: 16px; }\n.padding-lg { --ts-card-padding: 20px; }\n"],"mappings":""}
1
+ {"version":3,"file":"index9.cjs","names":[],"sources":["../src/components/card/card.module.css"],"sourcesContent":[".card {\n position: relative;\n overflow: visible;\n border-radius: var(--ts-card-radius, var(--uzi-radius-lg, 12px));\n border: 1px solid var(--ts-card-border, var(--uzi-border-subtle, var(--border)));\n background: var(--ts-card-bg, var(--uzi-surface-1, var(--panel)));\n color: var(--ts-card-fg, var(--uzi-text-primary, var(--foreground)));\n box-shadow: var(--ts-card-shadow, var(--uzi-shadow-none, none));\n padding: var(--ts-card-padding, 16px);\n transition:\n transform 140ms ease,\n box-shadow 140ms ease,\n border-color 140ms ease,\n background-color 140ms ease;\n}\n\n.tone-default {\n --ts-card-bg: var(--uzi-surface-1, var(--panel));\n --ts-card-border: var(--uzi-border-subtle, var(--border));\n --ts-card-shadow: var(--uzi-shadow-none, none);\n}\n\n.tone-muted {\n --ts-card-bg: var(--uzi-surface-2, var(--muted));\n --ts-card-border: var(--uzi-border-subtle, var(--border));\n --ts-card-shadow: var(--uzi-shadow-none, none);\n}\n\n.tone-contrast {\n --ts-card-bg: var(--ts-card-contrast-bg, color-mix(in srgb, var(--background) 60%, black));\n --ts-card-border: var(--uzi-border-default, var(--border));\n --ts-card-shadow: var(--uzi-shadow-lg, 0 18px 50px rgba(0, 0, 0, 0.32));\n}\n\n.interactive {\n cursor: default;\n}\n\n.interactive:hover {\n transform: translateY(-1px);\n box-shadow: var(--uzi-shadow-sm, 0 4px 12px rgba(0, 0, 0, 0.12));\n border-color: var(--ts-card-hover-border, var(--uzi-border-accent, color-mix(in srgb, var(--primary) 40%, transparent)));\n}\n\n.interactive:focus-within {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.padding-none { --ts-card-padding: 0; }\n.padding-sm { --ts-card-padding: 10px; }\n.padding-md { --ts-card-padding: 16px; }\n.padding-lg { --ts-card-padding: 20px; }\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"index9.js","names":[],"sources":["../src/components/card/Card.tsx"],"sourcesContent":["/**\n * Lightweight container component used for panels across the app.\n *\n * @remarks\n * Supports tone variants, padding presets, and an optional interactive affordance.\n *\n * @param props.as - Semantic element to render (defaults to `div`).\n * @param props.tone - Visual tone variant.\n * @param props.padding - Padding preset.\n * @param props.interactive - Enables hover/focus affordance.\n */\nimport type { HTMLAttributes } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./card.module.css\";\n\nexport type CardTone = \"default\" | \"muted\" | \"contrast\";\nexport type CardPadding = \"none\" | \"sm\" | \"md\" | \"lg\";\n\ntype CardElement = \"div\" | \"section\" | \"article\";\n\nexport type CardProps = HTMLAttributes<HTMLElement> & {\n /** Optional semantic element type. Defaults to `div`. */\n as?: CardElement;\n /** Visual tone; drives background/border CSS vars. */\n tone?: CardTone;\n /** Padding preset; maps to CSS variables so consumers can override globally. */\n padding?: CardPadding;\n /** Adds hover/focus affordance (lift + outline). */\n interactive?: boolean;\n};\n\nexport function Card({\n as,\n tone = \"default\",\n padding = \"md\",\n interactive = false,\n className,\n children,\n ...rest\n}: CardProps) {\n const Component: CardElement = as ?? \"div\";\n const TONE_CLASS: Record<CardTone, string | null> = { default: null, muted: \"tone-muted\", contrast: \"tone-contrast\" };\n const PADDING_CLASS: Record<CardPadding, string> = { none: \"padding-none\", sm: \"padding-sm\", md: \"padding-md\", lg: \"padding-lg\" };\n const classes = cx(\n styles.card,\n TONE_CLASS[tone] ? styles[TONE_CLASS[tone]] : null,\n styles[PADDING_CLASS[padding]],\n interactive && styles.interactive,\n className,\n );\n\n return (\n <Component className={classes} {...rest}>\n {children}\n </Component>\n );\n}\n"],"mappings":";;;;AA+BA,SAAgB,KAAK,EACnB,IACA,OAAO,WACP,UAAU,MACV,cAAc,OACd,WACA,UACA,GAAG,QACS;CACZ,MAAM,YAAyB,MAAM;CACrC,MAAM,aAA8C;EAAE,SAAS;EAAM,OAAO;EAAc,UAAU;CAAgB;CAUpH,OACE,oBAAC,WAAD;EAAW,WATG,GACd,oBAAO,MACP,WAAW,QAAQ,oBAAO,WAAW,SAAS,MAC9C,oBAAO;GAJ4C,MAAM;GAAgB,IAAI;GAAc,IAAI;GAAc,IAAI;EAI1G,EAAc,WACrB,eAAe,oBAAO,aACtB,SAIsB;EAAS,GAAI;EAChC;CACQ,CAAA;AAEf"}
1
+ {"version":3,"file":"index9.js","names":[],"sources":["../src/components/card/Card.tsx"],"sourcesContent":["/**\n * Lightweight container for discrete content objects across the app.\n *\n * @remarks\n * Supports tone variants, padding presets, and an optional interactive affordance.\n * Use Surface for visual grouping that does not represent a discrete object.\n *\n * @param props.as - Semantic element to render (defaults to `div`).\n * @param props.tone - Visual tone variant.\n * @param props.padding - Padding preset.\n * @param props.interactive - Enables hover/focus affordance.\n */\nimport type { ComponentPropsWithoutRef, ElementType } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./card.module.css\";\n\nexport type CardTone = \"default\" | \"muted\" | \"contrast\";\nexport type CardPadding = \"none\" | \"sm\" | \"md\" | \"lg\";\n\ntype CardElement = \"div\" | \"section\" | \"article\";\n\ntype CardOwnProps<T extends CardElement> = {\n /** Optional semantic element type. Defaults to `div`. */\n as?: T;\n /** Visual tone; drives background/border CSS vars. */\n tone?: CardTone;\n /** Padding preset; maps to CSS variables so consumers can override globally. */\n padding?: CardPadding;\n /** Adds hover/focus affordance (lift + outline). */\n interactive?: boolean;\n};\n\nexport type CardProps<T extends CardElement = \"div\"> =\n CardOwnProps<T> &\n Omit<ComponentPropsWithoutRef<T>, keyof CardOwnProps<T>>;\n\nexport function Card<T extends CardElement = \"div\">({\n as,\n tone = \"default\",\n padding = \"md\",\n interactive = false,\n className,\n children,\n ...rest\n}: CardProps<T>) {\n const Component = (as ?? \"div\") as ElementType;\n const TONE_CLASS: Record<CardTone, string | null> = { default: null, muted: \"tone-muted\", contrast: \"tone-contrast\" };\n const PADDING_CLASS: Record<CardPadding, string> = { none: \"padding-none\", sm: \"padding-sm\", md: \"padding-md\", lg: \"padding-lg\" };\n const classes = cx(\n styles.card,\n TONE_CLASS[tone] ? styles[TONE_CLASS[tone]] : null,\n styles[PADDING_CLASS[padding]],\n interactive && styles.interactive,\n className,\n );\n\n return (\n <Component className={classes} {...rest}>\n {children}\n </Component>\n );\n}\n"],"mappings":";;;;AAoCA,SAAgB,KAAoC,EAClD,IACA,OAAO,WACP,UAAU,MACV,cAAc,OACd,WACA,UACA,GAAG,QACY;CACf,MAAM,YAAa,MAAM;CACzB,MAAM,aAA8C;EAAE,SAAS;EAAM,OAAO;EAAc,UAAU;CAAgB;CAUpH,OACE,oBAAC,WAAD;EAAW,WATG,GACd,oBAAO,MACP,WAAW,QAAQ,oBAAO,WAAW,SAAS,MAC9C,oBAAO;GAJ4C,MAAM;GAAgB,IAAI;GAAc,IAAI;GAAc,IAAI;EAI1G,EAAc,WACrB,eAAe,oBAAO,aACtB,SAIsB;EAAS,GAAI;EAChC;CACQ,CAAA;AAEf"}
package/dist/style.css CHANGED
@@ -43,6 +43,28 @@ body {
43
43
  --uzi-modal-z-index: 1000;
44
44
  --uzi-popover-z-index: 1100;
45
45
  --uzi-toast-z-index: 2147483000;
46
+
47
+ /* Shared visual hierarchy */
48
+ --uzi-space-1: 0.25rem;
49
+ --uzi-space-2: 0.5rem;
50
+ --uzi-space-3: 0.75rem;
51
+ --uzi-space-4: 1rem;
52
+ --uzi-space-5: 1.5rem;
53
+ --uzi-space-6: 2rem;
54
+ --uzi-space-7: 3rem;
55
+ --uzi-radius-sm: 0.375rem;
56
+ --uzi-radius-md: 0.625rem;
57
+ --uzi-radius-lg: 0.875rem;
58
+ --uzi-font-display: clamp(1.875rem, 3vw, 2.5rem);
59
+ --uzi-font-title: clamp(1.375rem, 2.5vw, 1.875rem);
60
+ --uzi-font-heading: clamp(1.25rem, 2vw, 1.625rem);
61
+ --uzi-font-body: 0.9375rem;
62
+ --uzi-font-small: 0.8125rem;
63
+ --uzi-font-caption: 0.75rem;
64
+ --uzi-shadow-none: none;
65
+ --uzi-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.08), 0 4px 12px rgba(0, 0, 0, 0.06);
66
+ --uzi-shadow-md: 0 8px 24px rgba(0, 0, 0, 0.12);
67
+ --uzi-shadow-lg: 0 18px 48px rgba(0, 0, 0, 0.18);
46
68
  }
47
69
 
48
70
  :root,
@@ -67,6 +89,21 @@ body {
67
89
  --input: hsl(214 32% 88%);
68
90
  --panel: var(--card);
69
91
  --text: var(--foreground);
92
+ --uzi-surface-canvas: var(--background);
93
+ --uzi-surface-1: var(--card);
94
+ --uzi-surface-2: color-mix(in srgb, var(--secondary) 72%, var(--background));
95
+ --uzi-surface-raised: var(--card);
96
+ --uzi-surface-selected: color-mix(in srgb, var(--primary) 9%, var(--card));
97
+ --uzi-text-primary: var(--foreground);
98
+ --uzi-text-secondary: color-mix(in srgb, var(--foreground) 72%, var(--muted-foreground));
99
+ --uzi-text-muted: var(--muted-foreground);
100
+ --uzi-text-disabled: color-mix(in srgb, var(--muted-foreground) 65%, transparent);
101
+ --uzi-border-subtle: color-mix(in srgb, var(--border) 68%, transparent);
102
+ --uzi-border-default: var(--border);
103
+ --uzi-border-strong: color-mix(in srgb, var(--border) 72%, var(--foreground));
104
+ --uzi-border-accent: color-mix(in srgb, var(--primary) 55%, var(--border));
105
+ --surface-elevated: var(--uzi-surface-raised);
106
+ --surface-topbar: color-mix(in srgb, var(--uzi-surface-canvas) 85%, transparent);
70
107
  }
71
108
 
72
109
  :root[data-uzi-theme="dark"],
@@ -95,9 +132,33 @@ body {
95
132
  --border: #1f2937;
96
133
  --input: #1f2937;
97
134
  --panel: #111827;
135
+ --text: #e2e8f0;
136
+ --uzi-surface-canvas: var(--background);
137
+ --uzi-surface-1: var(--panel);
138
+ --uzi-surface-2: #152036;
139
+ --uzi-surface-raised: color-mix(in srgb, var(--panel) 88%, white);
140
+ --uzi-surface-selected: color-mix(in srgb, var(--primary) 12%, var(--panel));
141
+ --uzi-text-primary: var(--foreground);
142
+ --uzi-text-secondary: color-mix(in srgb, var(--foreground) 72%, var(--muted-foreground));
143
+ --uzi-text-muted: var(--muted-foreground);
144
+ --uzi-text-disabled: color-mix(in srgb, var(--muted-foreground) 65%, transparent);
145
+ --uzi-border-subtle: color-mix(in srgb, var(--border) 72%, transparent);
146
+ --uzi-border-default: var(--border);
147
+ --uzi-border-strong: color-mix(in srgb, var(--border) 76%, var(--foreground));
148
+ --uzi-border-accent: color-mix(in srgb, var(--primary) 55%, var(--border));
149
+ --uzi-shadow-sm:
150
+ inset 0 1px 0 rgba(255, 255, 255, 0.025),
151
+ 0 1px 2px rgba(0, 0, 0, 0.18),
152
+ 0 4px 12px rgba(0, 0, 0, 0.12);
153
+ --uzi-shadow-md:
154
+ inset 0 1px 0 rgba(255, 255, 255, 0.03),
155
+ 0 10px 28px rgba(0, 0, 0, 0.24);
156
+ --uzi-shadow-lg:
157
+ inset 0 1px 0 rgba(255, 255, 255, 0.035),
158
+ 0 20px 56px rgba(0, 0, 0, 0.32);
159
+ /* Preserve the legacy alias value while new components use semantic Uzi tokens. */
98
160
  --surface-elevated: #0b1224;
99
161
  --surface-topbar: color-mix(in srgb, var(--background, #0b1224) 85%, transparent);
100
- --text: #e2e8f0;
101
162
  }
102
163
 
103
164
  :root,
@@ -323,11 +384,11 @@ body {
323
384
  .uzi-card-module__card__ZPFTz {
324
385
  position: relative;
325
386
  overflow: visible;
326
- border-radius: var(--ts-card-radius, 12px);
327
- border: 1px solid var(--ts-card-border, var(--border));
328
- background: var(--ts-card-bg, var(--panel));
329
- color: var(--ts-card-fg, var(--foreground));
330
- box-shadow: var(--ts-card-shadow, 0 16px 36px rgba(0, 0, 0, 0.28));
387
+ border-radius: var(--ts-card-radius, var(--uzi-radius-lg, 12px));
388
+ border: 1px solid var(--ts-card-border, var(--uzi-border-subtle, var(--border)));
389
+ background: var(--ts-card-bg, var(--uzi-surface-1, var(--panel)));
390
+ color: var(--ts-card-fg, var(--uzi-text-primary, var(--foreground)));
391
+ box-shadow: var(--ts-card-shadow, var(--uzi-shadow-none, none));
331
392
  padding: var(--ts-card-padding, 16px);
332
393
  transition:
333
394
  transform 140ms ease,
@@ -337,21 +398,21 @@ body {
337
398
  }
338
399
 
339
400
  .uzi-card-module__tone-default__7Ujf9 {
340
- --ts-card-bg: var(--panel);
341
- --ts-card-border: var(--border);
342
- --ts-card-shadow: 0 16px 36px rgba(0, 0, 0, 0.28);
401
+ --ts-card-bg: var(--uzi-surface-1, var(--panel));
402
+ --ts-card-border: var(--uzi-border-subtle, var(--border));
403
+ --ts-card-shadow: var(--uzi-shadow-none, none);
343
404
  }
344
405
 
345
406
  .uzi-card-module__tone-muted__RQy5B {
346
- --ts-card-bg: var(--muted);
347
- --ts-card-border: var(--border);
348
- --ts-card-shadow: 0 10px 26px rgba(0, 0, 0, 0.22);
407
+ --ts-card-bg: var(--uzi-surface-2, var(--muted));
408
+ --ts-card-border: var(--uzi-border-subtle, var(--border));
409
+ --ts-card-shadow: var(--uzi-shadow-none, none);
349
410
  }
350
411
 
351
412
  .uzi-card-module__tone-contrast__JpFxL {
352
413
  --ts-card-bg: var(--ts-card-contrast-bg, color-mix(in srgb, var(--background) 60%, black));
353
- --ts-card-border: var(--border);
354
- --ts-card-shadow: 0 18px 50px rgba(0, 0, 0, 0.32);
414
+ --ts-card-border: var(--uzi-border-default, var(--border));
415
+ --ts-card-shadow: var(--uzi-shadow-lg, 0 18px 50px rgba(0, 0, 0, 0.32));
355
416
  }
356
417
 
357
418
  .uzi-card-module__interactive__zlPML {
@@ -360,8 +421,8 @@ body {
360
421
 
361
422
  .uzi-card-module__interactive__zlPML:hover {
362
423
  transform: translateY(-1px);
363
- box-shadow: 0 22px 60px rgba(0, 0, 0, 0.32);
364
- border-color: var(--ts-card-hover-border, color-mix(in srgb, var(--primary) 40%, transparent));
424
+ box-shadow: var(--uzi-shadow-sm, 0 4px 12px rgba(0, 0, 0, 0.12));
425
+ border-color: var(--ts-card-hover-border, var(--uzi-border-accent, color-mix(in srgb, var(--primary) 40%, transparent)));
365
426
  }
366
427
 
367
428
  .uzi-card-module__interactive__zlPML:focus-within {
@@ -373,6 +434,43 @@ body {
373
434
  .uzi-card-module__padding-sm__-Ub1s { --ts-card-padding: 10px; }
374
435
  .uzi-card-module__padding-md__kUf46 { --ts-card-padding: 16px; }
375
436
  .uzi-card-module__padding-lg__a5mWP { --ts-card-padding: 20px; }
437
+ .uzi-surface-module__surface__wbqff {
438
+ min-width: 0;
439
+ color: var(--uzi-text-primary, var(--foreground));
440
+ }
441
+
442
+ .uzi-surface-module__level-base__2lWS2 { background: var(--uzi-surface-1, var(--panel)); }
443
+ .uzi-surface-module__level-subtle__njIb4 { background: var(--uzi-surface-2, var(--muted)); }
444
+
445
+ .uzi-surface-module__level-raised__VT9mt {
446
+ background: var(--uzi-surface-raised, var(--panel));
447
+ box-shadow: var(--uzi-shadow-md, 0 8px 24px rgba(0, 0, 0, 0.12));
448
+ }
449
+
450
+ .uzi-surface-module__level-selected__7z3bI {
451
+ background: var(--uzi-surface-selected, var(--accent));
452
+ }
453
+
454
+ .uzi-surface-module__level-selected__7z3bI:not(.uzi-surface-module__bordered__aPP-x) {
455
+ box-shadow: inset 0 0 0 1px var(--uzi-border-accent, var(--primary));
456
+ }
457
+
458
+ .uzi-surface-module__bordered__aPP-x {
459
+ border: 1px solid var(--uzi-border-subtle, var(--border));
460
+ }
461
+
462
+ .uzi-surface-module__level-selected__7z3bI.uzi-surface-module__bordered__aPP-x {
463
+ border-color: var(--uzi-border-accent, var(--primary));
464
+ }
465
+
466
+ .uzi-surface-module__padding-none__swBED { padding: 0; }
467
+ .uzi-surface-module__padding-sm__0qdV8 { padding: var(--uzi-space-2, 0.5rem); }
468
+ .uzi-surface-module__padding-md__Xq3P7 { padding: var(--uzi-space-4, 1rem); }
469
+ .uzi-surface-module__padding-lg__beXmJ { padding: var(--uzi-space-5, 1.5rem); }
470
+ .uzi-surface-module__radius-none__DbXCZ { border-radius: 0; }
471
+ .uzi-surface-module__radius-sm__vMEbI { border-radius: var(--uzi-radius-sm, 0.375rem); }
472
+ .uzi-surface-module__radius-md__cS0Cp { border-radius: var(--uzi-radius-md, 0.625rem); }
473
+ .uzi-surface-module__radius-lg__T6MVA { border-radius: var(--uzi-radius-lg, 0.875rem); }
376
474
  .uzi-pill-module__pill__uCKcP {
377
475
  display: inline-flex;
378
476
  align-items: center;
@@ -1976,37 +2074,37 @@ button.uzi-sidebar-nav-module__item__uMHkJ {
1976
2074
  display: flex;
1977
2075
  align-items: flex-start;
1978
2076
  justify-content: space-between;
1979
- gap: 1.5rem;
2077
+ gap: var(--uzi-space-5, 1.5rem);
1980
2078
  }
1981
2079
 
1982
2080
  .uzi-page-header-module__content__lJh9C {
1983
2081
  min-width: 0;
1984
2082
  display: grid;
1985
- gap: 0.5rem;
2083
+ gap: var(--uzi-space-2, 0.5rem);
1986
2084
  }
1987
2085
 
1988
2086
  .uzi-page-header-module__eyebrow__xP-Qr {
1989
2087
  display: flex;
1990
2088
  flex-wrap: wrap;
1991
2089
  align-items: center;
1992
- gap: 0.5rem;
1993
- color: var(--muted-foreground);
1994
- font-size: 0.8125rem;
2090
+ gap: var(--uzi-space-2, 0.5rem);
2091
+ color: var(--uzi-text-secondary, var(--muted-foreground));
2092
+ font-size: var(--uzi-font-small, 0.8125rem);
1995
2093
  font-weight: 600;
1996
2094
  }
1997
2095
 
1998
2096
  .uzi-page-header-module__title__kkZon {
1999
2097
  margin: 0;
2000
- color: var(--foreground);
2001
- font-size: clamp(1.75rem, 3vw, 2.5rem);
2098
+ color: var(--uzi-text-primary, var(--foreground));
2099
+ font-size: var(--uzi-font-display, clamp(1.875rem, 3vw, 2.5rem));
2002
2100
  line-height: 1.12;
2003
2101
  letter-spacing: -0.025em;
2004
2102
  }
2005
2103
 
2006
2104
  .uzi-page-header-module__description__zNQ1m {
2007
2105
  max-width: 48rem;
2008
- color: var(--muted-foreground);
2009
- font-size: 0.95rem;
2106
+ color: var(--uzi-text-secondary, var(--muted-foreground));
2107
+ font-size: var(--uzi-font-body, 0.9375rem);
2010
2108
  line-height: 1.65;
2011
2109
  }
2012
2110
 
@@ -2033,7 +2131,7 @@ button.uzi-sidebar-nav-module__item__uMHkJ {
2033
2131
  display: flex;
2034
2132
  align-items: flex-end;
2035
2133
  justify-content: space-between;
2036
- gap: 1rem;
2134
+ gap: var(--uzi-space-4, 1rem);
2037
2135
  }
2038
2136
 
2039
2137
  .uzi-section-header-module__content__6prWG {
@@ -2044,16 +2142,16 @@ button.uzi-sidebar-nav-module__item__uMHkJ {
2044
2142
 
2045
2143
  .uzi-section-header-module__title__7ddbh {
2046
2144
  margin: 0;
2047
- color: var(--foreground);
2048
- font-size: clamp(1.25rem, 2vw, 1.625rem);
2145
+ color: var(--uzi-text-primary, var(--foreground));
2146
+ font-size: var(--uzi-font-heading, clamp(1.25rem, 2vw, 1.625rem));
2049
2147
  line-height: 1.2;
2050
2148
  letter-spacing: -0.015em;
2051
2149
  }
2052
2150
 
2053
2151
  .uzi-section-header-module__description__T8tck {
2054
2152
  max-width: 44rem;
2055
- color: var(--muted-foreground);
2056
- font-size: 0.875rem;
2153
+ color: var(--uzi-text-secondary, var(--muted-foreground));
2154
+ font-size: var(--uzi-font-body, 0.9375rem);
2057
2155
  line-height: 1.6;
2058
2156
  }
2059
2157
 
@@ -2063,7 +2161,7 @@ button.uzi-sidebar-nav-module__item__uMHkJ {
2063
2161
  flex-wrap: wrap;
2064
2162
  align-items: center;
2065
2163
  justify-content: flex-end;
2066
- gap: 0.5rem;
2164
+ gap: var(--uzi-space-2, 0.5rem);
2067
2165
  }
2068
2166
 
2069
2167
  @media (max-width: 40rem) {
@@ -2138,11 +2236,11 @@ button.uzi-sidebar-nav-module__item__uMHkJ {
2138
2236
  flex-wrap: nowrap;
2139
2237
  }
2140
2238
 
2141
- .uzi-layout-primitives-module__gap-xs__e3Tkz { gap: 0.25rem; }
2142
- .uzi-layout-primitives-module__gap-sm__9ng-- { gap: 0.5rem; }
2143
- .uzi-layout-primitives-module__gap-md__tHIwH { gap: 1rem; }
2144
- .uzi-layout-primitives-module__gap-lg__iUm9X { gap: 1.5rem; }
2145
- .uzi-layout-primitives-module__gap-xl__O-6Na { gap: 2rem; }
2239
+ .uzi-layout-primitives-module__gap-xs__e3Tkz { gap: var(--uzi-space-1, 0.25rem); }
2240
+ .uzi-layout-primitives-module__gap-sm__9ng-- { gap: var(--uzi-space-2, 0.5rem); }
2241
+ .uzi-layout-primitives-module__gap-md__tHIwH { gap: var(--uzi-space-4, 1rem); }
2242
+ .uzi-layout-primitives-module__gap-lg__iUm9X { gap: var(--uzi-space-5, 1.5rem); }
2243
+ .uzi-layout-primitives-module__gap-xl__O-6Na { gap: var(--uzi-space-6, 2rem); }
2146
2244
  .uzi-stat-module__stat__R4Ke6 {
2147
2245
  min-width: 0;
2148
2246
  display: grid;
@@ -2150,29 +2248,27 @@ button.uzi-sidebar-nav-module__item__uMHkJ {
2150
2248
  }
2151
2249
 
2152
2250
  .uzi-stat-module__label__MSJ0Q {
2153
- color: var(--muted-foreground);
2154
- font-size: 0.75rem;
2251
+ color: var(--uzi-text-secondary, var(--muted-foreground));
2252
+ font-size: var(--uzi-font-small, 0.8125rem);
2155
2253
  font-weight: 600;
2156
- letter-spacing: 0.025em;
2157
- text-transform: uppercase;
2158
2254
  }
2159
2255
 
2160
2256
  .uzi-stat-module__value__nSd-e {
2161
- color: var(--foreground);
2162
- font-size: clamp(1.25rem, 2.5vw, 1.75rem);
2257
+ color: var(--uzi-text-primary, var(--foreground));
2258
+ font-size: var(--uzi-font-title, clamp(1.375rem, 2.5vw, 1.875rem));
2163
2259
  font-weight: 700;
2164
2260
  line-height: 1.15;
2165
2261
  }
2166
2262
 
2167
2263
  .uzi-stat-module__detail__eB2As {
2168
- color: var(--muted-foreground);
2169
- font-size: 0.8125rem;
2264
+ color: var(--uzi-text-muted, var(--muted-foreground));
2265
+ font-size: var(--uzi-font-small, 0.8125rem);
2170
2266
  line-height: 1.5;
2171
2267
  }
2172
2268
 
2173
2269
  .uzi-stat-module__group__Hb6Bh {
2174
2270
  display: grid;
2175
- gap: 1rem;
2271
+ gap: var(--uzi-space-4, 1rem);
2176
2272
  }
2177
2273
 
2178
2274
  .uzi-stat-module__columns-1__HYln2 { grid-template-columns: 1fr; }
@@ -2194,6 +2290,80 @@ button.uzi-sidebar-nav-module__item__uMHkJ {
2194
2290
  grid-template-columns: 1fr;
2195
2291
  }
2196
2292
  }
2293
+ .uzi-toolbar-module__toolbar__IXW3o {
2294
+ display: flex;
2295
+ min-width: 0;
2296
+ align-items: center;
2297
+ flex-wrap: wrap;
2298
+ gap: var(--uzi-space-2, 0.5rem);
2299
+ border: 1px solid var(--uzi-border-subtle, var(--border));
2300
+ border-radius: var(--uzi-radius-md, 0.625rem);
2301
+ background: var(--uzi-surface-1, var(--panel));
2302
+ }
2303
+
2304
+ .uzi-toolbar-module__density-compact__qqXRT { padding: var(--uzi-space-2, 0.5rem); }
2305
+
2306
+ .uzi-toolbar-module__density-default__rGiHv {
2307
+ padding: var(--uzi-space-3, 0.75rem);
2308
+ gap: var(--uzi-space-3, 0.75rem);
2309
+ }
2310
+
2311
+ .uzi-toolbar-module__sticky__PxGot {
2312
+ position: sticky;
2313
+ top: var(--uzi-toolbar-sticky-offset, 0);
2314
+ z-index: 20;
2315
+ background: color-mix(in srgb, var(--uzi-surface-1, var(--panel)) 90%, transparent);
2316
+ -webkit-backdrop-filter: blur(12px);
2317
+ backdrop-filter: blur(12px);
2318
+ }
2319
+
2320
+ .uzi-toolbar-module__group__Cw0lk {
2321
+ display: flex;
2322
+ min-width: 0;
2323
+ align-items: center;
2324
+ gap: var(--uzi-space-2, 0.5rem);
2325
+ }
2326
+
2327
+ .uzi-toolbar-module__group__Cw0lk + .uzi-toolbar-module__group__Cw0lk {
2328
+ margin-left: var(--uzi-space-1, 0.25rem);
2329
+ padding-left: var(--uzi-space-3, 0.75rem);
2330
+ border-left: 1px solid var(--uzi-border-subtle, var(--border));
2331
+ }
2332
+
2333
+ .uzi-toolbar-module__grow__8oFpY { flex: 1 1 16rem; }
2334
+
2335
+ .uzi-toolbar-module__label__H1fT1 {
2336
+ flex: 0 0 auto;
2337
+ color: var(--uzi-text-secondary, var(--muted-foreground));
2338
+ font-size: var(--uzi-font-small, 0.8125rem);
2339
+ font-weight: 600;
2340
+ white-space: nowrap;
2341
+ }
2342
+
2343
+ .uzi-toolbar-module__controls__EOiOk {
2344
+ display: flex;
2345
+ min-width: 0;
2346
+ align-items: center;
2347
+ flex-wrap: wrap;
2348
+ gap: var(--uzi-space-2, 0.5rem);
2349
+ }
2350
+
2351
+ @media (max-width: 40rem) {
2352
+ .uzi-toolbar-module__toolbar__IXW3o { align-items: stretch; }
2353
+
2354
+ .uzi-toolbar-module__group__Cw0lk,
2355
+ .uzi-toolbar-module__grow__8oFpY { flex: 1 1 100%; }
2356
+
2357
+ .uzi-toolbar-module__group__Cw0lk + .uzi-toolbar-module__group__Cw0lk {
2358
+ margin-left: 0;
2359
+ padding-top: var(--uzi-space-2, 0.5rem);
2360
+ padding-left: 0;
2361
+ border-top: 1px solid var(--uzi-border-subtle, var(--border));
2362
+ border-left: 0;
2363
+ }
2364
+
2365
+ .uzi-toolbar-module__controls__EOiOk { flex: 1 1 auto; }
2366
+ }
2197
2367
  .uzi-skeleton-module__skeleton__fula5 {
2198
2368
  background: color-mix(in srgb, var(--muted-foreground) 14%, var(--background));
2199
2369
  animation: uzi-skeleton-module__skeleton-pulse__Yp45W 1.6s ease-in-out infinite;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tomny-dev/uzi",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Rapid-fire React UI components. Ship faster, build more.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -80,7 +80,7 @@
80
80
  "typescript": "^5.4.3",
81
81
  "vite": "^8.0.0",
82
82
  "vite-plugin-css-injected-by-js": "^5.0.1",
83
- "vitest": "^4.1.9"
83
+ "vitest": "^5.0.0"
84
84
  },
85
85
  "types": "./dist/index.d.ts"
86
86
  }