diff --git a/bun.lock b/bun.lock index 1089690f..13ddc412 100644 --- a/bun.lock +++ b/bun.lock @@ -391,7 +391,7 @@ }, "packages/design-studio": { "name": "@wrnexus/design-studio", - "version": "0.1.8", + "version": "0.1.9", "bin": { "wrnexus-design-studio": "src/cli.ts", }, @@ -409,7 +409,7 @@ }, "packages/design-system": { "name": "@wrnexus/design-system", - "version": "0.1.2", + "version": "0.1.3", }, "packages/dev-server": { "name": "@wrnexus/dev-server", diff --git a/packages/design-studio/package.json b/packages/design-studio/package.json index fe324738..fa29f2c3 100644 --- a/packages/design-studio/package.json +++ b/packages/design-studio/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/design-studio", - "version": "0.1.8", + "version": "0.1.9", "private": true, "type": "module", "main": "src/index.ts", diff --git a/packages/design-studio/src/manual-editor.ts b/packages/design-studio/src/manual-editor.ts index 7a3aadf0..380b5662 100644 --- a/packages/design-studio/src/manual-editor.ts +++ b/packages/design-studio/src/manual-editor.ts @@ -1,4 +1,10 @@ -import { MANUAL_COLORS, MANUAL_FONTS, manualDesign, type ManualEdit } from "./manual.ts"; +import { + MANUAL_COLORS, + MANUAL_FONTS, + MANUAL_TYPOGRAPHY, + manualDesign, + type ManualEdit, +} from "./manual.ts"; import { checkDecisionLocks } from "./decisions.ts"; import type { StudioSession } from "./session.ts"; const escape = (value: unknown) => @@ -6,7 +12,7 @@ const escape = (value: unknown) => /[&<>"']/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[c]!, ); -export const manualHtml = `

Create a theme yourself. Choose your settings, then select Update preview to save a recoverable draft. No AI or API key is needed.

Colors

Edit light and dark palettes separately. Brand and status colors get matching hover and readable contrast colors automatically. Foundations below apply to both modes.

All other color tokens

Fine-tune hover, contrast, focus, input, code and custom color tokens.

Shape and spacing

Use 0 for square corners, 8–16 for rounded corners, or 999 for pill-shaped controls. Switches stay pill-shaped.

Typography

Use a system font below or enter your own font stack. Custom fonts must also be loaded in your application.

Surface

Use Create new or Duplicate in the workspace to name your theme. Export JSON keeps a portable copy. Review & apply exports the CSS or theme configuration for your app. Decision locks also protect manual edits.

`; +export const manualHtml = `

Create a theme yourself. Choose your settings, then select Update preview to save a recoverable draft. No AI or API key is needed.

Colors

Edit light and dark palettes separately. Brand and status colors get matching hover and readable contrast colors automatically. Foundations below apply to both modes.

All other color tokens

Fine-tune hover, contrast, focus, input, code and custom color tokens.

Shape and spacing

Use 0 for square corners, 8–16 for rounded corners, or 999 for pill-shaped controls. Switches stay pill-shaped.

Typography

Use a system font below or enter your own font stack. Custom fonts must also be loaded in your application.

Surface

Use Create new or Duplicate in the workspace to name your theme. Export JSON keeps a portable copy. Review & apply exports the CSS or theme configuration for your app. Decision locks also protect manual edits.

`; export const manualCss = `.manual-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:0 16px}.manual-color{display:flex;gap:8px;align-items:center}.manual-color input[type=color]{width:44px;height:38px;padding:3px;flex:none}.manual-color input[type=text]{flex:1;font-family:Consolas,monospace}.manual-grid input[type=number]{max-width:150px}`; export function setupManual( session: StudioSession, @@ -51,7 +57,11 @@ export function setupManual( if (input instanceof HTMLInputElement && input.type === "number") { const previous = Number(input.dataset.manualOriginal); if (Number(input.value) !== previous) - edits.push({ kind: "token", name, value: input.value + "px" }); + edits.push({ + kind: "token", + name, + value: input.value + (input.dataset.manualUnit ?? "px"), + }); } else if (input.value !== raw) edits.push({ kind: "token", name, value: input.value }); }); const value = (id: string) => ($(id) as HTMLSelectElement).value; @@ -202,9 +212,13 @@ export function setupManual( $("manual-fonts").innerHTML = [ ["type.body", "Body font"], ["type.heading", "Heading font"], + ["type.code", "Code font"], ] .map(([name, label]) => { - const current = String(resolved.tokens[name!]?.value ?? MANUAL_FONTS.sans); + const current = String( + resolved.tokens[name!]?.value ?? + (name === "type.code" ? MANUAL_FONTS.mono : MANUAL_FONTS.sans), + ); return ``; }) .join(""); + $("manual-type-scale").innerHTML = Object.entries(MANUAL_TYPOGRAPHY) + .map(([name, setting]) => { + const raw = String(resolved.tokens[name]?.value ?? setting.initial); + const numeric = parseFloat(raw) * (raw.endsWith("rem") ? 16 : 1); + return ``; + }) + .join(""); const shadow = $("manual-shadow") as HTMLSelectElement; const current = String(resolved.tokens["elevation.panel"]?.value ?? "none"); Array.from(shadow.options) diff --git a/packages/design-studio/src/manual.ts b/packages/design-studio/src/manual.ts index 2e20d908..89cefaeb 100644 --- a/packages/design-studio/src/manual.ts +++ b/packages/design-studio/src/manual.ts @@ -1,4 +1,9 @@ -import { validateDesignSystem, type DesignSystem, type DesignToken } from "@wrnexus/design-system"; +import { + COMPONENT_CONTRACTS, + validateDesignSystem, + type DesignSystem, + type DesignToken, +} from "@wrnexus/design-system"; export const MANUAL_COLORS = { primary: "Brand / primary", @@ -16,10 +21,122 @@ export const MANUAL_COLORS = { } as const; export const MANUAL_FONTS = { sans: '"Helvetica Neue", Arial, sans-serif', + system: "system-ui, sans-serif", + arial: "Arial, Helvetica, sans-serif", + verdana: "Verdana, Geneva, sans-serif", + tahoma: "Tahoma, sans-serif", + georgia: "Georgia, serif", + times: '"Times New Roman", Times, serif', + palatino: '"Palatino Linotype", Palatino, serif', + consolas: 'Consolas, "Courier New", monospace', humanist: '"Trebuchet MS", Arial, sans-serif', serif: 'Georgia, "Times New Roman", serif', mono: '"Courier New", monospace', }; +export const MANUAL_TYPOGRAPHY = { + "type.body-size": { + label: "Body size (px)", + type: "dimension", + min: 10, + max: 32, + initial: 16, + unit: "px", + }, + "type.heading-size": { + label: "Heading size (px)", + type: "dimension", + min: 16, + max: 96, + initial: 28, + unit: "px", + }, + "type.code-size": { + label: "Code size (px)", + type: "dimension", + min: 10, + max: 32, + initial: 14, + unit: "px", + }, + "type.body-weight": { + label: "Body weight", + type: "fontWeight", + min: 100, + max: 900, + initial: 400, + unit: "", + }, + "type.heading-weight": { + label: "Heading weight", + type: "fontWeight", + min: 100, + max: 900, + initial: 700, + unit: "", + }, + "type.body-leading": { + label: "Body line height", + type: "number", + min: 1, + max: 2.5, + initial: 1.5, + unit: "", + }, + "type.heading-leading": { + label: "Heading line height", + type: "number", + min: 1, + max: 2, + initial: 1.2, + unit: "", + }, + "type.body-tracking": { + label: "Body letter spacing (px)", + type: "dimension", + min: -2, + max: 8, + initial: 0, + unit: "px", + }, + "type.heading-tracking": { + label: "Heading letter spacing (px)", + type: "dimension", + min: -4, + max: 12, + initial: 0, + unit: "px", + }, +} as const; +function typographyRecipes(system: DesignSystem, token: string) { + const suffix = token.replace(/^type\./, ""); + const group = suffix.split("-")[0]!; + const property = + ( + { + size: "fontSize", + weight: "fontWeight", + leading: "lineHeight", + tracking: "letterSpacing", + } as Record + )[suffix.split("-")[1]!] ?? "fontFamily"; + for (const [name, contract] of Object.entries(COMPONENT_CONTRACTS)) { + for (const [part, descriptor] of Object.entries(contract.parts)) { + const properties: readonly string[] = descriptor.properties; + if (!properties.includes(property)) continue; + const code = /code|kbd/i.test(name) || /code/i.test(part); + const heading = /title|heading|headline/i.test(part); + if ((code ? "code" : heading ? "heading" : "body") !== group) continue; + // Keep icon geometry and managed/provider content independent of text settings. + if ( + /icon|spinner|thumb|track|srOnly/i.test(part) || + ("ownership" in descriptor && descriptor.ownership !== "framework") + ) + continue; + const recipe = ((system.recipes ??= {})[name] ??= { contractVersion: 1 }); + ((recipe.base ??= {})[part] ??= {})[property] = { ref: token }; + } + } +} export type ManualEdit = | { kind: "color"; mode: string; name: string; value: string } | { kind: "token"; name: string; value: string } @@ -157,6 +274,13 @@ export function manualDesign(source: DesignSystem, edit: ManualEdit): DesignSyst "shape.dialog": ["dimension", "radius-lg"], "type.body": ["fontFamily", "font-sans"], "type.heading": ["fontFamily", undefined], + "type.code": ["fontFamily", "font-mono"], + ...Object.fromEntries( + Object.entries(MANUAL_TYPOGRAPHY).map(([name, setting]) => [ + name, + [setting.type, undefined], + ]), + ), "elevation.panel": ["shadow", "shadow-1"], "space.control": ["dimension", undefined], "space.panel": ["dimension", "space-panel"], @@ -165,11 +289,24 @@ export function manualDesign(source: DesignSystem, edit: ManualEdit): DesignSyst const [type, legacy] = allowed[edit.name]!; if ( type === "dimension" && + !Object.hasOwn(MANUAL_TYPOGRAPHY, edit.name) && (!/^\d+(?:\.\d+)?px$/.test(edit.value) || parseFloat(edit.value) > (edit.name.startsWith("shape.") ? 999 : 64)) ) throw Error("Enter corners between 0 and 999 pixels, or padding between 0 and 64 pixels."); + const typography = MANUAL_TYPOGRAPHY[edit.name as keyof typeof MANUAL_TYPOGRAPHY]; + if (typography) { + const numeric = Number(typography.unit ? edit.value.replace(/px$/, "") : edit.value); + if ( + !Number.isFinite(numeric) || + numeric < typography.min || + numeric > typography.max || + (typography.unit && !/^-?\d+(?:\.\d+)?px$/.test(edit.value)) + ) + throw Error(`${typography.label} must be between ${typography.min} and ${typography.max}.`); + } set(system.tokens, edit.name, edit.value, type, legacy); + if (edit.name.startsWith("type.")) typographyRecipes(system, edit.name); // Existing mode overrides must not silently win over a shared foundation edit. for (const layer of Object.values(system.modes ?? {})) if (layer[edit.name]) set(layer, edit.name, edit.value, type, legacy); diff --git a/packages/design-studio/src/preview.ts b/packages/design-studio/src/preview.ts index bd869b27..97d69779 100644 --- a/packages/design-studio/src/preview.ts +++ b/packages/design-studio/src/preview.ts @@ -16,6 +16,7 @@ import { uiCss, uiComponentPath } from "@wrnexus/ui/registry"; import { resolveThemeConfig, renderThemeCss } from "@wrnexus/styles/theme"; import { COMPONENT_CONTRACTS, + resolveDesignSystem, type DesignSystem, type ResolveOptions, } from "@wrnexus/design-system"; @@ -68,6 +69,31 @@ async function component(name: string, props: Record = {}) { return String((await modules.get(name)!).render(props)); } +function typographyCss(system: DesignSystem, options: ResolveOptions) { + const tokens = resolveDesignSystem(system, options).tokens; + return ( + [ + ["body", "body"], + ["h1,h2,h3,h4,h5,h6", "heading"], + ["code,pre,kbd,samp", "code"], + ] as const + ) + .map(([selector, role]) => { + const rules = [ + ["font-family", `type.${role}`], + ["font-size", `type.${role}-size`], + ["font-weight", `type.${role}-weight`], + ["line-height", `type.${role}-leading`], + ["letter-spacing", `type.${role}-tracking`], + ] + .filter(([, name]) => tokens[name!]) + .map(([property, name]) => `${property}:${tokens[name!]!.value};`) + .join(""); + return `${selector}{${rules}}`; + }) + .join(""); +} + export async function previewDocument( system: DesignSystem, options: ResolveOptions & { content?: string; page?: number; direction?: string } = {}, @@ -183,7 +209,7 @@ export async function previewDocument( meta: { title: system.name + " preview" }, body, htmlAttrs: ` dir="${options.direction === "rtl" ? "rtl" : "ltr"}" data-theme="${escape(mode)}"`, - extraHead: ``, + extraHead: ``, componentRecipeCss: theme.recipeCss, extraBody: ``, }); @@ -208,7 +234,7 @@ export async function previewAgentPage( meta: { title: page.title }, body: `

${escape(page.title)}

${body.join("")}
`, htmlAttrs: ` data-theme="${escape(options.mode ?? system.defaultMode ?? "light")}"`, - extraHead: ``, + extraHead: ``, componentRecipeCss: theme.recipeCss, }); }); diff --git a/packages/design-studio/test/manual.test.ts b/packages/design-studio/test/manual.test.ts index dabe2fec..72e694cf 100644 --- a/packages/design-studio/test/manual.test.ts +++ b/packages/design-studio/test/manual.test.ts @@ -4,7 +4,7 @@ import { validateDesignSystem, compileDesignSystem, } from "@wrnexus/design-system"; -import { manualDesign } from "../src/manual.ts"; +import { MANUAL_TYPOGRAPHY, MANUAL_FONTS, manualDesign } from "../src/manual.ts"; import { StudioSession } from "../src/session.ts"; import { checkDecisionLocks } from "../src/decisions.ts"; @@ -112,12 +112,19 @@ test("manual form saves one atomic revision and rejects locked changes without c editor.render(); const input = win.document.querySelector('[data-manual-token="shape.control"]') as any; input.value = "12"; + (win.document.querySelector('select[data-manual-token="type.heading"]') as any).value = + MANUAL_FONTS.georgia; + (win.document.querySelector('[data-manual-token="type.body-size"]') as any).value = "18"; + (win.document.querySelector('[data-manual-token="type.body-leading"]') as any).value = "1.8"; (win.document.querySelector('input[type=text][data-manual-color="primary"]') as any).value = "#6336AD"; (win.document.querySelector("[data-manual-apply]") as any).click(); await Bun.sleep(10); expect(session.valid.tokens["shape.control"]!.value).toBe("12px"); expect(session.valid.modes!.light!["color.primary"]!.value).toBe("#6336AD"); + expect(session.valid.tokens["type.heading"]!.value).toBe(MANUAL_FONTS.georgia); + expect(session.valid.tokens["type.body-size"]!.value).toBe("18px"); + expect(session.valid.tokens["type.body-leading"]!.value).toBe("1.8"); expect(session.history).toHaveLength(2); session.setLocks(["/tokens/shape.control"]); editor.render(); @@ -132,3 +139,37 @@ test("manual form saves one atomic revision and rejects locked changes without c await win.happyDOM.close(); } }); + +test("manual typography controls persist in exported recipes and reject invalid ranges", () => { + for (const original of Object.values(CORE_DESIGN_SYSTEMS)) { + let system = structuredClone(original); + for (const [name, setting] of Object.entries(MANUAL_TYPOGRAPHY)) + system = manualDesign(system, { + kind: "token", + name, + value: String(setting.initial) + setting.unit, + }); + system = manualDesign(system, { + kind: "token", + name: "type.code", + value: MANUAL_FONTS.consolas, + }); + expect(validateDesignSystem(system)).toEqual([]); + const css = compileDesignSystem(system).css; + expect(css).toContain("font-size:16px"); + expect(css).toContain("font-weight:700"); + expect(css).toContain("line-height:1.5"); + expect(JSON.parse(JSON.stringify(system)).tokens["type.code"].value).toBe( + MANUAL_FONTS.consolas, + ); + expect(() => + manualDesign(system, { kind: "token", name: "type.body-size", value: "200px" }), + ).toThrow(); + expect(() => + manualDesign(system, { kind: "token", name: "type.body-leading", value: "0" }), + ).toThrow(); + expect(() => + manualDesign(system, { kind: "token", name: "type.heading", value: "serif; color:red" }), + ).toThrow(); + } +}); diff --git a/packages/design-system/package.json b/packages/design-system/package.json index 869ef0a0..913119f5 100644 --- a/packages/design-system/package.json +++ b/packages/design-system/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/design-system", - "version": "0.1.2", + "version": "0.1.3", "description": "Typed, deterministic design tokens and legacy WrNexus theme integration.", "type": "module", "main": "src/index.ts", diff --git a/packages/design-system/src/contract-properties.ts b/packages/design-system/src/contract-properties.ts index 03a8f5fc..7bb46f38 100644 --- a/packages/design-system/src/contract-properties.ts +++ b/packages/design-system/src/contract-properties.ts @@ -1,6 +1,6 @@ /** Shared immutable property profiles keep catalog metadata small and explicit. */ export const CATALOG_PART_PROPERTIES = { - text: ["color", "fontFamily", "fontSize", "fontWeight", "letterSpacing"], + text: ["color", "fontFamily", "fontSize", "fontWeight", "lineHeight", "letterSpacing"], layout: ["color", "fontFamily", "gap", "paddingBlock", "paddingInline"], surface: [ "backgroundColor", @@ -25,6 +25,7 @@ export const CATALOG_PART_PROPERTIES = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "letterSpacing", "outlineColor", "paddingBlock", diff --git a/packages/design-system/src/core-contracts.ts b/packages/design-system/src/core-contracts.ts index 2cb65f2d..8eaaa51f 100644 --- a/packages/design-system/src/core-contracts.ts +++ b/packages/design-system/src/core-contracts.ts @@ -42,6 +42,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -72,6 +73,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -99,6 +101,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -125,6 +128,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -151,6 +155,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -177,6 +182,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -203,6 +209,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -229,6 +236,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -327,6 +335,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -353,6 +362,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -379,6 +389,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -405,6 +416,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -431,6 +443,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -457,6 +470,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -488,6 +502,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -514,6 +529,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -540,6 +556,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -566,6 +583,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -676,6 +694,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -702,6 +721,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -728,6 +748,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -754,6 +775,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -780,6 +802,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -806,6 +829,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -837,6 +861,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -863,6 +888,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -889,6 +915,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -915,6 +942,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1022,6 +1050,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1048,6 +1077,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1074,6 +1104,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1100,6 +1131,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1126,6 +1158,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1152,6 +1185,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1183,6 +1217,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1209,6 +1244,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1235,6 +1271,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1261,6 +1298,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1287,6 +1325,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1396,6 +1435,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1422,6 +1462,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1448,6 +1489,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1480,6 +1522,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1506,6 +1549,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1532,6 +1576,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1558,6 +1603,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1666,6 +1712,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1692,6 +1739,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1718,6 +1766,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1750,6 +1799,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1776,6 +1826,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1802,6 +1853,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1828,6 +1880,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1936,6 +1989,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1962,6 +2016,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -1988,6 +2043,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2020,6 +2076,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2046,6 +2103,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2072,6 +2130,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2187,6 +2246,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2213,6 +2273,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2239,6 +2300,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2266,6 +2328,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2292,6 +2355,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2318,6 +2382,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2344,6 +2409,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2373,6 +2439,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2399,6 +2466,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2425,6 +2493,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2451,6 +2520,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2477,6 +2547,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2503,6 +2574,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2529,6 +2601,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2555,6 +2628,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2586,6 +2660,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2612,6 +2687,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2638,6 +2714,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2664,6 +2741,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2690,6 +2768,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2716,6 +2795,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2742,6 +2822,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2768,6 +2849,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2794,6 +2876,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2908,6 +2991,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2934,6 +3018,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2960,6 +3045,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -2986,6 +3072,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3012,6 +3099,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3041,6 +3129,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3140,6 +3229,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3170,6 +3260,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3197,6 +3288,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3224,6 +3316,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3254,6 +3347,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3281,6 +3375,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3308,6 +3403,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3335,6 +3431,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3362,6 +3459,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3389,6 +3487,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3419,6 +3518,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3446,6 +3546,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3473,6 +3574,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3500,6 +3602,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3527,6 +3630,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3557,6 +3661,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3584,6 +3689,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3683,6 +3789,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3712,6 +3819,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3738,6 +3846,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3764,6 +3873,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3790,6 +3900,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3816,6 +3927,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3846,6 +3958,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3872,6 +3985,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3898,6 +4012,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3924,6 +4039,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3950,6 +4066,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -3976,6 +4093,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4066,6 +4184,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4095,6 +4214,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4125,6 +4245,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4152,6 +4273,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4179,6 +4301,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4206,6 +4329,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4233,6 +4357,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4260,6 +4385,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4291,6 +4417,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4318,6 +4445,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4345,6 +4473,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4372,6 +4501,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4472,6 +4602,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4498,6 +4629,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4524,6 +4656,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4550,6 +4683,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4576,6 +4710,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4602,6 +4737,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4628,6 +4764,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4654,6 +4791,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4680,6 +4818,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4706,6 +4845,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4732,6 +4872,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4758,6 +4899,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4784,6 +4926,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4810,6 +4953,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4836,6 +4980,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4862,6 +5007,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4888,6 +5034,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4914,6 +5061,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4940,6 +5088,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -4966,6 +5115,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", @@ -5064,6 +5214,7 @@ export const CORE_COMPONENT_CONTRACTS = { "fontFamily", "fontSize", "fontWeight", + "lineHeight", "gap", "letterSpacing", "minHeight", diff --git a/packages/design-system/src/recipes.ts b/packages/design-system/src/recipes.ts index e2b7d765..283839c6 100644 --- a/packages/design-system/src/recipes.ts +++ b/packages/design-system/src/recipes.ts @@ -57,6 +57,7 @@ export const RECIPE_PROPERTIES: Record= 1 && Number(value) <= 3; if (property === "opacity") return Number(value) >= 0 && Number(value) <= 1; if ( [