@bridge-ds/core 0.10.0 → 0.12.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.
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { m as modeDisplayName, b as modesOf$1, i as isMultiMode, T as TIER_NAMES, c as TIER_AXIS, d as collectRefs, f as findReferenceProblems, e as evaluatePairs, g as contrastScope, h as contextLabel, S as SINGLE_MODE, j as isAlias, k as aliasTarget, l as pathId, v as valuesEqual, n as flattenTokens, s as serializeTokenFile, r as removeToken, u as upsertToken, o as threeWayDiff, q as emptyTokenFile, w as parseTokenFile, E as EXT_ID, x as EXT_SCOPES, y as parseColor, z as rgbaToHex, A as formatValue, B as resolve, C as moveToken, D as effectiveScopes, F as sameScopes, G as defaultScopes, H as readTokenAt, I as modeFile, J as defaultFile, K as selectTokenFiles, L as LayeredTokenSet, M as resolveBranchPreviews, N as loadConfig, O as tokensPath, P as toConfigJson, Q as validateLayered, R as parseContrastChecks, U as classifyRisk, V as CONFIG_FILE, W as RISK_LABELS, X as previewLinks, Y as findPreviewComment, Z as previewsSettled, _ as DEFAULT_TOKEN_PATHS, $ as layoutOptions, a0 as buildTokenSet, a1 as readPreviewComment, a2 as linkStatus, a3 as libraryPreviewState, a4 as parsePiecesRecord, a5 as libraryBranchPlan, a6 as NEEDED_BY_LABEL, a7 as withNeededBy, a8 as withLink, a9 as withPiecesRecord, aa as productBranchSentence, ab as mergePiecesRecord, ac as productOfBranch, ad as defaultProduct, ae as slugify } from "./prod-branch-BdMPKffE.js";
2
2
  import { af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, aA, aB, aC, aD, aE, aF, aG, aH, aI, aJ, aK, aL, aM, aN, aO, aP, aQ, aR, aS, aT, aU, aV, aW, aX, aY, aZ, a_, a$, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk, bl, bm, bn, bo, bp, bq, br, bs, bt, bu, bv, bw, bx, by, bz, bA, bB, bC, bD, bE, bF, bG, bH, bI, bJ, bK, bL, p, bM, bN, bO, bP, bQ, bR, bS, bT, bU, bV, bW, a, bX, bY, bZ, b_, b$, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf, cg, t, ch, ci, cj, ck, cl, cm, cn, co } from "./prod-branch-BdMPKffE.js";
3
- import { G as GitHubError, c as collectHistory, p as packageDirCandidates, a as parseChangelog, r as releasesFromTags, m as mergeReleases, b as buildReport, d as applyTokenEdits, e as buildHistoryEntry, f as coerceValue, g as checkLayeredPair, h as formatChangeset, P as PROSE_KEYS, i as markClaudeDraft, j as cleanDraftText, k as docsPrompt, D as DRAFT_LINE_MAX, R as REQUESTS_BRANCH, l as REQUEST_KINDS, s as sanitizeDraftLine, n as parseExplorationBody, E as EXPLORATION_PREFIX, o as explorationSlug, q as explorationStatus, t as explorationTryIt, u as isExplorationPull, v as promotionPlan, w as EXPLORATION_LABEL, x as explorationProblems, y as explorationNote, z as explorationNotePath, A as explorationPrTitle, B as explorationPrBody, C as variantKeyOf, F as overrideComment, O as OVERRIDE_HEADING, H as overrideRefusedComment, I as suggestionStateFromLabels, J as suggestionStatus, K as composeRequestIssue, L as EXPLORATION_NOTES_DIR, M as isExplorationBranch, N as diffLayered, Q as contrastDelta, S as runLayeredContrast, T as layeredImpact, U as classifyLayered, V as composeProposalBody, W as createSuggestionOnGitHub, X as gitBlobSha, Y as SUGGESTION_SCHEMA, Z as branchWithJiraKey, _ as titleWithJiraKey, $ as figmaSpecPath, a0 as formatFigmaSpec, a1 as figmaDraftBrief, a2 as parseFigmaOrigin, a3 as figmaPushStatus, a4 as parseFigmaSpec, a5 as FIGMA_SPEC_DIR, a6 as FROM_FIGMA_LABEL, a7 as withFigmaOrigin, a8 as WAITING_FOR_CLAUDE_LABEL, a9 as DRAFTED_BY_CLAUDE_LABEL, aa as planComponentPush, ab as figmaOriginSection, ac as figmaBranchTitle, ad as figmaSpecSlug, ae as figmaDraftBody, af as REQUEST_LABEL } from "./suggestion-apply-ByBEYtct.js";
4
- import { ag as ag2, ah as ah2, ai as ai2, aj as aj2, ak as ak2, al as al2, am as am2, an as an2, ao as ao2, ap as ap2, aq as aq2, ar as ar2, as as as2, at as at2, au as au2, av as av2, aw as aw2, ax as ax2, ay as ay2, az as az2, aA as aA2, aB as aB2, aC as aC2, aD as aD2, aE as aE2, aF as aF2, aG as aG2, aH as aH2, aI as aI2, aJ as aJ2, aK as aK2, aL as aL2, aM as aM2, aN as aN2, aO as aO2, aP as aP2, aQ as aQ2, aR as aR2, aS as aS2, aT as aT2, aU as aU2, aV as aV2, aW as aW2, aX as aX2, aY as aY2, aZ as aZ2, a_ as a_2, a$ as a$2, b0 as b02, b1 as b12, b2 as b22, b3 as b32, b4 as b42, b5 as b52, b6 as b62, b7 as b72, b8 as b82, b9 as b92, ba as ba2, bb as bb2, bc as bc2, bd as bd2, be as be2, bf as bf2, bg as bg2, bh as bh2, bi as bi2, bj as bj2, bk as bk2, bl as bl2, bm as bm2, bn as bn2, bo as bo2, bp as bp2, bq as bq2, br as br2, bs as bs2, bt as bt2, bu as bu2, bv as bv2, bw as bw2, bx as bx2, by as by2, bz as bz2, bA as bA2, bB as bB2, bC as bC2, bD as bD2, bE as bE2, bF as bF2, bG as bG2, bH as bH2, bI as bI2, bJ as bJ2, bK as bK2, bL as bL2, bM as bM2, bN as bN2, bO as bO2, bP as bP2, bQ as bQ2, bR as bR2, bS as bS2, bT as bT2, bU as bU2, bV as bV2, bW as bW2, bX as bX2, bY as bY2, bZ as bZ2, b_ as b_2, b$ as b$2, c0 as c02, c1 as c12, c2 as c22, c3 as c32, c4 as c42, c5 as c52, c6 as c62, c7 as c72, c8 as c82, c9 as c92, ca as ca2, cb as cb2, cc as cc2, cd as cd2, ce as ce2, cf as cf2, cg as cg2, ch as ch2, ci as ci2, cj as cj2, ck as ck2, cl as cl2, cm as cm2, cn as cn2, co as co2, cp, cq, cr, cs, ct, cu, cv, cw, cx, cy, cz, cA, cB, cC, cD, cE, cF, cG, cH, cI, cJ, cK, cL, cM, cN, cO, cP, cQ, cR, cS, cT, cU, cV, cW, cX, cY, cZ, c_, c$, d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df, dg } from "./suggestion-apply-ByBEYtct.js";
3
+ import { G as GitHubError, c as collectHistory, p as packageDirCandidates, a as parseChangelog, r as releasesFromTags, m as mergeReleases, b as buildReport, d as applyTokenEdits, e as buildHistoryEntry, f as coerceValue, g as checkLayeredPair, h as formatChangeset, P as PROSE_KEYS, i as markClaudeDraft, j as cleanDraftText, k as docsPrompt, D as DRAFT_LINE_MAX, R as REQUESTS_BRANCH, l as REQUEST_KINDS, s as sanitizeDraftLine, n as parseExplorationBody, E as EXPLORATION_PREFIX, o as explorationSlug, q as explorationStatus, t as explorationTryIt, u as isExplorationPull, v as promotionPlan, w as EXPLORATION_LABEL, x as explorationProblems, y as explorationNote, z as explorationNotePath, A as explorationPrTitle, B as explorationPrBody, C as variantKeyOf, F as overrideComment, O as OVERRIDE_HEADING, H as overrideRefusedComment, I as suggestionStateFromLabels, J as suggestionStatus, K as composeRequestIssue, L as EXPLORATION_NOTES_DIR, M as isExplorationBranch, N as diffLayered, Q as contrastDelta, S as runLayeredContrast, T as layeredImpact, U as classifyLayered, V as composeProposalBody, W as createSuggestionOnGitHub, X as gitBlobSha, Y as SUGGESTION_SCHEMA, Z as branchWithJiraKey, _ as titleWithJiraKey, $ as figmaSpecPath, a0 as formatFigmaSpec, a1 as figmaDraftBrief, a2 as parseFigmaOrigin, a3 as figmaPushStatus, a4 as parseFigmaSpec, a5 as FIGMA_SPEC_DIR, a6 as FROM_FIGMA_LABEL, a7 as withFigmaOrigin, a8 as WAITING_FOR_CLAUDE_LABEL, a9 as DRAFTED_BY_CLAUDE_LABEL, aa as planComponentPush, ab as figmaOriginSection, ac as figmaBranchTitle, ad as figmaSpecSlug, ae as figmaDraftBody, af as REQUEST_LABEL, ag as figmaNodeUrl } from "./suggestion-apply-DxXRGQrO.js";
4
+ import { ah as ah2, ai as ai2, aj as aj2, ak as ak2, al as al2, am as am2, an as an2, ao as ao2, ap as ap2, aq as aq2, ar as ar2, as as as2, at as at2, au as au2, av as av2, aw as aw2, ax as ax2, ay as ay2, az as az2, aA as aA2, aB as aB2, aC as aC2, aD as aD2, aE as aE2, aF as aF2, aG as aG2, aH as aH2, aI as aI2, aJ as aJ2, aK as aK2, aL as aL2, aM as aM2, aN as aN2, aO as aO2, aP as aP2, aQ as aQ2, aR as aR2, aS as aS2, aT as aT2, aU as aU2, aV as aV2, aW as aW2, aX as aX2, aY as aY2, aZ as aZ2, a_ as a_2, a$ as a$2, b0 as b02, b1 as b12, b2 as b22, b3 as b32, b4 as b42, b5 as b52, b6 as b62, b7 as b72, b8 as b82, b9 as b92, ba as ba2, bb as bb2, bc as bc2, bd as bd2, be as be2, bf as bf2, bg as bg2, bh as bh2, bi as bi2, bj as bj2, bk as bk2, bl as bl2, bm as bm2, bn as bn2, bo as bo2, bp as bp2, bq as bq2, br as br2, bs as bs2, bt as bt2, bu as bu2, bv as bv2, bw as bw2, bx as bx2, by as by2, bz as bz2, bA as bA2, bB as bB2, bC as bC2, bD as bD2, bE as bE2, bF as bF2, bG as bG2, bH as bH2, bI as bI2, bJ as bJ2, bK as bK2, bL as bL2, bM as bM2, bN as bN2, bO as bO2, bP as bP2, bQ as bQ2, bR as bR2, bS as bS2, bT as bT2, bU as bU2, bV as bV2, bW as bW2, bX as bX2, bY as bY2, bZ as bZ2, b_ as b_2, b$ as b$2, c0 as c02, c1 as c12, c2 as c22, c3 as c32, c4 as c42, c5 as c52, c6 as c62, c7 as c72, c8 as c82, c9 as c92, ca as ca2, cb as cb2, cc as cc2, cd as cd2, ce as ce2, cf as cf2, cg as cg2, ch as ch2, ci as ci2, cj as cj2, ck as ck2, cl as cl2, cm as cm2, cn as cn2, co as co2, cp, cq, cr, cs, ct, cu, cv, cw, cx, cy, cz, cA, cB, cC, cD, cE, cF, cG, cH, cI, cJ, cK, cL, cM, cN, cO, cP, cQ, cR, cS, cT, cU, cV, cW, cX, cY, cZ, c_, c$, d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df, dg, dh } from "./suggestion-apply-DxXRGQrO.js";
5
5
  const issueKey$1 = (i) => `${i.code}|${i.path ?? ""}|${i.mode ?? ""}|${i.code === "file-problem" ? i.message : ""}`;
6
6
  const modeName = (mode) => mode === SINGLE_MODE ? "all modes" : modeDisplayName(mode);
7
7
  const isPalette = (t2) => t2.tier === "brand" && t2.path.startsWith("palette.");
@@ -52,7 +52,7 @@ function checkValue(set, owner, value, mode, where, issues) {
52
52
  });
53
53
  }
54
54
  }
55
- function validateSet(set, pairs) {
55
+ function validateSet(set, pairs2) {
56
56
  const issues = [];
57
57
  for (const p2 of set.problems) issues.push({ code: "file-problem", severity: "error", message: p2 });
58
58
  for (const t2 of set.tokens.values()) {
@@ -119,7 +119,7 @@ function validateSet(set, pairs) {
119
119
  }
120
120
  );
121
121
  }
122
- const contrast = evaluatePairs(set.byPath, pairs, contrastScope(set));
122
+ const contrast = evaluatePairs(set.byPath, pairs2, contrastScope(set));
123
123
  for (const r of contrast) {
124
124
  const path = `${r.pair.foreground} on ${r.pair.background}`;
125
125
  const mode = `${r.brand ?? ""}.${r.theme}`;
@@ -154,9 +154,9 @@ function shadowedEdits(set, edits) {
154
154
  }
155
155
  return out;
156
156
  }
157
- function validateProposal(proposed, head, pairs, typeChanges = []) {
158
- const after = validateSet(proposed, pairs);
159
- const before = validateSet(head, pairs);
157
+ function validateProposal(proposed, head, pairs2, typeChanges = []) {
158
+ const after = validateSet(proposed, pairs2);
159
+ const before = validateSet(head, pairs2);
160
160
  const existing = new Set(before.issues.map(issueKey$1));
161
161
  const blocking = [];
162
162
  const warnings = [];
@@ -1112,7 +1112,7 @@ const RADIUS_ROLES = ["inset", "control", "container", "overlay"];
1112
1112
  const RESERVED = /* @__PURE__ */ new Set(["default", "base", "all", "none", "new", "blank", "primitives", "semantic", "components", "density"]);
1113
1113
  const BRAND_SLUG_RE = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
1114
1114
  const DEFAULT_PRIMARY_CHROMA = 0.14;
1115
- const isObj = (x) => !!x && typeof x === "object" && !Array.isArray(x);
1115
+ const isObj$1 = (x) => !!x && typeof x === "object" && !Array.isArray(x);
1116
1116
  const fileMap = (f) => f instanceof Map ? new Map(f) : new Map(Object.entries(f));
1117
1117
  const brandDisplayName = (slug) => slug.split("-").filter(Boolean).map((w) => w[0].toUpperCase() + w.slice(1)).join(" ");
1118
1118
  function brandLayers(config) {
@@ -1133,27 +1133,27 @@ function setAt(doc, path, node) {
1133
1133
  const keys = path.split(".");
1134
1134
  let cur = doc;
1135
1135
  for (const k of keys.slice(0, -1)) {
1136
- if (!isObj(cur[k])) cur[k] = {};
1136
+ if (!isObj$1(cur[k])) cur[k] = {};
1137
1137
  cur = cur[k];
1138
1138
  }
1139
1139
  const last = keys[keys.length - 1];
1140
- const prev = isObj(cur[last]) ? cur[last] : {};
1140
+ const prev = isObj$1(cur[last]) ? cur[last] : {};
1141
1141
  cur[last] = { ...prev, ...node };
1142
1142
  }
1143
1143
  function getAt(doc, path) {
1144
1144
  let cur = doc;
1145
- for (const k of path.split(".")) cur = isObj(cur) ? cur[k] : void 0;
1146
- return isObj(cur) ? cur : void 0;
1145
+ for (const k of path.split(".")) cur = isObj$1(cur) ? cur[k] : void 0;
1146
+ return isObj$1(cur) ? cur : void 0;
1147
1147
  }
1148
1148
  function typeAt(doc, path) {
1149
1149
  let cur = doc;
1150
1150
  let type;
1151
1151
  for (const k of path.split(".")) {
1152
- if (!isObj(cur)) return type;
1152
+ if (!isObj$1(cur)) return type;
1153
1153
  if (typeof cur.$type === "string") type = cur.$type;
1154
1154
  cur = cur[k];
1155
1155
  }
1156
- return isObj(cur) && typeof cur.$type === "string" ? cur.$type : type;
1156
+ return isObj$1(cur) && typeof cur.$type === "string" ? cur.$type : type;
1157
1157
  }
1158
1158
  function rampFor(input, pinStep, kind) {
1159
1159
  if (typeof input === "number" || typeof input === "string" && /^\d+(\.\d+)?$/.test(input.trim())) {
@@ -1210,7 +1210,7 @@ function listBrands(source) {
1210
1210
  doc = JSON.parse(files.get(file) ?? "{}");
1211
1211
  } catch {
1212
1212
  }
1213
- const meta = isObj(doc.$extensions) && isObj(doc.$extensions["dev.bridge.brand"]) ? doc.$extensions["dev.bridge.brand"] : {};
1213
+ const meta = isObj$1(doc.$extensions) && isObj$1(doc.$extensions["dev.bridge.brand"]) ? doc.$extensions["dev.bridge.brand"] : {};
1214
1214
  const combo = set.normalizeCombo({ brand: slug });
1215
1215
  const primary = set.resolve("color.action.primary.bg", combo);
1216
1216
  const overrides = layers.override ? (config.axes[layers.overrideAxis]?.values ?? []).map((v) => fill(layers.override, { brand: slug, [layers.overrideAxis]: v })).filter((f) => files.has(f)) : [];
@@ -1300,7 +1300,7 @@ function planNewBrand(source, input) {
1300
1300
  for (const [path, defs] of before.view(before.defaultCombo)) {
1301
1301
  const m = /^radius\.([\w-]+)$/.exec(path);
1302
1302
  const v = defs[defs.length - 1].value;
1303
- if (m && isObj(v) && typeof v.value === "number" && v.unit === "px" && !getAt(doc, path)) scale.set(v.value, m[1]);
1303
+ if (m && isObj$1(v) && typeof v.value === "number" && v.unit === "px" && !getAt(doc, path)) scale.set(v.value, m[1]);
1304
1304
  }
1305
1305
  const radius = input.radius ?? (blank ? RADIUS_PRESETS[0].radius : void 0);
1306
1306
  if (radius) {
@@ -1339,9 +1339,9 @@ function planNewBrand(source, input) {
1339
1339
  }
1340
1340
  const palette = getAt(doc, "palette");
1341
1341
  for (const [role, group] of Object.entries(palette ?? {})) {
1342
- if (role.startsWith("$") || !isObj(group)) continue;
1342
+ if (role.startsWith("$") || !isObj$1(group)) continue;
1343
1343
  for (const [step, node] of Object.entries(group)) {
1344
- if (step.startsWith("$") || !isObj(node) || !("$value" in node) || typeof node.$value === "string") continue;
1344
+ if (step.startsWith("$") || !isObj$1(node) || !("$value" in node) || typeof node.$value === "string") continue;
1345
1345
  const ramp = `${slug}-${role}`;
1346
1346
  const entry = prims.get(ramp) ?? { description: `${name} ${role}. Exact values set when the brand was created.`, steps: /* @__PURE__ */ new Map() };
1347
1347
  entry.steps.set(Number(step), node.$value);
@@ -1354,7 +1354,7 @@ function planNewBrand(source, input) {
1354
1354
  if (prims.size && files.has(primFile)) issues.push({ level: "error", code: "slug-file-exists", message: `${tokensPath(config, primFile)} already exists. Pick another name.` });
1355
1355
  for (const r of prims.keys()) if (before.allPaths().some((p2) => p2.startsWith(`color.${r}.`))) issues.push({ level: "error", code: "ramp-exists", message: `A primitive ramp color.${r} already exists. Pick another name.` });
1356
1356
  doc.$description = `${name}: created with Bridge, started from ${blank ? "a blank brand" : brandDisplayName(from)}.`;
1357
- doc.$extensions = { ...isObj(doc.$extensions) ? doc.$extensions : {}, "dev.bridge.brand": { name, from, ...Object.keys(anchors).length ? { anchors } : {} } };
1357
+ doc.$extensions = { ...isObj$1(doc.$extensions) ? doc.$extensions : {}, "dev.bridge.brand": { name, from, ...Object.keys(anchors).length ? { anchors } : {} } };
1358
1358
  const { $description, $extensions, ...rest } = doc;
1359
1359
  const brandFile = fill(layers.brand, { brand: slug });
1360
1360
  const nextFiles = new Map(files);
@@ -1406,10 +1406,10 @@ function planNewBrand(source, input) {
1406
1406
  if (i.modes && !i.modes.some((m) => m.split(",").includes(brandKey)) && !created.includes(i.file ?? "")) continue;
1407
1407
  issues.push({ level: i.level, code: i.code, message: i.message, ...i.path ? { path: i.path } : {}, ...i.file ? { file: tokensPath(config, i.file) } : {} });
1408
1408
  }
1409
- const pairs = parseContrastChecks(source.contrastText);
1409
+ const pairs2 = parseContrastChecks(source.contrastText);
1410
1410
  const inGate = nextConfig.axes.brand?.values.includes(slug);
1411
1411
  const combos = inGate ? after.combos(nextConfig.contrast?.modes).filter((c) => c.brand === slug) : [];
1412
- const results = combos.flatMap((c) => pairs.map((p2) => checkLayeredPair(after, p2, c)));
1412
+ const results = combos.flatMap((c) => pairs2.map((p2) => checkLayeredPair(after, p2, c)));
1413
1413
  const failing = results.filter((r) => !r.pass);
1414
1414
  const themes = [...new Set(combos.map((c) => c.theme).filter((t2) => !!t2))];
1415
1415
  const ramps = {};
@@ -1780,7 +1780,7 @@ function composePendingDrafts(input) {
1780
1780
  return p2;
1781
1781
  }
1782
1782
  const KINDS = new Set(REQUEST_KINDS.map((k) => k.value));
1783
- const str = (x) => typeof x === "string";
1783
+ const str$1 = (x) => typeof x === "string";
1784
1784
  const optStr = (x) => x === void 0 || typeof x === "string";
1785
1785
  function validatePendingDrafts(x) {
1786
1786
  const out = [];
@@ -1788,7 +1788,7 @@ function validatePendingDrafts(x) {
1788
1788
  const p2 = x;
1789
1789
  if (p2.version !== DRAFT_EXCHANGE_VERSION) out.push(`Unsupported draft session version ${String(p2.version)}: update Bridge.`);
1790
1790
  if (!isDraftSessionId(p2.sessionId)) out.push("The session id is missing or invalid.");
1791
- if (!str(p2.createdAt) || Number.isNaN(Date.parse(p2.createdAt))) out.push("createdAt must be an ISO date.");
1791
+ if (!str$1(p2.createdAt) || Number.isNaN(Date.parse(p2.createdAt))) out.push("createdAt must be an ISO date.");
1792
1792
  if (p2.status !== "pending" && p2.status !== "drafted") out.push('status must be "pending" or "drafted".');
1793
1793
  if (p2.source !== "figma" && p2.source !== "studio") out.push('source must be "figma" or "studio".');
1794
1794
  if (!Array.isArray(p2.items) || !p2.items.length) out.push("A draft session needs at least one item.");
@@ -1799,32 +1799,32 @@ function validatePendingDrafts(x) {
1799
1799
  out.push(`${at3} is not an object.`);
1800
1800
  continue;
1801
1801
  }
1802
- if (!str(i.id) || !i.id) out.push(`${at3} has no id.`);
1802
+ if (!str$1(i.id) || !i.id) out.push(`${at3} has no id.`);
1803
1803
  else if (ids.has(i.id)) out.push(`${at3} repeats the id "${i.id}".`);
1804
1804
  else ids.add(i.id);
1805
1805
  if (i.scope !== "request" && i.scope !== "push" && i.scope !== "docs") out.push(`${at3}: scope must be "request", "push" or "docs".`);
1806
1806
  if (i.scope === "docs") {
1807
1807
  const d = i.docs;
1808
- if (!d || typeof d !== "object" || !str(d.slug) || !d.slug || !str(d.prompt) || !d.prompt || !optStr(d.path)) out.push(`${at3}: a docs item needs docs {slug, task, prompt}.`);
1808
+ if (!d || typeof d !== "object" || !str$1(d.slug) || !d.slug || !str$1(d.prompt) || !d.prompt || !optStr(d.path)) out.push(`${at3}: a docs item needs docs {slug, task, prompt}.`);
1809
1809
  else out.push(...validateDocsTask(d.task).map((m) => `${at3}: ${m}`));
1810
1810
  } else if (i.docs !== void 0) out.push(`${at3}: only a docs item has docs.`);
1811
1811
  if (!optStr(i.component)) out.push(`${at3}: component must be text.`);
1812
1812
  if (i.kind !== void 0 && !KINDS.has(i.kind)) out.push(`${at3}: unknown kind "${String(i.kind)}".`);
1813
- if (!Array.isArray(i.changes) || i.changes.some((c) => !c || !str(c.field) || !optStr(c.before) || !optStr(c.after))) out.push(`${at3}: changes must be a list of {field, before, after}.`);
1814
- if (i.variables !== void 0 && (!Array.isArray(i.variables) || i.variables.some((v) => !v || !str(v.path)))) out.push(`${at3}: variables must be a list of {path, before, after}.`);
1813
+ if (!Array.isArray(i.changes) || i.changes.some((c) => !c || !str$1(c.field) || !optStr(c.before) || !optStr(c.after))) out.push(`${at3}: changes must be a list of {field, before, after}.`);
1814
+ if (i.variables !== void 0 && (!Array.isArray(i.variables) || i.variables.some((v) => !v || !str$1(v.path)))) out.push(`${at3}: variables must be a list of {path, before, after}.`);
1815
1815
  if (i.variables !== void 0 && i.scope !== "push") out.push(`${at3}: only a push item has variables.`);
1816
- if (i.images !== void 0 && (!Array.isArray(i.images) || i.images.some((m) => !m || m.label !== "before" && m.label !== "after" || !str(m.url)))) out.push(`${at3}: images must be a list of {label: before or after, url}.`);
1817
- if (!i.draft || !str(i.draft.title) || !str(i.draft.summary)) out.push(`${at3}: draft must hold a title and a summary.`);
1818
- if (i.lines !== void 0 && (!Array.isArray(i.lines) || i.lines.some((l) => !l || !str(l.id) || !l.id || !str(l.line) || !optStr(l.title) || !Array.isArray(l.changes)))) out.push(`${at3}: lines must be a list of {id, changes, line, title}.`);
1816
+ if (i.images !== void 0 && (!Array.isArray(i.images) || i.images.some((m) => !m || m.label !== "before" && m.label !== "after" || !str$1(m.url)))) out.push(`${at3}: images must be a list of {label: before or after, url}.`);
1817
+ if (!i.draft || !str$1(i.draft.title) || !str$1(i.draft.summary)) out.push(`${at3}: draft must hold a title and a summary.`);
1818
+ if (i.lines !== void 0 && (!Array.isArray(i.lines) || i.lines.some((l) => !l || !str$1(l.id) || !l.id || !str$1(l.line) || !optStr(l.title) || !Array.isArray(l.changes)))) out.push(`${at3}: lines must be a list of {id, changes, line, title}.`);
1819
1819
  }
1820
1820
  if (p2.results !== void 0) {
1821
1821
  if (!Array.isArray(p2.results)) out.push("results must be a list.");
1822
1822
  else
1823
1823
  for (const r of p2.results) {
1824
- if (!r || !str(r.id) || !str(r.title) || !str(r.summary)) out.push("Each result needs an id, a title and a summary.");
1824
+ if (!r || !str$1(r.id) || !str$1(r.title) || !str$1(r.summary)) out.push("Each result needs an id, a title and a summary.");
1825
1825
  else if (r.docs !== void 0 && (!r.docs || typeof r.docs !== "object" || Array.isArray(r.docs))) out.push("Result docs must be an object of sections.");
1826
1826
  else if (!optStr(r.replacement)) out.push("A result replacement must be text.");
1827
- else if (r.lines !== void 0 && (!Array.isArray(r.lines) || r.lines.some((l) => !l || !str(l.id) || !str(l.line) || !optStr(l.title)))) out.push("Result lines must be a list of {id, line, title}.");
1827
+ else if (r.lines !== void 0 && (!Array.isArray(r.lines) || r.lines.some((l) => !l || !str$1(l.id) || !str$1(l.line) || !optStr(l.title)))) out.push("Result lines must be a list of {id, line, title}.");
1828
1828
  }
1829
1829
  }
1830
1830
  return out;
@@ -3084,7 +3084,8 @@ function componentSpecSuggestionPayload(d, plan, ctx) {
3084
3084
  const spec = JSON.parse(formatFigmaSpec(d, plan));
3085
3085
  const brief = figmaDraftBrief({ ...d, tokenEdits: plan.edits, reasons: plan.reasons }, { suggestion: true, specPath, componentsDir: ctx.componentsDir });
3086
3086
  const by3 = (ctx.suggestedBy ?? d.requestedBy)?.replace(/^@/, "");
3087
- const figma = d.figma?.fileKey || d.figma?.nodeId || d.figma?.url ? { ...d.figma.fileKey ? { fileKey: d.figma.fileKey } : {}, ...d.figma.nodeId ? { nodeId: d.figma.nodeId } : {}, ...d.figma.url ? { url: d.figma.url } : {} } : void 0;
3087
+ const figma = d.figma?.fileKey || d.figma?.nodeId || d.figma?.url ? { ...d.figma.fileKey ? { fileKey: d.figma.fileKey } : {}, ...d.figma.nodeId ? { nodeId: d.figma.nodeId } : {}, ...d.figma.url ? { url: d.figma.url } : {}, ...figmaNodes(d) } : void 0;
3088
+ const previews = (d.images ?? []).map((url, i) => ({ label: `${d.component} in Figma${(d.images?.length ?? 0) > 1 ? ` ${i + 1}` : ""}`, url }));
3088
3089
  return {
3089
3090
  schema: SUGGESTION_SCHEMA,
3090
3091
  kind: "component-spec",
@@ -3097,9 +3098,19 @@ function componentSpecSuggestionPayload(d, plan, ctx) {
3097
3098
  tier: specTier(d),
3098
3099
  componentSpec: { component: d.component, specPath, spec, brief },
3099
3100
  checks: { newErrors: 0, contrast: [], blocked: null, impact: 0 },
3100
- ...figma ? { links: { figma } } : {}
3101
+ ...figma ? { links: { figma } } : {},
3102
+ ...previews.length ? { previews } : {}
3101
3103
  };
3102
3104
  }
3105
+ function figmaNodes(d) {
3106
+ const f = d.figma;
3107
+ if (!f) return {};
3108
+ const url = (id, given) => given ?? (f.fileKey ? figmaNodeUrl(f.fileKey, id) : void 0);
3109
+ const nodes = [];
3110
+ if (f.before?.nodeId) nodes.push({ nodeId: f.before.nodeId, state: "before", ...url(f.before.nodeId, f.before.url) ? { url: url(f.before.nodeId, f.before.url) } : {}, ...f.before.nodeName ? { name: f.before.nodeName } : {} });
3111
+ if (f.nodeId) nodes.push({ nodeId: f.nodeId, state: "after", ...url(f.nodeId, f.url) ? { url: url(f.nodeId, f.url) } : {}, ...f.nodeName ? { name: f.nodeName } : {} });
3112
+ return nodes.length ? { nodes } : {};
3113
+ }
3103
3114
  async function openComponentPushOnGitHub(gh, input) {
3104
3115
  const d = input.diff;
3105
3116
  if (!input.plan && !input.tokens) throw new Error("Route the change first: pass the token facts or the plan.");
@@ -3120,7 +3131,7 @@ async function openComponentPushOnGitHub(gh, input) {
3120
3131
  };
3121
3132
  if (plan.route === "token-change") {
3122
3133
  if (!input.writeTokens) throw new GitHubError(422, "This change is a token change: send it where the token files are read (the DS Bridge plugin, bridge_push_figma_component or `bridge figma push`).");
3123
- const figma = { ...origin.fileKey ? { fileKey: origin.fileKey } : {}, ...origin.nodeId ? { nodeId: origin.nodeId } : {}, ...origin.url ? { url: origin.url } : {} };
3134
+ const figma = { ...origin.fileKey ? { fileKey: origin.fileKey } : {}, ...origin.nodeId ? { nodeId: origin.nodeId } : {}, ...origin.url ? { url: origin.url } : {}, ...figmaNodes(d) };
3124
3135
  const r = await input.writeTokens({ edits: plan.edits, title: figmaBranchTitle(d), summary: d.summary.trim() || d.title, bodyExtra: [figmaOriginSection(origin)], mode, figma });
3125
3136
  await gh.addLabels(r.number, [FROM_FIGMA_LABEL]);
3126
3137
  if (r.status === "suggested") return { status: "suggested", plan, link: null, suggestion: { route: "token-change", number: r.number, url: r.url } };
@@ -3199,6 +3210,149 @@ async function figmaPushStatusesOnGitHub(gh, numbers) {
3199
3210
  );
3200
3211
  return out;
3201
3212
  }
3213
+ class StorybookIndexError extends Error {
3214
+ constructor(code2, message, status) {
3215
+ super(message);
3216
+ this.code = code2;
3217
+ this.status = status;
3218
+ this.name = "StorybookIndexError";
3219
+ }
3220
+ code;
3221
+ status;
3222
+ }
3223
+ const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
3224
+ const str = (v) => typeof v === "string" && v.trim() ? v : void 0;
3225
+ function entryFrom(key, raw, v3) {
3226
+ if (!isObj(raw)) return null;
3227
+ const id = str(raw.id) ?? key;
3228
+ const title = str(raw.title) ?? str(raw.kind);
3229
+ const name = str(raw.name) ?? str(raw.story);
3230
+ if (!id || !title || !name) return null;
3231
+ const params = isObj(raw.parameters) ? raw.parameters : {};
3232
+ const type = raw.type === "docs" || raw.type === "story" ? raw.type : v3 && params.docsOnly === true ? "docs" : "story";
3233
+ const e = {
3234
+ id,
3235
+ title,
3236
+ name,
3237
+ type,
3238
+ importPath: str(raw.importPath) ?? str(params.fileName) ?? "",
3239
+ tags: Array.isArray(raw.tags) ? raw.tags.filter((t2) => typeof t2 === "string") : []
3240
+ };
3241
+ const subtype = str(raw.subtype);
3242
+ if (subtype) e.subtype = subtype;
3243
+ const exportName2 = str(raw.exportName);
3244
+ if (exportName2) e.exportName = exportName2;
3245
+ const componentPath = str(raw.componentPath);
3246
+ if (componentPath) e.componentPath = componentPath;
3247
+ return e;
3248
+ }
3249
+ function groupStorybookComponents(entries) {
3250
+ const byTitle = /* @__PURE__ */ new Map();
3251
+ for (const e of entries) {
3252
+ let c = byTitle.get(e.title);
3253
+ if (!c) {
3254
+ const parts = e.title.split("/").map((p2) => p2.trim()).filter(Boolean);
3255
+ c = { title: e.title, name: parts[parts.length - 1] ?? e.title, group: parts.slice(0, -1), stories: [], docs: [], tags: [] };
3256
+ byTitle.set(e.title, c);
3257
+ }
3258
+ if (e.type === "docs") c.docs.push(e);
3259
+ else if (e.subtype !== "test") c.stories.push(e);
3260
+ for (const t2 of e.tags) if (!c.tags.includes(t2)) c.tags.push(t2);
3261
+ }
3262
+ const out = [...byTitle.values()].filter((c) => c.stories.length || c.docs.length);
3263
+ for (const c of out) c.tags.sort();
3264
+ return out.sort((a2, b) => a2.title.localeCompare(b.title));
3265
+ }
3266
+ function parseStorybookIndex(json, source) {
3267
+ if (!isObj(json)) throw new StorybookIndexError("not-json", "The Storybook index is not a JSON object.");
3268
+ if (typeof json.loginUrl === "string" && !("entries" in json) && !("stories" in json)) {
3269
+ throw new StorybookIndexError("private", "This Storybook is private: it asks for a sign-in before showing its index.");
3270
+ }
3271
+ const map = isObj(json.entries) ? json.entries : isObj(json.stories) ? json.stories : null;
3272
+ if (!map) throw new StorybookIndexError("empty", "This file has no Storybook entries.");
3273
+ const v3 = !isObj(json.entries);
3274
+ const entries = Object.entries(map).map(([k, raw]) => entryFrom(k, raw, v3)).filter((e) => e !== null);
3275
+ if (!entries.length) throw new StorybookIndexError("empty", "This Storybook index lists no stories or docs.");
3276
+ const version = typeof json.v === "number" ? json.v : v3 ? 3 : 4;
3277
+ return { version, source: source ?? (v3 ? "stories.json" : "index.json"), entries, components: groupStorybookComponents(entries) };
3278
+ }
3279
+ function normalizeStorybookUrl(input) {
3280
+ let u;
3281
+ try {
3282
+ u = new URL(input.trim());
3283
+ } catch {
3284
+ throw new StorybookIndexError("invalid-url", "Enter the full Storybook address, for example https://storybook.example.com");
3285
+ }
3286
+ const local = u.hostname === "localhost" || u.hostname === "127.0.0.1" || u.hostname === "[::1]";
3287
+ if (u.protocol !== "https:" && !(u.protocol === "http:" && local)) {
3288
+ throw new StorybookIndexError("invalid-url", "The Storybook address must start with https://");
3289
+ }
3290
+ if (u.username || u.password) throw new StorybookIndexError("invalid-url", "Remove the user name and password from the address.");
3291
+ const path = u.pathname.replace(/\/(index\.html|iframe\.html|index\.json|stories\.json)$/i, "/").replace(/\/+$/, "");
3292
+ return `${u.protocol}//${u.host}${path}`;
3293
+ }
3294
+ const storybookIndexUrls = (base) => {
3295
+ const b = base.replace(/\/+$/, "");
3296
+ return [
3297
+ { url: `${b}/index.json`, source: "index.json" },
3298
+ { url: `${b}/stories.json`, source: "stories.json" }
3299
+ ];
3300
+ };
3301
+ const pairs = (o) => Object.entries(o).map(([k, v]) => `${encodeURIComponent(k)}:${encodeURIComponent(v)}`).join(";");
3302
+ function storybookIframeUrl(base, id, o = {}) {
3303
+ let url = `${base.replace(/\/+$/, "")}/iframe.html?id=${encodeURIComponent(id)}&viewMode=${o.viewMode ?? "story"}`;
3304
+ if (o.globals && Object.keys(o.globals).length) url += `&globals=${pairs(o.globals)}`;
3305
+ if (o.args && Object.keys(o.args).length) url += `&args=${pairs(o.args)}`;
3306
+ return url;
3307
+ }
3308
+ function storybookManagerUrl(base, id, viewMode = "story") {
3309
+ return `${base.replace(/\/+$/, "")}/?path=/${viewMode}/${encodeURIComponent(id)}`;
3310
+ }
3311
+ async function fetchStorybookIndex(base, o = {}) {
3312
+ const doFetch = o.fetch ?? ((url, init) => fetch(url, init));
3313
+ const rank = { private: 6, http: 5, network: 4, empty: 3, "not-json": 2, "not-found": 1, "invalid-url": 0 };
3314
+ let worst = null;
3315
+ const keep = (e) => {
3316
+ if (!worst || rank[e.code] > rank[worst.code]) worst = e;
3317
+ };
3318
+ for (const { url, source } of storybookIndexUrls(base)) {
3319
+ let res;
3320
+ try {
3321
+ res = await doFetch(url, { headers: { accept: "application/json" }, ...o.signal ? { signal: o.signal } : {} });
3322
+ } catch (err) {
3323
+ if (o.signal?.aborted) throw err;
3324
+ keep(new StorybookIndexError("network", `Could not reach ${url}. The host may be down or may not allow reading from another site.`));
3325
+ continue;
3326
+ }
3327
+ if (res.status === 404 || res.status === 410) {
3328
+ keep(new StorybookIndexError("not-found", `No Storybook index at ${base}: neither index.json nor stories.json was found.`, res.status));
3329
+ continue;
3330
+ }
3331
+ if (res.status === 401 || res.status === 403) {
3332
+ keep(new StorybookIndexError("private", "This Storybook is private: it asks for a sign-in before showing its index.", res.status));
3333
+ continue;
3334
+ }
3335
+ if (!res.ok) {
3336
+ keep(new StorybookIndexError("http", `The Storybook host answered ${res.status} for ${url}.`, res.status));
3337
+ continue;
3338
+ }
3339
+ const text = await res.text();
3340
+ let json;
3341
+ try {
3342
+ json = JSON.parse(text);
3343
+ } catch {
3344
+ keep(new StorybookIndexError("not-json", `${url} is not a Storybook index (the host answered with a web page).`));
3345
+ continue;
3346
+ }
3347
+ try {
3348
+ return parseStorybookIndex(json, source);
3349
+ } catch (err) {
3350
+ if (err instanceof StorybookIndexError) keep(err);
3351
+ else throw err;
3352
+ }
3353
+ }
3354
+ throw worst ?? new StorybookIndexError("not-found", `No Storybook index at ${base}.`);
3355
+ }
3202
3356
  export {
3203
3357
  af as AAA_MIN,
3204
3358
  ag as AA_MIN,
@@ -3207,32 +3361,32 @@ export {
3207
3361
  BELL,
3208
3362
  BRAND_FONTS,
3209
3363
  BRAND_SLUG_RE,
3210
- ag2 as BULK_LIMIT,
3364
+ ah2 as BULK_LIMIT,
3211
3365
  ah as CHANGES_MODES,
3212
- ah2 as COLOR_FIELDS,
3366
+ ai2 as COLOR_FIELDS,
3213
3367
  COMBINE_COMPARE_LIMIT,
3214
3368
  COMPARE_FILE_LIMIT,
3215
- ai2 as COMPONENT_SPECS_VERSION,
3369
+ aj2 as COMPONENT_SPECS_VERSION,
3216
3370
  CONFIG_FILE,
3217
- aj2 as CONFLICT_REASON,
3371
+ ak2 as CONFLICT_REASON,
3218
3372
  ai as CONTRAST_CELL_MAX,
3219
3373
  aj as CONTRAST_CHECKS_FILE,
3220
3374
  ak as ConfigError,
3221
3375
  al as DEFAULT_CHANGES_MODE,
3222
- ak2 as DEFAULT_COMPONENT_SPECS_FILE,
3376
+ al2 as DEFAULT_COMPONENT_SPECS_FILE,
3223
3377
  am as DEFAULT_GOVERNANCE,
3224
3378
  an as DEFAULT_OVERRIDE,
3225
3379
  ao as DEFAULT_PRODUCTS,
3226
- al2 as DEFAULT_PROTECTED_BRANCHES,
3380
+ am2 as DEFAULT_PROTECTED_BRANCHES,
3227
3381
  ap as DEFAULT_RIGHTS,
3228
3382
  DEFAULT_TOKEN_PATHS,
3229
3383
  aq as DEFAULT_VISUAL_IMPACT,
3230
3384
  DEMO_RELEASES,
3231
- am2 as DOCS_CHANGE_BUMP,
3385
+ an2 as DOCS_CHANGE_BUMP,
3232
3386
  DOCS_DRAFT_MODEL,
3233
- an2 as DOCS_EDITOR_ORIGIN,
3234
- ao2 as DOCS_KEYS,
3235
- ap2 as DOCS_MCP_ORIGIN,
3387
+ ao2 as DOCS_EDITOR_ORIGIN,
3388
+ ap2 as DOCS_KEYS,
3389
+ aq2 as DOCS_MCP_ORIGIN,
3236
3390
  DOCS_SELECTION_MODES,
3237
3391
  DRAFTED_BY_CLAUDE_LABEL,
3238
3392
  DRAFTS_DIR,
@@ -3247,13 +3401,13 @@ export {
3247
3401
  DRAFT_VOICE_RULES,
3248
3402
  ar as DTCG_TYPES,
3249
3403
  DraftPoller,
3250
- aq2 as EXPLORATION_CHECK,
3404
+ ar2 as EXPLORATION_CHECK,
3251
3405
  EXPLORATION_LABEL,
3252
3406
  EXPLORATION_NOTES_DIR,
3253
3407
  EXPLORATION_PREFIX,
3254
- ar2 as EXPLORATION_STATUS_LABEL,
3255
- as2 as EXPLORATION_TIER_LABEL,
3256
- at2 as EXPLORATION_USE_CASES,
3408
+ as2 as EXPLORATION_STATUS_LABEL,
3409
+ at2 as EXPLORATION_TIER_LABEL,
3410
+ au2 as EXPLORATION_USE_CASES,
3257
3411
  EXT_ID,
3258
3412
  EXT_SCOPES,
3259
3413
  FIDELITY_DEFAULTS,
@@ -3264,7 +3418,7 @@ export {
3264
3418
  FIGMA_REFERENCE_STORY,
3265
3419
  FIGMA_SPEC_DIR,
3266
3420
  FROM_FIGMA_LABEL,
3267
- au2 as GitHubClient,
3421
+ av2 as GitHubClient,
3268
3422
  GitHubError,
3269
3423
  as as JsonParseError,
3270
3424
  LIGHTNESS,
@@ -3287,15 +3441,15 @@ export {
3287
3441
  PROSE_KEYS,
3288
3442
  PROTECTION_PARTS,
3289
3443
  PROTECTION_PART_PHRASE,
3290
- av2 as PULL_STATE_PILL,
3291
- aw2 as ProtectedBranchError,
3444
+ aw2 as PULL_STATE_PILL,
3445
+ ax2 as ProtectedBranchError,
3292
3446
  RADIUS_PRESETS,
3293
- ax2 as REDUCED_MOTION_NOTE,
3447
+ ay2 as REDUCED_MOTION_NOTE,
3294
3448
  REQUESTS_BRANCH,
3295
3449
  REQUEST_KINDS,
3296
3450
  REQUEST_LABEL,
3297
- ay2 as REQUEST_STATUS_LABEL,
3298
- az2 as REVIEW_STATUS_ORDER,
3451
+ az2 as REQUEST_STATUS_LABEL,
3452
+ aA2 as REVIEW_STATUS_ORDER,
3299
3453
  aA as RIGHTS,
3300
3454
  aB as RIGHT_LABEL,
3301
3455
  RISK_LABELS,
@@ -3303,38 +3457,39 @@ export {
3303
3457
  SHARE_EXPLAIN,
3304
3458
  SIMILARITY_THRESHOLD,
3305
3459
  SINGLE_MODE,
3306
- aA2 as SPEC_FIELDS,
3460
+ aB2 as SPEC_FIELDS,
3307
3461
  STEPS,
3308
- aB2 as SUGGESTION_APPLIED_MARK,
3309
- aC2 as SUGGESTION_APPLY_EXIT,
3310
- aD2 as SUGGESTION_KINDS,
3311
- aE2 as SUGGESTION_LABEL,
3312
- aF2 as SUGGESTION_LIMITS,
3313
- aG2 as SUGGESTION_REVIEW_MARK,
3462
+ aC2 as SUGGESTION_APPLIED_MARK,
3463
+ aD2 as SUGGESTION_APPLY_EXIT,
3464
+ aE2 as SUGGESTION_KINDS,
3465
+ aF2 as SUGGESTION_LABEL,
3466
+ aG2 as SUGGESTION_LIMITS,
3467
+ aH2 as SUGGESTION_REVIEW_MARK,
3314
3468
  SUGGESTION_SCHEMA,
3315
- aH2 as SUGGESTION_STATE_LABELS,
3316
- aI2 as SUGGESTION_STATUS_LABEL,
3317
- aJ2 as SUGGESTION_TOO_LARGE,
3318
- aK2 as SuggestionError,
3469
+ aI2 as SUGGESTION_STATE_LABELS,
3470
+ aJ2 as SUGGESTION_STATUS_LABEL,
3471
+ aK2 as SUGGESTION_TOO_LARGE,
3472
+ StorybookIndexError,
3473
+ aL2 as SuggestionError,
3319
3474
  TIER_AXIS,
3320
3475
  TIER_NAMES,
3321
3476
  aD as TIER_ORDER,
3322
- aL2 as TOKEN_REJECTED_MESSAGE,
3323
- aM2 as TOKEN_SETTINGS_URL,
3324
- aN2 as TRIGGER_LABELS,
3477
+ aM2 as TOKEN_REJECTED_MESSAGE,
3478
+ aN2 as TOKEN_SETTINGS_URL,
3479
+ aO2 as TRIGGER_LABELS,
3325
3480
  aE as TeamDirectory,
3326
- aO2 as UNRELEASED,
3481
+ aP2 as UNRELEASED,
3327
3482
  aF as VISUAL_CHECK_LABEL,
3328
3483
  WAITING_FOR_CLAUDE_LABEL,
3329
- aP2 as acceptDocsDraft,
3330
- aQ2 as acceptDocsText,
3484
+ aQ2 as acceptDocsDraft,
3485
+ aR2 as acceptDocsText,
3331
3486
  addBrandToConfigText,
3332
3487
  addedComment,
3333
3488
  aG as affectedContrast,
3334
3489
  aH as aliasOf,
3335
3490
  aliasTarget,
3336
- aR2 as allowedMergeMethods,
3337
- aS2 as anatomyLabel,
3491
+ aS2 as allowedMergeMethods,
3492
+ aT2 as anatomyLabel,
3338
3493
  anchoredRamp,
3339
3494
  anthropicReplyText,
3340
3495
  anthropicRequest,
@@ -3347,10 +3502,10 @@ export {
3347
3502
  aK as approverEntries,
3348
3503
  aL as approverLists,
3349
3504
  askOthersToReviewOnGitHub,
3350
- aT2 as assertSafeBranch,
3351
- aU2 as assignRequestOnGitHub,
3352
- aV2 as assignVersions,
3353
- aW2 as base64ToUtf8,
3505
+ aU2 as assertSafeBranch,
3506
+ aV2 as assignRequestOnGitHub,
3507
+ aW2 as assignVersions,
3508
+ aX2 as base64ToUtf8,
3354
3509
  aM as baseBranchOf,
3355
3510
  bellChroma,
3356
3511
  aN as branchName,
@@ -3359,37 +3514,37 @@ export {
3359
3514
  branchWithJiraKey,
3360
3515
  brandDisplayName,
3361
3516
  brandPreviewVariables,
3362
- aX2 as bridgeMcpInstallCommand,
3517
+ aY2 as bridgeMcpInstallCommand,
3363
3518
  buildFidelityReport,
3364
3519
  buildHistoryEntry,
3365
3520
  buildReport,
3366
3521
  buildTokenSet,
3367
3522
  buildUsageIndex,
3368
3523
  canAddTo,
3369
- aY2 as canOverride,
3524
+ aZ2 as canOverride,
3370
3525
  canShare,
3371
3526
  aP as canShip,
3372
- aZ2 as canonicalJson,
3527
+ a_2 as canonicalJson,
3373
3528
  changeEdits,
3374
3529
  aQ as changeKind,
3375
3530
  changeList,
3376
- a_2 as changeTable,
3531
+ a$2 as changeTable,
3377
3532
  aR as changedModes,
3378
3533
  aS as changesMode,
3379
- a$2 as changesetBump,
3534
+ b02 as changesetBump,
3380
3535
  checkBrandSlug,
3381
3536
  checkLayeredPair,
3382
3537
  choiceFor,
3383
- b02 as classifyAuth,
3538
+ b12 as classifyAuth,
3384
3539
  classifyLayered,
3385
3540
  classifyRisk,
3386
- b12 as cleanDocs,
3541
+ b22 as cleanDocs,
3387
3542
  cleanDocsText,
3388
3543
  cleanDraftText,
3389
3544
  aT as clearRawDeep,
3390
3545
  closeExplorationOnGitHub,
3391
3546
  closeOnGitHub,
3392
- b22 as closingIssueNumbers,
3547
+ b32 as closingIssueNumbers,
3393
3548
  coerceValue,
3394
3549
  collectHistory,
3395
3550
  collectRefs,
@@ -3400,54 +3555,54 @@ export {
3400
3555
  combineConflicts,
3401
3556
  aW as comboKey,
3402
3557
  commentOnGitHub,
3403
- b32 as commitFileOnGitHub,
3558
+ b42 as commitFileOnGitHub,
3404
3559
  commitLibraryResolution,
3405
3560
  aX as commitMessage,
3406
3561
  aY as compactJson,
3407
3562
  compareImages,
3408
- b42 as componentContrastPairs,
3563
+ b52 as componentContrastPairs,
3409
3564
  componentForPath,
3410
- b52 as componentMotion,
3565
+ b62 as componentMotion,
3411
3566
  componentSpecSuggestionPayload,
3412
- b62 as componentsUsingMotionToken,
3413
- b72 as composeChangeset,
3567
+ b72 as componentsUsingMotionToken,
3568
+ b82 as composeChangeset,
3414
3569
  composeFiles,
3415
3570
  composeNewBrandBody,
3416
3571
  composePendingDrafts,
3417
3572
  aZ as composePrBody,
3418
3573
  composeProposalBody,
3419
3574
  composeRequestIssue,
3420
- b82 as composeSuggestionAppliedComment,
3421
- b92 as composeSuggestionIssue,
3422
- ba2 as composeSuggestionReviewComment,
3575
+ b92 as composeSuggestionAppliedComment,
3576
+ ba2 as composeSuggestionIssue,
3577
+ bb2 as composeSuggestionReviewComment,
3423
3578
  a_ as composite,
3424
3579
  conflictRoute,
3425
3580
  a$ as contextFor,
3426
3581
  contextLabel,
3427
- bb2 as continueDocsProposalOnGitHub,
3582
+ bc2 as continueDocsProposalOnGitHub,
3428
3583
  contrastDelta,
3429
- bc2 as contrastDeltaTable,
3584
+ bd2 as contrastDeltaTable,
3430
3585
  b0 as contrastLevel,
3431
3586
  b1 as contrastPair,
3432
3587
  b2 as contrastRatio,
3433
3588
  contrastScope,
3434
- bd2 as countChanges,
3435
- be2 as coverageSummary,
3589
+ be2 as countChanges,
3590
+ bf2 as coverageSummary,
3436
3591
  createDocsDraftSession,
3437
3592
  createPendingDrafts,
3438
3593
  createSuggestionOnGitHub,
3439
- bf2 as cssModuleClasses,
3594
+ bg2 as cssModuleClasses,
3440
3595
  cssOf,
3441
3596
  cssVarOf,
3442
3597
  cssVarsIn,
3443
- bg2 as declineComment,
3444
- bh2 as declineReasonProblems,
3445
- bi2 as declineRequestOnGitHub,
3446
- bj2 as declineSuggestionOnGitHub,
3598
+ bh2 as declineComment,
3599
+ bi2 as declineReasonProblems,
3600
+ bj2 as declineRequestOnGitHub,
3601
+ bk2 as declineSuggestionOnGitHub,
3447
3602
  decodePicks,
3448
3603
  defaultChoiceFor,
3449
3604
  b3 as defaultContext,
3450
- bk2 as defaultDocsFooter,
3605
+ bl2 as defaultDocsFooter,
3451
3606
  defaultFile,
3452
3607
  defaultProduct,
3453
3608
  defaultScopes,
@@ -3458,29 +3613,29 @@ export {
3458
3613
  b6 as detectLayout,
3459
3614
  diffLayered,
3460
3615
  dismissStaleFrom,
3461
- bl2 as docsAuthorLine,
3462
- bm2 as docsFileText,
3616
+ bm2 as docsAuthorLine,
3617
+ bn2 as docsFileText,
3463
3618
  docsPrompt,
3464
- bn2 as docsProposal,
3465
- bo2 as docsSectionShapes,
3619
+ bo2 as docsProposal,
3620
+ bp2 as docsSectionShapes,
3466
3621
  docsSectionsAnswer,
3467
3622
  docsSectionsResult,
3468
3623
  docsSelectionPrompt,
3469
- bp2 as docsSlug,
3470
- bq2 as docsSuggestionPayload,
3624
+ bq2 as docsSlug,
3625
+ br2 as docsSuggestionPayload,
3471
3626
  docsTaskKeys,
3472
3627
  docsTaskPrompt,
3473
- br2 as docsText,
3474
- bs2 as draftChangeLine,
3628
+ bs2 as docsText,
3629
+ bt2 as draftChangeLine,
3475
3630
  draftImagePath,
3476
3631
  draftItemBrief,
3477
- bt2 as draftPushDescription,
3478
- bu2 as draftRequestText,
3632
+ bu2 as draftPushDescription,
3633
+ bv2 as draftRequestText,
3479
3634
  draftSessionPath,
3480
3635
  dtcgColor,
3481
3636
  effectiveScopes,
3482
- bv2 as effectiveTier,
3483
- bw2 as eligibleReviewers,
3637
+ bw2 as effectiveTier,
3638
+ bx2 as eligibleReviewers,
3484
3639
  emptyTokenFile,
3485
3640
  encodePicks,
3486
3641
  ensureRequestsBranch,
@@ -3489,71 +3644,75 @@ export {
3489
3644
  evaluatePairs,
3490
3645
  b9 as expandEntries,
3491
3646
  ba as expandOwners,
3492
- bx2 as explorationBranch,
3647
+ by2 as explorationBranch,
3493
3648
  explorationNote,
3494
3649
  explorationNotePath,
3495
3650
  explorationPrBody,
3496
3651
  explorationPrTitle,
3497
3652
  explorationProblems,
3498
- by2 as explorationRules,
3499
- bz2 as explorationShareMessage,
3653
+ bz2 as explorationRules,
3654
+ bA2 as explorationShareMessage,
3500
3655
  explorationSlug,
3501
- bA2 as explorationSlugFromBranch,
3656
+ bB2 as explorationSlugFromBranch,
3502
3657
  explorationStatus,
3503
3658
  explorationSummary,
3504
3659
  explorationTestBuildOnGitHub,
3505
3660
  explorationTryIt,
3506
3661
  explorationTryItOnGitHub,
3662
+ fetchStorybookIndex,
3507
3663
  fidelityComponentLine,
3508
3664
  fidelityVerdict,
3509
3665
  bb as fieldChanges,
3510
3666
  figmaBranchTitle,
3511
- bB2 as figmaCell,
3667
+ bC2 as figmaCell,
3512
3668
  figmaChangeOnGitHub,
3513
3669
  figmaDraftBody,
3514
3670
  figmaDraftBrief,
3671
+ figmaNodeUrl,
3672
+ figmaNodes,
3515
3673
  figmaOriginSection,
3516
3674
  figmaPushStatus,
3517
3675
  figmaPushStatusesOnGitHub,
3518
3676
  figmaSpecPath,
3519
3677
  figmaSpecSlug,
3520
- bC2 as fileModes,
3521
- bD2 as filterHistory,
3678
+ bD2 as fileModes,
3679
+ bE2 as filterHistory,
3522
3680
  findExplorationOnGitHub,
3523
- bE2 as findOpenDocsProposal,
3524
- bF2 as findOpenDocsProposalOnGitHub,
3681
+ bF2 as findOpenDocsProposal,
3682
+ bG2 as findOpenDocsProposalOnGitHub,
3525
3683
  findPreviewComment,
3526
3684
  bc as findProduct,
3527
3685
  findReferenceProblems,
3528
3686
  bd as findToken,
3529
3687
  be as findVercelComment,
3530
- bG2 as firstParagraph,
3688
+ bH2 as firstParagraph,
3531
3689
  bf as flattenLayerFile,
3532
3690
  flattenTokens,
3533
3691
  formatChangeset,
3534
- bH2 as formatDocsJson,
3692
+ bI2 as formatDocsJson,
3535
3693
  formatFigmaSpec,
3536
3694
  bg as formatNumber,
3537
3695
  bh as formatOwnerEntry,
3538
3696
  formatValue,
3539
3697
  freshness,
3540
- bI2 as friendlyMessage,
3698
+ bJ2 as friendlyMessage,
3541
3699
  fromHex,
3542
3700
  bi as fromPlain,
3543
3701
  generateRamp,
3544
3702
  bj as getChild,
3545
3703
  bk as getEntry,
3546
- bJ2 as getSuggestionOnGitHub,
3704
+ bK2 as getSuggestionOnGitHub,
3547
3705
  gitBlobSha,
3548
3706
  gitHubHistoryBackend,
3549
3707
  bl as globToRegExp,
3708
+ groupStorybookComponents,
3550
3709
  bm as groupsPhrase,
3551
- bK2 as hasSuggestionBlock,
3552
- bL2 as hasWriteAccess,
3553
- bM2 as hashSpec,
3710
+ bL2 as hasSuggestionBlock,
3711
+ bM2 as hasWriteAccess,
3712
+ bN2 as hashSpec,
3554
3713
  bn as hexToRgba,
3555
3714
  bo as holdersOf,
3556
- bN2 as iconComponentName,
3715
+ bO2 as iconComponentName,
3557
3716
  idExtensionFor,
3558
3717
  impactedModules,
3559
3718
  importsIn,
@@ -3561,29 +3720,29 @@ export {
3561
3720
  bq as inheritedTypeAt,
3562
3721
  br as installCommand,
3563
3722
  bs as installCommandFromPreviewComment,
3564
- bO2 as isActiveExploration,
3723
+ bP2 as isActiveExploration,
3565
3724
  isAlias,
3566
- bP2 as isAutomationPull,
3567
- bQ2 as isDocsProposalBranch,
3725
+ bQ2 as isAutomationPull,
3726
+ bR2 as isDocsProposalBranch,
3568
3727
  isDocsSelectionMode,
3569
3728
  isDraftSessionId,
3570
3729
  isExplorationBranch,
3571
3730
  isExplorationPull,
3572
3731
  bt as isGuardrail,
3573
- bR2 as isGuardrailPath,
3732
+ bS2 as isGuardrailPath,
3574
3733
  isHex,
3575
- bS2 as isJiraKey,
3576
- bT2 as isMissingPermission,
3734
+ bT2 as isJiraKey,
3735
+ bU2 as isMissingPermission,
3577
3736
  isMultiMode,
3578
3737
  isPlanRefusal,
3579
3738
  isProseKey,
3580
- bU2 as isReleasePull,
3739
+ bV2 as isReleasePull,
3581
3740
  bu as isTeamEntry,
3582
3741
  bv as isTokenFile,
3583
- bV2 as isTokenRejected,
3742
+ bW2 as isTokenRejected,
3584
3743
  bw as isVercelComment,
3585
- bW2 as jiraIssueFields,
3586
- bX2 as jiraKeyOf,
3744
+ bX2 as jiraIssueFields,
3745
+ bY2 as jiraKeyOf,
3587
3746
  bx as kindForMin,
3588
3747
  layeredImpact,
3589
3748
  by as layeredParityIssues,
@@ -3591,20 +3750,20 @@ export {
3591
3750
  levenshtein,
3592
3751
  libraryBranchPlan,
3593
3752
  libraryPreviewState,
3594
- bY2 as linkRequestToExplorationOnGitHub,
3753
+ bZ2 as linkRequestToExplorationOnGitHub,
3595
3754
  linkStatus,
3596
- bZ2 as linkSuggestionPrOnGitHub,
3755
+ b_2 as linkSuggestionPrOnGitHub,
3597
3756
  linkedLibraryBranchOnGitHub,
3598
- b_2 as linkedPullsOf,
3757
+ b$2 as linkedPullsOf,
3599
3758
  listBrands,
3600
3759
  listExplorationsOnGitHub,
3601
3760
  listFigmaChangesOnGitHub,
3602
3761
  listPendingDrafts,
3603
- b$2 as listSuggestionsOnGitHub,
3762
+ c02 as listSuggestionsOnGitHub,
3604
3763
  loadConfig,
3605
3764
  loadGitHubHistory,
3606
3765
  loadProtection,
3607
- c02 as loadRepoFiles,
3766
+ c12 as loadRepoFiles,
3608
3767
  loadRequiredChecks,
3609
3768
  bz as luminance,
3610
3769
  mailtoHref,
@@ -3612,48 +3771,49 @@ export {
3612
3771
  markFigmaChangeDraftedOnGitHub,
3613
3772
  mergeDocsDraft,
3614
3773
  mergeDraftResults,
3615
- c12 as mergeGate,
3774
+ c22 as mergeGate,
3616
3775
  mergeOnGitHub,
3617
3776
  mergePiecesRecord,
3618
3777
  mergeReleases,
3619
3778
  missingChoices,
3620
- c22 as missingPermissionMessage,
3621
- c32 as missingProse,
3779
+ c32 as missingPermissionMessage,
3780
+ c42 as missingProse,
3622
3781
  modeDisplayName,
3623
3782
  modeFile,
3624
- c42 as modeLabel,
3783
+ c52 as modeLabel,
3625
3784
  modesOf$1 as modesOf,
3626
3785
  moveToken,
3627
3786
  bA as nearestQuestion,
3628
3787
  nearestStep,
3629
3788
  bB as neededBySection,
3630
- c52 as needsDocsReview,
3789
+ c62 as needsDocsReview,
3631
3790
  neutralChroma,
3632
3791
  neutralOffset,
3633
3792
  newBrandSection,
3634
3793
  newDraftSessionId,
3635
3794
  bC as nodesEqual,
3636
3795
  bD as normalizeRights,
3796
+ normalizeStorybookUrl,
3637
3797
  oklch,
3638
3798
  oklchToLinear,
3639
3799
  onlyTokens,
3640
3800
  openComponentPushOnGitHub,
3641
3801
  openLibraryBranchOnGitHub,
3642
- c62 as openPulls,
3802
+ c72 as openPulls,
3643
3803
  overlap,
3644
3804
  overrideComment,
3645
3805
  bE as overrideKey,
3646
3806
  overrideMergeOnGitHub,
3647
- c72 as overrideReasonProblem,
3807
+ c82 as overrideReasonProblem,
3648
3808
  overrideRefusedComment,
3649
3809
  bF as ownerEntryProblems,
3650
3810
  packageDir,
3651
3811
  packageDirCandidates,
3652
3812
  bG as pairKey,
3653
3813
  parseChangelog,
3654
- c82 as parseChangesetText,
3814
+ c92 as parseChangesetText,
3655
3815
  parseColor,
3656
- c92 as parseComponentSpecs,
3816
+ ca2 as parseComponentSpecs,
3657
3817
  parseContrastChecks,
3658
3818
  bH as parseDimension,
3659
3819
  parseDocsReply,
@@ -3661,27 +3821,28 @@ export {
3661
3821
  parseExplorationBody,
3662
3822
  parseFigmaOrigin,
3663
3823
  parseFigmaSpec,
3664
- ca2 as parseJiraKey,
3824
+ cb2 as parseJiraKey,
3665
3825
  bI as parseJson,
3666
3826
  bJ as parseNeededBy,
3667
- cb2 as parseOverrideComment,
3827
+ cc2 as parseOverrideComment,
3668
3828
  bK as parseOwnerEntry,
3669
3829
  parsePendingDrafts,
3670
3830
  parsePiecesRecord,
3671
- cc2 as parseRepo,
3672
- cd2 as parseRequestIssue,
3673
- ce2 as parseStructureChange,
3674
- cf2 as parseSuggestionAppliedComment,
3675
- cg2 as parseSuggestionIssue,
3676
- ch2 as parseSuggestionReviewComment,
3677
- ci2 as parseTier,
3831
+ cd2 as parseRepo,
3832
+ ce2 as parseRequestIssue,
3833
+ parseStorybookIndex,
3834
+ cf2 as parseStructureChange,
3835
+ cg2 as parseSuggestionAppliedComment,
3836
+ ch2 as parseSuggestionIssue,
3837
+ ci2 as parseSuggestionReviewComment,
3838
+ cj2 as parseTier,
3678
3839
  parseTokenFile,
3679
3840
  bL as parseVercelComment,
3680
- cj2 as patchDocsJson,
3841
+ ck2 as patchDocsJson,
3681
3842
  pathId,
3682
3843
  pathSimilarity,
3683
- ck2 as pendingApprovals,
3684
- cl2 as permissionLabel,
3844
+ cl2 as pendingApprovals,
3845
+ cm2 as permissionLabel,
3685
3846
  pickedOption,
3686
3847
  p as pieceId,
3687
3848
  bM as piecesSection,
@@ -3690,14 +3851,14 @@ export {
3690
3851
  planNewBrand,
3691
3852
  planReference,
3692
3853
  planReferences,
3693
- cm2 as planRestore,
3694
- cn2 as planRevert,
3695
- co2 as planSuggestionApply,
3696
- cp as planToJson,
3854
+ cn2 as planRestore,
3855
+ co2 as planRevert,
3856
+ cp as planSuggestionApply,
3857
+ cq as planToJson,
3697
3858
  planTokenMerge,
3698
3859
  planTokenProposal,
3699
- cq as prNumberFromSubject,
3700
- cr as prefillDocs,
3860
+ cr as prNumberFromSubject,
3861
+ cs as prefillDocs,
3701
3862
  bO as previewComment,
3702
3863
  previewLinks,
3703
3864
  bP as previewLinksOf,
@@ -3717,9 +3878,9 @@ export {
3717
3878
  bW as projectOfLabel,
3718
3879
  promoteExplorationOnGitHub,
3719
3880
  promotionPlan,
3720
- cs as proposeDocsOnGitHub,
3881
+ ct as proposeDocsOnGitHub,
3721
3882
  a as proposedTokenPath,
3722
- ct as propsTable,
3883
+ cu as propsTable,
3723
3884
  protectLibrary,
3724
3885
  protectRefusal,
3725
3886
  bX as protectedBranchesOf,
@@ -3727,9 +3888,9 @@ export {
3727
3888
  protectionRulesetName,
3728
3889
  protectionSentence,
3729
3890
  protectionState,
3730
- cu as pullState,
3731
- cv as pushChangeRows,
3732
- cw as rateLimitMessage,
3891
+ cv as pullState,
3892
+ cw as pushChangeRows,
3893
+ cx as rateLimitMessage,
3733
3894
  readCombineBranch,
3734
3895
  readLibraryConflicts,
3735
3896
  readPendingDrafts,
@@ -3739,29 +3900,29 @@ export {
3739
3900
  reconcileIds,
3740
3901
  recordPiecesOnGitHub,
3741
3902
  referenceImagePath,
3742
- cx as releasePull,
3903
+ cy as releasePull,
3743
3904
  releasesFromTags,
3744
3905
  removeToken,
3745
3906
  removedSide,
3746
3907
  bY as renderedColor,
3747
- cy as reopenEligibility,
3908
+ cz as reopenEligibility,
3748
3909
  reopenOnGitHub,
3749
- cz as requestBrief,
3750
- cA as requestImagePath,
3751
- cB as requestIssueTitle,
3752
- cC as requestStatus,
3753
- cD as requiredApprovals,
3910
+ cA as requestBrief,
3911
+ cB as requestImagePath,
3912
+ cC as requestIssueTitle,
3913
+ cD as requestStatus,
3914
+ cE as requiredApprovals,
3754
3915
  requiredCheckNames,
3755
- cE as requiredPermission,
3916
+ cF as requiredPermission,
3756
3917
  resolutionMessage,
3757
3918
  resolve,
3758
3919
  resolveBranchPreviews,
3759
3920
  resolvedTokenFiles,
3760
3921
  reviewOnGitHub,
3761
- cF as reviewQueue,
3762
- cG as reviewStatusKind,
3763
- cH as reviewSuggestionOnGitHub,
3764
- cI as reviewersToAsk,
3922
+ cG as reviewQueue,
3923
+ cH as reviewStatusKind,
3924
+ cI as reviewSuggestionOnGitHub,
3925
+ cJ as reviewersToAsk,
3765
3926
  bZ as rgbaToDtcg,
3766
3927
  rgbaToHex,
3767
3928
  b_ as rightsProblems,
@@ -3779,51 +3940,54 @@ export {
3779
3940
  sanitizeDraftText,
3780
3941
  sanitizeDraftTitle,
3781
3942
  sanitizeResultLines,
3782
- cJ as sectionsNeedingReview,
3943
+ cK as sectionsNeedingReview,
3783
3944
  selectTokenFiles,
3784
3945
  c1 as serializeJson,
3785
3946
  serializePendingDrafts,
3786
3947
  serializeTokenFile,
3787
- cK as sha256Hex,
3948
+ cL as sha256Hex,
3788
3949
  shadowedEdits,
3789
3950
  shareDescription,
3790
3951
  shareMessage,
3791
3952
  shareState,
3792
3953
  c2 as shipPolicy,
3793
- cL as shortVariant,
3794
- cM as shortVariants,
3954
+ cM as shortVariant,
3955
+ cN as shortVariants,
3795
3956
  showShare,
3796
3957
  slugify,
3797
3958
  c3 as snapshotUrl,
3798
- cN as specHash,
3799
- cO as specsUsage,
3959
+ cO as specHash,
3960
+ cP as specsUsage,
3800
3961
  stableCommand,
3801
3962
  startExplorationOnGitHub,
3802
3963
  stateSentence,
3964
+ storybookIframeUrl,
3965
+ storybookIndexUrls,
3966
+ storybookManagerUrl,
3803
3967
  c4 as storybookUrl,
3804
3968
  c5 as suggestNearestComment,
3805
3969
  suggestTokenProposalOnGitHub,
3806
- cP as suggestionAllowedRoots,
3807
- cQ as suggestionAppliedComment,
3808
- cR as suggestionApplyTable,
3809
- cS as suggestionIssueTitle,
3810
- cT as suggestionKindFromLabels,
3811
- cU as suggestionLabels,
3812
- cV as suggestionPathProblems,
3813
- cW as suggestionPayloadSha,
3814
- cX as suggestionReviewState,
3815
- cY as suggestionShapeProblems,
3970
+ cQ as suggestionAllowedRoots,
3971
+ cR as suggestionAppliedComment,
3972
+ cS as suggestionApplyTable,
3973
+ cT as suggestionIssueTitle,
3974
+ cU as suggestionKindFromLabels,
3975
+ cV as suggestionLabels,
3976
+ cW as suggestionPathProblems,
3977
+ cX as suggestionPayloadSha,
3978
+ cY as suggestionReviewState,
3979
+ cZ as suggestionShapeProblems,
3816
3980
  suggestionStateFromLabels,
3817
- cZ as suggestionStateLabel,
3981
+ c_ as suggestionStateLabel,
3818
3982
  suggestionStatus,
3819
- c_ as suggestionSubject,
3820
- c$ as summarizeApprovals,
3821
- d0 as summarizeCi,
3983
+ c$ as suggestionSubject,
3984
+ d0 as summarizeApprovals,
3985
+ d1 as summarizeCi,
3822
3986
  summarizeComponent,
3823
- d1 as summarizeSuggestionApprovals,
3987
+ d2 as summarizeSuggestionApprovals,
3824
3988
  c6 as summarizeTokenChange,
3825
3989
  switchToPublishedOnGitHub,
3826
- d2 as syncSuggestionStateLabel,
3990
+ d3 as syncSuggestionStateLabel,
3827
3991
  takeMine,
3828
3992
  c7 as tarballAssetName,
3829
3993
  c8 as tarballUrl,
@@ -3833,19 +3997,19 @@ export {
3833
3997
  cc as teamsIn,
3834
3998
  threeWayDiff,
3835
3999
  tintedNeutral,
3836
- d3 as titleOf,
4000
+ d4 as titleOf,
3837
4001
  titleWithJiraKey,
3838
4002
  cd as toAlias,
3839
- d4 as toChangeSummary,
4003
+ d5 as toChangeSummary,
3840
4004
  toConfigJson,
3841
4005
  toHex,
3842
4006
  ce as toMap,
3843
4007
  toOklch,
3844
4008
  cf as toPlain,
3845
4009
  cg as tokenBump,
3846
- d5 as tokenCssVar,
4010
+ d6 as tokenCssVar,
3847
4011
  tokenFilesOf,
3848
- d6 as tokenHistory,
4012
+ d7 as tokenHistory,
3849
4013
  t as tokenLabel,
3850
4014
  ch as tokenNode,
3851
4015
  tokenSuggestionPayload,
@@ -3857,15 +4021,15 @@ export {
3857
4021
  unpicked,
3858
4022
  ci as unreadableShipTeams,
3859
4023
  cj as unreadableTeams,
3860
- d7 as unsafePathProblem,
4024
+ d8 as unsafePathProblem,
3861
4025
  updatePendingDrafts,
3862
4026
  upsertToken,
3863
4027
  useLibraryPreviewOnGitHub,
3864
- d8 as utf8ToBase64,
3865
- d9 as validateComponentSpec,
3866
- da as validateDocs,
4028
+ d9 as utf8ToBase64,
4029
+ da as validateComponentSpec,
4030
+ db as validateDocs,
3867
4031
  validateDocsTask,
3868
- db as validateIntegrations,
4032
+ dc as validateIntegrations,
3869
4033
  validateLayered,
3870
4034
  validatePendingDrafts,
3871
4035
  validateProposal,
@@ -3874,18 +4038,18 @@ export {
3874
4038
  cl as valueToCss,
3875
4039
  valuesEqual,
3876
4040
  variantKeyOf,
3877
- dc as variantName,
3878
- dd as versionTimeline,
4041
+ dd as variantName,
4042
+ de as versionTimeline,
3879
4043
  cm as visualImpactProblems,
3880
4044
  cn as whoCanShipSentence,
3881
4045
  co as whyItExists,
3882
- de as withAuthorLine,
4046
+ df as withAuthorLine,
3883
4047
  withFigmaOrigin,
3884
4048
  withLink,
3885
4049
  withNeededBy,
3886
4050
  withPiecesRecord,
3887
- df as withRequestExploration,
3888
- dg as withoutJiraKey,
4051
+ dg as withRequestExploration,
4052
+ dh as withoutJiraKey,
3889
4053
  writeDraftResults,
3890
4054
  writeTokenProposalOnGitHub
3891
4055
  };