@nori-ui/core 1.9.1 → 1.9.2

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 (267) hide show
  1. package/dist/{chunk-O6M3F7BZ.js → chunk-34TKMNID.js} +5 -5
  2. package/dist/{chunk-O6M3F7BZ.js.map → chunk-34TKMNID.js.map} +1 -1
  3. package/dist/{chunk-KLK7OMFT.js → chunk-35DVHUUE.js} +3 -3
  4. package/dist/{chunk-KLK7OMFT.js.map → chunk-35DVHUUE.js.map} +1 -1
  5. package/dist/{chunk-M4BI63P6.js → chunk-3FRCTNQH.js} +3 -3
  6. package/dist/{chunk-M4BI63P6.js.map → chunk-3FRCTNQH.js.map} +1 -1
  7. package/dist/{chunk-3CEJ5TB4.js → chunk-3H7LF45D.js} +4 -4
  8. package/dist/{chunk-3CEJ5TB4.js.map → chunk-3H7LF45D.js.map} +1 -1
  9. package/dist/{chunk-PJTCO76H.js → chunk-3KK2TXVY.js} +4 -4
  10. package/dist/{chunk-PJTCO76H.js.map → chunk-3KK2TXVY.js.map} +1 -1
  11. package/dist/{chunk-QB6RH6UU.js → chunk-3QQXYL5L.js} +4 -4
  12. package/dist/{chunk-QB6RH6UU.js.map → chunk-3QQXYL5L.js.map} +1 -1
  13. package/dist/{chunk-OELY6K44.js → chunk-3RNRVMNS.js} +3 -3
  14. package/dist/{chunk-OELY6K44.js.map → chunk-3RNRVMNS.js.map} +1 -1
  15. package/dist/{chunk-R5JMDDCB.js → chunk-3W2O4OBL.js} +4 -2
  16. package/dist/chunk-3W2O4OBL.js.map +1 -0
  17. package/dist/{chunk-MDOZGILD.js → chunk-4NBJW2JZ.js} +3 -3
  18. package/dist/{chunk-MDOZGILD.js.map → chunk-4NBJW2JZ.js.map} +1 -1
  19. package/dist/{chunk-ZGFXKYA5.js → chunk-57AVXG7D.js} +3 -3
  20. package/dist/{chunk-ZGFXKYA5.js.map → chunk-57AVXG7D.js.map} +1 -1
  21. package/dist/{chunk-HXCETKCC.js → chunk-7TESZOYQ.js} +3 -3
  22. package/dist/{chunk-HXCETKCC.js.map → chunk-7TESZOYQ.js.map} +1 -1
  23. package/dist/{chunk-TSWPHJIU.js → chunk-7UTQKMTE.js} +4 -4
  24. package/dist/{chunk-TSWPHJIU.js.map → chunk-7UTQKMTE.js.map} +1 -1
  25. package/dist/{chunk-U2ZKY2CP.js → chunk-AUNLIED3.js} +3 -3
  26. package/dist/{chunk-U2ZKY2CP.js.map → chunk-AUNLIED3.js.map} +1 -1
  27. package/dist/{chunk-J5LK2XHE.js → chunk-BBPKG3NI.js} +3 -3
  28. package/dist/{chunk-J5LK2XHE.js.map → chunk-BBPKG3NI.js.map} +1 -1
  29. package/dist/{chunk-IGBXSBF7.js → chunk-BCOXHHHC.js} +3 -3
  30. package/dist/{chunk-IGBXSBF7.js.map → chunk-BCOXHHHC.js.map} +1 -1
  31. package/dist/{chunk-L6VYDM7S.js → chunk-BJARVBFN.js} +3 -3
  32. package/dist/{chunk-L6VYDM7S.js.map → chunk-BJARVBFN.js.map} +1 -1
  33. package/dist/{chunk-BVLOX4A3.js → chunk-BJHMAGOQ.js} +3 -3
  34. package/dist/{chunk-BVLOX4A3.js.map → chunk-BJHMAGOQ.js.map} +1 -1
  35. package/dist/{chunk-VOF3S5I4.js → chunk-BOHLDAMY.js} +4 -4
  36. package/dist/{chunk-VOF3S5I4.js.map → chunk-BOHLDAMY.js.map} +1 -1
  37. package/dist/{chunk-3W3XYULK.js → chunk-C4HP2D46.js} +4 -4
  38. package/dist/{chunk-3W3XYULK.js.map → chunk-C4HP2D46.js.map} +1 -1
  39. package/dist/{chunk-C5HQPXRI.js → chunk-CMA3ZFCG.js} +4 -4
  40. package/dist/{chunk-C5HQPXRI.js.map → chunk-CMA3ZFCG.js.map} +1 -1
  41. package/dist/{chunk-EN4CLDGZ.js → chunk-D4J24WDF.js} +3 -3
  42. package/dist/{chunk-EN4CLDGZ.js.map → chunk-D4J24WDF.js.map} +1 -1
  43. package/dist/{chunk-MOAIQHR7.js → chunk-DJ3XX3CV.js} +3 -3
  44. package/dist/{chunk-MOAIQHR7.js.map → chunk-DJ3XX3CV.js.map} +1 -1
  45. package/dist/{chunk-IIVTPN62.js → chunk-DVO556JH.js} +3 -3
  46. package/dist/{chunk-IIVTPN62.js.map → chunk-DVO556JH.js.map} +1 -1
  47. package/dist/{chunk-2XJCLPNH.js → chunk-EC5TKCWA.js} +3 -3
  48. package/dist/{chunk-2XJCLPNH.js.map → chunk-EC5TKCWA.js.map} +1 -1
  49. package/dist/{chunk-VLZANXRZ.js → chunk-EMU3GXKM.js} +3 -3
  50. package/dist/{chunk-VLZANXRZ.js.map → chunk-EMU3GXKM.js.map} +1 -1
  51. package/dist/{chunk-F5UKI7XD.js → chunk-ENPBMEUW.js} +3 -3
  52. package/dist/{chunk-F5UKI7XD.js.map → chunk-ENPBMEUW.js.map} +1 -1
  53. package/dist/{chunk-V75O7QQO.js → chunk-FQDCPWLX.js} +3 -3
  54. package/dist/{chunk-V75O7QQO.js.map → chunk-FQDCPWLX.js.map} +1 -1
  55. package/dist/{chunk-3B345SQU.js → chunk-FRL5SLFT.js} +4 -4
  56. package/dist/{chunk-3B345SQU.js.map → chunk-FRL5SLFT.js.map} +1 -1
  57. package/dist/{chunk-5YHT252H.js → chunk-GTDDUPTE.js} +3 -3
  58. package/dist/{chunk-5YHT252H.js.map → chunk-GTDDUPTE.js.map} +1 -1
  59. package/dist/{chunk-OIHX5B4R.js → chunk-GYFX2I6B.js} +3 -3
  60. package/dist/{chunk-OIHX5B4R.js.map → chunk-GYFX2I6B.js.map} +1 -1
  61. package/dist/{chunk-PQW5LKAI.js → chunk-J2FSGJ2P.js} +3 -3
  62. package/dist/{chunk-PQW5LKAI.js.map → chunk-J2FSGJ2P.js.map} +1 -1
  63. package/dist/{chunk-C32XGHWO.js → chunk-KE2TP5XZ.js} +3 -3
  64. package/dist/{chunk-C32XGHWO.js.map → chunk-KE2TP5XZ.js.map} +1 -1
  65. package/dist/{chunk-USFXANEU.js → chunk-LWW3FJHF.js} +3 -3
  66. package/dist/{chunk-USFXANEU.js.map → chunk-LWW3FJHF.js.map} +1 -1
  67. package/dist/{chunk-3IIIHZHT.js → chunk-MQZXQOGY.js} +3 -3
  68. package/dist/{chunk-3IIIHZHT.js.map → chunk-MQZXQOGY.js.map} +1 -1
  69. package/dist/{chunk-BOMPFNM4.js → chunk-NSLVUCYP.js} +3 -3
  70. package/dist/{chunk-BOMPFNM4.js.map → chunk-NSLVUCYP.js.map} +1 -1
  71. package/dist/{chunk-7Z4NMNX6.js → chunk-O656K7OS.js} +3 -3
  72. package/dist/{chunk-7Z4NMNX6.js.map → chunk-O656K7OS.js.map} +1 -1
  73. package/dist/{chunk-S763GTIZ.js → chunk-PCUWBRNT.js} +3 -3
  74. package/dist/{chunk-S763GTIZ.js.map → chunk-PCUWBRNT.js.map} +1 -1
  75. package/dist/{chunk-MK57AOTI.js → chunk-QNYGQYAO.js} +5 -5
  76. package/dist/{chunk-MK57AOTI.js.map → chunk-QNYGQYAO.js.map} +1 -1
  77. package/dist/{chunk-UKDDK42K.js → chunk-QOVLTVJN.js} +3 -3
  78. package/dist/{chunk-UKDDK42K.js.map → chunk-QOVLTVJN.js.map} +1 -1
  79. package/dist/{chunk-PJXVLE24.js → chunk-QYA7HYFI.js} +5 -5
  80. package/dist/{chunk-PJXVLE24.js.map → chunk-QYA7HYFI.js.map} +1 -1
  81. package/dist/{chunk-SF6WPUC5.js → chunk-QZ6T4R44.js} +3 -3
  82. package/dist/{chunk-SF6WPUC5.js.map → chunk-QZ6T4R44.js.map} +1 -1
  83. package/dist/{chunk-7FSFJA33.js → chunk-SNGWMCZH.js} +3 -3
  84. package/dist/{chunk-7FSFJA33.js.map → chunk-SNGWMCZH.js.map} +1 -1
  85. package/dist/{chunk-XQNVWHMN.js → chunk-UHAI3QOA.js} +3 -3
  86. package/dist/{chunk-XQNVWHMN.js.map → chunk-UHAI3QOA.js.map} +1 -1
  87. package/dist/{chunk-OHWRTHGL.js → chunk-UHHW7GZ4.js} +4 -4
  88. package/dist/{chunk-OHWRTHGL.js.map → chunk-UHHW7GZ4.js.map} +1 -1
  89. package/dist/{chunk-PGYEIXCO.js → chunk-UKYSXWTI.js} +4 -4
  90. package/dist/{chunk-PGYEIXCO.js.map → chunk-UKYSXWTI.js.map} +1 -1
  91. package/dist/{chunk-IWM2XDXH.js → chunk-UPSNKESO.js} +3 -3
  92. package/dist/{chunk-IWM2XDXH.js.map → chunk-UPSNKESO.js.map} +1 -1
  93. package/dist/{chunk-BXZGCOKT.js → chunk-WEHUVESG.js} +4 -4
  94. package/dist/{chunk-BXZGCOKT.js.map → chunk-WEHUVESG.js.map} +1 -1
  95. package/dist/{chunk-ISCJST4P.js → chunk-WFR55YKL.js} +3 -3
  96. package/dist/{chunk-ISCJST4P.js.map → chunk-WFR55YKL.js.map} +1 -1
  97. package/dist/{chunk-MYBBBLYE.js → chunk-WKQUCDGP.js} +3 -3
  98. package/dist/{chunk-MYBBBLYE.js.map → chunk-WKQUCDGP.js.map} +1 -1
  99. package/dist/{chunk-STX5UKYT.js → chunk-XAXIQ55K.js} +3 -3
  100. package/dist/{chunk-STX5UKYT.js.map → chunk-XAXIQ55K.js.map} +1 -1
  101. package/dist/{chunk-H2LHWJ52.js → chunk-YHQFS4ZF.js} +4 -4
  102. package/dist/{chunk-H2LHWJ52.js.map → chunk-YHQFS4ZF.js.map} +1 -1
  103. package/dist/{chunk-VL2WNGPF.js → chunk-YUYYAMLE.js} +3 -3
  104. package/dist/{chunk-VL2WNGPF.js.map → chunk-YUYYAMLE.js.map} +1 -1
  105. package/dist/{chunk-CPIKN4BX.js → chunk-YYVL2FWF.js} +5 -5
  106. package/dist/{chunk-CPIKN4BX.js.map → chunk-YYVL2FWF.js.map} +1 -1
  107. package/dist/client.cjs +7 -5
  108. package/dist/client.cjs.map +1 -1
  109. package/dist/client.js +56 -56
  110. package/dist/components/Accordion/index.cjs +2 -0
  111. package/dist/components/Accordion/index.cjs.map +1 -1
  112. package/dist/components/Accordion/index.js +3 -3
  113. package/dist/components/Alert/index.cjs +2 -0
  114. package/dist/components/Alert/index.cjs.map +1 -1
  115. package/dist/components/Alert/index.js +3 -3
  116. package/dist/components/AlertDialog/index.cjs +2 -0
  117. package/dist/components/AlertDialog/index.cjs.map +1 -1
  118. package/dist/components/AlertDialog/index.js +2 -2
  119. package/dist/components/Avatar/index.cjs +2 -0
  120. package/dist/components/Avatar/index.cjs.map +1 -1
  121. package/dist/components/Avatar/index.js +2 -2
  122. package/dist/components/Badge/index.cjs +2 -0
  123. package/dist/components/Badge/index.cjs.map +1 -1
  124. package/dist/components/Badge/index.js +2 -2
  125. package/dist/components/Box/index.cjs +2 -0
  126. package/dist/components/Box/index.cjs.map +1 -1
  127. package/dist/components/Box/index.js +4 -4
  128. package/dist/components/Breadcrumb/index.cjs +2 -0
  129. package/dist/components/Breadcrumb/index.cjs.map +1 -1
  130. package/dist/components/Breadcrumb/index.js +3 -3
  131. package/dist/components/Button/index.cjs +2 -0
  132. package/dist/components/Button/index.cjs.map +1 -1
  133. package/dist/components/Button/index.js +2 -2
  134. package/dist/components/Calendar/index.cjs +2 -0
  135. package/dist/components/Calendar/index.cjs.map +1 -1
  136. package/dist/components/Calendar/index.js +4 -4
  137. package/dist/components/Card/index.cjs +2 -0
  138. package/dist/components/Card/index.cjs.map +1 -1
  139. package/dist/components/Card/index.js +2 -2
  140. package/dist/components/Checkbox/index.cjs +2 -0
  141. package/dist/components/Checkbox/index.cjs.map +1 -1
  142. package/dist/components/Checkbox/index.js +3 -3
  143. package/dist/components/Collapsible/index.cjs +2 -0
  144. package/dist/components/Collapsible/index.cjs.map +1 -1
  145. package/dist/components/Collapsible/index.js +2 -2
  146. package/dist/components/Combobox/index.cjs +2 -0
  147. package/dist/components/Combobox/index.cjs.map +1 -1
  148. package/dist/components/Combobox/index.js +4 -4
  149. package/dist/components/Command/index.cjs +2 -0
  150. package/dist/components/Command/index.cjs.map +1 -1
  151. package/dist/components/Command/index.js +4 -4
  152. package/dist/components/ContextMenu/index.cjs +3 -1
  153. package/dist/components/ContextMenu/index.cjs.map +1 -1
  154. package/dist/components/ContextMenu/index.js +4 -4
  155. package/dist/components/DataTable/index.cjs +2 -0
  156. package/dist/components/DataTable/index.cjs.map +1 -1
  157. package/dist/components/DataTable/index.js +3 -3
  158. package/dist/components/DatePicker/index.cjs +2 -0
  159. package/dist/components/DatePicker/index.cjs.map +1 -1
  160. package/dist/components/DatePicker/index.js +6 -6
  161. package/dist/components/Dialog/index.cjs +2 -0
  162. package/dist/components/Dialog/index.cjs.map +1 -1
  163. package/dist/components/Dialog/index.js +3 -3
  164. package/dist/components/DropdownMenu/index.cjs +3 -1
  165. package/dist/components/DropdownMenu/index.cjs.map +1 -1
  166. package/dist/components/DropdownMenu/index.js +3 -3
  167. package/dist/components/Empty/index.cjs +2 -0
  168. package/dist/components/Empty/index.cjs.map +1 -1
  169. package/dist/components/Empty/index.js +2 -2
  170. package/dist/components/Field/index.cjs +4 -2
  171. package/dist/components/Field/index.cjs.map +1 -1
  172. package/dist/components/Field/index.js +2 -2
  173. package/dist/components/FloatButton/index.cjs +2 -0
  174. package/dist/components/FloatButton/index.cjs.map +1 -1
  175. package/dist/components/FloatButton/index.js +4 -4
  176. package/dist/components/HStack/index.cjs +2 -0
  177. package/dist/components/HStack/index.cjs.map +1 -1
  178. package/dist/components/HStack/index.js +4 -4
  179. package/dist/components/HoverCard/index.cjs +2 -0
  180. package/dist/components/HoverCard/index.cjs.map +1 -1
  181. package/dist/components/HoverCard/index.js +3 -3
  182. package/dist/components/InputGroup/index.cjs +3 -1
  183. package/dist/components/InputGroup/index.cjs.map +1 -1
  184. package/dist/components/InputGroup/index.js +2 -2
  185. package/dist/components/InputOTP/index.cjs +2 -0
  186. package/dist/components/InputOTP/index.cjs.map +1 -1
  187. package/dist/components/InputOTP/index.js +2 -2
  188. package/dist/components/Item/index.cjs +2 -0
  189. package/dist/components/Item/index.cjs.map +1 -1
  190. package/dist/components/Item/index.js +2 -2
  191. package/dist/components/Kbd/index.cjs +2 -0
  192. package/dist/components/Kbd/index.cjs.map +1 -1
  193. package/dist/components/Kbd/index.js +2 -2
  194. package/dist/components/Label/index.cjs +3 -1
  195. package/dist/components/Label/index.cjs.map +1 -1
  196. package/dist/components/Label/index.js +2 -2
  197. package/dist/components/Pagination/index.cjs +2 -0
  198. package/dist/components/Pagination/index.cjs.map +1 -1
  199. package/dist/components/Pagination/index.js +4 -4
  200. package/dist/components/Popover/index.cjs +2 -0
  201. package/dist/components/Popover/index.cjs.map +1 -1
  202. package/dist/components/Popover/index.js +2 -2
  203. package/dist/components/Progress/index.cjs +2 -0
  204. package/dist/components/Progress/index.cjs.map +1 -1
  205. package/dist/components/Progress/index.js +2 -2
  206. package/dist/components/Radio/index.cjs +2 -0
  207. package/dist/components/Radio/index.cjs.map +1 -1
  208. package/dist/components/Radio/index.js +2 -2
  209. package/dist/components/SegmentedControl/index.cjs +2 -0
  210. package/dist/components/SegmentedControl/index.cjs.map +1 -1
  211. package/dist/components/SegmentedControl/index.js +2 -2
  212. package/dist/components/Select/index.cjs +2 -0
  213. package/dist/components/Select/index.cjs.map +1 -1
  214. package/dist/components/Select/index.js +3 -3
  215. package/dist/components/Separator/index.cjs +2 -0
  216. package/dist/components/Separator/index.cjs.map +1 -1
  217. package/dist/components/Separator/index.js +2 -2
  218. package/dist/components/Sheet/index.cjs +2 -0
  219. package/dist/components/Sheet/index.cjs.map +1 -1
  220. package/dist/components/Sheet/index.js +2 -2
  221. package/dist/components/Sidebar/index.cjs +2 -0
  222. package/dist/components/Sidebar/index.cjs.map +1 -1
  223. package/dist/components/Sidebar/index.js +2 -2
  224. package/dist/components/Skeleton/index.cjs +2 -0
  225. package/dist/components/Skeleton/index.cjs.map +1 -1
  226. package/dist/components/Skeleton/index.js +2 -2
  227. package/dist/components/Slider/index.cjs +2 -0
  228. package/dist/components/Slider/index.cjs.map +1 -1
  229. package/dist/components/Slider/index.js +2 -2
  230. package/dist/components/Switch/index.cjs +2 -0
  231. package/dist/components/Switch/index.cjs.map +1 -1
  232. package/dist/components/Switch/index.js +2 -2
  233. package/dist/components/Table/index.cjs +2 -0
  234. package/dist/components/Table/index.cjs.map +1 -1
  235. package/dist/components/Table/index.js +2 -2
  236. package/dist/components/Tabs/index.cjs +2 -0
  237. package/dist/components/Tabs/index.cjs.map +1 -1
  238. package/dist/components/Tabs/index.js +2 -2
  239. package/dist/components/Text/index.cjs +2 -0
  240. package/dist/components/Text/index.cjs.map +1 -1
  241. package/dist/components/Text/index.js +2 -2
  242. package/dist/components/TextArea/index.cjs +2 -0
  243. package/dist/components/TextArea/index.cjs.map +1 -1
  244. package/dist/components/TextArea/index.js +3 -3
  245. package/dist/components/TextInput/index.cjs +2 -0
  246. package/dist/components/TextInput/index.cjs.map +1 -1
  247. package/dist/components/TextInput/index.js +2 -2
  248. package/dist/components/Toggle/index.cjs +2 -0
  249. package/dist/components/Toggle/index.cjs.map +1 -1
  250. package/dist/components/Toggle/index.js +2 -2
  251. package/dist/components/Tooltip/index.cjs +2 -0
  252. package/dist/components/Tooltip/index.cjs.map +1 -1
  253. package/dist/components/Tooltip/index.js +2 -2
  254. package/dist/components/VStack/index.cjs +2 -0
  255. package/dist/components/VStack/index.cjs.map +1 -1
  256. package/dist/components/VStack/index.js +4 -4
  257. package/dist/icons/index.cjs +2 -0
  258. package/dist/icons/index.cjs.map +1 -1
  259. package/dist/icons/index.js +2 -2
  260. package/dist/index.cjs +7 -5
  261. package/dist/index.cjs.map +1 -1
  262. package/dist/index.js +53 -53
  263. package/dist/theme/index.cjs +2 -0
  264. package/dist/theme/index.cjs.map +1 -1
  265. package/dist/theme/index.js +2 -2
  266. package/package.json +1 -1
  267. package/dist/chunk-R5JMDDCB.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { wrapStringChildren } from './chunk-VLZANXRZ.js';
1
+ import { wrapStringChildren } from './chunk-EMU3GXKM.js';
2
2
  import { cn } from './chunk-CHXHRJNZ.js';
3
3
  import { __name } from './chunk-WCQVDF3K.js';
4
4
  import { View } from 'react-native';
@@ -76,5 +76,5 @@ var HStack = /* @__PURE__ */ __name(({ gap, align, justify, className, children,
76
76
  }, "HStack");
77
77
 
78
78
  export { HStack };
79
- //# sourceMappingURL=chunk-OIHX5B4R.js.map
80
- //# sourceMappingURL=chunk-OIHX5B4R.js.map
79
+ //# sourceMappingURL=chunk-GYFX2I6B.js.map
80
+ //# sourceMappingURL=chunk-GYFX2I6B.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/HStack/HStack.tsx"],"names":[],"mappings":";;;;;;AAiBA,IAAM,WAAA,GAA0C;AAAA,EAC5C,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,GAAA,EAAK,WAAA;AAAA,EACL,OAAA,EAAS,eAAA;AAAA,EACT,QAAA,EAAU;AACd,CAAA;AAEA,IAAM,aAAA,GAA8C;AAAA,EAChD,KAAA,EAAO,eAAA;AAAA,EACP,MAAA,EAAQ,gBAAA;AAAA,EACR,GAAA,EAAK,aAAA;AAAA,EACL,OAAA,EAAS,iBAAA;AAAA,EACT,MAAA,EAAQ,gBAAA;AAAA,EACR,MAAA,EAAQ;AACZ,CAAA;AAEA,IAAM,WAAA,GAA2D;AAAA,EAC7D,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU;AACd,CAAA;AAEA,IAAM,aAAA,GAAmE;AAAA,EACrE,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,eAAA;AAAA,EACT,MAAA,EAAQ,cAAA;AAAA,EACR,MAAA,EAAQ;AACZ,CAAA;AAOA,IAAM,MAAA,GAAmC;AAAA,EACrC,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI;AACR,CAAA;AAUO,IAAM,MAAA,mBAAS,MAAA,CAAA,CAAC,EAAE,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,GAAG,IAAA,EAAK,KAAmB;AACjG,EAAA,MAAM,MAAA,GAAoB,EAAE,aAAA,EAAe,KAAA,EAAM;AACjD,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,CAAA,EAAG;AAChC,IAAA,MAAA,CAAO,GAAA,GAAM,OAAO,GAAG,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACrB,IAAA,MAAA,CAAO,UAAA,GAAa,YAAY,KAAK,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,YAAY,MAAA,EAAW;AACvB,IAAA,MAAA,CAAO,cAAA,GAAiB,cAAc,OAAO,CAAA;AAAA,EACjD;AACA,EAAA,MAAM,SAAS,KAAA,KAAU,MAAA,GAAY,MAAA,GAAU,CAAC,QAAQ,KAAK,CAAA;AAC7D,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACI,GAAG,IAAA;AAAA,MACJ,KAAA,EAAO,MAAA;AAAA,MACP,SAAA,EAAW,EAAA;AAAA,QACP,UAAA;AAAA,QACA,QAAQ,MAAA,IAAa,GAAA,KAAQ,CAAA,GAAI,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA,GAAK,MAAA;AAAA,QAChD,KAAA,KAAU,MAAA,GAAY,WAAA,CAAY,KAAK,CAAA,GAAI,MAAA;AAAA,QAC3C,OAAA,KAAY,MAAA,GAAY,aAAA,CAAc,OAAO,CAAA,GAAI,MAAA;AAAA,QACjD;AAAA,OACJ;AAAA,MAEC,6BAAmB,QAAQ;AAAA;AAAA,GAChC;AAER,CAAA,EA3BsB,QAAA","file":"chunk-OIHX5B4R.js","sourcesContent":["import type { ViewProps, ViewStyle } from 'react-native';\nimport { View } from 'react-native';\nimport { cn } from '../../utils/cn';\nimport { wrapStringChildren } from '../../utils/wrap-string-children';\n\nexport type StackGap = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12;\nexport type StackAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline';\nexport type StackJustify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n\nexport type HStackProps = ViewProps & {\n gap?: StackGap;\n align?: StackAlign;\n justify?: StackJustify;\n className?: string;\n testID?: string;\n};\n\nconst ALIGN_CLASS: Record<StackAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n};\n\nconst JUSTIFY_CLASS: Record<StackJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n};\n\nconst ALIGN_STYLE: Record<StackAlign, ViewStyle['alignItems']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst JUSTIFY_STYLE: Record<StackJustify, ViewStyle['justifyContent']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n};\n\n// Tailwind spacing scale → RN px. Mirrors the `gap-{n}` class output but\n// drives RN's native `gap` style, which Yoga supports directly. Inline\n// `gap` is more reliable than NativeWind's className path on native —\n// css-interop sometimes fails to apply gap classes through the static\n// extraction pipeline, leaving stacks with zero spacing.\nconst GAP_PX: Record<StackGap, number> = {\n 0: 0,\n 1: 4,\n 2: 8,\n 3: 12,\n 4: 16,\n 5: 20,\n 6: 24,\n 8: 32,\n 10: 40,\n 12: 48,\n};\n\n/**\n * Horizontal flex layout primitive. RSC-safe.\n *\n * Layout (`flexDirection`, `gap`, `alignItems`, `justifyContent`) is set\n * via inline style — NativeWind's className path doesn't reliably apply\n * these on native. The matching Tailwind classes are still emitted so\n * web tooling and consumers extending the className keep working.\n */\nexport const HStack = ({ gap, align, justify, className, children, style, ...rest }: HStackProps) => {\n const inline: ViewStyle = { flexDirection: 'row' };\n if (gap !== undefined && gap !== 0) {\n inline.gap = GAP_PX[gap];\n }\n if (align !== undefined) {\n inline.alignItems = ALIGN_STYLE[align];\n }\n if (justify !== undefined) {\n inline.justifyContent = JUSTIFY_STYLE[justify];\n }\n const merged = style === undefined ? inline : ([inline, style] as ViewStyle[]);\n return (\n <View\n {...rest}\n style={merged}\n className={cn(\n 'flex-row',\n gap !== undefined && gap !== 0 ? `gap-${gap}` : undefined,\n align !== undefined ? ALIGN_CLASS[align] : undefined,\n justify !== undefined ? JUSTIFY_CLASS[justify] : undefined,\n className\n )}\n >\n {wrapStringChildren(children)}\n </View>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/HStack/HStack.tsx"],"names":[],"mappings":";;;;;;AAiBA,IAAM,WAAA,GAA0C;AAAA,EAC5C,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,GAAA,EAAK,WAAA;AAAA,EACL,OAAA,EAAS,eAAA;AAAA,EACT,QAAA,EAAU;AACd,CAAA;AAEA,IAAM,aAAA,GAA8C;AAAA,EAChD,KAAA,EAAO,eAAA;AAAA,EACP,MAAA,EAAQ,gBAAA;AAAA,EACR,GAAA,EAAK,aAAA;AAAA,EACL,OAAA,EAAS,iBAAA;AAAA,EACT,MAAA,EAAQ,gBAAA;AAAA,EACR,MAAA,EAAQ;AACZ,CAAA;AAEA,IAAM,WAAA,GAA2D;AAAA,EAC7D,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU;AACd,CAAA;AAEA,IAAM,aAAA,GAAmE;AAAA,EACrE,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,eAAA;AAAA,EACT,MAAA,EAAQ,cAAA;AAAA,EACR,MAAA,EAAQ;AACZ,CAAA;AAOA,IAAM,MAAA,GAAmC;AAAA,EACrC,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI;AACR,CAAA;AAUO,IAAM,MAAA,mBAAS,MAAA,CAAA,CAAC,EAAE,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,GAAG,IAAA,EAAK,KAAmB;AACjG,EAAA,MAAM,MAAA,GAAoB,EAAE,aAAA,EAAe,KAAA,EAAM;AACjD,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,CAAA,EAAG;AAChC,IAAA,MAAA,CAAO,GAAA,GAAM,OAAO,GAAG,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACrB,IAAA,MAAA,CAAO,UAAA,GAAa,YAAY,KAAK,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,YAAY,MAAA,EAAW;AACvB,IAAA,MAAA,CAAO,cAAA,GAAiB,cAAc,OAAO,CAAA;AAAA,EACjD;AACA,EAAA,MAAM,SAAS,KAAA,KAAU,MAAA,GAAY,MAAA,GAAU,CAAC,QAAQ,KAAK,CAAA;AAC7D,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACI,GAAG,IAAA;AAAA,MACJ,KAAA,EAAO,MAAA;AAAA,MACP,SAAA,EAAW,EAAA;AAAA,QACP,UAAA;AAAA,QACA,QAAQ,MAAA,IAAa,GAAA,KAAQ,CAAA,GAAI,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA,GAAK,MAAA;AAAA,QAChD,KAAA,KAAU,MAAA,GAAY,WAAA,CAAY,KAAK,CAAA,GAAI,MAAA;AAAA,QAC3C,OAAA,KAAY,MAAA,GAAY,aAAA,CAAc,OAAO,CAAA,GAAI,MAAA;AAAA,QACjD;AAAA,OACJ;AAAA,MAEC,6BAAmB,QAAQ;AAAA;AAAA,GAChC;AAER,CAAA,EA3BsB,QAAA","file":"chunk-GYFX2I6B.js","sourcesContent":["import type { ViewProps, ViewStyle } from 'react-native';\nimport { View } from 'react-native';\nimport { cn } from '../../utils/cn';\nimport { wrapStringChildren } from '../../utils/wrap-string-children';\n\nexport type StackGap = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12;\nexport type StackAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline';\nexport type StackJustify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n\nexport type HStackProps = ViewProps & {\n gap?: StackGap;\n align?: StackAlign;\n justify?: StackJustify;\n className?: string;\n testID?: string;\n};\n\nconst ALIGN_CLASS: Record<StackAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n};\n\nconst JUSTIFY_CLASS: Record<StackJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n};\n\nconst ALIGN_STYLE: Record<StackAlign, ViewStyle['alignItems']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst JUSTIFY_STYLE: Record<StackJustify, ViewStyle['justifyContent']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n};\n\n// Tailwind spacing scale → RN px. Mirrors the `gap-{n}` class output but\n// drives RN's native `gap` style, which Yoga supports directly. Inline\n// `gap` is more reliable than NativeWind's className path on native —\n// css-interop sometimes fails to apply gap classes through the static\n// extraction pipeline, leaving stacks with zero spacing.\nconst GAP_PX: Record<StackGap, number> = {\n 0: 0,\n 1: 4,\n 2: 8,\n 3: 12,\n 4: 16,\n 5: 20,\n 6: 24,\n 8: 32,\n 10: 40,\n 12: 48,\n};\n\n/**\n * Horizontal flex layout primitive. RSC-safe.\n *\n * Layout (`flexDirection`, `gap`, `alignItems`, `justifyContent`) is set\n * via inline style — NativeWind's className path doesn't reliably apply\n * these on native. The matching Tailwind classes are still emitted so\n * web tooling and consumers extending the className keep working.\n */\nexport const HStack = ({ gap, align, justify, className, children, style, ...rest }: HStackProps) => {\n const inline: ViewStyle = { flexDirection: 'row' };\n if (gap !== undefined && gap !== 0) {\n inline.gap = GAP_PX[gap];\n }\n if (align !== undefined) {\n inline.alignItems = ALIGN_STYLE[align];\n }\n if (justify !== undefined) {\n inline.justifyContent = JUSTIFY_STYLE[justify];\n }\n const merged = style === undefined ? inline : ([inline, style] as ViewStyle[]);\n return (\n <View\n {...rest}\n style={merged}\n className={cn(\n 'flex-row',\n gap !== undefined && gap !== 0 ? `gap-${gap}` : undefined,\n align !== undefined ? ALIGN_CLASS[align] : undefined,\n justify !== undefined ? JUSTIFY_CLASS[justify] : undefined,\n className\n )}\n >\n {wrapStringChildren(children)}\n </View>\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import { px } from './chunk-5A2QOOVN.js';
2
- import { useThemeColors } from './chunk-R5JMDDCB.js';
2
+ import { useThemeColors } from './chunk-3W2O4OBL.js';
3
3
  import { cn } from './chunk-CHXHRJNZ.js';
4
4
  import { __name } from './chunk-WCQVDF3K.js';
5
5
  import { View, Text } from 'react-native';
@@ -140,5 +140,5 @@ var Card = Object.assign(CardRoot, {
140
140
  });
141
141
 
142
142
  export { Card };
143
- //# sourceMappingURL=chunk-PQW5LKAI.js.map
144
- //# sourceMappingURL=chunk-PQW5LKAI.js.map
143
+ //# sourceMappingURL=chunk-J2FSGJ2P.js.map
144
+ //# sourceMappingURL=chunk-J2FSGJ2P.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Card/Card.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-PQW5LKAI.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport type { ViewProps, ViewStyle } from 'react-native';\nimport { Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\n// Layout-only bases; theme-driven dimensions are merged inside each\n// component below so a custom theme reshapes the card.\nconst SURFACE_LAYOUT_BASE: ViewStyle = {\n borderWidth: 1,\n overflow: 'hidden',\n};\n\nconst HEADER_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'column',\n};\nconst CONTENT_LAYOUT_BASE: ViewStyle = {};\nconst FOOTER_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n borderTopWidth: 1,\n};\n\nexport type CardProps = Omit<ViewProps, 'children'> & {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Container surface for grouping related content. Pair with `Card.Header`,\n * `Card.Title`, `Card.Description`, `Card.Content`, and `Card.Footer` for\n * the conventional layout, or use any children directly.\n */\nconst CardRoot = ({ children, className, style, ...rest }: CardProps) => {\n const colors = useThemeColors();\n return (\n <View\n {...rest}\n className={cn(\n 'rounded-xl border border-semantic-border-default bg-semantic-background-elevated',\n className\n )}\n style={[\n SURFACE_LAYOUT_BASE,\n {\n borderRadius: px(colors.radius.xl),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: colors.semantic.border.default,\n },\n style,\n ]}\n >\n {children}\n </View>\n );\n};\n\nexport type CardSectionProps = Omit<ViewProps, 'children'> & {\n children?: ReactNode;\n className?: string;\n};\n\n/** Header section — sits flush with the card top with comfortable padding. */\nexport const CardHeader = ({ children, className, style, ...rest }: CardSectionProps) => {\n const colors = useThemeColors();\n const headerStyle: ViewStyle = {\n ...HEADER_LAYOUT_BASE,\n paddingHorizontal: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['5']),\n paddingBottom: px(colors.spacing['3']),\n gap: px(colors.spacing['1']),\n };\n return (\n <View {...rest} className={cn('flex-col gap-1 px-6 pt-5 pb-3', className)} style={[headerStyle, style]}>\n {children}\n </View>\n );\n};\n\n/** Body content — for arbitrary content between header and footer. */\nexport const CardContent = ({ children, className, style, ...rest }: CardSectionProps) => {\n const colors = useThemeColors();\n const contentStyle: ViewStyle = {\n ...CONTENT_LAYOUT_BASE,\n paddingHorizontal: px(colors.spacing['6']),\n paddingVertical: px(colors.spacing['4']),\n };\n // Auto-wrap raw string children in <Text>. RN refuses to render a\n // bare string inside a View in dev, and on rn-web it silently slips\n // through using whatever ambient color the surface has — which is\n // wrong in dark mode. Wrapping here matches the pattern other Card\n // subcomponents already follow.\n const wrapped =\n typeof children === 'string' ? (\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n lineHeight: px(colors.fontSize.md) * Number(colors.lineHeight.normal),\n }}\n >\n {children}\n </RNText>\n ) : (\n children\n );\n return (\n <View {...rest} className={cn('px-6 py-4', className)} style={[contentStyle, style]}>\n {wrapped}\n </View>\n );\n};\n\n/** Footer with a top border and a row of actions (typically Buttons). */\nexport const CardFooter = ({ children, className, style, ...rest }: CardSectionProps) => {\n const colors = useThemeColors();\n const footerStyle: ViewStyle = {\n ...FOOTER_LAYOUT_BASE,\n paddingHorizontal: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['3']),\n paddingBottom: px(colors.spacing['5']),\n gap: px(colors.spacing['2']),\n };\n return (\n <View\n {...rest}\n className={cn(\n 'flex-row items-center gap-2 px-6 pt-3 pb-5 border-t border-semantic-border-default',\n className\n )}\n style={[footerStyle, { borderTopColor: colors.semantic.border.default }, style]}\n >\n {children}\n </View>\n );\n};\n\nexport type CardTextProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/** Card title — heading-weight text. Renders as a heading on web. */\nexport const CardTitle = ({ children, className, testID }: CardTextProps) => {\n const colors = useThemeColors();\n return (\n <RNText\n {...(testID !== undefined ? { testID } : {})}\n accessibilityRole=\"header\"\n role=\"heading\"\n aria-level={3}\n className={cn('text-lg font-semibold text-semantic-text-default', className)}\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.display,\n fontSize: px(colors.fontSize.lg),\n fontWeight: colors.fontWeight.semibold as '600',\n }}\n >\n {children}\n </RNText>\n );\n};\n\n/** Muted subtitle that pairs with Card.Title. */\nexport const CardDescription = ({ children, className, testID }: CardTextProps) => {\n const colors = useThemeColors();\n return (\n <RNText\n {...(testID !== undefined ? { testID } : {})}\n className={cn('text-sm text-semantic-text-muted', className)}\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {children}\n </RNText>\n );\n};\n\n/**\n * Public `Card` value — the root function plus its `.Header`, `.Title`,\n * `.Description`, `.Content`, and `.Footer` static members. `Object.assign`\n * produces a value whose inferred type carries the static properties, so\n * `.d.ts` consumers can write `<Card.Header>` without a separate import.\n */\nexport const Card = Object.assign(CardRoot, {\n Header: CardHeader,\n Title: CardTitle,\n Description: CardDescription,\n Content: CardContent,\n Footer: CardFooter,\n});\n"]}
1
+ {"version":3,"sources":["../src/components/Card/Card.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-J2FSGJ2P.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport type { ViewProps, ViewStyle } from 'react-native';\nimport { Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\n// Layout-only bases; theme-driven dimensions are merged inside each\n// component below so a custom theme reshapes the card.\nconst SURFACE_LAYOUT_BASE: ViewStyle = {\n borderWidth: 1,\n overflow: 'hidden',\n};\n\nconst HEADER_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'column',\n};\nconst CONTENT_LAYOUT_BASE: ViewStyle = {};\nconst FOOTER_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n borderTopWidth: 1,\n};\n\nexport type CardProps = Omit<ViewProps, 'children'> & {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Container surface for grouping related content. Pair with `Card.Header`,\n * `Card.Title`, `Card.Description`, `Card.Content`, and `Card.Footer` for\n * the conventional layout, or use any children directly.\n */\nconst CardRoot = ({ children, className, style, ...rest }: CardProps) => {\n const colors = useThemeColors();\n return (\n <View\n {...rest}\n className={cn(\n 'rounded-xl border border-semantic-border-default bg-semantic-background-elevated',\n className\n )}\n style={[\n SURFACE_LAYOUT_BASE,\n {\n borderRadius: px(colors.radius.xl),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: colors.semantic.border.default,\n },\n style,\n ]}\n >\n {children}\n </View>\n );\n};\n\nexport type CardSectionProps = Omit<ViewProps, 'children'> & {\n children?: ReactNode;\n className?: string;\n};\n\n/** Header section — sits flush with the card top with comfortable padding. */\nexport const CardHeader = ({ children, className, style, ...rest }: CardSectionProps) => {\n const colors = useThemeColors();\n const headerStyle: ViewStyle = {\n ...HEADER_LAYOUT_BASE,\n paddingHorizontal: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['5']),\n paddingBottom: px(colors.spacing['3']),\n gap: px(colors.spacing['1']),\n };\n return (\n <View {...rest} className={cn('flex-col gap-1 px-6 pt-5 pb-3', className)} style={[headerStyle, style]}>\n {children}\n </View>\n );\n};\n\n/** Body content — for arbitrary content between header and footer. */\nexport const CardContent = ({ children, className, style, ...rest }: CardSectionProps) => {\n const colors = useThemeColors();\n const contentStyle: ViewStyle = {\n ...CONTENT_LAYOUT_BASE,\n paddingHorizontal: px(colors.spacing['6']),\n paddingVertical: px(colors.spacing['4']),\n };\n // Auto-wrap raw string children in <Text>. RN refuses to render a\n // bare string inside a View in dev, and on rn-web it silently slips\n // through using whatever ambient color the surface has — which is\n // wrong in dark mode. Wrapping here matches the pattern other Card\n // subcomponents already follow.\n const wrapped =\n typeof children === 'string' ? (\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n lineHeight: px(colors.fontSize.md) * Number(colors.lineHeight.normal),\n }}\n >\n {children}\n </RNText>\n ) : (\n children\n );\n return (\n <View {...rest} className={cn('px-6 py-4', className)} style={[contentStyle, style]}>\n {wrapped}\n </View>\n );\n};\n\n/** Footer with a top border and a row of actions (typically Buttons). */\nexport const CardFooter = ({ children, className, style, ...rest }: CardSectionProps) => {\n const colors = useThemeColors();\n const footerStyle: ViewStyle = {\n ...FOOTER_LAYOUT_BASE,\n paddingHorizontal: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['3']),\n paddingBottom: px(colors.spacing['5']),\n gap: px(colors.spacing['2']),\n };\n return (\n <View\n {...rest}\n className={cn(\n 'flex-row items-center gap-2 px-6 pt-3 pb-5 border-t border-semantic-border-default',\n className\n )}\n style={[footerStyle, { borderTopColor: colors.semantic.border.default }, style]}\n >\n {children}\n </View>\n );\n};\n\nexport type CardTextProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/** Card title — heading-weight text. Renders as a heading on web. */\nexport const CardTitle = ({ children, className, testID }: CardTextProps) => {\n const colors = useThemeColors();\n return (\n <RNText\n {...(testID !== undefined ? { testID } : {})}\n accessibilityRole=\"header\"\n role=\"heading\"\n aria-level={3}\n className={cn('text-lg font-semibold text-semantic-text-default', className)}\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.display,\n fontSize: px(colors.fontSize.lg),\n fontWeight: colors.fontWeight.semibold as '600',\n }}\n >\n {children}\n </RNText>\n );\n};\n\n/** Muted subtitle that pairs with Card.Title. */\nexport const CardDescription = ({ children, className, testID }: CardTextProps) => {\n const colors = useThemeColors();\n return (\n <RNText\n {...(testID !== undefined ? { testID } : {})}\n className={cn('text-sm text-semantic-text-muted', className)}\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {children}\n </RNText>\n );\n};\n\n/**\n * Public `Card` value — the root function plus its `.Header`, `.Title`,\n * `.Description`, `.Content`, and `.Footer` static members. `Object.assign`\n * produces a value whose inferred type carries the static properties, so\n * `.d.ts` consumers can write `<Card.Header>` without a separate import.\n */\nexport const Card = Object.assign(CardRoot, {\n Header: CardHeader,\n Title: CardTitle,\n Description: CardDescription,\n Content: CardContent,\n Footer: CardFooter,\n});\n"]}
@@ -1,4 +1,4 @@
1
- import { Table } from './chunk-5YHT252H.js';
1
+ import { Table } from './chunk-GTDDUPTE.js';
2
2
  import { usePagination } from './chunk-73CUV7MW.js';
3
3
  import { __name } from './chunk-WCQVDF3K.js';
4
4
  import { useState, useMemo } from 'react';
@@ -198,5 +198,5 @@ function PaginationControls({
198
198
  __name(PaginationControls, "PaginationControls");
199
199
 
200
200
  export { DataTable };
201
- //# sourceMappingURL=chunk-C32XGHWO.js.map
202
- //# sourceMappingURL=chunk-C32XGHWO.js.map
201
+ //# sourceMappingURL=chunk-KE2TP5XZ.js.map
202
+ //# sourceMappingURL=chunk-KE2TP5XZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/DataTable/DataTable.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-C32XGHWO.js","sourcesContent":["'use client';\n\n/**\n * DataTable — convenience wrapper around Table that renders rows from a\n * `columns` + `data` array, with in-memory sort and client-side pagination.\n *\n * Deferred to v2:\n * - Server-side data (custom `onSort` / `onPaginate` callbacks)\n * - Filtering, row selection, expanding rows\n * - Column resizing, sticky headers\n * - Variable-width columns on native (v1 uses equal flex)\n */\n\nimport { type ReactNode, useMemo, useState } from 'react';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { usePagination } from '../Pagination/use-pagination';\nimport { Table } from '../Table/Table';\nimport type { TableAlign } from '../Table/Table.shared';\n\n// ─── Column definition ────────────────────────────────────────────────────────\n\nexport type SortDirection = 'asc' | 'desc';\n\nexport type SortState = {\n id: string;\n direction: SortDirection;\n};\n\nexport type Column<T> = {\n /** Unique column identifier. Used as the sort key. */\n id: string;\n /** Content rendered in the header cell. */\n header: ReactNode;\n /** Render function for a data row. Receives the full row value. */\n cell: (row: T) => ReactNode;\n /** Enable click-to-sort on this column. @defaultValue false */\n sortable?: boolean;\n /** Horizontal alignment of cell content. @defaultValue 'left' */\n align?: TableAlign;\n};\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport type DataTableProps<T extends object> = {\n /** Row data array. */\n data: T[];\n /** Column definitions. */\n columns: Column<T>[];\n /**\n * Number of rows per page.\n * @defaultValue 10\n */\n pageSize?: number;\n /**\n * Initial sort state. Must reference a `sortable` column id.\n */\n defaultSort?: SortState;\n /**\n * Called when a row is pressed (native) or clicked (web).\n */\n onRowPress?: (row: T) => void;\n /** Content shown when `data` is empty. @defaultValue \"No data\" */\n emptyState?: ReactNode;\n /** Alternating row background tinting. */\n striped?: boolean;\n /** Reduce cell padding. */\n compact?: boolean;\n /** Draw borders around cells. */\n bordered?: boolean;\n className?: string;\n testID?: string;\n};\n\n// ─── Sort helpers ─────────────────────────────────────────────────────────────\n\nfunction sortData<T extends object>(data: T[], sort: SortState | null): T[] {\n if (!sort) {\n return data;\n }\n const key = sort.id as keyof T;\n return [...data].sort((a, b) => {\n const av = a[key];\n const bv = b[key];\n if (av == null && bv == null) {\n return 0;\n }\n if (av == null) {\n return 1;\n }\n if (bv == null) {\n return -1;\n }\n const cmp = av < bv ? -1 : av > bv ? 1 : 0;\n return sort.direction === 'asc' ? cmp : -cmp;\n });\n}\n\n// ─── Sort indicator ───────────────────────────────────────────────────────────\n\nfunction SortIndicator({ direction }: { direction?: SortDirection }) {\n if (direction === undefined) {\n return <span style={{ marginLeft: 4, opacity: 0.3 }}>⇅</span>;\n }\n return <span style={{ marginLeft: 4 }}>{direction === 'asc' ? '↑' : '↓'}</span>;\n}\n\n// ─── DataTable ────────────────────────────────────────────────────────────────\n\nexport function DataTable<T extends object>({\n data,\n columns,\n pageSize = 10,\n defaultSort,\n onRowPress,\n emptyState,\n striped,\n compact,\n bordered,\n testID,\n className,\n}: DataTableProps<T>) {\n const [sort, setSort] = useState<SortState | null>(defaultSort ?? null);\n\n const sorted = useMemo(() => sortData(data, sort), [data, sort]);\n\n const pageCount = Math.max(1, Math.ceil(sorted.length / pageSize));\n const { page, goToPage, canPrev, canNext } = usePagination({ pageCount, defaultPage: 1 });\n\n const pageSlice = useMemo(() => {\n const start = (page - 1) * pageSize;\n return sorted.slice(start, start + pageSize);\n }, [sorted, page, pageSize]);\n\n const handleSort = (colId: string) => {\n setSort((prev) => {\n if (prev?.id !== colId) {\n goToPage(1);\n return { id: colId, direction: 'asc' };\n }\n if (prev.direction === 'asc') {\n return { id: colId, direction: 'desc' };\n }\n goToPage(1);\n return null;\n });\n };\n\n // Build table props without spreading undefined into exactOptionalPropertyTypes\n const tableProps: {\n striped?: boolean;\n compact?: boolean;\n bordered?: boolean;\n testID?: string;\n className?: string;\n } = {};\n if (striped !== undefined) {\n tableProps.striped = striped;\n }\n if (compact !== undefined) {\n tableProps.compact = compact;\n }\n if (bordered !== undefined) {\n tableProps.bordered = bordered;\n }\n if (testID !== undefined) {\n tableProps.testID = testID;\n }\n if (className !== undefined) {\n tableProps.className = className;\n }\n\n return (\n <View style={{ width: '100%' }}>\n <Table {...tableProps}>\n <Table.Header>\n <Table.Row>\n {columns.map((col) => {\n const align = col.align;\n return (\n <Table.HeaderCell key={col.id} {...(align !== undefined ? { align } : {})}>\n {col.sortable ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Sort by ${col.id}`}\n aria-label={`Sort by ${col.id}`}\n onPress={() => handleSort(col.id)}\n style={{ flexDirection: 'row', alignItems: 'center' }}\n >\n {typeof col.header === 'string' ? (\n <RNText>{col.header}</RNText>\n ) : (\n col.header\n )}\n <SortIndicator\n {...(sort?.id === col.id ? { direction: sort.direction } : {})}\n />\n </Pressable>\n ) : (\n col.header\n )}\n </Table.HeaderCell>\n );\n })}\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {pageSlice.length === 0 ? (\n <Table.Row>\n <Table.Cell colSpan={columns.length}>\n <EmptyState>{emptyState ?? 'No data'}</EmptyState>\n </Table.Cell>\n </Table.Row>\n ) : (\n pageSlice.map((row, i) => (\n <Table.Row\n // biome-ignore lint/suspicious/noArrayIndexKey: rows have no guaranteed stable id in v1; v2 will add keyExtractor\n key={i}\n {...(onRowPress !== undefined ? { onPress: () => onRowPress(row) } : {})}\n >\n {columns.map((col) => {\n const colAlign = col.align;\n return (\n <Table.Cell\n key={col.id}\n {...(colAlign !== undefined ? { align: colAlign } : {})}\n >\n {col.cell(row)}\n </Table.Cell>\n );\n })}\n </Table.Row>\n ))\n )}\n </Table.Body>\n </Table>\n\n {/* Pagination controls — only shown when there is more than one page */}\n {pageCount > 1 && (\n <PaginationControls\n page={page}\n pageCount={pageCount}\n canPrev={canPrev}\n canNext={canNext}\n goToPage={goToPage}\n />\n )}\n </View>\n );\n}\n\n// ─── Internal sub-components ──────────────────────────────────────────────────\n\nfunction EmptyState({ children }: { children: ReactNode }) {\n return (\n <View style={{ paddingVertical: 32, alignItems: 'center' }}>\n {typeof children === 'string' ? (\n <RNText style={{ color: '#888', fontSize: 14 }}>{children}</RNText>\n ) : (\n children\n )}\n </View>\n );\n}\n\nfunction PaginationControls({\n page,\n pageCount,\n canPrev,\n canNext,\n goToPage,\n}: {\n page: number;\n pageCount: number;\n canPrev: boolean;\n canNext: boolean;\n goToPage: (p: number) => void;\n}) {\n return (\n <View\n style={{\n flexDirection: 'row',\n justifyContent: 'flex-end',\n alignItems: 'center',\n paddingVertical: 8,\n gap: 8,\n }}\n >\n <Pressable\n onPress={canPrev ? () => goToPage(page - 1) : undefined}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Previous page\"\n aria-label=\"Previous page\"\n aria-disabled={!canPrev}\n style={{ opacity: canPrev ? 1 : 0.4, paddingHorizontal: 8 }}\n >\n <RNText style={{ fontSize: 14 }}>‹ Prev</RNText>\n </Pressable>\n <RNText style={{ fontSize: 14 }} aria-live=\"polite\">\n {page} / {pageCount}\n </RNText>\n <Pressable\n onPress={canNext ? () => goToPage(page + 1) : undefined}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Next page\"\n aria-label=\"Next page\"\n aria-disabled={!canNext}\n style={{ opacity: canNext ? 1 : 0.4, paddingHorizontal: 8 }}\n >\n <RNText style={{ fontSize: 14 }}>Next ›</RNText>\n </Pressable>\n </View>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/DataTable/DataTable.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-KE2TP5XZ.js","sourcesContent":["'use client';\n\n/**\n * DataTable — convenience wrapper around Table that renders rows from a\n * `columns` + `data` array, with in-memory sort and client-side pagination.\n *\n * Deferred to v2:\n * - Server-side data (custom `onSort` / `onPaginate` callbacks)\n * - Filtering, row selection, expanding rows\n * - Column resizing, sticky headers\n * - Variable-width columns on native (v1 uses equal flex)\n */\n\nimport { type ReactNode, useMemo, useState } from 'react';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { usePagination } from '../Pagination/use-pagination';\nimport { Table } from '../Table/Table';\nimport type { TableAlign } from '../Table/Table.shared';\n\n// ─── Column definition ────────────────────────────────────────────────────────\n\nexport type SortDirection = 'asc' | 'desc';\n\nexport type SortState = {\n id: string;\n direction: SortDirection;\n};\n\nexport type Column<T> = {\n /** Unique column identifier. Used as the sort key. */\n id: string;\n /** Content rendered in the header cell. */\n header: ReactNode;\n /** Render function for a data row. Receives the full row value. */\n cell: (row: T) => ReactNode;\n /** Enable click-to-sort on this column. @defaultValue false */\n sortable?: boolean;\n /** Horizontal alignment of cell content. @defaultValue 'left' */\n align?: TableAlign;\n};\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport type DataTableProps<T extends object> = {\n /** Row data array. */\n data: T[];\n /** Column definitions. */\n columns: Column<T>[];\n /**\n * Number of rows per page.\n * @defaultValue 10\n */\n pageSize?: number;\n /**\n * Initial sort state. Must reference a `sortable` column id.\n */\n defaultSort?: SortState;\n /**\n * Called when a row is pressed (native) or clicked (web).\n */\n onRowPress?: (row: T) => void;\n /** Content shown when `data` is empty. @defaultValue \"No data\" */\n emptyState?: ReactNode;\n /** Alternating row background tinting. */\n striped?: boolean;\n /** Reduce cell padding. */\n compact?: boolean;\n /** Draw borders around cells. */\n bordered?: boolean;\n className?: string;\n testID?: string;\n};\n\n// ─── Sort helpers ─────────────────────────────────────────────────────────────\n\nfunction sortData<T extends object>(data: T[], sort: SortState | null): T[] {\n if (!sort) {\n return data;\n }\n const key = sort.id as keyof T;\n return [...data].sort((a, b) => {\n const av = a[key];\n const bv = b[key];\n if (av == null && bv == null) {\n return 0;\n }\n if (av == null) {\n return 1;\n }\n if (bv == null) {\n return -1;\n }\n const cmp = av < bv ? -1 : av > bv ? 1 : 0;\n return sort.direction === 'asc' ? cmp : -cmp;\n });\n}\n\n// ─── Sort indicator ───────────────────────────────────────────────────────────\n\nfunction SortIndicator({ direction }: { direction?: SortDirection }) {\n if (direction === undefined) {\n return <span style={{ marginLeft: 4, opacity: 0.3 }}>⇅</span>;\n }\n return <span style={{ marginLeft: 4 }}>{direction === 'asc' ? '↑' : '↓'}</span>;\n}\n\n// ─── DataTable ────────────────────────────────────────────────────────────────\n\nexport function DataTable<T extends object>({\n data,\n columns,\n pageSize = 10,\n defaultSort,\n onRowPress,\n emptyState,\n striped,\n compact,\n bordered,\n testID,\n className,\n}: DataTableProps<T>) {\n const [sort, setSort] = useState<SortState | null>(defaultSort ?? null);\n\n const sorted = useMemo(() => sortData(data, sort), [data, sort]);\n\n const pageCount = Math.max(1, Math.ceil(sorted.length / pageSize));\n const { page, goToPage, canPrev, canNext } = usePagination({ pageCount, defaultPage: 1 });\n\n const pageSlice = useMemo(() => {\n const start = (page - 1) * pageSize;\n return sorted.slice(start, start + pageSize);\n }, [sorted, page, pageSize]);\n\n const handleSort = (colId: string) => {\n setSort((prev) => {\n if (prev?.id !== colId) {\n goToPage(1);\n return { id: colId, direction: 'asc' };\n }\n if (prev.direction === 'asc') {\n return { id: colId, direction: 'desc' };\n }\n goToPage(1);\n return null;\n });\n };\n\n // Build table props without spreading undefined into exactOptionalPropertyTypes\n const tableProps: {\n striped?: boolean;\n compact?: boolean;\n bordered?: boolean;\n testID?: string;\n className?: string;\n } = {};\n if (striped !== undefined) {\n tableProps.striped = striped;\n }\n if (compact !== undefined) {\n tableProps.compact = compact;\n }\n if (bordered !== undefined) {\n tableProps.bordered = bordered;\n }\n if (testID !== undefined) {\n tableProps.testID = testID;\n }\n if (className !== undefined) {\n tableProps.className = className;\n }\n\n return (\n <View style={{ width: '100%' }}>\n <Table {...tableProps}>\n <Table.Header>\n <Table.Row>\n {columns.map((col) => {\n const align = col.align;\n return (\n <Table.HeaderCell key={col.id} {...(align !== undefined ? { align } : {})}>\n {col.sortable ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Sort by ${col.id}`}\n aria-label={`Sort by ${col.id}`}\n onPress={() => handleSort(col.id)}\n style={{ flexDirection: 'row', alignItems: 'center' }}\n >\n {typeof col.header === 'string' ? (\n <RNText>{col.header}</RNText>\n ) : (\n col.header\n )}\n <SortIndicator\n {...(sort?.id === col.id ? { direction: sort.direction } : {})}\n />\n </Pressable>\n ) : (\n col.header\n )}\n </Table.HeaderCell>\n );\n })}\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {pageSlice.length === 0 ? (\n <Table.Row>\n <Table.Cell colSpan={columns.length}>\n <EmptyState>{emptyState ?? 'No data'}</EmptyState>\n </Table.Cell>\n </Table.Row>\n ) : (\n pageSlice.map((row, i) => (\n <Table.Row\n // biome-ignore lint/suspicious/noArrayIndexKey: rows have no guaranteed stable id in v1; v2 will add keyExtractor\n key={i}\n {...(onRowPress !== undefined ? { onPress: () => onRowPress(row) } : {})}\n >\n {columns.map((col) => {\n const colAlign = col.align;\n return (\n <Table.Cell\n key={col.id}\n {...(colAlign !== undefined ? { align: colAlign } : {})}\n >\n {col.cell(row)}\n </Table.Cell>\n );\n })}\n </Table.Row>\n ))\n )}\n </Table.Body>\n </Table>\n\n {/* Pagination controls — only shown when there is more than one page */}\n {pageCount > 1 && (\n <PaginationControls\n page={page}\n pageCount={pageCount}\n canPrev={canPrev}\n canNext={canNext}\n goToPage={goToPage}\n />\n )}\n </View>\n );\n}\n\n// ─── Internal sub-components ──────────────────────────────────────────────────\n\nfunction EmptyState({ children }: { children: ReactNode }) {\n return (\n <View style={{ paddingVertical: 32, alignItems: 'center' }}>\n {typeof children === 'string' ? (\n <RNText style={{ color: '#888', fontSize: 14 }}>{children}</RNText>\n ) : (\n children\n )}\n </View>\n );\n}\n\nfunction PaginationControls({\n page,\n pageCount,\n canPrev,\n canNext,\n goToPage,\n}: {\n page: number;\n pageCount: number;\n canPrev: boolean;\n canNext: boolean;\n goToPage: (p: number) => void;\n}) {\n return (\n <View\n style={{\n flexDirection: 'row',\n justifyContent: 'flex-end',\n alignItems: 'center',\n paddingVertical: 8,\n gap: 8,\n }}\n >\n <Pressable\n onPress={canPrev ? () => goToPage(page - 1) : undefined}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Previous page\"\n aria-label=\"Previous page\"\n aria-disabled={!canPrev}\n style={{ opacity: canPrev ? 1 : 0.4, paddingHorizontal: 8 }}\n >\n <RNText style={{ fontSize: 14 }}>‹ Prev</RNText>\n </Pressable>\n <RNText style={{ fontSize: 14 }} aria-live=\"polite\">\n {page} / {pageCount}\n </RNText>\n <Pressable\n onPress={canNext ? () => goToPage(page + 1) : undefined}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Next page\"\n aria-label=\"Next page\"\n aria-disabled={!canNext}\n style={{ opacity: canNext ? 1 : 0.4, paddingHorizontal: 8 }}\n >\n <RNText style={{ fontSize: 14 }}>Next ›</RNText>\n </Pressable>\n </View>\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { TextInput } from './chunk-V75O7QQO.js';
1
+ import { TextInput } from './chunk-FQDCPWLX.js';
2
2
  import { __name } from './chunk-WCQVDF3K.js';
3
3
  import { jsx } from 'nativewind/jsx-runtime';
4
4
 
@@ -9,5 +9,5 @@ var TextArea = /* @__PURE__ */ __name(({ numberOfLines = 4, resize = "vertical",
9
9
  }, "TextArea");
10
10
 
11
11
  export { TextArea };
12
- //# sourceMappingURL=chunk-USFXANEU.js.map
13
- //# sourceMappingURL=chunk-USFXANEU.js.map
12
+ //# sourceMappingURL=chunk-LWW3FJHF.js.map
13
+ //# sourceMappingURL=chunk-LWW3FJHF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/TextArea/TextArea.tsx"],"names":[],"mappings":";;;;AAuBO,IAAM,QAAA,mBAAW,MAAA,CAAA,CAAC,EAAE,aAAA,GAAgB,CAAA,EAAG,SAAS,UAAA,EAAY,KAAA,EAAO,GAAG,IAAA,EAAK,KAAqB;AAInG,EAAA,MAAM,WAAA,GAAc,EAAE,MAAA,EAAO;AAC7B,EAAA,MAAM,SAAS,KAAA,KAAU,MAAA,GAAY,WAAA,GAAc,CAAC,aAAa,KAAK,CAAA;AACtE,EAAA,uBAAO,GAAA,CAAC,aAAU,SAAA,EAAS,IAAA,EAAC,eAA+B,GAAG,IAAA,EAAM,OAAO,MAAA,EAAQ,CAAA;AACvF,CAAA,EAPwB,UAAA","file":"chunk-USFXANEU.js","sourcesContent":["import type { TextStyle } from 'react-native';\nimport type { TextInputProps } from '../TextInput';\nimport { TextInput } from '../TextInput';\n\nexport type TextAreaResize = 'none' | 'vertical' | 'horizontal' | 'both';\n\nexport type TextAreaProps = TextInputProps & {\n /**\n * On web, controls the underlying `<textarea>`'s resize handle. Ignored\n * on native (where height is determined by `numberOfLines`).\n * @defaultValue 'vertical'\n */\n resize?: TextAreaResize;\n};\n\n/**\n * Multi-line text input. Thin wrapper over TextInput that fixes `multiline=true`\n * and provides a sensible default for `numberOfLines`.\n *\n * The web textarea is vertically resizable by default — set `resize=\"none\"`\n * to lock it. On native, the prop is a no-op since RN's `<TextInput multiline>`\n * sizes from `numberOfLines`.\n */\nexport const TextArea = ({ numberOfLines = 4, resize = 'vertical', style, ...rest }: TextAreaProps) => {\n // `resize` isn't part of RN's TextStyle but react-native-web passes\n // unknown style props through to the DOM <textarea>, so this lands\n // on the right element on web and is silently ignored on native.\n const resizeStyle = { resize } as unknown as TextStyle;\n const merged = style === undefined ? resizeStyle : [resizeStyle, style];\n return <TextInput multiline numberOfLines={numberOfLines} {...rest} style={merged} />;\n};\n"]}
1
+ {"version":3,"sources":["../src/components/TextArea/TextArea.tsx"],"names":[],"mappings":";;;;AAuBO,IAAM,QAAA,mBAAW,MAAA,CAAA,CAAC,EAAE,aAAA,GAAgB,CAAA,EAAG,SAAS,UAAA,EAAY,KAAA,EAAO,GAAG,IAAA,EAAK,KAAqB;AAInG,EAAA,MAAM,WAAA,GAAc,EAAE,MAAA,EAAO;AAC7B,EAAA,MAAM,SAAS,KAAA,KAAU,MAAA,GAAY,WAAA,GAAc,CAAC,aAAa,KAAK,CAAA;AACtE,EAAA,uBAAO,GAAA,CAAC,aAAU,SAAA,EAAS,IAAA,EAAC,eAA+B,GAAG,IAAA,EAAM,OAAO,MAAA,EAAQ,CAAA;AACvF,CAAA,EAPwB,UAAA","file":"chunk-LWW3FJHF.js","sourcesContent":["import type { TextStyle } from 'react-native';\nimport type { TextInputProps } from '../TextInput';\nimport { TextInput } from '../TextInput';\n\nexport type TextAreaResize = 'none' | 'vertical' | 'horizontal' | 'both';\n\nexport type TextAreaProps = TextInputProps & {\n /**\n * On web, controls the underlying `<textarea>`'s resize handle. Ignored\n * on native (where height is determined by `numberOfLines`).\n * @defaultValue 'vertical'\n */\n resize?: TextAreaResize;\n};\n\n/**\n * Multi-line text input. Thin wrapper over TextInput that fixes `multiline=true`\n * and provides a sensible default for `numberOfLines`.\n *\n * The web textarea is vertically resizable by default — set `resize=\"none\"`\n * to lock it. On native, the prop is a no-op since RN's `<TextInput multiline>`\n * sizes from `numberOfLines`.\n */\nexport const TextArea = ({ numberOfLines = 4, resize = 'vertical', style, ...rest }: TextAreaProps) => {\n // `resize` isn't part of RN's TextStyle but react-native-web passes\n // unknown style props through to the DOM <textarea>, so this lands\n // on the right element on web and is silently ignored on native.\n const resizeStyle = { resize } as unknown as TextStyle;\n const merged = style === undefined ? resizeStyle : [resizeStyle, style];\n return <TextInput multiline numberOfLines={numberOfLines} {...rest} style={merged} />;\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { useThemeColors, useColorScheme } from './chunk-R5JMDDCB.js';
1
+ import { useThemeColors, useColorScheme } from './chunk-3W2O4OBL.js';
2
2
  import { cn } from './chunk-CHXHRJNZ.js';
3
3
  import { __name } from './chunk-WCQVDF3K.js';
4
4
  import { useRef, useEffect } from 'react';
@@ -65,5 +65,5 @@ var Skeleton = /* @__PURE__ */ __name(({
65
65
  }, "Skeleton");
66
66
 
67
67
  export { Skeleton };
68
- //# sourceMappingURL=chunk-3IIIHZHT.js.map
69
- //# sourceMappingURL=chunk-3IIIHZHT.js.map
68
+ //# sourceMappingURL=chunk-MQZXQOGY.js.map
69
+ //# sourceMappingURL=chunk-MQZXQOGY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Skeleton/Skeleton.tsx"],"names":[],"mappings":";;;;;;;AAyBA,IAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAM,SAAA,GAAY,IAAA;AAClB,IAAM,SAAA,GAAY,CAAA;AAUX,IAAM,2BAAW,MAAA,CAAA,CAAC;AAAA,EACrB,KAAA,GAAQ,MAAA;AAAA,EACR,MAAA,GAAS,EAAA;AAAA,EACT,MAAA,GAAS,CAAA;AAAA,EACT,QAAQ,QAAA,GAAW,KAAA;AAAA,EACnB,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACJ,CAAA,KAAqB;AACjB,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,MAAA,GAAS,gBAAe,KAAM,MAAA;AACpC,EAAA,MAAM,UAAU,MAAA,CAAO,IAAI,SAAS,KAAA,CAAM,SAAS,CAAC,CAAA,CAAE,OAAA;AAEtD,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,QAAA,EAAU;AACV,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AAAA,MAClB,SAAS,QAAA,CAAS;AAAA,QACd,QAAA,CAAS,OAAO,OAAA,EAAS;AAAA,UACrB,OAAA,EAAS,SAAA;AAAA,UACT,QAAA,EAAU,iBAAA;AAAA,UACV,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UAChC,eAAA,EAAiB;AAAA,SACpB,CAAA;AAAA,QACD,QAAA,CAAS,OAAO,OAAA,EAAS;AAAA,UACrB,OAAA,EAAS,SAAA;AAAA,UACT,QAAA,EAAU,iBAAA;AAAA,UACV,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UAChC,eAAA,EAAiB;AAAA,SACpB;AAAA,OACJ;AAAA,KACL;AACA,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,OAAO,MAAM;AACT,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACd,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA;AAWtB,EAAA,MAAM,SAAA,GAAuB;AAAA,IACzB,KAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA,EAAc,MAAA,KAAW,MAAA,GAAS,IAAA,GAAO,MAAA;AAAA,IACzC,eAAA,EAAiB,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,KAAK;AAAA,GACtF;AAEA,EAAA,uBACI,GAAA;AAAA,IAAC,QAAA,CAAS,IAAA;AAAA,IAAT;AAAA,MACI,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,MAC1C,aAAA,EAAa,IAAA;AAAA,MACb,2BAAA,EAA2B,IAAA;AAAA,MAC3B,yBAAA,EAA0B,IAAA;AAAA,MAC1B,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC7D,KAAA,EAAO,CAAC,SAAA,EAAW,QAAA,GAAW,OAAO,EAAE,OAAA,IAAW,KAAK;AAAA;AAAA,GAC3D;AAER,CAAA,EAjEwB,UAAA","file":"chunk-3IIIHZHT.js","sourcesContent":["'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { Animated, Easing, type ViewStyle } from 'react-native';\nimport { useColorScheme } from '../../theme/use-color-scheme';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type SkeletonProps = {\n /** Width — number of px or any RN dimension string. Default `100%`. */\n width?: number | `${number}%` | 'auto';\n /** Height — number of px. Default 16. */\n height?: number;\n /**\n * Border radius. Defaults to `theme.radius.md` (6px). Use `'full'`\n * (= 9999px) for circular skeletons (avatars).\n */\n radius?: number | 'full';\n /** Disable the pulse — useful when stacking many skeletons in a list. */\n static?: boolean;\n className?: string;\n style?: ViewStyle;\n testID?: string;\n};\n\nconst PULSE_DURATION_MS = 900;\nconst PULSE_MIN = 0.55;\nconst PULSE_MAX = 1;\n\n/**\n * Subtle loading placeholder. Pulses between full and 55% opacity to signal\n * \"content is loading here, in this shape\" without flashing or distracting.\n *\n * Uses RN `Animated` for the opacity loop — works on web and native with\n * the same code. Respects the `static` prop when you want to skip the\n * animation (e.g. when stacking many skeletons in a long list).\n */\nexport const Skeleton = ({\n width = '100%' as const,\n height = 16,\n radius = 6,\n static: isStatic = false,\n className,\n style,\n testID,\n}: SkeletonProps) => {\n const colors = useThemeColors();\n const isDark = useColorScheme() === 'dark';\n const opacity = useRef(new Animated.Value(PULSE_MAX)).current;\n\n useEffect(() => {\n if (isStatic) {\n return;\n }\n const loop = Animated.loop(\n Animated.sequence([\n Animated.timing(opacity, {\n toValue: PULSE_MIN,\n duration: PULSE_DURATION_MS,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: PULSE_MAX,\n duration: PULSE_DURATION_MS,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n ])\n );\n loop.start();\n return () => {\n loop.stop();\n };\n }, [isStatic, opacity]);\n\n // Skeleton intentionally uses a stronger neutral than the generic\n // semantic.background.subtle. The previous subtle-bg skeleton washed\n // out against the warm-paper page background — barely a hint of a\n // placeholder. A loading state must read as \"something will appear\n // here\", not \"page barely loading.\"\n //\n // On dark we step the other direction (neutral.700 ≈ #3f3f46) so the\n // skeleton is clearly lighter than the page bg (#18181b) without being\n // a glaring grey block.\n const baseStyle: ViewStyle = {\n width,\n height,\n borderRadius: radius === 'full' ? 9999 : radius,\n backgroundColor: isDark ? colors.color.neutral['700'] : colors.color.neutral['200'],\n };\n\n return (\n <Animated.View\n {...(testID !== undefined ? { testID } : {})}\n aria-hidden={true}\n accessibilityElementsHidden\n importantForAccessibility=\"no\"\n className={cn('bg-neutral-200 dark:bg-neutral-700', className)}\n style={[baseStyle, isStatic ? null : { opacity }, style]}\n />\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Skeleton/Skeleton.tsx"],"names":[],"mappings":";;;;;;;AAyBA,IAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAM,SAAA,GAAY,IAAA;AAClB,IAAM,SAAA,GAAY,CAAA;AAUX,IAAM,2BAAW,MAAA,CAAA,CAAC;AAAA,EACrB,KAAA,GAAQ,MAAA;AAAA,EACR,MAAA,GAAS,EAAA;AAAA,EACT,MAAA,GAAS,CAAA;AAAA,EACT,QAAQ,QAAA,GAAW,KAAA;AAAA,EACnB,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACJ,CAAA,KAAqB;AACjB,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,MAAA,GAAS,gBAAe,KAAM,MAAA;AACpC,EAAA,MAAM,UAAU,MAAA,CAAO,IAAI,SAAS,KAAA,CAAM,SAAS,CAAC,CAAA,CAAE,OAAA;AAEtD,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,QAAA,EAAU;AACV,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AAAA,MAClB,SAAS,QAAA,CAAS;AAAA,QACd,QAAA,CAAS,OAAO,OAAA,EAAS;AAAA,UACrB,OAAA,EAAS,SAAA;AAAA,UACT,QAAA,EAAU,iBAAA;AAAA,UACV,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UAChC,eAAA,EAAiB;AAAA,SACpB,CAAA;AAAA,QACD,QAAA,CAAS,OAAO,OAAA,EAAS;AAAA,UACrB,OAAA,EAAS,SAAA;AAAA,UACT,QAAA,EAAU,iBAAA;AAAA,UACV,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UAChC,eAAA,EAAiB;AAAA,SACpB;AAAA,OACJ;AAAA,KACL;AACA,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,OAAO,MAAM;AACT,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACd,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA;AAWtB,EAAA,MAAM,SAAA,GAAuB;AAAA,IACzB,KAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA,EAAc,MAAA,KAAW,MAAA,GAAS,IAAA,GAAO,MAAA;AAAA,IACzC,eAAA,EAAiB,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,KAAK;AAAA,GACtF;AAEA,EAAA,uBACI,GAAA;AAAA,IAAC,QAAA,CAAS,IAAA;AAAA,IAAT;AAAA,MACI,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,MAC1C,aAAA,EAAa,IAAA;AAAA,MACb,2BAAA,EAA2B,IAAA;AAAA,MAC3B,yBAAA,EAA0B,IAAA;AAAA,MAC1B,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC7D,KAAA,EAAO,CAAC,SAAA,EAAW,QAAA,GAAW,OAAO,EAAE,OAAA,IAAW,KAAK;AAAA;AAAA,GAC3D;AAER,CAAA,EAjEwB,UAAA","file":"chunk-MQZXQOGY.js","sourcesContent":["'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { Animated, Easing, type ViewStyle } from 'react-native';\nimport { useColorScheme } from '../../theme/use-color-scheme';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type SkeletonProps = {\n /** Width — number of px or any RN dimension string. Default `100%`. */\n width?: number | `${number}%` | 'auto';\n /** Height — number of px. Default 16. */\n height?: number;\n /**\n * Border radius. Defaults to `theme.radius.md` (6px). Use `'full'`\n * (= 9999px) for circular skeletons (avatars).\n */\n radius?: number | 'full';\n /** Disable the pulse — useful when stacking many skeletons in a list. */\n static?: boolean;\n className?: string;\n style?: ViewStyle;\n testID?: string;\n};\n\nconst PULSE_DURATION_MS = 900;\nconst PULSE_MIN = 0.55;\nconst PULSE_MAX = 1;\n\n/**\n * Subtle loading placeholder. Pulses between full and 55% opacity to signal\n * \"content is loading here, in this shape\" without flashing or distracting.\n *\n * Uses RN `Animated` for the opacity loop — works on web and native with\n * the same code. Respects the `static` prop when you want to skip the\n * animation (e.g. when stacking many skeletons in a long list).\n */\nexport const Skeleton = ({\n width = '100%' as const,\n height = 16,\n radius = 6,\n static: isStatic = false,\n className,\n style,\n testID,\n}: SkeletonProps) => {\n const colors = useThemeColors();\n const isDark = useColorScheme() === 'dark';\n const opacity = useRef(new Animated.Value(PULSE_MAX)).current;\n\n useEffect(() => {\n if (isStatic) {\n return;\n }\n const loop = Animated.loop(\n Animated.sequence([\n Animated.timing(opacity, {\n toValue: PULSE_MIN,\n duration: PULSE_DURATION_MS,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: PULSE_MAX,\n duration: PULSE_DURATION_MS,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n ])\n );\n loop.start();\n return () => {\n loop.stop();\n };\n }, [isStatic, opacity]);\n\n // Skeleton intentionally uses a stronger neutral than the generic\n // semantic.background.subtle. The previous subtle-bg skeleton washed\n // out against the warm-paper page background — barely a hint of a\n // placeholder. A loading state must read as \"something will appear\n // here\", not \"page barely loading.\"\n //\n // On dark we step the other direction (neutral.700 ≈ #3f3f46) so the\n // skeleton is clearly lighter than the page bg (#18181b) without being\n // a glaring grey block.\n const baseStyle: ViewStyle = {\n width,\n height,\n borderRadius: radius === 'full' ? 9999 : radius,\n backgroundColor: isDark ? colors.color.neutral['700'] : colors.color.neutral['200'],\n };\n\n return (\n <Animated.View\n {...(testID !== undefined ? { testID } : {})}\n aria-hidden={true}\n accessibilityElementsHidden\n importantForAccessibility=\"no\"\n className={cn('bg-neutral-200 dark:bg-neutral-700', className)}\n style={[baseStyle, isStatic ? null : { opacity }, style]}\n />\n );\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { Popover } from './chunk-HXCETKCC.js';
1
+ import { Popover } from './chunk-7TESZOYQ.js';
2
2
  import { Slot } from './chunk-ZIBNLXIV.js';
3
3
  import { __name } from './chunk-WCQVDF3K.js';
4
4
  import { createContext, useContext, useState, useId, useCallback, useRef, useEffect, isValidElement } from 'react';
@@ -161,5 +161,5 @@ var HoverCard = Object.assign(HoverCardRoot, {
161
161
  });
162
162
 
163
163
  export { HoverCard };
164
- //# sourceMappingURL=chunk-BOMPFNM4.js.map
165
- //# sourceMappingURL=chunk-BOMPFNM4.js.map
164
+ //# sourceMappingURL=chunk-NSLVUCYP.js.map
165
+ //# sourceMappingURL=chunk-NSLVUCYP.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/HoverCard/HoverCard.web.tsx"],"names":[],"mappings":"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","file":"chunk-BOMPFNM4.js","sourcesContent":["'use client';\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { Slot } from '../../slot';\nimport type { PopoverAlign, PopoverSide } from '../Popover/Popover';\nimport { Popover } from '../Popover/Popover';\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ntype HoverCardContextValue = {\n open: boolean;\n requestOpen: () => void;\n requestClose: () => void;\n cancelTimers: () => void;\n contentId: string;\n};\n\nconst HoverCardContext = createContext<HoverCardContextValue | null>(null);\n\nfunction useHoverCardContext(caller: string): HoverCardContextValue {\n const ctx = useContext(HoverCardContext);\n if (!ctx) {\n throw new Error(`<${caller}> must be rendered inside <HoverCard>.`);\n }\n return ctx;\n}\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_OPEN_DELAY = 300;\nconst DEFAULT_CLOSE_DELAY = 200;\n\nexport type HoverCardProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n /**\n * Milliseconds before the card opens after hover-in.\n * @defaultValue 300\n */\n openDelay?: number;\n /**\n * Milliseconds before the card closes after hover-out.\n * @defaultValue 200\n */\n closeDelay?: number;\n children?: ReactNode;\n};\n\nconst HoverCardRoot = ({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n openDelay = DEFAULT_OPEN_DELAY,\n closeDelay = DEFAULT_CLOSE_DELAY,\n children,\n}: HoverCardProps) => {\n const [inner, setInner] = useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? (controlledOpen as boolean) : inner;\n const id = useId();\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInner(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const cancelTimers = useCallback(() => {\n if (openTimer.current) {\n clearTimeout(openTimer.current);\n openTimer.current = null;\n }\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n }, []);\n\n const requestOpen = useCallback(() => {\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n if (openTimer.current) {\n return;\n }\n if (openDelay <= 0) {\n setOpen(true);\n return;\n }\n openTimer.current = setTimeout(() => {\n openTimer.current = null;\n setOpen(true);\n }, openDelay);\n }, [openDelay, setOpen]);\n\n const requestClose = useCallback(() => {\n if (openTimer.current) {\n clearTimeout(openTimer.current);\n openTimer.current = null;\n }\n if (closeTimer.current) {\n return;\n }\n if (closeDelay <= 0) {\n setOpen(false);\n return;\n }\n closeTimer.current = setTimeout(() => {\n closeTimer.current = null;\n setOpen(false);\n }, closeDelay);\n }, [closeDelay, setOpen]);\n\n useEffect(() => () => cancelTimers(), [cancelTimers]);\n\n return (\n <HoverCardContext.Provider\n value={{ open, requestOpen, requestClose, cancelTimers, contentId: `hc-content-${id}` }}\n >\n <Popover open={open} onOpenChange={setOpen}>\n {children}\n </Popover>\n </HoverCardContext.Provider>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Trigger\n// ---------------------------------------------------------------------------\n\nexport type HoverCardTriggerProps = {\n /** Use the child element as the trigger instead of wrapping it. @defaultValue true */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nconst HoverCardTrigger = ({ asChild = true, children, className, testID }: HoverCardTriggerProps) => {\n const ctx = useHoverCardContext('HoverCard.Trigger');\n\n const handleMouseEnter = useCallback(() => {\n ctx.cancelTimers();\n ctx.requestOpen();\n }, [ctx]);\n\n const handleMouseLeave = useCallback(() => {\n ctx.requestClose();\n }, [ctx]);\n\n const handlers = {\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n 'aria-haspopup': 'dialog' as const,\n 'aria-expanded': ctx.open,\n };\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const compose =\n <T,>(existing: ((e: T) => void) | undefined, next: (e: T) => void) =>\n (event: T) => {\n existing?.(event);\n next(event);\n };\n return (\n <Slot\n {...handlers}\n onMouseEnter={compose(child.props.onMouseEnter as ((e: unknown) => void) | undefined, handleMouseEnter)}\n onMouseLeave={compose(child.props.onMouseLeave as ((e: unknown) => void) | undefined, handleMouseLeave)}\n {...(className !== undefined ? { className } : {})}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <span {...handlers} className={className} {...(testID !== undefined ? { 'data-testid': testID } : {})}>\n {children}\n </span>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Content\n// ---------------------------------------------------------------------------\n\nexport type HoverCardContentProps = {\n /** Which side of the trigger to render on. @defaultValue 'bottom' */\n side?: PopoverSide;\n /** Alignment along the trigger edge. @defaultValue 'start' */\n align?: PopoverAlign;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nconst HoverCardContent = ({ side = 'bottom', align = 'start', children, className, testID }: HoverCardContentProps) => {\n const ctx = useHoverCardContext('HoverCard.Content');\n\n // Keep hover card open while hovering over content itself\n const handleMouseEnter = useCallback(() => {\n ctx.cancelTimers();\n }, [ctx]);\n\n const handleMouseLeave = useCallback(() => {\n ctx.requestClose();\n }, [ctx]);\n\n return (\n <Popover.Content\n side={side}\n align={align}\n {...(className !== undefined ? { className } : {})}\n {...(testID !== undefined ? { testID } : {})}\n >\n {/* Intercept mouse events on the content surface so hovering\n over it cancels the close timer. */}\n <div\n id={ctx.contentId}\n role=\"dialog\"\n aria-label=\"Hover card\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {children}\n </div>\n </Popover.Content>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public compound export\n// ---------------------------------------------------------------------------\n\n/**\n * Hover-triggered popover card. Web only.\n *\n * On native, `HoverCard.Content` is omitted — only the trigger renders.\n * See `HoverCard.native.tsx`.\n *\n * Composition:\n * - `HoverCard.Trigger` — wraps any element; hover opens the card.\n * - `HoverCard.Content` — the floating card surface.\n *\n * ```tsx\n * <HoverCard>\n * <HoverCard.Trigger>\n * <Avatar src=\"...\" />\n * </HoverCard.Trigger>\n * <HoverCard.Content>\n * <Text>@manuelbieh — Senior dev at Wiremore</Text>\n * </HoverCard.Content>\n * </HoverCard>\n * ```\n */\nexport const HoverCard = Object.assign(HoverCardRoot, {\n Trigger: HoverCardTrigger,\n Content: HoverCardContent,\n});\n"]}
1
+ {"version":3,"sources":["../src/components/HoverCard/HoverCard.web.tsx"],"names":[],"mappings":"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","file":"chunk-NSLVUCYP.js","sourcesContent":["'use client';\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { Slot } from '../../slot';\nimport type { PopoverAlign, PopoverSide } from '../Popover/Popover';\nimport { Popover } from '../Popover/Popover';\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ntype HoverCardContextValue = {\n open: boolean;\n requestOpen: () => void;\n requestClose: () => void;\n cancelTimers: () => void;\n contentId: string;\n};\n\nconst HoverCardContext = createContext<HoverCardContextValue | null>(null);\n\nfunction useHoverCardContext(caller: string): HoverCardContextValue {\n const ctx = useContext(HoverCardContext);\n if (!ctx) {\n throw new Error(`<${caller}> must be rendered inside <HoverCard>.`);\n }\n return ctx;\n}\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_OPEN_DELAY = 300;\nconst DEFAULT_CLOSE_DELAY = 200;\n\nexport type HoverCardProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n /**\n * Milliseconds before the card opens after hover-in.\n * @defaultValue 300\n */\n openDelay?: number;\n /**\n * Milliseconds before the card closes after hover-out.\n * @defaultValue 200\n */\n closeDelay?: number;\n children?: ReactNode;\n};\n\nconst HoverCardRoot = ({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n openDelay = DEFAULT_OPEN_DELAY,\n closeDelay = DEFAULT_CLOSE_DELAY,\n children,\n}: HoverCardProps) => {\n const [inner, setInner] = useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? (controlledOpen as boolean) : inner;\n const id = useId();\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInner(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const cancelTimers = useCallback(() => {\n if (openTimer.current) {\n clearTimeout(openTimer.current);\n openTimer.current = null;\n }\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n }, []);\n\n const requestOpen = useCallback(() => {\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n if (openTimer.current) {\n return;\n }\n if (openDelay <= 0) {\n setOpen(true);\n return;\n }\n openTimer.current = setTimeout(() => {\n openTimer.current = null;\n setOpen(true);\n }, openDelay);\n }, [openDelay, setOpen]);\n\n const requestClose = useCallback(() => {\n if (openTimer.current) {\n clearTimeout(openTimer.current);\n openTimer.current = null;\n }\n if (closeTimer.current) {\n return;\n }\n if (closeDelay <= 0) {\n setOpen(false);\n return;\n }\n closeTimer.current = setTimeout(() => {\n closeTimer.current = null;\n setOpen(false);\n }, closeDelay);\n }, [closeDelay, setOpen]);\n\n useEffect(() => () => cancelTimers(), [cancelTimers]);\n\n return (\n <HoverCardContext.Provider\n value={{ open, requestOpen, requestClose, cancelTimers, contentId: `hc-content-${id}` }}\n >\n <Popover open={open} onOpenChange={setOpen}>\n {children}\n </Popover>\n </HoverCardContext.Provider>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Trigger\n// ---------------------------------------------------------------------------\n\nexport type HoverCardTriggerProps = {\n /** Use the child element as the trigger instead of wrapping it. @defaultValue true */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nconst HoverCardTrigger = ({ asChild = true, children, className, testID }: HoverCardTriggerProps) => {\n const ctx = useHoverCardContext('HoverCard.Trigger');\n\n const handleMouseEnter = useCallback(() => {\n ctx.cancelTimers();\n ctx.requestOpen();\n }, [ctx]);\n\n const handleMouseLeave = useCallback(() => {\n ctx.requestClose();\n }, [ctx]);\n\n const handlers = {\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n 'aria-haspopup': 'dialog' as const,\n 'aria-expanded': ctx.open,\n };\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const compose =\n <T,>(existing: ((e: T) => void) | undefined, next: (e: T) => void) =>\n (event: T) => {\n existing?.(event);\n next(event);\n };\n return (\n <Slot\n {...handlers}\n onMouseEnter={compose(child.props.onMouseEnter as ((e: unknown) => void) | undefined, handleMouseEnter)}\n onMouseLeave={compose(child.props.onMouseLeave as ((e: unknown) => void) | undefined, handleMouseLeave)}\n {...(className !== undefined ? { className } : {})}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <span {...handlers} className={className} {...(testID !== undefined ? { 'data-testid': testID } : {})}>\n {children}\n </span>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Content\n// ---------------------------------------------------------------------------\n\nexport type HoverCardContentProps = {\n /** Which side of the trigger to render on. @defaultValue 'bottom' */\n side?: PopoverSide;\n /** Alignment along the trigger edge. @defaultValue 'start' */\n align?: PopoverAlign;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nconst HoverCardContent = ({ side = 'bottom', align = 'start', children, className, testID }: HoverCardContentProps) => {\n const ctx = useHoverCardContext('HoverCard.Content');\n\n // Keep hover card open while hovering over content itself\n const handleMouseEnter = useCallback(() => {\n ctx.cancelTimers();\n }, [ctx]);\n\n const handleMouseLeave = useCallback(() => {\n ctx.requestClose();\n }, [ctx]);\n\n return (\n <Popover.Content\n side={side}\n align={align}\n {...(className !== undefined ? { className } : {})}\n {...(testID !== undefined ? { testID } : {})}\n >\n {/* Intercept mouse events on the content surface so hovering\n over it cancels the close timer. */}\n <div\n id={ctx.contentId}\n role=\"dialog\"\n aria-label=\"Hover card\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {children}\n </div>\n </Popover.Content>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public compound export\n// ---------------------------------------------------------------------------\n\n/**\n * Hover-triggered popover card. Web only.\n *\n * On native, `HoverCard.Content` is omitted — only the trigger renders.\n * See `HoverCard.native.tsx`.\n *\n * Composition:\n * - `HoverCard.Trigger` — wraps any element; hover opens the card.\n * - `HoverCard.Content` — the floating card surface.\n *\n * ```tsx\n * <HoverCard>\n * <HoverCard.Trigger>\n * <Avatar src=\"...\" />\n * </HoverCard.Trigger>\n * <HoverCard.Content>\n * <Text>@manuelbieh — Senior dev at Wiremore</Text>\n * </HoverCard.Content>\n * </HoverCard>\n * ```\n */\nexport const HoverCard = Object.assign(HoverCardRoot, {\n Trigger: HoverCardTrigger,\n Content: HoverCardContent,\n});\n"]}
@@ -1,4 +1,4 @@
1
- import { useThemeColors } from './chunk-R5JMDDCB.js';
1
+ import { useThemeColors } from './chunk-3W2O4OBL.js';
2
2
  import { __name } from './chunk-WCQVDF3K.js';
3
3
  import { Platform, Text } from 'react-native';
4
4
  import { jsx } from 'nativewind/jsx-runtime';
@@ -60,5 +60,5 @@ var defaultSemanticIcons = {
60
60
  };
61
61
 
62
62
  export { defaultSemanticIcons };
63
- //# sourceMappingURL=chunk-7Z4NMNX6.js.map
64
- //# sourceMappingURL=chunk-7Z4NMNX6.js.map
63
+ //# sourceMappingURL=chunk-O656K7OS.js.map
64
+ //# sourceMappingURL=chunk-O656K7OS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/icons/default-semantic-icons.tsx"],"names":["RNText"],"mappings":";;;;;AAqCA,IAAM,KAAA,GAAQ,SAAS,EAAA,KAAO,KAAA;AAE9B,IAAM,IAAA,mBAAO,MAAA,CAAA,CAAC,EAAE,IAAA,EAAM,KAAA,EAAM,qBACxB,MAAA,CAAA,SAAS,eAAA,CAAgB,EAAE,IAAA,GAAO,EAAA,EAAI,KAAA,GAAQ,gBAAe,EAAG;AAI5D,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,IAAI,KAAA,EAAO;AACP,IAAA,uBACI,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,KAAA,EAAO,IAAA;AAAA,QACP,MAAA,EAAQ,IAAA;AAAA,QACR,OAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,MAAA,EAAQ,KAAA;AAAA,QACR,WAAA,EAAY,GAAA;AAAA,QACZ,aAAA,EAAc,OAAA;AAAA,QACd,cAAA,EAAe,OAAA;AAAA,QACf,aAAA,EAAY,MAAA;AAAA,QAEZ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,IAAA,EAAM;AAAA;AAAA,KACnB;AAAA,EAER;AAIA,EAAA,MAAM,gBAAgB,KAAA,KAAU,cAAA,GAAiB,MAAA,CAAO,QAAA,CAAS,KAAK,OAAA,GAAU,KAAA;AAChF,EAAA,uBACI,GAAA;AAAA,IAACA,IAAA;AAAA,IAAA;AAAA,MACG,2BAAA,EAA2B,IAAA;AAAA,MAC3B,yBAAA,EAA0B,qBAAA;AAAA,MAC1B,OAAO,EAAE,QAAA,EAAU,MAAM,UAAA,EAAY,IAAA,EAAM,OAAO,aAAA,EAAc;AAAA,MAE/D,QAAA,EAAA;AAAA;AAAA,GACL;AAER,CAAA,EAnCA,iBAAA,CAAA,EADS,MAAA,CAAA;AAmDN,IAAM,oBAAA,GAAsC;AAAA,EAC/C,WAAW,IAAA,CAAK,EAAE,MAAM,iBAAA,EAAmB,KAAA,EAAO,UAAK,CAAA;AAAA,EACvD,OAAO,IAAA,CAAK,EAAE,MAAM,uBAAA,EAAyB,KAAA,EAAO,UAAK,CAAA;AAAA,EACzD,KAAK,IAAA,CAAK;AAAA,IACN,IAAA,EAAM,qFAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACV,CAAA;AAAA,EACD,QAAQ,IAAA,CAAK;AAAA,IACT,IAAA,EAAM,uEAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACV,CAAA;AAAA,EACD,aAAa,IAAA,CAAK,EAAE,MAAM,cAAA,EAAgB,KAAA,EAAO,UAAK,CAAA;AAAA,EACtD,WAAW,IAAA,CAAK,EAAE,MAAM,gBAAA,EAAkB,KAAA,EAAO,UAAK,CAAA;AAAA,EACtD,eAAe,IAAA,CAAK;AAAA,IAChB,IAAA,EAAM,6GAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACV,CAAA;AAAA,EACD,MAAM,IAAA,CAAK;AAAA,IACP,IAAA,EAAM,kHAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACV,CAAA;AAAA,EACD,OAAO,IAAA,CAAK,EAAE,MAAM,iBAAA,EAAmB,KAAA,EAAO,UAAK,CAAA;AAAA,EACnD,GAAG,IAAA,CAAK,EAAE,MAAM,uBAAA,EAAyB,KAAA,EAAO,UAAK;AACzD","file":"chunk-7Z4NMNX6.js","sourcesContent":["'use client';\n\n// default-semantic-icons — minimal built-in icon placeholders for internal\n// library glyphs. Consumers can swap each one via the provider:\n//\n// <NoriProvider icons={{ checkmark: MyCheck, close: MyX }}>\n//\n// These defaults exist so the library renders usable UI out of the box even\n// when lucide-react(-native) or any other icon set is not installed. They are\n// NOT intended to compete with Lucide on style — override them in production.\n//\n// Web ships an SVG path identical to the historical lucide-style stroke. Native\n// ships a Unicode glyph wrapped in `<Text>` because raw `<svg><path>` doesn't\n// exist on the React Native runtime — the renderer treats lowercase host names\n// as native components and crashes with \"View config getter callback for\n// component `path` must be a function\". `react-native-svg` would solve this\n// but it's an extra peer dep this library deliberately doesn't require.\n//\n// Marked `'use client'` because the native render path reads\n// `useThemeColors()` to default the glyph color to the active theme's\n// text token when no explicit color is passed. Without this the native\n// glyph would render in RNText's default (black) regardless of scheme.\n\nimport type { ComponentType } from 'react';\nimport { Platform, Text as RNText } from 'react-native';\nimport { useThemeColors } from '../theme/use-theme-colors';\nimport type { IconComponentProps } from './icon';\n\ntype SemanticIcon = ComponentType<IconComponentProps>;\n\ntype IconRecipe = {\n /** SVG `path` data — used on the web. */\n path: string;\n /** Unicode glyph rendered in `<Text>` on native. */\n glyph: string;\n};\n\nconst isWeb = Platform.OS === 'web';\n\nconst make = ({ path, glyph }: IconRecipe): SemanticIcon =>\n function PlaceholderIcon({ size = 20, color = 'currentColor' }) {\n // Always call the hook — rules-of-hooks. The native branch is the\n // only consumer of the resolved colors, but pulling them on web is\n // a cheap context read.\n const colors = useThemeColors();\n if (isWeb) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d={path} />\n </svg>\n );\n }\n // 'currentColor' is a CSS keyword without meaning on native — RNText\n // would render in its inherent default (~black). Resolve it against\n // the active theme so the glyph stays readable in both schemes.\n const resolvedColor = color === 'currentColor' ? colors.semantic.text.default : color;\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: size, lineHeight: size, color: resolvedColor }}\n >\n {glyph}\n </RNText>\n );\n };\n\nexport type SemanticIcons = {\n checkmark: SemanticIcon;\n close: SemanticIcon;\n eye: SemanticIcon;\n eyeOff: SemanticIcon;\n chevronDown: SemanticIcon;\n chevronUp: SemanticIcon;\n alertTriangle: SemanticIcon;\n info: SemanticIcon;\n check: SemanticIcon;\n x: SemanticIcon;\n};\n\nexport const defaultSemanticIcons: SemanticIcons = {\n checkmark: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n close: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n eye: make({\n path: 'M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z',\n glyph: '👁',\n }),\n eyeOff: make({\n path: 'M17.94 17.94A10 10 0 0 1 2 12s3.5-7 10-7c2 0 3.8.6 5.4 1.5 M1 1l22 22',\n glyph: '🙈',\n }),\n chevronDown: make({ path: 'm6 9 6 6 6-6', glyph: '⌄' }),\n chevronUp: make({ path: 'm18 15-6-6-6 6', glyph: '⌃' }),\n alertTriangle: make({\n path: 'M12 9v4 M12 17h.01 M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z',\n glyph: '⚠',\n }),\n info: make({\n path: 'M12 8h.01 M11 12h1v4h1 M12 22C6.48 22 2 17.52 2 12 2 6.48 6.48 2 12 2c5.52 0 10 4.48 10 10 0 5.52-4.48 10-10 10z',\n glyph: 'ⓘ',\n }),\n check: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n x: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n};\n"]}
1
+ {"version":3,"sources":["../src/icons/default-semantic-icons.tsx"],"names":["RNText"],"mappings":";;;;;AAqCA,IAAM,KAAA,GAAQ,SAAS,EAAA,KAAO,KAAA;AAE9B,IAAM,IAAA,mBAAO,MAAA,CAAA,CAAC,EAAE,IAAA,EAAM,KAAA,EAAM,qBACxB,MAAA,CAAA,SAAS,eAAA,CAAgB,EAAE,IAAA,GAAO,EAAA,EAAI,KAAA,GAAQ,gBAAe,EAAG;AAI5D,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,IAAI,KAAA,EAAO;AACP,IAAA,uBACI,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,KAAA,EAAO,IAAA;AAAA,QACP,MAAA,EAAQ,IAAA;AAAA,QACR,OAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,MAAA,EAAQ,KAAA;AAAA,QACR,WAAA,EAAY,GAAA;AAAA,QACZ,aAAA,EAAc,OAAA;AAAA,QACd,cAAA,EAAe,OAAA;AAAA,QACf,aAAA,EAAY,MAAA;AAAA,QAEZ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,IAAA,EAAM;AAAA;AAAA,KACnB;AAAA,EAER;AAIA,EAAA,MAAM,gBAAgB,KAAA,KAAU,cAAA,GAAiB,MAAA,CAAO,QAAA,CAAS,KAAK,OAAA,GAAU,KAAA;AAChF,EAAA,uBACI,GAAA;AAAA,IAACA,IAAA;AAAA,IAAA;AAAA,MACG,2BAAA,EAA2B,IAAA;AAAA,MAC3B,yBAAA,EAA0B,qBAAA;AAAA,MAC1B,OAAO,EAAE,QAAA,EAAU,MAAM,UAAA,EAAY,IAAA,EAAM,OAAO,aAAA,EAAc;AAAA,MAE/D,QAAA,EAAA;AAAA;AAAA,GACL;AAER,CAAA,EAnCA,iBAAA,CAAA,EADS,MAAA,CAAA;AAmDN,IAAM,oBAAA,GAAsC;AAAA,EAC/C,WAAW,IAAA,CAAK,EAAE,MAAM,iBAAA,EAAmB,KAAA,EAAO,UAAK,CAAA;AAAA,EACvD,OAAO,IAAA,CAAK,EAAE,MAAM,uBAAA,EAAyB,KAAA,EAAO,UAAK,CAAA;AAAA,EACzD,KAAK,IAAA,CAAK;AAAA,IACN,IAAA,EAAM,qFAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACV,CAAA;AAAA,EACD,QAAQ,IAAA,CAAK;AAAA,IACT,IAAA,EAAM,uEAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACV,CAAA;AAAA,EACD,aAAa,IAAA,CAAK,EAAE,MAAM,cAAA,EAAgB,KAAA,EAAO,UAAK,CAAA;AAAA,EACtD,WAAW,IAAA,CAAK,EAAE,MAAM,gBAAA,EAAkB,KAAA,EAAO,UAAK,CAAA;AAAA,EACtD,eAAe,IAAA,CAAK;AAAA,IAChB,IAAA,EAAM,6GAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACV,CAAA;AAAA,EACD,MAAM,IAAA,CAAK;AAAA,IACP,IAAA,EAAM,kHAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACV,CAAA;AAAA,EACD,OAAO,IAAA,CAAK,EAAE,MAAM,iBAAA,EAAmB,KAAA,EAAO,UAAK,CAAA;AAAA,EACnD,GAAG,IAAA,CAAK,EAAE,MAAM,uBAAA,EAAyB,KAAA,EAAO,UAAK;AACzD","file":"chunk-O656K7OS.js","sourcesContent":["'use client';\n\n// default-semantic-icons — minimal built-in icon placeholders for internal\n// library glyphs. Consumers can swap each one via the provider:\n//\n// <NoriProvider icons={{ checkmark: MyCheck, close: MyX }}>\n//\n// These defaults exist so the library renders usable UI out of the box even\n// when lucide-react(-native) or any other icon set is not installed. They are\n// NOT intended to compete with Lucide on style — override them in production.\n//\n// Web ships an SVG path identical to the historical lucide-style stroke. Native\n// ships a Unicode glyph wrapped in `<Text>` because raw `<svg><path>` doesn't\n// exist on the React Native runtime — the renderer treats lowercase host names\n// as native components and crashes with \"View config getter callback for\n// component `path` must be a function\". `react-native-svg` would solve this\n// but it's an extra peer dep this library deliberately doesn't require.\n//\n// Marked `'use client'` because the native render path reads\n// `useThemeColors()` to default the glyph color to the active theme's\n// text token when no explicit color is passed. Without this the native\n// glyph would render in RNText's default (black) regardless of scheme.\n\nimport type { ComponentType } from 'react';\nimport { Platform, Text as RNText } from 'react-native';\nimport { useThemeColors } from '../theme/use-theme-colors';\nimport type { IconComponentProps } from './icon';\n\ntype SemanticIcon = ComponentType<IconComponentProps>;\n\ntype IconRecipe = {\n /** SVG `path` data — used on the web. */\n path: string;\n /** Unicode glyph rendered in `<Text>` on native. */\n glyph: string;\n};\n\nconst isWeb = Platform.OS === 'web';\n\nconst make = ({ path, glyph }: IconRecipe): SemanticIcon =>\n function PlaceholderIcon({ size = 20, color = 'currentColor' }) {\n // Always call the hook — rules-of-hooks. The native branch is the\n // only consumer of the resolved colors, but pulling them on web is\n // a cheap context read.\n const colors = useThemeColors();\n if (isWeb) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d={path} />\n </svg>\n );\n }\n // 'currentColor' is a CSS keyword without meaning on native — RNText\n // would render in its inherent default (~black). Resolve it against\n // the active theme so the glyph stays readable in both schemes.\n const resolvedColor = color === 'currentColor' ? colors.semantic.text.default : color;\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: size, lineHeight: size, color: resolvedColor }}\n >\n {glyph}\n </RNText>\n );\n };\n\nexport type SemanticIcons = {\n checkmark: SemanticIcon;\n close: SemanticIcon;\n eye: SemanticIcon;\n eyeOff: SemanticIcon;\n chevronDown: SemanticIcon;\n chevronUp: SemanticIcon;\n alertTriangle: SemanticIcon;\n info: SemanticIcon;\n check: SemanticIcon;\n x: SemanticIcon;\n};\n\nexport const defaultSemanticIcons: SemanticIcons = {\n checkmark: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n close: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n eye: make({\n path: 'M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z',\n glyph: '👁',\n }),\n eyeOff: make({\n path: 'M17.94 17.94A10 10 0 0 1 2 12s3.5-7 10-7c2 0 3.8.6 5.4 1.5 M1 1l22 22',\n glyph: '🙈',\n }),\n chevronDown: make({ path: 'm6 9 6 6 6-6', glyph: '⌄' }),\n chevronUp: make({ path: 'm18 15-6-6-6 6', glyph: '⌃' }),\n alertTriangle: make({\n path: 'M12 9v4 M12 17h.01 M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z',\n glyph: '⚠',\n }),\n info: make({\n path: 'M12 8h.01 M11 12h1v4h1 M12 22C6.48 22 2 17.52 2 12 2 6.48 6.48 2 12 2c5.52 0 10 4.48 10 10 0 5.52-4.48 10-10 10z',\n glyph: 'ⓘ',\n }),\n check: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n x: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import { px } from './chunk-5A2QOOVN.js';
2
- import { useThemeColors } from './chunk-R5JMDDCB.js';
2
+ import { useThemeColors } from './chunk-3W2O4OBL.js';
3
3
  import { cn } from './chunk-CHXHRJNZ.js';
4
4
  import { __name } from './chunk-WCQVDF3K.js';
5
5
  import { createContext, useContext, useState, useId, useCallback } from 'react';
@@ -346,5 +346,5 @@ var Sidebar = Object.assign(SidebarRoot, {
346
346
  });
347
347
 
348
348
  export { Sidebar, useSidebarContext };
349
- //# sourceMappingURL=chunk-S763GTIZ.js.map
350
- //# sourceMappingURL=chunk-S763GTIZ.js.map
349
+ //# sourceMappingURL=chunk-PCUWBRNT.js.map
350
+ //# sourceMappingURL=chunk-PCUWBRNT.js.map