@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,6 +1,6 @@
1
- import { defaultSemanticIcons } from './chunk-7Z4NMNX6.js';
1
+ import { defaultSemanticIcons } from './chunk-O656K7OS.js';
2
2
  import { px } from './chunk-5A2QOOVN.js';
3
- import { useThemeColors, useColorScheme } from './chunk-R5JMDDCB.js';
3
+ import { useThemeColors, useColorScheme } from './chunk-3W2O4OBL.js';
4
4
  import { cn } from './chunk-CHXHRJNZ.js';
5
5
  import { __name } from './chunk-WCQVDF3K.js';
6
6
  import { View, Text, Pressable } from 'react-native';
@@ -184,5 +184,5 @@ var Alert = /* @__PURE__ */ __name(({
184
184
  }, "Alert");
185
185
 
186
186
  export { Alert };
187
- //# sourceMappingURL=chunk-3W3XYULK.js.map
188
- //# sourceMappingURL=chunk-3W3XYULK.js.map
187
+ //# sourceMappingURL=chunk-C4HP2D46.js.map
188
+ //# sourceMappingURL=chunk-C4HP2D46.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Alert/Alert.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-3W3XYULK.js","sourcesContent":["'use client';\n\nimport type { ComponentType, ReactNode } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { defaultSemanticIcons } from '../../icons/default-semantic-icons';\nimport { px } from '../../theme/px';\nimport { useColorScheme } from '../../theme/use-color-scheme';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type AlertTone = 'info' | 'success' | 'warning' | 'danger';\n\nexport type AlertProps = {\n /**\n * Severity of the alert. Drives the color tone and the default icon.\n * @defaultValue 'info'\n */\n tone?: AlertTone;\n /** Bolded heading line. Optional — provide one of title or description. */\n title?: string;\n /** Body text below the title. */\n description?: string;\n /**\n * When provided, renders a close button in the top-right that calls back\n * when pressed. The Alert itself doesn't track dismissed state — the\n * parent decides whether to keep rendering.\n */\n onDismiss?: () => void;\n /**\n * Override the tone's default icon. Pass `null` to render no icon at\n * all (rare — the icon doubles as the visual severity cue).\n */\n icon?: ReactNode;\n /** Additional content below title/description. */\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\ntype IconType = ComponentType<{ size?: number; color?: string }>;\ntype TonePalette = { bg: string; border: string; fg: string; iconBg: string; defaultIcon: IconType };\n\n// Light/dark soft palettes per tone. Light variants use the familiar\n// pastel scale (Tailwind 50/200/800); dark variants use the deep 950/700/100\n// scale so the alert reads as a calm, on-tone surface against either\n// background — never a harsh white card on a dark page.\nfunction tonePalettes(\n scheme: 'light' | 'dark',\n primary: { '50': string; '200': string; '700': string; '800': string; '900': string; '100': string },\n success: string,\n warning: string,\n danger: string\n): Record<AlertTone, TonePalette> {\n if (scheme === 'dark') {\n return {\n info: {\n bg: primary['900'],\n border: primary['700'],\n fg: primary['100'],\n iconBg: primary['200'],\n defaultIcon: defaultSemanticIcons.info,\n },\n success: {\n bg: '#052e16',\n border: '#14532d',\n fg: '#bbf7d0',\n iconBg: success,\n defaultIcon: defaultSemanticIcons.checkmark,\n },\n warning: {\n bg: '#422006',\n border: '#78350f',\n fg: '#fef3c7',\n iconBg: warning,\n defaultIcon: defaultSemanticIcons.alertTriangle,\n },\n danger: {\n bg: '#450a0a',\n border: '#7f1d1d',\n fg: '#fecaca',\n iconBg: danger,\n defaultIcon: defaultSemanticIcons.alertTriangle,\n },\n };\n }\n return {\n info: {\n bg: primary['50'],\n border: primary['200'],\n fg: primary['800'],\n iconBg: primary['700'],\n defaultIcon: defaultSemanticIcons.info,\n },\n success: {\n bg: '#f0fdf4',\n border: '#bbf7d0',\n fg: '#166534',\n iconBg: success,\n defaultIcon: defaultSemanticIcons.checkmark,\n },\n warning: {\n bg: '#fefce8',\n border: '#fde68a',\n fg: '#92400e',\n iconBg: warning,\n defaultIcon: defaultSemanticIcons.alertTriangle,\n },\n danger: {\n bg: '#fef2f2',\n border: '#fecaca',\n fg: '#991b1b',\n iconBg: danger,\n defaultIcon: defaultSemanticIcons.alertTriangle,\n },\n };\n}\n\n// Layout-only base; theme-driven dimensions (gap/padding/radius) are merged\n// inside the component so a custom theme reshapes the alert.\nconst CONTAINER_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'flex-start',\n borderWidth: 1,\n};\n\n/**\n * Status banner with an icon, title, optional description, optional dismiss.\n * Use for inline messages that the reader should notice but doesn't need to\n * action immediately (use a Dialog when you need a forced acknowledgement).\n *\n * Color tone flips automatically with the active color scheme — light\n * pastel surface in light mode, deep on-tone surface in dark.\n */\nexport const Alert = ({\n tone = 'info',\n title,\n description,\n onDismiss,\n icon,\n children,\n className,\n testID,\n}: AlertProps) => {\n const colors = useThemeColors();\n const scheme = useColorScheme();\n const palette = tonePalettes(\n scheme,\n colors.color.primary,\n colors.color.success,\n colors.color.warning,\n colors.color.danger\n )[tone];\n const IconComponent = palette.defaultIcon;\n const containerStyle: ViewStyle = {\n ...CONTAINER_LAYOUT_BASE,\n gap: px(colors.spacing['3']),\n padding: px(colors.spacing['3']), // closest token to legacy 14px\n borderRadius: px(colors.radius.lg),\n backgroundColor: palette.bg,\n borderColor: palette.border,\n };\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"alert\"\n accessibilityRole=\"alert\"\n className={cn('flex-row items-start gap-3 rounded-md border p-3.5', className)}\n style={containerStyle}\n >\n {icon === null ? null : icon !== undefined ? (\n icon\n ) : (\n <View\n aria-hidden={true}\n style={{\n // 20×20 icon hit area — component-density literal — not from theme\n width: 20,\n height: 20,\n alignItems: 'center',\n justifyContent: 'center',\n marginTop: 2,\n }}\n >\n <IconComponent size={20} color={palette.iconBg} />\n </View>\n )}\n <View style={{ flex: 1, gap: 2 }}>\n {title !== undefined ? (\n <RNText\n style={{\n color: palette.fg,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.semibold as '600',\n lineHeight: px(colors.fontSize.sm) * Number(colors.lineHeight.normal),\n }}\n >\n {title}\n </RNText>\n ) : null}\n {description !== undefined ? (\n <RNText\n style={{\n color: palette.fg,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.sm) * Number(colors.lineHeight.normal),\n opacity: 0.85,\n }}\n >\n {description}\n </RNText>\n ) : null}\n {children}\n </View>\n {onDismiss !== undefined ? (\n <Pressable\n onPress={onDismiss}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel=\"Dismiss\"\n aria-label=\"Dismiss\"\n style={{\n // 24×24 close button hit area — component-density literal — not from theme\n width: 24,\n height: 24,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: px(colors.radius.sm),\n marginTop: -2,\n }}\n >\n <defaultSemanticIcons.close size={16} color={palette.fg} />\n </Pressable>\n ) : null}\n </View>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Alert/Alert.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-C4HP2D46.js","sourcesContent":["'use client';\n\nimport type { ComponentType, ReactNode } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { defaultSemanticIcons } from '../../icons/default-semantic-icons';\nimport { px } from '../../theme/px';\nimport { useColorScheme } from '../../theme/use-color-scheme';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type AlertTone = 'info' | 'success' | 'warning' | 'danger';\n\nexport type AlertProps = {\n /**\n * Severity of the alert. Drives the color tone and the default icon.\n * @defaultValue 'info'\n */\n tone?: AlertTone;\n /** Bolded heading line. Optional — provide one of title or description. */\n title?: string;\n /** Body text below the title. */\n description?: string;\n /**\n * When provided, renders a close button in the top-right that calls back\n * when pressed. The Alert itself doesn't track dismissed state — the\n * parent decides whether to keep rendering.\n */\n onDismiss?: () => void;\n /**\n * Override the tone's default icon. Pass `null` to render no icon at\n * all (rare — the icon doubles as the visual severity cue).\n */\n icon?: ReactNode;\n /** Additional content below title/description. */\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\ntype IconType = ComponentType<{ size?: number; color?: string }>;\ntype TonePalette = { bg: string; border: string; fg: string; iconBg: string; defaultIcon: IconType };\n\n// Light/dark soft palettes per tone. Light variants use the familiar\n// pastel scale (Tailwind 50/200/800); dark variants use the deep 950/700/100\n// scale so the alert reads as a calm, on-tone surface against either\n// background — never a harsh white card on a dark page.\nfunction tonePalettes(\n scheme: 'light' | 'dark',\n primary: { '50': string; '200': string; '700': string; '800': string; '900': string; '100': string },\n success: string,\n warning: string,\n danger: string\n): Record<AlertTone, TonePalette> {\n if (scheme === 'dark') {\n return {\n info: {\n bg: primary['900'],\n border: primary['700'],\n fg: primary['100'],\n iconBg: primary['200'],\n defaultIcon: defaultSemanticIcons.info,\n },\n success: {\n bg: '#052e16',\n border: '#14532d',\n fg: '#bbf7d0',\n iconBg: success,\n defaultIcon: defaultSemanticIcons.checkmark,\n },\n warning: {\n bg: '#422006',\n border: '#78350f',\n fg: '#fef3c7',\n iconBg: warning,\n defaultIcon: defaultSemanticIcons.alertTriangle,\n },\n danger: {\n bg: '#450a0a',\n border: '#7f1d1d',\n fg: '#fecaca',\n iconBg: danger,\n defaultIcon: defaultSemanticIcons.alertTriangle,\n },\n };\n }\n return {\n info: {\n bg: primary['50'],\n border: primary['200'],\n fg: primary['800'],\n iconBg: primary['700'],\n defaultIcon: defaultSemanticIcons.info,\n },\n success: {\n bg: '#f0fdf4',\n border: '#bbf7d0',\n fg: '#166534',\n iconBg: success,\n defaultIcon: defaultSemanticIcons.checkmark,\n },\n warning: {\n bg: '#fefce8',\n border: '#fde68a',\n fg: '#92400e',\n iconBg: warning,\n defaultIcon: defaultSemanticIcons.alertTriangle,\n },\n danger: {\n bg: '#fef2f2',\n border: '#fecaca',\n fg: '#991b1b',\n iconBg: danger,\n defaultIcon: defaultSemanticIcons.alertTriangle,\n },\n };\n}\n\n// Layout-only base; theme-driven dimensions (gap/padding/radius) are merged\n// inside the component so a custom theme reshapes the alert.\nconst CONTAINER_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'flex-start',\n borderWidth: 1,\n};\n\n/**\n * Status banner with an icon, title, optional description, optional dismiss.\n * Use for inline messages that the reader should notice but doesn't need to\n * action immediately (use a Dialog when you need a forced acknowledgement).\n *\n * Color tone flips automatically with the active color scheme — light\n * pastel surface in light mode, deep on-tone surface in dark.\n */\nexport const Alert = ({\n tone = 'info',\n title,\n description,\n onDismiss,\n icon,\n children,\n className,\n testID,\n}: AlertProps) => {\n const colors = useThemeColors();\n const scheme = useColorScheme();\n const palette = tonePalettes(\n scheme,\n colors.color.primary,\n colors.color.success,\n colors.color.warning,\n colors.color.danger\n )[tone];\n const IconComponent = palette.defaultIcon;\n const containerStyle: ViewStyle = {\n ...CONTAINER_LAYOUT_BASE,\n gap: px(colors.spacing['3']),\n padding: px(colors.spacing['3']), // closest token to legacy 14px\n borderRadius: px(colors.radius.lg),\n backgroundColor: palette.bg,\n borderColor: palette.border,\n };\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"alert\"\n accessibilityRole=\"alert\"\n className={cn('flex-row items-start gap-3 rounded-md border p-3.5', className)}\n style={containerStyle}\n >\n {icon === null ? null : icon !== undefined ? (\n icon\n ) : (\n <View\n aria-hidden={true}\n style={{\n // 20×20 icon hit area — component-density literal — not from theme\n width: 20,\n height: 20,\n alignItems: 'center',\n justifyContent: 'center',\n marginTop: 2,\n }}\n >\n <IconComponent size={20} color={palette.iconBg} />\n </View>\n )}\n <View style={{ flex: 1, gap: 2 }}>\n {title !== undefined ? (\n <RNText\n style={{\n color: palette.fg,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.semibold as '600',\n lineHeight: px(colors.fontSize.sm) * Number(colors.lineHeight.normal),\n }}\n >\n {title}\n </RNText>\n ) : null}\n {description !== undefined ? (\n <RNText\n style={{\n color: palette.fg,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.sm) * Number(colors.lineHeight.normal),\n opacity: 0.85,\n }}\n >\n {description}\n </RNText>\n ) : null}\n {children}\n </View>\n {onDismiss !== undefined ? (\n <Pressable\n onPress={onDismiss}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel=\"Dismiss\"\n aria-label=\"Dismiss\"\n style={{\n // 24×24 close button hit area — component-density literal — not from theme\n width: 24,\n height: 24,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: px(colors.radius.sm),\n marginTop: -2,\n }}\n >\n <defaultSemanticIcons.close size={16} color={palette.fg} />\n </Pressable>\n ) : null}\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 { createContext, useId, useState, useRef, useCallback, Children, useMemo, useContext, isValidElement } from 'react';
@@ -88,7 +88,7 @@ var InputGroupRoot = /* @__PURE__ */ __name(({
88
88
  const errorStyle = {
89
89
  fontFamily: colors.fontFamily.body,
90
90
  fontSize: px(colors.fontSize.sm),
91
- color: colors.color.danger
91
+ color: colors.color.dangerText
92
92
  };
93
93
  const containerStyle = { ...CONTAINER_LAYOUT_BASE, gap: px(colors.spacing["1"]) };
94
94
  return /* @__PURE__ */ jsxs(
@@ -310,5 +310,5 @@ var InputGroup = Object.assign(InputGroupRoot, {
310
310
  });
311
311
 
312
312
  export { InputGroup };
313
- //# sourceMappingURL=chunk-C5HQPXRI.js.map
314
- //# sourceMappingURL=chunk-C5HQPXRI.js.map
313
+ //# sourceMappingURL=chunk-CMA3ZFCG.js.map
314
+ //# sourceMappingURL=chunk-CMA3ZFCG.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/InputGroup/InputGroup.tsx"],"names":["RNText","RNTextInput"],"mappings":"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","file":"chunk-C5HQPXRI.js","sourcesContent":["'use client';\n\nimport {\n Children,\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { TextInput as RNTextInputType, TextStyle, ViewStyle } from 'react-native';\nimport { Platform, Pressable, Text as RNText, TextInput as RNTextInput, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport type { TextInputProps } from '../TextInput/TextInput';\n\n// ─── Internal context ─────────────────────────────────────────────────────\n//\n// Lets the addons + input share focus, error, and disabled state so the\n// WHOLE group's border lights up on focus and dimming cascades visually\n// without consumers having to duplicate props on every child.\ntype InputGroupContextValue = {\n inputId: string;\n describeId: string;\n setFocused: (next: boolean) => void;\n hasError: boolean;\n disabled: boolean;\n inputRef: React.MutableRefObject<RNTextInputType | null>;\n focusInput: () => void;\n};\n\nconst InputGroupContext = createContext<InputGroupContextValue | null>(null);\n\nconst useInputGroupContext = (label: string): InputGroupContextValue => {\n const ctx = useContext(InputGroupContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside an <InputGroup>.`);\n }\n return ctx;\n};\n\n// Marker symbols on the child component functions so we can split children\n// into [prefix, input, suffix] without forcing consumers to pass `position`\n// props or use named slots. Whatever sits before the InputGroupInput is a\n// prefix; whatever sits after is a suffix.\nconst ADDON_TYPE = Symbol.for('nori-ui.InputGroupAddon');\nconst INPUT_TYPE = Symbol.for('nori-ui.InputGroupInput');\n\nconst isAddon = (child: unknown): child is ReactElement =>\n isValidElement(child) && (child.type as { __noriType?: symbol })?.__noriType === ADDON_TYPE;\n\nconst isInput = (child: unknown): child is ReactElement<InputGroupInputProps> =>\n isValidElement(child) && (child.type as { __noriType?: symbol })?.__noriType === INPUT_TYPE;\n\n// ─── Container ────────────────────────────────────────────────────────────\n\n// Layout-only bases; theme-driven dimensions are merged inside the\n// component below.\nconst CONTAINER_LAYOUT_BASE: ViewStyle = { flexDirection: 'column' };\nconst FIELD_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'stretch',\n borderWidth: 1,\n overflow: 'hidden',\n};\n\nexport type InputGroupProps = {\n children: ReactNode;\n /** Mark the entire group as disabled — cascades visually to addons + input. */\n disabled?: boolean;\n /** Mark the entire group as errored — cascades visually to addons + input. */\n error?: boolean;\n className?: string;\n containerClassName?: string;\n testID?: string;\n};\n\n/**\n * Wrapper that visually fuses prefix and/or suffix addons with a TextInput\n * into a SINGLE rounded field — one border around the whole compound, not\n * three separate boxes. Inspired by Chakra's InputGroup and shadcn's input\n * addon pattern.\n *\n * @example\n * <InputGroup>\n * <InputGroupAddon>@</InputGroupAddon>\n * <InputGroupInput placeholder=\"username\" />\n * </InputGroup>\n *\n * @example with both prefix and suffix\n * <InputGroup>\n * <InputGroupAddon>https://</InputGroupAddon>\n * <InputGroupInput defaultValue=\"example\" />\n * <InputGroupAddon>.com</InputGroupAddon>\n * </InputGroup>\n */\nconst InputGroupRoot = ({\n children,\n disabled = false,\n error: groupErrorProp = false,\n className,\n containerClassName,\n testID,\n}: InputGroupProps) => {\n const colors = useThemeColors();\n const reactId = useId();\n const inputId = `nori-ui-input-${reactId}`;\n const describeId = `${inputId}-describe`;\n const [focused, setFocused] = useState(false);\n const inputRef = useRef<RNTextInputType | null>(null);\n\n // Stable identity (does not depend on render-cycle state) so the\n // useMemo below can leave it out of the dep array without lint noise.\n const focusInput = useCallback(() => {\n inputRef.current?.focus();\n }, []);\n\n // Walk children once, split into [prefix, input, suffix]. Anything that\n // isn't a recognised marker gets dropped — the API guarantees a single\n // integrated bar, not arbitrary slots.\n const childArray = Children.toArray(children);\n const inputIndex = childArray.findIndex(isInput);\n const inputElement = inputIndex >= 0 ? (childArray[inputIndex] as ReactElement<InputGroupInputProps>) : null;\n const prefixNodes = inputIndex >= 0 ? childArray.slice(0, inputIndex).filter(isAddon) : [];\n const suffixNodes = inputIndex >= 0 ? childArray.slice(inputIndex + 1).filter(isAddon) : [];\n\n // Lift label / helperText / error from the input element so the parent\n // can render them OUTSIDE the bordered field row (a normal field layout\n // wraps the box with label above and helper/error below).\n const inputProps = inputElement?.props ?? ({} as InputGroupInputProps);\n const label = inputProps.label;\n const helperText = inputProps.helperText;\n const inputError = inputProps.error;\n\n const hasError = Boolean(groupErrorProp) || Boolean(inputError);\n\n const ctx = useMemo<InputGroupContextValue>(\n () => ({\n inputId,\n describeId,\n setFocused,\n hasError,\n disabled,\n inputRef,\n focusInput,\n }),\n [inputId, describeId, hasError, disabled, focusInput]\n );\n\n const borderColor = hasError\n ? colors.color.danger\n : focused\n ? colors.semantic.interactive.primary\n : colors.semantic.border.default;\n\n const fieldStyle = [\n FIELD_LAYOUT_BASE,\n {\n borderRadius: px(colors.radius.md),\n backgroundColor: colors.semantic.background.elevated,\n borderColor,\n },\n disabled ? { opacity: 0.6 } : null,\n ];\n\n const labelStyle: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n color: colors.semantic.text.default,\n };\n const helperStyle: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n };\n const errorStyle: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.color.danger,\n };\n const containerStyle: ViewStyle = { ...CONTAINER_LAYOUT_BASE, gap: px(colors.spacing['1']) };\n\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n className={cn('flex flex-col gap-1', containerClassName)}\n style={containerStyle}\n >\n {label !== undefined ? (\n // On web we render a real <label htmlFor> so clicking the\n // label focuses the input the standard a11y way (and so\n // jsdom-based tests can assert the label↔input\n // association via the `for` attribute).\n //\n // On native, raw <label> is not a valid host component\n // and RN crashes with \"View config getter callback for\n // component `label` must be a function\". The native\n // path renders an RNText instead — the underlying\n // RNTextInput still carries accessibilityLabel for\n // screen readers, so the visible text + the a11y name\n // remain in sync. Same web-only `<label>` story as\n // TextInput's earlier iteration; this branch is the\n // explicit native-safe fallback.\n Platform.OS === 'web' ? (\n <label\n htmlFor={inputId}\n className=\"text-sm font-medium text-semantic-text-default\"\n style={labelStyle as object}\n >\n {label}\n </label>\n ) : (\n <RNText\n nativeID={`${inputId}-label`}\n accessibilityRole=\"text\"\n className=\"text-sm font-medium text-semantic-text-default\"\n style={labelStyle}\n >\n {label}\n </RNText>\n )\n ) : null}\n <InputGroupContext.Provider value={ctx}>\n <View\n className={cn(\n 'flex-row items-stretch overflow-hidden rounded-md border focus-within:border-semantic-interactive-primary',\n hasError ? 'border-semantic-interactive-destructive' : 'border-semantic-border-default',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={fieldStyle}\n >\n {prefixNodes.map((node, i) => {\n const key = (node as ReactElement & { key?: string | null }).key ?? `prefix-${i}`;\n return (\n <AddonSlot key={key} side=\"left\">\n {node}\n </AddonSlot>\n );\n })}\n {inputElement}\n {suffixNodes.map((node, i) => {\n const key = (node as ReactElement & { key?: string | null }).key ?? `suffix-${i}`;\n return (\n <AddonSlot key={key} side=\"right\">\n {node}\n </AddonSlot>\n );\n })}\n </View>\n </InputGroupContext.Provider>\n {inputError ? (\n <RNText\n nativeID={describeId}\n className=\"text-sm text-semantic-interactive-destructive\"\n style={errorStyle}\n >\n {inputError}\n </RNText>\n ) : helperText ? (\n <RNText nativeID={describeId} className=\"text-sm text-semantic-text-muted\" style={helperStyle}>\n {helperText}\n </RNText>\n ) : null}\n </View>\n );\n};\n\n// ─── Addon slot ───────────────────────────────────────────────────────────\n//\n// Internal wrapper that paints the muted background, draws the 1px vertical\n// separator on the input-facing side, and forwards a click to the input so\n// the addon reads as decorator, not as something interactive.\nconst AddonSlot = ({ children, side }: { children: ReactNode; side: 'left' | 'right' }) => {\n const colors = useThemeColors();\n const ctx = useContext(InputGroupContext);\n const dim = ctx?.disabled ? 0.85 : 1;\n\n const baseStyle: ViewStyle = {\n backgroundColor: colors.semantic.background.subtle,\n paddingHorizontal: px(colors.spacing['3']),\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n opacity: dim,\n };\n\n const separatorStyle: ViewStyle =\n side === 'left'\n ? { borderRightWidth: 1, borderRightColor: colors.semantic.border.default }\n : { borderLeftWidth: 1, borderLeftColor: colors.semantic.border.default };\n\n const handlePress = () => {\n ctx?.focusInput();\n };\n\n return (\n <Pressable\n // Pressing the addon focuses the input — addons are decorators,\n // never tab stops. RN's `accessibilityRole` doesn't accept \"presentation\"\n // (web-only), so we set the WAI-ARIA role via the web prop instead.\n onPress={handlePress}\n role=\"none\"\n // RN web maps `focusable={false}` to `tabIndex={-1}`.\n focusable={false}\n style={[baseStyle, separatorStyle]}\n className={cn(\n 'flex-row items-center justify-center px-3 bg-semantic-background-subtle',\n side === 'right' ? 'border-l border-semantic-border-default' : 'border-r border-semantic-border-default'\n )}\n >\n {children}\n </Pressable>\n );\n};\n\n// ─── Addon (public) ───────────────────────────────────────────────────────\n\nexport type InputGroupAddonProps = {\n children: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Decorator slot inside an `<InputGroup>`. Renders a muted, non-interactive\n * box that visually fuses with the input. Place before `<InputGroupInput>`\n * for a prefix, after for a suffix. Accepts strings or `ReactNode` (icons).\n */\nexport const InputGroupAddon = ({ children, className, testID }: InputGroupAddonProps) => {\n const colors = useThemeColors();\n const textStyle: TextStyle = {\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n };\n\n // Wrap raw strings/numbers so consumers can pass `\"@\"` or `<MailIcon />`\n // and both render correctly without callers tripping over RN's \"text\n // outside of <Text>\" warning.\n if (typeof children === 'string' || typeof children === 'number') {\n return (\n <RNText\n {...(testID !== undefined ? { testID } : {})}\n className={cn('text-sm text-semantic-text-muted', className)}\n style={textStyle}\n >\n {children}\n </RNText>\n );\n }\n\n return (\n <View {...(testID !== undefined ? { testID } : {})} {...(className !== undefined ? { className } : {})}>\n {children}\n </View>\n );\n};\n\n// Brand the function so the parent can locate it via Children.toArray walk.\n(InputGroupAddon as unknown as { __noriType: symbol }).__noriType = ADDON_TYPE;\n\n// ─── Input (public) ───────────────────────────────────────────────────────\n\n// Layout-only base; theme-driven dimensions are merged inside InputGroupInput.\nconst INPUT_LAYOUT_BASE: TextStyle = {\n flex: 1,\n // RN web honours `outlineStyle: 'none'` to suppress the default browser\n // focus ring — the group's own focus-within border replaces it.\n outlineStyle: 'none' as unknown as TextStyle['outlineStyle'],\n};\n\nexport type InputGroupInputProps = TextInputProps & {\n /** Label rendered above the bordered field row by the parent InputGroup. */\n label?: string;\n /** Helper text rendered below the bordered field row by the parent InputGroup. */\n helperText?: string;\n /** Error message rendered below the bordered field row by the parent InputGroup. */\n error?: string;\n};\n\n/**\n * The text field inside an `<InputGroup>`. Extends the full `TextInput` API\n * (label, helperText, error, disabled, etc.) so consumers don't lose any\n * functionality when reaching for the integrated layout.\n *\n * Implementation note: this renders a bare RN `TextInput` because the\n * surrounding `<InputGroup>` already paints the border + label + helper —\n * those bits are lifted to the parent so they render OUTSIDE the bordered\n * field row, the way a normal field's label/helper sits above/below the box.\n */\nexport const InputGroupInput = ({\n label: _label,\n helperText: _helperText,\n error,\n disabled,\n onChangeText,\n onFocus,\n onBlur,\n multiline,\n numberOfLines,\n leading: _leading,\n trailing: _trailing,\n containerClassName: _containerClassName,\n className,\n testID,\n ...rest\n}: InputGroupInputProps) => {\n const colors = useThemeColors();\n const ctx = useInputGroupContext('InputGroupInput');\n const inputId = ctx.inputId;\n const describeId = ctx.describeId;\n const isDisabled = disabled || ctx.disabled;\n const hasError = Boolean(error) || ctx.hasError;\n\n const inputExtras: Record<string, unknown> = {};\n if (testID !== undefined) {\n inputExtras.testID = testID;\n }\n if (_label !== undefined) {\n inputExtras.accessibilityLabel = _label;\n }\n if (hasError) {\n inputExtras['aria-invalid'] = true;\n }\n if (error || _helperText) {\n inputExtras['aria-describedby'] = describeId;\n }\n if (multiline !== undefined) {\n inputExtras.multiline = multiline;\n }\n if (numberOfLines !== undefined) {\n inputExtras.numberOfLines = numberOfLines;\n }\n if (onChangeText !== undefined) {\n inputExtras.onChangeText = onChangeText;\n }\n\n const inputStyle: TextStyle = {\n ...INPUT_LAYOUT_BASE,\n paddingVertical: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['3']),\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n color: colors.semantic.text.default,\n };\n\n return (\n <RNTextInput\n ref={(node) => {\n ctx.inputRef.current = node;\n }}\n nativeID={inputId}\n editable={!isDisabled}\n className={cn('flex-1 py-2 px-3 text-md text-semantic-text-default outline-none bg-transparent', className)}\n placeholderTextColor={colors.semantic.text.muted}\n onFocus={(e) => {\n ctx.setFocused(true);\n onFocus?.(e);\n }}\n onBlur={(e) => {\n ctx.setFocused(false);\n onBlur?.(e);\n }}\n {...inputExtras}\n {...rest}\n style={[inputStyle, rest.style]}\n />\n );\n};\n\n(InputGroupInput as unknown as { __noriType: symbol }).__noriType = INPUT_TYPE;\n\n/**\n * Public `InputGroup` value — the root function plus its `.Addon` and `.Input`\n * static members. `Object.assign` produces a value whose inferred type carries\n * the static properties, so `.d.ts` consumers can write `<InputGroup.Addon>`\n * without a separate import.\n */\nexport const InputGroup = Object.assign(InputGroupRoot, {\n Addon: InputGroupAddon,\n Input: InputGroupInput,\n});\n"]}
1
+ {"version":3,"sources":["../src/components/InputGroup/InputGroup.tsx"],"names":["RNText","RNTextInput"],"mappings":"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","file":"chunk-CMA3ZFCG.js","sourcesContent":["'use client';\n\nimport {\n Children,\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { TextInput as RNTextInputType, TextStyle, ViewStyle } from 'react-native';\nimport { Platform, Pressable, Text as RNText, TextInput as RNTextInput, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport type { TextInputProps } from '../TextInput/TextInput';\n\n// ─── Internal context ─────────────────────────────────────────────────────\n//\n// Lets the addons + input share focus, error, and disabled state so the\n// WHOLE group's border lights up on focus and dimming cascades visually\n// without consumers having to duplicate props on every child.\ntype InputGroupContextValue = {\n inputId: string;\n describeId: string;\n setFocused: (next: boolean) => void;\n hasError: boolean;\n disabled: boolean;\n inputRef: React.MutableRefObject<RNTextInputType | null>;\n focusInput: () => void;\n};\n\nconst InputGroupContext = createContext<InputGroupContextValue | null>(null);\n\nconst useInputGroupContext = (label: string): InputGroupContextValue => {\n const ctx = useContext(InputGroupContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside an <InputGroup>.`);\n }\n return ctx;\n};\n\n// Marker symbols on the child component functions so we can split children\n// into [prefix, input, suffix] without forcing consumers to pass `position`\n// props or use named slots. Whatever sits before the InputGroupInput is a\n// prefix; whatever sits after is a suffix.\nconst ADDON_TYPE = Symbol.for('nori-ui.InputGroupAddon');\nconst INPUT_TYPE = Symbol.for('nori-ui.InputGroupInput');\n\nconst isAddon = (child: unknown): child is ReactElement =>\n isValidElement(child) && (child.type as { __noriType?: symbol })?.__noriType === ADDON_TYPE;\n\nconst isInput = (child: unknown): child is ReactElement<InputGroupInputProps> =>\n isValidElement(child) && (child.type as { __noriType?: symbol })?.__noriType === INPUT_TYPE;\n\n// ─── Container ────────────────────────────────────────────────────────────\n\n// Layout-only bases; theme-driven dimensions are merged inside the\n// component below.\nconst CONTAINER_LAYOUT_BASE: ViewStyle = { flexDirection: 'column' };\nconst FIELD_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'stretch',\n borderWidth: 1,\n overflow: 'hidden',\n};\n\nexport type InputGroupProps = {\n children: ReactNode;\n /** Mark the entire group as disabled — cascades visually to addons + input. */\n disabled?: boolean;\n /** Mark the entire group as errored — cascades visually to addons + input. */\n error?: boolean;\n className?: string;\n containerClassName?: string;\n testID?: string;\n};\n\n/**\n * Wrapper that visually fuses prefix and/or suffix addons with a TextInput\n * into a SINGLE rounded field — one border around the whole compound, not\n * three separate boxes. Inspired by Chakra's InputGroup and shadcn's input\n * addon pattern.\n *\n * @example\n * <InputGroup>\n * <InputGroupAddon>@</InputGroupAddon>\n * <InputGroupInput placeholder=\"username\" />\n * </InputGroup>\n *\n * @example with both prefix and suffix\n * <InputGroup>\n * <InputGroupAddon>https://</InputGroupAddon>\n * <InputGroupInput defaultValue=\"example\" />\n * <InputGroupAddon>.com</InputGroupAddon>\n * </InputGroup>\n */\nconst InputGroupRoot = ({\n children,\n disabled = false,\n error: groupErrorProp = false,\n className,\n containerClassName,\n testID,\n}: InputGroupProps) => {\n const colors = useThemeColors();\n const reactId = useId();\n const inputId = `nori-ui-input-${reactId}`;\n const describeId = `${inputId}-describe`;\n const [focused, setFocused] = useState(false);\n const inputRef = useRef<RNTextInputType | null>(null);\n\n // Stable identity (does not depend on render-cycle state) so the\n // useMemo below can leave it out of the dep array without lint noise.\n const focusInput = useCallback(() => {\n inputRef.current?.focus();\n }, []);\n\n // Walk children once, split into [prefix, input, suffix]. Anything that\n // isn't a recognised marker gets dropped — the API guarantees a single\n // integrated bar, not arbitrary slots.\n const childArray = Children.toArray(children);\n const inputIndex = childArray.findIndex(isInput);\n const inputElement = inputIndex >= 0 ? (childArray[inputIndex] as ReactElement<InputGroupInputProps>) : null;\n const prefixNodes = inputIndex >= 0 ? childArray.slice(0, inputIndex).filter(isAddon) : [];\n const suffixNodes = inputIndex >= 0 ? childArray.slice(inputIndex + 1).filter(isAddon) : [];\n\n // Lift label / helperText / error from the input element so the parent\n // can render them OUTSIDE the bordered field row (a normal field layout\n // wraps the box with label above and helper/error below).\n const inputProps = inputElement?.props ?? ({} as InputGroupInputProps);\n const label = inputProps.label;\n const helperText = inputProps.helperText;\n const inputError = inputProps.error;\n\n const hasError = Boolean(groupErrorProp) || Boolean(inputError);\n\n const ctx = useMemo<InputGroupContextValue>(\n () => ({\n inputId,\n describeId,\n setFocused,\n hasError,\n disabled,\n inputRef,\n focusInput,\n }),\n [inputId, describeId, hasError, disabled, focusInput]\n );\n\n const borderColor = hasError\n ? colors.color.danger\n : focused\n ? colors.semantic.interactive.primary\n : colors.semantic.border.default;\n\n const fieldStyle = [\n FIELD_LAYOUT_BASE,\n {\n borderRadius: px(colors.radius.md),\n backgroundColor: colors.semantic.background.elevated,\n borderColor,\n },\n disabled ? { opacity: 0.6 } : null,\n ];\n\n const labelStyle: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n color: colors.semantic.text.default,\n };\n const helperStyle: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n };\n const errorStyle: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.color.dangerText,\n };\n const containerStyle: ViewStyle = { ...CONTAINER_LAYOUT_BASE, gap: px(colors.spacing['1']) };\n\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n className={cn('flex flex-col gap-1', containerClassName)}\n style={containerStyle}\n >\n {label !== undefined ? (\n // On web we render a real <label htmlFor> so clicking the\n // label focuses the input the standard a11y way (and so\n // jsdom-based tests can assert the label↔input\n // association via the `for` attribute).\n //\n // On native, raw <label> is not a valid host component\n // and RN crashes with \"View config getter callback for\n // component `label` must be a function\". The native\n // path renders an RNText instead — the underlying\n // RNTextInput still carries accessibilityLabel for\n // screen readers, so the visible text + the a11y name\n // remain in sync. Same web-only `<label>` story as\n // TextInput's earlier iteration; this branch is the\n // explicit native-safe fallback.\n Platform.OS === 'web' ? (\n <label\n htmlFor={inputId}\n className=\"text-sm font-medium text-semantic-text-default\"\n style={labelStyle as object}\n >\n {label}\n </label>\n ) : (\n <RNText\n nativeID={`${inputId}-label`}\n accessibilityRole=\"text\"\n className=\"text-sm font-medium text-semantic-text-default\"\n style={labelStyle}\n >\n {label}\n </RNText>\n )\n ) : null}\n <InputGroupContext.Provider value={ctx}>\n <View\n className={cn(\n 'flex-row items-stretch overflow-hidden rounded-md border focus-within:border-semantic-interactive-primary',\n hasError ? 'border-semantic-interactive-destructive' : 'border-semantic-border-default',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={fieldStyle}\n >\n {prefixNodes.map((node, i) => {\n const key = (node as ReactElement & { key?: string | null }).key ?? `prefix-${i}`;\n return (\n <AddonSlot key={key} side=\"left\">\n {node}\n </AddonSlot>\n );\n })}\n {inputElement}\n {suffixNodes.map((node, i) => {\n const key = (node as ReactElement & { key?: string | null }).key ?? `suffix-${i}`;\n return (\n <AddonSlot key={key} side=\"right\">\n {node}\n </AddonSlot>\n );\n })}\n </View>\n </InputGroupContext.Provider>\n {inputError ? (\n <RNText\n nativeID={describeId}\n className=\"text-sm text-semantic-interactive-destructive\"\n style={errorStyle}\n >\n {inputError}\n </RNText>\n ) : helperText ? (\n <RNText nativeID={describeId} className=\"text-sm text-semantic-text-muted\" style={helperStyle}>\n {helperText}\n </RNText>\n ) : null}\n </View>\n );\n};\n\n// ─── Addon slot ───────────────────────────────────────────────────────────\n//\n// Internal wrapper that paints the muted background, draws the 1px vertical\n// separator on the input-facing side, and forwards a click to the input so\n// the addon reads as decorator, not as something interactive.\nconst AddonSlot = ({ children, side }: { children: ReactNode; side: 'left' | 'right' }) => {\n const colors = useThemeColors();\n const ctx = useContext(InputGroupContext);\n const dim = ctx?.disabled ? 0.85 : 1;\n\n const baseStyle: ViewStyle = {\n backgroundColor: colors.semantic.background.subtle,\n paddingHorizontal: px(colors.spacing['3']),\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n opacity: dim,\n };\n\n const separatorStyle: ViewStyle =\n side === 'left'\n ? { borderRightWidth: 1, borderRightColor: colors.semantic.border.default }\n : { borderLeftWidth: 1, borderLeftColor: colors.semantic.border.default };\n\n const handlePress = () => {\n ctx?.focusInput();\n };\n\n return (\n <Pressable\n // Pressing the addon focuses the input — addons are decorators,\n // never tab stops. RN's `accessibilityRole` doesn't accept \"presentation\"\n // (web-only), so we set the WAI-ARIA role via the web prop instead.\n onPress={handlePress}\n role=\"none\"\n // RN web maps `focusable={false}` to `tabIndex={-1}`.\n focusable={false}\n style={[baseStyle, separatorStyle]}\n className={cn(\n 'flex-row items-center justify-center px-3 bg-semantic-background-subtle',\n side === 'right' ? 'border-l border-semantic-border-default' : 'border-r border-semantic-border-default'\n )}\n >\n {children}\n </Pressable>\n );\n};\n\n// ─── Addon (public) ───────────────────────────────────────────────────────\n\nexport type InputGroupAddonProps = {\n children: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Decorator slot inside an `<InputGroup>`. Renders a muted, non-interactive\n * box that visually fuses with the input. Place before `<InputGroupInput>`\n * for a prefix, after for a suffix. Accepts strings or `ReactNode` (icons).\n */\nexport const InputGroupAddon = ({ children, className, testID }: InputGroupAddonProps) => {\n const colors = useThemeColors();\n const textStyle: TextStyle = {\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n };\n\n // Wrap raw strings/numbers so consumers can pass `\"@\"` or `<MailIcon />`\n // and both render correctly without callers tripping over RN's \"text\n // outside of <Text>\" warning.\n if (typeof children === 'string' || typeof children === 'number') {\n return (\n <RNText\n {...(testID !== undefined ? { testID } : {})}\n className={cn('text-sm text-semantic-text-muted', className)}\n style={textStyle}\n >\n {children}\n </RNText>\n );\n }\n\n return (\n <View {...(testID !== undefined ? { testID } : {})} {...(className !== undefined ? { className } : {})}>\n {children}\n </View>\n );\n};\n\n// Brand the function so the parent can locate it via Children.toArray walk.\n(InputGroupAddon as unknown as { __noriType: symbol }).__noriType = ADDON_TYPE;\n\n// ─── Input (public) ───────────────────────────────────────────────────────\n\n// Layout-only base; theme-driven dimensions are merged inside InputGroupInput.\nconst INPUT_LAYOUT_BASE: TextStyle = {\n flex: 1,\n // RN web honours `outlineStyle: 'none'` to suppress the default browser\n // focus ring — the group's own focus-within border replaces it.\n outlineStyle: 'none' as unknown as TextStyle['outlineStyle'],\n};\n\nexport type InputGroupInputProps = TextInputProps & {\n /** Label rendered above the bordered field row by the parent InputGroup. */\n label?: string;\n /** Helper text rendered below the bordered field row by the parent InputGroup. */\n helperText?: string;\n /** Error message rendered below the bordered field row by the parent InputGroup. */\n error?: string;\n};\n\n/**\n * The text field inside an `<InputGroup>`. Extends the full `TextInput` API\n * (label, helperText, error, disabled, etc.) so consumers don't lose any\n * functionality when reaching for the integrated layout.\n *\n * Implementation note: this renders a bare RN `TextInput` because the\n * surrounding `<InputGroup>` already paints the border + label + helper —\n * those bits are lifted to the parent so they render OUTSIDE the bordered\n * field row, the way a normal field's label/helper sits above/below the box.\n */\nexport const InputGroupInput = ({\n label: _label,\n helperText: _helperText,\n error,\n disabled,\n onChangeText,\n onFocus,\n onBlur,\n multiline,\n numberOfLines,\n leading: _leading,\n trailing: _trailing,\n containerClassName: _containerClassName,\n className,\n testID,\n ...rest\n}: InputGroupInputProps) => {\n const colors = useThemeColors();\n const ctx = useInputGroupContext('InputGroupInput');\n const inputId = ctx.inputId;\n const describeId = ctx.describeId;\n const isDisabled = disabled || ctx.disabled;\n const hasError = Boolean(error) || ctx.hasError;\n\n const inputExtras: Record<string, unknown> = {};\n if (testID !== undefined) {\n inputExtras.testID = testID;\n }\n if (_label !== undefined) {\n inputExtras.accessibilityLabel = _label;\n }\n if (hasError) {\n inputExtras['aria-invalid'] = true;\n }\n if (error || _helperText) {\n inputExtras['aria-describedby'] = describeId;\n }\n if (multiline !== undefined) {\n inputExtras.multiline = multiline;\n }\n if (numberOfLines !== undefined) {\n inputExtras.numberOfLines = numberOfLines;\n }\n if (onChangeText !== undefined) {\n inputExtras.onChangeText = onChangeText;\n }\n\n const inputStyle: TextStyle = {\n ...INPUT_LAYOUT_BASE,\n paddingVertical: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['3']),\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n color: colors.semantic.text.default,\n };\n\n return (\n <RNTextInput\n ref={(node) => {\n ctx.inputRef.current = node;\n }}\n nativeID={inputId}\n editable={!isDisabled}\n className={cn('flex-1 py-2 px-3 text-md text-semantic-text-default outline-none bg-transparent', className)}\n placeholderTextColor={colors.semantic.text.muted}\n onFocus={(e) => {\n ctx.setFocused(true);\n onFocus?.(e);\n }}\n onBlur={(e) => {\n ctx.setFocused(false);\n onBlur?.(e);\n }}\n {...inputExtras}\n {...rest}\n style={[inputStyle, rest.style]}\n />\n );\n};\n\n(InputGroupInput as unknown as { __noriType: symbol }).__noriType = INPUT_TYPE;\n\n/**\n * Public `InputGroup` value — the root function plus its `.Addon` and `.Input`\n * static members. `Object.assign` produces a value whose inferred type carries\n * the static properties, so `.d.ts` consumers can write `<InputGroup.Addon>`\n * without a separate import.\n */\nexport const InputGroup = Object.assign(InputGroupRoot, {\n Addon: InputGroupAddon,\n Input: InputGroupInput,\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, useId, useState, useRef, useCallback, useMemo, useEffect, useContext } from 'react';
@@ -302,5 +302,5 @@ var Tabs = Object.assign(TabsRoot, {
302
302
  });
303
303
 
304
304
  export { Tabs };
305
- //# sourceMappingURL=chunk-EN4CLDGZ.js.map
306
- //# sourceMappingURL=chunk-EN4CLDGZ.js.map
305
+ //# sourceMappingURL=chunk-D4J24WDF.js.map
306
+ //# sourceMappingURL=chunk-D4J24WDF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Tabs/Tabs.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-EN4CLDGZ.js","sourcesContent":["'use client';\n\nimport {\n createContext,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, 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\nexport type TabsOrientation = 'horizontal' | 'vertical';\nexport type TabsActivation = 'automatic' | 'manual';\n\ntype TabsContextValue = {\n value: string | undefined;\n setValue: (next: string) => void;\n baseId: string;\n orientation: TabsOrientation;\n activation: TabsActivation;\n register: (value: string, ref: RefObject<HTMLElement | null>) => void;\n unregister: (value: string) => void;\n moveFocus: (offset: 1 | -1, fromValue: string) => void;\n focusEdge: (edge: 'first' | 'last') => void;\n};\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nconst useTabsContext = (label: string): TabsContextValue => {\n const ctx = useContext(TabsContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Tabs>.`);\n }\n return ctx;\n};\n\nexport type TabsProps = {\n /** Controlled active tab value. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n /** Fires with the new value when the active tab changes. */\n onChange?: (next: string) => void;\n /**\n * Layout direction of the tablist. Drives the keyboard-nav axis.\n * @defaultValue 'horizontal'\n */\n orientation?: TabsOrientation;\n /**\n * Whether arrow keys also activate the focused tab.\n * - `automatic` (default) — selection follows focus, matching most UIs.\n * - `manual` — arrow keys move focus only; the user presses Enter or\n * Space to activate. Use when activating a tab is expensive.\n * @defaultValue 'automatic'\n */\n activation?: TabsActivation;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Tab pattern with keyboard nav, roving tabindex, and content/trigger\n * association via shared `value`s. Compose:\n *\n * <Tabs defaultValue=\"overview\">\n * <TabsList>\n * <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n * <TabsTrigger value=\"settings\">Settings</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"overview\">…</TabsContent>\n * <TabsContent value=\"settings\">…</TabsContent>\n * </Tabs>\n *\n * Follows the WAI-ARIA tablist pattern: `tablist` / `tab` / `tabpanel` roles,\n * arrow-key navigation that wraps, Home/End for first/last, and roving\n * tabindex so tabbing into the group lands on the active tab.\n */\nconst TabsRoot = ({\n value,\n defaultValue,\n onChange,\n orientation = 'horizontal',\n activation = 'automatic',\n children,\n className,\n testID,\n}: TabsProps) => {\n const baseId = useId();\n const [inner, setInner] = useState<string | undefined>(defaultValue);\n const isControlled = value !== undefined;\n const current = isControlled ? value : inner;\n\n const refs = useRef<Map<string, RefObject<HTMLElement | null>>>(new Map());\n const orderRef = useRef<string[]>([]);\n\n const setValue = useCallback(\n (next: string) => {\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const register = useCallback((v: string, ref: RefObject<HTMLElement | null>) => {\n refs.current.set(v, ref);\n if (!orderRef.current.includes(v)) {\n orderRef.current.push(v);\n }\n }, []);\n\n const unregister = useCallback((v: string) => {\n refs.current.delete(v);\n orderRef.current = orderRef.current.filter((x) => x !== v);\n }, []);\n\n const focusValue = useCallback(\n (next: string) => {\n const ref = refs.current.get(next);\n ref?.current?.focus?.();\n if (activation === 'automatic') {\n setValue(next);\n }\n },\n [activation, setValue]\n );\n\n const moveFocus = useCallback(\n (offset: 1 | -1, fromValue: string) => {\n const order = orderRef.current;\n if (order.length === 0) {\n return;\n }\n const idx = order.indexOf(fromValue);\n const start = idx === -1 ? 0 : idx;\n const len = order.length;\n const next = order[(start + offset + len) % len];\n if (next) {\n focusValue(next);\n }\n },\n [focusValue]\n );\n\n const focusEdge = useCallback(\n (edge: 'first' | 'last') => {\n const order = orderRef.current;\n if (order.length === 0) {\n return;\n }\n const target = edge === 'first' ? order[0] : order[order.length - 1];\n if (target) {\n focusValue(target);\n }\n },\n [focusValue]\n );\n\n const ctxValue = useMemo<TabsContextValue>(\n () => ({\n value: current,\n setValue,\n baseId,\n orientation,\n activation,\n register,\n unregister,\n moveFocus,\n focusEdge,\n }),\n [current, setValue, baseId, orientation, activation, register, unregister, moveFocus, focusEdge]\n );\n\n return (\n <TabsContext.Provider value={ctxValue}>\n <TabsViewport\n orientation={orientation}\n {...(className !== undefined ? { className } : {})}\n {...(testID !== undefined ? { testID } : {})}\n >\n {children}\n </TabsViewport>\n </TabsContext.Provider>\n );\n};\n\n// Inner view so we can call useThemeColors() to source the orientation\n// gap from the spacing token scale.\nconst TabsViewport = ({\n orientation,\n className,\n testID,\n children,\n}: {\n orientation: TabsOrientation;\n className?: string;\n testID?: string;\n children?: ReactNode;\n}) => {\n const colors = useThemeColors();\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n className={cn(orientation === 'vertical' ? 'flex-row gap-4' : 'flex-col gap-3', className)}\n style={\n orientation === 'vertical'\n ? { flexDirection: 'row', gap: px(colors.spacing['4']) }\n : { flexDirection: 'column', gap: px(colors.spacing['3']) }\n }\n >\n {children}\n </View>\n );\n};\n\nexport type TabsListProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n// Layout-only bases; theme-driven gap is merged inside TabsList.\nconst LIST_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n borderBottomWidth: 1,\n};\n\nconst LIST_VERTICAL_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'column',\n alignItems: 'stretch',\n borderRightWidth: 1,\n};\n\n/** Container for `TabsTrigger`s. Renders the underline rule on the appropriate edge. */\nexport const TabsList = ({ children, className, testID }: TabsListProps) => {\n const ctx = useTabsContext('TabsList');\n const colors = useThemeColors();\n const gap = px(colors.spacing['1']);\n const listStyle: ViewStyle =\n ctx.orientation === 'vertical'\n ? { ...LIST_VERTICAL_LAYOUT_BASE, gap, borderRightColor: colors.semantic.border.default }\n : { ...LIST_LAYOUT_BASE, gap, borderBottomColor: colors.semantic.border.default };\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"tablist\"\n accessibilityRole=\"tablist\"\n aria-orientation={ctx.orientation}\n className={cn(\n ctx.orientation === 'vertical'\n ? 'flex-col gap-1 border-r border-semantic-border-default'\n : 'flex-row items-center gap-1 border-b border-semantic-border-default',\n className\n )}\n style={listStyle}\n >\n {children}\n </View>\n );\n};\n\nexport type TabsTriggerProps = {\n /** Value linking this trigger to a `<TabsContent>`. */\n value: string;\n /** Disable just this trigger. */\n disabled?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n// Subtle 200ms ease on border + text color so the active tab indicator\n// fades in/out (and the trigger label colors smoothly between selected\n// and idle) instead of snapping. Web only — RN ignores the transition*\n// keys silently. We don't ship a true sliding magic-pill on either\n// platform yet; that would need react-native-reanimated and per-trigger\n// rect measurement, which is more complexity than this earns right now.\nconst TRIGGER_TRANSITION = {\n transitionProperty: 'border-color, color',\n transitionDuration: '200ms',\n transitionTimingFunction: 'ease',\n} as ViewStyle;\n\n// Layout / transition only; theme-driven padding is merged inside TabsTrigger.\nconst TRIGGER_LAYOUT_BASE: ViewStyle = {\n borderBottomWidth: 2,\n borderBottomColor: 'transparent',\n marginBottom: -1,\n ...TRIGGER_TRANSITION,\n};\n\nconst TRIGGER_LAYOUT_BASE_VERTICAL: ViewStyle = {\n borderRightWidth: 2,\n borderRightColor: 'transparent',\n marginRight: -1,\n ...TRIGGER_TRANSITION,\n};\n\n/** Clickable tab. Activating it shows the matching `TabsContent`. */\nexport const TabsTrigger = ({ value, disabled, children, className, testID }: TabsTriggerProps) => {\n const ctx = useTabsContext('TabsTrigger');\n const colors = useThemeColors();\n const ownRef = useRef<HTMLElement | null>(null);\n const selected = ctx.value === value;\n const isVertical = ctx.orientation === 'vertical';\n\n useEffect(() => {\n ctx.register(value, ownRef);\n return () => ctx.unregister(value);\n }, [ctx, value]);\n\n const onPress = useCallback(() => {\n if (disabled) {\n return;\n }\n ctx.setValue(value);\n }, [ctx, value, disabled]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n const nextKey = isVertical ? 'ArrowDown' : 'ArrowRight';\n const prevKey = isVertical ? 'ArrowUp' : 'ArrowLeft';\n switch (event.key) {\n case nextKey:\n event.preventDefault();\n ctx.moveFocus(1, value);\n return;\n case prevKey:\n event.preventDefault();\n ctx.moveFocus(-1, value);\n return;\n case 'Home':\n event.preventDefault();\n ctx.focusEdge('first');\n return;\n case 'End':\n event.preventDefault();\n ctx.focusEdge('last');\n return;\n case 'Enter':\n case ' ': {\n if (ctx.activation === 'manual') {\n event.preventDefault();\n if (!disabled) {\n ctx.setValue(value);\n }\n }\n return;\n }\n }\n },\n [ctx, value, disabled, isVertical]\n );\n\n const accentStyle = selected\n ? isVertical\n ? { borderRightColor: colors.semantic.interactive.primary }\n : { borderBottomColor: colors.semantic.interactive.primary }\n : null;\n\n const triggerProps: Record<string, unknown> = {\n ref: (node: HTMLElement | null) => {\n ownRef.current = node;\n },\n role: 'tab',\n accessibilityRole: 'tab',\n 'aria-selected': selected,\n 'aria-controls': `${ctx.baseId}-panel-${value}`,\n id: `${ctx.baseId}-tab-${value}`,\n tabIndex: selected ? 0 : -1,\n onPress,\n onKeyDown: handleKeyDown,\n ...(disabled ? { 'aria-disabled': true, disabled: true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n };\n\n const triggerPadding: ViewStyle = {\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n };\n const triggerStyle: ViewStyle = isVertical\n ? { ...TRIGGER_LAYOUT_BASE_VERTICAL, ...triggerPadding }\n : { ...TRIGGER_LAYOUT_BASE, ...triggerPadding };\n\n return (\n <Pressable\n {...triggerProps}\n className={cn(\n isVertical\n ? 'px-3 py-2 -mr-px border-r-2 border-r-transparent'\n : 'px-3 py-2 -mb-px border-b-2 border-b-transparent',\n selected ? 'border-r-semantic-interactive-primary' : '',\n disabled ? 'opacity-50' : 'opacity-100',\n className\n )}\n style={[triggerStyle, accentStyle, disabled ? { opacity: 0.5 } : null]}\n >\n {typeof children === 'string' ? (\n <RNText\n style={{\n color: selected ? colors.semantic.interactive.primary : colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: selected\n ? (colors.fontWeight.semibold as '600')\n : (colors.fontWeight.medium as '500'),\n }}\n >\n {children}\n </RNText>\n ) : (\n children\n )}\n </Pressable>\n );\n};\n\nexport type TabsContentProps = {\n /** Value of the trigger this panel pairs with. */\n value: string;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/** Panel content shown when its `value` matches the active tab. */\nexport const TabsContent = ({ value, children, className, testID }: TabsContentProps) => {\n const ctx = useTabsContext('TabsContent');\n const active = ctx.value === value;\n if (!active) {\n return null;\n }\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"tabpanel\"\n accessibilityRole=\"none\"\n id={`${ctx.baseId}-panel-${value}`}\n aria-labelledby={`${ctx.baseId}-tab-${value}`}\n tabIndex={0}\n className={cn('outline-none', className)}\n >\n {children}\n </View>\n );\n};\n\n/**\n * Public `Tabs` value — the root function plus its `.List`, `.Trigger`, and\n * `.Content` static members. `Object.assign` produces a value whose inferred\n * type carries the static properties, so `.d.ts` consumers can write\n * `<Tabs.List>` without a separate import.\n */\nexport const Tabs = Object.assign(TabsRoot, {\n List: TabsList,\n Trigger: TabsTrigger,\n Content: TabsContent,\n});\n"]}
1
+ {"version":3,"sources":["../src/components/Tabs/Tabs.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-D4J24WDF.js","sourcesContent":["'use client';\n\nimport {\n createContext,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, 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\nexport type TabsOrientation = 'horizontal' | 'vertical';\nexport type TabsActivation = 'automatic' | 'manual';\n\ntype TabsContextValue = {\n value: string | undefined;\n setValue: (next: string) => void;\n baseId: string;\n orientation: TabsOrientation;\n activation: TabsActivation;\n register: (value: string, ref: RefObject<HTMLElement | null>) => void;\n unregister: (value: string) => void;\n moveFocus: (offset: 1 | -1, fromValue: string) => void;\n focusEdge: (edge: 'first' | 'last') => void;\n};\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nconst useTabsContext = (label: string): TabsContextValue => {\n const ctx = useContext(TabsContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Tabs>.`);\n }\n return ctx;\n};\n\nexport type TabsProps = {\n /** Controlled active tab value. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n /** Fires with the new value when the active tab changes. */\n onChange?: (next: string) => void;\n /**\n * Layout direction of the tablist. Drives the keyboard-nav axis.\n * @defaultValue 'horizontal'\n */\n orientation?: TabsOrientation;\n /**\n * Whether arrow keys also activate the focused tab.\n * - `automatic` (default) — selection follows focus, matching most UIs.\n * - `manual` — arrow keys move focus only; the user presses Enter or\n * Space to activate. Use when activating a tab is expensive.\n * @defaultValue 'automatic'\n */\n activation?: TabsActivation;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Tab pattern with keyboard nav, roving tabindex, and content/trigger\n * association via shared `value`s. Compose:\n *\n * <Tabs defaultValue=\"overview\">\n * <TabsList>\n * <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n * <TabsTrigger value=\"settings\">Settings</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"overview\">…</TabsContent>\n * <TabsContent value=\"settings\">…</TabsContent>\n * </Tabs>\n *\n * Follows the WAI-ARIA tablist pattern: `tablist` / `tab` / `tabpanel` roles,\n * arrow-key navigation that wraps, Home/End for first/last, and roving\n * tabindex so tabbing into the group lands on the active tab.\n */\nconst TabsRoot = ({\n value,\n defaultValue,\n onChange,\n orientation = 'horizontal',\n activation = 'automatic',\n children,\n className,\n testID,\n}: TabsProps) => {\n const baseId = useId();\n const [inner, setInner] = useState<string | undefined>(defaultValue);\n const isControlled = value !== undefined;\n const current = isControlled ? value : inner;\n\n const refs = useRef<Map<string, RefObject<HTMLElement | null>>>(new Map());\n const orderRef = useRef<string[]>([]);\n\n const setValue = useCallback(\n (next: string) => {\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const register = useCallback((v: string, ref: RefObject<HTMLElement | null>) => {\n refs.current.set(v, ref);\n if (!orderRef.current.includes(v)) {\n orderRef.current.push(v);\n }\n }, []);\n\n const unregister = useCallback((v: string) => {\n refs.current.delete(v);\n orderRef.current = orderRef.current.filter((x) => x !== v);\n }, []);\n\n const focusValue = useCallback(\n (next: string) => {\n const ref = refs.current.get(next);\n ref?.current?.focus?.();\n if (activation === 'automatic') {\n setValue(next);\n }\n },\n [activation, setValue]\n );\n\n const moveFocus = useCallback(\n (offset: 1 | -1, fromValue: string) => {\n const order = orderRef.current;\n if (order.length === 0) {\n return;\n }\n const idx = order.indexOf(fromValue);\n const start = idx === -1 ? 0 : idx;\n const len = order.length;\n const next = order[(start + offset + len) % len];\n if (next) {\n focusValue(next);\n }\n },\n [focusValue]\n );\n\n const focusEdge = useCallback(\n (edge: 'first' | 'last') => {\n const order = orderRef.current;\n if (order.length === 0) {\n return;\n }\n const target = edge === 'first' ? order[0] : order[order.length - 1];\n if (target) {\n focusValue(target);\n }\n },\n [focusValue]\n );\n\n const ctxValue = useMemo<TabsContextValue>(\n () => ({\n value: current,\n setValue,\n baseId,\n orientation,\n activation,\n register,\n unregister,\n moveFocus,\n focusEdge,\n }),\n [current, setValue, baseId, orientation, activation, register, unregister, moveFocus, focusEdge]\n );\n\n return (\n <TabsContext.Provider value={ctxValue}>\n <TabsViewport\n orientation={orientation}\n {...(className !== undefined ? { className } : {})}\n {...(testID !== undefined ? { testID } : {})}\n >\n {children}\n </TabsViewport>\n </TabsContext.Provider>\n );\n};\n\n// Inner view so we can call useThemeColors() to source the orientation\n// gap from the spacing token scale.\nconst TabsViewport = ({\n orientation,\n className,\n testID,\n children,\n}: {\n orientation: TabsOrientation;\n className?: string;\n testID?: string;\n children?: ReactNode;\n}) => {\n const colors = useThemeColors();\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n className={cn(orientation === 'vertical' ? 'flex-row gap-4' : 'flex-col gap-3', className)}\n style={\n orientation === 'vertical'\n ? { flexDirection: 'row', gap: px(colors.spacing['4']) }\n : { flexDirection: 'column', gap: px(colors.spacing['3']) }\n }\n >\n {children}\n </View>\n );\n};\n\nexport type TabsListProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n// Layout-only bases; theme-driven gap is merged inside TabsList.\nconst LIST_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n borderBottomWidth: 1,\n};\n\nconst LIST_VERTICAL_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'column',\n alignItems: 'stretch',\n borderRightWidth: 1,\n};\n\n/** Container for `TabsTrigger`s. Renders the underline rule on the appropriate edge. */\nexport const TabsList = ({ children, className, testID }: TabsListProps) => {\n const ctx = useTabsContext('TabsList');\n const colors = useThemeColors();\n const gap = px(colors.spacing['1']);\n const listStyle: ViewStyle =\n ctx.orientation === 'vertical'\n ? { ...LIST_VERTICAL_LAYOUT_BASE, gap, borderRightColor: colors.semantic.border.default }\n : { ...LIST_LAYOUT_BASE, gap, borderBottomColor: colors.semantic.border.default };\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"tablist\"\n accessibilityRole=\"tablist\"\n aria-orientation={ctx.orientation}\n className={cn(\n ctx.orientation === 'vertical'\n ? 'flex-col gap-1 border-r border-semantic-border-default'\n : 'flex-row items-center gap-1 border-b border-semantic-border-default',\n className\n )}\n style={listStyle}\n >\n {children}\n </View>\n );\n};\n\nexport type TabsTriggerProps = {\n /** Value linking this trigger to a `<TabsContent>`. */\n value: string;\n /** Disable just this trigger. */\n disabled?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n// Subtle 200ms ease on border + text color so the active tab indicator\n// fades in/out (and the trigger label colors smoothly between selected\n// and idle) instead of snapping. Web only — RN ignores the transition*\n// keys silently. We don't ship a true sliding magic-pill on either\n// platform yet; that would need react-native-reanimated and per-trigger\n// rect measurement, which is more complexity than this earns right now.\nconst TRIGGER_TRANSITION = {\n transitionProperty: 'border-color, color',\n transitionDuration: '200ms',\n transitionTimingFunction: 'ease',\n} as ViewStyle;\n\n// Layout / transition only; theme-driven padding is merged inside TabsTrigger.\nconst TRIGGER_LAYOUT_BASE: ViewStyle = {\n borderBottomWidth: 2,\n borderBottomColor: 'transparent',\n marginBottom: -1,\n ...TRIGGER_TRANSITION,\n};\n\nconst TRIGGER_LAYOUT_BASE_VERTICAL: ViewStyle = {\n borderRightWidth: 2,\n borderRightColor: 'transparent',\n marginRight: -1,\n ...TRIGGER_TRANSITION,\n};\n\n/** Clickable tab. Activating it shows the matching `TabsContent`. */\nexport const TabsTrigger = ({ value, disabled, children, className, testID }: TabsTriggerProps) => {\n const ctx = useTabsContext('TabsTrigger');\n const colors = useThemeColors();\n const ownRef = useRef<HTMLElement | null>(null);\n const selected = ctx.value === value;\n const isVertical = ctx.orientation === 'vertical';\n\n useEffect(() => {\n ctx.register(value, ownRef);\n return () => ctx.unregister(value);\n }, [ctx, value]);\n\n const onPress = useCallback(() => {\n if (disabled) {\n return;\n }\n ctx.setValue(value);\n }, [ctx, value, disabled]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n const nextKey = isVertical ? 'ArrowDown' : 'ArrowRight';\n const prevKey = isVertical ? 'ArrowUp' : 'ArrowLeft';\n switch (event.key) {\n case nextKey:\n event.preventDefault();\n ctx.moveFocus(1, value);\n return;\n case prevKey:\n event.preventDefault();\n ctx.moveFocus(-1, value);\n return;\n case 'Home':\n event.preventDefault();\n ctx.focusEdge('first');\n return;\n case 'End':\n event.preventDefault();\n ctx.focusEdge('last');\n return;\n case 'Enter':\n case ' ': {\n if (ctx.activation === 'manual') {\n event.preventDefault();\n if (!disabled) {\n ctx.setValue(value);\n }\n }\n return;\n }\n }\n },\n [ctx, value, disabled, isVertical]\n );\n\n const accentStyle = selected\n ? isVertical\n ? { borderRightColor: colors.semantic.interactive.primary }\n : { borderBottomColor: colors.semantic.interactive.primary }\n : null;\n\n const triggerProps: Record<string, unknown> = {\n ref: (node: HTMLElement | null) => {\n ownRef.current = node;\n },\n role: 'tab',\n accessibilityRole: 'tab',\n 'aria-selected': selected,\n 'aria-controls': `${ctx.baseId}-panel-${value}`,\n id: `${ctx.baseId}-tab-${value}`,\n tabIndex: selected ? 0 : -1,\n onPress,\n onKeyDown: handleKeyDown,\n ...(disabled ? { 'aria-disabled': true, disabled: true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n };\n\n const triggerPadding: ViewStyle = {\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n };\n const triggerStyle: ViewStyle = isVertical\n ? { ...TRIGGER_LAYOUT_BASE_VERTICAL, ...triggerPadding }\n : { ...TRIGGER_LAYOUT_BASE, ...triggerPadding };\n\n return (\n <Pressable\n {...triggerProps}\n className={cn(\n isVertical\n ? 'px-3 py-2 -mr-px border-r-2 border-r-transparent'\n : 'px-3 py-2 -mb-px border-b-2 border-b-transparent',\n selected ? 'border-r-semantic-interactive-primary' : '',\n disabled ? 'opacity-50' : 'opacity-100',\n className\n )}\n style={[triggerStyle, accentStyle, disabled ? { opacity: 0.5 } : null]}\n >\n {typeof children === 'string' ? (\n <RNText\n style={{\n color: selected ? colors.semantic.interactive.primary : colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: selected\n ? (colors.fontWeight.semibold as '600')\n : (colors.fontWeight.medium as '500'),\n }}\n >\n {children}\n </RNText>\n ) : (\n children\n )}\n </Pressable>\n );\n};\n\nexport type TabsContentProps = {\n /** Value of the trigger this panel pairs with. */\n value: string;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/** Panel content shown when its `value` matches the active tab. */\nexport const TabsContent = ({ value, children, className, testID }: TabsContentProps) => {\n const ctx = useTabsContext('TabsContent');\n const active = ctx.value === value;\n if (!active) {\n return null;\n }\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"tabpanel\"\n accessibilityRole=\"none\"\n id={`${ctx.baseId}-panel-${value}`}\n aria-labelledby={`${ctx.baseId}-tab-${value}`}\n tabIndex={0}\n className={cn('outline-none', className)}\n >\n {children}\n </View>\n );\n};\n\n/**\n * Public `Tabs` value — the root function plus its `.List`, `.Trigger`, and\n * `.Content` static members. `Object.assign` produces a value whose inferred\n * type carries the static properties, so `.d.ts` consumers can write\n * `<Tabs.List>` without a separate import.\n */\nexport const Tabs = Object.assign(TabsRoot, {\n List: TabsList,\n Trigger: TabsTrigger,\n Content: TabsContent,\n});\n"]}
@@ -1,5 +1,5 @@
1
1
  import { px } from './chunk-5A2QOOVN.js';
2
- import { useThemeColors, useColorScheme } from './chunk-R5JMDDCB.js';
2
+ import { useThemeColors, useColorScheme } 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';
@@ -104,5 +104,5 @@ var Badge = /* @__PURE__ */ __name(({ tone = "neutral", appearance = "soft", chi
104
104
  }, "Badge");
105
105
 
106
106
  export { Badge };
107
- //# sourceMappingURL=chunk-MOAIQHR7.js.map
108
- //# sourceMappingURL=chunk-MOAIQHR7.js.map
107
+ //# sourceMappingURL=chunk-DJ3XX3CV.js.map
108
+ //# sourceMappingURL=chunk-DJ3XX3CV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Badge/Badge.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-MOAIQHR7.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport type { TextStyle, ViewStyle } from 'react-native';\nimport { Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useColorScheme } from '../../theme/use-color-scheme';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type BadgeTone = 'neutral' | 'primary' | 'success' | 'warning' | 'danger';\nexport type BadgeAppearance = 'solid' | 'outline' | 'soft';\n\nexport type BadgeProps = {\n /**\n * Semantic color of the badge.\n * @defaultValue 'neutral'\n */\n tone?: BadgeTone;\n /**\n * Visual treatment.\n * - `soft` (default) — tinted background with darker tone-colored text. Modern, calm.\n * - `solid` — filled tone background, white text. Loud, used sparingly.\n * - `outline` — border in tone, transparent background, tone-colored text.\n * @defaultValue 'soft'\n */\n appearance?: BadgeAppearance;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n// Layout-only base; theme-driven dimensions are merged inside the\n// component so a custom theme reshapes the badge.\nconst BASE_CONTAINER_LAYOUT: ViewStyle = {\n alignSelf: 'flex-start',\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 2, // component-density literal — not from theme (no 2px spacing token)\n borderWidth: 1,\n borderColor: 'transparent',\n};\n\n/**\n * Compact pill for status, counts, or labels. Use sparingly — every badge\n * draws the eye, so a row of five is no longer a row of badges.\n *\n * Tone palettes flip with the active color scheme — light mode uses the\n * familiar pastel scale (Tailwind 50/200/800), dark mode uses the deep\n * 950/700/100 scale so a soft success badge reads as a calm tinted chip\n * on either surface, never as a glaring pastel on a dark page.\n */\nexport const Badge = ({ tone = 'neutral', appearance = 'soft', children, className, testID }: BadgeProps) => {\n const colors = useThemeColors();\n const isDark = useColorScheme() === 'dark';\n const invertedText = colors.semantic.text.inverted;\n\n let palette: {\n soft: { bg: string; fg: string };\n solid: { bg: string; fg: string };\n outline: { border: string; fg: string };\n };\n if (tone === 'neutral') {\n palette = {\n soft: isDark\n ? { bg: colors.color.neutral['800'], fg: colors.color.neutral['100'] }\n : { bg: colors.color.neutral['100'], fg: colors.color.neutral['700'] },\n solid: {\n bg: isDark ? colors.color.neutral['200'] : colors.color.neutral['700'],\n fg: isDark ? colors.color.neutral['900'] : invertedText,\n },\n outline: {\n border: isDark ? colors.color.neutral['600'] : colors.color.neutral['300'],\n fg: isDark ? colors.color.neutral['100'] : colors.color.neutral['700'],\n },\n };\n } else if (tone === 'primary') {\n palette = {\n soft: isDark\n ? { bg: colors.color.primary['900'], fg: colors.color.primary['200'] }\n : { bg: colors.color.primary['100'], fg: colors.color.primary['800'] },\n solid: {\n bg: isDark ? colors.color.primary['400'] : colors.color.primary['600'],\n fg: isDark ? colors.color.primary['900'] : invertedText,\n },\n outline: {\n border: isDark ? colors.color.primary['400'] : colors.color.primary['300'],\n fg: isDark ? colors.color.primary['200'] : colors.color.primary['700'],\n },\n };\n } else if (tone === 'success') {\n palette = {\n soft: isDark ? { bg: '#14532d', fg: '#bbf7d0' } : { bg: '#dcfce7', fg: '#166534' },\n solid: { bg: colors.color.success, fg: invertedText },\n outline: { border: colors.color.success, fg: isDark ? '#bbf7d0' : '#166534' },\n };\n } else if (tone === 'warning') {\n palette = {\n soft: isDark ? { bg: '#78350f', fg: '#fde68a' } : { bg: '#fef3c7', fg: '#92400e' },\n solid: { bg: colors.color.warning, fg: invertedText },\n outline: { border: colors.color.warning, fg: isDark ? '#fde68a' : '#92400e' },\n };\n } else {\n palette = {\n soft: isDark ? { bg: '#7f1d1d', fg: '#fecaca' } : { bg: '#fee2e2', fg: '#991b1b' },\n solid: { bg: colors.color.danger, fg: invertedText },\n outline: { border: colors.color.danger, fg: isDark ? '#fecaca' : '#991b1b' },\n };\n }\n\n const baseContainer: ViewStyle = {\n ...BASE_CONTAINER_LAYOUT,\n gap: px(colors.spacing['1']),\n paddingHorizontal: px(colors.spacing['2']),\n borderRadius: px(colors.radius.full),\n };\n const containerStyle: ViewStyle = (() => {\n if (appearance === 'solid') {\n return { ...baseContainer, backgroundColor: palette.solid.bg };\n }\n if (appearance === 'outline') {\n return { ...baseContainer, backgroundColor: 'transparent', borderColor: palette.outline.border };\n }\n return { ...baseContainer, backgroundColor: palette.soft.bg };\n })();\n const textColor = (() => {\n if (appearance === 'solid') {\n return palette.solid.fg;\n }\n if (appearance === 'outline') {\n return palette.outline.fg;\n }\n return palette.soft.fg;\n })();\n const baseText: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.xs),\n fontWeight: colors.fontWeight.medium as '500',\n lineHeight: px(colors.fontSize.xs) * Number(colors.lineHeight.normal),\n };\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n className={cn('inline-flex flex-row items-center gap-1 rounded-full px-2 py-0.5 border', className)}\n style={containerStyle}\n >\n <RNText style={{ ...baseText, color: textColor }}>{children}</RNText>\n </View>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Badge/Badge.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-DJ3XX3CV.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport type { TextStyle, ViewStyle } from 'react-native';\nimport { Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useColorScheme } from '../../theme/use-color-scheme';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type BadgeTone = 'neutral' | 'primary' | 'success' | 'warning' | 'danger';\nexport type BadgeAppearance = 'solid' | 'outline' | 'soft';\n\nexport type BadgeProps = {\n /**\n * Semantic color of the badge.\n * @defaultValue 'neutral'\n */\n tone?: BadgeTone;\n /**\n * Visual treatment.\n * - `soft` (default) — tinted background with darker tone-colored text. Modern, calm.\n * - `solid` — filled tone background, white text. Loud, used sparingly.\n * - `outline` — border in tone, transparent background, tone-colored text.\n * @defaultValue 'soft'\n */\n appearance?: BadgeAppearance;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n// Layout-only base; theme-driven dimensions are merged inside the\n// component so a custom theme reshapes the badge.\nconst BASE_CONTAINER_LAYOUT: ViewStyle = {\n alignSelf: 'flex-start',\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 2, // component-density literal — not from theme (no 2px spacing token)\n borderWidth: 1,\n borderColor: 'transparent',\n};\n\n/**\n * Compact pill for status, counts, or labels. Use sparingly — every badge\n * draws the eye, so a row of five is no longer a row of badges.\n *\n * Tone palettes flip with the active color scheme — light mode uses the\n * familiar pastel scale (Tailwind 50/200/800), dark mode uses the deep\n * 950/700/100 scale so a soft success badge reads as a calm tinted chip\n * on either surface, never as a glaring pastel on a dark page.\n */\nexport const Badge = ({ tone = 'neutral', appearance = 'soft', children, className, testID }: BadgeProps) => {\n const colors = useThemeColors();\n const isDark = useColorScheme() === 'dark';\n const invertedText = colors.semantic.text.inverted;\n\n let palette: {\n soft: { bg: string; fg: string };\n solid: { bg: string; fg: string };\n outline: { border: string; fg: string };\n };\n if (tone === 'neutral') {\n palette = {\n soft: isDark\n ? { bg: colors.color.neutral['800'], fg: colors.color.neutral['100'] }\n : { bg: colors.color.neutral['100'], fg: colors.color.neutral['700'] },\n solid: {\n bg: isDark ? colors.color.neutral['200'] : colors.color.neutral['700'],\n fg: isDark ? colors.color.neutral['900'] : invertedText,\n },\n outline: {\n border: isDark ? colors.color.neutral['600'] : colors.color.neutral['300'],\n fg: isDark ? colors.color.neutral['100'] : colors.color.neutral['700'],\n },\n };\n } else if (tone === 'primary') {\n palette = {\n soft: isDark\n ? { bg: colors.color.primary['900'], fg: colors.color.primary['200'] }\n : { bg: colors.color.primary['100'], fg: colors.color.primary['800'] },\n solid: {\n bg: isDark ? colors.color.primary['400'] : colors.color.primary['600'],\n fg: isDark ? colors.color.primary['900'] : invertedText,\n },\n outline: {\n border: isDark ? colors.color.primary['400'] : colors.color.primary['300'],\n fg: isDark ? colors.color.primary['200'] : colors.color.primary['700'],\n },\n };\n } else if (tone === 'success') {\n palette = {\n soft: isDark ? { bg: '#14532d', fg: '#bbf7d0' } : { bg: '#dcfce7', fg: '#166534' },\n solid: { bg: colors.color.success, fg: invertedText },\n outline: { border: colors.color.success, fg: isDark ? '#bbf7d0' : '#166534' },\n };\n } else if (tone === 'warning') {\n palette = {\n soft: isDark ? { bg: '#78350f', fg: '#fde68a' } : { bg: '#fef3c7', fg: '#92400e' },\n solid: { bg: colors.color.warning, fg: invertedText },\n outline: { border: colors.color.warning, fg: isDark ? '#fde68a' : '#92400e' },\n };\n } else {\n palette = {\n soft: isDark ? { bg: '#7f1d1d', fg: '#fecaca' } : { bg: '#fee2e2', fg: '#991b1b' },\n solid: { bg: colors.color.danger, fg: invertedText },\n outline: { border: colors.color.danger, fg: isDark ? '#fecaca' : '#991b1b' },\n };\n }\n\n const baseContainer: ViewStyle = {\n ...BASE_CONTAINER_LAYOUT,\n gap: px(colors.spacing['1']),\n paddingHorizontal: px(colors.spacing['2']),\n borderRadius: px(colors.radius.full),\n };\n const containerStyle: ViewStyle = (() => {\n if (appearance === 'solid') {\n return { ...baseContainer, backgroundColor: palette.solid.bg };\n }\n if (appearance === 'outline') {\n return { ...baseContainer, backgroundColor: 'transparent', borderColor: palette.outline.border };\n }\n return { ...baseContainer, backgroundColor: palette.soft.bg };\n })();\n const textColor = (() => {\n if (appearance === 'solid') {\n return palette.solid.fg;\n }\n if (appearance === 'outline') {\n return palette.outline.fg;\n }\n return palette.soft.fg;\n })();\n const baseText: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.xs),\n fontWeight: colors.fontWeight.medium as '500',\n lineHeight: px(colors.fontSize.xs) * Number(colors.lineHeight.normal),\n };\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n className={cn('inline-flex flex-row items-center gap-1 rounded-full px-2 py-0.5 border', className)}\n style={containerStyle}\n >\n <RNText style={{ ...baseText, color: textColor }}>{children}</RNText>\n </View>\n );\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { Select } from './chunk-PJTCO76H.js';
1
+ import { Select } from './chunk-3KK2TXVY.js';
2
2
  import { __name } from './chunk-WCQVDF3K.js';
3
3
  import { jsx } from 'nativewind/jsx-runtime';
4
4
 
@@ -7,5 +7,5 @@ var Combobox = /* @__PURE__ */ __name((props) => {
7
7
  }, "Combobox");
8
8
 
9
9
  export { Combobox };
10
- //# sourceMappingURL=chunk-IIVTPN62.js.map
11
- //# sourceMappingURL=chunk-IIVTPN62.js.map
10
+ //# sourceMappingURL=chunk-DVO556JH.js.map
11
+ //# sourceMappingURL=chunk-DVO556JH.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Combobox/Combobox.tsx"],"names":[],"mappings":";;;;AAcO,IAAM,QAAA,2BAAyB,KAAA,KAA0B;AAC5D,EAAA,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAO,UAAA,EAAU,IAAA,EAAE,GAAG,KAAA,EAAO,CAAA;AACzC,CAAA,EAFwB,UAAA","file":"chunk-IIVTPN62.js","sourcesContent":["'use client';\n\nimport { Select, type SelectProps } from '../Select';\n\n/**\n * Combobox — a Select with search defaulted on.\n *\n * Use Combobox for long lists or async options where users benefit from\n * typeahead filtering. Use Select directly for short static lists where\n * clicking is enough.\n *\n * Every prop, behavior, and type is identical to Select; this is purely a\n * default + naming convenience.\n */\nexport const Combobox = <T = unknown>(props: SelectProps<T>) => {\n return <Select searchable {...props} />;\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Combobox/Combobox.tsx"],"names":[],"mappings":";;;;AAcO,IAAM,QAAA,2BAAyB,KAAA,KAA0B;AAC5D,EAAA,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAO,UAAA,EAAU,IAAA,EAAE,GAAG,KAAA,EAAO,CAAA;AACzC,CAAA,EAFwB,UAAA","file":"chunk-DVO556JH.js","sourcesContent":["'use client';\n\nimport { Select, type SelectProps } from '../Select';\n\n/**\n * Combobox — a Select with search defaulted on.\n *\n * Use Combobox for long lists or async options where users benefit from\n * typeahead filtering. Use Select directly for short static lists where\n * clicking is enough.\n *\n * Every prop, behavior, and type is identical to Select; this is purely a\n * default + naming convenience.\n */\nexport const Combobox = <T = unknown>(props: SelectProps<T>) => {\n return <Select searchable {...props} />;\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { useThemeColors } from './chunk-R5JMDDCB.js';
1
+ import { useThemeColors } from './chunk-3W2O4OBL.js';
2
2
  import { cn } from './chunk-CHXHRJNZ.js';
3
3
  import { __name } from './chunk-WCQVDF3K.js';
4
4
  import { View } from 'react-native';
@@ -38,5 +38,5 @@ var Separator = /* @__PURE__ */ __name(({
38
38
  }, "Separator");
39
39
 
40
40
  export { Separator };
41
- //# sourceMappingURL=chunk-2XJCLPNH.js.map
42
- //# sourceMappingURL=chunk-2XJCLPNH.js.map
41
+ //# sourceMappingURL=chunk-EC5TKCWA.js.map
42
+ //# sourceMappingURL=chunk-EC5TKCWA.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Separator/Separator.tsx"],"names":[],"mappings":";;;;;;AA0BA,IAAM,eAAA,GAA6B,EAAE,MAAA,EAAQ,CAAA,EAAG,OAAO,MAAA,EAAO;AAqB9D,IAAM,aAAA,GAA2B;AAAA,EAC7B,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,SAAA,EAAW;AACf,CAAA;AAOO,IAAM,4BAAY,MAAA,CAAA,CAAC;AAAA,EACtB,WAAA,GAAc,YAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb,SAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAsB;AAClB,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,SAAA,GAAY,WAAA,KAAgB,YAAA,GAAe,eAAA,GAAkB,aAAA;AACnE,EAAA,MAAM,YAAqC,UAAA,GACrC,EAAE,MAAM,MAAA,EAAQ,iBAAA,EAAmB,QAAgB,GACnD;AAAA,IACI,IAAA,EAAM,WAAA;AAAA,IACN,iBAAA,EAAmB,MAAA;AAAA,IACnB,kBAAA,EAAoB;AAAA,GACxB;AACN,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACI,GAAG,IAAA;AAAA,MACH,GAAG,SAAA;AAAA,MACH,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,MAC1C,WAAW,EAAA,CAAG,WAAA,KAAgB,YAAA,GAAe,aAAA,GAAgB,4BAA4B,SAAS,CAAA;AAAA,MAClG,KAAA,EAAO,CAAC,SAAA,EAAW,EAAE,eAAA,EAAiB,OAAO,QAAA,CAAS,MAAA,CAAO,OAAA,EAAQ,EAAG,KAAK;AAAA;AAAA,GACjF;AAER,CAAA,EA1ByB,WAAA","file":"chunk-2XJCLPNH.js","sourcesContent":["'use client';\n\nimport type { ViewProps, ViewStyle } from 'react-native';\nimport { View } from 'react-native';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type SeparatorOrientation = 'horizontal' | 'vertical';\n\nexport type SeparatorProps = Omit<ViewProps, 'children'> & {\n /**\n * Visual orientation of the rule.\n * @defaultValue 'horizontal'\n */\n orientation?: SeparatorOrientation;\n /**\n * When true (the default), the separator is purely visual and removed\n * from the accessibility tree. Set to false when the rule is meaningful\n * structure that screen readers should announce.\n * @defaultValue true\n */\n decorative?: boolean;\n className?: string;\n testID?: string;\n};\n\nconst HORIZONTAL_BASE: ViewStyle = { height: 1, width: '100%' };\n// Vertical: a delicate inline rule that sits centered against\n// surrounding text. Two design decisions worth recording:\n//\n// 1. `alignSelf: 'center'` — NOT 'stretch'. Stretch made the rule\n// fill the parent's full row height, which exceeds the visible\n// text glyph height (line-height includes leading padding above\n// and below the glyphs) and made the separator look oversized\n// and asymmetric. Centering it picks up the same visual\n// alignment as the text glyphs.\n//\n// 2. `height: 16` — matches the body fontSize (1em of body text).\n// In an inline row of body-md text (fontSize 16, lineHeight 1.4\n// → 22.4px box), a 16px-tall rule sits perfectly across the\n// visible glyph zone. Slightly shorter than the full row height\n// gives the rule a refined, intentional look rather than a\n// brutal floor-to-ceiling line.\n//\n// Consumers who need a separator that fills a taller parent (e.g.\n// inside a Card with explicit height) can pass `style={{ height,\n// alignSelf: 'stretch' }}` to override.\nconst VERTICAL_BASE: ViewStyle = {\n width: 1,\n height: 16,\n alignSelf: 'center',\n};\n\n/**\n * Visual rule between groups of content. Mirrors Radix's Separator API:\n * `orientation` controls the axis, `decorative` controls whether the rule\n * is announced to screen readers.\n */\nexport const Separator = ({\n orientation = 'horizontal',\n decorative = true,\n className,\n style,\n testID,\n ...rest\n}: SeparatorProps) => {\n const colors = useThemeColors();\n const baseStyle = orientation === 'horizontal' ? HORIZONTAL_BASE : VERTICAL_BASE;\n const a11yProps: Record<string, unknown> = decorative\n ? { role: 'none', accessibilityRole: 'none' as const }\n : {\n role: 'separator',\n accessibilityRole: 'none' as const,\n 'aria-orientation': orientation,\n };\n return (\n <View\n {...rest}\n {...a11yProps}\n {...(testID !== undefined ? { testID } : {})}\n className={cn(orientation === 'horizontal' ? 'h-px w-full' : 'w-px h-full self-stretch', className)}\n style={[baseStyle, { backgroundColor: colors.semantic.border.default }, style]}\n />\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Separator/Separator.tsx"],"names":[],"mappings":";;;;;;AA0BA,IAAM,eAAA,GAA6B,EAAE,MAAA,EAAQ,CAAA,EAAG,OAAO,MAAA,EAAO;AAqB9D,IAAM,aAAA,GAA2B;AAAA,EAC7B,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,SAAA,EAAW;AACf,CAAA;AAOO,IAAM,4BAAY,MAAA,CAAA,CAAC;AAAA,EACtB,WAAA,GAAc,YAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb,SAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAsB;AAClB,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,SAAA,GAAY,WAAA,KAAgB,YAAA,GAAe,eAAA,GAAkB,aAAA;AACnE,EAAA,MAAM,YAAqC,UAAA,GACrC,EAAE,MAAM,MAAA,EAAQ,iBAAA,EAAmB,QAAgB,GACnD;AAAA,IACI,IAAA,EAAM,WAAA;AAAA,IACN,iBAAA,EAAmB,MAAA;AAAA,IACnB,kBAAA,EAAoB;AAAA,GACxB;AACN,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACI,GAAG,IAAA;AAAA,MACH,GAAG,SAAA;AAAA,MACH,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,MAC1C,WAAW,EAAA,CAAG,WAAA,KAAgB,YAAA,GAAe,aAAA,GAAgB,4BAA4B,SAAS,CAAA;AAAA,MAClG,KAAA,EAAO,CAAC,SAAA,EAAW,EAAE,eAAA,EAAiB,OAAO,QAAA,CAAS,MAAA,CAAO,OAAA,EAAQ,EAAG,KAAK;AAAA;AAAA,GACjF;AAER,CAAA,EA1ByB,WAAA","file":"chunk-EC5TKCWA.js","sourcesContent":["'use client';\n\nimport type { ViewProps, ViewStyle } from 'react-native';\nimport { View } from 'react-native';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type SeparatorOrientation = 'horizontal' | 'vertical';\n\nexport type SeparatorProps = Omit<ViewProps, 'children'> & {\n /**\n * Visual orientation of the rule.\n * @defaultValue 'horizontal'\n */\n orientation?: SeparatorOrientation;\n /**\n * When true (the default), the separator is purely visual and removed\n * from the accessibility tree. Set to false when the rule is meaningful\n * structure that screen readers should announce.\n * @defaultValue true\n */\n decorative?: boolean;\n className?: string;\n testID?: string;\n};\n\nconst HORIZONTAL_BASE: ViewStyle = { height: 1, width: '100%' };\n// Vertical: a delicate inline rule that sits centered against\n// surrounding text. Two design decisions worth recording:\n//\n// 1. `alignSelf: 'center'` — NOT 'stretch'. Stretch made the rule\n// fill the parent's full row height, which exceeds the visible\n// text glyph height (line-height includes leading padding above\n// and below the glyphs) and made the separator look oversized\n// and asymmetric. Centering it picks up the same visual\n// alignment as the text glyphs.\n//\n// 2. `height: 16` — matches the body fontSize (1em of body text).\n// In an inline row of body-md text (fontSize 16, lineHeight 1.4\n// → 22.4px box), a 16px-tall rule sits perfectly across the\n// visible glyph zone. Slightly shorter than the full row height\n// gives the rule a refined, intentional look rather than a\n// brutal floor-to-ceiling line.\n//\n// Consumers who need a separator that fills a taller parent (e.g.\n// inside a Card with explicit height) can pass `style={{ height,\n// alignSelf: 'stretch' }}` to override.\nconst VERTICAL_BASE: ViewStyle = {\n width: 1,\n height: 16,\n alignSelf: 'center',\n};\n\n/**\n * Visual rule between groups of content. Mirrors Radix's Separator API:\n * `orientation` controls the axis, `decorative` controls whether the rule\n * is announced to screen readers.\n */\nexport const Separator = ({\n orientation = 'horizontal',\n decorative = true,\n className,\n style,\n testID,\n ...rest\n}: SeparatorProps) => {\n const colors = useThemeColors();\n const baseStyle = orientation === 'horizontal' ? HORIZONTAL_BASE : VERTICAL_BASE;\n const a11yProps: Record<string, unknown> = decorative\n ? { role: 'none', accessibilityRole: 'none' as const }\n : {\n role: 'separator',\n accessibilityRole: 'none' as const,\n 'aria-orientation': orientation,\n };\n return (\n <View\n {...rest}\n {...a11yProps}\n {...(testID !== undefined ? { testID } : {})}\n className={cn(orientation === 'horizontal' ? 'h-px w-full' : 'w-px h-full self-stretch', className)}\n style={[baseStyle, { backgroundColor: colors.semantic.border.default }, style]}\n />\n );\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { Text } from './chunk-ZGFXKYA5.js';
1
+ import { Text } from './chunk-57AVXG7D.js';
2
2
  import { __name } from './chunk-WCQVDF3K.js';
3
3
  import { Children } from 'react';
4
4
  import { jsx } from 'nativewind/jsx-runtime';
@@ -14,5 +14,5 @@ function wrapStringChildren(children) {
14
14
  __name(wrapStringChildren, "wrapStringChildren");
15
15
 
16
16
  export { wrapStringChildren };
17
- //# sourceMappingURL=chunk-VLZANXRZ.js.map
18
- //# sourceMappingURL=chunk-VLZANXRZ.js.map
17
+ //# sourceMappingURL=chunk-EMU3GXKM.js.map
18
+ //# sourceMappingURL=chunk-EMU3GXKM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/wrap-string-children.tsx"],"names":[],"mappings":";;;;;AAyBO,SAAS,mBAAmB,QAAA,EAAgC;AAC/D,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,CAAC,KAAA,KAAU;AACrC,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AACxD,MAAA,uBAAO,GAAA,CAAC,QAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACxB;AACA,IAAA,OAAO,KAAA;AAAA,EACX,CAAC,CAAA;AACL;AAPgB,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA","file":"chunk-VLZANXRZ.js","sourcesContent":["import { Children, type ReactNode } from 'react';\nimport { Text } from '../components/Text';\n\n/**\n * Walks a `ReactNode` (single, array, or fragment) and wraps every\n * string/number child in a themed `<Text>` so the same JSX renders\n * cleanly on web AND native. Non-string children are passed through\n * unchanged.\n *\n * On native, raw strings as children of any non-Text component throw\n * \"Text strings must be rendered within a <Text> component\". On web,\n * react-native-web silently tolerates them — but the rendered string\n * inherits no theme color, so dark mode never flips.\n *\n * Both bugs collapse to the same fix: wrap. Layout primitives\n * (`<HStack>`, `<VStack>`, `<Box>`) use this so consumers can write\n * `<HStack>Hello</HStack>` and have it Just Work on both platforms\n * and across light/dark mode.\n *\n * The wrapper is the lib's own `<Text>`, which reads from\n * `useThemeColors()` — so the wrapped string flips with the active\n * scheme. Importing a `'use client'` component from an RSC-safe file\n * is allowed; React's RSC model lets server components contain client\n * children.\n */\nexport function wrapStringChildren(children: ReactNode): ReactNode {\n return Children.map(children, (child) => {\n if (typeof child === 'string' || typeof child === 'number') {\n return <Text>{child}</Text>;\n }\n return child;\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/wrap-string-children.tsx"],"names":[],"mappings":";;;;;AAyBO,SAAS,mBAAmB,QAAA,EAAgC;AAC/D,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,CAAC,KAAA,KAAU;AACrC,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AACxD,MAAA,uBAAO,GAAA,CAAC,QAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACxB;AACA,IAAA,OAAO,KAAA;AAAA,EACX,CAAC,CAAA;AACL;AAPgB,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA","file":"chunk-EMU3GXKM.js","sourcesContent":["import { Children, type ReactNode } from 'react';\nimport { Text } from '../components/Text';\n\n/**\n * Walks a `ReactNode` (single, array, or fragment) and wraps every\n * string/number child in a themed `<Text>` so the same JSX renders\n * cleanly on web AND native. Non-string children are passed through\n * unchanged.\n *\n * On native, raw strings as children of any non-Text component throw\n * \"Text strings must be rendered within a <Text> component\". On web,\n * react-native-web silently tolerates them — but the rendered string\n * inherits no theme color, so dark mode never flips.\n *\n * Both bugs collapse to the same fix: wrap. Layout primitives\n * (`<HStack>`, `<VStack>`, `<Box>`) use this so consumers can write\n * `<HStack>Hello</HStack>` and have it Just Work on both platforms\n * and across light/dark mode.\n *\n * The wrapper is the lib's own `<Text>`, which reads from\n * `useThemeColors()` — so the wrapped string flips with the active\n * scheme. Importing a `'use client'` component from an RSC-safe file\n * is allowed; React's RSC model lets server components contain client\n * children.\n */\nexport function wrapStringChildren(children: ReactNode): ReactNode {\n return Children.map(children, (child) => {\n if (typeof child === 'string' || typeof child === 'number') {\n return <Text>{child}</Text>;\n }\n return child;\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 { useState, useCallback } from 'react';
@@ -174,5 +174,5 @@ var SegmentedControl = /* @__PURE__ */ __name(({
174
174
  }, "SegmentedControl");
175
175
 
176
176
  export { SegmentedControl };
177
- //# sourceMappingURL=chunk-F5UKI7XD.js.map
178
- //# sourceMappingURL=chunk-F5UKI7XD.js.map
177
+ //# sourceMappingURL=chunk-ENPBMEUW.js.map
178
+ //# sourceMappingURL=chunk-ENPBMEUW.js.map