@tribepad/themis 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (654) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +21 -0
  3. package/README.md +114 -0
  4. package/dist/Carousel-NTZX5TOW.js +16 -0
  5. package/dist/Carousel-NTZX5TOW.js.map +1 -0
  6. package/dist/Carousel-YH3DOQJU.mjs +7 -0
  7. package/dist/Carousel-YH3DOQJU.mjs.map +1 -0
  8. package/dist/chunk-2HIUTHMU.mjs +234 -0
  9. package/dist/chunk-2HIUTHMU.mjs.map +1 -0
  10. package/dist/chunk-34GTFTDO.js +431 -0
  11. package/dist/chunk-34GTFTDO.js.map +1 -0
  12. package/dist/chunk-3H7ASYR7.js +250 -0
  13. package/dist/chunk-3H7ASYR7.js.map +1 -0
  14. package/dist/chunk-3IEN7JOP.js +316 -0
  15. package/dist/chunk-3IEN7JOP.js.map +1 -0
  16. package/dist/chunk-3JHN4GAL.js +326 -0
  17. package/dist/chunk-3JHN4GAL.js.map +1 -0
  18. package/dist/chunk-3MJPASQU.js +232 -0
  19. package/dist/chunk-3MJPASQU.js.map +1 -0
  20. package/dist/chunk-3XD2JUL3.js +572 -0
  21. package/dist/chunk-3XD2JUL3.js.map +1 -0
  22. package/dist/chunk-3YOY2VJ6.js +189 -0
  23. package/dist/chunk-3YOY2VJ6.js.map +1 -0
  24. package/dist/chunk-4DU5JSXB.js +408 -0
  25. package/dist/chunk-4DU5JSXB.js.map +1 -0
  26. package/dist/chunk-4E4E2GSS.js +352 -0
  27. package/dist/chunk-4E4E2GSS.js.map +1 -0
  28. package/dist/chunk-4NHAP4AN.mjs +3 -0
  29. package/dist/chunk-4NHAP4AN.mjs.map +1 -0
  30. package/dist/chunk-4S33J5NY.mjs +415 -0
  31. package/dist/chunk-4S33J5NY.mjs.map +1 -0
  32. package/dist/chunk-5SMGRT3G.mjs +354 -0
  33. package/dist/chunk-5SMGRT3G.mjs.map +1 -0
  34. package/dist/chunk-5SVLJN2C.mjs +22 -0
  35. package/dist/chunk-5SVLJN2C.mjs.map +1 -0
  36. package/dist/chunk-66WTU4EB.mjs +299 -0
  37. package/dist/chunk-66WTU4EB.mjs.map +1 -0
  38. package/dist/chunk-6S25NMOT.mjs +335 -0
  39. package/dist/chunk-6S25NMOT.mjs.map +1 -0
  40. package/dist/chunk-6SP7UB3D.js +4 -0
  41. package/dist/chunk-6SP7UB3D.js.map +1 -0
  42. package/dist/chunk-6TYWWQHM.mjs +565 -0
  43. package/dist/chunk-6TYWWQHM.mjs.map +1 -0
  44. package/dist/chunk-A3YUJA6W.mjs +384 -0
  45. package/dist/chunk-A3YUJA6W.mjs.map +1 -0
  46. package/dist/chunk-A6KEDVUR.js +61 -0
  47. package/dist/chunk-A6KEDVUR.js.map +1 -0
  48. package/dist/chunk-A77RUEWL.js +730 -0
  49. package/dist/chunk-A77RUEWL.js.map +1 -0
  50. package/dist/chunk-AA4IKMPE.mjs +3 -0
  51. package/dist/chunk-AA4IKMPE.mjs.map +1 -0
  52. package/dist/chunk-AKIA6GW6.mjs +163 -0
  53. package/dist/chunk-AKIA6GW6.mjs.map +1 -0
  54. package/dist/chunk-AL6P275L.mjs +435 -0
  55. package/dist/chunk-AL6P275L.mjs.map +1 -0
  56. package/dist/chunk-AZ3RJYTB.js +37 -0
  57. package/dist/chunk-AZ3RJYTB.js.map +1 -0
  58. package/dist/chunk-B5Q4UPL6.js +32 -0
  59. package/dist/chunk-B5Q4UPL6.js.map +1 -0
  60. package/dist/chunk-B6DHPMDP.mjs +335 -0
  61. package/dist/chunk-B6DHPMDP.mjs.map +1 -0
  62. package/dist/chunk-BDXKKMBZ.mjs +184 -0
  63. package/dist/chunk-BDXKKMBZ.mjs.map +1 -0
  64. package/dist/chunk-BL6E2DLZ.mjs +52 -0
  65. package/dist/chunk-BL6E2DLZ.mjs.map +1 -0
  66. package/dist/chunk-CGFDS4XS.mjs +121 -0
  67. package/dist/chunk-CGFDS4XS.mjs.map +1 -0
  68. package/dist/chunk-CJIW5TKI.js +139 -0
  69. package/dist/chunk-CJIW5TKI.js.map +1 -0
  70. package/dist/chunk-CKNISJOQ.js +314 -0
  71. package/dist/chunk-CKNISJOQ.js.map +1 -0
  72. package/dist/chunk-D6CBOECS.mjs +1757 -0
  73. package/dist/chunk-D6CBOECS.mjs.map +1 -0
  74. package/dist/chunk-DDWEVC2S.js +166 -0
  75. package/dist/chunk-DDWEVC2S.js.map +1 -0
  76. package/dist/chunk-DZ556D2F.mjs +176 -0
  77. package/dist/chunk-DZ556D2F.mjs.map +1 -0
  78. package/dist/chunk-E2KQFV3O.mjs +10 -0
  79. package/dist/chunk-E2KQFV3O.mjs.map +1 -0
  80. package/dist/chunk-EMMLADSC.js +126 -0
  81. package/dist/chunk-EMMLADSC.js.map +1 -0
  82. package/dist/chunk-EP4WOI5D.mjs +926 -0
  83. package/dist/chunk-EP4WOI5D.mjs.map +1 -0
  84. package/dist/chunk-FJRXLJC2.mjs +160 -0
  85. package/dist/chunk-FJRXLJC2.mjs.map +1 -0
  86. package/dist/chunk-FKQI434R.js +345 -0
  87. package/dist/chunk-FKQI434R.js.map +1 -0
  88. package/dist/chunk-FPKEAJRZ.mjs +100 -0
  89. package/dist/chunk-FPKEAJRZ.mjs.map +1 -0
  90. package/dist/chunk-FWQYB22U.js +183 -0
  91. package/dist/chunk-FWQYB22U.js.map +1 -0
  92. package/dist/chunk-GD5GHTMA.js +189 -0
  93. package/dist/chunk-GD5GHTMA.js.map +1 -0
  94. package/dist/chunk-GE5XTSDZ.js +447 -0
  95. package/dist/chunk-GE5XTSDZ.js.map +1 -0
  96. package/dist/chunk-GVE47ZAX.mjs +32 -0
  97. package/dist/chunk-GVE47ZAX.mjs.map +1 -0
  98. package/dist/chunk-HK46BT5U.mjs +18 -0
  99. package/dist/chunk-HK46BT5U.mjs.map +1 -0
  100. package/dist/chunk-HQVRMR6N.js +365 -0
  101. package/dist/chunk-HQVRMR6N.js.map +1 -0
  102. package/dist/chunk-HSGBJPJO.mjs +398 -0
  103. package/dist/chunk-HSGBJPJO.mjs.map +1 -0
  104. package/dist/chunk-I3AUTOMZ.mjs +125 -0
  105. package/dist/chunk-I3AUTOMZ.mjs.map +1 -0
  106. package/dist/chunk-IEI5LD5C.mjs +1161 -0
  107. package/dist/chunk-IEI5LD5C.mjs.map +1 -0
  108. package/dist/chunk-IIPTC2X7.mjs +118 -0
  109. package/dist/chunk-IIPTC2X7.mjs.map +1 -0
  110. package/dist/chunk-J7TLHF2Q.js +4 -0
  111. package/dist/chunk-J7TLHF2Q.js.map +1 -0
  112. package/dist/chunk-JJOWXFXQ.mjs +765 -0
  113. package/dist/chunk-JJOWXFXQ.mjs.map +1 -0
  114. package/dist/chunk-JPTSS2OA.mjs +3 -0
  115. package/dist/chunk-JPTSS2OA.mjs.map +1 -0
  116. package/dist/chunk-KFXXRLTP.js +396 -0
  117. package/dist/chunk-KFXXRLTP.js.map +1 -0
  118. package/dist/chunk-KPRRBSG6.mjs +272 -0
  119. package/dist/chunk-KPRRBSG6.mjs.map +1 -0
  120. package/dist/chunk-NFSBGRDB.mjs +57 -0
  121. package/dist/chunk-NFSBGRDB.mjs.map +1 -0
  122. package/dist/chunk-NGJVCFTM.js +219 -0
  123. package/dist/chunk-NGJVCFTM.js.map +1 -0
  124. package/dist/chunk-NSQ6MZJ6.mjs +728 -0
  125. package/dist/chunk-NSQ6MZJ6.mjs.map +1 -0
  126. package/dist/chunk-NYQYHT76.mjs +296 -0
  127. package/dist/chunk-NYQYHT76.mjs.map +1 -0
  128. package/dist/chunk-OLJJGI5B.js +1193 -0
  129. package/dist/chunk-OLJJGI5B.js.map +1 -0
  130. package/dist/chunk-Q3572X2J.js +292 -0
  131. package/dist/chunk-Q3572X2J.js.map +1 -0
  132. package/dist/chunk-QH7N7D4I.mjs +210 -0
  133. package/dist/chunk-QH7N7D4I.mjs.map +1 -0
  134. package/dist/chunk-R7XUIV25.js +466 -0
  135. package/dist/chunk-R7XUIV25.js.map +1 -0
  136. package/dist/chunk-RFFO4KPM.js +135 -0
  137. package/dist/chunk-RFFO4KPM.js.map +1 -0
  138. package/dist/chunk-RFX7QKA7.mjs +180 -0
  139. package/dist/chunk-RFX7QKA7.mjs.map +1 -0
  140. package/dist/chunk-SN5LFAP3.js +940 -0
  141. package/dist/chunk-SN5LFAP3.js.map +1 -0
  142. package/dist/chunk-T4COXKQ3.js +24 -0
  143. package/dist/chunk-T4COXKQ3.js.map +1 -0
  144. package/dist/chunk-TS54QM27.js +125 -0
  145. package/dist/chunk-TS54QM27.js.map +1 -0
  146. package/dist/chunk-UE2S4PCX.mjs +220 -0
  147. package/dist/chunk-UE2S4PCX.mjs.map +1 -0
  148. package/dist/chunk-UTW3QX2A.mjs +282 -0
  149. package/dist/chunk-UTW3QX2A.mjs.map +1 -0
  150. package/dist/chunk-V74LGMAE.js +1767 -0
  151. package/dist/chunk-V74LGMAE.js.map +1 -0
  152. package/dist/chunk-VIREG536.js +12 -0
  153. package/dist/chunk-VIREG536.js.map +1 -0
  154. package/dist/chunk-VY7M7346.js +4 -0
  155. package/dist/chunk-VY7M7346.js.map +1 -0
  156. package/dist/chunk-W3TJOO7H.mjs +319 -0
  157. package/dist/chunk-W3TJOO7H.mjs.map +1 -0
  158. package/dist/chunk-WIUOB36M.js +54 -0
  159. package/dist/chunk-WIUOB36M.js.map +1 -0
  160. package/dist/chunk-WJGLM4CY.js +291 -0
  161. package/dist/chunk-WJGLM4CY.js.map +1 -0
  162. package/dist/chunk-WNURH5OO.mjs +453 -0
  163. package/dist/chunk-WNURH5OO.mjs.map +1 -0
  164. package/dist/chunk-X25TNRSD.mjs +364 -0
  165. package/dist/chunk-X25TNRSD.mjs.map +1 -0
  166. package/dist/chunk-Y3GT7ETK.js +108 -0
  167. package/dist/chunk-Y3GT7ETK.js.map +1 -0
  168. package/dist/chunk-Z4FRNOF6.mjs +115 -0
  169. package/dist/chunk-Z4FRNOF6.mjs.map +1 -0
  170. package/dist/chunk-ZMYLD3BN.js +166 -0
  171. package/dist/chunk-ZMYLD3BN.js.map +1 -0
  172. package/dist/chunk-ZP2KV6EX.js +815 -0
  173. package/dist/chunk-ZP2KV6EX.js.map +1 -0
  174. package/dist/chunk-ZVKXFELU.js +366 -0
  175. package/dist/chunk-ZVKXFELU.js.map +1 -0
  176. package/dist/elements/Accordion/Accordion.d.ts +139 -0
  177. package/dist/elements/Accordion/Accordion.d.ts.map +1 -0
  178. package/dist/elements/Accordion/Accordion.types.d.ts +143 -0
  179. package/dist/elements/Accordion/Accordion.types.d.ts.map +1 -0
  180. package/dist/elements/Accordion/index.d.ts +13 -0
  181. package/dist/elements/Accordion/index.d.ts.map +1 -0
  182. package/dist/elements/Accordion/index.js +78 -0
  183. package/dist/elements/Accordion/index.js.map +1 -0
  184. package/dist/elements/Accordion/index.mjs +5 -0
  185. package/dist/elements/Accordion/index.mjs.map +1 -0
  186. package/dist/elements/Avatar/Avatar.d.ts +51 -0
  187. package/dist/elements/Avatar/Avatar.d.ts.map +1 -0
  188. package/dist/elements/Avatar/Avatar.types.d.ts +145 -0
  189. package/dist/elements/Avatar/Avatar.types.d.ts.map +1 -0
  190. package/dist/elements/Avatar/AvatarGroup.d.ts +32 -0
  191. package/dist/elements/Avatar/AvatarGroup.d.ts.map +1 -0
  192. package/dist/elements/Avatar/index.d.ts +11 -0
  193. package/dist/elements/Avatar/index.d.ts.map +1 -0
  194. package/dist/elements/Avatar/index.js +54 -0
  195. package/dist/elements/Avatar/index.js.map +1 -0
  196. package/dist/elements/Avatar/index.mjs +5 -0
  197. package/dist/elements/Avatar/index.mjs.map +1 -0
  198. package/dist/elements/Badge/Badge.d.ts +39 -0
  199. package/dist/elements/Badge/Badge.d.ts.map +1 -0
  200. package/dist/elements/Badge/Badge.types.d.ts +76 -0
  201. package/dist/elements/Badge/Badge.types.d.ts.map +1 -0
  202. package/dist/elements/Badge/index.d.ts +18 -0
  203. package/dist/elements/Badge/index.d.ts.map +1 -0
  204. package/dist/elements/Badge/index.js +43 -0
  205. package/dist/elements/Badge/index.js.map +1 -0
  206. package/dist/elements/Badge/index.mjs +6 -0
  207. package/dist/elements/Badge/index.mjs.map +1 -0
  208. package/dist/elements/Breadcrumbs/Breadcrumbs.d.ts +91 -0
  209. package/dist/elements/Breadcrumbs/Breadcrumbs.d.ts.map +1 -0
  210. package/dist/elements/Breadcrumbs/Breadcrumbs.types.d.ts +114 -0
  211. package/dist/elements/Breadcrumbs/Breadcrumbs.types.d.ts.map +1 -0
  212. package/dist/elements/Breadcrumbs/index.d.ts +14 -0
  213. package/dist/elements/Breadcrumbs/index.d.ts.map +1 -0
  214. package/dist/elements/Breadcrumbs/index.js +54 -0
  215. package/dist/elements/Breadcrumbs/index.js.map +1 -0
  216. package/dist/elements/Breadcrumbs/index.mjs +9 -0
  217. package/dist/elements/Breadcrumbs/index.mjs.map +1 -0
  218. package/dist/elements/Button/Button.d.ts +92 -0
  219. package/dist/elements/Button/Button.d.ts.map +1 -0
  220. package/dist/elements/Button/Button.types.d.ts +54 -0
  221. package/dist/elements/Button/Button.types.d.ts.map +1 -0
  222. package/dist/elements/Button/index.d.ts +18 -0
  223. package/dist/elements/Button/index.d.ts.map +1 -0
  224. package/dist/elements/Button/index.js +27 -0
  225. package/dist/elements/Button/index.js.map +1 -0
  226. package/dist/elements/Button/index.mjs +6 -0
  227. package/dist/elements/Button/index.mjs.map +1 -0
  228. package/dist/elements/ButtonGroup/ButtonGroup.d.ts +53 -0
  229. package/dist/elements/ButtonGroup/ButtonGroup.d.ts.map +1 -0
  230. package/dist/elements/ButtonGroup/ButtonGroup.types.d.ts +98 -0
  231. package/dist/elements/ButtonGroup/ButtonGroup.types.d.ts.map +1 -0
  232. package/dist/elements/ButtonGroup/ButtonGroup.utils.d.ts +60 -0
  233. package/dist/elements/ButtonGroup/ButtonGroup.utils.d.ts.map +1 -0
  234. package/dist/elements/ButtonGroup/ButtonGroup.variants.d.ts +39 -0
  235. package/dist/elements/ButtonGroup/ButtonGroup.variants.d.ts.map +1 -0
  236. package/dist/elements/ButtonGroup/ButtonGroupContext.d.ts +42 -0
  237. package/dist/elements/ButtonGroup/ButtonGroupContext.d.ts.map +1 -0
  238. package/dist/elements/ButtonGroup/index.d.ts +35 -0
  239. package/dist/elements/ButtonGroup/index.d.ts.map +1 -0
  240. package/dist/elements/ButtonGroup/index.js +66 -0
  241. package/dist/elements/ButtonGroup/index.js.map +1 -0
  242. package/dist/elements/ButtonGroup/index.mjs +5 -0
  243. package/dist/elements/ButtonGroup/index.mjs.map +1 -0
  244. package/dist/elements/Card/Card.d.ts +104 -0
  245. package/dist/elements/Card/Card.d.ts.map +1 -0
  246. package/dist/elements/Card/Card.types.d.ts +227 -0
  247. package/dist/elements/Card/Card.types.d.ts.map +1 -0
  248. package/dist/elements/Card/index.d.ts +38 -0
  249. package/dist/elements/Card/index.d.ts.map +1 -0
  250. package/dist/elements/Card/index.js +85 -0
  251. package/dist/elements/Card/index.js.map +1 -0
  252. package/dist/elements/Card/index.mjs +8 -0
  253. package/dist/elements/Card/index.mjs.map +1 -0
  254. package/dist/elements/Carousel/Carousel.d.ts +13 -0
  255. package/dist/elements/Carousel/Carousel.d.ts.map +1 -0
  256. package/dist/elements/Carousel/Carousel.types.d.ts +65 -0
  257. package/dist/elements/Carousel/Carousel.types.d.ts.map +1 -0
  258. package/dist/elements/Carousel/LazyCarousel.d.ts +46 -0
  259. package/dist/elements/Carousel/LazyCarousel.d.ts.map +1 -0
  260. package/dist/elements/Carousel/index.d.ts +5 -0
  261. package/dist/elements/Carousel/index.d.ts.map +1 -0
  262. package/dist/elements/Carousel/index.js +23 -0
  263. package/dist/elements/Carousel/index.js.map +1 -0
  264. package/dist/elements/Carousel/index.mjs +10 -0
  265. package/dist/elements/Carousel/index.mjs.map +1 -0
  266. package/dist/elements/Chart/Chart.d.ts +44 -0
  267. package/dist/elements/Chart/Chart.d.ts.map +1 -0
  268. package/dist/elements/Chart/Chart.types.d.ts +254 -0
  269. package/dist/elements/Chart/Chart.types.d.ts.map +1 -0
  270. package/dist/elements/Chart/ChartAnnouncer.d.ts +24 -0
  271. package/dist/elements/Chart/ChartAnnouncer.d.ts.map +1 -0
  272. package/dist/elements/Chart/ChartAxis.d.ts +42 -0
  273. package/dist/elements/Chart/ChartAxis.d.ts.map +1 -0
  274. package/dist/elements/Chart/ChartBarSeries.d.ts +54 -0
  275. package/dist/elements/Chart/ChartBarSeries.d.ts.map +1 -0
  276. package/dist/elements/Chart/ChartContext.d.ts +46 -0
  277. package/dist/elements/Chart/ChartContext.d.ts.map +1 -0
  278. package/dist/elements/Chart/ChartDataPoint.d.ts +56 -0
  279. package/dist/elements/Chart/ChartDataPoint.d.ts.map +1 -0
  280. package/dist/elements/Chart/ChartDataTable.d.ts +35 -0
  281. package/dist/elements/Chart/ChartDataTable.d.ts.map +1 -0
  282. package/dist/elements/Chart/ChartGrid.d.ts +32 -0
  283. package/dist/elements/Chart/ChartGrid.d.ts.map +1 -0
  284. package/dist/elements/Chart/ChartLegend.d.ts +32 -0
  285. package/dist/elements/Chart/ChartLegend.d.ts.map +1 -0
  286. package/dist/elements/Chart/ChartLineSeries.d.ts +52 -0
  287. package/dist/elements/Chart/ChartLineSeries.d.ts.map +1 -0
  288. package/dist/elements/Chart/ChartSVG.d.ts +62 -0
  289. package/dist/elements/Chart/ChartSVG.d.ts.map +1 -0
  290. package/dist/elements/Chart/ChartTooltip.d.ts +45 -0
  291. package/dist/elements/Chart/ChartTooltip.d.ts.map +1 -0
  292. package/dist/elements/Chart/chart.constants.d.ts +108 -0
  293. package/dist/elements/Chart/chart.constants.d.ts.map +1 -0
  294. package/dist/elements/Chart/chart.variants.d.ts +45 -0
  295. package/dist/elements/Chart/chart.variants.d.ts.map +1 -0
  296. package/dist/elements/Chart/index.d.ts +12 -0
  297. package/dist/elements/Chart/index.d.ts.map +1 -0
  298. package/dist/elements/Chart/index.js +47 -0
  299. package/dist/elements/Chart/index.js.map +1 -0
  300. package/dist/elements/Chart/index.mjs +6 -0
  301. package/dist/elements/Chart/index.mjs.map +1 -0
  302. package/dist/elements/Chart/useChartDimensions.d.ts +18 -0
  303. package/dist/elements/Chart/useChartDimensions.d.ts.map +1 -0
  304. package/dist/elements/Chart/useChartKeyboard.d.ts +42 -0
  305. package/dist/elements/Chart/useChartKeyboard.d.ts.map +1 -0
  306. package/dist/elements/Chart/useRovingTabIndex.d.ts +46 -0
  307. package/dist/elements/Chart/useRovingTabIndex.d.ts.map +1 -0
  308. package/dist/elements/Checkbox/Checkbox.d.ts +94 -0
  309. package/dist/elements/Checkbox/Checkbox.d.ts.map +1 -0
  310. package/dist/elements/Checkbox/Checkbox.types.d.ts +82 -0
  311. package/dist/elements/Checkbox/Checkbox.types.d.ts.map +1 -0
  312. package/dist/elements/Checkbox/index.d.ts +7 -0
  313. package/dist/elements/Checkbox/index.d.ts.map +1 -0
  314. package/dist/elements/Checkbox/index.js +47 -0
  315. package/dist/elements/Checkbox/index.js.map +1 -0
  316. package/dist/elements/Checkbox/index.mjs +6 -0
  317. package/dist/elements/Checkbox/index.mjs.map +1 -0
  318. package/dist/elements/CheckboxGroup/CheckboxGroup.d.ts +130 -0
  319. package/dist/elements/CheckboxGroup/CheckboxGroup.d.ts.map +1 -0
  320. package/dist/elements/CheckboxGroup/CheckboxGroup.types.d.ts +142 -0
  321. package/dist/elements/CheckboxGroup/CheckboxGroup.types.d.ts.map +1 -0
  322. package/dist/elements/CheckboxGroup/index.d.ts +10 -0
  323. package/dist/elements/CheckboxGroup/index.d.ts.map +1 -0
  324. package/dist/elements/CheckboxGroup/index.js +71 -0
  325. package/dist/elements/CheckboxGroup/index.js.map +1 -0
  326. package/dist/elements/CheckboxGroup/index.mjs +6 -0
  327. package/dist/elements/CheckboxGroup/index.mjs.map +1 -0
  328. package/dist/elements/DatePicker/Calendar.d.ts +16 -0
  329. package/dist/elements/DatePicker/Calendar.d.ts.map +1 -0
  330. package/dist/elements/DatePicker/DateField.d.ts +13 -0
  331. package/dist/elements/DatePicker/DateField.d.ts.map +1 -0
  332. package/dist/elements/DatePicker/DatePicker.d.ts +16 -0
  333. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -0
  334. package/dist/elements/DatePicker/DatePicker.types.d.ts +390 -0
  335. package/dist/elements/DatePicker/DatePicker.types.d.ts.map +1 -0
  336. package/dist/elements/DatePicker/DatePicker.variants.d.ts +42 -0
  337. package/dist/elements/DatePicker/DatePicker.variants.d.ts.map +1 -0
  338. package/dist/elements/DatePicker/DateRangePicker.d.ts +13 -0
  339. package/dist/elements/DatePicker/DateRangePicker.d.ts.map +1 -0
  340. package/dist/elements/DatePicker/index.d.ts +14 -0
  341. package/dist/elements/DatePicker/index.d.ts.map +1 -0
  342. package/dist/elements/DatePicker/index.js +123 -0
  343. package/dist/elements/DatePicker/index.js.map +1 -0
  344. package/dist/elements/DatePicker/index.mjs +6 -0
  345. package/dist/elements/DatePicker/index.mjs.map +1 -0
  346. package/dist/elements/Dropdown/Dropdown.d.ts +197 -0
  347. package/dist/elements/Dropdown/Dropdown.d.ts.map +1 -0
  348. package/dist/elements/Dropdown/Dropdown.types.d.ts +175 -0
  349. package/dist/elements/Dropdown/Dropdown.types.d.ts.map +1 -0
  350. package/dist/elements/Dropdown/index.d.ts +12 -0
  351. package/dist/elements/Dropdown/index.d.ts.map +1 -0
  352. package/dist/elements/Dropdown/index.js +41 -0
  353. package/dist/elements/Dropdown/index.js.map +1 -0
  354. package/dist/elements/Dropdown/index.mjs +4 -0
  355. package/dist/elements/Dropdown/index.mjs.map +1 -0
  356. package/dist/elements/FileField/FileField.d.ts +46 -0
  357. package/dist/elements/FileField/FileField.d.ts.map +1 -0
  358. package/dist/elements/FileField/FileField.types.d.ts +99 -0
  359. package/dist/elements/FileField/FileField.types.d.ts.map +1 -0
  360. package/dist/elements/FileField/FileField.variants.d.ts +49 -0
  361. package/dist/elements/FileField/FileField.variants.d.ts.map +1 -0
  362. package/dist/elements/FileField/FilePreview.d.ts +27 -0
  363. package/dist/elements/FileField/FilePreview.d.ts.map +1 -0
  364. package/dist/elements/FileField/FileProgress.d.ts +35 -0
  365. package/dist/elements/FileField/FileProgress.d.ts.map +1 -0
  366. package/dist/elements/FileField/FileProgress.variants.d.ts +55 -0
  367. package/dist/elements/FileField/FileProgress.variants.d.ts.map +1 -0
  368. package/dist/elements/FileField/index.d.ts +41 -0
  369. package/dist/elements/FileField/index.d.ts.map +1 -0
  370. package/dist/elements/FileField/index.js +138 -0
  371. package/dist/elements/FileField/index.js.map +1 -0
  372. package/dist/elements/FileField/index.mjs +9 -0
  373. package/dist/elements/FileField/index.mjs.map +1 -0
  374. package/dist/elements/FileField/useFilePreview.d.ts +46 -0
  375. package/dist/elements/FileField/useFilePreview.d.ts.map +1 -0
  376. package/dist/elements/FileField/utils.d.ts +134 -0
  377. package/dist/elements/FileField/utils.d.ts.map +1 -0
  378. package/dist/elements/FormLayout/FormLayout.d.ts +51 -0
  379. package/dist/elements/FormLayout/FormLayout.d.ts.map +1 -0
  380. package/dist/elements/FormLayout/FormLayout.types.d.ts +66 -0
  381. package/dist/elements/FormLayout/FormLayout.types.d.ts.map +1 -0
  382. package/dist/elements/FormLayout/index.d.ts +3 -0
  383. package/dist/elements/FormLayout/index.d.ts.map +1 -0
  384. package/dist/elements/FormLayout/index.js +17 -0
  385. package/dist/elements/FormLayout/index.js.map +1 -0
  386. package/dist/elements/FormLayout/index.mjs +4 -0
  387. package/dist/elements/FormLayout/index.mjs.map +1 -0
  388. package/dist/elements/Modal/Modal.d.ts +168 -0
  389. package/dist/elements/Modal/Modal.d.ts.map +1 -0
  390. package/dist/elements/Modal/Modal.types.d.ts +265 -0
  391. package/dist/elements/Modal/Modal.types.d.ts.map +1 -0
  392. package/dist/elements/Modal/index.d.ts +14 -0
  393. package/dist/elements/Modal/index.d.ts.map +1 -0
  394. package/dist/elements/Modal/index.js +52 -0
  395. package/dist/elements/Modal/index.js.map +1 -0
  396. package/dist/elements/Modal/index.mjs +3 -0
  397. package/dist/elements/Modal/index.mjs.map +1 -0
  398. package/dist/elements/NumberField/NumberField.d.ts +43 -0
  399. package/dist/elements/NumberField/NumberField.d.ts.map +1 -0
  400. package/dist/elements/NumberField/NumberField.types.d.ts +112 -0
  401. package/dist/elements/NumberField/NumberField.types.d.ts.map +1 -0
  402. package/dist/elements/NumberField/NumberField.variants.d.ts +82 -0
  403. package/dist/elements/NumberField/NumberField.variants.d.ts.map +1 -0
  404. package/dist/elements/NumberField/index.d.ts +25 -0
  405. package/dist/elements/NumberField/index.d.ts.map +1 -0
  406. package/dist/elements/NumberField/index.js +57 -0
  407. package/dist/elements/NumberField/index.js.map +1 -0
  408. package/dist/elements/NumberField/index.mjs +8 -0
  409. package/dist/elements/NumberField/index.mjs.map +1 -0
  410. package/dist/elements/OTPInput/OTPInput.d.ts +105 -0
  411. package/dist/elements/OTPInput/OTPInput.d.ts.map +1 -0
  412. package/dist/elements/OTPInput/OTPInput.styles.d.ts +83 -0
  413. package/dist/elements/OTPInput/OTPInput.styles.d.ts.map +1 -0
  414. package/dist/elements/OTPInput/OTPInput.types.d.ts +189 -0
  415. package/dist/elements/OTPInput/OTPInput.types.d.ts.map +1 -0
  416. package/dist/elements/OTPInput/components/OTPDigit.d.ts +51 -0
  417. package/dist/elements/OTPInput/components/OTPDigit.d.ts.map +1 -0
  418. package/dist/elements/OTPInput/hooks/useOTPInput.d.ts +36 -0
  419. package/dist/elements/OTPInput/hooks/useOTPInput.d.ts.map +1 -0
  420. package/dist/elements/OTPInput/hooks/useOTPKeyboard.d.ts +59 -0
  421. package/dist/elements/OTPInput/hooks/useOTPKeyboard.d.ts.map +1 -0
  422. package/dist/elements/OTPInput/index.d.ts +27 -0
  423. package/dist/elements/OTPInput/index.d.ts.map +1 -0
  424. package/dist/elements/OTPInput/index.js +13 -0
  425. package/dist/elements/OTPInput/index.js.map +1 -0
  426. package/dist/elements/OTPInput/index.mjs +4 -0
  427. package/dist/elements/OTPInput/index.mjs.map +1 -0
  428. package/dist/elements/Panel/Panel.d.ts +111 -0
  429. package/dist/elements/Panel/Panel.d.ts.map +1 -0
  430. package/dist/elements/Panel/Panel.types.d.ts +243 -0
  431. package/dist/elements/Panel/Panel.types.d.ts.map +1 -0
  432. package/dist/elements/Panel/index.d.ts +4 -0
  433. package/dist/elements/Panel/index.d.ts.map +1 -0
  434. package/dist/elements/Panel/index.js +33 -0
  435. package/dist/elements/Panel/index.js.map +1 -0
  436. package/dist/elements/Panel/index.mjs +4 -0
  437. package/dist/elements/Panel/index.mjs.map +1 -0
  438. package/dist/elements/Progress/Progress.d.ts +44 -0
  439. package/dist/elements/Progress/Progress.d.ts.map +1 -0
  440. package/dist/elements/Progress/Progress.types.d.ts +64 -0
  441. package/dist/elements/Progress/Progress.types.d.ts.map +1 -0
  442. package/dist/elements/Progress/index.d.ts +11 -0
  443. package/dist/elements/Progress/index.d.ts.map +1 -0
  444. package/dist/elements/Progress/index.js +30 -0
  445. package/dist/elements/Progress/index.js.map +1 -0
  446. package/dist/elements/Progress/index.mjs +5 -0
  447. package/dist/elements/Progress/index.mjs.map +1 -0
  448. package/dist/elements/RadioGroup/RadioGroup.d.ts +110 -0
  449. package/dist/elements/RadioGroup/RadioGroup.d.ts.map +1 -0
  450. package/dist/elements/RadioGroup/RadioGroup.types.d.ts +143 -0
  451. package/dist/elements/RadioGroup/RadioGroup.types.d.ts.map +1 -0
  452. package/dist/elements/RadioGroup/index.d.ts +10 -0
  453. package/dist/elements/RadioGroup/index.d.ts.map +1 -0
  454. package/dist/elements/RadioGroup/index.js +47 -0
  455. package/dist/elements/RadioGroup/index.js.map +1 -0
  456. package/dist/elements/RadioGroup/index.mjs +6 -0
  457. package/dist/elements/RadioGroup/index.mjs.map +1 -0
  458. package/dist/elements/Resizable/Resizable.types.d.ts +188 -0
  459. package/dist/elements/Resizable/Resizable.types.d.ts.map +1 -0
  460. package/dist/elements/Resizable/components/ResizableHandle.d.ts +28 -0
  461. package/dist/elements/Resizable/components/ResizableHandle.d.ts.map +1 -0
  462. package/dist/elements/Resizable/components/ResizablePanel.d.ts +24 -0
  463. package/dist/elements/Resizable/components/ResizablePanel.d.ts.map +1 -0
  464. package/dist/elements/Resizable/components/ResizablePanelGroup.d.ts +26 -0
  465. package/dist/elements/Resizable/components/ResizablePanelGroup.d.ts.map +1 -0
  466. package/dist/elements/Resizable/components/ResizablePopover.d.ts +45 -0
  467. package/dist/elements/Resizable/components/ResizablePopover.d.ts.map +1 -0
  468. package/dist/elements/Resizable/hooks/useResizable.d.ts +50 -0
  469. package/dist/elements/Resizable/hooks/useResizable.d.ts.map +1 -0
  470. package/dist/elements/Resizable/hooks/useResizableContext.d.ts +36 -0
  471. package/dist/elements/Resizable/hooks/useResizableContext.d.ts.map +1 -0
  472. package/dist/elements/Resizable/index.d.ts +37 -0
  473. package/dist/elements/Resizable/index.d.ts.map +1 -0
  474. package/dist/elements/Resizable/index.js +65 -0
  475. package/dist/elements/Resizable/index.js.map +1 -0
  476. package/dist/elements/Resizable/index.mjs +8 -0
  477. package/dist/elements/Resizable/index.mjs.map +1 -0
  478. package/dist/elements/Select/Select.d.ts +184 -0
  479. package/dist/elements/Select/Select.d.ts.map +1 -0
  480. package/dist/elements/Select/Select.types.d.ts +166 -0
  481. package/dist/elements/Select/Select.types.d.ts.map +1 -0
  482. package/dist/elements/Select/index.d.ts +35 -0
  483. package/dist/elements/Select/index.d.ts.map +1 -0
  484. package/dist/elements/Select/index.js +33 -0
  485. package/dist/elements/Select/index.js.map +1 -0
  486. package/dist/elements/Select/index.mjs +4 -0
  487. package/dist/elements/Select/index.mjs.map +1 -0
  488. package/dist/elements/Skeleton/Skeleton.d.ts +31 -0
  489. package/dist/elements/Skeleton/Skeleton.d.ts.map +1 -0
  490. package/dist/elements/Skeleton/Skeleton.types.d.ts +36 -0
  491. package/dist/elements/Skeleton/Skeleton.types.d.ts.map +1 -0
  492. package/dist/elements/Skeleton/index.d.ts +11 -0
  493. package/dist/elements/Skeleton/index.d.ts.map +1 -0
  494. package/dist/elements/Skeleton/index.js +22 -0
  495. package/dist/elements/Skeleton/index.js.map +1 -0
  496. package/dist/elements/Skeleton/index.mjs +5 -0
  497. package/dist/elements/Skeleton/index.mjs.map +1 -0
  498. package/dist/elements/Switch/Switch.d.ts +39 -0
  499. package/dist/elements/Switch/Switch.d.ts.map +1 -0
  500. package/dist/elements/Switch/Switch.types.d.ts +53 -0
  501. package/dist/elements/Switch/Switch.types.d.ts.map +1 -0
  502. package/dist/elements/Switch/index.d.ts +8 -0
  503. package/dist/elements/Switch/index.d.ts.map +1 -0
  504. package/dist/elements/Switch/index.js +49 -0
  505. package/dist/elements/Switch/index.js.map +1 -0
  506. package/dist/elements/Switch/index.mjs +31 -0
  507. package/dist/elements/Switch/index.mjs.map +1 -0
  508. package/dist/elements/Table/Table.d.ts +123 -0
  509. package/dist/elements/Table/Table.d.ts.map +1 -0
  510. package/dist/elements/Table/Table.types.d.ts +356 -0
  511. package/dist/elements/Table/Table.types.d.ts.map +1 -0
  512. package/dist/elements/Table/index.d.ts +5 -0
  513. package/dist/elements/Table/index.d.ts.map +1 -0
  514. package/dist/elements/Table/index.js +76 -0
  515. package/dist/elements/Table/index.js.map +1 -0
  516. package/dist/elements/Table/index.mjs +7 -0
  517. package/dist/elements/Table/index.mjs.map +1 -0
  518. package/dist/elements/Tabs/Tabs.d.ts +129 -0
  519. package/dist/elements/Tabs/Tabs.d.ts.map +1 -0
  520. package/dist/elements/Tabs/Tabs.types.d.ts +179 -0
  521. package/dist/elements/Tabs/Tabs.types.d.ts.map +1 -0
  522. package/dist/elements/Tabs/index.d.ts +12 -0
  523. package/dist/elements/Tabs/index.d.ts.map +1 -0
  524. package/dist/elements/Tabs/index.js +74 -0
  525. package/dist/elements/Tabs/index.js.map +1 -0
  526. package/dist/elements/Tabs/index.mjs +5 -0
  527. package/dist/elements/Tabs/index.mjs.map +1 -0
  528. package/dist/elements/TextField/TextField.d.ts +155 -0
  529. package/dist/elements/TextField/TextField.d.ts.map +1 -0
  530. package/dist/elements/TextField/TextField.types.d.ts +258 -0
  531. package/dist/elements/TextField/TextField.types.d.ts.map +1 -0
  532. package/dist/elements/TextField/index.css +23 -0
  533. package/dist/elements/TextField/index.css.map +1 -0
  534. package/dist/elements/TextField/index.d.ts +13 -0
  535. package/dist/elements/TextField/index.d.ts.map +1 -0
  536. package/dist/elements/TextField/index.js +260 -0
  537. package/dist/elements/TextField/index.js.map +1 -0
  538. package/dist/elements/TextField/index.mjs +207 -0
  539. package/dist/elements/TextField/index.mjs.map +1 -0
  540. package/dist/elements/TimeField/TimeField.d.ts +34 -0
  541. package/dist/elements/TimeField/TimeField.d.ts.map +1 -0
  542. package/dist/elements/TimeField/TimeField.types.d.ts +151 -0
  543. package/dist/elements/TimeField/TimeField.types.d.ts.map +1 -0
  544. package/dist/elements/TimeField/index.d.ts +24 -0
  545. package/dist/elements/TimeField/index.d.ts.map +1 -0
  546. package/dist/elements/TimeField/index.js +45 -0
  547. package/dist/elements/TimeField/index.js.map +1 -0
  548. package/dist/elements/TimeField/index.mjs +4 -0
  549. package/dist/elements/TimeField/index.mjs.map +1 -0
  550. package/dist/elements/Toast/Toast.d.ts +105 -0
  551. package/dist/elements/Toast/Toast.d.ts.map +1 -0
  552. package/dist/elements/Toast/Toast.types.d.ts +209 -0
  553. package/dist/elements/Toast/Toast.types.d.ts.map +1 -0
  554. package/dist/elements/Toast/ToastProvider.d.ts +37 -0
  555. package/dist/elements/Toast/ToastProvider.d.ts.map +1 -0
  556. package/dist/elements/Toast/Toaster.d.ts +18 -0
  557. package/dist/elements/Toast/Toaster.d.ts.map +1 -0
  558. package/dist/elements/Toast/index.d.ts +27 -0
  559. package/dist/elements/Toast/index.d.ts.map +1 -0
  560. package/dist/elements/Toast/index.js +60 -0
  561. package/dist/elements/Toast/index.js.map +1 -0
  562. package/dist/elements/Toast/index.mjs +7 -0
  563. package/dist/elements/Toast/index.mjs.map +1 -0
  564. package/dist/elements/Tooltip/Tooltip.d.ts +108 -0
  565. package/dist/elements/Tooltip/Tooltip.d.ts.map +1 -0
  566. package/dist/elements/Tooltip/Tooltip.types.d.ts +135 -0
  567. package/dist/elements/Tooltip/Tooltip.types.d.ts.map +1 -0
  568. package/dist/elements/Tooltip/index.d.ts +11 -0
  569. package/dist/elements/Tooltip/index.d.ts.map +1 -0
  570. package/dist/elements/Tooltip/index.js +59 -0
  571. package/dist/elements/Tooltip/index.js.map +1 -0
  572. package/dist/elements/Tooltip/index.mjs +6 -0
  573. package/dist/elements/Tooltip/index.mjs.map +1 -0
  574. package/dist/elements/index.css +23 -0
  575. package/dist/elements/index.css.map +1 -0
  576. package/dist/elements/index.d.ts +42 -0
  577. package/dist/elements/index.d.ts.map +1 -0
  578. package/dist/elements/index.js +839 -0
  579. package/dist/elements/index.js.map +1 -0
  580. package/dist/elements/index.mjs +42 -0
  581. package/dist/elements/index.mjs.map +1 -0
  582. package/dist/index.css +23 -0
  583. package/dist/index.css.map +1 -0
  584. package/dist/index.d.ts +4 -0
  585. package/dist/index.d.ts.map +1 -0
  586. package/dist/index.js +865 -0
  587. package/dist/index.js.map +1 -0
  588. package/dist/index.mjs +44 -0
  589. package/dist/index.mjs.map +1 -0
  590. package/dist/schemas/BaseComponentProps.d.ts +25 -0
  591. package/dist/schemas/BaseComponentProps.d.ts.map +1 -0
  592. package/dist/schemas/RegistryItem.d.ts +55 -0
  593. package/dist/schemas/RegistryItem.d.ts.map +1 -0
  594. package/dist/schemas/index.d.ts +3 -0
  595. package/dist/schemas/index.d.ts.map +1 -0
  596. package/dist/schemas/index.js +29 -0
  597. package/dist/schemas/index.js.map +1 -0
  598. package/dist/schemas/index.mjs +4 -0
  599. package/dist/schemas/index.mjs.map +1 -0
  600. package/dist/styles/defaults.css +174 -0
  601. package/dist/styles/index.d.ts +7 -0
  602. package/dist/styles/index.d.ts.map +1 -0
  603. package/dist/styles/index.js +153 -0
  604. package/dist/styles/index.js.map +1 -0
  605. package/dist/styles/index.mjs +4 -0
  606. package/dist/styles/index.mjs.map +1 -0
  607. package/dist/styles/interaction-states.d.ts +96 -0
  608. package/dist/styles/interaction-states.d.ts.map +1 -0
  609. package/dist/styles/shared-variants.d.ts +120 -0
  610. package/dist/styles/shared-variants.d.ts.map +1 -0
  611. package/dist/styles/tokens.css +89 -0
  612. package/dist/utils/cn.d.ts +13 -0
  613. package/dist/utils/cn.d.ts.map +1 -0
  614. package/dist/utils/index.d.ts +2 -0
  615. package/dist/utils/index.d.ts.map +1 -0
  616. package/dist/utils/index.js +13 -0
  617. package/dist/utils/index.js.map +1 -0
  618. package/dist/utils/index.mjs +4 -0
  619. package/dist/utils/index.mjs.map +1 -0
  620. package/package.json +228 -0
  621. package/src/elements/Accordion/Accordion.stories.tsx +793 -0
  622. package/src/elements/Avatar/Avatar.stories.tsx +408 -0
  623. package/src/elements/Badge/Badge.stories.tsx +509 -0
  624. package/src/elements/Breadcrumbs/Breadcrumbs.stories.tsx +623 -0
  625. package/src/elements/Button/Button.stories.tsx +670 -0
  626. package/src/elements/ButtonGroup/ButtonGroup.stories.tsx +658 -0
  627. package/src/elements/Card/Card.stories.tsx +570 -0
  628. package/src/elements/Carousel/Carousel.stories.tsx +597 -0
  629. package/src/elements/Chart/Chart.stories.tsx +616 -0
  630. package/src/elements/Checkbox/Checkbox.stories.tsx +514 -0
  631. package/src/elements/CheckboxGroup/CheckboxGroup.stories.tsx +1514 -0
  632. package/src/elements/DatePicker/DatePicker.stories.tsx +341 -0
  633. package/src/elements/Dropdown/Dropdown.stories.tsx +397 -0
  634. package/src/elements/FileField/FileField.stories.tsx +1021 -0
  635. package/src/elements/FileField/FileProgress.stories.tsx +359 -0
  636. package/src/elements/FormLayout/FormLayout.stories.tsx +637 -0
  637. package/src/elements/Modal/Modal.stories.tsx +640 -0
  638. package/src/elements/NumberField/NumberField.stories.tsx +678 -0
  639. package/src/elements/OTPInput/OTPInput.stories.tsx +404 -0
  640. package/src/elements/Panel/Panel.stories.tsx +769 -0
  641. package/src/elements/Progress/Progress.stories.tsx +668 -0
  642. package/src/elements/RadioGroup/RadioGroup.stories.tsx +1153 -0
  643. package/src/elements/Resizable/Resizable.stories.tsx +374 -0
  644. package/src/elements/Select/Select.stories.tsx +362 -0
  645. package/src/elements/Skeleton/Skeleton.stories.tsx +284 -0
  646. package/src/elements/Switch/Switch.stories.tsx +441 -0
  647. package/src/elements/Table/Table.stories.tsx +790 -0
  648. package/src/elements/Tabs/Tabs.stories.tsx +661 -0
  649. package/src/elements/TextField/TextField.stories.tsx +1878 -0
  650. package/src/elements/TimeField/TimeField.stories.tsx +671 -0
  651. package/src/elements/Toast/Toast.stories.tsx +971 -0
  652. package/src/elements/Tooltip/Tooltip.stories.tsx +748 -0
  653. package/tailwind.config.js +10 -0
  654. package/tailwind.config.v3.js +10 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/elements/Resizable/hooks/useResizableContext.ts","../src/elements/Resizable/components/ResizablePanelGroup.tsx","../src/elements/Resizable/Resizable.types.ts","../src/elements/Resizable/components/ResizablePanel.tsx","../src/elements/Resizable/hooks/useResizable.ts","../src/elements/Resizable/components/ResizablePopover.tsx","../src/elements/Resizable/components/ResizableHandle.tsx"],"names":["createContext","useContext","useState","useRef","useCallback","useEffect","forwardRef","ResizablePanelGroup","useImperativeHandle","jsx","cn","z","cva","ResizablePanel","ResizablePopover","leftSize","rightSize","jsxs","DialogTrigger","AriaButton","Popover","Dialog","X","NumberField","Button","ResizableHandle","GripVertical","GripHorizontal","Fragment"],"mappings":"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","file":"chunk-SN5LFAP3.js","sourcesContent":["/**\n * Resizable Context Hook\n *\n * Provides context for ResizablePanelGroup compound components.\n * Manages panel sizes, registration, and screen reader announcements.\n */\n\nimport {\n createContext,\n useContext,\n useRef,\n useState,\n useCallback,\n useEffect,\n type ReactNode,\n} from 'react';\nimport type { ResizableContextValue, PanelInfo } from '../Resizable.types';\n\n// ============================================================================\n// Context\n// ============================================================================\n\n/**\n * Context for Resizable compound components.\n * Must be used within a ResizablePanelGroup.\n */\nexport const ResizableContext = createContext<ResizableContextValue | null>(\n null\n);\n\nResizableContext.displayName = 'ResizableContext';\n\n// ============================================================================\n// Hook\n// ============================================================================\n\n/**\n * Hook to access ResizableContext.\n * Throws an error if used outside of ResizablePanelGroup.\n *\n * @returns ResizableContextValue\n * @throws Error if used outside ResizablePanelGroup\n */\nexport function useResizableContext(): ResizableContextValue {\n const context = useContext(ResizableContext);\n\n if (!context) {\n throw new Error(\n 'useResizableContext must be used within a ResizablePanelGroup. ' +\n 'Make sure ResizablePanel and ResizableHandle are children of ResizablePanelGroup.'\n );\n }\n\n return context;\n}\n\n// ============================================================================\n// Provider Props\n// ============================================================================\n\ninterface ResizableProviderProps {\n direction: 'horizontal' | 'vertical';\n groupLabel: string;\n sizes?: number[];\n defaultSizes?: number[];\n onSizesChange?: (sizes: number[]) => void;\n children: ReactNode;\n}\n\n// ============================================================================\n// Provider Hook\n// ============================================================================\n\n/**\n * Hook to create ResizableContext value for the provider.\n * Handles both controlled and uncontrolled modes.\n */\nexport function useResizableProvider({\n direction,\n groupLabel,\n sizes: controlledSizes,\n onSizesChange,\n}: Omit<ResizableProviderProps, 'children'>): ResizableContextValue {\n // Internal state for uncontrolled mode\n const [internalSizes, setInternalSizes] = useState<number[]>([]);\n\n // Panel registration\n const [panels, setPanels] = useState<PanelInfo[]>([]);\n\n // Container ref for size calculations\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Live region ref for announcements\n const liveRegionRef = useRef<HTMLDivElement | null>(null);\n const announceTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Track if sizes have been initialized\n const sizesInitializedRef = useRef(false);\n\n // Determine if controlled\n const isControlled = controlledSizes !== undefined;\n const sizes = isControlled ? controlledSizes : internalSizes;\n\n /**\n * Update sizes - handles both controlled and uncontrolled modes.\n */\n const setSizes = useCallback(\n (newSizes: number[]) => {\n if (isControlled) {\n onSizesChange?.(newSizes);\n } else {\n setInternalSizes(newSizes);\n }\n },\n [isControlled, onSizesChange]\n );\n\n /**\n * Register a panel with the group.\n */\n const registerPanel = useCallback((index: number, info: PanelInfo) => {\n setPanels((prev) => {\n const newPanels = [...prev];\n newPanels[index] = info;\n return newPanels;\n });\n }, []);\n\n /**\n * Unregister a panel from the group.\n */\n const unregisterPanel = useCallback((index: number) => {\n setPanels((prev) => {\n const newPanels = [...prev];\n delete newPanels[index];\n return newPanels.filter(Boolean);\n });\n }, []);\n\n // Initialize sizes when panels are registered (uncontrolled mode only)\n useEffect(() => {\n // Skip if controlled or already initialized\n if (isControlled || sizesInitializedRef.current) return;\n\n // Get registered panel count\n const registeredPanels = panels.filter(Boolean);\n const panelCount = registeredPanels.length;\n\n // Wait until we have at least 2 panels (common case: panel + panel with handle between)\n if (panelCount < 2) return;\n\n // Check if sizes need initialization\n const needsInit = sizes.length < panelCount || sizes.some((s) => s === undefined);\n\n if (needsInit) {\n // Initialize with equal distribution using defaultSize from each panel if available\n const newSizes: number[] = [];\n const equalSize = 100 / panelCount;\n\n for (let i = 0; i < panelCount; i++) {\n newSizes[i] = equalSize;\n }\n\n sizesInitializedRef.current = true;\n setInternalSizes(newSizes);\n }\n }, [panels, sizes, isControlled]);\n\n // Cleanup live region on unmount\n useEffect(() => {\n return () => {\n if (announceTimeoutRef.current) {\n clearTimeout(announceTimeoutRef.current);\n }\n if (liveRegionRef.current) {\n document.body.removeChild(liveRegionRef.current);\n liveRegionRef.current = null;\n }\n };\n }, []);\n\n /**\n * Announce a message to screen readers via live region.\n */\n const announce = useCallback((message: string) => {\n // Create live region if it doesn't exist\n if (!liveRegionRef.current) {\n const liveRegion = document.createElement('div');\n liveRegion.setAttribute('aria-live', 'polite');\n liveRegion.setAttribute('aria-atomic', 'true');\n liveRegion.className = 'sr-only';\n liveRegion.style.cssText =\n 'position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;';\n document.body.appendChild(liveRegion);\n liveRegionRef.current = liveRegion;\n }\n\n // Update live region content\n liveRegionRef.current.textContent = message;\n\n // Clear previous timeout if any\n if (announceTimeoutRef.current) {\n clearTimeout(announceTimeoutRef.current);\n }\n\n // Clear after announcement\n announceTimeoutRef.current = setTimeout(() => {\n if (liveRegionRef.current) {\n liveRegionRef.current.textContent = '';\n }\n }, 1000);\n }, []);\n\n return {\n direction,\n groupLabel,\n sizes,\n setSizes,\n panels,\n registerPanel,\n unregisterPanel,\n announce,\n containerRef,\n };\n}\n","/**\n * ResizablePanelGroup Component\n *\n * Container component for resizable panel layouts.\n * Provides context for child panels and handles.\n *\n * @see {@link ../../docs/prd/resizable-prd.md} for full requirements\n */\n\nimport { forwardRef, useImperativeHandle, type ReactElement } from 'react';\nimport { cn } from '../../../utils/cn';\nimport type { ResizablePanelGroupProps } from '../Resizable.types';\nimport {\n ResizableContext,\n useResizableProvider,\n} from '../hooks/useResizableContext';\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * ResizablePanelGroup - Container for resizable panels.\n *\n * Provides context for child ResizablePanel and ResizableHandle components.\n * Supports both controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * <ResizablePanelGroup direction=\"horizontal\" groupLabel=\"Main layout\">\n * <ResizablePanel name=\"Sidebar\">Content</ResizablePanel>\n * <ResizableHandle />\n * <ResizablePanel name=\"Main\">Content</ResizablePanel>\n * </ResizablePanelGroup>\n * ```\n */\nexport const ResizablePanelGroup = forwardRef<\n HTMLDivElement | null,\n ResizablePanelGroupProps\n>(function ResizablePanelGroup(\n { direction, groupLabel, sizes, onSizesChange, className, children },\n ref\n): ReactElement {\n // Create context value with controlled/uncontrolled handling\n const contextValue = useResizableProvider({\n direction,\n groupLabel,\n sizes,\n onSizesChange,\n });\n\n // Expose containerRef to parent via forwarded ref\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(\n ref,\n () => contextValue.containerRef.current,\n [contextValue.containerRef]\n );\n\n return (\n <ResizableContext.Provider value={contextValue}>\n <div\n ref={contextValue.containerRef}\n role=\"group\"\n aria-label={`${groupLabel}, ${direction}`}\n data-direction={direction}\n className={cn(\n 'flex h-full w-full',\n direction === 'horizontal' ? 'flex-row' : 'flex-col',\n className\n )}\n >\n {children}\n </div>\n </ResizableContext.Provider>\n );\n});\n\nResizablePanelGroup.displayName = 'ResizablePanelGroup';\n","/**\n * Resizable Component Types\n *\n * Zod schemas and TypeScript types for the Resizable compound component.\n * Provides accessible, keyboard-navigable resizable panel layouts.\n *\n * @see {@link ../../docs/prd/resizable-prd.md} for full requirements\n */\n\nimport { z } from 'zod';\nimport { type ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Default minimum panel size (percentage).\n */\nexport const DEFAULT_MIN_SIZE = 10;\n\n/**\n * Default maximum panel size (percentage).\n */\nexport const DEFAULT_MAX_SIZE = 90;\n\n/**\n * Long-press threshold for touch devices (ms).\n * Tap (< threshold) opens popover, long-press (>= threshold) enables drag.\n */\nexport const LONG_PRESS_THRESHOLD = 300;\n\n// ============================================================================\n// Preset Type\n// ============================================================================\n\n/**\n * Size preset for quick adjustment via popover.\n */\nexport interface ResizePreset {\n /** Display label for the preset button */\n label: string;\n /** Size percentages for each panel (must sum to 100) */\n sizes: number[];\n}\n\n/**\n * Zod schema for ResizePreset validation.\n */\nexport const ResizePresetSchema = z.object({\n label: z.string().min(1),\n sizes: z.array(z.number().min(0).max(100)),\n});\n\n// ============================================================================\n// ResizablePanelGroup Props\n// ============================================================================\n\n/**\n * Zod schema for ResizablePanelGroup props.\n */\nexport const ResizablePanelGroupPropsSchema = z.object({\n /** Layout direction */\n direction: z.enum(['horizontal', 'vertical']),\n\n /** REQUIRED: Label for screen reader identification of this group */\n groupLabel: z.string().min(1),\n\n /** Controlled mode: current sizes as percentages */\n sizes: z.array(z.number().min(0).max(100)).optional(),\n\n /** Callback when sizes change */\n onSizesChange: z.function().optional(),\n\n /** Additional CSS classes */\n className: z.string().optional(),\n\n /** Panel children */\n children: z.custom<ReactNode>(),\n});\n\n/**\n * Props for ResizablePanelGroup component.\n */\nexport interface ResizablePanelGroupProps {\n /** Layout direction: 'horizontal' or 'vertical' */\n direction: 'horizontal' | 'vertical';\n\n /** REQUIRED: Label for screen reader identification (e.g., \"Main layout\") */\n groupLabel: string;\n\n /** Controlled mode: current sizes as percentages (must sum to 100) */\n sizes?: number[];\n\n /** Callback when sizes change */\n onSizesChange?: (sizes: number[]) => void;\n\n /** Additional CSS classes */\n className?: string;\n\n /** Panel and Handle children */\n children: ReactNode;\n}\n\n// ============================================================================\n// ResizablePanel Props\n// ============================================================================\n\n/**\n * Zod schema for ResizablePanel props.\n */\nexport const ResizablePanelPropsSchema = z.object({\n /** REQUIRED: Name for screen reader identification */\n name: z.string().min(1),\n\n /** Default size as percentage (auto-distributes equally if omitted) */\n defaultSize: z.number().min(0).max(100).optional(),\n\n /** Minimum size as percentage */\n minSize: z.number().min(0).max(100).optional().default(DEFAULT_MIN_SIZE),\n\n /** Maximum size as percentage */\n maxSize: z.number().min(0).max(100).optional().default(DEFAULT_MAX_SIZE),\n\n /** Whether panel can collapse to 0% */\n collapsible: z.boolean().optional().default(false),\n\n /** Callback when panel collapses */\n onCollapse: z.function().optional(),\n\n /** Callback when panel expands from collapsed */\n onExpand: z.function().optional(),\n\n /** Callback when panel resizes */\n onResize: z.function().optional(),\n\n /** Additional CSS classes */\n className: z.string().optional(),\n\n /** Panel content */\n children: z.custom<ReactNode>(),\n});\n\n/**\n * Props for ResizablePanel component.\n */\nexport interface ResizablePanelProps {\n /** REQUIRED: Name for screen reader identification (e.g., \"Sidebar\") */\n name: string;\n\n /** Default size as percentage (0-100). Auto-distributes equally if omitted. */\n defaultSize?: number;\n\n /** Minimum size as percentage (default: 10) */\n minSize?: number;\n\n /** Maximum size as percentage (default: 90) */\n maxSize?: number;\n\n /** Whether panel can collapse to 0% */\n collapsible?: boolean;\n\n /** Callback when panel collapses to 0% */\n onCollapse?: () => void;\n\n /** Callback when panel expands from collapsed state */\n onExpand?: () => void;\n\n /** Callback when panel size changes */\n onResize?: (size: number) => void;\n\n /** Additional CSS classes */\n className?: string;\n\n /** Panel content */\n children: ReactNode;\n}\n\n// ============================================================================\n// ResizableHandle Props\n// ============================================================================\n\n/**\n * Zod schema for ResizableHandle props.\n */\nexport const ResizableHandlePropsSchema = z.object({\n /** Whether to show the visual grip indicator */\n withHandle: z.boolean().optional().default(true),\n\n /** Size presets for quick adjustment */\n presets: z.array(ResizePresetSchema).optional(),\n\n /** Whether the handle is disabled */\n disabled: z.boolean().optional().default(false),\n\n /** Additional CSS classes */\n className: z.string().optional(),\n});\n\n/**\n * Props for ResizableHandle component.\n */\nexport interface ResizableHandleProps {\n /** Whether to show the visual grip indicator (default: true) */\n withHandle?: boolean;\n\n /** Size presets for quick adjustment via popover */\n presets?: ResizePreset[];\n\n /** Whether the handle is disabled */\n disabled?: boolean;\n\n /** Additional CSS classes */\n className?: string;\n}\n\n// ============================================================================\n// Context Types\n// ============================================================================\n\n/**\n * Panel registration info stored in context.\n */\nexport interface PanelInfo {\n name: string;\n minSize: number;\n maxSize: number;\n collapsible: boolean;\n}\n\n/**\n * Context value for ResizablePanelGroup.\n */\nexport interface ResizableContextValue {\n /** Layout direction */\n direction: 'horizontal' | 'vertical';\n\n /** Group label for screen reader announcements */\n groupLabel: string;\n\n /** Current panel sizes as percentages */\n sizes: number[];\n\n /** Update panel sizes */\n setSizes: (sizes: number[]) => void;\n\n /** Registered panel info */\n panels: PanelInfo[];\n\n /** Register a panel with the group */\n registerPanel: (index: number, info: PanelInfo) => void;\n\n /** Unregister a panel */\n unregisterPanel: (index: number) => void;\n\n /** Announce a message to screen readers */\n announce: (message: string) => void;\n\n /** Reference to the container element */\n containerRef: React.RefObject<HTMLDivElement | null>;\n}\n\n// ============================================================================\n// CVA Variants\n// ============================================================================\n\n/**\n * CVA variants for ResizableHandle styling.\n * Ensures 44x44px touch target for WCAG 2.2 AAA compliance.\n */\nexport const resizableHandleVariants = cva(\n [\n // Base styles - 44px touch target\n 'relative flex items-center justify-center',\n 'shrink-0',\n 'bg-transparent',\n 'transition-colors duration-150',\n // Focus styles\n 'focus-visible:outline-none focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2',\n // Touch target padding for accessibility\n 'touch-none select-none',\n ],\n {\n variants: {\n direction: {\n horizontal: [\n 'w-3 min-w-[12px]',\n 'cursor-col-resize',\n 'hover:bg-[var(--accent)]/50',\n // Ensure 44px touch target via padding\n 'before:absolute before:inset-y-0 before:-inset-x-4',\n 'before:min-w-[44px]',\n ],\n vertical: [\n 'h-3 min-h-[12px]',\n 'cursor-row-resize',\n 'hover:bg-[var(--accent)]/50',\n // Ensure 44px touch target via padding\n 'before:absolute before:inset-x-0 before:-inset-y-4',\n 'before:min-h-[44px]',\n ],\n },\n disabled: {\n true: 'cursor-not-allowed opacity-50 pointer-events-none',\n false: '',\n },\n isDragging: {\n true: 'bg-[var(--accent)]',\n false: '',\n },\n },\n defaultVariants: {\n direction: 'horizontal',\n disabled: false,\n isDragging: false,\n },\n }\n);\n\n/**\n * CVA variants for the grip indicator inside the handle.\n */\nexport const resizableGripVariants = cva(\n [\n 'flex items-center justify-center',\n 'rounded-full',\n 'bg-[var(--border)]',\n 'text-[var(--menu-muted)]',\n ],\n {\n variants: {\n direction: {\n horizontal: 'h-8 w-1',\n vertical: 'h-1 w-8',\n },\n },\n defaultVariants: {\n direction: 'horizontal',\n },\n }\n);\n\n/**\n * Type for resizableHandleVariants props.\n */\nexport type ResizableHandleVariantProps = VariantProps<\n typeof resizableHandleVariants\n>;\n","/**\n * ResizablePanel Component\n *\n * Individual panel within a ResizablePanelGroup.\n * Registers with context and applies size from group state.\n *\n * @see {@link ../../docs/prd/resizable-prd.md} for full requirements\n */\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ReactElement,\n} from 'react';\nimport { cn } from '../../../utils/cn';\nimport type { ResizablePanelProps } from '../Resizable.types';\nimport { DEFAULT_MIN_SIZE, DEFAULT_MAX_SIZE } from '../Resizable.types';\nimport { useResizableContext } from '../hooks/useResizableContext';\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * ResizablePanel - Individual panel in a resizable layout.\n *\n * Must be used within a ResizablePanelGroup.\n * Registers itself with context for size management.\n *\n * @example\n * ```tsx\n * <ResizablePanel name=\"Sidebar\" defaultSize={25} minSize={15} maxSize={40}>\n * <SidebarContent />\n * </ResizablePanel>\n * ```\n */\nexport const ResizablePanel = forwardRef<HTMLDivElement, ResizablePanelProps>(\n function ResizablePanel(\n {\n name,\n defaultSize: _defaultSize,\n minSize = DEFAULT_MIN_SIZE,\n maxSize = DEFAULT_MAX_SIZE,\n collapsible = false,\n onCollapse,\n onExpand,\n onResize,\n className,\n children,\n },\n ref\n ): ReactElement {\n const { sizes, registerPanel, unregisterPanel, containerRef } =\n useResizableContext();\n\n // Internal ref for DOM element\n const internalRef = useRef<HTMLDivElement>(null);\n\n // Track panel index based on DOM order (use state to trigger re-renders)\n const [panelIndex, setPanelIndex] = useState<number>(-1);\n const prevSizeRef = useRef<number | null>(null);\n const isRegisteredRef = useRef(false);\n const registeredIndexRef = useRef<number>(-1);\n\n // Calculate panel index from DOM position (useEffect runs after refs are set)\n useEffect(() => {\n const panel = internalRef.current;\n const container = containerRef.current;\n if (!panel || !container) return;\n\n // Count panels before this one in the DOM\n const allPanels = container.querySelectorAll('[data-resizable-panel]');\n let foundIndex = -1;\n for (let i = 0; i < allPanels.length; i++) {\n if (allPanels[i] === panel) {\n foundIndex = i;\n break;\n }\n }\n\n if (foundIndex === -1) return;\n\n // Update index state (triggers re-render)\n if (panelIndex !== foundIndex) {\n setPanelIndex(foundIndex);\n }\n\n // Register/update panel info\n if (!isRegisteredRef.current) {\n isRegisteredRef.current = true;\n registeredIndexRef.current = foundIndex;\n registerPanel(foundIndex, {\n name,\n minSize,\n maxSize,\n collapsible,\n });\n }\n\n return () => {\n if (isRegisteredRef.current) {\n unregisterPanel(registeredIndexRef.current);\n isRegisteredRef.current = false;\n }\n };\n }, [containerRef, registerPanel, unregisterPanel, name, minSize, maxSize, collapsible, panelIndex]);\n\n // Get current size for this panel\n const currentSize = panelIndex >= 0 ? sizes[panelIndex] ?? 50 : 50;\n\n // Handle collapse/expand callbacks\n useEffect(() => {\n if (prevSizeRef.current === null) {\n prevSizeRef.current = currentSize;\n return;\n }\n\n const wasCollapsed = prevSizeRef.current === 0;\n const isCollapsed = currentSize === 0;\n\n if (!wasCollapsed && isCollapsed && onCollapse) {\n onCollapse();\n } else if (wasCollapsed && !isCollapsed && onExpand) {\n onExpand();\n }\n\n if (onResize && prevSizeRef.current !== currentSize) {\n onResize(currentSize);\n }\n\n prevSizeRef.current = currentSize;\n }, [currentSize, onCollapse, onExpand, onResize]);\n\n return (\n <div\n ref={(node) => {\n // Update internal ref\n (internalRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n // Forward to external ref if provided\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n }}\n role=\"region\"\n aria-label={name}\n data-resizable-panel=\"\"\n data-panel-name={name}\n data-panel-index={panelIndex}\n data-collapsed={currentSize === 0}\n style={{\n flexBasis: `${currentSize}%`,\n flexGrow: 0,\n flexShrink: 0,\n overflow: 'hidden',\n }}\n className={cn('relative', className)}\n >\n {children}\n </div>\n );\n }\n);\n\nResizablePanel.displayName = 'ResizablePanel';\n","/**\n * useResizable Hook\n *\n * Core resize logic for handling drag interactions.\n * Manages pointer events, calculates size changes, and enforces constraints.\n *\n * @see {@link ../../docs/prd/resizable-prd.md} for full requirements\n */\n\nimport { useCallback, useRef, useState, useEffect } from 'react';\nimport type { PanelInfo } from '../Resizable.types';\nimport { LONG_PRESS_THRESHOLD } from '../Resizable.types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface UseResizableOptions {\n /** Layout direction */\n direction: 'horizontal' | 'vertical';\n /** Current panel sizes */\n sizes: number[];\n /** Update panel sizes */\n setSizes: (sizes: number[]) => void;\n /** Registered panel info */\n panels: PanelInfo[];\n /** Reference to container element for size calculations */\n containerRef: React.RefObject<HTMLDivElement | null>;\n /** Index of the left/top panel this handle controls */\n leftPanelIndex: number;\n /** Index of the right/bottom panel this handle controls */\n rightPanelIndex: number;\n /** Whether the handle is disabled */\n disabled?: boolean;\n /** Callback to announce size changes */\n announce?: (message: string) => void;\n /** Group label for announcements */\n groupLabel?: string;\n /** Callback when popover should open */\n onOpenPopover?: () => void;\n}\n\ninterface UseResizableReturn {\n /** Whether currently dragging */\n isDragging: boolean;\n /** Pointer down handler for drag start */\n handlePointerDown: (event: React.PointerEvent) => void;\n /** Keyboard handler for arrow key resizing */\n handleKeyDown: (event: React.KeyboardEvent) => void;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Clamp a size value within min/max bounds.\n */\nfunction clampSize(size: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, size));\n}\n\n/**\n * Calculate new sizes when adjusting by a delta.\n * Only affects adjacent panels - other panels remain unchanged.\n */\nfunction calculateNewSizes(\n sizes: number[],\n panels: PanelInfo[],\n leftIndex: number,\n rightIndex: number,\n delta: number\n): number[] {\n const newSizes = [...sizes];\n const leftPanel = panels[leftIndex];\n const rightPanel = panels[rightIndex];\n\n if (!leftPanel || !rightPanel) return sizes;\n\n // Current sizes\n const leftSize = sizes[leftIndex] ?? 50;\n const rightSize = sizes[rightIndex] ?? 50;\n\n // Calculate new sizes\n let newLeftSize = leftSize + delta;\n let newRightSize = rightSize - delta;\n\n // Apply constraints\n const leftMin = leftPanel.collapsible ? 0 : leftPanel.minSize;\n const leftMax = leftPanel.maxSize;\n const rightMin = rightPanel.collapsible ? 0 : rightPanel.minSize;\n const rightMax = rightPanel.maxSize;\n\n // Clamp left panel\n newLeftSize = clampSize(newLeftSize, leftMin, leftMax);\n\n // Adjust right panel to compensate\n newRightSize = leftSize + rightSize - newLeftSize;\n\n // Clamp right panel\n newRightSize = clampSize(newRightSize, rightMin, rightMax);\n\n // Re-adjust left panel if right was clamped\n newLeftSize = leftSize + rightSize - newRightSize;\n\n newSizes[leftIndex] = newLeftSize;\n newSizes[rightIndex] = newRightSize;\n\n return newSizes;\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\n/**\n * Hook for managing resize interactions.\n *\n * @param options - Resize options\n * @returns Drag state and event handlers\n */\nexport function useResizable({\n direction,\n sizes,\n setSizes,\n panels,\n containerRef,\n leftPanelIndex,\n rightPanelIndex,\n disabled = false,\n announce,\n groupLabel,\n onOpenPopover,\n}: UseResizableOptions): UseResizableReturn {\n const [isDragging, setIsDragging] = useState(false);\n\n // Track drag start position and sizes\n const dragStartRef = useRef<{\n position: number;\n sizes: number[];\n containerSize: number;\n } | null>(null);\n\n // Track long press for touch interaction\n const longPressTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pointerDownTimeRef = useRef<number>(0);\n const wasLongPressRef = useRef<boolean>(false);\n\n // Store latest values in refs for stable event handlers\n const panelsRef = useRef(panels);\n const sizesRef = useRef(sizes);\n const setSizesRef = useRef(setSizes);\n\n // Refs for stable event listener references (prevents memory leaks)\n const handlePointerMoveRef = useRef<(e: PointerEvent) => void>(() => {});\n const handlePointerUpRef = useRef<() => void>(() => {});\n\n // Keep refs updated\n useEffect(() => {\n panelsRef.current = panels;\n sizesRef.current = sizes;\n setSizesRef.current = setSizes;\n }, [panels, sizes, setSizes]);\n\n /**\n * Get container size in the resize direction.\n */\n const getContainerSize = useCallback((): number => {\n const container = containerRef.current;\n if (!container) return 0;\n return direction === 'horizontal'\n ? container.offsetWidth\n : container.offsetHeight;\n }, [containerRef, direction]);\n\n /**\n * Convert pixel delta to percentage delta.\n */\n const pixelsToPercent = useCallback(\n (pixels: number): number => {\n const containerSize = getContainerSize();\n if (containerSize === 0) return 0;\n return (pixels / containerSize) * 100;\n },\n [getContainerSize]\n );\n\n // Stable wrapper functions for event listeners (prevent memory leaks)\n // These are created once and never change, using refs to call current handlers\n const onPointerMove = useCallback((e: PointerEvent) => {\n handlePointerMoveRef.current(e);\n }, []);\n\n const onPointerUp = useCallback(() => {\n handlePointerUpRef.current();\n }, []);\n\n /**\n * Handle pointer move during drag.\n * Uses refs to avoid stale closures and prevent listener removal on re-render.\n */\n const handlePointerMove = useCallback(\n (event: PointerEvent) => {\n if (!dragStartRef.current || disabled) return;\n\n const position =\n direction === 'horizontal' ? event.clientX : event.clientY;\n const delta = position - dragStartRef.current.position;\n const percentDelta = pixelsToPercent(delta);\n\n const newSizes = calculateNewSizes(\n dragStartRef.current.sizes,\n panelsRef.current,\n leftPanelIndex,\n rightPanelIndex,\n percentDelta\n );\n\n setSizesRef.current(newSizes);\n },\n [\n direction,\n disabled,\n leftPanelIndex,\n pixelsToPercent,\n rightPanelIndex,\n ]\n );\n\n /**\n * Handle pointer up to end drag.\n * Uses refs to avoid stale closures.\n */\n const handlePointerUp = useCallback(() => {\n // Clear long press timer\n if (longPressTimerRef.current) {\n clearTimeout(longPressTimerRef.current);\n longPressTimerRef.current = null;\n }\n\n // Check if this was a tap (not a long press or drag)\n const duration = Date.now() - pointerDownTimeRef.current;\n const wasTap = duration < LONG_PRESS_THRESHOLD && !wasLongPressRef.current;\n\n if (wasTap && onOpenPopover && !disabled) {\n onOpenPopover();\n }\n\n // End drag\n if (isDragging) {\n setIsDragging(false);\n\n // Announce final size\n const leftPanel = panelsRef.current[leftPanelIndex];\n const newSize = Math.round(sizesRef.current[leftPanelIndex] ?? 50);\n if (announce && leftPanel && groupLabel) {\n announce(\n `${leftPanel.name} in ${groupLabel} resized to ${newSize} percent`\n );\n }\n }\n\n dragStartRef.current = null;\n wasLongPressRef.current = false;\n\n // Remove document listeners (use stable wrappers to match what was added)\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n document.removeEventListener('pointercancel', onPointerUp);\n\n // Reset cursor\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n }, [\n announce,\n disabled,\n groupLabel,\n isDragging,\n leftPanelIndex,\n onOpenPopover,\n onPointerMove,\n onPointerUp,\n ]);\n\n // Keep handler refs updated so stable wrappers call the latest handlers\n useEffect(() => {\n handlePointerMoveRef.current = handlePointerMove;\n handlePointerUpRef.current = handlePointerUp;\n });\n\n /**\n * Handle pointer down to start drag.\n */\n const handlePointerDown = useCallback(\n (event: React.PointerEvent) => {\n if (disabled) return;\n\n // Prevent text selection during drag\n event.preventDefault();\n\n const position =\n direction === 'horizontal' ? event.clientX : event.clientY;\n pointerDownTimeRef.current = Date.now();\n wasLongPressRef.current = false;\n\n // Store initial state\n dragStartRef.current = {\n position,\n sizes: [...sizes],\n containerSize: getContainerSize(),\n };\n\n // Set up long press timer for touch\n longPressTimerRef.current = setTimeout(() => {\n wasLongPressRef.current = true;\n setIsDragging(true);\n\n // Set cursor during drag\n document.body.style.cursor =\n direction === 'horizontal' ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n }, LONG_PRESS_THRESHOLD);\n\n // Add document listeners (use stable wrappers to prevent memory leaks)\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', onPointerUp);\n document.addEventListener('pointercancel', onPointerUp);\n\n // For mouse, start dragging immediately\n if (event.pointerType === 'mouse') {\n // Clear long press timer for mouse - drag starts immediately\n if (longPressTimerRef.current) {\n clearTimeout(longPressTimerRef.current);\n longPressTimerRef.current = null;\n }\n wasLongPressRef.current = true;\n setIsDragging(true);\n document.body.style.cursor =\n direction === 'horizontal' ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n }\n },\n [\n direction,\n disabled,\n getContainerSize,\n onPointerMove,\n onPointerUp,\n sizes,\n ]\n );\n\n /**\n * Handle keyboard navigation.\n */\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n const step = event.shiftKey ? 10 : 1;\n let delta = 0;\n\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n delta = -step;\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n delta = step;\n break;\n case 'Home': {\n // Set to minimum\n const leftPanel = panels[leftPanelIndex];\n if (leftPanel) {\n const minSize = leftPanel.collapsible ? 0 : leftPanel.minSize;\n delta = minSize - (sizes[leftPanelIndex] ?? 50);\n }\n break;\n }\n case 'End': {\n // Set to maximum\n const leftPanel = panels[leftPanelIndex];\n if (leftPanel) {\n delta = leftPanel.maxSize - (sizes[leftPanelIndex] ?? 50);\n }\n break;\n }\n case 'Enter':\n case ' ':\n // Open popover\n event.preventDefault();\n onOpenPopover?.();\n return;\n default:\n return;\n }\n\n if (delta !== 0) {\n event.preventDefault();\n const newSizes = calculateNewSizes(\n sizes,\n panels,\n leftPanelIndex,\n rightPanelIndex,\n delta\n );\n setSizes(newSizes);\n\n // Announce the change\n const leftPanel = panels[leftPanelIndex];\n const newSize = Math.round(newSizes[leftPanelIndex] ?? 50);\n if (announce && leftPanel && groupLabel) {\n announce(\n `${leftPanel.name} in ${groupLabel} resized to ${newSize} percent`\n );\n }\n }\n },\n [\n announce,\n disabled,\n groupLabel,\n leftPanelIndex,\n onOpenPopover,\n panels,\n rightPanelIndex,\n setSizes,\n sizes,\n ]\n );\n\n // Cleanup on unmount only (empty deps = only runs on unmount)\n useEffect(() => {\n // Capture stable wrappers for cleanup\n const moveHandler = onPointerMove;\n const upHandler = onPointerUp;\n return () => {\n if (longPressTimerRef.current) {\n clearTimeout(longPressTimerRef.current);\n }\n // Use stable wrappers for cleanup\n document.removeEventListener('pointermove', moveHandler);\n document.removeEventListener('pointerup', upHandler);\n document.removeEventListener('pointercancel', upHandler);\n };\n }, [onPointerMove, onPointerUp]);\n\n return {\n isDragging,\n handlePointerDown,\n handleKeyDown,\n };\n}\n","/**\n * ResizablePopover Component\n *\n * Precision control popover for resizable panels.\n * Shows linked NumberFields and preset buttons for exact sizing.\n *\n * @see {@link ../../docs/prd/resizable-prd.md} for full requirements\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n useEffect,\n useRef,\n type ReactElement,\n} from 'react';\nimport {\n DialogTrigger,\n Popover,\n Dialog,\n Button as AriaButton,\n} from 'react-aria-components';\nimport { X } from 'lucide-react';\nimport { cn } from '../../../utils/cn';\nimport type { ResizePreset, PanelInfo } from '../Resizable.types';\nimport { NumberField } from '../../NumberField/NumberField';\nimport { Button } from '../../Button/Button';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface ResizablePopoverProps {\n /** Whether popover is open */\n isOpen: boolean;\n /** Callback when open state changes */\n onOpenChange: (isOpen: boolean) => void;\n /** Group label for the title */\n groupLabel: string;\n /** Left/top panel info */\n leftPanel: PanelInfo;\n /** Right/bottom panel info */\n rightPanel: PanelInfo;\n /** Left/top panel size (percentage) */\n leftSize: number;\n /** Right/bottom panel size (percentage) */\n rightSize: number;\n /** Callback when sizes change */\n onSizesChange: (leftSize: number, rightSize: number) => void;\n /** Size presets */\n presets?: ResizePreset[];\n /** The trigger element (handle) */\n triggerRef: React.RefObject<HTMLDivElement | null>;\n /** Direction for positioning */\n direction: 'horizontal' | 'vertical';\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * ResizablePopover - Precision control for panel sizes.\n *\n * Features:\n * - Two linked NumberFields that sum to 100%\n * - Preset buttons for quick sizing\n * - Cancel reverts to original, Close keeps changes\n * - Live preview as values change\n */\nexport const ResizablePopover = forwardRef<HTMLDivElement, ResizablePopoverProps>(\n function ResizablePopover(\n {\n isOpen,\n onOpenChange,\n groupLabel,\n leftPanel,\n rightPanel,\n leftSize,\n rightSize,\n onSizesChange,\n presets,\n triggerRef,\n direction,\n },\n _ref\n ): ReactElement | null {\n // Store original sizes when popover opens (for cancel)\n const [originalSizes, setOriginalSizes] = useState({ left: leftSize, right: rightSize });\n\n // Capture original sizes only when popover transitions from closed to open\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (isOpen && !wasOpenRef.current) {\n setOriginalSizes({ left: leftSize, right: rightSize });\n }\n wasOpenRef.current = isOpen;\n }, [isOpen, leftSize, rightSize]);\n\n /**\n * Handle left panel size change.\n * Auto-adjusts right panel to sum to 100%.\n */\n const handleLeftChange = useCallback(\n (value: number | null) => {\n if (value === null) return;\n\n // Clamp to valid range\n const newLeft = Math.max(\n leftPanel.collapsible ? 0 : leftPanel.minSize,\n Math.min(leftPanel.maxSize, value)\n );\n\n // Calculate right size (remaining percentage)\n const newRight = 100 - newLeft;\n\n // Check right panel constraints\n const rightMin = rightPanel.collapsible ? 0 : rightPanel.minSize;\n const rightMax = rightPanel.maxSize;\n\n if (newRight < rightMin || newRight > rightMax) {\n // Can't make this change - right panel would be out of bounds\n return;\n }\n\n onSizesChange(newLeft, newRight);\n },\n [leftPanel, rightPanel, onSizesChange]\n );\n\n /**\n * Handle right panel size change.\n * Auto-adjusts left panel to sum to 100%.\n */\n const handleRightChange = useCallback(\n (value: number | null) => {\n if (value === null) return;\n\n // Clamp to valid range\n const newRight = Math.max(\n rightPanel.collapsible ? 0 : rightPanel.minSize,\n Math.min(rightPanel.maxSize, value)\n );\n\n // Calculate left size (remaining percentage)\n const newLeft = 100 - newRight;\n\n // Check left panel constraints\n const leftMin = leftPanel.collapsible ? 0 : leftPanel.minSize;\n const leftMax = leftPanel.maxSize;\n\n if (newLeft < leftMin || newLeft > leftMax) {\n // Can't make this change - left panel would be out of bounds\n return;\n }\n\n onSizesChange(newLeft, newRight);\n },\n [leftPanel, rightPanel, onSizesChange]\n );\n\n /**\n * Apply a preset.\n */\n const handlePreset = useCallback(\n (preset: ResizePreset) => {\n const leftSize = preset.sizes[0];\n const rightSize = preset.sizes[1];\n if (leftSize !== undefined && rightSize !== undefined) {\n onSizesChange(leftSize, rightSize);\n }\n },\n [onSizesChange]\n );\n\n /**\n * Handle cancel - revert to original sizes.\n */\n const handleCancel = useCallback(() => {\n onSizesChange(originalSizes.left, originalSizes.right);\n onOpenChange(false);\n }, [onSizesChange, onOpenChange, originalSizes]);\n\n /**\n * Handle close (X button or click outside) - keep changes.\n */\n const handleClose = useCallback(() => {\n onOpenChange(false);\n }, [onOpenChange]);\n\n if (!isOpen) return null;\n\n // Popover placement based on direction\n const placement = direction === 'horizontal' ? 'bottom' : 'right';\n\n return (\n <DialogTrigger isOpen={isOpen} onOpenChange={onOpenChange}>\n <AriaButton className=\"sr-only\">Open resize controls</AriaButton>\n <Popover\n triggerRef={triggerRef}\n placement={placement}\n offset={8}\n className={cn(\n 'w-72',\n 'rounded-lg border border-[var(--border)]',\n 'bg-[var(--popover)] text-[var(--popover-foreground)]',\n 'shadow-lg',\n 'outline-none',\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95'\n )}\n >\n <Dialog className=\"outline-none\">\n {/* Header */}\n <div className=\"flex items-center justify-between border-b border-[var(--border)] px-4 py-3\">\n <h3 className=\"text-sm font-medium\">Resize: {groupLabel}</h3>\n <AriaButton\n onPress={handleClose}\n className={cn(\n 'inline-flex items-center justify-center rounded-md',\n 'min-h-[44px] min-w-[44px]',\n 'text-[var(--menu-muted)]',\n 'hover:bg-[var(--accent)] hover:text-[var(--accent-foreground)]',\n 'focus-visible:outline-none focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2'\n )}\n aria-label=\"Close\"\n >\n <X className=\"h-4 w-4\" />\n </AriaButton>\n </div>\n\n {/* Content */}\n <div className=\"space-y-4 px-4 py-4\">\n {/* Left/Top Panel NumberField */}\n <div>\n <NumberField\n label={`${leftPanel.name} (%)`}\n value={Math.round(leftSize)}\n onChange={handleLeftChange}\n minValue={leftPanel.collapsible ? 0 : leftPanel.minSize}\n maxValue={leftPanel.maxSize}\n step={1}\n stepperLayout=\"sides\"\n />\n </div>\n\n {/* Right/Bottom Panel NumberField */}\n <div>\n <NumberField\n label={`${rightPanel.name} (%)`}\n value={Math.round(rightSize)}\n onChange={handleRightChange}\n minValue={rightPanel.collapsible ? 0 : rightPanel.minSize}\n maxValue={rightPanel.maxSize}\n step={1}\n stepperLayout=\"sides\"\n />\n </div>\n\n {/* Presets */}\n {presets && presets.length > 0 && (\n <div className=\"border-t border-[var(--border)] pt-4\">\n <div className=\"mb-2 text-xs font-medium text-[var(--menu-muted)]\">\n Presets\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {presets.map((preset, index) => (\n <Button\n key={index}\n variant=\"outline\"\n size=\"sm\"\n onPress={() => handlePreset(preset)}\n >\n {preset.label}\n </Button>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex justify-end border-t border-[var(--border)] px-4 py-3\">\n <Button variant=\"ghost\" size=\"sm\" onPress={handleCancel}>\n Cancel\n </Button>\n </div>\n </Dialog>\n </Popover>\n </DialogTrigger>\n );\n }\n);\n\nResizablePopover.displayName = 'ResizablePopover';\n","/**\n * ResizableHandle Component\n *\n * Draggable handle between resizable panels.\n * Provides keyboard navigation, ARIA slider semantics, and precision popover.\n *\n * @see {@link ../../docs/prd/resizable-prd.md} for full requirements\n */\n\nimport {\n forwardRef,\n useRef,\n useEffect,\n useState,\n useCallback,\n type ReactElement,\n} from 'react';\nimport { GripVertical, GripHorizontal } from 'lucide-react';\nimport { cn } from '../../../utils/cn';\nimport type { ResizableHandleProps } from '../Resizable.types';\nimport {\n resizableHandleVariants,\n resizableGripVariants,\n DEFAULT_MIN_SIZE,\n DEFAULT_MAX_SIZE,\n} from '../Resizable.types';\nimport { useResizableContext } from '../hooks/useResizableContext';\nimport { useResizable } from '../hooks/useResizable';\nimport { ResizablePopover } from './ResizablePopover';\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * ResizableHandle - Draggable handle between panels.\n *\n * Must be used within a ResizablePanelGroup, between ResizablePanels.\n * Provides drag, keyboard, and popover controls for resizing.\n *\n * @example\n * ```tsx\n * <ResizableHandle\n * presets={[\n * { label: 'Equal', sizes: [50, 50] },\n * { label: 'Focus Left', sizes: [70, 30] },\n * ]}\n * />\n * ```\n */\nexport const ResizableHandle = forwardRef<HTMLDivElement, ResizableHandleProps>(\n function ResizableHandle(\n { withHandle = true, presets, disabled = false, className },\n ref\n ): ReactElement {\n const {\n direction,\n groupLabel,\n sizes,\n setSizes,\n panels,\n announce,\n containerRef,\n } = useResizableContext();\n\n // Track handle index based on DOM position\n const internalRef = useRef<HTMLDivElement>(null);\n const handleRef = (ref as React.RefObject<HTMLDivElement>) || internalRef;\n const [handleIndex, setHandleIndex] = useState(0);\n\n // Calculate handle index based on DOM position\n useEffect(() => {\n const handle = handleRef.current;\n const container = containerRef.current;\n if (!handle || !container) return;\n\n // Count handles before this one\n const handles = container.querySelectorAll('[role=\"slider\"]');\n let index = 0;\n handles.forEach((h, i) => {\n if (h === handle) {\n index = i;\n }\n });\n setHandleIndex(index);\n }, [containerRef, handleRef]);\n\n // Handle controls panels at handleIndex and handleIndex + 1\n const leftPanelIndex = handleIndex;\n const rightPanelIndex = handleIndex + 1;\n\n // Get adjacent panel info\n const leftPanel = panels[leftPanelIndex];\n const rightPanel = panels[rightPanelIndex];\n\n // Get current sizes for adjacent panels\n const leftSize = sizes[leftPanelIndex] ?? 50;\n const rightSize = sizes[rightPanelIndex] ?? 50;\n\n // Popover state\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n\n // Handle size changes from popover\n const handlePopoverSizesChange = useCallback(\n (newLeftSize: number, newRightSize: number) => {\n const newSizes = [...sizes];\n newSizes[leftPanelIndex] = newLeftSize;\n newSizes[rightPanelIndex] = newRightSize;\n setSizes(newSizes);\n },\n [sizes, setSizes, leftPanelIndex, rightPanelIndex]\n );\n\n // Use resize hook for drag/keyboard handling\n const { isDragging, handlePointerDown, handleKeyDown } = useResizable({\n direction,\n sizes,\n setSizes,\n panels,\n containerRef,\n leftPanelIndex,\n rightPanelIndex,\n disabled,\n announce,\n groupLabel,\n onOpenPopover: () => setIsPopoverOpen(true),\n });\n\n // Build aria-label with panel names and group context\n const ariaLabel =\n leftPanel && rightPanel\n ? `Resize handle between ${leftPanel.name} and ${rightPanel.name} in ${groupLabel}`\n : `Resize handle in ${groupLabel}`;\n\n // Select grip icon based on direction\n const GripIcon = direction === 'horizontal' ? GripVertical : GripHorizontal;\n\n // Default panel info for popover when panels not registered yet\n const leftPanelInfo = leftPanel ?? {\n name: 'Panel 1',\n minSize: DEFAULT_MIN_SIZE,\n maxSize: DEFAULT_MAX_SIZE,\n collapsible: false,\n };\n const rightPanelInfo = rightPanel ?? {\n name: 'Panel 2',\n minSize: DEFAULT_MIN_SIZE,\n maxSize: DEFAULT_MAX_SIZE,\n collapsible: false,\n };\n\n return (\n <>\n <div\n ref={handleRef}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={ariaLabel}\n aria-valuenow={Math.round(leftSize)}\n aria-valuemin={leftPanel?.collapsible ? 0 : (leftPanel?.minSize ?? 0)}\n aria-valuemax={leftPanel?.maxSize ?? 100}\n aria-orientation={direction}\n aria-disabled={disabled}\n data-direction={direction}\n data-dragging={isDragging}\n data-disabled={disabled}\n onPointerDown={handlePointerDown}\n onKeyDown={handleKeyDown}\n className={cn(\n resizableHandleVariants({\n direction,\n disabled,\n isDragging,\n }),\n className\n )}\n >\n {withHandle && (\n <div\n className={cn(resizableGripVariants({ direction }))}\n aria-hidden=\"true\"\n >\n <GripIcon className=\"h-4 w-4\" />\n </div>\n )}\n </div>\n\n {/* Precision Control Popover */}\n <ResizablePopover\n isOpen={isPopoverOpen}\n onOpenChange={setIsPopoverOpen}\n groupLabel={groupLabel}\n leftPanel={leftPanelInfo}\n rightPanel={rightPanelInfo}\n leftSize={leftSize}\n rightSize={rightSize}\n onSizesChange={handlePopoverSizesChange}\n presets={presets}\n triggerRef={handleRef}\n direction={direction}\n />\n </>\n );\n }\n);\n\nResizableHandle.displayName = 'ResizableHandle';\n\n// Re-export presets prop type for consumers\nexport type { ResizePreset } from '../Resizable.types';\n"]}
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ var zod = require('zod');
4
+
5
+ var BaseComponentPropsSchema = zod.z.object({
6
+ // Styling
7
+ className: zod.z.string().optional(),
8
+ // React
9
+ children: zod.z.any().optional(),
10
+ // ReactNode not directly supported by Zod
11
+ id: zod.z.string().optional(),
12
+ // Accessibility (WCAG 2.2 AA requirements)
13
+ "aria-label": zod.z.string().optional(),
14
+ "aria-labelledby": zod.z.string().optional(),
15
+ "aria-describedby": zod.z.string().optional(),
16
+ "aria-live": zod.z.enum(["off", "polite", "assertive"]).optional(),
17
+ "aria-hidden": zod.z.boolean().optional(),
18
+ // Testing & Development
19
+ "data-testid": zod.z.string().optional()
20
+ });
21
+
22
+ exports.BaseComponentPropsSchema = BaseComponentPropsSchema;
23
+ //# sourceMappingURL=chunk-T4COXKQ3.js.map
24
+ //# sourceMappingURL=chunk-T4COXKQ3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schemas/BaseComponentProps.ts"],"names":["z"],"mappings":";;;;AASO,IAAM,wBAAA,GAA2BA,MAAE,MAAA,CAAO;AAAA;AAAA,EAE/C,SAAA,EAAWA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAG/B,QAAA,EAAUA,KAAA,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS;AAAA;AAAA,EAC3B,EAAA,EAAIA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAGxB,YAAA,EAAcA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,iBAAA,EAAmBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACvC,kBAAA,EAAoBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxC,WAAA,EAAaA,MAAE,IAAA,CAAK,CAAC,OAAO,QAAA,EAAU,WAAW,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC7D,aAAA,EAAeA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA;AAAA,EAGpC,aAAA,EAAeA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC5B,CAAC","file":"chunk-T4COXKQ3.js","sourcesContent":["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"]}
@@ -0,0 +1,125 @@
1
+ 'use strict';
2
+
3
+ var chunkT4COXKQ3_js = require('./chunk-T4COXKQ3.js');
4
+ var zod = require('zod');
5
+
6
+ var TooltipSideSchema = zod.z.enum(["top", "bottom", "left", "right"]);
7
+ var TooltipTriggerModeSchema = zod.z.enum(["hover", "focus"]);
8
+ var TooltipPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
9
+ /**
10
+ * Show delay in milliseconds
11
+ * Time to wait before showing tooltip on hover
12
+ * @default 700
13
+ */
14
+ delay: zod.z.number().min(0).optional().default(700),
15
+ /**
16
+ * Hide delay in milliseconds
17
+ * Time to wait before hiding tooltip after mouse leave
18
+ * @default 300
19
+ */
20
+ closeDelay: zod.z.number().min(0).optional().default(300),
21
+ /**
22
+ * Trigger mode
23
+ * - 'hover': Show on hover and focus (default)
24
+ * - 'focus': Show only on keyboard focus (no hover)
25
+ * @default 'hover'
26
+ */
27
+ trigger: TooltipTriggerModeSchema.optional().default("hover"),
28
+ /**
29
+ * Controlled open state
30
+ * When provided, tooltip becomes controlled
31
+ */
32
+ isOpen: zod.z.boolean().optional(),
33
+ /**
34
+ * Default open state for uncontrolled mode
35
+ * @default false
36
+ */
37
+ defaultOpen: zod.z.boolean().optional().default(false),
38
+ /**
39
+ * Callback when open state changes
40
+ * Called with new isOpen value
41
+ */
42
+ onOpenChange: zod.z.custom().optional(),
43
+ /**
44
+ * Disable tooltip without affecting trigger element
45
+ * @default false
46
+ */
47
+ isDisabled: zod.z.boolean().optional().default(false),
48
+ /**
49
+ * Children must include TooltipTrigger and TooltipContent
50
+ */
51
+ children: zod.z.custom()
52
+ });
53
+ var TooltipTriggerPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
54
+ /**
55
+ * Render as child element instead of wrapping
56
+ * When true, merges props into the child element
57
+ * @default false
58
+ */
59
+ asChild: zod.z.boolean().optional().default(false),
60
+ /**
61
+ * Single child element that triggers the tooltip
62
+ * Must be focusable for keyboard accessibility
63
+ */
64
+ children: zod.z.custom()
65
+ });
66
+ var TooltipContentPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
67
+ /**
68
+ * Placement relative to trigger element
69
+ * @default 'top'
70
+ */
71
+ side: TooltipSideSchema.optional().default("top"),
72
+ /**
73
+ * Offset from trigger in pixels (main axis)
74
+ * @default 4
75
+ */
76
+ sideOffset: zod.z.number().optional().default(4),
77
+ /**
78
+ * Cross-axis offset in pixels
79
+ * @default 0
80
+ */
81
+ alignOffset: zod.z.number().optional().default(0),
82
+ /**
83
+ * Automatically flip placement when constrained by viewport
84
+ * @default true
85
+ */
86
+ shouldFlip: zod.z.boolean().optional().default(true),
87
+ /**
88
+ * Show arrow pointing to trigger element
89
+ * @default false
90
+ */
91
+ showArrow: zod.z.boolean().optional().default(false),
92
+ /**
93
+ * Arrow size in pixels
94
+ * @default 8
95
+ */
96
+ arrowSize: zod.z.number().min(0).optional().default(8),
97
+ /**
98
+ * Custom className for styling
99
+ */
100
+ className: zod.z.string().optional(),
101
+ /**
102
+ * Tooltip content (typically text)
103
+ */
104
+ children: zod.z.custom()
105
+ });
106
+ var TooltipArrowPropsSchema = zod.z.object({
107
+ /**
108
+ * Arrow size in pixels
109
+ * @default 8
110
+ */
111
+ size: zod.z.number().min(0).optional().default(8),
112
+ /**
113
+ * Custom className for styling
114
+ */
115
+ className: zod.z.string().optional()
116
+ });
117
+
118
+ exports.TooltipArrowPropsSchema = TooltipArrowPropsSchema;
119
+ exports.TooltipContentPropsSchema = TooltipContentPropsSchema;
120
+ exports.TooltipPropsSchema = TooltipPropsSchema;
121
+ exports.TooltipSideSchema = TooltipSideSchema;
122
+ exports.TooltipTriggerModeSchema = TooltipTriggerModeSchema;
123
+ exports.TooltipTriggerPropsSchema = TooltipTriggerPropsSchema;
124
+ //# sourceMappingURL=chunk-TS54QM27.js.map
125
+ //# sourceMappingURL=chunk-TS54QM27.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/elements/Tooltip/Tooltip.types.ts"],"names":["z","BaseComponentPropsSchema"],"mappings":"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","file":"chunk-TS54QM27.js","sourcesContent":["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"]}
@@ -0,0 +1,220 @@
1
+ import { createContext, Children, isValidElement, useContext, cloneElement } from 'react';
2
+ import { DialogTrigger, OverlayTriggerStateContext, Heading, ModalOverlay as ModalOverlay$1, Modal as Modal$1, Dialog, Button } from 'react-aria-components';
3
+ import { cva } from 'class-variance-authority';
4
+ import { X } from 'lucide-react';
5
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
+
7
+ var ModalContext = createContext(void 0);
8
+ function ModalRoot({ children, defaultOpen, isOpen, onOpenChange, role = "dialog" }) {
9
+ const childArray = Children.toArray(children);
10
+ const triggerChild = childArray.find(
11
+ (child) => isValidElement(child) && (child.type === ModalTrigger || child.type.displayName === "ModalTrigger")
12
+ );
13
+ const contentChild = childArray.find(
14
+ (child) => isValidElement(child) && (child.type === ModalContent || child.type.displayName === "ModalContent")
15
+ );
16
+ if (!triggerChild || !contentChild) {
17
+ throw new Error(
18
+ "Modal requires exactly one Modal.Trigger and one Modal.Content as children"
19
+ );
20
+ }
21
+ const triggerElement = triggerChild;
22
+ const unwrappedTrigger = isValidElement(triggerElement) ? triggerElement.props.children : null;
23
+ const unwrappedContent = contentChild;
24
+ return /* @__PURE__ */ jsx(ModalContext.Provider, { value: { role }, children: /* @__PURE__ */ jsxs(
25
+ DialogTrigger,
26
+ {
27
+ defaultOpen,
28
+ isOpen,
29
+ onOpenChange,
30
+ children: [
31
+ unwrappedTrigger,
32
+ unwrappedContent
33
+ ]
34
+ }
35
+ ) });
36
+ }
37
+ ModalRoot.displayName = "Modal";
38
+ function ModalTrigger({ children }) {
39
+ return children;
40
+ }
41
+ ModalTrigger.displayName = "ModalTrigger";
42
+ function ModalContent({
43
+ children,
44
+ size = "md",
45
+ animation = "fade-zoom",
46
+ animationDuration = 200,
47
+ isDismissable = true,
48
+ isKeyboardDismissDisabled = false,
49
+ showClose = true,
50
+ className
51
+ }) {
52
+ const context = useContext(ModalContext);
53
+ const role = context?.role ?? "dialog";
54
+ const overlayClasses = modalOverlayVariants({ animation });
55
+ const modalClasses = modalContentVariants({ size, animation });
56
+ const mergedModalClasses = className ? `${modalClasses} ${className}` : modalClasses;
57
+ return /* @__PURE__ */ jsx(
58
+ ModalOverlay$1,
59
+ {
60
+ isDismissable,
61
+ isKeyboardDismissDisabled,
62
+ className: overlayClasses,
63
+ children: /* @__PURE__ */ jsx(
64
+ Modal$1,
65
+ {
66
+ className: mergedModalClasses,
67
+ style: {
68
+ transitionDuration: `${animationDuration}ms`
69
+ },
70
+ children: /* @__PURE__ */ jsx(Dialog, { role, className: "outline-none", children: ({ close }) => /* @__PURE__ */ jsxs(Fragment, { children: [
71
+ showClose && /* @__PURE__ */ jsxs(
72
+ Button,
73
+ {
74
+ onPress: close,
75
+ className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-[var(--content-background)] transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-[var(--ring)] focus:ring-offset-2 disabled:pointer-events-none min-h-[44px] min-w-[44px]",
76
+ "aria-label": "Close modal",
77
+ children: [
78
+ /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
79
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
80
+ ]
81
+ }
82
+ ),
83
+ children
84
+ ] }) })
85
+ }
86
+ )
87
+ }
88
+ );
89
+ }
90
+ ModalContent.displayName = "ModalContent";
91
+ function ModalOverlay(_props) {
92
+ return null;
93
+ }
94
+ ModalOverlay.displayName = "ModalOverlay";
95
+ function ModalHeader({ children, className }) {
96
+ const classes = className ? `flex flex-col space-y-1.5 text-center sm:text-left ${className}` : "flex flex-col space-y-1.5 text-center sm:text-left";
97
+ return /* @__PURE__ */ jsx("div", { className: classes, children });
98
+ }
99
+ ModalHeader.displayName = "ModalHeader";
100
+ function ModalTitle({ children, as = "h2", className }) {
101
+ const classes = className ? `text-lg font-semibold leading-none tracking-tight ${className}` : "text-lg font-semibold leading-none tracking-tight";
102
+ return /* @__PURE__ */ jsx(Heading, { slot: "title", level: parseInt(as[1] ?? "2"), className: classes, children });
103
+ }
104
+ ModalTitle.displayName = "ModalTitle";
105
+ function ModalDescription({ children, className }) {
106
+ const classes = className ? `text-sm text-[var(--menu-muted)] ${className}` : "text-sm text-[var(--menu-muted)]";
107
+ return /* @__PURE__ */ jsx("p", { slot: "description", className: classes, children });
108
+ }
109
+ ModalDescription.displayName = "ModalDescription";
110
+ function ModalFooter({ children, className }) {
111
+ const classes = className ? `flex flex-col-reverse sm:flex-row sm:justify-end gap-2 ${className}` : "flex flex-col-reverse sm:flex-row sm:justify-end gap-2";
112
+ return /* @__PURE__ */ jsx("div", { className: classes, children });
113
+ }
114
+ ModalFooter.displayName = "ModalFooter";
115
+ function ModalClose({ children }) {
116
+ const state = useContext(OverlayTriggerStateContext);
117
+ if (!state) {
118
+ throw new Error("Modal.Close must be used inside Modal.Content");
119
+ }
120
+ if (!isValidElement(children)) {
121
+ throw new Error("Modal.Close requires a valid React element as a child");
122
+ }
123
+ const childElement = children;
124
+ const handlePress = () => {
125
+ state.close();
126
+ };
127
+ const existingOnPress = childElement.props?.onPress;
128
+ const mergedOnPress = existingOnPress ? () => {
129
+ existingOnPress();
130
+ handlePress();
131
+ } : handlePress;
132
+ return cloneElement(childElement, { onPress: mergedOnPress });
133
+ }
134
+ ModalClose.displayName = "ModalClose";
135
+ var modalContentVariants = cva(
136
+ [
137
+ // Base styles
138
+ "relative",
139
+ "bg-[var(--content-background)]",
140
+ "text-[var(--content-foreground)]",
141
+ "rounded-lg",
142
+ "shadow-lg",
143
+ "p-6",
144
+ "w-full",
145
+ "outline-none",
146
+ // Responsive: full-width on mobile with padding, constrained on desktop
147
+ "mx-4",
148
+ "sm:mx-0"
149
+ ],
150
+ {
151
+ variants: {
152
+ size: {
153
+ sm: "max-w-sm",
154
+ // 300px
155
+ md: "max-w-md",
156
+ // 425px
157
+ lg: "max-w-lg",
158
+ // 600px
159
+ xl: "max-w-2xl",
160
+ // 800px
161
+ full: "max-w-full min-h-screen rounded-none"
162
+ // Full screen
163
+ },
164
+ animation: {
165
+ "fade-zoom": "animate-fadeIn",
166
+ // Fade in with scale
167
+ fade: "animate-fadeIn",
168
+ // Fade in only
169
+ slide: "animate-slideUp",
170
+ // Slide up
171
+ none: ""
172
+ // No animation
173
+ }
174
+ },
175
+ defaultVariants: {
176
+ size: "md",
177
+ animation: "fade-zoom"
178
+ }
179
+ }
180
+ );
181
+ var modalOverlayVariants = cva(
182
+ [
183
+ // Base overlay styles
184
+ "fixed",
185
+ "inset-0",
186
+ "z-50",
187
+ "flex",
188
+ "items-center",
189
+ "justify-center",
190
+ "bg-black/50",
191
+ "backdrop-blur-sm"
192
+ ],
193
+ {
194
+ variants: {
195
+ animation: {
196
+ "fade-zoom": "animate-fadeIn",
197
+ fade: "animate-fadeIn",
198
+ slide: "animate-fadeIn",
199
+ none: ""
200
+ }
201
+ },
202
+ defaultVariants: {
203
+ animation: "fade-zoom"
204
+ }
205
+ }
206
+ );
207
+ var Modal = Object.assign(ModalRoot, {
208
+ Trigger: ModalTrigger,
209
+ Content: ModalContent,
210
+ Overlay: ModalOverlay,
211
+ Header: ModalHeader,
212
+ Title: ModalTitle,
213
+ Description: ModalDescription,
214
+ Footer: ModalFooter,
215
+ Close: ModalClose
216
+ });
217
+
218
+ export { Modal, ModalClose, ModalContent, ModalDescription, ModalFooter, ModalHeader, ModalOverlay, ModalTitle, ModalTrigger, modalContentVariants, modalOverlayVariants };
219
+ //# sourceMappingURL=chunk-UE2S4PCX.mjs.map
220
+ //# sourceMappingURL=chunk-UE2S4PCX.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/elements/Modal/Modal.tsx"],"names":["AriaDialogTrigger","AriaModalOverlay","AriaModal","AriaDialog","AriaButton"],"mappings":"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","file":"chunk-UE2S4PCX.mjs","sourcesContent":["'use client';\n\n/**\n * Modal Component - Implementation\n *\n * Accessible modal dialog component combining React Aria primitives with ShadCN styling.\n * Follows Themis library patterns with compound component structure.\n *\n * @see PRD.md (Full requirements)\n * @see Modal.types.ts (Zod schemas)\n * @see RESEARCH.md (React Aria patterns)\n */\n\nimport {\n Children,\n isValidElement,\n cloneElement,\n useContext,\n createContext,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n DialogTrigger as AriaDialogTrigger,\n Modal as AriaModal,\n ModalOverlay as AriaModalOverlay,\n Dialog as AriaDialog,\n Heading,\n Button as AriaButton,\n OverlayTriggerStateContext,\n} from 'react-aria-components';\nimport { cva } from 'class-variance-authority';\nimport { X } from 'lucide-react';\nimport type {\n ModalProps,\n ModalTriggerProps,\n ModalContentProps,\n ModalOverlayProps,\n ModalHeaderProps,\n ModalTitleProps,\n ModalDescriptionProps,\n ModalFooterProps,\n ModalCloseProps,\n} from './Modal.types';\n\n/**\n * Modal Context\n * Passes role prop from Modal root to Modal.Content\n */\ninterface ModalContextValue {\n role?: 'dialog' | 'alertdialog';\n}\n\nconst ModalContext = createContext<ModalContextValue | undefined>(undefined);\n\n/**\n * Modal Root Component\n *\n * Manages modal open/close state and validates required children structure.\n * Must contain exactly one Modal.Trigger and one Modal.Content.\n *\n * Unwraps compound component children and passes them to React Aria's DialogTrigger.\n *\n * @see PRD.md FR-001 (Modal Root Requirements)\n * @see PRD.md FR-012 (Controlled Mode)\n * @see PRD.md FR-013 (Uncontrolled Mode)\n */\nfunction ModalRoot({ children, defaultOpen, isOpen, onOpenChange, role = 'dialog' }: ModalProps): ReactElement {\n // Validate children structure: must have exactly one Trigger and one Content\n const childArray = Children.toArray(children);\n\n const triggerChild = childArray.find(\n (child) =>\n isValidElement(child) &&\n (child.type === ModalTrigger ||\n (child.type as { displayName?: string }).displayName === 'ModalTrigger')\n );\n\n const contentChild = childArray.find(\n (child) =>\n isValidElement(child) &&\n (child.type === ModalContent ||\n (child.type as { displayName?: string }).displayName === 'ModalContent')\n );\n\n if (!triggerChild || !contentChild) {\n throw new Error(\n 'Modal requires exactly one Modal.Trigger and one Modal.Content as children'\n );\n }\n\n // Extract the actual children from Modal.Trigger and Modal.Content\n // React Aria's DialogTrigger expects direct Button and Modal children\n // Cast after validation\n const triggerElement = triggerChild as ReactElement;\n const unwrappedTrigger = isValidElement(triggerElement)\n ? ((triggerElement.props as unknown as { children?: ReactNode }).children as ReactNode)\n : null;\n const unwrappedContent = contentChild as ReactElement; // Already validated above\n\n return (\n <ModalContext.Provider value={{ role }}>\n <AriaDialogTrigger\n defaultOpen={defaultOpen}\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n >\n {unwrappedTrigger}\n {unwrappedContent}\n </AriaDialogTrigger>\n </ModalContext.Provider>\n );\n}\n\nModalRoot.displayName = 'Modal';\n\n/**\n * Modal.Trigger Component\n *\n * Wraps a single child element (typically Button) with modal trigger behavior.\n * Handles click events to open modal and manages ARIA attributes.\n *\n * React Aria's DialogTrigger (used in Modal root) automatically applies:\n * - aria-haspopup=\"dialog\"\n * - aria-expanded (true/false based on state)\n * - onClick handler to toggle modal\n *\n * @see PRD.md FR-002 (Trigger Requirements)\n * @see RESEARCH.md Section 2 (React Aria Integration)\n */\nfunction ModalTrigger({ children }: ModalTriggerProps): ReactElement {\n // React Aria's DialogTrigger (in Modal root) automatically adds ARIA attributes\n // to the first child component. We pass through the child element directly.\n return children as ReactElement;\n}\n\nModalTrigger.displayName = 'ModalTrigger';\n\n/**\n * Modal.Content Component\n *\n * Renders the modal content with overlay backdrop.\n * Uses React Aria's Modal and ModalOverlay for accessibility.\n * Applies CVA variants for size and animation.\n *\n * @see PRD.md FR-003 (Content Requirements)\n * @see PRD.md TR-001 (CVA Variant Styling)\n * @see RESEARCH.md Section 2 (React Aria Integration)\n */\nfunction ModalContent({\n children,\n size = 'md',\n animation = 'fade-zoom',\n animationDuration = 200,\n isDismissable = true,\n isKeyboardDismissDisabled = false,\n showClose = true,\n className,\n}: ModalContentProps): ReactElement {\n // Get role from context\n const context = useContext(ModalContext);\n const role = context?.role ?? 'dialog';\n\n // Generate overlay classes with animation variant\n const overlayClasses = modalOverlayVariants({ animation });\n\n // Generate modal classes with size and animation variants, merged with custom className\n const modalClasses = modalContentVariants({ size, animation });\n const mergedModalClasses = className\n ? `${modalClasses} ${className}`\n : modalClasses;\n\n return (\n <AriaModalOverlay\n isDismissable={isDismissable}\n isKeyboardDismissDisabled={isKeyboardDismissDisabled}\n className={overlayClasses}\n >\n <AriaModal\n className={mergedModalClasses}\n style={{\n transitionDuration: `${animationDuration}ms`,\n }}\n >\n <AriaDialog role={role} className=\"outline-none\">\n {({ close }) => (\n <>\n {showClose && (\n <AriaButton\n onPress={close}\n className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-[var(--content-background)] transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-[var(--ring)] focus:ring-offset-2 disabled:pointer-events-none min-h-[44px] min-w-[44px]\"\n aria-label=\"Close modal\"\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </AriaButton>\n )}\n {children}\n </>\n )}\n </AriaDialog>\n </AriaModal>\n </AriaModalOverlay>\n );\n}\n\nModalContent.displayName = 'ModalContent';\n\n/**\n * Modal.Overlay Component (Placeholder - not exposed in public API)\n * Overlay is managed internally by Modal.Content via AriaModalOverlay\n */\nfunction ModalOverlay(_props: ModalOverlayProps): null {\n return null;\n}\n\nModalOverlay.displayName = 'ModalOverlay';\n\n/**\n * Modal.Header Component\n *\n * Container for modal header content (typically Title and Description).\n * Applies consistent spacing and layout.\n *\n * @see PRD.md FR-005 (Header Requirements)\n */\nfunction ModalHeader({ children, className }: ModalHeaderProps): ReactElement {\n const classes = className\n ? `flex flex-col space-y-1.5 text-center sm:text-left ${className}`\n : 'flex flex-col space-y-1.5 text-center sm:text-left';\n\n return <div className={classes}>{children}</div>;\n}\n\nModalHeader.displayName = 'ModalHeader';\n\n/**\n * Modal.Title Component\n *\n * Renders modal title using React Aria's Heading component.\n * Automatically links to modal via aria-labelledby.\n *\n * @see PRD.md FR-006 (Title Requirements)\n * @see PRD.md AR-002 (ARIA Attributes - auto-labelledby)\n */\nfunction ModalTitle({ children, as = 'h2', className }: ModalTitleProps): ReactElement {\n const classes = className\n ? `text-lg font-semibold leading-none tracking-tight ${className}`\n : 'text-lg font-semibold leading-none tracking-tight';\n\n return (\n <Heading slot=\"title\" level={parseInt(as[1] ?? '2')} className={classes}>\n {children}\n </Heading>\n );\n}\n\nModalTitle.displayName = 'ModalTitle';\n\n/**\n * Modal.Description Component\n *\n * Renders description text that automatically links to modal via aria-describedby.\n * Uses muted text color for visual hierarchy.\n *\n * @see PRD.md FR-007 (Description Requirements)\n * @see PRD.md AR-002 (ARIA Attributes - auto-describedby)\n */\nfunction ModalDescription({ children, className }: ModalDescriptionProps): ReactElement {\n const classes = className\n ? `text-sm text-[var(--menu-muted)] ${className}`\n : 'text-sm text-[var(--menu-muted)]';\n\n return (\n <p slot=\"description\" className={classes}>\n {children}\n </p>\n );\n}\n\nModalDescription.displayName = 'ModalDescription';\n\n/**\n * Modal.Footer Component\n *\n * Container for modal action buttons (Cancel, Confirm, etc.).\n * Aligns buttons to the right with consistent spacing.\n * Responsive: stacks vertically on mobile, horizontal on desktop.\n *\n * @see PRD.md FR-008 (Footer Requirements)\n * @see PRD.md DS-003 (Spacing - footer button gap)\n */\nfunction ModalFooter({ children, className }: ModalFooterProps): ReactElement {\n const classes = className\n ? `flex flex-col-reverse sm:flex-row sm:justify-end gap-2 ${className}`\n : 'flex flex-col-reverse sm:flex-row sm:justify-end gap-2';\n\n return <div className={classes}>{children}</div>;\n}\n\nModalFooter.displayName = 'ModalFooter';\n\n/**\n * Modal.Close Component\n *\n * Wraps a child element (typically Button) with modal close behavior.\n * Uses OverlayTriggerStateContext from React Aria to access close function.\n *\n * @see PRD.md FR-009 (Close Requirements)\n */\nfunction ModalClose({ children }: ModalCloseProps): ReactElement {\n // Access the overlay trigger state from React Aria context\n const state = useContext(OverlayTriggerStateContext);\n\n if (!state) {\n throw new Error('Modal.Close must be used inside Modal.Content');\n }\n\n // Clone the child element and add/merge the onPress handler to close the modal\n if (!isValidElement(children)) {\n throw new Error('Modal.Close requires a valid React element as a child');\n }\n\n // Cast to ReactElement after validation\n const childElement = children as ReactElement;\n\n const handlePress = (): void => {\n state.close();\n };\n\n // Merge with existing onPress if present\n const existingOnPress = (childElement.props as unknown as { onPress?: () => void })?.onPress;\n const mergedOnPress = existingOnPress\n ? (): void => {\n existingOnPress();\n handlePress();\n }\n : handlePress;\n\n // cloneElement with onPress override - use unknown for flexible typing\n return cloneElement(childElement, { onPress: mergedOnPress } as unknown as Partial<typeof childElement.props>);\n}\n\nModalClose.displayName = 'ModalClose';\n\n/**\n * CVA Variants for Modal.Content\n *\n * @see PRD.md TR-001 (CVA Variant Styling)\n * @see PRD.md DS-001 (Size Variants)\n */\nexport const modalContentVariants = cva(\n [\n // Base styles\n 'relative',\n 'bg-[var(--content-background)]',\n 'text-[var(--content-foreground)]',\n 'rounded-lg',\n 'shadow-lg',\n 'p-6',\n 'w-full',\n 'outline-none',\n // Responsive: full-width on mobile with padding, constrained on desktop\n 'mx-4',\n 'sm:mx-0',\n ],\n {\n variants: {\n size: {\n sm: 'max-w-sm', // 300px\n md: 'max-w-md', // 425px\n lg: 'max-w-lg', // 600px\n xl: 'max-w-2xl', // 800px\n full: 'max-w-full min-h-screen rounded-none', // Full screen\n },\n animation: {\n 'fade-zoom': 'animate-fadeIn', // Fade in with scale\n fade: 'animate-fadeIn', // Fade in only\n slide: 'animate-slideUp', // Slide up\n none: '', // No animation\n },\n },\n defaultVariants: {\n size: 'md',\n animation: 'fade-zoom',\n },\n }\n);\n\n/**\n * CVA Variants for Modal Overlay\n */\nexport const modalOverlayVariants = cva(\n [\n // Base overlay styles\n 'fixed',\n 'inset-0',\n 'z-50',\n 'flex',\n 'items-center',\n 'justify-center',\n 'bg-black/50',\n 'backdrop-blur-sm',\n ],\n {\n variants: {\n animation: {\n 'fade-zoom': 'animate-fadeIn',\n fade: 'animate-fadeIn',\n slide: 'animate-fadeIn',\n none: '',\n },\n },\n defaultVariants: {\n animation: 'fade-zoom',\n },\n }\n);\n\n/**\n * Compound Component Export\n *\n * Follows Themis library pattern using Object.assign() for compound components.\n *\n * @see RESEARCH.md Section 1 (Compound Component Pattern)\n */\nexport const Modal = Object.assign(ModalRoot, {\n Trigger: ModalTrigger,\n Content: ModalContent,\n Overlay: ModalOverlay,\n Header: ModalHeader,\n Title: ModalTitle,\n Description: ModalDescription,\n Footer: ModalFooter,\n Close: ModalClose,\n});\n\n// Named exports for individual components\nexport {\n ModalRoot,\n ModalTrigger,\n ModalContent,\n ModalOverlay,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalFooter,\n ModalClose,\n};\n"]}