// The single server-side source of truth for HOW a token maps to CSS. Kept // structurally parallel to the SPA TokenManifest. Pure data + caps; no imports. // // kind:"bsvar" -> :root { --bs-: ; } (+ optional --bs--rgb companion) // kind:"rule" -> a targeted selector { prop: value; } for things --bs-* can't reach // kind:"ignore" -> known-but-not-emitted (forward-compat) // // Keys are the FLATTENED, kebab-case token names (see compile.flattenTokens, // which camel->kebab maps the nested tokens object onto these keys). const TOKEN_SCHEMA = { primary: { kind: "bsvar", cssVar: "primary", derive: ["primary-rgb"] }, secondary: { kind: "bsvar", cssVar: "secondary", derive: ["secondary-rgb"] }, success: { kind: "bsvar", cssVar: "success", derive: ["success-rgb"] }, info: { kind: "bsvar", cssVar: "info", derive: ["info-rgb"] }, warning: { kind: "bsvar", cssVar: "warning", derive: ["warning-rgb"] }, danger: { kind: "bsvar", cssVar: "danger", derive: ["danger-rgb"] }, light: { kind: "bsvar", cssVar: "light", derive: ["light-rgb"] }, dark: { kind: "bsvar", cssVar: "dark", derive: ["dark-rgb"] }, "body-bg": { kind: "bsvar", cssVar: "body-bg", derive: ["body-bg-rgb"] }, "body-color": { kind: "bsvar", cssVar: "body-color", derive: ["body-color-rgb"] }, "font-sans-serif": { kind: "bsvar", cssVar: "font-sans-serif" }, "font-monospace": { kind: "bsvar", cssVar: "font-monospace" }, "root-font-size": { kind: "bsvar", cssVar: "root-font-size" }, "body-font-size": { kind: "bsvar", cssVar: "body-font-size" }, "body-font-weight":{ kind: "bsvar", cssVar: "body-font-weight" }, "body-line-height":{ kind: "bsvar", cssVar: "body-line-height" }, "headings-font-family": { kind: "bsvar", cssVar: "headings-font-family" }, "border-radius": { kind: "bsvar", cssVar: "border-radius" }, "border-width": { kind: "bsvar", cssVar: "border-width" }, "border-color": { kind: "bsvar", cssVar: "border-color" }, "link-color": { kind: "bsvar", cssVar: "link-color", derive: ["link-color-rgb"] }, "link-hover-color":{ kind: "bsvar", cssVar: "link-hover-color" }, "navbar-bg": { kind: "rule", selector: ".navbar", prop: "--bs-navbar-bg" }, "card-bg": { kind: "rule", selector: ".card", prop: "--bs-card-bg" }, "sidebar-bg": { kind: "rule", selector: ".sidebar, #accordionSidebar", prop: "background-color" }, }; const TOKEN_KEY_RE = /^[-a-zA-Z0-9_]{1,64}$/; const MAX_VALUE_LEN = 2048; const MAX_CSS_BYTES = 512 * 1024; module.exports = { TOKEN_SCHEMA, TOKEN_KEY_RE, MAX_VALUE_LEN, MAX_CSS_BYTES };