@contractspec/lib.design-system 4.2.0 → 4.4.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 (214) hide show
  1. package/README.md +128 -0
  2. package/dist/browser/components/data-view/DataViewGrid.js +1 -0
  3. package/dist/browser/components/data-view/DataViewList.js +1 -1
  4. package/dist/browser/components/data-view/DataViewRenderer.js +1 -1
  5. package/dist/browser/components/data-view/DataViewTable.js +1 -1
  6. package/dist/browser/components/data-view/collection.js +1 -0
  7. package/dist/browser/components/data-view/utils.js +1 -1
  8. package/dist/browser/components/forms/controls/Select.js +1 -1
  9. package/dist/browser/components/molecules/Tabs.js +1 -1
  10. package/dist/browser/components/object-reference/DefaultObjectReferenceDetail.js +1 -0
  11. package/dist/browser/components/object-reference/DefaultObjectReferenceParts.js +1 -0
  12. package/dist/browser/components/object-reference/DefaultObjectReferenceProperty.js +1 -0
  13. package/dist/browser/components/object-reference/ObjectReferenceHandler.js +1 -0
  14. package/dist/browser/components/object-reference/ObjectReferencePanel.js +1 -0
  15. package/dist/browser/components/object-reference/ReferenceIcon.js +1 -0
  16. package/dist/browser/components/object-reference/actions.js +1 -0
  17. package/dist/browser/components/object-reference/index.js +1 -0
  18. package/dist/browser/components/object-reference/maps.js +1 -0
  19. package/dist/browser/components/object-reference/runtime.js +1 -0
  20. package/dist/browser/components/object-reference/types.js +0 -0
  21. package/dist/browser/components/object-reference/url-safety.js +1 -0
  22. package/dist/browser/components/object-reference/useObjectReferenceController.js +1 -0
  23. package/dist/browser/components/organisms/Header.js +1 -1
  24. package/dist/browser/components/organisms/MarketingHeader.js +1 -1
  25. package/dist/browser/components/organisms/MarketingHeaderMobile.js +1 -1
  26. package/dist/browser/components/overlays/AdaptivePanel.js +1 -0
  27. package/dist/browser/components/overlays/index.js +1 -0
  28. package/dist/browser/components/shell/AppShell.js +1 -0
  29. package/dist/browser/components/shell/AppShell.types.js +0 -0
  30. package/dist/browser/components/shell/PageOutline.js +1 -0
  31. package/dist/browser/components/shell/ShellNotifications.js +1 -0
  32. package/dist/browser/components/shell/ShellSidebar.js +1 -0
  33. package/dist/browser/components/shell/index.js +1 -0
  34. package/dist/browser/components/shell/outline.js +1 -0
  35. package/dist/browser/components/shell/policy.js +1 -0
  36. package/dist/browser/components/shell/types.js +0 -0
  37. package/dist/browser/design-system.feature.js +1 -1
  38. package/dist/browser/i18n/translation.js +1 -1
  39. package/dist/browser/index.js +1 -1
  40. package/dist/browser/renderers/form-contract/phone-country-control.js +1 -0
  41. package/dist/browser/renderers/form-contract/phone-country-utils.js +1 -0
  42. package/dist/browser/renderers/form-contract/phone-field.js +1 -0
  43. package/dist/browser/renderers/form-contract/phone-utils.js +1 -0
  44. package/dist/browser/renderers/form-contract/renderer.js +1 -1
  45. package/dist/browser/renderers/form-contract/rich-fields.js +1 -1
  46. package/dist/browser/renderers/form-contract/shell.js +1 -1
  47. package/dist/browser/renderers/form-contract/values.js +1 -1
  48. package/dist/browser/shell.js +1 -0
  49. package/dist/components/data-view/DataViewGrid.d.ts +12 -0
  50. package/dist/components/data-view/DataViewGrid.js +1 -0
  51. package/dist/components/data-view/DataViewGrid.native.d.ts +12 -0
  52. package/dist/components/data-view/DataViewList.d.ts +3 -2
  53. package/dist/components/data-view/DataViewList.js +1 -1
  54. package/dist/components/data-view/DataViewList.native.d.ts +12 -0
  55. package/dist/components/data-view/DataViewRenderer.d.ts +11 -2
  56. package/dist/components/data-view/DataViewRenderer.js +1 -1
  57. package/dist/components/data-view/DataViewRenderer.native.d.ts +11 -2
  58. package/dist/components/data-view/DataViewTable.d.ts +4 -3
  59. package/dist/components/data-view/DataViewTable.js +1 -1
  60. package/dist/components/data-view/DataViewTable.native.d.ts +4 -3
  61. package/dist/components/data-view/collection.d.ts +24 -0
  62. package/dist/components/data-view/collection.js +1 -0
  63. package/dist/components/data-view/utils.js +1 -1
  64. package/dist/components/forms/controls/Select.d.ts +1 -1
  65. package/dist/components/forms/controls/Select.js +1 -1
  66. package/dist/components/legal/molecules/LegalTOC.d.ts +1 -1
  67. package/dist/components/marketing/MarketingCardsSection.d.ts +1 -1
  68. package/dist/components/molecules/StatusChip.d.ts +1 -1
  69. package/dist/components/molecules/Tabs.js +1 -1
  70. package/dist/components/object-reference/DefaultObjectReferenceDetail.d.ts +10 -0
  71. package/dist/components/object-reference/DefaultObjectReferenceDetail.js +1 -0
  72. package/dist/components/object-reference/DefaultObjectReferenceParts.d.ts +15 -0
  73. package/dist/components/object-reference/DefaultObjectReferenceParts.js +1 -0
  74. package/dist/components/object-reference/DefaultObjectReferenceParts.native.d.ts +16 -0
  75. package/dist/components/object-reference/DefaultObjectReferenceProperty.d.ts +13 -0
  76. package/dist/components/object-reference/DefaultObjectReferenceProperty.js +1 -0
  77. package/dist/components/object-reference/ObjectReferenceHandler.d.ts +2 -0
  78. package/dist/components/object-reference/ObjectReferenceHandler.js +1 -0
  79. package/dist/components/object-reference/ObjectReferenceHandler.native.d.ts +2 -0
  80. package/dist/components/object-reference/ObjectReferencePanel.d.ts +18 -0
  81. package/dist/components/object-reference/ObjectReferencePanel.js +1 -0
  82. package/dist/components/object-reference/ReferenceIcon.d.ts +7 -0
  83. package/dist/components/object-reference/ReferenceIcon.js +1 -0
  84. package/dist/components/object-reference/actions.d.ts +12 -0
  85. package/dist/components/object-reference/actions.js +1 -0
  86. package/dist/components/object-reference/index.d.ts +6 -0
  87. package/dist/components/object-reference/index.js +1 -0
  88. package/dist/components/object-reference/index.native.d.ts +4 -0
  89. package/dist/components/object-reference/maps.d.ts +8 -0
  90. package/dist/components/object-reference/maps.js +1 -0
  91. package/dist/components/object-reference/runtime.d.ts +13 -0
  92. package/dist/components/object-reference/runtime.js +1 -0
  93. package/dist/components/object-reference/types.d.ts +106 -0
  94. package/dist/components/object-reference/types.js +0 -0
  95. package/dist/components/object-reference/url-safety.d.ts +2 -0
  96. package/dist/components/object-reference/url-safety.js +1 -0
  97. package/dist/components/object-reference/useObjectReferenceController.d.ts +16 -0
  98. package/dist/components/object-reference/useObjectReferenceController.js +1 -0
  99. package/dist/components/organisms/Header.js +1 -1
  100. package/dist/components/organisms/MarketingHeader.js +1 -1
  101. package/dist/components/organisms/MarketingHeaderMobile.js +1 -1
  102. package/dist/components/overlays/AdaptivePanel.d.ts +26 -0
  103. package/dist/components/overlays/AdaptivePanel.js +1 -0
  104. package/dist/components/overlays/index.d.ts +1 -0
  105. package/dist/components/overlays/index.js +1 -0
  106. package/dist/components/shell/AppShell.d.ts +2 -0
  107. package/dist/components/shell/AppShell.js +1 -0
  108. package/dist/components/shell/AppShell.native.d.ts +2 -0
  109. package/dist/components/shell/AppShell.types.d.ts +22 -0
  110. package/dist/components/shell/AppShell.types.js +0 -0
  111. package/dist/components/shell/PageOutline.d.ts +12 -0
  112. package/dist/components/shell/PageOutline.js +1 -0
  113. package/dist/components/shell/PageOutline.native.d.ts +11 -0
  114. package/dist/components/shell/ShellNotifications.d.ts +5 -0
  115. package/dist/components/shell/ShellNotifications.js +1 -0
  116. package/dist/components/shell/ShellNotifications.native.d.ts +5 -0
  117. package/dist/components/shell/ShellSidebar.d.ts +11 -0
  118. package/dist/components/shell/ShellSidebar.js +1 -0
  119. package/dist/components/shell/index.d.ts +8 -0
  120. package/dist/components/shell/index.js +1 -0
  121. package/dist/components/shell/index.native.d.ts +5 -0
  122. package/dist/components/shell/outline.d.ts +5 -0
  123. package/dist/components/shell/outline.js +1 -0
  124. package/dist/components/shell/policy.d.ts +15 -0
  125. package/dist/components/shell/policy.js +1 -0
  126. package/dist/components/shell/types.d.ts +116 -0
  127. package/dist/components/shell/types.js +0 -0
  128. package/dist/design-system.feature.js +1 -1
  129. package/dist/i18n/translation.d.ts +6 -1
  130. package/dist/i18n/translation.js +1 -1
  131. package/dist/index.d.ts +5 -0
  132. package/dist/index.js +1 -1
  133. package/dist/native/components/data-view/DataViewGrid.js +1 -0
  134. package/dist/native/components/data-view/DataViewGrid.native.js +1 -0
  135. package/dist/native/components/data-view/DataViewList.js +1 -1
  136. package/dist/native/components/data-view/DataViewList.native.js +1 -0
  137. package/dist/native/components/data-view/DataViewRenderer.js +1 -1
  138. package/dist/native/components/data-view/DataViewRenderer.native.js +1 -1
  139. package/dist/native/components/data-view/DataViewTable.js +1 -1
  140. package/dist/native/components/data-view/DataViewTable.native.js +1 -1
  141. package/dist/native/components/data-view/collection.js +1 -0
  142. package/dist/native/components/data-view/utils.js +1 -1
  143. package/dist/native/components/forms/controls/Select.js +1 -1
  144. package/dist/native/components/molecules/Tabs.js +1 -1
  145. package/dist/native/components/molecules/Tabs.native.js +1 -1
  146. package/dist/native/components/object-reference/DefaultObjectReferenceDetail.js +1 -0
  147. package/dist/native/components/object-reference/DefaultObjectReferenceParts.js +1 -0
  148. package/dist/native/components/object-reference/DefaultObjectReferenceParts.native.js +1 -0
  149. package/dist/native/components/object-reference/DefaultObjectReferenceProperty.js +1 -0
  150. package/dist/native/components/object-reference/ObjectReferenceHandler.js +1 -0
  151. package/dist/native/components/object-reference/ObjectReferenceHandler.native.js +1 -0
  152. package/dist/native/components/object-reference/ObjectReferencePanel.js +1 -0
  153. package/dist/native/components/object-reference/ReferenceIcon.js +1 -0
  154. package/dist/native/components/object-reference/actions.js +1 -0
  155. package/dist/native/components/object-reference/index.js +1 -0
  156. package/dist/native/components/object-reference/index.native.js +1 -0
  157. package/dist/native/components/object-reference/maps.js +1 -0
  158. package/dist/native/components/object-reference/runtime.js +1 -0
  159. package/dist/native/components/object-reference/types.js +0 -0
  160. package/dist/native/components/object-reference/url-safety.js +1 -0
  161. package/dist/native/components/object-reference/useObjectReferenceController.js +1 -0
  162. package/dist/native/components/organisms/Header.js +1 -1
  163. package/dist/native/components/organisms/MarketingHeader.js +1 -1
  164. package/dist/native/components/organisms/MarketingHeaderMobile.js +1 -1
  165. package/dist/native/components/overlays/AdaptivePanel.js +1 -0
  166. package/dist/native/components/overlays/index.js +1 -0
  167. package/dist/native/components/shell/AppShell.js +1 -0
  168. package/dist/native/components/shell/AppShell.native.js +1 -0
  169. package/dist/native/components/shell/AppShell.types.js +0 -0
  170. package/dist/native/components/shell/PageOutline.js +1 -0
  171. package/dist/native/components/shell/PageOutline.native.js +1 -0
  172. package/dist/native/components/shell/ShellNotifications.js +1 -0
  173. package/dist/native/components/shell/ShellNotifications.native.js +1 -0
  174. package/dist/native/components/shell/ShellSidebar.js +1 -0
  175. package/dist/native/components/shell/index.js +1 -0
  176. package/dist/native/components/shell/index.native.js +1 -0
  177. package/dist/native/components/shell/outline.js +1 -0
  178. package/dist/native/components/shell/policy.js +1 -0
  179. package/dist/native/components/shell/types.js +0 -0
  180. package/dist/native/design-system.feature.js +1 -1
  181. package/dist/native/i18n/translation.js +1 -1
  182. package/dist/native/index.js +1 -1
  183. package/dist/native/renderers/form-contract/phone-country-control.js +1 -0
  184. package/dist/native/renderers/form-contract/phone-country-control.native.js +1 -0
  185. package/dist/native/renderers/form-contract/phone-country-utils.js +1 -0
  186. package/dist/native/renderers/form-contract/phone-field.js +1 -0
  187. package/dist/native/renderers/form-contract/phone-utils.js +1 -0
  188. package/dist/native/renderers/form-contract/renderer.js +1 -1
  189. package/dist/native/renderers/form-contract/rich-fields.js +1 -1
  190. package/dist/native/renderers/form-contract/shell.js +1 -1
  191. package/dist/native/renderers/form-contract/values.js +1 -1
  192. package/dist/native/shell.js +1 -0
  193. package/dist/native/shell.native.js +1 -0
  194. package/dist/renderers/form-contract/phone-country-control.d.ts +18 -0
  195. package/dist/renderers/form-contract/phone-country-control.js +1 -0
  196. package/dist/renderers/form-contract/phone-country-control.native.d.ts +18 -0
  197. package/dist/renderers/form-contract/phone-country-utils.d.ts +9 -0
  198. package/dist/renderers/form-contract/phone-country-utils.js +1 -0
  199. package/dist/renderers/form-contract/phone-field.d.ts +18 -0
  200. package/dist/renderers/form-contract/phone-field.js +1 -0
  201. package/dist/renderers/form-contract/phone-utils.d.ts +3 -0
  202. package/dist/renderers/form-contract/phone-utils.js +1 -0
  203. package/dist/renderers/form-contract/renderer.js +1 -1
  204. package/dist/renderers/form-contract/rich-fields.d.ts +2 -12
  205. package/dist/renderers/form-contract/rich-fields.js +1 -1
  206. package/dist/renderers/form-contract/shell.d.ts +9 -0
  207. package/dist/renderers/form-contract/shell.js +1 -1
  208. package/dist/renderers/form-contract/values.d.ts +1 -0
  209. package/dist/renderers/form-contract/values.js +1 -1
  210. package/dist/shell.d.ts +1 -0
  211. package/dist/shell.js +1 -0
  212. package/dist/shell.native.d.ts +1 -0
  213. package/dist/theme/variants.d.ts +1 -1
  214. package/package.json +523 -9
@@ -1 +1 @@
1
- import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";export const DesignSystemFeature=g({meta:{key:"libs.design-system",version:"1.0.0",title:"Design System",description:"Design tokens and theming primitives",domain:"design-system",owners:["@contractspec-core"],tags:["package","libs","design-system"],stability:"experimental"}});
1
+ import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";export const DesignSystemFeature=g({meta:{key:"libs.design-system",version:"1.0.0",title:"Design System",description:"Design tokens, theming primitives, and composed product-surface components",domain:"design-system",owners:["@contractspec-core"],tags:["package","libs","design-system","components"],stability:"experimental"}});
@@ -1 +1 @@
1
- import{jsx as g}from"react/jsx-runtime";import*as a from"react";const l=a.createContext(void 0);export function DesignSystemTranslationProvider({children:e,resolver:n}){return g(l.Provider,{value:n,children:e})}export function useDesignSystemTranslation(){return a.useContext(l)}export function resolveTranslationString(e,n){if(!e)return e;return n?.(e)??e}export function resolveTranslationNode(e,n){return typeof e==="string"?resolveTranslationString(e,n):e}export function createTranslationResolver({registry:e,locale:n,fallbackLocale:o,specKeys:c=[]}){return(i)=>{const r=i.match(/^([^:]+)::(.+)$/);if(r?.[1]&&r[2]){const[,s,t]=r;return e.getWithFallback(s,t,n,o)?.message.value}for(const s of c){const t=e.getWithFallback(s,i,n,o);if(t)return t.message.value}return}}
1
+ import{jsx as u}from"react/jsx-runtime";import*as l from"react";const c=l.createContext(void 0);export function DesignSystemTranslationProvider({children:e,resolver:n}){return u(c.Provider,{value:n,children:e})}export function useDesignSystemTranslation(){return l.useContext(c)}export function resolveTranslationString(e,n){if(!e)return e;return n?.(e)??e}export function resolveTranslationNode(e,n){return typeof e==="string"?resolveTranslationString(e,n):e}export function createTranslationResolver({registry:e,locale:n,fallbackLocale:s,specKeys:a=[]}){return(o)=>{const i=o.match(/^([^:]+)::(.+)$/);if(i?.[1]&&i[2]){const[,r,t]=i;return e.getWithFallback(r,t,n,s)?.message.value}for(const r of a){const t=e.getWithFallback(r,o,n,s);if(t)return t.message.value}return}}export function createRuntimeTranslationResolver({runtime:e,onMissing:n}){return(s,a)=>{const o=s.match(/^([^:]+)::(.+)$/),i=o?.[1],r=o?.[2]??s,t=e.tUnknown(r,a,{onMissing:n,specKey:i});return t===r&&n!=="key"?void 0:t}}
@@ -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{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";
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{DataViewGrid}from"./components/data-view/DataViewGrid";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{createCopyReferenceAction,createDefaultObjectReferenceActions,createEmailReferenceAction,createMapsProviderHref,createMapsReferenceActions,createOpenReferenceAction,createPhoneReferenceAction,getObjectReferenceDisplayValue,normalizeSafeObjectReferenceHref,ObjectReferenceHandler,SAFE_OBJECT_REFERENCE_PROTOCOLS}from"./components/object-reference";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*from"./components/overlays";export{PackageManagerProvider,usePackageManager}from"./components/providers/PackageManagerProvider";export{AppShell,PageOutline,ShellSidebar,usePageOutlineActiveItem}from"./components/shell";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
+ import{jsx as z,jsxs as $}from"react/jsx-runtime";import{Input as J}from"../../components/atoms/Input";import{Select as N}from"../../components/forms/controls/Select";import{HStack as Q}from"../../components/layout/Stack";import{optionValue as U}from"../../components/primitives/control";import{useTranslatedText as W}from"../../components/primitives/themed";import{countryCallingCode as Y,countryFlag as Z}from"./phone-country-utils";import{FORM_FALLBACK_TEXT as G}from"./values";export function PhoneFlag(b){if(b.hidden)return null;const q=Z(b.iso2);if(!q)return null;return z("span",{"aria-label":b.iso2,className:"shrink-0 text-lg",role:"img",children:q})}export function PhoneCountryControl(b){const q=W();return $(Q,{align:"center",gap:"sm",children:[z(PhoneFlag,{iso2:b.countryIso2,hidden:!b.display.flag}),b.display.countrySelect?z(N,{id:b.id,name:b.name,value:b.selectValue,onChange:(D)=>b.onCountryChange(U(D)),options:b.selectOptions,disabled:b.disabled||b.readOnly}):z(J,{id:b.id,name:b.name,value:b.countryCode,onChange:(D)=>b.onCountryChange(D.currentTarget.value),placeholder:q(b.parts?.placeholdersI18n?.countryCode??G.countryCode),"aria-label":q(G.countryCode),readOnly:b.readOnly,disabled:b.disabled}),b.display.callingCode?z("span",{className:"min-w-12 text-muted-foreground text-sm",children:Y(b.countryIso2)||b.countryCode}):null]})}
@@ -0,0 +1 @@
1
+ import{jsx as q,jsxs as H}from"react/jsx-runtime";import{Input as N}from"../../components/atoms/Input";import{Select as Q}from"../../components/forms/controls/Select";import{HStack as U}from"../../components/layout/Stack";import{inputValue as W,optionValue as Y}from"../../components/primitives/control";import{useTranslatedText as Z}from"../../components/primitives/themed";import{Text as G}from"../../components/typography/Typography";import{countryCallingCode as $,countryFlag as k}from"./phone-country-utils";import{FORM_FALLBACK_TEXT as J}from"./values";export function PhoneFlag(b){if(b.hidden)return null;const z=k(b.iso2);if(!z)return null;return q(G,{className:"shrink-0 text-lg",children:z})}export function PhoneCountryControl(b){const z=Z();return H(U,{align:"center",gap:"sm",children:[q(PhoneFlag,{iso2:b.countryIso2,hidden:!b.display.flag}),b.display.countrySelect?q(Q,{value:b.selectValue,onChange:(D)=>b.onCountryChange(Y(D)),options:b.selectOptions,disabled:b.disabled||b.readOnly}):q(N,{value:b.countryCode,onChange:(D)=>b.onCountryChange(W(D)),placeholder:z(b.parts?.placeholdersI18n?.countryCode??J.countryCode),ariaLabelI18n:J.countryCode,readOnly:b.readOnly,disabled:b.disabled}),b.display.callingCode?q(G,{className:"min-w-12 text-muted-foreground text-sm",children:$(b.countryIso2)||b.countryCode}):null]})}
@@ -0,0 +1 @@
1
+ import l from"country-flag-icons/unicode";import{getCountries as C,getCountryCallingCode as i}from"libphonenumber-js/min";const d=C();export function normalizeIso2(o){const n=o?.trim().toUpperCase();return n&&d.includes(n)?n:void 0}export function countryCallingCode(o){const n=normalizeIso2(o);return n?`+${i(n)}`:""}export function countryFlag(o){const n=normalizeIso2(o);return n?l(n):""}function c(o){const n=o?.allowedIso2?.map((e)=>normalizeIso2(e)).filter((e)=>Boolean(e));return n?.length?n:d}export function isAllowedPhoneCountry(o,n){const e=normalizeIso2(o);return Boolean(e&&c(n).includes(e))}export function countryFromCallingCode(o,n,e){const t=o?.trim().replace(/^\+/,"");if(!t)return;const r=c(n),u=normalizeIso2(e);if(u&&r.includes(u)&&i(u)===t)return u;return r.find((s)=>i(s)===t)}export function countryFromInput(o,n,e){const t=o?.trim(),r=normalizeIso2(t);return(r&&isAllowedPhoneCountry(r,n)?r:void 0)??countryFromCallingCode(t,n,e)}export function phoneCountryOptions(o){return c(o).map((n)=>{const e=countryCallingCode(n);return{labelI18n:`${countryFlag(n)} ${n} ${e}`,value:n}})}
@@ -0,0 +1 @@
1
+ import{jsx as U,jsxs as R}from"react/jsx-runtime";import{Input as N}from"../../components/atoms/Input";import{HStack as V,VStack as D}from"../../components/layout/Stack";import{inputValue as z}from"../../components/primitives/control";import{useTranslatedText as A}from"../../components/primitives/themed";import{PhoneCountryControl as L,PhoneFlag as T}from"./phone-country-control";import{countryCallingCode as j,countryFromInput as C,phoneCountryOptions as d}from"./phone-country-utils";import{normalizePhoneForDisplay as E,parsePhoneInput as K}from"./phone-utils";import{FORM_FALLBACK_TEXT as $}from"./values";export const PhoneField=(b)=>{const Z=A(),X=b.input?.mode??"split",g=b.input?.autoSwitch??!0,k=b.country?.detection??"input",W=b.output?.countryCodeFormat,H={flag:b.display?.flag??!0,callingCode:b.display?.callingCode??!0,countrySelect:b.display?.countrySelect??!0,extension:b.display?.extension??!0},G=E(b.value,b.country,W),Y=G.countryIso2,B=b.countryOptions?.length?b.countryOptions:d(b.country),M=B.some((q)=>String(q.value).toUpperCase()===Y)?Y:G.countryCode,Q=(q)=>{b.onChange?.(E(q,b.country,W))},S=(q)=>{const J=C(q,b.country,Y);Q({...G,countryIso2:J,countryCode:W==="iso2"?J??q:j(J)||q,e164:void 0})},f=(q)=>{if(g&&k==="input"&&q.trim().startsWith("+")){Q(K(q,G,b.country,W));return}Q({...G,nationalNumber:q,e164:void 0})},P=G.e164||`${G.countryCode}${G.nationalNumber}`,O=U(L,{id:b.id?`${b.id}-country`:void 0,name:b.name?`${b.name}.countryCode`:void 0,countryCode:G.countryCode,countryIso2:Y,selectValue:M,selectOptions:B,parts:b.parts,display:H,disabled:b.disabled,readOnly:b.readOnly,onCountryChange:S});if(X==="single")return U(D,{gap:"sm",children:R(V,{align:"center",gap:"sm",children:[U(T,{iso2:Y,hidden:!H.flag}),U(N,{id:b.id,name:b.name,value:P,onChange:(q)=>{const J=z(q);if(g&&k==="input"&&J.trim().startsWith("+")){Q(K(J,G,b.country,W));return}Q({...G,nationalNumber:J,e164:void 0})},placeholder:Z(b.parts?.placeholdersI18n?.nationalNumber??$.phoneNumber),keyboard:{kind:"phone",autoComplete:"tel"},"aria-invalid":b["aria-invalid"],"aria-describedby":b["aria-describedby"],readOnly:b.readOnly,disabled:b.disabled})]})});return R(D,{gap:"sm",children:[O,U(N,{id:b.id,name:b.name,value:G.nationalNumber,onChange:(q)=>f(z(q)),placeholder:Z(b.parts?.placeholdersI18n?.nationalNumber??$.phoneNumber),keyboard:{kind:"phone",autoComplete:"tel-national"},"aria-invalid":b["aria-invalid"],"aria-describedby":b["aria-describedby"],readOnly:b.readOnly,disabled:b.disabled}),H.extension?U(N,{id:b.id?`${b.id}-extension`:void 0,name:b.name?`${b.name}.extension`:void 0,value:G.extension??"",onChange:(q)=>Q({...G,extension:z(q)}),placeholder:Z(b.parts?.placeholdersI18n?.extension??$.extension),keyboard:{kind:"number"},"aria-label":Z($.extension),readOnly:b.readOnly,disabled:b.disabled}):null]})};
@@ -0,0 +1 @@
1
+ import{parsePhoneNumberFromString as c}from"libphonenumber-js/min";import{countryCallingCode as d,countryFromCallingCode as C,isAllowedPhoneCountry as a,normalizeIso2 as i}from"./phone-country-utils";function l(o){const e=o.nationalNumber.replace(/\D+/g,""),r=o.nationalNumber.trim(),t=o.countryCode.trim(),n=t.startsWith("+")||/^\d+$/.test(t)?t.replace(/^\+?/,"+"):d(o.countryIso2);return{...o,e164:o.e164??(n&&e&&!r.startsWith("+")?`${n}${e}`:void 0)}}export function normalizePhoneForDisplay(o,e,r){const t=o?.e164?c(o.e164):void 0,n=t?.country&&!a(t.country,e)?void 0:t,u=i(o?.countryIso2),m=r==="iso2"?i(o?.countryCode):C(o?.countryCode,e,u),s=u??n?.country??m??i(e?.defaultIso2),y=r==="iso2"?s??o?.countryCode??"":o?.countryCode?.startsWith("+")?o.countryCode:d(s);return l({countryCode:y,countryIso2:s,nationalNumber:n?.nationalNumber??o?.nationalNumber??"",extension:n?.ext??o?.extension,e164:n?.number??o?.e164})}export function parsePhoneInput(o,e,r,t){const n=c(o,i(e.countryIso2??r?.defaultIso2));if(!n||n.country&&!a(n.country,r))return normalizePhoneForDisplay({...e,nationalNumber:o,e164:void 0},r,t);return normalizePhoneForDisplay({countryCode:t==="iso2"?n.country??e.countryIso2??"":`+${n.countryCallingCode}`,countryIso2:n.country??e.countryIso2,nationalNumber:n.nationalNumber,extension:n.ext,e164:n.number},r,t)}
@@ -1 +1 @@
1
- import{shadcnDriver as j}from"@contractspec/lib.contracts-runtime-client-react/drivers/shadcn";import{createFormRenderer as q}from"@contractspec/lib.contracts-runtime-client-react/form-render";import{Autocomplete as z}from"../../components/forms/controls/Autocomplete";import{Checkbox as H,RadioGroup as J,Switch as K}from"../../components/forms/controls/ChoiceControls";import{DatePicker as M,DateTimePicker as N,TimePicker as O}from"../../components/forms/controls/DateTimeControls";import{FieldContent as Q,FieldGroup as U,FieldLegend as V,FieldSet as X,Field as Y,InputGroup as Z,InputGroupAddon as _}from"../../components/forms/controls/Field";import{Select as $}from"../../components/forms/controls/Select";import{AddressField as g,PhoneField as v}from"./rich-fields";import{Actions as B,FieldArray as E,FieldArrayItem as W,FormRoot as b,InputGroupIcon as f,TranslatedButton as w,TranslatedFieldDescription as y,TranslatedFieldError as C,TranslatedFieldLabel as L,TranslatedInput as R,TranslatedInputGroupInput as k,TranslatedInputGroupText as x,TranslatedInputGroupTextarea as D,TranslatedPasswordInput as S,TranslatedTextarea as P}from"./shell";export const formRenderer=q({submitMode:"button",driver:j({FormRoot:b,Field:Y,FieldLabel:L,FieldDescription:y,FieldError:C,FieldContent:Q,FieldGroup:U,FieldSet:X,FieldLegend:V,FieldArray:E,FieldArrayItem:W,Actions:B,Input:R,PasswordInput:S,Textarea:P,InputGroup:Z,InputGroupAddon:_,InputGroupInput:k,InputGroupTextarea:D,InputGroupText:x,InputGroupIcon:f,Select:$,Checkbox:H,RadioGroup:J,Switch:K,Autocomplete:z,AddressField:g,PhoneField:v,DateField:M,TimeField:O,DateTimeField:N,Button:w})});
1
+ import{shadcnDriver as j}from"@contractspec/lib.contracts-runtime-client-react/drivers/shadcn";import{createFormRenderer as q}from"@contractspec/lib.contracts-runtime-client-react/form-render";import{Autocomplete as z}from"../../components/forms/controls/Autocomplete";import{Checkbox as H,RadioGroup as J,Switch as K}from"../../components/forms/controls/ChoiceControls";import{DatePicker as M,DateTimePicker as O,TimePicker as Q}from"../../components/forms/controls/DateTimeControls";import{FieldContent as U,FieldGroup as V,FieldLegend as X,FieldSet as Y,Field as Z,InputGroup as _,InputGroupAddon as $}from"../../components/forms/controls/Field";import{Select as g}from"../../components/forms/controls/Select";import{AddressField as v,PhoneField as B}from"./rich-fields";import{Actions as E,FieldArray as N,FieldArrayItem as W,FormRoot as f,InputGroupIcon as w,TranslatedButton as L,TranslatedCurrencyField as b,TranslatedDurationField as y,TranslatedFieldDescription as C,TranslatedFieldError as R,TranslatedFieldLabel as k,TranslatedInput as x,TranslatedInputGroupInput as S,TranslatedInputGroupText as D,TranslatedInputGroupTextarea as h,TranslatedNumberField as A,TranslatedPasswordInput as P,TranslatedPercentField as G,TranslatedTextarea as m}from"./shell";export const formRenderer=q({submitMode:"button",driver:j({FormRoot:f,Field:Z,FieldLabel:k,FieldDescription:C,FieldError:R,FieldContent:U,FieldGroup:V,FieldSet:Y,FieldLegend:X,FieldArray:N,FieldArrayItem:W,Actions:E,Input:x,NumberField:A,PercentField:G,CurrencyField:b,DurationField:y,PasswordInput:P,Textarea:m,InputGroup:_,InputGroupAddon:$,InputGroupInput:S,InputGroupTextarea:h,InputGroupText:D,InputGroupIcon:w,Select:g,Checkbox:H,RadioGroup:J,Switch:K,Autocomplete:z,AddressField:v,PhoneField:B,DateField:M,TimeField:Q,DateTimeField:O,Button:L})});
@@ -1 +1 @@
1
- import{jsx as q,jsxs as Z}from"react/jsx-runtime";import{Input as D}from"../../components/atoms/Input";import{Select as Q}from"../../components/forms/controls/Select";import{VStack as U}from"../../components/layout/Stack";import{inputValue as G,optionValue as W}from"../../components/primitives/control";import{useTranslatedText as Y}from"../../components/primitives/themed";import{FORM_FALLBACK_TEXT as H,updateAddress as J,updatePhone as N}from"./values";export const AddressField=(b)=>{const z=Y();return Z(U,{gap:"sm",children:[q(D,{value:b.value?.line1??"",onChange:(g)=>b.onChange?.(J(b.value,"line1",G(g))),placeholder:z(b.parts?.placeholdersI18n?.line1??H.addressLine1),readOnly:b.readOnly,disabled:b.disabled}),q(D,{value:b.value?.line2??"",onChange:(g)=>b.onChange?.(J(b.value,"line2",G(g))),placeholder:z(b.parts?.placeholdersI18n?.line2??H.addressLine2),readOnly:b.readOnly,disabled:b.disabled}),q(D,{value:b.value?.city??"",onChange:(g)=>b.onChange?.(J(b.value,"city",G(g))),placeholder:z(b.parts?.placeholdersI18n?.city??H.city),readOnly:b.readOnly,disabled:b.disabled}),q(D,{value:b.value?.region??"",onChange:(g)=>b.onChange?.(J(b.value,"region",G(g))),placeholder:z(b.parts?.placeholdersI18n?.region??H.region),readOnly:b.readOnly,disabled:b.disabled}),q(D,{value:b.value?.postalCode??"",onChange:(g)=>b.onChange?.(J(b.value,"postalCode",G(g))),placeholder:z(b.parts?.placeholdersI18n?.postalCode??H.postalCode),readOnly:b.readOnly,disabled:b.disabled}),b.countryOptions?.length?q(Q,{value:b.value?.countryCode??"",onChange:(g)=>b.onChange?.(J(b.value,"countryCode",W(g))),options:b.countryOptions,disabled:b.disabled||b.readOnly}):q(D,{value:b.value?.countryCode??"",onChange:(g)=>b.onChange?.(J(b.value,"countryCode",G(g))),placeholder:z(b.parts?.placeholdersI18n?.countryCode??H.countryCode),readOnly:b.readOnly,disabled:b.disabled})]})},PhoneField=(b)=>{const z=Y();return Z(U,{gap:"sm",children:[b.countryOptions?.length?q(Q,{value:b.value?.countryCode??"",onChange:(g)=>b.onChange?.(N(b.value,"countryCode",W(g))),options:b.countryOptions,disabled:b.disabled||b.readOnly}):q(D,{value:b.value?.countryCode??"",onChange:(g)=>b.onChange?.(N(b.value,"countryCode",G(g))),placeholder:z(b.parts?.placeholdersI18n?.countryCode??H.countryCode),readOnly:b.readOnly,disabled:b.disabled}),q(D,{value:b.value?.nationalNumber??"",onChange:(g)=>b.onChange?.(N(b.value,"nationalNumber",G(g))),placeholder:z(b.parts?.placeholdersI18n?.nationalNumber??H.phoneNumber),readOnly:b.readOnly,disabled:b.disabled}),q(D,{value:b.value?.extension??"",onChange:(g)=>b.onChange?.(N(b.value,"extension",G(g))),placeholder:z(b.parts?.placeholdersI18n?.extension??H.extension),readOnly:b.readOnly,disabled:b.disabled})]})};
1
+ import{jsx as z,jsxs as W}from"react/jsx-runtime";import{Input as G}from"../../components/atoms/Input";import{Select as N}from"../../components/forms/controls/Select";import{VStack as P}from"../../components/layout/Stack";import{inputValue as H,optionValue as Q}from"../../components/primitives/control";import{useTranslatedText as U}from"../../components/primitives/themed";import{FORM_FALLBACK_TEXT as J,updateAddress as q}from"./values";export{PhoneField}from"./phone-field";export const AddressField=(b)=>{const D=U();return W(P,{gap:"sm",children:[z(G,{value:b.value?.line1??"",onChange:(g)=>b.onChange?.(q(b.value,"line1",H(g))),placeholder:D(b.parts?.placeholdersI18n?.line1??J.addressLine1),readOnly:b.readOnly,disabled:b.disabled}),z(G,{value:b.value?.line2??"",onChange:(g)=>b.onChange?.(q(b.value,"line2",H(g))),placeholder:D(b.parts?.placeholdersI18n?.line2??J.addressLine2),readOnly:b.readOnly,disabled:b.disabled}),z(G,{value:b.value?.city??"",onChange:(g)=>b.onChange?.(q(b.value,"city",H(g))),placeholder:D(b.parts?.placeholdersI18n?.city??J.city),readOnly:b.readOnly,disabled:b.disabled}),z(G,{value:b.value?.region??"",onChange:(g)=>b.onChange?.(q(b.value,"region",H(g))),placeholder:D(b.parts?.placeholdersI18n?.region??J.region),readOnly:b.readOnly,disabled:b.disabled}),z(G,{value:b.value?.postalCode??"",onChange:(g)=>b.onChange?.(q(b.value,"postalCode",H(g))),placeholder:D(b.parts?.placeholdersI18n?.postalCode??J.postalCode),readOnly:b.readOnly,disabled:b.disabled}),b.countryOptions?.length?z(N,{value:b.value?.countryCode??"",onChange:(g)=>b.onChange?.(q(b.value,"countryCode",Q(g))),options:b.countryOptions,disabled:b.disabled||b.readOnly}):z(G,{value:b.value?.countryCode??"",onChange:(g)=>b.onChange?.(q(b.value,"countryCode",H(g))),placeholder:D(b.parts?.placeholdersI18n?.countryCode??J.countryCode),readOnly:b.readOnly,disabled:b.disabled})]})};
@@ -1 +1 @@
1
- import{jsx as z}from"react/jsx-runtime";import{CalendarIcon as Y,ClockIcon as Z,InfoIcon as X,MailIcon as $,SearchIcon as v,UserIcon as B}from"lucide-react";import{Button as D}from"../../components/atoms/Button";import{Input as E}from"../../components/atoms/Input";import{InputPassword as H}from"../../components/atoms/InputPassword";import{Textarea as M}from"../../components/atoms/Textarea";import{FieldDescription as U,FieldError as K,FieldLabel as F,InputGroupInput as L,InputGroupText as V,InputGroupTextarea as G}from"../../components/forms/controls/Field";import{HStack as P,VStack as W}from"../../components/layout/Stack";import{useTranslatedNode as J,useTranslatedText as O}from"../../components/primitives/themed";export const TranslatedFieldLabel=(g)=>{const q=J();return z(F,{...g,children:q(g.children)})},TranslatedFieldDescription=(g)=>{const q=J();return z(U,{...g,children:q(g.children)})},TranslatedFieldError=(g)=>{const q=J();return z(K,{...g,children:q(g.children)})},TranslatedInput=(g)=>{const q=O();return z(E,{...g,placeholder:q(g.placeholder)})},TranslatedPasswordInput=(g)=>{const q=O(),{showLabelI18n:A,hideLabelI18n:Q,...R}=g;return z(H,{...R,placeholder:q(g.placeholder),showLabel:q(A??g.showLabel),hideLabel:q(Q??g.hideLabel)})},TranslatedTextarea=(g)=>{const q=O();return z(M,{...g,placeholder:q(g.placeholder)})},TranslatedInputGroupInput=(g)=>{const q=O();return z(L,{...g,placeholder:q(g.placeholder)})},TranslatedInputGroupTextarea=(g)=>{const q=O();return z(G,{...g,placeholder:q(g.placeholder)})},TranslatedInputGroupText=(g)=>{const q=J();return z(V,{...g,children:q(g.children)})};const S={calendar:Y,clock:Z,info:X,mail:$,search:v,user:B};export const InputGroupIcon=({iconKey:g,label:q})=>{const A=S[g]??X;return z(A,{"aria-hidden":q?void 0:!0,"aria-label":q,className:"size-4"})},TranslatedButton=({children:g,onClick:q,onPress:A,...Q})=>{const R=J();return z(D,{...Q,onClick:q?()=>q():void 0,onPress:A??q,children:R(g)})},FormRoot=({children:g,className:q})=>z(W,{gap:"lg",className:q,children:g}),FieldArray=({children:g,className:q})=>z(W,{gap:"md",className:q,children:g}),FieldArrayItem=({children:g,className:q})=>z(W,{gap:"sm",className:q,children:g}),Actions=({children:g,className:q})=>z(P,{gap:"sm",wrap:"wrap",className:q,children:g});
1
+ import{jsx as z}from"react/jsx-runtime";import{CalendarIcon as Y,ClockIcon as Z,InfoIcon as X,MailIcon as $,SearchIcon as v,UserIcon as B}from"lucide-react";import{Button as D}from"../../components/atoms/Button";import{Input as E}from"../../components/atoms/Input";import{InputPassword as H}from"../../components/atoms/InputPassword";import{Textarea as M}from"../../components/atoms/Textarea";import{FieldDescription as U,FieldError as K,FieldLabel as L,InputGroupInput as V,InputGroupText as G,InputGroupTextarea as P}from"../../components/forms/controls/Field";import{HStack as S,VStack as W}from"../../components/layout/Stack";import{useTranslatedNode as O,useTranslatedText as Q}from"../../components/primitives/themed";export const TranslatedFieldLabel=(g)=>{const q=O();return z(L,{...g,children:q(g.children)})},TranslatedFieldDescription=(g)=>{const q=O();return z(U,{...g,children:q(g.children)})},TranslatedFieldError=(g)=>{const q=O();return z(K,{...g,children:q(g.children)})},TranslatedInput=(g)=>{const q=Q();return z(E,{...g,placeholder:q(g.placeholder)})},TranslatedNumberField=({format:g,valueScale:q,valueUnit:A,...J})=>z(TranslatedInput,{...J}),TranslatedPercentField=TranslatedNumberField,TranslatedCurrencyField=TranslatedNumberField,TranslatedDurationField=TranslatedNumberField,TranslatedPasswordInput=(g)=>{const q=Q(),{showLabelI18n:A,hideLabelI18n:J,...R}=g;return z(H,{...R,placeholder:q(g.placeholder),showLabel:q(A??g.showLabel),hideLabel:q(J??g.hideLabel)})},TranslatedTextarea=(g)=>{const q=Q();return z(M,{...g,placeholder:q(g.placeholder)})},TranslatedInputGroupInput=(g)=>{const q=Q();return z(V,{...g,placeholder:q(g.placeholder)})},TranslatedInputGroupTextarea=(g)=>{const q=Q();return z(P,{...g,placeholder:q(g.placeholder)})},TranslatedInputGroupText=(g)=>{const q=O();return z(G,{...g,children:q(g.children)})};const F={calendar:Y,clock:Z,info:X,mail:$,search:v,user:B};export const InputGroupIcon=({iconKey:g,label:q})=>{const A=F[g]??X;return z(A,{"aria-hidden":q?void 0:!0,"aria-label":q,className:"size-4"})},TranslatedButton=({children:g,onClick:q,onPress:A,...J})=>{const R=O();return z(D,{...J,onClick:q?()=>q():void 0,onPress:A??q,children:R(g)})},FormRoot=({children:g,className:q})=>z(W,{gap:"lg",className:q,children:g}),FieldArray=({children:g,className:q})=>z(W,{gap:"md",className:q,children:g}),FieldArrayItem=({children:g,className:q})=>z(W,{gap:"sm",className:q,children:g}),Actions=({children:g,className:q})=>z(S,{gap:"sm",wrap:"wrap",className:q,children:g});
@@ -1 +1 @@
1
- export const FORM_FALLBACK_TEXT={addressLine1:"Address line 1",addressLine2:"Address line 2",city:"City",countryCode:"Country code",extension:"Extension",phoneNumber:"Phone number",postalCode:"Postal code",region:"Region"};export function updateAddress(e,o,n){return{line1:e?.line1??"",line2:e?.line2,city:e?.city,region:e?.region,postalCode:e?.postalCode,countryCode:e?.countryCode,[o]:n}}export function updatePhone(e,o,n){return{countryCode:e?.countryCode??"",nationalNumber:e?.nationalNumber??"",extension:e?.extension,e164:e?.e164,[o]:n}}
1
+ export const FORM_FALLBACK_TEXT={addressLine1:"Address line 1",addressLine2:"Address line 2",city:"City",countryCode:"Country code",extension:"Extension",phoneNumber:"Phone number",postalCode:"Postal code",region:"Region"};export function updateAddress(e,o,n){return{line1:e?.line1??"",line2:e?.line2,city:e?.city,region:e?.region,postalCode:e?.postalCode,countryCode:e?.countryCode,[o]:n}}export function updatePhone(e,o,n){return{countryCode:e?.countryCode??"",countryIso2:e?.countryIso2,nationalNumber:e?.nationalNumber??"",extension:e?.extension,e164:e?.e164,[o]:n}}
@@ -0,0 +1 @@
1
+ export*from"./components/shell";
@@ -0,0 +1 @@
1
+ export*from"./components/shell/index.native";
@@ -0,0 +1,18 @@
1
+ import type { FormOption, PhoneFieldSpec } from '@contractspec/lib.contracts-spec/forms';
2
+ export declare function PhoneFlag(props: {
3
+ iso2?: string;
4
+ hidden?: boolean;
5
+ }): import("react/jsx-runtime").JSX.Element | null;
6
+ export declare function PhoneCountryControl(props: {
7
+ id?: string;
8
+ name?: string;
9
+ countryCode: string;
10
+ countryIso2?: string;
11
+ selectValue?: string;
12
+ selectOptions: FormOption[];
13
+ parts?: PhoneFieldSpec['parts'];
14
+ display: Required<NonNullable<PhoneFieldSpec['display']>>;
15
+ disabled?: boolean;
16
+ readOnly?: boolean;
17
+ onCountryChange: (raw: string) => void;
18
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsx as z,jsxs as $}from"react/jsx-runtime";import{Input as J}from"../../components/atoms/Input";import{Select as N}from"../../components/forms/controls/Select";import{HStack as Q}from"../../components/layout/Stack";import{optionValue as U}from"../../components/primitives/control";import{useTranslatedText as W}from"../../components/primitives/themed";import{countryCallingCode as Y,countryFlag as Z}from"./phone-country-utils";import{FORM_FALLBACK_TEXT as G}from"./values";export function PhoneFlag(b){if(b.hidden)return null;const q=Z(b.iso2);if(!q)return null;return z("span",{"aria-label":b.iso2,className:"shrink-0 text-lg",role:"img",children:q})}export function PhoneCountryControl(b){const q=W();return $(Q,{align:"center",gap:"sm",children:[z(PhoneFlag,{iso2:b.countryIso2,hidden:!b.display.flag}),b.display.countrySelect?z(N,{id:b.id,name:b.name,value:b.selectValue,onChange:(D)=>b.onCountryChange(U(D)),options:b.selectOptions,disabled:b.disabled||b.readOnly}):z(J,{id:b.id,name:b.name,value:b.countryCode,onChange:(D)=>b.onCountryChange(D.currentTarget.value),placeholder:q(b.parts?.placeholdersI18n?.countryCode??G.countryCode),"aria-label":q(G.countryCode),readOnly:b.readOnly,disabled:b.disabled}),b.display.callingCode?z("span",{className:"min-w-12 text-muted-foreground text-sm",children:Y(b.countryIso2)||b.countryCode}):null]})}
@@ -0,0 +1,18 @@
1
+ import type { FormOption, PhoneFieldSpec } from '@contractspec/lib.contracts-spec/forms';
2
+ export declare function PhoneFlag(props: {
3
+ iso2?: string;
4
+ hidden?: boolean;
5
+ }): import("react/jsx-runtime").JSX.Element | null;
6
+ export declare function PhoneCountryControl(props: {
7
+ id?: string;
8
+ name?: string;
9
+ countryCode: string;
10
+ countryIso2?: string;
11
+ selectValue?: string;
12
+ selectOptions: FormOption[];
13
+ parts?: PhoneFieldSpec['parts'];
14
+ display: Required<NonNullable<PhoneFieldSpec['display']>>;
15
+ disabled?: boolean;
16
+ readOnly?: boolean;
17
+ onCountryChange: (raw: string) => void;
18
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ import type { FormOption, PhoneCountrySpec } from '@contractspec/lib.contracts-spec/forms';
2
+ import { type CountryCode } from 'libphonenumber-js/min';
3
+ export declare function normalizeIso2(value: string | undefined): CountryCode | undefined;
4
+ export declare function countryCallingCode(iso2: string | undefined): string;
5
+ export declare function countryFlag(iso2: string | undefined): string;
6
+ export declare function isAllowedPhoneCountry(value: string | undefined, country?: PhoneCountrySpec): boolean;
7
+ export declare function countryFromCallingCode(callingCode: string | undefined, country?: PhoneCountrySpec, preferredIso2?: string): CountryCode | undefined;
8
+ export declare function countryFromInput(value: string | undefined, country?: PhoneCountrySpec, preferredIso2?: string): CountryCode | undefined;
9
+ export declare function phoneCountryOptions(country?: PhoneCountrySpec): FormOption[];
@@ -0,0 +1 @@
1
+ import l from"country-flag-icons/unicode";import{getCountries as C,getCountryCallingCode as i}from"libphonenumber-js/min";const d=C();export function normalizeIso2(o){const n=o?.trim().toUpperCase();return n&&d.includes(n)?n:void 0}export function countryCallingCode(o){const n=normalizeIso2(o);return n?`+${i(n)}`:""}export function countryFlag(o){const n=normalizeIso2(o);return n?l(n):""}function c(o){const n=o?.allowedIso2?.map((e)=>normalizeIso2(e)).filter((e)=>Boolean(e));return n?.length?n:d}export function isAllowedPhoneCountry(o,n){const e=normalizeIso2(o);return Boolean(e&&c(n).includes(e))}export function countryFromCallingCode(o,n,e){const t=o?.trim().replace(/^\+/,"");if(!t)return;const r=c(n),u=normalizeIso2(e);if(u&&r.includes(u)&&i(u)===t)return u;return r.find((s)=>i(s)===t)}export function countryFromInput(o,n,e){const t=o?.trim(),r=normalizeIso2(t);return(r&&isAllowedPhoneCountry(r,n)?r:void 0)??countryFromCallingCode(t,n,e)}export function phoneCountryOptions(o){return c(o).map((n)=>{const e=countryCallingCode(n);return{labelI18n:`${countryFlag(n)} ${n} ${e}`,value:n}})}
@@ -0,0 +1,18 @@
1
+ import type { FormOption, PhoneFieldSpec, PhoneFormValue } from '@contractspec/lib.contracts-spec/forms';
2
+ export interface PhoneFieldProps {
3
+ id?: string;
4
+ name?: string;
5
+ 'aria-invalid'?: boolean;
6
+ 'aria-describedby'?: string;
7
+ value?: PhoneFormValue | null;
8
+ onChange?: (value: PhoneFormValue) => void;
9
+ parts?: PhoneFieldSpec['parts'];
10
+ countryOptions?: FormOption[];
11
+ input?: PhoneFieldSpec['input'];
12
+ output?: PhoneFieldSpec['output'];
13
+ country?: PhoneFieldSpec['country'];
14
+ display?: PhoneFieldSpec['display'];
15
+ readOnly?: boolean;
16
+ disabled?: boolean;
17
+ }
18
+ export declare const PhoneField: (props: PhoneFieldProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsx as U,jsxs as R}from"react/jsx-runtime";import{Input as N}from"../../components/atoms/Input";import{HStack as V,VStack as D}from"../../components/layout/Stack";import{inputValue as z}from"../../components/primitives/control";import{useTranslatedText as A}from"../../components/primitives/themed";import{PhoneCountryControl as L,PhoneFlag as T}from"./phone-country-control";import{countryCallingCode as j,countryFromInput as C,phoneCountryOptions as d}from"./phone-country-utils";import{normalizePhoneForDisplay as E,parsePhoneInput as K}from"./phone-utils";import{FORM_FALLBACK_TEXT as $}from"./values";export const PhoneField=(b)=>{const Z=A(),X=b.input?.mode??"split",g=b.input?.autoSwitch??!0,k=b.country?.detection??"input",W=b.output?.countryCodeFormat,H={flag:b.display?.flag??!0,callingCode:b.display?.callingCode??!0,countrySelect:b.display?.countrySelect??!0,extension:b.display?.extension??!0},G=E(b.value,b.country,W),Y=G.countryIso2,B=b.countryOptions?.length?b.countryOptions:d(b.country),M=B.some((q)=>String(q.value).toUpperCase()===Y)?Y:G.countryCode,Q=(q)=>{b.onChange?.(E(q,b.country,W))},S=(q)=>{const J=C(q,b.country,Y);Q({...G,countryIso2:J,countryCode:W==="iso2"?J??q:j(J)||q,e164:void 0})},f=(q)=>{if(g&&k==="input"&&q.trim().startsWith("+")){Q(K(q,G,b.country,W));return}Q({...G,nationalNumber:q,e164:void 0})},P=G.e164||`${G.countryCode}${G.nationalNumber}`,O=U(L,{id:b.id?`${b.id}-country`:void 0,name:b.name?`${b.name}.countryCode`:void 0,countryCode:G.countryCode,countryIso2:Y,selectValue:M,selectOptions:B,parts:b.parts,display:H,disabled:b.disabled,readOnly:b.readOnly,onCountryChange:S});if(X==="single")return U(D,{gap:"sm",children:R(V,{align:"center",gap:"sm",children:[U(T,{iso2:Y,hidden:!H.flag}),U(N,{id:b.id,name:b.name,value:P,onChange:(q)=>{const J=z(q);if(g&&k==="input"&&J.trim().startsWith("+")){Q(K(J,G,b.country,W));return}Q({...G,nationalNumber:J,e164:void 0})},placeholder:Z(b.parts?.placeholdersI18n?.nationalNumber??$.phoneNumber),keyboard:{kind:"phone",autoComplete:"tel"},"aria-invalid":b["aria-invalid"],"aria-describedby":b["aria-describedby"],readOnly:b.readOnly,disabled:b.disabled})]})});return R(D,{gap:"sm",children:[O,U(N,{id:b.id,name:b.name,value:G.nationalNumber,onChange:(q)=>f(z(q)),placeholder:Z(b.parts?.placeholdersI18n?.nationalNumber??$.phoneNumber),keyboard:{kind:"phone",autoComplete:"tel-national"},"aria-invalid":b["aria-invalid"],"aria-describedby":b["aria-describedby"],readOnly:b.readOnly,disabled:b.disabled}),H.extension?U(N,{id:b.id?`${b.id}-extension`:void 0,name:b.name?`${b.name}.extension`:void 0,value:G.extension??"",onChange:(q)=>Q({...G,extension:z(q)}),placeholder:Z(b.parts?.placeholdersI18n?.extension??$.extension),keyboard:{kind:"number"},"aria-label":Z($.extension),readOnly:b.readOnly,disabled:b.disabled}):null]})};
@@ -0,0 +1,3 @@
1
+ import type { PhoneCountryCodeFormat, PhoneCountrySpec, PhoneFormValue } from '@contractspec/lib.contracts-spec/forms';
2
+ export declare function normalizePhoneForDisplay(value: PhoneFormValue | null | undefined, country?: PhoneCountrySpec, format?: PhoneCountryCodeFormat): PhoneFormValue;
3
+ export declare function parsePhoneInput(input: string, current: PhoneFormValue, country?: PhoneCountrySpec, format?: PhoneCountryCodeFormat): PhoneFormValue;
@@ -0,0 +1 @@
1
+ import{parsePhoneNumberFromString as c}from"libphonenumber-js/min";import{countryCallingCode as d,countryFromCallingCode as C,isAllowedPhoneCountry as a,normalizeIso2 as i}from"./phone-country-utils";function l(o){const e=o.nationalNumber.replace(/\D+/g,""),r=o.nationalNumber.trim(),t=o.countryCode.trim(),n=t.startsWith("+")||/^\d+$/.test(t)?t.replace(/^\+?/,"+"):d(o.countryIso2);return{...o,e164:o.e164??(n&&e&&!r.startsWith("+")?`${n}${e}`:void 0)}}export function normalizePhoneForDisplay(o,e,r){const t=o?.e164?c(o.e164):void 0,n=t?.country&&!a(t.country,e)?void 0:t,u=i(o?.countryIso2),m=r==="iso2"?i(o?.countryCode):C(o?.countryCode,e,u),s=u??n?.country??m??i(e?.defaultIso2),y=r==="iso2"?s??o?.countryCode??"":o?.countryCode?.startsWith("+")?o.countryCode:d(s);return l({countryCode:y,countryIso2:s,nationalNumber:n?.nationalNumber??o?.nationalNumber??"",extension:n?.ext??o?.extension,e164:n?.number??o?.e164})}export function parsePhoneInput(o,e,r,t){const n=c(o,i(e.countryIso2??r?.defaultIso2));if(!n||n.country&&!a(n.country,r))return normalizePhoneForDisplay({...e,nationalNumber:o,e164:void 0},r,t);return normalizePhoneForDisplay({countryCode:t==="iso2"?n.country??e.countryIso2??"":`+${n.countryCallingCode}`,countryIso2:n.country??e.countryIso2,nationalNumber:n.nationalNumber,extension:n.ext,e164:n.number},r,t)}
@@ -1 +1 @@
1
- import{shadcnDriver as j}from"@contractspec/lib.contracts-runtime-client-react/drivers/shadcn";import{createFormRenderer as q}from"@contractspec/lib.contracts-runtime-client-react/form-render";import{Autocomplete as z}from"../../components/forms/controls/Autocomplete";import{Checkbox as H,RadioGroup as J,Switch as K}from"../../components/forms/controls/ChoiceControls";import{DatePicker as M,DateTimePicker as N,TimePicker as O}from"../../components/forms/controls/DateTimeControls";import{FieldContent as Q,FieldGroup as U,FieldLegend as V,FieldSet as X,Field as Y,InputGroup as Z,InputGroupAddon as _}from"../../components/forms/controls/Field";import{Select as $}from"../../components/forms/controls/Select";import{AddressField as g,PhoneField as v}from"./rich-fields";import{Actions as B,FieldArray as E,FieldArrayItem as W,FormRoot as b,InputGroupIcon as f,TranslatedButton as w,TranslatedFieldDescription as y,TranslatedFieldError as C,TranslatedFieldLabel as L,TranslatedInput as R,TranslatedInputGroupInput as k,TranslatedInputGroupText as x,TranslatedInputGroupTextarea as D,TranslatedPasswordInput as S,TranslatedTextarea as P}from"./shell";export const formRenderer=q({submitMode:"button",driver:j({FormRoot:b,Field:Y,FieldLabel:L,FieldDescription:y,FieldError:C,FieldContent:Q,FieldGroup:U,FieldSet:X,FieldLegend:V,FieldArray:E,FieldArrayItem:W,Actions:B,Input:R,PasswordInput:S,Textarea:P,InputGroup:Z,InputGroupAddon:_,InputGroupInput:k,InputGroupTextarea:D,InputGroupText:x,InputGroupIcon:f,Select:$,Checkbox:H,RadioGroup:J,Switch:K,Autocomplete:z,AddressField:g,PhoneField:v,DateField:M,TimeField:O,DateTimeField:N,Button:w})});
1
+ import{shadcnDriver as j}from"@contractspec/lib.contracts-runtime-client-react/drivers/shadcn";import{createFormRenderer as q}from"@contractspec/lib.contracts-runtime-client-react/form-render";import{Autocomplete as z}from"../../components/forms/controls/Autocomplete";import{Checkbox as H,RadioGroup as J,Switch as K}from"../../components/forms/controls/ChoiceControls";import{DatePicker as M,DateTimePicker as O,TimePicker as Q}from"../../components/forms/controls/DateTimeControls";import{FieldContent as U,FieldGroup as V,FieldLegend as X,FieldSet as Y,Field as Z,InputGroup as _,InputGroupAddon as $}from"../../components/forms/controls/Field";import{Select as g}from"../../components/forms/controls/Select";import{AddressField as v,PhoneField as B}from"./rich-fields";import{Actions as E,FieldArray as N,FieldArrayItem as W,FormRoot as f,InputGroupIcon as w,TranslatedButton as L,TranslatedCurrencyField as b,TranslatedDurationField as y,TranslatedFieldDescription as C,TranslatedFieldError as R,TranslatedFieldLabel as k,TranslatedInput as x,TranslatedInputGroupInput as S,TranslatedInputGroupText as D,TranslatedInputGroupTextarea as h,TranslatedNumberField as A,TranslatedPasswordInput as P,TranslatedPercentField as G,TranslatedTextarea as m}from"./shell";export const formRenderer=q({submitMode:"button",driver:j({FormRoot:f,Field:Z,FieldLabel:k,FieldDescription:C,FieldError:R,FieldContent:U,FieldGroup:V,FieldSet:Y,FieldLegend:X,FieldArray:N,FieldArrayItem:W,Actions:E,Input:x,NumberField:A,PercentField:G,CurrencyField:b,DurationField:y,PasswordInput:P,Textarea:m,InputGroup:_,InputGroupAddon:$,InputGroupInput:S,InputGroupTextarea:h,InputGroupText:D,InputGroupIcon:w,Select:g,Checkbox:H,RadioGroup:J,Switch:K,Autocomplete:z,AddressField:v,PhoneField:B,DateField:M,TimeField:Q,DateTimeField:O,Button:L})});
@@ -1,4 +1,5 @@
1
- import type { AddressFormValue, FormOption, PhoneFormValue } from '@contractspec/lib.contracts-spec/forms';
1
+ import type { AddressFormValue, FormOption } from '@contractspec/lib.contracts-spec/forms';
2
+ export { PhoneField } from './phone-field';
2
3
  export declare const AddressField: (props: {
3
4
  value?: AddressFormValue | null;
4
5
  onChange?: (value: AddressFormValue) => void;
@@ -10,14 +11,3 @@ export declare const AddressField: (props: {
10
11
  readOnly?: boolean;
11
12
  disabled?: boolean;
12
13
  }) => import("react/jsx-runtime").JSX.Element;
13
- export declare const PhoneField: (props: {
14
- value?: PhoneFormValue | null;
15
- onChange?: (value: PhoneFormValue) => void;
16
- parts?: {
17
- labelsI18n?: Partial<Record<keyof PhoneFormValue, string>>;
18
- placeholdersI18n?: Partial<Record<keyof PhoneFormValue, string>>;
19
- };
20
- countryOptions?: FormOption[];
21
- readOnly?: boolean;
22
- disabled?: boolean;
23
- }) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- import{jsx as q,jsxs as Z}from"react/jsx-runtime";import{Input as D}from"../../components/atoms/Input";import{Select as Q}from"../../components/forms/controls/Select";import{VStack as U}from"../../components/layout/Stack";import{inputValue as G,optionValue as W}from"../../components/primitives/control";import{useTranslatedText as Y}from"../../components/primitives/themed";import{FORM_FALLBACK_TEXT as H,updateAddress as J,updatePhone as N}from"./values";export const AddressField=(b)=>{const z=Y();return Z(U,{gap:"sm",children:[q(D,{value:b.value?.line1??"",onChange:(g)=>b.onChange?.(J(b.value,"line1",G(g))),placeholder:z(b.parts?.placeholdersI18n?.line1??H.addressLine1),readOnly:b.readOnly,disabled:b.disabled}),q(D,{value:b.value?.line2??"",onChange:(g)=>b.onChange?.(J(b.value,"line2",G(g))),placeholder:z(b.parts?.placeholdersI18n?.line2??H.addressLine2),readOnly:b.readOnly,disabled:b.disabled}),q(D,{value:b.value?.city??"",onChange:(g)=>b.onChange?.(J(b.value,"city",G(g))),placeholder:z(b.parts?.placeholdersI18n?.city??H.city),readOnly:b.readOnly,disabled:b.disabled}),q(D,{value:b.value?.region??"",onChange:(g)=>b.onChange?.(J(b.value,"region",G(g))),placeholder:z(b.parts?.placeholdersI18n?.region??H.region),readOnly:b.readOnly,disabled:b.disabled}),q(D,{value:b.value?.postalCode??"",onChange:(g)=>b.onChange?.(J(b.value,"postalCode",G(g))),placeholder:z(b.parts?.placeholdersI18n?.postalCode??H.postalCode),readOnly:b.readOnly,disabled:b.disabled}),b.countryOptions?.length?q(Q,{value:b.value?.countryCode??"",onChange:(g)=>b.onChange?.(J(b.value,"countryCode",W(g))),options:b.countryOptions,disabled:b.disabled||b.readOnly}):q(D,{value:b.value?.countryCode??"",onChange:(g)=>b.onChange?.(J(b.value,"countryCode",G(g))),placeholder:z(b.parts?.placeholdersI18n?.countryCode??H.countryCode),readOnly:b.readOnly,disabled:b.disabled})]})};export const PhoneField=(b)=>{const z=Y();return Z(U,{gap:"sm",children:[b.countryOptions?.length?q(Q,{value:b.value?.countryCode??"",onChange:(g)=>b.onChange?.(N(b.value,"countryCode",W(g))),options:b.countryOptions,disabled:b.disabled||b.readOnly}):q(D,{value:b.value?.countryCode??"",onChange:(g)=>b.onChange?.(N(b.value,"countryCode",G(g))),placeholder:z(b.parts?.placeholdersI18n?.countryCode??H.countryCode),readOnly:b.readOnly,disabled:b.disabled}),q(D,{value:b.value?.nationalNumber??"",onChange:(g)=>b.onChange?.(N(b.value,"nationalNumber",G(g))),placeholder:z(b.parts?.placeholdersI18n?.nationalNumber??H.phoneNumber),readOnly:b.readOnly,disabled:b.disabled}),q(D,{value:b.value?.extension??"",onChange:(g)=>b.onChange?.(N(b.value,"extension",G(g))),placeholder:z(b.parts?.placeholdersI18n?.extension??H.extension),readOnly:b.readOnly,disabled:b.disabled})]})};
1
+ import{jsx as z,jsxs as W}from"react/jsx-runtime";import{Input as G}from"../../components/atoms/Input";import{Select as N}from"../../components/forms/controls/Select";import{VStack as P}from"../../components/layout/Stack";import{inputValue as H,optionValue as Q}from"../../components/primitives/control";import{useTranslatedText as U}from"../../components/primitives/themed";import{FORM_FALLBACK_TEXT as J,updateAddress as q}from"./values";export{PhoneField}from"./phone-field";export const AddressField=(b)=>{const D=U();return W(P,{gap:"sm",children:[z(G,{value:b.value?.line1??"",onChange:(g)=>b.onChange?.(q(b.value,"line1",H(g))),placeholder:D(b.parts?.placeholdersI18n?.line1??J.addressLine1),readOnly:b.readOnly,disabled:b.disabled}),z(G,{value:b.value?.line2??"",onChange:(g)=>b.onChange?.(q(b.value,"line2",H(g))),placeholder:D(b.parts?.placeholdersI18n?.line2??J.addressLine2),readOnly:b.readOnly,disabled:b.disabled}),z(G,{value:b.value?.city??"",onChange:(g)=>b.onChange?.(q(b.value,"city",H(g))),placeholder:D(b.parts?.placeholdersI18n?.city??J.city),readOnly:b.readOnly,disabled:b.disabled}),z(G,{value:b.value?.region??"",onChange:(g)=>b.onChange?.(q(b.value,"region",H(g))),placeholder:D(b.parts?.placeholdersI18n?.region??J.region),readOnly:b.readOnly,disabled:b.disabled}),z(G,{value:b.value?.postalCode??"",onChange:(g)=>b.onChange?.(q(b.value,"postalCode",H(g))),placeholder:D(b.parts?.placeholdersI18n?.postalCode??J.postalCode),readOnly:b.readOnly,disabled:b.disabled}),b.countryOptions?.length?z(N,{value:b.value?.countryCode??"",onChange:(g)=>b.onChange?.(q(b.value,"countryCode",Q(g))),options:b.countryOptions,disabled:b.disabled||b.readOnly}):z(G,{value:b.value?.countryCode??"",onChange:(g)=>b.onChange?.(q(b.value,"countryCode",H(g))),placeholder:D(b.parts?.placeholdersI18n?.countryCode??J.countryCode),readOnly:b.readOnly,disabled:b.disabled})]})};
@@ -8,6 +8,15 @@ export declare const TranslatedFieldLabel: (props: React.ComponentProps<typeof F
8
8
  export declare const TranslatedFieldDescription: (props: React.ComponentProps<typeof FieldDescription>) => import("react/jsx-runtime").JSX.Element;
9
9
  export declare const TranslatedFieldError: (props: React.ComponentProps<typeof FieldError>) => import("react/jsx-runtime").JSX.Element;
10
10
  export declare const TranslatedInput: (props: React.ComponentProps<typeof Input>) => import("react/jsx-runtime").JSX.Element;
11
+ type NumericFieldProps = React.ComponentProps<typeof Input> & {
12
+ format?: unknown;
13
+ valueScale?: unknown;
14
+ valueUnit?: unknown;
15
+ };
16
+ export declare const TranslatedNumberField: ({ format: _format, valueScale: _valueScale, valueUnit: _valueUnit, ...props }: NumericFieldProps) => import("react/jsx-runtime").JSX.Element;
17
+ export declare const TranslatedPercentField: ({ format: _format, valueScale: _valueScale, valueUnit: _valueUnit, ...props }: NumericFieldProps) => import("react/jsx-runtime").JSX.Element;
18
+ export declare const TranslatedCurrencyField: ({ format: _format, valueScale: _valueScale, valueUnit: _valueUnit, ...props }: NumericFieldProps) => import("react/jsx-runtime").JSX.Element;
19
+ export declare const TranslatedDurationField: ({ format: _format, valueScale: _valueScale, valueUnit: _valueUnit, ...props }: NumericFieldProps) => import("react/jsx-runtime").JSX.Element;
11
20
  export declare const TranslatedPasswordInput: (props: React.ComponentProps<typeof InputPassword> & {
12
21
  showLabelI18n?: string;
13
22
  hideLabelI18n?: string;
@@ -1 +1 @@
1
- import{jsx as z}from"react/jsx-runtime";import{CalendarIcon as Y,ClockIcon as Z,InfoIcon as X,MailIcon as $,SearchIcon as v,UserIcon as B}from"lucide-react";import{Button as D}from"../../components/atoms/Button";import{Input as E}from"../../components/atoms/Input";import{InputPassword as H}from"../../components/atoms/InputPassword";import{Textarea as M}from"../../components/atoms/Textarea";import{FieldDescription as U,FieldError as K,FieldLabel as F,InputGroupInput as L,InputGroupText as V,InputGroupTextarea as G}from"../../components/forms/controls/Field";import{HStack as P,VStack as W}from"../../components/layout/Stack";import{useTranslatedNode as J,useTranslatedText as O}from"../../components/primitives/themed";export const TranslatedFieldLabel=(g)=>{const q=J();return z(F,{...g,children:q(g.children)})};export const TranslatedFieldDescription=(g)=>{const q=J();return z(U,{...g,children:q(g.children)})};export const TranslatedFieldError=(g)=>{const q=J();return z(K,{...g,children:q(g.children)})};export const TranslatedInput=(g)=>{const q=O();return z(E,{...g,placeholder:q(g.placeholder)})};export const TranslatedPasswordInput=(g)=>{const q=O(),{showLabelI18n:A,hideLabelI18n:Q,...R}=g;return z(H,{...R,placeholder:q(g.placeholder),showLabel:q(A??g.showLabel),hideLabel:q(Q??g.hideLabel)})};export const TranslatedTextarea=(g)=>{const q=O();return z(M,{...g,placeholder:q(g.placeholder)})};export const TranslatedInputGroupInput=(g)=>{const q=O();return z(L,{...g,placeholder:q(g.placeholder)})};export const TranslatedInputGroupTextarea=(g)=>{const q=O();return z(G,{...g,placeholder:q(g.placeholder)})};export const TranslatedInputGroupText=(g)=>{const q=J();return z(V,{...g,children:q(g.children)})};const S={calendar:Y,clock:Z,info:X,mail:$,search:v,user:B};export const InputGroupIcon=({iconKey:g,label:q})=>{const A=S[g]??X;return z(A,{"aria-hidden":q?void 0:!0,"aria-label":q,className:"size-4"})};export const TranslatedButton=({children:g,onClick:q,onPress:A,...Q})=>{const R=J();return z(D,{...Q,onClick:q?()=>q():void 0,onPress:A??q,children:R(g)})};export const FormRoot=({children:g,className:q})=>z(W,{gap:"lg",className:q,children:g});export const FieldArray=({children:g,className:q})=>z(W,{gap:"md",className:q,children:g});export const FieldArrayItem=({children:g,className:q})=>z(W,{gap:"sm",className:q,children:g});export const Actions=({children:g,className:q})=>z(P,{gap:"sm",wrap:"wrap",className:q,children:g});
1
+ import{jsx as z}from"react/jsx-runtime";import{CalendarIcon as Y,ClockIcon as Z,InfoIcon as X,MailIcon as $,SearchIcon as v,UserIcon as B}from"lucide-react";import{Button as D}from"../../components/atoms/Button";import{Input as E}from"../../components/atoms/Input";import{InputPassword as H}from"../../components/atoms/InputPassword";import{Textarea as M}from"../../components/atoms/Textarea";import{FieldDescription as U,FieldError as K,FieldLabel as L,InputGroupInput as V,InputGroupText as G,InputGroupTextarea as P}from"../../components/forms/controls/Field";import{HStack as S,VStack as W}from"../../components/layout/Stack";import{useTranslatedNode as O,useTranslatedText as Q}from"../../components/primitives/themed";export const TranslatedFieldLabel=(g)=>{const q=O();return z(L,{...g,children:q(g.children)})};export const TranslatedFieldDescription=(g)=>{const q=O();return z(U,{...g,children:q(g.children)})};export const TranslatedFieldError=(g)=>{const q=O();return z(K,{...g,children:q(g.children)})};export const TranslatedInput=(g)=>{const q=Q();return z(E,{...g,placeholder:q(g.placeholder)})};export const TranslatedNumberField=({format:g,valueScale:q,valueUnit:A,...J})=>z(TranslatedInput,{...J});export const TranslatedPercentField=TranslatedNumberField;export const TranslatedCurrencyField=TranslatedNumberField;export const TranslatedDurationField=TranslatedNumberField;export const TranslatedPasswordInput=(g)=>{const q=Q(),{showLabelI18n:A,hideLabelI18n:J,...R}=g;return z(H,{...R,placeholder:q(g.placeholder),showLabel:q(A??g.showLabel),hideLabel:q(J??g.hideLabel)})};export const TranslatedTextarea=(g)=>{const q=Q();return z(M,{...g,placeholder:q(g.placeholder)})};export const TranslatedInputGroupInput=(g)=>{const q=Q();return z(V,{...g,placeholder:q(g.placeholder)})};export const TranslatedInputGroupTextarea=(g)=>{const q=Q();return z(P,{...g,placeholder:q(g.placeholder)})};export const TranslatedInputGroupText=(g)=>{const q=O();return z(G,{...g,children:q(g.children)})};const F={calendar:Y,clock:Z,info:X,mail:$,search:v,user:B};export const InputGroupIcon=({iconKey:g,label:q})=>{const A=F[g]??X;return z(A,{"aria-hidden":q?void 0:!0,"aria-label":q,className:"size-4"})};export const TranslatedButton=({children:g,onClick:q,onPress:A,...J})=>{const R=O();return z(D,{...J,onClick:q?()=>q():void 0,onPress:A??q,children:R(g)})};export const FormRoot=({children:g,className:q})=>z(W,{gap:"lg",className:q,children:g});export const FieldArray=({children:g,className:q})=>z(W,{gap:"md",className:q,children:g});export const FieldArrayItem=({children:g,className:q})=>z(W,{gap:"sm",className:q,children:g});export const Actions=({children:g,className:q})=>z(S,{gap:"sm",wrap:"wrap",className:q,children:g});
@@ -21,6 +21,7 @@ export declare function updateAddress(value: AddressFormValue | null | undefined
21
21
  export declare function updatePhone(value: PhoneFormValue | null | undefined, key: keyof PhoneFormValue, next: string): {
22
22
  [key]: string;
23
23
  countryCode: string;
24
+ countryIso2: string | undefined;
24
25
  nationalNumber: string;
25
26
  extension: string | undefined;
26
27
  e164: string | undefined;
@@ -1 +1 @@
1
- export const FORM_FALLBACK_TEXT={addressLine1:"Address line 1",addressLine2:"Address line 2",city:"City",countryCode:"Country code",extension:"Extension",phoneNumber:"Phone number",postalCode:"Postal code",region:"Region"};export function updateAddress(e,o,n){return{line1:e?.line1??"",line2:e?.line2,city:e?.city,region:e?.region,postalCode:e?.postalCode,countryCode:e?.countryCode,[o]:n}}export function updatePhone(e,o,n){return{countryCode:e?.countryCode??"",nationalNumber:e?.nationalNumber??"",extension:e?.extension,e164:e?.e164,[o]:n}}
1
+ export const FORM_FALLBACK_TEXT={addressLine1:"Address line 1",addressLine2:"Address line 2",city:"City",countryCode:"Country code",extension:"Extension",phoneNumber:"Phone number",postalCode:"Postal code",region:"Region"};export function updateAddress(e,o,n){return{line1:e?.line1??"",line2:e?.line2,city:e?.city,region:e?.region,postalCode:e?.postalCode,countryCode:e?.countryCode,[o]:n}}export function updatePhone(e,o,n){return{countryCode:e?.countryCode??"",countryIso2:e?.countryIso2,nationalNumber:e?.nationalNumber??"",extension:e?.extension,e164:e?.e164,[o]:n}}
@@ -0,0 +1 @@
1
+ export * from './components/shell';
package/dist/shell.js ADDED
@@ -0,0 +1 @@
1
+ export*from"./components/shell";
@@ -0,0 +1 @@
1
+ export * from './components/shell/index.native';
@@ -10,7 +10,7 @@ export type EmphasisVariant = 'default' | 'subtle' | 'strong';
10
10
  export declare const dsBaseVariants: (props?: ({
11
11
  size?: "sm" | "md" | "lg" | null | undefined;
12
12
  density?: "compact" | "comfortable" | null | undefined;
13
- tone?: "success" | "neutral" | "info" | "warning" | "danger" | null | undefined;
13
+ tone?: "neutral" | "info" | "success" | "warning" | "danger" | null | undefined;
14
14
  emphasis?: "default" | "strong" | "subtle" | null | undefined;
15
15
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
16
16
  export type DSBaseVariantsProps = VariantProps<typeof dsBaseVariants>;