@tribepad/themis 1.0.11 → 1.0.12

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 (221) hide show
  1. package/dist/elements/Accordion/Accordion.types.d.ts +44 -4
  2. package/dist/elements/Accordion/Accordion.types.d.ts.map +1 -1
  3. package/dist/elements/Accordion/index.js +1 -1
  4. package/dist/elements/Accordion/index.js.map +1 -1
  5. package/dist/elements/Accordion/index.mjs +1 -1
  6. package/dist/elements/Accordion/index.mjs.map +1 -1
  7. package/dist/elements/AlertDialog/AlertDialog.types.d.ts +19 -2
  8. package/dist/elements/AlertDialog/AlertDialog.types.d.ts.map +1 -1
  9. package/dist/elements/AlertDialog/index.js +1 -1
  10. package/dist/elements/AlertDialog/index.js.map +1 -1
  11. package/dist/elements/AlertDialog/index.mjs +1 -1
  12. package/dist/elements/AlertDialog/index.mjs.map +1 -1
  13. package/dist/elements/Avatar/Avatar.d.ts +1 -21
  14. package/dist/elements/Avatar/Avatar.d.ts.map +1 -1
  15. package/dist/elements/Avatar/Avatar.types.d.ts +30 -11
  16. package/dist/elements/Avatar/Avatar.types.d.ts.map +1 -1
  17. package/dist/elements/Avatar/AvatarGroup.d.ts +1 -17
  18. package/dist/elements/Avatar/AvatarGroup.d.ts.map +1 -1
  19. package/dist/elements/Avatar/index.js +1 -1
  20. package/dist/elements/Avatar/index.js.map +1 -1
  21. package/dist/elements/Avatar/index.mjs +1 -1
  22. package/dist/elements/Avatar/index.mjs.map +1 -1
  23. package/dist/elements/Badge/Badge.types.d.ts +16 -9
  24. package/dist/elements/Badge/Badge.types.d.ts.map +1 -1
  25. package/dist/elements/Badge/index.js +1 -1
  26. package/dist/elements/Badge/index.js.map +1 -1
  27. package/dist/elements/Badge/index.mjs +1 -1
  28. package/dist/elements/Badge/index.mjs.map +1 -1
  29. package/dist/elements/Breadcrumbs/Breadcrumbs.d.ts +2 -34
  30. package/dist/elements/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  31. package/dist/elements/Breadcrumbs/Breadcrumbs.types.d.ts +25 -2
  32. package/dist/elements/Breadcrumbs/Breadcrumbs.types.d.ts.map +1 -1
  33. package/dist/elements/Breadcrumbs/index.js +1 -1
  34. package/dist/elements/Breadcrumbs/index.js.map +1 -1
  35. package/dist/elements/Breadcrumbs/index.mjs +1 -1
  36. package/dist/elements/Breadcrumbs/index.mjs.map +1 -1
  37. package/dist/elements/Button/Button.d.ts +1 -24
  38. package/dist/elements/Button/Button.d.ts.map +1 -1
  39. package/dist/elements/Button/Button.types.d.ts +28 -7
  40. package/dist/elements/Button/Button.types.d.ts.map +1 -1
  41. package/dist/elements/ButtonGroup/ButtonGroup.d.ts +3 -14
  42. package/dist/elements/ButtonGroup/ButtonGroup.d.ts.map +1 -1
  43. package/dist/elements/ButtonGroup/ButtonGroup.types.d.ts +14 -5
  44. package/dist/elements/ButtonGroup/ButtonGroup.types.d.ts.map +1 -1
  45. package/dist/elements/ButtonGroup/index.js +1 -1
  46. package/dist/elements/ButtonGroup/index.js.map +1 -1
  47. package/dist/elements/ButtonGroup/index.mjs +1 -1
  48. package/dist/elements/ButtonGroup/index.mjs.map +1 -1
  49. package/dist/elements/Carousel/Carousel.types.d.ts +26 -7
  50. package/dist/elements/Carousel/Carousel.types.d.ts.map +1 -1
  51. package/dist/elements/Chart/Chart.d.ts +2 -40
  52. package/dist/elements/Chart/Chart.d.ts.map +1 -1
  53. package/dist/elements/Chart/Chart.types.d.ts +25 -10
  54. package/dist/elements/Chart/Chart.types.d.ts.map +1 -1
  55. package/dist/elements/Chart/index.js +1 -1
  56. package/dist/elements/Chart/index.js.map +1 -1
  57. package/dist/elements/Chart/index.mjs +1 -1
  58. package/dist/elements/Chart/index.mjs.map +1 -1
  59. package/dist/elements/Checkbox/Checkbox.d.ts +1 -31
  60. package/dist/elements/Checkbox/Checkbox.d.ts.map +1 -1
  61. package/dist/elements/Checkbox/Checkbox.types.d.ts +33 -1
  62. package/dist/elements/Checkbox/Checkbox.types.d.ts.map +1 -1
  63. package/dist/elements/Checkbox/index.js +1 -1
  64. package/dist/elements/Checkbox/index.js.map +1 -1
  65. package/dist/elements/Checkbox/index.mjs +1 -1
  66. package/dist/elements/Checkbox/index.mjs.map +1 -1
  67. package/dist/elements/CheckboxGroup/CheckboxGroup.d.ts +1 -26
  68. package/dist/elements/CheckboxGroup/CheckboxGroup.d.ts.map +1 -1
  69. package/dist/elements/CheckboxGroup/CheckboxGroup.types.d.ts +48 -4
  70. package/dist/elements/CheckboxGroup/CheckboxGroup.types.d.ts.map +1 -1
  71. package/dist/elements/CheckboxGroup/index.js +1 -1
  72. package/dist/elements/CheckboxGroup/index.js.map +1 -1
  73. package/dist/elements/CheckboxGroup/index.mjs +1 -1
  74. package/dist/elements/CheckboxGroup/index.mjs.map +1 -1
  75. package/dist/elements/Combobox/Combobox.d.ts +1 -30
  76. package/dist/elements/Combobox/Combobox.d.ts.map +1 -1
  77. package/dist/elements/Combobox/Combobox.types.d.ts +38 -4
  78. package/dist/elements/Combobox/Combobox.types.d.ts.map +1 -1
  79. package/dist/elements/Combobox/index.js +1 -1
  80. package/dist/elements/Combobox/index.js.map +1 -1
  81. package/dist/elements/Combobox/index.mjs +1 -1
  82. package/dist/elements/Combobox/index.mjs.map +1 -1
  83. package/dist/elements/Dropdown/Dropdown.d.ts +10 -124
  84. package/dist/elements/Dropdown/Dropdown.d.ts.map +1 -1
  85. package/dist/elements/Dropdown/Dropdown.types.d.ts +53 -8
  86. package/dist/elements/Dropdown/Dropdown.types.d.ts.map +1 -1
  87. package/dist/elements/FileField/FileField.d.ts +2 -39
  88. package/dist/elements/FileField/FileField.d.ts.map +1 -1
  89. package/dist/elements/FileField/FileField.types.d.ts +31 -13
  90. package/dist/elements/FileField/FileField.types.d.ts.map +1 -1
  91. package/dist/elements/FileField/index.js +1 -1
  92. package/dist/elements/FileField/index.js.map +1 -1
  93. package/dist/elements/FileField/index.mjs +1 -1
  94. package/dist/elements/FileField/index.mjs.map +1 -1
  95. package/dist/elements/FormLayout/FormLayout.d.ts +2 -37
  96. package/dist/elements/FormLayout/FormLayout.d.ts.map +1 -1
  97. package/dist/elements/FormLayout/FormLayout.types.d.ts +19 -3
  98. package/dist/elements/FormLayout/FormLayout.types.d.ts.map +1 -1
  99. package/dist/elements/MatrixGrid/MatrixGrid.d.ts +2 -29
  100. package/dist/elements/MatrixGrid/MatrixGrid.d.ts.map +1 -1
  101. package/dist/elements/MatrixGrid/MatrixGrid.types.d.ts +22 -1
  102. package/dist/elements/MatrixGrid/MatrixGrid.types.d.ts.map +1 -1
  103. package/dist/elements/MatrixGrid/index.js +1 -1
  104. package/dist/elements/MatrixGrid/index.js.map +1 -1
  105. package/dist/elements/MatrixGrid/index.mjs +1 -1
  106. package/dist/elements/MatrixGrid/index.mjs.map +1 -1
  107. package/dist/elements/Modal/Modal.types.d.ts +69 -9
  108. package/dist/elements/Modal/Modal.types.d.ts.map +1 -1
  109. package/dist/elements/Pagination/Pagination.d.ts +2 -28
  110. package/dist/elements/Pagination/Pagination.d.ts.map +1 -1
  111. package/dist/elements/Pagination/Pagination.types.d.ts +26 -1
  112. package/dist/elements/Pagination/Pagination.types.d.ts.map +1 -1
  113. package/dist/elements/Pagination/index.js +1 -1
  114. package/dist/elements/Pagination/index.js.map +1 -1
  115. package/dist/elements/Pagination/index.mjs +1 -1
  116. package/dist/elements/Pagination/index.mjs.map +1 -1
  117. package/dist/elements/Panel/Panel.types.d.ts +67 -9
  118. package/dist/elements/Panel/Panel.types.d.ts.map +1 -1
  119. package/dist/elements/PasswordField/PasswordField.d.ts +2 -26
  120. package/dist/elements/PasswordField/PasswordField.d.ts.map +1 -1
  121. package/dist/elements/PasswordField/PasswordField.types.d.ts +27 -2
  122. package/dist/elements/PasswordField/PasswordField.types.d.ts.map +1 -1
  123. package/dist/elements/PasswordField/index.js +1 -1
  124. package/dist/elements/PasswordField/index.js.map +1 -1
  125. package/dist/elements/PasswordField/index.mjs +1 -1
  126. package/dist/elements/PasswordField/index.mjs.map +1 -1
  127. package/dist/elements/RadioGroup/RadioGroup.d.ts +1 -26
  128. package/dist/elements/RadioGroup/RadioGroup.d.ts.map +1 -1
  129. package/dist/elements/RadioGroup/RadioGroup.types.d.ts +43 -4
  130. package/dist/elements/RadioGroup/RadioGroup.types.d.ts.map +1 -1
  131. package/dist/elements/RadioGroup/index.js +1 -1
  132. package/dist/elements/RadioGroup/index.js.map +1 -1
  133. package/dist/elements/RadioGroup/index.mjs +1 -1
  134. package/dist/elements/RadioGroup/index.mjs.map +1 -1
  135. package/dist/elements/RatingScale/RatingScale.d.ts +2 -30
  136. package/dist/elements/RatingScale/RatingScale.d.ts.map +1 -1
  137. package/dist/elements/RatingScale/RatingScale.types.d.ts +29 -1
  138. package/dist/elements/RatingScale/RatingScale.types.d.ts.map +1 -1
  139. package/dist/elements/RatingScale/index.js +1 -1
  140. package/dist/elements/RatingScale/index.js.map +1 -1
  141. package/dist/elements/RatingScale/index.mjs +1 -1
  142. package/dist/elements/RatingScale/index.mjs.map +1 -1
  143. package/dist/elements/SearchField/SearchField.d.ts +2 -26
  144. package/dist/elements/SearchField/SearchField.d.ts.map +1 -1
  145. package/dist/elements/SearchField/SearchField.types.d.ts +26 -2
  146. package/dist/elements/SearchField/SearchField.types.d.ts.map +1 -1
  147. package/dist/elements/SearchField/index.js +1 -1
  148. package/dist/elements/SearchField/index.js.map +1 -1
  149. package/dist/elements/SearchField/index.mjs +1 -1
  150. package/dist/elements/SearchField/index.mjs.map +1 -1
  151. package/dist/elements/Select/Select.d.ts +3 -61
  152. package/dist/elements/Select/Select.d.ts.map +1 -1
  153. package/dist/elements/Select/Select.types.d.ts +52 -4
  154. package/dist/elements/Select/Select.types.d.ts.map +1 -1
  155. package/dist/elements/Select/index.js +1 -1
  156. package/dist/elements/Select/index.js.map +1 -1
  157. package/dist/elements/Select/index.mjs +1 -1
  158. package/dist/elements/Select/index.mjs.map +1 -1
  159. package/dist/elements/SituationalJudgement/SituationalJudgement.d.ts +2 -28
  160. package/dist/elements/SituationalJudgement/SituationalJudgement.d.ts.map +1 -1
  161. package/dist/elements/SituationalJudgement/SituationalJudgement.types.d.ts +23 -1
  162. package/dist/elements/SituationalJudgement/SituationalJudgement.types.d.ts.map +1 -1
  163. package/dist/elements/SituationalJudgement/index.js +1 -1
  164. package/dist/elements/SituationalJudgement/index.js.map +1 -1
  165. package/dist/elements/SituationalJudgement/index.mjs +1 -1
  166. package/dist/elements/SituationalJudgement/index.mjs.map +1 -1
  167. package/dist/elements/Skeleton/Skeleton.types.d.ts +11 -6
  168. package/dist/elements/Skeleton/Skeleton.types.d.ts.map +1 -1
  169. package/dist/elements/Skeleton/index.js +1 -1
  170. package/dist/elements/Skeleton/index.js.map +1 -1
  171. package/dist/elements/Skeleton/index.mjs +1 -1
  172. package/dist/elements/Skeleton/index.mjs.map +1 -1
  173. package/dist/elements/Switch/Switch.types.d.ts +31 -7
  174. package/dist/elements/Switch/Switch.types.d.ts.map +1 -1
  175. package/dist/elements/Switch/index.js +1 -1
  176. package/dist/elements/Switch/index.js.map +1 -1
  177. package/dist/elements/Switch/index.mjs +1 -1
  178. package/dist/elements/Switch/index.mjs.map +1 -1
  179. package/dist/elements/Table/Table.d.ts +7 -79
  180. package/dist/elements/Table/Table.d.ts.map +1 -1
  181. package/dist/elements/Table/Table.types.d.ts +82 -17
  182. package/dist/elements/Table/Table.types.d.ts.map +1 -1
  183. package/dist/elements/Table/index.js +1 -1
  184. package/dist/elements/Table/index.js.map +1 -1
  185. package/dist/elements/Table/index.mjs +1 -1
  186. package/dist/elements/Table/index.mjs.map +1 -1
  187. package/dist/elements/Tabs/Tabs.types.d.ts +61 -5
  188. package/dist/elements/Tabs/Tabs.types.d.ts.map +1 -1
  189. package/dist/elements/Tabs/index.js +1 -1
  190. package/dist/elements/Tabs/index.js.map +1 -1
  191. package/dist/elements/Tabs/index.mjs +1 -1
  192. package/dist/elements/Tabs/index.mjs.map +1 -1
  193. package/dist/elements/TextField/TextField.d.ts +6 -71
  194. package/dist/elements/TextField/TextField.d.ts.map +1 -1
  195. package/dist/elements/TextField/TextField.types.d.ts +76 -12
  196. package/dist/elements/TextField/TextField.types.d.ts.map +1 -1
  197. package/dist/elements/TextField/index.js +1 -1
  198. package/dist/elements/TextField/index.js.map +1 -1
  199. package/dist/elements/TextField/index.mjs +1 -1
  200. package/dist/elements/TextField/index.mjs.map +1 -1
  201. package/dist/elements/Toast/Toast.types.d.ts +12 -20
  202. package/dist/elements/Toast/Toast.types.d.ts.map +1 -1
  203. package/dist/elements/Toast/Toaster.d.ts +2 -5
  204. package/dist/elements/Toast/Toaster.d.ts.map +1 -1
  205. package/dist/elements/Toast/index.js +1 -1
  206. package/dist/elements/Toast/index.js.map +1 -1
  207. package/dist/elements/Toast/index.mjs +1 -1
  208. package/dist/elements/Toast/index.mjs.map +1 -1
  209. package/dist/elements/Tooltip/Tooltip.types.d.ts +39 -4
  210. package/dist/elements/Tooltip/Tooltip.types.d.ts.map +1 -1
  211. package/dist/elements/Tooltip/index.js +1 -1
  212. package/dist/elements/Tooltip/index.js.map +1 -1
  213. package/dist/elements/Tooltip/index.mjs +1 -1
  214. package/dist/elements/Tooltip/index.mjs.map +1 -1
  215. package/dist/elements/index.js.map +1 -1
  216. package/dist/elements/index.mjs.map +1 -1
  217. package/dist/index.js +2 -2
  218. package/dist/index.js.map +1 -1
  219. package/dist/index.mjs +2 -2
  220. package/dist/index.mjs.map +1 -1
  221. package/package.json +1 -1
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import {TooltipTrigger,Tooltip,OverlayArrow,composeRenderProps}from'react-aria-components';import {cva}from'class-variance-authority';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {z}from'zod';function T(...t){return twMerge(clsx(t))}var P=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=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 jsx(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 jsx(Tooltip,{placement:e,offset:a,crossOffset:p,shouldFlip:n,...h,className:composeRenderProps(m,(f,c)=>{let N=g(c.placement);return T(P({side:N}),f)}),children:f=>{let c=g(f.placement);return jsxs(Fragment,{children:[l&&jsx(OverlayArrow,{children:jsx("svg",{width:s,height:s,viewBox:"0 0 8 8",className:u({side:c}),"data-testid":"tooltip-arrow",children: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 jsx(OverlayArrow,{children:({placement:n})=>{let l=g(n);return jsx("svg",{width:t,height:t,viewBox:"0 0 8 8",className:T(u({side:l}),e),"data-testid":a,...p,children:jsx("path",{d:"M0 0 L4 4 L8 0"})})}})}C.displayName="TooltipArrow";var B=b,D=S,E=w,L=C;var d=z.object({className:z.string().optional(),children:z.any().optional(),id:z.string().optional(),"aria-label":z.string().optional(),"aria-labelledby":z.string().optional(),"aria-describedby":z.string().optional(),"aria-live":z.enum(["off","polite","assertive"]).optional(),"aria-hidden":z.boolean().optional(),"data-testid":z.string().optional()});var v=z.enum(["top","bottom","left","right"]),A=z.enum(["hover","focus"]),k=d.extend({delay:z.number().min(0).optional().default(700),closeDelay:z.number().min(0).optional().default(300),trigger:A.optional().default("hover"),isOpen:z.boolean().optional(),defaultOpen:z.boolean().optional().default(false),onOpenChange:z.custom().optional(),isDisabled:z.boolean().optional().default(false),children:z.custom()}),q=d.extend({asChild:z.boolean().optional().default(false),children:z.custom()}),G=d.extend({side:v.optional().default("top"),sideOffset:z.number().optional().default(4),alignOffset:z.number().optional().default(0),shouldFlip:z.boolean().optional().default(true),showArrow:z.boolean().optional().default(false),arrowSize:z.number().min(0).optional().default(8),className:z.string().optional(),children:z.custom()}),H=z.object({size:z.number().min(0).optional().default(8),className:z.string().optional()});export{B as Tooltip,L as TooltipArrow,H as TooltipArrowPropsSchema,E as TooltipContent,G as TooltipContentPropsSchema,k as TooltipPropsSchema,v as TooltipSideSchema,D as TooltipTrigger,A as TooltipTriggerModeSchema,q as TooltipTriggerPropsSchema,u as tooltipArrowVariants,P as tooltipContentVariants};//# sourceMappingURL=index.mjs.map
2
+ import {TooltipTrigger,Tooltip,OverlayArrow,composeRenderProps}from'react-aria-components';import {cva}from'class-variance-authority';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {z}from'zod';function g(...t){return twMerge(clsx(t))}var y=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=cva("fill-[var(--content-foreground)]",{variants:{side:{top:"rotate-180",bottom:"rotate-0",left:"rotate-90",right:"-rotate-90"}},defaultVariants:{side:"top"}});function T(t){if(!t)return "top";let e=t.split(" ")[0];return e==="top"||e==="bottom"||e==="left"||e==="right"?e:"top"}function P({children:t,delay:e=700,closeDelay:a=300,trigger:n="hover",isOpen:l,defaultOpen:p=false,onOpenChange:s,isDisabled:m=false}){return jsx(TooltipTrigger,{delay:n==="focus"?99999999:e,closeDelay:a,isOpen:l,defaultOpen:p,onOpenChange:s,isDisabled:m,children:t})}P.displayName="Tooltip";function w({children:t}){return t}w.displayName="TooltipTrigger";function S({children:t,side:e="top",sideOffset:a=4,alignOffset:n=0,shouldFlip:l=true,showArrow:p=false,arrowSize:s=8,className:m,...h}){return jsx(Tooltip,{placement:e,offset:a,crossOffset:n,shouldFlip:l,...h,className:composeRenderProps(m,(c,f)=>{let N=T(f.placement);return g(y({side:N}),c)}),children:c=>{let f=T(c.placement);return jsxs(Fragment,{children:[p&&jsx(OverlayArrow,{children:jsx("svg",{width:s,height:s,viewBox:"0 0 8 8",className:u({side:f}),"data-testid":"tooltip-arrow",children:jsx("path",{d:"M0 0 L4 4 L8 0"})})}),t]})}})}S.displayName="TooltipContent";function C({size:t=8,className:e,"data-testid":a="tooltip-arrow",...n}){return jsx(OverlayArrow,{children:({placement:l})=>{let p=T(l);return jsx("svg",{width:t,height:t,viewBox:"0 0 8 8",className:g(u({side:p}),e),"data-testid":a,...n,children:jsx("path",{d:"M0 0 L4 4 L8 0"})})}})}C.displayName="TooltipArrow";var V=P,B=w,E=S,L=C;var d=z.object({className:z.string().optional(),children:z.any().optional(),id:z.string().optional(),"aria-label":z.string().optional(),"aria-labelledby":z.string().optional(),"aria-describedby":z.string().optional(),"aria-live":z.enum(["off","polite","assertive"]).optional(),"aria-hidden":z.boolean().optional(),"data-testid":z.string().optional()});var v=z.enum(["top","bottom","left","right"]),A=z.enum(["hover","focus"]),k=d.extend({delay:z.number().min(0).optional().default(700),closeDelay:z.number().min(0).optional().default(300),trigger:A.optional().default("hover"),isOpen:z.boolean().optional(),defaultOpen:z.boolean().optional().default(false),onOpenChange:z.custom().optional(),isDisabled:z.boolean().optional().default(false),children:z.custom()}),q=d.extend({asChild:z.boolean().optional().default(false),children:z.custom()}),G=d.extend({side:v.optional().default("top"),sideOffset:z.number().optional().default(4),alignOffset:z.number().optional().default(0),shouldFlip:z.boolean().optional().default(true),showArrow:z.boolean().optional().default(false),arrowSize:z.number().min(0).optional().default(8),className:z.string().optional(),children:z.custom()}),H=z.object({size:z.number().min(0).optional().default(8),className:z.string().optional()});export{V as Tooltip,L as TooltipArrow,H as TooltipArrowPropsSchema,E as TooltipContent,G as TooltipContentPropsSchema,k as TooltipPropsSchema,v as TooltipSideSchema,B as TooltipTrigger,A as TooltipTriggerModeSchema,q as TooltipTriggerPropsSchema,u as tooltipArrowVariants,y as tooltipContentVariants};//# sourceMappingURL=index.mjs.map
3
3
  //# sourceMappingURL=index.mjs.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":["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.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","\"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.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","\"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 interface TooltipProps {\n className?: string;\n children?: ReactNode;\n id?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'data-testid'?: string;\n delay?: number;\n closeDelay?: number;\n trigger?: TooltipTriggerMode;\n isOpen?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n isDisabled?: boolean;\n}\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 interface TooltipTriggerProps {\n className?: string;\n children?: ReactNode;\n id?: string;\n 'data-testid'?: string;\n asChild?: boolean;\n}\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 interface TooltipContentProps {\n className?: string;\n children?: ReactNode;\n id?: string;\n 'aria-label'?: string;\n 'data-testid'?: string;\n side?: TooltipSide;\n sideOffset?: number;\n alignOffset?: number;\n shouldFlip?: boolean;\n showArrow?: boolean;\n arrowSize?: number;\n}\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 interface TooltipArrowProps {\n size?: number;\n className?: string;\n}\n"]}