@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,325 +1,3 @@
1
1
  "use client";
2
- 'use strict';
3
-
4
- var reactAriaComponents = require('react-aria-components');
5
- var classVarianceAuthority = require('class-variance-authority');
6
- var clsx = require('clsx');
7
- var tailwindMerge = require('tailwind-merge');
8
- var jsxRuntime = require('react/jsx-runtime');
9
- var zod = require('zod');
10
-
11
- // src/elements/Tooltip/Tooltip.tsx
12
- function cn(...inputs) {
13
- return tailwindMerge.twMerge(clsx.clsx(inputs));
14
- }
15
- var tooltipContentVariants = classVarianceAuthority.cva(
16
- // Base styles
17
- [
18
- "z-50 overflow-hidden rounded-md px-3 py-1.5 text-sm shadow-md",
19
- // Inverted colors for high contrast (7:1 ratio)
20
- "bg-[var(--content-foreground)] text-[var(--content-background)]",
21
- // Entry animation base
22
- "animate-in fade-in-0",
23
- // Exit animation
24
- "data-[exiting]:animate-out data-[exiting]:fade-out-0"
25
- ],
26
- {
27
- variants: {
28
- side: {
29
- top: [
30
- "motion-safe:slide-in-from-bottom-2",
31
- "data-[exiting]:motion-safe:slide-out-to-bottom-2"
32
- ],
33
- bottom: [
34
- "motion-safe:slide-in-from-top-2",
35
- "data-[exiting]:motion-safe:slide-out-to-top-2"
36
- ],
37
- left: [
38
- "motion-safe:slide-in-from-right-2",
39
- "data-[exiting]:motion-safe:slide-out-to-right-2"
40
- ],
41
- right: [
42
- "motion-safe:slide-in-from-left-2",
43
- "data-[exiting]:motion-safe:slide-out-to-left-2"
44
- ]
45
- }
46
- },
47
- defaultVariants: {
48
- side: "top"
49
- }
50
- }
51
- );
52
- var tooltipArrowVariants = classVarianceAuthority.cva(
53
- // Base arrow styles
54
- "fill-[var(--content-foreground)]",
55
- {
56
- variants: {
57
- side: {
58
- top: "rotate-180",
59
- bottom: "rotate-0",
60
- left: "rotate-90",
61
- right: "-rotate-90"
62
- }
63
- },
64
- defaultVariants: {
65
- side: "top"
66
- }
67
- }
68
- );
69
- function placementToSide(placement) {
70
- if (!placement) return "top";
71
- const basePlacement = placement.split(" ")[0];
72
- if (basePlacement === "top" || basePlacement === "bottom" || basePlacement === "left" || basePlacement === "right") {
73
- return basePlacement;
74
- }
75
- return "top";
76
- }
77
- function TooltipRoot({
78
- children,
79
- delay = 700,
80
- closeDelay = 300,
81
- trigger = "hover",
82
- isOpen,
83
- defaultOpen = false,
84
- onOpenChange,
85
- isDisabled = false
86
- }) {
87
- const effectiveDelay = trigger === "focus" ? 99999999 : delay;
88
- return /* @__PURE__ */ jsxRuntime.jsx(
89
- reactAriaComponents.TooltipTrigger,
90
- {
91
- delay: effectiveDelay,
92
- closeDelay,
93
- isOpen,
94
- defaultOpen,
95
- onOpenChange,
96
- isDisabled,
97
- children
98
- }
99
- );
100
- }
101
- TooltipRoot.displayName = "Tooltip";
102
- function TooltipTriggerComponent({
103
- children
104
- }) {
105
- return children;
106
- }
107
- TooltipTriggerComponent.displayName = "TooltipTrigger";
108
- function TooltipContentComponent({
109
- children,
110
- side = "top",
111
- sideOffset = 4,
112
- alignOffset = 0,
113
- shouldFlip = true,
114
- showArrow = false,
115
- arrowSize = 8,
116
- className,
117
- ...restProps
118
- }) {
119
- return /* @__PURE__ */ jsxRuntime.jsx(
120
- reactAriaComponents.Tooltip,
121
- {
122
- placement: side,
123
- offset: sideOffset,
124
- crossOffset: alignOffset,
125
- shouldFlip,
126
- ...restProps,
127
- className: reactAriaComponents.composeRenderProps(className, (className2, renderProps) => {
128
- const actualSide = placementToSide(renderProps.placement);
129
- return cn(
130
- tooltipContentVariants({ side: actualSide }),
131
- className2
132
- );
133
- }),
134
- children: (renderProps) => {
135
- const actualSide = placementToSide(renderProps.placement);
136
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
137
- showArrow && /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.OverlayArrow, { children: /* @__PURE__ */ jsxRuntime.jsx(
138
- "svg",
139
- {
140
- width: arrowSize,
141
- height: arrowSize,
142
- viewBox: "0 0 8 8",
143
- className: tooltipArrowVariants({ side: actualSide }),
144
- "data-testid": "tooltip-arrow",
145
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0 0 L4 4 L8 0" })
146
- }
147
- ) }),
148
- children
149
- ] });
150
- }
151
- }
152
- );
153
- }
154
- TooltipContentComponent.displayName = "TooltipContent";
155
- function TooltipArrowComponent({
156
- size = 8,
157
- className,
158
- "data-testid": dataTestId = "tooltip-arrow",
159
- ...restProps
160
- }) {
161
- return /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.OverlayArrow, { children: ({ placement }) => {
162
- const side = placementToSide(placement);
163
- return /* @__PURE__ */ jsxRuntime.jsx(
164
- "svg",
165
- {
166
- width: size,
167
- height: size,
168
- viewBox: "0 0 8 8",
169
- className: cn(tooltipArrowVariants({ side }), className),
170
- "data-testid": dataTestId,
171
- ...restProps,
172
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0 0 L4 4 L8 0" })
173
- }
174
- );
175
- } });
176
- }
177
- TooltipArrowComponent.displayName = "TooltipArrow";
178
- var Tooltip = TooltipRoot;
179
- var TooltipTrigger = TooltipTriggerComponent;
180
- var TooltipContent = TooltipContentComponent;
181
- var TooltipArrow = TooltipArrowComponent;
182
- var BaseComponentPropsSchema = zod.z.object({
183
- // Styling
184
- className: zod.z.string().optional(),
185
- // React
186
- children: zod.z.any().optional(),
187
- // ReactNode not directly supported by Zod
188
- id: zod.z.string().optional(),
189
- // Accessibility (WCAG 2.2 AA requirements)
190
- "aria-label": zod.z.string().optional(),
191
- "aria-labelledby": zod.z.string().optional(),
192
- "aria-describedby": zod.z.string().optional(),
193
- "aria-live": zod.z.enum(["off", "polite", "assertive"]).optional(),
194
- "aria-hidden": zod.z.boolean().optional(),
195
- // Testing & Development
196
- "data-testid": zod.z.string().optional()
197
- });
198
-
199
- // src/elements/Tooltip/Tooltip.types.ts
200
- var TooltipSideSchema = zod.z.enum(["top", "bottom", "left", "right"]);
201
- var TooltipTriggerModeSchema = zod.z.enum(["hover", "focus"]);
202
- var TooltipPropsSchema = BaseComponentPropsSchema.extend({
203
- /**
204
- * Show delay in milliseconds
205
- * Time to wait before showing tooltip on hover
206
- * @default 700
207
- */
208
- delay: zod.z.number().min(0).optional().default(700),
209
- /**
210
- * Hide delay in milliseconds
211
- * Time to wait before hiding tooltip after mouse leave
212
- * @default 300
213
- */
214
- closeDelay: zod.z.number().min(0).optional().default(300),
215
- /**
216
- * Trigger mode
217
- * - 'hover': Show on hover and focus (default)
218
- * - 'focus': Show only on keyboard focus (no hover)
219
- * @default 'hover'
220
- */
221
- trigger: TooltipTriggerModeSchema.optional().default("hover"),
222
- /**
223
- * Controlled open state
224
- * When provided, tooltip becomes controlled
225
- */
226
- isOpen: zod.z.boolean().optional(),
227
- /**
228
- * Default open state for uncontrolled mode
229
- * @default false
230
- */
231
- defaultOpen: zod.z.boolean().optional().default(false),
232
- /**
233
- * Callback when open state changes
234
- * Called with new isOpen value
235
- */
236
- onOpenChange: zod.z.custom().optional(),
237
- /**
238
- * Disable tooltip without affecting trigger element
239
- * @default false
240
- */
241
- isDisabled: zod.z.boolean().optional().default(false),
242
- /**
243
- * Children must include TooltipTrigger and TooltipContent
244
- */
245
- children: zod.z.custom()
246
- });
247
- var TooltipTriggerPropsSchema = BaseComponentPropsSchema.extend({
248
- /**
249
- * Render as child element instead of wrapping
250
- * When true, merges props into the child element
251
- * @default false
252
- */
253
- asChild: zod.z.boolean().optional().default(false),
254
- /**
255
- * Single child element that triggers the tooltip
256
- * Must be focusable for keyboard accessibility
257
- */
258
- children: zod.z.custom()
259
- });
260
- var TooltipContentPropsSchema = BaseComponentPropsSchema.extend({
261
- /**
262
- * Placement relative to trigger element
263
- * @default 'top'
264
- */
265
- side: TooltipSideSchema.optional().default("top"),
266
- /**
267
- * Offset from trigger in pixels (main axis)
268
- * @default 4
269
- */
270
- sideOffset: zod.z.number().optional().default(4),
271
- /**
272
- * Cross-axis offset in pixels
273
- * @default 0
274
- */
275
- alignOffset: zod.z.number().optional().default(0),
276
- /**
277
- * Automatically flip placement when constrained by viewport
278
- * @default true
279
- */
280
- shouldFlip: zod.z.boolean().optional().default(true),
281
- /**
282
- * Show arrow pointing to trigger element
283
- * @default false
284
- */
285
- showArrow: zod.z.boolean().optional().default(false),
286
- /**
287
- * Arrow size in pixels
288
- * @default 8
289
- */
290
- arrowSize: zod.z.number().min(0).optional().default(8),
291
- /**
292
- * Custom className for styling
293
- */
294
- className: zod.z.string().optional(),
295
- /**
296
- * Tooltip content (typically text)
297
- */
298
- children: zod.z.custom()
299
- });
300
- var TooltipArrowPropsSchema = zod.z.object({
301
- /**
302
- * Arrow size in pixels
303
- * @default 8
304
- */
305
- size: zod.z.number().min(0).optional().default(8),
306
- /**
307
- * Custom className for styling
308
- */
309
- className: zod.z.string().optional()
310
- });
311
-
312
- exports.Tooltip = Tooltip;
313
- exports.TooltipArrow = TooltipArrow;
314
- exports.TooltipArrowPropsSchema = TooltipArrowPropsSchema;
315
- exports.TooltipContent = TooltipContent;
316
- exports.TooltipContentPropsSchema = TooltipContentPropsSchema;
317
- exports.TooltipPropsSchema = TooltipPropsSchema;
318
- exports.TooltipSideSchema = TooltipSideSchema;
319
- exports.TooltipTrigger = TooltipTrigger;
320
- exports.TooltipTriggerModeSchema = TooltipTriggerModeSchema;
321
- exports.TooltipTriggerPropsSchema = TooltipTriggerPropsSchema;
322
- exports.tooltipArrowVariants = tooltipArrowVariants;
323
- exports.tooltipContentVariants = tooltipContentVariants;
324
- //# sourceMappingURL=index.js.map
2
+ 'use strict';var reactAriaComponents=require('react-aria-components'),classVarianceAuthority=require('class-variance-authority'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime'),zod=require('zod');function T(...t){return tailwindMerge.twMerge(clsx.clsx(t))}var P=classVarianceAuthority.cva(["z-50 overflow-hidden rounded-md px-3 py-1.5 text-sm shadow-md","bg-[var(--content-foreground)] text-[var(--content-background)]","animate-in fade-in-0","data-[exiting]:animate-out data-[exiting]:fade-out-0"],{variants:{side:{top:["motion-safe:slide-in-from-bottom-2","data-[exiting]:motion-safe:slide-out-to-bottom-2"],bottom:["motion-safe:slide-in-from-top-2","data-[exiting]:motion-safe:slide-out-to-top-2"],left:["motion-safe:slide-in-from-right-2","data-[exiting]:motion-safe:slide-out-to-right-2"],right:["motion-safe:slide-in-from-left-2","data-[exiting]:motion-safe:slide-out-to-left-2"]}},defaultVariants:{side:"top"}}),u=classVarianceAuthority.cva("fill-[var(--content-foreground)]",{variants:{side:{top:"rotate-180",bottom:"rotate-0",left:"rotate-90",right:"-rotate-90"}},defaultVariants:{side:"top"}});function g(t){if(!t)return "top";let e=t.split(" ")[0];return e==="top"||e==="bottom"||e==="left"||e==="right"?e:"top"}function b({children:t,delay:e=700,closeDelay:a=300,trigger:p="hover",isOpen:n,defaultOpen:l=false,onOpenChange:s,isDisabled:m=false}){return jsxRuntime.jsx(reactAriaComponents.TooltipTrigger,{delay:p==="focus"?99999999:e,closeDelay:a,isOpen:n,defaultOpen:l,onOpenChange:s,isDisabled:m,children:t})}b.displayName="Tooltip";function S({children:t}){return t}S.displayName="TooltipTrigger";function w({children:t,side:e="top",sideOffset:a=4,alignOffset:p=0,shouldFlip:n=true,showArrow:l=false,arrowSize:s=8,className:m,...h}){return jsxRuntime.jsx(reactAriaComponents.Tooltip,{placement:e,offset:a,crossOffset:p,shouldFlip:n,...h,className:reactAriaComponents.composeRenderProps(m,(f,c)=>{let N=g(c.placement);return T(P({side:N}),f)}),children:f=>{let c=g(f.placement);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[l&&jsxRuntime.jsx(reactAriaComponents.OverlayArrow,{children:jsxRuntime.jsx("svg",{width:s,height:s,viewBox:"0 0 8 8",className:u({side:c}),"data-testid":"tooltip-arrow",children:jsxRuntime.jsx("path",{d:"M0 0 L4 4 L8 0"})})}),t]})}})}w.displayName="TooltipContent";function C({size:t=8,className:e,"data-testid":a="tooltip-arrow",...p}){return jsxRuntime.jsx(reactAriaComponents.OverlayArrow,{children:({placement:n})=>{let l=g(n);return jsxRuntime.jsx("svg",{width:t,height:t,viewBox:"0 0 8 8",className:T(u({side:l}),e),"data-testid":a,...p,children:jsxRuntime.jsx("path",{d:"M0 0 L4 4 L8 0"})})}})}C.displayName="TooltipArrow";var B=b,D=S,E=w,L=C;var d=zod.z.object({className:zod.z.string().optional(),children:zod.z.any().optional(),id:zod.z.string().optional(),"aria-label":zod.z.string().optional(),"aria-labelledby":zod.z.string().optional(),"aria-describedby":zod.z.string().optional(),"aria-live":zod.z.enum(["off","polite","assertive"]).optional(),"aria-hidden":zod.z.boolean().optional(),"data-testid":zod.z.string().optional()});var v=zod.z.enum(["top","bottom","left","right"]),A=zod.z.enum(["hover","focus"]),k=d.extend({delay:zod.z.number().min(0).optional().default(700),closeDelay:zod.z.number().min(0).optional().default(300),trigger:A.optional().default("hover"),isOpen:zod.z.boolean().optional(),defaultOpen:zod.z.boolean().optional().default(false),onOpenChange:zod.z.custom().optional(),isDisabled:zod.z.boolean().optional().default(false),children:zod.z.custom()}),q=d.extend({asChild:zod.z.boolean().optional().default(false),children:zod.z.custom()}),G=d.extend({side:v.optional().default("top"),sideOffset:zod.z.number().optional().default(4),alignOffset:zod.z.number().optional().default(0),shouldFlip:zod.z.boolean().optional().default(true),showArrow:zod.z.boolean().optional().default(false),arrowSize:zod.z.number().min(0).optional().default(8),className:zod.z.string().optional(),children:zod.z.custom()}),H=zod.z.object({size:zod.z.number().min(0).optional().default(8),className:zod.z.string().optional()});exports.Tooltip=B;exports.TooltipArrow=L;exports.TooltipArrowPropsSchema=H;exports.TooltipContent=E;exports.TooltipContentPropsSchema=G;exports.TooltipPropsSchema=k;exports.TooltipSideSchema=v;exports.TooltipTrigger=D;exports.TooltipTriggerModeSchema=A;exports.TooltipTriggerPropsSchema=q;exports.tooltipArrowVariants=u;exports.tooltipContentVariants=P;//# sourceMappingURL=index.js.map
325
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/cn.ts","../../../src/elements/Tooltip/Tooltip.tsx","../../../src/schemas/BaseComponentProps.ts","../../../src/elements/Tooltip/Tooltip.types.ts"],"names":["twMerge","clsx","cva","jsx","AriaTooltipTrigger","AriaTooltip","composeRenderProps","className","jsxs","Fragment","OverlayArrow","z"],"mappings":"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","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","\"use client\";\n\n/**\n * Tooltip Component - Implementation\n *\n * Accessible tooltip component combining React Aria primitives with ShadCN styling.\n * Follows Themis library patterns with compound component structure.\n *\n * @see plan.md (Implementation plan)\n * @see Tooltip.types.ts (Zod schemas)\n * @see tooltip-prd.md (Full requirements)\n */\n\nimport { type ReactElement } from 'react';\nimport {\n TooltipTrigger as AriaTooltipTrigger,\n Tooltip as AriaTooltip,\n OverlayArrow,\n composeRenderProps,\n} from 'react-aria-components';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport type {\n TooltipProps,\n TooltipTriggerProps,\n TooltipContentProps,\n TooltipArrowProps,\n TooltipSide,\n} from './Tooltip.types';\n\n/**\n * CVA Variants for TooltipContent\n *\n * Placement-based animations and high-contrast inverted colors.\n *\n * @see plan.md (CVA Variant Structure)\n * @see tooltip-prd.md US-2 (Configurable Placement)\n */\nexport const tooltipContentVariants = cva(\n // Base styles\n [\n \"z-50 overflow-hidden rounded-md px-3 py-1.5 text-sm shadow-md\",\n // Inverted colors for high contrast (7:1 ratio)\n \"bg-[var(--content-foreground)] text-[var(--content-background)]\",\n // Entry animation base\n \"animate-in fade-in-0\",\n // Exit animation\n \"data-[exiting]:animate-out data-[exiting]:fade-out-0\",\n ],\n {\n variants: {\n side: {\n top: [\n \"motion-safe:slide-in-from-bottom-2\",\n \"data-[exiting]:motion-safe:slide-out-to-bottom-2\",\n ],\n bottom: [\n \"motion-safe:slide-in-from-top-2\",\n \"data-[exiting]:motion-safe:slide-out-to-top-2\",\n ],\n left: [\n \"motion-safe:slide-in-from-right-2\",\n \"data-[exiting]:motion-safe:slide-out-to-right-2\",\n ],\n right: [\n \"motion-safe:slide-in-from-left-2\",\n \"data-[exiting]:motion-safe:slide-out-to-left-2\",\n ],\n },\n },\n defaultVariants: {\n side: \"top\",\n },\n }\n);\n\n/**\n * CVA Variants for TooltipArrow\n *\n * Rotation based on placement for correct arrow pointing direction.\n *\n * @see tooltip-prd.md US-2 (Arrow Indicator)\n */\nexport const tooltipArrowVariants = cva(\n // Base arrow styles\n \"fill-[var(--content-foreground)]\",\n {\n variants: {\n side: {\n top: \"rotate-180\",\n bottom: \"rotate-0\",\n left: \"rotate-90\",\n right: \"-rotate-90\",\n },\n },\n defaultVariants: {\n side: \"top\",\n },\n }\n);\n\n/**\n * Map React Aria placement to our side prop\n * React Aria uses placement prop with values like 'top', 'bottom', etc.\n * PlacementAxis can be 'top' | 'bottom' | 'left' | 'right' | null\n */\nfunction placementToSide(placement: string | null | undefined): TooltipSide {\n if (!placement) return 'top';\n // Extract the base placement (e.g., 'top start' -> 'top')\n const basePlacement = placement.split(' ')[0];\n if (basePlacement === 'top' || basePlacement === 'bottom' ||\n basePlacement === 'left' || basePlacement === 'right') {\n return basePlacement;\n }\n return 'top';\n}\n\n/**\n * Tooltip Root Component\n *\n * Manages tooltip open/close state, delays, and trigger behavior.\n * Wraps React Aria's TooltipTrigger with delay configuration.\n *\n * @see tooltip-prd.md US-1 (Basic Usage)\n * @see tooltip-prd.md US-3 (Delay Configuration)\n * @see tooltip-prd.md US-7 (Controlled State)\n */\nfunction TooltipRoot({\n children,\n delay = 700,\n closeDelay = 300,\n trigger = 'hover',\n isOpen,\n defaultOpen = false,\n onOpenChange,\n isDisabled = false,\n}: TooltipProps): ReactElement {\n // React Aria doesn't have a direct trigger mode prop\n // 'focus' mode is achieved by setting delay to a very high value\n // and relying on focus to trigger immediately\n const effectiveDelay = trigger === 'focus' ? 99999999 : delay;\n\n return (\n <AriaTooltipTrigger\n delay={effectiveDelay}\n closeDelay={closeDelay}\n isOpen={isOpen}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n isDisabled={isDisabled}\n >\n {children}\n </AriaTooltipTrigger>\n );\n}\n\nTooltipRoot.displayName = 'Tooltip';\n\n/**\n * TooltipTrigger Component\n *\n * Wrapper for the element that triggers the tooltip.\n * The child element must be focusable (or wrapped with Focusable).\n *\n * React Aria's TooltipTrigger automatically applies:\n * - aria-describedby linking to tooltip\n * - Hover and focus event handlers\n *\n * @see tooltip-prd.md US-5 (Non-Button Triggers)\n */\nfunction TooltipTriggerComponent({\n children,\n}: TooltipTriggerProps): ReactElement {\n // React Aria's TooltipTrigger expects the trigger element as a direct child\n // We pass through the child element directly\n return children as ReactElement;\n}\n\nTooltipTriggerComponent.displayName = 'TooltipTrigger';\n\n/**\n * TooltipContent Component\n *\n * The actual tooltip overlay that appears.\n * Supports placement, offset, and optional arrow.\n *\n * @see tooltip-prd.md US-2 (Placement and Arrow)\n * @see tooltip-prd.md Technical Implementation Details\n */\nfunction TooltipContentComponent({\n children,\n side = 'top',\n sideOffset = 4,\n alignOffset = 0,\n shouldFlip = true,\n showArrow = false,\n arrowSize = 8,\n className,\n ...restProps\n}: TooltipContentProps & { 'data-testid'?: string }): ReactElement {\n return (\n <AriaTooltip\n placement={side}\n offset={sideOffset}\n crossOffset={alignOffset}\n shouldFlip={shouldFlip}\n {...restProps}\n className={composeRenderProps(className, (className, renderProps) => {\n // Get actual placement from render props for animation direction\n const actualSide = placementToSide(renderProps.placement);\n return cn(\n tooltipContentVariants({ side: actualSide }),\n className\n );\n })}\n >\n {(renderProps) => {\n const actualSide = placementToSide(renderProps.placement);\n return (\n <>\n {showArrow && (\n <OverlayArrow>\n <svg\n width={arrowSize}\n height={arrowSize}\n viewBox=\"0 0 8 8\"\n className={tooltipArrowVariants({ side: actualSide })}\n data-testid=\"tooltip-arrow\"\n >\n <path d=\"M0 0 L4 4 L8 0\" />\n </svg>\n </OverlayArrow>\n )}\n {children}\n </>\n );\n }}\n </AriaTooltip>\n );\n}\n\nTooltipContentComponent.displayName = 'TooltipContent';\n\n/**\n * TooltipArrow Component\n *\n * Optional arrow component for custom arrow rendering.\n * Automatically positioned based on tooltip placement.\n *\n * Note: This is an alternative to using showArrow prop on TooltipContent.\n * Use this when you need custom arrow styling or rendering.\n *\n * @see tooltip-prd.md US-2 (Arrow Indicator)\n */\nfunction TooltipArrowComponent({\n size = 8,\n className,\n 'data-testid': dataTestId = 'tooltip-arrow',\n ...restProps\n}: TooltipArrowProps & { 'data-testid'?: string }): ReactElement {\n // This component is designed to be used inside TooltipContent\n // The actual positioning is handled by OverlayArrow from React Aria\n return (\n <OverlayArrow>\n {({ placement }) => {\n const side = placementToSide(placement);\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 8 8\"\n className={cn(tooltipArrowVariants({ side }), className)}\n data-testid={dataTestId}\n {...restProps}\n >\n <path d=\"M0 0 L4 4 L8 0\" />\n </svg>\n );\n }}\n </OverlayArrow>\n );\n}\n\nTooltipArrowComponent.displayName = 'TooltipArrow';\n\n/**\n * Export all components\n *\n * Following Themis pattern - export individual components\n * No Object.assign compound pattern for Tooltip since React Aria\n * expects specific component hierarchy.\n */\nexport const Tooltip = TooltipRoot;\nexport const TooltipTrigger = TooltipTriggerComponent;\nexport const TooltipContent = TooltipContentComponent;\nexport const TooltipArrow = TooltipArrowComponent;\n","import { z } from 'zod';\n\n/**\n * Base props schema for all Themis components\n * Ensures consistent accessibility and styling APIs across the library\n *\n * @see spec.md FR-009 to FR-014 (Accessibility Requirements)\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AA minimum)\n */\nexport const BaseComponentPropsSchema = z.object({\n // Styling\n className: z.string().optional(),\n\n // React\n children: z.any().optional(), // ReactNode not directly supported by Zod\n id: z.string().optional(),\n\n // Accessibility (WCAG 2.2 AA requirements)\n 'aria-label': z.string().optional(),\n 'aria-labelledby': z.string().optional(),\n 'aria-describedby': z.string().optional(),\n 'aria-live': z.enum(['off', 'polite', 'assertive']).optional(),\n 'aria-hidden': z.boolean().optional(),\n\n // Testing & Development\n 'data-testid': z.string().optional(),\n});\n\nexport type BaseComponentProps = z.infer<typeof BaseComponentPropsSchema>;\n","import { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\nimport type { ReactNode } from 'react';\n\n/**\n * Tooltip placement/side options\n *\n * @see tooltip-prd.md US-2 (Configurable Placement)\n */\nexport const TooltipSideSchema = z.enum(['top', 'bottom', 'left', 'right']);\nexport type TooltipSide = z.infer<typeof TooltipSideSchema>;\n\n/**\n * Tooltip trigger mode options\n *\n * @see tooltip-prd.md US-4 (Keyboard-only Mode)\n */\nexport const TooltipTriggerModeSchema = z.enum(['hover', 'focus']);\nexport type TooltipTriggerMode = z.infer<typeof TooltipTriggerModeSchema>;\n\n/**\n * Tooltip root component props schema\n *\n * Manages tooltip open/close state, delays, and trigger behavior.\n * Wraps React Aria's TooltipTrigger with delay configuration.\n *\n * @see tooltip-prd.md US-1 (Basic Usage)\n * @see tooltip-prd.md US-3 (Delay Configuration)\n * @see tooltip-prd.md US-7 (Controlled State)\n */\nexport const TooltipPropsSchema = BaseComponentPropsSchema.extend({\n /**\n * Show delay in milliseconds\n * Time to wait before showing tooltip on hover\n * @default 700\n */\n delay: z.number().min(0).optional().default(700),\n\n /**\n * Hide delay in milliseconds\n * Time to wait before hiding tooltip after mouse leave\n * @default 300\n */\n closeDelay: z.number().min(0).optional().default(300),\n\n /**\n * Trigger mode\n * - 'hover': Show on hover and focus (default)\n * - 'focus': Show only on keyboard focus (no hover)\n * @default 'hover'\n */\n trigger: TooltipTriggerModeSchema.optional().default('hover'),\n\n /**\n * Controlled open state\n * When provided, tooltip becomes controlled\n */\n isOpen: z.boolean().optional(),\n\n /**\n * Default open state for uncontrolled mode\n * @default false\n */\n defaultOpen: z.boolean().optional().default(false),\n\n /**\n * Callback when open state changes\n * Called with new isOpen value\n */\n onOpenChange: z.custom<(isOpen: boolean) => void>().optional(),\n\n /**\n * Disable tooltip without affecting trigger element\n * @default false\n */\n isDisabled: z.boolean().optional().default(false),\n\n /**\n * Children must include TooltipTrigger and TooltipContent\n */\n children: z.custom<ReactNode>(),\n});\n\nexport type TooltipProps = z.infer<typeof TooltipPropsSchema>;\n\n/**\n * TooltipTrigger props schema\n *\n * Wrapper for the element that triggers the tooltip.\n * The child element must be focusable (or wrapped with Focusable).\n *\n * @see tooltip-prd.md US-5 (Non-Button Triggers)\n */\nexport const TooltipTriggerPropsSchema = BaseComponentPropsSchema.extend({\n /**\n * Render as child element instead of wrapping\n * When true, merges props into the child element\n * @default false\n */\n asChild: z.boolean().optional().default(false),\n\n /**\n * Single child element that triggers the tooltip\n * Must be focusable for keyboard accessibility\n */\n children: z.custom<ReactNode>(),\n});\n\nexport type TooltipTriggerProps = z.infer<typeof TooltipTriggerPropsSchema>;\n\n/**\n * TooltipContent props schema\n *\n * The actual tooltip overlay that appears.\n * Supports placement, offset, and optional arrow.\n *\n * @see tooltip-prd.md US-2 (Placement and Arrow)\n * @see tooltip-prd.md Technical Implementation Details\n */\nexport const TooltipContentPropsSchema = BaseComponentPropsSchema.extend({\n /**\n * Placement relative to trigger element\n * @default 'top'\n */\n side: TooltipSideSchema.optional().default('top'),\n\n /**\n * Offset from trigger in pixels (main axis)\n * @default 4\n */\n sideOffset: z.number().optional().default(4),\n\n /**\n * Cross-axis offset in pixels\n * @default 0\n */\n alignOffset: z.number().optional().default(0),\n\n /**\n * Automatically flip placement when constrained by viewport\n * @default true\n */\n shouldFlip: z.boolean().optional().default(true),\n\n /**\n * Show arrow pointing to trigger element\n * @default false\n */\n showArrow: z.boolean().optional().default(false),\n\n /**\n * Arrow size in pixels\n * @default 8\n */\n arrowSize: z.number().min(0).optional().default(8),\n\n /**\n * Custom className for styling\n */\n className: z.string().optional(),\n\n /**\n * Tooltip content (typically text)\n */\n children: z.custom<ReactNode>(),\n});\n\nexport type TooltipContentProps = z.infer<typeof TooltipContentPropsSchema>;\n\n/**\n * TooltipArrow props schema\n *\n * Optional arrow component for custom arrow rendering.\n * Automatically positioned based on tooltip placement.\n *\n * @see tooltip-prd.md US-2 (Arrow Indicator)\n */\nexport const TooltipArrowPropsSchema = z.object({\n /**\n * Arrow size in pixels\n * @default 8\n */\n size: z.number().min(0).optional().default(8),\n\n /**\n * Custom className for styling\n */\n className: z.string().optional(),\n});\n\nexport type TooltipArrowProps = z.infer<typeof TooltipArrowPropsSchema>;\n"]}
1
+ {"version":3,"sources":["../../../src/utils/cn.ts","../../../src/elements/Tooltip/Tooltip.tsx","../../../src/schemas/BaseComponentProps.ts","../../../src/elements/Tooltip/Tooltip.types.ts"],"names":["cn","inputs","twMerge","clsx","tooltipContentVariants","cva","tooltipArrowVariants","placementToSide","placement","basePlacement","TooltipRoot","children","delay","closeDelay","trigger","isOpen","defaultOpen","onOpenChange","isDisabled","jsx","AriaTooltipTrigger","TooltipTriggerComponent","TooltipContentComponent","side","sideOffset","alignOffset","shouldFlip","showArrow","arrowSize","className","restProps","AriaTooltip","composeRenderProps","renderProps","actualSide","jsxs","Fragment","OverlayArrow","TooltipArrowComponent","size","dataTestId","Tooltip","TooltipTrigger","TooltipContent","TooltipArrow","BaseComponentPropsSchema","z","TooltipSideSchema","TooltipTriggerModeSchema","TooltipPropsSchema","TooltipTriggerPropsSchema","TooltipContentPropsSchema","TooltipArrowPropsSchema"],"mappings":"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","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","\"use client\";\n\n/**\n * Tooltip Component - Implementation\n *\n * Accessible tooltip component combining React Aria primitives with ShadCN styling.\n * Follows Themis library patterns with compound component structure.\n *\n * @see plan.md (Implementation plan)\n * @see Tooltip.types.ts (Zod schemas)\n * @see tooltip-prd.md (Full requirements)\n */\n\nimport { type ReactElement } from 'react';\nimport {\n TooltipTrigger as AriaTooltipTrigger,\n Tooltip as AriaTooltip,\n OverlayArrow,\n composeRenderProps,\n} from 'react-aria-components';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport type {\n TooltipProps,\n TooltipTriggerProps,\n TooltipContentProps,\n TooltipArrowProps,\n TooltipSide,\n} from './Tooltip.types';\n\n/**\n * CVA Variants for TooltipContent\n *\n * Placement-based animations and high-contrast inverted colors.\n *\n * @see plan.md (CVA Variant Structure)\n * @see tooltip-prd.md US-2 (Configurable Placement)\n */\nexport const tooltipContentVariants = cva(\n // Base styles\n [\n \"z-50 overflow-hidden rounded-md px-3 py-1.5 text-sm shadow-md\",\n // Inverted colors for high contrast (7:1 ratio)\n \"bg-[var(--content-foreground)] text-[var(--content-background)]\",\n // Entry animation base\n \"animate-in fade-in-0\",\n // Exit animation\n \"data-[exiting]:animate-out data-[exiting]:fade-out-0\",\n ],\n {\n variants: {\n side: {\n top: [\n \"motion-safe:slide-in-from-bottom-2\",\n \"data-[exiting]:motion-safe:slide-out-to-bottom-2\",\n ],\n bottom: [\n \"motion-safe:slide-in-from-top-2\",\n \"data-[exiting]:motion-safe:slide-out-to-top-2\",\n ],\n left: [\n \"motion-safe:slide-in-from-right-2\",\n \"data-[exiting]:motion-safe:slide-out-to-right-2\",\n ],\n right: [\n \"motion-safe:slide-in-from-left-2\",\n \"data-[exiting]:motion-safe:slide-out-to-left-2\",\n ],\n },\n },\n defaultVariants: {\n side: \"top\",\n },\n }\n);\n\n/**\n * CVA Variants for TooltipArrow\n *\n * Rotation based on placement for correct arrow pointing direction.\n *\n * @see tooltip-prd.md US-2 (Arrow Indicator)\n */\nexport const tooltipArrowVariants = cva(\n // Base arrow styles\n \"fill-[var(--content-foreground)]\",\n {\n variants: {\n side: {\n top: \"rotate-180\",\n bottom: \"rotate-0\",\n left: \"rotate-90\",\n right: \"-rotate-90\",\n },\n },\n defaultVariants: {\n side: \"top\",\n },\n }\n);\n\n/**\n * Map React Aria placement to our side prop\n * React Aria uses placement prop with values like 'top', 'bottom', etc.\n * PlacementAxis can be 'top' | 'bottom' | 'left' | 'right' | null\n */\nfunction placementToSide(placement: string | null | undefined): TooltipSide {\n if (!placement) return 'top';\n // Extract the base placement (e.g., 'top start' -> 'top')\n const basePlacement = placement.split(' ')[0];\n if (basePlacement === 'top' || basePlacement === 'bottom' ||\n basePlacement === 'left' || basePlacement === 'right') {\n return basePlacement;\n }\n return 'top';\n}\n\n/**\n * Tooltip Root Component\n *\n * Manages tooltip open/close state, delays, and trigger behavior.\n * Wraps React Aria's TooltipTrigger with delay configuration.\n *\n * @see tooltip-prd.md US-1 (Basic Usage)\n * @see tooltip-prd.md US-3 (Delay Configuration)\n * @see tooltip-prd.md US-7 (Controlled State)\n */\nfunction TooltipRoot({\n children,\n delay = 700,\n closeDelay = 300,\n trigger = 'hover',\n isOpen,\n defaultOpen = false,\n onOpenChange,\n isDisabled = false,\n}: TooltipProps): ReactElement {\n // React Aria doesn't have a direct trigger mode prop\n // 'focus' mode is achieved by setting delay to a very high value\n // and relying on focus to trigger immediately\n const effectiveDelay = trigger === 'focus' ? 99999999 : delay;\n\n return (\n <AriaTooltipTrigger\n delay={effectiveDelay}\n closeDelay={closeDelay}\n isOpen={isOpen}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n isDisabled={isDisabled}\n >\n {children}\n </AriaTooltipTrigger>\n );\n}\n\nTooltipRoot.displayName = 'Tooltip';\n\n/**\n * TooltipTrigger Component\n *\n * Wrapper for the element that triggers the tooltip.\n * The child element must be focusable (or wrapped with Focusable).\n *\n * React Aria's TooltipTrigger automatically applies:\n * - aria-describedby linking to tooltip\n * - Hover and focus event handlers\n *\n * @see tooltip-prd.md US-5 (Non-Button Triggers)\n */\nfunction TooltipTriggerComponent({\n children,\n}: TooltipTriggerProps): ReactElement {\n // React Aria's TooltipTrigger expects the trigger element as a direct child\n // We pass through the child element directly\n return children as ReactElement;\n}\n\nTooltipTriggerComponent.displayName = 'TooltipTrigger';\n\n/**\n * TooltipContent Component\n *\n * The actual tooltip overlay that appears.\n * Supports placement, offset, and optional arrow.\n *\n * @see tooltip-prd.md US-2 (Placement and Arrow)\n * @see tooltip-prd.md Technical Implementation Details\n */\nfunction TooltipContentComponent({\n children,\n side = 'top',\n sideOffset = 4,\n alignOffset = 0,\n shouldFlip = true,\n showArrow = false,\n arrowSize = 8,\n className,\n ...restProps\n}: TooltipContentProps & { 'data-testid'?: string }): ReactElement {\n return (\n <AriaTooltip\n placement={side}\n offset={sideOffset}\n crossOffset={alignOffset}\n shouldFlip={shouldFlip}\n {...restProps}\n className={composeRenderProps(className, (className, renderProps) => {\n // Get actual placement from render props for animation direction\n const actualSide = placementToSide(renderProps.placement);\n return cn(\n tooltipContentVariants({ side: actualSide }),\n className\n );\n })}\n >\n {(renderProps) => {\n const actualSide = placementToSide(renderProps.placement);\n return (\n <>\n {showArrow && (\n <OverlayArrow>\n <svg\n width={arrowSize}\n height={arrowSize}\n viewBox=\"0 0 8 8\"\n className={tooltipArrowVariants({ side: actualSide })}\n data-testid=\"tooltip-arrow\"\n >\n <path d=\"M0 0 L4 4 L8 0\" />\n </svg>\n </OverlayArrow>\n )}\n {children}\n </>\n );\n }}\n </AriaTooltip>\n );\n}\n\nTooltipContentComponent.displayName = 'TooltipContent';\n\n/**\n * TooltipArrow Component\n *\n * Optional arrow component for custom arrow rendering.\n * Automatically positioned based on tooltip placement.\n *\n * Note: This is an alternative to using showArrow prop on TooltipContent.\n * Use this when you need custom arrow styling or rendering.\n *\n * @see tooltip-prd.md US-2 (Arrow Indicator)\n */\nfunction TooltipArrowComponent({\n size = 8,\n className,\n 'data-testid': dataTestId = 'tooltip-arrow',\n ...restProps\n}: TooltipArrowProps & { 'data-testid'?: string }): ReactElement {\n // This component is designed to be used inside TooltipContent\n // The actual positioning is handled by OverlayArrow from React Aria\n return (\n <OverlayArrow>\n {({ placement }) => {\n const side = placementToSide(placement);\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 8 8\"\n className={cn(tooltipArrowVariants({ side }), className)}\n data-testid={dataTestId}\n {...restProps}\n >\n <path d=\"M0 0 L4 4 L8 0\" />\n </svg>\n );\n }}\n </OverlayArrow>\n );\n}\n\nTooltipArrowComponent.displayName = 'TooltipArrow';\n\n/**\n * Export all components\n *\n * Following Themis pattern - export individual components\n * No Object.assign compound pattern for Tooltip since React Aria\n * expects specific component hierarchy.\n */\nexport const Tooltip = TooltipRoot;\nexport const TooltipTrigger = TooltipTriggerComponent;\nexport const TooltipContent = TooltipContentComponent;\nexport const TooltipArrow = TooltipArrowComponent;\n","import { z } from 'zod';\n\n/**\n * Base props schema for all Themis components\n * Ensures consistent accessibility and styling APIs across the library\n *\n * @see spec.md FR-009 to FR-014 (Accessibility Requirements)\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AA minimum)\n */\nexport const BaseComponentPropsSchema = z.object({\n // Styling\n className: z.string().optional(),\n\n // React\n children: z.any().optional(), // ReactNode not directly supported by Zod\n id: z.string().optional(),\n\n // Accessibility (WCAG 2.2 AA requirements)\n 'aria-label': z.string().optional(),\n 'aria-labelledby': z.string().optional(),\n 'aria-describedby': z.string().optional(),\n 'aria-live': z.enum(['off', 'polite', 'assertive']).optional(),\n 'aria-hidden': z.boolean().optional(),\n\n // Testing & Development\n 'data-testid': z.string().optional(),\n});\n\nexport type BaseComponentProps = z.infer<typeof BaseComponentPropsSchema>;\n","import { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\nimport type { ReactNode } from 'react';\n\n/**\n * Tooltip placement/side options\n *\n * @see tooltip-prd.md US-2 (Configurable Placement)\n */\nexport const TooltipSideSchema = z.enum(['top', 'bottom', 'left', 'right']);\nexport type TooltipSide = z.infer<typeof TooltipSideSchema>;\n\n/**\n * Tooltip trigger mode options\n *\n * @see tooltip-prd.md US-4 (Keyboard-only Mode)\n */\nexport const TooltipTriggerModeSchema = z.enum(['hover', 'focus']);\nexport type TooltipTriggerMode = z.infer<typeof TooltipTriggerModeSchema>;\n\n/**\n * Tooltip root component props schema\n *\n * Manages tooltip open/close state, delays, and trigger behavior.\n * Wraps React Aria's TooltipTrigger with delay configuration.\n *\n * @see tooltip-prd.md US-1 (Basic Usage)\n * @see tooltip-prd.md US-3 (Delay Configuration)\n * @see tooltip-prd.md US-7 (Controlled State)\n */\nexport const TooltipPropsSchema = BaseComponentPropsSchema.extend({\n /**\n * Show delay in milliseconds\n * Time to wait before showing tooltip on hover\n * @default 700\n */\n delay: z.number().min(0).optional().default(700),\n\n /**\n * Hide delay in milliseconds\n * Time to wait before hiding tooltip after mouse leave\n * @default 300\n */\n closeDelay: z.number().min(0).optional().default(300),\n\n /**\n * Trigger mode\n * - 'hover': Show on hover and focus (default)\n * - 'focus': Show only on keyboard focus (no hover)\n * @default 'hover'\n */\n trigger: TooltipTriggerModeSchema.optional().default('hover'),\n\n /**\n * Controlled open state\n * When provided, tooltip becomes controlled\n */\n isOpen: z.boolean().optional(),\n\n /**\n * Default open state for uncontrolled mode\n * @default false\n */\n defaultOpen: z.boolean().optional().default(false),\n\n /**\n * Callback when open state changes\n * Called with new isOpen value\n */\n onOpenChange: z.custom<(isOpen: boolean) => void>().optional(),\n\n /**\n * Disable tooltip without affecting trigger element\n * @default false\n */\n isDisabled: z.boolean().optional().default(false),\n\n /**\n * Children must include TooltipTrigger and TooltipContent\n */\n children: z.custom<ReactNode>(),\n});\n\nexport type TooltipProps = z.infer<typeof TooltipPropsSchema>;\n\n/**\n * TooltipTrigger props schema\n *\n * Wrapper for the element that triggers the tooltip.\n * The child element must be focusable (or wrapped with Focusable).\n *\n * @see tooltip-prd.md US-5 (Non-Button Triggers)\n */\nexport const TooltipTriggerPropsSchema = BaseComponentPropsSchema.extend({\n /**\n * Render as child element instead of wrapping\n * When true, merges props into the child element\n * @default false\n */\n asChild: z.boolean().optional().default(false),\n\n /**\n * Single child element that triggers the tooltip\n * Must be focusable for keyboard accessibility\n */\n children: z.custom<ReactNode>(),\n});\n\nexport type TooltipTriggerProps = z.infer<typeof TooltipTriggerPropsSchema>;\n\n/**\n * TooltipContent props schema\n *\n * The actual tooltip overlay that appears.\n * Supports placement, offset, and optional arrow.\n *\n * @see tooltip-prd.md US-2 (Placement and Arrow)\n * @see tooltip-prd.md Technical Implementation Details\n */\nexport const TooltipContentPropsSchema = BaseComponentPropsSchema.extend({\n /**\n * Placement relative to trigger element\n * @default 'top'\n */\n side: TooltipSideSchema.optional().default('top'),\n\n /**\n * Offset from trigger in pixels (main axis)\n * @default 4\n */\n sideOffset: z.number().optional().default(4),\n\n /**\n * Cross-axis offset in pixels\n * @default 0\n */\n alignOffset: z.number().optional().default(0),\n\n /**\n * Automatically flip placement when constrained by viewport\n * @default true\n */\n shouldFlip: z.boolean().optional().default(true),\n\n /**\n * Show arrow pointing to trigger element\n * @default false\n */\n showArrow: z.boolean().optional().default(false),\n\n /**\n * Arrow size in pixels\n * @default 8\n */\n arrowSize: z.number().min(0).optional().default(8),\n\n /**\n * Custom className for styling\n */\n className: z.string().optional(),\n\n /**\n * Tooltip content (typically text)\n */\n children: z.custom<ReactNode>(),\n});\n\nexport type TooltipContentProps = z.infer<typeof TooltipContentPropsSchema>;\n\n/**\n * TooltipArrow props schema\n *\n * Optional arrow component for custom arrow rendering.\n * Automatically positioned based on tooltip placement.\n *\n * @see tooltip-prd.md US-2 (Arrow Indicator)\n */\nexport const TooltipArrowPropsSchema = z.object({\n /**\n * Arrow size in pixels\n * @default 8\n */\n size: z.number().min(0).optional().default(8),\n\n /**\n * Custom className for styling\n */\n className: z.string().optional(),\n});\n\nexport type TooltipArrowProps = z.infer<typeof TooltipArrowPropsSchema>;\n"]}