@contractspec/lib.design-system 3.11.2 → 4.1.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 (409) hide show
  1. package/README.md +3 -2
  2. package/dist/browser/components/atoms/InputPassword.js +1 -0
  3. package/dist/browser/components/data-view/DataViewRenderer.js +1 -1
  4. package/dist/browser/components/forms/controls/index.js +1 -1
  5. package/dist/browser/components/legal/templates/ContactTemplate.js +1 -1
  6. package/dist/browser/components/list/List.js +1 -0
  7. package/dist/browser/components/list/index.js +1 -0
  8. package/dist/browser/components/molecules/FiltersToolbar.js +1 -1
  9. package/dist/browser/components/molecules/Tabs.js +1 -0
  10. package/dist/browser/components/typography/Typography.js +1 -0
  11. package/dist/browser/components/typography/index.js +1 -0
  12. package/dist/browser/controls.js +1 -0
  13. package/dist/browser/forms.js +1 -0
  14. package/dist/browser/hooks/useListUrlState.js +1 -1
  15. package/dist/browser/index.js +1 -1
  16. package/dist/browser/layout.js +1 -0
  17. package/dist/browser/list.js +1 -0
  18. package/dist/browser/renderers/form-contract/renderer.js +1 -1
  19. package/dist/browser/renderers/form-contract/shell.js +1 -1
  20. package/dist/browser/typography.js +1 -0
  21. package/dist/components/atoms/{ButtonLink.mobile.d.ts → ButtonLink.native.d.ts} +1 -1
  22. package/dist/components/atoms/InputPassword.d.ts +15 -0
  23. package/dist/components/atoms/InputPassword.js +1 -0
  24. package/dist/components/atoms/InputPassword.native.d.ts +17 -0
  25. package/dist/components/atoms/Link.native.d.ts +1 -1
  26. package/dist/components/data-view/DataViewRenderer.d.ts +3 -3
  27. package/dist/components/data-view/DataViewRenderer.js +1 -1
  28. package/dist/components/data-view/{DataViewRenderer.mobile.d.ts → DataViewRenderer.native.d.ts} +3 -3
  29. package/dist/components/forms/controls/index.d.ts +1 -0
  30. package/dist/components/forms/controls/index.js +1 -1
  31. package/dist/components/legal/templates/ContactTemplate.js +1 -1
  32. package/dist/components/list/List.d.ts +6 -0
  33. package/dist/components/list/List.js +1 -0
  34. package/dist/components/list/List.native.d.ts +6 -0
  35. package/dist/components/list/index.d.ts +1 -0
  36. package/dist/components/list/index.js +1 -0
  37. package/dist/components/molecules/FiltersToolbar.d.ts +1 -0
  38. package/dist/components/molecules/FiltersToolbar.js +1 -1
  39. package/dist/components/molecules/Tabs.d.ts +32 -0
  40. package/dist/components/molecules/Tabs.js +1 -0
  41. package/dist/components/molecules/Tabs.native.d.ts +32 -0
  42. package/dist/components/organisms/{AppHeader.mobile.d.ts → AppHeader.native.d.ts} +1 -1
  43. package/dist/components/typography/Typography.d.ts +19 -0
  44. package/dist/components/typography/Typography.js +1 -0
  45. package/dist/components/typography/Typography.native.d.ts +19 -0
  46. package/dist/components/typography/index.d.ts +1 -0
  47. package/dist/components/typography/index.js +1 -0
  48. package/dist/controls.d.ts +1 -0
  49. package/dist/controls.js +1 -0
  50. package/dist/forms.d.ts +1 -0
  51. package/dist/forms.js +1 -0
  52. package/dist/hooks/useListUrlState.d.ts +3 -1
  53. package/dist/hooks/useListUrlState.js +1 -1
  54. package/dist/index.d.ts +4 -0
  55. package/dist/index.js +1 -1
  56. package/dist/layout.d.ts +1 -0
  57. package/dist/layout.js +1 -0
  58. package/dist/list.d.ts +1 -0
  59. package/dist/list.js +1 -0
  60. package/dist/native/components/agent/AgentMonitor.js +1 -0
  61. package/dist/native/components/agent/ApprovalQueue.js +1 -0
  62. package/dist/native/components/atoms/ActionButtons.js +1 -0
  63. package/dist/native/components/atoms/Button.js +1 -0
  64. package/dist/native/components/atoms/ButtonLink.js +1 -0
  65. package/dist/{browser/components/atoms/ButtonLink.mobile.js → native/components/atoms/ButtonLink.native.js} +1 -1
  66. package/dist/native/components/atoms/Cta.js +1 -0
  67. package/dist/native/components/atoms/DataChips.js +1 -0
  68. package/dist/native/components/atoms/EmptyState.js +1 -0
  69. package/dist/native/components/atoms/ErrorState.js +1 -0
  70. package/dist/native/components/atoms/ErrorState.native.js +1 -0
  71. package/dist/native/components/atoms/Input.js +1 -0
  72. package/dist/native/components/atoms/InputPassword.js +1 -0
  73. package/dist/native/components/atoms/InputPassword.native.js +1 -0
  74. package/dist/native/components/atoms/Link.js +1 -0
  75. package/dist/native/components/atoms/Link.native.js +1 -0
  76. package/dist/native/components/atoms/LoaderCircular.js +1 -0
  77. package/dist/native/components/atoms/NavBrand.js +1 -0
  78. package/dist/native/components/atoms/RankBadge.js +1 -0
  79. package/dist/native/components/atoms/ScoreBar.js +1 -0
  80. package/dist/native/components/atoms/Stepper.js +1 -0
  81. package/dist/native/components/atoms/Textarea.js +1 -0
  82. package/dist/native/components/data-table/DataTable.js +1 -0
  83. package/dist/native/components/data-table/DataTableToolbar.js +1 -0
  84. package/dist/{browser/components/data-table/DataTableToolbar.mobile.js → native/components/data-table/DataTableToolbar.native.js} +1 -1
  85. package/dist/native/components/data-table/DataTableToolbar.shared.js +1 -0
  86. package/dist/native/components/data-view/DataViewDetail.js +1 -0
  87. package/dist/native/components/data-view/DataViewList.js +1 -0
  88. package/dist/native/components/data-view/DataViewRenderer.js +1 -0
  89. package/dist/native/components/data-view/DataViewRenderer.native.js +1 -0
  90. package/dist/native/components/data-view/DataViewTable.js +1 -0
  91. package/dist/native/components/data-view/utils.js +1 -0
  92. package/dist/native/components/forms/ActionForm.js +1 -0
  93. package/dist/native/components/forms/FormCardLayout.js +1 -0
  94. package/dist/native/components/forms/FormDialog.js +1 -0
  95. package/dist/native/components/forms/FormLayout.js +1 -0
  96. package/dist/native/components/forms/FormOneByOneLayout.js +1 -0
  97. package/dist/native/components/forms/FormStepsLayout.js +1 -0
  98. package/dist/native/components/forms/ZodForm.js +1 -0
  99. package/dist/native/components/forms/controls/Autocomplete.js +1 -0
  100. package/dist/native/components/forms/controls/ChoiceControls.js +1 -0
  101. package/dist/native/components/forms/controls/Combobox.js +1 -0
  102. package/dist/native/components/forms/controls/DateTimeControls.js +1 -0
  103. package/dist/{components/forms/controls/DropdownMenu.mobile.js → native/components/forms/controls/DropdownMenu.js} +1 -1
  104. package/dist/native/components/forms/controls/Field.js +1 -0
  105. package/dist/native/components/forms/controls/InputGroup.js +1 -0
  106. package/dist/native/components/forms/controls/InputOTP.js +1 -0
  107. package/dist/native/components/forms/controls/LoadingButton.js +1 -0
  108. package/dist/native/components/forms/controls/NativeSelect.js +1 -0
  109. package/dist/native/components/forms/controls/Select.js +1 -0
  110. package/dist/native/components/forms/controls/index.js +1 -0
  111. package/dist/native/components/forms/index.js +1 -0
  112. package/dist/native/components/layout/Stack.js +1 -0
  113. package/dist/native/components/layout/index.js +1 -0
  114. package/dist/native/components/legal/atoms/DefinitionList.js +1 -0
  115. package/dist/native/components/legal/atoms/KeyValueList.js +1 -0
  116. package/dist/native/components/legal/atoms/LegalCallout.js +1 -0
  117. package/dist/native/components/legal/atoms/LegalHeading.js +1 -0
  118. package/dist/native/components/legal/atoms/LegalList.js +1 -0
  119. package/dist/native/components/legal/atoms/LegalSection.js +1 -0
  120. package/dist/native/components/legal/atoms/LegalText.js +1 -0
  121. package/dist/native/components/legal/molecules/Consent.js +1 -0
  122. package/dist/native/components/legal/molecules/ContactFields.js +1 -0
  123. package/dist/native/components/legal/molecules/LegalMeta.js +1 -0
  124. package/dist/native/components/legal/molecules/LegalTOC.js +1 -0
  125. package/dist/native/components/legal/organisms/ContactForm.js +1 -0
  126. package/dist/native/components/legal/organisms/GDPRDataRequest.js +1 -0
  127. package/dist/native/components/legal/organisms/GDPRRights.js +1 -0
  128. package/dist/native/components/legal/organisms/LegalPageLayout.js +1 -0
  129. package/dist/native/components/legal/templates/ContactTemplate.js +1 -0
  130. package/dist/native/components/legal/templates/CookiesTemplate.js +1 -0
  131. package/dist/native/components/legal/templates/PrivacyTemplate.js +1 -0
  132. package/dist/native/components/legal/templates/SalesTermsTemplate.js +1 -0
  133. package/dist/native/components/legal/templates/TermsTemplate.js +1 -0
  134. package/dist/native/components/list/List.js +1 -0
  135. package/dist/native/components/list/List.native.js +1 -0
  136. package/dist/native/components/list/index.js +1 -0
  137. package/dist/native/components/marketing/MarketingCard.js +1 -0
  138. package/dist/native/components/marketing/MarketingCardsSection.js +1 -0
  139. package/dist/native/components/marketing/MarketingComparisonSection.js +1 -0
  140. package/dist/native/components/marketing/MarketingIconCard.js +1 -0
  141. package/dist/native/components/marketing/MarketingSection.js +1 -0
  142. package/dist/native/components/marketing/MarketingStepCard.js +1 -0
  143. package/dist/native/components/molecules/AiLinkButton.js +1 -0
  144. package/dist/native/components/molecules/Breadcrumbs.js +1 -0
  145. package/dist/native/components/molecules/CodeBlock/CodeBlock.js +1 -0
  146. package/dist/native/components/molecules/CodeBlock/index.js +1 -0
  147. package/dist/native/components/molecules/CommandPalette.js +1 -0
  148. package/dist/native/components/molecules/CommandSearchTrigger.js +1 -0
  149. package/dist/native/components/molecules/CommandTabs/CommandTabs.js +1 -0
  150. package/dist/native/components/molecules/CommandTabs/index.js +1 -0
  151. package/dist/native/components/molecules/CopyButton/CopyButton.js +1 -0
  152. package/dist/native/components/molecules/CopyButton/index.js +1 -0
  153. package/dist/native/components/molecules/CopyButton/types.js +0 -0
  154. package/dist/native/components/molecules/DimensionScoresCard.js +1 -0
  155. package/dist/native/components/molecules/DropdownMenu.js +0 -0
  156. package/dist/native/components/molecules/EntityCard.js +1 -0
  157. package/dist/native/components/molecules/FiltersToolbar.js +1 -0
  158. package/dist/{browser/components/molecules/FiltersToolbar.mobile.js → native/components/molecules/FiltersToolbar.native.js} +1 -1
  159. package/dist/native/components/molecules/HoverPreview.js +1 -0
  160. package/dist/native/components/molecules/InstallCommand/InstallCommand.js +1 -0
  161. package/dist/native/components/molecules/InstallCommand/index.js +1 -0
  162. package/dist/native/components/molecules/InstallCommand/types.js +0 -0
  163. package/dist/native/components/molecules/LangSwitch.js +1 -0
  164. package/dist/native/components/molecules/LangSwitchDropdown.js +1 -0
  165. package/dist/native/components/molecules/LoaderBlock.js +1 -0
  166. package/dist/{browser/components/molecules/LoaderBlock.mobile.js → native/components/molecules/LoaderBlock.native.js} +1 -1
  167. package/dist/native/components/molecules/MarkdownRenderer/MarkdownRenderer.js +2 -0
  168. package/dist/native/components/molecules/MarkdownRenderer/formatInlineMarkdown.js +1 -0
  169. package/dist/native/components/molecules/MarkdownRenderer/index.js +1 -0
  170. package/dist/native/components/molecules/MarkdownRenderer/renderMarkdownTable.js +1 -0
  171. package/dist/native/components/molecules/MarkdownRenderer/types.js +0 -0
  172. package/dist/native/components/molecules/MobileNavMenu.js +1 -0
  173. package/dist/native/components/molecules/NavItemCard.js +1 -0
  174. package/dist/native/components/molecules/NavMain.js +1 -0
  175. package/dist/native/components/molecules/NavUser.js +1 -0
  176. package/dist/native/components/molecules/OverviewCard.js +1 -0
  177. package/dist/native/components/molecules/SkeletonBlock/index.js +1 -0
  178. package/dist/native/components/molecules/SkeletonBlock/types.js +0 -0
  179. package/dist/native/components/molecules/SkeletonCircle/index.js +1 -0
  180. package/dist/native/components/molecules/SkeletonCircle/types.js +0 -0
  181. package/dist/native/components/molecules/SkeletonList/index.js +1 -0
  182. package/dist/native/components/molecules/SkeletonList/types.js +0 -0
  183. package/dist/native/components/molecules/StatCard.js +1 -0
  184. package/dist/native/components/molecules/StatusChip.js +1 -0
  185. package/dist/native/components/molecules/Tabs.js +1 -0
  186. package/dist/native/components/molecules/Tabs.native.js +1 -0
  187. package/dist/native/components/molecules/hover-previews/Doc.js +1 -0
  188. package/dist/native/components/molecules/hover-previews/Media.js +1 -0
  189. package/dist/native/components/molecules/hover-previews/Simple.js +1 -0
  190. package/dist/native/components/molecules/hover-previews/Stats.js +1 -0
  191. package/dist/native/components/molecules/hover-previews/User.js +1 -0
  192. package/dist/native/components/organisms/AcademyLayout.js +1 -0
  193. package/dist/native/components/organisms/AppHeader.js +1 -0
  194. package/dist/{browser/components/organisms/AppHeader.mobile.js → native/components/organisms/AppHeader.native.js} +1 -1
  195. package/dist/native/components/organisms/AppLayout.js +1 -0
  196. package/dist/native/components/organisms/AppSidebar.js +1 -0
  197. package/dist/native/components/organisms/AppSidebar.native.js +0 -0
  198. package/dist/native/components/organisms/EmptyDataList.js +1 -0
  199. package/dist/native/components/organisms/EmptyDataList.types.js +0 -0
  200. package/dist/native/components/organisms/EmptySearchResult.js +1 -0
  201. package/dist/native/components/organisms/FAQSection.js +1 -0
  202. package/dist/native/components/organisms/FeatureCarousel.js +1 -0
  203. package/dist/native/components/organisms/FeaturesSection.js +1 -0
  204. package/dist/native/components/organisms/Footer.js +1 -0
  205. package/dist/native/components/organisms/GridLayout.js +1 -0
  206. package/dist/native/components/organisms/Header.js +1 -0
  207. package/dist/native/components/organisms/HeroResponsive.js +1 -0
  208. package/dist/native/components/organisms/HeroSection.js +1 -0
  209. package/dist/native/components/organisms/ListCardPage.js +1 -0
  210. package/dist/native/components/organisms/ListGridPage.js +1 -0
  211. package/dist/native/components/organisms/ListPageResponsive.js +1 -0
  212. package/dist/native/components/organisms/ListTablePage.js +1 -0
  213. package/dist/native/components/organisms/MarketingHeader.js +1 -0
  214. package/dist/native/components/organisms/MarketingHeaderDesktop.js +1 -0
  215. package/dist/native/components/organisms/MarketingHeaderMobile.js +1 -0
  216. package/dist/native/components/organisms/MarketingLayout.js +1 -0
  217. package/dist/native/components/organisms/ModelComparisonView.js +1 -0
  218. package/dist/native/components/organisms/PageHeaderResponsive.js +1 -0
  219. package/dist/{browser/components/organisms/PageHeaderResponsive.mobile.js → native/components/organisms/PageHeaderResponsive.native.js} +1 -1
  220. package/dist/native/components/organisms/PricingCarousel.js +1 -0
  221. package/dist/native/components/organisms/PricingSection.js +1 -0
  222. package/dist/native/components/organisms/TestimonialCarousel.js +1 -0
  223. package/dist/native/components/primitives/control.js +1 -0
  224. package/dist/native/components/primitives/themed.js +1 -0
  225. package/dist/native/components/providers/PackageManagerProvider.js +1 -0
  226. package/dist/native/components/templates/lists/ListPageTemplate/index.js +1 -0
  227. package/dist/{browser/components/templates/lists/ListPageTemplate/index.mobile.js → native/components/templates/lists/ListPageTemplate/index.native.js} +1 -1
  228. package/dist/native/components/templates/lists/ListPageTemplate/types.js +0 -0
  229. package/dist/native/components/typography/Typography.js +1 -0
  230. package/dist/native/components/typography/Typography.native.js +1 -0
  231. package/dist/native/components/typography/index.js +1 -0
  232. package/dist/native/components/visualization/ComparisonView.js +1 -0
  233. package/dist/{browser/components/visualization/ComparisonView.mobile.js → native/components/visualization/ComparisonView.native.js} +1 -1
  234. package/dist/native/components/visualization/TimelineView.js +1 -0
  235. package/dist/{browser/components/visualization/TimelineView.mobile.js → native/components/visualization/TimelineView.native.js} +1 -1
  236. package/dist/native/components/visualization/VisualizationCard.js +1 -0
  237. package/dist/native/components/visualization/VisualizationCard.native.js +1 -0
  238. package/dist/native/components/visualization/VisualizationGrid.js +1 -0
  239. package/dist/native/components/visualization/VisualizationRenderer.js +1 -0
  240. package/dist/native/components/visualization/types.js +0 -0
  241. package/dist/native/contracts.typecheck.js +1 -0
  242. package/dist/native/controls.js +1 -0
  243. package/dist/native/design-system.feature.js +1 -0
  244. package/dist/native/forms.js +1 -0
  245. package/dist/native/hooks/useListUrlState.js +1 -0
  246. package/dist/native/i18n/translation.js +1 -0
  247. package/dist/native/index.js +1 -0
  248. package/dist/native/layout.js +1 -0
  249. package/dist/native/lib/keyboard.js +1 -0
  250. package/dist/native/lib/utils.js +1 -0
  251. package/dist/native/list.js +1 -0
  252. package/dist/native/platform/useColorScheme.js +1 -0
  253. package/dist/native/platform/useReducedMotion.js +1 -0
  254. package/dist/native/platform/useResponsive.js +1 -0
  255. package/dist/native/platform/withPlatformUI.js +1 -0
  256. package/dist/native/renderers/form-contract/renderer.js +1 -0
  257. package/dist/native/renderers/form-contract/rich-fields.js +1 -0
  258. package/dist/native/renderers/form-contract/shell.js +1 -0
  259. package/dist/native/renderers/form-contract/values.js +1 -0
  260. package/dist/native/renderers/form-contract.js +1 -0
  261. package/dist/native/renderers/index.js +1 -0
  262. package/dist/native/theme/contracts.js +1 -0
  263. package/dist/native/theme/index.js +1 -0
  264. package/dist/native/theme/runtime-resolvers.js +1 -0
  265. package/dist/native/theme/runtime.js +1 -0
  266. package/dist/native/theme/tailwind-config.js +1 -0
  267. package/dist/native/theme/tailwind-css.js +9 -0
  268. package/dist/native/theme/tailwind-variables.js +1 -0
  269. package/dist/native/theme/tailwind.js +1 -0
  270. package/dist/native/theme/tokenBridge.js +1 -0
  271. package/dist/native/theme/tokens.js +1 -0
  272. package/dist/native/theme/variants.js +1 -0
  273. package/dist/native/types/nativewind-env.d.js +0 -0
  274. package/dist/native/types/navigation.js +0 -0
  275. package/dist/native/typography.js +1 -0
  276. package/dist/renderers/form-contract/renderer.js +1 -1
  277. package/dist/renderers/form-contract/shell.d.ts +5 -0
  278. package/dist/renderers/form-contract/shell.js +1 -1
  279. package/dist/typography.d.ts +1 -0
  280. package/dist/typography.js +1 -0
  281. package/package.json +3052 -22
  282. package/dist/browser/components/atoms/ErrorState.mobile.js +0 -1
  283. package/dist/browser/components/data-view/DataViewRenderer.mobile.js +0 -1
  284. package/dist/browser/components/visualization/VisualizationCard.mobile.js +0 -1
  285. package/dist/components/agent/ApprovalQueue.mobile.js +0 -1
  286. package/dist/components/atoms/Button.mobile.js +0 -1
  287. package/dist/components/atoms/ButtonLink.mobile.js +0 -1
  288. package/dist/components/atoms/Cta.mobile.js +0 -1
  289. package/dist/components/atoms/ErrorState.mobile.js +0 -1
  290. package/dist/components/atoms/Input.mobile.js +0 -1
  291. package/dist/components/atoms/LoaderCircular.mobile.js +0 -1
  292. package/dist/components/atoms/Textarea.mobile.js +0 -1
  293. package/dist/components/data-table/DataTable.mobile.js +0 -1
  294. package/dist/components/data-table/DataTableToolbar.mobile.js +0 -1
  295. package/dist/components/data-view/DataViewRenderer.mobile.js +0 -1
  296. package/dist/components/data-view/DataViewTable.mobile.js +0 -1
  297. package/dist/components/forms/controls/Autocomplete.mobile.js +0 -1
  298. package/dist/components/forms/controls/ChoiceControls.mobile.js +0 -1
  299. package/dist/components/forms/controls/Combobox.mobile.js +0 -1
  300. package/dist/components/forms/controls/DateTimeControls.mobile.js +0 -1
  301. package/dist/components/forms/controls/Field.mobile.js +0 -1
  302. package/dist/components/forms/controls/InputGroup.mobile.js +0 -1
  303. package/dist/components/forms/controls/InputOTP.mobile.js +0 -1
  304. package/dist/components/forms/controls/LoadingButton.mobile.js +0 -1
  305. package/dist/components/forms/controls/NativeSelect.mobile.js +0 -1
  306. package/dist/components/forms/controls/Select.mobile.js +0 -1
  307. package/dist/components/layout/Stack.mobile.js +0 -1
  308. package/dist/components/molecules/FiltersToolbar.mobile.js +0 -1
  309. package/dist/components/molecules/LoaderBlock.mobile.js +0 -1
  310. package/dist/components/molecules/SkeletonBlock/index.mobile.js +0 -1
  311. package/dist/components/molecules/SkeletonCircle/index.mobile.js +0 -1
  312. package/dist/components/molecules/SkeletonList/index.mobile.js +0 -1
  313. package/dist/components/native/BottomTabs.mobile.js +0 -1
  314. package/dist/components/native/FlatListScreen.mobile.js +0 -1
  315. package/dist/components/native/SheetMenu.mobile.js +0 -1
  316. package/dist/components/organisms/AppHeader.mobile.js +0 -1
  317. package/dist/components/organisms/EmptyDataList.mobile.js +0 -1
  318. package/dist/components/organisms/Header.mobile.js +0 -1
  319. package/dist/components/organisms/ListTablePage.mobile.js +0 -1
  320. package/dist/components/organisms/PageHeaderResponsive.mobile.js +0 -1
  321. package/dist/components/templates/lists/ListPageTemplate/index.mobile.js +0 -1
  322. package/dist/components/visualization/ComparisonView.mobile.js +0 -1
  323. package/dist/components/visualization/TimelineView.mobile.js +0 -1
  324. package/dist/components/visualization/VisualizationCard.mobile.js +0 -1
  325. package/dist/components/visualization/VisualizationGrid.mobile.js +0 -1
  326. package/dist/components/visualization/VisualizationRenderer.mobile.js +0 -1
  327. package/dist/platform/useColorScheme.mobile.js +0 -1
  328. package/dist/platform/useReducedMotion.mobile.js +0 -1
  329. package/dist/platform/useResponsive.mobile.js +0 -1
  330. /package/dist/components/agent/{ApprovalQueue.mobile.d.ts → ApprovalQueue.native.d.ts} +0 -0
  331. /package/dist/components/atoms/{Button.mobile.d.ts → Button.native.d.ts} +0 -0
  332. /package/dist/components/atoms/{Cta.mobile.d.ts → Cta.native.d.ts} +0 -0
  333. /package/dist/components/atoms/{ErrorState.mobile.d.ts → ErrorState.native.d.ts} +0 -0
  334. /package/dist/components/atoms/{Input.mobile.d.ts → Input.native.d.ts} +0 -0
  335. /package/dist/components/atoms/{LoaderCircular.mobile.d.ts → LoaderCircular.native.d.ts} +0 -0
  336. /package/dist/components/atoms/{Textarea.mobile.d.ts → Textarea.native.d.ts} +0 -0
  337. /package/dist/components/data-table/{DataTable.mobile.d.ts → DataTable.native.d.ts} +0 -0
  338. /package/dist/components/data-table/{DataTableToolbar.mobile.d.ts → DataTableToolbar.native.d.ts} +0 -0
  339. /package/dist/components/data-view/{DataViewTable.mobile.d.ts → DataViewTable.native.d.ts} +0 -0
  340. /package/dist/components/forms/controls/{Autocomplete.mobile.d.ts → Autocomplete.native.d.ts} +0 -0
  341. /package/dist/components/forms/controls/{ChoiceControls.mobile.d.ts → ChoiceControls.native.d.ts} +0 -0
  342. /package/dist/components/forms/controls/{Combobox.mobile.d.ts → Combobox.native.d.ts} +0 -0
  343. /package/dist/components/forms/controls/{DateTimeControls.mobile.d.ts → DateTimeControls.native.d.ts} +0 -0
  344. /package/dist/components/forms/controls/{DropdownMenu.mobile.d.ts → DropdownMenu.native.d.ts} +0 -0
  345. /package/dist/components/forms/controls/{Field.mobile.d.ts → Field.native.d.ts} +0 -0
  346. /package/dist/components/forms/controls/{InputGroup.mobile.d.ts → InputGroup.native.d.ts} +0 -0
  347. /package/dist/components/forms/controls/{InputOTP.mobile.d.ts → InputOTP.native.d.ts} +0 -0
  348. /package/dist/components/forms/controls/{LoadingButton.mobile.d.ts → LoadingButton.native.d.ts} +0 -0
  349. /package/dist/components/forms/controls/{NativeSelect.mobile.d.ts → NativeSelect.native.d.ts} +0 -0
  350. /package/dist/components/forms/controls/{Select.mobile.d.ts → Select.native.d.ts} +0 -0
  351. /package/dist/components/layout/{Stack.mobile.d.ts → Stack.native.d.ts} +0 -0
  352. /package/dist/components/molecules/{FiltersToolbar.mobile.d.ts → FiltersToolbar.native.d.ts} +0 -0
  353. /package/dist/components/molecules/{LoaderBlock.mobile.d.ts → LoaderBlock.native.d.ts} +0 -0
  354. /package/dist/components/molecules/SkeletonBlock/{index.mobile.d.ts → index.native.d.ts} +0 -0
  355. /package/dist/components/molecules/SkeletonCircle/{index.mobile.d.ts → index.native.d.ts} +0 -0
  356. /package/dist/components/molecules/SkeletonList/{index.mobile.d.ts → index.native.d.ts} +0 -0
  357. /package/dist/components/native/{BottomTabs.mobile.d.ts → BottomTabs.native.d.ts} +0 -0
  358. /package/dist/components/native/{FlatListScreen.mobile.d.ts → FlatListScreen.native.d.ts} +0 -0
  359. /package/dist/components/native/{SheetMenu.mobile.d.ts → SheetMenu.native.d.ts} +0 -0
  360. /package/dist/components/organisms/{AppSidebar.mobile.d.ts → AppSidebar.native.d.ts} +0 -0
  361. /package/dist/components/organisms/{EmptyDataList.mobile.d.ts → EmptyDataList.native.d.ts} +0 -0
  362. /package/dist/components/organisms/{Header.mobile.d.ts → Header.native.d.ts} +0 -0
  363. /package/dist/components/organisms/{ListTablePage.mobile.d.ts → ListTablePage.native.d.ts} +0 -0
  364. /package/dist/components/organisms/{PageHeaderResponsive.mobile.d.ts → PageHeaderResponsive.native.d.ts} +0 -0
  365. /package/dist/components/templates/lists/ListPageTemplate/{index.mobile.d.ts → index.native.d.ts} +0 -0
  366. /package/dist/components/visualization/{ComparisonView.mobile.d.ts → ComparisonView.native.d.ts} +0 -0
  367. /package/dist/components/visualization/{TimelineView.mobile.d.ts → TimelineView.native.d.ts} +0 -0
  368. /package/dist/components/visualization/{VisualizationCard.mobile.d.ts → VisualizationCard.native.d.ts} +0 -0
  369. /package/dist/components/visualization/{VisualizationGrid.mobile.d.ts → VisualizationGrid.native.d.ts} +0 -0
  370. /package/dist/components/visualization/{VisualizationRenderer.mobile.d.ts → VisualizationRenderer.native.d.ts} +0 -0
  371. /package/dist/{browser/components/agent/ApprovalQueue.mobile.js → native/components/agent/ApprovalQueue.native.js} +0 -0
  372. /package/dist/{browser/components/atoms/Button.mobile.js → native/components/atoms/Button.native.js} +0 -0
  373. /package/dist/{browser/components/atoms/Cta.mobile.js → native/components/atoms/Cta.native.js} +0 -0
  374. /package/dist/{browser/components/atoms/Input.mobile.js → native/components/atoms/Input.native.js} +0 -0
  375. /package/dist/{browser/components/atoms/LoaderCircular.mobile.js → native/components/atoms/LoaderCircular.native.js} +0 -0
  376. /package/dist/{browser/components/atoms/Textarea.mobile.js → native/components/atoms/Textarea.native.js} +0 -0
  377. /package/dist/{browser/components/data-table/DataTable.mobile.js → native/components/data-table/DataTable.native.js} +0 -0
  378. /package/dist/{browser/components/data-view/DataViewTable.mobile.js → native/components/data-view/DataViewTable.native.js} +0 -0
  379. /package/dist/{browser/components/forms/controls/Autocomplete.mobile.js → native/components/forms/controls/Autocomplete.native.js} +0 -0
  380. /package/dist/{browser/components/forms/controls/ChoiceControls.mobile.js → native/components/forms/controls/ChoiceControls.native.js} +0 -0
  381. /package/dist/{browser/components/forms/controls/Combobox.mobile.js → native/components/forms/controls/Combobox.native.js} +0 -0
  382. /package/dist/{browser/components/forms/controls/DateTimeControls.mobile.js → native/components/forms/controls/DateTimeControls.native.js} +0 -0
  383. /package/dist/{browser/components/forms/controls/DropdownMenu.mobile.js → native/components/forms/controls/DropdownMenu.native.js} +0 -0
  384. /package/dist/{browser/components/forms/controls/Field.mobile.js → native/components/forms/controls/Field.native.js} +0 -0
  385. /package/dist/{browser/components/forms/controls/InputGroup.mobile.js → native/components/forms/controls/InputGroup.native.js} +0 -0
  386. /package/dist/{browser/components/forms/controls/InputOTP.mobile.js → native/components/forms/controls/InputOTP.native.js} +0 -0
  387. /package/dist/{browser/components/forms/controls/LoadingButton.mobile.js → native/components/forms/controls/LoadingButton.native.js} +0 -0
  388. /package/dist/{browser/components/forms/controls/NativeSelect.mobile.js → native/components/forms/controls/NativeSelect.native.js} +0 -0
  389. /package/dist/{browser/components/forms/controls/Select.mobile.js → native/components/forms/controls/Select.native.js} +0 -0
  390. /package/dist/{browser/components/layout/Stack.mobile.js → native/components/layout/Stack.native.js} +0 -0
  391. /package/dist/{browser/components/organisms/AppSidebar.mobile.js → native/components/molecules/CodeBlock/types.js} +0 -0
  392. /package/dist/{components/organisms/AppSidebar.mobile.js → native/components/molecules/CommandTabs/types.js} +0 -0
  393. /package/dist/{browser/components/molecules/SkeletonBlock/index.mobile.js → native/components/molecules/SkeletonBlock/index.native.js} +0 -0
  394. /package/dist/{browser/components/molecules/SkeletonCircle/index.mobile.js → native/components/molecules/SkeletonCircle/index.native.js} +0 -0
  395. /package/dist/{browser/components/molecules/SkeletonList/index.mobile.js → native/components/molecules/SkeletonList/index.native.js} +0 -0
  396. /package/dist/{browser/components/native/BottomTabs.mobile.js → native/components/native/BottomTabs.native.js} +0 -0
  397. /package/dist/{browser/components/native/FlatListScreen.mobile.js → native/components/native/FlatListScreen.native.js} +0 -0
  398. /package/dist/{browser/components/native/SheetMenu.mobile.js → native/components/native/SheetMenu.native.js} +0 -0
  399. /package/dist/{browser/components/organisms/EmptyDataList.mobile.js → native/components/organisms/EmptyDataList.native.js} +0 -0
  400. /package/dist/{browser/components/organisms/Header.mobile.js → native/components/organisms/Header.native.js} +0 -0
  401. /package/dist/{browser/components/organisms/ListTablePage.mobile.js → native/components/organisms/ListTablePage.native.js} +0 -0
  402. /package/dist/{browser/components/visualization/VisualizationGrid.mobile.js → native/components/visualization/VisualizationGrid.native.js} +0 -0
  403. /package/dist/{browser/components/visualization/VisualizationRenderer.mobile.js → native/components/visualization/VisualizationRenderer.native.js} +0 -0
  404. /package/dist/{browser/platform/useColorScheme.mobile.js → native/platform/useColorScheme.native.js} +0 -0
  405. /package/dist/{browser/platform/useReducedMotion.mobile.js → native/platform/useReducedMotion.native.js} +0 -0
  406. /package/dist/{browser/platform/useResponsive.mobile.js → native/platform/useResponsive.native.js} +0 -0
  407. /package/dist/platform/{useColorScheme.mobile.d.ts → useColorScheme.native.d.ts} +0 -0
  408. /package/dist/platform/{useReducedMotion.mobile.d.ts → useReducedMotion.native.d.ts} +0 -0
  409. /package/dist/platform/{useResponsive.mobile.d.ts → useResponsive.native.d.ts} +0 -0
@@ -1 +1 @@
1
- import*as a from"react";export function useListUrlState({defaults:n,paramKeys:t={q:"q",page:"page",limit:"limit",sort:"sort",filters:"f"},replaceState:d=!0}){const w=a.useCallback(()=>{if(typeof window>"u")return n;const e=new URL(window.location.href).searchParams,c=(f,o)=>{const s=f?Number(f):NaN;return Number.isFinite(s)&&s>0?s:o},r=e.get(t.filters);let i=n.filters;if(r)try{i=JSON.parse(r)}catch{i=n.filters}return{q:e.get(t.q)??n.q,page:c(e.get(t.page),n.page),limit:c(e.get(t.limit),n.limit),sort:e.get(t.sort),filters:i}},[n,t]),[g,F]=a.useState(w),u=a.useCallback((l)=>{if(typeof window>"u")return;const e=new URL(window.location.href),c=e.searchParams,r={...g,...l},i=(o,s)=>{if(s==null||s===""||s==="null")c.delete(o);else c.set(o,s)};i(t.q,r.q||null);i(t.page,String(r.page));i(t.limit,String(r.limit));i(t.sort,r.sort??null);try{const o=JSON.stringify(r.filters??{});i(t.filters,o==="{}"?null:o)}catch{}const f=`${e.pathname}?${c.toString()}${e.hash}`;if(d)window.history.replaceState({},"",f);else window.history.pushState({},"",f);F(r)},[g,t,d]),S=a.useCallback((l,e)=>{u({filters:{...g.filters,[l]:e}})},[g.filters,u]),T=a.useCallback(()=>{u({filters:{},page:1})},[u]);a.useEffect(()=>{const l=()=>F(w());window.addEventListener("popstate",l);return()=>window.removeEventListener("popstate",l)},[w]);return{state:g,setState:u,setFilter:S,clearFilters:T}}
1
+ import{createInitialListFilters as N,sanitizeListUserFilters as _}from"@contractspec/lib.presentation-runtime-core";import*as Q from"react";export function useListUrlState({defaults:E,paramKeys:h={q:"q",page:"page",limit:"limit",sort:"sort",filters:"f"},replaceState:$=!0,filterScope:J}){const Y=Q.useMemo(()=>({...N(J),..._(E.filters,J)}),[E.filters,J]),Z=Q.useCallback(()=>{if(typeof window>"u")return E;const A=new URL(window.location.href).searchParams,V=(X,M)=>{const H=X?Number(X):NaN;return Number.isFinite(H)&&H>0?H:M},C=A.get(h.filters);let B=E.filters;if(C)try{B=_(JSON.parse(C),J)}catch{B=Y}else B=Y;return{q:A.get(h.q)??E.q,page:V(A.get(h.page),E.page),limit:V(A.get(h.limit),E.limit),sort:A.get(h.sort),filters:B}},[Y,E,J,h]),[T,b]=Q.useState(Z),W=Q.useCallback((G)=>{if(typeof window>"u")return;const A=new URL(window.location.href),V=A.searchParams,C={...T,...G,filters:_(G.filters??T.filters,J)},B=(M,H)=>{if(H==null||H===""||H==="null")V.delete(M);else V.set(M,H)};B(h.q,C.q||null);B(h.page,String(C.page));B(h.limit,String(C.limit));B(h.sort,C.sort??null);try{const M=JSON.stringify(C.filters??{});B(h.filters,M==="{}"?null:M)}catch{}const X=`${A.pathname}?${V.toString()}${A.hash}`;if($)window.history.replaceState({},"",X);else window.history.pushState({},"",X);b(C)},[J,T,h,$]),I=Q.useCallback((G,A)=>{W({filters:{...T.filters,[G]:A}})},[T.filters,W]),j=Q.useCallback(()=>{W({filters:{},page:1})},[W]);Q.useEffect(()=>{const G=()=>b(Z());window.addEventListener("popstate",G);return()=>window.removeEventListener("popstate",G)},[Z]);return{state:T,setState:W,setFilter:I,clearFilters:j}}
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export { DateChip, DurationChip, PlaceChip, TimeChip, } from './components/atoms
8
8
  export { EmptyState } from './components/atoms/EmptyState';
9
9
  export { ErrorState } from './components/atoms/ErrorState';
10
10
  export { Input } from './components/atoms/Input';
11
+ export { InputPassword } from './components/atoms/InputPassword';
11
12
  export { Link } from './components/atoms/Link';
12
13
  export { LoaderCircular } from './components/atoms/LoaderCircular';
13
14
  export { NavBrand } from './components/atoms/NavBrand';
@@ -43,6 +44,7 @@ export { CookiesTemplate } from './components/legal/templates/CookiesTemplate';
43
44
  export { PrivacyTemplate } from './components/legal/templates/PrivacyTemplate';
44
45
  export { SalesTermsTemplate } from './components/legal/templates/SalesTermsTemplate';
45
46
  export { TermsTemplate } from './components/legal/templates/TermsTemplate';
47
+ export { List, ListItem, type ListItemProps, type ListProps, } from './components/list';
46
48
  export { MarketingCard, MarketingCardContent, MarketingCardDescription, MarketingCardHeader, MarketingCardTitle, type MarketingCardTone, } from './components/marketing/MarketingCard';
47
49
  export { MarketingCardsSection } from './components/marketing/MarketingCardsSection';
48
50
  export { MarketingComparisonSection } from './components/marketing/MarketingComparisonSection';
@@ -77,6 +79,7 @@ export { SkeletonCircle } from './components/molecules/SkeletonCircle';
77
79
  export { SkeletonList } from './components/molecules/SkeletonList';
78
80
  export { StatCard, StatCardGroup } from './components/molecules/StatCard';
79
81
  export { StatusChip } from './components/molecules/StatusChip';
82
+ export { Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, } from './components/molecules/Tabs';
80
83
  export { AcademyLayout } from './components/organisms/AcademyLayout';
81
84
  export { AppHeader } from './components/organisms/AppHeader';
82
85
  export { AppLayout } from './components/organisms/AppLayout';
@@ -105,6 +108,7 @@ export { PricingSection } from './components/organisms/PricingSection';
105
108
  export { TestimonialCarousel } from './components/organisms/TestimonialCarousel';
106
109
  export { PackageManagerProvider, type PackageManagerProviderProps, usePackageManager, } from './components/providers/PackageManagerProvider';
107
110
  export { ListPageTemplate } from './components/templates/lists/ListPageTemplate';
111
+ export { BlockQuote, Code, H1, H2, H3, H4, Large, Lead, Muted, P, Small, Text, } from './components/typography';
108
112
  export { ComparisonView, type ComparisonViewProps, } from './components/visualization/ComparisonView';
109
113
  export { TimelineView, type TimelineViewProps, } from './components/visualization/TimelineView';
110
114
  export type { VisualizationSurfaceItem } from './components/visualization/types';
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{AgentMonitor}from"./components/agent/AgentMonitor";export{ApprovalQueue}from"./components/agent/ApprovalQueue";export{DeleteButton,EditButton,ToggleButton,ToggleLeftButton,ToggleRightButton,ViewButton}from"./components/atoms/ActionButtons";export{Button}from"./components/atoms/Button";export{ButtonLink}from"./components/atoms/ButtonLink";export{Cta}from"./components/atoms/Cta";export{DateChip,DurationChip,PlaceChip,TimeChip}from"./components/atoms/DataChips";export{EmptyState}from"./components/atoms/EmptyState";export{ErrorState}from"./components/atoms/ErrorState";export{Input}from"./components/atoms/Input";export{Link}from"./components/atoms/Link";export{LoaderCircular}from"./components/atoms/LoaderCircular";export{NavBrand}from"./components/atoms/NavBrand";export{RankBadge}from"./components/atoms/RankBadge";export{ScoreBar}from"./components/atoms/ScoreBar";export{Stepper}from"./components/atoms/Stepper";export{Textarea}from"./components/atoms/Textarea";export{DataTable}from"./components/data-table/DataTable";export{DataTableToolbar}from"./components/data-table/DataTableToolbar";export{DataViewDetail}from"./components/data-view/DataViewDetail";export{DataViewList}from"./components/data-view/DataViewList";export{DataViewRenderer}from"./components/data-view/DataViewRenderer";export{DataViewTable}from"./components/data-view/DataViewTable";export*from"./components/forms";export*from"./components/layout";export{DefinitionList}from"./components/legal/atoms/DefinitionList";export{KeyValueList}from"./components/legal/atoms/KeyValueList";export{LegalCallout}from"./components/legal/atoms/LegalCallout";export{LegalHeading}from"./components/legal/atoms/LegalHeading";export{LegalList}from"./components/legal/atoms/LegalList";export{LegalSection}from"./components/legal/atoms/LegalSection";export{LegalText}from"./components/legal/atoms/LegalText";export{ConsentItem,ConsentList}from"./components/legal/molecules/Consent";export{ContactFields}from"./components/legal/molecules/ContactFields";export{LegalMeta}from"./components/legal/molecules/LegalMeta";export{LegalTOC}from"./components/legal/molecules/LegalTOC";export*from"./components/legal/organisms/ContactForm";export*from"./components/legal/organisms/GDPRDataRequest";export*from"./components/legal/organisms/GDPRRights";export*from"./components/legal/organisms/LegalPageLayout";export{ContactTemplate}from"./components/legal/templates/ContactTemplate";export{CookiesTemplate}from"./components/legal/templates/CookiesTemplate";export{PrivacyTemplate}from"./components/legal/templates/PrivacyTemplate";export{SalesTermsTemplate}from"./components/legal/templates/SalesTermsTemplate";export{TermsTemplate}from"./components/legal/templates/TermsTemplate";export{MarketingCard,MarketingCardContent,MarketingCardDescription,MarketingCardHeader,MarketingCardTitle}from"./components/marketing/MarketingCard";export{MarketingCardsSection}from"./components/marketing/MarketingCardsSection";export{MarketingComparisonSection}from"./components/marketing/MarketingComparisonSection";export{MarketingIconCard}from"./components/marketing/MarketingIconCard";export{MarketingSection}from"./components/marketing/MarketingSection";export{MarketingStepCard}from"./components/marketing/MarketingStepCard";export{AiLinkButton}from"./components/molecules/AiLinkButton";export{Breadcrumbs}from"./components/molecules/Breadcrumbs";export{CodeBlock}from"./components/molecules/CodeBlock";export{CommandPalette}from"./components/molecules/CommandPalette";export{CommandSearchTrigger}from"./components/molecules/CommandSearchTrigger";export{CommandTabs}from"./components/molecules/CommandTabs";export{CopyButton}from"./components/molecules/CopyButton";export{DimensionScoresCard}from"./components/molecules/DimensionScoresCard";export{EntityCard}from"./components/molecules/EntityCard";export{FiltersToolbar}from"./components/molecules/FiltersToolbar";export{HoverPreview}from"./components/molecules/HoverPreview";export{HoverPreviewDoc}from"./components/molecules/hover-previews/Doc";export{HoverPreviewMedia}from"./components/molecules/hover-previews/Media";export{HoverPreviewSimple}from"./components/molecules/hover-previews/Simple";export{HoverPreviewStats}from"./components/molecules/hover-previews/Stats";export{HoverPreviewUser}from"./components/molecules/hover-previews/User";export{InstallCommand}from"./components/molecules/InstallCommand";export{LangSwitch}from"./components/molecules/LangSwitch";export{LoaderBlock}from"./components/molecules/LoaderBlock";export{MarkdownRenderer}from"./components/molecules/MarkdownRenderer";export{NavMain}from"./components/molecules/NavMain";export{NavUser}from"./components/molecules/NavUser";export{OverviewCard}from"./components/molecules/OverviewCard";export{SkeletonBlock}from"./components/molecules/SkeletonBlock";export{SkeletonCircle}from"./components/molecules/SkeletonCircle";export{SkeletonList}from"./components/molecules/SkeletonList";export{StatCard,StatCardGroup}from"./components/molecules/StatCard";export{StatusChip}from"./components/molecules/StatusChip";export{AcademyLayout}from"./components/organisms/AcademyLayout";export{AppHeader}from"./components/organisms/AppHeader";export{AppLayout}from"./components/organisms/AppLayout";export{AppSidebar}from"./components/organisms/AppSidebar";export{EmptyDataList}from"./components/organisms/EmptyDataList";export{EmptySearchResult}from"./components/organisms/EmptySearchResult";export{FAQSection}from"./components/organisms/FAQSection";export{FeatureCarousel}from"./components/organisms/FeatureCarousel";export{FeaturesSection}from"./components/organisms/FeaturesSection";export{Footer}from"./components/organisms/Footer";export{DesktopHeader,Header,MobileHeader}from"./components/organisms/Header";export{HeroResponsive}from"./components/organisms/HeroResponsive";export{HeroSection}from"./components/organisms/HeroSection";export{ListCardPage}from"./components/organisms/ListCardPage";export{ListGridPage}from"./components/organisms/ListGridPage";export{ListPageResponsive}from"./components/organisms/ListPageResponsive";export{ListTablePage}from"./components/organisms/ListTablePage";export{MarketingHeader}from"./components/organisms/MarketingHeader";export{MarketingHeaderDesktop}from"./components/organisms/MarketingHeaderDesktop";export{MarketingHeaderMobile}from"./components/organisms/MarketingHeaderMobile";export{MarketingLayout}from"./components/organisms/MarketingLayout";export{ModelComparisonView}from"./components/organisms/ModelComparisonView";export{PageHeaderResponsive}from"./components/organisms/PageHeaderResponsive";export{PricingCarousel}from"./components/organisms/PricingCarousel";export{PricingSection}from"./components/organisms/PricingSection";export{TestimonialCarousel}from"./components/organisms/TestimonialCarousel";export{PackageManagerProvider,usePackageManager}from"./components/providers/PackageManagerProvider";export{ListPageTemplate}from"./components/templates/lists/ListPageTemplate";export{ComparisonView}from"./components/visualization/ComparisonView";export{TimelineView}from"./components/visualization/TimelineView";export{VisualizationCard}from"./components/visualization/VisualizationCard";export{VisualizationGrid}from"./components/visualization/VisualizationGrid";export{VisualizationRenderer}from"./components/visualization/VisualizationRenderer";export*from"./design-system.feature";export{useListUrlState}from"./hooks/useListUrlState";export*from"./i18n/translation";export{useColorScheme}from"./platform/useColorScheme";export{useReducedMotion}from"./platform/useReducedMotion";export{useResponsive}from"./platform/useResponsive";export*from"./platform/withPlatformUI";export*from"./renderers";export*from"./theme";export*from"./types/navigation";
1
+ export{AgentMonitor}from"./components/agent/AgentMonitor";export{ApprovalQueue}from"./components/agent/ApprovalQueue";export{DeleteButton,EditButton,ToggleButton,ToggleLeftButton,ToggleRightButton,ViewButton}from"./components/atoms/ActionButtons";export{Button}from"./components/atoms/Button";export{ButtonLink}from"./components/atoms/ButtonLink";export{Cta}from"./components/atoms/Cta";export{DateChip,DurationChip,PlaceChip,TimeChip}from"./components/atoms/DataChips";export{EmptyState}from"./components/atoms/EmptyState";export{ErrorState}from"./components/atoms/ErrorState";export{Input}from"./components/atoms/Input";export{InputPassword}from"./components/atoms/InputPassword";export{Link}from"./components/atoms/Link";export{LoaderCircular}from"./components/atoms/LoaderCircular";export{NavBrand}from"./components/atoms/NavBrand";export{RankBadge}from"./components/atoms/RankBadge";export{ScoreBar}from"./components/atoms/ScoreBar";export{Stepper}from"./components/atoms/Stepper";export{Textarea}from"./components/atoms/Textarea";export{DataTable}from"./components/data-table/DataTable";export{DataTableToolbar}from"./components/data-table/DataTableToolbar";export{DataViewDetail}from"./components/data-view/DataViewDetail";export{DataViewList}from"./components/data-view/DataViewList";export{DataViewRenderer}from"./components/data-view/DataViewRenderer";export{DataViewTable}from"./components/data-view/DataViewTable";export*from"./components/forms";export*from"./components/layout";export{DefinitionList}from"./components/legal/atoms/DefinitionList";export{KeyValueList}from"./components/legal/atoms/KeyValueList";export{LegalCallout}from"./components/legal/atoms/LegalCallout";export{LegalHeading}from"./components/legal/atoms/LegalHeading";export{LegalList}from"./components/legal/atoms/LegalList";export{LegalSection}from"./components/legal/atoms/LegalSection";export{LegalText}from"./components/legal/atoms/LegalText";export{ConsentItem,ConsentList}from"./components/legal/molecules/Consent";export{ContactFields}from"./components/legal/molecules/ContactFields";export{LegalMeta}from"./components/legal/molecules/LegalMeta";export{LegalTOC}from"./components/legal/molecules/LegalTOC";export*from"./components/legal/organisms/ContactForm";export*from"./components/legal/organisms/GDPRDataRequest";export*from"./components/legal/organisms/GDPRRights";export*from"./components/legal/organisms/LegalPageLayout";export{ContactTemplate}from"./components/legal/templates/ContactTemplate";export{CookiesTemplate}from"./components/legal/templates/CookiesTemplate";export{PrivacyTemplate}from"./components/legal/templates/PrivacyTemplate";export{SalesTermsTemplate}from"./components/legal/templates/SalesTermsTemplate";export{TermsTemplate}from"./components/legal/templates/TermsTemplate";export{List,ListItem}from"./components/list";export{MarketingCard,MarketingCardContent,MarketingCardDescription,MarketingCardHeader,MarketingCardTitle}from"./components/marketing/MarketingCard";export{MarketingCardsSection}from"./components/marketing/MarketingCardsSection";export{MarketingComparisonSection}from"./components/marketing/MarketingComparisonSection";export{MarketingIconCard}from"./components/marketing/MarketingIconCard";export{MarketingSection}from"./components/marketing/MarketingSection";export{MarketingStepCard}from"./components/marketing/MarketingStepCard";export{AiLinkButton}from"./components/molecules/AiLinkButton";export{Breadcrumbs}from"./components/molecules/Breadcrumbs";export{CodeBlock}from"./components/molecules/CodeBlock";export{CommandPalette}from"./components/molecules/CommandPalette";export{CommandSearchTrigger}from"./components/molecules/CommandSearchTrigger";export{CommandTabs}from"./components/molecules/CommandTabs";export{CopyButton}from"./components/molecules/CopyButton";export{DimensionScoresCard}from"./components/molecules/DimensionScoresCard";export{EntityCard}from"./components/molecules/EntityCard";export{FiltersToolbar}from"./components/molecules/FiltersToolbar";export{HoverPreview}from"./components/molecules/HoverPreview";export{HoverPreviewDoc}from"./components/molecules/hover-previews/Doc";export{HoverPreviewMedia}from"./components/molecules/hover-previews/Media";export{HoverPreviewSimple}from"./components/molecules/hover-previews/Simple";export{HoverPreviewStats}from"./components/molecules/hover-previews/Stats";export{HoverPreviewUser}from"./components/molecules/hover-previews/User";export{InstallCommand}from"./components/molecules/InstallCommand";export{LangSwitch}from"./components/molecules/LangSwitch";export{LoaderBlock}from"./components/molecules/LoaderBlock";export{MarkdownRenderer}from"./components/molecules/MarkdownRenderer";export{NavMain}from"./components/molecules/NavMain";export{NavUser}from"./components/molecules/NavUser";export{OverviewCard}from"./components/molecules/OverviewCard";export{SkeletonBlock}from"./components/molecules/SkeletonBlock";export{SkeletonCircle}from"./components/molecules/SkeletonCircle";export{SkeletonList}from"./components/molecules/SkeletonList";export{StatCard,StatCardGroup}from"./components/molecules/StatCard";export{StatusChip}from"./components/molecules/StatusChip";export{Tabs,TabsContent,TabsList,TabsTrigger}from"./components/molecules/Tabs";export{AcademyLayout}from"./components/organisms/AcademyLayout";export{AppHeader}from"./components/organisms/AppHeader";export{AppLayout}from"./components/organisms/AppLayout";export{AppSidebar}from"./components/organisms/AppSidebar";export{EmptyDataList}from"./components/organisms/EmptyDataList";export{EmptySearchResult}from"./components/organisms/EmptySearchResult";export{FAQSection}from"./components/organisms/FAQSection";export{FeatureCarousel}from"./components/organisms/FeatureCarousel";export{FeaturesSection}from"./components/organisms/FeaturesSection";export{Footer}from"./components/organisms/Footer";export{DesktopHeader,Header,MobileHeader}from"./components/organisms/Header";export{HeroResponsive}from"./components/organisms/HeroResponsive";export{HeroSection}from"./components/organisms/HeroSection";export{ListCardPage}from"./components/organisms/ListCardPage";export{ListGridPage}from"./components/organisms/ListGridPage";export{ListPageResponsive}from"./components/organisms/ListPageResponsive";export{ListTablePage}from"./components/organisms/ListTablePage";export{MarketingHeader}from"./components/organisms/MarketingHeader";export{MarketingHeaderDesktop}from"./components/organisms/MarketingHeaderDesktop";export{MarketingHeaderMobile}from"./components/organisms/MarketingHeaderMobile";export{MarketingLayout}from"./components/organisms/MarketingLayout";export{ModelComparisonView}from"./components/organisms/ModelComparisonView";export{PageHeaderResponsive}from"./components/organisms/PageHeaderResponsive";export{PricingCarousel}from"./components/organisms/PricingCarousel";export{PricingSection}from"./components/organisms/PricingSection";export{TestimonialCarousel}from"./components/organisms/TestimonialCarousel";export{PackageManagerProvider,usePackageManager}from"./components/providers/PackageManagerProvider";export{ListPageTemplate}from"./components/templates/lists/ListPageTemplate";export{BlockQuote,Code,H1,H2,H3,H4,Large,Lead,Muted,P,Small,Text}from"./components/typography";export{ComparisonView}from"./components/visualization/ComparisonView";export{TimelineView}from"./components/visualization/TimelineView";export{VisualizationCard}from"./components/visualization/VisualizationCard";export{VisualizationGrid}from"./components/visualization/VisualizationGrid";export{VisualizationRenderer}from"./components/visualization/VisualizationRenderer";export*from"./design-system.feature";export{useListUrlState}from"./hooks/useListUrlState";export*from"./i18n/translation";export{useColorScheme}from"./platform/useColorScheme";export{useReducedMotion}from"./platform/useReducedMotion";export{useResponsive}from"./platform/useResponsive";export*from"./platform/withPlatformUI";export*from"./renderers";export*from"./theme";export*from"./types/navigation";
@@ -0,0 +1 @@
1
+ export * from './components/layout';
package/dist/layout.js ADDED
@@ -0,0 +1 @@
1
+ export*from"./components/layout";
package/dist/list.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './components/list';
package/dist/list.js ADDED
@@ -0,0 +1 @@
1
+ export*from"./components/list";
@@ -0,0 +1 @@
1
+ import{jsx as E,jsxs as A}from"react/jsx-runtime";import{Badge as L}from"@contractspec/lib.ui-kit-web/ui/badge";import{Card as O,CardContent as Q,CardHeader as T}from"@contractspec/lib.ui-kit-web/ui/card";import{cn as K}from"@contractspec/lib.ui-kit-web/ui/utils";export function AgentMonitor({title:G="Agent Activity",sessions:z,highlightStatus:I="escalated",onSelectSession:F,className:J}){return A(O,{className:J,children:[E(T,{children:E("h3",{className:"font-semibold text-xl",children:G})}),E(Q,{className:"space-y-3",children:z.length===0?E("p",{className:"text-muted-foreground text-sm",children:"No active sessions in the last hour."}):E("div",{className:"divide-y divide-border rounded-md border",children:z.map((q)=>A("button",{type:"button",onClick:()=>F?.(q),className:K("flex w-full items-center gap-4 px-4 py-3 text-left transition hover:bg-muted/40",!F&&"cursor-default"),children:[A("div",{className:"min-w-0 flex-1",children:[A("p",{className:"font-medium",children:[q.agent," ",A("span",{className:"text-muted-foreground text-sm",children:["· ",q.tenantId??"global"]})]}),A("p",{className:"text-muted-foreground text-sm",children:[q.iterations??0," turns · Updated"," ",V(q.updatedAt)]})]}),A("div",{className:"flex items-center gap-3",children:[typeof q.confidence==="number"&&E(U,{value:q.confidence}),E(L,{variant:q.status===I?"destructive":"secondary",children:q.status})]})]},q.sessionId))})})]})}function U({value:G}){const z=Math.round(G*100);return A("div",{className:K("rounded-full px-3 py-1 font-medium text-sm",z>=75?"bg-emerald-500/15 text-emerald-500":"bg-amber-500/15 text-amber-600"),children:[z,"%"]})}function V(G){const z=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),I=Math.round((Date.now()-new Date(G).getTime())/60000);if(Math.abs(I)<60)return z.format(-I,"minute");const F=Math.round(I/60);if(Math.abs(F)<24)return z.format(-F,"hour");const J=Math.round(F/24);return z.format(-J,"day")}
@@ -0,0 +1 @@
1
+ import{jsx as E,jsxs as C}from"react/jsx-runtime";import{useContractTable as W}from"@contractspec/lib.presentation-runtime-react";import{Badge as X}from"@contractspec/lib.ui-kit-web/ui/badge";import{HStack as Y}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as L}from"@contractspec/lib.ui-kit-web/ui/text";import{Button as O}from"../atoms/Button";import{DataTable as Z}from"../data-table/DataTable";export function ApprovalQueue({title:F="Approvals",description:G="Requests escalated by AI agents",requests:I,onApprove:J,onReject:K,className:P,emptyState:Q=E(L,{className:"text-muted-foreground",children:"Nothing waiting for review."})}){const U=W({data:I,columns:[{id:"agent",header:"Agent",accessor:(z)=>z.agentId,cell:({item:z})=>E(L,{className:"font-medium",children:z.agentId})},{id:"reason",header:"Reason",accessor:(z)=>z.reason,cell:({item:z})=>E(L,{className:"max-w-sm",children:z.reason})},{id:"tenant",header:"Tenant",accessor:(z)=>z.tenantId??"—"},{id:"requested",header:"Requested",accessor:(z)=>h(z.requestedAt)},{id:"status",header:"Status",accessor:(z)=>z.status,cell:({item:z})=>E(X,{variant:$(z.status),children:z.status})},{id:"actions",header:"Actions",canSort:!1,canHide:!1,canResize:!1,cell:({item:z})=>C(Y,{gap:"sm",children:[E(O,{size:"sm",variant:"secondary",disabled:z.status!=="pending",onPress:()=>K?.(z),children:"Reject"}),E(O,{size:"sm",disabled:z.status!=="pending",onPress:()=>J?.(z),children:"Approve"})]})}]});return E(Z,{controller:U,title:F,description:G,className:P,emptyState:Q})}function $(F){switch(F){case"approved":return"default";case"rejected":return"destructive";default:return"secondary"}}function h(F){const G=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),I=Math.round((Date.now()-new Date(F).getTime())/60000);if(Math.abs(I)<60)return G.format(-I,"minute");const J=Math.round(I/60);if(Math.abs(J)<24)return G.format(-J,"hour");const K=Math.round(J/24);return G.format(-K,"day")}
@@ -0,0 +1 @@
1
+ import{jsx as C,jsxs as k}from"react/jsx-runtime";import{Box as O}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as P}from"@contractspec/lib.ui-kit-web/ui/text";import{cva as Q}from"class-variance-authority";import{Trash2 as U,Edit as W,ToggleLeft as K,ToggleRight as M,Eye as X}from"lucide-react";import{Button as Y}from"./Button";const V=Q("",{variants:{tone:{neutral:"default",danger:"destructive",subtle:"secondary",outline:"outline"},size:{sm:"sm",md:"default",lg:"lg",icon:"icon"}},defaultVariants:{tone:"neutral",size:"md"}});function Z(q){switch(q){case"danger":return"destructive";case"subtle":return"secondary";case"outline":return"outline";default:return"default"}}function $(q){switch(q){case"sm":return"sm";case"lg":return"lg";case"icon":return"icon";default:return"default"}}function F({tone:q="neutral",size:G="md",label:H,iconLeft:J,...N}){return k(Y,{variant:Z(q||"neutral"),size:$(G||"md"),...N,children:[J?C(O,{className:"mr-2 inline-flex h-4 w-4",children:J}):null,C(P,{children:H})]})}export function EditButton(q){return C(F,{iconLeft:C(W,{className:"h-4 w-4"}),...q})}export function DeleteButton(q){return C(F,{iconLeft:C(U,{className:"h-4 w-4"}),tone:"danger",...q})}export function ViewButton(q){return C(F,{iconLeft:C(X,{className:"h-4 w-4"}),...q})}export function ToggleButton(q){const{active:G,...H}=q;return C(F,{iconLeft:G?C(K,{className:"h-4 w-4"}):C(M,{className:"h-4 w-4"}),...H})}export function ToggleLeftButton(q){return C(F,{iconLeft:C(K,{className:"h-4 w-4"}),...q})}export function ToggleRightButton(q){return C(F,{iconLeft:C(M,{className:"h-4 w-4"}),...q})}
@@ -0,0 +1 @@
1
+ import{jsx as H,jsxs as _,Fragment as O}from"react/jsx-runtime";import{Button as C}from"@contractspec/lib.ui-kit-web/ui/button";import{Loader2 as q}from"lucide-react";import{useThemedPrimitive as N,useTranslatedNode as j,useTranslatedText as w}from"../primitives/themed";export function Button({children:J,loading:z,spinnerPlacement:Q="start",onPress:R,onPressIn:B,onPressOut:A,onLongPress:x,onTouchStart:F,onTouchEnd:W,onTouchCancel:E,onMouseDown:K,onMouseUp:S,onClick:U,className:V,disabled:f,componentKey:v,themeVariant:k,labelI18n:X,ariaLabelI18n:D,...G}){const Y=N({defaultComponentKey:"Button",componentKey:v,themeVariant:k,className:V}),Z=j(),L=w(),$=Boolean(f||z),M=R?()=>{R()}:U,y=!G.asChild?_(O,{children:[z&&Q==="start"?H(q,{className:"h-4 w-4 animate-spin"}):null,Z(X??J),z&&Q==="end"?H(q,{className:"h-4 w-4 animate-spin"}):null]}):Z(X??J);return H(C,{...Y.props,...G,className:Y.className,disabled:$,"aria-busy":z?!0:void 0,"aria-disabled":$?!0:void 0,"aria-label":L(D),onClick:M,onMouseDown:K||B,onMouseUp:S||A,onTouchStart:F,onTouchEnd:W||A,onTouchCancel:E||A,type:G?.type??"button",children:y})}
@@ -0,0 +1 @@
1
+ import{jsx as i}from"react/jsx-runtime";import*as s from"react";import{Button as B}from"./Button";import{Link as L}from"./Link.web";export function ButtonLink({href:p,target:l,rel:a,replace:P,loading:o,disabled:n,children:c,onClick:e,...k}){const r=Boolean(n||o),u=s.useCallback((t)=>{if(r){t.preventDefault();t.stopPropagation();return}e?.(t)},[r,e]);return i(B,{...k,disabled:n,loading:o,asChild:!0,children:i(L,{href:p,target:l,rel:a,onClick:u,children:c})})}
@@ -1 +1 @@
1
- import{jsx as U}from"react/jsx-runtime";import*as S from"react";import{Linking as K}from"react-native";import{Button as T}from"./Button.mobile";export function ButtonLink({href:q,replace:D,loading:F,disabled:G,onPressIn:M,onPressOut:N,...H}){const J=Boolean(G||F),Q=S.useCallback(()=>{if(J)return;try{const A=require("expo-router");if(A?.Link){const z=A.router??A.useRouter?.();if(z?.replace&&D)z.replace(q);else if(z?.push)z.push(q);else K.openURL(q);return}}catch{}K.openURL(q)},[J,q,D]);return U(T,{...H,onPress:Q,loading:F,disabled:G,onPressIn:M,onPressOut:N,children:H.children})}export default ButtonLink;
1
+ import{jsx as U}from"react/jsx-runtime";import*as S from"react";import{Linking as K}from"react-native";import{Button as T}from"./Button.native";export function ButtonLink({href:q,replace:D,loading:F,disabled:G,onPressIn:M,onPressOut:N,...H}){const J=Boolean(G||F),Q=S.useCallback(()=>{if(J)return;try{const A=require("expo-router");if(A?.Link){const z=A.router??A.useRouter?.();if(z?.replace&&D)z.replace(q);else if(z?.push)z.push(q);else K.openURL(q);return}}catch{}K.openURL(q)},[J,q,D]);return U(T,{...H,onPress:Q,loading:F,disabled:G,onPressIn:M,onPressOut:N,children:H.children})}export default ButtonLink;
@@ -0,0 +1 @@
1
+ import{jsx as i}from"react/jsx-runtime";import{cva as f}from"class-variance-authority";import{Button as h}from"./Button";import{ButtonLink as B}from"./ButtonLink";const H=f("",{variants:{size:{sm:"sm",md:"md",lg:"lg",touch:"touch"},emphasis:{default:"default",subtle:"secondary",strong:"default"}},defaultVariants:{size:"touch",emphasis:"default"}});export function Cta({capture:t,ctaName:n,as:u="button",href:c,onClick:l,size:m="touch",emphasis:p="default",children:a,...e}){const o=(d)=>{if(n)try{if(t)t(n)}catch{}l?.(d)},s=m,r=p==="subtle"?"secondary":"default";if(u==="a")return i(B,{size:s,variant:r,...e,href:c,onClick:o,children:a});return i(h,{size:s,variant:r,onClick:o,...e,children:a})}
@@ -0,0 +1 @@
1
+ import{jsx as i,jsxs as o}from"react/jsx-runtime";import{cva as l}from"class-variance-authority";import{Calendar as c,Clock as p,MapPin as m}from"lucide-react";const r=l("inline-flex items-center gap-1 text-base text-muted-foreground",{variants:{size:{sm:"text-sm",md:"text-base"},tone:{default:"",muted:"opacity-85"}},defaultVariants:{size:"md",tone:"default"}});export function DateChip({value:t,...a}){if(!t)return null;let n="";try{n=(typeof t==="string"?new Date(t):t).toLocaleDateString()}catch{n=String(t)}return o("span",{className:r(a),children:[i(c,{className:"h-4 w-4"})," ",n]})}export function TimeChip({value:t,...a}){if(!t)return null;let n="";try{n=(typeof t==="string"?new Date(t):t).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}catch{n=String(t)}return o("span",{className:r(a),children:[i(p,{className:"h-4 w-4"})," ",n]})}export function PlaceChip({label:t,...a}){if(!t)return null;return o("span",{className:r(a),children:[i(m,{className:"h-4 w-4"})," ",t]})}export function DurationChip({minutes:t,...a}){if(t==null)return null;const n=Math.floor(t/60),e=t%60,s=n>0?`${n}h${e>0?String(e).padStart(2,"0"):""}`:`${e}min`;return o("span",{className:r(a),children:[i(p,{className:"h-4 w-4"})," ",s]})}
@@ -0,0 +1 @@
1
+ import{jsx as h}from"react/jsx-runtime";import{EmptyState as g}from"@contractspec/lib.ui-kit-web/ui/empty-state";export function EmptyState(d){return h(g,{...d})}
@@ -0,0 +1 @@
1
+ import{jsx as g,jsxs as q}from"react/jsx-runtime";import{Empty as Q,EmptyContent as U,EmptyDescription as V,EmptyHeader as W,EmptyTitle as X}from"@contractspec/lib.ui-kit-web/ui/empty";import{Button as I}from"../atoms/Button";import{ButtonLink as Y}from"../atoms/ButtonLink";export function ErrorState({title:J="Something went wrong",description:v,icon:K,onRetry:z,retryLabel:M="Retry",supportHref:A,onContactSupport:F,supportLabel:G="Contact support",className:O}){const P=(()=>{if(A)return g(Y,{variant:"ghost",href:A,children:G});if(F)return g(I,{variant:"ghost",onPress:F,children:G});return null})();return q(Q,{className:O,children:[q(W,{children:[K,g(X,{children:J}),v?g(V,{children:v}):null]}),g(U,{children:q("div",{className:"flex flex-wrap items-center gap-2",children:[z?g(I,{onPress:z,children:M}):null,P]})})]})}
@@ -0,0 +1 @@
1
+ import{jsx as t,jsxs as l}from"react/jsx-runtime";import*as N from"react";import{Linking as g,Text as n,View as c}from"react-native";import{Button as i}from"./Button.native";export function ErrorState({title:m="Something went wrong",description:o,icon:p,onRetry:r,retryLabel:s="Retry",supportHref:e,onContactSupport:a,supportLabel:u="Contact support",className:R}){const d=N.useCallback(()=>{if(e)g.openURL(e).catch(()=>{});else a?.()},[e,a]);return l(c,{className:["items-center p-6",R].filter(Boolean).join(" "),children:[p,t(n,{className:"font-medium text-lg",children:m}),o?t(n,{className:"mt-1 text-base text-muted-foreground",children:o}):null,l(c,{className:"mt-3 flex-row items-center gap-2",children:[r?t(i,{onPress:r,children:s}):null,t(i,{variant:"ghost",onPress:d,children:u})]})]})}export default ErrorState;
@@ -0,0 +1 @@
1
+ import{jsx as N}from"react/jsx-runtime";import{Input as j}from"@contractspec/lib.ui-kit-web/ui/input";import{mapKeyboardToWeb as B}from"../../lib/keyboard";import{useThemedTextField as C}from"../primitives/control";export function Input({value:A,defaultValue:D,onChange:E,onSubmit:O,onFocus:G,onBlur:H,placeholder:J,disabled:M,readOnly:P,maxLength:Q,name:R,className:S,keyboard:U,componentKey:X,themeVariant:Y,placeholderI18n:Z,ariaLabelI18n:$,...z}){const _=B(U),q=C({defaultComponentKey:"Input",componentKey:X,themeVariant:Y,className:S,style:z.style,placeholder:J,placeholderI18n:Z,ariaLabelI18n:$});return N(j,{...q.themed.props,...z,className:q.themed.className,style:q.themed.style,value:A,defaultValue:D,onChange:E,onFocus:G,onBlur:H,placeholder:q.placeholder,"aria-label":q.ariaLabel,disabled:M,readOnly:P,maxLength:Q,name:R,..._})}
@@ -0,0 +1 @@
1
+ import{jsx as v}from"react/jsx-runtime";import{InputPassword as k}from"@contractspec/lib.ui-kit-web/ui/input-password";import{mapKeyboardToWeb as T}from"../../lib/keyboard";import{useThemedTextField as f}from"../primitives/control";import{useTranslatedText as g}from"../primitives/themed";function I(q){return q==="new"?"new-password":"password"}function P(q){return q==="new"?"new-password":"current-password"}export function InputPassword({value:q,defaultValue:J,onChange:M,onSubmit:Q,onFocus:R,onBlur:U,placeholder:X,disabled:Y,readOnly:Z,maxLength:$,name:_,className:j,keyboard:G,componentKey:B,themeVariant:N,placeholderI18n:O,ariaLabelI18n:S,passwordPurpose:D="current",visibilityToggle:W,showLabel:C,hideLabel:V,showLabelI18n:F,hideLabelI18n:K,...A}){const H=g(),x=T({kind:I(D),...G,autoComplete:G?.autoComplete??A.autoComplete??P(D)}),z=f({defaultComponentKey:"InputPassword",componentKey:B,themeVariant:N,className:j,style:A.style,placeholder:X,placeholderI18n:O,ariaLabelI18n:S});return v(k,{...z.themed.props,...A,...x,className:z.themed.className,style:z.themed.style,value:q,defaultValue:J,onChange:M,onFocus:R,onBlur:U,placeholder:z.placeholder,"aria-label":z.ariaLabel,disabled:Y,readOnly:Z,maxLength:$,name:_,passwordPurpose:D,visibilityToggle:W,showLabel:H(F??C??"Show password"),hideLabel:H(K??V??"Hide password"),onKeyDown:(E)=>{A.onKeyDown?.(E);if(E.defaultPrevented||E.key!=="Enter")return;Q?.()}})}
@@ -0,0 +1 @@
1
+ import{jsx as v}from"react/jsx-runtime";import{InputPassword as K}from"@contractspec/lib.ui-kit/ui/input-password";import{mapKeyboardToNative as x}from"../../lib/keyboard";import{useThemedTextField as f}from"../primitives/control";import{useTranslatedText as k}from"../primitives/themed";function T(q){return q==="new"?"new-password":"password"}function g(q){return q==="new"?"new-password":"current-password"}export function InputPassword({value:q,defaultValue:J,onChange:M,onSubmit:Q,onFocus:R,onBlur:U,placeholder:W,disabled:D,readOnly:X,maxLength:Y,className:Z,keyboard:E,componentKey:$,themeVariant:_,placeholderI18n:j,ariaLabelI18n:B,passwordPurpose:A="current",visibilityToggle:O,showLabel:S,hideLabel:C,showLabelI18n:N,hideLabelI18n:V,...G}){const H=k(),F=x({kind:T(A),...E,autoComplete:E?.autoComplete??G.autoComplete??g(A)}),z=f({defaultComponentKey:"InputPassword",componentKey:$,themeVariant:_,className:Z,placeholder:W,placeholderI18n:j,ariaLabelI18n:B});return v(K,{...z.themed.props,...G,className:z.themed.className,value:q,defaultValue:J,onChangeText:M,onSubmitEditing:Q,onFocus:R,onBlur:U,placeholder:z.placeholder,accessibilityLabel:z.ariaLabel,editable:!D&&!X,disabled:D,maxLength:Y,passwordPurpose:A,visibilityToggle:O,showLabel:H(N??S??"Show password"),hideLabel:H(V??C??"Hide password"),...F})}export default InputPassword;
@@ -0,0 +1 @@
1
+ import{jsx as o}from"react/jsx-runtime";export function Link({children:t,...r}){return o("a",{...r,children:t})}
@@ -0,0 +1 @@
1
+ export{Link}from"@contractspec/lib.ui-kit/ui/link";
@@ -0,0 +1 @@
1
+ import{jsx as A,jsxs as I}from"react/jsx-runtime";import{cn as q}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as F}from"class-variance-authority";import{Loader2 as G}from"lucide-react";const H=F("animate-spin",{variants:{size:{sm:"h-4 w-4",md:"h-5 w-5",lg:"h-6 w-6"},tone:{default:"text-foreground",muted:"text-muted-foreground"}},defaultVariants:{size:"md",tone:"muted"}});export function LoaderCircular({size:B,tone:C,label:g,className:D,...E}){return I("div",{className:q("inline-flex items-center gap-2",D),role:"status","aria-live":"polite","aria-busy":!0,...E,children:[A(G,{className:q(H({size:B,tone:C}))}),g?A("span",{className:"text-base text-muted-foreground",children:g}):null]})}
@@ -0,0 +1 @@
1
+ import{jsx as z,jsxs as D}from"react/jsx-runtime";import{cn as C}from"@contractspec/lib.ui-kit-web/ui/utils";export function NavBrand({href:d="/",logo:A,title:q,className:B}){const v=D("div",{className:C("flex items-center gap-2 truncate font-semibold",B),children:[A,q&&z("span",{className:"truncate font-bold text-xl",children:q})]});return d?z("a",{href:d,className:"flex items-center","aria-label":"Home",children:v}):v}
@@ -0,0 +1 @@
1
+ import{jsx as C,jsxs as D}from"react/jsx-runtime";import{cn as F}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as G}from"class-variance-authority";const H=G("inline-flex items-center justify-center gap-1 rounded-md font-semibold tabular-nums",{variants:{size:{sm:"h-6 min-w-6 px-1.5 text-xs",md:"h-8 min-w-8 px-2 text-sm",lg:"h-10 min-w-10 px-3 text-base"}},defaultVariants:{size:"md"}});function J(q){if(q===1)return"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300";if(q===2)return"bg-slate-100 text-slate-700 dark:bg-slate-800/40 dark:text-slate-300";if(q===3)return"bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-300";return"bg-muted text-muted-foreground"}function K({rank:q,previousRank:B}){const A=B-q;if(A>0)return C("span",{className:"text-green-600 text-xs dark:text-green-400","aria-label":`Up ${A}`,children:"▲"});if(A<0)return C("span",{className:"text-red-600 text-xs dark:text-red-400","aria-label":`Down ${Math.abs(A)}`,children:"▼"});return C("span",{className:"text-muted-foreground text-xs","aria-label":"Unchanged",children:"–"})}export function RankBadge({rank:q,previousRank:B,size:A,className:E}){return D("span",{className:F(H({size:A}),J(q),E),children:[D("span",{children:["#",q]}),B!=null&&C(K,{rank:q,previousRank:B})]})}
@@ -0,0 +1 @@
1
+ import{jsx as q,jsxs as H}from"react/jsx-runtime";import{cn as A}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as J}from"class-variance-authority";const G=J("rounded-full",{variants:{size:{sm:"h-2",md:"h-3",lg:"h-4"}},defaultVariants:{size:"md"}});function K(d){if(d>=75)return"bg-green-500";if(d>=50)return"bg-yellow-500";if(d>=25)return"bg-orange-500";return"bg-red-500"}export function ScoreBar({score:d,label:g,maxScore:B=100,showValue:D=!0,size:E,className:I}){const F=Math.max(0,Math.min(100,d/B*100));return H("div",{className:A("flex flex-col gap-1",I),children:[(g||D)&&H("div",{className:"flex items-center justify-between text-sm",children:[g&&q("span",{className:"text-muted-foreground capitalize",children:g}),D&&q("span",{className:"font-medium tabular-nums",children:Math.round(d*10)/10})]}),q("div",{className:A("w-full overflow-hidden bg-muted",G({size:E})),role:"progressbar","aria-valuenow":d,"aria-valuemin":0,"aria-valuemax":B,"aria-label":g??"Score",children:q("div",{className:A("h-full transition-all duration-300",G({size:E}),K(F)),style:{width:`${F}%`}})})]})}
@@ -0,0 +1 @@
1
+ import{jsx as h}from"react/jsx-runtime";import{Stepper as g}from"@contractspec/lib.ui-kit-web/ui/stepper";export function Stepper(d){return h(g,{...d})}
@@ -0,0 +1 @@
1
+ import{jsx as k}from"react/jsx-runtime";import{Textarea as O}from"@contractspec/lib.ui-kit-web/ui/textarea";import*as W from"react";import{mapKeyboardToWeb as v}from"../../lib/keyboard";import{useThemedTextField as F}from"../primitives/control";export function Textarea({value:D,defaultValue:E,onChange:z,onSubmit:I,onFocus:G,onBlur:H,placeholder:J,disabled:M,readOnly:P,maxLength:Q,name:S,className:U,rows:X,keyboard:Y,componentKey:Z,themeVariant:$,placeholderI18n:R,ariaLabelI18n:_,...A}){const j=v(Y),q=F({defaultComponentKey:"Textarea",componentKey:Z,themeVariant:$,className:U,style:A.style,placeholder:J,placeholderI18n:R,ariaLabelI18n:_}),B=W.useCallback((N)=>z?.(N),[z]);return k(O,{...q.themed.props,...A,className:q.themed.className,style:q.themed.style,value:D,defaultValue:E,onChange:B,onFocus:G,onBlur:H,placeholder:q.placeholder,"aria-label":q.ariaLabel,disabled:M,readOnly:P,maxLength:Q,name:S,rows:X,...j})}export default Textarea;
@@ -0,0 +1 @@
1
+ import{jsx as q,jsxs as E}from"react/jsx-runtime";import{Card as X,CardContent as Y,CardDescription as Z,CardHeader as $,CardTitle as K}from"@contractspec/lib.ui-kit-web/ui/card";import{DataTable as V}from"@contractspec/lib.ui-kit-web/ui/data-table";import{HStack as v,VStack as H}from"@contractspec/lib.ui-kit-web/ui/stack";import{resolveTranslationNode as I,useDesignSystemTranslation as P}from"../../i18n/translation";export function DataTable({controller:J,title:z,description:B,className:L,headerActions:F,toolbar:M,footer:O,emptyState:Q,loading:U,onRowPress:W}){const G=P();return E(X,{className:L,children:[z||B||F?q($,{children:E(v,{justify:"between",align:"start",children:[E(H,{gap:"xs",children:[z?q(K,{children:I(z,G)}):null,B?q(Z,{children:I(B,G)}):null]}),F]})}):null,q(Y,{children:q(V,{controller:J,toolbar:M,footer:O,emptyState:Q,loading:U,onRowPress:W})})]})}
@@ -0,0 +1 @@
1
+ import{jsx as D,jsxs as a}from"react/jsx-runtime";import{Button as h}from"../atoms/Button";import{FiltersToolbar as c}from"../molecules/FiltersToolbar";import{getHiddenDataColumns as f,showHiddenDataColumns as g}from"./DataTableToolbar.shared";export function DataTableToolbar({controller:e,className:l,searchPlaceholder:n,searchValue:r,onSearchChange:s,onSearchSubmit:d,debounceMs:i,activeChips:m=[],onClearAll:u,actionsStart:p,actionsEnd:b,selectionSummary:o}){const t=f(e),T=o===void 0&&e.selectionMode!=="none"?a("span",{className:"text-muted-foreground text-sm",children:["Selected ",e.selectedRowIds.length]}):o;return D(c,{className:l,searchPlaceholder:n,searchValue:r,onSearchChange:s,onSearchSubmit:d,debounceMs:i,activeChips:m,onClearAll:u,right:a("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[T,t.length?a(h,{variant:"outline",size:"sm",onPress:()=>g(e),children:["Show ",t.length," Hidden"]}):null,b]}),children:p})}
@@ -1 +1 @@
1
- import{jsx as A,jsxs as z}from"react/jsx-runtime";import{HStack as $}from"@contractspec/lib.ui-kit/ui/stack";import{Text as f}from"@contractspec/lib.ui-kit/ui/text";import{Button as k}from"../atoms/Button";import{FiltersToolbar as B}from"../molecules/FiltersToolbar.mobile";import{getHiddenDataColumns as p,showHiddenDataColumns as w}from"./DataTableToolbar.shared";export function DataTableToolbar({controller:q,className:J,searchPlaceholder:K,searchValue:L,onSearchChange:O,onSearchSubmit:Q,debounceMs:R,activeChips:U=[],onClearAll:W,actionsStart:X,actionsEnd:Y,selectionSummary:G}){const I=p(q),Z=G===void 0&&q.selectionMode!=="none"?z(f,{className:"text-muted-foreground text-sm",children:["Selected ",q.selectedRowIds.length]}):G;return A(B,{className:J,searchPlaceholder:K,searchValue:L,onSearchChange:O,onSearchSubmit:Q,debounceMs:R,activeChips:U,onClearAll:W,right:z($,{className:"flex flex-wrap items-center justify-end gap-2",children:[Z,I.length?z(k,{variant:"outline",size:"sm",onPress:()=>w(q),children:["Show ",I.length," Hidden"]}):null,Y]}),children:X})}
1
+ import{jsx as A,jsxs as z}from"react/jsx-runtime";import{HStack as $}from"@contractspec/lib.ui-kit/ui/stack";import{Text as f}from"@contractspec/lib.ui-kit/ui/text";import{Button as k}from"../atoms/Button";import{FiltersToolbar as B}from"../molecules/FiltersToolbar.native";import{getHiddenDataColumns as p,showHiddenDataColumns as w}from"./DataTableToolbar.shared";export function DataTableToolbar({controller:q,className:J,searchPlaceholder:K,searchValue:L,onSearchChange:O,onSearchSubmit:Q,debounceMs:R,activeChips:U=[],onClearAll:W,actionsStart:X,actionsEnd:Y,selectionSummary:G}){const I=p(q),Z=G===void 0&&q.selectionMode!=="none"?z(f,{className:"text-muted-foreground text-sm",children:["Selected ",q.selectedRowIds.length]}):G;return A(B,{className:J,searchPlaceholder:K,searchValue:L,onSearchChange:O,onSearchSubmit:Q,debounceMs:R,activeChips:U,onClearAll:W,right:z($,{className:"flex flex-wrap items-center justify-end gap-2",children:[Z,I.length?z(k,{variant:"outline",size:"sm",onPress:()=>w(q),children:["Show ",I.length," Hidden"]}):null,Y]}),children:X})}
@@ -0,0 +1 @@
1
+ export function getHiddenDataColumns(t){return t.columns.filter((e)=>e.kind==="data"&&e.canHide&&!e.visible)}export function showHiddenDataColumns(t){getHiddenDataColumns(t).forEach((e)=>e.toggleVisibility?.(!0))}
@@ -0,0 +1 @@
1
+ import{jsx as e,jsxs as a}from"react/jsx-runtime";import{resolveTranslationString as r,useDesignSystemTranslation as N}from"../../i18n/translation";import{cn as u}from"../../lib/utils";import{MarkdownRenderer as f}from"../molecules/MarkdownRenderer";import{DataViewFormattedValue as w,getAtPath as V}from"./utils";export function DataViewDetail({spec:t,item:l,className:n,emptyState:v,headerActions:c}){const d=N();if(t.view.kind!=="detail")throw Error(`DataViewDetail received view kind "${t.view.kind}", expected "detail".`);const m=t.view,s=m.fields;if(!l)return a("div",{className:u("flex w-full flex-col gap-4",n),children:[a("div",{className:"flex items-center justify-between",children:[e("h3",{className:"font-semibold text-base text-foreground",children:r(t.meta.title,d)}),c]}),v??e("div",{className:"rounded-md border border-muted-foreground/40 border-dashed p-8 text-center text-muted-foreground text-sm",children:"Select a record to view details."})]});const p=m.sections&&m.sections.length>0?m.sections:[{fields:s.map((i)=>i.key)}];return a("div",{className:u("flex w-full flex-col gap-6",n),children:[a("div",{className:"flex items-center justify-between",children:[a("div",{children:[e("h3",{className:"font-semibold text-foreground text-xl",children:r(t.meta.title,d)}),e("div",{className:"text-muted-foreground text-sm",children:e(f,{content:r(t.meta.description??"",d)??""})})]}),c]}),e("div",{className:"flex flex-col gap-6",children:p.map((i,g)=>a("div",{className:"rounded-lg border border-border bg-card p-4 shadow-sm",children:[i.title?e("h4",{className:"mb-2 font-semibold text-muted-foreground text-sm uppercase tracking-wide",children:r(i.title,d)}):null,i.description?e("div",{className:"mb-4 text-muted-foreground text-sm",children:e(f,{content:r(i.description,d)??""})}):null,e("dl",{className:"grid gap-4 md:grid-cols-2",children:i.fields.map((b)=>{const o=k(s,b);if(!o)return null;const D=V(l,o.dataPath);return a("div",{className:"flex flex-col gap-1",children:[e("dt",{className:"font-semibold text-muted-foreground/80 text-xs uppercase",children:r(o.label,d)}),e("dd",{className:"text-foreground text-sm",children:e(w,{value:D,format:o.format})})]},o.key)})})]},g))})]})}function k(t,l){return t.find((n)=>n.key===l)}
@@ -0,0 +1 @@
1
+ import{jsx as t,jsxs as m}from"react/jsx-runtime";import{resolveTranslationString as w,useDesignSystemTranslation as k}from"../../i18n/translation";import{cn as c}from"../../lib/utils";import{DisplayValue as f}from"./DataViewTable";export function DataViewList({spec:e,items:r,className:i,renderActions:d,onSelect:u,emptyState:g}){const v=k();if(e.view.kind!=="list")throw Error(`DataViewList received view kind "${e.view.kind}", expected "list".`);const n=e.view,o=n.fields,l=n.primaryField??o.find((a)=>a.key===n.primaryField)?.key??o[0]?.key;if(!r.length)return t("div",{className:c("flex w-full flex-col gap-4",i),children:g??t("div",{className:"rounded-md border border-muted-foreground/40 border-dashed p-8 text-center text-muted-foreground text-sm",children:"No records available."})});return t("div",{className:c("flex w-full flex-col gap-4",i),children:r.map((a,b)=>{const p=y(a);return m("button",{type:"button",className:c("flex w-full flex-col gap-2 rounded-lg border border-muted bg-card p-4 text-left shadow-sm transition hover:border-primary/40 hover:shadow-md focus-visible:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",n.layout==="compact"&&"md:flex-row md:items-center md:gap-4"),onClick:()=>u?.(a),children:[m("div",{className:"flex flex-1 flex-col gap-1",children:[l?t("span",{className:"font-medium text-base text-foreground",children:t(f,{item:p,fields:o,fieldKey:l})}):null,t("div",{className:"flex flex-wrap gap-x-4 gap-y-1 text-muted-foreground text-sm",children:D(n,l).map((s)=>m("span",{className:"flex items-center gap-1.5",children:[t("span",{className:"font-medium text-foreground/80",children:x(o,s,v)}),t("span",{children:t(f,{item:p,fields:o,fieldKey:s})})]},s))})]}),d?t("div",{className:"flex shrink-0 items-center gap-2",children:d(a)}):null]},b)})})}function y(e){if(e&&typeof e==="object")return e;return{}}function x(e,r,i){return w(e.find((d)=>d.key===r)?.label??r,i)}function D(e,r){if(e.secondaryFields?.length)return e.secondaryFields;return e.fields.map((i)=>i.key).filter((i)=>i!==r)}
@@ -0,0 +1 @@
1
+ import{jsx as J,jsxs as c,Fragment as p}from"react/jsx-runtime";import{resolveDataViewFilters as S}from"@contractspec/lib.contracts-spec/data-views";import{Pagination as d}from"@contractspec/lib.ui-kit-web/ui/atoms/Pagination";import{VStack as h}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as f}from"@contractspec/lib.ui-kit-web/ui/text";import*as L from"react";import{resolveTranslationString as V,useDesignSystemTranslation as u}from"../../i18n/translation";import{FiltersToolbar as m}from"../molecules/FiltersToolbar";import{DataViewDetail as v}from"./DataViewDetail";import{DataViewList as b}from"./DataViewList";import{DataViewTable as y}from"./DataViewTable";export function DataViewRenderer({spec:B,items:G=[],item:X=null,className:M,renderActions:$,onSelect:q,onRowClick:P,toolbar:R,loading:T,headerActions:Y,emptyState:Q,footer:j,search:w,onSearchChange:_,filters:I,onFilterChange:Z,pagination:K,onPageChange:D}){const z=u(),O=L.useMemo(()=>S({filters:B.view.filters,scope:B.view.filterScope,user:g(I)}),[I,B.view.filterScope,B.view.filters]),N=L.useMemo(()=>{if(B.view.filterScope){const E=Object.entries(O.user).map(([H,W])=>({key:H,label:`${A(B,H)}: ${F(W)}`,onRemove:()=>{const{[H]:r,...C}=O.user;Z?.(C)}})),U=O.lockedChips==="hidden"?[]:Object.entries(O.locked).map(([H,W])=>({key:`locked-${H}`,label:`${A(B,H)}: ${F(W)}`,disabled:!0}));return[...E,...U]}return I?Object.entries(I).map(([E,U])=>({key:E,label:`${E}: ${String(U)}`,onRemove:()=>{const{[E]:H,...W}=I;Z?.(W)}})):[]},[I,Z,O,B]),k=B.view.filterScope?Object.keys(O.user).length>0:Boolean(I&&Object.keys(I).length>0),x=L.useMemo(()=>{switch(B.view.kind){case"list":return J(b,{spec:B,items:G,className:M,renderActions:$,onSelect:q,emptyState:Q});case"table":return J(y,{spec:B,items:G,className:M,onRowClick:P,toolbar:R,loading:T,emptyState:Q,headerActions:Y,footer:j});case"detail":return J(v,{spec:B,item:X,className:M,emptyState:Q,headerActions:Y});case"grid":{const E=B.view,U={kind:"list",layout:"card",fields:E.fields,filters:E.filters,actions:E.actions,primaryField:E.primaryField,secondaryFields:E.secondaryFields,filterScope:E.filterScope},H={...B,view:U};return J(b,{spec:H,items:G,className:M,renderActions:$,onSelect:q,emptyState:Q})}default:return J(f,{className:M,children:V("Unsupported data view kind",z)})}},[B,G,X,M,$,q,P,R,T,Y,Q,j,z]);if(!(B.view.kind==="list"||B.view.kind==="table"||B.view.kind==="grid"))return J(p,{children:x});return c(h,{gap:"lg",children:[(B.view.filters?.length||_||N.length)&&J(m,{searchValue:w,onSearchChange:_,searchPlaceholder:V("Search...",z)??"Search...",activeChips:N,onClearAll:k?()=>Z?.({}):void 0,right:B.view.kind==="table"?void 0:Y}),x,K&&K.total>0&&J(d,{currentPage:K.page,totalPages:Math.ceil(K.total/K.pageSize),totalItems:K.total,itemsPerPage:K.pageSize,onPageChange:(E)=>D?.(E),onItemsPerPageChange:(E)=>{D?.(1)},showItemsPerPage:!1})]})}function g(B){if(!B)return;return Object.fromEntries(Object.entries(B??{}).filter((G)=>Boolean(G[1]&&typeof G[1]==="object"&&"kind"in G[1]&&typeof G[1].kind==="string")))}function A(B,G){return B.view.filters?.find((X)=>X.key===G)?.label??G}function F(B){if(!B)return"";if(B.kind==="single")return String(B.value);if(B.kind==="multi")return B.values.map(String).join(", ");if(B.kind==="range")return[B.from==null?"":String(B.from),B.to==null?"":String(B.to)].filter(Boolean).join(" - ");return`${B.mode}(${B.clauses.length})`}
@@ -0,0 +1 @@
1
+ import{jsx as J,jsxs as c,Fragment as p}from"react/jsx-runtime";import{resolveDataViewFilters as S}from"@contractspec/lib.contracts-spec/data-views";import{Pagination as d}from"@contractspec/lib.ui-kit/ui/atoms/Pagination";import{VStack as h}from"@contractspec/lib.ui-kit/ui/stack";import{Text as f}from"@contractspec/lib.ui-kit/ui/text";import*as L from"react";import{resolveTranslationString as x,useDesignSystemTranslation as u}from"../../i18n/translation";import{FiltersToolbar as m}from"../molecules/FiltersToolbar";import{DataViewDetail as v}from"./DataViewDetail";import{DataViewList as V}from"./DataViewList";import{DataViewTable as y}from"./DataViewTable";export function DataViewRenderer({spec:B,items:G=[],item:X=null,className:M,renderActions:$,onSelect:q,onRowClick:P,toolbar:R,loading:T,headerActions:Y,emptyState:Q,footer:j,search:w,onSearchChange:_,filters:I,onFilterChange:Z,pagination:K,onPageChange:D}){const z=u(),O=L.useMemo(()=>S({filters:B.view.filters,scope:B.view.filterScope,user:g(I)}),[I,B.view.filterScope,B.view.filters]),N=L.useMemo(()=>{if(B.view.filterScope){const E=Object.entries(O.user).map(([H,W])=>({key:H,label:`${A(B,H)}: ${F(W)}`,onRemove:()=>{const{[H]:r,...C}=O.user;Z?.(C)}})),U=O.lockedChips==="hidden"?[]:Object.entries(O.locked).map(([H,W])=>({key:`locked-${H}`,label:`${A(B,H)}: ${F(W)}`,disabled:!0}));return[...E,...U]}return I?Object.entries(I).map(([E,U])=>({key:E,label:`${E}: ${String(U)}`,onRemove:()=>{const{[E]:H,...W}=I;Z?.(W)}})):[]},[I,Z,O,B]),k=B.view.filterScope?Object.keys(O.user).length>0:Boolean(I&&Object.keys(I).length>0),b=L.useMemo(()=>{switch(B.view.kind){case"list":return J(V,{spec:B,items:G,className:M,renderActions:$,onSelect:q,emptyState:Q});case"table":return J(y,{spec:B,items:G,className:M,onRowClick:P,toolbar:R,loading:T,emptyState:Q,headerActions:Y,footer:j});case"detail":return J(v,{spec:B,item:X,className:M,emptyState:Q,headerActions:Y});case"grid":{const E=B.view,U={kind:"list",layout:"card",fields:E.fields,filters:E.filters,actions:E.actions,primaryField:E.primaryField,secondaryFields:E.secondaryFields,filterScope:E.filterScope},H={...B,view:U};return J(V,{spec:H,items:G,className:M,renderActions:$,onSelect:q,emptyState:Q})}default:return J(f,{className:M,children:x("Unsupported data view kind",z)})}},[B,G,X,M,$,q,P,R,T,Y,Q,j,z]);if(!(B.view.kind==="list"||B.view.kind==="table"||B.view.kind==="grid"))return J(p,{children:b});return c(h,{gap:"lg",children:[(B.view.filters?.length||_||N.length)&&J(m,{searchValue:w,onSearchChange:_,searchPlaceholder:x("Search...",z)??"Search...",activeChips:N,onClearAll:k?()=>Z?.({}):void 0,right:B.view.kind==="table"?void 0:Y}),b,K&&K.total>0?J(d,{currentPage:K.page,totalPages:Math.ceil(K.total/K.pageSize),totalItems:K.total,itemsPerPage:K.pageSize,onPageChange:(E)=>D?.(E),onItemsPerPageChange:(E)=>{D?.(1)},showItemsPerPage:!1}):null]})}function g(B){if(!B)return;return Object.fromEntries(Object.entries(B??{}).filter((G)=>Boolean(G[1]&&typeof G[1]==="object"&&"kind"in G[1]&&typeof G[1].kind==="string")))}function A(B,G){return B.view.filters?.find((X)=>X.key===G)?.label??G}function F(B){if(!B)return"";if(B.kind==="single")return String(B.value);if(B.kind==="multi")return B.values.map(String).join(", ");if(B.kind==="range")return[B.from==null?"":String(B.from),B.to==null?"":String(B.to)].filter(Boolean).join(" - ");return`${B.mode}(${B.clauses.length})`}
@@ -0,0 +1 @@
1
+ import{jsx as E,jsxs as V}from"react/jsx-runtime";import{useDataViewTable as A}from"@contractspec/lib.presentation-runtime-react";import{HStack as F,VStack as h}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as X}from"@contractspec/lib.ui-kit-web/ui/text";import*as C from"react";import{resolveTranslationString as W,useDesignSystemTranslation as K}from"../../i18n/translation";import{DataTable as R}from"../data-table/DataTable";import{DataViewFormattedValue as Y,getAtPath as g}from"./utils";export function DataViewTable({spec:q,items:J,className:L,onRowClick:G,toolbar:O,loading:Z,emptyState:$,headerActions:B,footer:H}){const Q=K();if(q.view.kind!=="table")throw Error(`DataViewTable received view kind "${q.view.kind}", expected "table".`);const M=q.view,P=C.useMemo(()=>(M.rowExpansion?.fields??[]).map((z)=>M.fields.find((I)=>I.key===z)).filter((z)=>Boolean(z)),[M.fields,M.rowExpansion?.fields]),N=A({spec:q,data:J,renderValue:({value:z,field:I})=>E(Y,{value:z,format:I.format}),renderExpandedContent:P.length>0?({item:z,fields:I})=>E(h,{gap:"sm",className:"py-2",children:I.map((U)=>V(F,{justify:"between",align:"start",children:[E(X,{className:"font-medium text-muted-foreground text-sm",children:W(U.label,Q)}),E(X,{className:"text-right text-sm",children:E(DisplayValue,{item:z,fields:I,fieldKey:U.key})})]},U.key))}):void 0});return E(R,{controller:N,className:L,title:W(q.meta.title,Q),description:W(q.meta.description,Q),toolbar:O,loading:Z,headerActions:B,emptyState:$,footer:H,onRowPress:G?(z)=>G(z.original):void 0})}function D(q,J){return q.find((L)=>L.key===J)}export function DisplayValue({item:q,fields:J,fieldKey:L}){const G=D(J,L);if(!G)return"";const O=g(q,G.dataPath);return E(Y,{value:O,format:G.format})}
@@ -0,0 +1 @@
1
+ import{jsx as m}from"react/jsx-runtime";import{MarkdownRenderer as a}from"../molecules/MarkdownRenderer";export function getAtPath(t,e){if(!t)return;if(!e)return t;const r=e.replace(/\[(\d+)\]/g,".$1").split(".").filter(Boolean);let n=t;for(const o of r){if(n==null||typeof n!=="object"&&!Array.isArray(n))return;n=n[o]}return n}export function DataViewFormattedValue({value:t,format:e}){if(t==null)return"";switch(e){case"boolean":return t?"Yes":"No";case"currency":return typeof t==="number"?new Intl.NumberFormat(void 0,{style:"currency",currency:"USD"}).format(t):String(t);case"percentage":return typeof t==="number"?`${(t*100).toFixed(1)}%`:String(t);case"date":return i(t,{dateStyle:"medium"});case"dateTime":return i(t,{dateStyle:"medium",timeStyle:"short"});case"markdown":return m(a,{content:t});default:return String(t)}}function i(t,e){if(t instanceof Date)return new Intl.DateTimeFormat(void 0,e).format(t);if(typeof t==="string"||typeof t==="number"){const r=new Date(t);if(!Number.isNaN(r.getTime()))return new Intl.DateTimeFormat(void 0,e).format(r)}return String(t??"")}
@@ -0,0 +1 @@
1
+ import{jsx as B}from"react/jsx-runtime";import{cn as A}from"@contractspec/lib.ui-kit-web/ui/utils";export function ActionForm({action:g,children:q,className:v,...z}){return B("form",{action:g,className:A("space-y-3",v),...z,children:q})}
@@ -0,0 +1 @@
1
+ import{jsx as g,jsxs as z}from"react/jsx-runtime";import{Card as G,CardContent as I,CardHeader as J,CardTitle as K}from"@contractspec/lib.ui-kit-web/ui/card";import{cn as B}from"@contractspec/lib.ui-kit-web/ui/utils";export function FormCardLayout({title:q,description:v,actions:A,children:D,className:E,contentClassName:F}){return z(G,{className:B("border-none shadow-2xs",E),children:[(q||v)&&z(J,{children:[q&&g(K,{children:q}),v&&g("div",{className:"text-base text-muted-foreground",children:v})]}),z(I,{className:B("p-4 md:p-5",F),children:[g("div",{className:"space-y-4",children:D}),A&&g("div",{className:"mt-4 flex justify-end gap-2",children:A})]})]})}
@@ -0,0 +1 @@
1
+ import{jsx as q,jsxs as A}from"react/jsx-runtime";import{Dialog as K,DialogContent as L,DialogDescription as M,DialogFooter as N,DialogHeader as P,DialogTitle as Q}from"@contractspec/lib.ui-kit-web/ui/dialog";export function FormDialog({open:B,onOpenChange:E,title:G,description:v,children:I,footer:z,maxWidth:J="sm:max-w-[480px]"}){return q(K,{open:B,onOpenChange:E,children:A(L,{className:J,children:[A(P,{children:[q(Q,{children:G}),v&&q(M,{children:v})]}),I,z&&q(N,{children:z})]})})}
@@ -0,0 +1 @@
1
+ import{jsx as z}from"react/jsx-runtime";import{cn as v}from"@contractspec/lib.ui-kit-web/ui/utils";export function FormSection({children:q,className:g}){return z("div",{className:v("space-y-4",g),children:q})}export function FormRow({children:q,className:g}){return z("div",{className:v("grid grid-cols-1 gap-4 md:grid-cols-2",g),children:q})}export function FormGrid({children:q,cols:g=2,className:A}){return z("div",{className:v("grid gap-4",g===1?"grid-cols-1":g===2?"grid-cols-2":g===3?"grid-cols-3":"grid-cols-4",A),children:q})}
@@ -0,0 +1 @@
1
+ import{jsx as A,jsxs as F}from"react/jsx-runtime";import{cn as V}from"@contractspec/lib.ui-kit-web/ui/utils";import*as M from"react";import{Button as O}from"../atoms/Button";export function FormOneByOneLayout({fields:q,initialKey:D,onComplete:P,className:Q}){const G=M.useMemo(()=>Object.fromEntries(q.map((z,U)=>[z.key,U])),[q]),[E,H]=M.useState(()=>{if(D&&D in G)return G[D]||0;return 0}),J=E===q.length-1,g=q[E];if(!g)return null;const S=async()=>{if(g.validate&&!g.validate())return;if(J)await P?.();else H((z)=>Math.min(z+1,q.length-1))},T=()=>H((z)=>Math.max(0,z-1));return F("div",{className:V("flex min-h-[320px] flex-col items-stretch justify-between",Q),children:[F("div",{className:"space-y-2",children:[A("div",{className:"font-medium text-lg",children:g.title}),g.description&&A("div",{className:"text-base text-muted-foreground",children:g.description}),A("div",{className:"pt-2",children:g.input})]}),F("div",{className:"mt-6 flex items-center justify-between",children:[A(O,{variant:"ghost",onPress:T,disabled:E===0,children:"Back"}),A(O,{onPress:S,children:J?"Done":"Continue"})]})]})}
@@ -0,0 +1 @@
1
+ import{jsx as z,jsxs as D}from"react/jsx-runtime";import{Separator as Z}from"@contractspec/lib.ui-kit-web/ui/separator";import{cn as $}from"@contractspec/lib.ui-kit-web/ui/utils";import*as Q from"react";import{Button as T}from"../atoms/Button";export function FormStepsLayout({steps:g,initialStepKey:E,onFinish:G,canNext:H,className:U}){const J=Q.useMemo(()=>Object.fromEntries(g.map((A,Y)=>[A.key,Y])),[g]),[C,M]=Q.useState(()=>{if(E&&E in J)return J[E]||0;return 0}),V=C===0,O=C===g.length-1,q=g[C];if(!q)return null;const W=async()=>{if(!O){if(H&&!H(q.key))return;M((A)=>Math.min(A+1,g.length-1))}else if(G)await G()},X=()=>M((A)=>Math.max(0,A-1));return D("div",{className:$("space-y-4",U),children:[D("div",{className:"flex items-center justify-between",children:[z("div",{className:"truncate font-medium text-lg",children:q.title}),D("div",{className:"text-base text-muted-foreground",children:[C+1," / ",g.length]})]}),q.description&&z("div",{className:"text-base text-muted-foreground",children:q.description}),z(Z,{}),z("div",{children:q.content}),D("div",{className:"flex items-center justify-between",children:[z(T,{variant:"ghost",onPress:X,disabled:V,children:"Back"}),z(T,{onPress:W,children:O?"Finish":"Next"})]})]})}
@@ -0,0 +1 @@
1
+ import{jsx as q}from"react/jsx-runtime";import{Form as E,useForm as G,zodResolver as H}from"@contractspec/lib.ui-kit-web/ui/form";export function ZodForm({schema:A,defaultValues:B,onSubmit:C,children:D}){const g=G({resolver:H(A),defaultValues:B});return q(E,{...g,children:q("form",{onSubmit:g.handleSubmit(C),children:D(g)})})}
@@ -0,0 +1 @@
1
+ import{jsx as A,jsxs as J}from"react/jsx-runtime";import{Command as k,CommandEmpty as S,CommandGroup as b,CommandInput as f,CommandItem as C,CommandList as T}from"@contractspec/lib.ui-kit-web/ui/command";import{Text as Y}from"@contractspec/lib.ui-kit-web/ui/text";import{Button as V}from"../../atoms/Button";import{HStack as w,VStack as Z}from"../../layout/Stack";import{useThemedPrimitive as v,useTranslatedText as _}from"../../primitives/themed";function M(F){return typeof F==="string"?F:String(F??"")}export function Autocomplete({query:F,options:$,selectedOptions:U,onQueryChange:E,onSelectOption:G,onRemoveOption:H,multiple:L,placeholder:P,placeholderI18n:g,readOnly:W,disabled:X,className:q,componentKey:B,themeVariant:K,emptyText:N="No results found."}){const D=_(),Q=v({defaultComponentKey:"Autocomplete",componentKey:B,themeVariant:K,className:q});return J(Z,{gap:"sm",className:Q.className,children:[J(k,{shouldFilter:!1,className:"rounded-md border border-input",children:[A(f,{value:F,onValueChange:E,placeholder:D(g??P),disabled:X||W}),J(T,{children:[A(S,{children:D(N)}),A(b,{children:$.map((z)=>{const R=U.some((I)=>M(I.value)===M(z.value));return J(C,{value:D(z.labelI18n)??z.labelI18n,onSelect:()=>G?.(z),disabled:X||z.disabled||W,children:[J(Z,{gap:"xs",children:[A(Y,{children:D(z.labelI18n)}),z.descriptionI18n?A(Y,{className:"text-muted-foreground text-xs",children:D(z.descriptionI18n)}):null]}),R?A(Y,{className:"ml-auto text-muted-foreground text-xs",children:D("Selected")}):null]},M(z.value))})})]})]}),U.length?A(w,{gap:"sm",wrap:"wrap",children:U.map((z)=>A(V,{type:"button",variant:"outline",size:"sm",onClick:()=>H?.(z),disabled:!L||W||X,children:D(z.labelI18n)},`selected-${M(z.value)}`))}):null]})}
@@ -0,0 +1 @@
1
+ import{jsx as A,jsxs as W}from"react/jsx-runtime";import{Checkbox as Z}from"@contractspec/lib.ui-kit-web/ui/checkbox";import{Label as $}from"@contractspec/lib.ui-kit-web/ui/label";import{RadioGroupItem,RadioGroup as H}from"@contractspec/lib.ui-kit-web/ui/radio-group";import{Switch as L}from"@contractspec/lib.ui-kit-web/ui/switch";import{HStack as G,VStack as P}from"../../layout/Stack";import{optionValue as X}from"../../primitives/control";import{useThemedPrimitive as U,useTranslatedText as R}from"../../primitives/themed";export function Checkbox({componentKey:B,themeVariant:z,className:D,checked:E,onCheckedChange:F,...J}){const q=U({defaultComponentKey:"Checkbox",componentKey:B,themeVariant:z,className:D});return A(Z,{...q.props,...J,className:q.className,checked:Boolean(E),onCheckedChange:(M)=>F?.(Boolean(M))})}export function Switch({componentKey:B,themeVariant:z,className:D,checked:E,onCheckedChange:F,...J}){const q=U({defaultComponentKey:"Switch",componentKey:B,themeVariant:z,className:D});return A(L,{...q.props,...J,className:q.className,checked:Boolean(E),onCheckedChange:(M)=>F?.(Boolean(M))})}export function RadioGroup({options:B,value:z,onValueChange:D,disabled:E,componentKey:F,themeVariant:J,className:q}){const M=R(),Y=U({defaultComponentKey:"RadioGroup",componentKey:F,themeVariant:J,className:q});return A(H,{value:z==null?"":X(z),onValueChange:(O)=>D?.(O),disabled:E,className:Y.className,children:A(P,{gap:"sm",children:B?.map((O)=>{const Q=X(O.value);return W(G,{gap:"sm",align:"center",children:[A(RadioGroupItem,{value:Q,id:Q,disabled:O.disabled}),A($,{htmlFor:Q,children:M(O.labelI18n)})]},Q)})})})}export{RadioGroupItem};
@@ -0,0 +1 @@
1
+ import{jsx as O}from"react/jsx-runtime";import{Combobox as J}from"@contractspec/lib.ui-kit-web/ui/combobox";import{useThemedPrimitive as L,useTranslatedText as M}from"../../primitives/themed";export function Combobox({componentKey:z,themeVariant:A,className:B,placeholder:D,placeholderI18n:E,searchPlaceholder:F,emptyText:G,...H}){const g=M(),q=L({defaultComponentKey:"Combobox",componentKey:z,themeVariant:A,className:B});return O(J,{...q.props,...H,className:q.className,placeholder:g(E??D),searchPlaceholder:g(F),emptyText:g(G)})}
@@ -0,0 +1 @@
1
+ import{jsx as J}from"react/jsx-runtime";import{DatePicker as Q}from"@contractspec/lib.ui-kit-web/ui/date-picker";import{DateRangePicker as S}from"@contractspec/lib.ui-kit-web/ui/date-range-picker";import{DateTimePicker as U}from"@contractspec/lib.ui-kit-web/ui/datetime-picker";import{TimePicker as X}from"@contractspec/lib.ui-kit-web/ui/time-picker";import{useThemedPrimitive as H,useTranslatedText as L}from"../../primitives/themed";export function DatePicker({componentKey:z,themeVariant:A,placeholder:B,placeholderI18n:C,className:q,...F}){const G=L(),E=H({defaultComponentKey:"DatePicker",componentKey:z,themeVariant:A,className:q});return J(Q,{...E.props,...F,className:E.className,placeholder:G(C??B)})}export function TimePicker({componentKey:z,themeVariant:A,placeholder:B,placeholderI18n:C,className:q,...F}){const G=L(),E=H({defaultComponentKey:"TimePicker",componentKey:z,themeVariant:A,className:q});return J(X,{...E.props,...F,className:E.className,placeholder:G(C??B)})}export function DateTimePicker({componentKey:z,themeVariant:A,datePlaceholder:B,timePlaceholder:C,datePlaceholderI18n:q,timePlaceholderI18n:F,className:G,...E}){const M=L(),O=H({defaultComponentKey:"DateTimePicker",componentKey:z,themeVariant:A,className:G});return J(U,{...O.props,...E,className:O.className,datePlaceholder:M(q??B),timePlaceholder:M(F??C)})}export function DateRangePicker({componentKey:z,themeVariant:A,className:B,...C}){const q=H({defaultComponentKey:"DateRangePicker",componentKey:z,themeVariant:A,className:B});return J(S,{...q.props,...C,className:q.className})}
@@ -1 +1 @@
1
- export{DropdownMenu,DropdownMenuCheckboxItem,DropdownMenuContent,DropdownMenuGroup,DropdownMenuItem,DropdownMenuLabel,DropdownMenuPortal,DropdownMenuRadioGroup,DropdownMenuRadioItem,DropdownMenuSeparator,DropdownMenuShortcut,DropdownMenuSub,DropdownMenuSubContent,DropdownMenuSubTrigger,DropdownMenuTrigger}from"@contractspec/lib.ui-kit/ui/dropdown-menu";
1
+ export{DropdownMenu,DropdownMenuCheckboxItem,DropdownMenuContent,DropdownMenuGroup,DropdownMenuItem,DropdownMenuLabel,DropdownMenuPortal,DropdownMenuRadioGroup,DropdownMenuRadioItem,DropdownMenuSeparator,DropdownMenuShortcut,DropdownMenuSub,DropdownMenuSubContent,DropdownMenuSubTrigger,DropdownMenuTrigger}from"@contractspec/lib.ui-kit-web/ui/dropdown-menu";
@@ -0,0 +1 @@
1
+ import{jsx as O}from"react/jsx-runtime";import{Field as R,FieldContent as U,FieldDescription as X,FieldError as Y,FieldGroup as Z,FieldLabel as $,FieldLegend as k,FieldSeparator as C,FieldSet as D}from"@contractspec/lib.ui-kit-web/ui/field";import{useThemedPrimitive as M,useTranslatedNode as Q}from"../../primitives/themed";export function Field({componentKey:A,themeVariant:B,className:H,layout:I,...z}){const q=M({defaultComponentKey:"Field",componentKey:A,themeVariant:B,className:H});return O(R,{...q.props,...z,className:q.className})}export function FieldSet({componentKey:A,themeVariant:B,className:H,...I}){const z=M({defaultComponentKey:"FieldSet",componentKey:A,themeVariant:B,className:H});return O(D,{...z.props,...I,className:z.className})}export function FieldLegend({componentKey:A,themeVariant:B,className:H,children:I,...z}){const q=M({defaultComponentKey:"FieldLegend",componentKey:A,themeVariant:B,className:H}),J=Q();return O(k,{...q.props,...z,className:q.className,children:J(I)})}export function FieldContent({componentKey:A,themeVariant:B,className:H,...I}){const z=M({defaultComponentKey:"FieldContent",componentKey:A,themeVariant:B,className:H});return O(U,{...z.props,...I,className:z.className})}export function FieldGroup({componentKey:A,themeVariant:B,className:H,layout:I,...z}){const q=M({defaultComponentKey:"FieldGroup",componentKey:A,themeVariant:B,className:H});return O(Z,{...q.props,...z,className:q.className})}export function FieldLabel({componentKey:A,themeVariant:B,className:H,children:I,...z}){const q=M({defaultComponentKey:"FieldLabel",componentKey:A,themeVariant:B,className:H}),J=Q();return O($,{...q.props,...z,className:q.className,children:J(I)})}export function FieldDescription({componentKey:A,themeVariant:B,className:H,children:I,...z}){const q=M({defaultComponentKey:"FieldDescription",componentKey:A,themeVariant:B,className:H}),J=Q();return O(X,{...q.props,...z,className:q.className,children:J(I)})}export function FieldError({componentKey:A,themeVariant:B,className:H,children:I,...z}){const q=M({defaultComponentKey:"FieldError",componentKey:A,themeVariant:B,className:H}),J=Q();return O(Y,{...q.props,...z,className:q.className,children:J(I)})}export function FieldSeparator({componentKey:A,themeVariant:B,className:H,children:I,...z}){const q=M({defaultComponentKey:"FieldSeparator",componentKey:A,themeVariant:B,className:H}),J=Q();return O(C,{...q.props,...z,className:q.className,children:J(I)})}export{InputGroup,InputGroupAddon,InputGroupButton,InputGroupInput,InputGroupText,InputGroupTextarea}from"@contractspec/lib.ui-kit-web/ui/input-group";
@@ -0,0 +1 @@
1
+ export{InputGroup,InputGroupAddon,InputGroupButton,InputGroupInput,InputGroupText,InputGroupTextarea}from"@contractspec/lib.ui-kit-web/ui/input-group";
@@ -0,0 +1 @@
1
+ export{InputOTP,InputOTPGroup,InputOTPSeparator,InputOTPSlot}from"@contractspec/lib.ui-kit-web/ui/input-otp";
@@ -0,0 +1 @@
1
+ import{jsx as S}from"react/jsx-runtime";import{LoadingButton as M}from"@contractspec/lib.ui-kit-web/ui/loading-button";import{useThemedPrimitive as O,useTranslatedNode as Q,useTranslatedText as R}from"../../primitives/themed";export function LoadingButton({componentKey:z,themeVariant:A,className:C,children:D,loadingText:E,labelI18n:F,...G}){const q=O({defaultComponentKey:"LoadingButton",componentKey:z,themeVariant:A,className:C}),H=Q(),J=R();return S(M,{...q.props,...G,className:q.className,loadingText:J(E),children:H(F??D)})}
@@ -0,0 +1 @@
1
+ import{jsx as A}from"react/jsx-runtime";import{NativeSelectOptGroup,NativeSelect as D,NativeSelectOption as E}from"@contractspec/lib.ui-kit-web/ui/native-select";import{useThemedPrimitive as F,useTranslatedText as H}from"../../primitives/themed";export function NativeSelect({componentKey:g,themeVariant:q,className:B,placeholderI18n:I,...C}){const z=F({defaultComponentKey:"NativeSelect",componentKey:g,themeVariant:q,className:B});return A(D,{...z.props,...C,className:z.className})}export function NativeSelectOption(g){const q=H();return A(E,{...g,children:typeof g.children==="string"?q(g.children):g.children})}export{NativeSelectOptGroup};
@@ -0,0 +1 @@
1
+ import{jsx as A,jsxs as k}from"react/jsx-runtime";import{SelectContent,SelectGroup,SelectItem,SelectTrigger,SelectValue,Select as Y}from"@contractspec/lib.ui-kit-web/ui/select";import{useThemedPrimitive as Z,useTranslatedText as $}from"../../primitives/themed";function B(z){return typeof z==="string"?z:String(z??"")}export function Select({options:z,value:D,onChange:F,placeholder:H,disabled:J,className:L,componentKey:M,themeVariant:O,placeholderI18n:Q,...R}){const E=$(),U=Z({defaultComponentKey:"Select",componentKey:M,themeVariant:O,className:L});return k(Y,{value:D==null?"":B(D),onValueChange:(q)=>F?.(q),disabled:J,...R,children:[A(SelectTrigger,{className:U.className,children:A(SelectValue,{placeholder:E(Q??H)})}),A(SelectContent,{children:A(SelectGroup,{children:z?.map((q,X)=>A(SelectItem,{value:B(q.value),disabled:q.disabled,children:E(q.labelI18n)??B(q.labelI18n)},`${B(q.value)}-${X}`))})})]})}export{SelectContent,SelectGroup,SelectItem,SelectTrigger,SelectValue};
@@ -0,0 +1 @@
1
+ export{InputPassword}from"../../atoms/InputPassword";export{Autocomplete}from"./Autocomplete";export{Checkbox,RadioGroup,RadioGroupItem,Switch}from"./ChoiceControls";export{Combobox}from"./Combobox";export{DatePicker,DateRangePicker,DateTimePicker,TimePicker}from"./DateTimeControls";export{DropdownMenu,DropdownMenuCheckboxItem,DropdownMenuContent,DropdownMenuGroup,DropdownMenuItem,DropdownMenuLabel,DropdownMenuPortal,DropdownMenuRadioGroup,DropdownMenuRadioItem,DropdownMenuSeparator,DropdownMenuShortcut,DropdownMenuSub,DropdownMenuSubContent,DropdownMenuSubTrigger,DropdownMenuTrigger}from"./DropdownMenu";export{Field,FieldContent,FieldDescription,FieldError,FieldGroup,FieldLabel,FieldLegend,FieldSeparator,FieldSet}from"./Field";export{InputGroup,InputGroupAddon,InputGroupButton,InputGroupInput,InputGroupText,InputGroupTextarea}from"./InputGroup";export{InputOTP,InputOTPGroup,InputOTPSeparator,InputOTPSlot}from"./InputOTP";export{LoadingButton}from"./LoadingButton";export{NativeSelect,NativeSelectOptGroup,NativeSelectOption}from"./NativeSelect";export{Select}from"./Select";
@@ -0,0 +1 @@
1
+ export{ActionForm}from"./ActionForm";export*from"./controls";export{FormCardLayout}from"./FormCardLayout";export{FormDialog}from"./FormDialog";export{FormGrid,FormRow,FormSection}from"./FormLayout";export{FormOneByOneLayout}from"./FormOneByOneLayout";export{FormStepsLayout}from"./FormStepsLayout";export{ZodForm}from"./ZodForm";
@@ -0,0 +1 @@
1
+ import{jsx as E}from"react/jsx-runtime";import{Box as F,HStack as G,VStack as I}from"@contractspec/lib.ui-kit-web/ui/stack";import{useThemedPrimitive as D}from"../primitives/themed";export function Box({componentKey:q,themeVariant:z,className:A,...C}){const g=D({defaultComponentKey:"Box",componentKey:q,themeVariant:z,className:A});return E(F,{...g.props,...C,className:g.className})}export function HStack({componentKey:q,themeVariant:z,className:A,...C}){const g=D({defaultComponentKey:"HStack",componentKey:q,themeVariant:z,className:A});return E(G,{...g.props,...C,className:g.className})}export function VStack({componentKey:q,themeVariant:z,className:A,...C}){const g=D({defaultComponentKey:"VStack",componentKey:q,themeVariant:z,className:A});return E(I,{...g.props,...C,className:g.className})}
@@ -0,0 +1 @@
1
+ export{Box,HStack,VStack}from"./Stack";
@@ -0,0 +1 @@
1
+ import{jsx as g,jsxs as C}from"react/jsx-runtime";import{cn as B}from"@contractspec/lib.ui-kit-web/ui/utils";export function DefinitionList({items:v,className:z}){return g("dl",{className:B("grid grid-cols-1 gap-3 md:grid-cols-3",z),children:v.map((q,A)=>C("div",{className:"col-span-1 grid grid-cols-3 gap-3 md:col-span-3",children:[g("dt",{className:"col-span-1 font-medium text-base text-foreground",children:q.term}),g("dd",{className:"col-span-2 text-base text-muted-foreground",children:q.description})]},A))})}
@@ -0,0 +1 @@
1
+ import{jsx as g,jsxs as C}from"react/jsx-runtime";import{cn as B}from"@contractspec/lib.ui-kit-web/ui/utils";export function KeyValueList({items:v,className:z}){return g("div",{className:B("grid grid-cols-1 gap-2",z),children:v.map((q,A)=>C("div",{className:"flex items-start gap-3",children:[g("div",{className:"w-40 shrink-0 font-medium text-base text-foreground",children:q.key}),g("div",{className:"flex-1 text-base text-muted-foreground",children:q.value})]},A))})}
@@ -0,0 +1 @@
1
+ import{jsx as B}from"react/jsx-runtime";import{cn as z}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as A}from"class-variance-authority";const calloutVariants=A("rounded-md border p-4",{variants:{tone:{info:"border-border bg-muted/30",warning:"border-warning/50 bg-warning/10",danger:"border-destructive/50 bg-destructive/10"}},defaultVariants:{tone:"info"}});export function LegalCallout({tone:d,className:g,...q}){return B("div",{className:z(calloutVariants({tone:d}),g),...q})}export{calloutVariants};
@@ -0,0 +1 @@
1
+ import{jsx as G}from"react/jsx-runtime";import{cn as E}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as F}from"class-variance-authority";const headingVariants=F("text-foreground tracking-tight",{variants:{level:{h1:"font-semibold text-3xl md:text-4xl",h2:"font-semibold text-2xl md:text-3xl",h3:"font-semibold text-xl md:text-2xl",h4:"font-semibold text-lg md:text-xl"},tone:{default:"",muted:"text-muted-foreground",accent:"text-primary"},spacing:{none:"",sm:"mt-4",md:"mt-6",lg:"mt-8"}},defaultVariants:{level:"h2",tone:"default",spacing:"md"}});export function LegalHeading({as:z,level:q,tone:A,spacing:B,className:C,...D}){return G(z??q??"h2",{className:E(headingVariants({level:q,tone:A,spacing:B}),C),...D})}export{headingVariants};
@@ -0,0 +1 @@
1
+ import{jsx as F}from"react/jsx-runtime";import{cn as D}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as E}from"class-variance-authority";const listVariants=E("",{variants:{type:{unordered:"list-disc pl-6",ordered:"list-decimal pl-6",none:"pl-0"},spacing:{sm:"space-y-1",md:"space-y-2",lg:"space-y-3"}},defaultVariants:{type:"unordered",spacing:"md"}});export function LegalList({type:q,spacing:z,className:A,children:B,...C}){return F(q==="ordered"?"ol":"ul",{className:D(listVariants({type:q,spacing:z}),A),...C,children:B})}export{listVariants};
@@ -0,0 +1 @@
1
+ import{jsx as F}from"react/jsx-runtime";import{cn as D}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as E}from"class-variance-authority";const sectionVariants=E("space-y-3",{variants:{spacing:{sm:"py-3",md:"py-4",lg:"py-6"},border:{none:"",top:"border-t",bottom:"border-b",both:"border-y"},tone:{plain:"",subtle:"bg-muted/30"}},defaultVariants:{spacing:"md",border:"none",tone:"plain"}});export function LegalSection({spacing:q,border:z,tone:A,className:B,...C}){return F("div",{className:D(sectionVariants({spacing:q,border:z,tone:A}),B),...C})}export{sectionVariants};
@@ -0,0 +1 @@
1
+ import{jsx as G}from"react/jsx-runtime";import{cn as E}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as F}from"class-variance-authority";const textVariants=F("text-base leading-relaxed",{variants:{tone:{default:"text-foreground",muted:"text-muted-foreground",danger:"text-destructive"},size:{base:"text-base",sm:"text-sm",lg:"text-lg"},spacing:{none:"",sm:"mt-2",md:"mt-3",lg:"mt-4"}},defaultVariants:{tone:"default",size:"base",spacing:"sm"}});export function LegalText({as:d="p",tone:q,size:A,spacing:B,className:C,...D}){return G(d,{className:E(textVariants({tone:q,size:A,spacing:B}),C),...D})}export{textVariants};
@@ -0,0 +1 @@
1
+ import{jsx as z,jsxs as G}from"react/jsx-runtime";import{Checkbox as K}from"@contractspec/lib.ui-kit-web/ui/checkbox";import{cn as F}from"@contractspec/lib.ui-kit-web/ui/utils";export function ConsentItem({id:A,label:D,description:B,checked:q,onChange:E,className:H}){return G("div",{className:F("flex items-start gap-3",H),children:[z(K,{id:A,checked:q,onCheckedChange:(J)=>E(Boolean(J))}),G("div",{children:[z("label",{htmlFor:A,className:"font-medium text-base",children:D}),B&&z("div",{className:"text-base text-muted-foreground",children:B})]})]})}export function ConsentList({items:A,onChange:D,className:B}){return z("div",{className:F("space-y-3",B),children:A.map((q)=>z(ConsentItem,{...q,onChange:(E)=>D(q.id,E)},q.id))})}
@@ -0,0 +1 @@
1
+ import{jsx as z,jsxs as B}from"react/jsx-runtime";import{Label as F}from"@contractspec/lib.ui-kit-web/ui/label";import{Input as G}from"../../atoms/Input";import{Textarea as H}from"../../atoms/Textarea";export function ContactFields({value:q,onChange:D,disabled:E}){return B("div",{className:"space-y-4",children:[B("div",{className:"space-y-2",children:[z(F,{children:"Nom"}),z(G,{value:q.name,onChange:(A)=>D({...q,name:A.target.value}),disabled:E})]}),B("div",{className:"space-y-2",children:[z(F,{children:"Email"}),z(G,{type:"email",value:q.email,onChange:(A)=>D({...q,email:A.target.value}),disabled:E})]}),B("div",{className:"space-y-2",children:[z(F,{children:"Objet"}),z(G,{value:q.subject,onChange:(A)=>D({...q,subject:A.target.value}),disabled:E})]}),B("div",{className:"space-y-2",children:[z(F,{children:"Message"}),z(H,{value:q.message,onChange:(A)=>D({...q,message:A.target.value}),disabled:E,rows:6})]})]})}
@@ -0,0 +1 @@
1
+ import{jsx as F,jsxs as A}from"react/jsx-runtime";import{cn as E}from"@contractspec/lib.ui-kit-web/ui/utils";export function LegalMeta({lastUpdated:q,version:z,className:B}){const C=(g)=>{if(!g)return null;try{return(typeof g==="string"?new Date(g):g).toLocaleDateString()}catch{return String(g)}};return A("div",{className:E("text-base text-muted-foreground",B),children:[z&&A("span",{children:["Version ",z]}),z&&q&&F("span",{className:"mx-2",children:"•"}),q&&A("span",{children:["Dernière mise à jour: ",C(q)]})]})}
@@ -0,0 +1 @@
1
+ import{jsx as q}from"react/jsx-runtime";import{cn as A}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as J}from"class-variance-authority";const tocVariants=J("text-base",{variants:{variant:{sidebar:"space-y-2",inline:"flex flex-wrap gap-3"},size:{sm:"",md:"text-base"}},defaultVariants:{variant:"sidebar",size:"md"}});export function LegalTOC({items:B,activeHref:C,onNavigate:D,variant:E,size:F,className:G,...I}){return q("nav",{"aria-label":"Table of contents",className:A(tocVariants({variant:E,size:F}),G),...I,children:E==="inline"?B.map((d)=>q("a",{href:d.href,onClick:(K)=>{D?.(d.href)},className:A("rounded-xs px-2 py-1 hover:bg-accent hover:text-accent-foreground",C===d.href&&"bg-accent text-accent-foreground"),children:d.label},d.href)):q("ul",{className:"list-none space-y-2 pl-0",children:B.map((d)=>q("li",{children:q("a",{href:d.href,onClick:()=>D?.(d.href),className:A("block rounded-xs px-2 py-1 hover:bg-accent hover:text-accent-foreground",C===d.href&&"bg-accent text-accent-foreground"),children:d.label})},d.href))})})}export{tocVariants};
@@ -0,0 +1 @@
1
+ import{jsx as o,jsxs as g}from"react/jsx-runtime";import*as s from"react";import{Button as b}from"../../atoms/Button";import{ContactFields as c}from"../molecules/ContactFields";export function ContactForm({labels:m={submit:"Envoyer"},initialValue:r={name:"",email:"",subject:"",message:""},disabled:e,onSubmit:a}){const[i,l]=s.useState(r),[t,n]=s.useState(!1);return g("form",{onSubmit:async(u)=>{u.preventDefault();if(!a)return;n(!0);try{await a(i)}finally{n(!1)}},className:"space-y-6",children:[o(c,{value:i,onChange:l,disabled:e||t}),o(b,{disabled:e||t,type:"submit",children:t?"Envoi…":m.submit})]})}
@@ -0,0 +1 @@
1
+ import{jsx as t,jsxs as d}from"react/jsx-runtime";import*as u from"react";import{Button as r}from"../../atoms/Button";import{LegalHeading as c}from"../atoms/LegalHeading";import{LegalSection as m}from"../atoms/LegalSection";import{LegalText as v}from"../atoms/LegalText";export function GDPRDataRequest({onExport:s,onDelete:p,labels:o={export:"Demander une copie",delete:"Demander la suppression"}}){const[e,n]=u.useState(null),l=async(a)=>{const i=a==="export"?s:p;if(!i)return;n(a);try{await i()}finally{n(null)}};return d(m,{border:"top",className:"space-y-3",children:[t(c,{as:"h2",level:"h2",children:"Demandes de données"}),t(v,{children:"Vous pouvez demander une copie de vos données ou solliciter leur suppression. Ces demandes nécessitent une vérification d’identité et sont traitées dans les délais légaux."}),d("div",{className:"flex flex-wrap gap-3",children:[t(r,{onPress:()=>l("export"),disabled:e!==null,children:e==="export"?"Envoi…":o.export}),t(r,{variant:"destructive",onPress:()=>l("delete"),disabled:e!==null,children:e==="delete"?"Envoi…":o.delete})]})]})}
@@ -0,0 +1 @@
1
+ import{jsx as t,jsxs as c}from"react/jsx-runtime";import{LegalHeading as a}from"../atoms/LegalHeading";import{LegalList as l}from"../atoms/LegalList";import{LegalSection as n}from"../atoms/LegalSection";export function GDPRRights({title:e="Vos droits RGPD",rights:i=["Accès à vos données","Rectification","Effacement (droit à l’oubli)","Opposition et limitation","Portabilité"]}){return c(n,{border:"top",children:[t(a,{as:"h2",level:"h2",children:e}),t(l,{type:"unordered",children:i.map((o,r)=>t("li",{children:o},r))})]})}
@@ -0,0 +1 @@
1
+ import{jsx as q,jsxs as A}from"react/jsx-runtime";import{cn as G}from"@contractspec/lib.ui-kit-web/ui/utils";import{LegalHeading as I}from"../atoms/LegalHeading";import{LegalMeta as J}from"../molecules/LegalMeta";import{LegalTOC as B}from"../molecules/LegalTOC";export function LegalPageLayout({title:D,meta:z,toc:v,children:E,className:F}){return A("div",{className:G("mx-auto w-full max-w-6xl px-4 py-8 md:py-12",F),children:[A("div",{className:"mb-6 space-y-2",children:[q(I,{as:"h1",level:"h1",spacing:"sm",children:D}),z&&q(J,{lastUpdated:z.lastUpdated,version:z.version})]}),v&&v.length>0&&q("div",{className:"mb-6 md:hidden",children:q(B,{items:v,variant:"inline"})}),A("div",{className:"grid grid-cols-1 gap-8 md:grid-cols-[220px_minmax(0,1fr)]",children:[v&&v.length>0?q("aside",{className:"sticky top-24 hidden self-start md:block",children:q(B,{items:v,variant:"sidebar"})}):q("div",{className:"hidden md:block"}),q("article",{className:"prose max-w-none text-foreground",children:E})]})]})}
@@ -0,0 +1 @@
1
+ import{jsx as e,jsxs as c}from"react/jsx-runtime";import*as i from"react";import{Button as u}from"../../atoms/Button";import{ContactFields as d}from"../molecules/ContactFields";import{LegalPageLayout as g}from"../organisms/LegalPageLayout";export function ContactTemplate({title:r="Contact",meta:m,onSubmit:a}){const[o,s]=i.useState({name:"",email:"",subject:"",message:""}),[t,n]=i.useState(!1);return e(g,{title:r,meta:m,children:c("form",{onSubmit:async(l)=>{l.preventDefault();if(!a)return;n(!0);try{await a(o)}finally{n(!1)}},className:"space-y-6",children:[e(d,{value:o,onChange:s,disabled:t}),e(u,{disabled:t,type:"submit",children:t?"Envoi…":"Envoyer"})]})})}
@@ -0,0 +1 @@
1
+ import{jsx as t,jsxs as i}from"react/jsx-runtime";import{KeyValueList as g}from"../atoms/KeyValueList";import{LegalHeading as d}from"../atoms/LegalHeading";import{LegalSection as a}from"../atoms/LegalSection";import{LegalText as n}from"../atoms/LegalText";import{LegalPageLayout as R}from"../organisms/LegalPageLayout";export function CookiesTemplate({title:l="Politique Cookies",meta:r,toc:c,keyValues:o,sections:m}){return i(R,{title:l,meta:r,toc:c,children:[o&&o.length>0&&t(a,{border:"bottom",children:t(g,{items:o})}),m.map((e)=>i(a,{id:e.id,border:"top",className:"scroll-mt-24",children:[t(d,{as:"h2",level:"h2",children:e.title}),t(n,{as:"div",children:e.content})]},e.id))]})}
@@ -0,0 +1 @@
1
+ import{jsx as t,jsxs as o}from"react/jsx-runtime";import{DefinitionList as g}from"../atoms/DefinitionList";import{LegalHeading as i}from"../atoms/LegalHeading";import{LegalSection as l}from"../atoms/LegalSection";import{LegalText as m}from"../atoms/LegalText";import{LegalPageLayout as L}from"../organisms/LegalPageLayout";export function PrivacyTemplate({title:r="Politique de Confidentialité",meta:c,toc:n,sections:d,definitions:a}){return o(L,{title:r,meta:c,toc:n,children:[a&&a.length>0&&o(l,{border:"bottom",children:[t(i,{as:"h2",level:"h3",children:"Définitions"}),t(g,{items:a})]}),d.map((e)=>o(l,{id:e.id,border:"top",className:"scroll-mt-24",children:[t(i,{as:"h2",level:"h2",children:e.title}),t(m,{as:"div",children:e.content})]},e.id))]})}
@@ -0,0 +1 @@
1
+ import{jsx as t,jsxs as g}from"react/jsx-runtime";import{LegalHeading as r}from"../atoms/LegalHeading";import{LegalSection as n}from"../atoms/LegalSection";import{LegalText as c}from"../atoms/LegalText";import{LegalPageLayout as d}from"../organisms/LegalPageLayout";export function SalesTermsTemplate({title:a="Conditions Générales de Vente",meta:o,toc:i,sections:l}){return t(d,{title:a,meta:o,toc:i,children:l.map((e)=>g(n,{id:e.id,border:"top",className:"scroll-mt-24",children:[t(r,{as:"h2",level:"h2",children:e.title}),t(c,{as:"div",children:e.content})]},e.id))})}
@@ -0,0 +1 @@
1
+ import{jsx as t,jsxs as g}from"react/jsx-runtime";import{LegalHeading as r}from"../atoms/LegalHeading";import{LegalSection as n}from"../atoms/LegalSection";import{LegalText as c}from"../atoms/LegalText";import{LegalPageLayout as d}from"../organisms/LegalPageLayout";export function TermsTemplate({title:a="Conditions Générales d’Utilisation",meta:o,toc:i,sections:l}){return t(d,{title:a,meta:o,toc:i,children:l.map((e)=>g(n,{id:e.id,border:"top",className:"scroll-mt-24",children:[t(r,{as:"h2",level:"h2",children:e.title}),t(c,{as:"div",children:e.content})]},e.id))})}
@@ -0,0 +1 @@
1
+ import{jsx as D}from"react/jsx-runtime";import{List as E,ListItem as F}from"@contractspec/lib.ui-kit-web/ui/list";import{useThemedPrimitive as C}from"../primitives/themed";export function List({componentKey:q,themeVariant:z,className:A,...B}){const g=C({defaultComponentKey:"List",componentKey:q,themeVariant:z,className:A});return D(E,{...g.props,...B,className:g.className})}export function ListItem({componentKey:q,themeVariant:z,className:A,...B}){const g=C({defaultComponentKey:"ListItem",componentKey:q,themeVariant:z,className:A});return D(F,{...g.props,...B,className:g.className})}
@@ -0,0 +1 @@
1
+ import{jsx as D}from"react/jsx-runtime";import{List as E,ListItem as F}from"@contractspec/lib.ui-kit/ui/list";import{useThemedPrimitive as C}from"../primitives/themed";export function List({componentKey:q,themeVariant:z,className:A,...B}){const g=C({defaultComponentKey:"List",componentKey:q,themeVariant:z,className:A});return D(E,{...g.props,...B,className:g.className})}export function ListItem({componentKey:q,themeVariant:z,className:A,...B}){const g=C({defaultComponentKey:"ListItem",componentKey:q,themeVariant:z,className:A});return D(F,{...g.props,...B,className:g.className})}
@@ -0,0 +1 @@
1
+ export{List,ListItem}from"./List";
@@ -0,0 +1 @@
1
+ import{jsx as B}from"react/jsx-runtime";import{Card as v,CardContent,CardDescription,CardHeader,CardTitle}from"@contractspec/lib.ui-kit-web/ui/card";import{cn as z}from"@contractspec/lib.ui-kit-web/ui/utils";const A={default:"border-border/60 bg-card/90",muted:"border-border/50 bg-muted/50",elevated:"border-border/50 bg-card shadow-lg shadow-black/5"};export function MarketingCard({tone:g="default",className:h,...q}){return B(v,{className:z("backdrop-blur transition-shadow",A[g],h),...q})}export{CardContent as MarketingCardContent,CardDescription as MarketingCardDescription,CardHeader as MarketingCardHeader,CardTitle as MarketingCardTitle};
@@ -0,0 +1 @@
1
+ import{jsx as q}from"react/jsx-runtime";import{cn as E}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as F}from"class-variance-authority";import{MarketingSection as G}from"./MarketingSection";const H=F("grid gap-6",{variants:{columns:{1:"grid-cols-1",2:"grid-cols-1 md:grid-cols-2",3:"grid-cols-1 md:grid-cols-2 lg:grid-cols-3",4:"grid-cols-1 md:grid-cols-2 lg:grid-cols-4"}},defaultVariants:{columns:3}});export function MarketingCardsSection({children:z,columns:A,gridClassName:B,...D}){return q(G,{...D,children:q("div",{className:E(H({columns:A}),B),children:z})})}