@contractspec/lib.ui-kit 1.56.1 → 1.58.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 (480) hide show
  1. package/dist/browser/index.js +5 -0
  2. package/dist/browser/ui/accordion.js +160 -0
  3. package/dist/browser/ui/alert-dialog.js +205 -0
  4. package/dist/browser/ui/alert.js +85 -0
  5. package/dist/browser/ui/aspect-ratio.js +6 -0
  6. package/dist/browser/ui/atoms/FilterSelect/FilterSelect.js +527 -0
  7. package/dist/browser/ui/atoms/FilterSelect/index.js +527 -0
  8. package/dist/browser/ui/atoms/FilterSelect/types.js +0 -0
  9. package/dist/browser/ui/atoms/LoadingSpinner/LoadingSpinner.js +193 -0
  10. package/dist/browser/ui/atoms/LoadingSpinner/index.js +193 -0
  11. package/dist/browser/ui/atoms/Pagination/Pagination.js +442 -0
  12. package/dist/browser/ui/atoms/Pagination/index.js +442 -0
  13. package/dist/browser/ui/atoms/Pagination/types.js +0 -0
  14. package/dist/browser/ui/atoms/SearchInput/SearchInput.js +155 -0
  15. package/dist/browser/ui/atoms/SearchInput/index.js +155 -0
  16. package/dist/browser/ui/atoms/SearchInput/types.js +0 -0
  17. package/dist/browser/ui/avatar.js +37 -0
  18. package/dist/browser/ui/badge.js +28 -0
  19. package/dist/browser/ui/breadcrumb.js +102 -0
  20. package/dist/browser/ui/button.js +88 -0
  21. package/dist/browser/ui/card.js +90 -0
  22. package/dist/browser/ui/carousel.js +5 -0
  23. package/dist/browser/ui/checkbox.js +21 -0
  24. package/dist/browser/ui/collapsible.js +10 -0
  25. package/dist/browser/ui/command.js +5 -0
  26. package/dist/browser/ui/context-menu.js +214 -0
  27. package/dist/browser/ui/date-picker.js +85 -0
  28. package/dist/browser/ui/date-range-picker.js +348 -0
  29. package/dist/browser/ui/datetime-picker.js +439 -0
  30. package/dist/browser/ui/dialog.js +126 -0
  31. package/dist/browser/ui/dropdown-menu.js +218 -0
  32. package/dist/browser/ui/empty-state.js +411 -0
  33. package/dist/browser/ui/empty.js +71 -0
  34. package/dist/browser/ui/fab.js +141 -0
  35. package/dist/browser/ui/field.js +559 -0
  36. package/dist/browser/ui/form.js +150 -0
  37. package/dist/browser/ui/hover-card.js +57 -0
  38. package/dist/browser/ui/icons/Check.js +20 -0
  39. package/dist/browser/ui/icons/ChevronDown.js +20 -0
  40. package/dist/browser/ui/icons/ChevronRight.js +20 -0
  41. package/dist/browser/ui/icons/ChevronUp.js +20 -0
  42. package/dist/browser/ui/icons/CircleUser.js +20 -0
  43. package/dist/browser/ui/icons/Info.js +20 -0
  44. package/dist/browser/ui/icons/Key.js +20 -0
  45. package/dist/browser/ui/icons/MoonStar.js +20 -0
  46. package/dist/browser/ui/icons/Sun.js +20 -0
  47. package/dist/browser/ui/icons/X.js +20 -0
  48. package/dist/browser/ui/icons/iconWithClassName.js +16 -0
  49. package/dist/browser/ui/input.js +18 -0
  50. package/dist/browser/ui/label.js +32 -0
  51. package/dist/browser/ui/link.js +16 -0
  52. package/dist/browser/ui/loading-button.js +350 -0
  53. package/dist/browser/ui/loading-overlay.js +398 -0
  54. package/dist/browser/ui/loading-screen.js +537 -0
  55. package/dist/browser/ui/marketing/FeatureGrid.js +42 -0
  56. package/dist/browser/ui/marketing/Hero.js +146 -0
  57. package/dist/browser/ui/marketing/PricingTable.js +158 -0
  58. package/dist/browser/ui/marketing/index.js +247 -0
  59. package/dist/browser/ui/menubar.js +225 -0
  60. package/dist/browser/ui/molecules/Autocomplete/index.js +5 -0
  61. package/dist/browser/ui/molecules/SearchAndFilter/SearchAndFilter.js +784 -0
  62. package/dist/browser/ui/molecules/SearchAndFilter/index.js +784 -0
  63. package/dist/browser/ui/molecules/SearchAndFilter/types.js +0 -0
  64. package/dist/browser/ui/molecules/SkeletonList.js +46 -0
  65. package/dist/browser/ui/nativewind-env.d.js +0 -0
  66. package/dist/browser/ui/navigation-menu.js +147 -0
  67. package/dist/browser/ui/organisms/ErrorBoundary/ErrorBoundary.js +222 -0
  68. package/dist/browser/ui/organisms/ErrorBoundary/index.js +222 -0
  69. package/dist/browser/ui/organisms/ListPage/ListPage.js +1375 -0
  70. package/dist/browser/ui/organisms/ListPage/index.js +1375 -0
  71. package/dist/browser/ui/organisms/ListPage/types.js +0 -0
  72. package/dist/browser/ui/page-header.js +405 -0
  73. package/dist/browser/ui/password-strength.js +400 -0
  74. package/dist/browser/ui/popover.js +59 -0
  75. package/dist/browser/ui/progress.js +57 -0
  76. package/dist/browser/ui/radio-group.js +32 -0
  77. package/dist/browser/ui/select.js +172 -0
  78. package/dist/browser/ui/separator.js +20 -0
  79. package/dist/browser/ui/sheet.js +5 -0
  80. package/dist/browser/ui/sidebar.js +5 -0
  81. package/dist/browser/ui/skeleton.js +32 -0
  82. package/dist/browser/ui/stack.js +243 -0
  83. package/dist/browser/ui/stepper.js +274 -0
  84. package/dist/browser/ui/switch.js +84 -0
  85. package/dist/browser/ui/table.js +100 -0
  86. package/dist/browser/ui/tabs.js +30 -0
  87. package/dist/browser/ui/text.js +23 -0
  88. package/dist/browser/ui/textarea.js +18 -0
  89. package/dist/browser/ui/time-picker.js +83 -0
  90. package/dist/browser/ui/toggle-group.js +150 -0
  91. package/dist/browser/ui/toggle.js +90 -0
  92. package/dist/browser/ui/tooltip.js +57 -0
  93. package/dist/browser/ui/typography.js +124 -0
  94. package/dist/browser/ui/useColorScheme.js +15 -0
  95. package/dist/browser/ui/useListState.js +68 -0
  96. package/dist/browser/ui/usecases/UseCaseCard.js +359 -0
  97. package/dist/browser/ui/usecases/UserStoryCard.js +274 -0
  98. package/dist/browser/ui/usecases/index.js +394 -0
  99. package/dist/browser/ui/utils.js +9 -0
  100. package/dist/index.d.ts +1 -3
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +5 -5
  103. package/dist/ui/accordion.d.ts +15 -34
  104. package/dist/ui/accordion.d.ts.map +1 -1
  105. package/dist/ui/accordion.js +154 -86
  106. package/dist/ui/alert-dialog.d.ts +36 -67
  107. package/dist/ui/alert-dialog.d.ts.map +1 -1
  108. package/dist/ui/alert-dialog.js +192 -84
  109. package/dist/ui/alert.d.ts +15 -34
  110. package/dist/ui/alert.d.ts.map +1 -1
  111. package/dist/ui/alert.js +80 -44
  112. package/dist/ui/aspect-ratio.d.ts +4 -10
  113. package/dist/ui/aspect-ratio.d.ts.map +1 -1
  114. package/dist/ui/aspect-ratio.js +6 -7
  115. package/dist/ui/atoms/FilterSelect/FilterSelect.d.ts +3 -7
  116. package/dist/ui/atoms/FilterSelect/FilterSelect.d.ts.map +1 -1
  117. package/dist/ui/atoms/FilterSelect/FilterSelect.js +526 -56
  118. package/dist/ui/atoms/FilterSelect/index.d.ts +3 -3
  119. package/dist/ui/atoms/FilterSelect/index.d.ts.map +1 -0
  120. package/dist/ui/atoms/FilterSelect/index.js +527 -2
  121. package/dist/ui/atoms/FilterSelect/types.d.ts +13 -16
  122. package/dist/ui/atoms/FilterSelect/types.d.ts.map +1 -1
  123. package/dist/ui/atoms/FilterSelect/types.js +1 -0
  124. package/dist/ui/atoms/LoadingSpinner/LoadingSpinner.d.ts +14 -17
  125. package/dist/ui/atoms/LoadingSpinner/LoadingSpinner.d.ts.map +1 -1
  126. package/dist/ui/atoms/LoadingSpinner/LoadingSpinner.js +191 -45
  127. package/dist/ui/atoms/LoadingSpinner/index.d.ts +2 -2
  128. package/dist/ui/atoms/LoadingSpinner/index.d.ts.map +1 -0
  129. package/dist/ui/atoms/LoadingSpinner/index.js +193 -2
  130. package/dist/ui/atoms/Pagination/Pagination.d.ts +3 -7
  131. package/dist/ui/atoms/Pagination/Pagination.d.ts.map +1 -1
  132. package/dist/ui/atoms/Pagination/Pagination.js +441 -161
  133. package/dist/ui/atoms/Pagination/index.d.ts +3 -3
  134. package/dist/ui/atoms/Pagination/index.d.ts.map +1 -0
  135. package/dist/ui/atoms/Pagination/index.js +442 -2
  136. package/dist/ui/atoms/Pagination/types.d.ts +11 -14
  137. package/dist/ui/atoms/Pagination/types.d.ts.map +1 -1
  138. package/dist/ui/atoms/Pagination/types.js +1 -0
  139. package/dist/ui/atoms/SearchInput/SearchInput.d.ts +3 -7
  140. package/dist/ui/atoms/SearchInput/SearchInput.d.ts.map +1 -1
  141. package/dist/ui/atoms/SearchInput/SearchInput.js +154 -47
  142. package/dist/ui/atoms/SearchInput/index.d.ts +3 -3
  143. package/dist/ui/atoms/SearchInput/index.d.ts.map +1 -0
  144. package/dist/ui/atoms/SearchInput/index.js +156 -3
  145. package/dist/ui/atoms/SearchInput/types.d.ts +8 -11
  146. package/dist/ui/atoms/SearchInput/types.d.ts.map +1 -1
  147. package/dist/ui/atoms/SearchInput/types.js +1 -0
  148. package/dist/ui/avatar.d.ts +12 -26
  149. package/dist/ui/avatar.d.ts.map +1 -1
  150. package/dist/ui/avatar.js +34 -24
  151. package/dist/ui/badge.d.ts +8 -18
  152. package/dist/ui/badge.d.ts.map +1 -1
  153. package/dist/ui/badge.js +24 -21
  154. package/dist/ui/breadcrumb.d.ts +12 -38
  155. package/dist/ui/breadcrumb.d.ts.map +1 -1
  156. package/dist/ui/breadcrumb.js +93 -62
  157. package/dist/ui/button.d.ts +13 -23
  158. package/dist/ui/button.d.ts.map +1 -1
  159. package/dist/ui/button.js +83 -69
  160. package/dist/ui/card.d.ts +22 -43
  161. package/dist/ui/card.d.ts.map +1 -1
  162. package/dist/ui/card.js +84 -45
  163. package/dist/ui/carousel.d.ts +1 -4
  164. package/dist/ui/carousel.d.ts.map +1 -1
  165. package/dist/ui/carousel.js +6 -6
  166. package/dist/ui/checkbox.d.ts +9 -13
  167. package/dist/ui/checkbox.d.ts.map +1 -1
  168. package/dist/ui/checkbox.js +20 -19
  169. package/dist/ui/collapsible.d.ts +16 -22
  170. package/dist/ui/collapsible.d.ts.map +1 -1
  171. package/dist/ui/collapsible.js +10 -9
  172. package/dist/ui/command.d.ts +1 -4
  173. package/dist/ui/command.d.ts.map +1 -1
  174. package/dist/ui/command.js +6 -6
  175. package/dist/ui/context-menu.d.ts +64 -105
  176. package/dist/ui/context-menu.d.ts.map +1 -1
  177. package/dist/ui/context-menu.js +203 -96
  178. package/dist/ui/date-picker.d.ts +9 -22
  179. package/dist/ui/date-picker.d.ts.map +1 -1
  180. package/dist/ui/date-picker.js +81 -49
  181. package/dist/ui/date-range-picker.d.ts +15 -28
  182. package/dist/ui/date-range-picker.d.ts.map +1 -1
  183. package/dist/ui/date-range-picker.js +344 -81
  184. package/dist/ui/datetime-picker.d.ts +11 -26
  185. package/dist/ui/datetime-picker.d.ts.map +1 -1
  186. package/dist/ui/datetime-picker.js +437 -42
  187. package/dist/ui/dialog.d.ts +37 -63
  188. package/dist/ui/dialog.d.ts.map +1 -1
  189. package/dist/ui/dialog.js +114 -68
  190. package/dist/ui/dropdown-menu.d.ts +65 -107
  191. package/dist/ui/dropdown-menu.d.ts.map +1 -1
  192. package/dist/ui/dropdown-menu.js +207 -98
  193. package/dist/ui/empty-state.d.ts +13 -26
  194. package/dist/ui/empty-state.d.ts.map +1 -1
  195. package/dist/ui/empty-state.js +409 -43
  196. package/dist/ui/empty.d.ts +11 -35
  197. package/dist/ui/empty.d.ts.map +1 -1
  198. package/dist/ui/empty.js +59 -50
  199. package/dist/ui/fab.d.ts +17 -31
  200. package/dist/ui/fab.d.ts.map +1 -1
  201. package/dist/ui/fab.js +138 -100
  202. package/dist/ui/field.d.ts +25 -65
  203. package/dist/ui/field.d.ts.map +1 -1
  204. package/dist/ui/field.js +548 -111
  205. package/dist/ui/form.d.ts +26 -47
  206. package/dist/ui/form.d.ts.map +1 -1
  207. package/dist/ui/form.js +139 -83
  208. package/dist/ui/hover-card.d.ts +16 -26
  209. package/dist/ui/hover-card.d.ts.map +1 -1
  210. package/dist/ui/hover-card.js +55 -30
  211. package/dist/ui/icons/Check.d.ts +3 -2
  212. package/dist/ui/icons/Check.d.ts.map +1 -0
  213. package/dist/ui/icons/Check.js +19 -7
  214. package/dist/ui/icons/ChevronDown.d.ts +3 -2
  215. package/dist/ui/icons/ChevronDown.d.ts.map +1 -0
  216. package/dist/ui/icons/ChevronDown.js +19 -7
  217. package/dist/ui/icons/ChevronRight.d.ts +3 -2
  218. package/dist/ui/icons/ChevronRight.d.ts.map +1 -0
  219. package/dist/ui/icons/ChevronRight.js +19 -7
  220. package/dist/ui/icons/ChevronUp.d.ts +3 -2
  221. package/dist/ui/icons/ChevronUp.d.ts.map +1 -0
  222. package/dist/ui/icons/ChevronUp.js +19 -7
  223. package/dist/ui/icons/CircleUser.d.ts +3 -2
  224. package/dist/ui/icons/CircleUser.d.ts.map +1 -0
  225. package/dist/ui/icons/CircleUser.js +19 -7
  226. package/dist/ui/icons/Info.d.ts +3 -2
  227. package/dist/ui/icons/Info.d.ts.map +1 -0
  228. package/dist/ui/icons/Info.js +19 -7
  229. package/dist/ui/icons/Key.d.ts +3 -2
  230. package/dist/ui/icons/Key.d.ts.map +1 -0
  231. package/dist/ui/icons/Key.js +19 -7
  232. package/dist/ui/icons/MoonStar.d.ts +3 -2
  233. package/dist/ui/icons/MoonStar.d.ts.map +1 -0
  234. package/dist/ui/icons/MoonStar.js +19 -7
  235. package/dist/ui/icons/Sun.d.ts +3 -2
  236. package/dist/ui/icons/Sun.d.ts.map +1 -0
  237. package/dist/ui/icons/Sun.js +19 -7
  238. package/dist/ui/icons/X.d.ts +3 -2
  239. package/dist/ui/icons/X.d.ts.map +1 -0
  240. package/dist/ui/icons/X.js +19 -7
  241. package/dist/ui/icons/iconWithClassName.d.ts +2 -6
  242. package/dist/ui/icons/iconWithClassName.d.ts.map +1 -1
  243. package/dist/ui/icons/iconWithClassName.js +14 -13
  244. package/dist/ui/input.d.ts +5 -13
  245. package/dist/ui/input.d.ts.map +1 -1
  246. package/dist/ui/input.js +16 -14
  247. package/dist/ui/label.d.ts +2 -14
  248. package/dist/ui/label.d.ts.map +1 -1
  249. package/dist/ui/label.js +30 -21
  250. package/dist/ui/link.d.ts +5 -12
  251. package/dist/ui/link.d.ts.map +1 -1
  252. package/dist/ui/link.js +15 -14
  253. package/dist/ui/loading-button.d.ts +7 -17
  254. package/dist/ui/loading-button.d.ts.map +1 -1
  255. package/dist/ui/loading-button.js +349 -20
  256. package/dist/ui/loading-overlay.d.ts +5 -13
  257. package/dist/ui/loading-overlay.d.ts.map +1 -1
  258. package/dist/ui/loading-overlay.js +399 -44
  259. package/dist/ui/loading-screen.d.ts +4 -11
  260. package/dist/ui/loading-screen.d.ts.map +1 -1
  261. package/dist/ui/loading-screen.js +536 -91
  262. package/dist/ui/marketing/FeatureGrid.d.ts +10 -19
  263. package/dist/ui/marketing/FeatureGrid.d.ts.map +1 -1
  264. package/dist/ui/marketing/FeatureGrid.js +41 -33
  265. package/dist/ui/marketing/Hero.d.ts +16 -27
  266. package/dist/ui/marketing/Hero.d.ts.map +1 -1
  267. package/dist/ui/marketing/Hero.js +145 -50
  268. package/dist/ui/marketing/PricingTable.d.ts +15 -23
  269. package/dist/ui/marketing/PricingTable.d.ts.map +1 -1
  270. package/dist/ui/marketing/PricingTable.js +157 -58
  271. package/dist/ui/marketing/index.d.ts +4 -4
  272. package/dist/ui/marketing/index.d.ts.map +1 -0
  273. package/dist/ui/marketing/index.js +247 -4
  274. package/dist/ui/menubar.d.ts +64 -110
  275. package/dist/ui/menubar.d.ts.map +1 -1
  276. package/dist/ui/menubar.js +212 -106
  277. package/dist/ui/molecules/Autocomplete/index.d.ts +1 -4
  278. package/dist/ui/molecules/Autocomplete/index.d.ts.map +1 -1
  279. package/dist/ui/molecules/Autocomplete/index.js +6 -6
  280. package/dist/ui/molecules/SearchAndFilter/SearchAndFilter.d.ts +3 -7
  281. package/dist/ui/molecules/SearchAndFilter/SearchAndFilter.d.ts.map +1 -1
  282. package/dist/ui/molecules/SearchAndFilter/SearchAndFilter.js +783 -104
  283. package/dist/ui/molecules/SearchAndFilter/index.d.ts +3 -3
  284. package/dist/ui/molecules/SearchAndFilter/index.d.ts.map +1 -0
  285. package/dist/ui/molecules/SearchAndFilter/index.js +784 -2
  286. package/dist/ui/molecules/SearchAndFilter/types.d.ts +18 -23
  287. package/dist/ui/molecules/SearchAndFilter/types.d.ts.map +1 -1
  288. package/dist/ui/molecules/SearchAndFilter/types.js +1 -0
  289. package/dist/ui/molecules/SkeletonList.d.ts +5 -13
  290. package/dist/ui/molecules/SkeletonList.d.ts.map +1 -1
  291. package/dist/ui/molecules/SkeletonList.js +46 -14
  292. package/dist/ui/nativewind-env.d.js +1 -0
  293. package/dist/ui/navigation-menu.d.ts +35 -64
  294. package/dist/ui/navigation-menu.d.ts.map +1 -1
  295. package/dist/ui/navigation-menu.js +140 -79
  296. package/dist/ui/organisms/ErrorBoundary/ErrorBoundary.d.ts +18 -22
  297. package/dist/ui/organisms/ErrorBoundary/ErrorBoundary.d.ts.map +1 -1
  298. package/dist/ui/organisms/ErrorBoundary/ErrorBoundary.js +220 -104
  299. package/dist/ui/organisms/ErrorBoundary/index.d.ts +3 -2
  300. package/dist/ui/organisms/ErrorBoundary/index.d.ts.map +1 -0
  301. package/dist/ui/organisms/ErrorBoundary/index.js +222 -2
  302. package/dist/ui/organisms/ListPage/ListPage.d.ts +2 -28
  303. package/dist/ui/organisms/ListPage/ListPage.d.ts.map +1 -1
  304. package/dist/ui/organisms/ListPage/ListPage.js +1374 -196
  305. package/dist/ui/organisms/ListPage/index.d.ts +3 -3
  306. package/dist/ui/organisms/ListPage/index.d.ts.map +1 -0
  307. package/dist/ui/organisms/ListPage/index.js +1375 -2
  308. package/dist/ui/organisms/ListPage/types.d.ts +34 -39
  309. package/dist/ui/organisms/ListPage/types.d.ts.map +1 -1
  310. package/dist/ui/organisms/ListPage/types.js +1 -0
  311. package/dist/ui/page-header.d.ts +12 -24
  312. package/dist/ui/page-header.d.ts.map +1 -1
  313. package/dist/ui/page-header.js +403 -38
  314. package/dist/ui/password-strength.d.ts +10 -17
  315. package/dist/ui/password-strength.d.ts.map +1 -1
  316. package/dist/ui/password-strength.js +396 -94
  317. package/dist/ui/popover.d.ts +14 -26
  318. package/dist/ui/popover.d.ts.map +1 -1
  319. package/dist/ui/popover.js +57 -32
  320. package/dist/ui/progress.d.ts +6 -15
  321. package/dist/ui/progress.d.ts.map +1 -1
  322. package/dist/ui/progress.js +54 -36
  323. package/dist/ui/radio-group.d.ts +3 -13
  324. package/dist/ui/radio-group.d.ts.map +1 -1
  325. package/dist/ui/radio-group.js +29 -19
  326. package/dist/ui/select.d.ts +43 -75
  327. package/dist/ui/select.d.ts.map +1 -1
  328. package/dist/ui/select.js +163 -101
  329. package/dist/ui/separator.d.ts +5 -14
  330. package/dist/ui/separator.d.ts.map +1 -1
  331. package/dist/ui/separator.js +19 -16
  332. package/dist/ui/sheet.d.ts +1 -4
  333. package/dist/ui/sheet.d.ts.map +1 -1
  334. package/dist/ui/sheet.js +6 -6
  335. package/dist/ui/sidebar.d.ts +1 -4
  336. package/dist/ui/sidebar.d.ts.map +1 -1
  337. package/dist/ui/sidebar.js +6 -6
  338. package/dist/ui/skeleton.d.ts +3 -10
  339. package/dist/ui/skeleton.d.ts.map +1 -1
  340. package/dist/ui/skeleton.js +31 -22
  341. package/dist/ui/stack.d.ts +34 -67
  342. package/dist/ui/stack.d.ts.map +1 -1
  343. package/dist/ui/stack.js +235 -229
  344. package/dist/ui/stepper.d.ts +10 -20
  345. package/dist/ui/stepper.d.ts.map +1 -1
  346. package/dist/ui/stepper.js +269 -32
  347. package/dist/ui/switch.d.ts +5 -12
  348. package/dist/ui/switch.d.ts.map +1 -1
  349. package/dist/ui/switch.js +79 -48
  350. package/dist/ui/table.d.ts +24 -50
  351. package/dist/ui/table.d.ts.map +1 -1
  352. package/dist/ui/table.js +99 -55
  353. package/dist/ui/tabs.d.ts +23 -28
  354. package/dist/ui/tabs.d.ts.map +1 -1
  355. package/dist/ui/tabs.js +27 -25
  356. package/dist/ui/text.d.ts +11 -19
  357. package/dist/ui/text.d.ts.map +1 -1
  358. package/dist/ui/text.js +21 -16
  359. package/dist/ui/textarea.d.ts +5 -8
  360. package/dist/ui/textarea.d.ts.map +1 -1
  361. package/dist/ui/textarea.js +15 -16
  362. package/dist/ui/time-picker.d.ts +8 -20
  363. package/dist/ui/time-picker.d.ts.map +1 -1
  364. package/dist/ui/time-picker.js +79 -48
  365. package/dist/ui/toggle-group.d.ts +14 -34
  366. package/dist/ui/toggle-group.d.ts.map +1 -1
  367. package/dist/ui/toggle-group.js +144 -48
  368. package/dist/ui/toggle.d.ts +16 -30
  369. package/dist/ui/toggle.d.ts.map +1 -1
  370. package/dist/ui/toggle.js +85 -61
  371. package/dist/ui/tooltip.d.ts +18 -28
  372. package/dist/ui/tooltip.d.ts.map +1 -1
  373. package/dist/ui/tooltip.js +55 -38
  374. package/dist/ui/typography.d.ts +15 -63
  375. package/dist/ui/typography.d.ts.map +1 -1
  376. package/dist/ui/typography.js +101 -64
  377. package/dist/ui/useColorScheme.d.ts +5 -10
  378. package/dist/ui/useColorScheme.d.ts.map +1 -1
  379. package/dist/ui/useColorScheme.js +14 -15
  380. package/dist/ui/useListState.d.ts +23 -31
  381. package/dist/ui/useListState.d.ts.map +1 -1
  382. package/dist/ui/useListState.js +67 -73
  383. package/dist/ui/usecases/UseCaseCard.d.ts +7 -18
  384. package/dist/ui/usecases/UseCaseCard.d.ts.map +1 -1
  385. package/dist/ui/usecases/UseCaseCard.js +359 -34
  386. package/dist/ui/usecases/UserStoryCard.d.ts +5 -14
  387. package/dist/ui/usecases/UserStoryCard.d.ts.map +1 -1
  388. package/dist/ui/usecases/UserStoryCard.js +274 -35
  389. package/dist/ui/usecases/index.d.ts +3 -3
  390. package/dist/ui/usecases/index.d.ts.map +1 -0
  391. package/dist/ui/usecases/index.js +394 -3
  392. package/dist/ui/utils.d.ts +2 -6
  393. package/dist/ui/utils.d.ts.map +1 -1
  394. package/dist/ui/utils.js +6 -7
  395. package/package.json +775 -209
  396. package/dist/index.js.map +0 -1
  397. package/dist/ui/accordion.js.map +0 -1
  398. package/dist/ui/alert-dialog.js.map +0 -1
  399. package/dist/ui/alert.js.map +0 -1
  400. package/dist/ui/aspect-ratio.js.map +0 -1
  401. package/dist/ui/atoms/FilterSelect/FilterSelect.js.map +0 -1
  402. package/dist/ui/atoms/LoadingSpinner/LoadingSpinner.js.map +0 -1
  403. package/dist/ui/atoms/Pagination/Pagination.js.map +0 -1
  404. package/dist/ui/atoms/SearchInput/SearchInput.js.map +0 -1
  405. package/dist/ui/avatar.js.map +0 -1
  406. package/dist/ui/badge.js.map +0 -1
  407. package/dist/ui/breadcrumb.js.map +0 -1
  408. package/dist/ui/button.js.map +0 -1
  409. package/dist/ui/card.js.map +0 -1
  410. package/dist/ui/carousel.js.map +0 -1
  411. package/dist/ui/checkbox.js.map +0 -1
  412. package/dist/ui/collapsible.js.map +0 -1
  413. package/dist/ui/command.js.map +0 -1
  414. package/dist/ui/context-menu.js.map +0 -1
  415. package/dist/ui/date-picker.js.map +0 -1
  416. package/dist/ui/date-range-picker.js.map +0 -1
  417. package/dist/ui/datetime-picker.js.map +0 -1
  418. package/dist/ui/dialog.js.map +0 -1
  419. package/dist/ui/dropdown-menu.js.map +0 -1
  420. package/dist/ui/empty-state.js.map +0 -1
  421. package/dist/ui/empty.js.map +0 -1
  422. package/dist/ui/fab.js.map +0 -1
  423. package/dist/ui/field.js.map +0 -1
  424. package/dist/ui/form.js.map +0 -1
  425. package/dist/ui/hover-card.js.map +0 -1
  426. package/dist/ui/icons/Check.js.map +0 -1
  427. package/dist/ui/icons/ChevronDown.js.map +0 -1
  428. package/dist/ui/icons/ChevronRight.js.map +0 -1
  429. package/dist/ui/icons/ChevronUp.js.map +0 -1
  430. package/dist/ui/icons/CircleUser.js.map +0 -1
  431. package/dist/ui/icons/Info.js.map +0 -1
  432. package/dist/ui/icons/Key.js.map +0 -1
  433. package/dist/ui/icons/MoonStar.js.map +0 -1
  434. package/dist/ui/icons/Sun.js.map +0 -1
  435. package/dist/ui/icons/X.js.map +0 -1
  436. package/dist/ui/icons/iconWithClassName.js.map +0 -1
  437. package/dist/ui/input.js.map +0 -1
  438. package/dist/ui/label.js.map +0 -1
  439. package/dist/ui/link.js.map +0 -1
  440. package/dist/ui/loading-button.js.map +0 -1
  441. package/dist/ui/loading-overlay.js.map +0 -1
  442. package/dist/ui/loading-screen.js.map +0 -1
  443. package/dist/ui/marketing/FeatureGrid.js.map +0 -1
  444. package/dist/ui/marketing/Hero.js.map +0 -1
  445. package/dist/ui/marketing/PricingTable.js.map +0 -1
  446. package/dist/ui/menubar.js.map +0 -1
  447. package/dist/ui/molecules/Autocomplete/index.js.map +0 -1
  448. package/dist/ui/molecules/SearchAndFilter/SearchAndFilter.js.map +0 -1
  449. package/dist/ui/molecules/SkeletonList.js.map +0 -1
  450. package/dist/ui/nativewind-env.d.ts +0 -1
  451. package/dist/ui/navigation-menu.js.map +0 -1
  452. package/dist/ui/organisms/ErrorBoundary/ErrorBoundary.js.map +0 -1
  453. package/dist/ui/organisms/ListPage/ListPage.js.map +0 -1
  454. package/dist/ui/page-header.js.map +0 -1
  455. package/dist/ui/password-strength.js.map +0 -1
  456. package/dist/ui/popover.js.map +0 -1
  457. package/dist/ui/progress.js.map +0 -1
  458. package/dist/ui/radio-group.js.map +0 -1
  459. package/dist/ui/select.js.map +0 -1
  460. package/dist/ui/separator.js.map +0 -1
  461. package/dist/ui/sheet.js.map +0 -1
  462. package/dist/ui/sidebar.js.map +0 -1
  463. package/dist/ui/skeleton.js.map +0 -1
  464. package/dist/ui/stack.js.map +0 -1
  465. package/dist/ui/stepper.js.map +0 -1
  466. package/dist/ui/switch.js.map +0 -1
  467. package/dist/ui/table.js.map +0 -1
  468. package/dist/ui/tabs.js.map +0 -1
  469. package/dist/ui/text.js.map +0 -1
  470. package/dist/ui/textarea.js.map +0 -1
  471. package/dist/ui/time-picker.js.map +0 -1
  472. package/dist/ui/toggle-group.js.map +0 -1
  473. package/dist/ui/toggle.js.map +0 -1
  474. package/dist/ui/tooltip.js.map +0 -1
  475. package/dist/ui/typography.js.map +0 -1
  476. package/dist/ui/useColorScheme.js.map +0 -1
  477. package/dist/ui/useListState.js.map +0 -1
  478. package/dist/ui/usecases/UseCaseCard.js.map +0 -1
  479. package/dist/ui/usecases/UserStoryCard.js.map +0 -1
  480. package/dist/ui/utils.js.map +0 -1
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../index.ts"],"sourcesContent":["export default {};\n"],"mappings":";AAAA,qBAAe,EAAE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"accordion.js","names":[],"sources":["../../ui/accordion.tsx"],"sourcesContent":["import * as AccordionPrimitive from '@rn-primitives/accordion';\nimport * as React from 'react';\nimport { Platform, Pressable, View } from 'react-native';\nimport Animated, {\n Extrapolation,\n FadeIn,\n FadeOutUp,\n interpolate,\n LayoutAnimationConfig,\n LinearTransition,\n useAnimatedStyle,\n useDerivedValue,\n withTiming,\n} from 'react-native-reanimated';\nimport { ChevronDown } from './icons/ChevronDown';\nimport { TextClassContext } from './text';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\n\nfunction Accordion({\n children,\n ...props\n}: Omit<AccordionPrimitive.RootProps, 'asChild'> & {\n ref?: React.RefObject<AccordionPrimitive.RootRef>;\n}) {\n return (\n <LayoutAnimationConfig skipEntering>\n <AccordionPrimitive.Root\n {...(props as AccordionPrimitive.RootProps)}\n asChild={Platform.OS !== 'web'}\n >\n <Animated.View layout={LinearTransition.duration(200)}>\n {children}\n </Animated.View>\n </AccordionPrimitive.Root>\n </LayoutAnimationConfig>\n );\n}\n\nfunction AccordionItem({\n className,\n value,\n ...props\n}: AccordionPrimitive.ItemProps & {\n ref?: React.RefObject<AccordionPrimitive.ItemRef>;\n}) {\n return (\n <Animated.View\n className={'overflow-hidden'}\n layout={LinearTransition.duration(200)}\n >\n <AccordionPrimitive.Item\n className={cn('border-border border-b', className)}\n value={value}\n {...props}\n />\n </Animated.View>\n );\n}\n\nconst Trigger = Platform.OS === 'web' ? View : Pressable;\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.TriggerProps & {\n children?: React.ReactNode;\n ref?: React.RefObject<AccordionPrimitive.TriggerRef>;\n}) {\n const { isExpanded } = AccordionPrimitive.useItemContext();\n\n const progress = useDerivedValue(() =>\n isExpanded\n ? withTiming(1, { duration: 250 })\n : withTiming(0, { duration: 200 })\n );\n const chevronStyle = useAnimatedStyle(() => ({\n transform: [{ rotate: `${progress.value * 180}deg` }],\n opacity: interpolate(progress.value, [0, 1], [1, 0.8], Extrapolation.CLAMP),\n }));\n\n return (\n <TextClassContext.Provider value=\"native:text-lg font-medium web:group-hover:underline\">\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger {...props} asChild>\n <Trigger\n className={cn(\n 'group web:flex-1 web:transition-all web:focus-visible:outline-hidden web:focus-visible:ring-1 web:focus-visible:ring-muted-foreground flex flex-row items-center justify-between py-4',\n className\n )}\n >\n {children}\n <Animated.View style={chevronStyle}>\n <ChevronDown size={18} className={'text-foreground shrink-0'} />\n </Animated.View>\n </Trigger>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n </TextClassContext.Provider>\n );\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionPrimitive.ContentProps & {\n ref?: React.RefObject<AccordionPrimitive.ContentRef>;\n}) {\n const { isExpanded } = AccordionPrimitive.useItemContext();\n return (\n <TextClassContext.Provider value=\"native:text-lg\">\n <AccordionPrimitive.Content\n className={cn(\n 'web:transition-all overflow-hidden text-sm',\n isExpanded ? 'web:animate-accordion-down' : 'web:animate-accordion-up'\n )}\n {...props}\n >\n <InnerContent className={cn('pb-4', className)}>\n {children}\n </InnerContent>\n </AccordionPrimitive.Content>\n </TextClassContext.Provider>\n );\n}\n\nfunction InnerContent({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n if (Platform.OS === 'web') {\n return <View className={cn('pb-4', className)}>{children}</View>;\n }\n return (\n <Animated.View\n entering={FadeIn}\n exiting={FadeOutUp.duration(200)}\n className={cn('pb-4', className)}\n >\n {children}\n </Animated.View>\n );\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger };\n"],"mappings":";;;;;;;;;;AAkBA,SAAS,UAAU,EACjB,UACA,GAAG,SAGF;AACD,QACE,oBAAC;EAAsB;YACrB,oBAAC,mBAAmB;GAClB,GAAK;GACL,SAAS,SAAS,OAAO;aAEzB,oBAAC,SAAS;IAAK,QAAQ,iBAAiB,SAAS,IAAI;IAClD;KACa;IACQ;GACJ;;AAI5B,SAAS,cAAc,EACrB,WACA,OACA,GAAG,SAGF;AACD,QACE,oBAAC,SAAS;EACR,WAAW;EACX,QAAQ,iBAAiB,SAAS,IAAI;YAEtC,oBAAC,mBAAmB;GAClB,WAAW,GAAG,0BAA0B,UAAU;GAC3C;GACP,GAAI;IACJ;GACY;;AAIpB,MAAM,UAAU,SAAS,OAAO,QAAQ,OAAO;AAE/C,SAAS,iBAAiB,EACxB,WACA,UACA,GAAG,SAIF;CACD,MAAM,EAAE,eAAe,mBAAmB,gBAAgB;CAE1D,MAAM,WAAW,sBACf,aACI,WAAW,GAAG,EAAE,UAAU,KAAK,CAAC,GAChC,WAAW,GAAG,EAAE,UAAU,KAAK,CAAC,CACrC;CACD,MAAM,eAAe,wBAAwB;EAC3C,WAAW,CAAC,EAAE,QAAQ,GAAG,SAAS,QAAQ,IAAI,MAAM,CAAC;EACrD,SAAS,YAAY,SAAS,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAI,EAAE,cAAc,MAAM;EAC5E,EAAE;AAEH,QACE,oBAAC,iBAAiB;EAAS,OAAM;YAC/B,oBAAC,mBAAmB;GAAO,WAAU;aACnC,oBAAC,mBAAmB;IAAQ,GAAI;IAAO;cACrC,qBAAC;KACC,WAAW,GACT,yLACA,UACD;gBAEA,UACD,oBAAC,SAAS;MAAK,OAAO;gBACpB,oBAAC;OAAY,MAAM;OAAI,WAAW;QAA8B;OAClD;MACR;KACiB;IACH;GACF;;AAIhC,SAAS,iBAAiB,EACxB,WACA,UACA,GAAG,SAGF;CACD,MAAM,EAAE,eAAe,mBAAmB,gBAAgB;AAC1D,QACE,oBAAC,iBAAiB;EAAS,OAAM;YAC/B,oBAAC,mBAAmB;GAClB,WAAW,GACT,8CACA,aAAa,+BAA+B,2BAC7C;GACD,GAAI;aAEJ,oBAAC;IAAa,WAAW,GAAG,QAAQ,UAAU;IAC3C;KACY;IACY;GACH;;AAIhC,SAAS,aAAa,EACpB,UACA,aAIC;AACD,KAAI,SAAS,OAAO,MAClB,QAAO,oBAAC;EAAK,WAAW,GAAG,QAAQ,UAAU;EAAG;GAAgB;AAElE,QACE,oBAAC,SAAS;EACR,UAAU;EACV,SAAS,UAAU,SAAS,IAAI;EAChC,WAAW,GAAG,QAAQ,UAAU;EAE/B;GACa"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"alert-dialog.js","names":[],"sources":["../../ui/alert-dialog.tsx"],"sourcesContent":["import * as AlertDialogPrimitive from '@rn-primitives/alert-dialog';\nimport * as React from 'react';\nimport { Platform, View, type ViewProps } from 'react-native';\nimport Animated, { FadeIn, FadeOut } from 'react-native-reanimated';\nimport { buttonTextVariants, buttonVariants } from './button';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\nimport { TextClassContext } from './text';\n\nconst AlertDialog = AlertDialogPrimitive.Root;\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nfunction AlertDialogOverlayWeb({\n className,\n ...props\n}: AlertDialogPrimitive.OverlayProps & {\n ref?: React.RefObject<AlertDialogPrimitive.OverlayRef>;\n}) {\n const { open } = AlertDialogPrimitive.useRootContext();\n return (\n <AlertDialogPrimitive.Overlay\n className={cn(\n 'absolute top-0 right-0 bottom-0 left-0 z-50 flex items-center justify-center bg-black/80 p-2',\n open\n ? 'web:animate-in web:fade-in-0'\n : 'web:animate-out web:fade-out-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogOverlayNative({\n className,\n children,\n ...props\n}: AlertDialogPrimitive.OverlayProps & {\n ref?: React.RefObject<AlertDialogPrimitive.OverlayRef>;\n}) {\n return (\n <AlertDialogPrimitive.Overlay\n className={cn(\n 'absolute top-0 right-0 bottom-0 left-0 z-50 flex items-center justify-center bg-black/80 p-2',\n className\n )}\n {...props}\n asChild\n >\n <Animated.View\n entering={FadeIn.duration(150)}\n exiting={FadeOut.duration(150)}\n >\n {children}\n </Animated.View>\n </AlertDialogPrimitive.Overlay>\n );\n}\n\nconst AlertDialogOverlay = Platform.select({\n web: AlertDialogOverlayWeb,\n default: AlertDialogOverlayNative,\n});\n\nfunction AlertDialogContent({\n className,\n portalHost,\n ...props\n}: AlertDialogPrimitive.ContentProps & {\n ref?: React.RefObject<AlertDialogPrimitive.ContentRef>;\n portalHost?: string;\n}) {\n const { open } = AlertDialogPrimitive.useRootContext();\n\n return (\n <AlertDialogPortal hostName={portalHost}>\n <AlertDialogOverlay>\n <AlertDialogPrimitive.Content\n className={cn(\n 'border-border bg-background shadow-foreground/10 web:duration-200 z-50 max-w-lg gap-4 rounded-lg border p-6 shadow-lg',\n open\n ? 'web:animate-in web:fade-in-0 web:zoom-in-95'\n : 'web:animate-out web:fade-out-0 web:zoom-out-95',\n className\n )}\n {...props}\n />\n </AlertDialogOverlay>\n </AlertDialogPortal>\n );\n}\n\nfunction AlertDialogHeader({ className, ...props }: ViewProps) {\n return <View className={cn('flex flex-col gap-2', className)} {...props} />;\n}\n\nfunction AlertDialogFooter({ className, ...props }: ViewProps) {\n return (\n <View\n className={cn(\n 'flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: AlertDialogPrimitive.TitleProps & {\n ref?: React.RefObject<AlertDialogPrimitive.TitleRef>;\n}) {\n return (\n <AlertDialogPrimitive.Title\n className={cn(\n 'native:text-xl text-foreground text-lg font-semibold',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: AlertDialogPrimitive.DescriptionProps & {\n ref?: React.RefObject<AlertDialogPrimitive.DescriptionRef>;\n}) {\n return (\n <AlertDialogPrimitive.Description\n className={cn(\n 'native:text-base text-muted-foreground text-sm',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: AlertDialogPrimitive.ActionProps & {\n ref?: React.RefObject<AlertDialogPrimitive.ActionRef>;\n}) {\n return (\n <TextClassContext.Provider value={buttonTextVariants({ className })}>\n <AlertDialogPrimitive.Action\n className={cn(buttonVariants(), className)}\n {...props}\n />\n </TextClassContext.Provider>\n );\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: AlertDialogPrimitive.CancelProps & {\n ref?: React.RefObject<AlertDialogPrimitive.CancelRef>;\n}) {\n return (\n <TextClassContext.Provider\n value={buttonTextVariants({ className, variant: 'outline' })}\n >\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: 'outline', className }))}\n {...props}\n />\n </TextClassContext.Provider>\n );\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n"],"mappings":";;;;;;;;;;AAQA,MAAM,cAAc,qBAAqB;AAEzC,MAAM,qBAAqB,qBAAqB;AAEhD,MAAM,oBAAoB,qBAAqB;AAE/C,SAAS,sBAAsB,EAC7B,WACA,GAAG,SAGF;CACD,MAAM,EAAE,SAAS,qBAAqB,gBAAgB;AACtD,QACE,oBAAC,qBAAqB;EACpB,WAAW,GACT,gGACA,OACI,iCACA,kCACJ,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,yBAAyB,EAChC,WACA,UACA,GAAG,SAGF;AACD,QACE,oBAAC,qBAAqB;EACpB,WAAW,GACT,gGACA,UACD;EACD,GAAI;EACJ;YAEA,oBAAC,SAAS;GACR,UAAU,OAAO,SAAS,IAAI;GAC9B,SAAS,QAAQ,SAAS,IAAI;GAE7B;IACa;GACa;;AAInC,MAAM,qBAAqB,SAAS,OAAO;CACzC,KAAK;CACL,SAAS;CACV,CAAC;AAEF,SAAS,mBAAmB,EAC1B,WACA,YACA,GAAG,SAIF;CACD,MAAM,EAAE,SAAS,qBAAqB,gBAAgB;AAEtD,QACE,oBAAC;EAAkB,UAAU;YAC3B,oBAAC,gCACC,oBAAC,qBAAqB;GACpB,WAAW,GACT,yHACA,OACI,gDACA,kDACJ,UACD;GACD,GAAI;IACJ,GACiB;GACH;;AAIxB,SAAS,kBAAkB,EAAE,WAAW,GAAG,SAAoB;AAC7D,QAAO,oBAAC;EAAK,WAAW,GAAG,uBAAuB,UAAU;EAAE,GAAI;GAAS;;AAG7E,SAAS,kBAAkB,EAAE,WAAW,GAAG,SAAoB;AAC7D,QACE,oBAAC;EACC,WAAW,GACT,0DACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,iBAAiB,EACxB,WACA,GAAG,SAGF;AACD,QACE,oBAAC,qBAAqB;EACpB,WAAW,GACT,wDACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,uBAAuB,EAC9B,WACA,GAAG,SAGF;AACD,QACE,oBAAC,qBAAqB;EACpB,WAAW,GACT,kDACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,kBAAkB,EACzB,WACA,GAAG,SAGF;AACD,QACE,oBAAC,iBAAiB;EAAS,OAAO,mBAAmB,EAAE,WAAW,CAAC;YACjE,oBAAC,qBAAqB;GACpB,WAAW,GAAG,gBAAgB,EAAE,UAAU;GAC1C,GAAI;IACJ;GACwB;;AAIhC,SAAS,kBAAkB,EACzB,WACA,GAAG,SAGF;AACD,QACE,oBAAC,iBAAiB;EAChB,OAAO,mBAAmB;GAAE;GAAW,SAAS;GAAW,CAAC;YAE5D,oBAAC,qBAAqB;GACpB,WAAW,GAAG,eAAe;IAAE,SAAS;IAAW;IAAW,CAAC,CAAC;GAChE,GAAI;IACJ;GACwB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"alert.js","names":["Text"],"sources":["../../ui/alert.tsx"],"sourcesContent":["import { useTheme } from '@react-navigation/native';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type { LucideIcon } from 'lucide-react-native';\nimport * as React from 'react';\nimport { View, type ViewProps } from 'react-native';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\nimport { Text } from './text';\n\nconst alertVariants = cva(\n 'relative bg-background w-full rounded-lg border border-border p-4 shadow-2xs shadow-foreground/10',\n {\n variants: {\n variant: {\n default: '',\n destructive: 'border-destructive',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nfunction Alert({\n className,\n variant,\n children,\n icon: Icon,\n iconSize = 16,\n iconClassName,\n ...props\n}: ViewProps &\n VariantProps<typeof alertVariants> & {\n ref?: React.RefObject<View>;\n icon: LucideIcon;\n iconSize?: number;\n iconClassName?: string;\n }) {\n const { colors } = useTheme();\n return (\n <View\n role=\"alert\"\n className={alertVariants({ variant, className })}\n {...props}\n >\n <View className=\"absolute top-4 left-3.5 -translate-y-0.5\">\n <Icon\n size={iconSize}\n color={variant === 'destructive' ? colors.notification : colors.text}\n />\n </View>\n {children}\n </View>\n );\n}\n\nfunction AlertTitle({\n className,\n ...props\n}: React.ComponentProps<typeof Text>) {\n return (\n <Text\n className={cn(\n 'text-foreground mb-1 pl-7 text-base leading-none font-medium tracking-tight',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<typeof Text>) {\n return (\n <Text\n className={cn('text-foreground pl-7 text-sm leading-relaxed', className)}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertDescription, AlertTitle };\n"],"mappings":";;;;;;;;;AAQA,MAAM,gBAAgB,IACpB,qGACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,aAAa;EACd,EACF;CACD,iBAAiB,EACf,SAAS,WACV;CACF,CACF;AAED,SAAS,MAAM,EACb,WACA,SACA,UACA,MAAM,MACN,WAAW,IACX,eACA,GAAG,SAOA;CACH,MAAM,EAAE,WAAW,UAAU;AAC7B,QACE,qBAAC;EACC,MAAK;EACL,WAAW,cAAc;GAAE;GAAS;GAAW,CAAC;EAChD,GAAI;aAEJ,oBAAC;GAAK,WAAU;aACd,oBAAC;IACC,MAAM;IACN,OAAO,YAAY,gBAAgB,OAAO,eAAe,OAAO;KAChE;IACG,EACN;GACI;;AAIX,SAAS,WAAW,EAClB,WACA,GAAG,SACiC;AACpC,QACE,oBAACA;EACC,WAAW,GACT,+EACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,iBAAiB,EACxB,WACA,GAAG,SACiC;AACpC,QACE,oBAACA;EACC,WAAW,GAAG,gDAAgD,UAAU;EACxE,GAAI;GACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"aspect-ratio.js","names":[],"sources":["../../ui/aspect-ratio.tsx"],"sourcesContent":["import * as AspectRatioPrimitive from '@rn-primitives/aspect-ratio';\n\nconst AspectRatio = AspectRatioPrimitive.Root;\n\nexport { AspectRatio };\n"],"mappings":";;;AAEA,MAAM,cAAc,qBAAqB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FilterSelect.js","names":["Text"],"sources":["../../../../ui/atoms/FilterSelect/FilterSelect.tsx"],"sourcesContent":["import React from 'react';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../../select';\nimport { Label } from '../../label';\nimport { HStack } from '../../stack';\nimport { View } from 'react-native';\nimport { Text } from '../../text';\nimport type { FilterSelectProps } from './types';\n\nexport const FilterSelect: React.FC<FilterSelectProps> = ({\n value,\n options,\n onChange,\n placeholder = 'Sélectionner...',\n label,\n disabled = false,\n className = '',\n showCounts = false,\n}) => {\n return (\n <HStack className={`space-y-2 ${className}`}>\n {label && (\n <Label className=\"text-foreground text-base font-medium\">{label}</Label>\n )}\n <Select value={value} onValueChange={onChange} disabled={disabled}>\n <SelectTrigger className=\"w-full\">\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent className=\"bg-background\">\n {/* All/Reset option */}\n <SelectItem value=\"all\" label=\"Tous\">\n <Text>Tous</Text>\n {showCounts && (\n <View className=\"text-muted-foreground ml-2 text-sm\">\n ({options.reduce((sum, option) => sum + (option.count || 0), 0)}\n )\n </View>\n )}\n </SelectItem>\n\n {/* Filter options */}\n {options.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n label={option.label}\n >\n <HStack className=\"flex w-full items-center justify-between\">\n <Text>{option.label}</Text>\n {showCounts && option.count !== undefined && (\n <Text className=\"text-muted-foreground ml-2 text-sm\">\n ({option.count})\n </Text>\n )}\n </HStack>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </HStack>\n );\n};\n"],"mappings":";;;;;;;;;AAcA,MAAa,gBAA6C,EACxD,OACA,SACA,UACA,cAAc,mBACd,OACA,WAAW,OACX,YAAY,IACZ,aAAa,YACT;AACJ,QACE,qBAAC;EAAO,WAAW,aAAa;aAC7B,SACC,oBAAC;GAAM,WAAU;aAAyC;IAAc,EAE1E,qBAAC;GAAc;GAAO,eAAe;GAAoB;cACvD,oBAAC;IAAc,WAAU;cACvB,oBAAC,eAAyB,cAAe;KAC3B,EAChB,qBAAC;IAAc,WAAU;eAEvB,qBAAC;KAAW,OAAM;KAAM,OAAM;gBAC5B,oBAACA,oBAAK,SAAW,EAChB,cACC,qBAAC;MAAK,WAAU;;OAAqC;OACjD,QAAQ,QAAQ,KAAK,WAAW,OAAO,OAAO,SAAS,IAAI,EAAE;OAAC;;OAE3D;MAEE,EAGZ,QAAQ,KAAK,WACZ,oBAAC;KAEC,OAAO,OAAO;KACd,OAAO,OAAO;eAEd,qBAAC;MAAO,WAAU;iBAChB,oBAACA,oBAAM,OAAO,QAAa,EAC1B,cAAc,OAAO,UAAU,UAC9B,qBAACA;OAAK,WAAU;;QAAqC;QACjD,OAAO;QAAM;;QACV;OAEF;OAXJ,OAAO,MAYD,CACb;KACY;IACT;GACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoadingSpinner.js","names":[],"sources":["../../../../ui/atoms/LoadingSpinner/LoadingSpinner.tsx"],"sourcesContent":["import React from 'react';\nimport { Loader2 } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { P } from '../../typography';\nimport { View } from 'react-native';\n\ninterface LoadingSpinnerProps {\n size?: 'sm' | 'md' | 'lg' | 'xl';\n className?: string;\n text?: string;\n fullScreen?: boolean;\n}\n\nconst sizeClasses = {\n sm: 'h-4 w-4',\n md: 'h-6 w-6',\n lg: 'h-8 w-8',\n xl: 'h-12 w-12',\n};\n\nexport const LoadingSpinner: React.FC<LoadingSpinnerProps> = ({\n size = 'md',\n className,\n text,\n fullScreen = false,\n}) => {\n const spinner = (\n <View\n className={cn(\n 'flex flex-col items-center justify-center gap-2',\n className\n )}\n >\n <Loader2\n className={cn('text-primary-600 animate-spin', sizeClasses[size])}\n />\n {text && <P className=\"animate-pulse text-base text-gray-600\">{text}</P>}\n </View>\n );\n\n if (fullScreen) {\n return (\n <View className=\"fixed inset-0 z-50 flex items-center justify-center bg-white/80 backdrop-blur-xs\">\n {spinner}\n </View>\n );\n }\n\n return spinner;\n};\n\n// Skeleton loading components for better UX\nexport const SkeletonLine: React.FC<{ className?: string }> = ({\n className,\n}) => (\n <View className={cn('h-4 animate-pulse rounded-xs bg-gray-200', className)} />\n);\n\nexport const SkeletonCard: React.FC<{ className?: string }> = ({\n className,\n}) => (\n <View\n className={cn(\n 'animate-pulse space-y-3 rounded-lg bg-gray-200 p-4',\n className\n )}\n >\n <SkeletonLine className=\"h-6 w-3/4\" />\n <SkeletonLine className=\"h-4 w-full\" />\n <SkeletonLine className=\"h-4 w-2/3\" />\n </View>\n);\n\nexport const SkeletonTable: React.FC<{ rows?: number; cols?: number }> = ({\n rows = 5,\n cols = 4,\n}) => (\n <View className=\"space-y-3\">\n {Array.from({ length: rows }).map((_, i) => (\n <View key={i} className=\"flex space-x-4\">\n {Array.from({ length: cols }).map((_, j) => (\n <SkeletonLine key={j} className=\"flex-1\" />\n ))}\n </View>\n ))}\n </View>\n);\n"],"mappings":";;;;;;;;AAaA,MAAM,cAAc;CAClB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACL;AAED,MAAa,kBAAiD,EAC5D,OAAO,MACP,WACA,MACA,aAAa,YACT;CACJ,MAAM,UACJ,qBAAC;EACC,WAAW,GACT,mDACA,UACD;aAED,oBAAC,WACC,WAAW,GAAG,iCAAiC,YAAY,MAAM,GACjE,EACD,QAAQ,oBAAC;GAAE,WAAU;aAAyC;IAAS;GACnE;AAGT,KAAI,WACF,QACE,oBAAC;EAAK,WAAU;YACb;GACI;AAIX,QAAO;;AAIT,MAAa,gBAAkD,EAC7D,gBAEA,oBAAC,QAAK,WAAW,GAAG,4CAA4C,UAAU,GAAI;AAGhF,MAAa,gBAAkD,EAC7D,gBAEA,qBAAC;CACC,WAAW,GACT,sDACA,UACD;;EAED,oBAAC,gBAAa,WAAU,cAAc;EACtC,oBAAC,gBAAa,WAAU,eAAe;EACvC,oBAAC,gBAAa,WAAU,cAAc;;EACjC;AAGT,MAAa,iBAA6D,EACxE,OAAO,GACP,OAAO,QAEP,oBAAC;CAAK,WAAU;WACb,MAAM,KAAK,EAAE,QAAQ,MAAM,CAAC,CAAC,KAAK,GAAG,MACpC,oBAAC;EAAa,WAAU;YACrB,MAAM,KAAK,EAAE,QAAQ,MAAM,CAAC,CAAC,KAAK,KAAG,MACpC,oBAAC,gBAAqB,WAAU,YAAb,EAAwB,CAC3C;IAHO,EAIJ,CACP;EACG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Pagination.js","names":["Text"],"sources":["../../../../ui/atoms/Pagination/Pagination.tsx"],"sourcesContent":["import React from 'react';\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from 'lucide-react';\nimport { Button } from '../../button';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../../select';\nimport type { PaginationProps } from './types';\nimport { View } from 'react-native';\nimport { Text } from '../../text';\n\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n totalItems,\n itemsPerPage,\n onPageChange,\n onItemsPerPageChange,\n disabled = false,\n className = '',\n showItemsPerPage = true,\n itemsPerPageOptions = [10, 25, 50, 100],\n}) => {\n const startItem = (currentPage - 1) * itemsPerPage + 1;\n const endItem = Math.min(currentPage * itemsPerPage, totalItems);\n\n const canGoPrevious = currentPage > 1 && !disabled;\n const canGoNext = currentPage < totalPages && !disabled;\n\n const getVisiblePageNumbers = () => {\n if (totalPages <= 7) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n if (currentPage <= 3) {\n return [1, 2, 3, 4, 5, -1, totalPages]; // -1 represents ellipsis\n }\n\n if (currentPage >= totalPages - 2) {\n return [\n 1,\n -1,\n totalPages - 4,\n totalPages - 3,\n totalPages - 2,\n totalPages - 1,\n totalPages,\n ];\n }\n\n return [\n 1,\n -1,\n currentPage - 1,\n currentPage,\n currentPage + 1,\n -1,\n totalPages,\n ];\n };\n\n if (totalPages === 0) return null;\n\n return (\n <View\n className={`flex flex-col items-center justify-between gap-4 sm:flex-row ${className}`}\n >\n {/* Items info */}\n <View className=\"text-muted-foreground order-2 text-base sm:order-1\">\n Affichage de {startItem} à {endItem} sur {totalItems} résultats\n </View>\n\n {/* Pagination controls */}\n <View className=\"order-1 flex items-center gap-2 sm:order-2\">\n {/* First page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onPress={() => onPageChange(1)}\n disabled={!canGoPrevious}\n className=\"hidden h-8 w-8 p-0 sm:flex\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n <Text className=\"sr-only\">Première page</Text>\n </Button>\n\n {/* Previous page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onPress={() => onPageChange(currentPage - 1)}\n disabled={!canGoPrevious}\n className=\"h-8 w-8 p-0\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n <Text className=\"sr-only\">Page précédente</Text>\n </Button>\n\n {/* Page numbers */}\n <View className=\"flex items-center gap-1\">\n {getVisiblePageNumbers().map((page, index) => {\n if (page === -1) {\n return (\n <View\n key={`ellipsis-${index}`}\n className=\"text-muted-foreground px-2 py-1\"\n >\n ...\n </View>\n );\n }\n\n return (\n <Button\n key={page}\n variant={page === currentPage ? 'default' : 'outline'}\n size=\"sm\"\n onPress={() => onPageChange(page)}\n disabled={disabled}\n className=\"h-8 min-w-8 px-2\"\n >\n <Text>{page}</Text>\n </Button>\n );\n })}\n </View>\n\n {/* Next page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onPress={() => onPageChange(currentPage + 1)}\n disabled={!canGoNext}\n className=\"h-8 w-8 p-0\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n <Text className=\"sr-only\">Page suivante</Text>\n </Button>\n\n {/* Last page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onPress={() => onPageChange(totalPages)}\n disabled={!canGoNext}\n className=\"hidden h-8 w-8 p-0 sm:flex\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n <Text className=\"sr-only\">Dernière page</Text>\n </Button>\n </View>\n\n {/* Items per page */}\n {showItemsPerPage && onItemsPerPageChange && (\n <View className=\"order-3 flex items-center gap-2 text-base\">\n <Text className=\"text-muted-foreground\">Afficher:</Text>\n <Select\n value={{\n value: itemsPerPage.toString(),\n label: itemsPerPage.toString(),\n }}\n onValueChange={(value) =>\n onItemsPerPageChange(parseInt(value?.value || ''))\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 w-16\">\n <SelectValue placeholder=\"Afficher:\" />\n </SelectTrigger>\n <SelectContent className=\"bg-background\">\n {itemsPerPageOptions.map((option) => (\n <SelectItem\n key={option}\n value={option.toString()}\n label={option.toString()}\n >\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </View>\n )}\n </View>\n );\n};\n"],"mappings":";;;;;;;;;AAmBA,MAAa,cAAyC,EACpD,aACA,YACA,YACA,cACA,cACA,sBACA,WAAW,OACX,YAAY,IACZ,mBAAmB,MACnB,sBAAsB;CAAC;CAAI;CAAI;CAAI;CAAI,OACnC;CACJ,MAAM,aAAa,cAAc,KAAK,eAAe;CACrD,MAAM,UAAU,KAAK,IAAI,cAAc,cAAc,WAAW;CAEhE,MAAM,gBAAgB,cAAc,KAAK,CAAC;CAC1C,MAAM,YAAY,cAAc,cAAc,CAAC;CAE/C,MAAM,8BAA8B;AAClC,MAAI,cAAc,EAChB,QAAO,MAAM,KAAK,EAAE,QAAQ,YAAY,GAAG,GAAG,MAAM,IAAI,EAAE;AAG5D,MAAI,eAAe,EACjB,QAAO;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAW;AAGxC,MAAI,eAAe,aAAa,EAC9B,QAAO;GACL;GACA;GACA,aAAa;GACb,aAAa;GACb,aAAa;GACb,aAAa;GACb;GACD;AAGH,SAAO;GACL;GACA;GACA,cAAc;GACd;GACA,cAAc;GACd;GACA;GACD;;AAGH,KAAI,eAAe,EAAG,QAAO;AAE7B,QACE,qBAAC;EACC,WAAW,gEAAgE;;GAG3E,qBAAC;IAAK,WAAU;;KAAqD;KACrD;KAAU;KAAI;KAAQ;KAAM;KAAW;;KAChD;GAGP,qBAAC;IAAK,WAAU;;KAEd,qBAAC;MACC,SAAQ;MACR,MAAK;MACL,eAAe,aAAa,EAAE;MAC9B,UAAU,CAAC;MACX,WAAU;iBAEV,oBAAC,gBAAa,WAAU,YAAY,EACpC,oBAACA;OAAK,WAAU;iBAAU;QAAoB;OACvC;KAGT,qBAAC;MACC,SAAQ;MACR,MAAK;MACL,eAAe,aAAa,cAAc,EAAE;MAC5C,UAAU,CAAC;MACX,WAAU;iBAEV,oBAAC,eAAY,WAAU,YAAY,EACnC,oBAACA;OAAK,WAAU;iBAAU;QAAsB;OACzC;KAGT,oBAAC;MAAK,WAAU;gBACb,uBAAuB,CAAC,KAAK,MAAM,UAAU;AAC5C,WAAI,SAAS,GACX,QACE,oBAAC;QAEC,WAAU;kBACX;UAFM,YAAY,QAIZ;AAIX,cACE,oBAAC;QAEC,SAAS,SAAS,cAAc,YAAY;QAC5C,MAAK;QACL,eAAe,aAAa,KAAK;QACvB;QACV,WAAU;kBAEV,oBAACA,oBAAM,OAAY;UAPd,KAQE;QAEX;OACG;KAGP,qBAAC;MACC,SAAQ;MACR,MAAK;MACL,eAAe,aAAa,cAAc,EAAE;MAC5C,UAAU,CAAC;MACX,WAAU;iBAEV,oBAAC,gBAAa,WAAU,YAAY,EACpC,oBAACA;OAAK,WAAU;iBAAU;QAAoB;OACvC;KAGT,qBAAC;MACC,SAAQ;MACR,MAAK;MACL,eAAe,aAAa,WAAW;MACvC,UAAU,CAAC;MACX,WAAU;iBAEV,oBAAC,iBAAc,WAAU,YAAY,EACrC,oBAACA;OAAK,WAAU;iBAAU;QAAoB;OACvC;;KACJ;GAGN,oBAAoB,wBACnB,qBAAC;IAAK,WAAU;eACd,oBAACA;KAAK,WAAU;eAAwB;MAAgB,EACxD,qBAAC;KACC,OAAO;MACL,OAAO,aAAa,UAAU;MAC9B,OAAO,aAAa,UAAU;MAC/B;KACD,gBAAgB,UACd,qBAAqB,SAAS,OAAO,SAAS,GAAG,CAAC;KAE1C;gBAEV,oBAAC;MAAc,WAAU;gBACvB,oBAAC,eAAY,aAAY,cAAc;OACzB,EAChB,oBAAC;MAAc,WAAU;gBACtB,oBAAoB,KAAK,WACxB,oBAAC;OAEC,OAAO,OAAO,UAAU;OACxB,OAAO,OAAO,UAAU;iBAEvB;SAJI,OAKM,CACb;OACY;MACT;KACJ;;GAEJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SearchInput.js","names":["Text"],"sources":["../../../../ui/atoms/SearchInput/SearchInput.tsx"],"sourcesContent":["import React from 'react';\nimport { Search, X } from 'lucide-react';\nimport { Input } from '../../input';\nimport { Button } from '../../button';\nimport type { SearchInputProps } from './types';\nimport { View } from 'react-native';\nimport { Text } from '../../text';\n\nexport const SearchInput: React.FC<SearchInputProps> = ({\n value,\n onChange,\n placeholder = 'Rechercher...',\n onClear,\n disabled = false,\n className = '',\n}) => {\n const handleClear = () => {\n onChange('');\n onClear?.();\n };\n\n return (\n <View className={`relative w-full ${className}`}>\n <View className=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3\">\n <Search className=\"text-muted-foreground h-4 w-4\" />\n </View>\n\n <Input\n // type=\"text\"\n value={value}\n onChange={(e) => onChange(e.nativeEvent.text)}\n placeholder={placeholder}\n editable={!disabled}\n className=\"pr-10 pl-10\"\n />\n\n {value && (\n <View className=\"absolute inset-y-0 right-0 flex items-center pr-3\">\n <Button\n // type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onPress={handleClear}\n disabled={disabled}\n className=\"h-6 w-6 p-0 hover:bg-transparent\"\n >\n <X className=\"text-muted-foreground hover:text-foreground h-4 w-4\" />\n <Text className=\"sr-only\">Effacer la recherche</Text>\n </Button>\n </View>\n )}\n </View>\n );\n};\n"],"mappings":";;;;;;;;;AAQA,MAAa,eAA2C,EACtD,OACA,UACA,cAAc,iBACd,SACA,WAAW,OACX,YAAY,SACR;CACJ,MAAM,oBAAoB;AACxB,WAAS,GAAG;AACZ,aAAW;;AAGb,QACE,qBAAC;EAAK,WAAW,mBAAmB;;GAClC,oBAAC;IAAK,WAAU;cACd,oBAAC,UAAO,WAAU,kCAAkC;KAC/C;GAEP,oBAAC;IAEQ;IACP,WAAW,MAAM,SAAS,EAAE,YAAY,KAAK;IAChC;IACb,UAAU,CAAC;IACX,WAAU;KACV;GAED,SACC,oBAAC;IAAK,WAAU;cACd,qBAAC;KAEC,SAAQ;KACR,MAAK;KACL,SAAS;KACC;KACV,WAAU;gBAEV,oBAAC,KAAE,WAAU,wDAAwD,EACrE,oBAACA;MAAK,WAAU;gBAAU;OAA2B;MAC9C;KACJ;;GAEJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"avatar.js","names":[],"sources":["../../ui/avatar.tsx"],"sourcesContent":["import * as AvatarPrimitive from '@rn-primitives/avatar';\nimport * as React from 'react';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\n\nfunction Avatar({\n className,\n ...props\n}: AvatarPrimitive.RootProps & {\n ref?: React.RefObject<AvatarPrimitive.RootRef>;\n}) {\n return (\n <AvatarPrimitive.Root\n className={cn(\n 'relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({\n className,\n alt,\n ...props\n}: AvatarPrimitive.ImageProps & {\n ref?: React.RefObject<AvatarPrimitive.ImageRef>;\n alt?: string;\n}) {\n return (\n <AvatarPrimitive.Image\n className={cn('aspect-square h-full w-full', className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: AvatarPrimitive.FallbackProps & {\n ref?: React.RefObject<AvatarPrimitive.FallbackRef>;\n}) {\n return (\n <AvatarPrimitive.Fallback\n className={cn(\n 'bg-muted flex h-full w-full items-center justify-center rounded-full',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Avatar, AvatarFallback, AvatarImage };\n"],"mappings":";;;;;;AAIA,SAAS,OAAO,EACd,WACA,GAAG,SAGF;AACD,QACE,oBAAC,gBAAgB;EACf,WAAW,GACT,iEACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,YAAY,EACnB,WACA,KACA,GAAG,SAIF;AACD,QACE,oBAAC,gBAAgB;EACf,WAAW,GAAG,+BAA+B,UAAU;EACvD,GAAI;GACJ;;AAIN,SAAS,eAAe,EACtB,WACA,GAAG,SAGF;AACD,QACE,oBAAC,gBAAgB;EACf,WAAW,GACT,wEACA,UACD;EACD,GAAI;GACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"badge.js","names":[],"sources":["../../ui/badge.tsx"],"sourcesContent":["import * as React from 'react';\nimport { View } from 'react-native';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\n\nconst badgeVariants = cva(\n 'web:inline-flex items-center rounded-full border border-border px-2.5 py-0.5 text-xs font-semibold web:transition-colors web:focus:outline-hidden web:focus:ring-2 web:focus:ring-ring web:focus:ring-offset-2',\n {\n variants: {\n variant: {\n default:\n 'border-transparent bg-primary text-primary-foreground web:hover:opacity-80 active:opacity-80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground web:hover:opacity-80 active:opacity-80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground web:hover:opacity-80 active:opacity-80',\n outline: 'text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\ntype BadgeProps = React.ComponentProps<typeof View> &\n VariantProps<typeof badgeVariants> & {\n labelClassName?: string;\n };\n\nfunction Badge({ className, variant, labelClassName, ...props }: BadgeProps) {\n return (\n <View className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n"],"mappings":";;;;;;;AAKA,MAAM,gBAAgB,IACpB,kNACA;CACE,UAAU,EACR,SAAS;EACP,SACE;EACF,WACE;EACF,aACE;EACF,SAAS;EACV,EACF;CACD,iBAAiB,EACf,SAAS,WACV;CACF,CACF;AAOD,SAAS,MAAM,EAAE,WAAW,SAAS,gBAAgB,GAAG,SAAqB;AAC3E,QACE,oBAAC;EAAK,WAAW,GAAG,cAAc,EAAE,SAAS,CAAC,EAAE,UAAU;EAAE,GAAI;GAAS"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"breadcrumb.js","names":[],"sources":["../../ui/breadcrumb.tsx"],"sourcesContent":["import * as React from 'react';\nimport { ChevronRight, MoreHorizontal } from 'lucide-react';\nimport { Text, View } from 'react-native';\n\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<'nav'>) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />;\n}\n\nfunction BreadcrumbList({\n className,\n ...props\n}: React.ComponentProps<typeof View>) {\n return (\n <View\n data-slot=\"breadcrumb-list\"\n className={cn(\n 'text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbItem({\n className,\n ...props\n}: React.ComponentProps<typeof View>) {\n return (\n <View\n data-slot=\"breadcrumb-item\"\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<typeof View> & {\n asChild?: boolean;\n}) {\n // const Comp = asChild ? Slot : View;\n\n return (\n <View\n data-slot=\"breadcrumb-link\"\n className={cn('hover:text-foreground transition-colors', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbPage({\n className,\n ...props\n}: React.ComponentProps<typeof View>) {\n return (\n <View\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled\n aria-current=\"page\"\n className={cn('text-foreground font-normal', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<typeof View>) {\n return (\n <View\n role=\"presentation\"\n data-slot=\"breadcrumb-separator\"\n aria-hidden\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </View>\n );\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<typeof View>) {\n return (\n <View\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden\n className={cn('flex size-9 items-center justify-center', className)}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\n <View className=\"sr-only\">\n <Text>More</Text>\n </View>\n </View>\n );\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n"],"mappings":";;;;;;;AAMA,SAAS,WAAW,EAAE,GAAG,SAAsC;AAC7D,QAAO,oBAAC;EAAI,cAAW;EAAa,aAAU;EAAa,GAAI;GAAS;;AAG1E,SAAS,eAAe,EACtB,WACA,GAAG,SACiC;AACpC,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,4FACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,eAAe,EACtB,WACA,GAAG,SACiC;AACpC,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GAAG,oCAAoC,UAAU;EAC5D,GAAI;GACJ;;AAIN,SAAS,eAAe,EACtB,SACA,WACA,GAAG,SAGF;AAGD,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GAAG,2CAA2C,UAAU;EACnE,GAAI;GACJ;;AAIN,SAAS,eAAe,EACtB,WACA,GAAG,SACiC;AACpC,QACE,oBAAC;EACC,aAAU;EACV,MAAK;EACL;EACA,gBAAa;EACb,WAAW,GAAG,+BAA+B,UAAU;EACvD,GAAI;GACJ;;AAIN,SAAS,oBAAoB,EAC3B,UACA,WACA,GAAG,SACiC;AACpC,QACE,oBAAC;EACC,MAAK;EACL,aAAU;EACV;EACA,WAAW,GAAG,oBAAoB,UAAU;EAC5C,GAAI;YAEH,YAAY,oBAAC,iBAAe;GACxB;;AAIX,SAAS,mBAAmB,EAC1B,WACA,GAAG,SACiC;AACpC,QACE,qBAAC;EACC,aAAU;EACV,MAAK;EACL;EACA,WAAW,GAAG,2CAA2C,UAAU;EACnE,GAAI;aAEJ,oBAAC,kBAAe,WAAU,WAAW,EACrC,oBAAC;GAAK,WAAU;aACd,oBAAC,kBAAK,SAAW;IACZ;GACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"button.js","names":[],"sources":["../../ui/button.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\nimport { Pressable } from 'react-native';\nimport { TextClassContext } from './text';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\n\nconst buttonVariants = cva(\n 'group flex items-center justify-center rounded-md web:ring-offset-background web:transition-colors web:focus-visible:outline-hidden web:focus-visible:ring-2 web:focus-visible:ring-ring web:focus-visible:ring-offset-2',\n {\n variants: {\n variant: {\n default: 'bg-primary web:hover:opacity-90 active:opacity-90',\n destructive: 'bg-destructive web:hover:opacity-90 active:opacity-90',\n outline:\n 'border border-input bg-background web:hover:bg-accent web:hover:text-accent-foreground active:bg-accent',\n secondary: 'bg-secondary web:hover:opacity-80 active:opacity-80',\n ghost:\n 'web:hover:bg-accent web:hover:text-accent-foreground active:bg-accent',\n link: 'web:underline-offset-4 web:hover:underline web:focus:underline',\n },\n size: {\n default: 'h-10 px-4 py-2 native:h-12 native:px-5 native:py-3',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8 native:h-14',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nconst buttonTextVariants = cva(\n 'web:whitespace-nowrap text-sm native:text-base font-medium text-foreground web:transition-colors',\n {\n variants: {\n variant: {\n default: 'text-primary-foreground',\n destructive: 'text-destructive-foreground',\n outline: 'group-active:text-accent-foreground',\n secondary:\n 'text-secondary-foreground group-active:text-secondary-foreground',\n ghost: 'group-active:text-accent-foreground',\n link: 'text-primary group-active:underline',\n },\n size: {\n default: '',\n sm: '',\n lg: 'native:text-lg',\n icon: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\ntype ButtonProps = React.ComponentProps<typeof Pressable> &\n VariantProps<typeof buttonVariants>;\n\nfunction Button({ ref, className, variant, size, ...props }: ButtonProps) {\n return (\n <TextClassContext.Provider\n value={buttonTextVariants({\n variant,\n size,\n className: 'web:pointer-events-none',\n })}\n >\n <Pressable\n className={cn(\n props.disabled && 'web:pointer-events-none opacity-50',\n buttonVariants({ variant, size, className })\n )}\n ref={ref}\n role=\"button\"\n {...props}\n />\n </TextClassContext.Provider>\n );\n}\n\nexport { Button, buttonTextVariants, buttonVariants };\nexport type { ButtonProps };\n"],"mappings":";;;;;;;;AAMA,MAAM,iBAAiB,IACrB,4NACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,aAAa;GACb,SACE;GACF,WAAW;GACX,OACE;GACF,MAAM;GACP;EACD,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,MAAM;GACP;EACF;CACD,iBAAiB;EACf,SAAS;EACT,MAAM;EACP;CACF,CACF;AAED,MAAM,qBAAqB,IACzB,oGACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,aAAa;GACb,SAAS;GACT,WACE;GACF,OAAO;GACP,MAAM;GACP;EACD,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,MAAM;GACP;EACF;CACD,iBAAiB;EACf,SAAS;EACT,MAAM;EACP;CACF,CACF;AAKD,SAAS,OAAO,EAAE,KAAK,WAAW,SAAS,MAAM,GAAG,SAAsB;AACxE,QACE,oBAAC,iBAAiB;EAChB,OAAO,mBAAmB;GACxB;GACA;GACA,WAAW;GACZ,CAAC;YAEF,oBAAC;GACC,WAAW,GACT,MAAM,YAAY,sCAClB,eAAe;IAAE;IAAS;IAAM;IAAW,CAAC,CAC7C;GACI;GACL,MAAK;GACL,GAAI;IACJ;GACwB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"card.js","names":[],"sources":["../../ui/card.tsx"],"sourcesContent":["import * as React from 'react';\nimport type { TextProps, ViewProps } from 'react-native';\nimport { Text, View } from 'react-native';\nimport { TextClassContext } from './text';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\n\nfunction Card({\n className,\n ...props\n}: ViewProps & {\n ref?: React.RefObject<View>;\n}) {\n return (\n <View\n className={cn(\n 'border-border bg-card shadow-foreground/10 rounded-lg border shadow-2xs',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({\n className,\n ...props\n}: ViewProps & {\n ref?: React.RefObject<View>;\n}) {\n return (\n <View className={cn('flex flex-col gap-y-1.5 p-6', className)} {...props} />\n );\n}\n\nfunction CardTitle({\n className,\n ...props\n}: TextProps & {\n ref?: React.RefObject<Text>;\n}) {\n return (\n <Text\n role=\"heading\"\n aria-level={3}\n className={cn(\n 'text-card-foreground text-2xl leading-none font-semibold tracking-tight',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CardDescription({\n className,\n ...props\n}: TextProps & {\n ref?: React.RefObject<Text>;\n}) {\n return (\n <Text\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({\n className,\n ...props\n}: ViewProps & {\n ref?: React.RefObject<View>;\n}) {\n return (\n <TextClassContext.Provider value=\"text-card-foreground\">\n <View className={cn('p-6 pt-0', className)} {...props} />\n </TextClassContext.Provider>\n );\n}\n\nfunction CardFooter({\n className,\n ...props\n}: ViewProps & {\n ref?: React.RefObject<View>;\n}) {\n return (\n <View\n className={cn('flex flex-row items-center p-6 pt-0', className)}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n};\n"],"mappings":";;;;;;;AAMA,SAAS,KAAK,EACZ,WACA,GAAG,SAGF;AACD,QACE,oBAAC;EACC,WAAW,GACT,2EACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,WAAW,EAClB,WACA,GAAG,SAGF;AACD,QACE,oBAAC;EAAK,WAAW,GAAG,+BAA+B,UAAU;EAAE,GAAI;GAAS;;AAIhF,SAAS,UAAU,EACjB,WACA,GAAG,SAGF;AACD,QACE,oBAAC;EACC,MAAK;EACL,cAAY;EACZ,WAAW,GACT,2EACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,gBAAgB,EACvB,WACA,GAAG,SAGF;AACD,QACE,oBAAC;EACC,WAAW,GAAG,iCAAiC,UAAU;EACzD,GAAI;GACJ;;AAIN,SAAS,YAAY,EACnB,WACA,GAAG,SAGF;AACD,QACE,oBAAC,iBAAiB;EAAS,OAAM;YAC/B,oBAAC;GAAK,WAAW,GAAG,YAAY,UAAU;GAAE,GAAI;IAAS;GAC/B;;AAIhC,SAAS,WAAW,EAClB,WACA,GAAG,SAGF;AACD,QACE,oBAAC;EACC,WAAW,GAAG,uCAAuC,UAAU;EAC/D,GAAI;GACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"carousel.js","names":[],"sources":["../../ui/carousel.tsx"],"sourcesContent":["export const carousel = 'null';\n"],"mappings":";AAAA,MAAa,WAAW"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkbox.js","names":["React"],"sources":["../../ui/checkbox.tsx"],"sourcesContent":["import * as CheckboxPrimitive from '@rn-primitives/checkbox';\nimport * as React from 'react';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\nimport { Check } from 'lucide-react-native';\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'web:peer border-primary web:ring-offset-background web:focus-visible:outline-hidden web:focus-visible:ring-2 web:focus-visible:ring-ring web:focus-visible:ring-offset-2 h-4 w-4 shrink-0 rounded-xs border disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn('flex items-center justify-center text-current')}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n"],"mappings":";;;;;;;AAKA,MAAM,WAAWA,QAAM,YAGpB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,kBAAkB;CACZ;CACL,WAAW,GACT,+PACA,UACD;CACD,GAAI;WAEJ,oBAAC,kBAAkB;EACjB,WAAW,GAAG,gDAAgD;YAE9D,oBAAC,SAAM,WAAU,YAAY;GACD;EACP,CACzB;AACF,SAAS,cAAc,kBAAkB,KAAK"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"collapsible.js","names":[],"sources":["../../ui/collapsible.tsx"],"sourcesContent":["import * as CollapsiblePrimitive from '@rn-primitives/collapsible';\n\nconst Collapsible = CollapsiblePrimitive.Root;\n\nconst CollapsibleTrigger = CollapsiblePrimitive.Trigger;\n\nconst CollapsibleContent = CollapsiblePrimitive.Content;\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n"],"mappings":";;;AAEA,MAAM,cAAc,qBAAqB;AAEzC,MAAM,qBAAqB,qBAAqB;AAEhD,MAAM,qBAAqB,qBAAqB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"command.js","names":[],"sources":["../../ui/command.tsx"],"sourcesContent":["export const carousel = 'null';\n"],"mappings":";AAAA,MAAa,WAAW"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-menu.js","names":[],"sources":["../../ui/context-menu.tsx"],"sourcesContent":["import * as ContextMenuPrimitive from '@rn-primitives/context-menu';\nimport * as React from 'react';\nimport {\n Platform,\n type StyleProp,\n StyleSheet,\n Text,\n type TextProps,\n View,\n type ViewStyle,\n} from 'react-native';\nimport { Check } from './icons/Check';\nimport { ChevronDown } from './icons/ChevronDown';\nimport { ChevronRight } from './icons/ChevronRight';\nimport { ChevronUp } from './icons/ChevronUp';\nimport { TextClassContext } from './text';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\n\nconst ContextMenu = ContextMenuPrimitive.Root;\nconst ContextMenuTrigger = ContextMenuPrimitive.Trigger;\nconst ContextMenuGroup = ContextMenuPrimitive.Group;\nconst ContextMenuSub = ContextMenuPrimitive.Sub;\nconst ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: ContextMenuPrimitive.SubTriggerProps & {\n ref?: React.RefObject<ContextMenuPrimitive.SubTriggerRef>;\n children?: React.ReactNode;\n inset?: boolean;\n}) {\n const { open } = ContextMenuPrimitive.useSubContext();\n const Icon =\n Platform.OS === 'web' ? ChevronRight : open ? ChevronUp : ChevronDown;\n return (\n <TextClassContext.Provider\n value={cn(\n 'native:text-lg text-primary text-sm select-none',\n open && 'native:text-accent-foreground'\n )}\n >\n <ContextMenuPrimitive.SubTrigger\n className={cn(\n 'native:py-2 active:bg-accent web:cursor-default web:select-none web:outline-hidden web:hover:bg-accent web:focus:bg-accent flex flex-row items-center gap-2 rounded-xs px-2 py-1.5',\n open && 'bg-accent',\n inset && 'pl-8',\n className\n )}\n {...props}\n >\n {children}\n <Icon size={18} className=\"text-foreground ml-auto\" />\n </ContextMenuPrimitive.SubTrigger>\n </TextClassContext.Provider>\n );\n}\n\nfunction ContextMenuSubContent({\n className,\n ...props\n}: ContextMenuPrimitive.SubContentProps & {\n ref?: React.RefObject<ContextMenuPrimitive.SubContentRef>;\n}) {\n const { open } = ContextMenuPrimitive.useSubContext();\n return (\n <ContextMenuPrimitive.SubContent\n className={cn(\n 'border-border bg-popover shadow-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 mt-1 min-w-32 overflow-hidden rounded-md border p-1 shadow-md',\n open\n ? 'web:animate-in web:fade-in-0 web:zoom-in-95'\n : 'web:animate-out web:fade-out-0 web:zoom-out',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction ContextMenuContent({\n className,\n overlayClassName,\n overlayStyle,\n portalHost,\n ...props\n}: ContextMenuPrimitive.ContentProps & {\n ref?: React.RefObject<ContextMenuPrimitive.ContentRef>;\n overlayStyle?: StyleProp<ViewStyle>;\n overlayClassName?: string;\n portalHost?: string;\n}) {\n const { open } = ContextMenuPrimitive.useRootContext();\n return (\n <ContextMenuPrimitive.Portal hostName={portalHost}>\n <ContextMenuPrimitive.Overlay\n style={\n overlayStyle\n ? StyleSheet.flatten([\n Platform.OS !== 'web' ? StyleSheet.absoluteFill : undefined,\n overlayStyle as typeof StyleSheet.absoluteFill,\n ])\n : Platform.OS !== 'web'\n ? StyleSheet.absoluteFill\n : undefined\n }\n className={overlayClassName}\n >\n <ContextMenuPrimitive.Content\n className={cn(\n 'border-border bg-popover shadow-foreground/5 web:data-[side=bottom]:slide-in-from-top-2 web:data-[side=left]:slide-in-from-right-2 web:data-[side=right]:slide-in-from-left-2 web:data-[side=top]:slide-in-from-bottom-2 z-50 min-w-32 overflow-hidden rounded-md border p-1 shadow-md',\n open\n ? 'web:animate-in web:fade-in-0 web:zoom-in-95'\n : 'web:animate-out web:fade-out-0 web:zoom-out-95',\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Overlay>\n </ContextMenuPrimitive.Portal>\n );\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n ...props\n}: ContextMenuPrimitive.ItemProps & {\n ref?: React.RefObject<ContextMenuPrimitive.ItemRef>;\n className?: string;\n inset?: boolean;\n}) {\n return (\n <TextClassContext.Provider value=\"select-none text-sm native:text-lg text-popover-foreground web:group-focus:text-accent-foreground\">\n <ContextMenuPrimitive.Item\n className={cn(\n 'native:py-2 group active:bg-accent web:cursor-default web:outline-hidden web:hover:bg-accent web:focus:bg-accent relative flex flex-row items-center gap-2 rounded-xs px-2 py-1.5',\n inset && 'pl-8',\n props.disabled && 'web:pointer-events-none opacity-50',\n className\n )}\n {...props}\n />\n </TextClassContext.Provider>\n );\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n ...props\n}: ContextMenuPrimitive.CheckboxItemProps & {\n ref?: React.RefObject<ContextMenuPrimitive.CheckboxItemRef>;\n children?: React.ReactNode;\n}) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n className={cn(\n 'web:group native:py-2 active:bg-accent web:cursor-default web:outline-hidden web:focus:bg-accent relative flex flex-row items-center rounded-xs py-1.5 pr-2 pl-8',\n props.disabled && 'web:pointer-events-none opacity-50',\n className\n )}\n {...props}\n >\n <View className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <Check size={14} strokeWidth={3} className=\"text-foreground\" />\n </ContextMenuPrimitive.ItemIndicator>\n </View>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: ContextMenuPrimitive.RadioItemProps & {\n ref?: React.RefObject<ContextMenuPrimitive.RadioItemRef>;\n children?: React.ReactNode;\n}) {\n return (\n <ContextMenuPrimitive.RadioItem\n className={cn(\n 'web:group native:py-2 active:bg-accent web:cursor-default web:outline-hidden web:focus:bg-accent relative flex flex-row items-center rounded-xs py-1.5 pr-2 pl-8',\n props.disabled && 'web:pointer-events-none opacity-50',\n className\n )}\n {...props}\n >\n <View className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <View className=\"bg-foreground h-2 w-2 rounded-full\" />\n </ContextMenuPrimitive.ItemIndicator>\n </View>\n {children}\n </ContextMenuPrimitive.RadioItem>\n );\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: ContextMenuPrimitive.LabelProps & {\n ref?: React.RefObject<ContextMenuPrimitive.LabelRef>;\n className?: string;\n inset?: boolean;\n}) {\n return (\n <ContextMenuPrimitive.Label\n className={cn(\n 'native:text-base text-foreground web:cursor-default px-2 py-1.5 text-sm font-semibold',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: ContextMenuPrimitive.SeparatorProps & {\n ref?: React.RefObject<ContextMenuPrimitive.SeparatorRef>;\n}) {\n return (\n <ContextMenuPrimitive.Separator\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction ContextMenuShortcut({ className, ...props }: TextProps) {\n return (\n <Text\n className={cn(\n 'native:text-sm text-muted-foreground ml-auto text-xs tracking-widest',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n ContextMenu,\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuGroup,\n ContextMenuItem,\n ContextMenuLabel,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n};\n"],"mappings":";;;;;;;;;;;;AAkBA,MAAM,cAAc,qBAAqB;AACzC,MAAM,qBAAqB,qBAAqB;AAChD,MAAM,mBAAmB,qBAAqB;AAC9C,MAAM,iBAAiB,qBAAqB;AAC5C,MAAM,wBAAwB,qBAAqB;AAEnD,SAAS,sBAAsB,EAC7B,WACA,OACA,UACA,GAAG,SAKF;CACD,MAAM,EAAE,SAAS,qBAAqB,eAAe;CACrD,MAAM,OACJ,SAAS,OAAO,QAAQ,eAAe,OAAO,YAAY;AAC5D,QACE,oBAAC,iBAAiB;EAChB,OAAO,GACL,mDACA,QAAQ,gCACT;YAED,qBAAC,qBAAqB;GACpB,WAAW,GACT,sLACA,QAAQ,aACR,SAAS,QACT,UACD;GACD,GAAI;cAEH,UACD,oBAAC;IAAK,MAAM;IAAI,WAAU;KAA4B;IACtB;GACR;;AAIhC,SAAS,sBAAsB,EAC7B,WACA,GAAG,SAGF;CACD,MAAM,EAAE,SAAS,qBAAqB,eAAe;AACrD,QACE,oBAAC,qBAAqB;EACpB,WAAW,GACT,+QACA,OACI,gDACA,+CACJ,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,mBAAmB,EAC1B,WACA,kBACA,cACA,YACA,GAAG,SAMF;CACD,MAAM,EAAE,SAAS,qBAAqB,gBAAgB;AACtD,QACE,oBAAC,qBAAqB;EAAO,UAAU;YACrC,oBAAC,qBAAqB;GACpB,OACE,eACI,WAAW,QAAQ,CACjB,SAAS,OAAO,QAAQ,WAAW,eAAe,QAClD,aACD,CAAC,GACF,SAAS,OAAO,QACd,WAAW,eACX;GAER,WAAW;aAEX,oBAAC,qBAAqB;IACpB,WAAW,GACT,0RACA,OACI,gDACA,kDACJ,UACD;IACD,GAAI;KACJ;IAC2B;GACH;;AAIlC,SAAS,gBAAgB,EACvB,WACA,OACA,GAAG,SAKF;AACD,QACE,oBAAC,iBAAiB;EAAS,OAAM;YAC/B,oBAAC,qBAAqB;GACpB,WAAW,GACT,qLACA,SAAS,QACT,MAAM,YAAY,sCAClB,UACD;GACD,GAAI;IACJ;GACwB;;AAIhC,SAAS,wBAAwB,EAC/B,WACA,UACA,GAAG,SAIF;AACD,QACE,qBAAC,qBAAqB;EACpB,WAAW,GACT,oKACA,MAAM,YAAY,sCAClB,UACD;EACD,GAAI;aAEJ,oBAAC;GAAK,WAAU;aACd,oBAAC,qBAAqB,2BACpB,oBAAC;IAAM,MAAM;IAAI,aAAa;IAAG,WAAU;KAAoB,GAC5B;IAChC,EACN;GACiC;;AAIxC,SAAS,qBAAqB,EAC5B,WACA,UACA,GAAG,SAIF;AACD,QACE,qBAAC,qBAAqB;EACpB,WAAW,GACT,oKACA,MAAM,YAAY,sCAClB,UACD;EACD,GAAI;aAEJ,oBAAC;GAAK,WAAU;aACd,oBAAC,qBAAqB,2BACpB,oBAAC,QAAK,WAAU,uCAAuC,GACpB;IAChC,EACN;GAC8B;;AAIrC,SAAS,iBAAiB,EACxB,WACA,OACA,GAAG,SAKF;AACD,QACE,oBAAC,qBAAqB;EACpB,WAAW,GACT,yFACA,SAAS,QACT,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,qBAAqB,EAC5B,WACA,GAAG,SAGF;AACD,QACE,oBAAC,qBAAqB;EACpB,WAAW,GAAG,6BAA6B,UAAU;EACrD,GAAI;GACJ;;AAIN,SAAS,oBAAoB,EAAE,WAAW,GAAG,SAAoB;AAC/D,QACE,oBAAC;EACC,WAAW,GACT,wEACA,UACD;EACD,GAAI;GACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"date-picker.js","names":["Text"],"sources":["../../ui/date-picker.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport { Platform, Pressable, View } from 'react-native';\nimport type {\n AndroidNativeProps,\n IOSNativeProps,\n} from '@react-native-community/datetimepicker';\nimport DateTimePicker from '@react-native-community/datetimepicker';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\nimport { Text } from './text';\n\nexport interface DatePickerProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n disabled?: boolean;\n minDate?: Date;\n maxDate?: Date;\n placeholder?: string;\n className?: string;\n}\n\nfunction formatDateDisplay(date: Date | null) {\n if (!date) return '';\n try {\n return date.toLocaleDateString(undefined, {\n day: '2-digit',\n month: 'long',\n year: 'numeric',\n });\n } catch {\n return '';\n }\n}\n\nexport function DatePicker({\n value,\n onChange,\n disabled,\n minDate,\n maxDate,\n placeholder = 'Select date',\n className,\n}: DatePickerProps) {\n const [show, setShow] = useState(false);\n\n const pickerProps = useMemo<Partial<AndroidNativeProps & IOSNativeProps>>(\n () => ({\n minimumDate: minDate,\n maximumDate: maxDate,\n timeZoneName: undefined,\n }),\n [minDate, maxDate]\n );\n\n const handleChange = (_event: unknown, selectedDate?: Date | undefined) => {\n if (Platform.OS !== 'ios') setShow(false);\n if (selectedDate) {\n onChange(selectedDate);\n }\n };\n\n return (\n <View className={cn('w-full', className)}>\n <Pressable\n disabled={disabled}\n onPress={() => setShow(true)}\n className={cn(\n 'border-input bg-background h-12 flex-row items-center rounded-md border px-3',\n disabled && 'opacity-50'\n )}\n >\n <Text\n className={cn('text-foreground text-base', !value && 'opacity-50')}\n >\n {value ? formatDateDisplay(value) : placeholder}\n </Text>\n </Pressable>\n {show && (\n <DateTimePicker\n value={value ?? new Date()}\n mode=\"date\"\n display={Platform.OS === 'ios' ? 'inline' : 'default'}\n onChange={handleChange}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n {...(pickerProps as any)}\n />\n )}\n </View>\n );\n}\n"],"mappings":";;;;;;;;AAoBA,SAAS,kBAAkB,MAAmB;AAC5C,KAAI,CAAC,KAAM,QAAO;AAClB,KAAI;AACF,SAAO,KAAK,mBAAmB,QAAW;GACxC,KAAK;GACL,OAAO;GACP,MAAM;GACP,CAAC;SACI;AACN,SAAO;;;AAIX,SAAgB,WAAW,EACzB,OACA,UACA,UACA,SACA,SACA,cAAc,eACd,aACkB;CAClB,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CAEvC,MAAM,cAAc,eACX;EACL,aAAa;EACb,aAAa;EACb,cAAc;EACf,GACD,CAAC,SAAS,QAAQ,CACnB;CAED,MAAM,gBAAgB,QAAiB,iBAAoC;AACzE,MAAI,SAAS,OAAO,MAAO,SAAQ,MAAM;AACzC,MAAI,aACF,UAAS,aAAa;;AAI1B,QACE,qBAAC;EAAK,WAAW,GAAG,UAAU,UAAU;aACtC,oBAAC;GACW;GACV,eAAe,QAAQ,KAAK;GAC5B,WAAW,GACT,gFACA,YAAY,aACb;aAED,oBAACA;IACC,WAAW,GAAG,6BAA6B,CAAC,SAAS,aAAa;cAEjE,QAAQ,kBAAkB,MAAM,GAAG;KAC/B;IACG,EACX,QACC,oBAAC;GACC,OAAO,yBAAS,IAAI,MAAM;GAC1B,MAAK;GACL,SAAS,SAAS,OAAO,QAAQ,WAAW;GAC5C,UAAU;GAEV,GAAK;IACL;GAEC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"date-range-picker.js","names":["Text"],"sources":["../../ui/date-range-picker.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport { Platform, Pressable } from 'react-native';\nimport DateTimePicker from '@react-native-community/datetimepicker';\nimport { HStack, VStack } from './stack';\nimport { Text } from './text';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\n\nexport interface DateRange {\n start: Date | null;\n end: Date | null;\n}\n\nexport interface DateRangePickerProps {\n value: DateRange;\n onChange: (range: DateRange) => void;\n disabled?: boolean;\n minDate?: Date;\n maxDate?: Date;\n placeholders?: { start?: string; end?: string };\n className?: string;\n}\n\nfunction fmt(d: Date | null) {\n if (!d) return '';\n try {\n return d.toLocaleDateString();\n } catch {\n return '';\n }\n}\n\nexport function DateRangePicker({\n value,\n onChange,\n disabled,\n minDate,\n maxDate,\n placeholders,\n className,\n}: DateRangePickerProps) {\n const [showStart, setShowStart] = useState(false);\n const [showEnd, setShowEnd] = useState(false);\n\n const pickerCommon = useMemo(\n () => ({ minimumDate: minDate, maximumDate: maxDate }),\n [minDate, maxDate]\n );\n\n const handleStart = (_: unknown, d?: Date) => {\n if (Platform.OS !== 'ios') setShowStart(false);\n if (!d) return;\n const end = value.end && d > value.end ? d : value.end;\n onChange({ start: d, end });\n };\n const handleEnd = (_: unknown, d?: Date) => {\n if (Platform.OS !== 'ios') setShowEnd(false);\n if (!d) return;\n const start = value.start && d < value.start ? d : value.start;\n onChange({ start, end: d });\n };\n\n return (\n <VStack className={cn('w-full', className)} spacing=\"sm\">\n <HStack gap=\"sm\">\n <Pressable\n disabled={disabled}\n onPress={() => setShowStart(true)}\n className={cn(\n 'border-input bg-background h-12 flex-1 flex-row items-center rounded-md border px-3',\n disabled && 'opacity-50'\n )}\n >\n <Text\n className={cn(\n 'text-foreground text-base',\n !value.start && 'opacity-50'\n )}\n >\n {value.start\n ? fmt(value.start)\n : placeholders?.start || 'Start date'}\n </Text>\n </Pressable>\n <Pressable\n disabled={disabled}\n onPress={() => setShowEnd(true)}\n className={cn(\n 'border-input bg-background h-12 flex-1 flex-row items-center rounded-md border px-3',\n disabled && 'opacity-50'\n )}\n >\n <Text\n className={cn(\n 'text-foreground text-base',\n !value.end && 'opacity-50'\n )}\n >\n {value.end ? fmt(value.end) : placeholders?.end || 'End date'}\n </Text>\n </Pressable>\n </HStack>\n\n {showStart && (\n <DateTimePicker\n value={value.start ?? new Date()}\n mode=\"date\"\n display={Platform.OS === 'ios' ? 'inline' : 'default'}\n onChange={handleStart}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n {...(pickerCommon as any)}\n />\n )}\n {showEnd && (\n <DateTimePicker\n value={value.end ?? value.start ?? new Date()}\n mode=\"date\"\n display={Platform.OS === 'ios' ? 'inline' : 'default'}\n onChange={handleEnd}\n minimumDate={value.start ?? minDate}\n maximumDate={maxDate}\n />\n )}\n </VStack>\n );\n}\n"],"mappings":";;;;;;;;;AAsBA,SAAS,IAAI,GAAgB;AAC3B,KAAI,CAAC,EAAG,QAAO;AACf,KAAI;AACF,SAAO,EAAE,oBAAoB;SACvB;AACN,SAAO;;;AAIX,SAAgB,gBAAgB,EAC9B,OACA,UACA,UACA,SACA,SACA,cACA,aACuB;CACvB,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;CACjD,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;CAE7C,MAAM,eAAe,eACZ;EAAE,aAAa;EAAS,aAAa;EAAS,GACrD,CAAC,SAAS,QAAQ,CACnB;CAED,MAAM,eAAe,GAAY,MAAa;AAC5C,MAAI,SAAS,OAAO,MAAO,cAAa,MAAM;AAC9C,MAAI,CAAC,EAAG;AAER,WAAS;GAAE,OAAO;GAAG,KADT,MAAM,OAAO,IAAI,MAAM,MAAM,IAAI,MAAM;GACzB,CAAC;;CAE7B,MAAM,aAAa,GAAY,MAAa;AAC1C,MAAI,SAAS,OAAO,MAAO,YAAW,MAAM;AAC5C,MAAI,CAAC,EAAG;AAER,WAAS;GAAE,OADG,MAAM,SAAS,IAAI,MAAM,QAAQ,IAAI,MAAM;GACvC,KAAK;GAAG,CAAC;;AAG7B,QACE,qBAAC;EAAO,WAAW,GAAG,UAAU,UAAU;EAAE,SAAQ;;GAClD,qBAAC;IAAO,KAAI;eACV,oBAAC;KACW;KACV,eAAe,aAAa,KAAK;KACjC,WAAW,GACT,uFACA,YAAY,aACb;eAED,oBAACA;MACC,WAAW,GACT,6BACA,CAAC,MAAM,SAAS,aACjB;gBAEA,MAAM,QACH,IAAI,MAAM,MAAM,GAChB,cAAc,SAAS;OACtB;MACG,EACZ,oBAAC;KACW;KACV,eAAe,WAAW,KAAK;KAC/B,WAAW,GACT,uFACA,YAAY,aACb;eAED,oBAACA;MACC,WAAW,GACT,6BACA,CAAC,MAAM,OAAO,aACf;gBAEA,MAAM,MAAM,IAAI,MAAM,IAAI,GAAG,cAAc,OAAO;OAC9C;MACG;KACL;GAER,aACC,oBAAC;IACC,OAAO,MAAM,yBAAS,IAAI,MAAM;IAChC,MAAK;IACL,SAAS,SAAS,OAAO,QAAQ,WAAW;IAC5C,UAAU;IAEV,GAAK;KACL;GAEH,WACC,oBAAC;IACC,OAAO,MAAM,OAAO,MAAM,yBAAS,IAAI,MAAM;IAC7C,MAAK;IACL,SAAS,SAAS,OAAO,QAAQ,WAAW;IAC5C,UAAU;IACV,aAAa,MAAM,SAAS;IAC5B,aAAa;KACb;;GAEG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"datetime-picker.js","names":[],"sources":["../../ui/datetime-picker.tsx"],"sourcesContent":["import React from 'react';\nimport { HStack } from './stack';\nimport { DatePicker } from './date-picker';\nimport { TimePicker } from './time-picker';\n\nexport interface DateTimePickerProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n disabled?: boolean;\n minDate?: Date;\n maxDate?: Date;\n datePlaceholder?: string;\n timePlaceholder?: string;\n is24Hour?: boolean;\n className?: string;\n}\n\nexport function DateTimePicker({\n value,\n onChange,\n disabled,\n minDate,\n maxDate,\n datePlaceholder,\n timePlaceholder,\n is24Hour,\n className,\n}: DateTimePickerProps) {\n const handleDateChange = (d: Date | null) => {\n if (!d) return;\n const next = new Date(d);\n if (value) {\n next.setHours(value.getHours(), value.getMinutes(), 0, 0);\n }\n onChange(next);\n };\n\n const handleTimeChange = (t: Date | null) => {\n if (!t) return;\n const next = new Date(value ?? new Date());\n next.setHours(t.getHours(), t.getMinutes(), 0, 0);\n onChange(next);\n };\n\n return (\n <HStack className={className} gap=\"sm\">\n <DatePicker\n value={value}\n onChange={handleDateChange}\n disabled={disabled}\n minDate={minDate}\n maxDate={maxDate}\n placeholder={datePlaceholder}\n className=\"flex-1\"\n />\n <TimePicker\n value={value}\n onChange={handleTimeChange}\n disabled={disabled}\n is24Hour={is24Hour}\n placeholder={timePlaceholder}\n className=\"flex-1\"\n />\n </HStack>\n );\n}\n"],"mappings":";;;;;;;AAiBA,SAAgB,eAAe,EAC7B,OACA,UACA,UACA,SACA,SACA,iBACA,iBACA,UACA,aACsB;CACtB,MAAM,oBAAoB,MAAmB;AAC3C,MAAI,CAAC,EAAG;EACR,MAAM,OAAO,IAAI,KAAK,EAAE;AACxB,MAAI,MACF,MAAK,SAAS,MAAM,UAAU,EAAE,MAAM,YAAY,EAAE,GAAG,EAAE;AAE3D,WAAS,KAAK;;CAGhB,MAAM,oBAAoB,MAAmB;AAC3C,MAAI,CAAC,EAAG;EACR,MAAM,OAAO,IAAI,KAAK,yBAAS,IAAI,MAAM,CAAC;AAC1C,OAAK,SAAS,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;AACjD,WAAS,KAAK;;AAGhB,QACE,qBAAC;EAAkB;EAAW,KAAI;aAChC,oBAAC;GACQ;GACP,UAAU;GACA;GACD;GACA;GACT,aAAa;GACb,WAAU;IACV,EACF,oBAAC;GACQ;GACP,UAAU;GACA;GACA;GACV,aAAa;GACb,WAAU;IACV;GACK"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dialog.js","names":[],"sources":["../../ui/dialog.tsx"],"sourcesContent":["import * as DialogPrimitive from '@rn-primitives/dialog';\nimport * as React from 'react';\nimport { Platform, StyleSheet, View, type ViewProps } from 'react-native';\nimport Animated, { FadeIn, FadeOut } from 'react-native-reanimated';\nimport { X } from './icons/X';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nfunction DialogOverlayWeb({\n className,\n ...props\n}: DialogPrimitive.OverlayProps & {\n ref?: React.RefObject<DialogPrimitive.OverlayRef>;\n}) {\n const { open } = DialogPrimitive.useRootContext();\n return (\n <DialogPrimitive.Overlay\n className={cn(\n 'absolute top-0 right-0 bottom-0 left-0 flex items-center justify-center bg-black/80 p-2',\n open\n ? 'web:animate-in web:fade-in-0'\n : 'web:animate-out web:fade-out-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogOverlayNative({\n className,\n children,\n ...props\n}: DialogPrimitive.OverlayProps & {\n ref?: React.RefObject<DialogPrimitive.OverlayRef>;\n children?: React.ReactNode;\n}) {\n return (\n <DialogPrimitive.Overlay\n style={StyleSheet.absoluteFill}\n className={cn(\n 'flex items-center justify-center bg-black/80 p-2',\n className\n )}\n {...props}\n >\n <Animated.View\n entering={FadeIn.duration(150)}\n exiting={FadeOut.duration(150)}\n >\n {children}\n </Animated.View>\n </DialogPrimitive.Overlay>\n );\n}\n\nconst DialogOverlay = Platform.select({\n web: DialogOverlayWeb,\n default: DialogOverlayNative,\n});\n\nfunction DialogContent({\n className,\n children,\n portalHost,\n ...props\n}: DialogPrimitive.ContentProps & {\n ref?: React.RefObject<DialogPrimitive.ContentRef>;\n className?: string;\n portalHost?: string;\n}) {\n const { open } = DialogPrimitive.useRootContext();\n return (\n <DialogPortal hostName={portalHost}>\n <DialogOverlay>\n <DialogPrimitive.Content\n className={cn(\n 'border-border bg-background web:cursor-default web:duration-200 max-w-lg gap-4 rounded-lg border p-6 shadow-lg',\n open\n ? 'web:animate-in web:fade-in-0 web:zoom-in-95'\n : 'web:animate-out web:fade-out-0 web:zoom-out-95',\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className={\n 'web:group web:ring-offset-background web:transition-opacity web:hover:opacity-100 web:focus:outline-hidden web:focus:ring-2 web:focus:ring-ring web:focus:ring-offset-2 web:disabled:pointer-events-none absolute top-4 right-4 rounded-xs p-0.5 opacity-70'\n }\n >\n <X\n size={Platform.OS === 'web' ? 16 : 18}\n className={cn(\n 'text-muted-foreground',\n open && 'text-accent-foreground'\n )}\n />\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogOverlay>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: ViewProps) {\n return (\n <View\n className={cn(\n 'flex flex-col gap-1.5 text-center sm:text-left',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({ className, ...props }: ViewProps) {\n return (\n <View\n className={cn(\n 'flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: DialogPrimitive.TitleProps & {\n ref?: React.RefObject<DialogPrimitive.TitleRef>;\n}) {\n return (\n <DialogPrimitive.Title\n className={cn(\n 'native:text-xl text-foreground text-lg leading-none font-semibold tracking-tight',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: DialogPrimitive.DescriptionProps & {\n ref?: React.RefObject<DialogPrimitive.DescriptionRef>;\n}) {\n return (\n <DialogPrimitive.Description\n className={cn(\n 'native:text-base text-muted-foreground text-sm',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n"],"mappings":";;;;;;;;;AAOA,MAAM,SAAS,gBAAgB;AAE/B,MAAM,gBAAgB,gBAAgB;AAEtC,MAAM,eAAe,gBAAgB;AAErC,MAAM,cAAc,gBAAgB;AAEpC,SAAS,iBAAiB,EACxB,WACA,GAAG,SAGF;CACD,MAAM,EAAE,SAAS,gBAAgB,gBAAgB;AACjD,QACE,oBAAC,gBAAgB;EACf,WAAW,GACT,2FACA,OACI,iCACA,kCACJ,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,oBAAoB,EAC3B,WACA,UACA,GAAG,SAIF;AACD,QACE,oBAAC,gBAAgB;EACf,OAAO,WAAW;EAClB,WAAW,GACT,oDACA,UACD;EACD,GAAI;YAEJ,oBAAC,SAAS;GACR,UAAU,OAAO,SAAS,IAAI;GAC9B,SAAS,QAAQ,SAAS,IAAI;GAE7B;IACa;GACQ;;AAI9B,MAAM,gBAAgB,SAAS,OAAO;CACpC,KAAK;CACL,SAAS;CACV,CAAC;AAEF,SAAS,cAAc,EACrB,WACA,UACA,YACA,GAAG,SAKF;CACD,MAAM,EAAE,SAAS,gBAAgB,gBAAgB;AACjD,QACE,oBAAC;EAAa,UAAU;YACtB,oBAAC,2BACC,qBAAC,gBAAgB;GACf,WAAW,GACT,kHACA,OACI,gDACA,kDACJ,UACD;GACD,GAAI;cAEH,UACD,oBAAC,gBAAgB;IACf,WACE;cAGF,oBAAC;KACC,MAAM,SAAS,OAAO,QAAQ,KAAK;KACnC,WAAW,GACT,yBACA,QAAQ,yBACT;MACD;KACoB;IACA,GACZ;GACH;;AAInB,SAAS,aAAa,EAAE,WAAW,GAAG,SAAoB;AACxD,QACE,oBAAC;EACC,WAAW,GACT,kDACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,aAAa,EAAE,WAAW,GAAG,SAAoB;AACxD,QACE,oBAAC;EACC,WAAW,GACT,0DACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,YAAY,EACnB,WACA,GAAG,SAGF;AACD,QACE,oBAAC,gBAAgB;EACf,WAAW,GACT,oFACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,kBAAkB,EACzB,WACA,GAAG,SAGF;AACD,QACE,oBAAC,gBAAgB;EACf,WAAW,GACT,kDACA,UACD;EACD,GAAI;GACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown-menu.js","names":[],"sources":["../../ui/dropdown-menu.tsx"],"sourcesContent":["import * as DropdownMenuPrimitive from '@rn-primitives/dropdown-menu';\nimport * as React from 'react';\nimport {\n Platform,\n type StyleProp,\n StyleSheet,\n Text,\n type TextProps,\n View,\n type ViewStyle,\n} from 'react-native';\nimport { Check } from './icons/Check';\nimport { ChevronDown } from './icons/ChevronDown';\nimport { ChevronRight } from './icons/ChevronRight';\nimport { ChevronUp } from './icons/ChevronUp';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\nimport { TextClassContext } from './text';\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: DropdownMenuPrimitive.SubTriggerProps & {\n ref?: React.RefObject<DropdownMenuPrimitive.SubTriggerRef>;\n className?: string;\n inset?: boolean;\n children?: React.ReactNode;\n}) {\n const { open } = DropdownMenuPrimitive.useSubContext();\n const Icon =\n Platform.OS === 'web' ? ChevronRight : open ? ChevronUp : ChevronDown;\n return (\n <TextClassContext.Provider\n value={cn(\n 'native:text-lg text-primary text-sm select-none',\n open && 'native:text-accent-foreground'\n )}\n >\n <DropdownMenuPrimitive.SubTrigger\n className={cn(\n 'native:py-2 active:bg-accent web:cursor-default web:select-none web:outline-hidden web:hover:bg-accent web:focus:bg-accent flex flex-row items-center gap-2 rounded-xs px-2 py-1.5',\n open && 'bg-accent',\n inset && 'pl-8',\n className\n )}\n {...props}\n >\n {children}\n <Icon size={18} className=\"text-foreground ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n </TextClassContext.Provider>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: DropdownMenuPrimitive.SubContentProps & {\n ref?: React.RefObject<DropdownMenuPrimitive.SubContentRef>;\n}) {\n const { open } = DropdownMenuPrimitive.useSubContext();\n return (\n <DropdownMenuPrimitive.SubContent\n className={cn(\n 'border-border bg-popover shadow-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 mt-1 min-w-32 overflow-hidden rounded-md border p-1 shadow-md',\n open\n ? 'web:animate-in web:fade-in-0 web:zoom-in-95'\n : 'web:animate-out web:fade-out-0 web:zoom-out',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuContent({\n className,\n overlayClassName,\n overlayStyle,\n portalHost,\n ...props\n}: DropdownMenuPrimitive.ContentProps & {\n ref?: React.RefObject<DropdownMenuPrimitive.ContentRef>;\n overlayStyle?: StyleProp<ViewStyle>;\n overlayClassName?: string;\n portalHost?: string;\n}) {\n const { open } = DropdownMenuPrimitive.useRootContext();\n return (\n <DropdownMenuPrimitive.Portal hostName={portalHost}>\n <DropdownMenuPrimitive.Overlay\n style={\n overlayStyle\n ? StyleSheet.flatten([\n Platform.OS !== 'web' ? StyleSheet.absoluteFill : undefined,\n overlayStyle as typeof StyleSheet.absoluteFill,\n ])\n : Platform.OS !== 'web'\n ? StyleSheet.absoluteFill\n : undefined\n }\n className={overlayClassName}\n >\n <DropdownMenuPrimitive.Content\n className={cn(\n 'border-border bg-popover shadow-foreground/5 web:data-[side=bottom]:slide-in-from-top-2 web:data-[side=left]:slide-in-from-right-2 web:data-[side=right]:slide-in-from-left-2 web:data-[side=top]:slide-in-from-bottom-2 z-50 min-w-32 overflow-hidden rounded-md border p-1 shadow-md',\n open\n ? 'web:animate-in web:fade-in-0 web:zoom-in-95'\n : 'web:animate-out web:fade-out-0 web:zoom-out-95',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Overlay>\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n ...props\n}: DropdownMenuPrimitive.ItemProps & {\n ref?: React.RefObject<DropdownMenuPrimitive.ItemRef>;\n className?: string;\n inset?: boolean;\n}) {\n return (\n <TextClassContext.Provider value=\"select-none text-sm native:text-lg text-popover-foreground web:group-focus:text-accent-foreground\">\n <DropdownMenuPrimitive.Item\n className={cn(\n 'native:py-2 group active:bg-accent web:cursor-default web:outline-hidden web:hover:bg-accent web:focus:bg-accent relative flex flex-row items-center gap-2 rounded-xs px-2 py-1.5',\n inset && 'pl-8',\n props.disabled && 'web:pointer-events-none opacity-50',\n className\n )}\n {...props}\n />\n </TextClassContext.Provider>\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: DropdownMenuPrimitive.CheckboxItemProps & {\n ref?: React.RefObject<DropdownMenuPrimitive.CheckboxItemRef>;\n children?: React.ReactNode;\n}) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n className={cn(\n 'web:group native:py-2 active:bg-accent web:cursor-default web:outline-hidden web:focus:bg-accent relative flex flex-row items-center rounded-xs py-1.5 pr-2 pl-8',\n props.disabled && 'web:pointer-events-none opacity-50',\n className\n )}\n checked={checked}\n {...props}\n >\n <View className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check size={14} strokeWidth={3} className=\"text-foreground\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </View>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: DropdownMenuPrimitive.RadioItemProps & {\n ref?: React.RefObject<DropdownMenuPrimitive.RadioItemRef>;\n children?: React.ReactNode;\n}) {\n return (\n <DropdownMenuPrimitive.RadioItem\n className={cn(\n 'web:group native:py-2 active:bg-accent web:cursor-default web:outline-hidden web:focus:bg-accent relative flex flex-row items-center rounded-xs py-1.5 pr-2 pl-8',\n props.disabled && 'web:pointer-events-none opacity-50',\n className\n )}\n {...props}\n >\n <View className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <View className=\"bg-foreground h-2 w-2 rounded-full\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </View>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: DropdownMenuPrimitive.LabelProps & {\n ref?: React.RefObject<DropdownMenuPrimitive.LabelRef>;\n className?: string;\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n className={cn(\n 'native:text-base text-foreground web:cursor-default px-2 py-1.5 text-sm font-semibold',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: DropdownMenuPrimitive.SeparatorProps & {\n ref?: React.RefObject<DropdownMenuPrimitive.SeparatorRef>;\n}) {\n return (\n <DropdownMenuPrimitive.Separator\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: TextProps) {\n return (\n <Text\n className={cn(\n 'native:text-sm text-muted-foreground ml-auto text-xs tracking-widest',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n"],"mappings":";;;;;;;;;;;;AAkBA,MAAM,eAAe,sBAAsB;AAE3C,MAAM,sBAAsB,sBAAsB;AAElD,MAAM,oBAAoB,sBAAsB;AAEhD,MAAM,qBAAqB,sBAAsB;AAEjD,MAAM,kBAAkB,sBAAsB;AAE9C,MAAM,yBAAyB,sBAAsB;AAErD,SAAS,uBAAuB,EAC9B,WACA,OACA,UACA,GAAG,SAMF;CACD,MAAM,EAAE,SAAS,sBAAsB,eAAe;CACtD,MAAM,OACJ,SAAS,OAAO,QAAQ,eAAe,OAAO,YAAY;AAC5D,QACE,oBAAC,iBAAiB;EAChB,OAAO,GACL,mDACA,QAAQ,gCACT;YAED,qBAAC,sBAAsB;GACrB,WAAW,GACT,sLACA,QAAQ,aACR,SAAS,QACT,UACD;GACD,GAAI;cAEH,UACD,oBAAC;IAAK,MAAM;IAAI,WAAU;KAA4B;IACrB;GACT;;AAIhC,SAAS,uBAAuB,EAC9B,WACA,GAAG,SAGF;CACD,MAAM,EAAE,SAAS,sBAAsB,eAAe;AACtD,QACE,oBAAC,sBAAsB;EACrB,WAAW,GACT,+QACA,OACI,gDACA,+CACJ,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,oBAAoB,EAC3B,WACA,kBACA,cACA,YACA,GAAG,SAMF;CACD,MAAM,EAAE,SAAS,sBAAsB,gBAAgB;AACvD,QACE,oBAAC,sBAAsB;EAAO,UAAU;YACtC,oBAAC,sBAAsB;GACrB,OACE,eACI,WAAW,QAAQ,CACjB,SAAS,OAAO,QAAQ,WAAW,eAAe,QAClD,aACD,CAAC,GACF,SAAS,OAAO,QACd,WAAW,eACX;GAER,WAAW;aAEX,oBAAC,sBAAsB;IACrB,WAAW,GACT,0RACA,OACI,gDACA,kDACJ,UACD;IACD,GAAI;KACJ;IAC4B;GACH;;AAInC,SAAS,iBAAiB,EACxB,WACA,OACA,GAAG,SAKF;AACD,QACE,oBAAC,iBAAiB;EAAS,OAAM;YAC/B,oBAAC,sBAAsB;GACrB,WAAW,GACT,qLACA,SAAS,QACT,MAAM,YAAY,sCAClB,UACD;GACD,GAAI;IACJ;GACwB;;AAIhC,SAAS,yBAAyB,EAChC,WACA,UACA,SACA,GAAG,SAIF;AACD,QACE,qBAAC,sBAAsB;EACrB,WAAW,GACT,oKACA,MAAM,YAAY,sCAClB,UACD;EACQ;EACT,GAAI;aAEJ,oBAAC;GAAK,WAAU;aACd,oBAAC,sBAAsB,2BACrB,oBAAC;IAAM,MAAM;IAAI,aAAa;IAAG,WAAU;KAAoB,GAC3B;IACjC,EACN;GACkC;;AAIzC,SAAS,sBAAsB,EAC7B,WACA,UACA,GAAG,SAIF;AACD,QACE,qBAAC,sBAAsB;EACrB,WAAW,GACT,oKACA,MAAM,YAAY,sCAClB,UACD;EACD,GAAI;aAEJ,oBAAC;GAAK,WAAU;aACd,oBAAC,sBAAsB,2BACrB,oBAAC,QAAK,WAAU,uCAAuC,GACnB;IACjC,EACN;GAC+B;;AAItC,SAAS,kBAAkB,EACzB,WACA,OACA,GAAG,SAKF;AACD,QACE,oBAAC,sBAAsB;EACrB,WAAW,GACT,yFACA,SAAS,QACT,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,sBAAsB,EAC7B,WACA,GAAG,SAGF;AACD,QACE,oBAAC,sBAAsB;EACrB,WAAW,GAAG,6BAA6B,UAAU;EACrD,GAAI;GACJ;;AAIN,SAAS,qBAAqB,EAAE,WAAW,GAAG,SAAoB;AAChE,QACE,oBAAC;EACC,WAAW,GACT,wEACA,UACD;EACD,GAAI;GACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"empty-state.js","names":["Text"],"sources":["../../ui/empty-state.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\nimport { VStack } from './stack';\nimport { H3 } from './typography';\nimport { Text } from './text';\nimport { View } from 'react-native';\n\nconst containerVariants = cva('items-center text-center', {\n variants: {\n density: {\n compact: 'gap-3 p-6',\n default: 'gap-4 p-8',\n },\n },\n defaultVariants: {\n density: 'default',\n },\n});\n\nexport interface EmptyStateProps extends VariantProps<\n typeof containerVariants\n> {\n icon?: React.ReactNode;\n title: React.ReactNode;\n description?: React.ReactNode;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n className?: string;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n primaryAction,\n secondaryAction,\n className,\n density,\n}: EmptyStateProps) {\n return (\n <VStack className={cn(containerVariants({ density }), className)}>\n {icon ? (\n <View className=\"bg-muted flex h-12 w-12 items-center justify-center rounded-full\">\n {/* Consumers pass their own icon; keep neutral backdrop */}\n <View className=\"text-muted-foreground flex items-center justify-center\">\n {icon}\n </View>\n </View>\n ) : null}\n\n <View>\n <H3 className=\"font-medium\">{title}</H3>\n {description ? (\n <View className=\"text-muted-foreground text-base\">\n <Text>{description}</Text>\n </View>\n ) : null}\n </View>\n\n {(primaryAction || secondaryAction) && (\n <View className=\"flex items-center justify-center gap-2\">\n {primaryAction}\n {secondaryAction}\n </View>\n )}\n </VStack>\n );\n}\n"],"mappings":";;;;;;;;;;AAQA,MAAM,oBAAoB,IAAI,4BAA4B;CACxD,UAAU,EACR,SAAS;EACP,SAAS;EACT,SAAS;EACV,EACF;CACD,iBAAiB,EACf,SAAS,WACV;CACF,CAAC;AAaF,SAAgB,WAAW,EACzB,MACA,OACA,aACA,eACA,iBACA,WACA,WACkB;AAClB,QACE,qBAAC;EAAO,WAAW,GAAG,kBAAkB,EAAE,SAAS,CAAC,EAAE,UAAU;;GAC7D,OACC,oBAAC;IAAK,WAAU;cAEd,oBAAC;KAAK,WAAU;eACb;MACI;KACF,GACL;GAEJ,qBAAC,mBACC,oBAAC;IAAG,WAAU;cAAe;KAAW,EACvC,cACC,oBAAC;IAAK,WAAU;cACd,oBAACA,oBAAM,cAAmB;KACrB,GACL,QACC;IAEL,iBAAiB,oBACjB,qBAAC;IAAK,WAAU;eACb,eACA;KACI;;GAEF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"empty.js","names":[],"sources":["../../ui/empty.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\nimport { View, type ViewProps } from 'react-native';\n\nfunction Empty({ className, ...props }: ViewProps) {\n return (\n <View\n data-slot=\"empty\"\n className={cn(\n 'flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyHeader({ className, ...props }: ViewProps) {\n return (\n <View\n data-slot=\"empty-header\"\n className={cn(\n 'flex max-w-sm flex-col items-center gap-2 text-center',\n className\n )}\n {...props}\n />\n );\n}\n\nconst emptyMediaVariants = cva(\n 'flex shrink-0 items-center justify-center mb-2 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: \"bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6\",\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nfunction EmptyMedia({\n className,\n variant = 'default',\n ...props\n}: ViewProps & VariantProps<typeof emptyMediaVariants>) {\n return (\n <View\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nfunction EmptyTitle({ className, ...props }: ViewProps) {\n return (\n <View\n data-slot=\"empty-title\"\n className={cn('text-lg font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction EmptyDescription({ className, ...props }: ViewProps) {\n return (\n <View\n data-slot=\"empty-description\"\n className={cn(\n 'text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyContent({ className, ...props }: ViewProps) {\n return (\n <View\n data-slot=\"empty-content\"\n className={cn(\n 'flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n};\n"],"mappings":";;;;;;AAKA,SAAS,MAAM,EAAE,WAAW,GAAG,SAAoB;AACjD,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,gIACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,YAAY,EAAE,WAAW,GAAG,SAAoB;AACvD,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,yDACA,UACD;EACD,GAAI;GACJ;;AAIN,MAAM,qBAAqB,IACzB,+FACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,MAAM;EACP,EACF;CACD,iBAAiB,EACf,SAAS,WACV;CACF,CACF;AAED,SAAS,WAAW,EAClB,WACA,UAAU,WACV,GAAG,SACmD;AACtD,QACE,oBAAC;EACC,aAAU;EACV,gBAAc;EACd,WAAW,GAAG,mBAAmB;GAAE;GAAS;GAAW,CAAC,CAAC;EACzD,GAAI;GACJ;;AAIN,SAAS,WAAW,EAAE,WAAW,GAAG,SAAoB;AACtD,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GAAG,sCAAsC,UAAU;EAC9D,GAAI;GACJ;;AAIN,SAAS,iBAAiB,EAAE,WAAW,GAAG,SAAoB;AAC5D,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,2GACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,aAAa,EAAE,WAAW,GAAG,SAAoB;AACxD,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,iFACA,UACD;EACD,GAAI;GACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fab.js","names":[],"sources":["../../ui/fab.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Pressable, StyleSheet, View } from 'react-native';\nimport Animated, {\n useAnimatedStyle,\n withSpring,\n withTiming,\n} from 'react-native-reanimated';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\nimport { Plus, X } from 'lucide-react-native';\n\ninterface FABAction {\n icon: React.ReactNode;\n label: string;\n onPress: () => void;\n color?: string;\n}\n\ninterface FABProps {\n actions: FABAction[];\n className?: string;\n mainIcon?: React.ReactNode;\n mainColor?: string;\n}\n\nconst AnimatedPressable = Animated.createAnimatedComponent(Pressable);\n\nexport function FAB({\n actions,\n className,\n mainIcon,\n mainColor = 'bg-primary',\n}: FABProps) {\n const [isOpen, setIsOpen] = useState(false);\n\n const toggleMenu = () => {\n setIsOpen(!isOpen);\n };\n\n const rotation = useAnimatedStyle(() => {\n return {\n transform: [\n {\n rotate: withSpring(isOpen ? '45deg' : '0deg', {\n damping: 15,\n stiffness: 150,\n }),\n },\n ],\n };\n });\n\n return (\n <View className={cn('absolute right-4 bottom-24 z-50', className)}>\n {/* Backdrop */}\n {isOpen && (\n <Pressable\n style={StyleSheet.absoluteFillObject}\n className=\"fixed inset-0 -top-full -left-full h-[200%] w-[200%]\"\n onPress={() => setIsOpen(false)}\n />\n )}\n\n {/* Action buttons */}\n {actions.map((action, index) => {\n const translateY = useAnimatedStyle(() => {\n const baseTranslation = isOpen ? -(index + 1) * 65 : 0;\n return {\n transform: [\n {\n translateY: withSpring(baseTranslation, {\n damping: 15,\n stiffness: 150,\n mass: 1 + index * 0.1,\n }),\n },\n ],\n opacity: withTiming(isOpen ? 1 : 0, {\n duration: 200,\n }),\n pointerEvents: isOpen ? 'auto' : 'none',\n };\n });\n\n const scale = useAnimatedStyle(() => {\n return {\n transform: [\n {\n scale: withSpring(isOpen ? 1 : 0.8, {\n damping: 15,\n stiffness: 150,\n }),\n },\n ],\n };\n });\n\n return (\n <AnimatedPressable\n key={index}\n style={[translateY, scale]}\n className=\"absolute right-0 bottom-0\"\n onPress={() => {\n action.onPress();\n setIsOpen(false);\n }}\n >\n <View\n className={cn(\n 'h-12 w-12 items-center justify-center rounded-full shadow-lg',\n action.color || 'bg-secondary'\n )}\n >\n {action.icon}\n </View>\n </AnimatedPressable>\n );\n })}\n\n {/* Main FAB button */}\n <AnimatedPressable\n onPress={toggleMenu}\n className={cn(\n 'h-14 w-14 items-center justify-center rounded-full shadow-xl',\n mainColor\n )}\n style={[\n rotation,\n {\n shadowColor: '#000',\n shadowOffset: {\n width: 0,\n height: 4,\n },\n shadowOpacity: 0.3,\n shadowRadius: 8,\n elevation: 8,\n },\n ]}\n >\n {isOpen ? (\n <X size={24} color=\"white\" strokeWidth={2.5} />\n ) : (\n mainIcon || <Plus size={24} color=\"white\" strokeWidth={2.5} />\n )}\n </AnimatedPressable>\n </View>\n );\n}\n\n// Mini FAB for single actions\nexport function MiniFAB({\n icon,\n onPress,\n className,\n color = 'bg-primary',\n}: {\n icon: React.ReactNode;\n onPress: () => void;\n className?: string;\n color?: string;\n}) {\n return (\n <Pressable\n onPress={onPress}\n className={cn(\n 'h-12 w-12 items-center justify-center rounded-full shadow-lg',\n color,\n className\n )}\n style={{\n shadowColor: '#000',\n shadowOffset: {\n width: 0,\n height: 2,\n },\n shadowOpacity: 0.25,\n shadowRadius: 4,\n elevation: 5,\n }}\n >\n {icon}\n </Pressable>\n );\n}\n"],"mappings":";;;;;;;;AAwBA,MAAM,oBAAoB,SAAS,wBAAwB,UAAU;AAErE,SAAgB,IAAI,EAClB,SACA,WACA,UACA,YAAY,gBACD;CACX,MAAM,CAAC,QAAQ,aAAa,SAAS,MAAM;CAE3C,MAAM,mBAAmB;AACvB,YAAU,CAAC,OAAO;;CAGpB,MAAM,WAAW,uBAAuB;AACtC,SAAO,EACL,WAAW,CACT,EACE,QAAQ,WAAW,SAAS,UAAU,QAAQ;GAC5C,SAAS;GACT,WAAW;GACZ,CAAC,EACH,CACF,EACF;GACD;AAEF,QACE,qBAAC;EAAK,WAAW,GAAG,mCAAmC,UAAU;;GAE9D,UACC,oBAAC;IACC,OAAO,WAAW;IAClB,WAAU;IACV,eAAe,UAAU,MAAM;KAC/B;GAIH,QAAQ,KAAK,QAAQ,UAAU;AAiC9B,WACE,oBAAC;KAEC,OAAO,CAnCQ,uBAAuB;AAExC,aAAO;OACL,WAAW,CACT,EACE,YAAY,WAJM,SAAS,EAAE,QAAQ,KAAK,KAAK,GAIP;QACtC,SAAS;QACT,WAAW;QACX,MAAM,IAAI,QAAQ;QACnB,CAAC,EACH,CACF;OACD,SAAS,WAAW,SAAS,IAAI,GAAG,EAClC,UAAU,KACX,CAAC;OACF,eAAe,SAAS,SAAS;OAClC;OACD,EAEY,uBAAuB;AACnC,aAAO,EACL,WAAW,CACT,EACE,OAAO,WAAW,SAAS,IAAI,IAAK;OAClC,SAAS;OACT,WAAW;OACZ,CAAC,EACH,CACF,EACF;OACD,CAK4B;KAC1B,WAAU;KACV,eAAe;AACb,aAAO,SAAS;AAChB,gBAAU,MAAM;;eAGlB,oBAAC;MACC,WAAW,GACT,gEACA,OAAO,SAAS,eACjB;gBAEA,OAAO;OACH;OAfF,MAgBa;KAEtB;GAGF,oBAAC;IACC,SAAS;IACT,WAAW,GACT,gEACA,UACD;IACD,OAAO,CACL,UACA;KACE,aAAa;KACb,cAAc;MACZ,OAAO;MACP,QAAQ;MACT;KACD,eAAe;KACf,cAAc;KACd,WAAW;KACZ,CACF;cAEA,SACC,oBAAC;KAAE,MAAM;KAAI,OAAM;KAAQ,aAAa;MAAO,GAE/C,YAAY,oBAAC;KAAK,MAAM;KAAI,OAAM;KAAQ,aAAa;MAAO;KAE9C;;GACf;;AAKX,SAAgB,QAAQ,EACtB,MACA,SACA,WACA,QAAQ,gBAMP;AACD,QACE,oBAAC;EACU;EACT,WAAW,GACT,gEACA,OACA,UACD;EACD,OAAO;GACL,aAAa;GACb,cAAc;IACZ,OAAO;IACP,QAAQ;IACT;GACD,eAAe;GACf,cAAc;GACd,WAAW;GACZ;YAEA;GACS"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"field.js","names":[],"sources":["../../ui/field.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\nimport { Label } from './label';\nimport { Separator } from './separator';\nimport { Box, VStack, type BoxProps } from './stack';\nimport { P, type TypographyProps } from './typography';\n\nfunction FieldSet({ className, ...props }: BoxProps) {\n return (\n <Box\n data-slot=\"field-set\"\n className={cn(\n 'flex flex-col gap-6',\n 'has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldLegend({\n className,\n variant = 'legend',\n ...props\n}: BoxProps & { variant?: 'legend' | 'label' }) {\n return (\n <Box\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n 'mb-3 font-medium',\n 'data-[variant=legend]:text-base',\n 'data-[variant=label]:text-sm',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldGroup({ className, ...props }: BoxProps) {\n return (\n <Box\n data-slot=\"field-group\"\n className={cn(\n 'group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 data-[slot=field-group]:*:gap-4',\n className\n )}\n {...props}\n />\n );\n}\n\nconst fieldVariants = cva(\n 'group/field flex w-full gap-3 data-[invalid=true]:text-destructive',\n {\n variants: {\n orientation: {\n vertical: ['flex-col *:w-full [&>.sr-only]:w-auto'],\n horizontal: [\n 'flex-row items-center',\n 'data-[slot=field-label]:*:flex-auto',\n 'has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n ],\n responsive: [\n 'flex-col *:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto',\n '@md/field-group:data-[slot=field-label]:*:flex-auto',\n '@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n ],\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n }\n);\n\nfunction Field({\n className,\n orientation = 'vertical',\n ...props\n}: BoxProps & VariantProps<typeof fieldVariants>) {\n return (\n <Box\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n );\n}\n\nfunction FieldContent({ className, ...props }: BoxProps) {\n return (\n <Box\n data-slot=\"field-content\"\n className={cn(\n 'group/field-content flex flex-1 flex-col gap-1.5 leading-snug',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n 'group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50',\n 'has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border *:data-[slot=field]:p-4',\n 'has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldTitle({ className, ...props }: BoxProps) {\n return (\n <Box\n data-slot=\"field-label\"\n className={cn(\n 'flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldDescription({ className, ...props }: TypographyProps) {\n return (\n <P\n data-slot=\"field-description\"\n className={cn(\n 'text-muted-foreground text-sm leading-normal font-normal group-has-data-[orientation=horizontal]/field:text-balance',\n 'last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5',\n '[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: BoxProps & {\n children?: React.ReactNode;\n}) {\n return (\n <Box\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n 'relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2',\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <Box\n className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </Box>\n )}\n </Box>\n );\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: BoxProps & {\n errors?: ({ message?: string } | undefined)[];\n}) {\n const content = useMemo(() => {\n if (children) {\n return children;\n }\n\n if (!errors?.length) {\n return null;\n }\n\n if (errors?.length == 1) {\n return errors[0]?.message;\n }\n\n return (\n <VStack className=\"ml-4 flex list-disc flex-col gap-1\">\n {errors.map(\n (error, index) => error?.message && <P key={index}>{error.message}</P>\n )}\n </VStack>\n );\n }, [children, errors]);\n\n if (!content) {\n return null;\n }\n\n return (\n <Box\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn('text-destructive text-sm font-normal', className)}\n {...props}\n >\n {content}\n </Box>\n );\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n};\n"],"mappings":";;;;;;;;;;;;AAWA,SAAS,SAAS,EAAE,WAAW,GAAG,SAAmB;AACnD,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,uBACA,gFACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,YAAY,EACnB,WACA,UAAU,UACV,GAAG,SAC2C;AAC9C,QACE,oBAAC;EACC,aAAU;EACV,gBAAc;EACd,WAAW,GACT,oBACA,mCACA,gCACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,WAAW,EAAE,WAAW,GAAG,SAAmB;AACrD,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,wIACA,UACD;EACD,GAAI;GACJ;;AAIN,MAAM,gBAAgB,IACpB,sEACA;CACE,UAAU,EACR,aAAa;EACX,UAAU,CAAC,wCAAwC;EACnD,YAAY;GACV;GACA;GACA;GACD;EACD,YAAY;GACV;GACA;GACA;GACD;EACF,EACF;CACD,iBAAiB,EACf,aAAa,YACd;CACF,CACF;AAED,SAAS,MAAM,EACb,WACA,cAAc,YACd,GAAG,SAC6C;AAChD,QACE,oBAAC;EACC,MAAK;EACL,aAAU;EACV,oBAAkB;EAClB,WAAW,GAAG,cAAc,EAAE,aAAa,CAAC,EAAE,UAAU;EACxD,GAAI;GACJ;;AAIN,SAAS,aAAa,EAAE,WAAW,GAAG,SAAmB;AACvD,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,iEACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,WAAW,EAClB,WACA,GAAG,SACkC;AACrC,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,gHACA,iKACA,6HACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,WAAW,EAAE,WAAW,GAAG,SAAmB;AACrD,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,8GACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,iBAAiB,EAAE,WAAW,GAAG,SAA0B;AAClE,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,uHACA,gEACA,qEACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,eAAe,EACtB,UACA,WACA,GAAG,SAGF;AACD,QACE,qBAAC;EACC,aAAU;EACV,gBAAc,CAAC,CAAC;EAChB,WAAW,GACT,6EACA,UACD;EACD,GAAI;aAEJ,oBAAC,aAAU,WAAU,6BAA6B,EACjD,YACC,oBAAC;GACC,WAAU;GACV,aAAU;GAET;IACG;GAEJ;;AAIV,SAAS,WAAW,EAClB,WACA,UACA,QACA,GAAG,SAGF;CACD,MAAM,UAAU,cAAc;AAC5B,MAAI,SACF,QAAO;AAGT,MAAI,CAAC,QAAQ,OACX,QAAO;AAGT,MAAI,QAAQ,UAAU,EACpB,QAAO,OAAO,IAAI;AAGpB,SACE,oBAAC;GAAO,WAAU;aACf,OAAO,KACL,OAAO,UAAU,OAAO,WAAW,oBAAC,eAAe,MAAM,WAAd,MAA0B,CACvE;IACM;IAEV,CAAC,UAAU,OAAO,CAAC;AAEtB,KAAI,CAAC,QACH,QAAO;AAGT,QACE,oBAAC;EACC,MAAK;EACL,aAAU;EACV,WAAW,GAAG,wCAAwC,UAAU;EAChE,GAAI;YAEH;GACG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"form.js","names":["React","RNView"],"sources":["../../ui/form.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport * as Slot from '@rn-primitives/slot';\nimport { View as RNView } from 'react-native';\nimport {\n Controller,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n FormProvider,\n useFormContext,\n useFormState,\n} from 'react-hook-form';\n\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\nimport { Label } from './label';\n\nexport { zodResolver } from '@hookform/resolvers/zod';\nexport { useForm, type UseFormReturn, useFieldArray } from 'react-hook-form';\n\nconst Form = FormProvider;\n\ninterface FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName;\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error('useFormField should be used within <FormField>');\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n\ninterface FormItemContextValue {\n id: string;\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn('grid gap-2', className)}\n {...props}\n />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n const { error, formItemId } = useFormField();\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn('data-[error=true]:text-destructive', className)}\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormControl({\n asChild = false,\n ...props\n}: React.ComponentProps<typeof RNView> & {\n asChild?: boolean;\n}) {\n const Component = asChild ? Slot.Text : RNView;\n const { error, formItemId, formDescriptionId, formMessageId } =\n useFormField();\n\n return (\n <Component\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n );\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<'p'>) {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<'p'>) {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message ?? '') : props.children;\n\n if (!body) {\n return null;\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn('text-destructive text-sm', className)}\n {...props}\n >\n {body}\n </p>\n );\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n};\n"],"mappings":";;;;;;;;;;;;AAqBA,MAAM,OAAO;AASb,MAAM,mBAAmBA,QAAM,cAC7B,EAAE,CACH;AAED,MAAM,aAGJ,EACA,GAAG,YACuC;AAC1C,QACE,oBAAC,iBAAiB;EAAS,OAAO,EAAE,MAAM,MAAM,MAAM;YACpD,oBAAC,cAAW,GAAI,QAAS;GACC;;AAIhC,MAAM,qBAAqB;CACzB,MAAM,eAAeA,QAAM,WAAW,iBAAiB;CACvD,MAAM,cAAcA,QAAM,WAAW,gBAAgB;CACrD,MAAM,EAAE,kBAAkB,gBAAgB;CAC1C,MAAM,YAAY,aAAa,EAAE,MAAM,aAAa,MAAM,CAAC;CAC3D,MAAM,aAAa,cAAc,aAAa,MAAM,UAAU;AAE9D,KAAI,CAAC,aACH,OAAM,IAAI,MAAM,iDAAiD;CAGnE,MAAM,EAAE,OAAO;AAEf,QAAO;EACL;EACA,MAAM,aAAa;EACnB,YAAY,GAAG,GAAG;EAClB,mBAAmB,GAAG,GAAG;EACzB,eAAe,GAAG,GAAG;EACrB,GAAG;EACJ;;AAOH,MAAM,kBAAkBA,QAAM,cAC5B,EAAE,CACH;AAED,SAAS,SAAS,EAAE,WAAW,GAAG,SAAsC;CACtE,MAAM,KAAKA,QAAM,OAAO;AAExB,QACE,oBAAC,gBAAgB;EAAS,OAAO,EAAE,IAAI;YACrC,oBAAC;GACC,aAAU;GACV,WAAW,GAAG,cAAc,UAAU;GACtC,GAAI;IACJ;GACuB;;AAI/B,SAAS,UAAU,EACjB,WACA,GAAG,SACkC;CACrC,MAAM,EAAE,OAAO,eAAe,cAAc;AAE5C,QACE,oBAAC;EACC,aAAU;EACV,cAAY,CAAC,CAAC;EACd,WAAW,GAAG,sCAAsC,UAAU;EAC9D,SAAS;EACT,GAAI;GACJ;;AAIN,SAAS,YAAY,EACnB,UAAU,OACV,GAAG,SAGF;CACD,MAAM,YAAY,UAAU,KAAK,OAAOC;CACxC,MAAM,EAAE,OAAO,YAAY,mBAAmB,kBAC5C,cAAc;AAEhB,QACE,oBAAC;EACC,aAAU;EACV,IAAI;EACJ,oBACE,CAAC,QACG,GAAG,sBACH,GAAG,kBAAkB,GAAG;EAE9B,gBAAc,CAAC,CAAC;EAChB,GAAI;GACJ;;AAIN,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAoC;CAC3E,MAAM,EAAE,sBAAsB,cAAc;AAE5C,QACE,oBAAC;EACC,aAAU;EACV,IAAI;EACJ,WAAW,GAAG,iCAAiC,UAAU;EACzD,GAAI;GACJ;;AAIN,SAAS,YAAY,EAAE,WAAW,GAAG,SAAoC;CACvE,MAAM,EAAE,OAAO,kBAAkB,cAAc;CAC/C,MAAM,OAAO,QAAQ,OAAO,OAAO,WAAW,GAAG,GAAG,MAAM;AAE1D,KAAI,CAAC,KACH,QAAO;AAGT,QACE,oBAAC;EACC,aAAU;EACV,IAAI;EACJ,WAAW,GAAG,4BAA4B,UAAU;EACpD,GAAI;YAEH;GACC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hover-card.js","names":[],"sources":["../../ui/hover-card.tsx"],"sourcesContent":["import * as HoverCardPrimitive from '@rn-primitives/hover-card';\nimport * as React from 'react';\nimport { Platform, StyleSheet } from 'react-native';\nimport Animated, { FadeIn } from 'react-native-reanimated';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\nimport { TextClassContext } from './text';\n\nconst HoverCard = HoverCardPrimitive.Root;\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger;\n\nfunction HoverCardContent({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}: HoverCardPrimitive.ContentProps & {\n ref?: React.RefObject<HoverCardPrimitive.ContentRef>;\n}) {\n const { open } = HoverCardPrimitive.useRootContext();\n return (\n <HoverCardPrimitive.Portal>\n <HoverCardPrimitive.Overlay\n style={Platform.OS !== 'web' ? StyleSheet.absoluteFill : undefined}\n >\n <Animated.View entering={FadeIn}>\n <TextClassContext.Provider value=\"text-popover-foreground\">\n <HoverCardPrimitive.Content\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'border-border bg-popover shadow-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 web:cursor-auto web:outline-hidden z-50 w-64 rounded-md border p-4 shadow-md',\n open\n ? 'web:animate-in web:fade-in-0 web:zoom-in-95'\n : 'web:animate-out web:fade-out-0 web:zoom-out-95',\n className\n )}\n {...props}\n />\n </TextClassContext.Provider>\n </Animated.View>\n </HoverCardPrimitive.Overlay>\n </HoverCardPrimitive.Portal>\n );\n}\n\nexport { HoverCard, HoverCardContent, HoverCardTrigger };\n"],"mappings":";;;;;;;;;AAOA,MAAM,YAAY,mBAAmB;AAErC,MAAM,mBAAmB,mBAAmB;AAE5C,SAAS,iBAAiB,EACxB,WACA,QAAQ,UACR,aAAa,GACb,GAAG,SAGF;CACD,MAAM,EAAE,SAAS,mBAAmB,gBAAgB;AACpD,QACE,oBAAC,mBAAmB,oBAClB,oBAAC,mBAAmB;EAClB,OAAO,SAAS,OAAO,QAAQ,WAAW,eAAe;YAEzD,oBAAC,SAAS;GAAK,UAAU;aACvB,oBAAC,iBAAiB;IAAS,OAAM;cAC/B,oBAAC,mBAAmB;KACX;KACK;KACZ,WAAW,GACT,yRACA,OACI,gDACA,kDACJ,UACD;KACD,GAAI;MACJ;KACwB;IACd;GACW,GACH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Check.js","names":[],"sources":["../../../ui/icons/Check.tsx"],"sourcesContent":["import { Check } from 'lucide-react-native';\nimport { iconWithClassName } from './iconWithClassName';\n\niconWithClassName(Check);\nexport { Check };\n"],"mappings":";;;;AAGA,kBAAkB,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ChevronDown.js","names":[],"sources":["../../../ui/icons/ChevronDown.tsx"],"sourcesContent":["import { ChevronDown } from 'lucide-react-native';\nimport { iconWithClassName } from './iconWithClassName';\n\niconWithClassName(ChevronDown);\nexport { ChevronDown };\n"],"mappings":";;;;AAGA,kBAAkB,YAAY"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ChevronRight.js","names":[],"sources":["../../../ui/icons/ChevronRight.tsx"],"sourcesContent":["import { ChevronRight } from 'lucide-react-native';\nimport { iconWithClassName } from './iconWithClassName';\n\niconWithClassName(ChevronRight);\nexport { ChevronRight };\n"],"mappings":";;;;AAGA,kBAAkB,aAAa"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ChevronUp.js","names":[],"sources":["../../../ui/icons/ChevronUp.tsx"],"sourcesContent":["import { ChevronUp } from 'lucide-react-native';\nimport { iconWithClassName } from './iconWithClassName';\n\niconWithClassName(ChevronUp);\nexport { ChevronUp };\n"],"mappings":";;;;AAGA,kBAAkB,UAAU"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CircleUser.js","names":[],"sources":["../../../ui/icons/CircleUser.tsx"],"sourcesContent":["import { CircleUserRoundIcon } from 'lucide-react-native';\nimport { iconWithClassName } from './iconWithClassName';\n\niconWithClassName(CircleUserRoundIcon);\nexport { CircleUserRoundIcon };\n"],"mappings":";;;;AAGA,kBAAkB,oBAAoB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Info.js","names":[],"sources":["../../../ui/icons/Info.tsx"],"sourcesContent":["import { Info } from 'lucide-react-native';\nimport { iconWithClassName } from './iconWithClassName';\n\niconWithClassName(Info);\nexport { Info };\n"],"mappings":";;;;AAGA,kBAAkB,KAAK"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Key.js","names":[],"sources":["../../../ui/icons/Key.tsx"],"sourcesContent":["import { KeyRoundIcon } from 'lucide-react-native';\nimport { iconWithClassName } from './iconWithClassName';\n\niconWithClassName(KeyRoundIcon);\nexport { KeyRoundIcon };\n"],"mappings":";;;;AAGA,kBAAkB,aAAa"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MoonStar.js","names":[],"sources":["../../../ui/icons/MoonStar.tsx"],"sourcesContent":["import { MoonStar } from 'lucide-react-native';\nimport { iconWithClassName } from './iconWithClassName';\n\niconWithClassName(MoonStar);\nexport { MoonStar };\n"],"mappings":";;;;AAGA,kBAAkB,SAAS"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Sun.js","names":[],"sources":["../../../ui/icons/Sun.tsx"],"sourcesContent":["import { Sun } from 'lucide-react-native';\nimport { iconWithClassName } from './iconWithClassName';\n\niconWithClassName(Sun);\nexport { Sun };\n"],"mappings":";;;;AAGA,kBAAkB,IAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"X.js","names":[],"sources":["../../../ui/icons/X.tsx"],"sourcesContent":["import { X } from 'lucide-react-native';\nimport { iconWithClassName } from './iconWithClassName';\n\niconWithClassName(X);\nexport { X };\n"],"mappings":";;;;AAGA,kBAAkB,EAAE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"iconWithClassName.js","names":[],"sources":["../../../ui/icons/iconWithClassName.ts"],"sourcesContent":["import type { LucideIcon } from 'lucide-react-native';\nimport { styled } from 'nativewind';\n\nexport function iconWithClassName(icon: LucideIcon) {\n styled(icon, {\n className: {\n target: 'style',\n nativeStyleMapping: {\n color: true,\n opacity: true,\n },\n },\n });\n}\n"],"mappings":";;;AAGA,SAAgB,kBAAkB,MAAkB;AAClD,QAAO,MAAM,EACX,WAAW;EACT,QAAQ;EACR,oBAAoB;GAClB,OAAO;GACP,SAAS;GACV;EACF,EACF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"input.js","names":[],"sources":["../../ui/input.tsx"],"sourcesContent":["import * as React from 'react';\nimport { TextInput, type TextInputProps } from 'react-native';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\n\nfunction Input({\n className,\n placeholderClassName,\n ...props\n}: TextInputProps & {\n ref?: React.RefObject<TextInput>;\n}) {\n return (\n <TextInput\n className={cn(\n 'native:h-12 native:text-lg native:leading-tight border-input bg-background text-foreground placeholder:text-muted-foreground web:flex web:w-full web:py-2 web:ring-offset-background web:focus-visible:outline-hidden web:focus-visible:ring-2 web:focus-visible:ring-ring web:focus-visible:ring-offset-2 h-10 rounded-md border px-3 text-base file:border-0 file:bg-transparent file:font-medium lg:text-sm',\n props.editable === false && 'web:cursor-not-allowed opacity-50',\n className\n )}\n placeholderClassName={cn('text-muted-foreground', placeholderClassName)}\n {...props}\n />\n );\n}\n\nexport { Input };\n"],"mappings":";;;;;;AAIA,SAAS,MAAM,EACb,WACA,sBACA,GAAG,SAGF;AACD,QACE,oBAAC;EACC,WAAW,GACT,kZACA,MAAM,aAAa,SAAS,qCAC5B,UACD;EACD,sBAAsB,GAAG,yBAAyB,qBAAqB;EACvE,GAAI;GACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"label.js","names":[],"sources":["../../ui/label.tsx"],"sourcesContent":["import { cn } from '@contractspec/lib.ui-kit-core/utils';\nimport * as LabelPrimitive from '@rn-primitives/label';\nimport { Platform } from 'react-native';\n\nfunction Label({\n className,\n onPress,\n onLongPress,\n onPressIn,\n onPressOut,\n disabled,\n ...props\n}: LabelPrimitive.TextProps & React.RefAttributes<LabelPrimitive.TextRef>) {\n return (\n <LabelPrimitive.Root\n className={cn(\n 'flex flex-row items-center gap-2 select-none',\n Platform.select({\n web: 'cursor-default leading-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n }),\n disabled && 'opacity-50'\n )}\n onPress={onPress}\n onLongPress={onLongPress}\n onPressIn={onPressIn}\n onPressOut={onPressOut}\n disabled={disabled}\n >\n <LabelPrimitive.Text\n className={cn(\n 'text-foreground text-sm font-medium',\n Platform.select({ web: 'leading-none' }),\n className\n )}\n {...props}\n />\n </LabelPrimitive.Root>\n );\n}\n\nexport { Label };\n"],"mappings":";;;;;;AAIA,SAAS,MAAM,EACb,WACA,SACA,aACA,WACA,YACA,UACA,GAAG,SACsE;AACzE,QACE,oBAAC,eAAe;EACd,WAAW,GACT,gDACA,SAAS,OAAO,EACd,KAAK,8KACN,CAAC,EACF,YAAY,aACb;EACQ;EACI;EACF;EACC;EACF;YAEV,oBAAC,eAAe;GACd,WAAW,GACT,uCACA,SAAS,OAAO,EAAE,KAAK,gBAAgB,CAAC,EACxC,UACD;GACD,GAAI;IACJ;GACkB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"link.js","names":["LinkExpo"],"sources":["../../ui/link.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Link as LinkExpo, type LinkProps } from 'expo-router';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\n\nfunction Link({\n className,\n ...props\n}: LinkProps & {\n ref?: React.RefObject<typeof LinkExpo>;\n}) {\n return (\n <LinkExpo\n className={cn('className=\"text-primary underline\"', className)}\n {...props}\n />\n );\n}\n\nexport { Link };\n"],"mappings":";;;;;;AAIA,SAAS,KAAK,EACZ,WACA,GAAG,SAGF;AACD,QACE,oBAACA;EACC,WAAW,GAAG,wCAAsC,UAAU;EAC9D,GAAI;GACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"loading-button.js","names":["Text"],"sources":["../../ui/loading-button.tsx"],"sourcesContent":["import React from 'react';\nimport { ActivityIndicator } from 'react-native';\nimport type { ButtonProps } from './button';\nimport { Button } from './button';\nimport { Text } from './text';\nimport { HStack } from './stack';\n\ninterface LoadingButtonProps extends ButtonProps {\n isLoading?: boolean;\n loadingText?: string;\n children: React.ReactNode;\n}\n\nexport function LoadingButton({\n isLoading = false,\n loadingText,\n children,\n disabled,\n ...props\n}: LoadingButtonProps) {\n return (\n <Button disabled={disabled || isLoading} {...props}>\n {isLoading ? (\n <HStack className=\"items-center gap-x-2\">\n <ActivityIndicator\n size=\"small\"\n // color={props.variant === 'outline' ? '#6b7280' : '#ffffff'}\n />\n <Text>{loadingText || 'Loading...'}</Text>\n </HStack>\n ) : (\n children\n )}\n </Button>\n );\n}\n"],"mappings":";;;;;;;;AAaA,SAAgB,cAAc,EAC5B,YAAY,OACZ,aACA,UACA,UACA,GAAG,SACkB;AACrB,QACE,oBAAC;EAAO,UAAU,YAAY;EAAW,GAAI;YAC1C,YACC,qBAAC;GAAO,WAAU;cAChB,oBAAC,qBACC,MAAK,UAEL,EACF,oBAACA,oBAAM,eAAe,eAAoB;IACnC,GAET;GAEK"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"loading-overlay.js","names":["Text"],"sources":["../../ui/loading-overlay.tsx"],"sourcesContent":["import React from 'react';\nimport { ActivityIndicator, View } from 'react-native';\nimport { VStack } from './stack';\nimport { Text } from './text';\nimport { H3 } from './typography';\n\ninterface LoadingOverlayProps {\n isVisible: boolean;\n title?: string;\n subtitle?: string;\n}\n\nexport function LoadingOverlay({\n isVisible,\n title = 'Loading...',\n subtitle,\n}: LoadingOverlayProps) {\n if (!isVisible) return null;\n\n return (\n <View\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 1000,\n }}\n >\n <VStack className=\"items-center gap-y-4\">\n <ActivityIndicator size=\"large\" color=\"#6b7280\" />\n <VStack className=\"items-center gap-y-2\">\n <H3 className=\"text-center\">{title}</H3>\n {subtitle && (\n <Text className=\"text-muted-foreground text-center\">\n {subtitle}\n </Text>\n )}\n </VStack>\n </VStack>\n </View>\n );\n}\n"],"mappings":";;;;;;;;AAYA,SAAgB,eAAe,EAC7B,WACA,QAAQ,cACR,YACsB;AACtB,KAAI,CAAC,UAAW,QAAO;AAEvB,QACE,oBAAC;EACC,OAAO;GACL,UAAU;GACV,KAAK;GACL,MAAM;GACN,OAAO;GACP,QAAQ;GACR,iBAAiB;GACjB,gBAAgB;GAChB,YAAY;GACZ,QAAQ;GACT;YAED,qBAAC;GAAO,WAAU;cAChB,oBAAC;IAAkB,MAAK;IAAQ,OAAM;KAAY,EAClD,qBAAC;IAAO,WAAU;eAChB,oBAAC;KAAG,WAAU;eAAe;MAAW,EACvC,YACC,oBAACA;KAAK,WAAU;eACb;MACI;KAEF;IACF;GACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"loading-screen.js","names":[],"sources":["../../ui/loading-screen.tsx"],"sourcesContent":["import React from 'react';\nimport { View } from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { VStack } from './stack';\nimport { Skeleton } from './skeleton';\nimport { H3 } from './typography';\n\ninterface LoadingScreenProps {\n title?: string;\n variant?: 'default' | 'profile' | 'form' | 'list';\n}\n\nexport function LoadingScreen({\n title = 'Loading...',\n variant = 'default',\n}: LoadingScreenProps) {\n const renderContent = () => {\n switch (variant) {\n case 'profile':\n return (\n <VStack className=\"gap-y-6\">\n {/* Header skeleton */}\n <VStack className=\"gap-y-2\">\n <Skeleton className=\"h-8 w-3/4\" />\n <Skeleton className=\"h-4 w-1/2\" />\n </VStack>\n\n {/* Profile card skeleton */}\n <VStack className=\"gap-y-4\">\n <Skeleton className=\"h-16 w-16 rounded-full\" />\n <VStack className=\"gap-y-2\">\n <Skeleton className=\"h-6 w-2/3\" />\n <Skeleton className=\"h-4 w-1/2\" />\n </VStack>\n </VStack>\n\n {/* Content skeleton */}\n <VStack className=\"gap-y-3\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-5/6\" />\n <Skeleton className=\"h-4 w-3/4\" />\n </VStack>\n </VStack>\n );\n\n case 'form':\n return (\n <VStack className=\"gap-y-6\">\n {/* Header */}\n <VStack className=\"gap-y-2\">\n <Skeleton className=\"h-8 w-3/4\" />\n <Skeleton className=\"h-4 w-1/2\" />\n </VStack>\n\n {/* Form fields */}\n <VStack className=\"gap-y-4\">\n <VStack className=\"gap-y-2\">\n <Skeleton className=\"h-4 w-1/4\" />\n <Skeleton className=\"h-12 w-full\" />\n </VStack>\n <VStack className=\"gap-y-2\">\n <Skeleton className=\"h-4 w-1/4\" />\n <Skeleton className=\"h-12 w-full\" />\n </VStack>\n <Skeleton className=\"h-12 w-full\" />\n </VStack>\n </VStack>\n );\n\n case 'list':\n return (\n <VStack className=\"gap-y-4\">\n <Skeleton className=\"h-8 w-1/2\" />\n {[...Array(5)].map((_, i) => (\n <VStack key={i} className=\"gap-y-2\">\n <Skeleton className=\"h-6 w-3/4\" />\n <Skeleton className=\"h-4 w-1/2\" />\n </VStack>\n ))}\n </VStack>\n );\n\n default:\n return (\n <VStack className=\"gap-y-4\">\n <H3 className=\"text-muted-foreground text-center\">{title}</H3>\n <Skeleton className=\"h-8 w-full\" />\n <Skeleton className=\"h-6 w-3/4\" />\n <Skeleton className=\"h-6 w-1/2\" />\n </VStack>\n );\n }\n };\n\n return (\n <SafeAreaView style={{ flex: 1 }}>\n <View style={{ flex: 1, padding: 16, justifyContent: 'center' }}>\n {renderContent()}\n </View>\n </SafeAreaView>\n );\n}\n"],"mappings":";;;;;;;;;AAYA,SAAgB,cAAc,EAC5B,QAAQ,cACR,UAAU,aACW;CACrB,MAAM,sBAAsB;AAC1B,UAAQ,SAAR;GACE,KAAK,UACH,QACE,qBAAC;IAAO,WAAU;;KAEhB,qBAAC;MAAO,WAAU;iBAChB,oBAAC,YAAS,WAAU,cAAc,EAClC,oBAAC,YAAS,WAAU,cAAc;OAC3B;KAGT,qBAAC;MAAO,WAAU;iBAChB,oBAAC,YAAS,WAAU,2BAA2B,EAC/C,qBAAC;OAAO,WAAU;kBAChB,oBAAC,YAAS,WAAU,cAAc,EAClC,oBAAC,YAAS,WAAU,cAAc;QAC3B;OACF;KAGT,qBAAC;MAAO,WAAU;;OAChB,oBAAC,YAAS,WAAU,eAAe;OACnC,oBAAC,YAAS,WAAU,cAAc;OAClC,oBAAC,YAAS,WAAU,cAAc;;OAC3B;;KACF;GAGb,KAAK,OACH,QACE,qBAAC;IAAO,WAAU;eAEhB,qBAAC;KAAO,WAAU;gBAChB,oBAAC,YAAS,WAAU,cAAc,EAClC,oBAAC,YAAS,WAAU,cAAc;MAC3B,EAGT,qBAAC;KAAO,WAAU;;MAChB,qBAAC;OAAO,WAAU;kBAChB,oBAAC,YAAS,WAAU,cAAc,EAClC,oBAAC,YAAS,WAAU,gBAAgB;QAC7B;MACT,qBAAC;OAAO,WAAU;kBAChB,oBAAC,YAAS,WAAU,cAAc,EAClC,oBAAC,YAAS,WAAU,gBAAgB;QAC7B;MACT,oBAAC,YAAS,WAAU,gBAAgB;;MAC7B;KACF;GAGb,KAAK,OACH,QACE,qBAAC;IAAO,WAAU;eAChB,oBAAC,YAAS,WAAU,cAAc,EACjC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,KAAK,GAAG,MACrB,qBAAC;KAAe,WAAU;gBACxB,oBAAC,YAAS,WAAU,cAAc,EAClC,oBAAC,YAAS,WAAU,cAAc;OAFvB,EAGJ,CACT;KACK;GAGb,QACE,QACE,qBAAC;IAAO,WAAU;;KAChB,oBAAC;MAAG,WAAU;gBAAqC;OAAW;KAC9D,oBAAC,YAAS,WAAU,eAAe;KACnC,oBAAC,YAAS,WAAU,cAAc;KAClC,oBAAC,YAAS,WAAU,cAAc;;KAC3B;;;AAKjB,QACE,oBAAC;EAAa,OAAO,EAAE,MAAM,GAAG;YAC9B,oBAAC;GAAK,OAAO;IAAE,MAAM;IAAG,SAAS;IAAI,gBAAgB;IAAU;aAC5D,eAAe;IACX;GACM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FeatureGrid.js","names":[],"sources":["../../../ui/marketing/FeatureGrid.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cn } from '../utils';\n\nexport interface FeatureItem {\n title: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n}\n\nexport function FeatureGrid({\n items,\n columns = 3,\n className,\n}: {\n items: FeatureItem[];\n columns?: 2 | 3 | 4;\n className?: string;\n}) {\n const gridCols =\n columns === 4\n ? 'md:grid-cols-4'\n : columns === 2\n ? 'md:grid-cols-2'\n : 'md:grid-cols-3';\n return (\n <section className={cn('mx-auto max-w-6xl py-12', className)}>\n <div className={cn('grid grid-cols-1 gap-6', gridCols)}>\n {items.map((it, idx) => (\n <div key={idx} className=\"rounded-lg border p-6\">\n {it.icon && <div className=\"text-primary mb-3\">{it.icon}</div>}\n <h3 className=\"text-lg font-semibold\">{it.title}</h3>\n {it.description && (\n <p className=\"text-muted-foreground mt-2 text-base\">\n {it.description}\n </p>\n )}\n </div>\n ))}\n </div>\n </section>\n );\n}\n"],"mappings":";;;;;AASA,SAAgB,YAAY,EAC1B,OACA,UAAU,GACV,aAKC;CACD,MAAM,WACJ,YAAY,IACR,mBACA,YAAY,IACV,mBACA;AACR,QACE,oBAAC;EAAQ,WAAW,GAAG,2BAA2B,UAAU;YAC1D,oBAAC;GAAI,WAAW,GAAG,0BAA0B,SAAS;aACnD,MAAM,KAAK,IAAI,QACd,qBAAC;IAAc,WAAU;;KACtB,GAAG,QAAQ,oBAAC;MAAI,WAAU;gBAAqB,GAAG;OAAW;KAC9D,oBAAC;MAAG,WAAU;gBAAyB,GAAG;OAAW;KACpD,GAAG,eACF,oBAAC;MAAE,WAAU;gBACV,GAAG;OACF;;MANE,IAQJ,CACN;IACE;GACE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Hero.js","names":[],"sources":["../../../ui/marketing/Hero.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Button } from '../button';\nimport { cn } from '../utils';\nimport { Link } from 'expo-router';\n\nexport function Hero({\n title,\n subtitle,\n primaryCta,\n secondaryCta,\n className,\n}: {\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n primaryCta?: { label: string; href?: string; onClick?: () => void };\n secondaryCta?: { label: string; href?: string; onClick?: () => void };\n className?: string;\n}) {\n return (\n <section className={cn('mx-auto max-w-4xl py-16 text-center', className)}>\n <h1 className=\"text-4xl font-bold tracking-tight md:text-5xl\">{title}</h1>\n {subtitle && (\n <p className=\"text-muted-foreground mt-4 text-lg md:text-xl\">\n {subtitle}\n </p>\n )}\n {(primaryCta || secondaryCta) && (\n <div className=\"mt-8 flex items-center justify-center gap-3\">\n {primaryCta &&\n (primaryCta.href ? (\n <Button size=\"lg\">\n <Link href={primaryCta.href}>{primaryCta.label}</Link>\n </Button>\n ) : (\n <Button size=\"lg\" onPress={primaryCta.onClick}>\n {primaryCta.label}\n </Button>\n ))}\n {secondaryCta &&\n (secondaryCta.href ? (\n <Button variant=\"outline\" size=\"lg\">\n <Link href={secondaryCta.href}>{secondaryCta.label}</Link>\n </Button>\n ) : (\n <Button\n variant=\"outline\"\n size=\"lg\"\n onPress={secondaryCta.onClick}\n >\n {secondaryCta.label}\n </Button>\n ))}\n </div>\n )}\n </section>\n );\n}\n"],"mappings":";;;;;;;AAKA,SAAgB,KAAK,EACnB,OACA,UACA,YACA,cACA,aAOC;AACD,QACE,qBAAC;EAAQ,WAAW,GAAG,uCAAuC,UAAU;;GACtE,oBAAC;IAAG,WAAU;cAAiD;KAAW;GACzE,YACC,oBAAC;IAAE,WAAU;cACV;KACC;IAEJ,cAAc,iBACd,qBAAC;IAAI,WAAU;eACZ,eACE,WAAW,OACV,oBAAC;KAAO,MAAK;eACX,oBAAC;MAAK,MAAM,WAAW;gBAAO,WAAW;OAAa;MAC/C,GAET,oBAAC;KAAO,MAAK;KAAK,SAAS,WAAW;eACnC,WAAW;MACL,GAEZ,iBACE,aAAa,OACZ,oBAAC;KAAO,SAAQ;KAAU,MAAK;eAC7B,oBAAC;MAAK,MAAM,aAAa;gBAAO,aAAa;OAAa;MACnD,GAET,oBAAC;KACC,SAAQ;KACR,MAAK;KACL,SAAS,aAAa;eAErB,aAAa;MACP;KAET;;GAEA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PricingTable.js","names":[],"sources":["../../../ui/marketing/PricingTable.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Button } from '../button';\nimport { cn } from '../utils';\nimport { Link } from 'expo-router';\n\nexport interface PricingTier {\n name: string;\n price: string;\n tagline?: string;\n features: string[];\n cta?: { label: string; href?: string; onClick?: () => void };\n highlighted?: boolean;\n}\n\nexport function PricingTable({\n tiers,\n className,\n}: {\n tiers: PricingTier[];\n className?: string;\n}) {\n return (\n <section className={cn('mx-auto max-w-6xl py-12', className)}>\n <div className=\"grid grid-cols-1 gap-6 md:grid-cols-3\">\n {tiers.map((t, idx) => (\n <div\n key={idx}\n className={cn(\n 'flex flex-col rounded-lg border p-6',\n t.highlighted && 'border-primary shadow-lg'\n )}\n >\n <div className=\"text-muted-foreground mb-2 text-base font-medium\">\n {t.name}\n </div>\n <div className=\"text-3xl font-semibold\">{t.price}</div>\n {t.tagline && (\n <div className=\"text-muted-foreground mt-1 text-base\">\n {t.tagline}\n </div>\n )}\n <ul className=\"mt-4 space-y-2 text-base\">\n {t.features.map((f, i) => (\n <li key={i} className=\"flex items-start gap-2\">\n <span className=\"bg-primary mt-1 h-1.5 w-1.5 rounded-full\" />\n <span>{f}</span>\n </li>\n ))}\n </ul>\n {t.cta && (\n <div className=\"mt-6\">\n {t.cta.href ? (\n <Button className=\"w-full\">\n <Link href={t.cta.href}>{t.cta.label}</Link>\n </Button>\n ) : (\n <Button className=\"w-full\" onPress={t.cta.onClick}>\n {t.cta.label}\n </Button>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n <p className=\"text-muted-foreground mt-6 text-center text-base\">\n Usage-based tiers inspired by generous free allowances and per-unit\n pricing.\n </p>\n </section>\n );\n}\n"],"mappings":";;;;;;;AAcA,SAAgB,aAAa,EAC3B,OACA,aAIC;AACD,QACE,qBAAC;EAAQ,WAAW,GAAG,2BAA2B,UAAU;aAC1D,oBAAC;GAAI,WAAU;aACZ,MAAM,KAAK,GAAG,QACb,qBAAC;IAEC,WAAW,GACT,uCACA,EAAE,eAAe,2BAClB;;KAED,oBAAC;MAAI,WAAU;gBACZ,EAAE;OACC;KACN,oBAAC;MAAI,WAAU;gBAA0B,EAAE;OAAY;KACtD,EAAE,WACD,oBAAC;MAAI,WAAU;gBACZ,EAAE;OACC;KAER,oBAAC;MAAG,WAAU;gBACX,EAAE,SAAS,KAAK,GAAG,MAClB,qBAAC;OAAW,WAAU;kBACpB,oBAAC,UAAK,WAAU,6CAA6C,EAC7D,oBAAC,oBAAM,IAAS;SAFT,EAGJ,CACL;OACC;KACJ,EAAE,OACD,oBAAC;MAAI,WAAU;gBACZ,EAAE,IAAI,OACL,oBAAC;OAAO,WAAU;iBAChB,oBAAC;QAAK,MAAM,EAAE,IAAI;kBAAO,EAAE,IAAI;SAAa;QACrC,GAET,oBAAC;OAAO,WAAU;OAAS,SAAS,EAAE,IAAI;iBACvC,EAAE,IAAI;QACA;OAEP;;MAlCH,IAoCD,CACN;IACE,EACN,oBAAC;GAAE,WAAU;aAAmD;IAG5D;GACI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"menubar.js","names":[],"sources":["../../ui/menubar.tsx"],"sourcesContent":["import * as MenubarPrimitive from '@rn-primitives/menubar';\nimport * as React from 'react';\nimport { Platform, Text, type TextProps, View } from 'react-native';\nimport { Check } from './icons/Check';\nimport { ChevronDown } from './icons/ChevronDown';\nimport { ChevronRight } from './icons/ChevronRight';\nimport { ChevronUp } from './icons/ChevronUp';\nimport { cn } from '@contractspec/lib.ui-kit-core/utils';\nimport { TextClassContext } from './text';\n\nconst MenubarMenu = MenubarPrimitive.Menu;\n\nconst MenubarGroup = MenubarPrimitive.Group;\n\nconst MenubarPortal = MenubarPrimitive.Portal;\n\nconst MenubarSub = MenubarPrimitive.Sub;\n\nconst MenubarRadioGroup = MenubarPrimitive.RadioGroup;\n\nfunction Menubar({\n className,\n ...props\n}: MenubarPrimitive.RootProps & {\n ref?: React.RefObject<MenubarPrimitive.RootRef>;\n}) {\n return (\n <MenubarPrimitive.Root\n className={cn(\n 'native:h-12 border-border bg-background flex h-10 flex-row items-center gap-x-1 rounded-md border p-1',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: MenubarPrimitive.TriggerProps & {\n ref?: React.RefObject<MenubarPrimitive.TriggerRef>;\n}) {\n const { value } = MenubarPrimitive.useRootContext();\n const { value: itemValue } = MenubarPrimitive.useMenuContext();\n\n return (\n <MenubarPrimitive.Trigger\n className={cn(\n 'native:h-10 native:px-5 native:py-0 active:bg-accent web:cursor-default web:select-none web:outline-hidden web:focus:bg-accent web:focus:text-accent-foreground flex flex-row items-center rounded-xs px-3 py-1.5 text-sm font-medium',\n value === itemValue && 'bg-accent text-accent-foreground',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenubarPrimitive.SubTriggerProps & {\n ref?: React.RefObject<MenubarPrimitive.SubTriggerRef>;\n className?: string;\n inset?: boolean;\n children?: React.ReactNode;\n}) {\n const { open } = MenubarPrimitive.useSubContext();\n const Icon =\n Platform.OS === 'web' ? ChevronRight : open ? ChevronUp : ChevronDown;\n return (\n <TextClassContext.Provider\n value={cn(\n 'native:text-lg text-primary text-sm select-none',\n open && 'native:text-accent-foreground'\n )}\n >\n <MenubarPrimitive.SubTrigger\n className={cn(\n 'native:py-2 active:bg-accent web:cursor-default web:select-none web:outline-hidden web:hover:bg-accent web:focus:bg-accent flex flex-row items-center gap-2 rounded-xs px-2 py-1.5',\n open && 'bg-accent',\n inset && 'pl-8',\n className\n )}\n {...props}\n >\n {children}\n <Icon size={18} className=\"text-foreground ml-auto\" />\n </MenubarPrimitive.SubTrigger>\n </TextClassContext.Provider>\n );\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: MenubarPrimitive.SubContentProps & {\n ref?: React.RefObject<MenubarPrimitive.SubContentRef>;\n}) {\n const { open } = MenubarPrimitive.useSubContext();\n return (\n <MenubarPrimitive.SubContent\n className={cn(\n 'border-border bg-popover shadow-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 mt-1 min-w-32 overflow-hidden rounded-md border p-1 shadow-md',\n open\n ? 'web:animate-in web:fade-in-0 web:zoom-in-95'\n : 'web:animate-out web:fade-out-0 web:zoom-out',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarContent({\n className,\n portalHost,\n ...props\n}: MenubarPrimitive.ContentProps & {\n ref?: React.RefObject<MenubarPrimitive.ContentRef>;\n className?: string;\n portalHost?: string;\n}) {\n const { value } = MenubarPrimitive.useRootContext();\n const { value: itemValue } = MenubarPrimitive.useMenuContext();\n return (\n <MenubarPrimitive.Portal hostName={portalHost}>\n <MenubarPrimitive.Content\n className={cn(\n 'border-border bg-popover shadow-foreground/5 z-50 min-w-32 overflow-hidden rounded-md border p-1 shadow-md',\n value === itemValue\n ? 'web:animate-in web:fade-in-0 web:zoom-in-95'\n : 'web:animate-out web:fade-out-0 web:zoom-out-95',\n className\n )}\n {...props}\n />\n </MenubarPrimitive.Portal>\n );\n}\n\nfunction MenubarItem({\n className,\n inset,\n ...props\n}: MenubarPrimitive.ItemProps & {\n ref?: React.RefObject<MenubarPrimitive.ItemRef>;\n className?: string;\n inset?: boolean;\n}) {\n return (\n <TextClassContext.Provider value=\"select-none text-sm native:text-lg text-popover-foreground web:group-focus:text-accent-foreground\">\n <MenubarPrimitive.Item\n className={cn(\n 'native:py-2 group active:bg-accent web:cursor-default web:outline-hidden web:hover:bg-accent web:focus:bg-accent relative flex flex-row items-center gap-2 rounded-xs px-2 py-1.5',\n inset && 'pl-8',\n props.disabled && 'web:pointer-events-none opacity-50',\n className\n )}\n {...props}\n />\n </TextClassContext.Provider>\n );\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: MenubarPrimitive.CheckboxItemProps & {\n ref?: React.RefObject<MenubarPrimitive.CheckboxItemRef>;\n children?: React.ReactNode;\n}) {\n return (\n <MenubarPrimitive.CheckboxItem\n className={cn(\n 'web:group native:py-2 active:bg-accent web:cursor-default web:outline-hidden web:focus:bg-accent relative flex flex-row items-center rounded-xs py-1.5 pr-2 pl-8',\n props.disabled && 'web:pointer-events-none opacity-50',\n className\n )}\n checked={checked}\n {...props}\n >\n <View className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <Check size={14} strokeWidth={3} className=\"text-foreground\" />\n </MenubarPrimitive.ItemIndicator>\n </View>\n {children}\n </MenubarPrimitive.CheckboxItem>\n );\n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: MenubarPrimitive.RadioItemProps & {\n ref?: React.RefObject<MenubarPrimitive.RadioItemRef>;\n children?: React.ReactNode;\n}) {\n return (\n <MenubarPrimitive.RadioItem\n className={cn(\n 'web:group native:py-2 active:bg-accent web:cursor-default web:outline-hidden web:focus:bg-accent relative flex flex-row items-center rounded-xs py-1.5 pr-2 pl-8',\n props.disabled && 'web:pointer-events-none opacity-50',\n className\n )}\n {...props}\n >\n <View className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <View className=\"bg-foreground h-2 w-2 rounded-full\" />\n </MenubarPrimitive.ItemIndicator>\n </View>\n {children}\n </MenubarPrimitive.RadioItem>\n );\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: MenubarPrimitive.LabelProps & {\n ref?: React.RefObject<MenubarPrimitive.LabelRef>;\n className?: string;\n inset?: boolean;\n}) {\n return (\n <MenubarPrimitive.Label\n className={cn(\n 'native:text-base text-foreground web:cursor-default px-2 py-1.5 text-sm font-semibold',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: MenubarPrimitive.SeparatorProps & {\n ref?: React.RefObject<MenubarPrimitive.SeparatorRef>;\n}) {\n return (\n <MenubarPrimitive.Separator\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction MenubarShortcut({ className, ...props }: TextProps) {\n return (\n <Text\n className={cn(\n 'native:text-sm text-muted-foreground ml-auto text-xs tracking-widest',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Menubar,\n MenubarCheckboxItem,\n MenubarContent,\n MenubarGroup,\n MenubarItem,\n MenubarLabel,\n MenubarMenu,\n MenubarPortal,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSeparator,\n MenubarShortcut,\n MenubarSub,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarTrigger,\n};\n"],"mappings":";;;;;;;;;;;;AAUA,MAAM,cAAc,iBAAiB;AAErC,MAAM,eAAe,iBAAiB;AAEtC,MAAM,gBAAgB,iBAAiB;AAEvC,MAAM,aAAa,iBAAiB;AAEpC,MAAM,oBAAoB,iBAAiB;AAE3C,SAAS,QAAQ,EACf,WACA,GAAG,SAGF;AACD,QACE,oBAAC,iBAAiB;EAChB,WAAW,GACT,yGACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,eAAe,EACtB,WACA,GAAG,SAGF;CACD,MAAM,EAAE,UAAU,iBAAiB,gBAAgB;CACnD,MAAM,EAAE,OAAO,cAAc,iBAAiB,gBAAgB;AAE9D,QACE,oBAAC,iBAAiB;EAChB,WAAW,GACT,yOACA,UAAU,aAAa,oCACvB,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,kBAAkB,EACzB,WACA,OACA,UACA,GAAG,SAMF;CACD,MAAM,EAAE,SAAS,iBAAiB,eAAe;CACjD,MAAM,OACJ,SAAS,OAAO,QAAQ,eAAe,OAAO,YAAY;AAC5D,QACE,oBAAC,iBAAiB;EAChB,OAAO,GACL,mDACA,QAAQ,gCACT;YAED,qBAAC,iBAAiB;GAChB,WAAW,GACT,sLACA,QAAQ,aACR,SAAS,QACT,UACD;GACD,GAAI;cAEH,UACD,oBAAC;IAAK,MAAM;IAAI,WAAU;KAA4B;IAC1B;GACJ;;AAIhC,SAAS,kBAAkB,EACzB,WACA,GAAG,SAGF;CACD,MAAM,EAAE,SAAS,iBAAiB,eAAe;AACjD,QACE,oBAAC,iBAAiB;EAChB,WAAW,GACT,+QACA,OACI,gDACA,+CACJ,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,eAAe,EACtB,WACA,YACA,GAAG,SAKF;CACD,MAAM,EAAE,UAAU,iBAAiB,gBAAgB;CACnD,MAAM,EAAE,OAAO,cAAc,iBAAiB,gBAAgB;AAC9D,QACE,oBAAC,iBAAiB;EAAO,UAAU;YACjC,oBAAC,iBAAiB;GAChB,WAAW,GACT,8GACA,UAAU,YACN,gDACA,kDACJ,UACD;GACD,GAAI;IACJ;GACsB;;AAI9B,SAAS,YAAY,EACnB,WACA,OACA,GAAG,SAKF;AACD,QACE,oBAAC,iBAAiB;EAAS,OAAM;YAC/B,oBAAC,iBAAiB;GAChB,WAAW,GACT,qLACA,SAAS,QACT,MAAM,YAAY,sCAClB,UACD;GACD,GAAI;IACJ;GACwB;;AAIhC,SAAS,oBAAoB,EAC3B,WACA,UACA,SACA,GAAG,SAIF;AACD,QACE,qBAAC,iBAAiB;EAChB,WAAW,GACT,oKACA,MAAM,YAAY,sCAClB,UACD;EACQ;EACT,GAAI;aAEJ,oBAAC;GAAK,WAAU;aACd,oBAAC,iBAAiB,2BAChB,oBAAC;IAAM,MAAM;IAAI,aAAa;IAAG,WAAU;KAAoB,GAChC;IAC5B,EACN;GAC6B;;AAIpC,SAAS,iBAAiB,EACxB,WACA,UACA,GAAG,SAIF;AACD,QACE,qBAAC,iBAAiB;EAChB,WAAW,GACT,oKACA,MAAM,YAAY,sCAClB,UACD;EACD,GAAI;aAEJ,oBAAC;GAAK,WAAU;aACd,oBAAC,iBAAiB,2BAChB,oBAAC,QAAK,WAAU,uCAAuC,GACxB;IAC5B,EACN;GAC0B;;AAIjC,SAAS,aAAa,EACpB,WACA,OACA,GAAG,SAKF;AACD,QACE,oBAAC,iBAAiB;EAChB,WAAW,GACT,yFACA,SAAS,QACT,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,iBAAiB,EACxB,WACA,GAAG,SAGF;AACD,QACE,oBAAC,iBAAiB;EAChB,WAAW,GAAG,6BAA6B,UAAU;EACrD,GAAI;GACJ;;AAIN,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAoB;AAC3D,QACE,oBAAC;EACC,WAAW,GACT,wEACA,UACD;EACD,GAAI;GACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../ui/molecules/Autocomplete/index.tsx"],"sourcesContent":["export const autocomplete = 'todo';\n"],"mappings":";AAAA,MAAa,eAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SearchAndFilter.js","names":[],"sources":["../../../../ui/molecules/SearchAndFilter/SearchAndFilter.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { ChevronDown, ChevronUp, Filter } from 'lucide-react';\nimport { Button } from '../../button';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '../../collapsible';\nimport { SearchInput } from '../../atoms/SearchInput';\nimport { FilterSelect } from '../../atoms/FilterSelect';\nimport type { SearchAndFilterProps } from './types';\n\nexport const SearchAndFilter: React.FC<SearchAndFilterProps> = ({\n searchValue,\n onSearchChange,\n searchPlaceholder,\n filters = [],\n isLoading = false,\n disabled = false,\n className = '',\n collapsible = true,\n defaultCollapsed = false,\n}) => {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n const hasFilters = filters.length > 0;\n const activeFiltersCount = filters.filter((f) => f.value).length;\n\n // On mobile, show collapsible by default; on desktop, always show filters\n const shouldUseCollapsible = collapsible && hasFilters;\n\n console.log('SearchAndFilter', { filters });\n\n const FilterComponents = () => (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n {filters.map((filter) => (\n <FilterSelect\n key={filter.key}\n value={{ value: filter.value, label: filter.value }}\n options={filter.options}\n onChange={filter.onChange}\n label={filter.label}\n disabled={disabled || isLoading}\n showCounts={filter.showCounts}\n className=\"min-w-0\"\n />\n ))}\n </div>\n );\n\n return (\n <div className={`space-y-4 ${className}`}>\n {/* Search - Always visible */}\n <div className=\"flex flex-col gap-4 sm:flex-row\">\n <div className=\"flex-1\">\n <SearchInput\n value={searchValue}\n onChange={onSearchChange}\n placeholder={searchPlaceholder}\n disabled={disabled || isLoading}\n className=\"w-full\"\n />\n </div>\n\n {/* Filter toggle for mobile */}\n {shouldUseCollapsible && (\n <Collapsible\n open={!isCollapsed}\n onOpenChange={setIsCollapsed}\n className=\"sm:hidden\"\n >\n <CollapsibleTrigger asChild>\n <Button\n variant=\"outline\"\n className=\"sm:hidden\"\n disabled={disabled || isLoading}\n >\n <Filter className=\"mr-2 h-4 w-4\" />\n Filtres\n {activeFiltersCount > 0 && (\n <span className=\"bg-primary text-primary-foreground ml-2 flex h-5 w-5 items-center justify-center rounded-full text-sm\">\n {activeFiltersCount}\n </span>\n )}\n {isCollapsed ? (\n <ChevronDown className=\"ml-2 h-4 w-4\" />\n ) : (\n <ChevronUp className=\"ml-2 h-4 w-4\" />\n )}\n </Button>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"mt-4 space-y-4\">\n <FilterComponents />\n </CollapsibleContent>\n </Collapsible>\n )}\n </div>\n\n {/* Filters - Always visible on desktop, collapsible on mobile */}\n {hasFilters && (\n <div className=\"hidden sm:block\">\n <FilterComponents />\n </div>\n )}\n\n {/* Active filters summary */}\n {activeFiltersCount > 0 && (\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-muted-foreground text-base\">\n Filtres actifs:\n </span>\n {filters\n .filter((f) => f.value)\n .map((filter) => {\n const selectedOption = filter.options.find(\n (opt) => opt.value === filter.value\n );\n return (\n <Button\n key={filter.key}\n variant=\"secondary\"\n size=\"sm\"\n onPress={() => filter.onChange(undefined)}\n disabled={disabled || isLoading}\n className=\"h-7 px-2 text-sm\"\n >\n {filter.label}: {selectedOption?.label}\n <span className=\"ml-1\">×</span>\n </Button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;AAYA,MAAa,mBAAmD,EAC9D,aACA,gBACA,mBACA,UAAU,EAAE,EACZ,YAAY,OACZ,WAAW,OACX,YAAY,IACZ,cAAc,MACd,mBAAmB,YACf;CACJ,MAAM,CAAC,aAAa,kBAAkB,SAAS,iBAAiB;CAEhE,MAAM,aAAa,QAAQ,SAAS;CACpC,MAAM,qBAAqB,QAAQ,QAAQ,MAAM,EAAE,MAAM,CAAC;CAG1D,MAAM,uBAAuB,eAAe;AAE5C,SAAQ,IAAI,mBAAmB,EAAE,SAAS,CAAC;CAE3C,MAAM,yBACJ,oBAAC;EAAI,WAAU;YACZ,QAAQ,KAAK,WACZ,oBAAC;GAEC,OAAO;IAAE,OAAO,OAAO;IAAO,OAAO,OAAO;IAAO;GACnD,SAAS,OAAO;GAChB,UAAU,OAAO;GACjB,OAAO,OAAO;GACd,UAAU,YAAY;GACtB,YAAY,OAAO;GACnB,WAAU;KAPL,OAAO,IAQZ,CACF;GACE;AAGR,QACE,qBAAC;EAAI,WAAW,aAAa;;GAE3B,qBAAC;IAAI,WAAU;eACb,oBAAC;KAAI,WAAU;eACb,oBAAC;MACC,OAAO;MACP,UAAU;MACV,aAAa;MACb,UAAU,YAAY;MACtB,WAAU;OACV;MACE,EAGL,wBACC,qBAAC;KACC,MAAM,CAAC;KACP,cAAc;KACd,WAAU;gBAEV,oBAAC;MAAmB;gBAClB,qBAAC;OACC,SAAQ;OACR,WAAU;OACV,UAAU,YAAY;;QAEtB,oBAAC,UAAO,WAAU,iBAAiB;;QAElC,qBAAqB,KACpB,oBAAC;SAAK,WAAU;mBACb;UACI;QAER,cACC,oBAAC,eAAY,WAAU,iBAAiB,GAExC,oBAAC,aAAU,WAAU,iBAAiB;;QAEjC;OACU,EACrB,oBAAC;MAAmB,WAAU;gBAC5B,oBAAC,qBAAmB;OACD;MACT;KAEZ;GAGL,cACC,oBAAC;IAAI,WAAU;cACb,oBAAC,qBAAmB;KAChB;GAIP,qBAAqB,KACpB,qBAAC;IAAI,WAAU;eACb,oBAAC;KAAK,WAAU;eAAkC;MAE3C,EACN,QACE,QAAQ,MAAM,EAAE,MAAM,CACtB,KAAK,WAAW;KACf,MAAM,iBAAiB,OAAO,QAAQ,MACnC,QAAQ,IAAI,UAAU,OAAO,MAC/B;AACD,YACE,qBAAC;MAEC,SAAQ;MACR,MAAK;MACL,eAAe,OAAO,SAAS,OAAU;MACzC,UAAU,YAAY;MACtB,WAAU;;OAET,OAAO;OAAM;OAAG,gBAAgB;OACjC,oBAAC;QAAK,WAAU;kBAAO;SAAQ;;QAR1B,OAAO,IASL;MAEX;KACA;;GAEJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SkeletonList.js","names":[],"sources":["../../../ui/molecules/SkeletonList.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Skeleton } from '../skeleton';\n\ninterface Props {\n count?: number;\n className?: string;\n itemClassName?: string;\n}\n\nexport function SkeletonList({\n count = 6,\n className = '',\n itemClassName = '',\n}: Props) {\n return (\n <div className={`space-y-3 ${className}`}>\n {Array.from({ length: count }).map((_, i) => (\n <Skeleton key={i} className={`h-20 rounded-md ${itemClassName}`} />\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;AASA,SAAgB,aAAa,EAC3B,QAAQ,GACR,YAAY,IACZ,gBAAgB,MACR;AACR,QACE,oBAAC;EAAI,WAAW,aAAa;YAC1B,MAAM,KAAK,EAAE,QAAQ,OAAO,CAAC,CAAC,KAAK,GAAG,MACrC,oBAAC,YAAiB,WAAW,mBAAmB,mBAAjC,EAAoD,CACnE;GACE"}
@@ -1 +0,0 @@
1
- export { };