@contractspec/lib.design-system 4.1.0 → 4.3.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 (157) hide show
  1. package/README.md +117 -1
  2. package/dist/browser/components/atoms/Input.js +1 -1
  3. package/dist/browser/components/data-view/DataViewGrid.js +1 -0
  4. package/dist/browser/components/data-view/DataViewList.js +1 -1
  5. package/dist/browser/components/data-view/DataViewRenderer.js +1 -1
  6. package/dist/browser/components/data-view/DataViewTable.js +1 -1
  7. package/dist/browser/components/data-view/collection.js +1 -0
  8. package/dist/browser/components/data-view/utils.js +1 -1
  9. package/dist/browser/components/forms/controls/Autocomplete.js +1 -1
  10. package/dist/browser/components/forms/controls/Select.js +1 -1
  11. package/dist/browser/components/forms/controls/select-options.js +1 -0
  12. package/dist/browser/components/molecules/Tabs.js +1 -1
  13. package/dist/browser/components/object-reference/DefaultObjectReferenceParts.js +1 -0
  14. package/dist/browser/components/object-reference/ObjectReferenceHandler.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/useObjectReferenceController.js +1 -0
  22. package/dist/browser/components/shell/AppShell.js +1 -0
  23. package/dist/browser/components/shell/AppShell.types.js +0 -0
  24. package/dist/browser/components/shell/PageOutline.js +1 -0
  25. package/dist/browser/components/shell/ShellSidebar.js +1 -0
  26. package/dist/browser/components/shell/index.js +1 -0
  27. package/dist/browser/components/shell/outline.js +1 -0
  28. package/dist/browser/components/shell/types.js +0 -0
  29. package/dist/browser/design-system.feature.js +1 -1
  30. package/dist/browser/index.js +1 -1
  31. package/dist/browser/renderers/form-contract/renderer.js +1 -1
  32. package/dist/browser/renderers/form-contract/shell.js +1 -1
  33. package/dist/browser/shell.js +1 -0
  34. package/dist/browser/theme/tailwind-css.js +5 -5
  35. package/dist/components/atoms/Input.js +1 -1
  36. package/dist/components/data-view/DataViewGrid.d.ts +12 -0
  37. package/dist/components/data-view/DataViewGrid.js +1 -0
  38. package/dist/components/data-view/DataViewGrid.native.d.ts +12 -0
  39. package/dist/components/data-view/DataViewList.d.ts +3 -2
  40. package/dist/components/data-view/DataViewList.js +1 -1
  41. package/dist/components/data-view/DataViewList.native.d.ts +12 -0
  42. package/dist/components/data-view/DataViewRenderer.d.ts +8 -2
  43. package/dist/components/data-view/DataViewRenderer.js +1 -1
  44. package/dist/components/data-view/DataViewRenderer.native.d.ts +8 -2
  45. package/dist/components/data-view/DataViewTable.d.ts +3 -2
  46. package/dist/components/data-view/DataViewTable.js +1 -1
  47. package/dist/components/data-view/DataViewTable.native.d.ts +3 -2
  48. package/dist/components/data-view/collection.d.ts +16 -0
  49. package/dist/components/data-view/collection.js +1 -0
  50. package/dist/components/data-view/utils.js +1 -1
  51. package/dist/components/forms/controls/Autocomplete.d.ts +9 -1
  52. package/dist/components/forms/controls/Autocomplete.js +1 -1
  53. package/dist/components/forms/controls/Autocomplete.native.d.ts +5 -1
  54. package/dist/components/forms/controls/Select.d.ts +7 -5
  55. package/dist/components/forms/controls/Select.js +1 -1
  56. package/dist/components/forms/controls/Select.native.d.ts +7 -5
  57. package/dist/components/forms/controls/index.d.ts +1 -1
  58. package/dist/components/forms/controls/select-options.d.ts +17 -0
  59. package/dist/components/forms/controls/select-options.js +1 -0
  60. package/dist/components/molecules/Tabs.js +1 -1
  61. package/dist/components/object-reference/DefaultObjectReferenceParts.d.ts +18 -0
  62. package/dist/components/object-reference/DefaultObjectReferenceParts.js +1 -0
  63. package/dist/components/object-reference/DefaultObjectReferenceParts.native.d.ts +13 -0
  64. package/dist/components/object-reference/ObjectReferenceHandler.d.ts +2 -0
  65. package/dist/components/object-reference/ObjectReferenceHandler.js +1 -0
  66. package/dist/components/object-reference/ObjectReferenceHandler.native.d.ts +2 -0
  67. package/dist/components/object-reference/ReferenceIcon.d.ts +7 -0
  68. package/dist/components/object-reference/ReferenceIcon.js +1 -0
  69. package/dist/components/object-reference/actions.d.ts +7 -0
  70. package/dist/components/object-reference/actions.js +1 -0
  71. package/dist/components/object-reference/index.d.ts +4 -0
  72. package/dist/components/object-reference/index.js +1 -0
  73. package/dist/components/object-reference/index.native.d.ts +4 -0
  74. package/dist/components/object-reference/maps.d.ts +8 -0
  75. package/dist/components/object-reference/maps.js +1 -0
  76. package/dist/components/object-reference/runtime.d.ts +12 -0
  77. package/dist/components/object-reference/runtime.js +1 -0
  78. package/dist/components/object-reference/types.d.ts +73 -0
  79. package/dist/components/object-reference/types.js +0 -0
  80. package/dist/components/object-reference/useObjectReferenceController.d.ts +13 -0
  81. package/dist/components/object-reference/useObjectReferenceController.js +1 -0
  82. package/dist/components/shell/AppShell.d.ts +2 -0
  83. package/dist/components/shell/AppShell.js +1 -0
  84. package/dist/components/shell/AppShell.native.d.ts +2 -0
  85. package/dist/components/shell/AppShell.types.d.ts +21 -0
  86. package/dist/components/shell/AppShell.types.js +0 -0
  87. package/dist/components/shell/PageOutline.d.ts +12 -0
  88. package/dist/components/shell/PageOutline.js +1 -0
  89. package/dist/components/shell/PageOutline.native.d.ts +11 -0
  90. package/dist/components/shell/ShellSidebar.d.ts +11 -0
  91. package/dist/components/shell/ShellSidebar.js +1 -0
  92. package/dist/components/shell/index.d.ts +5 -0
  93. package/dist/components/shell/index.js +1 -0
  94. package/dist/components/shell/index.native.d.ts +4 -0
  95. package/dist/components/shell/outline.d.ts +5 -0
  96. package/dist/components/shell/outline.js +1 -0
  97. package/dist/components/shell/types.d.ts +66 -0
  98. package/dist/components/shell/types.js +0 -0
  99. package/dist/design-system.feature.js +1 -1
  100. package/dist/index.d.ts +4 -0
  101. package/dist/index.js +1 -1
  102. package/dist/native/components/atoms/Input.js +1 -1
  103. package/dist/native/components/atoms/Input.native.js +1 -1
  104. package/dist/native/components/data-view/DataViewGrid.js +1 -0
  105. package/dist/native/components/data-view/DataViewGrid.native.js +1 -0
  106. package/dist/native/components/data-view/DataViewList.js +1 -1
  107. package/dist/native/components/data-view/DataViewList.native.js +1 -0
  108. package/dist/native/components/data-view/DataViewRenderer.js +1 -1
  109. package/dist/native/components/data-view/DataViewRenderer.native.js +1 -1
  110. package/dist/native/components/data-view/DataViewTable.js +1 -1
  111. package/dist/native/components/data-view/DataViewTable.native.js +1 -1
  112. package/dist/native/components/data-view/collection.js +1 -0
  113. package/dist/native/components/data-view/utils.js +1 -1
  114. package/dist/native/components/forms/controls/Autocomplete.js +1 -1
  115. package/dist/native/components/forms/controls/Autocomplete.native.js +1 -1
  116. package/dist/native/components/forms/controls/Select.js +1 -1
  117. package/dist/native/components/forms/controls/Select.native.js +1 -1
  118. package/dist/native/components/forms/controls/select-options.js +1 -0
  119. package/dist/native/components/molecules/Tabs.js +1 -1
  120. package/dist/native/components/molecules/Tabs.native.js +1 -1
  121. package/dist/native/components/object-reference/DefaultObjectReferenceParts.js +1 -0
  122. package/dist/native/components/object-reference/DefaultObjectReferenceParts.native.js +1 -0
  123. package/dist/native/components/object-reference/ObjectReferenceHandler.js +1 -0
  124. package/dist/native/components/object-reference/ObjectReferenceHandler.native.js +1 -0
  125. package/dist/native/components/object-reference/ReferenceIcon.js +1 -0
  126. package/dist/native/components/object-reference/actions.js +1 -0
  127. package/dist/native/components/object-reference/index.js +1 -0
  128. package/dist/native/components/object-reference/index.native.js +1 -0
  129. package/dist/native/components/object-reference/maps.js +1 -0
  130. package/dist/native/components/object-reference/runtime.js +1 -0
  131. package/dist/native/components/object-reference/types.js +0 -0
  132. package/dist/native/components/object-reference/useObjectReferenceController.js +1 -0
  133. package/dist/native/components/shell/AppShell.js +1 -0
  134. package/dist/native/components/shell/AppShell.native.js +1 -0
  135. package/dist/native/components/shell/AppShell.types.js +0 -0
  136. package/dist/native/components/shell/PageOutline.js +1 -0
  137. package/dist/native/components/shell/PageOutline.native.js +1 -0
  138. package/dist/native/components/shell/ShellSidebar.js +1 -0
  139. package/dist/native/components/shell/index.js +1 -0
  140. package/dist/native/components/shell/index.native.js +1 -0
  141. package/dist/native/components/shell/outline.js +1 -0
  142. package/dist/native/components/shell/types.js +0 -0
  143. package/dist/native/design-system.feature.js +1 -1
  144. package/dist/native/index.js +1 -1
  145. package/dist/native/renderers/form-contract/renderer.js +1 -1
  146. package/dist/native/renderers/form-contract/shell.js +1 -1
  147. package/dist/native/shell.js +1 -0
  148. package/dist/native/shell.native.js +1 -0
  149. package/dist/native/theme/tailwind-css.js +5 -5
  150. package/dist/renderers/form-contract/renderer.js +1 -1
  151. package/dist/renderers/form-contract/shell.d.ts +9 -0
  152. package/dist/renderers/form-contract/shell.js +1 -1
  153. package/dist/shell.d.ts +1 -0
  154. package/dist/shell.js +1 -0
  155. package/dist/shell.native.d.ts +1 -0
  156. package/dist/theme/tailwind-css.js +5 -5
  157. package/package.json +355 -7
@@ -0,0 +1 @@
1
+ import{jsx as p,Fragment as f}from"react/jsx-runtime";import{Copy as a,ExternalLink as r,FileText as s,MapPin as o,Phone as t,Search,User as c}from"lucide-react";const R={address:o,phone:t,user:c,customer:c,file:s,url:r,custom:Search,copy:a,map:o,phoneAction:t,"external-link":r};export function ReferenceIcon({context:e,iconRenderer:n}){if(n)return p(f,{children:n(e)});const i=R[e.iconKey]??Search;return p(i,{className:"h-4 w-4 shrink-0 text-muted-foreground"})}export{Search as ReferenceSearchIcon};
@@ -0,0 +1 @@
1
+ export{createMapsProviderHref,createMapsReferenceActions}from"./maps";import{createMapsReferenceActions as c}from"./maps";function n(e){return e.trim().replace(/\s+/g," ")}export function getObjectReferenceDisplayValue(e){return e.value??e.href??e.label}export function createCopyReferenceAction(e,t="Copy"){return{id:"copy",label:t,description:"Copy this reference",iconKey:"copy",metadata:{copyText:getObjectReferenceDisplayValue(e)}}}export function createOpenReferenceAction(e,t="Open details"){if(!e.href)return null;return{id:"open",label:t,description:"Open the related page or resource",href:e.href,iconKey:"external-link"}}export function createPhoneReferenceAction(e,t="Call"){if(e.kind!=="phone")return null;const r=n(e.value??e.label);if(!r)return null;return{id:"call",label:t,description:"Call this phone number",href:`tel:${r.replace(/[^\d+]/g,"")}`,iconKey:"phone"}}export function createDefaultObjectReferenceActions(e){return[createCopyReferenceAction(e),createOpenReferenceAction(e),createPhoneReferenceAction(e),...c(e)].filter((t)=>Boolean(t))}
@@ -0,0 +1 @@
1
+ export{createCopyReferenceAction,createDefaultObjectReferenceActions,createMapsProviderHref,createMapsReferenceActions,createOpenReferenceAction,createPhoneReferenceAction,getObjectReferenceDisplayValue}from"./actions";export{ObjectReferenceHandler}from"./ObjectReferenceHandler";export{executeObjectReferenceAction}from"./runtime";
@@ -0,0 +1 @@
1
+ export{createCopyReferenceAction,createDefaultObjectReferenceActions,createMapsProviderHref,createMapsReferenceActions,createOpenReferenceAction,createPhoneReferenceAction,getObjectReferenceDisplayValue}from"./actions";export{ObjectReferenceHandler}from"./ObjectReferenceHandler";export{executeObjectReferenceAction}from"./runtime";
@@ -0,0 +1 @@
1
+ export function createMapsProviderHref(e,t){const r=encodeURIComponent(a(t));switch(e){case"apple":return`https://maps.apple.com/?q=${r}`;case"google":return`https://www.google.com/maps/search/?api=1&query=${r}`;case"waze":return`https://waze.com/ul?q=${r}&navigate=yes`;case"geo":return`geo:0,0?q=${r}`}}export function createMapsReferenceActions(e,t={}){if(e.kind!=="address")return[];const r=e.value??e.label;if(!a(r))return[];const n=t.providers??["google","apple","waze"],o=t.labelPrefix??"Open in";return n.map((c)=>({id:`maps.${c}`,label:`${o} ${s(c)}`,description:"Open navigation for this address",href:createMapsProviderHref(c,r),iconKey:"map",metadata:{provider:c}}))}function a(e){return e.trim().replace(/\s+/g," ")}function s(e){switch(e){case"apple":return"Apple Maps";case"google":return"Google Maps";case"waze":return"Waze";case"geo":return"Maps"}}
@@ -0,0 +1 @@
1
+ import{getObjectReferenceDisplayValue as c}from"./actions";export async function executeObjectReferenceAction(e,r){try{const n=r.actionHandlers?.[e.action.id];if(n)await n(e);else if(e.action.id==="copy")await t(e,r);else if(e.action.href)await o(e.action.href,e,r);await r.onAction?.(e)}catch(n){r.onActionError?.(n,e)}}function t(e,r){const n=r.copyText??i(e.action.metadata?.copyText)??c(e.reference);if(r.copyHandler)return r.copyHandler(n,e);if(r.defaultCopy)return r.defaultCopy(n,e);throw Error("Clipboard is not available.")}function o(e,r,n){if(n.openHref)return n.openHref(e,r);return n.defaultOpenHref?.(e,r)}function i(e){return typeof e==="string"?e:void 0}
@@ -0,0 +1 @@
1
+ import*as q from"react";import{createDefaultObjectReferenceActions as $}from"./actions";import{executeObjectReferenceAction as D}from"./runtime";export function useObjectReferenceController({reference:k,actions:F,defaultOpen:W=!1,open:G,onOpenChange:I,actionHandlers:J,onAction:K,onActionError:L,copyText:M,copyHandler:N,openHref:P,defaultCopy:Q,defaultOpenHref:S}){const[X,Y]=q.useState(W),V=G!==void 0,w=G??X,z=q.useMemo(()=>F??$(k),[F,k]),B=q.useCallback((m)=>{if(!V)Y(m);I?.(m)},[V,I]),Z=q.useMemo(()=>({reference:k,actions:z,open:w,setOpen:B}),[k,z,w,B]),_=q.useCallback((m)=>{if(m.disabled)return;D({reference:k,action:m,source:"action"},{actionHandlers:J,copyText:M,copyHandler:N,openHref:P,onAction:K,onActionError:L,defaultCopy:Q,defaultOpenHref:S})},[J,N,M,Q,S,K,L,P,k]);return{context:Z,resolvedActions:z,resolvedOpen:w,runAction:_,setOpen:B}}
@@ -0,0 +1 @@
1
+ import{jsx as k,jsxs as F}from"react/jsx-runtime";import{Dialog as R,DialogContent as P,DialogHeader as B,DialogTitle as T}from"@contractspec/lib.ui-kit-web/ui/dialog";import{cn as Q}from"@contractspec/lib.ui-kit-web/ui/utils";import{MenuIcon as w,PanelRightIcon as y}from"lucide-react";import*as D from"react";import{Button as I}from"../atoms/Button";import{NavBrand as g}from"../atoms/NavBrand";import{Breadcrumbs as u}from"../molecules/Breadcrumbs";import{CommandSearchTrigger as _}from"../molecules/CommandSearchTrigger";import{PageOutline as N}from"./PageOutline";import{ShellSidebar as x}from"./ShellSidebar";function d({sections:q,activeHref:G}){return k("nav",{className:"flex flex-col gap-5","aria-label":"Application navigation",children:q.map((A,J)=>F("div",{className:"flex flex-col gap-2",children:[A.title&&k("div",{className:"font-medium text-muted-foreground text-xs uppercase tracking-wide",children:A.title}),k("div",{className:"flex flex-col gap-1",children:A.items.map((z)=>k(C,{item:z,activeHref:G},z.key??z.href??String(z.label)))})]},A.key??J))})}function C({item:q,activeHref:G,depth:A=0}){const J=q.active||Boolean(q.href)&&Boolean(G)&&(q.match==="startsWith"?G?.startsWith(q.href??""):G===q.href),z=F("span",{className:Q("inline-flex min-w-0 items-center gap-2",A>0&&"pl-4"),children:[q.icon,k("span",{className:"truncate",children:q.label}),q.badge?k("span",{className:"ml-auto text-muted-foreground text-xs",children:q.badge}):null]});return F("div",{className:"flex flex-col gap-1",children:[q.href?k("a",{href:q.href,target:q.target,"aria-current":J?"page":void 0,"aria-label":q.ariaLabel,onClick:()=>q.onSelect?.(),className:Q("rounded-xs px-2 py-2 text-sm hover:bg-accent hover:text-accent-foreground",J&&"bg-accent font-medium text-accent-foreground"),children:z}):k("button",{type:"button","aria-label":q.ariaLabel,onClick:()=>q.onSelect?.(),className:Q("rounded-xs px-2 py-2 text-left text-sm hover:bg-accent hover:text-accent-foreground",J&&"bg-accent font-medium text-accent-foreground"),children:z}),q.children?.length?k("div",{className:"flex flex-col gap-1",children:q.children.map((K)=>k(C,{item:K,activeHref:G,depth:A+1},K.key??K.href??String(K.label)))}):null]})}export function AppShell({brand:q,logo:G,title:A,homeHref:J,navigation:z=[],commands:K=[],breadcrumbs:Y=[],pageOutline:U=[],activeHref:Z,activeOutlineId:$,userMenu:V,topbarStart:M,topbarEnd:S,children:b,className:H,contentClassName:p,onNavigate:f}){const[O,E]=D.useState(!1),[v,W]=D.useState(!1),L=q??k(g,{href:J,logo:G,title:A}),X=(h=!1)=>K.length?k(_,{groups:K,placeholder:"Search or run action...",compact:h}):null;return F("div",{className:Q("min-h-svh bg-background",H),children:[k("header",{className:"sticky top-0 z-30 border-b bg-background/95 backdrop-blur-xs supports-backdrop-filter:bg-background/60",children:F("div",{className:"flex h-14 items-center gap-3 px-3 md:px-4",children:[k(I,{variant:"ghost",size:"icon",className:"md:hidden","aria-label":"Open navigation",onPress:()=>E(!0),children:k(w,{className:"h-4 w-4"})}),k("div",{className:"min-w-0 md:hidden",children:L}),k("div",{className:"hidden min-w-0 md:block",children:M}),k("div",{className:"min-w-0 flex-1",children:Y.length?k(u,{items:Y}):null}),k("div",{className:"hidden shrink-0 md:block",children:X()}),U.length?k(I,{variant:"ghost",size:"icon",className:"lg:hidden","aria-label":"Open page outline",onPress:()=>W(!0),children:k(y,{className:"h-4 w-4"})}):null,S,V]})}),F("div",{className:"grid min-h-[calc(100svh-3.5rem)] grid-cols-1 md:grid-cols-[280px_minmax(0,1fr)] lg:grid-cols-[280px_minmax(0,1fr)_240px]",children:[k("aside",{className:"hidden border-r md:block",children:k(x,{sections:z,brand:L,commandTrigger:X(),footer:V,activeHref:Z})}),k("main",{className:Q("min-w-0 px-4 py-5 md:px-6",p),children:b}),U.length?k("aside",{className:"hidden px-4 py-5 lg:block",children:k(N,{items:U,activeId:$})}):null]}),k(R,{open:O,onOpenChange:E,children:F(P,{className:"max-h-[85svh] overflow-auto sm:max-w-sm",children:[k(B,{children:k(T,{children:"Menu"})}),F("div",{className:"flex flex-col gap-4",children:[X(),k(d,{sections:z,activeHref:Z}),V]})]})}),k(R,{open:v,onOpenChange:W,children:F(P,{className:"max-h-[85svh] overflow-auto sm:max-w-sm",children:[k(B,{children:k(T,{children:"On this page"})}),k(N,{items:U,activeId:$,variant:"compact",onNavigate:()=>W(!1)})]})})]})}
@@ -0,0 +1 @@
1
+ import{jsx as F,jsxs as U}from"react/jsx-runtime";import{cn as Y}from"@contractspec/lib.ui-kit/ui/utils";import{Pressable as E,Text as R,View as G}from"react-native";import{AppHeader as N}from"../organisms/AppHeader.native";import{PageOutline as p}from"./PageOutline.native";function Z(q){return typeof q==="string"||typeof q==="number"?String(q):"Item"}function H(q){return q.flatMap((D)=>D.items).sort((D,L)=>(D.priority??999)-(L.priority??999)).slice(0,5)}function _(q,D){if(q.active)return!0;if(!D||!q.href)return!1;return q.match==="startsWith"?D.startsWith(q.href):D===q.href}function M({item:q,activeHref:D,onNavigate:L,depth:W=0}){const Q=q.active||Boolean(D)&&Boolean(q.href)&&(q.match==="startsWith"?D?.startsWith(q.href??""):D===q.href);return U(G,{className:"gap-1",children:[F(E,{accessibilityRole:"link",accessibilityState:{selected:Q},onPress:()=>{q.onSelect?.();L?.(q)},className:Y("rounded-xs px-2 py-2",W>0&&"pl-5",Q?"bg-muted":void 0),children:F(R,{className:Y("text-sm",Q?"font-semibold text-foreground":"text-muted-foreground"),children:q.label})}),q.children?.map((J)=>F(M,{item:J,activeHref:D,onNavigate:L,depth:W+1},J.key??J.href??Z(J.label)))]})}export function AppShell({brand:q,logo:D,title:L,navigation:W=[],commands:Q=[],breadcrumbs:J=[],pageOutline:$=[],activeHref:k,activeOutlineId:A,userMenu:C,topbarEnd:P,children:S,className:I,homeHref:h,topbarStart:w,contentClassName:O,onNavigate:B}){const V=H(W),T=q??D??L,y=U(G,{className:"gap-5",children:[J.length?F(G,{className:"gap-1",children:J.map((z,K)=>F(R,{className:"text-muted-foreground text-xs",children:z.label},K))}):null,Q.length?U(G,{className:"gap-2",children:[F(R,{className:"font-semibold text-sm",children:"Actions"}),Q.flatMap((z)=>z.items.map((K)=>F(E,{accessibilityRole:"button",onPress:K.onSelect,className:"rounded-xs px-2 py-2",children:F(R,{children:K.label})},K.id)))]}):null,W.map((z,K)=>U(G,{className:"gap-2",children:[z.title?F(R,{className:"font-semibold text-muted-foreground text-xs uppercase",children:z.title}):null,z.items.map((X)=>F(M,{item:X,activeHref:k,onNavigate:B},X.key??X.href??Z(X.label)))]},z.key??K)),$.length?U(G,{className:"gap-2",children:[F(R,{className:"font-semibold text-sm",children:"On this page"}),F(p,{items:$,activeId:A})]}):null,C]});return U(G,{className:Y("min-h-full bg-background",I),children:[F(N,{logo:T,toolbarRight:P,menuContent:y,bottomTabs:V.map((z)=>({key:z.key??z.href??Z(z.label),label:Z(z.label),icon:z.icon,active:_(z,k),onPress:()=>{z.onSelect?.();B?.(z)}}))}),F(G,{className:Y("flex-1 px-4 py-5",O),children:S})]})}
File without changes
@@ -0,0 +1 @@
1
+ import{jsx as H}from"react/jsx-runtime";import{cn as S}from"@contractspec/lib.ui-kit-web/ui/utils";import*as M from"react";import{resolvePageOutlineItems as U}from"./outline";export function PageOutline({items:z,activeId:E,onNavigate:J,ariaLabel:K="On this page",variant:F="rail",maxLevel:C=3,className:B,...D}){const G=M.useMemo(()=>U(z,C),[z,C]);if(!G.length)return null;return H("nav",{"aria-label":K,className:S("text-muted-foreground text-sm",F==="rail"?"sticky top-20 max-h-[calc(100svh-6rem)] overflow-auto border-l pl-4":"rounded-md border p-3",B),...D,children:H("ol",{className:"m-0 list-none space-y-1 p-0",children:G.map((q)=>{const Q=E===q.id,T=q.href??`#${q.id}`;return H("li",{children:H("a",{href:T,"aria-current":Q?"location":void 0,onClick:()=>J?.(q),className:S("block rounded-xs px-2 py-1 transition-colors hover:bg-accent hover:text-accent-foreground",q.resolvedLevel===2&&"pl-5",q.resolvedLevel===3&&"pl-8 text-xs",Q&&"bg-accent font-medium text-accent-foreground"),children:q.label})},`${q.id}-${q.resolvedLevel}`)})})})}export function usePageOutlineActiveItem(z,E){const[J,K]=M.useState(z[0]);M.useEffect(()=>{if(!z.length||typeof IntersectionObserver>"u")return;const F=new IntersectionObserver((C)=>{const B=C.filter((D)=>D.isIntersecting).sort((D,G)=>G.intersectionRatio-D.intersectionRatio)[0];if(B?.target.id)K(B.target.id)},E??{rootMargin:"-20% 0px -65% 0px",threshold:[0,0.25,0.5,1]});for(const C of z){const B=document.getElementById(C);if(B)F.observe(B)}return()=>F.disconnect()},[z,E]);return J}
@@ -0,0 +1 @@
1
+ import{jsx as C}from"react/jsx-runtime";import{cn as B}from"@contractspec/lib.ui-kit/ui/utils";import*as K from"react";import{Pressable as M,Text as Q,View as S}from"react-native";import{resolvePageOutlineItems as U}from"./outline";export function PageOutline({items:q,activeId:F,onNavigate:G,ariaLabel:H="On this page",maxLevel:D=3,className:J}){const E=K.useMemo(()=>U(q,D),[q,D]);if(!E.length)return null;return C(S,{accessibilityLabel:H,className:B("gap-1",J),children:E.map((h)=>{const z=F===h.id;return C(M,{accessibilityRole:"link",accessibilityState:{selected:z},onPress:()=>G?.(h),className:B("rounded-xs px-2 py-2",h.resolvedLevel===2&&"pl-5",h.resolvedLevel===3&&"pl-8",z?"bg-muted":void 0),children:C(Q,{className:B("text-sm",z?"font-semibold text-foreground":"text-muted-foreground"),children:h.label})},`${h.id}-${h.resolvedLevel}`)})})}export function usePageOutlineActiveItem(q){return q[0]}
@@ -0,0 +1 @@
1
+ import{jsx as z,jsxs as O}from"react/jsx-runtime";import{Sidebar as A,SidebarContent as F,SidebarFooter as L,SidebarGroup as P,SidebarGroupContent as R,SidebarGroupLabel as B,SidebarHeader as K,SidebarMenu as X,SidebarMenuBadge as N,SidebarMenuButton as C,SidebarMenuItem as G,SidebarProvider as I,SidebarRail as T}from"@contractspec/lib.ui-kit-web/ui/sidebar";import{cn as Y}from"@contractspec/lib.ui-kit-web/ui/utils";function M(q,D){if(q.active)return!0;if(!D||!q.href)return!1;return q.match==="startsWith"?D.startsWith(q.href):D===q.href}function Z(q){return q.key??q.href??String(q.label)}function $({item:q,activeHref:D,depth:J=0}){const Q=M(q,D),V=Boolean(q.children?.length),U=O("span",{className:Y("inline-flex min-w-0 items-center gap-2",J>0&&"pl-4"),children:[q.icon,z("span",{className:"truncate",children:q.label})]});return O(G,{children:[z(C,{asChild:!!q.href,isActive:Q,"aria-label":q.href?void 0:q.ariaLabel,onClick:q.href?void 0:()=>q.onSelect?.(),children:q.href?z("a",{href:q.href,target:q.target,"aria-label":q.ariaLabel,onClick:()=>q.onSelect?.(),children:U}):U}),q.badge!=null&&z(N,{children:q.badge}),V&&z(X,{className:"mt-1",children:q.children?.map((E)=>z($,{item:E,activeHref:D,depth:J+1},Z(E)))})]})}export function ShellSidebar({sections:q,brand:D,commandTrigger:J,footer:Q,activeHref:V,className:U}){return z(I,{children:O(A,{className:U,children:[z(T,{}),O(K,{className:Y("gap-3",!D&&!J&&"hidden"),children:[D,J]}),z(F,{children:q.map((E,k)=>O(P,{children:[E.title&&z(B,{children:E.title}),z(R,{children:z(X,{children:E.items.map((W)=>z($,{item:W,activeHref:V},Z(W)))})})]},E.key??k))}),Q&&z(L,{children:Q})]})})}
@@ -0,0 +1 @@
1
+ export{AppShell}from"./AppShell";export{PageOutline,usePageOutlineActiveItem}from"./PageOutline";export{ShellSidebar}from"./ShellSidebar";
@@ -0,0 +1 @@
1
+ export{AppShell}from"./AppShell.native";export{PageOutline,usePageOutlineActiveItem}from"./PageOutline.native";
@@ -0,0 +1 @@
1
+ export function resolvePageOutlineItems(n,t,r=1){return n.flatMap((e)=>{const l=Math.min(e.level??r,t),a={...e,resolvedLevel:l},i=e.children?.length?resolvePageOutlineItems(e.children,t,Math.min(l+1,t)):[];return[a,...i]})}
File without changes
@@ -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
- 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,createMapsProviderHref,createMapsReferenceActions,createOpenReferenceAction,createPhoneReferenceAction,getObjectReferenceDisplayValue,ObjectReferenceHandler}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{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";
@@ -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 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});
@@ -0,0 +1 @@
1
+ export*from"./components/shell";
@@ -0,0 +1 @@
1
+ export*from"./components/shell/index.native";
@@ -1,9 +1,9 @@
1
- const a=["light","dark"];function n(e,s){const r=Object.entries(s).sort(([t],[i])=>t.localeCompare(i)).map(([t,i])=>` ${t}: ${i};`).join(`
1
+ const o=["light","dark"],l={background:["card","popover"],foreground:["card-foreground","popover-foreground"],border:["input"]};function n(e,s){const t=Object.entries(s).sort(([r],[i])=>r.localeCompare(i)).map(([r,i])=>` ${r}: ${i};`).join(`
2
2
  `);return`${e} {
3
- ${r}
4
- }`}function l(e){return Object.assign({},...Object.values(e.modes))}function d(e){if(e.startsWith("--ds-color-"))return`--color-${e.slice(11)}`;if(e.startsWith("--ds-radius-"))return`--radius-${e.slice(12)}`;if(e.startsWith("--ds-space-"))return`--spacing-${e.slice(11)}`;if(e.startsWith("--ds-typography-"))return`--text-${e.slice(16)}`;return}function o(e){return`@theme inline {
5
- ${Object.keys(l(e)).sort().flatMap((r)=>{const t=d(r);return t?[` ${t}: var(${r});`]:[]}).join(`
3
+ ${t}
4
+ }`}function c(e){return Object.assign({},...Object.values(e.modes))}function d(e){if(e.startsWith("--ds-color-"))return`--color-${e.slice(11)}`;if(e.startsWith("--ds-radius-"))return`--radius-${e.slice(12)}`;if(e.startsWith("--ds-space-"))return`--spacing-${e.slice(11)}`;if(e.startsWith("--ds-typography-"))return`--text-${e.slice(16)}`;return}function u(e){if(!e.startsWith("--ds-color-"))return[];const s=e.slice(11);return(l[s]??[]).map((r)=>`--color-${r}`)}function h(e){return`@theme inline {
5
+ ${Object.keys(c(e)).sort().flatMap((t)=>{const r=d(t),i=u(t);return[...r?[` ${r}: var(${t});`]:[],...i.map((a)=>` ${a}: var(${t});`)]}).join(`
6
6
  `)}
7
- }`}export function themeSpecToTailwindCss(e,s={}){return[s.includeCustomVariant?"@custom-variant dark (&:where(.dark, .dark *));":void 0,n(s.rootSelector??":root",e.light),n(s.darkSelector??".dark",e.dark),...Object.entries(e.modes).filter(([t])=>!a.includes(t)).map(([t,i])=>n(`[data-theme="${t}"]`,i)),s.includeTheme===!1?void 0:o(e)].filter(Boolean).join(`
7
+ }`}export function themeSpecToTailwindCss(e,s={}){return[s.includeCustomVariant?"@custom-variant dark (&:where(.dark, .dark *));":void 0,n(s.rootSelector??":root",e.light),n(s.darkSelector??".dark",e.dark),...Object.entries(e.modes).filter(([r])=>!o.includes(r)).map(([r,i])=>n(`[data-theme="${r}"]`,i)),s.includeTheme===!1?void 0:h(e)].filter(Boolean).join(`
8
8
 
9
9
  `)}
@@ -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})});
@@ -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});
@@ -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';
@@ -1,9 +1,9 @@
1
- const a=["light","dark"];function n(e,s){const r=Object.entries(s).sort(([t],[i])=>t.localeCompare(i)).map(([t,i])=>` ${t}: ${i};`).join(`
1
+ const o=["light","dark"];const l={background:["card","popover"],foreground:["card-foreground","popover-foreground"],border:["input"]};function n(e,s){const t=Object.entries(s).sort(([r],[i])=>r.localeCompare(i)).map(([r,i])=>` ${r}: ${i};`).join(`
2
2
  `);return`${e} {
3
- ${r}
4
- }`}function l(e){return Object.assign({},...Object.values(e.modes))}function d(e){if(e.startsWith("--ds-color-"))return`--color-${e.slice(11)}`;if(e.startsWith("--ds-radius-"))return`--radius-${e.slice(12)}`;if(e.startsWith("--ds-space-"))return`--spacing-${e.slice(11)}`;if(e.startsWith("--ds-typography-"))return`--text-${e.slice(16)}`;return}function o(e){return`@theme inline {
5
- ${Object.keys(l(e)).sort().flatMap((r)=>{const t=d(r);return t?[` ${t}: var(${r});`]:[]}).join(`
3
+ ${t}
4
+ }`}function c(e){return Object.assign({},...Object.values(e.modes))}function d(e){if(e.startsWith("--ds-color-"))return`--color-${e.slice(11)}`;if(e.startsWith("--ds-radius-"))return`--radius-${e.slice(12)}`;if(e.startsWith("--ds-space-"))return`--spacing-${e.slice(11)}`;if(e.startsWith("--ds-typography-"))return`--text-${e.slice(16)}`;return}function u(e){if(!e.startsWith("--ds-color-"))return[];const s=e.slice(11);return(l[s]??[]).map((r)=>`--color-${r}`)}function h(e){return`@theme inline {
5
+ ${Object.keys(c(e)).sort().flatMap((t)=>{const r=d(t),i=u(t);return[...r?[` ${r}: var(${t});`]:[],...i.map((a)=>` ${a}: var(${t});`)]}).join(`
6
6
  `)}
7
- }`}export function themeSpecToTailwindCss(e,s={}){return[s.includeCustomVariant?"@custom-variant dark (&:where(.dark, .dark *));":void 0,n(s.rootSelector??":root",e.light),n(s.darkSelector??".dark",e.dark),...Object.entries(e.modes).filter(([t])=>!a.includes(t)).map(([t,i])=>n(`[data-theme="${t}"]`,i)),s.includeTheme===!1?void 0:o(e)].filter(Boolean).join(`
7
+ }`}export function themeSpecToTailwindCss(e,s={}){return[s.includeCustomVariant?"@custom-variant dark (&:where(.dark, .dark *));":void 0,n(s.rootSelector??":root",e.light),n(s.darkSelector??".dark",e.dark),...Object.entries(e.modes).filter(([r])=>!o.includes(r)).map(([r,i])=>n(`[data-theme="${r}"]`,i)),s.includeTheme===!1?void 0:h(e)].filter(Boolean).join(`
8
8
 
9
9
  `)}