@nori-ui/core 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/dist/Table.shared-BymRgTnY.d.cts +54 -0
  2. package/dist/Table.shared-BymRgTnY.d.ts +54 -0
  3. package/dist/{chunk-7UKRN73P.js → chunk-2XJCLPNH.js} +3 -3
  4. package/dist/{chunk-7UKRN73P.js.map → chunk-2XJCLPNH.js.map} +1 -1
  5. package/dist/{chunk-76FZF4GM.js → chunk-3B345SQU.js} +8 -125
  6. package/dist/chunk-3B345SQU.js.map +1 -0
  7. package/dist/{chunk-WOF67PKT.js → chunk-3CEJ5TB4.js} +3 -3
  8. package/dist/{chunk-WOF67PKT.js.map → chunk-3CEJ5TB4.js.map} +1 -1
  9. package/dist/{chunk-JSAG5YO7.js → chunk-3IIIHZHT.js} +3 -3
  10. package/dist/{chunk-JSAG5YO7.js.map → chunk-3IIIHZHT.js.map} +1 -1
  11. package/dist/{chunk-46OT4PA6.js → chunk-3W3XYULK.js} +3 -3
  12. package/dist/{chunk-46OT4PA6.js.map → chunk-3W3XYULK.js.map} +1 -1
  13. package/dist/{chunk-6PO2IWB3.js → chunk-4UFAZLSZ.js} +5 -3
  14. package/dist/chunk-4UFAZLSZ.js.map +1 -0
  15. package/dist/chunk-5YHT252H.js +145 -0
  16. package/dist/chunk-5YHT252H.js.map +1 -0
  17. package/dist/chunk-73CUV7MW.js +125 -0
  18. package/dist/chunk-73CUV7MW.js.map +1 -0
  19. package/dist/{chunk-ZMSIYLSI.js → chunk-7FSFJA33.js} +3 -3
  20. package/dist/{chunk-ZMSIYLSI.js.map → chunk-7FSFJA33.js.map} +1 -1
  21. package/dist/chunk-C32XGHWO.js +202 -0
  22. package/dist/chunk-C32XGHWO.js.map +1 -0
  23. package/dist/{chunk-UUXWRDWW.js → chunk-C5HQPXRI.js} +3 -3
  24. package/dist/{chunk-UUXWRDWW.js.map → chunk-C5HQPXRI.js.map} +1 -1
  25. package/dist/{chunk-2UXKXUX2.js → chunk-CPIKN4BX.js} +3 -3
  26. package/dist/{chunk-2UXKXUX2.js.map → chunk-CPIKN4BX.js.map} +1 -1
  27. package/dist/{chunk-GELLSU64.js → chunk-EN4CLDGZ.js} +3 -3
  28. package/dist/{chunk-GELLSU64.js.map → chunk-EN4CLDGZ.js.map} +1 -1
  29. package/dist/{chunk-WAKKQROH.js → chunk-F5UKI7XD.js} +3 -3
  30. package/dist/{chunk-WAKKQROH.js.map → chunk-F5UKI7XD.js.map} +1 -1
  31. package/dist/{chunk-MJ4AGXS7.js → chunk-GJMHNEQ3.js} +3 -3
  32. package/dist/{chunk-MJ4AGXS7.js.map → chunk-GJMHNEQ3.js.map} +1 -1
  33. package/dist/chunk-GTAXVTLF.js +43 -0
  34. package/dist/chunk-GTAXVTLF.js.map +1 -0
  35. package/dist/{chunk-WTNDPO2V.js → chunk-H2LHWJ52.js} +3 -3
  36. package/dist/{chunk-WTNDPO2V.js.map → chunk-H2LHWJ52.js.map} +1 -1
  37. package/dist/{chunk-L5X4SYJ4.js → chunk-HXCETKCC.js} +3 -3
  38. package/dist/{chunk-L5X4SYJ4.js.map → chunk-HXCETKCC.js.map} +1 -1
  39. package/dist/chunk-IGBXSBF7.js +71 -0
  40. package/dist/chunk-IGBXSBF7.js.map +1 -0
  41. package/dist/{chunk-O4NMS3KB.js → chunk-IIVTPN62.js} +3 -3
  42. package/dist/{chunk-O4NMS3KB.js.map → chunk-IIVTPN62.js.map} +1 -1
  43. package/dist/{chunk-RM5TSXVE.js → chunk-ISCJST4P.js} +3 -3
  44. package/dist/{chunk-RM5TSXVE.js.map → chunk-ISCJST4P.js.map} +1 -1
  45. package/dist/{chunk-UF5OENHV.js → chunk-IWM2XDXH.js} +3 -3
  46. package/dist/{chunk-UF5OENHV.js.map → chunk-IWM2XDXH.js.map} +1 -1
  47. package/dist/chunk-J5LK2XHE.js +118 -0
  48. package/dist/chunk-J5LK2XHE.js.map +1 -0
  49. package/dist/chunk-KFFGDET3.js +27 -0
  50. package/dist/chunk-KFFGDET3.js.map +1 -0
  51. package/dist/{chunk-AFQIK6JI.js → chunk-L6VYDM7S.js} +3 -3
  52. package/dist/{chunk-AFQIK6JI.js.map → chunk-L6VYDM7S.js.map} +1 -1
  53. package/dist/chunk-M4BI63P6.js +188 -0
  54. package/dist/chunk-M4BI63P6.js.map +1 -0
  55. package/dist/{chunk-H7MFAFV4.js → chunk-MK57AOTI.js} +4 -4
  56. package/dist/{chunk-H7MFAFV4.js.map → chunk-MK57AOTI.js.map} +1 -1
  57. package/dist/{chunk-FDBQOQMW.js → chunk-MOAIQHR7.js} +3 -3
  58. package/dist/{chunk-FDBQOQMW.js.map → chunk-MOAIQHR7.js.map} +1 -1
  59. package/dist/{chunk-LWQZ257T.js → chunk-MYBBBLYE.js} +3 -3
  60. package/dist/{chunk-LWQZ257T.js.map → chunk-MYBBBLYE.js.map} +1 -1
  61. package/dist/{chunk-F7G6R373.js → chunk-O6M3F7BZ.js} +5 -5
  62. package/dist/{chunk-F7G6R373.js.map → chunk-O6M3F7BZ.js.map} +1 -1
  63. package/dist/{chunk-XP55RZ3D.js → chunk-OELY6K44.js} +3 -3
  64. package/dist/{chunk-XP55RZ3D.js.map → chunk-OELY6K44.js.map} +1 -1
  65. package/dist/{chunk-GRDVE3IR.js → chunk-OIHX5B4R.js} +3 -3
  66. package/dist/{chunk-GRDVE3IR.js.map → chunk-OIHX5B4R.js.map} +1 -1
  67. package/dist/{chunk-4I37QSEM.js → chunk-PGYEIXCO.js} +5 -5
  68. package/dist/{chunk-4I37QSEM.js.map → chunk-PGYEIXCO.js.map} +1 -1
  69. package/dist/{chunk-UJ5KFRDE.js → chunk-PJTCO76H.js} +3 -3
  70. package/dist/{chunk-UJ5KFRDE.js.map → chunk-PJTCO76H.js.map} +1 -1
  71. package/dist/{chunk-6JVUVBZH.js → chunk-PJXVLE24.js} +5 -5
  72. package/dist/{chunk-6JVUVBZH.js.map → chunk-PJXVLE24.js.map} +1 -1
  73. package/dist/{chunk-IGLMPAWE.js → chunk-PLQPBMG2.js} +3 -3
  74. package/dist/{chunk-IGLMPAWE.js.map → chunk-PLQPBMG2.js.map} +1 -1
  75. package/dist/{chunk-HTF6FDB6.js → chunk-PQW5LKAI.js} +3 -3
  76. package/dist/{chunk-HTF6FDB6.js.map → chunk-PQW5LKAI.js.map} +1 -1
  77. package/dist/{chunk-VMAGFYHG.js → chunk-RI4Y2C5U.js} +3 -3
  78. package/dist/{chunk-VMAGFYHG.js.map → chunk-RI4Y2C5U.js.map} +1 -1
  79. package/dist/{chunk-BNDUQNG7.js → chunk-SF6WPUC5.js} +3 -3
  80. package/dist/{chunk-BNDUQNG7.js.map → chunk-SF6WPUC5.js.map} +1 -1
  81. package/dist/{chunk-SINLREQV.js → chunk-STX5UKYT.js} +3 -3
  82. package/dist/{chunk-SINLREQV.js.map → chunk-STX5UKYT.js.map} +1 -1
  83. package/dist/{chunk-KCLWPSV5.js → chunk-TSWPHJIU.js} +4 -4
  84. package/dist/{chunk-KCLWPSV5.js.map → chunk-TSWPHJIU.js.map} +1 -1
  85. package/dist/{chunk-5BM6H2CD.js → chunk-U2ZKY2CP.js} +3 -3
  86. package/dist/{chunk-5BM6H2CD.js.map → chunk-U2ZKY2CP.js.map} +1 -1
  87. package/dist/{chunk-C6TRLHMW.js → chunk-UKDDK42K.js} +3 -3
  88. package/dist/{chunk-C6TRLHMW.js.map → chunk-UKDDK42K.js.map} +1 -1
  89. package/dist/{chunk-UPVNZPFV.js → chunk-USFXANEU.js} +3 -3
  90. package/dist/{chunk-UPVNZPFV.js.map → chunk-USFXANEU.js.map} +1 -1
  91. package/dist/{chunk-Y4ZRSW35.js → chunk-V5QSMDZL.js} +3 -3
  92. package/dist/{chunk-Y4ZRSW35.js.map → chunk-V5QSMDZL.js.map} +1 -1
  93. package/dist/{chunk-EFK7726V.js → chunk-V75O7QQO.js} +3 -3
  94. package/dist/{chunk-EFK7726V.js.map → chunk-V75O7QQO.js.map} +1 -1
  95. package/dist/{chunk-CGQIVFCN.js → chunk-VL2WNGPF.js} +3 -3
  96. package/dist/{chunk-CGQIVFCN.js.map → chunk-VL2WNGPF.js.map} +1 -1
  97. package/dist/{chunk-VCJF75T2.js → chunk-VLZANXRZ.js} +3 -3
  98. package/dist/{chunk-VCJF75T2.js.map → chunk-VLZANXRZ.js.map} +1 -1
  99. package/dist/{chunk-ND7MRYW7.js → chunk-VOF3S5I4.js} +4 -4
  100. package/dist/{chunk-ND7MRYW7.js.map → chunk-VOF3S5I4.js.map} +1 -1
  101. package/dist/chunk-VP7DRJUZ.js +3 -0
  102. package/dist/chunk-VP7DRJUZ.js.map +1 -0
  103. package/dist/chunk-XQNVWHMN.js +60 -0
  104. package/dist/chunk-XQNVWHMN.js.map +1 -0
  105. package/dist/{chunk-W3HMOOON.js → chunk-ZGFXKYA5.js} +3 -3
  106. package/dist/{chunk-W3HMOOON.js.map → chunk-ZGFXKYA5.js.map} +1 -1
  107. package/dist/client.cjs +935 -156
  108. package/dist/client.cjs.map +1 -1
  109. package/dist/client.d.cts +9 -0
  110. package/dist/client.d.ts +9 -0
  111. package/dist/client.js +57 -47
  112. package/dist/client.js.map +1 -1
  113. package/dist/components/Accordion/index.js +2 -2
  114. package/dist/components/Alert/index.js +2 -2
  115. package/dist/components/AlertDialog/index.js +2 -2
  116. package/dist/components/AspectRatio/index.cjs +67 -0
  117. package/dist/components/AspectRatio/index.cjs.map +1 -0
  118. package/dist/components/AspectRatio/index.d.cts +30 -0
  119. package/dist/components/AspectRatio/index.d.ts +30 -0
  120. package/dist/components/AspectRatio/index.js +5 -0
  121. package/dist/components/AspectRatio/index.js.map +1 -0
  122. package/dist/components/Avatar/index.js +2 -2
  123. package/dist/components/Badge/index.js +2 -2
  124. package/dist/components/Box/index.js +4 -4
  125. package/dist/components/Breadcrumb/index.cjs +3 -1
  126. package/dist/components/Breadcrumb/index.cjs.map +1 -1
  127. package/dist/components/Breadcrumb/index.js +5 -5
  128. package/dist/components/Button/index.js +2 -2
  129. package/dist/components/ButtonGroup/index.cjs +83 -0
  130. package/dist/components/ButtonGroup/index.cjs.map +1 -0
  131. package/dist/components/ButtonGroup/index.d.cts +45 -0
  132. package/dist/components/ButtonGroup/index.d.ts +45 -0
  133. package/dist/components/ButtonGroup/index.js +5 -0
  134. package/dist/components/ButtonGroup/index.js.map +1 -0
  135. package/dist/components/Calendar/index.cjs +3 -1
  136. package/dist/components/Calendar/index.cjs.map +1 -1
  137. package/dist/components/Calendar/index.js +5 -5
  138. package/dist/components/Card/index.js +2 -2
  139. package/dist/components/Checkbox/index.js +2 -2
  140. package/dist/components/Collapsible/index.cjs +512 -0
  141. package/dist/components/Collapsible/index.cjs.map +1 -0
  142. package/dist/components/Collapsible/index.d.cts +50 -0
  143. package/dist/components/Collapsible/index.d.ts +50 -0
  144. package/dist/components/Collapsible/index.js +7 -0
  145. package/dist/components/Collapsible/index.js.map +1 -0
  146. package/dist/components/Combobox/index.js +3 -3
  147. package/dist/components/ContextMenu/index.js +4 -4
  148. package/dist/components/DataTable/index.cjs +770 -0
  149. package/dist/components/DataTable/index.cjs.map +1 -0
  150. package/dist/components/DataTable/index.d.cts +53 -0
  151. package/dist/components/DataTable/index.d.ts +53 -0
  152. package/dist/components/DataTable/index.js +8 -0
  153. package/dist/components/DataTable/index.js.map +1 -0
  154. package/dist/components/DatePicker/index.cjs +3 -1
  155. package/dist/components/DatePicker/index.cjs.map +1 -1
  156. package/dist/components/DatePicker/index.js +7 -7
  157. package/dist/components/Dialog/index.js +2 -2
  158. package/dist/components/DropdownMenu/index.js +3 -3
  159. package/dist/components/Empty/index.cjs +385 -0
  160. package/dist/components/Empty/index.cjs.map +1 -0
  161. package/dist/components/Empty/index.d.cts +32 -0
  162. package/dist/components/Empty/index.d.ts +32 -0
  163. package/dist/components/Empty/index.js +7 -0
  164. package/dist/components/Empty/index.js.map +1 -0
  165. package/dist/components/Field/index.cjs +3 -1
  166. package/dist/components/Field/index.cjs.map +1 -1
  167. package/dist/components/Field/index.d.cts +2 -2
  168. package/dist/components/Field/index.d.ts +2 -2
  169. package/dist/components/Field/index.js +3 -3
  170. package/dist/components/FloatButton/index.cjs +3 -1
  171. package/dist/components/FloatButton/index.cjs.map +1 -1
  172. package/dist/components/FloatButton/index.js +5 -5
  173. package/dist/components/HStack/index.js +4 -4
  174. package/dist/components/InputGroup/index.js +2 -2
  175. package/dist/components/Item/index.cjs +443 -0
  176. package/dist/components/Item/index.cjs.map +1 -0
  177. package/dist/components/Item/index.d.cts +40 -0
  178. package/dist/components/Item/index.d.ts +40 -0
  179. package/dist/components/Item/index.js +7 -0
  180. package/dist/components/Item/index.js.map +1 -0
  181. package/dist/components/Kbd/index.cjs +396 -0
  182. package/dist/components/Kbd/index.cjs.map +1 -0
  183. package/dist/components/Kbd/index.d.cts +22 -0
  184. package/dist/components/Kbd/index.d.ts +22 -0
  185. package/dist/components/Kbd/index.js +7 -0
  186. package/dist/components/Kbd/index.js.map +1 -0
  187. package/dist/components/Label/index.cjs +3 -1
  188. package/dist/components/Label/index.cjs.map +1 -1
  189. package/dist/components/Label/index.js +3 -3
  190. package/dist/components/Pagination/index.cjs +3 -1
  191. package/dist/components/Pagination/index.cjs.map +1 -1
  192. package/dist/components/Pagination/index.js +6 -5
  193. package/dist/components/Popover/index.js +2 -2
  194. package/dist/components/Progress/index.js +2 -2
  195. package/dist/components/Radio/index.js +2 -2
  196. package/dist/components/SegmentedControl/index.js +2 -2
  197. package/dist/components/Select/index.js +2 -2
  198. package/dist/components/Separator/index.js +2 -2
  199. package/dist/components/Sheet/index.js +2 -2
  200. package/dist/components/Skeleton/index.js +2 -2
  201. package/dist/components/Slider/index.js +2 -2
  202. package/dist/components/Switch/index.js +2 -2
  203. package/dist/components/Table/index.cjs +461 -0
  204. package/dist/components/Table/index.cjs.map +1 -0
  205. package/dist/components/Table/index.d.cts +16 -0
  206. package/dist/components/Table/index.d.ts +16 -0
  207. package/dist/components/Table/index.js +7 -0
  208. package/dist/components/Table/index.js.map +1 -0
  209. package/dist/components/Tabs/index.js +2 -2
  210. package/dist/components/Text/index.js +2 -2
  211. package/dist/components/TextArea/index.js +3 -3
  212. package/dist/components/TextInput/index.js +2 -2
  213. package/dist/components/Toggle/index.js +2 -2
  214. package/dist/components/Tooltip/index.js +2 -2
  215. package/dist/components/VStack/index.js +4 -4
  216. package/dist/i18n/index.cjs +3 -1
  217. package/dist/i18n/index.cjs.map +1 -1
  218. package/dist/i18n/index.js +1 -1
  219. package/dist/index.cjs +935 -156
  220. package/dist/index.cjs.map +1 -1
  221. package/dist/index.d.cts +9 -0
  222. package/dist/index.d.ts +9 -0
  223. package/dist/index.js +54 -44
  224. package/dist/slot/index.d.cts +2 -2
  225. package/dist/slot/index.d.ts +2 -2
  226. package/package.json +1 -1
  227. package/dist/chunk-6PO2IWB3.js.map +0 -1
  228. package/dist/chunk-76FZF4GM.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Card/Card.tsx"],"names":["RNText"],"mappings":";;;;;;;AAWA,IAAM,mBAAA,GAAiC;AAAA,EACnC,WAAA,EAAa,CAAA;AAAA,EACb,QAAA,EAAU;AACd,CAAA;AAEA,IAAM,kBAAA,GAAgC;AAAA,EAClC,aAAA,EAAe;AACnB,CAAA;AACA,IAAM,sBAAiC,EAAC;AACxC,IAAM,kBAAA,GAAgC;AAAA,EAClC,aAAA,EAAe,KAAA;AAAA,EACf,UAAA,EAAY,QAAA;AAAA,EACZ,cAAA,EAAgB;AACpB,CAAA;AAaA,IAAM,QAAA,2BAAY,EAAE,QAAA,EAAU,WAAW,KAAA,EAAO,GAAG,MAAK,KAAiB;AACrE,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACI,GAAG,IAAA;AAAA,MACJ,SAAA,EAAW,EAAA;AAAA,QACP,kFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,KAAA,EAAO;AAAA,QACH,mBAAA;AAAA,QACA;AAAA,UACI,YAAA,EAAc,EAAA,CAAG,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,UACjC,eAAA,EAAiB,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,QAAA;AAAA,UAC5C,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO;AAAA,SACxC;AAAA,QACA;AAAA,OACJ;AAAA,MAEC;AAAA;AAAA,GACL;AAER,CAAA,EAtBiB,UAAA,CAAA;AA8BV,IAAM,UAAA,2BAAc,EAAE,QAAA,EAAU,WAAW,KAAA,EAAO,GAAG,MAAK,KAAwB;AACrF,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,WAAA,GAAyB;AAAA,IAC3B,GAAG,kBAAA;AAAA,IACH,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACzC,UAAA,EAAY,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IAClC,aAAA,EAAe,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACrC,GAAA,EAAK,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC;AAAA,GAC/B;AACA,EAAA,uBACI,GAAA,CAAC,IAAA,EAAA,EAAM,GAAG,IAAA,EAAM,WAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA,EAAG,KAAA,EAAO,CAAC,WAAA,EAAa,KAAK,GAChG,QAAA,EACL,CAAA;AAER,CAAA,EAd0B,YAAA,CAAA;AAiBnB,IAAM,WAAA,2BAAe,EAAE,QAAA,EAAU,WAAW,KAAA,EAAO,GAAG,MAAK,KAAwB;AACtF,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,YAAA,GAA0B;AAAA,IAC5B,GAAG,mBAAA;AAAA,IACH,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACzC,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC;AAAA,GAC3C;AAMA,EAAA,MAAM,OAAA,GACF,OAAO,QAAA,KAAa,QAAA,mBAChB,GAAA;AAAA,IAACA,IAAA;AAAA,IAAA;AAAA,MACG,KAAA,EAAO;AAAA,QACH,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,QAC5B,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,QAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,QAC/B,UAAA,EAAY,GAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,MAAM;AAAA,OACxE;AAAA,MAEC;AAAA;AAAA,GACL,GAEA,QAAA;AAER,EAAA,uBACI,GAAA,CAAC,IAAA,EAAA,EAAM,GAAG,IAAA,EAAM,WAAW,EAAA,CAAG,WAAA,EAAa,SAAS,CAAA,EAAG,KAAA,EAAO,CAAC,YAAA,EAAc,KAAK,GAC7E,QAAA,EAAA,OAAA,EACL,CAAA;AAER,CAAA,EAhC2B,aAAA,CAAA;AAmCpB,IAAM,UAAA,2BAAc,EAAE,QAAA,EAAU,WAAW,KAAA,EAAO,GAAG,MAAK,KAAwB;AACrF,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,WAAA,GAAyB;AAAA,IAC3B,GAAG,kBAAA;AAAA,IACH,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACzC,UAAA,EAAY,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IAClC,aAAA,EAAe,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACrC,GAAA,EAAK,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC;AAAA,GAC/B;AACA,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACI,GAAG,IAAA;AAAA,MACJ,SAAA,EAAW,EAAA;AAAA,QACP,oFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,KAAA,EAAO,CAAC,WAAA,EAAa,EAAE,cAAA,EAAgB,OAAO,QAAA,CAAS,MAAA,CAAO,OAAA,EAAQ,EAAG,KAAK,CAAA;AAAA,MAE7E;AAAA;AAAA,GACL;AAER,CAAA,EArB0B,YAAA,CAAA;AA8BnB,IAAM,4BAAY,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,QAAO,KAAqB;AACzE,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,uBACI,GAAA;AAAA,IAACA,IAAA;AAAA,IAAA;AAAA,MACI,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,MAC1C,iBAAA,EAAkB,QAAA;AAAA,MAClB,IAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAY,CAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,kDAAA,EAAoD,SAAS,CAAA;AAAA,MAC3E,KAAA,EAAO;AAAA,QACH,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,QAC5B,UAAA,EAAY,OAAO,UAAA,CAAW,OAAA;AAAA,QAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,QAC/B,UAAA,EAAY,OAAO,UAAA,CAAW;AAAA,OAClC;AAAA,MAEC;AAAA;AAAA,GACL;AAER,CAAA,EAnByB,WAAA,CAAA;AAsBlB,IAAM,kCAAkB,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,QAAO,KAAqB;AAC/E,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,uBACI,GAAA;AAAA,IAACA,IAAA;AAAA,IAAA;AAAA,MACI,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,MAC1C,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC3D,KAAA,EAAO;AAAA,QACH,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,QAC5B,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,QAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE;AAAA,OACnC;AAAA,MAEC;AAAA;AAAA,GACL;AAER,CAAA,EAf+B,iBAAA,CAAA;AAuBxB,IAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU;AAAA,EACxC,MAAA,EAAQ,UAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,WAAA,EAAa,eAAA;AAAA,EACb,OAAA,EAAS,WAAA;AAAA,EACT,MAAA,EAAQ;AACZ,CAAC","file":"chunk-HTF6FDB6.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport type { ViewProps, ViewStyle } from 'react-native';\nimport { Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\n// Layout-only bases; theme-driven dimensions are merged inside each\n// component below so a custom theme reshapes the card.\nconst SURFACE_LAYOUT_BASE: ViewStyle = {\n borderWidth: 1,\n overflow: 'hidden',\n};\n\nconst HEADER_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'column',\n};\nconst CONTENT_LAYOUT_BASE: ViewStyle = {};\nconst FOOTER_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n borderTopWidth: 1,\n};\n\nexport type CardProps = Omit<ViewProps, 'children'> & {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Container surface for grouping related content. Pair with `Card.Header`,\n * `Card.Title`, `Card.Description`, `Card.Content`, and `Card.Footer` for\n * the conventional layout, or use any children directly.\n */\nconst CardRoot = ({ children, className, style, ...rest }: CardProps) => {\n const colors = useThemeColors();\n return (\n <View\n {...rest}\n className={cn(\n 'rounded-xl border border-semantic-border-default bg-semantic-background-elevated',\n className\n )}\n style={[\n SURFACE_LAYOUT_BASE,\n {\n borderRadius: px(colors.radius.xl),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: colors.semantic.border.default,\n },\n style,\n ]}\n >\n {children}\n </View>\n );\n};\n\nexport type CardSectionProps = Omit<ViewProps, 'children'> & {\n children?: ReactNode;\n className?: string;\n};\n\n/** Header section — sits flush with the card top with comfortable padding. */\nexport const CardHeader = ({ children, className, style, ...rest }: CardSectionProps) => {\n const colors = useThemeColors();\n const headerStyle: ViewStyle = {\n ...HEADER_LAYOUT_BASE,\n paddingHorizontal: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['5']),\n paddingBottom: px(colors.spacing['3']),\n gap: px(colors.spacing['1']),\n };\n return (\n <View {...rest} className={cn('flex-col gap-1 px-6 pt-5 pb-3', className)} style={[headerStyle, style]}>\n {children}\n </View>\n );\n};\n\n/** Body content — for arbitrary content between header and footer. */\nexport const CardContent = ({ children, className, style, ...rest }: CardSectionProps) => {\n const colors = useThemeColors();\n const contentStyle: ViewStyle = {\n ...CONTENT_LAYOUT_BASE,\n paddingHorizontal: px(colors.spacing['6']),\n paddingVertical: px(colors.spacing['4']),\n };\n // Auto-wrap raw string children in <Text>. RN refuses to render a\n // bare string inside a View in dev, and on rn-web it silently slips\n // through using whatever ambient color the surface has — which is\n // wrong in dark mode. Wrapping here matches the pattern other Card\n // subcomponents already follow.\n const wrapped =\n typeof children === 'string' ? (\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n lineHeight: px(colors.fontSize.md) * Number(colors.lineHeight.normal),\n }}\n >\n {children}\n </RNText>\n ) : (\n children\n );\n return (\n <View {...rest} className={cn('px-6 py-4', className)} style={[contentStyle, style]}>\n {wrapped}\n </View>\n );\n};\n\n/** Footer with a top border and a row of actions (typically Buttons). */\nexport const CardFooter = ({ children, className, style, ...rest }: CardSectionProps) => {\n const colors = useThemeColors();\n const footerStyle: ViewStyle = {\n ...FOOTER_LAYOUT_BASE,\n paddingHorizontal: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['3']),\n paddingBottom: px(colors.spacing['5']),\n gap: px(colors.spacing['2']),\n };\n return (\n <View\n {...rest}\n className={cn(\n 'flex-row items-center gap-2 px-6 pt-3 pb-5 border-t border-semantic-border-default',\n className\n )}\n style={[footerStyle, { borderTopColor: colors.semantic.border.default }, style]}\n >\n {children}\n </View>\n );\n};\n\nexport type CardTextProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/** Card title — heading-weight text. Renders as a heading on web. */\nexport const CardTitle = ({ children, className, testID }: CardTextProps) => {\n const colors = useThemeColors();\n return (\n <RNText\n {...(testID !== undefined ? { testID } : {})}\n accessibilityRole=\"header\"\n role=\"heading\"\n aria-level={3}\n className={cn('text-lg font-semibold text-semantic-text-default', className)}\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.display,\n fontSize: px(colors.fontSize.lg),\n fontWeight: colors.fontWeight.semibold as '600',\n }}\n >\n {children}\n </RNText>\n );\n};\n\n/** Muted subtitle that pairs with Card.Title. */\nexport const CardDescription = ({ children, className, testID }: CardTextProps) => {\n const colors = useThemeColors();\n return (\n <RNText\n {...(testID !== undefined ? { testID } : {})}\n className={cn('text-sm text-semantic-text-muted', className)}\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {children}\n </RNText>\n );\n};\n\n/**\n * Public `Card` value — the root function plus its `.Header`, `.Title`,\n * `.Description`, `.Content`, and `.Footer` static members. `Object.assign`\n * produces a value whose inferred type carries the static properties, so\n * `.d.ts` consumers can write `<Card.Header>` without a separate import.\n */\nexport const Card = Object.assign(CardRoot, {\n Header: CardHeader,\n Title: CardTitle,\n Description: CardDescription,\n Content: CardContent,\n Footer: CardFooter,\n});\n"]}
1
+ {"version":3,"sources":["../src/components/Card/Card.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-PQW5LKAI.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport type { ViewProps, ViewStyle } from 'react-native';\nimport { Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\n// Layout-only bases; theme-driven dimensions are merged inside each\n// component below so a custom theme reshapes the card.\nconst SURFACE_LAYOUT_BASE: ViewStyle = {\n borderWidth: 1,\n overflow: 'hidden',\n};\n\nconst HEADER_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'column',\n};\nconst CONTENT_LAYOUT_BASE: ViewStyle = {};\nconst FOOTER_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n borderTopWidth: 1,\n};\n\nexport type CardProps = Omit<ViewProps, 'children'> & {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Container surface for grouping related content. Pair with `Card.Header`,\n * `Card.Title`, `Card.Description`, `Card.Content`, and `Card.Footer` for\n * the conventional layout, or use any children directly.\n */\nconst CardRoot = ({ children, className, style, ...rest }: CardProps) => {\n const colors = useThemeColors();\n return (\n <View\n {...rest}\n className={cn(\n 'rounded-xl border border-semantic-border-default bg-semantic-background-elevated',\n className\n )}\n style={[\n SURFACE_LAYOUT_BASE,\n {\n borderRadius: px(colors.radius.xl),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: colors.semantic.border.default,\n },\n style,\n ]}\n >\n {children}\n </View>\n );\n};\n\nexport type CardSectionProps = Omit<ViewProps, 'children'> & {\n children?: ReactNode;\n className?: string;\n};\n\n/** Header section — sits flush with the card top with comfortable padding. */\nexport const CardHeader = ({ children, className, style, ...rest }: CardSectionProps) => {\n const colors = useThemeColors();\n const headerStyle: ViewStyle = {\n ...HEADER_LAYOUT_BASE,\n paddingHorizontal: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['5']),\n paddingBottom: px(colors.spacing['3']),\n gap: px(colors.spacing['1']),\n };\n return (\n <View {...rest} className={cn('flex-col gap-1 px-6 pt-5 pb-3', className)} style={[headerStyle, style]}>\n {children}\n </View>\n );\n};\n\n/** Body content — for arbitrary content between header and footer. */\nexport const CardContent = ({ children, className, style, ...rest }: CardSectionProps) => {\n const colors = useThemeColors();\n const contentStyle: ViewStyle = {\n ...CONTENT_LAYOUT_BASE,\n paddingHorizontal: px(colors.spacing['6']),\n paddingVertical: px(colors.spacing['4']),\n };\n // Auto-wrap raw string children in <Text>. RN refuses to render a\n // bare string inside a View in dev, and on rn-web it silently slips\n // through using whatever ambient color the surface has — which is\n // wrong in dark mode. Wrapping here matches the pattern other Card\n // subcomponents already follow.\n const wrapped =\n typeof children === 'string' ? (\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n lineHeight: px(colors.fontSize.md) * Number(colors.lineHeight.normal),\n }}\n >\n {children}\n </RNText>\n ) : (\n children\n );\n return (\n <View {...rest} className={cn('px-6 py-4', className)} style={[contentStyle, style]}>\n {wrapped}\n </View>\n );\n};\n\n/** Footer with a top border and a row of actions (typically Buttons). */\nexport const CardFooter = ({ children, className, style, ...rest }: CardSectionProps) => {\n const colors = useThemeColors();\n const footerStyle: ViewStyle = {\n ...FOOTER_LAYOUT_BASE,\n paddingHorizontal: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['3']),\n paddingBottom: px(colors.spacing['5']),\n gap: px(colors.spacing['2']),\n };\n return (\n <View\n {...rest}\n className={cn(\n 'flex-row items-center gap-2 px-6 pt-3 pb-5 border-t border-semantic-border-default',\n className\n )}\n style={[footerStyle, { borderTopColor: colors.semantic.border.default }, style]}\n >\n {children}\n </View>\n );\n};\n\nexport type CardTextProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/** Card title — heading-weight text. Renders as a heading on web. */\nexport const CardTitle = ({ children, className, testID }: CardTextProps) => {\n const colors = useThemeColors();\n return (\n <RNText\n {...(testID !== undefined ? { testID } : {})}\n accessibilityRole=\"header\"\n role=\"heading\"\n aria-level={3}\n className={cn('text-lg font-semibold text-semantic-text-default', className)}\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.display,\n fontSize: px(colors.fontSize.lg),\n fontWeight: colors.fontWeight.semibold as '600',\n }}\n >\n {children}\n </RNText>\n );\n};\n\n/** Muted subtitle that pairs with Card.Title. */\nexport const CardDescription = ({ children, className, testID }: CardTextProps) => {\n const colors = useThemeColors();\n return (\n <RNText\n {...(testID !== undefined ? { testID } : {})}\n className={cn('text-sm text-semantic-text-muted', className)}\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {children}\n </RNText>\n );\n};\n\n/**\n * Public `Card` value — the root function plus its `.Header`, `.Title`,\n * `.Description`, `.Content`, and `.Footer` static members. `Object.assign`\n * produces a value whose inferred type carries the static properties, so\n * `.d.ts` consumers can write `<Card.Header>` without a separate import.\n */\nexport const Card = Object.assign(CardRoot, {\n Header: CardHeader,\n Title: CardTitle,\n Description: CardDescription,\n Content: CardContent,\n Footer: CardFooter,\n});\n"]}
@@ -1,9 +1,9 @@
1
1
  import { useAnimatedNumber } from './chunk-RB3YBWQ4.js';
2
2
  import { AnimatedView } from './chunk-RGJ3NBKE.js';
3
3
  import { Slot } from './chunk-ZIBNLXIV.js';
4
- import { cn } from './chunk-CHXHRJNZ.js';
5
4
  import { px } from './chunk-5A2QOOVN.js';
6
5
  import { useThemeColors } from './chunk-R5JMDDCB.js';
6
+ import { cn } from './chunk-CHXHRJNZ.js';
7
7
  import { __name } from './chunk-WCQVDF3K.js';
8
8
  import { useState, useCallback } from 'react';
9
9
  import { Pressable, View, Text } from 'react-native';
@@ -179,5 +179,5 @@ var Switch = /* @__PURE__ */ __name(({
179
179
  }, "Switch");
180
180
 
181
181
  export { Switch };
182
- //# sourceMappingURL=chunk-VMAGFYHG.js.map
183
- //# sourceMappingURL=chunk-VMAGFYHG.js.map
182
+ //# sourceMappingURL=chunk-RI4Y2C5U.js.map
183
+ //# sourceMappingURL=chunk-RI4Y2C5U.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Switch/Switch.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-VMAGFYHG.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport { useCallback, useState } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { AnimatedView } from '../../animation/animated-view';\nimport { useAnimatedNumber } from '../../animation/use-animated-number';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type SwitchProps = {\n checked?: boolean;\n defaultChecked?: boolean;\n disabled?: boolean;\n onChange?: (next: boolean) => void;\n label?: string;\n className?: string;\n testID?: string;\n asChild?: boolean;\n children?: ReactNode;\n /** DOM id / nativeID forwarded to the Pressable — used by Field.Control */\n id?: string;\n /** HTML name attribute (web only) */\n name?: string;\n /** aria-labelledby forwarded to the Pressable */\n 'aria-labelledby'?: string;\n /** React Native accessibilityLabelledBy forwarded to the Pressable */\n accessibilityLabelledBy?: string;\n /** aria-describedby forwarded to the Pressable */\n 'aria-describedby'?: string;\n /** React Native accessibilityDescribedBy forwarded to the Pressable */\n accessibilityDescribedBy?: string;\n /** Marks the control as invalid — set by Field.Control when there is an error */\n 'aria-invalid'?: boolean;\n /** Marks the control as required — set by Field.Control */\n 'aria-required'?: boolean;\n};\n\n// Layout-only base; row gap is theme-driven inside the component.\nconst ROW_LAYOUT_BASE: ViewStyle = { flexDirection: 'row', alignItems: 'center' };\n// Switch track + thumb are tightly coupled — width 40, height 24, thumb\n// 20×20, travel 18px. Component-density literals — not from theme.\nconst TRACK_BASE: ViewStyle = {\n width: 40,\n height: 24,\n borderRadius: 12,\n // Relative so the absolutely-positioned thumb anchors against the\n // track (not the page). The thumb's `left` value transitions between\n // 2 (off) and 18 (on) — see thumb style below.\n position: 'relative',\n};\nconst THUMB_BASE_STYLE: ViewStyle = {\n width: 20,\n height: 20,\n borderRadius: 10,\n // Web: boxShadow (the modern CSS-style replacement for the legacy RN\n // `shadow*` props that react-native-web has deprecated).\n // Native: elevation (Android) — RN ignores boxShadow there.\n ...({ boxShadow: '0 1px 2px rgba(0, 0, 0, 0.15)' } as ViewStyle),\n elevation: 2,\n};\n\n/**\n * Switch — a toggle control with role=\"switch\". Supports controlled + uncontrolled,\n * disabled state, asChild (via Slot), and a visible label that doubles as the\n * accessibility label.\n */\nexport const Switch = ({\n checked,\n defaultChecked = false,\n disabled,\n onChange,\n label,\n className,\n testID,\n asChild,\n children,\n id,\n name,\n 'aria-labelledby': ariaLabelledBy,\n accessibilityLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n accessibilityDescribedBy,\n 'aria-invalid': ariaInvalid,\n 'aria-required': ariaRequired,\n}: SwitchProps) => {\n const colors = useThemeColors();\n const [inner, setInner] = useState<boolean>(defaultChecked);\n const isControlled = checked !== undefined;\n const value = isControlled ? Boolean(checked) : inner;\n // Pulled up here (above the asChild early-return) so the hook is\n // called on every render path, not conditionally. The slide isn't\n // used in the asChild branch, but the wasted work is tiny.\n const slide = useAnimatedNumber('left', value ? 18 : 2);\n\n const toggle = useCallback(() => {\n if (disabled) {\n return;\n }\n const next = !value;\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n }, [disabled, value, isControlled, onChange]);\n\n const ariaChecked: 'true' | 'false' = value ? 'true' : 'false';\n\n const commonProps: Record<string, unknown> = {\n role: 'switch',\n 'aria-checked': ariaChecked,\n accessibilityRole: 'switch' as const,\n accessibilityState: { checked: value, disabled: Boolean(disabled) },\n testID,\n };\n if (id !== undefined) {\n commonProps.id = id;\n commonProps.nativeID = id;\n }\n if (name !== undefined) {\n commonProps.name = name;\n }\n if (disabled) {\n commonProps['aria-disabled'] = true;\n }\n if (label !== undefined) {\n commonProps['aria-label'] = label;\n commonProps.accessibilityLabel = label;\n }\n if (ariaLabelledBy !== undefined) {\n commonProps['aria-labelledby'] = ariaLabelledBy;\n commonProps.accessibilityLabelledBy = ariaLabelledBy;\n }\n if (accessibilityLabelledBy !== undefined) {\n commonProps.accessibilityLabelledBy = accessibilityLabelledBy;\n }\n if (ariaDescribedBy !== undefined) {\n commonProps['aria-describedby'] = ariaDescribedBy;\n commonProps.accessibilityDescribedBy = ariaDescribedBy;\n }\n if (accessibilityDescribedBy !== undefined) {\n commonProps.accessibilityDescribedBy = accessibilityDescribedBy;\n }\n if (ariaInvalid) {\n commonProps['aria-invalid'] = true;\n }\n if (ariaRequired) {\n commonProps['aria-required'] = true;\n }\n\n if (asChild) {\n const slotProps: Record<string, unknown> = {\n role: 'switch',\n 'aria-checked': ariaChecked,\n onClick: toggle,\n };\n if (disabled) {\n slotProps['aria-disabled'] = true;\n }\n if (label !== undefined) {\n slotProps['aria-label'] = label;\n }\n if (testID !== undefined) {\n slotProps['data-testid'] = testID;\n }\n if (className !== undefined) {\n slotProps.className = className;\n }\n return <Slot {...slotProps}>{children}</Slot>;\n }\n\n const trackClasses = cn(\n 'w-10 h-6 rounded-full justify-center px-0.5 transition-colors',\n value ? 'bg-semantic-interactive-primary' : 'bg-neutral-300 dark:bg-neutral-700',\n disabled ? 'opacity-60' : undefined\n );\n // Position is set inline below (absolute + animated `left`), so no\n // self-start/self-end classes here — they'd fight the inline position.\n const thumbClasses = cn('w-5 h-5 rounded-full bg-white dark:bg-neutral-100 shadow-sm');\n\n const trackStyle = [\n TRACK_BASE,\n {\n backgroundColor: value ? colors.semantic.interactive.primary : colors.color.neutral['600'],\n // Subtle 180ms color transition between off → on. Web only;\n // native has no equivalent for the track tint in v1.\n ...({ transitionProperty: 'background-color', transitionDuration: '180ms' } as ViewStyle),\n },\n disabled ? { opacity: 0.6 } : null,\n ];\n // Thumb stays a near-white disc — we deliberately don't go to a dark\n // grey on dark mode because the thumb needs to read as the \"moveable\n // puck\" against the track in both schemes.\n //\n // Animation: thumb slides between left:2 (off) and left:18 (on) —\n // track width 40 - padding 2 - thumb 20 = 18 px travel. The\n // useAnimatedNumber hook picks the right engine per platform (web\n // CSS transition / reanimated spring / RN Animated). The hook is\n // called once at the top of the function — see the `slide` above.\n const thumbStyle = [\n THUMB_BASE_STYLE,\n {\n backgroundColor: colors.color.neutral['50'],\n position: 'absolute' as const,\n top: 2,\n } as ViewStyle,\n slide as ViewStyle,\n ];\n\n // Whole-row Pressable so clicking the label toggles the switch. The\n // visible track is a non-interactive View — one role=\"switch\" per\n // logical control, not two competing hit-areas.\n const rowStyle: ViewStyle = { ...ROW_LAYOUT_BASE, gap: px(colors.spacing['2']) };\n\n return (\n <Pressable\n onPress={toggle}\n {...commonProps}\n className={cn('flex-row items-center gap-2', className)}\n style={rowStyle}\n >\n <View className={trackClasses} style={trackStyle}>\n {/*\n * Animated.View — the slide style fragment from\n * `useAnimatedNumber` contains an `Animated.Value` on\n * native; a plain `View` would render the value as 0\n * (no animation). On web, the same fragment is plain\n * CSS and `Animated.View` falls through to a regular\n * div via react-native-web.\n */}\n <AnimatedView className={thumbClasses} style={thumbStyle} />\n </View>\n {label ? (\n <RNText\n className=\"text-md text-semantic-text-default\"\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n }}\n >\n {label}\n </RNText>\n ) : null}\n {children}\n </Pressable>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Switch/Switch.tsx"],"names":["RNText"],"mappings":";;;;;;;;;;;AA0CA,IAAM,eAAA,GAA6B,EAAE,aAAA,EAAe,KAAA,EAAO,YAAY,QAAA,EAAS;AAGhF,IAAM,UAAA,GAAwB;AAAA,EAC1B,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,YAAA,EAAc,EAAA;AAAA;AAAA;AAAA;AAAA,EAId,QAAA,EAAU;AACd,CAAA;AACA,IAAM,gBAAA,GAA8B;AAAA,EAChC,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,YAAA,EAAc,EAAA;AAAA;AAAA;AAAA;AAAA,EAId,GAAI,EAAE,SAAA,EAAW,+BAAA,EAAgC;AAAA,EACjD,SAAA,EAAW;AACf,CAAA;AAOO,IAAM,yBAAS,MAAA,CAAA,CAAC;AAAA,EACnB,OAAA;AAAA,EACA,cAAA,GAAiB,KAAA;AAAA,EACjB,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,EAAA;AAAA,EACA,IAAA;AAAA,EACA,iBAAA,EAAmB,cAAA;AAAA,EACnB,uBAAA;AAAA,EACA,kBAAA,EAAoB,eAAA;AAAA,EACpB,wBAAA;AAAA,EACA,cAAA,EAAgB,WAAA;AAAA,EAChB,eAAA,EAAiB;AACrB,CAAA,KAAmB;AACf,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAkB,cAAc,CAAA;AAC1D,EAAA,MAAM,eAAe,OAAA,KAAY,MAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,YAAA,GAAe,OAAA,CAAQ,OAAO,CAAA,GAAI,KAAA;AAIhD,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,MAAA,EAAQ,KAAA,GAAQ,KAAK,CAAC,CAAA;AAEtD,EAAA,MAAM,MAAA,GAAS,YAAY,MAAM;AAC7B,IAAA,IAAI,QAAA,EAAU;AACV,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,OAAO,CAAC,KAAA;AACd,IAAA,IAAI,CAAC,YAAA,EAAc;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACjB;AACA,IAAA,QAAA,GAAW,IAAI,CAAA;AAAA,EACnB,GAAG,CAAC,QAAA,EAAU,KAAA,EAAO,YAAA,EAAc,QAAQ,CAAC,CAAA;AAE5C,EAAA,MAAM,WAAA,GAAgC,QAAQ,MAAA,GAAS,OAAA;AAEvD,EAAA,MAAM,WAAA,GAAuC;AAAA,IACzC,IAAA,EAAM,QAAA;AAAA,IACN,cAAA,EAAgB,WAAA;AAAA,IAChB,iBAAA,EAAmB,QAAA;AAAA,IACnB,oBAAoB,EAAE,OAAA,EAAS,OAAO,QAAA,EAAU,OAAA,CAAQ,QAAQ,CAAA,EAAE;AAAA,IAClE;AAAA,GACJ;AACA,EAAA,IAAI,OAAO,MAAA,EAAW;AAClB,IAAA,WAAA,CAAY,EAAA,GAAK,EAAA;AACjB,IAAA,WAAA,CAAY,QAAA,GAAW,EAAA;AAAA,EAC3B;AACA,EAAA,IAAI,SAAS,MAAA,EAAW;AACpB,IAAA,WAAA,CAAY,IAAA,GAAO,IAAA;AAAA,EACvB;AACA,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,WAAA,CAAY,eAAe,CAAA,GAAI,IAAA;AAAA,EACnC;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACrB,IAAA,WAAA,CAAY,YAAY,CAAA,GAAI,KAAA;AAC5B,IAAA,WAAA,CAAY,kBAAA,GAAqB,KAAA;AAAA,EACrC;AACA,EAAA,IAAI,mBAAmB,MAAA,EAAW;AAC9B,IAAA,WAAA,CAAY,iBAAiB,CAAA,GAAI,cAAA;AACjC,IAAA,WAAA,CAAY,uBAAA,GAA0B,cAAA;AAAA,EAC1C;AACA,EAAA,IAAI,4BAA4B,MAAA,EAAW;AACvC,IAAA,WAAA,CAAY,uBAAA,GAA0B,uBAAA;AAAA,EAC1C;AACA,EAAA,IAAI,oBAAoB,MAAA,EAAW;AAC/B,IAAA,WAAA,CAAY,kBAAkB,CAAA,GAAI,eAAA;AAClC,IAAA,WAAA,CAAY,wBAAA,GAA2B,eAAA;AAAA,EAC3C;AACA,EAAA,IAAI,6BAA6B,MAAA,EAAW;AACxC,IAAA,WAAA,CAAY,wBAAA,GAA2B,wBAAA;AAAA,EAC3C;AACA,EAAA,IAAI,WAAA,EAAa;AACb,IAAA,WAAA,CAAY,cAAc,CAAA,GAAI,IAAA;AAAA,EAClC;AACA,EAAA,IAAI,YAAA,EAAc;AACd,IAAA,WAAA,CAAY,eAAe,CAAA,GAAI,IAAA;AAAA,EACnC;AAEA,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,MAAM,SAAA,GAAqC;AAAA,MACvC,IAAA,EAAM,QAAA;AAAA,MACN,cAAA,EAAgB,WAAA;AAAA,MAChB,OAAA,EAAS;AAAA,KACb;AACA,IAAA,IAAI,QAAA,EAAU;AACV,MAAA,SAAA,CAAU,eAAe,CAAA,GAAI,IAAA;AAAA,IACjC;AACA,IAAA,IAAI,UAAU,MAAA,EAAW;AACrB,MAAA,SAAA,CAAU,YAAY,CAAA,GAAI,KAAA;AAAA,IAC9B;AACA,IAAA,IAAI,WAAW,MAAA,EAAW;AACtB,MAAA,SAAA,CAAU,aAAa,CAAA,GAAI,MAAA;AAAA,IAC/B;AACA,IAAA,IAAI,cAAc,MAAA,EAAW;AACzB,MAAA,SAAA,CAAU,SAAA,GAAY,SAAA;AAAA,IAC1B;AACA,IAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAM,GAAG,SAAA,EAAY,QAAA,EAAS,CAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,YAAA,GAAe,EAAA;AAAA,IACjB,+DAAA;AAAA,IACA,QAAQ,iCAAA,GAAoC,oCAAA;AAAA,IAC5C,WAAW,YAAA,GAAe;AAAA,GAC9B;AAGA,EAAA,MAAM,YAAA,GAAe,GAAG,6DAA6D,CAAA;AAErF,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,UAAA;AAAA,IACA;AAAA,MACI,eAAA,EAAiB,QAAQ,MAAA,CAAO,QAAA,CAAS,YAAY,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAAA;AAAA;AAAA,MAGzF,GAAI,EAAE,kBAAA,EAAoB,kBAAA,EAAoB,oBAAoB,OAAA;AAAQ,KAC9E;AAAA,IACA,QAAA,GAAW,EAAE,OAAA,EAAS,GAAA,EAAI,GAAI;AAAA,GAClC;AAUA,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,gBAAA;AAAA,IACA;AAAA,MACI,eAAA,EAAiB,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,MAC1C,QAAA,EAAU,UAAA;AAAA,MACV,GAAA,EAAK;AAAA,KACT;AAAA,IACA;AAAA,GACJ;AAKA,EAAA,MAAM,QAAA,GAAsB,EAAE,GAAG,eAAA,EAAiB,GAAA,EAAK,GAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAE;AAE/E,EAAA,uBACI,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACG,OAAA,EAAS,MAAA;AAAA,MACR,GAAG,WAAA;AAAA,MACJ,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,SAAS,CAAA;AAAA,MACtD,KAAA,EAAO,QAAA;AAAA,MAEP,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAW,YAAA,EAAc,KAAA,EAAO,UAAA,EASlC,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAW,YAAA,EAAc,KAAA,EAAO,UAAA,EAAY,CAAA,EAC9D,CAAA;AAAA,QACC,KAAA,mBACG,GAAA;AAAA,UAACA,IAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAU,oCAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACH,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,cAC5B,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,cAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE;AAAA,aACnC;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACL,GACA,IAAA;AAAA,QACH;AAAA;AAAA;AAAA,GACL;AAER,CAAA,EApLsB,QAAA","file":"chunk-RI4Y2C5U.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport { useCallback, useState } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { AnimatedView } from '../../animation/animated-view';\nimport { useAnimatedNumber } from '../../animation/use-animated-number';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type SwitchProps = {\n checked?: boolean;\n defaultChecked?: boolean;\n disabled?: boolean;\n onChange?: (next: boolean) => void;\n label?: string;\n className?: string;\n testID?: string;\n asChild?: boolean;\n children?: ReactNode;\n /** DOM id / nativeID forwarded to the Pressable — used by Field.Control */\n id?: string;\n /** HTML name attribute (web only) */\n name?: string;\n /** aria-labelledby forwarded to the Pressable */\n 'aria-labelledby'?: string;\n /** React Native accessibilityLabelledBy forwarded to the Pressable */\n accessibilityLabelledBy?: string;\n /** aria-describedby forwarded to the Pressable */\n 'aria-describedby'?: string;\n /** React Native accessibilityDescribedBy forwarded to the Pressable */\n accessibilityDescribedBy?: string;\n /** Marks the control as invalid — set by Field.Control when there is an error */\n 'aria-invalid'?: boolean;\n /** Marks the control as required — set by Field.Control */\n 'aria-required'?: boolean;\n};\n\n// Layout-only base; row gap is theme-driven inside the component.\nconst ROW_LAYOUT_BASE: ViewStyle = { flexDirection: 'row', alignItems: 'center' };\n// Switch track + thumb are tightly coupled — width 40, height 24, thumb\n// 20×20, travel 18px. Component-density literals — not from theme.\nconst TRACK_BASE: ViewStyle = {\n width: 40,\n height: 24,\n borderRadius: 12,\n // Relative so the absolutely-positioned thumb anchors against the\n // track (not the page). The thumb's `left` value transitions between\n // 2 (off) and 18 (on) — see thumb style below.\n position: 'relative',\n};\nconst THUMB_BASE_STYLE: ViewStyle = {\n width: 20,\n height: 20,\n borderRadius: 10,\n // Web: boxShadow (the modern CSS-style replacement for the legacy RN\n // `shadow*` props that react-native-web has deprecated).\n // Native: elevation (Android) — RN ignores boxShadow there.\n ...({ boxShadow: '0 1px 2px rgba(0, 0, 0, 0.15)' } as ViewStyle),\n elevation: 2,\n};\n\n/**\n * Switch — a toggle control with role=\"switch\". Supports controlled + uncontrolled,\n * disabled state, asChild (via Slot), and a visible label that doubles as the\n * accessibility label.\n */\nexport const Switch = ({\n checked,\n defaultChecked = false,\n disabled,\n onChange,\n label,\n className,\n testID,\n asChild,\n children,\n id,\n name,\n 'aria-labelledby': ariaLabelledBy,\n accessibilityLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n accessibilityDescribedBy,\n 'aria-invalid': ariaInvalid,\n 'aria-required': ariaRequired,\n}: SwitchProps) => {\n const colors = useThemeColors();\n const [inner, setInner] = useState<boolean>(defaultChecked);\n const isControlled = checked !== undefined;\n const value = isControlled ? Boolean(checked) : inner;\n // Pulled up here (above the asChild early-return) so the hook is\n // called on every render path, not conditionally. The slide isn't\n // used in the asChild branch, but the wasted work is tiny.\n const slide = useAnimatedNumber('left', value ? 18 : 2);\n\n const toggle = useCallback(() => {\n if (disabled) {\n return;\n }\n const next = !value;\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n }, [disabled, value, isControlled, onChange]);\n\n const ariaChecked: 'true' | 'false' = value ? 'true' : 'false';\n\n const commonProps: Record<string, unknown> = {\n role: 'switch',\n 'aria-checked': ariaChecked,\n accessibilityRole: 'switch' as const,\n accessibilityState: { checked: value, disabled: Boolean(disabled) },\n testID,\n };\n if (id !== undefined) {\n commonProps.id = id;\n commonProps.nativeID = id;\n }\n if (name !== undefined) {\n commonProps.name = name;\n }\n if (disabled) {\n commonProps['aria-disabled'] = true;\n }\n if (label !== undefined) {\n commonProps['aria-label'] = label;\n commonProps.accessibilityLabel = label;\n }\n if (ariaLabelledBy !== undefined) {\n commonProps['aria-labelledby'] = ariaLabelledBy;\n commonProps.accessibilityLabelledBy = ariaLabelledBy;\n }\n if (accessibilityLabelledBy !== undefined) {\n commonProps.accessibilityLabelledBy = accessibilityLabelledBy;\n }\n if (ariaDescribedBy !== undefined) {\n commonProps['aria-describedby'] = ariaDescribedBy;\n commonProps.accessibilityDescribedBy = ariaDescribedBy;\n }\n if (accessibilityDescribedBy !== undefined) {\n commonProps.accessibilityDescribedBy = accessibilityDescribedBy;\n }\n if (ariaInvalid) {\n commonProps['aria-invalid'] = true;\n }\n if (ariaRequired) {\n commonProps['aria-required'] = true;\n }\n\n if (asChild) {\n const slotProps: Record<string, unknown> = {\n role: 'switch',\n 'aria-checked': ariaChecked,\n onClick: toggle,\n };\n if (disabled) {\n slotProps['aria-disabled'] = true;\n }\n if (label !== undefined) {\n slotProps['aria-label'] = label;\n }\n if (testID !== undefined) {\n slotProps['data-testid'] = testID;\n }\n if (className !== undefined) {\n slotProps.className = className;\n }\n return <Slot {...slotProps}>{children}</Slot>;\n }\n\n const trackClasses = cn(\n 'w-10 h-6 rounded-full justify-center px-0.5 transition-colors',\n value ? 'bg-semantic-interactive-primary' : 'bg-neutral-300 dark:bg-neutral-700',\n disabled ? 'opacity-60' : undefined\n );\n // Position is set inline below (absolute + animated `left`), so no\n // self-start/self-end classes here — they'd fight the inline position.\n const thumbClasses = cn('w-5 h-5 rounded-full bg-white dark:bg-neutral-100 shadow-sm');\n\n const trackStyle = [\n TRACK_BASE,\n {\n backgroundColor: value ? colors.semantic.interactive.primary : colors.color.neutral['600'],\n // Subtle 180ms color transition between off → on. Web only;\n // native has no equivalent for the track tint in v1.\n ...({ transitionProperty: 'background-color', transitionDuration: '180ms' } as ViewStyle),\n },\n disabled ? { opacity: 0.6 } : null,\n ];\n // Thumb stays a near-white disc — we deliberately don't go to a dark\n // grey on dark mode because the thumb needs to read as the \"moveable\n // puck\" against the track in both schemes.\n //\n // Animation: thumb slides between left:2 (off) and left:18 (on) —\n // track width 40 - padding 2 - thumb 20 = 18 px travel. The\n // useAnimatedNumber hook picks the right engine per platform (web\n // CSS transition / reanimated spring / RN Animated). The hook is\n // called once at the top of the function — see the `slide` above.\n const thumbStyle = [\n THUMB_BASE_STYLE,\n {\n backgroundColor: colors.color.neutral['50'],\n position: 'absolute' as const,\n top: 2,\n } as ViewStyle,\n slide as ViewStyle,\n ];\n\n // Whole-row Pressable so clicking the label toggles the switch. The\n // visible track is a non-interactive View — one role=\"switch\" per\n // logical control, not two competing hit-areas.\n const rowStyle: ViewStyle = { ...ROW_LAYOUT_BASE, gap: px(colors.spacing['2']) };\n\n return (\n <Pressable\n onPress={toggle}\n {...commonProps}\n className={cn('flex-row items-center gap-2', className)}\n style={rowStyle}\n >\n <View className={trackClasses} style={trackStyle}>\n {/*\n * Animated.View — the slide style fragment from\n * `useAnimatedNumber` contains an `Animated.Value` on\n * native; a plain `View` would render the value as 0\n * (no animation). On web, the same fragment is plain\n * CSS and `Animated.View` falls through to a regular\n * div via react-native-web.\n */}\n <AnimatedView className={thumbClasses} style={thumbStyle} />\n </View>\n {label ? (\n <RNText\n className=\"text-md text-semantic-text-default\"\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n }}\n >\n {label}\n </RNText>\n ) : null}\n {children}\n </Pressable>\n );\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  import { Slot } from './chunk-ZIBNLXIV.js';
2
- import { cn } from './chunk-CHXHRJNZ.js';
3
2
  import { px } from './chunk-5A2QOOVN.js';
4
3
  import { useThemeColors } from './chunk-R5JMDDCB.js';
4
+ import { cn } from './chunk-CHXHRJNZ.js';
5
5
  import { __name } from './chunk-WCQVDF3K.js';
6
6
  import { createContext, useState, useCallback, useId, useRef, isValidElement, useEffect, useContext } from 'react';
7
7
  import { Text, Pressable, View, Platform, Modal } from 'react-native';
@@ -439,5 +439,5 @@ function translateOffscreen(side) {
439
439
  __name(translateOffscreen, "translateOffscreen");
440
440
 
441
441
  export { Drawer, Sheet, SheetBody, SheetClose, SheetDescription, SheetFooter, SheetHeader, SheetPanel, SheetTitle, SheetTrigger };
442
- //# sourceMappingURL=chunk-BNDUQNG7.js.map
443
- //# sourceMappingURL=chunk-BNDUQNG7.js.map
442
+ //# sourceMappingURL=chunk-SF6WPUC5.js.map
443
+ //# sourceMappingURL=chunk-SF6WPUC5.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Sheet/Sheet.shared.tsx","../src/components/Sheet/Sheet.tsx"],"names":["RNText","useRef","useState","useCallback","jsx","Pressable"],"mappings":"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","file":"chunk-BNDUQNG7.js","sourcesContent":["'use client';\n\n/**\n * Shared Sheet internals — context, types, root, trigger, and structural\n * subcomponents (Header, Title, Description, Body, Footer, Close).\n *\n * Imported by both `Sheet.tsx` (native) and `Sheet.web.tsx` (web) to avoid\n * duplication. The panel surface (`SheetPanel`) is platform-specific and\n * lives in each of those files.\n */\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type SheetSide = 'top' | 'right' | 'bottom' | 'left';\n\nexport type SheetSize = 'sm' | 'md' | 'lg' | 'full' | number;\n\nexport type SheetProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n /**\n * Edge the sheet slides in from.\n * @defaultValue 'bottom'\n */\n side?: SheetSide;\n /**\n * Panel size: preset key or an explicit pixel value.\n * - 'sm' → 25% of viewport height/width\n * - 'md' → 50%\n * - 'lg' → 75%\n * - 'full' → 100%\n * - number → explicit px value\n * @defaultValue 'md'\n */\n size?: SheetSize;\n /**\n * Whether tapping the backdrop closes the sheet.\n * @defaultValue true\n */\n dismissible?: boolean;\n children?: ReactNode;\n};\n\nexport type SheetContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n titleId: string;\n descriptionId: string;\n triggerRef: { current: HTMLElement | null };\n side: SheetSide;\n size: SheetSize;\n dismissible: boolean;\n};\n\n// ─── Size helpers ─────────────────────────────────────────────────────────────\n\nexport const SIZE_PERCENT: Record<Exclude<SheetSize, number>, string> = {\n sm: '25%',\n md: '50%',\n lg: '75%',\n full: '100%',\n};\n\nexport function resolveSizeValue(size: SheetSize): string | number {\n if (typeof size === 'number') {\n return size;\n }\n return SIZE_PERCENT[size];\n}\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nexport const SheetContext = createContext<SheetContextValue | null>(null);\n\nexport const useSheetContext = (label: string): SheetContextValue => {\n const ctx = useContext(SheetContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Sheet>.`);\n }\n return ctx;\n};\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nexport const SheetRoot = ({\n open,\n defaultOpen = false,\n onOpenChange,\n side = 'bottom',\n size = 'md',\n dismissible = true,\n children,\n}: SheetProps) => {\n const [inner, setInner] = useState<boolean>(defaultOpen);\n const isControlled = open !== undefined;\n const current = isControlled ? open : inner;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInner(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const baseId = useId();\n const triggerRef = useRef<HTMLElement | null>(null);\n\n const ctxValue: SheetContextValue = {\n open: current,\n setOpen,\n titleId: `${baseId}-title`,\n descriptionId: `${baseId}-description`,\n triggerRef,\n side,\n size,\n dismissible,\n };\n\n return <SheetContext.Provider value={ctxValue}>{children}</SheetContext.Provider>;\n};\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n\nexport type SheetTriggerProps = {\n /** Render the child as the trigger (Slot pattern). @defaultValue true */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const SheetTrigger = ({ asChild = true, children, className, testID }: SheetTriggerProps) => {\n const ctx = useSheetContext('SheetTrigger');\n const onPress = useCallback(() => ctx.setOpen(true), [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n ctx.setOpen(true);\n };\n return (\n <Slot\n ref={(node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }}\n onClick={fire(child.props.onClick as ((e: unknown) => void) | undefined)}\n onPress={fire(child.props.onPress as ((e: unknown) => void) | undefined)}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <Pressable\n ref={(node) => {\n ctx.triggerRef.current = node as unknown as HTMLElement | null;\n }}\n onPress={onPress}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {wrapStringChildren(children)}\n </Pressable>\n );\n};\n\n// ─── Header ───────────────────────────────────────────────────────────────────\n\nexport type SheetHeaderProps = { children?: ReactNode; className?: string };\n\nexport const SheetHeader = ({ children, className }: SheetHeaderProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('flex-col gap-1', className)}\n style={{\n flexDirection: 'column',\n gap: px(colors.spacing['1']),\n paddingHorizontal: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['6']),\n paddingBottom: px(colors.spacing['2']),\n }}\n >\n {children}\n </View>\n );\n};\n\n// ─── Title ────────────────────────────────────────────────────────────────────\n\nexport type SheetTitleProps = { children?: ReactNode; className?: string };\n\nexport const SheetTitle = ({ children, className }: SheetTitleProps) => {\n const ctx = useSheetContext('SheetTitle');\n const colors = useThemeColors();\n return (\n <RNText\n nativeID={ctx.titleId}\n id={ctx.titleId}\n role=\"heading\"\n aria-level={2}\n className={cn('text-lg font-semibold text-semantic-text-default', className)}\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.display,\n fontSize: px(colors.fontSize.lg),\n fontWeight: colors.fontWeight.semibold as '600',\n }}\n >\n {children}\n </RNText>\n );\n};\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nexport type SheetDescriptionProps = { children?: ReactNode; className?: string };\n\nexport const SheetDescription = ({ children, className }: SheetDescriptionProps) => {\n const ctx = useSheetContext('SheetDescription');\n const colors = useThemeColors();\n return (\n <RNText\n nativeID={ctx.descriptionId}\n id={ctx.descriptionId}\n className={cn('text-sm text-semantic-text-muted', className)}\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.sm) * Number(colors.lineHeight.normal),\n }}\n >\n {children}\n </RNText>\n );\n};\n\n// ─── Body ─────────────────────────────────────────────────────────────────────\n\nexport type SheetBodyProps = { children?: ReactNode; className?: string };\n\nexport const SheetBody = ({ children, className }: SheetBodyProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('flex-1', className)}\n style={{\n flex: 1,\n paddingHorizontal: px(colors.spacing['6']),\n paddingVertical: px(colors.spacing['4']),\n }}\n >\n {children}\n </View>\n );\n};\n\n// ─── Footer ───────────────────────────────────────────────────────────────────\n\nexport type SheetFooterProps = { children?: ReactNode; className?: string };\n\nexport const SheetFooter = ({ children, className }: SheetFooterProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('flex-row items-center justify-end gap-2', className)}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['6']),\n paddingBottom: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['2']),\n }}\n >\n {children}\n </View>\n );\n};\n\n// ─── Close ────────────────────────────────────────────────────────────────────\n\nexport type SheetCloseProps = {\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n accessibilityLabel?: string;\n};\n\nexport const SheetClose = ({\n asChild = true,\n children,\n className,\n testID,\n accessibilityLabel = 'Close',\n}: SheetCloseProps) => {\n const ctx = useSheetContext('SheetClose');\n const onPress = useCallback(() => ctx.setOpen(false), [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n ctx.setOpen(false);\n };\n return (\n <Slot\n onClick={fire(child.props.onClick as ((e: unknown) => void) | undefined)}\n onPress={fire(child.props.onPress as ((e: unknown) => void) | undefined)}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <Pressable\n onPress={onPress}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n aria-label={accessibilityLabel}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {wrapStringChildren(children)}\n </Pressable>\n );\n};\n\n// ─── Utilities ────────────────────────────────────────────────────────────────\n\nexport function wrapStringChildren(children: ReactNode): ReactNode {\n if (typeof children === 'string' || typeof children === 'number') {\n return <RNText>{children}</RNText>;\n }\n return children;\n}\n\nexport type SheetPanelProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n","'use client';\n\n/**\n * Sheet — default (native) implementation.\n *\n * Metro resolves `.native.tsx` over `.tsx` so on native builds, `Sheet.native.tsx`\n * wins. On web, `Sheet.web.tsx` wins. This file serves as the fallback for\n * environments that don't apply platform extensions (plain Node / jest node project).\n *\n * Shared context, types, and structural subcomponents live in `Sheet.shared.tsx`.\n * The `SheetPanel` here uses RN Modal with Platform.OS guards for web CSS\n * transitions and native slide animation.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Modal, Platform, Pressable } from 'react-native';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport {\n SheetBody,\n SheetClose,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n type SheetPanelProps,\n SheetRoot,\n type SheetSide,\n SheetTitle,\n SheetTrigger,\n SIZE_PERCENT,\n useSheetContext,\n} from './Sheet.shared';\n\nexport {\n SheetBody,\n SheetClose,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n type SheetPanelProps,\n type SheetProps,\n type SheetSide,\n type SheetSize,\n SheetTitle,\n SheetTrigger,\n} from './Sheet.shared';\n\n// ─── Panel ────────────────────────────────────────────────────────────────────\n\nconst SCRIM_COLOR = 'rgba(0, 0, 0, 0.40)';\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport const SheetPanel = ({ children, className, testID }: SheetPanelProps) => {\n const ctx = useSheetContext('SheetPanel');\n const colors = useThemeColors();\n const panelRef = useRef<HTMLDivElement | null>(null);\n const overlayDomRef = useRef<HTMLElement | null>(null);\n\n const [entered, setEntered] = useState(false);\n\n useEffect(() => {\n if (Platform.OS !== 'web') {\n setEntered(true);\n return;\n }\n if (!ctx.open) {\n setEntered(false);\n return;\n }\n const id = requestAnimationFrame(() => setEntered(true));\n return () => cancelAnimationFrame(id);\n }, [ctx.open]);\n\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n const node = overlayDomRef.current;\n if (!node) {\n return;\n }\n node.style.transitionProperty = 'background-color';\n node.style.transitionDuration = '200ms';\n node.style.transitionTimingFunction = 'ease-out';\n node.style.backgroundColor = entered ? SCRIM_COLOR : 'rgba(0,0,0,0)';\n }, [entered]);\n\n useEffect(() => {\n if (!ctx.open || Platform.OS !== 'web' || typeof document === 'undefined') {\n return;\n }\n const previouslyFocused = document.activeElement as HTMLElement | null;\n const prevBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n const focusFirst = () => {\n const node = panelRef.current;\n if (!node) {\n return;\n }\n const focusable = node.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR);\n const first = focusable[0];\n if (first) {\n first.focus();\n } else {\n node.setAttribute('tabindex', '-1');\n node.focus();\n }\n };\n focusFirst();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n ctx.setOpen(false);\n return;\n }\n if (event.key !== 'Tab') {\n return;\n }\n const node = panelRef.current;\n if (!node) {\n return;\n }\n const focusable = Array.from(node.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => el.offsetParent !== null || el === document.activeElement\n );\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (!first || !last) {\n return;\n }\n if (event.shiftKey) {\n if (document.activeElement === first || !node.contains(document.activeElement)) {\n event.preventDefault();\n last.focus();\n }\n } else if (document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n document.body.style.overflow = prevBodyOverflow;\n const restoreTo = ctx.triggerRef.current ?? previouslyFocused;\n restoreTo?.focus?.();\n };\n }, [ctx.open, ctx.setOpen, ctx.triggerRef]);\n\n const onBackdropPress = useCallback(() => {\n if (ctx.dismissible) {\n ctx.setOpen(false);\n }\n }, [ctx]);\n\n const isHorizontal = ctx.side === 'left' || ctx.side === 'right';\n const dim = typeof ctx.size === 'number' ? ctx.size : SIZE_PERCENT[ctx.size];\n\n const panelStyle: ViewStyle = {\n position: 'absolute',\n backgroundColor: colors.semantic.background.elevated,\n ...(isHorizontal ? { top: 0, bottom: 0 } : { left: 0, right: 0 }),\n ...(ctx.side === 'bottom' && { bottom: 0 }),\n ...(ctx.side === 'top' && { top: 0 }),\n ...(ctx.side === 'left' && { left: 0 }),\n ...(ctx.side === 'right' && { right: 0 }),\n };\n\n const translateStyle: ViewStyle =\n Platform.OS === 'web'\n ? ({\n transform: entered ? 'translateX(0) translateY(0)' : translateOffscreen(ctx.side),\n transitionProperty: 'transform',\n transitionDuration: '280ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n } as unknown as ViewStyle)\n : {};\n\n const overlayStyle: ViewStyle = {\n position: Platform.OS === 'web' ? ('fixed' as unknown as 'absolute') : 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n ...(Platform.OS === 'web' ? ({ zIndex: 50 } as ViewStyle) : { backgroundColor: SCRIM_COLOR }),\n };\n\n const sizeStyle = isHorizontal\n ? { width: dim, height: '100%' as unknown as number }\n : { height: dim, width: '100%' as unknown as number };\n\n return (\n <Modal\n visible={ctx.open}\n transparent\n animationType={\n Platform.OS === 'web' ? 'none' : ctx.side === 'bottom' || ctx.side === 'top' ? 'slide' : 'fade'\n }\n onRequestClose={() => ctx.setOpen(false)}\n >\n <Pressable\n accessibilityRole=\"none\"\n aria-hidden={true}\n ref={(node) => {\n overlayDomRef.current = node as unknown as HTMLElement | null;\n }}\n style={overlayStyle}\n onPress={onBackdropPress}\n >\n <Pressable\n onPress={(event) => event.stopPropagation?.()}\n ref={(node) => {\n panelRef.current = node as unknown as HTMLDivElement | null;\n }}\n role=\"dialog\"\n accessibilityRole=\"none\"\n aria-modal={true}\n aria-labelledby={ctx.titleId}\n aria-describedby={ctx.descriptionId}\n data-side={ctx.side}\n {...(testID !== undefined ? { testID } : {})}\n className={cn('bg-semantic-background-elevated', className)}\n style={[\n panelStyle,\n sizeStyle as ViewStyle,\n translateStyle,\n {\n shadowColor: '#000',\n shadowOffset: { width: 0, height: -2 },\n shadowOpacity: 0.15,\n shadowRadius: 20,\n elevation: 24,\n ...(ctx.side === 'bottom' ? { borderTopLeftRadius: 16, borderTopRightRadius: 16 } : {}),\n ...(ctx.side === 'top' ? { borderBottomLeftRadius: 16, borderBottomRightRadius: 16 } : {}),\n },\n ]}\n >\n {children}\n </Pressable>\n </Pressable>\n </Modal>\n );\n};\n\n// ─── Compound export ──────────────────────────────────────────────────────────\n\nexport const Sheet = Object.assign(SheetRoot, {\n Trigger: SheetTrigger,\n Panel: SheetPanel,\n Header: SheetHeader,\n Title: SheetTitle,\n Description: SheetDescription,\n Body: SheetBody,\n Footer: SheetFooter,\n Close: SheetClose,\n});\n\nexport const Drawer = Sheet;\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction translateOffscreen(side: SheetSide): string {\n switch (side) {\n case 'bottom':\n return 'translateY(100%)';\n case 'top':\n return 'translateY(-100%)';\n case 'left':\n return 'translateX(-100%)';\n case 'right':\n return 'translateX(100%)';\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Sheet/Sheet.shared.tsx","../src/components/Sheet/Sheet.tsx"],"names":["RNText","useRef","useState","useCallback","jsx","Pressable"],"mappings":";;;;;;;;;AA6EO,IAAM,YAAA,GAA2D;AAAA,EACpE,EAAA,EAAI,KAAA;AAAA,EACJ,EAAA,EAAI,KAAA;AAAA,EACJ,EAAA,EAAI,KAAA;AAAA,EACJ,IAAA,EAAM;AACV,CAAA;AAWO,IAAM,YAAA,GAAe,cAAwC,IAAI,CAAA;AAEjE,IAAM,eAAA,2BAAmB,KAAA,KAAqC;AACjE,EAAA,MAAM,GAAA,GAAM,WAAW,YAAY,CAAA;AACnC,EAAA,IAAI,CAAC,GAAA,EAAK;AACN,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,CAAA,EAAI,KAAK,CAAA,oCAAA,CAAsC,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,GAAA;AACX,CAAA,EAN+B,iBAAA,CAAA;AAUxB,IAAM,4BAAY,MAAA,CAAA,CAAC;AAAA,EACtB,IAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,IAAA,GAAO,QAAA;AAAA,EACP,IAAA,GAAO,IAAA;AAAA,EACP,WAAA,GAAc,IAAA;AAAA,EACd;AACJ,CAAA,KAAkB;AACd,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAkB,WAAW,CAAA;AACvD,EAAA,MAAM,eAAe,IAAA,KAAS,MAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,eAAe,IAAA,GAAO,KAAA;AAEtC,EAAA,MAAM,OAAA,GAAU,WAAA;AAAA,IACZ,CAAC,IAAA,KAAkB;AACf,MAAA,IAAI,CAAC,YAAA,EAAc;AACf,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA,MACjB;AACA,MAAA,YAAA,GAAe,IAAI,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,cAAc,YAAY;AAAA,GAC/B;AAEA,EAAA,MAAM,SAAS,KAAA,EAAM;AACrB,EAAA,MAAM,UAAA,GAAa,OAA2B,IAAI,CAAA;AAElD,EAAA,MAAM,QAAA,GAA8B;AAAA,IAChC,IAAA,EAAM,OAAA;AAAA,IACN,OAAA;AAAA,IACA,OAAA,EAAS,GAAG,MAAM,CAAA,MAAA,CAAA;AAAA,IAClB,aAAA,EAAe,GAAG,MAAM,CAAA,YAAA,CAAA;AAAA,IACxB,UAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACJ;AAEA,EAAA,2BAAQ,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EAAO,UAAW,QAAA,EAAS,CAAA;AAC7D,CAAA,EAtCyB,WAAA,CAAA;AAkDlB,IAAM,YAAA,2BAAgB,EAAE,OAAA,GAAU,MAAM,QAAA,EAAU,SAAA,EAAW,QAAO,KAAyB;AAChG,EAAA,MAAM,GAAA,GAAM,gBAAgB,cAAc,CAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,YAAY,MAAM,GAAA,CAAI,QAAQ,IAAI,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAE1D,EAAA,IAAI,OAAA,IAAW,cAAA,CAAe,QAAQ,CAAA,EAAG;AACrC,IAAA,MAAM,KAAA,GAAQ,QAAA;AACd,IAAA,MAAM,IAAA,mBAAO,MAAA,CAAA,CAAC,QAAA,KAAiD,CAAC,KAAA,KAAmB;AAC/E,MAAA,QAAA,GAAW,KAAK,CAAA;AAChB,MAAA,GAAA,CAAI,QAAQ,IAAI,CAAA;AAAA,IACpB,CAAA,EAHa,MAAA,CAAA;AAIb,IAAA,uBACI,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,GAAA,EAAK,CAAC,IAAA,KAA6B;AAC/B,UAAA,GAAA,CAAI,WAAW,OAAA,GAAU,IAAA;AAAA,QAC7B,CAAA;AAAA,QACA,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,OAA6C,CAAA;AAAA,QACvE,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,OAA6C,CAAA;AAAA,QACtE,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,aAAA,EAAe,MAAA,KAAW,EAAC;AAAA,QACxD,GAAI,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,KAAc,EAAC;AAAA,QAE/C,QAAA,EAAA;AAAA;AAAA,KACL;AAAA,EAER;AAEA,EAAA,uBACI,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACG,GAAA,EAAK,CAAC,IAAA,KAAS;AACX,QAAA,GAAA,CAAI,WAAW,OAAA,GAAU,IAAA;AAAA,MAC7B,CAAA;AAAA,MACA,OAAA;AAAA,MACC,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,MACzC,GAAI,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,KAAc,EAAC;AAAA,MAE/C,6BAAmB,QAAQ;AAAA;AAAA,GAChC;AAER,CAAA,EArC4B,cAAA;AA2CrB,IAAM,WAAA,mBAAc,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,WAAU,KAAwB;AACtE,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA;AAAA,MACzC,KAAA,EAAO;AAAA,QACH,aAAA,EAAe,QAAA;AAAA,QACf,GAAA,EAAK,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QAC3B,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QACzC,UAAA,EAAY,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QAClC,aAAA,EAAe,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC;AAAA,OACzC;AAAA,MAEC;AAAA;AAAA,GACL;AAER,CAAA,EAhB2B,aAAA;AAsBpB,IAAM,UAAA,mBAAa,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,WAAU,KAAuB;AACpE,EAAA,MAAM,GAAA,GAAM,gBAAgB,YAAY,CAAA;AACxC,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,uBACI,GAAA;AAAA,IAACA,IAAA;AAAA,IAAA;AAAA,MACG,UAAU,GAAA,CAAI,OAAA;AAAA,MACd,IAAI,GAAA,CAAI,OAAA;AAAA,MACR,IAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAY,CAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,kDAAA,EAAoD,SAAS,CAAA;AAAA,MAC3E,KAAA,EAAO;AAAA,QACH,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,QAC5B,UAAA,EAAY,OAAO,UAAA,CAAW,OAAA;AAAA,QAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,QAC/B,UAAA,EAAY,OAAO,UAAA,CAAW;AAAA,OAClC;AAAA,MAEC;AAAA;AAAA,GACL;AAER,CAAA,EApB0B,YAAA;AA0BnB,IAAM,gBAAA,mBAAmB,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,WAAU,KAA6B;AAChF,EAAA,MAAM,GAAA,GAAM,gBAAgB,kBAAkB,CAAA;AAC9C,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,uBACI,GAAA;AAAA,IAACA,IAAA;AAAA,IAAA;AAAA,MACG,UAAU,GAAA,CAAI,aAAA;AAAA,MACd,IAAI,GAAA,CAAI,aAAA;AAAA,MACR,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC3D,KAAA,EAAO;AAAA,QACH,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,QAC5B,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,QAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,QAC/B,UAAA,EAAY,GAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,MAAM;AAAA,OACxE;AAAA,MAEC;AAAA;AAAA,GACL;AAER,CAAA,EAlBgC,kBAAA;AAwBzB,IAAM,SAAA,mBAAY,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,WAAU,KAAsB;AAClE,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,SAAS,CAAA;AAAA,MACjC,KAAA,EAAO;AAAA,QACH,IAAA,EAAM,CAAA;AAAA,QACN,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QACzC,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC;AAAA,OAC3C;AAAA,MAEC;AAAA;AAAA,GACL;AAER,CAAA,EAdyB,WAAA;AAoBlB,IAAM,WAAA,mBAAc,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,WAAU,KAAwB;AACtE,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,yCAAA,EAA2C,SAAS,CAAA;AAAA,MAClE,KAAA,EAAO;AAAA,QACH,aAAA,EAAe,KAAA;AAAA,QACf,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,UAAA;AAAA,QAChB,GAAA,EAAK,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QAC3B,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QACzC,aAAA,EAAe,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QACrC,UAAA,EAAY,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC;AAAA,OACtC;AAAA,MAEC;AAAA;AAAA,GACL;AAER,CAAA,EAlB2B,aAAA;AA8BpB,IAAM,6BAAa,MAAA,CAAA,CAAC;AAAA,EACvB,OAAA,GAAU,IAAA;AAAA,EACV,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA,GAAqB;AACzB,CAAA,KAAuB;AACnB,EAAA,MAAM,GAAA,GAAM,gBAAgB,YAAY,CAAA;AACxC,EAAA,MAAM,OAAA,GAAU,YAAY,MAAM,GAAA,CAAI,QAAQ,KAAK,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAE3D,EAAA,IAAI,OAAA,IAAW,cAAA,CAAe,QAAQ,CAAA,EAAG;AACrC,IAAA,MAAM,KAAA,GAAQ,QAAA;AACd,IAAA,MAAM,IAAA,mBAAO,MAAA,CAAA,CAAC,QAAA,KAAiD,CAAC,KAAA,KAAmB;AAC/E,MAAA,QAAA,GAAW,KAAK,CAAA;AAChB,MAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AAAA,IACrB,CAAA,EAHa,MAAA,CAAA;AAIb,IAAA,uBACI,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,OAA6C,CAAA;AAAA,QACvE,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,OAA6C,CAAA;AAAA,QACtE,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,aAAA,EAAe,MAAA,KAAW,EAAC;AAAA,QACxD,GAAI,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,KAAc,EAAC;AAAA,QAE/C,QAAA,EAAA;AAAA;AAAA,KACL;AAAA,EAER;AAEA,EAAA,uBACI,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACG,OAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,iBAAA,EAAkB,QAAA;AAAA,MAClB,kBAAA;AAAA,MACA,YAAA,EAAY,kBAAA;AAAA,MACX,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,MACzC,GAAI,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,KAAc,EAAC;AAAA,MAE/C,6BAAmB,QAAQ;AAAA;AAAA,GAChC;AAER,CAAA,EAzC0B,YAAA;AA6CnB,SAAS,mBAAmB,QAAA,EAAgC;AAC/D,EAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,OAAO,aAAa,QAAA,EAAU;AAC9D,IAAA,uBAAO,GAAA,CAACA,QAAQ,QAAA,EAAS,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,QAAA;AACX;AALgB,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AC3ThB,IAAM,WAAA,GAAc,qBAAA;AAEpB,IAAM,kBAAA,GACF,gKAAA;AAEG,IAAM,6BAAa,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,QAAO,KAAuB;AAC5E,EAAA,MAAM,GAAA,GAAM,gBAAgB,YAAY,CAAA;AACxC,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,QAAA,GAAWC,OAA8B,IAAI,CAAA;AACnD,EAAA,MAAM,aAAA,GAAgBA,OAA2B,IAAI,CAAA;AAErD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,SAAS,KAAK,CAAA;AAE5C,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA;AAAA,IACJ;AACA,IAAA,IAAI,CAAC,IAAI,IAAA,EAAM;AACX,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,EAAA,GAAK,qBAAA,CAAsB,MAAM,UAAA,CAAW,IAAI,CAAC,CAAA;AACvD,IAAA,OAAO,MAAM,qBAAqB,EAAE,CAAA;AAAA,EACxC,CAAA,EAAG,CAAC,GAAA,CAAI,IAAI,CAAC,CAAA;AAEb,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,OAAO,aAAA,CAAc,OAAA;AAC3B,IAAA,IAAI,CAAC,IAAA,EAAM;AACP,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,MAAM,kBAAA,GAAqB,kBAAA;AAChC,IAAA,IAAA,CAAK,MAAM,kBAAA,GAAqB,OAAA;AAChC,IAAA,IAAA,CAAK,MAAM,wBAAA,GAA2B,UAAA;AACtC,IAAA,IAAA,CAAK,KAAA,CAAM,eAAA,GAAkB,OAAA,GAAU,WAAA,GAAc,eAAA;AAAA,EACzD,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,CAAC,IAAI,IAAA,IAAQ,QAAA,CAAS,OAAO,KAAA,IAAS,OAAO,aAAa,WAAA,EAAa;AACvE,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,oBAAoB,QAAA,CAAS,aAAA;AACnC,IAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA;AAC7C,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AAE/B,IAAA,MAAM,6BAAa,MAAA,CAAA,MAAM;AACrB,MAAA,MAAM,OAAO,QAAA,CAAS,OAAA;AACtB,MAAA,IAAI,CAAC,IAAA,EAAM;AACP,QAAA;AAAA,MACJ;AACA,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,gBAAA,CAA8B,kBAAkB,CAAA;AACvE,MAAA,MAAM,KAAA,GAAQ,UAAU,CAAC,CAAA;AACzB,MAAA,IAAI,KAAA,EAAO;AACP,QAAA,KAAA,CAAM,KAAA,EAAM;AAAA,MAChB,CAAA,MAAO;AACH,QAAA,IAAA,CAAK,YAAA,CAAa,YAAY,IAAI,CAAA;AAClC,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACf;AAAA,IACJ,CAAA,EAbmB,YAAA,CAAA;AAcnB,IAAA,UAAA,EAAW;AAEX,IAAA,MAAM,SAAA,2BAAa,KAAA,KAAyB;AACxC,MAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AACxB,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AACjB,QAAA;AAAA,MACJ;AACA,MAAA,IAAI,KAAA,CAAM,QAAQ,KAAA,EAAO;AACrB,QAAA;AAAA,MACJ;AACA,MAAA,MAAM,OAAO,QAAA,CAAS,OAAA;AACtB,MAAA,IAAI,CAAC,IAAA,EAAM;AACP,QAAA;AAAA,MACJ;AACA,MAAA,MAAM,YAAY,KAAA,CAAM,IAAA,CAAK,KAAK,gBAAA,CAA8B,kBAAkB,CAAC,CAAA,CAAE,MAAA;AAAA,QACjF,CAAC,EAAA,KAAO,EAAA,CAAG,YAAA,KAAiB,IAAA,IAAQ,OAAO,QAAA,CAAS;AAAA,OACxD;AACA,MAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AACxB,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA;AAAA,MACJ;AACA,MAAA,MAAM,KAAA,GAAQ,UAAU,CAAC,CAAA;AACzB,MAAA,MAAM,IAAA,GAAO,SAAA,CAAU,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA;AAC3C,MAAA,IAAI,CAAC,KAAA,IAAS,CAAC,IAAA,EAAM;AACjB,QAAA;AAAA,MACJ;AACA,MAAA,IAAI,MAAM,QAAA,EAAU;AAChB,QAAA,IAAI,QAAA,CAAS,kBAAkB,KAAA,IAAS,CAAC,KAAK,QAAA,CAAS,QAAA,CAAS,aAAa,CAAA,EAAG;AAC5E,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,IAAA,CAAK,KAAA,EAAM;AAAA,QACf;AAAA,MACJ,CAAA,MAAA,IAAW,QAAA,CAAS,aAAA,KAAkB,IAAA,EAAM;AACxC,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,KAAA,CAAM,KAAA,EAAM;AAAA,MAChB;AAAA,IACJ,CAAA,EAlCkB,WAAA,CAAA;AAmClB,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC9C,IAAA,OAAO,MAAM;AACT,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,SAAS,CAAA;AACjD,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,gBAAA;AAC/B,MAAA,MAAM,SAAA,GAAY,GAAA,CAAI,UAAA,CAAW,OAAA,IAAW,iBAAA;AAC5C,MAAA,SAAA,EAAW,KAAA,IAAQ;AAAA,IACvB,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,GAAA,CAAI,IAAA,EAAM,IAAI,OAAA,EAAS,GAAA,CAAI,UAAU,CAAC,CAAA;AAE1C,EAAA,MAAM,eAAA,GAAkBC,YAAY,MAAM;AACtC,IAAA,IAAI,IAAI,WAAA,EAAa;AACjB,MAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AAAA,IACrB;AAAA,EACJ,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,YAAA,GAAe,GAAA,CAAI,IAAA,KAAS,MAAA,IAAU,IAAI,IAAA,KAAS,OAAA;AACzD,EAAA,MAAM,GAAA,GAAM,OAAO,GAAA,CAAI,IAAA,KAAS,WAAW,GAAA,CAAI,IAAA,GAAO,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AAE3E,EAAA,MAAM,UAAA,GAAwB;AAAA,IAC1B,QAAA,EAAU,UAAA;AAAA,IACV,eAAA,EAAiB,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,QAAA;AAAA,IAC5C,GAAI,YAAA,GAAe,EAAE,GAAA,EAAK,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAE,GAAI,EAAE,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,CAAA,EAAE;AAAA,IAC/D,GAAI,GAAA,CAAI,IAAA,KAAS,QAAA,IAAY,EAAE,QAAQ,CAAA,EAAE;AAAA,IACzC,GAAI,GAAA,CAAI,IAAA,KAAS,KAAA,IAAS,EAAE,KAAK,CAAA,EAAE;AAAA,IACnC,GAAI,GAAA,CAAI,IAAA,KAAS,MAAA,IAAU,EAAE,MAAM,CAAA,EAAE;AAAA,IACrC,GAAI,GAAA,CAAI,IAAA,KAAS,OAAA,IAAW,EAAE,OAAO,CAAA;AAAE,GAC3C;AAEA,EAAA,MAAM,cAAA,GACF,QAAA,CAAS,EAAA,KAAO,KAAA,GACT;AAAA,IACG,SAAA,EAAW,OAAA,GAAU,6BAAA,GAAgC,kBAAA,CAAmB,IAAI,IAAI,CAAA;AAAA,IAChF,kBAAA,EAAoB,WAAA;AAAA,IACpB,kBAAA,EAAoB,OAAA;AAAA,IACpB,wBAAA,EAA0B;AAAA,MAE9B,EAAC;AAEX,EAAA,MAAM,YAAA,GAA0B;AAAA,IAC5B,QAAA,EAAU,QAAA,CAAS,EAAA,KAAO,KAAA,GAAS,OAAA,GAAoC,UAAA;AAAA,IACvE,GAAA,EAAK,CAAA;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,GAAI,QAAA,CAAS,EAAA,KAAO,KAAA,GAAS,EAAE,QAAQ,EAAA,EAAG,GAAkB,EAAE,eAAA,EAAiB,WAAA;AAAY,GAC/F;AAEA,EAAA,MAAM,SAAA,GAAY,YAAA,GACZ,EAAE,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,MAAA,EAA4B,GAClD,EAAE,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,MAAA,EAA4B;AAExD,EAAA,uBACIC,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAS,GAAA,CAAI,IAAA;AAAA,MACb,WAAA,EAAW,IAAA;AAAA,MACX,aAAA,EACI,QAAA,CAAS,EAAA,KAAO,KAAA,GAAQ,MAAA,GAAS,GAAA,CAAI,IAAA,KAAS,QAAA,IAAY,GAAA,CAAI,IAAA,KAAS,KAAA,GAAQ,OAAA,GAAU,MAAA;AAAA,MAE7F,cAAA,EAAgB,MAAM,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAAA,MAEvC,QAAA,kBAAAA,GAAAA;AAAA,QAACC,SAAAA;AAAA,QAAA;AAAA,UACG,iBAAA,EAAkB,MAAA;AAAA,UAClB,aAAA,EAAa,IAAA;AAAA,UACb,GAAA,EAAK,CAAC,IAAA,KAAS;AACX,YAAA,aAAA,CAAc,OAAA,GAAU,IAAA;AAAA,UAC5B,CAAA;AAAA,UACA,KAAA,EAAO,YAAA;AAAA,UACP,OAAA,EAAS,eAAA;AAAA,UAET,QAAA,kBAAAD,GAAAA;AAAA,YAACC,SAAAA;AAAA,YAAA;AAAA,cACG,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,eAAA,IAAkB;AAAA,cAC5C,GAAA,EAAK,CAAC,IAAA,KAAS;AACX,gBAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AAAA,cACvB,CAAA;AAAA,cACA,IAAA,EAAK,QAAA;AAAA,cACL,iBAAA,EAAkB,MAAA;AAAA,cAClB,YAAA,EAAY,IAAA;AAAA,cACZ,mBAAiB,GAAA,CAAI,OAAA;AAAA,cACrB,oBAAkB,GAAA,CAAI,aAAA;AAAA,cACtB,aAAW,GAAA,CAAI,IAAA;AAAA,cACd,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,cAC1C,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA;AAAA,cAC1D,KAAA,EAAO;AAAA,gBACH,UAAA;AAAA,gBACA,SAAA;AAAA,gBACA,cAAA;AAAA,gBACA;AAAA,kBACI,WAAA,EAAa,MAAA;AAAA,kBACb,YAAA,EAAc,EAAE,KAAA,EAAO,CAAA,EAAG,QAAQ,EAAA,EAAG;AAAA,kBACrC,aAAA,EAAe,IAAA;AAAA,kBACf,YAAA,EAAc,EAAA;AAAA,kBACd,SAAA,EAAW,EAAA;AAAA,kBACX,GAAI,GAAA,CAAI,IAAA,KAAS,QAAA,GAAW,EAAE,qBAAqB,EAAA,EAAI,oBAAA,EAAsB,EAAA,EAAG,GAAI,EAAC;AAAA,kBACrF,GAAI,GAAA,CAAI,IAAA,KAAS,KAAA,GAAQ,EAAE,wBAAwB,EAAA,EAAI,uBAAA,EAAyB,EAAA,EAAG,GAAI;AAAC;AAC5F,eACJ;AAAA,cAEC;AAAA;AAAA;AACL;AAAA;AACJ;AAAA,GACJ;AAER,CAAA,EApM0B,YAAA;AAwMnB,IAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,SAAA,EAAW;AAAA,EAC1C,OAAA,EAAS,YAAA;AAAA,EACT,KAAA,EAAO,UAAA;AAAA,EACP,MAAA,EAAQ,WAAA;AAAA,EACR,KAAA,EAAO,UAAA;AAAA,EACP,WAAA,EAAa,gBAAA;AAAA,EACb,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,WAAA;AAAA,EACR,KAAA,EAAO;AACX,CAAC;AAEM,IAAM,MAAA,GAAS;AAItB,SAAS,mBAAmB,IAAA,EAAyB;AACjD,EAAA,QAAQ,IAAA;AAAM,IACV,KAAK,QAAA;AACD,MAAA,OAAO,kBAAA;AAAA,IACX,KAAK,KAAA;AACD,MAAA,OAAO,mBAAA;AAAA,IACX,KAAK,MAAA;AACD,MAAA,OAAO,mBAAA;AAAA,IACX,KAAK,OAAA;AACD,MAAA,OAAO,kBAAA;AAAA;AAEnB;AAXS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA","file":"chunk-SF6WPUC5.js","sourcesContent":["'use client';\n\n/**\n * Shared Sheet internals — context, types, root, trigger, and structural\n * subcomponents (Header, Title, Description, Body, Footer, Close).\n *\n * Imported by both `Sheet.tsx` (native) and `Sheet.web.tsx` (web) to avoid\n * duplication. The panel surface (`SheetPanel`) is platform-specific and\n * lives in each of those files.\n */\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type SheetSide = 'top' | 'right' | 'bottom' | 'left';\n\nexport type SheetSize = 'sm' | 'md' | 'lg' | 'full' | number;\n\nexport type SheetProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n /**\n * Edge the sheet slides in from.\n * @defaultValue 'bottom'\n */\n side?: SheetSide;\n /**\n * Panel size: preset key or an explicit pixel value.\n * - 'sm' → 25% of viewport height/width\n * - 'md' → 50%\n * - 'lg' → 75%\n * - 'full' → 100%\n * - number → explicit px value\n * @defaultValue 'md'\n */\n size?: SheetSize;\n /**\n * Whether tapping the backdrop closes the sheet.\n * @defaultValue true\n */\n dismissible?: boolean;\n children?: ReactNode;\n};\n\nexport type SheetContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n titleId: string;\n descriptionId: string;\n triggerRef: { current: HTMLElement | null };\n side: SheetSide;\n size: SheetSize;\n dismissible: boolean;\n};\n\n// ─── Size helpers ─────────────────────────────────────────────────────────────\n\nexport const SIZE_PERCENT: Record<Exclude<SheetSize, number>, string> = {\n sm: '25%',\n md: '50%',\n lg: '75%',\n full: '100%',\n};\n\nexport function resolveSizeValue(size: SheetSize): string | number {\n if (typeof size === 'number') {\n return size;\n }\n return SIZE_PERCENT[size];\n}\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nexport const SheetContext = createContext<SheetContextValue | null>(null);\n\nexport const useSheetContext = (label: string): SheetContextValue => {\n const ctx = useContext(SheetContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Sheet>.`);\n }\n return ctx;\n};\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nexport const SheetRoot = ({\n open,\n defaultOpen = false,\n onOpenChange,\n side = 'bottom',\n size = 'md',\n dismissible = true,\n children,\n}: SheetProps) => {\n const [inner, setInner] = useState<boolean>(defaultOpen);\n const isControlled = open !== undefined;\n const current = isControlled ? open : inner;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInner(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const baseId = useId();\n const triggerRef = useRef<HTMLElement | null>(null);\n\n const ctxValue: SheetContextValue = {\n open: current,\n setOpen,\n titleId: `${baseId}-title`,\n descriptionId: `${baseId}-description`,\n triggerRef,\n side,\n size,\n dismissible,\n };\n\n return <SheetContext.Provider value={ctxValue}>{children}</SheetContext.Provider>;\n};\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n\nexport type SheetTriggerProps = {\n /** Render the child as the trigger (Slot pattern). @defaultValue true */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const SheetTrigger = ({ asChild = true, children, className, testID }: SheetTriggerProps) => {\n const ctx = useSheetContext('SheetTrigger');\n const onPress = useCallback(() => ctx.setOpen(true), [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n ctx.setOpen(true);\n };\n return (\n <Slot\n ref={(node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }}\n onClick={fire(child.props.onClick as ((e: unknown) => void) | undefined)}\n onPress={fire(child.props.onPress as ((e: unknown) => void) | undefined)}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <Pressable\n ref={(node) => {\n ctx.triggerRef.current = node as unknown as HTMLElement | null;\n }}\n onPress={onPress}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {wrapStringChildren(children)}\n </Pressable>\n );\n};\n\n// ─── Header ───────────────────────────────────────────────────────────────────\n\nexport type SheetHeaderProps = { children?: ReactNode; className?: string };\n\nexport const SheetHeader = ({ children, className }: SheetHeaderProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('flex-col gap-1', className)}\n style={{\n flexDirection: 'column',\n gap: px(colors.spacing['1']),\n paddingHorizontal: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['6']),\n paddingBottom: px(colors.spacing['2']),\n }}\n >\n {children}\n </View>\n );\n};\n\n// ─── Title ────────────────────────────────────────────────────────────────────\n\nexport type SheetTitleProps = { children?: ReactNode; className?: string };\n\nexport const SheetTitle = ({ children, className }: SheetTitleProps) => {\n const ctx = useSheetContext('SheetTitle');\n const colors = useThemeColors();\n return (\n <RNText\n nativeID={ctx.titleId}\n id={ctx.titleId}\n role=\"heading\"\n aria-level={2}\n className={cn('text-lg font-semibold text-semantic-text-default', className)}\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.display,\n fontSize: px(colors.fontSize.lg),\n fontWeight: colors.fontWeight.semibold as '600',\n }}\n >\n {children}\n </RNText>\n );\n};\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nexport type SheetDescriptionProps = { children?: ReactNode; className?: string };\n\nexport const SheetDescription = ({ children, className }: SheetDescriptionProps) => {\n const ctx = useSheetContext('SheetDescription');\n const colors = useThemeColors();\n return (\n <RNText\n nativeID={ctx.descriptionId}\n id={ctx.descriptionId}\n className={cn('text-sm text-semantic-text-muted', className)}\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.sm) * Number(colors.lineHeight.normal),\n }}\n >\n {children}\n </RNText>\n );\n};\n\n// ─── Body ─────────────────────────────────────────────────────────────────────\n\nexport type SheetBodyProps = { children?: ReactNode; className?: string };\n\nexport const SheetBody = ({ children, className }: SheetBodyProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('flex-1', className)}\n style={{\n flex: 1,\n paddingHorizontal: px(colors.spacing['6']),\n paddingVertical: px(colors.spacing['4']),\n }}\n >\n {children}\n </View>\n );\n};\n\n// ─── Footer ───────────────────────────────────────────────────────────────────\n\nexport type SheetFooterProps = { children?: ReactNode; className?: string };\n\nexport const SheetFooter = ({ children, className }: SheetFooterProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('flex-row items-center justify-end gap-2', className)}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['6']),\n paddingBottom: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['2']),\n }}\n >\n {children}\n </View>\n );\n};\n\n// ─── Close ────────────────────────────────────────────────────────────────────\n\nexport type SheetCloseProps = {\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n accessibilityLabel?: string;\n};\n\nexport const SheetClose = ({\n asChild = true,\n children,\n className,\n testID,\n accessibilityLabel = 'Close',\n}: SheetCloseProps) => {\n const ctx = useSheetContext('SheetClose');\n const onPress = useCallback(() => ctx.setOpen(false), [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n ctx.setOpen(false);\n };\n return (\n <Slot\n onClick={fire(child.props.onClick as ((e: unknown) => void) | undefined)}\n onPress={fire(child.props.onPress as ((e: unknown) => void) | undefined)}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <Pressable\n onPress={onPress}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n aria-label={accessibilityLabel}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {wrapStringChildren(children)}\n </Pressable>\n );\n};\n\n// ─── Utilities ────────────────────────────────────────────────────────────────\n\nexport function wrapStringChildren(children: ReactNode): ReactNode {\n if (typeof children === 'string' || typeof children === 'number') {\n return <RNText>{children}</RNText>;\n }\n return children;\n}\n\nexport type SheetPanelProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n","'use client';\n\n/**\n * Sheet — default (native) implementation.\n *\n * Metro resolves `.native.tsx` over `.tsx` so on native builds, `Sheet.native.tsx`\n * wins. On web, `Sheet.web.tsx` wins. This file serves as the fallback for\n * environments that don't apply platform extensions (plain Node / jest node project).\n *\n * Shared context, types, and structural subcomponents live in `Sheet.shared.tsx`.\n * The `SheetPanel` here uses RN Modal with Platform.OS guards for web CSS\n * transitions and native slide animation.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Modal, Platform, Pressable } from 'react-native';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport {\n SheetBody,\n SheetClose,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n type SheetPanelProps,\n SheetRoot,\n type SheetSide,\n SheetTitle,\n SheetTrigger,\n SIZE_PERCENT,\n useSheetContext,\n} from './Sheet.shared';\n\nexport {\n SheetBody,\n SheetClose,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n type SheetPanelProps,\n type SheetProps,\n type SheetSide,\n type SheetSize,\n SheetTitle,\n SheetTrigger,\n} from './Sheet.shared';\n\n// ─── Panel ────────────────────────────────────────────────────────────────────\n\nconst SCRIM_COLOR = 'rgba(0, 0, 0, 0.40)';\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport const SheetPanel = ({ children, className, testID }: SheetPanelProps) => {\n const ctx = useSheetContext('SheetPanel');\n const colors = useThemeColors();\n const panelRef = useRef<HTMLDivElement | null>(null);\n const overlayDomRef = useRef<HTMLElement | null>(null);\n\n const [entered, setEntered] = useState(false);\n\n useEffect(() => {\n if (Platform.OS !== 'web') {\n setEntered(true);\n return;\n }\n if (!ctx.open) {\n setEntered(false);\n return;\n }\n const id = requestAnimationFrame(() => setEntered(true));\n return () => cancelAnimationFrame(id);\n }, [ctx.open]);\n\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n const node = overlayDomRef.current;\n if (!node) {\n return;\n }\n node.style.transitionProperty = 'background-color';\n node.style.transitionDuration = '200ms';\n node.style.transitionTimingFunction = 'ease-out';\n node.style.backgroundColor = entered ? SCRIM_COLOR : 'rgba(0,0,0,0)';\n }, [entered]);\n\n useEffect(() => {\n if (!ctx.open || Platform.OS !== 'web' || typeof document === 'undefined') {\n return;\n }\n const previouslyFocused = document.activeElement as HTMLElement | null;\n const prevBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n const focusFirst = () => {\n const node = panelRef.current;\n if (!node) {\n return;\n }\n const focusable = node.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR);\n const first = focusable[0];\n if (first) {\n first.focus();\n } else {\n node.setAttribute('tabindex', '-1');\n node.focus();\n }\n };\n focusFirst();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n ctx.setOpen(false);\n return;\n }\n if (event.key !== 'Tab') {\n return;\n }\n const node = panelRef.current;\n if (!node) {\n return;\n }\n const focusable = Array.from(node.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => el.offsetParent !== null || el === document.activeElement\n );\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (!first || !last) {\n return;\n }\n if (event.shiftKey) {\n if (document.activeElement === first || !node.contains(document.activeElement)) {\n event.preventDefault();\n last.focus();\n }\n } else if (document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n document.body.style.overflow = prevBodyOverflow;\n const restoreTo = ctx.triggerRef.current ?? previouslyFocused;\n restoreTo?.focus?.();\n };\n }, [ctx.open, ctx.setOpen, ctx.triggerRef]);\n\n const onBackdropPress = useCallback(() => {\n if (ctx.dismissible) {\n ctx.setOpen(false);\n }\n }, [ctx]);\n\n const isHorizontal = ctx.side === 'left' || ctx.side === 'right';\n const dim = typeof ctx.size === 'number' ? ctx.size : SIZE_PERCENT[ctx.size];\n\n const panelStyle: ViewStyle = {\n position: 'absolute',\n backgroundColor: colors.semantic.background.elevated,\n ...(isHorizontal ? { top: 0, bottom: 0 } : { left: 0, right: 0 }),\n ...(ctx.side === 'bottom' && { bottom: 0 }),\n ...(ctx.side === 'top' && { top: 0 }),\n ...(ctx.side === 'left' && { left: 0 }),\n ...(ctx.side === 'right' && { right: 0 }),\n };\n\n const translateStyle: ViewStyle =\n Platform.OS === 'web'\n ? ({\n transform: entered ? 'translateX(0) translateY(0)' : translateOffscreen(ctx.side),\n transitionProperty: 'transform',\n transitionDuration: '280ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n } as unknown as ViewStyle)\n : {};\n\n const overlayStyle: ViewStyle = {\n position: Platform.OS === 'web' ? ('fixed' as unknown as 'absolute') : 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n ...(Platform.OS === 'web' ? ({ zIndex: 50 } as ViewStyle) : { backgroundColor: SCRIM_COLOR }),\n };\n\n const sizeStyle = isHorizontal\n ? { width: dim, height: '100%' as unknown as number }\n : { height: dim, width: '100%' as unknown as number };\n\n return (\n <Modal\n visible={ctx.open}\n transparent\n animationType={\n Platform.OS === 'web' ? 'none' : ctx.side === 'bottom' || ctx.side === 'top' ? 'slide' : 'fade'\n }\n onRequestClose={() => ctx.setOpen(false)}\n >\n <Pressable\n accessibilityRole=\"none\"\n aria-hidden={true}\n ref={(node) => {\n overlayDomRef.current = node as unknown as HTMLElement | null;\n }}\n style={overlayStyle}\n onPress={onBackdropPress}\n >\n <Pressable\n onPress={(event) => event.stopPropagation?.()}\n ref={(node) => {\n panelRef.current = node as unknown as HTMLDivElement | null;\n }}\n role=\"dialog\"\n accessibilityRole=\"none\"\n aria-modal={true}\n aria-labelledby={ctx.titleId}\n aria-describedby={ctx.descriptionId}\n data-side={ctx.side}\n {...(testID !== undefined ? { testID } : {})}\n className={cn('bg-semantic-background-elevated', className)}\n style={[\n panelStyle,\n sizeStyle as ViewStyle,\n translateStyle,\n {\n shadowColor: '#000',\n shadowOffset: { width: 0, height: -2 },\n shadowOpacity: 0.15,\n shadowRadius: 20,\n elevation: 24,\n ...(ctx.side === 'bottom' ? { borderTopLeftRadius: 16, borderTopRightRadius: 16 } : {}),\n ...(ctx.side === 'top' ? { borderBottomLeftRadius: 16, borderBottomRightRadius: 16 } : {}),\n },\n ]}\n >\n {children}\n </Pressable>\n </Pressable>\n </Modal>\n );\n};\n\n// ─── Compound export ──────────────────────────────────────────────────────────\n\nexport const Sheet = Object.assign(SheetRoot, {\n Trigger: SheetTrigger,\n Panel: SheetPanel,\n Header: SheetHeader,\n Title: SheetTitle,\n Description: SheetDescription,\n Body: SheetBody,\n Footer: SheetFooter,\n Close: SheetClose,\n});\n\nexport const Drawer = Sheet;\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction translateOffscreen(side: SheetSide): string {\n switch (side) {\n case 'bottom':\n return 'translateY(100%)';\n case 'top':\n return 'translateY(-100%)';\n case 'left':\n return 'translateX(-100%)';\n case 'right':\n return 'translateX(100%)';\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { cn } from './chunk-CHXHRJNZ.js';
2
1
  import { px } from './chunk-5A2QOOVN.js';
3
2
  import { useThemeColors } from './chunk-R5JMDDCB.js';
3
+ import { cn } from './chunk-CHXHRJNZ.js';
4
4
  import { __name } from './chunk-WCQVDF3K.js';
5
5
  import { createContext, useState, useCallback, useRef, useEffect, useMemo, useContext } from 'react';
6
6
  import { View, Pressable, Text } from 'react-native';
@@ -442,5 +442,5 @@ var Toggle = Object.assign(ToggleRoot, {
442
442
  });
443
443
 
444
444
  export { Toggle };
445
- //# sourceMappingURL=chunk-SINLREQV.js.map
446
- //# sourceMappingURL=chunk-SINLREQV.js.map
445
+ //# sourceMappingURL=chunk-STX5UKYT.js.map
446
+ //# sourceMappingURL=chunk-STX5UKYT.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Toggle/Toggle.tsx"],"names":["RNText","current"],"mappings":"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","file":"chunk-SINLREQV.js","sourcesContent":["'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport {\n createContext,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n useCallback,\n useContext,\n useEffect,\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 ToggleVariant = 'default' | 'outline';\nexport type ToggleSize = 'sm' | 'md' | 'lg';\n\ntype SizeTokens = {\n height: number; // component-density literal — not from theme\n paddingHKey: keyof Theme['spacing'];\n fontKey: keyof Theme['fontSize'];\n iconSize: number; // component-density literal — not from theme\n};\n\n// Heights and icon sizes are intentionally hardcoded — they're tightly\n// coupled to the toggle's overall density. PaddingH and fontSize are\n// pulled from the active theme so a custom theme that scales the\n// spacing / fontSize ramps also scales every Toggle on the page.\nconst SIZE_TOKENS: Record<ToggleSize, SizeTokens> = {\n sm: { height: 32, paddingHKey: '2', fontKey: 'sm', iconSize: 14 }, // 8px (closest to legacy 10) / fontSize sm 14\n md: { height: 40, paddingHKey: '3', fontKey: 'sm', iconSize: 16 }, // 12px / fontSize sm 14\n lg: { height: 48, paddingHKey: '4', fontKey: 'md', iconSize: 20 }, // 16px / fontSize md 16\n};\n\n// ---------- standalone <Toggle> -----------------------------------------------\n\nexport type ToggleProps = {\n /** Controlled pressed state. Pair with `onChange`. */\n pressed?: boolean;\n /** Uncontrolled initial pressed state. Ignored when `pressed` is provided. */\n defaultPressed?: boolean;\n /** Fires with the next pressed state when the user toggles. */\n onChange?: (next: boolean) => void;\n /**\n * Visual treatment.\n * - `default` — transparent when off, filled with `interactive.primary` when on.\n * - `outline` — bordered when off, tinted background + accent border when on.\n * @defaultValue 'default'\n */\n variant?: ToggleVariant;\n /** @defaultValue 'md' */\n size?: ToggleSize;\n /** Group-level disable (also forwarded by `<ToggleGroup>` to its items). */\n disabled?: boolean;\n /** Visible label or icon content. */\n children?: ReactNode;\n /** Required when `children` is icon-only. */\n 'aria-label'?: string;\n accessibilityLabel?: string;\n className?: string;\n testID?: string;\n};\n\n/**\n * A two-state button — like the bold / italic buttons in a rich-text\n * toolbar. Use `<Toggle>` standalone for a single bistable action; reach\n * for `<ToggleGroup>` when you need a clustered set with shared selection\n * semantics.\n *\n * Reach for `<Switch>` instead when the control flips a setting in a form\n * (a \"darkmode on/off\" preference). Reach for `<Checkbox>` when the\n * control selects a value inside a form. `<Toggle>` is for buttons that\n * carry an on/off visual.\n */\nconst ToggleRoot = ({\n pressed,\n defaultPressed = false,\n onChange,\n variant = 'default',\n size = 'md',\n disabled = false,\n children,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n className,\n testID,\n}: ToggleProps) => {\n const [inner, setInner] = useState<boolean>(defaultPressed);\n const isControlled = pressed !== undefined;\n const isOn = isControlled ? Boolean(pressed) : inner;\n\n const handlePress = useCallback(() => {\n if (disabled) {\n return;\n }\n const next = !isOn;\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n }, [disabled, isControlled, isOn, onChange]);\n\n return (\n <ToggleVisual\n isOn={isOn}\n disabled={disabled}\n variant={variant}\n size={size}\n onPress={handlePress}\n ariaLabel={ariaLabel ?? accessibilityLabel}\n className={className}\n testID={testID}\n >\n {children}\n </ToggleVisual>\n );\n};\n\n// ---------- shared visual -----------------------------------------------------\n\ntype ToggleVisualProps = {\n isOn: boolean;\n disabled: boolean;\n variant: ToggleVariant;\n size: ToggleSize;\n onPress: () => void;\n onKeyDown?: ((event: KeyboardEvent<HTMLElement>) => void) | undefined;\n onFocus?: (() => void) | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n testID?: string | undefined;\n children?: ReactNode | undefined;\n /**\n * Group-aware roving tabindex. `undefined` means \"the natural tab\n * stop\" (standalone Toggle); inside a group, a number is supplied.\n */\n tabIndex?: number | undefined;\n /** Border-radius override for grouped items (square middle, rounded ends). */\n borderRadius?: number | { topLeft: number; topRight: number; bottomLeft: number; bottomRight: number } | undefined;\n /** Suppress the right border so adjacent items share a single seam. */\n suppressRightBorder?: boolean | undefined;\n /** Force the bordered look (used by grouped `default` items so the row reads as one chip). */\n forceBorder?: boolean | undefined;\n refCallback?: ((node: HTMLElement | null) => void) | undefined;\n};\n\nconst ToggleVisual = ({\n isOn,\n disabled,\n variant,\n size,\n onPress,\n onKeyDown,\n onFocus,\n ariaLabel,\n className,\n testID,\n children,\n tabIndex,\n borderRadius,\n suppressRightBorder,\n forceBorder,\n refCallback,\n}: ToggleVisualProps) => {\n const colors = useThemeColors();\n const tokens = SIZE_TOKENS[size];\n const paddingH = px(colors.spacing[tokens.paddingHKey]);\n const fontSize = px(colors.fontSize[tokens.fontKey]);\n\n const radiusEach = borderRadius && typeof borderRadius !== 'number' ? borderRadius : undefined;\n const radiusValue = typeof borderRadius === 'number' ? borderRadius : radiusEach ? undefined : px(colors.radius.md);\n\n const baseStyle: ViewStyle = {\n height: tokens.height,\n paddingHorizontal: paddingH,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: px(colors.spacing['2']) - 2, // closest theme-rooted approximation of legacy 6\n ...(radiusValue !== undefined ? { borderRadius: radiusValue } : null),\n ...(radiusEach\n ? {\n borderTopLeftRadius: radiusEach.topLeft,\n borderTopRightRadius: radiusEach.topRight,\n borderBottomLeftRadius: radiusEach.bottomLeft,\n borderBottomRightRadius: radiusEach.bottomRight,\n }\n : null),\n // 200ms color/background transition. Web only; native ignores it.\n ...({\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: '200ms',\n transitionTimingFunction: 'ease',\n } as ViewStyle),\n };\n\n const surfaceFor = (hovered: boolean): ViewStyle => {\n if (variant === 'outline' || forceBorder) {\n return {\n backgroundColor: isOn\n ? variant === 'outline'\n ? colors.semantic.background.subtle\n : colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.background.subtle\n : 'transparent',\n borderWidth: 1,\n borderColor: isOn ? colors.semantic.interactive.primary : colors.semantic.border.default,\n ...(suppressRightBorder ? { borderRightWidth: 0 } : null),\n };\n }\n // Default variant, standalone — give the off state a subtle\n // resting bg + 1px border so the control reads as a button. The\n // earlier \"transparent off\" look only made sense inside a group\n // where the cluster's shared seams told the eye \"this is a row of\n // buttons\"; standalone it just looked like text.\n return {\n backgroundColor: isOn\n ? colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.background.subtle\n : colors.semantic.background.elevated,\n borderWidth: 1,\n borderColor: isOn ? colors.semantic.interactive.primary : colors.semantic.border.default,\n };\n };\n\n // Text color: inverted on the filled-on surface, accent-colored on the\n // outline-on surface, default text otherwise.\n const textColor =\n variant === 'outline'\n ? isOn\n ? colors.semantic.interactive.primary\n : colors.semantic.text.default\n : isOn\n ? colors.semantic.text.inverted\n : colors.semantic.text.default;\n\n const accessibilityProps: Record<string, unknown> = {\n role: 'button',\n accessibilityRole: 'button',\n 'aria-pressed': isOn,\n accessibilityState: { selected: isOn, disabled },\n ...(ariaLabel ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n ...(disabled ? { 'aria-disabled': true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n ...(tabIndex !== undefined ? { tabIndex } : {}),\n ...(onKeyDown ? { onKeyDown } : {}),\n ...(onFocus ? { onFocus } : {}),\n };\n\n // RN-Web's Pressable on web doesn't reliably invoke the style callback\n // (the hovered/pressed state isn't always wired through to a re-render\n // — at least in the version we ship against). Compute the static style\n // upfront with `hovered=false` and overlay a `:hover` color via CSS\n // class for the off-state hover. Active-state hover is for outline\n // variant only and doesn't change the look enough to justify the\n // complexity of a style-callback path here.\n const surfaceStatic = surfaceFor(false);\n\n return (\n <Pressable\n ref={(node: unknown) => {\n refCallback?.(node as HTMLElement | null);\n }}\n disabled={disabled}\n onPress={() => {\n if (!disabled) {\n onPress();\n }\n }}\n {...accessibilityProps}\n className={cn(\n 'inline-flex flex-row items-center justify-center select-none',\n disabled ? 'opacity-50' : undefined,\n className\n )}\n style={[baseStyle, surfaceStatic, disabled ? { opacity: 0.5 } : null]}\n >\n {/* Always wrap children in an RNText so the dynamic\n * `textColor` (inverted on the on-state surface, default\n * otherwise) reaches both string children and arbitrary\n * inline elements (B/I/U spans, lucide icons, etc.) via\n * CSS color inheritance. Without this wrapper, non-string\n * children render with their parent's color regardless of\n * selected state — so an italic \"I\" stays dark on the\n * dark filled-on background and disappears.\n */}\n <RNText\n style={{\n color: textColor,\n fontFamily: colors.fontFamily.body,\n fontSize,\n fontWeight: colors.fontWeight.medium as '500',\n }}\n >\n {children}\n </RNText>\n </Pressable>\n );\n};\n\n// ---------- <ToggleGroup> + context ------------------------------------------\n\ntype ToggleGroupContextValue = {\n type: 'single' | 'multiple';\n setValue: (value: string) => void;\n isPressed: (value: string) => boolean;\n disabled: boolean;\n variant: ToggleVariant;\n size: ToggleSize;\n register: (value: string, ref: RefObject<HTMLElement | null>) => void;\n unregister: (value: string) => void;\n rovingValue: string | undefined;\n setRovingValue: (next: string) => void;\n moveBy: (delta: 1 | -1, current: string) => void;\n moveTo: (position: 'first' | 'last') => void;\n /** Live ordered list of registered item values — drives border math. */\n order: string[];\n};\n\nconst ToggleGroupContext = createContext<ToggleGroupContextValue | null>(null);\n\nconst useToggleGroupContext = () => {\n const ctx = useContext(ToggleGroupContext);\n if (!ctx) {\n throw new Error('<ToggleGroupItem> must be rendered inside a <ToggleGroup>.');\n }\n return ctx;\n};\n\ntype ToggleGroupCommonProps = {\n /** Group-level disable. Each item's `disabled` is OR-ed with this. */\n disabled?: boolean;\n /** @defaultValue 'default' */\n variant?: ToggleVariant;\n /** @defaultValue 'md' */\n size?: ToggleSize;\n children?: ReactNode;\n className?: string;\n testID?: string;\n 'aria-label'?: string;\n accessibilityLabel?: string;\n};\n\nexport type ToggleGroupSingleProps = ToggleGroupCommonProps & {\n /** Multi-select gives an array; single-select gives a string (or undefined). */\n type: 'single';\n // `| undefined` is intentional under exactOptionalPropertyTypes — clicking\n // the active item clears the selection, so consumers MUST be allowed to\n // pass `undefined` as the controlled value, not just omit the prop.\n value?: string | undefined;\n defaultValue?: string | undefined;\n onChange?: (next: string | undefined) => void;\n};\n\nexport type ToggleGroupMultipleProps = ToggleGroupCommonProps & {\n type: 'multiple';\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onChange?: (next: string[]) => void;\n};\n\nexport type ToggleGroupProps = ToggleGroupSingleProps | ToggleGroupMultipleProps;\n\n/**\n * Cluster of `<ToggleGroupItem>`s with shared selection semantics.\n *\n * - `type=\"multiple\"` — value is `string[]`. Clicking toggles a value\n * in/out of the array. ARIA exposes a plain `role=\"group\"`.\n * - `type=\"single\"` — value is `string | undefined`. Clicking sets it;\n * re-clicking the active one clears it. ARIA exposes `role=\"radiogroup\"`\n * so AT users hear \"1 of N selected\" semantics.\n *\n * Keyboard: `ArrowRight` / `ArrowLeft` move focus between items (roving\n * tabindex), `Home` / `End` jump to the ends, and `Space` / `Enter`\n * toggle the focused item.\n */\nexport const ToggleGroup = (props: ToggleGroupProps) => {\n const {\n type,\n disabled = false,\n variant = 'default',\n size = 'md',\n children,\n className,\n testID,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n } = props;\n\n // Controlled / uncontrolled state, branching on `type`.\n const [innerSingle, setInnerSingle] = useState<string | undefined>(\n type === 'single' ? (props as ToggleGroupSingleProps).defaultValue : undefined\n );\n const [innerMultiple, setInnerMultiple] = useState<string[]>(\n type === 'multiple' ? ((props as ToggleGroupMultipleProps).defaultValue ?? []) : []\n );\n\n const isSingle = type === 'single';\n const isControlled = isSingle\n ? (props as ToggleGroupSingleProps).value !== undefined\n : (props as ToggleGroupMultipleProps).value !== undefined;\n\n const setValue = useCallback(\n (next: string) => {\n if (disabled) {\n return;\n }\n if (isSingle) {\n const current = isControlled ? (props as ToggleGroupSingleProps).value : innerSingle;\n const updated = current === next ? undefined : next;\n if (!isControlled) {\n setInnerSingle(updated);\n }\n (props as ToggleGroupSingleProps).onChange?.(updated);\n } else {\n const current: string[] =\n (isControlled ? (props as ToggleGroupMultipleProps).value : innerMultiple) ?? [];\n const updated = current.includes(next) ? current.filter((v) => v !== next) : [...current, next];\n if (!isControlled) {\n setInnerMultiple(updated);\n }\n (props as ToggleGroupMultipleProps).onChange?.(updated);\n }\n },\n [disabled, isSingle, isControlled, innerSingle, innerMultiple, props]\n );\n\n const isPressed = useCallback(\n (v: string) => {\n if (isSingle) {\n const current = isControlled ? (props as ToggleGroupSingleProps).value : innerSingle;\n return current === v;\n }\n const current = (isControlled ? (props as ToggleGroupMultipleProps).value : innerMultiple) ?? [];\n return current.includes(v);\n },\n [isSingle, isControlled, innerSingle, innerMultiple, props]\n );\n\n // --- roving tabindex order management ---\n const refs = useRef<Map<string, RefObject<HTMLElement | null>>>(new Map());\n // Live ordered list — re-render the group whenever items register so\n // border math (first/last) and roving init see the current order.\n const [order, setOrder] = useState<string[]>([]);\n const [rovingValue, setRovingValueState] = useState<string | undefined>(undefined);\n\n const register = useCallback((v: string, ref: RefObject<HTMLElement | null>) => {\n refs.current.set(v, ref);\n setOrder((prev) => (prev.includes(v) ? prev : [...prev, v]));\n setRovingValueState((current) => current ?? v);\n }, []);\n\n const unregister = useCallback((v: string) => {\n refs.current.delete(v);\n setOrder((prev) => prev.filter((x) => x !== v));\n setRovingValueState((current) => (current === v ? undefined : current));\n }, []);\n\n const focusValue = useCallback((v: string) => {\n refs.current.get(v)?.current?.focus?.();\n }, []);\n\n const setRovingValue = useCallback((v: string) => setRovingValueState(v), []);\n\n const moveBy = useCallback(\n (delta: 1 | -1, current: string) => {\n const list = order;\n if (list.length === 0) {\n return;\n }\n const idx = list.indexOf(current);\n const start = idx === -1 ? 0 : idx;\n const next = list[(start + delta + list.length) % list.length];\n if (!next) {\n return;\n }\n setRovingValueState(next);\n focusValue(next);\n },\n [order, focusValue]\n );\n\n const moveTo = useCallback(\n (position: 'first' | 'last') => {\n const list = order;\n if (list.length === 0) {\n return;\n }\n const next = position === 'first' ? list[0] : list[list.length - 1];\n if (!next) {\n return;\n }\n setRovingValueState(next);\n focusValue(next);\n },\n [order, focusValue]\n );\n\n const ctxValue = useMemo<ToggleGroupContextValue>(\n () => ({\n type,\n setValue,\n isPressed,\n disabled,\n variant,\n size,\n register,\n unregister,\n rovingValue,\n setRovingValue,\n moveBy,\n moveTo,\n order,\n }),\n [\n type,\n setValue,\n isPressed,\n disabled,\n variant,\n size,\n register,\n unregister,\n rovingValue,\n setRovingValue,\n moveBy,\n moveTo,\n order,\n ]\n );\n\n const groupRole = isSingle ? 'radiogroup' : 'group';\n const label = ariaLabel ?? accessibilityLabel;\n\n const groupProps: Record<string, unknown> = {\n role: groupRole,\n accessibilityRole: groupRole,\n ...(label ? { 'aria-label': label, accessibilityLabel: label } : {}),\n ...(disabled ? { 'aria-disabled': true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n };\n\n // For the `default` variant we render items zero-gap so they share\n // borders, like a UISegmentedControl. For `outline` we keep a small\n // gap so the bordered cells don't double up their seams.\n const colors = useThemeColors();\n const containerStyle: ViewStyle =\n variant === 'default'\n ? { flexDirection: 'row', alignItems: 'stretch', gap: 0 }\n : { flexDirection: 'row', alignItems: 'stretch', gap: px(colors.spacing['1']) };\n\n return (\n <ToggleGroupContext.Provider value={ctxValue}>\n <View\n {...groupProps}\n className={cn(\n 'inline-flex flex-row items-stretch',\n variant === 'default' ? 'gap-0' : 'gap-1',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={[containerStyle, disabled ? { opacity: 0.6 } : null]}\n >\n {children}\n </View>\n </ToggleGroupContext.Provider>\n );\n};\n\nexport type ToggleGroupItemProps = {\n /** Unique identifier within the group — written into `value` when pressed. */\n value: string;\n /** Disable just this item (OR-ed with group-level `disabled`). */\n disabled?: boolean;\n children?: ReactNode;\n 'aria-label'?: string;\n accessibilityLabel?: string;\n className?: string;\n testID?: string;\n};\n\n/**\n * One toggle inside a `<ToggleGroup>`. Throws with a clear message when\n * rendered outside of one.\n */\nexport const ToggleGroupItem = ({\n value,\n disabled,\n children,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n className,\n testID,\n}: ToggleGroupItemProps) => {\n const ctx = useToggleGroupContext();\n const ownRef = useRef<HTMLElement | null>(null);\n // Capture register/unregister in a ref so the effect's deps stay\n // value-only — otherwise a new context object on every render (driven\n // by setOrder inside register) would re-fire the effect → setState\n // loop → \"Maximum update depth exceeded\".\n const registryRef = useRef({ register: ctx.register, unregister: ctx.unregister });\n registryRef.current = { register: ctx.register, unregister: ctx.unregister };\n\n useEffect(() => {\n // Read-through holder so the registered ref always sees the latest node.\n const holder: RefObject<HTMLElement | null> = {\n get current() {\n return ownRef.current;\n },\n set current(_v) {\n /* no-op — read-through to ownRef */\n },\n } as unknown as RefObject<HTMLElement | null>;\n registryRef.current.register(value, holder);\n return () => registryRef.current.unregister(value);\n }, [value]);\n\n const isOn = ctx.isPressed(value);\n const isDisabled = disabled || ctx.disabled;\n const isRoving = ctx.rovingValue === value;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown': {\n event.preventDefault();\n ctx.moveBy(1, value);\n return;\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n event.preventDefault();\n ctx.moveBy(-1, value);\n return;\n }\n case 'Home': {\n event.preventDefault();\n ctx.moveTo('first');\n return;\n }\n case 'End': {\n event.preventDefault();\n ctx.moveTo('last');\n return;\n }\n case ' ':\n case 'Enter': {\n event.preventDefault();\n if (!isDisabled) {\n ctx.setValue(value);\n }\n return;\n }\n }\n },\n [ctx, isDisabled, value]\n );\n\n const handleFocus = useCallback(() => {\n ctx.setRovingValue(value);\n }, [ctx, value]);\n\n // Items inside a `default`-variant group share borders: only the first\n // rounds the left, the last rounds the right; everything else is square.\n const colors = useThemeColors();\n const idx = ctx.order.indexOf(value);\n const isFirst = idx === 0;\n const isLast = idx === ctx.order.length - 1;\n const sharedRadius = px(colors.radius.md);\n const isClustered = ctx.order.length > 1;\n const borderRadius = isClustered\n ? {\n topLeft: isFirst ? sharedRadius : 0,\n bottomLeft: isFirst ? sharedRadius : 0,\n topRight: isLast ? sharedRadius : 0,\n bottomRight: isLast ? sharedRadius : 0,\n }\n : sharedRadius;\n\n return (\n <ToggleVisual\n isOn={isOn}\n disabled={Boolean(isDisabled)}\n variant={ctx.variant}\n size={ctx.size}\n onPress={() => ctx.setValue(value)}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n ariaLabel={ariaLabel ?? accessibilityLabel}\n className={className}\n testID={testID}\n tabIndex={isRoving ? 0 : -1}\n borderRadius={borderRadius}\n forceBorder={ctx.variant === 'default' && isClustered}\n suppressRightBorder={isClustered && !isLast}\n refCallback={(node) => {\n ownRef.current = node;\n }}\n >\n {children}\n </ToggleVisual>\n );\n};\n\n/**\n * Public `Toggle` value — the standalone toggle plus its `.Group` and `.Item`\n * static members. Use `<Toggle.Group>` to wrap a list of `<Toggle.Item>`s.\n *\n * `Object.assign` produces a value whose inferred type carries the static\n * properties, so `.d.ts` consumers can write `<Toggle.Group>` without a\n * separate import.\n */\nexport const Toggle = Object.assign(ToggleRoot, {\n Group: ToggleGroup,\n Item: ToggleGroupItem,\n});\n"]}
1
+ {"version":3,"sources":["../src/components/Toggle/Toggle.tsx"],"names":["RNText","current"],"mappings":"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","file":"chunk-STX5UKYT.js","sourcesContent":["'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport {\n createContext,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n useCallback,\n useContext,\n useEffect,\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 ToggleVariant = 'default' | 'outline';\nexport type ToggleSize = 'sm' | 'md' | 'lg';\n\ntype SizeTokens = {\n height: number; // component-density literal — not from theme\n paddingHKey: keyof Theme['spacing'];\n fontKey: keyof Theme['fontSize'];\n iconSize: number; // component-density literal — not from theme\n};\n\n// Heights and icon sizes are intentionally hardcoded — they're tightly\n// coupled to the toggle's overall density. PaddingH and fontSize are\n// pulled from the active theme so a custom theme that scales the\n// spacing / fontSize ramps also scales every Toggle on the page.\nconst SIZE_TOKENS: Record<ToggleSize, SizeTokens> = {\n sm: { height: 32, paddingHKey: '2', fontKey: 'sm', iconSize: 14 }, // 8px (closest to legacy 10) / fontSize sm 14\n md: { height: 40, paddingHKey: '3', fontKey: 'sm', iconSize: 16 }, // 12px / fontSize sm 14\n lg: { height: 48, paddingHKey: '4', fontKey: 'md', iconSize: 20 }, // 16px / fontSize md 16\n};\n\n// ---------- standalone <Toggle> -----------------------------------------------\n\nexport type ToggleProps = {\n /** Controlled pressed state. Pair with `onChange`. */\n pressed?: boolean;\n /** Uncontrolled initial pressed state. Ignored when `pressed` is provided. */\n defaultPressed?: boolean;\n /** Fires with the next pressed state when the user toggles. */\n onChange?: (next: boolean) => void;\n /**\n * Visual treatment.\n * - `default` — transparent when off, filled with `interactive.primary` when on.\n * - `outline` — bordered when off, tinted background + accent border when on.\n * @defaultValue 'default'\n */\n variant?: ToggleVariant;\n /** @defaultValue 'md' */\n size?: ToggleSize;\n /** Group-level disable (also forwarded by `<ToggleGroup>` to its items). */\n disabled?: boolean;\n /** Visible label or icon content. */\n children?: ReactNode;\n /** Required when `children` is icon-only. */\n 'aria-label'?: string;\n accessibilityLabel?: string;\n className?: string;\n testID?: string;\n};\n\n/**\n * A two-state button — like the bold / italic buttons in a rich-text\n * toolbar. Use `<Toggle>` standalone for a single bistable action; reach\n * for `<ToggleGroup>` when you need a clustered set with shared selection\n * semantics.\n *\n * Reach for `<Switch>` instead when the control flips a setting in a form\n * (a \"darkmode on/off\" preference). Reach for `<Checkbox>` when the\n * control selects a value inside a form. `<Toggle>` is for buttons that\n * carry an on/off visual.\n */\nconst ToggleRoot = ({\n pressed,\n defaultPressed = false,\n onChange,\n variant = 'default',\n size = 'md',\n disabled = false,\n children,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n className,\n testID,\n}: ToggleProps) => {\n const [inner, setInner] = useState<boolean>(defaultPressed);\n const isControlled = pressed !== undefined;\n const isOn = isControlled ? Boolean(pressed) : inner;\n\n const handlePress = useCallback(() => {\n if (disabled) {\n return;\n }\n const next = !isOn;\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n }, [disabled, isControlled, isOn, onChange]);\n\n return (\n <ToggleVisual\n isOn={isOn}\n disabled={disabled}\n variant={variant}\n size={size}\n onPress={handlePress}\n ariaLabel={ariaLabel ?? accessibilityLabel}\n className={className}\n testID={testID}\n >\n {children}\n </ToggleVisual>\n );\n};\n\n// ---------- shared visual -----------------------------------------------------\n\ntype ToggleVisualProps = {\n isOn: boolean;\n disabled: boolean;\n variant: ToggleVariant;\n size: ToggleSize;\n onPress: () => void;\n onKeyDown?: ((event: KeyboardEvent<HTMLElement>) => void) | undefined;\n onFocus?: (() => void) | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n testID?: string | undefined;\n children?: ReactNode | undefined;\n /**\n * Group-aware roving tabindex. `undefined` means \"the natural tab\n * stop\" (standalone Toggle); inside a group, a number is supplied.\n */\n tabIndex?: number | undefined;\n /** Border-radius override for grouped items (square middle, rounded ends). */\n borderRadius?: number | { topLeft: number; topRight: number; bottomLeft: number; bottomRight: number } | undefined;\n /** Suppress the right border so adjacent items share a single seam. */\n suppressRightBorder?: boolean | undefined;\n /** Force the bordered look (used by grouped `default` items so the row reads as one chip). */\n forceBorder?: boolean | undefined;\n refCallback?: ((node: HTMLElement | null) => void) | undefined;\n};\n\nconst ToggleVisual = ({\n isOn,\n disabled,\n variant,\n size,\n onPress,\n onKeyDown,\n onFocus,\n ariaLabel,\n className,\n testID,\n children,\n tabIndex,\n borderRadius,\n suppressRightBorder,\n forceBorder,\n refCallback,\n}: ToggleVisualProps) => {\n const colors = useThemeColors();\n const tokens = SIZE_TOKENS[size];\n const paddingH = px(colors.spacing[tokens.paddingHKey]);\n const fontSize = px(colors.fontSize[tokens.fontKey]);\n\n const radiusEach = borderRadius && typeof borderRadius !== 'number' ? borderRadius : undefined;\n const radiusValue = typeof borderRadius === 'number' ? borderRadius : radiusEach ? undefined : px(colors.radius.md);\n\n const baseStyle: ViewStyle = {\n height: tokens.height,\n paddingHorizontal: paddingH,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: px(colors.spacing['2']) - 2, // closest theme-rooted approximation of legacy 6\n ...(radiusValue !== undefined ? { borderRadius: radiusValue } : null),\n ...(radiusEach\n ? {\n borderTopLeftRadius: radiusEach.topLeft,\n borderTopRightRadius: radiusEach.topRight,\n borderBottomLeftRadius: radiusEach.bottomLeft,\n borderBottomRightRadius: radiusEach.bottomRight,\n }\n : null),\n // 200ms color/background transition. Web only; native ignores it.\n ...({\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: '200ms',\n transitionTimingFunction: 'ease',\n } as ViewStyle),\n };\n\n const surfaceFor = (hovered: boolean): ViewStyle => {\n if (variant === 'outline' || forceBorder) {\n return {\n backgroundColor: isOn\n ? variant === 'outline'\n ? colors.semantic.background.subtle\n : colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.background.subtle\n : 'transparent',\n borderWidth: 1,\n borderColor: isOn ? colors.semantic.interactive.primary : colors.semantic.border.default,\n ...(suppressRightBorder ? { borderRightWidth: 0 } : null),\n };\n }\n // Default variant, standalone — give the off state a subtle\n // resting bg + 1px border so the control reads as a button. The\n // earlier \"transparent off\" look only made sense inside a group\n // where the cluster's shared seams told the eye \"this is a row of\n // buttons\"; standalone it just looked like text.\n return {\n backgroundColor: isOn\n ? colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.background.subtle\n : colors.semantic.background.elevated,\n borderWidth: 1,\n borderColor: isOn ? colors.semantic.interactive.primary : colors.semantic.border.default,\n };\n };\n\n // Text color: inverted on the filled-on surface, accent-colored on the\n // outline-on surface, default text otherwise.\n const textColor =\n variant === 'outline'\n ? isOn\n ? colors.semantic.interactive.primary\n : colors.semantic.text.default\n : isOn\n ? colors.semantic.text.inverted\n : colors.semantic.text.default;\n\n const accessibilityProps: Record<string, unknown> = {\n role: 'button',\n accessibilityRole: 'button',\n 'aria-pressed': isOn,\n accessibilityState: { selected: isOn, disabled },\n ...(ariaLabel ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n ...(disabled ? { 'aria-disabled': true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n ...(tabIndex !== undefined ? { tabIndex } : {}),\n ...(onKeyDown ? { onKeyDown } : {}),\n ...(onFocus ? { onFocus } : {}),\n };\n\n // RN-Web's Pressable on web doesn't reliably invoke the style callback\n // (the hovered/pressed state isn't always wired through to a re-render\n // — at least in the version we ship against). Compute the static style\n // upfront with `hovered=false` and overlay a `:hover` color via CSS\n // class for the off-state hover. Active-state hover is for outline\n // variant only and doesn't change the look enough to justify the\n // complexity of a style-callback path here.\n const surfaceStatic = surfaceFor(false);\n\n return (\n <Pressable\n ref={(node: unknown) => {\n refCallback?.(node as HTMLElement | null);\n }}\n disabled={disabled}\n onPress={() => {\n if (!disabled) {\n onPress();\n }\n }}\n {...accessibilityProps}\n className={cn(\n 'inline-flex flex-row items-center justify-center select-none',\n disabled ? 'opacity-50' : undefined,\n className\n )}\n style={[baseStyle, surfaceStatic, disabled ? { opacity: 0.5 } : null]}\n >\n {/* Always wrap children in an RNText so the dynamic\n * `textColor` (inverted on the on-state surface, default\n * otherwise) reaches both string children and arbitrary\n * inline elements (B/I/U spans, lucide icons, etc.) via\n * CSS color inheritance. Without this wrapper, non-string\n * children render with their parent's color regardless of\n * selected state — so an italic \"I\" stays dark on the\n * dark filled-on background and disappears.\n */}\n <RNText\n style={{\n color: textColor,\n fontFamily: colors.fontFamily.body,\n fontSize,\n fontWeight: colors.fontWeight.medium as '500',\n }}\n >\n {children}\n </RNText>\n </Pressable>\n );\n};\n\n// ---------- <ToggleGroup> + context ------------------------------------------\n\ntype ToggleGroupContextValue = {\n type: 'single' | 'multiple';\n setValue: (value: string) => void;\n isPressed: (value: string) => boolean;\n disabled: boolean;\n variant: ToggleVariant;\n size: ToggleSize;\n register: (value: string, ref: RefObject<HTMLElement | null>) => void;\n unregister: (value: string) => void;\n rovingValue: string | undefined;\n setRovingValue: (next: string) => void;\n moveBy: (delta: 1 | -1, current: string) => void;\n moveTo: (position: 'first' | 'last') => void;\n /** Live ordered list of registered item values — drives border math. */\n order: string[];\n};\n\nconst ToggleGroupContext = createContext<ToggleGroupContextValue | null>(null);\n\nconst useToggleGroupContext = () => {\n const ctx = useContext(ToggleGroupContext);\n if (!ctx) {\n throw new Error('<ToggleGroupItem> must be rendered inside a <ToggleGroup>.');\n }\n return ctx;\n};\n\ntype ToggleGroupCommonProps = {\n /** Group-level disable. Each item's `disabled` is OR-ed with this. */\n disabled?: boolean;\n /** @defaultValue 'default' */\n variant?: ToggleVariant;\n /** @defaultValue 'md' */\n size?: ToggleSize;\n children?: ReactNode;\n className?: string;\n testID?: string;\n 'aria-label'?: string;\n accessibilityLabel?: string;\n};\n\nexport type ToggleGroupSingleProps = ToggleGroupCommonProps & {\n /** Multi-select gives an array; single-select gives a string (or undefined). */\n type: 'single';\n // `| undefined` is intentional under exactOptionalPropertyTypes — clicking\n // the active item clears the selection, so consumers MUST be allowed to\n // pass `undefined` as the controlled value, not just omit the prop.\n value?: string | undefined;\n defaultValue?: string | undefined;\n onChange?: (next: string | undefined) => void;\n};\n\nexport type ToggleGroupMultipleProps = ToggleGroupCommonProps & {\n type: 'multiple';\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onChange?: (next: string[]) => void;\n};\n\nexport type ToggleGroupProps = ToggleGroupSingleProps | ToggleGroupMultipleProps;\n\n/**\n * Cluster of `<ToggleGroupItem>`s with shared selection semantics.\n *\n * - `type=\"multiple\"` — value is `string[]`. Clicking toggles a value\n * in/out of the array. ARIA exposes a plain `role=\"group\"`.\n * - `type=\"single\"` — value is `string | undefined`. Clicking sets it;\n * re-clicking the active one clears it. ARIA exposes `role=\"radiogroup\"`\n * so AT users hear \"1 of N selected\" semantics.\n *\n * Keyboard: `ArrowRight` / `ArrowLeft` move focus between items (roving\n * tabindex), `Home` / `End` jump to the ends, and `Space` / `Enter`\n * toggle the focused item.\n */\nexport const ToggleGroup = (props: ToggleGroupProps) => {\n const {\n type,\n disabled = false,\n variant = 'default',\n size = 'md',\n children,\n className,\n testID,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n } = props;\n\n // Controlled / uncontrolled state, branching on `type`.\n const [innerSingle, setInnerSingle] = useState<string | undefined>(\n type === 'single' ? (props as ToggleGroupSingleProps).defaultValue : undefined\n );\n const [innerMultiple, setInnerMultiple] = useState<string[]>(\n type === 'multiple' ? ((props as ToggleGroupMultipleProps).defaultValue ?? []) : []\n );\n\n const isSingle = type === 'single';\n const isControlled = isSingle\n ? (props as ToggleGroupSingleProps).value !== undefined\n : (props as ToggleGroupMultipleProps).value !== undefined;\n\n const setValue = useCallback(\n (next: string) => {\n if (disabled) {\n return;\n }\n if (isSingle) {\n const current = isControlled ? (props as ToggleGroupSingleProps).value : innerSingle;\n const updated = current === next ? undefined : next;\n if (!isControlled) {\n setInnerSingle(updated);\n }\n (props as ToggleGroupSingleProps).onChange?.(updated);\n } else {\n const current: string[] =\n (isControlled ? (props as ToggleGroupMultipleProps).value : innerMultiple) ?? [];\n const updated = current.includes(next) ? current.filter((v) => v !== next) : [...current, next];\n if (!isControlled) {\n setInnerMultiple(updated);\n }\n (props as ToggleGroupMultipleProps).onChange?.(updated);\n }\n },\n [disabled, isSingle, isControlled, innerSingle, innerMultiple, props]\n );\n\n const isPressed = useCallback(\n (v: string) => {\n if (isSingle) {\n const current = isControlled ? (props as ToggleGroupSingleProps).value : innerSingle;\n return current === v;\n }\n const current = (isControlled ? (props as ToggleGroupMultipleProps).value : innerMultiple) ?? [];\n return current.includes(v);\n },\n [isSingle, isControlled, innerSingle, innerMultiple, props]\n );\n\n // --- roving tabindex order management ---\n const refs = useRef<Map<string, RefObject<HTMLElement | null>>>(new Map());\n // Live ordered list — re-render the group whenever items register so\n // border math (first/last) and roving init see the current order.\n const [order, setOrder] = useState<string[]>([]);\n const [rovingValue, setRovingValueState] = useState<string | undefined>(undefined);\n\n const register = useCallback((v: string, ref: RefObject<HTMLElement | null>) => {\n refs.current.set(v, ref);\n setOrder((prev) => (prev.includes(v) ? prev : [...prev, v]));\n setRovingValueState((current) => current ?? v);\n }, []);\n\n const unregister = useCallback((v: string) => {\n refs.current.delete(v);\n setOrder((prev) => prev.filter((x) => x !== v));\n setRovingValueState((current) => (current === v ? undefined : current));\n }, []);\n\n const focusValue = useCallback((v: string) => {\n refs.current.get(v)?.current?.focus?.();\n }, []);\n\n const setRovingValue = useCallback((v: string) => setRovingValueState(v), []);\n\n const moveBy = useCallback(\n (delta: 1 | -1, current: string) => {\n const list = order;\n if (list.length === 0) {\n return;\n }\n const idx = list.indexOf(current);\n const start = idx === -1 ? 0 : idx;\n const next = list[(start + delta + list.length) % list.length];\n if (!next) {\n return;\n }\n setRovingValueState(next);\n focusValue(next);\n },\n [order, focusValue]\n );\n\n const moveTo = useCallback(\n (position: 'first' | 'last') => {\n const list = order;\n if (list.length === 0) {\n return;\n }\n const next = position === 'first' ? list[0] : list[list.length - 1];\n if (!next) {\n return;\n }\n setRovingValueState(next);\n focusValue(next);\n },\n [order, focusValue]\n );\n\n const ctxValue = useMemo<ToggleGroupContextValue>(\n () => ({\n type,\n setValue,\n isPressed,\n disabled,\n variant,\n size,\n register,\n unregister,\n rovingValue,\n setRovingValue,\n moveBy,\n moveTo,\n order,\n }),\n [\n type,\n setValue,\n isPressed,\n disabled,\n variant,\n size,\n register,\n unregister,\n rovingValue,\n setRovingValue,\n moveBy,\n moveTo,\n order,\n ]\n );\n\n const groupRole = isSingle ? 'radiogroup' : 'group';\n const label = ariaLabel ?? accessibilityLabel;\n\n const groupProps: Record<string, unknown> = {\n role: groupRole,\n accessibilityRole: groupRole,\n ...(label ? { 'aria-label': label, accessibilityLabel: label } : {}),\n ...(disabled ? { 'aria-disabled': true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n };\n\n // For the `default` variant we render items zero-gap so they share\n // borders, like a UISegmentedControl. For `outline` we keep a small\n // gap so the bordered cells don't double up their seams.\n const colors = useThemeColors();\n const containerStyle: ViewStyle =\n variant === 'default'\n ? { flexDirection: 'row', alignItems: 'stretch', gap: 0 }\n : { flexDirection: 'row', alignItems: 'stretch', gap: px(colors.spacing['1']) };\n\n return (\n <ToggleGroupContext.Provider value={ctxValue}>\n <View\n {...groupProps}\n className={cn(\n 'inline-flex flex-row items-stretch',\n variant === 'default' ? 'gap-0' : 'gap-1',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={[containerStyle, disabled ? { opacity: 0.6 } : null]}\n >\n {children}\n </View>\n </ToggleGroupContext.Provider>\n );\n};\n\nexport type ToggleGroupItemProps = {\n /** Unique identifier within the group — written into `value` when pressed. */\n value: string;\n /** Disable just this item (OR-ed with group-level `disabled`). */\n disabled?: boolean;\n children?: ReactNode;\n 'aria-label'?: string;\n accessibilityLabel?: string;\n className?: string;\n testID?: string;\n};\n\n/**\n * One toggle inside a `<ToggleGroup>`. Throws with a clear message when\n * rendered outside of one.\n */\nexport const ToggleGroupItem = ({\n value,\n disabled,\n children,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n className,\n testID,\n}: ToggleGroupItemProps) => {\n const ctx = useToggleGroupContext();\n const ownRef = useRef<HTMLElement | null>(null);\n // Capture register/unregister in a ref so the effect's deps stay\n // value-only — otherwise a new context object on every render (driven\n // by setOrder inside register) would re-fire the effect → setState\n // loop → \"Maximum update depth exceeded\".\n const registryRef = useRef({ register: ctx.register, unregister: ctx.unregister });\n registryRef.current = { register: ctx.register, unregister: ctx.unregister };\n\n useEffect(() => {\n // Read-through holder so the registered ref always sees the latest node.\n const holder: RefObject<HTMLElement | null> = {\n get current() {\n return ownRef.current;\n },\n set current(_v) {\n /* no-op — read-through to ownRef */\n },\n } as unknown as RefObject<HTMLElement | null>;\n registryRef.current.register(value, holder);\n return () => registryRef.current.unregister(value);\n }, [value]);\n\n const isOn = ctx.isPressed(value);\n const isDisabled = disabled || ctx.disabled;\n const isRoving = ctx.rovingValue === value;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown': {\n event.preventDefault();\n ctx.moveBy(1, value);\n return;\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n event.preventDefault();\n ctx.moveBy(-1, value);\n return;\n }\n case 'Home': {\n event.preventDefault();\n ctx.moveTo('first');\n return;\n }\n case 'End': {\n event.preventDefault();\n ctx.moveTo('last');\n return;\n }\n case ' ':\n case 'Enter': {\n event.preventDefault();\n if (!isDisabled) {\n ctx.setValue(value);\n }\n return;\n }\n }\n },\n [ctx, isDisabled, value]\n );\n\n const handleFocus = useCallback(() => {\n ctx.setRovingValue(value);\n }, [ctx, value]);\n\n // Items inside a `default`-variant group share borders: only the first\n // rounds the left, the last rounds the right; everything else is square.\n const colors = useThemeColors();\n const idx = ctx.order.indexOf(value);\n const isFirst = idx === 0;\n const isLast = idx === ctx.order.length - 1;\n const sharedRadius = px(colors.radius.md);\n const isClustered = ctx.order.length > 1;\n const borderRadius = isClustered\n ? {\n topLeft: isFirst ? sharedRadius : 0,\n bottomLeft: isFirst ? sharedRadius : 0,\n topRight: isLast ? sharedRadius : 0,\n bottomRight: isLast ? sharedRadius : 0,\n }\n : sharedRadius;\n\n return (\n <ToggleVisual\n isOn={isOn}\n disabled={Boolean(isDisabled)}\n variant={ctx.variant}\n size={ctx.size}\n onPress={() => ctx.setValue(value)}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n ariaLabel={ariaLabel ?? accessibilityLabel}\n className={className}\n testID={testID}\n tabIndex={isRoving ? 0 : -1}\n borderRadius={borderRadius}\n forceBorder={ctx.variant === 'default' && isClustered}\n suppressRightBorder={isClustered && !isLast}\n refCallback={(node) => {\n ownRef.current = node;\n }}\n >\n {children}\n </ToggleVisual>\n );\n};\n\n/**\n * Public `Toggle` value — the standalone toggle plus its `.Group` and `.Item`\n * static members. Use `<Toggle.Group>` to wrap a list of `<Toggle.Item>`s.\n *\n * `Object.assign` produces a value whose inferred type carries the static\n * properties, so `.d.ts` consumers can write `<Toggle.Group>` without a\n * separate import.\n */\nexport const Toggle = Object.assign(ToggleRoot, {\n Group: ToggleGroup,\n Item: ToggleGroupItem,\n});\n"]}
@@ -1,5 +1,5 @@
1
- import { MenuLabel, MenuSeparator, MenuItem, MenuContextProvider, MenuContent } from './chunk-H7MFAFV4.js';
2
- import { Popover, usePopoverContext } from './chunk-L5X4SYJ4.js';
1
+ import { MenuLabel, MenuSeparator, MenuItem, MenuContextProvider, MenuContent } from './chunk-MK57AOTI.js';
2
+ import { Popover, usePopoverContext } from './chunk-HXCETKCC.js';
3
3
  import { Slot } from './chunk-ZIBNLXIV.js';
4
4
  import { __name } from './chunk-WCQVDF3K.js';
5
5
  import { createContext, useState, useCallback, isValidElement, useContext } from 'react';
@@ -130,5 +130,5 @@ var ContextMenu = Object.assign(ContextMenuRoot, {
130
130
  });
131
131
 
132
132
  export { ContextMenu };
133
- //# sourceMappingURL=chunk-KCLWPSV5.js.map
134
- //# sourceMappingURL=chunk-KCLWPSV5.js.map
133
+ //# sourceMappingURL=chunk-TSWPHJIU.js.map
134
+ //# sourceMappingURL=chunk-TSWPHJIU.js.map