@lssm/lib.design-system 1.7.3 → 1.9.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 (509) hide show
  1. package/README.md +99 -0
  2. package/dist/_virtual/rolldown_runtime.js +21 -12
  3. package/dist/components/agent/AgentMonitor.d.ts +29 -0
  4. package/dist/components/agent/AgentMonitor.d.ts.map +1 -0
  5. package/dist/components/agent/AgentMonitor.js +79 -0
  6. package/dist/components/agent/AgentMonitor.js.map +1 -0
  7. package/dist/components/agent/ApprovalQueue.d.ts +26 -0
  8. package/dist/components/agent/ApprovalQueue.d.ts.map +1 -0
  9. package/dist/components/agent/ApprovalQueue.js +89 -0
  10. package/dist/components/agent/ApprovalQueue.js.map +1 -0
  11. package/dist/components/atoms/ActionButtons.d.ts +10 -10
  12. package/dist/components/atoms/ActionButtons.d.ts.map +1 -1
  13. package/dist/components/atoms/ActionButtons.js +5 -5
  14. package/dist/components/atoms/ActionButtons.js.map +1 -1
  15. package/dist/components/atoms/Button.d.ts +3 -3
  16. package/dist/components/atoms/Button.d.ts.map +1 -1
  17. package/dist/components/atoms/Button.js +3 -3
  18. package/dist/components/atoms/Button.js.map +1 -1
  19. package/dist/components/atoms/Button.mobile.d.ts +2 -2
  20. package/dist/components/atoms/Button.mobile.d.ts.map +1 -1
  21. package/dist/components/atoms/Button.mobile.js +4 -4
  22. package/dist/components/atoms/Button.mobile.js.map +1 -1
  23. package/dist/components/atoms/ButtonLink.d.ts +2 -2
  24. package/dist/components/atoms/ButtonLink.js +1 -2
  25. package/dist/components/atoms/ButtonLink.js.map +1 -1
  26. package/dist/components/atoms/ButtonLink.mobile.d.ts +2 -2
  27. package/dist/components/atoms/ButtonLink.mobile.d.ts.map +1 -1
  28. package/dist/components/atoms/ButtonLink.mobile.js +1 -1
  29. package/dist/components/atoms/ButtonLink.mobile.js.map +1 -1
  30. package/dist/components/atoms/Cta.d.ts +3 -3
  31. package/dist/components/atoms/Cta.js +1 -1
  32. package/dist/components/atoms/Cta.js.map +1 -1
  33. package/dist/components/atoms/Cta.mobile.js +1 -2
  34. package/dist/components/atoms/Cta.mobile.js.map +1 -1
  35. package/dist/components/atoms/DataChips.d.ts +7 -7
  36. package/dist/components/atoms/DataChips.d.ts.map +1 -1
  37. package/dist/components/atoms/DataChips.js +5 -5
  38. package/dist/components/atoms/DataChips.js.map +1 -1
  39. package/dist/components/atoms/EmptyState.d.ts +2 -2
  40. package/dist/components/atoms/EmptyState.d.ts.map +1 -1
  41. package/dist/components/atoms/EmptyState.js +1 -2
  42. package/dist/components/atoms/EmptyState.js.map +1 -1
  43. package/dist/components/atoms/ErrorState.d.ts +2 -2
  44. package/dist/components/atoms/ErrorState.js +1 -1
  45. package/dist/components/atoms/ErrorState.mobile.d.ts +2 -2
  46. package/dist/components/atoms/ErrorState.mobile.d.ts.map +1 -1
  47. package/dist/components/atoms/Input.d.ts +2 -2
  48. package/dist/components/atoms/Input.d.ts.map +1 -1
  49. package/dist/components/atoms/Input.js +2 -2
  50. package/dist/components/atoms/Input.js.map +1 -1
  51. package/dist/components/atoms/Input.mobile.d.ts +2 -2
  52. package/dist/components/atoms/Input.mobile.js +2 -2
  53. package/dist/components/atoms/Input.mobile.js.map +1 -1
  54. package/dist/components/atoms/Link.d.ts +2 -2
  55. package/dist/components/atoms/Link.js +1 -1
  56. package/dist/components/atoms/Link.js.map +1 -1
  57. package/dist/components/atoms/Link.web.d.ts +2 -2
  58. package/dist/components/atoms/Link.web.js +1 -1
  59. package/dist/components/atoms/Link.web.js.map +1 -1
  60. package/dist/components/atoms/LoaderCircular.d.ts +4 -4
  61. package/dist/components/atoms/LoaderCircular.js +3 -4
  62. package/dist/components/atoms/LoaderCircular.js.map +1 -1
  63. package/dist/components/atoms/LoaderCircular.mobile.d.ts +2 -2
  64. package/dist/components/atoms/NavBrand.d.ts +2 -2
  65. package/dist/components/atoms/NavBrand.js +1 -3
  66. package/dist/components/atoms/NavBrand.js.map +1 -1
  67. package/dist/components/atoms/Stepper.d.ts +2 -2
  68. package/dist/components/atoms/Stepper.js +1 -2
  69. package/dist/components/atoms/Stepper.js.map +1 -1
  70. package/dist/components/atoms/Textarea.d.ts +2 -2
  71. package/dist/components/atoms/Textarea.d.ts.map +1 -1
  72. package/dist/components/atoms/Textarea.js +2 -2
  73. package/dist/components/atoms/Textarea.js.map +1 -1
  74. package/dist/components/atoms/Textarea.mobile.d.ts +2 -2
  75. package/dist/components/atoms/Textarea.mobile.d.ts.map +1 -1
  76. package/dist/components/atoms/Textarea.mobile.js +2 -2
  77. package/dist/components/atoms/Textarea.mobile.js.map +1 -1
  78. package/dist/components/data-view/DataViewDetail.d.ts +3 -2
  79. package/dist/components/data-view/DataViewDetail.d.ts.map +1 -1
  80. package/dist/components/data-view/DataViewDetail.js +9 -10
  81. package/dist/components/data-view/DataViewDetail.js.map +1 -1
  82. package/dist/components/data-view/DataViewList.d.ts +3 -2
  83. package/dist/components/data-view/DataViewList.d.ts.map +1 -1
  84. package/dist/components/data-view/DataViewList.js +5 -6
  85. package/dist/components/data-view/DataViewList.js.map +1 -1
  86. package/dist/components/data-view/DataViewRenderer.d.ts +20 -3
  87. package/dist/components/data-view/DataViewRenderer.d.ts.map +1 -1
  88. package/dist/components/data-view/DataViewRenderer.js +128 -50
  89. package/dist/components/data-view/DataViewRenderer.js.map +1 -1
  90. package/dist/components/data-view/DataViewTable.d.ts +3 -2
  91. package/dist/components/data-view/DataViewTable.d.ts.map +1 -1
  92. package/dist/components/data-view/DataViewTable.js +9 -10
  93. package/dist/components/data-view/DataViewTable.js.map +1 -1
  94. package/dist/components/data-view/utils.js +0 -1
  95. package/dist/components/data-view/utils.js.map +1 -1
  96. package/dist/components/forms/FormCardLayout.d.ts +2 -2
  97. package/dist/components/forms/FormCardLayout.d.ts.map +1 -1
  98. package/dist/components/forms/FormCardLayout.js +2 -3
  99. package/dist/components/forms/FormCardLayout.js.map +1 -1
  100. package/dist/components/forms/FormDialog.d.ts +2 -2
  101. package/dist/components/forms/FormDialog.d.ts.map +1 -1
  102. package/dist/components/forms/FormDialog.js +1 -2
  103. package/dist/components/forms/FormDialog.js.map +1 -1
  104. package/dist/components/forms/FormLayout.d.ts +4 -4
  105. package/dist/components/forms/FormLayout.d.ts.map +1 -1
  106. package/dist/components/forms/FormLayout.js +1 -3
  107. package/dist/components/forms/FormLayout.js.map +1 -1
  108. package/dist/components/forms/FormOneByOneLayout.d.ts +2 -2
  109. package/dist/components/forms/FormOneByOneLayout.d.ts.map +1 -1
  110. package/dist/components/forms/FormOneByOneLayout.js +1 -2
  111. package/dist/components/forms/FormOneByOneLayout.js.map +1 -1
  112. package/dist/components/forms/FormStepsLayout.d.ts +2 -2
  113. package/dist/components/forms/FormStepsLayout.js +2 -3
  114. package/dist/components/forms/FormStepsLayout.js.map +1 -1
  115. package/dist/components/forms/ZodForm.d.ts +4 -4
  116. package/dist/components/forms/ZodForm.d.ts.map +1 -1
  117. package/dist/components/forms/ZodForm.js +1 -2
  118. package/dist/components/forms/ZodForm.js.map +1 -1
  119. package/dist/components/legal/atoms/DefinitionList.d.ts +2 -2
  120. package/dist/components/legal/atoms/DefinitionList.js +1 -2
  121. package/dist/components/legal/atoms/DefinitionList.js.map +1 -1
  122. package/dist/components/legal/atoms/KeyValueList.d.ts +2 -2
  123. package/dist/components/legal/atoms/KeyValueList.js +1 -2
  124. package/dist/components/legal/atoms/KeyValueList.js.map +1 -1
  125. package/dist/components/legal/atoms/LegalCallout.d.ts +4 -4
  126. package/dist/components/legal/atoms/LegalCallout.d.ts.map +1 -1
  127. package/dist/components/legal/atoms/LegalCallout.js +2 -3
  128. package/dist/components/legal/atoms/LegalCallout.js.map +1 -1
  129. package/dist/components/legal/atoms/LegalHeading.d.ts +4 -4
  130. package/dist/components/legal/atoms/LegalHeading.d.ts.map +1 -1
  131. package/dist/components/legal/atoms/LegalHeading.js +2 -3
  132. package/dist/components/legal/atoms/LegalHeading.js.map +1 -1
  133. package/dist/components/legal/atoms/LegalList.d.ts +4 -4
  134. package/dist/components/legal/atoms/LegalList.d.ts.map +1 -1
  135. package/dist/components/legal/atoms/LegalList.js +2 -3
  136. package/dist/components/legal/atoms/LegalList.js.map +1 -1
  137. package/dist/components/legal/atoms/LegalSection.d.ts +4 -4
  138. package/dist/components/legal/atoms/LegalSection.d.ts.map +1 -1
  139. package/dist/components/legal/atoms/LegalSection.js +2 -3
  140. package/dist/components/legal/atoms/LegalSection.js.map +1 -1
  141. package/dist/components/legal/atoms/LegalText.d.ts +5 -5
  142. package/dist/components/legal/atoms/LegalText.d.ts.map +1 -1
  143. package/dist/components/legal/atoms/LegalText.js +2 -3
  144. package/dist/components/legal/atoms/LegalText.js.map +1 -1
  145. package/dist/components/legal/molecules/Consent.d.ts +3 -3
  146. package/dist/components/legal/molecules/Consent.js +2 -3
  147. package/dist/components/legal/molecules/Consent.js.map +1 -1
  148. package/dist/components/legal/molecules/ContactFields.d.ts +2 -2
  149. package/dist/components/legal/molecules/ContactFields.js +1 -1
  150. package/dist/components/legal/molecules/LegalMeta.d.ts +2 -2
  151. package/dist/components/legal/molecules/LegalMeta.js +1 -2
  152. package/dist/components/legal/molecules/LegalMeta.js.map +1 -1
  153. package/dist/components/legal/molecules/LegalTOC.d.ts +4 -4
  154. package/dist/components/legal/molecules/LegalTOC.js +2 -3
  155. package/dist/components/legal/molecules/LegalTOC.js.map +1 -1
  156. package/dist/components/legal/organisms/ContactForm.d.ts +2 -2
  157. package/dist/components/legal/organisms/GDPRDataRequest.d.ts +2 -2
  158. package/dist/components/legal/organisms/GDPRRights.d.ts +2 -2
  159. package/dist/components/legal/organisms/LegalPageLayout.d.ts +2 -2
  160. package/dist/components/legal/organisms/LegalPageLayout.d.ts.map +1 -1
  161. package/dist/components/legal/organisms/LegalPageLayout.js +1 -2
  162. package/dist/components/legal/organisms/LegalPageLayout.js.map +1 -1
  163. package/dist/components/legal/templates/ContactTemplate.d.ts +2 -2
  164. package/dist/components/legal/templates/CookiesTemplate.d.ts +2 -2
  165. package/dist/components/legal/templates/CookiesTemplate.d.ts.map +1 -1
  166. package/dist/components/legal/templates/PrivacyTemplate.d.ts +2 -2
  167. package/dist/components/legal/templates/PrivacyTemplate.d.ts.map +1 -1
  168. package/dist/components/legal/templates/SalesTermsTemplate.d.ts +2 -2
  169. package/dist/components/legal/templates/TermsTemplate.d.ts +2 -2
  170. package/dist/components/legal/templates/TermsTemplate.js +0 -1
  171. package/dist/components/legal/templates/TermsTemplate.js.map +1 -1
  172. package/dist/components/molecules/AiLinkButton.d.ts +2 -2
  173. package/dist/components/molecules/AiLinkButton.d.ts.map +1 -1
  174. package/dist/components/molecules/AiLinkButton.js +1 -1
  175. package/dist/components/molecules/Breadcrumbs.d.ts +2 -2
  176. package/dist/components/molecules/Breadcrumbs.d.ts.map +1 -1
  177. package/dist/components/molecules/Breadcrumbs.js +1 -2
  178. package/dist/components/molecules/Breadcrumbs.js.map +1 -1
  179. package/dist/components/molecules/CommandPalette.d.ts +2 -2
  180. package/dist/components/molecules/CommandPalette.js +1 -2
  181. package/dist/components/molecules/CommandPalette.js.map +1 -1
  182. package/dist/components/molecules/CommandSearchTrigger.d.ts +2 -2
  183. package/dist/components/molecules/CommandSearchTrigger.js +2 -4
  184. package/dist/components/molecules/CommandSearchTrigger.js.map +1 -1
  185. package/dist/components/molecules/EntityCard.d.ts +4 -4
  186. package/dist/components/molecules/EntityCard.js +3 -5
  187. package/dist/components/molecules/EntityCard.js.map +1 -1
  188. package/dist/components/molecules/FiltersToolbar.d.ts +2 -2
  189. package/dist/components/molecules/FiltersToolbar.js +2 -3
  190. package/dist/components/molecules/FiltersToolbar.js.map +1 -1
  191. package/dist/components/molecules/FiltersToolbar.mobile.d.ts +2 -2
  192. package/dist/components/molecules/FiltersToolbar.mobile.js +1 -1
  193. package/dist/components/molecules/HoverPreview.d.ts +2 -2
  194. package/dist/components/molecules/HoverPreview.js +2 -5
  195. package/dist/components/molecules/HoverPreview.js.map +1 -1
  196. package/dist/components/molecules/LangSwitch.d.ts +2 -2
  197. package/dist/components/molecules/LangSwitch.js +0 -1
  198. package/dist/components/molecules/LangSwitch.js.map +1 -1
  199. package/dist/components/molecules/LangSwitchDropdown.d.ts +2 -2
  200. package/dist/components/molecules/LangSwitchDropdown.js +2 -2
  201. package/dist/components/molecules/LoaderBlock.d.ts +2 -2
  202. package/dist/components/molecules/LoaderBlock.js +1 -2
  203. package/dist/components/molecules/LoaderBlock.js.map +1 -1
  204. package/dist/components/molecules/LoaderBlock.mobile.d.ts +2 -2
  205. package/dist/components/molecules/MobileNavMenu.d.ts +2 -2
  206. package/dist/components/molecules/MobileNavMenu.js +1 -3
  207. package/dist/components/molecules/MobileNavMenu.js.map +1 -1
  208. package/dist/components/molecules/NavItemCard.d.ts +2 -2
  209. package/dist/components/molecules/NavItemCard.d.ts.map +1 -1
  210. package/dist/components/molecules/NavItemCard.js +1 -3
  211. package/dist/components/molecules/NavItemCard.js.map +1 -1
  212. package/dist/components/molecules/NavMain.d.ts +2 -2
  213. package/dist/components/molecules/NavMain.d.ts.map +1 -1
  214. package/dist/components/molecules/NavMain.js +4 -5
  215. package/dist/components/molecules/NavMain.js.map +1 -1
  216. package/dist/components/molecules/NavUser.d.ts +2 -2
  217. package/dist/components/molecules/NavUser.d.ts.map +1 -1
  218. package/dist/components/molecules/NavUser.js +2 -2
  219. package/dist/components/molecules/OverviewCard.d.ts +2 -2
  220. package/dist/components/molecules/OverviewCard.d.ts.map +1 -1
  221. package/dist/components/molecules/OverviewCard.js +1 -2
  222. package/dist/components/molecules/OverviewCard.js.map +1 -1
  223. package/dist/components/molecules/SkeletonBlock/index.mobile.d.ts +2 -2
  224. package/dist/components/molecules/SkeletonBlock/index.web.d.ts +2 -2
  225. package/dist/components/molecules/SkeletonBlock/index.web.js +2 -3
  226. package/dist/components/molecules/SkeletonBlock/index.web.js.map +1 -1
  227. package/dist/components/molecules/SkeletonCircle/index.mobile.d.ts +2 -2
  228. package/dist/components/molecules/SkeletonCircle/index.web.d.ts +2 -2
  229. package/dist/components/molecules/SkeletonCircle/index.web.d.ts.map +1 -1
  230. package/dist/components/molecules/SkeletonCircle/index.web.js +1 -1
  231. package/dist/components/molecules/SkeletonList/index.mobile.d.ts +2 -2
  232. package/dist/components/molecules/SkeletonList/index.web.d.ts +2 -2
  233. package/dist/components/molecules/SkeletonList/index.web.js +1 -1
  234. package/dist/components/molecules/StatCard.d.ts +6 -6
  235. package/dist/components/molecules/StatCard.d.ts.map +1 -1
  236. package/dist/components/molecules/StatCard.js +3 -5
  237. package/dist/components/molecules/StatCard.js.map +1 -1
  238. package/dist/components/molecules/StatusChip.d.ts +4 -4
  239. package/dist/components/molecules/StatusChip.d.ts.map +1 -1
  240. package/dist/components/molecules/StatusChip.js +2 -4
  241. package/dist/components/molecules/StatusChip.js.map +1 -1
  242. package/dist/components/molecules/hover-previews/Doc.d.ts +2 -2
  243. package/dist/components/molecules/hover-previews/Doc.js +0 -1
  244. package/dist/components/molecules/hover-previews/Doc.js.map +1 -1
  245. package/dist/components/molecules/hover-previews/Media.d.ts +2 -2
  246. package/dist/components/molecules/hover-previews/Media.js +0 -1
  247. package/dist/components/molecules/hover-previews/Media.js.map +1 -1
  248. package/dist/components/molecules/hover-previews/Simple.d.ts +2 -2
  249. package/dist/components/molecules/hover-previews/Simple.d.ts.map +1 -1
  250. package/dist/components/molecules/hover-previews/Simple.js +0 -1
  251. package/dist/components/molecules/hover-previews/Simple.js.map +1 -1
  252. package/dist/components/molecules/hover-previews/Stats.d.ts +2 -2
  253. package/dist/components/molecules/hover-previews/Stats.js +0 -1
  254. package/dist/components/molecules/hover-previews/Stats.js.map +1 -1
  255. package/dist/components/molecules/hover-previews/User.d.ts +2 -2
  256. package/dist/components/molecules/hover-previews/User.js +0 -1
  257. package/dist/components/molecules/hover-previews/User.js.map +1 -1
  258. package/dist/components/native/BottomTabs.mobile.d.ts +2 -2
  259. package/dist/components/native/BottomTabs.mobile.js +1 -3
  260. package/dist/components/native/BottomTabs.mobile.js.map +1 -1
  261. package/dist/components/native/FlatListScreen.mobile.d.ts +4 -4
  262. package/dist/components/native/FlatListScreen.mobile.d.ts.map +1 -1
  263. package/dist/components/native/FlatListScreen.mobile.js +3 -4
  264. package/dist/components/native/FlatListScreen.mobile.js.map +1 -1
  265. package/dist/components/native/SheetMenu.mobile.d.ts +2 -2
  266. package/dist/components/native/SheetMenu.mobile.d.ts.map +1 -1
  267. package/dist/components/native/SheetMenu.mobile.js +1 -2
  268. package/dist/components/native/SheetMenu.mobile.js.map +1 -1
  269. package/dist/components/organisms/AcademyLayout.d.ts +2 -2
  270. package/dist/components/organisms/AcademyLayout.js +2 -4
  271. package/dist/components/organisms/AcademyLayout.js.map +1 -1
  272. package/dist/components/organisms/AppHeader.d.ts +2 -2
  273. package/dist/components/organisms/AppHeader.d.ts.map +1 -1
  274. package/dist/components/organisms/AppHeader.js +3 -5
  275. package/dist/components/organisms/AppHeader.js.map +1 -1
  276. package/dist/components/organisms/AppHeader.mobile.d.ts +2 -2
  277. package/dist/components/organisms/AppHeader.mobile.d.ts.map +1 -1
  278. package/dist/components/organisms/AppHeader.mobile.js +1 -2
  279. package/dist/components/organisms/AppHeader.mobile.js.map +1 -1
  280. package/dist/components/organisms/AppLayout.d.ts +2 -2
  281. package/dist/components/organisms/AppLayout.d.ts.map +1 -1
  282. package/dist/components/organisms/AppLayout.js +3 -5
  283. package/dist/components/organisms/AppLayout.js.map +1 -1
  284. package/dist/components/organisms/AppSidebar.d.ts +2 -2
  285. package/dist/components/organisms/AppSidebar.d.ts.map +1 -1
  286. package/dist/components/organisms/AppSidebar.js +2 -3
  287. package/dist/components/organisms/AppSidebar.js.map +1 -1
  288. package/dist/components/organisms/EmptyDataList.d.ts +2 -2
  289. package/dist/components/organisms/EmptyDataList.d.ts.map +1 -1
  290. package/dist/components/organisms/EmptyDataList.js +1 -1
  291. package/dist/components/organisms/EmptyDataList.mobile.d.ts +2 -2
  292. package/dist/components/organisms/EmptyDataList.mobile.d.ts.map +1 -1
  293. package/dist/components/organisms/EmptyDataList.mobile.js +3 -3
  294. package/dist/components/organisms/EmptySearchResult.d.ts +2 -2
  295. package/dist/components/organisms/EmptySearchResult.d.ts.map +1 -1
  296. package/dist/components/organisms/EmptySearchResult.js +1 -1
  297. package/dist/components/organisms/FAQSection.d.ts +2 -2
  298. package/dist/components/organisms/FAQSection.d.ts.map +1 -1
  299. package/dist/components/organisms/FAQSection.js +2 -2
  300. package/dist/components/organisms/FeatureCarousel.d.ts +2 -2
  301. package/dist/components/organisms/FeatureCarousel.js +2 -2
  302. package/dist/components/organisms/FeaturesSection.d.ts +2 -2
  303. package/dist/components/organisms/FeaturesSection.js +1 -1
  304. package/dist/components/organisms/Footer.d.ts +2 -2
  305. package/dist/components/organisms/Footer.js +1 -2
  306. package/dist/components/organisms/Footer.js.map +1 -1
  307. package/dist/components/organisms/GridLayout.d.ts +4 -4
  308. package/dist/components/organisms/GridLayout.d.ts.map +1 -1
  309. package/dist/components/organisms/GridLayout.js +1 -2
  310. package/dist/components/organisms/GridLayout.js.map +1 -1
  311. package/dist/components/organisms/Header.d.ts +4 -4
  312. package/dist/components/organisms/Header.d.ts.map +1 -1
  313. package/dist/components/organisms/Header.js +4 -6
  314. package/dist/components/organisms/Header.js.map +1 -1
  315. package/dist/components/organisms/Header.mobile.d.ts +2 -2
  316. package/dist/components/organisms/Header.mobile.js +1 -2
  317. package/dist/components/organisms/Header.mobile.js.map +1 -1
  318. package/dist/components/organisms/HeroResponsive.js +0 -1
  319. package/dist/components/organisms/HeroResponsive.js.map +1 -1
  320. package/dist/components/organisms/HeroSection.d.ts +2 -2
  321. package/dist/components/organisms/HeroSection.d.ts.map +1 -1
  322. package/dist/components/organisms/HeroSection.js +1 -1
  323. package/dist/components/organisms/ListCardPage.d.ts +5 -5
  324. package/dist/components/organisms/ListCardPage.d.ts.map +1 -1
  325. package/dist/components/organisms/ListCardPage.js +2 -3
  326. package/dist/components/organisms/ListCardPage.js.map +1 -1
  327. package/dist/components/organisms/ListGridPage.d.ts +5 -5
  328. package/dist/components/organisms/ListGridPage.d.ts.map +1 -1
  329. package/dist/components/organisms/ListGridPage.js +1 -2
  330. package/dist/components/organisms/ListGridPage.js.map +1 -1
  331. package/dist/components/organisms/ListPageResponsive.d.ts +2 -2
  332. package/dist/components/organisms/ListPageResponsive.d.ts.map +1 -1
  333. package/dist/components/organisms/ListPageResponsive.js +1 -2
  334. package/dist/components/organisms/ListPageResponsive.js.map +1 -1
  335. package/dist/components/organisms/ListTablePage.d.ts +4 -4
  336. package/dist/components/organisms/ListTablePage.d.ts.map +1 -1
  337. package/dist/components/organisms/ListTablePage.js +2 -3
  338. package/dist/components/organisms/ListTablePage.js.map +1 -1
  339. package/dist/components/organisms/MarketingHeader.d.ts +2 -2
  340. package/dist/components/organisms/MarketingHeader.js +7 -9
  341. package/dist/components/organisms/MarketingHeader.js.map +1 -1
  342. package/dist/components/organisms/MarketingHeaderDesktop.d.ts +2 -2
  343. package/dist/components/organisms/MarketingHeaderDesktop.js +3 -5
  344. package/dist/components/organisms/MarketingHeaderDesktop.js.map +1 -1
  345. package/dist/components/organisms/MarketingHeaderMobile.d.ts +2 -2
  346. package/dist/components/organisms/MarketingHeaderMobile.js +4 -6
  347. package/dist/components/organisms/MarketingHeaderMobile.js.map +1 -1
  348. package/dist/components/organisms/MarketingLayout.d.ts +2 -2
  349. package/dist/components/organisms/MarketingLayout.js +2 -4
  350. package/dist/components/organisms/MarketingLayout.js.map +1 -1
  351. package/dist/components/organisms/PageHeaderResponsive.d.ts +2 -2
  352. package/dist/components/organisms/PageHeaderResponsive.js +1 -2
  353. package/dist/components/organisms/PageHeaderResponsive.js.map +1 -1
  354. package/dist/components/organisms/PageHeaderResponsive.mobile.d.ts +2 -2
  355. package/dist/components/organisms/PageHeaderResponsive.mobile.js +2 -3
  356. package/dist/components/organisms/PageHeaderResponsive.mobile.js.map +1 -1
  357. package/dist/components/organisms/PricingCarousel.d.ts +2 -2
  358. package/dist/components/organisms/PricingCarousel.js +2 -2
  359. package/dist/components/organisms/PricingSection.d.ts +2 -2
  360. package/dist/components/organisms/PricingSection.js +1 -1
  361. package/dist/components/organisms/TestimonialCarousel.d.ts +2 -2
  362. package/dist/components/organisms/TestimonialCarousel.js +2 -2
  363. package/dist/components/templates/lists/ListPageTemplate/index.mobile.d.ts +2 -2
  364. package/dist/components/templates/lists/ListPageTemplate/index.mobile.d.ts.map +1 -1
  365. package/dist/components/templates/lists/ListPageTemplate/index.mobile.js +1 -1
  366. package/dist/components/templates/lists/ListPageTemplate/index.web.d.ts +2 -2
  367. package/dist/components/templates/lists/ListPageTemplate/index.web.d.ts.map +1 -1
  368. package/dist/components/templates/lists/ListPageTemplate/index.web.js +3 -4
  369. package/dist/components/templates/lists/ListPageTemplate/index.web.js.map +1 -1
  370. package/dist/index.d.ts +3 -1
  371. package/dist/index.js +3 -1
  372. package/dist/index.js.map +1 -1
  373. package/dist/lib/keyboard.d.ts.map +1 -1
  374. package/dist/platform/useColorScheme.js +0 -1
  375. package/dist/platform/useColorScheme.js.map +1 -1
  376. package/dist/platform/useColorScheme.mobile.js +0 -1
  377. package/dist/platform/useColorScheme.mobile.js.map +1 -1
  378. package/dist/platform/useReducedMotion.js +0 -1
  379. package/dist/platform/useReducedMotion.js.map +1 -1
  380. package/dist/platform/useReducedMotion.mobile.js +0 -1
  381. package/dist/platform/useReducedMotion.mobile.js.map +1 -1
  382. package/dist/platform/useResponsive.js +0 -1
  383. package/dist/platform/useResponsive.js.map +1 -1
  384. package/dist/platform/useResponsive.mobile.js +0 -1
  385. package/dist/platform/useResponsive.mobile.js.map +1 -1
  386. package/dist/platform/withPlatformUI.js +0 -1
  387. package/dist/platform/withPlatformUI.js.map +1 -1
  388. package/dist/renderers/form-contract.d.ts +4 -1
  389. package/dist/renderers/form-contract.d.ts.map +1 -1
  390. package/dist/renderers/form-contract.js +9 -10
  391. package/dist/renderers/form-contract.js.map +1 -1
  392. package/dist/theme/tokenBridge.d.ts.map +1 -1
  393. package/dist/theme/tokenBridge.js +0 -1
  394. package/dist/theme/tokenBridge.js.map +1 -1
  395. package/dist/theme/tokens.js +0 -1
  396. package/dist/theme/tokens.js.map +1 -1
  397. package/dist/theme/variants.d.ts +3 -3
  398. package/dist/theme/variants.d.ts.map +1 -1
  399. package/dist/theme/variants.js +0 -1
  400. package/dist/theme/variants.js.map +1 -1
  401. package/package.json +157 -154
  402. package/dist/contracts/src/client/react/drivers/shadcn.js +0 -12
  403. package/dist/contracts/src/client/react/drivers/shadcn.js.map +0 -1
  404. package/dist/contracts/src/client/react/form-render.js +0 -299
  405. package/dist/contracts/src/client/react/form-render.js.map +0 -1
  406. package/dist/contracts/src/forms.js +0 -89
  407. package/dist/contracts/src/forms.js.map +0 -1
  408. package/dist/ui-kit/dist/ui/button.js +0 -75
  409. package/dist/ui-kit/dist/ui/button.js.map +0 -1
  410. package/dist/ui-kit/dist/ui/empty.js +0 -63
  411. package/dist/ui-kit/dist/ui/empty.js.map +0 -1
  412. package/dist/ui-kit/dist/ui/input.js +0 -17
  413. package/dist/ui-kit/dist/ui/input.js.map +0 -1
  414. package/dist/ui-kit/dist/ui/stack.js +0 -224
  415. package/dist/ui-kit/dist/ui/stack.js.map +0 -1
  416. package/dist/ui-kit/dist/ui/text.js +0 -19
  417. package/dist/ui-kit/dist/ui/text.js.map +0 -1
  418. package/dist/ui-kit/dist/ui/textarea.js +0 -20
  419. package/dist/ui-kit/dist/ui/textarea.js.map +0 -1
  420. package/dist/ui-kit/dist/ui/utils.js +0 -11
  421. package/dist/ui-kit/dist/ui/utils.js.map +0 -1
  422. package/dist/ui-kit-web/dist/ui/accordion.js +0 -50
  423. package/dist/ui-kit-web/dist/ui/accordion.js.map +0 -1
  424. package/dist/ui-kit-web/dist/ui/atoms/FilterSelect/FilterSelect.js +0 -53
  425. package/dist/ui-kit-web/dist/ui/atoms/FilterSelect/FilterSelect.js.map +0 -1
  426. package/dist/ui-kit-web/dist/ui/atoms/Pagination/Pagination.js +0 -157
  427. package/dist/ui-kit-web/dist/ui/atoms/Pagination/Pagination.js.map +0 -1
  428. package/dist/ui-kit-web/dist/ui/atoms/SearchInput/SearchInput.js +0 -50
  429. package/dist/ui-kit-web/dist/ui/atoms/SearchInput/SearchInput.js.map +0 -1
  430. package/dist/ui-kit-web/dist/ui/avatar.js +0 -35
  431. package/dist/ui-kit-web/dist/ui/avatar.js.map +0 -1
  432. package/dist/ui-kit-web/dist/ui/badge.js +0 -28
  433. package/dist/ui-kit-web/dist/ui/badge.js.map +0 -1
  434. package/dist/ui-kit-web/dist/ui/breadcrumb.js +0 -60
  435. package/dist/ui-kit-web/dist/ui/breadcrumb.js.map +0 -1
  436. package/dist/ui-kit-web/dist/ui/button.js +0 -45
  437. package/dist/ui-kit-web/dist/ui/button.js.map +0 -1
  438. package/dist/ui-kit-web/dist/ui/card.js +0 -38
  439. package/dist/ui-kit-web/dist/ui/card.js.map +0 -1
  440. package/dist/ui-kit-web/dist/ui/carousel.js +0 -138
  441. package/dist/ui-kit-web/dist/ui/carousel.js.map +0 -1
  442. package/dist/ui-kit-web/dist/ui/checkbox.js +0 -27
  443. package/dist/ui-kit-web/dist/ui/checkbox.js.map +0 -1
  444. package/dist/ui-kit-web/dist/ui/collapsible.js +0 -29
  445. package/dist/ui-kit-web/dist/ui/collapsible.js.map +0 -1
  446. package/dist/ui-kit-web/dist/ui/command.js +0 -92
  447. package/dist/ui-kit-web/dist/ui/command.js.map +0 -1
  448. package/dist/ui-kit-web/dist/ui/dialog.js +0 -86
  449. package/dist/ui-kit-web/dist/ui/dialog.js.map +0 -1
  450. package/dist/ui-kit-web/dist/ui/dropdown-menu.js +0 -59
  451. package/dist/ui-kit-web/dist/ui/dropdown-menu.js.map +0 -1
  452. package/dist/ui-kit-web/dist/ui/empty-state.js +0 -44
  453. package/dist/ui-kit-web/dist/ui/empty-state.js.map +0 -1
  454. package/dist/ui-kit-web/dist/ui/empty.js +0 -63
  455. package/dist/ui-kit-web/dist/ui/empty.js.map +0 -1
  456. package/dist/ui-kit-web/dist/ui/field.js +0 -80
  457. package/dist/ui-kit-web/dist/ui/field.js.map +0 -1
  458. package/dist/ui-kit-web/dist/ui/form.js +0 -18
  459. package/dist/ui-kit-web/dist/ui/form.js.map +0 -1
  460. package/dist/ui-kit-web/dist/ui/hover-card.js +0 -42
  461. package/dist/ui-kit-web/dist/ui/hover-card.js.map +0 -1
  462. package/dist/ui-kit-web/dist/ui/input.js +0 -18
  463. package/dist/ui-kit-web/dist/ui/input.js.map +0 -1
  464. package/dist/ui-kit-web/dist/ui/label.js +0 -21
  465. package/dist/ui-kit-web/dist/ui/label.js.map +0 -1
  466. package/dist/ui-kit-web/dist/ui/marketing/Hero.js +0 -54
  467. package/dist/ui-kit-web/dist/ui/marketing/Hero.js.map +0 -1
  468. package/dist/ui-kit-web/dist/ui/marketing/PricingTable.js +0 -61
  469. package/dist/ui-kit-web/dist/ui/marketing/PricingTable.js.map +0 -1
  470. package/dist/ui-kit-web/dist/ui/molecules/SearchAndFilter/SearchAndFilter.js +0 -103
  471. package/dist/ui-kit-web/dist/ui/molecules/SearchAndFilter/SearchAndFilter.js.map +0 -1
  472. package/dist/ui-kit-web/dist/ui/molecules/SkeletonList.js +0 -15
  473. package/dist/ui-kit-web/dist/ui/molecules/SkeletonList.js.map +0 -1
  474. package/dist/ui-kit-web/dist/ui/navigation-menu.js +0 -76
  475. package/dist/ui-kit-web/dist/ui/navigation-menu.js.map +0 -1
  476. package/dist/ui-kit-web/dist/ui/organisms/ListPage/ListPage.js +0 -198
  477. package/dist/ui-kit-web/dist/ui/organisms/ListPage/ListPage.js.map +0 -1
  478. package/dist/ui-kit-web/dist/ui/page-header.js +0 -41
  479. package/dist/ui-kit-web/dist/ui/page-header.js.map +0 -1
  480. package/dist/ui-kit-web/dist/ui/radio-group.js +0 -34
  481. package/dist/ui-kit-web/dist/ui/radio-group.js.map +0 -1
  482. package/dist/ui-kit-web/dist/ui/select.js +0 -88
  483. package/dist/ui-kit-web/dist/ui/select.js.map +0 -1
  484. package/dist/ui-kit-web/dist/ui/separator.js +0 -23
  485. package/dist/ui-kit-web/dist/ui/separator.js.map +0 -1
  486. package/dist/ui-kit-web/dist/ui/sheet.js +0 -82
  487. package/dist/ui-kit-web/dist/ui/sheet.js.map +0 -1
  488. package/dist/ui-kit-web/dist/ui/sidebar.js +0 -283
  489. package/dist/ui-kit-web/dist/ui/sidebar.js.map +0 -1
  490. package/dist/ui-kit-web/dist/ui/skeleton.js +0 -16
  491. package/dist/ui-kit-web/dist/ui/skeleton.js.map +0 -1
  492. package/dist/ui-kit-web/dist/ui/stack.js +0 -159
  493. package/dist/ui-kit-web/dist/ui/stack.js.map +0 -1
  494. package/dist/ui-kit-web/dist/ui/stepper.js +0 -38
  495. package/dist/ui-kit-web/dist/ui/stepper.js.map +0 -1
  496. package/dist/ui-kit-web/dist/ui/switch.js +0 -25
  497. package/dist/ui-kit-web/dist/ui/switch.js.map +0 -1
  498. package/dist/ui-kit-web/dist/ui/table.js +0 -59
  499. package/dist/ui-kit-web/dist/ui/table.js.map +0 -1
  500. package/dist/ui-kit-web/dist/ui/text.js +0 -17
  501. package/dist/ui-kit-web/dist/ui/text.js.map +0 -1
  502. package/dist/ui-kit-web/dist/ui/textarea.js +0 -17
  503. package/dist/ui-kit-web/dist/ui/textarea.js.map +0 -1
  504. package/dist/ui-kit-web/dist/ui/tooltip.js +0 -42
  505. package/dist/ui-kit-web/dist/ui/tooltip.js.map +0 -1
  506. package/dist/ui-kit-web/dist/ui/use-mobile.js +0 -21
  507. package/dist/ui-kit-web/dist/ui/use-mobile.js.map +0 -1
  508. package/dist/ui-kit-web/dist/ui/utils.js +0 -14
  509. package/dist/ui-kit-web/dist/ui/utils.js.map +0 -1
@@ -1,299 +0,0 @@
1
- import { buildZodWithRelations, evalPredicate } from "../../forms.js";
2
- import React, { useEffect, useMemo, useState } from "react";
3
- import { Controller, useFieldArray, useForm } from "react-hook-form";
4
- import { zodResolver } from "@hookform/resolvers/zod";
5
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
-
7
- //#region ../contracts/src/client/react/form-render.tsx
8
- function toOptionsArray(src) {
9
- if (!src) return void 0;
10
- if (Array.isArray(src)) return {
11
- kind: "static",
12
- options: src
13
- };
14
- return src;
15
- }
16
- function getAtPath(values, path) {
17
- if (!path) return void 0;
18
- const segs = path.replace(/\[(\d+)\]/g, ".$1").split(".").filter(Boolean);
19
- let cur = values;
20
- for (const s of segs) {
21
- if (cur == null) return void 0;
22
- cur = cur[s];
23
- }
24
- return cur;
25
- }
26
- function makeDepsKey(values, deps) {
27
- if (!deps || deps.length === 0) return "[]";
28
- try {
29
- return JSON.stringify(deps.map((d) => getAtPath(values, d)));
30
- } catch {
31
- return "[]";
32
- }
33
- }
34
- function useResolvedOptions(values, source, resolvers) {
35
- const [opts, setOpts] = useState([]);
36
- useEffect(() => {
37
- let mounted = true;
38
- const run = async () => {
39
- if (!source) return setOpts([]);
40
- if (source.kind === "static") return setOpts([...source.options ?? []]);
41
- const fn = resolvers?.[source.resolverKey];
42
- if (!fn) return setOpts([]);
43
- const res = await fn(values, source.args);
44
- if (mounted) setOpts([...res ?? []]);
45
- };
46
- run();
47
- return () => {
48
- mounted = false;
49
- };
50
- }, [useMemo(() => {
51
- if (!source) return "nil";
52
- if (source.kind === "static") return JSON.stringify(source.options ?? []);
53
- return makeDepsKey(values, source.deps);
54
- }, [source, values]), source && source.resolverKey]);
55
- return opts;
56
- }
57
- function fieldPath(parent, name, arrayIndex) {
58
- if (!name) return parent ?? "";
59
- const child = typeof arrayIndex === "number" ? `${name.replace(/^\$index$/, String(arrayIndex))}` : name;
60
- return parent ? `${parent}${typeof arrayIndex === "number" ? `.${arrayIndex}` : ""}.${child}`.replace(/\.+/g, ".") : child;
61
- }
62
- function createFormRenderer(base) {
63
- const conf = base;
64
- const { driver } = conf;
65
- function InternalForm(props) {
66
- const { spec, options, merged } = props;
67
- const baseZod = useMemo(() => buildZodWithRelations(spec), [spec]);
68
- const form = useForm({
69
- ...merged.formOptions,
70
- resolver: zodResolver(baseZod),
71
- defaultValues: options?.defaultValues
72
- });
73
- const values = form.watch();
74
- const renderOne = (f, parent, arrayIndex) => {
75
- const DriverField = driver.Field;
76
- const DriverLabel = driver.FieldLabel;
77
- const DriverDesc = driver.FieldDescription;
78
- const DriverError = driver.FieldError;
79
- const name = fieldPath(parent, f.name, arrayIndex);
80
- const visible = evalPredicate(values, f.visibleWhen);
81
- const enabled = evalPredicate(values, f.enabledWhen);
82
- const invalid = Boolean(form.getFieldState(name)?.invalid);
83
- if (!visible) return null;
84
- const id = name?.replace(/\./g, "-");
85
- const commonWrapProps = {
86
- "data-invalid": invalid,
87
- hidden: !visible,
88
- disabled: !enabled
89
- };
90
- const labelNode = f.labelI18n ? /* @__PURE__ */ jsx(DriverLabel, {
91
- htmlFor: id,
92
- children: f.labelI18n
93
- }) : null;
94
- const descNode = f.descriptionI18n ? /* @__PURE__ */ jsx(DriverDesc, { children: f.descriptionI18n }) : null;
95
- if (f.kind === "group") {
96
- const children = f.fields.map((c, i) => /* @__PURE__ */ jsx(React.Fragment, { children: renderOne(c, name, arrayIndex) }, `${name}-${i}`));
97
- return /* @__PURE__ */ jsxs(DriverField, {
98
- ...commonWrapProps,
99
- children: [
100
- labelNode,
101
- children,
102
- descNode
103
- ]
104
- });
105
- }
106
- if (f.kind === "array") return renderArray(f, parent);
107
- return /* @__PURE__ */ jsx(Controller, {
108
- name,
109
- control: form.control,
110
- render: ({ field, fieldState }) => {
111
- const err = fieldState.error ? [fieldState.error] : [];
112
- const ariaInvalid = fieldState.invalid || void 0;
113
- if (f.kind === "text") {
114
- const Input = driver.Input;
115
- return /* @__PURE__ */ jsxs(DriverField, {
116
- ...commonWrapProps,
117
- children: [
118
- labelNode,
119
- /* @__PURE__ */ jsx(Input, {
120
- id,
121
- "aria-invalid": ariaInvalid,
122
- placeholder: f.placeholderI18n,
123
- autoComplete: f.autoComplete,
124
- inputMode: f.inputMode,
125
- maxLength: f.maxLength,
126
- minLength: f.minLength,
127
- disabled: !enabled,
128
- ...field,
129
- ...f.uiProps,
130
- keyboard: f.keyboard,
131
- autoComplete: f.keyboard?.autoComplete ?? f.autoComplete
132
- }),
133
- descNode,
134
- fieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null
135
- ]
136
- });
137
- }
138
- if (f.kind === "textarea") {
139
- const Textarea = driver.Textarea;
140
- return /* @__PURE__ */ jsxs(DriverField, {
141
- ...commonWrapProps,
142
- children: [
143
- labelNode,
144
- /* @__PURE__ */ jsx(Textarea, {
145
- id,
146
- "aria-invalid": ariaInvalid,
147
- placeholder: f.placeholderI18n,
148
- rows: f.rows,
149
- maxLength: f.maxLength,
150
- disabled: !enabled,
151
- ...field,
152
- ...f.uiProps,
153
- keyboard: f.keyboard,
154
- autoComplete: f.keyboard?.autoComplete ?? f.autoComplete
155
- }),
156
- descNode,
157
- fieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null
158
- ]
159
- });
160
- }
161
- if (f.kind === "select") {
162
- const Select = driver.Select;
163
- const opts = useResolvedOptions(values, toOptionsArray(f.options), merged.resolvers);
164
- return /* @__PURE__ */ jsxs(DriverField, {
165
- ...commonWrapProps,
166
- children: [
167
- labelNode,
168
- /* @__PURE__ */ jsx(Select, {
169
- id,
170
- name,
171
- "aria-invalid": ariaInvalid,
172
- disabled: !enabled,
173
- value: field.value,
174
- onChange: (v) => field.onChange(v),
175
- options: opts,
176
- ...f.uiProps
177
- }),
178
- descNode,
179
- fieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null
180
- ]
181
- });
182
- }
183
- if (f.kind === "checkbox") {
184
- const Checkbox = driver.Checkbox;
185
- return /* @__PURE__ */ jsxs(DriverField, {
186
- ...commonWrapProps,
187
- children: [
188
- labelNode,
189
- /* @__PURE__ */ jsx(Checkbox, {
190
- id,
191
- name,
192
- disabled: !enabled,
193
- checked: !!field.value,
194
- onCheckedChange: (v) => field.onChange(v),
195
- ...f.uiProps
196
- }),
197
- descNode,
198
- fieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null
199
- ]
200
- });
201
- }
202
- if (f.kind === "radio") {
203
- const RadioGroup = driver.RadioGroup;
204
- const opts = useResolvedOptions(values, toOptionsArray(f.options), merged.resolvers);
205
- return /* @__PURE__ */ jsxs(DriverField, {
206
- ...commonWrapProps,
207
- children: [
208
- labelNode,
209
- /* @__PURE__ */ jsx(RadioGroup, {
210
- id,
211
- name,
212
- disabled: !enabled,
213
- value: field.value,
214
- onValueChange: (v) => field.onChange(v),
215
- options: opts,
216
- ...f.uiProps
217
- }),
218
- descNode,
219
- fieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null
220
- ]
221
- });
222
- }
223
- if (f.kind === "switch") {
224
- const Switch = driver.Switch;
225
- return /* @__PURE__ */ jsxs(DriverField, {
226
- ...commonWrapProps,
227
- children: [
228
- labelNode,
229
- /* @__PURE__ */ jsx(Switch, {
230
- id,
231
- name,
232
- disabled: !enabled,
233
- checked: !!field.value,
234
- onCheckedChange: (v) => field.onChange(v),
235
- ...f.uiProps
236
- }),
237
- descNode,
238
- fieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null
239
- ]
240
- });
241
- }
242
- return /* @__PURE__ */ jsx(Fragment, {});
243
- }
244
- }, name);
245
- };
246
- const renderArray = (f, parent) => {
247
- const name = fieldPath(parent, f.name);
248
- const { fields, append, remove } = useFieldArray({
249
- control: form.control,
250
- name
251
- });
252
- const canAdd = f.max == null || fields.length < f.max;
253
- const canRemove = (idx) => (f.min == null ? fields.length > 0 : fields.length > f.min) && idx >= 0;
254
- const Button$1 = driver.Button;
255
- const Label = driver.FieldLabel;
256
- return /* @__PURE__ */ jsxs("div", { children: [
257
- f.labelI18n ? /* @__PURE__ */ jsx(Label, { children: f.labelI18n }) : null,
258
- fields.map((row, idx) => /* @__PURE__ */ jsxs("div", { children: [renderOne(f.of, name, idx), canRemove(idx) ? /* @__PURE__ */ jsx(Button$1, {
259
- type: "button",
260
- variant: "ghost",
261
- size: "sm",
262
- onClick: () => remove(idx),
263
- children: "Remove"
264
- }) : null] }, row.id ?? idx)),
265
- canAdd ? /* @__PURE__ */ jsx(Button$1, {
266
- type: "button",
267
- variant: "outline",
268
- size: "sm",
269
- onClick: () => append({}),
270
- children: "Add"
271
- }) : null
272
- ] }, name);
273
- };
274
- const onSubmit = async (data) => {
275
- const actionKey = spec.actions?.[0]?.key ?? "submit";
276
- if (merged.onSubmitOverride) return merged.onSubmitOverride(data, actionKey);
277
- };
278
- const Button = driver.Button;
279
- return /* @__PURE__ */ jsxs("form", {
280
- onSubmit: form.handleSubmit(onSubmit),
281
- children: [(spec.fields || []).map((f, i) => /* @__PURE__ */ jsx(React.Fragment, { children: renderOne(f) }, i)), spec.actions && spec.actions.length ? /* @__PURE__ */ jsx("div", { children: spec.actions.map((a) => /* @__PURE__ */ jsx(Button, {
282
- type: "submit",
283
- children: a.labelI18n
284
- }, a.key)) }) : null]
285
- });
286
- }
287
- return { render: (spec, options) => /* @__PURE__ */ jsx(InternalForm, {
288
- spec,
289
- options,
290
- merged: {
291
- ...conf,
292
- ...options?.overrides ?? {}
293
- }
294
- }) };
295
- }
296
-
297
- //#endregion
298
- export { createFormRenderer };
299
- //# sourceMappingURL=form-render.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-render.js","names":["cur: any","Button"],"sources":["../../../../../../contracts/src/client/react/form-render.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { Controller, useFieldArray, useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport type {\n ArrayFieldSpec,\n FieldSpec,\n FormOption,\n FormSpec,\n OptionsSource,\n FormValuesFor,\n} from '../../forms';\nimport { buildZodWithRelations, evalPredicate } from '../../forms';\nimport type { AnySchemaModel } from '@lssm/lib.schema';\n\n// Minimal, library-agnostic driver slots. Hosts can provide any UI lib via this interface.\nexport interface DriverSlots {\n Field: React.ComponentType<\n React.PropsWithChildren<{\n 'data-invalid'?: boolean;\n hidden?: boolean;\n disabled?: boolean;\n }>\n >;\n FieldLabel: React.ComponentType<\n React.PropsWithChildren<{ htmlFor?: string }>\n >;\n FieldDescription: React.ComponentType<React.PropsWithChildren<{}>>;\n FieldError: React.ComponentType<{ errors: { message?: string }[] }>;\n FieldGroup?: React.ComponentType<\n React.PropsWithChildren<{ className?: string }>\n >;\n FieldSet?: React.ComponentType<\n React.PropsWithChildren<{ className?: string }>\n >;\n FieldLegend?: React.ComponentType<\n React.PropsWithChildren<{ variant?: 'label' | 'default' }>\n >;\n\n Input: React.ComponentType<React.InputHTMLAttributes<HTMLInputElement>>;\n Textarea: React.ComponentType<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>\n >;\n // Select receives resolved options for simplicity\n Select: React.ComponentType<\n {\n id?: string;\n name?: string;\n value?: unknown;\n onChange?: (v: any) => void;\n disabled?: boolean;\n 'aria-invalid'?: boolean;\n options: FormOption[];\n } & Record<string, unknown>\n >;\n Checkbox: React.ComponentType<\n {\n id?: string;\n name?: string;\n checked?: boolean;\n onCheckedChange?: (v: boolean) => void;\n disabled?: boolean;\n } & Record<string, unknown>\n >;\n RadioGroup: React.ComponentType<\n {\n id?: string;\n name?: string;\n value?: unknown;\n onValueChange?: (v: any) => void;\n disabled?: boolean;\n options: FormOption[];\n } & Record<string, unknown>\n >;\n Switch: React.ComponentType<\n {\n id?: string;\n name?: string;\n checked?: boolean;\n onCheckedChange?: (v: boolean) => void;\n disabled?: boolean;\n } & Record<string, unknown>\n >;\n Button: React.ComponentType<\n React.PropsWithChildren<{\n type?: 'button' | 'submit' | 'reset';\n variant?: string;\n size?: string;\n onClick?: () => void;\n disabled?: boolean;\n }>\n >;\n}\n\nexport type ResolverMap<TValues> = Record<\n string,\n (values: TValues, args?: any) => Promise<FormOption[]> | FormOption[]\n>;\nexport type ComputationMap<TValues> = Record<string, (values: TValues) => any>;\n\nexport interface CreateRendererOptions<TValues = any> {\n driver: DriverSlots;\n formOptions?: Record<string, unknown>;\n onSubmitOverride?: (\n values: TValues,\n actionKey: string\n ) => Promise<void> | void;\n activeFlags?: string[];\n resolvers?: ResolverMap<TValues>;\n computations?: ComputationMap<TValues>;\n unmountStrategy?: 'keep' | 'clear';\n}\n\nexport interface RenderOptions<TValues = any> {\n defaultValues?: Partial<TValues>;\n overrides?: Partial<CreateRendererOptions<TValues>>;\n}\n\nfunction toOptionsArray(\n src: OptionsSource | FormOption[] | undefined\n): OptionsSource | undefined {\n if (!src) return undefined;\n if (Array.isArray(src)) return { kind: 'static', options: src };\n return src;\n}\n\nfunction getAtPath(values: unknown, path: string): unknown {\n if (!path) return undefined;\n const segs = path\n .replace(/\\[(\\d+)\\]/g, '.$1')\n .split('.')\n .filter(Boolean);\n let cur: any = values;\n for (const s of segs) {\n if (cur == null) return undefined;\n cur = cur[s as keyof typeof cur];\n }\n return cur;\n}\n\nfunction makeDepsKey(values: unknown, deps: string[] | undefined) {\n if (!deps || deps.length === 0) return '[]';\n try {\n return JSON.stringify(deps.map((d) => getAtPath(values, d)));\n } catch {\n return '[]';\n }\n}\n\nfunction useResolvedOptions<TValues>(\n values: TValues,\n source: OptionsSource | undefined,\n resolvers?: ResolverMap<TValues>\n): FormOption[] {\n const [opts, setOpts] = useState<FormOption[]>([]);\n const depKey = useMemo(() => {\n if (!source) return 'nil';\n if (source.kind === 'static') return JSON.stringify(source.options ?? []);\n return makeDepsKey(values, source.deps);\n }, [source, values]);\n\n useEffect(() => {\n let mounted = true;\n const run = async () => {\n if (!source) return setOpts([]);\n if (source.kind === 'static') return setOpts([...(source.options ?? [])]);\n const fn = resolvers?.[source.resolverKey];\n if (!fn) return setOpts([]);\n const res = await fn(values as any, source.args);\n if (mounted) setOpts([...(res ?? [])]);\n };\n run();\n return () => {\n mounted = false;\n };\n }, [depKey, source && (source as any).resolverKey]);\n return opts;\n}\n\nfunction fieldPath(\n parent: string | undefined,\n name?: string,\n arrayIndex?: number\n) {\n if (!name) return parent ?? '';\n const child =\n typeof arrayIndex === 'number'\n ? `${name.replace(/^\\$index$/, String(arrayIndex))}`\n : name;\n return parent\n ? `${parent}${typeof arrayIndex === 'number' ? `.${arrayIndex}` : ''}.${child}`.replace(\n /\\.+/g,\n '.'\n )\n : child;\n}\n\nexport function createFormRenderer<M extends AnySchemaModel = AnySchemaModel>(\n base: CreateRendererOptions<FormValuesFor<M>>\n) {\n const conf = base;\n const { driver } = conf;\n\n function InternalForm(props: {\n spec: FormSpec<M>;\n options?: RenderOptions<FormValuesFor<M>>;\n merged: CreateRendererOptions<FormValuesFor<M>>;\n }): React.ReactElement {\n const { spec, options, merged } = props;\n const baseZod = useMemo(() => buildZodWithRelations(spec), [spec]);\n const form = useForm<FormValuesFor<M>>({\n ...merged.formOptions,\n resolver: zodResolver(baseZod as any),\n defaultValues: options?.defaultValues as any,\n });\n\n const values = form.watch();\n\n const renderOne = (\n f: FieldSpec,\n parent?: string,\n arrayIndex?: number\n ): React.ReactElement | null => {\n const DriverField = driver.Field;\n const DriverLabel = driver.FieldLabel;\n const DriverDesc = driver.FieldDescription;\n const DriverError = driver.FieldError;\n const name = fieldPath(parent, f.name, arrayIndex);\n const visible = evalPredicate(values, f.visibleWhen);\n const enabled = evalPredicate(values, f.enabledWhen);\n const invalid = Boolean(form.getFieldState(name as any)?.invalid);\n\n if (!visible) return null;\n\n const id = name?.replace(/\\./g, '-');\n\n const commonWrapProps = {\n 'data-invalid': invalid,\n hidden: !visible,\n disabled: !enabled,\n } as any;\n const labelNode = f.labelI18n ? (\n <DriverLabel htmlFor={id}>{f.labelI18n}</DriverLabel>\n ) : null;\n const descNode = f.descriptionI18n ? (\n <DriverDesc>{f.descriptionI18n}</DriverDesc>\n ) : null;\n\n if (f.kind === 'group') {\n const children = f.fields.map((c: FieldSpec, i: number) => (\n <React.Fragment key={`${name}-${i}`}>\n {renderOne(c, name, arrayIndex)}\n </React.Fragment>\n ));\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n {children}\n {descNode}\n </DriverField>\n );\n }\n\n if (f.kind === 'array') {\n return renderArray(f as ArrayFieldSpec, parent);\n }\n\n // Leaf controls\n return (\n <Controller\n key={name}\n name={name as any}\n control={form.control}\n render={({ field, fieldState }) => {\n const err = fieldState.error ? [fieldState.error] : [];\n const ariaInvalid = fieldState.invalid || undefined;\n\n if (f.kind === 'text') {\n const Input = driver.Input;\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Input\n id={id}\n aria-invalid={ariaInvalid}\n placeholder={f.placeholderI18n}\n autoComplete={(f as any).autoComplete as any}\n inputMode={(f as any).inputMode as any}\n maxLength={(f as any).maxLength as any}\n minLength={(f as any).minLength as any}\n disabled={!enabled}\n {...field}\n {...(f.uiProps as any)}\n // Pass keyboard/autocomplete hints down for adapters that support them\n {...({\n keyboard: (f as any).keyboard,\n autoComplete:\n (f as any).keyboard?.autoComplete ??\n (f as any).autoComplete,\n } as any)}\n />\n {descNode}\n {fieldState.invalid ? (\n <DriverError errors={err as any} />\n ) : null}\n </DriverField>\n );\n }\n if (f.kind === 'textarea') {\n const Textarea = driver.Textarea;\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Textarea\n id={id}\n aria-invalid={ariaInvalid}\n placeholder={f.placeholderI18n}\n rows={(f as any).rows as any}\n maxLength={(f as any).maxLength as any}\n disabled={!enabled}\n {...field}\n {...(f.uiProps as any)}\n {...({\n keyboard: (f as any).keyboard,\n autoComplete:\n (f as any).keyboard?.autoComplete ??\n (f as any).autoComplete,\n } as any)}\n />\n {descNode}\n {fieldState.invalid ? (\n <DriverError errors={err as any} />\n ) : null}\n </DriverField>\n );\n }\n if (f.kind === 'select') {\n const Select = driver.Select;\n const src = toOptionsArray((f as any).options);\n const opts = useResolvedOptions(values, src, merged.resolvers);\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Select\n id={id}\n name={name}\n aria-invalid={ariaInvalid}\n disabled={!enabled}\n value={field.value}\n onChange={(v: any) => field.onChange(v)}\n options={opts}\n {...(f.uiProps as any)}\n />\n {descNode}\n {fieldState.invalid ? (\n <DriverError errors={err as any} />\n ) : null}\n </DriverField>\n );\n }\n if (f.kind === 'checkbox') {\n const Checkbox = driver.Checkbox;\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Checkbox\n id={id}\n name={name}\n disabled={!enabled}\n checked={!!field.value}\n onCheckedChange={(v: boolean) => field.onChange(v)}\n {...(f.uiProps as any)}\n />\n {descNode}\n {fieldState.invalid ? (\n <DriverError errors={err as any} />\n ) : null}\n </DriverField>\n );\n }\n if (f.kind === 'radio') {\n const RadioGroup = driver.RadioGroup;\n const src = toOptionsArray((f as any).options);\n const opts = useResolvedOptions(values, src, merged.resolvers);\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <RadioGroup\n id={id}\n name={name}\n disabled={!enabled}\n value={field.value}\n onValueChange={(v: any) => field.onChange(v)}\n options={opts}\n {...(f.uiProps as any)}\n />\n {descNode}\n {fieldState.invalid ? (\n <DriverError errors={err as any} />\n ) : null}\n </DriverField>\n );\n }\n if (f.kind === 'switch') {\n const Switch = driver.Switch;\n return (\n <DriverField {...commonWrapProps}>\n {labelNode}\n <Switch\n id={id}\n name={name}\n disabled={!enabled}\n checked={!!field.value}\n onCheckedChange={(v: boolean) => field.onChange(v)}\n {...(f.uiProps as any)}\n />\n {descNode}\n {fieldState.invalid ? (\n <DriverError errors={err as any} />\n ) : null}\n </DriverField>\n );\n }\n return <></>;\n }}\n />\n );\n };\n\n const renderArray = (f: ArrayFieldSpec, parent?: string) => {\n const name = fieldPath(parent, f.name);\n const { fields, append, remove } = useFieldArray({\n control: form.control as any,\n name: name as any,\n });\n const canAdd = f.max == null || fields.length < f.max;\n const canRemove = (idx: number) =>\n (f.min == null ? fields.length > 0 : fields.length > f.min) && idx >= 0;\n const Button = driver.Button;\n const Label = driver.FieldLabel;\n return (\n <div key={name}>\n {f.labelI18n ? <Label>{f.labelI18n}</Label> : null}\n {fields.map((row, idx) => (\n <div key={row.id ?? idx}>\n {renderOne(f.of as FieldSpec, name, idx)}\n {canRemove(idx) ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => remove(idx)}\n >\n Remove\n </Button>\n ) : null}\n </div>\n ))}\n {canAdd ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => append({})}\n >\n Add\n </Button>\n ) : null}\n </div>\n );\n };\n\n const onSubmit = async (data: FormValuesFor<M>) => {\n const actionKey = spec.actions?.[0]?.key ?? 'submit';\n if (merged.onSubmitOverride) {\n return merged.onSubmitOverride(data, actionKey);\n }\n // default: noop\n };\n\n const Button = driver.Button;\n return (\n <form onSubmit={form.handleSubmit(onSubmit)}>\n {(spec.fields || []).map((f: FieldSpec, i: number) => (\n <React.Fragment key={i}>{renderOne(f)}</React.Fragment>\n ))}\n {spec.actions && spec.actions.length ? (\n <div>\n {spec.actions.map((a: { key: string; labelI18n: string }) => (\n <Button key={a.key} type=\"submit\">\n {a.labelI18n}\n </Button>\n ))}\n </div>\n ) : null}\n </form>\n );\n }\n\n return {\n render: (spec: FormSpec<M>, options?: RenderOptions<FormValuesFor<M>>) => (\n <InternalForm\n spec={spec}\n options={options}\n merged={{\n ...conf,\n ...(options?.overrides ?? {}),\n }}\n />\n ),\n };\n}\n"],"mappings":";;;;;;;AAqHA,SAAS,eACP,KAC2B;AAC3B,KAAI,CAAC,IAAK,QAAO;AACjB,KAAI,MAAM,QAAQ,IAAI,CAAE,QAAO;EAAE,MAAM;EAAU,SAAS;EAAK;AAC/D,QAAO;;AAGT,SAAS,UAAU,QAAiB,MAAuB;AACzD,KAAI,CAAC,KAAM,QAAO;CAClB,MAAM,OAAO,KACV,QAAQ,cAAc,MAAM,CAC5B,MAAM,IAAI,CACV,OAAO,QAAQ;CAClB,IAAIA,MAAW;AACf,MAAK,MAAM,KAAK,MAAM;AACpB,MAAI,OAAO,KAAM,QAAO;AACxB,QAAM,IAAI;;AAEZ,QAAO;;AAGT,SAAS,YAAY,QAAiB,MAA4B;AAChE,KAAI,CAAC,QAAQ,KAAK,WAAW,EAAG,QAAO;AACvC,KAAI;AACF,SAAO,KAAK,UAAU,KAAK,KAAK,MAAM,UAAU,QAAQ,EAAE,CAAC,CAAC;SACtD;AACN,SAAO;;;AAIX,SAAS,mBACP,QACA,QACA,WACc;CACd,MAAM,CAAC,MAAM,WAAW,SAAuB,EAAE,CAAC;AAOlD,iBAAgB;EACd,IAAI,UAAU;EACd,MAAM,MAAM,YAAY;AACtB,OAAI,CAAC,OAAQ,QAAO,QAAQ,EAAE,CAAC;AAC/B,OAAI,OAAO,SAAS,SAAU,QAAO,QAAQ,CAAC,GAAI,OAAO,WAAW,EAAE,CAAE,CAAC;GACzE,MAAM,KAAK,YAAY,OAAO;AAC9B,OAAI,CAAC,GAAI,QAAO,QAAQ,EAAE,CAAC;GAC3B,MAAM,MAAM,MAAM,GAAG,QAAe,OAAO,KAAK;AAChD,OAAI,QAAS,SAAQ,CAAC,GAAI,OAAO,EAAE,CAAE,CAAC;;AAExC,OAAK;AACL,eAAa;AACX,aAAU;;IAEX,CApBY,cAAc;AAC3B,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,OAAO,SAAS,SAAU,QAAO,KAAK,UAAU,OAAO,WAAW,EAAE,CAAC;AACzE,SAAO,YAAY,QAAQ,OAAO,KAAK;IACtC,CAAC,QAAQ,OAAO,CAAC,EAgBR,UAAW,OAAe,YAAY,CAAC;AACnD,QAAO;;AAGT,SAAS,UACP,QACA,MACA,YACA;AACA,KAAI,CAAC,KAAM,QAAO,UAAU;CAC5B,MAAM,QACJ,OAAO,eAAe,WAClB,GAAG,KAAK,QAAQ,aAAa,OAAO,WAAW,CAAC,KAChD;AACN,QAAO,SACH,GAAG,SAAS,OAAO,eAAe,WAAW,IAAI,eAAe,GAAG,GAAG,QAAQ,QAC5E,QACA,IACD,GACD;;AAGN,SAAgB,mBACd,MACA;CACA,MAAM,OAAO;CACb,MAAM,EAAE,WAAW;CAEnB,SAAS,aAAa,OAIC;EACrB,MAAM,EAAE,MAAM,SAAS,WAAW;EAClC,MAAM,UAAU,cAAc,sBAAsB,KAAK,EAAE,CAAC,KAAK,CAAC;EAClE,MAAM,OAAO,QAA0B;GACrC,GAAG,OAAO;GACV,UAAU,YAAY,QAAe;GACrC,eAAe,SAAS;GACzB,CAAC;EAEF,MAAM,SAAS,KAAK,OAAO;EAE3B,MAAM,aACJ,GACA,QACA,eAC8B;GAC9B,MAAM,cAAc,OAAO;GAC3B,MAAM,cAAc,OAAO;GAC3B,MAAM,aAAa,OAAO;GAC1B,MAAM,cAAc,OAAO;GAC3B,MAAM,OAAO,UAAU,QAAQ,EAAE,MAAM,WAAW;GAClD,MAAM,UAAU,cAAc,QAAQ,EAAE,YAAY;GACpD,MAAM,UAAU,cAAc,QAAQ,EAAE,YAAY;GACpD,MAAM,UAAU,QAAQ,KAAK,cAAc,KAAY,EAAE,QAAQ;AAEjE,OAAI,CAAC,QAAS,QAAO;GAErB,MAAM,KAAK,MAAM,QAAQ,OAAO,IAAI;GAEpC,MAAM,kBAAkB;IACtB,gBAAgB;IAChB,QAAQ,CAAC;IACT,UAAU,CAAC;IACZ;GACD,MAAM,YAAY,EAAE,YAClB,oBAAC;IAAY,SAAS;cAAK,EAAE;KAAwB,GACnD;GACJ,MAAM,WAAW,EAAE,kBACjB,oBAAC,wBAAY,EAAE,kBAA6B,GAC1C;AAEJ,OAAI,EAAE,SAAS,SAAS;IACtB,MAAM,WAAW,EAAE,OAAO,KAAK,GAAc,MAC3C,oBAAC,MAAM,sBACJ,UAAU,GAAG,MAAM,WAAW,IADZ,GAAG,KAAK,GAAG,IAEf,CACjB;AACF,WACE,qBAAC;KAAY,GAAI;;MACd;MACA;MACA;;MACW;;AAIlB,OAAI,EAAE,SAAS,QACb,QAAO,YAAY,GAAqB,OAAO;AAIjD,UACE,oBAAC;IAEO;IACN,SAAS,KAAK;IACd,SAAS,EAAE,OAAO,iBAAiB;KACjC,MAAM,MAAM,WAAW,QAAQ,CAAC,WAAW,MAAM,GAAG,EAAE;KACtD,MAAM,cAAc,WAAW,WAAW;AAE1C,SAAI,EAAE,SAAS,QAAQ;MACrB,MAAM,QAAQ,OAAO;AACrB,aACE,qBAAC;OAAY,GAAI;;QACd;QACD,oBAAC;SACK;SACJ,gBAAc;SACd,aAAa,EAAE;SACf,cAAe,EAAU;SACzB,WAAY,EAAU;SACtB,WAAY,EAAU;SACtB,WAAY,EAAU;SACtB,UAAU,CAAC;SACX,GAAI;SACJ,GAAK,EAAE;SAGL,UAAW,EAAU;SACrB,cACG,EAAU,UAAU,gBACpB,EAAU;UAEf;QACD;QACA,WAAW,UACV,oBAAC,eAAY,QAAQ,MAAc,GACjC;;QACQ;;AAGlB,SAAI,EAAE,SAAS,YAAY;MACzB,MAAM,WAAW,OAAO;AACxB,aACE,qBAAC;OAAY,GAAI;;QACd;QACD,oBAAC;SACK;SACJ,gBAAc;SACd,aAAa,EAAE;SACf,MAAO,EAAU;SACjB,WAAY,EAAU;SACtB,UAAU,CAAC;SACX,GAAI;SACJ,GAAK,EAAE;SAEL,UAAW,EAAU;SACrB,cACG,EAAU,UAAU,gBACpB,EAAU;UAEf;QACD;QACA,WAAW,UACV,oBAAC,eAAY,QAAQ,MAAc,GACjC;;QACQ;;AAGlB,SAAI,EAAE,SAAS,UAAU;MACvB,MAAM,SAAS,OAAO;MAEtB,MAAM,OAAO,mBAAmB,QADpB,eAAgB,EAAU,QAAQ,EACD,OAAO,UAAU;AAC9D,aACE,qBAAC;OAAY,GAAI;;QACd;QACD,oBAAC;SACK;SACE;SACN,gBAAc;SACd,UAAU,CAAC;SACX,OAAO,MAAM;SACb,WAAW,MAAW,MAAM,SAAS,EAAE;SACvC,SAAS;SACT,GAAK,EAAE;UACP;QACD;QACA,WAAW,UACV,oBAAC,eAAY,QAAQ,MAAc,GACjC;;QACQ;;AAGlB,SAAI,EAAE,SAAS,YAAY;MACzB,MAAM,WAAW,OAAO;AACxB,aACE,qBAAC;OAAY,GAAI;;QACd;QACD,oBAAC;SACK;SACE;SACN,UAAU,CAAC;SACX,SAAS,CAAC,CAAC,MAAM;SACjB,kBAAkB,MAAe,MAAM,SAAS,EAAE;SAClD,GAAK,EAAE;UACP;QACD;QACA,WAAW,UACV,oBAAC,eAAY,QAAQ,MAAc,GACjC;;QACQ;;AAGlB,SAAI,EAAE,SAAS,SAAS;MACtB,MAAM,aAAa,OAAO;MAE1B,MAAM,OAAO,mBAAmB,QADpB,eAAgB,EAAU,QAAQ,EACD,OAAO,UAAU;AAC9D,aACE,qBAAC;OAAY,GAAI;;QACd;QACD,oBAAC;SACK;SACE;SACN,UAAU,CAAC;SACX,OAAO,MAAM;SACb,gBAAgB,MAAW,MAAM,SAAS,EAAE;SAC5C,SAAS;SACT,GAAK,EAAE;UACP;QACD;QACA,WAAW,UACV,oBAAC,eAAY,QAAQ,MAAc,GACjC;;QACQ;;AAGlB,SAAI,EAAE,SAAS,UAAU;MACvB,MAAM,SAAS,OAAO;AACtB,aACE,qBAAC;OAAY,GAAI;;QACd;QACD,oBAAC;SACK;SACE;SACN,UAAU,CAAC;SACX,SAAS,CAAC,CAAC,MAAM;SACjB,kBAAkB,MAAe,MAAM,SAAS,EAAE;SAClD,GAAK,EAAE;UACP;QACD;QACA,WAAW,UACV,oBAAC,eAAY,QAAQ,MAAc,GACjC;;QACQ;;AAGlB,YAAO,iCAAK;;MAzJT,KA2JL;;EAIN,MAAM,eAAe,GAAmB,WAAoB;GAC1D,MAAM,OAAO,UAAU,QAAQ,EAAE,KAAK;GACtC,MAAM,EAAE,QAAQ,QAAQ,WAAW,cAAc;IAC/C,SAAS,KAAK;IACR;IACP,CAAC;GACF,MAAM,SAAS,EAAE,OAAO,QAAQ,OAAO,SAAS,EAAE;GAClD,MAAM,aAAa,SAChB,EAAE,OAAO,OAAO,OAAO,SAAS,IAAI,OAAO,SAAS,EAAE,QAAQ,OAAO;GACxE,MAAMC,WAAS,OAAO;GACtB,MAAM,QAAQ,OAAO;AACrB,UACE,qBAAC;IACE,EAAE,YAAY,oBAAC,mBAAO,EAAE,YAAkB,GAAG;IAC7C,OAAO,KAAK,KAAK,QAChB,qBAAC,oBACE,UAAU,EAAE,IAAiB,MAAM,IAAI,EACvC,UAAU,IAAI,GACb,oBAACA;KACC,MAAK;KACL,SAAQ;KACR,MAAK;KACL,eAAe,OAAO,IAAI;eAC3B;MAEQ,GACP,SAXI,IAAI,MAAM,IAYd,CACN;IACD,SACC,oBAACA;KACC,MAAK;KACL,SAAQ;KACR,MAAK;KACL,eAAe,OAAO,EAAE,CAAC;eAC1B;MAEQ,GACP;QA1BI,KA2BJ;;EAIV,MAAM,WAAW,OAAO,SAA2B;GACjD,MAAM,YAAY,KAAK,UAAU,IAAI,OAAO;AAC5C,OAAI,OAAO,iBACT,QAAO,OAAO,iBAAiB,MAAM,UAAU;;EAKnD,MAAM,SAAS,OAAO;AACtB,SACE,qBAAC;GAAK,UAAU,KAAK,aAAa,SAAS;eACvC,KAAK,UAAU,EAAE,EAAE,KAAK,GAAc,MACtC,oBAAC,MAAM,sBAAkB,UAAU,EAAE,IAAhB,EAAkC,CACvD,EACD,KAAK,WAAW,KAAK,QAAQ,SAC5B,oBAAC,mBACE,KAAK,QAAQ,KAAK,MACjB,oBAAC;IAAmB,MAAK;cACtB,EAAE;MADQ,EAAE,IAEN,CACT,GACE,GACJ;IACC;;AAIX,QAAO,EACL,SAAS,MAAmB,YAC1B,oBAAC;EACO;EACG;EACT,QAAQ;GACN,GAAG;GACH,GAAI,SAAS,aAAa,EAAE;GAC7B;GACD,EAEL"}
@@ -1,89 +0,0 @@
1
- //#region ../contracts/src/forms.ts
2
- function getAtPath(values, path) {
3
- if (!path) return void 0;
4
- const segs = path.replace(/\[(\d+)\]/g, ".$1").split(".").filter(Boolean);
5
- let cur = values;
6
- for (const s of segs) {
7
- if (cur == null) return void 0;
8
- cur = cur[s];
9
- }
10
- return cur;
11
- }
12
- function evalPredicate(values, pred) {
13
- if (!pred) return true;
14
- if (pred.not) return !evalPredicate(values, pred.not);
15
- if (pred.all && pred.all.length) return pred.all.every((p) => evalPredicate(values, p));
16
- if (pred.any && pred.any.length) return pred.any.some((p) => evalPredicate(values, p));
17
- if (pred.when) {
18
- const { path, op = "truthy", value } = pred.when;
19
- const v = getAtPath(values, path);
20
- switch (op) {
21
- case "equals": return v === value;
22
- case "notEquals": return v !== value;
23
- case "in": return Array.isArray(value) && value.includes(v);
24
- case "notIn": return Array.isArray(value) && !value.includes(v);
25
- case "gt": return Number(v) > Number(value);
26
- case "gte": return Number(v) >= Number(value);
27
- case "lt": return Number(v) < Number(value);
28
- case "lte": return Number(v) <= Number(value);
29
- case "empty": return v == null || (Array.isArray(v) ? v.length === 0 : String(v).length === 0);
30
- case "lengthGt": return (Array.isArray(v) || typeof v === "string") && v.length > Number(value ?? 0);
31
- case "lengthGte": return (Array.isArray(v) || typeof v === "string") && v.length >= Number(value ?? 0);
32
- case "lengthLt": return (Array.isArray(v) || typeof v === "string") && v.length < Number(value ?? 0);
33
- case "lengthLte": return (Array.isArray(v) || typeof v === "string") && v.length <= Number(value ?? 0);
34
- case "truthy":
35
- default: return Boolean(v);
36
- }
37
- }
38
- return true;
39
- }
40
- /**
41
- * Wrap the base zod schema with relation-driven refinements (requiredWhen, array min/max)
42
- * and optional custom constraints. Call this when wiring RHF resolver.
43
- */
44
- function buildZodWithRelations(spec, handlers) {
45
- return spec.model.getZod().superRefine((values, ctx) => {
46
- const visit = (field, parentPath) => {
47
- const path = field.name ? parentPath ? `${parentPath}.${field.name}` : field.name : parentPath ?? "";
48
- if (field.requiredWhen) {
49
- if (evalPredicate(values, field.requiredWhen)) {
50
- const v = getAtPath(values, path);
51
- if (v == null || typeof v === "string" && v.trim().length === 0 || Array.isArray(v) && v.length === 0) ctx.addIssue({
52
- code: "custom",
53
- path: path.split("."),
54
- message: "required"
55
- });
56
- }
57
- }
58
- if (field.kind === "array") {
59
- const arr = getAtPath(values, path);
60
- if (field.min != null && Array.isArray(arr) && arr.length < field.min) ctx.addIssue({
61
- code: "custom",
62
- path: path.split("."),
63
- message: `min:${field.min}`
64
- });
65
- if (field.max != null && Array.isArray(arr) && arr.length > field.max) ctx.addIssue({
66
- code: "custom",
67
- path: path.split("."),
68
- message: `max:${field.max}`
69
- });
70
- visit(field.of, path);
71
- } else if (field.kind === "group") for (const child of field.fields) visit(child, path);
72
- };
73
- for (const f of spec.fields) visit(f);
74
- if (spec.constraints && handlers) for (const c of spec.constraints) {
75
- const fn = handlers[c.key];
76
- if (!fn) continue;
77
- const res = fn(values, c.paths, c.args);
78
- if (!res.ok) ctx.addIssue({
79
- code: "custom",
80
- path: (res.path ?? c.paths[0] ?? "").split(".").filter(Boolean),
81
- message: res.message ?? c.messageI18n
82
- });
83
- }
84
- });
85
- }
86
-
87
- //#endregion
88
- export { buildZodWithRelations, evalPredicate };
89
- //# sourceMappingURL=forms.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"forms.js","names":["cur: any"],"sources":["../../../../contracts/src/forms.ts"],"sourcesContent":["import type { AnySchemaModel, ZodSchemaModel } from '@lssm/lib.schema';\nimport type { OwnerShipMeta } from './ownership';\n\n// ---- Core types\n\nexport type PredicateOp =\n | 'equals'\n | 'notEquals'\n | 'in'\n | 'notIn'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'truthy'\n | 'empty'\n | 'lengthGt'\n | 'lengthGte'\n | 'lengthLt'\n | 'lengthLte';\n\n// Author-time generic path helpers (computed from provided fields shape)\nexport interface WhenClause {\n /** Dot path in form values; arrays may use `$index` within array context. */\n path: string;\n op?: PredicateOp;\n value?: unknown;\n}\n\nexport interface Predicate {\n when?: WhenClause;\n all?: Predicate[];\n any?: Predicate[];\n not?: Predicate;\n}\n\nexport interface FormOption {\n labelI18n: string;\n value: string | number | boolean;\n descriptionI18n?: string;\n disabled?: boolean;\n}\n\nexport type OptionsSource =\n | { kind: 'static'; options: readonly FormOption[] }\n | {\n kind: 'resolver';\n resolverKey: string;\n /** Dot paths in form values to watch */\n deps: string[];\n args?: Record<string, unknown>;\n };\n\nexport interface BaseFieldSpec {\n /** Field kind discriminator. */\n kind:\n | 'text'\n | 'textarea'\n | 'select'\n | 'checkbox'\n | 'radio'\n | 'switch'\n | 'group'\n | 'array';\n /** Field name (dot path relative to the form root or parent context). */\n name?: string;\n labelI18n?: string;\n descriptionI18n?: string;\n placeholderI18n?: string;\n required?: boolean;\n /** Conditional UI behavior */\n visibleWhen?: Predicate;\n enabledWhen?: Predicate;\n requiredWhen?: Predicate;\n /** UI hints */\n uiKey?: string;\n uiProps?: Record<string, unknown>;\n wrapper?: { orientation?: 'horizontal' | 'vertical' };\n /** HTML/Native autofill token (supports custom tokens) */\n autoComplete?: string;\n /** Keyboard/adaptation hints (web/native). Shape mirrors design-system KeyboardOptions but stays decoupled. */\n keyboard?: {\n kind?: string;\n autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters';\n autoComplete?: string;\n autoCorrect?: boolean;\n enterKeyHint?: 'enter' | 'done' | 'go' | 'next' | 'search' | 'send';\n };\n /** Optional computed value hook, provided by host computations map */\n computeFrom?: {\n computeKey: string;\n deps: string[];\n mode?: 'change' | 'blur-xs' | 'submit';\n readOnly?: boolean;\n };\n}\n\nexport interface TextFieldSpec extends BaseFieldSpec {\n kind: 'text';\n name: string;\n inputMode?:\n | 'text'\n | 'email'\n | 'tel'\n | 'url'\n | 'numeric'\n | 'decimal'\n | 'search';\n autoComplete?: string;\n maxLength?: number;\n minLength?: number;\n}\n\nexport interface TextareaFieldSpec extends BaseFieldSpec {\n kind: 'textarea';\n name: string;\n rows?: number;\n maxLength?: number;\n minLength?: number;\n}\n\nexport interface SelectFieldSpec extends BaseFieldSpec {\n kind: 'select';\n name: string;\n options: OptionsSource | readonly FormOption[]; // allow shorthand array\n}\n\nexport interface CheckboxFieldSpec extends BaseFieldSpec {\n kind: 'checkbox';\n name: string;\n}\n\nexport interface RadioFieldSpec extends BaseFieldSpec {\n kind: 'radio';\n name: string;\n options: OptionsSource | readonly FormOption[];\n}\n\nexport interface SwitchFieldSpec extends BaseFieldSpec {\n kind: 'switch';\n name: string;\n}\n\nexport interface GroupFieldSpec extends BaseFieldSpec {\n kind: 'group';\n /** Optional legend/label at group level */\n labelI18n?: string;\n fields: FieldSpec[];\n}\n\nexport interface ArrayFieldSpec extends BaseFieldSpec {\n kind: 'array';\n /** Root-level field that is an array in the model (e.g., \"emails\") */\n name: string;\n /** Child field spec for each item (e.g., address inside emails[i].address). */\n of: Exclude<FieldSpec, ArrayFieldSpec | GroupFieldSpec>;\n min?: number;\n max?: number;\n}\n\nexport type FieldSpec =\n | TextFieldSpec\n | TextareaFieldSpec\n | SelectFieldSpec\n | CheckboxFieldSpec\n | RadioFieldSpec\n | SwitchFieldSpec\n | GroupFieldSpec\n | ArrayFieldSpec;\n\nexport interface FormAction {\n key: string;\n labelI18n: string;\n op?: { name: string; version: number };\n success?: { navigateTo?: string; toastI18n?: string };\n}\n\nexport interface ConstraintDecl {\n key: string; // host maps this to a function\n messageI18n: string;\n paths: string[]; // inputs for the constraint function\n args?: Record<string, unknown>;\n}\n\nexport type FormValuesFor<M extends AnySchemaModel> = ZodSchemaModel<M>;\n\nexport interface FormSpec<M extends AnySchemaModel = AnySchemaModel> {\n meta: OwnerShipMeta & { key: string; version: number };\n /** Canonical form data shape */\n model: M;\n /** Flat list or tree using groups/arrays */\n fields: FieldSpec[];\n policy?: { flags?: string[]; pii?: string[] };\n actions?: FormAction[];\n renderHints?: { ui: 'shadcn' | 'custom'; form: 'react-hook-form' };\n constraints?: ConstraintDecl[];\n}\n\n// ---- Registry\n\nfunction formKey(meta: FormSpec['meta']) {\n return `${meta.key}.v${meta.version}`;\n}\n\nexport class FormRegistry {\n private items = new Map<string, FormSpec>();\n\n register(spec: FormSpec): this {\n const key = formKey(spec.meta);\n if (this.items.has(key)) throw new Error(`Duplicate form ${key}`);\n this.items.set(key, spec);\n return this;\n }\n\n list(): FormSpec[] {\n return [...this.items.values()];\n }\n\n get(key: string, version?: number) {\n if (version != null) return this.items.get(`${key}.v${version}`);\n let candidate: FormSpec | undefined;\n let max = -Infinity;\n for (const [k, v] of this.items.entries()) {\n if (!k.startsWith(`${key}.v`)) continue;\n if (v.meta.version > max) {\n max = v.meta.version;\n candidate = v;\n }\n }\n return candidate;\n }\n}\n\n// ---- Relations helpers (runtime)\n\nfunction getAtPath(values: unknown, path: string): unknown {\n if (!path) return undefined;\n const segs = path\n .replace(/\\[(\\d+)\\]/g, '.$1')\n .split('.')\n .filter(Boolean);\n let cur: any = values as any;\n for (const s of segs) {\n if (cur == null) return undefined;\n cur = cur[s as keyof typeof cur];\n }\n return cur;\n}\n\nexport function evalPredicate(values: unknown, pred?: Predicate): boolean {\n if (!pred) return true;\n if (pred.not) return !evalPredicate(values, pred.not);\n if (pred.all && pred.all.length)\n return pred.all.every((p) => evalPredicate(values, p));\n if (pred.any && pred.any.length)\n return pred.any.some((p) => evalPredicate(values, p));\n if (pred.when) {\n const { path, op = 'truthy', value } = pred.when;\n const v = getAtPath(values, path);\n switch (op) {\n case 'equals':\n return v === value;\n case 'notEquals':\n return v !== value;\n case 'in':\n return Array.isArray(value) && value.includes(v as never);\n case 'notIn':\n return Array.isArray(value) && !value.includes(v as never);\n case 'gt':\n return Number(v) > Number(value);\n case 'gte':\n return Number(v) >= Number(value);\n case 'lt':\n return Number(v) < Number(value);\n case 'lte':\n return Number(v) <= Number(value);\n case 'empty':\n return (\n v == null ||\n (Array.isArray(v) ? v.length === 0 : String(v).length === 0)\n );\n case 'lengthGt':\n return (\n (Array.isArray(v) || typeof v === 'string') &&\n (v as any).length > Number(value ?? 0)\n );\n case 'lengthGte':\n return (\n (Array.isArray(v) || typeof v === 'string') &&\n (v as any).length >= Number(value ?? 0)\n );\n case 'lengthLt':\n return (\n (Array.isArray(v) || typeof v === 'string') &&\n (v as any).length < Number(value ?? 0)\n );\n case 'lengthLte':\n return (\n (Array.isArray(v) || typeof v === 'string') &&\n (v as any).length <= Number(value ?? 0)\n );\n case 'truthy':\n default:\n return Boolean(v);\n }\n }\n return true;\n}\n\nexport type ConstraintHandler = (\n values: Record<string, unknown>,\n paths: string[],\n args?: Record<string, unknown>\n) => { ok: true } | { ok: false; message?: string; path?: string };\n\n/**\n * Wrap the base zod schema with relation-driven refinements (requiredWhen, array min/max)\n * and optional custom constraints. Call this when wiring RHF resolver.\n */\nexport function buildZodWithRelations(\n spec: FormSpec,\n handlers?: Record<string, ConstraintHandler>\n) {\n const base = spec.model.getZod();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (base as any).superRefine(\n (values: Record<string, unknown>, ctx: any) => {\n const visit = (field: FieldSpec, parentPath?: string) => {\n const path = field.name\n ? parentPath\n ? `${parentPath}.${field.name}`\n : field.name\n : (parentPath ?? '');\n\n // requiredWhen enforcement (UI also shows required)\n if (field.requiredWhen) {\n const should = evalPredicate(values, field.requiredWhen);\n if (should) {\n const v = getAtPath(values, path);\n const empty =\n v == null ||\n (typeof v === 'string' && v.trim().length === 0) ||\n (Array.isArray(v) && v.length === 0);\n if (empty)\n ctx.addIssue({\n code: 'custom',\n path: path.split('.'),\n message: 'required',\n });\n }\n }\n\n // arrays min/max\n if (field.kind === 'array') {\n const arr = getAtPath(values, path) as unknown[] | undefined;\n if (\n field.min != null &&\n Array.isArray(arr) &&\n arr.length < field.min\n ) {\n ctx.addIssue({\n code: 'custom',\n path: path.split('.'),\n message: `min:${field.min}`,\n });\n }\n if (\n field.max != null &&\n Array.isArray(arr) &&\n arr.length > field.max\n ) {\n ctx.addIssue({\n code: 'custom',\n path: path.split('.'),\n message: `max:${field.max}`,\n });\n }\n // child\n visit(field.of, path);\n } else if (field.kind === 'group') {\n for (const child of field.fields) visit(child, path);\n }\n };\n\n for (const f of spec.fields) visit(f);\n\n // custom constraints\n if (spec.constraints && handlers) {\n for (const c of spec.constraints) {\n const fn = handlers[c.key];\n if (!fn) continue;\n const res = fn(values, c.paths, c.args);\n if (!res.ok) {\n ctx.addIssue({\n code: 'custom',\n path: (res.path ?? c.paths[0] ?? '').split('.').filter(Boolean),\n message: res.message ?? c.messageI18n,\n });\n }\n }\n }\n }\n );\n}\n\n// ---- Authoring-time helper: enforce typed paths from fields (best-effort bounded)\n\ninterface AnyFieldLike {\n kind: string;\n name?: string;\n fields?: readonly AnyFieldLike[];\n of?: AnyFieldLike;\n}\n\ntype TopLevelNames<F extends readonly AnyFieldLike[]> = F[number] extends {\n name: infer N extends string;\n}\n ? N\n : never;\n\ntype ArrayChildren<F extends readonly AnyFieldLike[]> = F[number] extends {\n kind: 'array';\n name: infer N extends string;\n of: infer C;\n}\n ? C extends { name: infer CN extends string }\n ? `${N}.$index.${CN}`\n : never\n : never;\n\ntype GroupTopLevelNames<F extends readonly AnyFieldLike[]> = F[number] extends {\n kind: 'group';\n fields: infer G extends readonly AnyFieldLike[];\n}\n ? TopLevelNames<G>\n : never;\n\ntype GroupArrayChildren<F extends readonly AnyFieldLike[]> = F[number] extends {\n kind: 'group';\n fields: infer G extends readonly AnyFieldLike[];\n}\n ? ArrayChildren<G>\n : never;\n\ntype PathOfFields<F extends readonly AnyFieldLike[]> =\n | TopLevelNames<F>\n | ArrayChildren<F>\n | GroupTopLevelNames<F>\n | GroupArrayChildren<F>;\n\nexport interface TypedWhenClause<P extends string> {\n path: P;\n op?: PredicateOp;\n value?: unknown;\n}\nexport interface TypedPredicate<P extends string> {\n when?: TypedWhenClause<P>;\n all?: TypedPredicate<P>[];\n any?: TypedPredicate<P>[];\n not?: TypedPredicate<P>;\n}\nexport type TypedOptionsSource<P extends string> =\n | { kind: 'static'; options: readonly FormOption[] }\n | {\n kind: 'resolver';\n resolverKey: string;\n deps: P[];\n args?: Record<string, unknown>;\n };\n\nexport type EnhanceFields<\n F extends readonly AnyFieldLike[],\n P extends string,\n> = {\n [K in keyof F]: F[K] & {\n visibleWhen?: TypedPredicate<P>;\n enabledWhen?: TypedPredicate<P>;\n requiredWhen?: TypedPredicate<P>;\n } & (F[K] extends { kind: 'select' }\n ? { options: TypedOptionsSource<P> | readonly FormOption[] }\n : {}) &\n (F[K] extends { kind: 'radio' }\n ? { options: TypedOptionsSource<P> | readonly FormOption[] }\n : {}) & {\n computeFrom?: {\n computeKey: string;\n deps: P[];\n mode?: 'change' | 'blur-xs' | 'submit';\n readOnly?: boolean;\n };\n };\n};\n\nexport function defineFormSpec<\n M extends AnySchemaModel,\n F extends readonly AnyFieldLike[],\n>(spec: {\n meta: FormSpec<M>['meta'];\n model: M;\n fields: EnhanceFields<F, PathOfFields<F>>;\n policy?: FormSpec<M>['policy'];\n actions?: FormSpec<M>['actions'];\n renderHints?: FormSpec<M>['renderHints'];\n constraints?: {\n key: string;\n messageI18n: string;\n paths: PathOfFields<F>[];\n args?: Record<string, unknown>;\n }[];\n}): FormSpec<M> {\n return spec as unknown as FormSpec<M>;\n}\n"],"mappings":"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"}
@@ -1,75 +0,0 @@
1
- import { cn } from "./utils.js";
2
- import { TextClassContext } from "./text.js";
3
- import "react";
4
- import { jsx } from "react/jsx-runtime";
5
- import { cva } from "class-variance-authority";
6
- import { Pressable } from "react-native";
7
-
8
- //#region ../ui-kit/dist/ui/button.js
9
- const buttonVariants = cva("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", {
10
- variants: {
11
- variant: {
12
- default: "bg-primary web:hover:opacity-90 active:opacity-90",
13
- destructive: "bg-destructive web:hover:opacity-90 active:opacity-90",
14
- outline: "border border-input bg-background web:hover:bg-accent web:hover:text-accent-foreground active:bg-accent",
15
- secondary: "bg-secondary web:hover:opacity-80 active:opacity-80",
16
- ghost: "web:hover:bg-accent web:hover:text-accent-foreground active:bg-accent",
17
- link: "web:underline-offset-4 web:hover:underline web:focus:underline"
18
- },
19
- size: {
20
- default: "h-10 px-4 py-2 native:h-12 native:px-5 native:py-3",
21
- sm: "h-9 rounded-md px-3",
22
- lg: "h-11 rounded-md px-8 native:h-14",
23
- icon: "h-10 w-10"
24
- }
25
- },
26
- defaultVariants: {
27
- variant: "default",
28
- size: "default"
29
- }
30
- });
31
- const buttonTextVariants = cva("web:whitespace-nowrap text-sm native:text-base font-medium text-foreground web:transition-colors", {
32
- variants: {
33
- variant: {
34
- default: "text-primary-foreground",
35
- destructive: "text-destructive-foreground",
36
- outline: "group-active:text-accent-foreground",
37
- secondary: "text-secondary-foreground group-active:text-secondary-foreground",
38
- ghost: "group-active:text-accent-foreground",
39
- link: "text-primary group-active:underline"
40
- },
41
- size: {
42
- default: "",
43
- sm: "",
44
- lg: "native:text-lg",
45
- icon: ""
46
- }
47
- },
48
- defaultVariants: {
49
- variant: "default",
50
- size: "default"
51
- }
52
- });
53
- function Button({ ref, className, variant, size,...props }) {
54
- return /* @__PURE__ */ jsx(TextClassContext.Provider, {
55
- value: buttonTextVariants({
56
- variant,
57
- size,
58
- className: "web:pointer-events-none"
59
- }),
60
- children: /* @__PURE__ */ jsx(Pressable, {
61
- className: cn(props.disabled && "web:pointer-events-none opacity-50", buttonVariants({
62
- variant,
63
- size,
64
- className
65
- })),
66
- ref,
67
- role: "button",
68
- ...props
69
- })
70
- });
71
- }
72
-
73
- //#endregion
74
- export { Button };
75
- //# sourceMappingURL=button.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"button.js","names":[],"sources":["../../../../../ui-kit/dist/ui/button.js"],"sourcesContent":["import { cn } from \"./utils.js\";\nimport { TextClassContext } from \"./text.js\";\nimport \"react\";\nimport { Pressable } from \"react-native\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { cva } from \"class-variance-authority\";\n\n//#region ui/button.tsx\nconst buttonVariants = cva(\"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\tvariants: {\n\t\tvariant: {\n\t\t\tdefault: \"bg-primary web:hover:opacity-90 active:opacity-90\",\n\t\t\tdestructive: \"bg-destructive web:hover:opacity-90 active:opacity-90\",\n\t\t\toutline: \"border border-input bg-background web:hover:bg-accent web:hover:text-accent-foreground active:bg-accent\",\n\t\t\tsecondary: \"bg-secondary web:hover:opacity-80 active:opacity-80\",\n\t\t\tghost: \"web:hover:bg-accent web:hover:text-accent-foreground active:bg-accent\",\n\t\t\tlink: \"web:underline-offset-4 web:hover:underline web:focus:underline\"\n\t\t},\n\t\tsize: {\n\t\t\tdefault: \"h-10 px-4 py-2 native:h-12 native:px-5 native:py-3\",\n\t\t\tsm: \"h-9 rounded-md px-3\",\n\t\t\tlg: \"h-11 rounded-md px-8 native:h-14\",\n\t\t\ticon: \"h-10 w-10\"\n\t\t}\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"default\",\n\t\tsize: \"default\"\n\t}\n});\nconst buttonTextVariants = cva(\"web:whitespace-nowrap text-sm native:text-base font-medium text-foreground web:transition-colors\", {\n\tvariants: {\n\t\tvariant: {\n\t\t\tdefault: \"text-primary-foreground\",\n\t\t\tdestructive: \"text-destructive-foreground\",\n\t\t\toutline: \"group-active:text-accent-foreground\",\n\t\t\tsecondary: \"text-secondary-foreground group-active:text-secondary-foreground\",\n\t\t\tghost: \"group-active:text-accent-foreground\",\n\t\t\tlink: \"text-primary group-active:underline\"\n\t\t},\n\t\tsize: {\n\t\t\tdefault: \"\",\n\t\t\tsm: \"\",\n\t\t\tlg: \"native:text-lg\",\n\t\t\ticon: \"\"\n\t\t}\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"default\",\n\t\tsize: \"default\"\n\t}\n});\nfunction Button({ ref, className, variant, size,...props }) {\n\treturn /* @__PURE__ */ jsx(TextClassContext.Provider, {\n\t\tvalue: buttonTextVariants({\n\t\t\tvariant,\n\t\t\tsize,\n\t\t\tclassName: \"web:pointer-events-none\"\n\t\t}),\n\t\tchildren: /* @__PURE__ */ jsx(Pressable, {\n\t\t\tclassName: cn(props.disabled && \"web:pointer-events-none opacity-50\", buttonVariants({\n\t\t\t\tvariant,\n\t\t\t\tsize,\n\t\t\t\tclassName\n\t\t\t})),\n\t\t\tref,\n\t\t\trole: \"button\",\n\t\t\t...props\n\t\t})\n\t});\n}\n\n//#endregion\nexport { Button, buttonTextVariants, buttonVariants };\n//# sourceMappingURL=button.js.map"],"mappings":";;;;;;;;AAQA,MAAM,iBAAiB,IAAI,4NAA4N;CACtP,UAAU;EACT,SAAS;GACR,SAAS;GACT,aAAa;GACb,SAAS;GACT,WAAW;GACX,OAAO;GACP,MAAM;GACN;EACD,MAAM;GACL,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,MAAM;GACN;EACD;CACD,iBAAiB;EAChB,SAAS;EACT,MAAM;EACN;CACD,CAAC;AACF,MAAM,qBAAqB,IAAI,oGAAoG;CAClI,UAAU;EACT,SAAS;GACR,SAAS;GACT,aAAa;GACb,SAAS;GACT,WAAW;GACX,OAAO;GACP,MAAM;GACN;EACD,MAAM;GACL,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,MAAM;GACN;EACD;CACD,iBAAiB;EAChB,SAAS;EACT,MAAM;EACN;CACD,CAAC;AACF,SAAS,OAAO,EAAE,KAAK,WAAW,SAAS,KAAK,GAAG,SAAS;AAC3D,QAAuB,oBAAI,iBAAiB,UAAU;EACrD,OAAO,mBAAmB;GACzB;GACA;GACA,WAAW;GACX,CAAC;EACF,UAA0B,oBAAI,WAAW;GACxC,WAAW,GAAG,MAAM,YAAY,sCAAsC,eAAe;IACpF;IACA;IACA;IACA,CAAC,CAAC;GACH;GACA,MAAM;GACN,GAAG;GACH,CAAC;EACF,CAAC"}
@@ -1,63 +0,0 @@
1
- import { cn } from "./utils.js";
2
- import { jsx } from "react/jsx-runtime";
3
- import { cva } from "class-variance-authority";
4
- import { View } from "react-native";
5
-
6
- //#region ../ui-kit/dist/ui/empty.js
7
- function Empty({ className,...props }) {
8
- return /* @__PURE__ */ jsx(View, {
9
- "data-slot": "empty",
10
- className: cn("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", className),
11
- ...props
12
- });
13
- }
14
- function EmptyHeader({ className,...props }) {
15
- return /* @__PURE__ */ jsx(View, {
16
- "data-slot": "empty-header",
17
- className: cn("flex max-w-sm flex-col items-center gap-2 text-center", className),
18
- ...props
19
- });
20
- }
21
- const emptyMediaVariants = cva("flex shrink-0 items-center justify-center mb-2 [&_svg]:pointer-events-none [&_svg]:shrink-0", {
22
- variants: { variant: {
23
- default: "bg-transparent",
24
- icon: "bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6"
25
- } },
26
- defaultVariants: { variant: "default" }
27
- });
28
- function EmptyMedia({ className, variant = "default",...props }) {
29
- return /* @__PURE__ */ jsx(View, {
30
- "data-slot": "empty-icon",
31
- "data-variant": variant,
32
- className: cn(emptyMediaVariants({
33
- variant,
34
- className
35
- })),
36
- ...props
37
- });
38
- }
39
- function EmptyTitle({ className,...props }) {
40
- return /* @__PURE__ */ jsx(View, {
41
- "data-slot": "empty-title",
42
- className: cn("text-lg font-medium tracking-tight", className),
43
- ...props
44
- });
45
- }
46
- function EmptyDescription({ className,...props }) {
47
- return /* @__PURE__ */ jsx(View, {
48
- "data-slot": "empty-description",
49
- className: cn("text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4", className),
50
- ...props
51
- });
52
- }
53
- function EmptyContent({ className,...props }) {
54
- return /* @__PURE__ */ jsx(View, {
55
- "data-slot": "empty-content",
56
- className: cn("flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance", className),
57
- ...props
58
- });
59
- }
60
-
61
- //#endregion
62
- export { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle };
63
- //# sourceMappingURL=empty.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"empty.js","names":[],"sources":["../../../../../ui-kit/dist/ui/empty.js"],"sourcesContent":["import { cn } from \"./utils.js\";\nimport { View } from \"react-native\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { cva } from \"class-variance-authority\";\n\n//#region ui/empty.tsx\nfunction Empty({ className,...props }) {\n\treturn /* @__PURE__ */ jsx(View, {\n\t\t\"data-slot\": \"empty\",\n\t\tclassName: cn(\"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\", className),\n\t\t...props\n\t});\n}\nfunction EmptyHeader({ className,...props }) {\n\treturn /* @__PURE__ */ jsx(View, {\n\t\t\"data-slot\": \"empty-header\",\n\t\tclassName: cn(\"flex max-w-sm flex-col items-center gap-2 text-center\", className),\n\t\t...props\n\t});\n}\nconst emptyMediaVariants = cva(\"flex shrink-0 items-center justify-center mb-2 [&_svg]:pointer-events-none [&_svg]:shrink-0\", {\n\tvariants: { variant: {\n\t\tdefault: \"bg-transparent\",\n\t\ticon: \"bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6\"\n\t} },\n\tdefaultVariants: { variant: \"default\" }\n});\nfunction EmptyMedia({ className, variant = \"default\",...props }) {\n\treturn /* @__PURE__ */ jsx(View, {\n\t\t\"data-slot\": \"empty-icon\",\n\t\t\"data-variant\": variant,\n\t\tclassName: cn(emptyMediaVariants({\n\t\t\tvariant,\n\t\t\tclassName\n\t\t})),\n\t\t...props\n\t});\n}\nfunction EmptyTitle({ className,...props }) {\n\treturn /* @__PURE__ */ jsx(View, {\n\t\t\"data-slot\": \"empty-title\",\n\t\tclassName: cn(\"text-lg font-medium tracking-tight\", className),\n\t\t...props\n\t});\n}\nfunction EmptyDescription({ className,...props }) {\n\treturn /* @__PURE__ */ jsx(View, {\n\t\t\"data-slot\": \"empty-description\",\n\t\tclassName: cn(\"text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4\", className),\n\t\t...props\n\t});\n}\nfunction EmptyContent({ className,...props }) {\n\treturn /* @__PURE__ */ jsx(View, {\n\t\t\"data-slot\": \"empty-content\",\n\t\tclassName: cn(\"flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance\", className),\n\t\t...props\n\t});\n}\n\n//#endregion\nexport { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle };\n//# sourceMappingURL=empty.js.map"],"mappings":";;;;;;AAMA,SAAS,MAAM,EAAE,UAAU,GAAG,SAAS;AACtC,QAAuB,oBAAI,MAAM;EAChC,aAAa;EACb,WAAW,GAAG,gIAAgI,UAAU;EACxJ,GAAG;EACH,CAAC;;AAEH,SAAS,YAAY,EAAE,UAAU,GAAG,SAAS;AAC5C,QAAuB,oBAAI,MAAM;EAChC,aAAa;EACb,WAAW,GAAG,yDAAyD,UAAU;EACjF,GAAG;EACH,CAAC;;AAEH,MAAM,qBAAqB,IAAI,+FAA+F;CAC7H,UAAU,EAAE,SAAS;EACpB,SAAS;EACT,MAAM;EACN,EAAE;CACH,iBAAiB,EAAE,SAAS,WAAW;CACvC,CAAC;AACF,SAAS,WAAW,EAAE,WAAW,UAAU,UAAU,GAAG,SAAS;AAChE,QAAuB,oBAAI,MAAM;EAChC,aAAa;EACb,gBAAgB;EAChB,WAAW,GAAG,mBAAmB;GAChC;GACA;GACA,CAAC,CAAC;EACH,GAAG;EACH,CAAC;;AAEH,SAAS,WAAW,EAAE,UAAU,GAAG,SAAS;AAC3C,QAAuB,oBAAI,MAAM;EAChC,aAAa;EACb,WAAW,GAAG,sCAAsC,UAAU;EAC9D,GAAG;EACH,CAAC;;AAEH,SAAS,iBAAiB,EAAE,UAAU,GAAG,SAAS;AACjD,QAAuB,oBAAI,MAAM;EAChC,aAAa;EACb,WAAW,GAAG,2GAA2G,UAAU;EACnI,GAAG;EACH,CAAC;;AAEH,SAAS,aAAa,EAAE,UAAU,GAAG,SAAS;AAC7C,QAAuB,oBAAI,MAAM;EAChC,aAAa;EACb,WAAW,GAAG,iFAAiF,UAAU;EACzG,GAAG;EACH,CAAC"}
@@ -1,17 +0,0 @@
1
- import { cn } from "./utils.js";
2
- import "react";
3
- import { jsx } from "react/jsx-runtime";
4
- import { TextInput } from "react-native";
5
-
6
- //#region ../ui-kit/dist/ui/input.js
7
- function Input({ className, placeholderClassName,...props }) {
8
- return /* @__PURE__ */ jsx(TextInput, {
9
- className: cn("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", props.editable === false && "web:cursor-not-allowed opacity-50", className),
10
- placeholderClassName: cn("text-muted-foreground", placeholderClassName),
11
- ...props
12
- });
13
- }
14
-
15
- //#endregion
16
- export { Input };
17
- //# sourceMappingURL=input.js.map