@vcp-dev/contracts 0.3.15 → 0.4.1

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.
@@ -1 +1 @@
1
- import{converter as K,differenceCiede2000 as W}from"culori";import{converter as P,parse as k,wcagContrast as v}from"culori";var f=P("oklch"),M=4.5,$={paper:"oklch(0.92 0.008 250)",cream:"oklch(0.90 0.035 85)",sand:"oklch(0.75 0.05 78)",stone:"oklch(0.60 0.02 75)",ash:"oklch(0.60 0.012 250)",slate:"oklch(0.45 0.025 250)",charcoal:"oklch(0.30 0.015 255)",ink:"oklch(0.25 0.04 260)",sky:"oklch(0.72 0.12 230)",blue:"oklch(0.58 0.17 250)","medical blue":"oklch(0.58 0.12 235)",indigo:"oklch(0.50 0.18 280)",navy:"oklch(0.40 0.10 258)",ocean:"oklch(0.55 0.13 220)","slate blue":"oklch(0.46 0.06 245)",teal:"oklch(0.60 0.12 195)","soft aqua":"oklch(0.78 0.07 190)",mint:"oklch(0.78 0.10 165)",sage:"oklch(0.65 0.05 145)",green:"oklch(0.58 0.15 145)","clinical green":"oklch(0.62 0.12 155)",emerald:"oklch(0.60 0.16 155)",forest:"oklch(0.45 0.10 145)",olive:"oklch(0.58 0.08 115)",lime:"oklch(0.72 0.17 130)",yellow:"oklch(0.82 0.15 100)",gold:"oklch(0.72 0.14 85)",amber:"oklch(0.70 0.16 70)",orange:"oklch(0.66 0.18 55)",coral:"oklch(0.68 0.16 32)",terracotta:"oklch(0.55 0.12 42)",rust:"oklch(0.50 0.13 38)",brown:"oklch(0.45 0.07 55)",rose:"oklch(0.65 0.16 18)",red:"oklch(0.58 0.20 25)",crimson:"oklch(0.52 0.20 22)",wine:"oklch(0.42 0.13 18)",pink:"oklch(0.72 0.14 0)",magenta:"oklch(0.60 0.22 345)",lavender:"oklch(0.72 0.08 295)",violet:"oklch(0.58 0.19 295)",purple:"oklch(0.52 0.19 305)",plum:"oklch(0.45 0.13 325)",electric:"oklch(0.62 0.23 285)","clean white":"oklch(0.97 0.01 245)","cool gray":"oklch(0.62 0.02 245)",zinc:"oklch(0.60 0.012 250)",gray:"oklch(0.60 0.012 250)",grey:"oklch(0.60 0.012 250)",neutral:"oklch(0.60 0.005 250)",gunmetal:"oklch(0.30 0.015 255)"};function E(e){let o=e.colorSeeds??{primary:"slate",accent:"blue",neutral:"zinc"},c=e.surfaceMode,r=g(o.primary||"slate"),t=a(r),n=a(g(o.accent||"blue")),i=o.neutral?g(o.neutral):V(r),l=h(i.h),u,s,d,p,b,y;c==="dark"?(u=a({mode:"oklch",l:.14,c:.03,h:l}),s=a({mode:"oklch",l:.95,c:.02,h:l}),d=a({mode:"oklch",l:.2,c:.04,h:l}),p=a({mode:"oklch",l:.29,c:.05,h:l}),b=a({mode:"oklch",l:.78,c:.02,h:l}),y=a({mode:"oklch",l:.35,c:.06,h:l})):(u=a({mode:"oklch",l:.98,c:.01,h:l}),s=a({mode:"oklch",l:.2,c:.02,h:l}),d=a({mode:"oklch",l:.96,c:.015,h:l}),p=a({mode:"oklch",l:.92,c:.02,h:l}),b=a({mode:"oklch",l:.43,c:.02,h:l}),y=a({mode:"oklch",l:.84,c:.025,h:l}));let S=c!=="dark",D={"--background":u,"--foreground":s,"--card":d,"--card-foreground":s,"--muted":p,"--muted-foreground":b,"--border":y,"--input":y,"--ring":n,"--primary":t,"--primary-foreground":m(t),"--primary-hover":x(t,S),"--accent":n,"--accent-foreground":m(n),"--accent-ink":w(n,u),"--accent-subtle":j(n,S),"--accent-hover":x(n,S),"--overlay-on-dark":a({mode:"oklch",l:.96,c:.02,h:l}),"--overlay-on-light":a({mode:"oklch",l:.2,c:.02,h:l})},L=s,O=m(s),T=C(s,l),_=w(n,s),N=f(k(t)??t),B=h(N?.h),H=C(t,B),G=w(n,t);return R({...D,...{"--surface-inverse":L,"--surface-inverse-foreground":O,"--surface-inverse-muted":T,"--surface-inverse-accent-ink":_,"--surface-primary-muted":H,"--surface-primary-accent-ink":G}},o)}function R(e,o){let c=a({mode:"oklch",l:.58,c:.22,h:28}),r=a({mode:"oklch",l:.6,c:.14,h:150}),t=a({mode:"oklch",l:.75,c:.15,h:75}),n={...e,"--popover":"var(--card)","--popover-foreground":"var(--card-foreground)","--secondary":"var(--muted)","--secondary-foreground":"var(--foreground)","--destructive":c,"--destructive-foreground":m(c),"--success":r,"--success-foreground":m(r),"--warning":t,"--warning-foreground":m(t)},[i,l]=z(o,n);return n["--supporting-0"]=i,n["--supporting-1"]=l,q(n["--accent"]).forEach((s,d)=>{n[`--chart-${d+1}`]=s}),n}function z(e,o){let t=(e.supporting??[]).filter(i=>!!(i&&i.trim())).slice(0,2).map(i=>a(g(i))),n=[o["--primary"],o["--accent"]];for(;t.length<2;)t.push(n[t.length]);return[t[0],t[1]]}function g(e,o="paper"){let c=(e??"").trim();if(!c)return g(o);let r=$[c.toLowerCase()]??c,t=k(r);if(t){let n=f(t);if(n)return n}return U(c)}function U(e){let o=2166136261,c=e.toLowerCase();for(let i=0;i<c.length;i++)o^=c.charCodeAt(i),o=Math.imul(o,16777619)>>>0;let r=o%360,t=.08+(o>>>9)%9/100;return{mode:"oklch",l:.52+(o>>>18)%16/100,c:t,h:r}}function V(e){return{mode:"oklch",l:.6,c:.02,h:h(e.h)}}function x(e,o){let c=f(k(e)??e);if(!c)return e;let r=o?-.06:.06,t=Math.max(.06,Math.min(.97,h(c.l)+r));return a({mode:"oklch",l:t,c:h(c.c),h:h(c.h)})}function j(e,o){let c=f(k(e)??e),r=h(c?.h),t=Math.min(h(c?.c),o?.05:.06);return a({mode:"oklch",l:o?.95:.24,c:t,h:r})}function q(e){let o=f(k(e)??e),c=h(o?.h),r=Math.max(.12,Math.min(h(o?.c),.16));return[0,72,144,216,288].map(t=>a({mode:"oklch",l:.62,c:r,h:(c+t)%360}))}function m(e){let o=k(e),c=o?f(o):void 0,r=h(c?.h),t={mode:"oklch",l:.99,c:.01,h:r},n={mode:"oklch",l:.18,c:.02,h:r},i=v(o??e,t),l=v(o??e,n);return a(i>=l?t:n)}function w(e,o){let c=f(k(e)??e);if(!c)return e;let r=h(c.h),t=h(c.c),n=h(c.l),i=f(k(o)??o),u=(i?h(i.l)>=.5:!0)?-.02:.02;for(let s=0;s<=50;s++){let d=n+u*s;if(d<=0||d>=1)break;let p={mode:"oklch",l:d,c:t,h:r};if(v(p,o)>=M)return a(p)}return m(o)}function C(e,o){let c=f(k(e)??e),t=(c?h(c.l):.5)>=.5,n=t?.75:.35,i=t?-.02:.02;for(let l=0;l<=50;l++){let u=n+i*l;if(u<=0||u>=1)break;let s={mode:"oklch",l:u,c:.02,h:o};if(v(s,e)>=M)return a(s)}return m(e)}function h(e){return typeof e=="number"&&Number.isFinite(e)?e:0}function a(e){let o=h(e.l),c=h(e.c),r=h(e.h);return`oklch(${o.toFixed(2)} ${c.toFixed(2)} ${r.toFixed(2)})`}var X=10,I=25,J=K("oklch"),Q=W();function Y(e){return typeof e.colorSeeds?.primary=="string"&&e.colorSeeds.primary.trim().length>0}function F(e){let o=J(e);return o&&typeof o.h=="number"?o.h:void 0}function A(e){let o=0;for(let c=0;c<e.length;c+=1)for(let r=c+1;r<e.length;r+=1){let t=e[c],n=e[r];if(t===void 0||n===void 0)continue;let i=Math.abs(t-n)%360,l=i>180?360-i:i;l>o&&(o=l)}return o}function Z(e){let o=0,c=1/0;for(let r=0;r<e.length;r+=1)for(let t=r+1;t<e.length;t+=1){let n=Q(e[r],e[t]);n>o&&(o=n),n<c&&(c=n)}return{max:o,min:c===1/0?0:c}}function re(e){let o=e.filter(Y);if(o.length<2)return{minBackgroundDeltaE:null,tooSimilar:!1,insufficient:!0};let c=o.map(s=>s.surfaceMode??"light"),r=o.map((s,d)=>E({colorSeeds:s.colorSeeds,surfaceMode:c[d]})),t=Z(r.map(s=>s["--background"])),n=A(r.map(s=>F(s["--primary"]))),i=A(r.map(s=>F(s["--accent"]))),u=!(new Set(c).size===1)||t.max>=X||n>=I||i>=I;return{minBackgroundDeltaE:t.min,tooSimilar:!u,insufficient:!1}}export{re as measureColorwayDistinctness};
1
+ import{converter as oe,differenceCiede2000 as te}from"culori";import{converter as j,parse as k,wcagContrast as v}from"culori";var g=j("oklch"),I=4.5,A={paper:"oklch(0.92 0.008 250)",cream:"oklch(0.90 0.035 85)",sand:"oklch(0.75 0.05 78)",stone:"oklch(0.60 0.02 75)",ash:"oklch(0.60 0.012 250)",slate:"oklch(0.45 0.025 250)",charcoal:"oklch(0.30 0.015 255)",ink:"oklch(0.25 0.04 260)",sky:"oklch(0.72 0.12 230)",blue:"oklch(0.58 0.17 250)","medical blue":"oklch(0.58 0.12 235)",indigo:"oklch(0.50 0.18 280)",navy:"oklch(0.40 0.10 258)",ocean:"oklch(0.55 0.13 220)","slate blue":"oklch(0.46 0.06 245)",teal:"oklch(0.60 0.12 195)","soft aqua":"oklch(0.78 0.07 190)",mint:"oklch(0.78 0.10 165)",sage:"oklch(0.65 0.05 145)",green:"oklch(0.58 0.15 145)","clinical green":"oklch(0.62 0.12 155)",emerald:"oklch(0.60 0.16 155)",forest:"oklch(0.45 0.10 145)",olive:"oklch(0.58 0.08 115)",lime:"oklch(0.72 0.17 130)",yellow:"oklch(0.82 0.15 100)",gold:"oklch(0.72 0.14 85)",amber:"oklch(0.70 0.16 70)",orange:"oklch(0.66 0.18 55)",coral:"oklch(0.68 0.16 32)",terracotta:"oklch(0.55 0.12 42)",rust:"oklch(0.50 0.13 38)",brown:"oklch(0.45 0.07 55)",rose:"oklch(0.65 0.16 18)",red:"oklch(0.58 0.20 25)",crimson:"oklch(0.52 0.20 22)",wine:"oklch(0.42 0.13 18)",pink:"oklch(0.72 0.14 0)",magenta:"oklch(0.60 0.22 345)",lavender:"oklch(0.72 0.08 295)",violet:"oklch(0.58 0.19 295)",purple:"oklch(0.52 0.19 305)",plum:"oklch(0.45 0.13 325)",electric:"oklch(0.62 0.23 285)","clean white":"oklch(0.97 0.01 245)","cool gray":"oklch(0.62 0.02 245)",zinc:"oklch(0.60 0.012 250)",gray:"oklch(0.60 0.012 250)",grey:"oklch(0.60 0.012 250)",neutral:"oklch(0.60 0.005 250)",gunmetal:"oklch(0.30 0.015 255)"};function D(o){let e=o.colorSeeds??{primary:"slate",accent:"blue",neutral:"zinc"},t=o.surfaceMode,c=y(e.primary||"slate"),n=s(c),r=s(y(e.accent||"blue")),i=e.neutral?y(e.neutral):X(c),a=h(i.h),u,l,f,m,b,S;t==="dark"?(u=s({mode:"oklch",l:.14,c:.03,h:a}),l=s({mode:"oklch",l:.95,c:.02,h:a}),f=s({mode:"oklch",l:.2,c:.04,h:a}),m=s({mode:"oklch",l:.29,c:.05,h:a}),b=s({mode:"oklch",l:.78,c:.02,h:a}),S=s({mode:"oklch",l:.35,c:.06,h:a})):(u=s({mode:"oklch",l:.98,c:.01,h:a}),l=s({mode:"oklch",l:.2,c:.02,h:a}),f=s({mode:"oklch",l:.96,c:.015,h:a}),m=s({mode:"oklch",l:.92,c:.02,h:a}),b=s({mode:"oklch",l:.43,c:.02,h:a}),S=s({mode:"oklch",l:.84,c:.025,h:a}));let d=o.imagePalette;if(d){let C=typeof d.background=="string"&&x(d.background),w=C&&ee(d.background,t);C&&w&&(u=s(y(d.background))),w&&typeof d.card=="string"&&x(d.card)&&(f=s(y(d.card))),w&&typeof d.muted=="string"&&x(d.muted)&&(m=s(y(d.muted))),typeof d.foreground=="string"&&x(d.foreground)?l=Y(s(y(d.foreground)),u,I):C&&w&&(l=p(u)),typeof d.border=="string"&&x(d.border)&&(S=Z(s(y(d.border)),u))}let M=t!=="dark",R={"--background":u,"--foreground":l,"--card":f,"--card-foreground":l,"--muted":m,"--muted-foreground":b,"--border":S,"--input":S,"--ring":r,"--primary":n,"--primary-foreground":p(n),"--primary-hover":O(n,M),"--accent":r,"--accent-foreground":p(r),"--accent-ink":E(r,u),"--accent-subtle":J(r,M),"--accent-hover":O(r,M),"--overlay-on-dark":s({mode:"oklch",l:.96,c:.02,h:a}),"--overlay-on-light":s({mode:"oklch",l:.2,c:.02,h:a})},B=l,P=p(l),H=L(l,a),G=E(r,l),$=g(k(n)??n),V=h($?.h),z=L(n,V),U=E(r,n);return q({...R,...{"--surface-inverse":B,"--surface-inverse-foreground":P,"--surface-inverse-muted":H,"--surface-inverse-accent-ink":G,"--surface-primary-muted":z,"--surface-primary-accent-ink":U}},e)}function q(o,e){let t=s({mode:"oklch",l:.58,c:.22,h:28}),c=s({mode:"oklch",l:.6,c:.14,h:150}),n=s({mode:"oklch",l:.75,c:.15,h:75}),r={...o,"--popover":"var(--card)","--popover-foreground":"var(--card-foreground)","--secondary":"var(--muted)","--secondary-foreground":"var(--foreground)","--destructive":t,"--destructive-foreground":p(t),"--success":c,"--success-foreground":p(c),"--warning":n,"--warning-foreground":p(n)},[i,a]=K(e,r);return r["--supporting-0"]=i,r["--supporting-1"]=a,Q(r["--accent"]).forEach((l,f)=>{r[`--chart-${f+1}`]=l}),r}function K(o,e){let n=(o.supporting??[]).filter(i=>!!(i&&i.trim())).slice(0,2).map(i=>s(y(i))),r=[e["--primary"],e["--accent"]];for(;n.length<2;)n.push(r[n.length]);return[n[0],n[1]]}function x(o){let e=(o??"").trim();if(!e||e.startsWith("#")&&!/^#[0-9A-Fa-f]{3,8}$/.test(e))return!1;let t=A[e.toLowerCase()]??e;return!!k(t)}function y(o,e="paper"){let t=(o??"").trim();if(!t)return y(e);let c=A[t.toLowerCase()]??t,n=k(c);if(n){let r=g(n);if(r)return r}return W(t)}function W(o){let e=2166136261,t=o.toLowerCase();for(let i=0;i<t.length;i++)e^=t.charCodeAt(i),e=Math.imul(e,16777619)>>>0;let c=e%360,n=.08+(e>>>9)%9/100;return{mode:"oklch",l:.52+(e>>>18)%16/100,c:n,h:c}}function X(o){return{mode:"oklch",l:.6,c:.02,h:h(o.h)}}function O(o,e){let t=g(k(o)??o);if(!t)return o;let c=e?-.06:.06,n=Math.max(.06,Math.min(.97,h(t.l)+c));return s({mode:"oklch",l:n,c:h(t.c),h:h(t.h)})}function J(o,e){let t=g(k(o)??o),c=h(t?.h),n=Math.min(h(t?.c),e?.05:.06);return s({mode:"oklch",l:e?.95:.24,c:n,h:c})}function Q(o){let e=g(k(o)??o),t=h(e?.h),c=Math.max(.12,Math.min(h(e?.c),.16));return[0,72,144,216,288].map(n=>s({mode:"oklch",l:.62,c,h:(t+n)%360}))}function p(o){let e=k(o),t=e?g(e):void 0,c=h(t?.h),n={mode:"oklch",l:.99,c:.01,h:c},r={mode:"oklch",l:.18,c:.02,h:c},i=v(e??o,n),a=v(e??o,r);return s(i>=a?n:r)}function Y(o,e,t){let c=g(k(o)??o);if(!c)return p(e);if(v(o,e)>=t)return s(c);let n=g(k(e)??e),i=(n?h(n.l)>=.5:!0)?-.02:.02,a=h(c.l),u=h(c.c),l=h(c.h);for(let f=1;f<=50;f++){let m=a+i*f;if(m<=0||m>=1)break;let b={mode:"oklch",l:m,c:u,h:l};if(v(b,e)>=t)return s(b)}return p(e)}var F=1.3;function Z(o,e){let t=g(k(o)??o);if(!t)return o;if(v(o,e)>=F)return s(t);let c=g(k(e)??e),r=(c?h(c.l)>=.5:!0)?-.03:.03,i=h(t.l),a=h(t.c),u=h(t.h);for(let l=1;l<=40;l++){let f=i+r*l;if(f<=0||f>=1)break;let m={mode:"oklch",l:f,c:a,h:u};if(v(m,e)>=F)return s(m)}return o}function ee(o,e){let t=g(k(o)??o);if(!t)return!1;let c=h(t.l)>=.5;return e==="dark"?!c:c}function E(o,e){let t=g(k(o)??o);if(!t)return o;let c=h(t.h),n=h(t.c),r=h(t.l),i=g(k(e)??e),u=(i?h(i.l)>=.5:!0)?-.02:.02;for(let l=0;l<=50;l++){let f=r+u*l;if(f<=0||f>=1)break;let m={mode:"oklch",l:f,c:n,h:c};if(v(m,e)>=I)return s(m)}return p(e)}function L(o,e){let t=g(k(o)??o),n=(t?h(t.l):.5)>=.5,r=n?.75:.35,i=n?-.02:.02;for(let a=0;a<=50;a++){let u=r+i*a;if(u<=0||u>=1)break;let l={mode:"oklch",l:u,c:.02,h:e};if(v(l,o)>=I)return s(l)}return p(o)}function h(o){return typeof o=="number"&&Number.isFinite(o)?o:0}function s(o){let e=h(o.l),t=h(o.c),c=h(o.h);return`oklch(${e.toFixed(2)} ${t.toFixed(2)} ${c.toFixed(2)})`}var ce=10,T=25,ne=oe("oklch"),re=te();function le(o){return typeof o.colorSeeds?.primary=="string"&&o.colorSeeds.primary.trim().length>0}function _(o){let e=ne(o);return e&&typeof e.h=="number"?e.h:void 0}function N(o){let e=0;for(let t=0;t<o.length;t+=1)for(let c=t+1;c<o.length;c+=1){let n=o[t],r=o[c];if(n===void 0||r===void 0)continue;let i=Math.abs(n-r)%360,a=i>180?360-i:i;a>e&&(e=a)}return e}function se(o){let e=0,t=1/0;for(let c=0;c<o.length;c+=1)for(let n=c+1;n<o.length;n+=1){let r=re(o[c],o[n]);r>e&&(e=r),r<t&&(t=r)}return{max:e,min:t===1/0?0:t}}function de(o){let e=o.filter(le);if(e.length<2)return{minBackgroundDeltaE:null,tooSimilar:!1,insufficient:!0};let t=e.map(l=>l.surfaceMode??"light"),c=e.map((l,f)=>D({colorSeeds:l.colorSeeds,surfaceMode:t[f]})),n=se(c.map(l=>l["--background"])),r=N(c.map(l=>_(l["--primary"]))),i=N(c.map(l=>_(l["--accent"]))),u=!(new Set(t).size===1)||n.max>=ce||r>=T||i>=T;return{minBackgroundDeltaE:n.min,tooSimilar:!u,insufficient:!1}}export{de as measureColorwayDistinctness};
@@ -110,6 +110,12 @@ export type ConnectDynamicCollectionResult = {
110
110
  view_contract: string;
111
111
  /** 工具已写入 working set 的确定性产物路径——LLM 绝不可再 create/覆盖。 */
112
112
  created_files: string[];
113
+ /**
114
+ * 工具探测到已存在而未覆盖的目标路径(典型:首生成静态列表页已占
115
+ * app/<prefix>/page.tsx)。LLM 应按 view_contract 对应指引用 str_replace
116
+ * 改造这些既有文件,绝不 create。created_files 语义不变(仅实际写入)。
117
+ */
118
+ skipped_existing?: string[];
113
119
  /** 自定义消费场景照抄片段(与 already_bound 同口径);首次 bind 也回传,供 LLM 写额外自取数区块时照抄。 */
114
120
  usage?: string;
115
121
  }
@@ -76,6 +76,12 @@ export type ConnectFormResult = {
76
76
  form_contract: string;
77
77
  /** 工具已写入 working set 的确定性产物路径——LLM 绝不可再 create/覆盖。 */
78
78
  created_files: string[];
79
+ /**
80
+ * 工具探测到已存在而未覆盖的目标路径(典型:容器已存在的死状态)。
81
+ * LLM 应按 form_contract 对应指引用 str_replace 改造这些既有文件,
82
+ * 绝不 create。created_files 语义不变(仅实际写入)。
83
+ */
84
+ skipped_existing?: string[];
79
85
  } | {
80
86
  status: "not_found_form";
81
87
  /** 站点全部可用表单(code+名称)。从中选最匹配项以 form_code 或精确 name 重调,勿猜名。 */
@@ -7,9 +7,26 @@ export interface DesignColorSeeds {
7
7
  neutral?: string;
8
8
  supporting?: string[];
9
9
  }
10
+ /**
11
+ * Optional per-role surface colors read directly from a user's reference image
12
+ * (via the Opus `visual_decision` call). When present, `deriveDesignColors`
13
+ * fills the matching surface tokens with these hex values instead of deriving
14
+ * them from the neutral hue — so a generated site's surfaces MATCH the
15
+ * reference rather than being a hue-derived approximation. Every role is
16
+ * optional: only the roles the model could read confidently are set; the rest
17
+ * fall back to the derived value. Values are hex strings ("#rrggbb").
18
+ */
19
+ export interface DesignImagePalette {
20
+ background?: string;
21
+ foreground?: string;
22
+ card?: string;
23
+ muted?: string;
24
+ border?: string;
25
+ }
10
26
  export interface DeriveDesignColorsInput {
11
27
  colorSeeds?: DesignColorSeeds;
12
28
  surfaceMode: DesignSurfaceMode;
29
+ imagePalette?: DesignImagePalette;
13
30
  }
14
31
  /**
15
32
  * Preferred seed vocabulary ported from cms-builder's
@@ -33,6 +50,15 @@ export declare function deriveDesignColors(input: DeriveDesignColorsInput): Reco
33
50
  export declare function isResolvableDesignColorSeed(seed: string): boolean;
34
51
  /** Picks a near-white / near-black foreground with higher WCAG contrast. */
35
52
  export declare function bestForegroundFor(background: string): string;
53
+ /**
54
+ * Adjusts an ink color's lightness (keeping hue/chroma) until it clears
55
+ * `minContrast` against `background`, mirroring the stepping in accentInkFor.
56
+ * Used when an imagePalette foreground is taken faithfully but must stay
57
+ * readable on the (possibly imagePalette) background. Returns the input as-is
58
+ * when it already clears the threshold; falls back to bestForegroundFor when
59
+ * the gamut is exhausted.
60
+ */
61
+ export declare function ensureReadableInk(ink: string, background: string, minContrast: number): string;
36
62
  /**
37
63
  * Readable accent *text* color for copy that sits directly on a page surface —
38
64
  * eyebrow labels, emphasized words, prices, stat numbers, outline-button labels.
@@ -1 +1 @@
1
- import{converter as _,parse as k,wcagContrast as y}from"culori";var m=_("oklch"),F=4.5,M={paper:"oklch(0.92 0.008 250)",cream:"oklch(0.90 0.035 85)",sand:"oklch(0.75 0.05 78)",stone:"oklch(0.60 0.02 75)",ash:"oklch(0.60 0.012 250)",slate:"oklch(0.45 0.025 250)",charcoal:"oklch(0.30 0.015 255)",ink:"oklch(0.25 0.04 260)",sky:"oklch(0.72 0.12 230)",blue:"oklch(0.58 0.17 250)","medical blue":"oklch(0.58 0.12 235)",indigo:"oklch(0.50 0.18 280)",navy:"oklch(0.40 0.10 258)",ocean:"oklch(0.55 0.13 220)","slate blue":"oklch(0.46 0.06 245)",teal:"oklch(0.60 0.12 195)","soft aqua":"oklch(0.78 0.07 190)",mint:"oklch(0.78 0.10 165)",sage:"oklch(0.65 0.05 145)",green:"oklch(0.58 0.15 145)","clinical green":"oklch(0.62 0.12 155)",emerald:"oklch(0.60 0.16 155)",forest:"oklch(0.45 0.10 145)",olive:"oklch(0.58 0.08 115)",lime:"oklch(0.72 0.17 130)",yellow:"oklch(0.82 0.15 100)",gold:"oklch(0.72 0.14 85)",amber:"oklch(0.70 0.16 70)",orange:"oklch(0.66 0.18 55)",coral:"oklch(0.68 0.16 32)",terracotta:"oklch(0.55 0.12 42)",rust:"oklch(0.50 0.13 38)",brown:"oklch(0.45 0.07 55)",rose:"oklch(0.65 0.16 18)",red:"oklch(0.58 0.20 25)",crimson:"oklch(0.52 0.20 22)",wine:"oklch(0.42 0.13 18)",pink:"oklch(0.72 0.14 0)",magenta:"oklch(0.60 0.22 345)",lavender:"oklch(0.72 0.08 295)",violet:"oklch(0.58 0.19 295)",purple:"oklch(0.52 0.19 305)",plum:"oklch(0.45 0.13 325)",electric:"oklch(0.62 0.23 285)","clean white":"oklch(0.97 0.01 245)","cool gray":"oklch(0.62 0.02 245)",zinc:"oklch(0.60 0.012 250)",gray:"oklch(0.60 0.012 250)",grey:"oklch(0.60 0.012 250)",neutral:"oklch(0.60 0.005 250)",gunmetal:"oklch(0.30 0.015 255)"};function W(e){let o=e.colorSeeds??{primary:"slate",accent:"blue",neutral:"zinc"},c=e.surfaceMode,l=g(o.primary||"slate"),r=n(l),t=n(g(o.accent||"blue")),h=o.neutral?g(o.neutral):z(l),s=a(h.h),u,i,d,p,b,v;c==="dark"?(u=n({mode:"oklch",l:.14,c:.03,h:s}),i=n({mode:"oklch",l:.95,c:.02,h:s}),d=n({mode:"oklch",l:.2,c:.04,h:s}),p=n({mode:"oklch",l:.29,c:.05,h:s}),b=n({mode:"oklch",l:.78,c:.02,h:s}),v=n({mode:"oklch",l:.35,c:.06,h:s})):(u=n({mode:"oklch",l:.98,c:.01,h:s}),i=n({mode:"oklch",l:.2,c:.02,h:s}),d=n({mode:"oklch",l:.96,c:.015,h:s}),p=n({mode:"oklch",l:.92,c:.02,h:s}),b=n({mode:"oklch",l:.43,c:.02,h:s}),v=n({mode:"oklch",l:.84,c:.025,h:s}));let w=c!=="dark",I={"--background":u,"--foreground":i,"--card":d,"--card-foreground":i,"--muted":p,"--muted-foreground":b,"--border":v,"--input":v,"--ring":t,"--primary":r,"--primary-foreground":f(r),"--primary-hover":S(r,w),"--accent":t,"--accent-foreground":f(t),"--accent-ink":x(t,u),"--accent-subtle":H(t,w),"--accent-hover":S(t,w),"--overlay-on-dark":n({mode:"oklch",l:.96,c:.02,h:s}),"--overlay-on-light":n({mode:"oklch",l:.2,c:.02,h:s})},A=i,L=f(i),T=C(i,s),O=x(t,i),E=m(k(r)??r),$=a(E?.h),N=C(r,$),P=x(t,r);return B({...I,...{"--surface-inverse":A,"--surface-inverse-foreground":L,"--surface-inverse-muted":T,"--surface-inverse-accent-ink":O,"--surface-primary-muted":N,"--surface-primary-accent-ink":P}},o)}function B(e,o){let c=n({mode:"oklch",l:.58,c:.22,h:28}),l=n({mode:"oklch",l:.6,c:.14,h:150}),r=n({mode:"oklch",l:.75,c:.15,h:75}),t={...e,"--popover":"var(--card)","--popover-foreground":"var(--card-foreground)","--secondary":"var(--muted)","--secondary-foreground":"var(--foreground)","--destructive":c,"--destructive-foreground":f(c),"--success":l,"--success-foreground":f(l),"--warning":r,"--warning-foreground":f(r)},[h,s]=D(o,t);return t["--supporting-0"]=h,t["--supporting-1"]=s,R(t["--accent"]).forEach((i,d)=>{t[`--chart-${d+1}`]=i}),t}function D(e,o){let r=(e.supporting??[]).filter(h=>!!(h&&h.trim())).slice(0,2).map(h=>n(g(h))),t=[o["--primary"],o["--accent"]];for(;r.length<2;)r.push(t[r.length]);return[r[0],r[1]]}function X(e){let o=(e??"").trim();if(!o||o.startsWith("#")&&!/^#[0-9A-Fa-f]{3,8}$/.test(o))return!1;let c=M[o.toLowerCase()]??o;return!!k(c)}function g(e,o="paper"){let c=(e??"").trim();if(!c)return g(o);let l=M[c.toLowerCase()]??c,r=k(l);if(r){let t=m(r);if(t)return t}return V(c)}function V(e){let o=2166136261,c=e.toLowerCase();for(let h=0;h<c.length;h++)o^=c.charCodeAt(h),o=Math.imul(o,16777619)>>>0;let l=o%360,r=.08+(o>>>9)%9/100;return{mode:"oklch",l:.52+(o>>>18)%16/100,c:r,h:l}}function z(e){return{mode:"oklch",l:.6,c:.02,h:a(e.h)}}function S(e,o){let c=m(k(e)??e);if(!c)return e;let l=o?-.06:.06,r=Math.max(.06,Math.min(.97,a(c.l)+l));return n({mode:"oklch",l:r,c:a(c.c),h:a(c.h)})}function H(e,o){let c=m(k(e)??e),l=a(c?.h),r=Math.min(a(c?.c),o?.05:.06);return n({mode:"oklch",l:o?.95:.24,c:r,h:l})}function R(e){let o=m(k(e)??e),c=a(o?.h),l=Math.max(.12,Math.min(a(o?.c),.16));return[0,72,144,216,288].map(r=>n({mode:"oklch",l:.62,c:l,h:(c+r)%360}))}function f(e){let o=k(e),c=o?m(o):void 0,l=a(c?.h),r={mode:"oklch",l:.99,c:.01,h:l},t={mode:"oklch",l:.18,c:.02,h:l},h=y(o??e,r),s=y(o??e,t);return n(h>=s?r:t)}function x(e,o){let c=m(k(e)??e);if(!c)return e;let l=a(c.h),r=a(c.c),t=a(c.l),h=m(k(o)??o),u=(h?a(h.l)>=.5:!0)?-.02:.02;for(let i=0;i<=50;i++){let d=t+u*i;if(d<=0||d>=1)break;let p={mode:"oklch",l:d,c:r,h:l};if(y(p,o)>=F)return n(p)}return f(o)}function C(e,o){let c=m(k(e)??e),r=(c?a(c.l):.5)>=.5,t=r?.75:.35,h=r?-.02:.02;for(let s=0;s<=50;s++){let u=t+h*s;if(u<=0||u>=1)break;let i={mode:"oklch",l:u,c:.02,h:o};if(y(i,e)>=F)return n(i)}return f(e)}function a(e){return typeof e=="number"&&Number.isFinite(e)?e:0}function n(e){let o=a(e.l),c=a(e.c),l=a(e.h);return`oklch(${o.toFixed(2)} ${c.toFixed(2)} ${l.toFixed(2)})`}export{M as SEMANTIC_SEED_ALIASES,x as accentInkFor,f as bestForegroundFor,a as channel,W as deriveDesignColors,X as isResolvableDesignColorSeed,n as oklchString};
1
+ import{converter as z,parse as f,wcagContrast as v}from"culori";var g=z("oklch"),F=4.5,T={paper:"oklch(0.92 0.008 250)",cream:"oklch(0.90 0.035 85)",sand:"oklch(0.75 0.05 78)",stone:"oklch(0.60 0.02 75)",ash:"oklch(0.60 0.012 250)",slate:"oklch(0.45 0.025 250)",charcoal:"oklch(0.30 0.015 255)",ink:"oklch(0.25 0.04 260)",sky:"oklch(0.72 0.12 230)",blue:"oklch(0.58 0.17 250)","medical blue":"oklch(0.58 0.12 235)",indigo:"oklch(0.50 0.18 280)",navy:"oklch(0.40 0.10 258)",ocean:"oklch(0.55 0.13 220)","slate blue":"oklch(0.46 0.06 245)",teal:"oklch(0.60 0.12 195)","soft aqua":"oklch(0.78 0.07 190)",mint:"oklch(0.78 0.10 165)",sage:"oklch(0.65 0.05 145)",green:"oklch(0.58 0.15 145)","clinical green":"oklch(0.62 0.12 155)",emerald:"oklch(0.60 0.16 155)",forest:"oklch(0.45 0.10 145)",olive:"oklch(0.58 0.08 115)",lime:"oklch(0.72 0.17 130)",yellow:"oklch(0.82 0.15 100)",gold:"oklch(0.72 0.14 85)",amber:"oklch(0.70 0.16 70)",orange:"oklch(0.66 0.18 55)",coral:"oklch(0.68 0.16 32)",terracotta:"oklch(0.55 0.12 42)",rust:"oklch(0.50 0.13 38)",brown:"oklch(0.45 0.07 55)",rose:"oklch(0.65 0.16 18)",red:"oklch(0.58 0.20 25)",crimson:"oklch(0.52 0.20 22)",wine:"oklch(0.42 0.13 18)",pink:"oklch(0.72 0.14 0)",magenta:"oklch(0.60 0.22 345)",lavender:"oklch(0.72 0.08 295)",violet:"oklch(0.58 0.19 295)",purple:"oklch(0.52 0.19 305)",plum:"oklch(0.45 0.13 325)",electric:"oklch(0.62 0.23 285)","clean white":"oklch(0.97 0.01 245)","cool gray":"oklch(0.62 0.02 245)",zinc:"oklch(0.60 0.012 250)",gray:"oklch(0.60 0.012 250)",grey:"oklch(0.60 0.012 250)",neutral:"oklch(0.60 0.005 250)",gunmetal:"oklch(0.30 0.015 255)"};function Z(e){let o=e.colorSeeds??{primary:"slate",accent:"blue",neutral:"zinc"},c=e.surfaceMode,r=y(o.primary||"slate"),t=n(r),l=n(y(o.accent||"blue")),i=o.neutral?y(o.neutral):W(r),s=h(i.h),u,a,d,m,b,S;c==="dark"?(u=n({mode:"oklch",l:.14,c:.03,h:s}),a=n({mode:"oklch",l:.95,c:.02,h:s}),d=n({mode:"oklch",l:.2,c:.04,h:s}),m=n({mode:"oklch",l:.29,c:.05,h:s}),b=n({mode:"oklch",l:.78,c:.02,h:s}),S=n({mode:"oklch",l:.35,c:.06,h:s})):(u=n({mode:"oklch",l:.98,c:.01,h:s}),a=n({mode:"oklch",l:.2,c:.02,h:s}),d=n({mode:"oklch",l:.96,c:.015,h:s}),m=n({mode:"oklch",l:.92,c:.02,h:s}),b=n({mode:"oklch",l:.43,c:.02,h:s}),S=n({mode:"oklch",l:.84,c:.025,h:s}));let k=e.imagePalette;if(k){let O=typeof k.background=="string"&&w(k.background),x=O&&K(k.background,c);O&&x&&(u=n(y(k.background))),x&&typeof k.card=="string"&&w(k.card)&&(d=n(y(k.card))),x&&typeof k.muted=="string"&&w(k.muted)&&(m=n(y(k.muted))),typeof k.foreground=="string"&&w(k.foreground)?a=G(n(y(k.foreground)),u,F):O&&x&&(a=p(u)),typeof k.border=="string"&&w(k.border)&&(S=J(n(y(k.border)),u))}let M=c!=="dark",E={"--background":u,"--foreground":a,"--card":d,"--card-foreground":a,"--muted":m,"--muted-foreground":b,"--border":S,"--input":S,"--ring":l,"--primary":t,"--primary-foreground":p(t),"--primary-hover":I(t,M),"--accent":l,"--accent-foreground":p(l),"--accent-ink":C(l,u),"--accent-subtle":X(l,M),"--accent-hover":I(l,M),"--overlay-on-dark":n({mode:"oklch",l:.96,c:.02,h:s}),"--overlay-on-light":n({mode:"oklch",l:.2,c:.02,h:s})},P=a,R=p(a),N=A(a,s),_=C(l,a),B=g(f(t)??t),$=h(B?.h),D=A(t,$),V=C(l,t);return H({...E,...{"--surface-inverse":P,"--surface-inverse-foreground":R,"--surface-inverse-muted":N,"--surface-inverse-accent-ink":_,"--surface-primary-muted":D,"--surface-primary-accent-ink":V}},o)}function H(e,o){let c=n({mode:"oklch",l:.58,c:.22,h:28}),r=n({mode:"oklch",l:.6,c:.14,h:150}),t=n({mode:"oklch",l:.75,c:.15,h:75}),l={...e,"--popover":"var(--card)","--popover-foreground":"var(--card-foreground)","--secondary":"var(--muted)","--secondary-foreground":"var(--foreground)","--destructive":c,"--destructive-foreground":p(c),"--success":r,"--success-foreground":p(r),"--warning":t,"--warning-foreground":p(t)},[i,s]=q(o,l);return l["--supporting-0"]=i,l["--supporting-1"]=s,j(l["--accent"]).forEach((a,d)=>{l[`--chart-${d+1}`]=a}),l}function q(e,o){let t=(e.supporting??[]).filter(i=>!!(i&&i.trim())).slice(0,2).map(i=>n(y(i))),l=[o["--primary"],o["--accent"]];for(;t.length<2;)t.push(l[t.length]);return[t[0],t[1]]}function w(e){let o=(e??"").trim();if(!o||o.startsWith("#")&&!/^#[0-9A-Fa-f]{3,8}$/.test(o))return!1;let c=T[o.toLowerCase()]??o;return!!f(c)}function y(e,o="paper"){let c=(e??"").trim();if(!c)return y(o);let r=T[c.toLowerCase()]??c,t=f(r);if(t){let l=g(t);if(l)return l}return U(c)}function U(e){let o=2166136261,c=e.toLowerCase();for(let i=0;i<c.length;i++)o^=c.charCodeAt(i),o=Math.imul(o,16777619)>>>0;let r=o%360,t=.08+(o>>>9)%9/100;return{mode:"oklch",l:.52+(o>>>18)%16/100,c:t,h:r}}function W(e){return{mode:"oklch",l:.6,c:.02,h:h(e.h)}}function I(e,o){let c=g(f(e)??e);if(!c)return e;let r=o?-.06:.06,t=Math.max(.06,Math.min(.97,h(c.l)+r));return n({mode:"oklch",l:t,c:h(c.c),h:h(c.h)})}function X(e,o){let c=g(f(e)??e),r=h(c?.h),t=Math.min(h(c?.c),o?.05:.06);return n({mode:"oklch",l:o?.95:.24,c:t,h:r})}function j(e){let o=g(f(e)??e),c=h(o?.h),r=Math.max(.12,Math.min(h(o?.c),.16));return[0,72,144,216,288].map(t=>n({mode:"oklch",l:.62,c:r,h:(c+t)%360}))}function p(e){let o=f(e),c=o?g(o):void 0,r=h(c?.h),t={mode:"oklch",l:.99,c:.01,h:r},l={mode:"oklch",l:.18,c:.02,h:r},i=v(o??e,t),s=v(o??e,l);return n(i>=s?t:l)}function G(e,o,c){let r=g(f(e)??e);if(!r)return p(o);if(v(e,o)>=c)return n(r);let t=g(f(o)??o),i=(t?h(t.l)>=.5:!0)?-.02:.02,s=h(r.l),u=h(r.c),a=h(r.h);for(let d=1;d<=50;d++){let m=s+i*d;if(m<=0||m>=1)break;let b={mode:"oklch",l:m,c:u,h:a};if(v(b,o)>=c)return n(b)}return p(o)}var L=1.3;function J(e,o){let c=g(f(e)??e);if(!c)return e;if(v(e,o)>=L)return n(c);let r=g(f(o)??o),l=(r?h(r.l)>=.5:!0)?-.03:.03,i=h(c.l),s=h(c.c),u=h(c.h);for(let a=1;a<=40;a++){let d=i+l*a;if(d<=0||d>=1)break;let m={mode:"oklch",l:d,c:s,h:u};if(v(m,o)>=L)return n(m)}return e}function K(e,o){let c=g(f(e)??e);if(!c)return!1;let r=h(c.l)>=.5;return o==="dark"?!r:r}function C(e,o){let c=g(f(e)??e);if(!c)return e;let r=h(c.h),t=h(c.c),l=h(c.l),i=g(f(o)??o),u=(i?h(i.l)>=.5:!0)?-.02:.02;for(let a=0;a<=50;a++){let d=l+u*a;if(d<=0||d>=1)break;let m={mode:"oklch",l:d,c:t,h:r};if(v(m,o)>=F)return n(m)}return p(o)}function A(e,o){let c=g(f(e)??e),t=(c?h(c.l):.5)>=.5,l=t?.75:.35,i=t?-.02:.02;for(let s=0;s<=50;s++){let u=l+i*s;if(u<=0||u>=1)break;let a={mode:"oklch",l:u,c:.02,h:o};if(v(a,e)>=F)return n(a)}return p(e)}function h(e){return typeof e=="number"&&Number.isFinite(e)?e:0}function n(e){let o=h(e.l),c=h(e.c),r=h(e.h);return`oklch(${o.toFixed(2)} ${c.toFixed(2)} ${r.toFixed(2)})`}export{T as SEMANTIC_SEED_ALIASES,C as accentInkFor,p as bestForegroundFor,h as channel,Z as deriveDesignColors,G as ensureReadableInk,w as isResolvableDesignColorSeed,n as oklchString};