@tribepad/themis 1.0.1 → 1.0.3

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 (308) hide show
  1. package/dist/elements/Accordion/index.js +1 -335
  2. package/dist/elements/Accordion/index.js.map +1 -1
  3. package/dist/elements/Accordion/index.mjs +1 -317
  4. package/dist/elements/Accordion/index.mjs.map +1 -1
  5. package/dist/elements/AlertDialog/AlertDialog.d.ts +43 -0
  6. package/dist/elements/AlertDialog/AlertDialog.d.ts.map +1 -0
  7. package/dist/elements/AlertDialog/AlertDialog.styles.d.ts +15 -0
  8. package/dist/elements/AlertDialog/AlertDialog.styles.d.ts.map +1 -0
  9. package/dist/elements/AlertDialog/AlertDialog.types.d.ts +72 -0
  10. package/dist/elements/AlertDialog/AlertDialog.types.d.ts.map +1 -0
  11. package/dist/elements/AlertDialog/index.d.ts +25 -0
  12. package/dist/elements/AlertDialog/index.d.ts.map +1 -0
  13. package/dist/elements/AlertDialog/index.js +3 -0
  14. package/dist/elements/AlertDialog/index.js.map +1 -0
  15. package/dist/elements/AlertDialog/index.mjs +3 -0
  16. package/dist/elements/AlertDialog/index.mjs.map +1 -0
  17. package/dist/elements/Avatar/index.js +1 -468
  18. package/dist/elements/Avatar/index.js.map +1 -1
  19. package/dist/elements/Avatar/index.mjs +1 -456
  20. package/dist/elements/Avatar/index.mjs.map +1 -1
  21. package/dist/elements/Badge/index.js +1 -243
  22. package/dist/elements/Badge/index.js.map +1 -1
  23. package/dist/elements/Badge/index.mjs +1 -234
  24. package/dist/elements/Badge/index.mjs.map +1 -1
  25. package/dist/elements/Breadcrumbs/index.js +1 -821
  26. package/dist/elements/Breadcrumbs/index.js.map +1 -1
  27. package/dist/elements/Breadcrumbs/index.mjs +1 -810
  28. package/dist/elements/Breadcrumbs/index.mjs.map +1 -1
  29. package/dist/elements/Button/Button.d.ts +26 -81
  30. package/dist/elements/Button/Button.d.ts.map +1 -1
  31. package/dist/elements/Button/Button.styles.d.ts +35 -0
  32. package/dist/elements/Button/Button.styles.d.ts.map +1 -0
  33. package/dist/elements/Button/Button.types.d.ts +20 -8
  34. package/dist/elements/Button/Button.types.d.ts.map +1 -1
  35. package/dist/elements/Button/index.js +1 -288
  36. package/dist/elements/Button/index.js.map +1 -1
  37. package/dist/elements/Button/index.mjs +1 -283
  38. package/dist/elements/Button/index.mjs.map +1 -1
  39. package/dist/elements/ButtonGroup/index.js +1 -237
  40. package/dist/elements/ButtonGroup/index.js.map +1 -1
  41. package/dist/elements/ButtonGroup/index.mjs +1 -222
  42. package/dist/elements/ButtonGroup/index.mjs.map +1 -1
  43. package/dist/elements/Card/index.js +1 -579
  44. package/dist/elements/Card/index.js.map +1 -1
  45. package/dist/elements/Card/index.mjs +1 -560
  46. package/dist/elements/Card/index.mjs.map +1 -1
  47. package/dist/elements/Carousel/Carousel.d.ts +1 -11
  48. package/dist/elements/Carousel/Carousel.d.ts.map +1 -1
  49. package/dist/elements/Carousel/LazyCarousel.d.ts +1 -1
  50. package/dist/elements/Carousel/LazyCarousel.d.ts.map +1 -1
  51. package/dist/elements/Carousel/index.js +1 -789
  52. package/dist/elements/Carousel/index.js.map +1 -1
  53. package/dist/elements/Carousel/index.mjs +1 -786
  54. package/dist/elements/Carousel/index.mjs.map +1 -1
  55. package/dist/elements/Chart/ChartContext.d.ts.map +1 -1
  56. package/dist/elements/Chart/index.js +1 -1842
  57. package/dist/elements/Chart/index.js.map +1 -1
  58. package/dist/elements/Chart/index.mjs +1 -1832
  59. package/dist/elements/Chart/index.mjs.map +1 -1
  60. package/dist/elements/Checkbox/index.js +1 -316
  61. package/dist/elements/Checkbox/index.js.map +1 -1
  62. package/dist/elements/Checkbox/index.mjs +1 -306
  63. package/dist/elements/Checkbox/index.mjs.map +1 -1
  64. package/dist/elements/CheckboxGroup/index.js +1 -455
  65. package/dist/elements/CheckboxGroup/index.js.map +1 -1
  66. package/dist/elements/CheckboxGroup/index.mjs +1 -439
  67. package/dist/elements/CheckboxGroup/index.mjs.map +1 -1
  68. package/dist/elements/Combobox/Combobox.d.ts +56 -0
  69. package/dist/elements/Combobox/Combobox.d.ts.map +1 -0
  70. package/dist/elements/Combobox/Combobox.styles.d.ts +29 -0
  71. package/dist/elements/Combobox/Combobox.styles.d.ts.map +1 -0
  72. package/dist/elements/Combobox/Combobox.types.d.ts +67 -0
  73. package/dist/elements/Combobox/Combobox.types.d.ts.map +1 -0
  74. package/dist/elements/Combobox/index.d.ts +20 -0
  75. package/dist/elements/Combobox/index.d.ts.map +1 -0
  76. package/dist/elements/Combobox/index.js +3 -0
  77. package/dist/elements/Combobox/index.js.map +1 -0
  78. package/dist/elements/Combobox/index.mjs +3 -0
  79. package/dist/elements/Combobox/index.mjs.map +1 -0
  80. package/dist/elements/DatePicker/DatePicker.d.ts +1 -1
  81. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
  82. package/dist/elements/DatePicker/index.js +1 -903
  83. package/dist/elements/DatePicker/index.js.map +1 -1
  84. package/dist/elements/DatePicker/index.mjs +1 -853
  85. package/dist/elements/DatePicker/index.mjs.map +1 -1
  86. package/dist/elements/Dropdown/Dropdown.d.ts +7 -15
  87. package/dist/elements/Dropdown/Dropdown.d.ts.map +1 -1
  88. package/dist/elements/Dropdown/Dropdown.styles.d.ts +22 -0
  89. package/dist/elements/Dropdown/Dropdown.styles.d.ts.map +1 -0
  90. package/dist/elements/Dropdown/index.d.ts +1 -0
  91. package/dist/elements/Dropdown/index.d.ts.map +1 -1
  92. package/dist/elements/Dropdown/index.js +1 -193
  93. package/dist/elements/Dropdown/index.js.map +1 -1
  94. package/dist/elements/Dropdown/index.mjs +1 -184
  95. package/dist/elements/Dropdown/index.mjs.map +1 -1
  96. package/dist/elements/FileField/index.js +1 -1539
  97. package/dist/elements/FileField/index.js.map +1 -1
  98. package/dist/elements/FileField/index.mjs +1 -1507
  99. package/dist/elements/FileField/index.mjs.map +1 -1
  100. package/dist/elements/FormLayout/index.js +1 -170
  101. package/dist/elements/FormLayout/index.js.map +1 -1
  102. package/dist/elements/FormLayout/index.mjs +1 -167
  103. package/dist/elements/FormLayout/index.mjs.map +1 -1
  104. package/dist/elements/Modal/Modal.d.ts +9 -14
  105. package/dist/elements/Modal/Modal.d.ts.map +1 -1
  106. package/dist/elements/Modal/Modal.styles.d.ts +29 -0
  107. package/dist/elements/Modal/Modal.styles.d.ts.map +1 -0
  108. package/dist/elements/Modal/index.d.ts +1 -0
  109. package/dist/elements/Modal/index.d.ts.map +1 -1
  110. package/dist/elements/Modal/index.js +1 -232
  111. package/dist/elements/Modal/index.js.map +1 -1
  112. package/dist/elements/Modal/index.mjs +1 -220
  113. package/dist/elements/Modal/index.mjs.map +1 -1
  114. package/dist/elements/NumberField/NumberField.variants.d.ts +1 -1
  115. package/dist/elements/NumberField/index.js +1 -666
  116. package/dist/elements/NumberField/index.js.map +1 -1
  117. package/dist/elements/NumberField/index.mjs +1 -654
  118. package/dist/elements/NumberField/index.mjs.map +1 -1
  119. package/dist/elements/OTPInput/OTPInput.d.ts.map +1 -1
  120. package/dist/elements/OTPInput/index.js +1 -734
  121. package/dist/elements/OTPInput/index.js.map +1 -1
  122. package/dist/elements/OTPInput/index.mjs +1 -732
  123. package/dist/elements/OTPInput/index.mjs.map +1 -1
  124. package/dist/elements/Pagination/Pagination.d.ts +45 -0
  125. package/dist/elements/Pagination/Pagination.d.ts.map +1 -0
  126. package/dist/elements/Pagination/Pagination.styles.d.ts +10 -0
  127. package/dist/elements/Pagination/Pagination.styles.d.ts.map +1 -0
  128. package/dist/elements/Pagination/Pagination.types.d.ts +55 -0
  129. package/dist/elements/Pagination/Pagination.types.d.ts.map +1 -0
  130. package/dist/elements/Pagination/index.d.ts +21 -0
  131. package/dist/elements/Pagination/index.d.ts.map +1 -0
  132. package/dist/elements/Pagination/index.js +3 -0
  133. package/dist/elements/Pagination/index.js.map +1 -0
  134. package/dist/elements/Pagination/index.mjs +3 -0
  135. package/dist/elements/Pagination/index.mjs.map +1 -0
  136. package/dist/elements/Panel/index.js +1 -330
  137. package/dist/elements/Panel/index.js.map +1 -1
  138. package/dist/elements/Panel/index.mjs +1 -323
  139. package/dist/elements/Panel/index.mjs.map +1 -1
  140. package/dist/elements/PasswordField/PasswordField.d.ts +27 -0
  141. package/dist/elements/PasswordField/PasswordField.d.ts.map +1 -0
  142. package/dist/elements/PasswordField/PasswordField.styles.d.ts +32 -0
  143. package/dist/elements/PasswordField/PasswordField.styles.d.ts.map +1 -0
  144. package/dist/elements/PasswordField/PasswordField.types.d.ts +100 -0
  145. package/dist/elements/PasswordField/PasswordField.types.d.ts.map +1 -0
  146. package/dist/elements/PasswordField/index.css +2 -0
  147. package/dist/elements/PasswordField/index.css.map +1 -0
  148. package/dist/elements/PasswordField/index.d.ts +20 -0
  149. package/dist/elements/PasswordField/index.d.ts.map +1 -0
  150. package/dist/elements/PasswordField/index.js +3 -0
  151. package/dist/elements/PasswordField/index.js.map +1 -0
  152. package/dist/elements/PasswordField/index.mjs +3 -0
  153. package/dist/elements/PasswordField/index.mjs.map +1 -0
  154. package/dist/elements/Progress/index.js +1 -187
  155. package/dist/elements/Progress/index.js.map +1 -1
  156. package/dist/elements/Progress/index.mjs +1 -181
  157. package/dist/elements/Progress/index.mjs.map +1 -1
  158. package/dist/elements/RadioGroup/index.js +1 -369
  159. package/dist/elements/RadioGroup/index.js.map +1 -1
  160. package/dist/elements/RadioGroup/index.mjs +1 -359
  161. package/dist/elements/RadioGroup/index.mjs.map +1 -1
  162. package/dist/elements/Resizable/index.js +1 -1580
  163. package/dist/elements/Resizable/index.js.map +1 -1
  164. package/dist/elements/Resizable/index.mjs +1 -1566
  165. package/dist/elements/Resizable/index.mjs.map +1 -1
  166. package/dist/elements/SearchField/SearchField.d.ts +27 -0
  167. package/dist/elements/SearchField/SearchField.d.ts.map +1 -0
  168. package/dist/elements/SearchField/SearchField.styles.d.ts +32 -0
  169. package/dist/elements/SearchField/SearchField.styles.d.ts.map +1 -0
  170. package/dist/elements/SearchField/SearchField.types.d.ts +45 -0
  171. package/dist/elements/SearchField/SearchField.types.d.ts.map +1 -0
  172. package/dist/elements/SearchField/index.css +2 -0
  173. package/dist/elements/SearchField/index.css.map +1 -0
  174. package/dist/elements/SearchField/index.d.ts +21 -0
  175. package/dist/elements/SearchField/index.d.ts.map +1 -0
  176. package/dist/elements/SearchField/index.js +3 -0
  177. package/dist/elements/SearchField/index.js.map +1 -0
  178. package/dist/elements/SearchField/index.mjs +3 -0
  179. package/dist/elements/SearchField/index.mjs.map +1 -0
  180. package/dist/elements/Select/Select.d.ts +19 -48
  181. package/dist/elements/Select/Select.d.ts.map +1 -1
  182. package/dist/elements/Select/Select.styles.d.ts +55 -0
  183. package/dist/elements/Select/Select.styles.d.ts.map +1 -0
  184. package/dist/elements/Select/index.js +1 -589
  185. package/dist/elements/Select/index.js.map +1 -1
  186. package/dist/elements/Select/index.mjs +1 -582
  187. package/dist/elements/Select/index.mjs.map +1 -1
  188. package/dist/elements/Skeleton/index.js +1 -82
  189. package/dist/elements/Skeleton/index.js.map +1 -1
  190. package/dist/elements/Skeleton/index.mjs +1 -78
  191. package/dist/elements/Skeleton/index.mjs.map +1 -1
  192. package/dist/elements/Switch/index.js +1 -179
  193. package/dist/elements/Switch/index.js.map +1 -1
  194. package/dist/elements/Switch/index.mjs +1 -173
  195. package/dist/elements/Switch/index.mjs.map +1 -1
  196. package/dist/elements/Table/Table.d.ts +3 -24
  197. package/dist/elements/Table/Table.d.ts.map +1 -1
  198. package/dist/elements/Table/Table.styles.d.ts +24 -0
  199. package/dist/elements/Table/Table.styles.d.ts.map +1 -0
  200. package/dist/elements/Table/index.js +1 -595
  201. package/dist/elements/Table/index.js.map +1 -1
  202. package/dist/elements/Table/index.mjs +1 -578
  203. package/dist/elements/Table/index.mjs.map +1 -1
  204. package/dist/elements/Tabs/Tabs.d.ts +5 -3
  205. package/dist/elements/Tabs/Tabs.d.ts.map +1 -1
  206. package/dist/elements/Tabs/Tabs.types.d.ts +15 -0
  207. package/dist/elements/Tabs/Tabs.types.d.ts.map +1 -1
  208. package/dist/elements/Tabs/index.js +1 -337
  209. package/dist/elements/Tabs/index.js.map +1 -1
  210. package/dist/elements/Tabs/index.mjs +1 -320
  211. package/dist/elements/Tabs/index.mjs.map +1 -1
  212. package/dist/elements/TextField/TextField.d.ts +6 -42
  213. package/dist/elements/TextField/TextField.d.ts.map +1 -1
  214. package/dist/elements/TextField/TextField.hooks.d.ts +63 -0
  215. package/dist/elements/TextField/TextField.hooks.d.ts.map +1 -0
  216. package/dist/elements/TextField/TextField.icons.d.ts +19 -0
  217. package/dist/elements/TextField/TextField.icons.d.ts.map +1 -0
  218. package/dist/elements/TextField/TextField.styles.d.ts +37 -0
  219. package/dist/elements/TextField/TextField.styles.d.ts.map +1 -0
  220. package/dist/elements/TextField/TextField.types.d.ts +3 -0
  221. package/dist/elements/TextField/TextField.types.d.ts.map +1 -1
  222. package/dist/elements/TextField/index.css +1 -22
  223. package/dist/elements/TextField/index.css.map +1 -1
  224. package/dist/elements/TextField/index.js +1 -902
  225. package/dist/elements/TextField/index.js.map +1 -1
  226. package/dist/elements/TextField/index.mjs +1 -882
  227. package/dist/elements/TextField/index.mjs.map +1 -1
  228. package/dist/elements/TimeField/index.js +1 -254
  229. package/dist/elements/TimeField/index.js.map +1 -1
  230. package/dist/elements/TimeField/index.mjs +1 -238
  231. package/dist/elements/TimeField/index.mjs.map +1 -1
  232. package/dist/elements/Toast/Toast.d.ts +0 -22
  233. package/dist/elements/Toast/Toast.d.ts.map +1 -1
  234. package/dist/elements/Toast/index.js +1 -737
  235. package/dist/elements/Toast/index.js.map +1 -1
  236. package/dist/elements/Toast/index.mjs +1 -724
  237. package/dist/elements/Toast/index.mjs.map +1 -1
  238. package/dist/elements/Tooltip/index.js +1 -323
  239. package/dist/elements/Tooltip/index.js.map +1 -1
  240. package/dist/elements/Tooltip/index.mjs +1 -310
  241. package/dist/elements/Tooltip/index.mjs.map +1 -1
  242. package/dist/elements/index.css +1 -22
  243. package/dist/elements/index.css.map +1 -1
  244. package/dist/elements/index.d.ts +13 -1
  245. package/dist/elements/index.d.ts.map +1 -1
  246. package/dist/elements/index.js +1 -12455
  247. package/dist/elements/index.js.map +1 -1
  248. package/dist/elements/index.mjs +1 -12233
  249. package/dist/elements/index.mjs.map +1 -1
  250. package/dist/index.css +1 -22
  251. package/dist/index.css.map +1 -1
  252. package/dist/index.js +2 -12490
  253. package/dist/index.js.map +1 -1
  254. package/dist/index.mjs +2 -12262
  255. package/dist/index.mjs.map +1 -1
  256. package/dist/schemas/index.js +2 -54
  257. package/dist/schemas/index.js.map +1 -1
  258. package/dist/schemas/index.mjs +2 -48
  259. package/dist/schemas/index.mjs.map +1 -1
  260. package/dist/styles/defaults.css +151 -0
  261. package/dist/styles/index.js +1 -166
  262. package/dist/styles/index.js.map +1 -1
  263. package/dist/styles/index.mjs +1 -129
  264. package/dist/styles/index.mjs.map +1 -1
  265. package/dist/styles/shared-variants.d.ts +3 -3
  266. package/dist/styles/shared-variants.d.ts.map +1 -1
  267. package/dist/utils/index.js +1 -12
  268. package/dist/utils/index.js.map +1 -1
  269. package/dist/utils/index.mjs +1 -10
  270. package/dist/utils/index.mjs.map +1 -1
  271. package/package.json +9 -7
  272. package/src/elements/Accordion/Accordion.stories.tsx +1 -1
  273. package/src/elements/AlertDialog/AlertDialog.stories.tsx +124 -0
  274. package/src/elements/Avatar/Avatar.stories.tsx +1 -1
  275. package/src/elements/Badge/Badge.stories.tsx +1 -1
  276. package/src/elements/Breadcrumbs/Breadcrumbs.stories.tsx +1 -1
  277. package/src/elements/Button/Button.stories.tsx +1 -1
  278. package/src/elements/ButtonGroup/ButtonGroup.stories.tsx +1 -1
  279. package/src/elements/Card/Card.stories.tsx +1 -1
  280. package/src/elements/Carousel/Carousel.stories.tsx +1 -1
  281. package/src/elements/Chart/Chart.stories.tsx +1 -1
  282. package/src/elements/Checkbox/Checkbox.stories.tsx +1 -1
  283. package/src/elements/CheckboxGroup/CheckboxGroup.stories.tsx +4 -4
  284. package/src/elements/Combobox/Combobox.stories.tsx +133 -0
  285. package/src/elements/DatePicker/DatePicker.stories.tsx +1 -1
  286. package/src/elements/Dropdown/Dropdown.stories.tsx +1 -1
  287. package/src/elements/FileField/FileField.stories.tsx +2 -2
  288. package/src/elements/FileField/FileProgress.stories.tsx +1 -1
  289. package/src/elements/FormLayout/FormLayout.stories.tsx +1 -1
  290. package/src/elements/Modal/Modal.stories.tsx +1 -1
  291. package/src/elements/NumberField/NumberField.stories.tsx +1 -1
  292. package/src/elements/OTPInput/OTPInput.stories.tsx +1 -1
  293. package/src/elements/Pagination/Pagination.stories.tsx +203 -0
  294. package/src/elements/Panel/Panel.stories.tsx +1 -1
  295. package/src/elements/PasswordField/PasswordField.stories.tsx +167 -0
  296. package/src/elements/Progress/Progress.stories.tsx +7 -2
  297. package/src/elements/RadioGroup/RadioGroup.stories.tsx +3 -3
  298. package/src/elements/Resizable/Resizable.stories.tsx +1 -1
  299. package/src/elements/SearchField/SearchField.stories.tsx +146 -0
  300. package/src/elements/Select/Select.stories.tsx +1 -1
  301. package/src/elements/Skeleton/Skeleton.stories.tsx +1 -1
  302. package/src/elements/Switch/Switch.stories.tsx +1 -1
  303. package/src/elements/Table/Table.stories.tsx +1 -1
  304. package/src/elements/Tabs/Tabs.stories.tsx +46 -2
  305. package/src/elements/TextField/TextField.stories.tsx +1 -1
  306. package/src/elements/TimeField/TimeField.stories.tsx +1 -1
  307. package/src/elements/Toast/Toast.stories.tsx +1 -1
  308. package/src/elements/Tooltip/Tooltip.stories.tsx +1 -1
@@ -1,130 +1,2 @@
1
- // src/styles/interaction-states.ts
2
- var FOCUS_STYLES = "data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--themis-ring)] data-[focus-visible]:ring-offset-2";
3
- var PRESSED_STYLES = "data-[pressed]:scale-[0.97]";
4
- var PRESSED_STYLES_BASE = "data-[pressed]:transition-transform data-[pressed]:duration-100";
5
- var HOVER_STYLES = "data-[hovered]:shadow-md";
6
- var HOVER_STYLES_BASE = "data-[hovered]:transition-shadow data-[hovered]:duration-200";
7
- var HIGH_CONTRAST_FOCUS = "hc:data-[focus-visible]:outline hc:data-[focus-visible]:outline-4 hc:data-[focus-visible]:outline-offset-2 hc:data-[focus-visible]:outline-foreground";
8
- var HIGH_CONTRAST_HOVER = "hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground";
9
- var HIGH_CONTRAST_PRESSED = "hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground";
10
- var HIGH_CONTRAST_INTERACTIONS = `${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;
11
- var DISABLED_STYLES = "disabled:pointer-events-none disabled:opacity-50";
12
- var DEFAULT_INTERACTIONS = `${FOCUS_STYLES} ${PRESSED_STYLES} ${HOVER_STYLES} ${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;
13
- var SUBTLE_INTERACTIONS = `${FOCUS_STYLES} ${HIGH_CONTRAST_FOCUS}`;
14
- var NON_INTERACTIVE = "cursor-default select-none";
15
-
16
- // src/styles/shared-variants.ts
17
- var FOCUS_WITHIN_RING = [
18
- "focus-within:outline-none",
19
- "focus-within:ring-2",
20
- "focus-within:ring-[var(--ring)]",
21
- "focus-within:ring-offset-2"
22
- ];
23
- var FOCUS_VISIBLE_RING = [
24
- "focus-visible:outline-none",
25
- "focus-visible:ring-2",
26
- "focus-visible:ring-[var(--ring)]",
27
- "focus-visible:ring-offset-2"
28
- ];
29
- var FOCUS_RING = [
30
- "focus:outline-none",
31
- "focus:ring-2",
32
- "focus:ring-[var(--ring)]"
33
- ];
34
- var FOCUS_HIGHLIGHT = [
35
- "focus:outline-none",
36
- "focus:bg-[var(--accent)]",
37
- "focus:text-[var(--accent-foreground)]"
38
- ];
39
- var DISABLED_STANDARD = [
40
- "disabled:pointer-events-none",
41
- "disabled:opacity-50"
42
- ];
43
- var DISABLED_DATA_ATTR = [
44
- "data-[disabled]:pointer-events-none",
45
- "data-[disabled]:opacity-50",
46
- "data-[disabled]:cursor-not-allowed"
47
- ];
48
- var TEXT_SIZE_SMALL_SCALE = {
49
- sm: "text-xs",
50
- default: "text-sm",
51
- lg: "text-base"
52
- };
53
- var TEXT_SIZE_MEDIUM_SCALE = {
54
- sm: "text-sm",
55
- default: "text-base",
56
- lg: "text-lg"
57
- };
58
- var TOUCH_TARGET_MIN = [
59
- "min-h-[44px]",
60
- "min-w-[44px]"
61
- ];
62
- var INTERACTIVE_SIZES = {
63
- sm: "h-9 w-9",
64
- // 36px - desktop only, NOT AAA compliant
65
- default: "h-11 w-11",
66
- // 44px - AAA compliant
67
- lg: "h-14 w-14"
68
- // 56px - AAA compliant, enhanced
69
- };
70
- var FIELD_HEIGHTS = {
71
- sm: "h-9",
72
- // 36px
73
- default: "h-11",
74
- // 44px
75
- lg: "h-14"
76
- // 56px
77
- };
78
- var ERROR_MESSAGE_BASE = [
79
- "flex",
80
- "items-center",
81
- "gap-1.5",
82
- "text-[var(--destructive)]"
83
- ];
84
- var SUCCESS_MESSAGE_BASE = [
85
- "flex",
86
- "items-center",
87
- "gap-1.5",
88
- "text-[var(--success)]"
89
- ];
90
- var DESCRIPTION_BASE = [
91
- "text-[var(--menu-muted)]"
92
- ];
93
- var LABEL_BASE = [
94
- "font-medium",
95
- "text-[var(--content-foreground)]"
96
- ];
97
- var REQUIRED_INDICATOR = "after:content-['*'] after:ml-0.5 after:text-[var(--destructive)]";
98
- var POPOVER_ANIMATION_IN = [
99
- "data-[entering]:animate-in",
100
- "data-[entering]:fade-in-0",
101
- "data-[entering]:zoom-in-95"
102
- ];
103
- var POPOVER_ANIMATION_OUT = [
104
- "data-[exiting]:animate-out",
105
- "data-[exiting]:fade-out-0",
106
- "data-[exiting]:zoom-out-95"
107
- ];
108
- var REDUCED_MOTION = [
109
- "motion-reduce:transition-none",
110
- "motion-reduce:animate-none"
111
- ];
112
- var TRANSITION_COLORS = [
113
- "transition-colors",
114
- "duration-200"
115
- ];
116
- var TRANSITION_FAST = [
117
- "transition-colors",
118
- "duration-150"
119
- ];
120
- var HOVER_ACCENT = [
121
- "hover:bg-[var(--accent)]",
122
- "hover:text-[var(--accent-foreground)]"
123
- ];
124
- function combineStyles(...styles) {
125
- return styles.flatMap((s) => Array.isArray(s) ? [...s] : [s]);
126
- }
127
-
128
- export { DEFAULT_INTERACTIONS, DESCRIPTION_BASE, DISABLED_DATA_ATTR, DISABLED_STANDARD, DISABLED_STYLES, ERROR_MESSAGE_BASE, FIELD_HEIGHTS, FOCUS_HIGHLIGHT, FOCUS_RING, FOCUS_STYLES, FOCUS_VISIBLE_RING, FOCUS_WITHIN_RING, HIGH_CONTRAST_FOCUS, HIGH_CONTRAST_HOVER, HIGH_CONTRAST_INTERACTIONS, HIGH_CONTRAST_PRESSED, HOVER_ACCENT, HOVER_STYLES, HOVER_STYLES_BASE, INTERACTIVE_SIZES, LABEL_BASE, NON_INTERACTIVE, POPOVER_ANIMATION_IN, POPOVER_ANIMATION_OUT, PRESSED_STYLES, PRESSED_STYLES_BASE, REDUCED_MOTION, REQUIRED_INDICATOR, SUBTLE_INTERACTIONS, SUCCESS_MESSAGE_BASE, TEXT_SIZE_MEDIUM_SCALE, TEXT_SIZE_SMALL_SCALE, TOUCH_TARGET_MIN, TRANSITION_COLORS, TRANSITION_FAST, combineStyles };
129
- //# sourceMappingURL=index.mjs.map
1
+ var e="data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--themis-ring)] data-[focus-visible]:ring-offset-2",a="data-[pressed]:scale-[0.97]",E="data-[pressed]:transition-transform data-[pressed]:duration-100",r="data-[hovered]:shadow-md",c="data-[hovered]:transition-shadow data-[hovered]:duration-200",t="hc:data-[focus-visible]:outline hc:data-[focus-visible]:outline-4 hc:data-[focus-visible]:outline-offset-2 hc:data-[focus-visible]:outline-foreground",n="hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground",s="hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground",i=`${t} ${n} ${s}`,_="disabled:pointer-events-none disabled:opacity-50",T=`${e} ${a} ${r} ${t} ${n} ${s}`,I=`${e} ${t}`,d="cursor-default select-none";var A=["focus-within:outline-none","focus-within:ring-2","focus-within:ring-[var(--ring)]","focus-within:ring-offset-2"],O=["focus-visible:outline-none","focus-visible:ring-2","focus-visible:ring-[var(--ring)]","focus-visible:ring-offset-2"],R=["focus:outline-none","focus:ring-2","focus:ring-[var(--ring)]"],u=["focus:outline-none","focus:bg-[var(--accent)]","focus:text-[var(--accent-foreground)]"],N=["disabled:pointer-events-none","disabled:opacity-50"],x=["data-[disabled]:pointer-events-none","data-[disabled]:opacity-50","data-[disabled]:cursor-not-allowed"],l={sm:"text-xs",default:"text-sm",lg:"text-base"},p={sm:"text-sm",default:"text-base",lg:"text-lg"},f=["min-h-[44px]","min-w-[44px]"],C={sm:"h-9 w-9",default:"h-11 w-11",lg:"h-14 w-14"},g={sm:"h-9",default:"h-11",lg:"h-14"},L=["flex","items-center","gap-1.5","text-[var(--destructive-background)]"],D=["flex","items-center","gap-1.5","text-[var(--success-background)]"],H=["text-[var(--menu-muted)]"],v=["font-medium","text-[var(--content-foreground)]"],h="after:content-['*'] after:ml-0.5 after:text-[var(--destructive-background)]",m=["data-[entering]:animate-in","data-[entering]:fade-in-0","data-[entering]:zoom-in-95"],U=["data-[exiting]:animate-out","data-[exiting]:fade-out-0","data-[exiting]:zoom-out-95"],b=["motion-reduce:transition-none","motion-reduce:animate-none"],G=["transition-colors","duration-200"],B=["transition-colors","duration-150"],M=["hover:bg-[var(--accent)]","hover:text-[var(--accent-foreground)]"];function F(...S){return S.flatMap(o=>Array.isArray(o)?[...o]:[o])}export{T as DEFAULT_INTERACTIONS,H as DESCRIPTION_BASE,x as DISABLED_DATA_ATTR,N as DISABLED_STANDARD,_ as DISABLED_STYLES,L as ERROR_MESSAGE_BASE,g as FIELD_HEIGHTS,u as FOCUS_HIGHLIGHT,R as FOCUS_RING,e as FOCUS_STYLES,O as FOCUS_VISIBLE_RING,A as FOCUS_WITHIN_RING,t as HIGH_CONTRAST_FOCUS,n as HIGH_CONTRAST_HOVER,i as HIGH_CONTRAST_INTERACTIONS,s as HIGH_CONTRAST_PRESSED,M as HOVER_ACCENT,r as HOVER_STYLES,c as HOVER_STYLES_BASE,C as INTERACTIVE_SIZES,v as LABEL_BASE,d as NON_INTERACTIVE,m as POPOVER_ANIMATION_IN,U as POPOVER_ANIMATION_OUT,a as PRESSED_STYLES,E as PRESSED_STYLES_BASE,b as REDUCED_MOTION,h as REQUIRED_INDICATOR,I as SUBTLE_INTERACTIONS,D as SUCCESS_MESSAGE_BASE,p as TEXT_SIZE_MEDIUM_SCALE,l as TEXT_SIZE_SMALL_SCALE,f as TOUCH_TARGET_MIN,G as TRANSITION_COLORS,B as TRANSITION_FAST,F as combineStyles};//# sourceMappingURL=index.mjs.map
130
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/styles/interaction-states.ts","../../src/styles/shared-variants.ts"],"names":[],"mappings":";AAoBO,IAAM,YAAA,GAAe;AAUrB,IAAM,cAAA,GAAiB;AAKvB,IAAM,mBAAA,GAAsB;AAU5B,IAAM,YAAA,GAAe;AAKrB,IAAM,iBAAA,GAAoB;AAQ1B,IAAM,mBAAA,GAAsB;AAM5B,IAAM,mBAAA,GAAsB;AAM5B,IAAM,qBAAA,GAAwB;AAM9B,IAAM,6BAA6B,CAAA,EAAG,mBAAmB,CAAA,CAAA,EAAI,mBAAmB,IAAI,qBAAqB,CAAA;AAMzG,IAAM,eAAA,GAAkB;AAWxB,IAAM,oBAAA,GAAuB,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,cAAc,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,EAAI,mBAAmB,CAAA,CAAA,EAAI,mBAAmB,CAAA,CAAA,EAAI,qBAAqB,CAAA;AAQrJ,IAAM,mBAAA,GAAsB,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,mBAAmB,CAAA;AAMlE,IAAM,eAAA,GAAkB;;;AC1FxB,IAAM,iBAAA,GAAoB;AAAA,EAC/B,2BAAA;AAAA,EACA,qBAAA;AAAA,EACA,iCAAA;AAAA,EACA;AACF;AAMO,IAAM,kBAAA,GAAqB;AAAA,EAChC,4BAAA;AAAA,EACA,sBAAA;AAAA,EACA,kCAAA;AAAA,EACA;AACF;AAMO,IAAM,UAAA,GAAa;AAAA,EACxB,oBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF;AAKO,IAAM,eAAA,GAAkB;AAAA,EAC7B,oBAAA;AAAA,EACA,0BAAA;AAAA,EACA;AACF;AASO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,8BAAA;AAAA,EACA;AACF;AAKO,IAAM,kBAAA,GAAqB;AAAA,EAChC,qCAAA;AAAA,EACA,4BAAA;AAAA,EACA;AACF;AASO,IAAM,qBAAA,GAAwB;AAAA,EACnC,EAAA,EAAI,SAAA;AAAA,EACJ,OAAA,EAAS,SAAA;AAAA,EACT,EAAA,EAAI;AACN;AAKO,IAAM,sBAAA,GAAyB;AAAA,EACpC,EAAA,EAAI,SAAA;AAAA,EACJ,OAAA,EAAS,WAAA;AAAA,EACT,EAAA,EAAI;AACN;AASO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,cAAA;AAAA,EACA;AACF;AAKO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,EAAA,EAAI,SAAA;AAAA;AAAA,EACJ,OAAA,EAAS,WAAA;AAAA;AAAA,EACT,EAAA,EAAI;AAAA;AACN;AAKO,IAAM,aAAA,GAAgB;AAAA,EAC3B,EAAA,EAAI,KAAA;AAAA;AAAA,EACJ,OAAA,EAAS,MAAA;AAAA;AAAA,EACT,EAAA,EAAI;AAAA;AACN;AASO,IAAM,kBAAA,GAAqB;AAAA,EAChC,MAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF;AAKO,IAAM,oBAAA,GAAuB;AAAA,EAClC,MAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF;AAKO,IAAM,gBAAA,GAAmB;AAAA,EAC9B;AACF;AAKO,IAAM,UAAA,GAAa;AAAA,EACxB,aAAA;AAAA,EACA;AACF;AAKO,IAAM,kBAAA,GAAqB;AAS3B,IAAM,oBAAA,GAAuB;AAAA,EAClC,4BAAA;AAAA,EACA,2BAAA;AAAA,EACA;AACF;AAKO,IAAM,qBAAA,GAAwB;AAAA,EACnC,4BAAA;AAAA,EACA,2BAAA;AAAA,EACA;AACF;AAKO,IAAM,cAAA,GAAiB;AAAA,EAC5B,+BAAA;AAAA,EACA;AACF;AAKO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,mBAAA;AAAA,EACA;AACF;AAKO,IAAM,eAAA,GAAkB;AAAA,EAC7B,mBAAA;AAAA,EACA;AACF;AASO,IAAM,YAAA,GAAe;AAAA,EAC1B,0BAAA;AAAA,EACA;AACF;AASO,SAAS,iBAAiB,MAAA,EAAkD;AACjF,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,CAAA,CAAA,KAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAC,GAAG,CAAC,CAAA,GAAI,CAAC,CAAC,CAAC,CAAA;AAC5D","file":"index.mjs","sourcesContent":["/**\n * Global Interaction State Styles\n *\n * Consistent interaction patterns across all Themis components.\n * These styles ensure WCAG 2.2 AAA compliance and predictable UX.\n *\n * @see spec.md FR-010 (Visible focus ring for keyboard navigation)\n * @see spec.md FR-031 (Pressed state feedback)\n * @see spec.md FR-012 (High contrast mode support)\n * @see constitution.md Principle IV (Accessibility First)\n */\n\n/**\n * Focus state styles (FR-010)\n * Visible focus ring for keyboard navigation - WCAG 2.2 Level AAA\n *\n * Components can override by extending these styles:\n * @example\n * cn(FOCUS_STYLES, \"ring-4\") // Increases ring width to 4px\n */\nexport const FOCUS_STYLES = \"data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--themis-ring)] data-[focus-visible]:ring-offset-2\";\n\n/**\n * Pressed/Active state styles (FR-031)\n * Visual feedback for press interactions\n *\n * Components can override the scale amount:\n * @example\n * cn(PRESSED_STYLES_BASE, \"data-[pressed]:scale-[0.95]\") // More pronounced scale\n */\nexport const PRESSED_STYLES = \"data-[pressed]:scale-[0.97]\";\n\n/**\n * Base pressed styles without scale (for components that need different feedback)\n */\nexport const PRESSED_STYLES_BASE = \"data-[pressed]:transition-transform data-[pressed]:duration-100\";\n\n/**\n * Hover state styles\n * Elevation change on hover for better affordance\n *\n * Components can override shadow depth:\n * @example\n * cn(HOVER_STYLES_BASE, \"data-[hovered]:shadow-lg\") // Larger shadow\n */\nexport const HOVER_STYLES = \"data-[hovered]:shadow-md\";\n\n/**\n * Base hover styles without shadow (for components that use different hover effects)\n */\nexport const HOVER_STYLES_BASE = \"data-[hovered]:transition-shadow data-[hovered]:duration-200\";\n\n/**\n * High contrast mode focus (FR-012)\n * Enhanced outlines for users requiring high contrast\n *\n * Uses 'hc:' prefix for prefers-contrast: more media query\n */\nexport const HIGH_CONTRAST_FOCUS = \"hc:data-[focus-visible]:outline hc:data-[focus-visible]:outline-4 hc:data-[focus-visible]:outline-offset-2 hc:data-[focus-visible]:outline-foreground\";\n\n/**\n * High contrast mode hover (FR-012)\n * Enhanced outlines for hover in high contrast mode\n */\nexport const HIGH_CONTRAST_HOVER = \"hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground\";\n\n/**\n * High contrast mode pressed state\n * Enhanced outlines for pressed state in high contrast mode\n */\nexport const HIGH_CONTRAST_PRESSED = \"hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground\";\n\n/**\n * Combined high contrast styles\n * Use this for components that need all high contrast interaction states\n */\nexport const HIGH_CONTRAST_INTERACTIONS = `${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Disabled state styles\n * Consistent disabled appearance across all components\n */\nexport const DISABLED_STYLES = \"disabled:pointer-events-none disabled:opacity-50\";\n\n/**\n * Default interaction bundle\n * Most common combination for interactive components\n *\n * Includes: focus ring, pressed scale, hover shadow, high contrast enhancements\n *\n * @example\n * <button className={cn(DEFAULT_INTERACTIONS, \"bg-primary\")}>Click</button>\n */\nexport const DEFAULT_INTERACTIONS = `${FOCUS_STYLES} ${PRESSED_STYLES} ${HOVER_STYLES} ${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Subtle interaction bundle\n * For components that need less pronounced feedback\n *\n * Includes: focus ring and high contrast, but no hover shadow or pressed scale\n */\nexport const SUBTLE_INTERACTIONS = `${FOCUS_STYLES} ${HIGH_CONTRAST_FOCUS}`;\n\n/**\n * Non-interactive element styles\n * For elements that should indicate they are not interactive\n */\nexport const NON_INTERACTIVE = \"cursor-default select-none\";\n","/**\n * Shared CVA Variant Utilities\n *\n * Common patterns extracted from component variants for consistency and reduced bundle size.\n * Use these constants in CVA definitions to ensure consistent styling across Themis.\n *\n * @see interaction-states.ts for interaction-specific styles (focus, hover, pressed)\n */\n\n// =============================================================================\n// Focus Ring Patterns\n// =============================================================================\n\n/**\n * Focus-within ring (for container elements with focusable children)\n * Use when the container should show focus when any child is focused\n */\nexport const FOCUS_WITHIN_RING = [\n 'focus-within:outline-none',\n 'focus-within:ring-2',\n 'focus-within:ring-[var(--ring)]',\n 'focus-within:ring-offset-2',\n] as const;\n\n/**\n * Focus-visible ring (for directly focusable elements)\n * Use for buttons, inputs, and other interactive elements\n */\nexport const FOCUS_VISIBLE_RING = [\n 'focus-visible:outline-none',\n 'focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)]',\n 'focus-visible:ring-offset-2',\n] as const;\n\n/**\n * Standard focus ring (for elements using :focus pseudo-class)\n * Prefer focus-visible when possible for better UX\n */\nexport const FOCUS_RING = [\n 'focus:outline-none',\n 'focus:ring-2',\n 'focus:ring-[var(--ring)]',\n] as const;\n\n/**\n * Focus with background change (for segments, cells, menu items)\n */\nexport const FOCUS_HIGHLIGHT = [\n 'focus:outline-none',\n 'focus:bg-[var(--accent)]',\n 'focus:text-[var(--accent-foreground)]',\n] as const;\n\n// =============================================================================\n// Disabled State Patterns\n// =============================================================================\n\n/**\n * Standard disabled state using disabled attribute\n */\nexport const DISABLED_STANDARD = [\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n] as const;\n\n/**\n * Disabled state using data attribute (React Aria pattern)\n */\nexport const DISABLED_DATA_ATTR = [\n 'data-[disabled]:pointer-events-none',\n 'data-[disabled]:opacity-50',\n 'data-[disabled]:cursor-not-allowed',\n] as const;\n\n// =============================================================================\n// Size-Based Text Variants\n// =============================================================================\n\n/**\n * Small text size scale (xs -> sm -> base)\n */\nexport const TEXT_SIZE_SMALL_SCALE = {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n} as const;\n\n/**\n * Medium text size scale (sm -> base -> lg)\n */\nexport const TEXT_SIZE_MEDIUM_SCALE = {\n sm: 'text-sm',\n default: 'text-base',\n lg: 'text-lg',\n} as const;\n\n// =============================================================================\n// Touch Target Utilities\n// =============================================================================\n\n/**\n * WCAG 2.2 AAA minimum touch target (44x44px)\n */\nexport const TOUCH_TARGET_MIN = [\n 'min-h-[44px]',\n 'min-w-[44px]',\n] as const;\n\n/**\n * Common button/cell sizes with touch target compliance\n */\nexport const INTERACTIVE_SIZES = {\n sm: 'h-9 w-9', // 36px - desktop only, NOT AAA compliant\n default: 'h-11 w-11', // 44px - AAA compliant\n lg: 'h-14 w-14', // 56px - AAA compliant, enhanced\n} as const;\n\n/**\n * Height-only sizes for fields and inputs\n */\nexport const FIELD_HEIGHTS = {\n sm: 'h-9', // 36px\n default: 'h-11', // 44px\n lg: 'h-14', // 56px\n} as const;\n\n// =============================================================================\n// Message/Feedback Patterns\n// =============================================================================\n\n/**\n * Error message styling\n */\nexport const ERROR_MESSAGE_BASE = [\n 'flex',\n 'items-center',\n 'gap-1.5',\n 'text-[var(--destructive)]',\n] as const;\n\n/**\n * Success message styling\n */\nexport const SUCCESS_MESSAGE_BASE = [\n 'flex',\n 'items-center',\n 'gap-1.5',\n 'text-[var(--success)]',\n] as const;\n\n/**\n * Description/helper text styling\n */\nexport const DESCRIPTION_BASE = [\n 'text-[var(--menu-muted)]',\n] as const;\n\n/**\n * Label base styling\n */\nexport const LABEL_BASE = [\n 'font-medium',\n 'text-[var(--content-foreground)]',\n] as const;\n\n/**\n * Required indicator pattern\n */\nexport const REQUIRED_INDICATOR = \"after:content-['*'] after:ml-0.5 after:text-[var(--destructive)]\";\n\n// =============================================================================\n// Animation Patterns\n// =============================================================================\n\n/**\n * Popover/dropdown entry animation\n */\nexport const POPOVER_ANIMATION_IN = [\n 'data-[entering]:animate-in',\n 'data-[entering]:fade-in-0',\n 'data-[entering]:zoom-in-95',\n] as const;\n\n/**\n * Popover/dropdown exit animation\n */\nexport const POPOVER_ANIMATION_OUT = [\n 'data-[exiting]:animate-out',\n 'data-[exiting]:fade-out-0',\n 'data-[exiting]:zoom-out-95',\n] as const;\n\n/**\n * Reduced motion support (WCAG 2.2)\n */\nexport const REDUCED_MOTION = [\n 'motion-reduce:transition-none',\n 'motion-reduce:animate-none',\n] as const;\n\n/**\n * Standard transition for colors\n */\nexport const TRANSITION_COLORS = [\n 'transition-colors',\n 'duration-200',\n] as const;\n\n/**\n * Fast transition for interactions\n */\nexport const TRANSITION_FAST = [\n 'transition-colors',\n 'duration-150',\n] as const;\n\n// =============================================================================\n// Hover State Patterns\n// =============================================================================\n\n/**\n * Accent background on hover (for interactive items)\n */\nexport const HOVER_ACCENT = [\n 'hover:bg-[var(--accent)]',\n 'hover:text-[var(--accent-foreground)]',\n] as const;\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Combines multiple style arrays into a flat array for CVA base styles\n */\nexport function combineStyles(...styles: (readonly string[] | string)[]): string[] {\n return styles.flatMap(s => Array.isArray(s) ? [...s] : [s]);\n}\n"]}
1
+ {"version":3,"sources":["../../src/styles/interaction-states.ts","../../src/styles/shared-variants.ts"],"names":["FOCUS_STYLES","PRESSED_STYLES","PRESSED_STYLES_BASE","HOVER_STYLES","HOVER_STYLES_BASE","HIGH_CONTRAST_FOCUS","HIGH_CONTRAST_HOVER","HIGH_CONTRAST_PRESSED","HIGH_CONTRAST_INTERACTIONS","DISABLED_STYLES","DEFAULT_INTERACTIONS","SUBTLE_INTERACTIONS","NON_INTERACTIVE","FOCUS_WITHIN_RING","FOCUS_VISIBLE_RING","FOCUS_RING","FOCUS_HIGHLIGHT","DISABLED_STANDARD","DISABLED_DATA_ATTR","TEXT_SIZE_SMALL_SCALE","TEXT_SIZE_MEDIUM_SCALE","TOUCH_TARGET_MIN","INTERACTIVE_SIZES","FIELD_HEIGHTS","ERROR_MESSAGE_BASE","SUCCESS_MESSAGE_BASE","DESCRIPTION_BASE","LABEL_BASE","REQUIRED_INDICATOR","POPOVER_ANIMATION_IN","POPOVER_ANIMATION_OUT","REDUCED_MOTION","TRANSITION_COLORS","TRANSITION_FAST","HOVER_ACCENT","combineStyles","styles","s"],"mappings":"AAoBO,IAAMA,CAAAA,CAAe,gHAUfC,CAAAA,CAAiB,6BAAA,CAKjBC,EAAsB,iEAAA,CAUtBC,CAAAA,CAAe,2BAKfC,CAAAA,CAAoB,8DAAA,CAQpBC,EAAsB,uJAAA,CAMtBC,CAAAA,CAAsB,6FAMtBC,CAAAA,CAAwB,+HAAA,CAMxBC,EAA6B,CAAA,EAAGH,CAAmB,CAAA,CAAA,EAAIC,CAAmB,CAAA,CAAA,EAAIC,CAAqB,GAMnGE,CAAAA,CAAkB,kDAAA,CAWlBC,EAAuB,CAAA,EAAGV,CAAY,IAAIC,CAAc,CAAA,CAAA,EAAIE,CAAY,CAAA,CAAA,EAAIE,CAAmB,CAAA,CAAA,EAAIC,CAAmB,CAAA,CAAA,EAAIC,CAAqB,GAQ/II,CAAAA,CAAsB,CAAA,EAAGX,CAAY,CAAA,CAAA,EAAIK,CAAmB,CAAA,CAAA,CAM5DO,CAAAA,CAAkB,6BC1FxB,IAAMC,EAAoB,CAC/B,2BAAA,CACA,sBACA,iCAAA,CACA,4BACF,EAMaC,CAAAA,CAAqB,CAChC,4BAAA,CACA,sBAAA,CACA,kCAAA,CACA,6BACF,EAMaC,CAAAA,CAAa,CACxB,qBACA,cAAA,CACA,0BACF,EAKaC,CAAAA,CAAkB,CAC7B,oBAAA,CACA,0BAAA,CACA,uCACF,CAAA,CASaC,EAAoB,CAC/B,8BAAA,CACA,qBACF,CAAA,CAKaC,CAAAA,CAAqB,CAChC,qCAAA,CACA,4BAAA,CACA,oCACF,CAAA,CASaC,CAAAA,CAAwB,CACnC,GAAI,SAAA,CACJ,OAAA,CAAS,UACT,EAAA,CAAI,WACN,EAKaC,CAAAA,CAAyB,CACpC,EAAA,CAAI,SAAA,CACJ,OAAA,CAAS,WAAA,CACT,GAAI,SACN,CAAA,CASaC,EAAmB,CAC9B,cAAA,CACA,cACF,CAAA,CAKaC,CAAAA,CAAoB,CAC/B,EAAA,CAAI,SAAA,CACJ,OAAA,CAAS,YACT,EAAA,CAAI,WACN,EAKaC,CAAAA,CAAgB,CAC3B,GAAI,KAAA,CACJ,OAAA,CAAS,MAAA,CACT,EAAA,CAAI,MACN,CAAA,CASaC,EAAqB,CAChC,MAAA,CACA,eACA,SAAA,CACA,sCACF,EAKaC,CAAAA,CAAuB,CAClC,MAAA,CACA,cAAA,CACA,SAAA,CACA,kCACF,EAKaC,CAAAA,CAAmB,CAC9B,0BACF,CAAA,CAKaC,CAAAA,CAAa,CACxB,aAAA,CACA,kCACF,CAAA,CAKaC,CAAAA,CAAqB,6EAAA,CASrBC,CAAAA,CAAuB,CAClC,4BAAA,CACA,2BAAA,CACA,4BACF,CAAA,CAKaC,CAAAA,CAAwB,CACnC,4BAAA,CACA,2BAAA,CACA,4BACF,CAAA,CAKaC,CAAAA,CAAiB,CAC5B,gCACA,4BACF,CAAA,CAKaC,EAAoB,CAC/B,mBAAA,CACA,cACF,CAAA,CAKaC,CAAAA,CAAkB,CAC7B,mBAAA,CACA,cACF,CAAA,CASaC,EAAe,CAC1B,0BAAA,CACA,uCACF,EASO,SAASC,KAAiBC,CAAAA,CAAkD,CACjF,OAAOA,CAAAA,CAAO,OAAA,CAAQC,CAAAA,EAAK,MAAM,OAAA,CAAQA,CAAC,EAAI,CAAC,GAAGA,CAAC,CAAA,CAAI,CAACA,CAAC,CAAC,CAC5D","file":"index.mjs","sourcesContent":["/**\n * Global Interaction State Styles\n *\n * Consistent interaction patterns across all Themis components.\n * These styles ensure WCAG 2.2 AAA compliance and predictable UX.\n *\n * @see spec.md FR-010 (Visible focus ring for keyboard navigation)\n * @see spec.md FR-031 (Pressed state feedback)\n * @see spec.md FR-012 (High contrast mode support)\n * @see constitution.md Principle IV (Accessibility First)\n */\n\n/**\n * Focus state styles (FR-010)\n * Visible focus ring for keyboard navigation - WCAG 2.2 Level AAA\n *\n * Components can override by extending these styles:\n * @example\n * cn(FOCUS_STYLES, \"ring-4\") // Increases ring width to 4px\n */\nexport const FOCUS_STYLES = \"data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--themis-ring)] data-[focus-visible]:ring-offset-2\";\n\n/**\n * Pressed/Active state styles (FR-031)\n * Visual feedback for press interactions\n *\n * Components can override the scale amount:\n * @example\n * cn(PRESSED_STYLES_BASE, \"data-[pressed]:scale-[0.95]\") // More pronounced scale\n */\nexport const PRESSED_STYLES = \"data-[pressed]:scale-[0.97]\";\n\n/**\n * Base pressed styles without scale (for components that need different feedback)\n */\nexport const PRESSED_STYLES_BASE = \"data-[pressed]:transition-transform data-[pressed]:duration-100\";\n\n/**\n * Hover state styles\n * Elevation change on hover for better affordance\n *\n * Components can override shadow depth:\n * @example\n * cn(HOVER_STYLES_BASE, \"data-[hovered]:shadow-lg\") // Larger shadow\n */\nexport const HOVER_STYLES = \"data-[hovered]:shadow-md\";\n\n/**\n * Base hover styles without shadow (for components that use different hover effects)\n */\nexport const HOVER_STYLES_BASE = \"data-[hovered]:transition-shadow data-[hovered]:duration-200\";\n\n/**\n * High contrast mode focus (FR-012)\n * Enhanced outlines for users requiring high contrast\n *\n * Uses 'hc:' prefix for prefers-contrast: more media query\n */\nexport const HIGH_CONTRAST_FOCUS = \"hc:data-[focus-visible]:outline hc:data-[focus-visible]:outline-4 hc:data-[focus-visible]:outline-offset-2 hc:data-[focus-visible]:outline-foreground\";\n\n/**\n * High contrast mode hover (FR-012)\n * Enhanced outlines for hover in high contrast mode\n */\nexport const HIGH_CONTRAST_HOVER = \"hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground\";\n\n/**\n * High contrast mode pressed state\n * Enhanced outlines for pressed state in high contrast mode\n */\nexport const HIGH_CONTRAST_PRESSED = \"hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground\";\n\n/**\n * Combined high contrast styles\n * Use this for components that need all high contrast interaction states\n */\nexport const HIGH_CONTRAST_INTERACTIONS = `${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Disabled state styles\n * Consistent disabled appearance across all components\n */\nexport const DISABLED_STYLES = \"disabled:pointer-events-none disabled:opacity-50\";\n\n/**\n * Default interaction bundle\n * Most common combination for interactive components\n *\n * Includes: focus ring, pressed scale, hover shadow, high contrast enhancements\n *\n * @example\n * <button className={cn(DEFAULT_INTERACTIONS, \"bg-primary\")}>Click</button>\n */\nexport const DEFAULT_INTERACTIONS = `${FOCUS_STYLES} ${PRESSED_STYLES} ${HOVER_STYLES} ${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Subtle interaction bundle\n * For components that need less pronounced feedback\n *\n * Includes: focus ring and high contrast, but no hover shadow or pressed scale\n */\nexport const SUBTLE_INTERACTIONS = `${FOCUS_STYLES} ${HIGH_CONTRAST_FOCUS}`;\n\n/**\n * Non-interactive element styles\n * For elements that should indicate they are not interactive\n */\nexport const NON_INTERACTIVE = \"cursor-default select-none\";\n","/**\n * Shared CVA Variant Utilities\n *\n * Common patterns extracted from component variants for consistency and reduced bundle size.\n * Use these constants in CVA definitions to ensure consistent styling across Themis.\n *\n * @see interaction-states.ts for interaction-specific styles (focus, hover, pressed)\n */\n\n// =============================================================================\n// Focus Ring Patterns\n// =============================================================================\n\n/**\n * Focus-within ring (for container elements with focusable children)\n * Use when the container should show focus when any child is focused\n */\nexport const FOCUS_WITHIN_RING = [\n 'focus-within:outline-none',\n 'focus-within:ring-2',\n 'focus-within:ring-[var(--ring)]',\n 'focus-within:ring-offset-2',\n] as const;\n\n/**\n * Focus-visible ring (for directly focusable elements)\n * Use for buttons, inputs, and other interactive elements\n */\nexport const FOCUS_VISIBLE_RING = [\n 'focus-visible:outline-none',\n 'focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)]',\n 'focus-visible:ring-offset-2',\n] as const;\n\n/**\n * Standard focus ring (for elements using :focus pseudo-class)\n * Prefer focus-visible when possible for better UX\n */\nexport const FOCUS_RING = [\n 'focus:outline-none',\n 'focus:ring-2',\n 'focus:ring-[var(--ring)]',\n] as const;\n\n/**\n * Focus with background change (for segments, cells, menu items)\n */\nexport const FOCUS_HIGHLIGHT = [\n 'focus:outline-none',\n 'focus:bg-[var(--accent)]',\n 'focus:text-[var(--accent-foreground)]',\n] as const;\n\n// =============================================================================\n// Disabled State Patterns\n// =============================================================================\n\n/**\n * Standard disabled state using disabled attribute\n */\nexport const DISABLED_STANDARD = [\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n] as const;\n\n/**\n * Disabled state using data attribute (React Aria pattern)\n */\nexport const DISABLED_DATA_ATTR = [\n 'data-[disabled]:pointer-events-none',\n 'data-[disabled]:opacity-50',\n 'data-[disabled]:cursor-not-allowed',\n] as const;\n\n// =============================================================================\n// Size-Based Text Variants\n// =============================================================================\n\n/**\n * Small text size scale (xs -> sm -> base)\n */\nexport const TEXT_SIZE_SMALL_SCALE = {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n} as const;\n\n/**\n * Medium text size scale (sm -> base -> lg)\n */\nexport const TEXT_SIZE_MEDIUM_SCALE = {\n sm: 'text-sm',\n default: 'text-base',\n lg: 'text-lg',\n} as const;\n\n// =============================================================================\n// Touch Target Utilities\n// =============================================================================\n\n/**\n * WCAG 2.2 AAA minimum touch target (44x44px)\n */\nexport const TOUCH_TARGET_MIN = [\n 'min-h-[44px]',\n 'min-w-[44px]',\n] as const;\n\n/**\n * Common button/cell sizes with touch target compliance\n */\nexport const INTERACTIVE_SIZES = {\n sm: 'h-9 w-9', // 36px - desktop only, NOT AAA compliant\n default: 'h-11 w-11', // 44px - AAA compliant\n lg: 'h-14 w-14', // 56px - AAA compliant, enhanced\n} as const;\n\n/**\n * Height-only sizes for fields and inputs\n */\nexport const FIELD_HEIGHTS = {\n sm: 'h-9', // 36px\n default: 'h-11', // 44px\n lg: 'h-14', // 56px\n} as const;\n\n// =============================================================================\n// Message/Feedback Patterns\n// =============================================================================\n\n/**\n * Error message styling\n */\nexport const ERROR_MESSAGE_BASE = [\n 'flex',\n 'items-center',\n 'gap-1.5',\n 'text-[var(--destructive-background)]',\n] as const;\n\n/**\n * Success message styling\n */\nexport const SUCCESS_MESSAGE_BASE = [\n 'flex',\n 'items-center',\n 'gap-1.5',\n 'text-[var(--success-background)]',\n] as const;\n\n/**\n * Description/helper text styling\n */\nexport const DESCRIPTION_BASE = [\n 'text-[var(--menu-muted)]',\n] as const;\n\n/**\n * Label base styling\n */\nexport const LABEL_BASE = [\n 'font-medium',\n 'text-[var(--content-foreground)]',\n] as const;\n\n/**\n * Required indicator pattern\n */\nexport const REQUIRED_INDICATOR = \"after:content-['*'] after:ml-0.5 after:text-[var(--destructive-background)]\";\n\n// =============================================================================\n// Animation Patterns\n// =============================================================================\n\n/**\n * Popover/dropdown entry animation\n */\nexport const POPOVER_ANIMATION_IN = [\n 'data-[entering]:animate-in',\n 'data-[entering]:fade-in-0',\n 'data-[entering]:zoom-in-95',\n] as const;\n\n/**\n * Popover/dropdown exit animation\n */\nexport const POPOVER_ANIMATION_OUT = [\n 'data-[exiting]:animate-out',\n 'data-[exiting]:fade-out-0',\n 'data-[exiting]:zoom-out-95',\n] as const;\n\n/**\n * Reduced motion support (WCAG 2.2)\n */\nexport const REDUCED_MOTION = [\n 'motion-reduce:transition-none',\n 'motion-reduce:animate-none',\n] as const;\n\n/**\n * Standard transition for colors\n */\nexport const TRANSITION_COLORS = [\n 'transition-colors',\n 'duration-200',\n] as const;\n\n/**\n * Fast transition for interactions\n */\nexport const TRANSITION_FAST = [\n 'transition-colors',\n 'duration-150',\n] as const;\n\n// =============================================================================\n// Hover State Patterns\n// =============================================================================\n\n/**\n * Accent background on hover (for interactive items)\n */\nexport const HOVER_ACCENT = [\n 'hover:bg-[var(--accent)]',\n 'hover:text-[var(--accent-foreground)]',\n] as const;\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Combines multiple style arrays into a flat array for CVA base styles\n */\nexport function combineStyles(...styles: (readonly string[] | string)[]): string[] {\n return styles.flatMap(s => Array.isArray(s) ? [...s] : [s]);\n}\n"]}
@@ -72,11 +72,11 @@ export declare const FIELD_HEIGHTS: {
72
72
  /**
73
73
  * Error message styling
74
74
  */
75
- export declare const ERROR_MESSAGE_BASE: readonly ["flex", "items-center", "gap-1.5", "text-[var(--destructive)]"];
75
+ export declare const ERROR_MESSAGE_BASE: readonly ["flex", "items-center", "gap-1.5", "text-[var(--destructive-background)]"];
76
76
  /**
77
77
  * Success message styling
78
78
  */
79
- export declare const SUCCESS_MESSAGE_BASE: readonly ["flex", "items-center", "gap-1.5", "text-[var(--success)]"];
79
+ export declare const SUCCESS_MESSAGE_BASE: readonly ["flex", "items-center", "gap-1.5", "text-[var(--success-background)]"];
80
80
  /**
81
81
  * Description/helper text styling
82
82
  */
@@ -88,7 +88,7 @@ export declare const LABEL_BASE: readonly ["font-medium", "text-[var(--content-f
88
88
  /**
89
89
  * Required indicator pattern
90
90
  */
91
- export declare const REQUIRED_INDICATOR = "after:content-['*'] after:ml-0.5 after:text-[var(--destructive)]";
91
+ export declare const REQUIRED_INDICATOR = "after:content-['*'] after:ml-0.5 after:text-[var(--destructive-background)]";
92
92
  /**
93
93
  * Popover/dropdown entry animation
94
94
  */
@@ -1 +1 @@
1
- {"version":3,"file":"shared-variants.d.ts","sourceRoot":"","sources":["../../src/styles/shared-variants.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;;GAGG;AACH,eAAO,MAAM,iBAAiB,gIAKpB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,kBAAkB,oIAKrB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,UAAU,6EAIb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe,sGAIlB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,iBAAiB,kEAGpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,sHAIrB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;CAIxB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,gBAAgB,2CAGnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,kBAAkB,2EAKrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,oBAAoB,uEAKvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB,uCAEnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU,8DAGb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,qEAAqE,CAAC;AAMrG;;GAEG;AACH,eAAO,MAAM,oBAAoB,oGAIvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,qBAAqB,oGAIxB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc,0EAGjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB,gDAGpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe,gDAGlB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,YAAY,gFAGf,CAAC;AAMX;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAEjF"}
1
+ {"version":3,"file":"shared-variants.d.ts","sourceRoot":"","sources":["../../src/styles/shared-variants.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;;GAGG;AACH,eAAO,MAAM,iBAAiB,gIAKpB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,kBAAkB,oIAKrB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,UAAU,6EAIb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe,sGAIlB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,iBAAiB,kEAGpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,sHAIrB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;CAIxB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,gBAAgB,2CAGnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,kBAAkB,sFAKrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,oBAAoB,kFAKvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB,uCAEnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU,8DAGb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,gFAAgF,CAAC;AAMhH;;GAEG;AACH,eAAO,MAAM,oBAAoB,oGAIvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,qBAAqB,oGAIxB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc,0EAGjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB,gDAGpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe,gDAGlB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,YAAY,gFAGf,CAAC;AAMX;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAEjF"}
@@ -1,13 +1,2 @@
1
- 'use strict';
2
-
3
- var clsx = require('clsx');
4
- var tailwindMerge = require('tailwind-merge');
5
-
6
- // src/utils/cn.ts
7
- function cn(...inputs) {
8
- return tailwindMerge.twMerge(clsx.clsx(inputs));
9
- }
10
-
11
- exports.cn = cn;
12
- //# sourceMappingURL=index.js.map
1
+ 'use strict';var clsx=require('clsx'),tailwindMerge=require('tailwind-merge');function o(...r){return tailwindMerge.twMerge(clsx.clsx(r))}exports.cn=o;//# sourceMappingURL=index.js.map
13
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/cn.ts"],"names":["twMerge","clsx"],"mappings":";;;;;;AAcO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B","file":"index.js","sourcesContent":["/**\n * Class Name Utility\n * Merges Tailwind CSS classes with conflict resolution\n *\n * Combines clsx for conditional classes and tailwind-merge for deduplication\n *\n * @example\n * cn('px-2 py-1', 'px-4') // => 'py-1 px-4' (px-4 overrides px-2)\n * cn('text-red-500', condition && 'text-blue-500') // => conditional application\n */\n\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"]}
1
+ {"version":3,"sources":["../../src/utils/cn.ts"],"names":["cn","inputs","twMerge","clsx"],"mappings":"8EAcO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAA8B,CAClD,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B","file":"index.js","sourcesContent":["/**\n * Class Name Utility\n * Merges Tailwind CSS classes with conflict resolution\n *\n * Combines clsx for conditional classes and tailwind-merge for deduplication\n *\n * @example\n * cn('px-2 py-1', 'px-4') // => 'py-1 px-4' (px-4 overrides px-2)\n * cn('text-red-500', condition && 'text-blue-500') // => conditional application\n */\n\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"]}
@@ -1,11 +1,2 @@
1
- import { clsx } from 'clsx';
2
- import { twMerge } from 'tailwind-merge';
3
-
4
- // src/utils/cn.ts
5
- function cn(...inputs) {
6
- return twMerge(clsx(inputs));
7
- }
8
-
9
- export { cn };
10
- //# sourceMappingURL=index.mjs.map
1
+ import {clsx}from'clsx';import {twMerge}from'tailwind-merge';function o(...r){return twMerge(clsx(r))}export{o as cn};//# sourceMappingURL=index.mjs.map
11
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/cn.ts"],"names":[],"mappings":";;;;AAcO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B","file":"index.mjs","sourcesContent":["/**\n * Class Name Utility\n * Merges Tailwind CSS classes with conflict resolution\n *\n * Combines clsx for conditional classes and tailwind-merge for deduplication\n *\n * @example\n * cn('px-2 py-1', 'px-4') // => 'py-1 px-4' (px-4 overrides px-2)\n * cn('text-red-500', condition && 'text-blue-500') // => conditional application\n */\n\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"]}
1
+ {"version":3,"sources":["../../src/utils/cn.ts"],"names":["cn","inputs","twMerge","clsx"],"mappings":"6DAcO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAA8B,CAClD,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B","file":"index.mjs","sourcesContent":["/**\n * Class Name Utility\n * Merges Tailwind CSS classes with conflict resolution\n *\n * Combines clsx for conditional classes and tailwind-merge for deduplication\n *\n * @example\n * cn('px-2 py-1', 'px-4') // => 'py-1 px-4' (px-4 overrides px-2)\n * cn('text-red-500', condition && 'text-blue-500') // => conditional application\n */\n\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tribepad/themis",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Accessible React component library built on React Aria primitives",
5
5
  "author": "Tribepad <mbasford@tribepad.com>",
6
6
  "license": "MIT",
@@ -49,7 +49,6 @@
49
49
  "default": "./dist/styles/index.js"
50
50
  }
51
51
  },
52
- "./styles/tokens.css": "./dist/styles/tokens.css",
53
52
  "./styles/defaults.css": "./dist/styles/defaults.css",
54
53
  "./utils": {
55
54
  "import": {
@@ -82,9 +81,7 @@
82
81
  "CHANGELOG.md"
83
82
  ],
84
83
  "sideEffects": [
85
- "**/*.css",
86
- "dist/chunk-*.mjs",
87
- "dist/chunk-*.js"
84
+ "**/*.css"
88
85
  ],
89
86
  "scripts": {
90
87
  "build": "tsup && tsc -p tsconfig.build.json && pnpm build:css",
@@ -100,7 +97,9 @@
100
97
  "size": "size-limit",
101
98
  "security-check": "bash scripts/pre-publish-security-check.sh",
102
99
  "prepublishOnly": "pnpm build && pnpm test && pnpm validate && pnpm size",
103
- "clean": "rm -rf dist"
100
+ "clean": "rm -rf dist",
101
+ "storybook": "storybook dev -p 6006 --no-open",
102
+ "storybook:build": "storybook build"
104
103
  },
105
104
  "peerDependencies": {
106
105
  "lucide-react": ">=0.400.0",
@@ -132,7 +131,9 @@
132
131
  "devDependencies": {
133
132
  "@eslint/js": "^9.0.0",
134
133
  "@size-limit/preset-small-lib": "^11.0.0",
135
- "@storybook/react": "^8.0.0",
134
+ "@storybook/addon-a11y": "^10.2.8",
135
+ "@storybook/react-vite": "^10.2.8",
136
+ "@tailwindcss/vite": "^4.1.18",
136
137
  "@testing-library/jest-dom": "^6.0.0",
137
138
  "@testing-library/react": "^16.0.0",
138
139
  "@testing-library/user-event": "^14.0.0",
@@ -153,6 +154,7 @@
153
154
  "react": "^19.0.0",
154
155
  "react-dom": "^19.0.0",
155
156
  "size-limit": "^11.0.0",
157
+ "storybook": "^10.2.8",
156
158
  "tsup": "^8.0.0",
157
159
  "tsx": "^4.0.0",
158
160
  "typescript": "^5.6.0",
@@ -5,7 +5,7 @@
5
5
  * @see plan.md (Implementation Plan)
6
6
  */
7
7
 
8
- import type { Meta, StoryObj } from '@storybook/nextjs';
8
+ import type { Meta, StoryObj } from '@storybook/react-vite';
9
9
  import { useState, type Key } from 'react';
10
10
  import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from './Accordion';
11
11
  import { Plus, Minus, ChevronRight, Settings, User, Bell, Lock } from 'lucide-react';
@@ -0,0 +1,124 @@
1
+ /**
2
+ * AlertDialog Component - Storybook Stories
3
+ *
4
+ * Interactive examples and documentation for the AlertDialog component.
5
+ * Demonstrates confirmation dialogs for destructive or important actions.
6
+ */
7
+
8
+ import type { Meta, StoryObj } from '@storybook/react-vite';
9
+ import { fn } from 'storybook/test';
10
+ import { AlertDialog } from './AlertDialog';
11
+ import { Button } from '../Button';
12
+
13
+ const meta = {
14
+ title: 'Elements/AlertDialog',
15
+ component: AlertDialog,
16
+ parameters: {
17
+ layout: 'centered',
18
+ docs: {
19
+ description: {
20
+ component:
21
+ 'A strict confirmation dialog for destructive or important actions. Does not dismiss on backdrop click or Escape key. Fixed footer with cancel + action buttons. Built on Modal with role="alertdialog" for WCAG 2.2 AAA compliance.',
22
+ },
23
+ },
24
+ },
25
+ tags: ['autodocs'],
26
+ argTypes: {
27
+ variant: {
28
+ control: { type: 'select' },
29
+ options: ['default', 'destructive'],
30
+ },
31
+ size: {
32
+ control: { type: 'select' },
33
+ options: ['sm', 'md', 'lg'],
34
+ },
35
+ actionVariant: {
36
+ control: { type: 'select' },
37
+ options: ['default', 'destructive'],
38
+ },
39
+ },
40
+ } satisfies Meta<typeof AlertDialog>;
41
+
42
+ export default meta;
43
+ type Story = StoryObj<typeof meta>;
44
+
45
+ export const Default: Story = {
46
+ args: {
47
+ trigger: <Button variant="destructive">Delete Account</Button>,
48
+ title: 'Delete Account?',
49
+ description: 'This will permanently delete your account and all associated data. This action cannot be undone.',
50
+ actionLabel: 'Delete Account',
51
+ onAction: fn(),
52
+ },
53
+ };
54
+
55
+ export const DestructiveVariant: Story = {
56
+ args: {
57
+ trigger: <Button variant="destructive">Remove All</Button>,
58
+ title: 'Remove All Items?',
59
+ description: 'All items in your cart will be removed.',
60
+ variant: 'destructive',
61
+ actionLabel: 'Remove All',
62
+ onAction: fn(),
63
+ },
64
+ };
65
+
66
+ export const SmallSize: Story = {
67
+ args: {
68
+ trigger: <Button>Discard Changes</Button>,
69
+ title: 'Discard Changes?',
70
+ description: 'You have unsaved changes that will be lost.',
71
+ size: 'sm',
72
+ actionLabel: 'Discard',
73
+ onAction: fn(),
74
+ },
75
+ };
76
+
77
+ export const LargeSize: Story = {
78
+ args: {
79
+ trigger: <Button variant="destructive">Delete Project</Button>,
80
+ title: 'Delete Project?',
81
+ description: 'This will permanently delete the project "My Project" and all associated resources including files, deployments, and team access. This action cannot be undone.',
82
+ size: 'lg',
83
+ actionLabel: 'Delete Project',
84
+ onAction: fn(),
85
+ },
86
+ };
87
+
88
+ export const NonDestructiveAction: Story = {
89
+ args: {
90
+ trigger: <Button>Publish</Button>,
91
+ title: 'Publish to Production?',
92
+ description: 'This will deploy the current build to production. All users will immediately see the changes.',
93
+ actionLabel: 'Publish Now',
94
+ actionVariant: 'default',
95
+ onAction: fn(),
96
+ },
97
+ };
98
+
99
+ export const CustomLabels: Story = {
100
+ args: {
101
+ trigger: <Button variant="destructive">Leave Page</Button>,
102
+ title: 'Leave this page?',
103
+ description: 'Changes you made may not be saved.',
104
+ cancelLabel: 'Stay',
105
+ actionLabel: 'Leave',
106
+ onAction: fn(),
107
+ },
108
+ };
109
+
110
+ export const WithExtraContent: Story = {
111
+ render: () => (
112
+ <AlertDialog
113
+ trigger={<Button variant="destructive">Delete Team</Button>}
114
+ title="Delete Team?"
115
+ description="This will permanently delete the team and revoke access for all members."
116
+ actionLabel="Delete Team"
117
+ onAction={fn()}
118
+ >
119
+ <div className="my-4 rounded-md bg-[var(--muted)] p-3 text-sm">
120
+ <strong>Affected members:</strong> 12 users will lose access
121
+ </div>
122
+ </AlertDialog>
123
+ ),
124
+ };
@@ -6,7 +6,7 @@
6
6
  * @see plan.md (Implementation Plan)
7
7
  */
8
8
 
9
- import type { Meta, StoryObj } from '@storybook/nextjs';
9
+ import type { Meta, StoryObj } from '@storybook/react-vite';
10
10
  import { Avatar, AvatarGroup } from './index';
11
11
 
12
12
  const meta = {
@@ -6,7 +6,7 @@
6
6
  * @see plan.md for architecture details
7
7
  */
8
8
 
9
- import type { Meta, StoryObj } from '@storybook/nextjs';
9
+ import type { Meta, StoryObj } from '@storybook/react-vite';
10
10
  import { Badge } from './Badge';
11
11
  import { CheckCircle, X, AlertCircle, Star, Bell, Tag, User } from 'lucide-react';
12
12
 
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import type { ReactNode } from 'react';
9
- import type { Meta, StoryObj } from '@storybook/nextjs';
9
+ import type { Meta, StoryObj } from '@storybook/react-vite';
10
10
  import { Home, FolderOpen, FileText, Settings, Users, Package } from 'lucide-react';
11
11
  import { Breadcrumbs } from './Breadcrumbs';
12
12
  import type { BreadcrumbItemData } from './Breadcrumbs.types';
@@ -6,7 +6,7 @@
6
6
  * @see spec.md FR-045 (Storybook stories requirement)
7
7
  */
8
8
 
9
- import type { Meta, StoryObj } from '@storybook/nextjs';
9
+ import type { Meta, StoryObj } from '@storybook/react-vite';
10
10
  import { Button } from './Button';
11
11
  import { Trash2, Save, Download, Settings } from 'lucide-react';
12
12
 
@@ -6,7 +6,7 @@
6
6
  * @see spec.md FR-045 (Storybook stories requirement)
7
7
  */
8
8
 
9
- import type { Meta, StoryObj } from '@storybook/nextjs';
9
+ import type { Meta, StoryObj } from '@storybook/react-vite';
10
10
  import {
11
11
  Bold,
12
12
  Italic,
@@ -9,7 +9,7 @@
9
9
  */
10
10
 
11
11
  import { useState, type ReactElement } from 'react';
12
- import type { Meta, StoryObj } from '@storybook/nextjs';
12
+ import type { Meta, StoryObj } from '@storybook/react-vite';
13
13
  import { HelpCircle, Info, X, ArrowLeft } from 'lucide-react';
14
14
  import {
15
15
  Card,
@@ -3,7 +3,7 @@
3
3
  * Storybook stories for Carousel component demonstrating all features
4
4
  */
5
5
 
6
- import type { Meta, StoryObj } from '@storybook/nextjs';
6
+ import type { Meta, StoryObj } from '@storybook/react-vite';
7
7
  import { Carousel } from './Carousel';
8
8
  import { useState } from 'react';
9
9
 
@@ -9,7 +9,7 @@
9
9
  */
10
10
 
11
11
  import { type ReactElement } from 'react';
12
- import type { Meta, StoryObj } from '@storybook/nextjs';
12
+ import type { Meta, StoryObj } from '@storybook/react-vite';
13
13
  import { Chart } from './Chart';
14
14
  import type { DataSeries } from './Chart.types';
15
15
 
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import { useState } from 'react';
9
- import type { Meta, StoryObj } from '@storybook/nextjs';
9
+ import type { Meta, StoryObj } from '@storybook/react-vite';
10
10
  import { Checkbox } from './Checkbox';
11
11
 
12
12
  const meta = {
@@ -8,7 +8,7 @@
8
8
  */
9
9
 
10
10
  import { useState } from 'react';
11
- import type { Meta, StoryObj } from '@storybook/nextjs';
11
+ import type { Meta, StoryObj } from '@storybook/react-vite';
12
12
  import { CheckboxGroup, Checkbox, CheckmarkIcon, TimesIcon } from './CheckboxGroup';
13
13
 
14
14
  const meta = {
@@ -738,7 +738,7 @@ export const PermissionsSettings: Story = {
738
738
  </Checkbox>
739
739
  <Checkbox value="delete" className="p-4">
740
740
  <div className="flex w-full items-start gap-4">
741
- <div className="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-[var(--destructive)]/10 text-xl">
741
+ <div className="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-[var(--destructive-background)]/10 text-xl">
742
742
  🗑️
743
743
  </div>
744
744
  <div className="flex-1">
@@ -763,8 +763,8 @@ export const PermissionsSettings: Story = {
763
763
 
764
764
  export const DangerZone: Story = {
765
765
  render: () => (
766
- <div className="w-96 rounded-lg border border-[var(--destructive)] bg-[var(--background)] p-6">
767
- <h3 className="mb-4 text-lg font-semibold text-[var(--destructive)]">Danger Zone</h3>
766
+ <div className="w-96 rounded-lg border border-[var(--destructive-background)] bg-[var(--background)] p-6">
767
+ <h3 className="mb-4 text-lg font-semibold text-[var(--destructive-background)]">Danger Zone</h3>
768
768
  <CheckboxGroup
769
769
  variant="destructive"
770
770
  label="Delete account data"