@contractspec/lib.design-system 3.8.11 → 3.10.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 (37) hide show
  1. package/README.md +120 -3
  2. package/dist/browser/index.js +1 -1
  3. package/dist/components/atoms/ActionButtons.d.ts +1 -1
  4. package/dist/components/atoms/Cta.d.ts +2 -2
  5. package/dist/components/atoms/Input.mobile.d.ts +2 -1
  6. package/dist/components/atoms/LoaderCircular.d.ts +1 -1
  7. package/dist/components/atoms/RankBadge.d.ts +1 -1
  8. package/dist/components/atoms/ScoreBar.d.ts +1 -1
  9. package/dist/components/atoms/Textarea.mobile.d.ts +2 -1
  10. package/dist/components/data-table/DataTableToolbar.d.ts +3 -0
  11. package/dist/components/data-table/DataTableToolbar.mobile.d.ts +3 -0
  12. package/dist/components/data-table/DataTableToolbar.shared.d.ts +23 -0
  13. package/dist/components/data-view/DataViewRenderer.d.ts +3 -1
  14. package/dist/components/data-view/DataViewRenderer.mobile.d.ts +3 -1
  15. package/dist/components/data-view/DataViewTable.d.ts +3 -1
  16. package/dist/components/data-view/DataViewTable.mobile.d.ts +3 -1
  17. package/dist/components/legal/atoms/LegalHeading.d.ts +1 -1
  18. package/dist/components/legal/atoms/LegalList.d.ts +1 -1
  19. package/dist/components/legal/atoms/LegalSection.d.ts +2 -2
  20. package/dist/components/legal/atoms/LegalText.d.ts +2 -2
  21. package/dist/components/legal/molecules/LegalTOC.d.ts +1 -1
  22. package/dist/components/marketing/MarketingCardsSection.d.ts +1 -1
  23. package/dist/components/molecules/EntityCard.d.ts +1 -1
  24. package/dist/components/molecules/FiltersToolbar.mobile.d.ts +1 -1
  25. package/dist/components/molecules/StatCard.d.ts +1 -1
  26. package/dist/components/native/FlatListScreen.mobile.d.ts +1 -1
  27. package/dist/components/organisms/GridLayout.d.ts +1 -1
  28. package/dist/components/organisms/ListCardPage.d.ts +1 -1
  29. package/dist/components/organisms/ListGridPage.d.ts +1 -1
  30. package/dist/contracts.typecheck.d.ts +1 -0
  31. package/dist/i18n/translation.d.ts +16 -0
  32. package/dist/index.d.ts +3 -0
  33. package/dist/index.js +1 -1
  34. package/dist/theme/contracts.d.ts +11 -0
  35. package/dist/theme/tokenBridge.d.ts +3 -3
  36. package/dist/theme/variants.d.ts +2 -2
  37. package/package.json +7 -7
package/README.md CHANGED
@@ -36,24 +36,139 @@ import { AppLayout, Button, HeroSection } from "@contractspec/lib.design-system"
36
36
 
37
37
  ```ts
38
38
  import {
39
+ createTranslationResolver,
39
40
  defaultTokens,
40
41
  mapTokensForPlatform,
42
+ resolvePlatformTheme,
43
+ resolveThemeRefTokens,
41
44
  withPlatformUI,
42
45
  } from "@contractspec/lib.design-system";
43
46
 
44
- const nativeTokens = mapTokensForPlatform("native");
47
+ const nativeTokens = mapTokensForPlatform("native", defaultTokens);
45
48
  const ui = withPlatformUI({
46
49
  tokens: defaultTokens,
47
50
  platform: "web",
48
51
  });
49
52
  ```
50
53
 
54
+ ### Resolve contract-backed themes
55
+
56
+ ```ts
57
+ import { ThemeRegistry } from "@contractspec/lib.contracts-spec/themes";
58
+ import { resolvePlatformTheme } from "@contractspec/lib.design-system";
59
+
60
+ const registry = new ThemeRegistry([themeSpec]);
61
+
62
+ const webTokens = resolvePlatformTheme(
63
+ registry,
64
+ { key: "design.brand", version: "1.0.0" },
65
+ "web",
66
+ { targets: ["tenant:acme"] }
67
+ );
68
+ ```
69
+
70
+ ### Provide translations to contract-driven renderers
71
+
72
+ ```tsx
73
+ import {
74
+ createTranslationResolver,
75
+ DesignSystemTranslationProvider,
76
+ } from "@contractspec/lib.design-system";
77
+
78
+ const resolver = createTranslationResolver({
79
+ registry: translationRegistry,
80
+ locale: "fr",
81
+ specKeys: ["design-system.form", "design-system.data-view"],
82
+ });
83
+
84
+ <DesignSystemTranslationProvider resolver={resolver}>
85
+ {children}
86
+ </DesignSystemTranslationProvider>;
87
+ ```
88
+
89
+ ### Render the canonical account grid
90
+
91
+ The canonical data-table example lives in
92
+ [`@contractspec/example.data-grid-showcase`](../../examples/data-grid-showcase/README.md).
93
+ Its composed lane uses `DataTable`, `DataTableToolbar`, and `DataViewTable`
94
+ from this package:
95
+
96
+ ```tsx
97
+ import {
98
+ Button,
99
+ DataTable,
100
+ DataTableToolbar,
101
+ DataViewTable,
102
+ } from '@contractspec/lib.design-system';
103
+ import { useContractTable } from '@contractspec/lib.presentation-runtime-react';
104
+
105
+ import { DataGridShowcaseDataView } from '@contractspec/example.data-grid-showcase/contracts/data-grid-showcase.data-view';
106
+ import { SHOWCASE_ROWS } from '@contractspec/example.data-grid-showcase/ui/data-grid-showcase.data';
107
+ import { useShowcaseColumns } from '@contractspec/example.data-grid-showcase/ui/data-grid-showcase.columns';
108
+ import {
109
+ ExpandedRowContent,
110
+ } from '@contractspec/example.data-grid-showcase/ui/data-grid-showcase.parts';
111
+
112
+ export function AccountHealthTable() {
113
+ const columns = useShowcaseColumns();
114
+
115
+ const controller = useContractTable({
116
+ data: SHOWCASE_ROWS,
117
+ columns,
118
+ selectionMode: 'multiple',
119
+ initialState: {
120
+ sorting: [{ id: 'arr', desc: true }],
121
+ pagination: { pageIndex: 0, pageSize: 4 },
122
+ columnVisibility: { notes: false },
123
+ columnPinning: { left: ['account'], right: [] },
124
+ },
125
+ renderExpandedContent: (row) => <ExpandedRowContent row={row} />,
126
+ getCanExpand: () => true,
127
+ });
128
+
129
+ return (
130
+ <>
131
+ <DataTable
132
+ controller={controller}
133
+ title="Account health"
134
+ description="Composed table surface for the canonical account grid."
135
+ headerActions={<Button variant="outline">Reset</Button>}
136
+ toolbar={
137
+ <DataTableToolbar
138
+ controller={controller}
139
+ searchPlaceholder="Search accounts"
140
+ actionsStart={
141
+ <Button variant="outline" size="sm">
142
+ Risk Only
143
+ </Button>
144
+ }
145
+ />
146
+ }
147
+ loading={false}
148
+ emptyState={<div>No rows available.</div>}
149
+ footer={\`Page \${controller.pageIndex + 1} of \${controller.pageCount}\`}
150
+ />
151
+
152
+ <DataViewTable
153
+ spec={DataGridShowcaseDataView}
154
+ items={SHOWCASE_ROWS}
155
+ />
156
+ </>
157
+ );
158
+ }
159
+ ```
160
+
161
+ `DataTable` remains the composed card/container surface. `DataTableToolbar` is
162
+ the recommended ergonomic layer for search, chips, selection summary, and
163
+ hidden-column recovery without widening the primitive table API.
164
+
51
165
  ## API map
52
166
 
53
167
  ### Theme and platform
54
168
 
55
169
  - `defaultTokens` and token interfaces from `./theme/tokens`
56
170
  - `mapTokensForPlatform` from `./theme/tokenBridge`
171
+ - `resolveThemeSpecTokens`, `resolveThemeRefTokens`, and `resolvePlatformTheme` from `./theme/contracts`
57
172
  - theme variants
58
173
  - `withPlatformUI`
59
174
  - `useColorScheme`
@@ -63,7 +178,8 @@ const ui = withPlatformUI({
63
178
  ### Renderers and hooks
64
179
 
65
180
  - renderer exports from `./renderers`
66
- - form-contract renderer support
181
+ - form-contract renderer support, including readonly, autocomplete, address, phone, date, time, and datetime FormSpec fields
182
+ - translation-aware rendering through `DesignSystemTranslationProvider` and `createTranslationResolver`
67
183
  - hooks such as `useListUrlState`
68
184
  - navigation-related shared types
69
185
 
@@ -101,8 +217,9 @@ The package also ships registry metadata and build support:
101
217
  ## Operational semantics and gotchas
102
218
 
103
219
  - Token names and token shapes are compatibility surface.
104
- - `mapTokensForPlatform()` deliberately returns different token shapes for web and native.
220
+ - `mapTokensForPlatform()` deliberately returns different token shapes for web and native, and can now map resolved contract-backed tokens.
105
221
  - `withPlatformUI()` is a lightweight adapter, not a full runtime framework.
222
+ - Theme integration is utility-first in this tranche: resolve tokens from `ThemeSpec` / `ThemeRef`, then map them per platform. There is no runtime theme provider yet.
106
223
  - The root barrel is broad and therefore high-blast-radius.
107
224
  - This package depends on both `ui-kit` and `ui-kit-web`.
108
225
  - The package includes legal, marketing, agent, app-shell, and visualization compositions, not just low-level primitives.
@@ -1 +1 @@
1
- import*as N from"react";import{Button as o}from"@contractspec/lib.ui-kit-web/ui/button";import{Loader2 as h}from"lucide-react";import{jsx as U,jsxs as e,Fragment as a}from"react/jsx-runtime";function y({children:R,loading:g,spinnerPlacement:f="start",onPress:q,onPressIn:E,onPressOut:J,onLongPress:X,onTouchStart:Q,onTouchEnd:_,onTouchCancel:m,onMouseDown:D,onMouseUp:F,onClick:S,className:T,disabled:z,...B}){let M=Boolean(z||g),I=q?()=>{q()}:S,p=!B.asChild?e(a,{children:[g&&f==="start"?U(h,{className:"h-4 w-4 animate-spin"}):null,R,g&&f==="end"?U(h,{className:"h-4 w-4 animate-spin"}):null]}):R;return U(o,{...B,className:T,disabled:M,"aria-busy":g?!0:void 0,"aria-disabled":M?!0:void 0,onClick:I,onMouseDown:D||E,onMouseUp:F||J,onTouchStart:Q,onTouchEnd:_||J,onTouchCancel:m||J,type:B?.type??"button",children:p})}import{Label as K}from"@contractspec/lib.ui-kit-web/ui/label";import{Input as ff}from"@contractspec/lib.ui-kit-web/ui/input";function t(R){if(!R)return;switch(R){case"email":return"email";case"url":return"url";case"username":return"username";case"new-password":return"new-password";case"current-password":return"password";case"one-time-code":return"otp";case"tel":case"tel-country-code":case"tel-national":case"tel-area-code":case"tel-local":case"tel-local-prefix":case"tel-local-suffix":case"tel-extension":return"tel";case"postal-code":case"cc-number":case"cc-csc":case"bday-day":case"bday-month":case"bday-year":return"int";case"cc-exp":case"cc-exp-month":case"cc-exp-year":return"numbers-and-punctuation";case"bday":return"date";default:return"text"}}function s(R,g){if(!g)return;if(["name","given-name","additional-name","family-name","honorific-prefix","honorific-suffix","nickname","organization","organization-title","cc-name","cc-given-name","cc-additional-name","cc-family-name"].includes(g))R.autoCapitalize="words";if(["username","new-password","current-password","one-time-code","email","url"].includes(g))R.autoCapitalize="none"}function W(R){let g=R?.kind??t(R?.autoComplete)??"text",f={};switch(g){case"password":if(f.type="password",f.autoCapitalize="none",f.autoComplete=R?.autoComplete??"current-password",R?.autoCorrect!=null)f.autoCorrect=R.autoCorrect;break;case"new-password":if(f.type="password",f.autoCapitalize="none",f.autoComplete=R?.autoComplete??"new-password",R?.autoCorrect!=null)f.autoCorrect=R.autoCorrect;break;case"username":f.type="text",f.autoCapitalize="none",f.autoComplete=R?.autoComplete??"username";break;case"email":f.type="email",f.inputMode="email",f.autoCapitalize="none",f.autoComplete=R?.autoComplete??"email";break;case"url":f.type="url",f.inputMode="url",f.autoComplete=R?.autoComplete??"url";break;case"search":f.type="search",f.inputMode="search",f.enterKeyHint=R?.enterKeyHint??"search",f.autoComplete=R?.autoComplete??"off";break;case"phone":case"tel":f.type="tel",f.inputMode="tel",f.autoComplete=R?.autoComplete??"tel";break;case"number":case"int":f.type="text",f.inputMode="numeric",f.pattern="[0-9]*";break;case"decimal":f.type="text",f.inputMode="decimal",f.step="any";break;case"numbers-and-punctuation":f.type="text",f.inputMode="text",f.pattern="[0-9.,-]*";break;case"otp":f.type="text",f.inputMode="numeric",f.autoComplete=R?.autoComplete??"one-time-code",f.autoCapitalize="none";break;case"name":f.type="text",f.autoComplete=R?.autoComplete??"name",f.autoCapitalize=R?.autoCapitalize??"words";break;case"given-name":f.type="text",f.autoComplete=R?.autoComplete??"given-name",f.autoCapitalize=R?.autoCapitalize??"words";break;case"family-name":f.type="text",f.autoComplete=R?.autoComplete??"family-name",f.autoCapitalize=R?.autoCapitalize??"words";break;case"address-line1":f.type="text",f.autoComplete=R?.autoComplete??"address-line1";break;case"address-line2":f.type="text",f.autoComplete=R?.autoComplete??"address-line2";break;case"postal-code":f.type="text",f.inputMode="numeric",f.pattern="[0-9]*",f.autoComplete=R?.autoComplete??"postal-code";break;case"cc-number":f.type="text",f.inputMode="numeric",f.pattern="[0-9]*",f.autoComplete=R?.autoComplete??"cc-number";break;case"cc-exp":f.type="text",f.inputMode="numeric",f.pattern="[0-9/]*",f.autoComplete=R?.autoComplete??"cc-exp";break;case"cc-csc":f.type="text",f.inputMode="numeric",f.pattern="[0-9]*",f.autoComplete=R?.autoComplete??"cc-csc";break;case"off":f.type="text",f.autoComplete="off";break;case"date":f.type="date",f.inputMode="date",f.pattern="[0-9./-]*";break;default:f.type="text";break}if(R?.autoCapitalize)f.autoCapitalize=R.autoCapitalize;if(R?.autoComplete)f.autoComplete=R.autoComplete;if(R?.autoCorrect!=null)f.autoCorrect=R.autoCorrect;if(R?.enterKeyHint)f.enterKeyHint=R.enterKeyHint;return s(f,R?.autoComplete),f}import{jsx as Rf}from"react/jsx-runtime";function G({value:R,defaultValue:g,onChange:f,onSubmit:q,onFocus:E,onBlur:J,placeholder:X,disabled:Q,readOnly:_,maxLength:m,name:D,className:F,keyboard:S,...T}){let z=W(S);return Rf(ff,{...T,className:F,value:R,defaultValue:g,onChange:f,onFocus:E,onBlur:J,placeholder:X,disabled:Q,readOnly:_,maxLength:m,name:D,...z})}import{Textarea as gf}from"@contractspec/lib.ui-kit-web/ui/textarea";import*as u from"react";import{jsx as qf}from"react/jsx-runtime";function P({value:R,defaultValue:g,onChange:f,onSubmit:q,onFocus:E,onBlur:J,placeholder:X,disabled:Q,readOnly:_,maxLength:m,name:D,className:F,rows:S,keyboard:T,...z}){let B=W(T),M=u.useCallback((I)=>f?.(I),[f]);return qf(gf,{...z,className:F,value:R,defaultValue:g,onChange:M,onFocus:E,onBlur:J,placeholder:X,disabled:Q,readOnly:_,maxLength:m,name:D,rows:S,...B})}import{jsx as Z,jsxs as L}from"react/jsx-runtime";function x({value:R,onChange:g,disabled:f}){return L("div",{className:"space-y-4",children:[L("div",{className:"space-y-2",children:[Z(K,{children:"Nom"}),Z(G,{value:R.name,onChange:(q)=>g({...R,name:q.target.value}),disabled:f})]}),L("div",{className:"space-y-2",children:[Z(K,{children:"Email"}),Z(G,{type:"email",value:R.email,onChange:(q)=>g({...R,email:q.target.value}),disabled:f})]}),L("div",{className:"space-y-2",children:[Z(K,{children:"Objet"}),Z(G,{value:R.subject,onChange:(q)=>g({...R,subject:q.target.value}),disabled:f})]}),L("div",{className:"space-y-2",children:[Z(K,{children:"Message"}),Z(P,{value:R.message,onChange:(q)=>g({...R,message:q.target.value}),disabled:f,rows:6})]})]})}import{jsx as j,jsxs as Ef}from"react/jsx-runtime";function SR({labels:R={submit:"Envoyer"},initialValue:g={name:"",email:"",subject:"",message:""},disabled:f,onSubmit:q}){let[E,J]=N.useState(g),[X,Q]=N.useState(!1);return Ef("form",{onSubmit:async(m)=>{if(m.preventDefault(),!q)return;Q(!0);try{await q(E)}finally{Q(!1)}},className:"space-y-6",children:[j(x,{value:E,onChange:J,disabled:f||X}),j(y,{disabled:f||X,type:"submit",children:X?"Envoi…":R.submit})]})}import*as r from"react";import{cn as Jf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as Qf}from"class-variance-authority";import{jsx as Yf}from"react/jsx-runtime";var Xf=Qf("text-foreground tracking-tight",{variants:{level:{h1:"font-semibold text-3xl md:text-4xl",h2:"font-semibold text-2xl md:text-3xl",h3:"font-semibold text-xl md:text-2xl",h4:"font-semibold text-lg md:text-xl"},tone:{default:"",muted:"text-muted-foreground",accent:"text-primary"},spacing:{none:"",sm:"mt-4",md:"mt-6",lg:"mt-8"}},defaultVariants:{level:"h2",tone:"default",spacing:"md"}});function H({as:R,level:g,tone:f,spacing:q,className:E,...J}){return Yf(R??g??"h2",{className:Jf(Xf({level:g,tone:f,spacing:q}),E),...J})}import{cn as Zf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as $f}from"class-variance-authority";import{jsx as mf}from"react/jsx-runtime";var _f=$f("space-y-3",{variants:{spacing:{sm:"py-3",md:"py-4",lg:"py-6"},border:{none:"",top:"border-t",bottom:"border-b",both:"border-y"},tone:{plain:"",subtle:"bg-muted/30"}},defaultVariants:{spacing:"md",border:"none",tone:"plain"}});function O({spacing:R,border:g,tone:f,className:q,...E}){return mf("div",{className:Zf(_f({spacing:R,border:g,tone:f}),q),...E})}import{cn as yf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as Gf}from"class-variance-authority";import{jsx as Df}from"react/jsx-runtime";var Hf=Gf("text-base leading-relaxed",{variants:{tone:{default:"text-foreground",muted:"text-muted-foreground",danger:"text-destructive"},size:{base:"text-base",sm:"text-sm",lg:"text-lg"},spacing:{none:"",sm:"mt-2",md:"mt-3",lg:"mt-4"}},defaultVariants:{tone:"default",size:"base",spacing:"sm"}});function l({as:R="p",tone:g,size:f,spacing:q,className:E,...J}){return Df(R,{className:yf(Hf({tone:g,size:f,spacing:q}),E),...J})}import{jsx as V,jsxs as v}from"react/jsx-runtime";function dR({onExport:R,onDelete:g,labels:f={export:"Demander une copie",delete:"Demander la suppression"}}){let[q,E]=r.useState(null),J=async(X)=>{let Q=X==="export"?R:g;if(!Q)return;E(X);try{await Q()}finally{E(null)}};return v(O,{border:"top",className:"space-y-3",children:[V(H,{as:"h2",level:"h2",children:"Demandes de données"}),V(l,{children:"Vous pouvez demander une copie de vos données ou solliciter leur suppression. Ces demandes nécessitent une vérification d’identité et sont traitées dans les délais légaux."}),v("div",{className:"flex flex-wrap gap-3",children:[V(y,{onPress:()=>J("export"),disabled:q!==null,children:q==="export"?"Envoi…":f.export}),V(y,{variant:"destructive",onPress:()=>J("delete"),disabled:q!==null,children:q==="delete"?"Envoi…":f.delete})]})]})}import{cn as Ff}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as Sf}from"class-variance-authority";import{jsx as zf}from"react/jsx-runtime";var Tf=Sf("",{variants:{type:{unordered:"list-disc pl-6",ordered:"list-decimal pl-6",none:"pl-0"},spacing:{sm:"space-y-1",md:"space-y-2",lg:"space-y-3"}},defaultVariants:{type:"unordered",spacing:"md"}});function c({type:R,spacing:g,className:f,children:q,...E}){return zf(R==="ordered"?"ol":"ul",{className:Ff(Tf({type:R,spacing:g}),f),...E,children:q})}import{jsx as k,jsxs as Bf}from"react/jsx-runtime";function iR({title:R="Vos droits RGPD",rights:g=["Accès à vos données","Rectification","Effacement (droit à l’oubli)","Opposition et limitation","Portabilité"]}){return Bf(O,{border:"top",children:[k(H,{as:"h2",level:"h2",children:R}),k(c,{type:"unordered",children:g.map((f,q)=>k("li",{children:f},q))})]})}import{cn as Pf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cn as Lf}from"@contractspec/lib.ui-kit-web/ui/utils";import{jsx as Af,jsxs as w}from"react/jsx-runtime";function n({lastUpdated:R,version:g,className:f}){let q=(E)=>{if(!E)return null;try{return(typeof E==="string"?new Date(E):E).toLocaleDateString()}catch{return String(E)}};return w("div",{className:Lf("text-base text-muted-foreground",f),children:[g&&w("span",{children:["Version ",g]}),g&&R&&Af("span",{className:"mx-2",children:"•"}),R&&w("span",{children:["Dernière mise à jour: ",q(R)]})]})}import{cn as C}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as Mf}from"class-variance-authority";import{jsx as A}from"react/jsx-runtime";var Wf=Mf("text-base",{variants:{variant:{sidebar:"space-y-2",inline:"flex flex-wrap gap-3"},size:{sm:"",md:"text-base"}},defaultVariants:{variant:"sidebar",size:"md"}});function b({items:R,activeHref:g,onNavigate:f,variant:q,size:E,className:J,...X}){return A("nav",{"aria-label":"Table of contents",className:C(Wf({variant:q,size:E}),J),...X,children:q==="inline"?R.map((Q)=>A("a",{href:Q.href,onClick:(_)=>{f?.(Q.href)},className:C("rounded-xs px-2 py-1 hover:bg-accent hover:text-accent-foreground",g===Q.href&&"bg-accent text-accent-foreground"),children:Q.label},Q.href)):A("ul",{className:"list-none space-y-2 pl-0",children:R.map((Q)=>A("li",{children:A("a",{href:Q.href,onClick:()=>f?.(Q.href),className:C("block rounded-xs px-2 py-1 hover:bg-accent hover:text-accent-foreground",g===Q.href&&"bg-accent text-accent-foreground"),children:Q.label})},Q.href))})})}import{jsx as $,jsxs as d}from"react/jsx-runtime";function X4({title:R,meta:g,toc:f,children:q,className:E}){return d("div",{className:Pf("mx-auto w-full max-w-6xl px-4 py-8 md:py-12",E),children:[d("div",{className:"mb-6 space-y-2",children:[$(H,{as:"h1",level:"h1",spacing:"sm",children:R}),g&&$(n,{lastUpdated:g.lastUpdated,version:g.version})]}),f&&f.length>0&&$("div",{className:"mb-6 md:hidden",children:$(b,{items:f,variant:"inline"})}),d("div",{className:"grid grid-cols-1 gap-8 md:grid-cols-[220px_minmax(0,1fr)]",children:[f&&f.length>0?$("aside",{className:"sticky top-24 hidden self-start md:block",children:$(b,{items:f,variant:"sidebar"})}):$("div",{className:"hidden md:block"}),$("article",{className:"prose max-w-none text-foreground",children:q})]})]})}var Kf={sm:640,md:768,lg:1024,xl:1280};function $4(R){let g=R.platform??"web",f={...Kf,...R.breakpoints};return{platform:g,tokens:R.tokens,breakpoints:f}}import{shadcnDriver as Of}from"@contractspec/lib.contracts-runtime-client-react/drivers/shadcn";import{createFormRenderer as Vf}from"@contractspec/lib.contracts-runtime-client-react/form-render";import{Checkbox as If}from"@contractspec/lib.ui-kit-web/ui/checkbox";import{FieldDescription as Uf,FieldError as Nf,FieldGroup as kf,FieldLabel as wf,Field as Cf}from"@contractspec/lib.ui-kit-web/ui/field";import{Label as bf}from"@contractspec/lib.ui-kit-web/ui/label";import{RadioGroupItem as df,RadioGroup as hf}from"@contractspec/lib.ui-kit-web/ui/radio-group";import{SelectContent as uf,SelectGroup as xf,SelectItem as jf,SelectTrigger as lf,Select as vf,SelectValue as rf}from"@contractspec/lib.ui-kit-web/ui/select";import{Switch as cf}from"@contractspec/lib.ui-kit-web/ui/switch";import{jsx as Y,jsxs as i}from"react/jsx-runtime";var nf=(R)=>{let{options:g,value:f,onChange:q,...E}=R;return i(vf,{value:f??"",onValueChange:(J)=>q?.(J),...E,children:[Y(lf,{className:"w-[180px]",children:Y(rf,{placeholder:R.placeholder})}),Y(uf,{children:Y(xf,{children:g?.map((J,X)=>Y(jf,{value:J.value,disabled:J.disabled,children:J.labelI18n},X))})})]})},pf=(R)=>Y(If,{checked:!!R.checked,onCheckedChange:(g)=>R.onCheckedChange?.(g),...R}),of=(R)=>Y(hf,{...R,children:R.options?.map((g)=>i("div",{className:"flex items-center gap-3",children:[Y(df,{value:g.value,id:g.value}),Y(bf,{htmlFor:g.value,children:g.label})]},g.value))}),af=(R)=>Y(cf,{checked:!!R.checked,onCheckedChange:(g)=>R.onCheckedChange?.(g),...R}),A4=Vf({driver:Of({Field:Cf,FieldLabel:wf,FieldDescription:Uf,FieldError:Nf,FieldGroup:kf,FieldSet:(R)=>Y("fieldset",{...R}),FieldLegend:(R)=>Y("legend",{...R}),Input:G,Textarea:P,Select:nf,Checkbox:pf,RadioGroup:of,Switch:af,Button:y})});var P4={colors:{background:"#ffffff",foreground:"#0a0a0a",muted:"#f4f4f5",mutedForeground:"#71717a",primary:"#0f49a0",primaryForeground:"#ffffff",accent:"#16a34a",accentForeground:"#ffffff",destructive:"#ef4444",destructiveForeground:"#ffffff",border:"#e4e4e7",ring:"#2563eb"},radii:{sm:4,md:8,lg:12,xl:16,full:9999},space:{xs:4,sm:8,md:12,lg:16,xl:24},typography:{h1:30,h2:24,h3:20,body:16,small:14},icons:{sm:16,md:20,lg:24}};import{cva as ef}from"class-variance-authority";var V4=ef("",{variants:{size:{sm:"",md:"",lg:""},density:{compact:"",comfortable:""},tone:{neutral:"",info:"",success:"",warning:"",danger:""},emphasis:{default:"",subtle:"",strong:""}},defaultVariants:{size:"md",density:"comfortable",tone:"neutral",emphasis:"default"}});export{$4 as withPlatformUI,D6 as useResponsive,G6 as useReducedMotion,a0 as usePackageManager,$6 as useListUrlState,m6 as useColorScheme,z6 as mapTokensForPlatform,A4 as formRenderer,V4 as dsBaseVariants,P4 as defaultTokens,cg as ZodForm,Y6 as VisualizationRenderer,Q6 as VisualizationGrid,E6 as VisualizationCard,l4 as ViewButton,j4 as ToggleRightButton,x4 as ToggleLeftButton,u4 as ToggleButton,g6 as TimelineView,s4 as TimeChip,Tg as Textarea,i0 as TestimonialCarousel,O2 as TermsTemplate,Fg as Stepper,i1 as StatusChip,c1 as StatCardGroup,r1 as StatCard,l1 as SkeletonList,x1 as SkeletonCircle,h1 as SkeletonBlock,Hg as ScoreBar,P2 as SalesTermsTemplate,yg as RankBadge,M2 as PrivacyTemplate,c0 as PricingSection,v0 as PricingCarousel,t4 as PlaceChip,j0 as PageHeaderResponsive,o0 as PackageManagerProvider,b1 as OverviewCard,w1 as NavUser,N1 as NavMain,_g as NavBrand,u0 as ModelComparisonView,F0 as MobileHeader,r2 as MarketingStepCard,l2 as MarketingSection,d0 as MarketingLayout,x2 as MarketingIconCard,C0 as MarketingHeaderMobile,k0 as MarketingHeaderDesktop,U0 as MarketingHeader,h2 as MarketingComparisonSection,b2 as MarketingCardsSection,w2 as MarketingCardTitle,k2 as MarketingCardHeader,N2 as MarketingCardDescription,U2 as MarketingCardContent,I2 as MarketingCard,I1 as MarkdownRenderer,Zg as LoaderCircular,O1 as LoaderBlock,V0 as ListTablePage,t0 as ListPageTemplate,K0 as ListPageResponsive,W0 as ListGridPage,A0 as ListCardPage,Xg as Link,J2 as LegalText,G2 as LegalTOC,q2 as LegalSection,X4 as LegalPageLayout,m2 as LegalMeta,R2 as LegalList,sg as LegalHeading,eg as LegalCallout,P1 as LangSwitch,og as KeyValueList,M1 as InstallCommand,Jg as Input,L1 as HoverPreviewUser,z1 as HoverPreviewStats,S1 as HoverPreviewSimple,D1 as HoverPreviewMedia,G1 as HoverPreviewDoc,m1 as HoverPreview,B0 as HeroSection,T0 as HeroResponsive,D0 as Header,iR as GDPRRights,dR as GDPRDataRequest,vg as FormStepsLayout,ug as FormSection,hg as FormRow,jg as FormOneByOneLayout,dg as FormGrid,Cg as FormDialog,kg as FormCardLayout,y0 as Footer,$1 as FiltersToolbar,_0 as FeaturesSection,Z0 as FeatureCarousel,X0 as FAQSection,qg as ErrorState,Y1 as EntityCard,Rg as EmptyState,J0 as EmptySearchResult,q0 as EmptyDataList,h4 as EditButton,e4 as DurationChip,Q1 as DimensionScoresCard,H0 as DesktopHeader,d4 as DeleteButton,ig as DefinitionList,a4 as DateChip,Vg as DataViewTable,Kg as DataViewRenderer,Wg as DataViewList,Ag as DataViewDetail,Bg as DataTable,Kf as DEFAULT_BREAKPOINTS,p4 as Cta,E1 as CopyButton,L2 as CookiesTemplate,z2 as ContactTemplate,SR as ContactForm,$2 as ContactFields,Y2 as ConsentList,X2 as ConsentItem,f6 as ComparisonView,g1 as CommandTabs,f1 as CommandSearchTrigger,t2 as CommandPalette,a2 as CodeBlock,n4 as ButtonLink,r4 as Button,p2 as Breadcrumbs,C4 as ApprovalQueue,R0 as AppSidebar,s1 as AppLayout,e1 as AppHeader,n2 as AiLinkButton,k4 as AgentMonitor,Ug as ActionForm,o1 as AcademyLayout};
1
+ import*as j from"react";import{Button as Hf}from"@contractspec/lib.ui-kit-web/ui/button";import{Loader2 as p}from"lucide-react";import{jsx as x,jsxs as zf,Fragment as Df}from"react/jsx-runtime";function z({children:f,loading:g,spinnerPlacement:m="start",onPress:R,onPressIn:y,onPressOut:G,onLongPress:$,onTouchStart:q,onTouchEnd:Y,onTouchCancel:H,onMouseDown:W,onMouseUp:B,onClick:U,className:w,disabled:V,...M}){let O=Boolean(V||g),u=R?()=>{R()}:U,hf=!M.asChild?zf(Df,{children:[g&&m==="start"?x(p,{className:"h-4 w-4 animate-spin"}):null,f,g&&m==="end"?x(p,{className:"h-4 w-4 animate-spin"}):null]}):f;return x(Hf,{...M,className:w,disabled:O,"aria-busy":g?!0:void 0,"aria-disabled":O?!0:void 0,onClick:u,onMouseDown:W||y,onMouseUp:B||G,onTouchStart:q,onTouchEnd:Y||G,onTouchCancel:H||G,type:M?.type??"button",children:hf})}import{Label as C}from"@contractspec/lib.ui-kit-web/ui/label";import{Input as Wf}from"@contractspec/lib.ui-kit-web/ui/input";function Pf(f){if(!f)return;switch(f){case"email":return"email";case"url":return"url";case"username":return"username";case"new-password":return"new-password";case"current-password":return"password";case"one-time-code":return"otp";case"tel":case"tel-country-code":case"tel-national":case"tel-area-code":case"tel-local":case"tel-local-prefix":case"tel-local-suffix":case"tel-extension":return"tel";case"postal-code":case"cc-number":case"cc-csc":case"bday-day":case"bday-month":case"bday-year":return"int";case"cc-exp":case"cc-exp-month":case"cc-exp-year":return"numbers-and-punctuation";case"bday":return"date";default:return"text"}}function Sf(f,g){if(!g)return;if(["name","given-name","additional-name","family-name","honorific-prefix","honorific-suffix","nickname","organization","organization-title","cc-name","cc-given-name","cc-additional-name","cc-family-name"].includes(g))f.autoCapitalize="words";if(["username","new-password","current-password","one-time-code","email","url"].includes(g))f.autoCapitalize="none"}function _(f){let g=f?.kind??Pf(f?.autoComplete)??"text",m={};switch(g){case"password":if(m.type="password",m.autoCapitalize="none",m.autoComplete=f?.autoComplete??"current-password",f?.autoCorrect!=null)m.autoCorrect=f.autoCorrect;break;case"new-password":if(m.type="password",m.autoCapitalize="none",m.autoComplete=f?.autoComplete??"new-password",f?.autoCorrect!=null)m.autoCorrect=f.autoCorrect;break;case"username":m.type="text",m.autoCapitalize="none",m.autoComplete=f?.autoComplete??"username";break;case"email":m.type="email",m.inputMode="email",m.autoCapitalize="none",m.autoComplete=f?.autoComplete??"email";break;case"url":m.type="url",m.inputMode="url",m.autoComplete=f?.autoComplete??"url";break;case"search":m.type="search",m.inputMode="search",m.enterKeyHint=f?.enterKeyHint??"search",m.autoComplete=f?.autoComplete??"off";break;case"phone":case"tel":m.type="tel",m.inputMode="tel",m.autoComplete=f?.autoComplete??"tel";break;case"number":case"int":m.type="text",m.inputMode="numeric",m.pattern="[0-9]*";break;case"decimal":m.type="text",m.inputMode="decimal",m.step="any";break;case"numbers-and-punctuation":m.type="text",m.inputMode="text",m.pattern="[0-9.,-]*";break;case"otp":m.type="text",m.inputMode="numeric",m.autoComplete=f?.autoComplete??"one-time-code",m.autoCapitalize="none";break;case"name":m.type="text",m.autoComplete=f?.autoComplete??"name",m.autoCapitalize=f?.autoCapitalize??"words";break;case"given-name":m.type="text",m.autoComplete=f?.autoComplete??"given-name",m.autoCapitalize=f?.autoCapitalize??"words";break;case"family-name":m.type="text",m.autoComplete=f?.autoComplete??"family-name",m.autoCapitalize=f?.autoCapitalize??"words";break;case"address-line1":m.type="text",m.autoComplete=f?.autoComplete??"address-line1";break;case"address-line2":m.type="text",m.autoComplete=f?.autoComplete??"address-line2";break;case"postal-code":m.type="text",m.inputMode="numeric",m.pattern="[0-9]*",m.autoComplete=f?.autoComplete??"postal-code";break;case"cc-number":m.type="text",m.inputMode="numeric",m.pattern="[0-9]*",m.autoComplete=f?.autoComplete??"cc-number";break;case"cc-exp":m.type="text",m.inputMode="numeric",m.pattern="[0-9/]*",m.autoComplete=f?.autoComplete??"cc-exp";break;case"cc-csc":m.type="text",m.inputMode="numeric",m.pattern="[0-9]*",m.autoComplete=f?.autoComplete??"cc-csc";break;case"off":m.type="text",m.autoComplete="off";break;case"date":m.type="date",m.inputMode="date",m.pattern="[0-9./-]*";break;default:m.type="text";break}if(f?.autoCapitalize)m.autoCapitalize=f.autoCapitalize;if(f?.autoComplete)m.autoComplete=f.autoComplete;if(f?.autoCorrect!=null)m.autoCorrect=f.autoCorrect;if(f?.enterKeyHint)m.enterKeyHint=f.enterKeyHint;return Sf(m,f?.autoComplete),m}import{jsx as Kf}from"react/jsx-runtime";function J({value:f,defaultValue:g,onChange:m,onSubmit:R,onFocus:y,onBlur:G,placeholder:$,disabled:q,readOnly:Y,maxLength:H,name:W,className:B,keyboard:U,...w}){let V=_(U);return Kf(Wf,{...w,className:B,value:f,defaultValue:g,onChange:m,onFocus:y,onBlur:G,placeholder:$,disabled:q,readOnly:Y,maxLength:H,name:W,...V})}import{Textarea as Xf}from"@contractspec/lib.ui-kit-web/ui/textarea";import*as ff from"react";import{jsx as Ef}from"react/jsx-runtime";function b({value:f,defaultValue:g,onChange:m,onSubmit:R,onFocus:y,onBlur:G,placeholder:$,disabled:q,readOnly:Y,maxLength:H,name:W,className:B,rows:U,keyboard:w,...V}){let M=_(w),O=ff.useCallback((u)=>m?.(u),[m]);return Ef(Xf,{...V,className:B,value:f,defaultValue:g,onChange:O,onFocus:y,onBlur:G,placeholder:$,disabled:q,readOnly:Y,maxLength:H,name:W,rows:U,...M})}import{jsx as P,jsxs as N}from"react/jsx-runtime";function mf({value:f,onChange:g,disabled:m}){return N("div",{className:"space-y-4",children:[N("div",{className:"space-y-2",children:[P(C,{children:"Nom"}),P(J,{value:f.name,onChange:(R)=>g({...f,name:R.target.value}),disabled:m})]}),N("div",{className:"space-y-2",children:[P(C,{children:"Email"}),P(J,{type:"email",value:f.email,onChange:(R)=>g({...f,email:R.target.value}),disabled:m})]}),N("div",{className:"space-y-2",children:[P(C,{children:"Objet"}),P(J,{value:f.subject,onChange:(R)=>g({...f,subject:R.target.value}),disabled:m})]}),N("div",{className:"space-y-2",children:[P(C,{children:"Message"}),P(b,{value:f.message,onChange:(R)=>g({...f,message:R.target.value}),disabled:m,rows:6})]})]})}import{jsx as gf,jsxs as Bf}from"react/jsx-runtime";function Tg({labels:f={submit:"Envoyer"},initialValue:g={name:"",email:"",subject:"",message:""},disabled:m,onSubmit:R}){let[y,G]=j.useState(g),[$,q]=j.useState(!1);return Bf("form",{onSubmit:async(H)=>{if(H.preventDefault(),!R)return;q(!0);try{await R(y)}finally{q(!1)}},className:"space-y-6",children:[gf(mf,{value:y,onChange:G,disabled:m||$}),gf(z,{disabled:m||$,type:"submit",children:$?"Envoi…":f.submit})]})}import*as Tf from"react";import{cn as Uf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as wf}from"class-variance-authority";import{jsx as Mf}from"react/jsx-runtime";var Vf=wf("text-foreground tracking-tight",{variants:{level:{h1:"font-semibold text-3xl md:text-4xl",h2:"font-semibold text-2xl md:text-3xl",h3:"font-semibold text-xl md:text-2xl",h4:"font-semibold text-lg md:text-xl"},tone:{default:"",muted:"text-muted-foreground",accent:"text-primary"},spacing:{none:"",sm:"mt-4",md:"mt-6",lg:"mt-8"}},defaultVariants:{level:"h2",tone:"default",spacing:"md"}});function X({as:f,level:g,tone:m,spacing:R,className:y,...G}){return Mf(f??g??"h2",{className:Uf(Vf({level:g,tone:m,spacing:R}),y),...G})}import{cn as Nf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as kf}from"class-variance-authority";import{jsx as Of}from"react/jsx-runtime";var If=kf("space-y-3",{variants:{spacing:{sm:"py-3",md:"py-4",lg:"py-6"},border:{none:"",top:"border-t",bottom:"border-b",both:"border-y"},tone:{plain:"",subtle:"bg-muted/30"}},defaultVariants:{spacing:"md",border:"none",tone:"plain"}});function L({spacing:f,border:g,tone:m,className:R,...y}){return Of("div",{className:Nf(If({spacing:f,border:g,tone:m}),R),...y})}import{cn as _f}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as bf}from"class-variance-authority";import{jsx as Lf}from"react/jsx-runtime";var Cf=bf("text-base leading-relaxed",{variants:{tone:{default:"text-foreground",muted:"text-muted-foreground",danger:"text-destructive"},size:{base:"text-base",sm:"text-sm",lg:"text-lg"},spacing:{none:"",sm:"mt-2",md:"mt-3",lg:"mt-4"}},defaultVariants:{tone:"default",size:"base",spacing:"sm"}});function Rf({as:f="p",tone:g,size:m,spacing:R,className:y,...G}){return Lf(f,{className:_f(Cf({tone:g,size:m,spacing:R}),y),...G})}import{jsx as d,jsxs as yf}from"react/jsx-runtime";function Ug({onExport:f,onDelete:g,labels:m={export:"Demander une copie",delete:"Demander la suppression"}}){let[R,y]=Tf.useState(null),G=async($)=>{let q=$==="export"?f:g;if(!q)return;y($);try{await q()}finally{y(null)}};return yf(L,{border:"top",className:"space-y-3",children:[d(X,{as:"h2",level:"h2",children:"Demandes de données"}),d(Rf,{children:"Vous pouvez demander une copie de vos données ou solliciter leur suppression. Ces demandes nécessitent une vérification d’identité et sont traitées dans les délais légaux."}),yf("div",{className:"flex flex-wrap gap-3",children:[d(z,{onPress:()=>G("export"),disabled:R!==null,children:R==="export"?"Envoi…":m.export}),d(z,{variant:"destructive",onPress:()=>G("delete"),disabled:R!==null,children:R==="delete"?"Envoi…":m.delete})]})]})}import{cn as df}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as Ff}from"class-variance-authority";import{jsx as cf}from"react/jsx-runtime";var Af=Ff("",{variants:{type:{unordered:"list-disc pl-6",ordered:"list-decimal pl-6",none:"pl-0"},spacing:{sm:"space-y-1",md:"space-y-2",lg:"space-y-3"}},defaultVariants:{type:"unordered",spacing:"md"}});function qf({type:f,spacing:g,className:m,children:R,...y}){return cf(f==="ordered"?"ol":"ul",{className:df(Af({type:f,spacing:g}),m),...y,children:R})}import{jsx as v,jsxs as uf}from"react/jsx-runtime";function Cg({title:f="Vos droits RGPD",rights:g=["Accès à vos données","Rectification","Effacement (droit à l’oubli)","Opposition et limitation","Portabilité"]}){return uf(L,{border:"top",children:[v(X,{as:"h2",level:"h2",children:f}),v(qf,{type:"unordered",children:g.map((m,R)=>v("li",{children:m},R))})]})}import{cn as lf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cn as xf}from"@contractspec/lib.ui-kit-web/ui/utils";import{jsx as jf,jsxs as i}from"react/jsx-runtime";function Gf({lastUpdated:f,version:g,className:m}){let R=(y)=>{if(!y)return null;try{return(typeof y==="string"?new Date(y):y).toLocaleDateString()}catch{return String(y)}};return i("div",{className:xf("text-base text-muted-foreground",m),children:[g&&i("span",{children:["Version ",g]}),g&&f&&jf("span",{className:"mx-2",children:"•"}),f&&i("span",{children:["Dernière mise à jour: ",R(f)]})]})}import{cn as n}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as vf}from"class-variance-authority";import{jsx as k}from"react/jsx-runtime";var nf=vf("text-base",{variants:{variant:{sidebar:"space-y-2",inline:"flex flex-wrap gap-3"},size:{sm:"",md:"text-base"}},defaultVariants:{variant:"sidebar",size:"md"}});function l({items:f,activeHref:g,onNavigate:m,variant:R,size:y,className:G,...$}){return k("nav",{"aria-label":"Table of contents",className:n(nf({variant:R,size:y}),G),...$,children:R==="inline"?f.map((q)=>k("a",{href:q.href,onClick:(Y)=>{m?.(q.href)},className:n("rounded-xs px-2 py-1 hover:bg-accent hover:text-accent-foreground",g===q.href&&"bg-accent text-accent-foreground"),children:q.label},q.href)):k("ul",{className:"list-none space-y-2 pl-0",children:f.map((q)=>k("li",{children:k("a",{href:q.href,onClick:()=>m?.(q.href),className:n("block rounded-xs px-2 py-1 hover:bg-accent hover:text-accent-foreground",g===q.href&&"bg-accent text-accent-foreground"),children:q.label})},q.href))})})}import{jsx as S,jsxs as e}from"react/jsx-runtime";function rg({title:f,meta:g,toc:m,children:R,className:y}){return e("div",{className:lf("mx-auto w-full max-w-6xl px-4 py-8 md:py-12",y),children:[e("div",{className:"mb-6 space-y-2",children:[S(X,{as:"h1",level:"h1",spacing:"sm",children:f}),g&&S(Gf,{lastUpdated:g.lastUpdated,version:g.version})]}),m&&m.length>0&&S("div",{className:"mb-6 md:hidden",children:S(l,{items:m,variant:"inline"})}),e("div",{className:"grid grid-cols-1 gap-8 md:grid-cols-[220px_minmax(0,1fr)]",children:[m&&m.length>0?S("aside",{className:"sticky top-24 hidden self-start md:block",children:S(l,{items:m,variant:"sidebar"})}):S("div",{className:"hidden md:block"}),S("article",{className:"prose max-w-none text-foreground",children:R})]})]})}import*as F from"react";import{jsx as ef}from"react/jsx-runtime";var $f=F.createContext(void 0);function ag({children:f,resolver:g}){return ef($f.Provider,{value:g,children:f})}function r(){return F.useContext($f)}function t(f,g){if(!f)return f;return g?.(f)??f}function Jf(f,g){return typeof f==="string"?t(f,g):f}function sg({registry:f,locale:g,fallbackLocale:m,specKeys:R=[]}){return(y)=>{let G=y.match(/^([^:]+)::(.+)$/);if(G?.[1]&&G[2]){let[,$,q]=G;return f.getWithFallback($,q,g,m)?.message.value}for(let $ of R){let q=f.getWithFallback($,y,g,m);if(q)return q.message.value}return}}var rf={sm:640,md:768,lg:1024,xl:1280};function mR(f){let g=f.platform??"web",m={...rf,...f.breakpoints};return{platform:g,tokens:f.tokens,breakpoints:m}}import{shadcnDriver as tf}from"@contractspec/lib.contracts-runtime-client-react/drivers/shadcn";import{createFormRenderer as of}from"@contractspec/lib.contracts-runtime-client-react/form-render";import{Checkbox as af}from"@contractspec/lib.ui-kit-web/ui/checkbox";import{Command as sf,CommandEmpty as pf,CommandGroup as fm,CommandInput as mm,CommandItem as gm,CommandList as Rm}from"@contractspec/lib.ui-kit-web/ui/command";import{DatePicker as ym}from"@contractspec/lib.ui-kit-web/ui/date-picker";import{DateTimePicker as Tm}from"@contractspec/lib.ui-kit-web/ui/datetime-picker";import{FieldDescription as qm,FieldError as Gm,FieldGroup as $m,FieldLabel as Jm,Field as Qm}from"@contractspec/lib.ui-kit-web/ui/field";import{Label as Ym}from"@contractspec/lib.ui-kit-web/ui/label";import{RadioGroupItem as Zm,RadioGroup as hm}from"@contractspec/lib.ui-kit-web/ui/radio-group";import{SelectContent as Hm,SelectGroup as Dm,SelectItem as zm,SelectTrigger as Pm,Select as Sm,SelectValue as Wm}from"@contractspec/lib.ui-kit-web/ui/select";import{Switch as Km}from"@contractspec/lib.ui-kit-web/ui/switch";import{TimePicker as Xm}from"@contractspec/lib.ui-kit-web/ui/time-picker";import{jsx as T,jsxs as D}from"react/jsx-runtime";function Z(f){return typeof f==="string"?f:String(f??"")}var Q={addressLine1:"Address line 1",addressLine2:"Address line 2",city:"City",countryCode:"Country code",extension:"Extension",noResultsFound:"No results found.",phoneNumber:"Phone number",postalCode:"Postal code",region:"Region",search:"Search",selected:"Selected"};function h(){let f=r();return(g)=>t(g,f)}function o(f,g,m){return f(g)??m}function I(){let f=r();return(g)=>Jf(g,f)}var a=(f)=>{let g=h(),{options:m,value:R,onChange:y,placeholder:G,...$}=f;return D(Sm,{value:R==null?"":Z(R),onValueChange:(q)=>y?.(q),...$,children:[T(Pm,{className:"w-full",children:T(Wm,{placeholder:g(G)})}),T(Hm,{children:T(Dm,{children:m?.map((q,Y)=>T(zm,{value:Z(q.value),disabled:q.disabled,children:g(q.labelI18n)},`${Z(q.value)}-${Y}`))})})]})},Em=(f)=>T(af,{checked:Boolean(f.checked),onCheckedChange:(g)=>f.onCheckedChange?.(Boolean(g))}),Bm=(f)=>{let g=h();return T(hm,{value:f.value==null?"":Z(f.value),onValueChange:(m)=>f.onValueChange?.(m),disabled:f.disabled,children:f.options?.map((m)=>{let R=Z(m.value);return D("div",{className:"flex items-center gap-3",children:[T(Zm,{value:R,id:R}),T(Ym,{htmlFor:R,children:g(m.labelI18n)})]},R)})})},Um=(f)=>T(Km,{checked:Boolean(f.checked),onCheckedChange:(g)=>f.onCheckedChange?.(Boolean(g))}),wm=(f)=>{let g=h();return D("div",{className:"space-y-2",children:[D(sf,{shouldFilter:!1,className:"rounded-md border border-input",children:[T(mm,{value:f.query,onValueChange:f.onQueryChange,placeholder:o(g,f.placeholder,Q.search),disabled:f.disabled||f.readOnly}),D(Rm,{children:[T(pf,{children:o(g,Q.noResultsFound,Q.noResultsFound)}),T(fm,{children:f.options.map((m)=>{let R=f.selectedOptions.some((y)=>Z(y.value)===Z(m.value));return D(gm,{value:g(m.labelI18n)??m.labelI18n,onSelect:()=>f.onSelectOption?.(m),disabled:f.disabled||m.disabled||f.readOnly,children:[D("div",{className:"flex flex-col",children:[T("span",{children:g(m.labelI18n)}),m.descriptionI18n?T("span",{className:"text-muted-foreground text-xs",children:g(m.descriptionI18n)}):null]}),R?T("span",{className:"ml-auto text-muted-foreground text-xs",children:o(g,Q.selected,Q.selected)}):null]},Z(m.value))})})]})]}),f.selectedOptions.length?T("div",{className:"flex flex-wrap gap-2",children:f.selectedOptions.map((m)=>T(z,{type:"button",variant:"outline",size:"sm",onClick:()=>f.onRemoveOption?.(m),disabled:!f.multiple||f.readOnly||f.disabled,children:g(m.labelI18n)},`selected-${Z(m.value)}`))}):null]})};function K(f,g,m){return{line1:f?.line1??"",line2:f?.line2,city:f?.city,region:f?.region,postalCode:f?.postalCode,countryCode:f?.countryCode,[g]:m}}var Vm=(f)=>{let g=h();return D("div",{className:"grid gap-3 md:grid-cols-2",children:[T(J,{value:f.value?.line1??"",onChange:(m)=>f.onChange?.(K(f.value,"line1",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.line1??Q.addressLine1),readOnly:f.readOnly,disabled:f.disabled}),T(J,{value:f.value?.line2??"",onChange:(m)=>f.onChange?.(K(f.value,"line2",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.line2??Q.addressLine2),readOnly:f.readOnly,disabled:f.disabled}),T(J,{value:f.value?.city??"",onChange:(m)=>f.onChange?.(K(f.value,"city",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.city??Q.city),readOnly:f.readOnly,disabled:f.disabled}),T(J,{value:f.value?.region??"",onChange:(m)=>f.onChange?.(K(f.value,"region",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.region??Q.region),readOnly:f.readOnly,disabled:f.disabled}),T(J,{value:f.value?.postalCode??"",onChange:(m)=>f.onChange?.(K(f.value,"postalCode",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.postalCode??Q.postalCode),readOnly:f.readOnly,disabled:f.disabled}),f.countryOptions?.length?T(a,{value:f.value?.countryCode??"",onChange:(m)=>f.onChange?.(K(f.value,"countryCode",Z(m))),options:f.countryOptions,disabled:f.disabled||f.readOnly}):T(J,{value:f.value?.countryCode??"",onChange:(m)=>f.onChange?.(K(f.value,"countryCode",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.countryCode??Q.countryCode),readOnly:f.readOnly,disabled:f.disabled})]})};function A(f,g,m){return{countryCode:f?.countryCode??"",nationalNumber:f?.nationalNumber??"",extension:f?.extension,e164:f?.e164,[g]:m}}var Mm=(f)=>{let g=h();return D("div",{className:"grid gap-3 md:grid-cols-3",children:[f.countryOptions?.length?T(a,{value:f.value?.countryCode??"",onChange:(m)=>f.onChange?.(A(f.value,"countryCode",Z(m))),options:f.countryOptions,disabled:f.disabled||f.readOnly}):T(J,{value:f.value?.countryCode??"",onChange:(m)=>f.onChange?.(A(f.value,"countryCode",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.countryCode??Q.countryCode),readOnly:f.readOnly,disabled:f.disabled}),T(J,{value:f.value?.nationalNumber??"",onChange:(m)=>f.onChange?.(A(f.value,"nationalNumber",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.nationalNumber??Q.phoneNumber),readOnly:f.readOnly,disabled:f.disabled}),T(J,{value:f.value?.extension??"",onChange:(m)=>f.onChange?.(A(f.value,"extension",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.extension??Q.extension),readOnly:f.readOnly,disabled:f.disabled})]})},Nm=(f)=>{let g=h();return T(ym,{value:f.value??null,onChange:f.onChange??(()=>{return}),disabled:f.disabled,placeholder:g(f.placeholder),minDate:f.minDate,maxDate:f.maxDate})},km=(f)=>{let g=h();return T(Xm,{value:f.value??null,onChange:f.onChange??(()=>{return}),disabled:f.disabled,placeholder:g(f.placeholder),is24Hour:f.is24Hour})},Im=(f)=>{let g=h();return T(Tm,{value:f.value??null,onChange:f.onChange??(()=>{return}),disabled:f.disabled,datePlaceholder:g(f.datePlaceholder),timePlaceholder:g(f.timePlaceholder),minDate:f.minDate,maxDate:f.maxDate,is24Hour:f.is24Hour})},Om=(f)=>{let g=I();return T(Jm,{...f,children:g(f.children)})},_m=(f)=>{let g=I();return T(qm,{...f,children:g(f.children)})},bm=(f)=>{let g=I();return T(Gm,{...f,children:g(f.children)})},Cm=(f)=>{let g=h();return T(J,{...f,placeholder:g(f.placeholder)})},Lm=(f)=>{let g=h();return T(b,{...f,placeholder:g(f.placeholder)})},dm=(f)=>{let g=I();return T(z,{...f,children:g(f.children)})},WR=of({driver:tf({Field:Qm,FieldLabel:Om,FieldDescription:_m,FieldError:bm,FieldGroup:$m,FieldSet:(f)=>T("fieldset",{...f}),FieldLegend:(f)=>{let g=I();return T("legend",{...f,children:g(f.children)})},Input:Cm,Textarea:Lm,Select:a,Checkbox:Em,RadioGroup:Bm,Switch:Um,Autocomplete:wm,AddressField:Vm,PhoneField:Mm,DateField:Nm,TimeField:km,DateTimeField:Im,Button:dm})});var E={colors:{background:"#ffffff",foreground:"#0a0a0a",muted:"#f4f4f5",mutedForeground:"#71717a",primary:"#0f49a0",primaryForeground:"#ffffff",accent:"#16a34a",accentForeground:"#ffffff",destructive:"#ef4444",destructiveForeground:"#ffffff",border:"#e4e4e7",ring:"#2563eb"},radii:{sm:4,md:8,lg:12,xl:16,full:9999},space:{xs:4,sm:8,md:12,lg:16,xl:24},typography:{h1:30,h2:24,h3:20,body:16,small:14},icons:{sm:16,md:20,lg:24}};function s(f,g=E){if(f==="web")return g;let{space:m,radii:R,icons:y}=g;return{colors:g.colors,spacing:m,typography:{h1:g.typography.h1,body:g.typography.body},radii:R,icons:y}}function c(f,g){if(!g)return f;let m={...f},R=m;for(let[y,G]of Object.entries(g))if(G?.value!=null)R[y]=G.value;return m}function Qf(f,g){if(!g)return f;return{...f,colors:c(f.colors,g.colors),radii:c(f.radii,g.radii),space:c(f.space,g.space),typography:c(f.typography,g.typography)}}function Fm(f,g){if(!g?.targets?.length)return!0;return g.targets.includes(f.target)}function Yf(f,g,m=E){let R=Qf(m,f.tokens);for(let y of f.overrides??[])if(Fm(y,g))R=Qf(R,y.tokens);return R}function Zf(f,g,m){let R=f.get(g.key,g.version);if(!R)return E;let y=R.meta.extends?Zf(f,R.meta.extends,m):E;return Yf(R,m,y)}function MR(f,g,m,R){if("tokens"in f){let Y=f,H=g,W=Yf(Y,m);return s(H,W)}let y=f,G=g,$=m,q=Zf(y,G,R);return s($,q)}import{cva as Am}from"class-variance-authority";var IR=Am("",{variants:{size:{sm:"",md:"",lg:""},density:{compact:"",comfortable:""},tone:{neutral:"",info:"",success:"",warning:"",danger:""},emphasis:{default:"",subtle:"",strong:""}},defaultVariants:{size:"md",density:"comfortable",tone:"neutral",emphasis:"default"}});export{mR as withPlatformUI,K2 as useResponsive,S2 as useReducedMotion,p1 as usePackageManager,h2 as useListUrlState,r as useDesignSystemTranslation,z2 as useColorScheme,t as resolveTranslationString,Jf as resolveTranslationNode,Yf as resolveThemeSpecTokens,Zf as resolveThemeRefTokens,MR as resolvePlatformTheme,Qf as mergeThemeTokens,w2 as mapTokensForPlatform,WR as formRenderer,IR as dsBaseVariants,E as defaultTokens,sg as createTranslationResolver,ry as ZodForm,Y2 as VisualizationRenderer,J2 as VisualizationGrid,G2 as VisualizationCard,vR as ViewButton,jR as ToggleRightButton,xR as ToggleLeftButton,uR as ToggleButton,T2 as TimelineView,fy as TimeChip,Ky as Textarea,o1 as TestimonialCarousel,OT as TermsTemplate,Sy as Stepper,o4 as StatusChip,r4 as StatCardGroup,e4 as StatCard,n4 as SkeletonList,v4 as SkeletonCircle,x4 as SkeletonBlock,zy as ScoreBar,kT as SalesTermsTemplate,Hy as RankBadge,MT as PrivacyTemplate,r1 as PricingSection,l1 as PricingCarousel,pR as PlaceChip,i1 as PageHeaderResponsive,s1 as PackageManagerProvider,c4 as OverviewCard,F4 as NavUser,L4 as NavMain,Zy as NavBrand,j1 as ModelComparisonView,K1 as MobileHeader,eT as MarketingStepCard,nT as MarketingSection,u1 as MarketingLayout,vT as MarketingIconCard,A1 as MarketingHeaderMobile,d1 as MarketingHeaderDesktop,C1 as MarketingHeader,xT as MarketingComparisonSection,cT as MarketingCardsSection,FT as MarketingCardTitle,dT as MarketingCardHeader,LT as MarketingCardDescription,CT as MarketingCardContent,bT as MarketingCard,b4 as MarkdownRenderer,Qy as LoaderCircular,O4 as LoaderBlock,_1 as ListTablePage,m2 as ListPageTemplate,I1 as ListPageResponsive,N1 as ListGridPage,V1 as ListCardPage,$y as Link,$T as LegalText,PT as LegalTOC,qT as LegalSection,rg as LegalPageLayout,DT as LegalMeta,yT as LegalList,gT as LegalHeading,fT as LegalCallout,k4 as LangSwitch,sy as KeyValueList,M4 as InstallCommand,qy as Input,w4 as HoverPreviewUser,B4 as HoverPreviewStats,X4 as HoverPreviewSimple,W4 as HoverPreviewMedia,P4 as HoverPreviewDoc,D4 as HoverPreview,U1 as HeroSection,E1 as HeroResponsive,W1 as Header,Cg as GDPRRights,Ug as GDPRDataRequest,ly as FormStepsLayout,jy as FormSection,xy as FormRow,iy as FormOneByOneLayout,uy as FormGrid,Ay as FormDialog,dy as FormCardLayout,z1 as Footer,h4 as FiltersToolbar,H1 as FeaturesSection,Z1 as FeatureCarousel,Q1 as FAQSection,yy as ErrorState,Y4 as EntityCard,gy as EmptyState,$1 as EmptySearchResult,q1 as EmptyDataList,cR as EditButton,sR as DurationChip,J4 as DimensionScoresCard,S1 as DesktopHeader,ag as DesignSystemTranslationProvider,AR as DeleteButton,oy as DefinitionList,aR as DateChip,_y as DataViewTable,Iy as DataViewRenderer,Ny as DataViewList,Vy as DataViewDetail,Uy as DataTableToolbar,Ey as DataTable,rf as DEFAULT_BREAKPOINTS,tR as Cta,G4 as CopyButton,wT as CookiesTemplate,BT as ContactTemplate,Tg as ContactForm,hT as ContactFields,YT as ConsentList,QT as ConsentItem,R2 as ComparisonView,T4 as CommandTabs,R4 as CommandSearchTrigger,m4 as CommandPalette,pT as CodeBlock,eR as ButtonLink,nR as Button,aT as Breadcrumbs,dR as ApprovalQueue,y1 as AppSidebar,g1 as AppLayout,f1 as AppHeader,tT as AiLinkButton,CR as AgentMonitor,Cy as ActionForm,s4 as AcademyLayout};
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  import { type ButtonProps } from './Button';
4
4
  declare const _actionBtn: (props?: ({
5
5
  tone?: "outline" | "neutral" | "danger" | "subtle" | null | undefined;
6
- size?: "sm" | "lg" | "md" | "icon" | null | undefined;
6
+ size?: "sm" | "md" | "lg" | "icon" | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
8
  type ActionBtnProps = Omit<ButtonProps, 'size' | 'variant'> & VariantProps<typeof _actionBtn> & {
9
9
  label?: React.ReactNode;
@@ -2,8 +2,8 @@ import { type VariantProps } from 'class-variance-authority';
2
2
  import * as React from 'react';
3
3
  import { type ButtonProps } from './Button';
4
4
  declare const _ctaVariants: (props?: ({
5
- size?: "sm" | "lg" | "md" | "touch" | null | undefined;
6
- emphasis?: "strong" | "default" | "subtle" | null | undefined;
5
+ size?: "sm" | "md" | "lg" | "touch" | null | undefined;
6
+ emphasis?: "default" | "strong" | "subtle" | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
8
  export type CtaProps = Omit<ButtonProps, 'size'> & VariantProps<typeof _ctaVariants> & {
9
9
  capture?: (cta: string) => void;
@@ -10,11 +10,12 @@ interface BaseFieldProps {
10
10
  onBlur?: () => void;
11
11
  placeholder?: string;
12
12
  disabled?: boolean;
13
+ readOnly?: boolean;
13
14
  maxLength?: number;
14
15
  className?: string;
15
16
  keyboard?: KeyboardOptions;
16
17
  }
17
18
  type NativeInputComponentProps = React.ComponentProps<typeof NativeInput>;
18
19
  export type InputProps = Omit<NativeInputComponentProps, 'onChangeText' | 'value' | 'defaultValue'> & BaseFieldProps;
19
- export declare function Input({ value, defaultValue, onChange, onSubmit, onFocus, onBlur, placeholder, disabled, maxLength, className, keyboard, ...rest }: InputProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare function Input({ value, defaultValue, onChange, onSubmit, onFocus, onBlur, placeholder, disabled, readOnly, maxLength, className, keyboard, ...rest }: InputProps): import("react/jsx-runtime").JSX.Element;
20
21
  export default Input;
@@ -1,7 +1,7 @@
1
1
  import { type VariantProps } from 'class-variance-authority';
2
2
  import * as React from 'react';
3
3
  declare const spinnerVariants: (props?: ({
4
- size?: "sm" | "lg" | "md" | null | undefined;
4
+ size?: "sm" | "md" | "lg" | null | undefined;
5
5
  tone?: "default" | "muted" | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
7
  export type LoaderCircularProps = React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof spinnerVariants> & {
@@ -1,6 +1,6 @@
1
1
  import { type VariantProps } from 'class-variance-authority';
2
2
  declare const badgeVariants: (props?: ({
3
- size?: "sm" | "lg" | "md" | null | undefined;
3
+ size?: "sm" | "md" | "lg" | null | undefined;
4
4
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5
5
  export type RankBadgeProps = VariantProps<typeof badgeVariants> & {
6
6
  rank: number;
@@ -1,6 +1,6 @@
1
1
  import { type VariantProps } from 'class-variance-authority';
2
2
  declare const sizeVariants: (props?: ({
3
- size?: "sm" | "lg" | "md" | null | undefined;
3
+ size?: "sm" | "md" | "lg" | null | undefined;
4
4
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5
5
  export type ScoreBarProps = VariantProps<typeof sizeVariants> & {
6
6
  score: number;
@@ -10,11 +10,12 @@ interface BaseFieldProps {
10
10
  onBlur?: () => void;
11
11
  placeholder?: string;
12
12
  disabled?: boolean;
13
+ readOnly?: boolean;
13
14
  maxLength?: number;
14
15
  className?: string;
15
16
  keyboard?: KeyboardOptions;
16
17
  }
17
18
  type NativeTextareaComponentProps = React.ComponentProps<typeof NativeTextarea>;
18
19
  export type TextareaProps = Omit<NativeTextareaComponentProps, 'onChangeText' | 'value' | 'defaultValue'> & BaseFieldProps;
19
- export declare function Textarea({ value, defaultValue, onChange, onSubmit, onFocus, onBlur, placeholder, disabled, maxLength, className, keyboard, ...rest }: TextareaProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare function Textarea({ value, defaultValue, onChange, onSubmit, onFocus, onBlur, placeholder, disabled, readOnly, maxLength, className, keyboard, ...rest }: TextareaProps): import("react/jsx-runtime").JSX.Element;
20
21
  export default Textarea;
@@ -0,0 +1,3 @@
1
+ import { type DataTableToolbarProps } from './DataTableToolbar.shared';
2
+ export declare function DataTableToolbar<TItem>({ controller, className, searchPlaceholder, searchValue, onSearchChange, onSearchSubmit, debounceMs, activeChips, onClearAll, actionsStart, actionsEnd, selectionSummary, }: DataTableToolbarProps<TItem>): import("react/jsx-runtime").JSX.Element;
3
+ export type { DataTableToolbarProps } from './DataTableToolbar.shared';
@@ -0,0 +1,3 @@
1
+ import { type DataTableToolbarProps } from './DataTableToolbar.shared';
2
+ export declare function DataTableToolbar<TItem>({ controller, className, searchPlaceholder, searchValue, onSearchChange, onSearchSubmit, debounceMs, activeChips, onClearAll, actionsStart, actionsEnd, selectionSummary, }: DataTableToolbarProps<TItem>): import("react/jsx-runtime").JSX.Element;
3
+ export type { DataTableToolbarProps } from './DataTableToolbar.shared';
@@ -0,0 +1,23 @@
1
+ import type { ContractTableController } from '@contractspec/lib.presentation-runtime-react';
2
+ import type * as React from 'react';
3
+ export interface DataTableToolbarChip {
4
+ key: string;
5
+ label: React.ReactNode;
6
+ onRemove?: () => void;
7
+ }
8
+ export interface DataTableToolbarProps<TItem = unknown> {
9
+ controller: ContractTableController<TItem, React.ReactNode>;
10
+ className?: string;
11
+ searchPlaceholder?: string;
12
+ searchValue?: string;
13
+ onSearchChange?: (value: string) => void;
14
+ onSearchSubmit?: () => void;
15
+ debounceMs?: number;
16
+ activeChips?: DataTableToolbarChip[];
17
+ onClearAll?: () => void;
18
+ actionsStart?: React.ReactNode;
19
+ actionsEnd?: React.ReactNode;
20
+ selectionSummary?: React.ReactNode;
21
+ }
22
+ export declare function getHiddenDataColumns<TItem>(controller: ContractTableController<TItem, React.ReactNode>): import("@contractspec/lib.presentation-runtime-core").ContractTableColumnRenderModel<React.ReactNode>[];
23
+ export declare function showHiddenDataColumns<TItem>(controller: ContractTableController<TItem, React.ReactNode>): void;
@@ -8,6 +8,8 @@ export interface DataViewRendererProps {
8
8
  renderActions?: (item: Record<string, unknown>) => React.ReactNode;
9
9
  onSelect?: (item: Record<string, unknown>) => void;
10
10
  onRowClick?: (item: Record<string, unknown>) => void;
11
+ toolbar?: React.ReactNode;
12
+ loading?: boolean;
11
13
  headerActions?: React.ReactNode;
12
14
  emptyState?: React.ReactNode;
13
15
  footer?: React.ReactNode;
@@ -22,4 +24,4 @@ export interface DataViewRendererProps {
22
24
  };
23
25
  onPageChange?: (page: number) => void;
24
26
  }
25
- export declare function DataViewRenderer({ spec, items, item, className, renderActions, onSelect, onRowClick, headerActions, emptyState, footer, search, onSearchChange, filters, onFilterChange, pagination, onPageChange, }: DataViewRendererProps): import("react/jsx-runtime").JSX.Element;
27
+ export declare function DataViewRenderer({ spec, items, item, className, renderActions, onSelect, onRowClick, toolbar, loading, headerActions, emptyState, footer, search, onSearchChange, filters, onFilterChange, pagination, onPageChange, }: DataViewRendererProps): import("react/jsx-runtime").JSX.Element;
@@ -8,6 +8,8 @@ export interface DataViewRendererProps {
8
8
  renderActions?: (item: Record<string, unknown>) => React.ReactNode;
9
9
  onSelect?: (item: Record<string, unknown>) => void;
10
10
  onRowClick?: (item: Record<string, unknown>) => void;
11
+ toolbar?: React.ReactNode;
12
+ loading?: boolean;
11
13
  headerActions?: React.ReactNode;
12
14
  emptyState?: React.ReactNode;
13
15
  footer?: React.ReactNode;
@@ -22,4 +24,4 @@ export interface DataViewRendererProps {
22
24
  };
23
25
  onPageChange?: (page: number) => void;
24
26
  }
25
- export declare function DataViewRenderer({ spec, items, item, className, renderActions, onSelect, onRowClick, headerActions, emptyState, footer, search, onSearchChange, filters, onFilterChange, pagination, onPageChange, }: DataViewRendererProps): import("react/jsx-runtime").JSX.Element;
27
+ export declare function DataViewRenderer({ spec, items, item, className, renderActions, onSelect, onRowClick, toolbar, loading, headerActions, emptyState, footer, search, onSearchChange, filters, onFilterChange, pagination, onPageChange, }: DataViewRendererProps): import("react/jsx-runtime").JSX.Element;
@@ -5,11 +5,13 @@ export interface DataViewTableProps {
5
5
  items: Record<string, unknown>[];
6
6
  className?: string;
7
7
  onRowClick?: (item: Record<string, unknown>) => void;
8
+ toolbar?: React.ReactNode;
9
+ loading?: boolean;
8
10
  emptyState?: React.ReactNode;
9
11
  headerActions?: React.ReactNode;
10
12
  footer?: React.ReactNode;
11
13
  }
12
- export declare function DataViewTable({ spec, items, className, onRowClick, emptyState, headerActions, footer, }: DataViewTableProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function DataViewTable({ spec, items, className, onRowClick, toolbar, loading, emptyState, headerActions, footer, }: DataViewTableProps): import("react/jsx-runtime").JSX.Element;
13
15
  export declare function DisplayValue({ item, fields, fieldKey, }: {
14
16
  item: Record<string, unknown>;
15
17
  fields: DataViewField[];
@@ -5,11 +5,13 @@ export interface DataViewTableProps {
5
5
  items: Record<string, unknown>[];
6
6
  className?: string;
7
7
  onRowClick?: (item: Record<string, unknown>) => void;
8
+ toolbar?: React.ReactNode;
9
+ loading?: boolean;
8
10
  emptyState?: React.ReactNode;
9
11
  headerActions?: React.ReactNode;
10
12
  footer?: React.ReactNode;
11
13
  }
12
- export declare function DataViewTable({ spec, items, className, onRowClick, emptyState, headerActions, footer, }: DataViewTableProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function DataViewTable({ spec, items, className, onRowClick, toolbar, loading, emptyState, headerActions, footer, }: DataViewTableProps): import("react/jsx-runtime").JSX.Element;
13
15
  export declare function DisplayValue({ item, fields, fieldKey, }: {
14
16
  item: Record<string, unknown>;
15
17
  fields: DataViewField[];
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  declare const headingVariants: (props?: ({
4
4
  level?: "h1" | "h2" | "h3" | "h4" | null | undefined;
5
5
  tone?: "default" | "muted" | "accent" | null | undefined;
6
- spacing?: "none" | "sm" | "lg" | "md" | null | undefined;
6
+ spacing?: "sm" | "md" | "lg" | "none" | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
8
  export type LegalHeadingProps = React.HTMLAttributes<HTMLHeadingElement> & VariantProps<typeof headingVariants> & {
9
9
  as?: 'h1' | 'h2' | 'h3' | 'h4';
@@ -2,7 +2,7 @@ import { type VariantProps } from 'class-variance-authority';
2
2
  import * as React from 'react';
3
3
  declare const listVariants: (props?: ({
4
4
  type?: "none" | "unordered" | "ordered" | null | undefined;
5
- spacing?: "sm" | "lg" | "md" | null | undefined;
5
+ spacing?: "sm" | "md" | "lg" | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
7
  export type LegalListProps = React.HTMLAttributes<HTMLUListElement | HTMLOListElement> & VariantProps<typeof listVariants>;
8
8
  export declare function LegalList({ type, spacing, className, children, ...props }: LegalListProps): import("react/jsx-runtime").JSX.Element;
@@ -1,8 +1,8 @@
1
1
  import { type VariantProps } from 'class-variance-authority';
2
2
  import * as React from 'react';
3
3
  declare const sectionVariants: (props?: ({
4
- spacing?: "sm" | "lg" | "md" | null | undefined;
5
- border?: "none" | "top" | "bottom" | "both" | null | undefined;
4
+ spacing?: "sm" | "md" | "lg" | null | undefined;
5
+ border?: "none" | "both" | "top" | "bottom" | null | undefined;
6
6
  tone?: "subtle" | "plain" | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
8
  export type LegalSectionProps = React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof sectionVariants>;
@@ -2,8 +2,8 @@ import { type VariantProps } from 'class-variance-authority';
2
2
  import * as React from 'react';
3
3
  declare const textVariants: (props?: ({
4
4
  tone?: "default" | "danger" | "muted" | null | undefined;
5
- size?: "base" | "sm" | "lg" | null | undefined;
6
- spacing?: "none" | "sm" | "lg" | "md" | null | undefined;
5
+ size?: "sm" | "lg" | "base" | null | undefined;
6
+ spacing?: "sm" | "md" | "lg" | "none" | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
8
  export type LegalTextProps = React.HTMLAttributes<HTMLParagraphElement> & VariantProps<typeof textVariants> & {
9
9
  as?: 'p' | 'div' | 'span';
@@ -5,7 +5,7 @@ export interface TocItem {
5
5
  label: React.ReactNode;
6
6
  }
7
7
  declare const tocVariants: (props?: ({
8
- variant?: "inline" | "sidebar" | null | undefined;
8
+ variant?: "sidebar" | "inline" | null | undefined;
9
9
  size?: "sm" | "md" | null | undefined;
10
10
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
11
11
  export type LegalTOCProps = {
@@ -2,7 +2,7 @@ import { type VariantProps } from 'class-variance-authority';
2
2
  import * as React from 'react';
3
3
  import { MarketingSection } from './MarketingSection';
4
4
  declare const gridVariants: (props?: ({
5
- columns?: 1 | 2 | 4 | 3 | null | undefined;
5
+ columns?: 2 | 3 | 4 | 1 | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
7
  type MarketingCardsSectionProps = React.PropsWithChildren<Omit<React.ComponentProps<typeof MarketingSection>, 'children'> & VariantProps<typeof gridVariants> & {
8
8
  gridClassName?: string;
@@ -2,7 +2,7 @@ import { Card } from '@contractspec/lib.ui-kit-web/ui/card';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
3
  import * as React from 'react';
4
4
  declare const entityCardVariants: (props?: ({
5
- emphasis?: "strong" | "default" | "subtle" | "accentGradient" | null | undefined;
5
+ emphasis?: "default" | "strong" | "subtle" | "accentGradient" | null | undefined;
6
6
  density?: "compact" | "comfortable" | null | undefined;
7
7
  interactive?: boolean | null | undefined;
8
8
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
@@ -1,2 +1,2 @@
1
1
  import type { FiltersToolbarProps } from './FiltersToolbar';
2
- export declare function FiltersToolbar({ className, children, right, searchPlaceholder, searchValue, onSearchChange, onSearchSubmit, debounceMs, activeChips: _activeChips, onClearAll: _onClearAll, }: FiltersToolbarProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function FiltersToolbar({ className, children, right, searchPlaceholder, searchValue, onSearchChange, onSearchSubmit, debounceMs, activeChips, onClearAll, }: FiltersToolbarProps): import("react/jsx-runtime").JSX.Element;
@@ -2,7 +2,7 @@ import { Card } from '@contractspec/lib.ui-kit-web/ui/card';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
3
  import * as React from 'react';
4
4
  declare const statVariants: (props?: ({
5
- emphasis?: "strong" | "default" | "subtle" | null | undefined;
5
+ emphasis?: "default" | "strong" | "subtle" | null | undefined;
6
6
  density?: "compact" | "comfortable" | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
8
  export type StatCardProps = React.ComponentProps<typeof Card> & VariantProps<typeof statVariants> & {
@@ -16,7 +16,7 @@ export interface FlatListScreenProps<T> extends Omit<FlatListProps<T>, 'data' |
16
16
  emptyText?: string;
17
17
  }
18
18
  declare const containerVariants: (props?: ({
19
- padding?: "none" | "sm" | "lg" | "md" | null | undefined;
19
+ padding?: "sm" | "md" | "lg" | "none" | null | undefined;
20
20
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
21
21
  export declare function FlatListScreen<T>({ children, data, renderItem, header, className, contentClassName, edges, showsVerticalScrollIndicator, keyboardShouldPersistTaps, onRefresh, refreshing, emptyComponent, emptyText, padding, ...flatListProps }: FlatListScreenProps<T>): import("react/jsx-runtime").JSX.Element;
22
22
  export {};
@@ -1,7 +1,7 @@
1
1
  import { type VariantProps } from 'class-variance-authority';
2
2
  import * as React from 'react';
3
3
  declare const gridVariants: (props?: ({
4
- gap?: "sm" | "lg" | "md" | null | undefined;
4
+ gap?: "sm" | "md" | "lg" | null | undefined;
5
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
6
  export declare function GridLayout({ children, className, columns, gap, }: {
7
7
  children: React.ReactNode;
@@ -4,7 +4,7 @@ declare const containerVariants: (props?: ({
4
4
  density?: "compact" | "comfortable" | null | undefined;
5
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
6
  declare const gridVariants: (props?: ({
7
- size?: "sm" | "lg" | "md" | null | undefined;
7
+ size?: "sm" | "md" | "lg" | null | undefined;
8
8
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
9
  export interface ListCardPageProps<T> extends VariantProps<typeof containerVariants>, VariantProps<typeof gridVariants> {
10
10
  title: React.ReactNode;
@@ -4,7 +4,7 @@ declare const containerVariants: (props?: ({
4
4
  density?: "compact" | "comfortable" | null | undefined;
5
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
6
  declare const gridGapVariants: (props?: ({
7
- size?: "sm" | "lg" | "md" | null | undefined;
7
+ size?: "sm" | "md" | "lg" | null | undefined;
8
8
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
9
  export interface ListGridPageProps<T> extends VariantProps<typeof containerVariants>, VariantProps<typeof gridGapVariants> {
10
10
  title: React.ReactNode;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ import type { TranslationRegistry } from '@contractspec/lib.contracts-spec/translations';
2
+ import * as React from 'react';
3
+ export type DesignSystemTranslationResolver = (key: string) => string | undefined;
4
+ export declare function DesignSystemTranslationProvider({ children, resolver, }: {
5
+ children: React.ReactNode;
6
+ resolver?: DesignSystemTranslationResolver;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ export declare function useDesignSystemTranslation(): DesignSystemTranslationResolver | undefined;
9
+ export declare function resolveTranslationString(value: string | undefined, resolver?: DesignSystemTranslationResolver): string | undefined;
10
+ export declare function resolveTranslationNode(value: React.ReactNode, resolver?: DesignSystemTranslationResolver): string | number | bigint | boolean | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | undefined;
11
+ export declare function createTranslationResolver({ registry, locale, fallbackLocale, specKeys, }: {
12
+ registry: TranslationRegistry;
13
+ locale: string;
14
+ fallbackLocale?: string;
15
+ specKeys?: string[];
16
+ }): DesignSystemTranslationResolver;
package/dist/index.d.ts CHANGED
@@ -16,6 +16,7 @@ export { ScoreBar, type ScoreBarProps } from './components/atoms/ScoreBar';
16
16
  export { Stepper } from './components/atoms/Stepper';
17
17
  export { Textarea } from './components/atoms/Textarea';
18
18
  export { DataTable, type DataTableProps, } from './components/data-table/DataTable';
19
+ export { DataTableToolbar, type DataTableToolbarProps, } from './components/data-table/DataTableToolbar';
19
20
  export { DataViewDetail } from './components/data-view/DataViewDetail';
20
21
  export { DataViewList } from './components/data-view/DataViewList';
21
22
  export { DataViewRenderer } from './components/data-view/DataViewRenderer';
@@ -116,11 +117,13 @@ export { VisualizationCard, type VisualizationCardProps, } from './components/vi
116
117
  export { VisualizationGrid, type VisualizationGridProps, } from './components/visualization/VisualizationGrid';
117
118
  export { VisualizationRenderer, type VisualizationRendererProps, } from './components/visualization/VisualizationRenderer';
118
119
  export { useListUrlState } from './hooks/useListUrlState';
120
+ export * from './i18n/translation';
119
121
  export { useColorScheme } from './platform/useColorScheme';
120
122
  export { useReducedMotion } from './platform/useReducedMotion';
121
123
  export { useResponsive } from './platform/useResponsive';
122
124
  export * from './platform/withPlatformUI';
123
125
  export * from './renderers';
126
+ export * from './theme/contracts';
124
127
  export { mapTokensForPlatform } from './theme/tokenBridge';
125
128
  export * from './theme/tokens';
126
129
  export * from './theme/variants';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import*as N from"react";import{Button as o}from"@contractspec/lib.ui-kit-web/ui/button";import{Loader2 as h}from"lucide-react";import{jsx as U,jsxs as e,Fragment as a}from"react/jsx-runtime";function y({children:R,loading:g,spinnerPlacement:f="start",onPress:q,onPressIn:E,onPressOut:J,onLongPress:X,onTouchStart:Q,onTouchEnd:_,onTouchCancel:m,onMouseDown:D,onMouseUp:F,onClick:S,className:T,disabled:z,...B}){let M=Boolean(z||g),I=q?()=>{q()}:S,p=!B.asChild?e(a,{children:[g&&f==="start"?U(h,{className:"h-4 w-4 animate-spin"}):null,R,g&&f==="end"?U(h,{className:"h-4 w-4 animate-spin"}):null]}):R;return U(o,{...B,className:T,disabled:M,"aria-busy":g?!0:void 0,"aria-disabled":M?!0:void 0,onClick:I,onMouseDown:D||E,onMouseUp:F||J,onTouchStart:Q,onTouchEnd:_||J,onTouchCancel:m||J,type:B?.type??"button",children:p})}import{Label as K}from"@contractspec/lib.ui-kit-web/ui/label";import{Input as ff}from"@contractspec/lib.ui-kit-web/ui/input";function t(R){if(!R)return;switch(R){case"email":return"email";case"url":return"url";case"username":return"username";case"new-password":return"new-password";case"current-password":return"password";case"one-time-code":return"otp";case"tel":case"tel-country-code":case"tel-national":case"tel-area-code":case"tel-local":case"tel-local-prefix":case"tel-local-suffix":case"tel-extension":return"tel";case"postal-code":case"cc-number":case"cc-csc":case"bday-day":case"bday-month":case"bday-year":return"int";case"cc-exp":case"cc-exp-month":case"cc-exp-year":return"numbers-and-punctuation";case"bday":return"date";default:return"text"}}function s(R,g){if(!g)return;if(["name","given-name","additional-name","family-name","honorific-prefix","honorific-suffix","nickname","organization","organization-title","cc-name","cc-given-name","cc-additional-name","cc-family-name"].includes(g))R.autoCapitalize="words";if(["username","new-password","current-password","one-time-code","email","url"].includes(g))R.autoCapitalize="none"}function W(R){let g=R?.kind??t(R?.autoComplete)??"text",f={};switch(g){case"password":if(f.type="password",f.autoCapitalize="none",f.autoComplete=R?.autoComplete??"current-password",R?.autoCorrect!=null)f.autoCorrect=R.autoCorrect;break;case"new-password":if(f.type="password",f.autoCapitalize="none",f.autoComplete=R?.autoComplete??"new-password",R?.autoCorrect!=null)f.autoCorrect=R.autoCorrect;break;case"username":f.type="text",f.autoCapitalize="none",f.autoComplete=R?.autoComplete??"username";break;case"email":f.type="email",f.inputMode="email",f.autoCapitalize="none",f.autoComplete=R?.autoComplete??"email";break;case"url":f.type="url",f.inputMode="url",f.autoComplete=R?.autoComplete??"url";break;case"search":f.type="search",f.inputMode="search",f.enterKeyHint=R?.enterKeyHint??"search",f.autoComplete=R?.autoComplete??"off";break;case"phone":case"tel":f.type="tel",f.inputMode="tel",f.autoComplete=R?.autoComplete??"tel";break;case"number":case"int":f.type="text",f.inputMode="numeric",f.pattern="[0-9]*";break;case"decimal":f.type="text",f.inputMode="decimal",f.step="any";break;case"numbers-and-punctuation":f.type="text",f.inputMode="text",f.pattern="[0-9.,-]*";break;case"otp":f.type="text",f.inputMode="numeric",f.autoComplete=R?.autoComplete??"one-time-code",f.autoCapitalize="none";break;case"name":f.type="text",f.autoComplete=R?.autoComplete??"name",f.autoCapitalize=R?.autoCapitalize??"words";break;case"given-name":f.type="text",f.autoComplete=R?.autoComplete??"given-name",f.autoCapitalize=R?.autoCapitalize??"words";break;case"family-name":f.type="text",f.autoComplete=R?.autoComplete??"family-name",f.autoCapitalize=R?.autoCapitalize??"words";break;case"address-line1":f.type="text",f.autoComplete=R?.autoComplete??"address-line1";break;case"address-line2":f.type="text",f.autoComplete=R?.autoComplete??"address-line2";break;case"postal-code":f.type="text",f.inputMode="numeric",f.pattern="[0-9]*",f.autoComplete=R?.autoComplete??"postal-code";break;case"cc-number":f.type="text",f.inputMode="numeric",f.pattern="[0-9]*",f.autoComplete=R?.autoComplete??"cc-number";break;case"cc-exp":f.type="text",f.inputMode="numeric",f.pattern="[0-9/]*",f.autoComplete=R?.autoComplete??"cc-exp";break;case"cc-csc":f.type="text",f.inputMode="numeric",f.pattern="[0-9]*",f.autoComplete=R?.autoComplete??"cc-csc";break;case"off":f.type="text",f.autoComplete="off";break;case"date":f.type="date",f.inputMode="date",f.pattern="[0-9./-]*";break;default:f.type="text";break}if(R?.autoCapitalize)f.autoCapitalize=R.autoCapitalize;if(R?.autoComplete)f.autoComplete=R.autoComplete;if(R?.autoCorrect!=null)f.autoCorrect=R.autoCorrect;if(R?.enterKeyHint)f.enterKeyHint=R.enterKeyHint;return s(f,R?.autoComplete),f}import{jsx as Rf}from"react/jsx-runtime";function G({value:R,defaultValue:g,onChange:f,onSubmit:q,onFocus:E,onBlur:J,placeholder:X,disabled:Q,readOnly:_,maxLength:m,name:D,className:F,keyboard:S,...T}){let z=W(S);return Rf(ff,{...T,className:F,value:R,defaultValue:g,onChange:f,onFocus:E,onBlur:J,placeholder:X,disabled:Q,readOnly:_,maxLength:m,name:D,...z})}import{Textarea as gf}from"@contractspec/lib.ui-kit-web/ui/textarea";import*as u from"react";import{jsx as qf}from"react/jsx-runtime";function P({value:R,defaultValue:g,onChange:f,onSubmit:q,onFocus:E,onBlur:J,placeholder:X,disabled:Q,readOnly:_,maxLength:m,name:D,className:F,rows:S,keyboard:T,...z}){let B=W(T),M=u.useCallback((I)=>f?.(I),[f]);return qf(gf,{...z,className:F,value:R,defaultValue:g,onChange:M,onFocus:E,onBlur:J,placeholder:X,disabled:Q,readOnly:_,maxLength:m,name:D,rows:S,...B})}import{jsx as Z,jsxs as L}from"react/jsx-runtime";function x({value:R,onChange:g,disabled:f}){return L("div",{className:"space-y-4",children:[L("div",{className:"space-y-2",children:[Z(K,{children:"Nom"}),Z(G,{value:R.name,onChange:(q)=>g({...R,name:q.target.value}),disabled:f})]}),L("div",{className:"space-y-2",children:[Z(K,{children:"Email"}),Z(G,{type:"email",value:R.email,onChange:(q)=>g({...R,email:q.target.value}),disabled:f})]}),L("div",{className:"space-y-2",children:[Z(K,{children:"Objet"}),Z(G,{value:R.subject,onChange:(q)=>g({...R,subject:q.target.value}),disabled:f})]}),L("div",{className:"space-y-2",children:[Z(K,{children:"Message"}),Z(P,{value:R.message,onChange:(q)=>g({...R,message:q.target.value}),disabled:f,rows:6})]})]})}import{jsx as j,jsxs as Ef}from"react/jsx-runtime";function SR({labels:R={submit:"Envoyer"},initialValue:g={name:"",email:"",subject:"",message:""},disabled:f,onSubmit:q}){let[E,J]=N.useState(g),[X,Q]=N.useState(!1);return Ef("form",{onSubmit:async(m)=>{if(m.preventDefault(),!q)return;Q(!0);try{await q(E)}finally{Q(!1)}},className:"space-y-6",children:[j(x,{value:E,onChange:J,disabled:f||X}),j(y,{disabled:f||X,type:"submit",children:X?"Envoi\u2026":R.submit})]})}import*as r from"react";import{cn as Jf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as Qf}from"class-variance-authority";import{jsx as Yf}from"react/jsx-runtime";var Xf=Qf("text-foreground tracking-tight",{variants:{level:{h1:"font-semibold text-3xl md:text-4xl",h2:"font-semibold text-2xl md:text-3xl",h3:"font-semibold text-xl md:text-2xl",h4:"font-semibold text-lg md:text-xl"},tone:{default:"",muted:"text-muted-foreground",accent:"text-primary"},spacing:{none:"",sm:"mt-4",md:"mt-6",lg:"mt-8"}},defaultVariants:{level:"h2",tone:"default",spacing:"md"}});function H({as:R,level:g,tone:f,spacing:q,className:E,...J}){return Yf(R??g??"h2",{className:Jf(Xf({level:g,tone:f,spacing:q}),E),...J})}import{cn as Zf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as $f}from"class-variance-authority";import{jsx as mf}from"react/jsx-runtime";var _f=$f("space-y-3",{variants:{spacing:{sm:"py-3",md:"py-4",lg:"py-6"},border:{none:"",top:"border-t",bottom:"border-b",both:"border-y"},tone:{plain:"",subtle:"bg-muted/30"}},defaultVariants:{spacing:"md",border:"none",tone:"plain"}});function O({spacing:R,border:g,tone:f,className:q,...E}){return mf("div",{className:Zf(_f({spacing:R,border:g,tone:f}),q),...E})}import{cn as yf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as Gf}from"class-variance-authority";import{jsx as Df}from"react/jsx-runtime";var Hf=Gf("text-base leading-relaxed",{variants:{tone:{default:"text-foreground",muted:"text-muted-foreground",danger:"text-destructive"},size:{base:"text-base",sm:"text-sm",lg:"text-lg"},spacing:{none:"",sm:"mt-2",md:"mt-3",lg:"mt-4"}},defaultVariants:{tone:"default",size:"base",spacing:"sm"}});function l({as:R="p",tone:g,size:f,spacing:q,className:E,...J}){return Df(R,{className:yf(Hf({tone:g,size:f,spacing:q}),E),...J})}import{jsx as V,jsxs as v}from"react/jsx-runtime";function dR({onExport:R,onDelete:g,labels:f={export:"Demander une copie",delete:"Demander la suppression"}}){let[q,E]=r.useState(null),J=async(X)=>{let Q=X==="export"?R:g;if(!Q)return;E(X);try{await Q()}finally{E(null)}};return v(O,{border:"top",className:"space-y-3",children:[V(H,{as:"h2",level:"h2",children:"Demandes de donn\xE9es"}),V(l,{children:"Vous pouvez demander une copie de vos donn\xE9es ou solliciter leur suppression. Ces demandes n\xE9cessitent une v\xE9rification d\u2019identit\xE9 et sont trait\xE9es dans les d\xE9lais l\xE9gaux."}),v("div",{className:"flex flex-wrap gap-3",children:[V(y,{onPress:()=>J("export"),disabled:q!==null,children:q==="export"?"Envoi\u2026":f.export}),V(y,{variant:"destructive",onPress:()=>J("delete"),disabled:q!==null,children:q==="delete"?"Envoi\u2026":f.delete})]})]})}import{cn as Ff}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as Sf}from"class-variance-authority";import{jsx as zf}from"react/jsx-runtime";var Tf=Sf("",{variants:{type:{unordered:"list-disc pl-6",ordered:"list-decimal pl-6",none:"pl-0"},spacing:{sm:"space-y-1",md:"space-y-2",lg:"space-y-3"}},defaultVariants:{type:"unordered",spacing:"md"}});function c({type:R,spacing:g,className:f,children:q,...E}){return zf(R==="ordered"?"ol":"ul",{className:Ff(Tf({type:R,spacing:g}),f),...E,children:q})}import{jsx as k,jsxs as Bf}from"react/jsx-runtime";function iR({title:R="Vos droits RGPD",rights:g=["Acc\xE8s \xE0 vos donn\xE9es","Rectification","Effacement (droit \xE0 l\u2019oubli)","Opposition et limitation","Portabilit\xE9"]}){return Bf(O,{border:"top",children:[k(H,{as:"h2",level:"h2",children:R}),k(c,{type:"unordered",children:g.map((f,q)=>k("li",{children:f},q))})]})}import{cn as Pf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cn as Lf}from"@contractspec/lib.ui-kit-web/ui/utils";import{jsx as Af,jsxs as w}from"react/jsx-runtime";function n({lastUpdated:R,version:g,className:f}){let q=(E)=>{if(!E)return null;try{return(typeof E==="string"?new Date(E):E).toLocaleDateString()}catch{return String(E)}};return w("div",{className:Lf("text-base text-muted-foreground",f),children:[g&&w("span",{children:["Version ",g]}),g&&R&&Af("span",{className:"mx-2",children:"\u2022"}),R&&w("span",{children:["Derni\xE8re mise \xE0 jour: ",q(R)]})]})}import{cn as C}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as Mf}from"class-variance-authority";import{jsx as A}from"react/jsx-runtime";var Wf=Mf("text-base",{variants:{variant:{sidebar:"space-y-2",inline:"flex flex-wrap gap-3"},size:{sm:"",md:"text-base"}},defaultVariants:{variant:"sidebar",size:"md"}});function b({items:R,activeHref:g,onNavigate:f,variant:q,size:E,className:J,...X}){return A("nav",{"aria-label":"Table of contents",className:C(Wf({variant:q,size:E}),J),...X,children:q==="inline"?R.map((Q)=>A("a",{href:Q.href,onClick:(_)=>{f?.(Q.href)},className:C("rounded-xs px-2 py-1 hover:bg-accent hover:text-accent-foreground",g===Q.href&&"bg-accent text-accent-foreground"),children:Q.label},Q.href)):A("ul",{className:"list-none space-y-2 pl-0",children:R.map((Q)=>A("li",{children:A("a",{href:Q.href,onClick:()=>f?.(Q.href),className:C("block rounded-xs px-2 py-1 hover:bg-accent hover:text-accent-foreground",g===Q.href&&"bg-accent text-accent-foreground"),children:Q.label})},Q.href))})})}import{jsx as $,jsxs as d}from"react/jsx-runtime";function X4({title:R,meta:g,toc:f,children:q,className:E}){return d("div",{className:Pf("mx-auto w-full max-w-6xl px-4 py-8 md:py-12",E),children:[d("div",{className:"mb-6 space-y-2",children:[$(H,{as:"h1",level:"h1",spacing:"sm",children:R}),g&&$(n,{lastUpdated:g.lastUpdated,version:g.version})]}),f&&f.length>0&&$("div",{className:"mb-6 md:hidden",children:$(b,{items:f,variant:"inline"})}),d("div",{className:"grid grid-cols-1 gap-8 md:grid-cols-[220px_minmax(0,1fr)]",children:[f&&f.length>0?$("aside",{className:"sticky top-24 hidden self-start md:block",children:$(b,{items:f,variant:"sidebar"})}):$("div",{className:"hidden md:block"}),$("article",{className:"prose max-w-none text-foreground",children:q})]})]})}var Kf={sm:640,md:768,lg:1024,xl:1280};function $4(R){let g=R.platform??"web",f={...Kf,...R.breakpoints};return{platform:g,tokens:R.tokens,breakpoints:f}}import{shadcnDriver as Of}from"@contractspec/lib.contracts-runtime-client-react/drivers/shadcn";import{createFormRenderer as Vf}from"@contractspec/lib.contracts-runtime-client-react/form-render";import{Checkbox as If}from"@contractspec/lib.ui-kit-web/ui/checkbox";import{FieldDescription as Uf,FieldError as Nf,FieldGroup as kf,FieldLabel as wf,Field as Cf}from"@contractspec/lib.ui-kit-web/ui/field";import{Label as bf}from"@contractspec/lib.ui-kit-web/ui/label";import{RadioGroupItem as df,RadioGroup as hf}from"@contractspec/lib.ui-kit-web/ui/radio-group";import{SelectContent as uf,SelectGroup as xf,SelectItem as jf,SelectTrigger as lf,Select as vf,SelectValue as rf}from"@contractspec/lib.ui-kit-web/ui/select";import{Switch as cf}from"@contractspec/lib.ui-kit-web/ui/switch";import{jsx as Y,jsxs as i}from"react/jsx-runtime";var nf=(R)=>{let{options:g,value:f,onChange:q,...E}=R;return i(vf,{value:f??"",onValueChange:(J)=>q?.(J),...E,children:[Y(lf,{className:"w-[180px]",children:Y(rf,{placeholder:R.placeholder})}),Y(uf,{children:Y(xf,{children:g?.map((J,X)=>Y(jf,{value:J.value,disabled:J.disabled,children:J.labelI18n},X))})})]})},pf=(R)=>Y(If,{checked:!!R.checked,onCheckedChange:(g)=>R.onCheckedChange?.(g),...R}),of=(R)=>Y(hf,{...R,children:R.options?.map((g)=>i("div",{className:"flex items-center gap-3",children:[Y(df,{value:g.value,id:g.value}),Y(bf,{htmlFor:g.value,children:g.label})]},g.value))}),af=(R)=>Y(cf,{checked:!!R.checked,onCheckedChange:(g)=>R.onCheckedChange?.(g),...R}),A4=Vf({driver:Of({Field:Cf,FieldLabel:wf,FieldDescription:Uf,FieldError:Nf,FieldGroup:kf,FieldSet:(R)=>Y("fieldset",{...R}),FieldLegend:(R)=>Y("legend",{...R}),Input:G,Textarea:P,Select:nf,Checkbox:pf,RadioGroup:of,Switch:af,Button:y})});var P4={colors:{background:"#ffffff",foreground:"#0a0a0a",muted:"#f4f4f5",mutedForeground:"#71717a",primary:"#0f49a0",primaryForeground:"#ffffff",accent:"#16a34a",accentForeground:"#ffffff",destructive:"#ef4444",destructiveForeground:"#ffffff",border:"#e4e4e7",ring:"#2563eb"},radii:{sm:4,md:8,lg:12,xl:16,full:9999},space:{xs:4,sm:8,md:12,lg:16,xl:24},typography:{h1:30,h2:24,h3:20,body:16,small:14},icons:{sm:16,md:20,lg:24}};import{cva as ef}from"class-variance-authority";var V4=ef("",{variants:{size:{sm:"",md:"",lg:""},density:{compact:"",comfortable:""},tone:{neutral:"",info:"",success:"",warning:"",danger:""},emphasis:{default:"",subtle:"",strong:""}},defaultVariants:{size:"md",density:"comfortable",tone:"neutral",emphasis:"default"}});export{$4 as withPlatformUI,D6 as useResponsive,G6 as useReducedMotion,a0 as usePackageManager,$6 as useListUrlState,m6 as useColorScheme,z6 as mapTokensForPlatform,A4 as formRenderer,V4 as dsBaseVariants,P4 as defaultTokens,cg as ZodForm,Y6 as VisualizationRenderer,Q6 as VisualizationGrid,E6 as VisualizationCard,l4 as ViewButton,j4 as ToggleRightButton,x4 as ToggleLeftButton,u4 as ToggleButton,g6 as TimelineView,s4 as TimeChip,Tg as Textarea,i0 as TestimonialCarousel,O2 as TermsTemplate,Fg as Stepper,i1 as StatusChip,c1 as StatCardGroup,r1 as StatCard,l1 as SkeletonList,x1 as SkeletonCircle,h1 as SkeletonBlock,Hg as ScoreBar,P2 as SalesTermsTemplate,yg as RankBadge,M2 as PrivacyTemplate,c0 as PricingSection,v0 as PricingCarousel,t4 as PlaceChip,j0 as PageHeaderResponsive,o0 as PackageManagerProvider,b1 as OverviewCard,w1 as NavUser,N1 as NavMain,_g as NavBrand,u0 as ModelComparisonView,F0 as MobileHeader,r2 as MarketingStepCard,l2 as MarketingSection,d0 as MarketingLayout,x2 as MarketingIconCard,C0 as MarketingHeaderMobile,k0 as MarketingHeaderDesktop,U0 as MarketingHeader,h2 as MarketingComparisonSection,b2 as MarketingCardsSection,w2 as MarketingCardTitle,k2 as MarketingCardHeader,N2 as MarketingCardDescription,U2 as MarketingCardContent,I2 as MarketingCard,I1 as MarkdownRenderer,Zg as LoaderCircular,O1 as LoaderBlock,V0 as ListTablePage,t0 as ListPageTemplate,K0 as ListPageResponsive,W0 as ListGridPage,A0 as ListCardPage,Xg as Link,J2 as LegalText,G2 as LegalTOC,q2 as LegalSection,X4 as LegalPageLayout,m2 as LegalMeta,R2 as LegalList,sg as LegalHeading,eg as LegalCallout,P1 as LangSwitch,og as KeyValueList,M1 as InstallCommand,Jg as Input,L1 as HoverPreviewUser,z1 as HoverPreviewStats,S1 as HoverPreviewSimple,D1 as HoverPreviewMedia,G1 as HoverPreviewDoc,m1 as HoverPreview,B0 as HeroSection,T0 as HeroResponsive,D0 as Header,iR as GDPRRights,dR as GDPRDataRequest,vg as FormStepsLayout,ug as FormSection,hg as FormRow,jg as FormOneByOneLayout,dg as FormGrid,Cg as FormDialog,kg as FormCardLayout,y0 as Footer,$1 as FiltersToolbar,_0 as FeaturesSection,Z0 as FeatureCarousel,X0 as FAQSection,qg as ErrorState,Y1 as EntityCard,Rg as EmptyState,J0 as EmptySearchResult,q0 as EmptyDataList,h4 as EditButton,e4 as DurationChip,Q1 as DimensionScoresCard,H0 as DesktopHeader,d4 as DeleteButton,ig as DefinitionList,a4 as DateChip,Vg as DataViewTable,Kg as DataViewRenderer,Wg as DataViewList,Ag as DataViewDetail,Bg as DataTable,Kf as DEFAULT_BREAKPOINTS,p4 as Cta,E1 as CopyButton,L2 as CookiesTemplate,z2 as ContactTemplate,SR as ContactForm,$2 as ContactFields,Y2 as ConsentList,X2 as ConsentItem,f6 as ComparisonView,g1 as CommandTabs,f1 as CommandSearchTrigger,t2 as CommandPalette,a2 as CodeBlock,n4 as ButtonLink,r4 as Button,p2 as Breadcrumbs,C4 as ApprovalQueue,R0 as AppSidebar,s1 as AppLayout,e1 as AppHeader,n2 as AiLinkButton,k4 as AgentMonitor,Ug as ActionForm,o1 as AcademyLayout};
2
+ import*as j from"react";import{Button as Hf}from"@contractspec/lib.ui-kit-web/ui/button";import{Loader2 as p}from"lucide-react";import{jsx as x,jsxs as zf,Fragment as Df}from"react/jsx-runtime";function z({children:f,loading:g,spinnerPlacement:m="start",onPress:R,onPressIn:y,onPressOut:G,onLongPress:$,onTouchStart:q,onTouchEnd:Y,onTouchCancel:H,onMouseDown:W,onMouseUp:B,onClick:U,className:w,disabled:V,...M}){let O=Boolean(V||g),u=R?()=>{R()}:U,hf=!M.asChild?zf(Df,{children:[g&&m==="start"?x(p,{className:"h-4 w-4 animate-spin"}):null,f,g&&m==="end"?x(p,{className:"h-4 w-4 animate-spin"}):null]}):f;return x(Hf,{...M,className:w,disabled:O,"aria-busy":g?!0:void 0,"aria-disabled":O?!0:void 0,onClick:u,onMouseDown:W||y,onMouseUp:B||G,onTouchStart:q,onTouchEnd:Y||G,onTouchCancel:H||G,type:M?.type??"button",children:hf})}import{Label as C}from"@contractspec/lib.ui-kit-web/ui/label";import{Input as Wf}from"@contractspec/lib.ui-kit-web/ui/input";function Pf(f){if(!f)return;switch(f){case"email":return"email";case"url":return"url";case"username":return"username";case"new-password":return"new-password";case"current-password":return"password";case"one-time-code":return"otp";case"tel":case"tel-country-code":case"tel-national":case"tel-area-code":case"tel-local":case"tel-local-prefix":case"tel-local-suffix":case"tel-extension":return"tel";case"postal-code":case"cc-number":case"cc-csc":case"bday-day":case"bday-month":case"bday-year":return"int";case"cc-exp":case"cc-exp-month":case"cc-exp-year":return"numbers-and-punctuation";case"bday":return"date";default:return"text"}}function Sf(f,g){if(!g)return;if(["name","given-name","additional-name","family-name","honorific-prefix","honorific-suffix","nickname","organization","organization-title","cc-name","cc-given-name","cc-additional-name","cc-family-name"].includes(g))f.autoCapitalize="words";if(["username","new-password","current-password","one-time-code","email","url"].includes(g))f.autoCapitalize="none"}function _(f){let g=f?.kind??Pf(f?.autoComplete)??"text",m={};switch(g){case"password":if(m.type="password",m.autoCapitalize="none",m.autoComplete=f?.autoComplete??"current-password",f?.autoCorrect!=null)m.autoCorrect=f.autoCorrect;break;case"new-password":if(m.type="password",m.autoCapitalize="none",m.autoComplete=f?.autoComplete??"new-password",f?.autoCorrect!=null)m.autoCorrect=f.autoCorrect;break;case"username":m.type="text",m.autoCapitalize="none",m.autoComplete=f?.autoComplete??"username";break;case"email":m.type="email",m.inputMode="email",m.autoCapitalize="none",m.autoComplete=f?.autoComplete??"email";break;case"url":m.type="url",m.inputMode="url",m.autoComplete=f?.autoComplete??"url";break;case"search":m.type="search",m.inputMode="search",m.enterKeyHint=f?.enterKeyHint??"search",m.autoComplete=f?.autoComplete??"off";break;case"phone":case"tel":m.type="tel",m.inputMode="tel",m.autoComplete=f?.autoComplete??"tel";break;case"number":case"int":m.type="text",m.inputMode="numeric",m.pattern="[0-9]*";break;case"decimal":m.type="text",m.inputMode="decimal",m.step="any";break;case"numbers-and-punctuation":m.type="text",m.inputMode="text",m.pattern="[0-9.,-]*";break;case"otp":m.type="text",m.inputMode="numeric",m.autoComplete=f?.autoComplete??"one-time-code",m.autoCapitalize="none";break;case"name":m.type="text",m.autoComplete=f?.autoComplete??"name",m.autoCapitalize=f?.autoCapitalize??"words";break;case"given-name":m.type="text",m.autoComplete=f?.autoComplete??"given-name",m.autoCapitalize=f?.autoCapitalize??"words";break;case"family-name":m.type="text",m.autoComplete=f?.autoComplete??"family-name",m.autoCapitalize=f?.autoCapitalize??"words";break;case"address-line1":m.type="text",m.autoComplete=f?.autoComplete??"address-line1";break;case"address-line2":m.type="text",m.autoComplete=f?.autoComplete??"address-line2";break;case"postal-code":m.type="text",m.inputMode="numeric",m.pattern="[0-9]*",m.autoComplete=f?.autoComplete??"postal-code";break;case"cc-number":m.type="text",m.inputMode="numeric",m.pattern="[0-9]*",m.autoComplete=f?.autoComplete??"cc-number";break;case"cc-exp":m.type="text",m.inputMode="numeric",m.pattern="[0-9/]*",m.autoComplete=f?.autoComplete??"cc-exp";break;case"cc-csc":m.type="text",m.inputMode="numeric",m.pattern="[0-9]*",m.autoComplete=f?.autoComplete??"cc-csc";break;case"off":m.type="text",m.autoComplete="off";break;case"date":m.type="date",m.inputMode="date",m.pattern="[0-9./-]*";break;default:m.type="text";break}if(f?.autoCapitalize)m.autoCapitalize=f.autoCapitalize;if(f?.autoComplete)m.autoComplete=f.autoComplete;if(f?.autoCorrect!=null)m.autoCorrect=f.autoCorrect;if(f?.enterKeyHint)m.enterKeyHint=f.enterKeyHint;return Sf(m,f?.autoComplete),m}import{jsx as Kf}from"react/jsx-runtime";function J({value:f,defaultValue:g,onChange:m,onSubmit:R,onFocus:y,onBlur:G,placeholder:$,disabled:q,readOnly:Y,maxLength:H,name:W,className:B,keyboard:U,...w}){let V=_(U);return Kf(Wf,{...w,className:B,value:f,defaultValue:g,onChange:m,onFocus:y,onBlur:G,placeholder:$,disabled:q,readOnly:Y,maxLength:H,name:W,...V})}import{Textarea as Xf}from"@contractspec/lib.ui-kit-web/ui/textarea";import*as ff from"react";import{jsx as Ef}from"react/jsx-runtime";function b({value:f,defaultValue:g,onChange:m,onSubmit:R,onFocus:y,onBlur:G,placeholder:$,disabled:q,readOnly:Y,maxLength:H,name:W,className:B,rows:U,keyboard:w,...V}){let M=_(w),O=ff.useCallback((u)=>m?.(u),[m]);return Ef(Xf,{...V,className:B,value:f,defaultValue:g,onChange:O,onFocus:y,onBlur:G,placeholder:$,disabled:q,readOnly:Y,maxLength:H,name:W,rows:U,...M})}import{jsx as P,jsxs as N}from"react/jsx-runtime";function mf({value:f,onChange:g,disabled:m}){return N("div",{className:"space-y-4",children:[N("div",{className:"space-y-2",children:[P(C,{children:"Nom"}),P(J,{value:f.name,onChange:(R)=>g({...f,name:R.target.value}),disabled:m})]}),N("div",{className:"space-y-2",children:[P(C,{children:"Email"}),P(J,{type:"email",value:f.email,onChange:(R)=>g({...f,email:R.target.value}),disabled:m})]}),N("div",{className:"space-y-2",children:[P(C,{children:"Objet"}),P(J,{value:f.subject,onChange:(R)=>g({...f,subject:R.target.value}),disabled:m})]}),N("div",{className:"space-y-2",children:[P(C,{children:"Message"}),P(b,{value:f.message,onChange:(R)=>g({...f,message:R.target.value}),disabled:m,rows:6})]})]})}import{jsx as gf,jsxs as Bf}from"react/jsx-runtime";function Tg({labels:f={submit:"Envoyer"},initialValue:g={name:"",email:"",subject:"",message:""},disabled:m,onSubmit:R}){let[y,G]=j.useState(g),[$,q]=j.useState(!1);return Bf("form",{onSubmit:async(H)=>{if(H.preventDefault(),!R)return;q(!0);try{await R(y)}finally{q(!1)}},className:"space-y-6",children:[gf(mf,{value:y,onChange:G,disabled:m||$}),gf(z,{disabled:m||$,type:"submit",children:$?"Envoi\u2026":f.submit})]})}import*as Tf from"react";import{cn as Uf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as wf}from"class-variance-authority";import{jsx as Mf}from"react/jsx-runtime";var Vf=wf("text-foreground tracking-tight",{variants:{level:{h1:"font-semibold text-3xl md:text-4xl",h2:"font-semibold text-2xl md:text-3xl",h3:"font-semibold text-xl md:text-2xl",h4:"font-semibold text-lg md:text-xl"},tone:{default:"",muted:"text-muted-foreground",accent:"text-primary"},spacing:{none:"",sm:"mt-4",md:"mt-6",lg:"mt-8"}},defaultVariants:{level:"h2",tone:"default",spacing:"md"}});function X({as:f,level:g,tone:m,spacing:R,className:y,...G}){return Mf(f??g??"h2",{className:Uf(Vf({level:g,tone:m,spacing:R}),y),...G})}import{cn as Nf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as kf}from"class-variance-authority";import{jsx as Of}from"react/jsx-runtime";var If=kf("space-y-3",{variants:{spacing:{sm:"py-3",md:"py-4",lg:"py-6"},border:{none:"",top:"border-t",bottom:"border-b",both:"border-y"},tone:{plain:"",subtle:"bg-muted/30"}},defaultVariants:{spacing:"md",border:"none",tone:"plain"}});function L({spacing:f,border:g,tone:m,className:R,...y}){return Of("div",{className:Nf(If({spacing:f,border:g,tone:m}),R),...y})}import{cn as _f}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as bf}from"class-variance-authority";import{jsx as Lf}from"react/jsx-runtime";var Cf=bf("text-base leading-relaxed",{variants:{tone:{default:"text-foreground",muted:"text-muted-foreground",danger:"text-destructive"},size:{base:"text-base",sm:"text-sm",lg:"text-lg"},spacing:{none:"",sm:"mt-2",md:"mt-3",lg:"mt-4"}},defaultVariants:{tone:"default",size:"base",spacing:"sm"}});function Rf({as:f="p",tone:g,size:m,spacing:R,className:y,...G}){return Lf(f,{className:_f(Cf({tone:g,size:m,spacing:R}),y),...G})}import{jsx as d,jsxs as yf}from"react/jsx-runtime";function Ug({onExport:f,onDelete:g,labels:m={export:"Demander une copie",delete:"Demander la suppression"}}){let[R,y]=Tf.useState(null),G=async($)=>{let q=$==="export"?f:g;if(!q)return;y($);try{await q()}finally{y(null)}};return yf(L,{border:"top",className:"space-y-3",children:[d(X,{as:"h2",level:"h2",children:"Demandes de donn\xE9es"}),d(Rf,{children:"Vous pouvez demander une copie de vos donn\xE9es ou solliciter leur suppression. Ces demandes n\xE9cessitent une v\xE9rification d\u2019identit\xE9 et sont trait\xE9es dans les d\xE9lais l\xE9gaux."}),yf("div",{className:"flex flex-wrap gap-3",children:[d(z,{onPress:()=>G("export"),disabled:R!==null,children:R==="export"?"Envoi\u2026":m.export}),d(z,{variant:"destructive",onPress:()=>G("delete"),disabled:R!==null,children:R==="delete"?"Envoi\u2026":m.delete})]})]})}import{cn as df}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as Ff}from"class-variance-authority";import{jsx as cf}from"react/jsx-runtime";var Af=Ff("",{variants:{type:{unordered:"list-disc pl-6",ordered:"list-decimal pl-6",none:"pl-0"},spacing:{sm:"space-y-1",md:"space-y-2",lg:"space-y-3"}},defaultVariants:{type:"unordered",spacing:"md"}});function qf({type:f,spacing:g,className:m,children:R,...y}){return cf(f==="ordered"?"ol":"ul",{className:df(Af({type:f,spacing:g}),m),...y,children:R})}import{jsx as v,jsxs as uf}from"react/jsx-runtime";function Cg({title:f="Vos droits RGPD",rights:g=["Acc\xE8s \xE0 vos donn\xE9es","Rectification","Effacement (droit \xE0 l\u2019oubli)","Opposition et limitation","Portabilit\xE9"]}){return uf(L,{border:"top",children:[v(X,{as:"h2",level:"h2",children:f}),v(qf,{type:"unordered",children:g.map((m,R)=>v("li",{children:m},R))})]})}import{cn as lf}from"@contractspec/lib.ui-kit-web/ui/utils";import{cn as xf}from"@contractspec/lib.ui-kit-web/ui/utils";import{jsx as jf,jsxs as i}from"react/jsx-runtime";function Gf({lastUpdated:f,version:g,className:m}){let R=(y)=>{if(!y)return null;try{return(typeof y==="string"?new Date(y):y).toLocaleDateString()}catch{return String(y)}};return i("div",{className:xf("text-base text-muted-foreground",m),children:[g&&i("span",{children:["Version ",g]}),g&&f&&jf("span",{className:"mx-2",children:"\u2022"}),f&&i("span",{children:["Derni\xE8re mise \xE0 jour: ",R(f)]})]})}import{cn as n}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as vf}from"class-variance-authority";import{jsx as k}from"react/jsx-runtime";var nf=vf("text-base",{variants:{variant:{sidebar:"space-y-2",inline:"flex flex-wrap gap-3"},size:{sm:"",md:"text-base"}},defaultVariants:{variant:"sidebar",size:"md"}});function l({items:f,activeHref:g,onNavigate:m,variant:R,size:y,className:G,...$}){return k("nav",{"aria-label":"Table of contents",className:n(nf({variant:R,size:y}),G),...$,children:R==="inline"?f.map((q)=>k("a",{href:q.href,onClick:(Y)=>{m?.(q.href)},className:n("rounded-xs px-2 py-1 hover:bg-accent hover:text-accent-foreground",g===q.href&&"bg-accent text-accent-foreground"),children:q.label},q.href)):k("ul",{className:"list-none space-y-2 pl-0",children:f.map((q)=>k("li",{children:k("a",{href:q.href,onClick:()=>m?.(q.href),className:n("block rounded-xs px-2 py-1 hover:bg-accent hover:text-accent-foreground",g===q.href&&"bg-accent text-accent-foreground"),children:q.label})},q.href))})})}import{jsx as S,jsxs as e}from"react/jsx-runtime";function rg({title:f,meta:g,toc:m,children:R,className:y}){return e("div",{className:lf("mx-auto w-full max-w-6xl px-4 py-8 md:py-12",y),children:[e("div",{className:"mb-6 space-y-2",children:[S(X,{as:"h1",level:"h1",spacing:"sm",children:f}),g&&S(Gf,{lastUpdated:g.lastUpdated,version:g.version})]}),m&&m.length>0&&S("div",{className:"mb-6 md:hidden",children:S(l,{items:m,variant:"inline"})}),e("div",{className:"grid grid-cols-1 gap-8 md:grid-cols-[220px_minmax(0,1fr)]",children:[m&&m.length>0?S("aside",{className:"sticky top-24 hidden self-start md:block",children:S(l,{items:m,variant:"sidebar"})}):S("div",{className:"hidden md:block"}),S("article",{className:"prose max-w-none text-foreground",children:R})]})]})}import*as F from"react";import{jsx as ef}from"react/jsx-runtime";var $f=F.createContext(void 0);function ag({children:f,resolver:g}){return ef($f.Provider,{value:g,children:f})}function r(){return F.useContext($f)}function t(f,g){if(!f)return f;return g?.(f)??f}function Jf(f,g){return typeof f==="string"?t(f,g):f}function sg({registry:f,locale:g,fallbackLocale:m,specKeys:R=[]}){return(y)=>{let G=y.match(/^([^:]+)::(.+)$/);if(G?.[1]&&G[2]){let[,$,q]=G;return f.getWithFallback($,q,g,m)?.message.value}for(let $ of R){let q=f.getWithFallback($,y,g,m);if(q)return q.message.value}return}}var rf={sm:640,md:768,lg:1024,xl:1280};function mR(f){let g=f.platform??"web",m={...rf,...f.breakpoints};return{platform:g,tokens:f.tokens,breakpoints:m}}import{shadcnDriver as tf}from"@contractspec/lib.contracts-runtime-client-react/drivers/shadcn";import{createFormRenderer as of}from"@contractspec/lib.contracts-runtime-client-react/form-render";import{Checkbox as af}from"@contractspec/lib.ui-kit-web/ui/checkbox";import{Command as sf,CommandEmpty as pf,CommandGroup as fm,CommandInput as mm,CommandItem as gm,CommandList as Rm}from"@contractspec/lib.ui-kit-web/ui/command";import{DatePicker as ym}from"@contractspec/lib.ui-kit-web/ui/date-picker";import{DateTimePicker as Tm}from"@contractspec/lib.ui-kit-web/ui/datetime-picker";import{FieldDescription as qm,FieldError as Gm,FieldGroup as $m,FieldLabel as Jm,Field as Qm}from"@contractspec/lib.ui-kit-web/ui/field";import{Label as Ym}from"@contractspec/lib.ui-kit-web/ui/label";import{RadioGroupItem as Zm,RadioGroup as hm}from"@contractspec/lib.ui-kit-web/ui/radio-group";import{SelectContent as Hm,SelectGroup as Dm,SelectItem as zm,SelectTrigger as Pm,Select as Sm,SelectValue as Wm}from"@contractspec/lib.ui-kit-web/ui/select";import{Switch as Km}from"@contractspec/lib.ui-kit-web/ui/switch";import{TimePicker as Xm}from"@contractspec/lib.ui-kit-web/ui/time-picker";import{jsx as T,jsxs as D}from"react/jsx-runtime";function Z(f){return typeof f==="string"?f:String(f??"")}var Q={addressLine1:"Address line 1",addressLine2:"Address line 2",city:"City",countryCode:"Country code",extension:"Extension",noResultsFound:"No results found.",phoneNumber:"Phone number",postalCode:"Postal code",region:"Region",search:"Search",selected:"Selected"};function h(){let f=r();return(g)=>t(g,f)}function o(f,g,m){return f(g)??m}function I(){let f=r();return(g)=>Jf(g,f)}var a=(f)=>{let g=h(),{options:m,value:R,onChange:y,placeholder:G,...$}=f;return D(Sm,{value:R==null?"":Z(R),onValueChange:(q)=>y?.(q),...$,children:[T(Pm,{className:"w-full",children:T(Wm,{placeholder:g(G)})}),T(Hm,{children:T(Dm,{children:m?.map((q,Y)=>T(zm,{value:Z(q.value),disabled:q.disabled,children:g(q.labelI18n)},`${Z(q.value)}-${Y}`))})})]})},Em=(f)=>T(af,{checked:Boolean(f.checked),onCheckedChange:(g)=>f.onCheckedChange?.(Boolean(g))}),Bm=(f)=>{let g=h();return T(hm,{value:f.value==null?"":Z(f.value),onValueChange:(m)=>f.onValueChange?.(m),disabled:f.disabled,children:f.options?.map((m)=>{let R=Z(m.value);return D("div",{className:"flex items-center gap-3",children:[T(Zm,{value:R,id:R}),T(Ym,{htmlFor:R,children:g(m.labelI18n)})]},R)})})},Um=(f)=>T(Km,{checked:Boolean(f.checked),onCheckedChange:(g)=>f.onCheckedChange?.(Boolean(g))}),wm=(f)=>{let g=h();return D("div",{className:"space-y-2",children:[D(sf,{shouldFilter:!1,className:"rounded-md border border-input",children:[T(mm,{value:f.query,onValueChange:f.onQueryChange,placeholder:o(g,f.placeholder,Q.search),disabled:f.disabled||f.readOnly}),D(Rm,{children:[T(pf,{children:o(g,Q.noResultsFound,Q.noResultsFound)}),T(fm,{children:f.options.map((m)=>{let R=f.selectedOptions.some((y)=>Z(y.value)===Z(m.value));return D(gm,{value:g(m.labelI18n)??m.labelI18n,onSelect:()=>f.onSelectOption?.(m),disabled:f.disabled||m.disabled||f.readOnly,children:[D("div",{className:"flex flex-col",children:[T("span",{children:g(m.labelI18n)}),m.descriptionI18n?T("span",{className:"text-muted-foreground text-xs",children:g(m.descriptionI18n)}):null]}),R?T("span",{className:"ml-auto text-muted-foreground text-xs",children:o(g,Q.selected,Q.selected)}):null]},Z(m.value))})})]})]}),f.selectedOptions.length?T("div",{className:"flex flex-wrap gap-2",children:f.selectedOptions.map((m)=>T(z,{type:"button",variant:"outline",size:"sm",onClick:()=>f.onRemoveOption?.(m),disabled:!f.multiple||f.readOnly||f.disabled,children:g(m.labelI18n)},`selected-${Z(m.value)}`))}):null]})};function K(f,g,m){return{line1:f?.line1??"",line2:f?.line2,city:f?.city,region:f?.region,postalCode:f?.postalCode,countryCode:f?.countryCode,[g]:m}}var Vm=(f)=>{let g=h();return D("div",{className:"grid gap-3 md:grid-cols-2",children:[T(J,{value:f.value?.line1??"",onChange:(m)=>f.onChange?.(K(f.value,"line1",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.line1??Q.addressLine1),readOnly:f.readOnly,disabled:f.disabled}),T(J,{value:f.value?.line2??"",onChange:(m)=>f.onChange?.(K(f.value,"line2",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.line2??Q.addressLine2),readOnly:f.readOnly,disabled:f.disabled}),T(J,{value:f.value?.city??"",onChange:(m)=>f.onChange?.(K(f.value,"city",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.city??Q.city),readOnly:f.readOnly,disabled:f.disabled}),T(J,{value:f.value?.region??"",onChange:(m)=>f.onChange?.(K(f.value,"region",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.region??Q.region),readOnly:f.readOnly,disabled:f.disabled}),T(J,{value:f.value?.postalCode??"",onChange:(m)=>f.onChange?.(K(f.value,"postalCode",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.postalCode??Q.postalCode),readOnly:f.readOnly,disabled:f.disabled}),f.countryOptions?.length?T(a,{value:f.value?.countryCode??"",onChange:(m)=>f.onChange?.(K(f.value,"countryCode",Z(m))),options:f.countryOptions,disabled:f.disabled||f.readOnly}):T(J,{value:f.value?.countryCode??"",onChange:(m)=>f.onChange?.(K(f.value,"countryCode",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.countryCode??Q.countryCode),readOnly:f.readOnly,disabled:f.disabled})]})};function A(f,g,m){return{countryCode:f?.countryCode??"",nationalNumber:f?.nationalNumber??"",extension:f?.extension,e164:f?.e164,[g]:m}}var Mm=(f)=>{let g=h();return D("div",{className:"grid gap-3 md:grid-cols-3",children:[f.countryOptions?.length?T(a,{value:f.value?.countryCode??"",onChange:(m)=>f.onChange?.(A(f.value,"countryCode",Z(m))),options:f.countryOptions,disabled:f.disabled||f.readOnly}):T(J,{value:f.value?.countryCode??"",onChange:(m)=>f.onChange?.(A(f.value,"countryCode",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.countryCode??Q.countryCode),readOnly:f.readOnly,disabled:f.disabled}),T(J,{value:f.value?.nationalNumber??"",onChange:(m)=>f.onChange?.(A(f.value,"nationalNumber",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.nationalNumber??Q.phoneNumber),readOnly:f.readOnly,disabled:f.disabled}),T(J,{value:f.value?.extension??"",onChange:(m)=>f.onChange?.(A(f.value,"extension",m.currentTarget.value)),placeholder:g(f.parts?.placeholdersI18n?.extension??Q.extension),readOnly:f.readOnly,disabled:f.disabled})]})},Nm=(f)=>{let g=h();return T(ym,{value:f.value??null,onChange:f.onChange??(()=>{return}),disabled:f.disabled,placeholder:g(f.placeholder),minDate:f.minDate,maxDate:f.maxDate})},km=(f)=>{let g=h();return T(Xm,{value:f.value??null,onChange:f.onChange??(()=>{return}),disabled:f.disabled,placeholder:g(f.placeholder),is24Hour:f.is24Hour})},Im=(f)=>{let g=h();return T(Tm,{value:f.value??null,onChange:f.onChange??(()=>{return}),disabled:f.disabled,datePlaceholder:g(f.datePlaceholder),timePlaceholder:g(f.timePlaceholder),minDate:f.minDate,maxDate:f.maxDate,is24Hour:f.is24Hour})},Om=(f)=>{let g=I();return T(Jm,{...f,children:g(f.children)})},_m=(f)=>{let g=I();return T(qm,{...f,children:g(f.children)})},bm=(f)=>{let g=I();return T(Gm,{...f,children:g(f.children)})},Cm=(f)=>{let g=h();return T(J,{...f,placeholder:g(f.placeholder)})},Lm=(f)=>{let g=h();return T(b,{...f,placeholder:g(f.placeholder)})},dm=(f)=>{let g=I();return T(z,{...f,children:g(f.children)})},WR=of({driver:tf({Field:Qm,FieldLabel:Om,FieldDescription:_m,FieldError:bm,FieldGroup:$m,FieldSet:(f)=>T("fieldset",{...f}),FieldLegend:(f)=>{let g=I();return T("legend",{...f,children:g(f.children)})},Input:Cm,Textarea:Lm,Select:a,Checkbox:Em,RadioGroup:Bm,Switch:Um,Autocomplete:wm,AddressField:Vm,PhoneField:Mm,DateField:Nm,TimeField:km,DateTimeField:Im,Button:dm})});var E={colors:{background:"#ffffff",foreground:"#0a0a0a",muted:"#f4f4f5",mutedForeground:"#71717a",primary:"#0f49a0",primaryForeground:"#ffffff",accent:"#16a34a",accentForeground:"#ffffff",destructive:"#ef4444",destructiveForeground:"#ffffff",border:"#e4e4e7",ring:"#2563eb"},radii:{sm:4,md:8,lg:12,xl:16,full:9999},space:{xs:4,sm:8,md:12,lg:16,xl:24},typography:{h1:30,h2:24,h3:20,body:16,small:14},icons:{sm:16,md:20,lg:24}};function s(f,g=E){if(f==="web")return g;let{space:m,radii:R,icons:y}=g;return{colors:g.colors,spacing:m,typography:{h1:g.typography.h1,body:g.typography.body},radii:R,icons:y}}function c(f,g){if(!g)return f;let m={...f},R=m;for(let[y,G]of Object.entries(g))if(G?.value!=null)R[y]=G.value;return m}function Qf(f,g){if(!g)return f;return{...f,colors:c(f.colors,g.colors),radii:c(f.radii,g.radii),space:c(f.space,g.space),typography:c(f.typography,g.typography)}}function Fm(f,g){if(!g?.targets?.length)return!0;return g.targets.includes(f.target)}function Yf(f,g,m=E){let R=Qf(m,f.tokens);for(let y of f.overrides??[])if(Fm(y,g))R=Qf(R,y.tokens);return R}function Zf(f,g,m){let R=f.get(g.key,g.version);if(!R)return E;let y=R.meta.extends?Zf(f,R.meta.extends,m):E;return Yf(R,m,y)}function MR(f,g,m,R){if("tokens"in f){let Y=f,H=g,W=Yf(Y,m);return s(H,W)}let y=f,G=g,$=m,q=Zf(y,G,R);return s($,q)}import{cva as Am}from"class-variance-authority";var IR=Am("",{variants:{size:{sm:"",md:"",lg:""},density:{compact:"",comfortable:""},tone:{neutral:"",info:"",success:"",warning:"",danger:""},emphasis:{default:"",subtle:"",strong:""}},defaultVariants:{size:"md",density:"comfortable",tone:"neutral",emphasis:"default"}});export{mR as withPlatformUI,K2 as useResponsive,S2 as useReducedMotion,p1 as usePackageManager,h2 as useListUrlState,r as useDesignSystemTranslation,z2 as useColorScheme,t as resolveTranslationString,Jf as resolveTranslationNode,Yf as resolveThemeSpecTokens,Zf as resolveThemeRefTokens,MR as resolvePlatformTheme,Qf as mergeThemeTokens,w2 as mapTokensForPlatform,WR as formRenderer,IR as dsBaseVariants,E as defaultTokens,sg as createTranslationResolver,ry as ZodForm,Y2 as VisualizationRenderer,J2 as VisualizationGrid,G2 as VisualizationCard,vR as ViewButton,jR as ToggleRightButton,xR as ToggleLeftButton,uR as ToggleButton,T2 as TimelineView,fy as TimeChip,Ky as Textarea,o1 as TestimonialCarousel,OT as TermsTemplate,Sy as Stepper,o4 as StatusChip,r4 as StatCardGroup,e4 as StatCard,n4 as SkeletonList,v4 as SkeletonCircle,x4 as SkeletonBlock,zy as ScoreBar,kT as SalesTermsTemplate,Hy as RankBadge,MT as PrivacyTemplate,r1 as PricingSection,l1 as PricingCarousel,pR as PlaceChip,i1 as PageHeaderResponsive,s1 as PackageManagerProvider,c4 as OverviewCard,F4 as NavUser,L4 as NavMain,Zy as NavBrand,j1 as ModelComparisonView,K1 as MobileHeader,eT as MarketingStepCard,nT as MarketingSection,u1 as MarketingLayout,vT as MarketingIconCard,A1 as MarketingHeaderMobile,d1 as MarketingHeaderDesktop,C1 as MarketingHeader,xT as MarketingComparisonSection,cT as MarketingCardsSection,FT as MarketingCardTitle,dT as MarketingCardHeader,LT as MarketingCardDescription,CT as MarketingCardContent,bT as MarketingCard,b4 as MarkdownRenderer,Qy as LoaderCircular,O4 as LoaderBlock,_1 as ListTablePage,m2 as ListPageTemplate,I1 as ListPageResponsive,N1 as ListGridPage,V1 as ListCardPage,$y as Link,$T as LegalText,PT as LegalTOC,qT as LegalSection,rg as LegalPageLayout,DT as LegalMeta,yT as LegalList,gT as LegalHeading,fT as LegalCallout,k4 as LangSwitch,sy as KeyValueList,M4 as InstallCommand,qy as Input,w4 as HoverPreviewUser,B4 as HoverPreviewStats,X4 as HoverPreviewSimple,W4 as HoverPreviewMedia,P4 as HoverPreviewDoc,D4 as HoverPreview,U1 as HeroSection,E1 as HeroResponsive,W1 as Header,Cg as GDPRRights,Ug as GDPRDataRequest,ly as FormStepsLayout,jy as FormSection,xy as FormRow,iy as FormOneByOneLayout,uy as FormGrid,Ay as FormDialog,dy as FormCardLayout,z1 as Footer,h4 as FiltersToolbar,H1 as FeaturesSection,Z1 as FeatureCarousel,Q1 as FAQSection,yy as ErrorState,Y4 as EntityCard,gy as EmptyState,$1 as EmptySearchResult,q1 as EmptyDataList,cR as EditButton,sR as DurationChip,J4 as DimensionScoresCard,S1 as DesktopHeader,ag as DesignSystemTranslationProvider,AR as DeleteButton,oy as DefinitionList,aR as DateChip,_y as DataViewTable,Iy as DataViewRenderer,Ny as DataViewList,Vy as DataViewDetail,Uy as DataTableToolbar,Ey as DataTable,rf as DEFAULT_BREAKPOINTS,tR as Cta,G4 as CopyButton,wT as CookiesTemplate,BT as ContactTemplate,Tg as ContactForm,hT as ContactFields,YT as ConsentList,QT as ConsentItem,R2 as ComparisonView,T4 as CommandTabs,R4 as CommandSearchTrigger,m4 as CommandPalette,pT as CodeBlock,eR as ButtonLink,nR as Button,aT as Breadcrumbs,dR as ApprovalQueue,y1 as AppSidebar,g1 as AppLayout,f1 as AppHeader,tT as AiLinkButton,CR as AgentMonitor,Cy as ActionForm,s4 as AcademyLayout};
@@ -0,0 +1,11 @@
1
+ import type { ThemeTokens as ContractThemeTokens, ThemeRef, ThemeRegistry, ThemeSpec } from '@contractspec/lib.contracts-spec/themes';
2
+ import type { BridgedTokens, PlatformKind } from './tokenBridge';
3
+ import { type ThemeTokens } from './tokens';
4
+ export interface ThemeResolutionContext {
5
+ targets?: string[];
6
+ }
7
+ export declare function mergeThemeTokens(base: ThemeTokens, tokens?: ContractThemeTokens): ThemeTokens;
8
+ export declare function resolveThemeSpecTokens(spec: ThemeSpec, context?: ThemeResolutionContext, baseTokens?: ThemeTokens): ThemeTokens;
9
+ export declare function resolveThemeRefTokens(registry: ThemeRegistry, ref: ThemeRef, context?: ThemeResolutionContext): ThemeTokens;
10
+ export declare function resolvePlatformTheme(spec: ThemeSpec, platform: PlatformKind, context?: ThemeResolutionContext): BridgedTokens;
11
+ export declare function resolvePlatformTheme(registry: ThemeRegistry, ref: ThemeRef, platform: PlatformKind, context?: ThemeResolutionContext): BridgedTokens;
@@ -1,6 +1,6 @@
1
- import { type ColorTokens, type RadiusTokens, type SpaceTokens, defaultTokens as themeTokens } from './tokens';
1
+ import { type ColorTokens, type RadiusTokens, type SpaceTokens, type ThemeTokens } from './tokens';
2
2
  export type PlatformKind = 'web' | 'native';
3
- type WebTokens = typeof themeTokens;
3
+ type WebTokens = ThemeTokens;
4
4
  interface NativeTokens {
5
5
  colors: ColorTokens;
6
6
  spacing: SpaceTokens;
@@ -12,5 +12,5 @@ interface NativeTokens {
12
12
  icons: Record<string, number>;
13
13
  }
14
14
  export type BridgedTokens = WebTokens | NativeTokens;
15
- export declare function mapTokensForPlatform(platform: PlatformKind): BridgedTokens;
15
+ export declare function mapTokensForPlatform(platform: PlatformKind, tokens?: ThemeTokens): BridgedTokens;
16
16
  export {};
@@ -8,9 +8,9 @@ export type EmphasisVariant = 'default' | 'subtle' | 'strong';
8
8
  * Consumers can extend this with component-specific classes.
9
9
  */
10
10
  export declare const dsBaseVariants: (props?: ({
11
- size?: "sm" | "lg" | "md" | null | undefined;
11
+ size?: "sm" | "md" | "lg" | null | undefined;
12
12
  density?: "compact" | "comfortable" | null | undefined;
13
13
  tone?: "success" | "neutral" | "danger" | "info" | "warning" | null | undefined;
14
- emphasis?: "strong" | "default" | "subtle" | null | undefined;
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>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contractspec/lib.design-system",
3
- "version": "3.8.11",
3
+ "version": "3.10.0",
4
4
  "description": "Design tokens and theming primitives",
5
5
  "keywords": [
6
6
  "contractspec",
@@ -30,12 +30,12 @@
30
30
  "sideEffects": false,
31
31
  "tree-shake": true,
32
32
  "dependencies": {
33
- "@contractspec/lib.ai-agent": "8.0.6",
34
- "@contractspec/lib.contracts-spec": "5.2.0",
35
- "@contractspec/lib.contracts-runtime-client-react": "3.8.6",
36
- "@contractspec/lib.presentation-runtime-react": "36.0.6",
37
- "@contractspec/lib.ui-kit": "3.8.10",
38
- "@contractspec/lib.ui-kit-web": "3.9.10",
33
+ "@contractspec/lib.ai-agent": "8.0.8",
34
+ "@contractspec/lib.contracts-spec": "5.4.0",
35
+ "@contractspec/lib.contracts-runtime-client-react": "3.9.1",
36
+ "@contractspec/lib.presentation-runtime-react": "36.0.8",
37
+ "@contractspec/lib.ui-kit": "3.9.1",
38
+ "@contractspec/lib.ui-kit-web": "3.10.1",
39
39
  "@hookform/resolvers": "5.2.2",
40
40
  "class-variance-authority": "^0.7.1",
41
41
  "clsx": "^2.1.1",