@decantr/cli 1.7.17 → 1.7.19

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/bin.js CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import "./chunk-AMP4C5NV.js";
3
- import "./chunk-BABBST2Q.js";
2
+ import "./chunk-GHLSLSRW.js";
3
+ import "./chunk-26JRGQ54.js";
4
4
  import "./chunk-QRQCPD3C.js";
@@ -473,9 +473,6 @@ ${themeBody}
473
473
  ["padding-left", "var(--d-label-px)"],
474
474
  ["border-left", "2px solid var(--d-accent)"]
475
475
  ]);
476
- emitRule("* + .d-label[data-anchor]", [
477
- ["margin-top", "var(--d-section-gap, 2rem)"]
478
- ]);
479
476
  emitRule(".d-link", [
480
477
  ["color", "var(--d-text)"],
481
478
  ["text-decoration", "none"],
@@ -846,11 +843,19 @@ ${themeBody}
846
843
  ["min-width", "0"],
847
844
  ["overflow-y", "auto"],
848
845
  ["overflow-x", "clip"],
849
- ["padding", "1rem"]
846
+ ["padding", "1rem"],
847
+ ["display", "flex"],
848
+ ["flex-direction", "column"],
849
+ ["gap", "var(--d-section-gap, 2rem)"]
850
850
  ]);
851
851
  emitRule('.d-shell-body[data-padding="compact"]', [["padding", "0.75rem"]]);
852
852
  emitRule('.d-shell-body[data-padding="spacious"]', [["padding", "1.5rem"]]);
853
853
  emitRule('.d-shell-body[data-padding="none"]', [["padding", "0"]]);
854
+ emitRule('.d-shell-body[data-flow="tight"]', [["gap", "0.75rem"]]);
855
+ emitRule('.d-shell-body[data-flow="none"]', [
856
+ ["display", "block"],
857
+ ["gap", "0"]
858
+ ]);
854
859
  emitRule(".d-shell-footer", [
855
860
  ["padding", "1rem clamp(1rem, 2vw, 1.5rem)"],
856
861
  ["border-top", "1px solid var(--d-border)"],
@@ -2546,7 +2551,7 @@ Pair \`d-card\` with a theme card decorator (e.g., \`carbon-card\`) for hover gl
2546
2551
  | **Main** | \`d-shell-main\` | Remaining-width column to the right of the sidebar (or the full content area in top-nav shells). Handles scroll internally. |
2547
2552
  | **Aside** | \`d-shell-aside\` | Right 320px auxiliary panel for inspector / timeline / minimap in \`sidebar-aside\` layouts. Below \`_mdmax:\` hides by default; toggle with \`data-mobile-open="true"\`. |
2548
2553
  | **Header** | \`d-shell-header\` | 52px sticky top bar with horizontal flex layout. Use inside \`d-shell-main\` (sidebar-main shells) or at the top of \`d-shell\` (top-nav shells). |
2549
- | **Body** | \`d-shell-body\` | Scrollable main region. \`data-padding="compact\\|spacious\\|none"\` overrides the default 1rem padding. |
2554
+ | **Body** | \`d-shell-body\` | Scrollable main region. **Flex column with section-level gap (\`var(--d-section-gap, 2rem)\`) between direct children** \u2014 every block-level child (eyebrow, card grid, chart row, table) gets uniform spacing automatically, no matter how it's wrapped internally. \`data-padding="compact\\|spacious\\|none"\` adjusts the outer 1rem padding. \`data-flow="tight"\` reduces the gap to 0.75rem; \`data-flow="none"\` reverts to plain block flow. |
2550
2555
  | **Footer** | \`d-shell-footer\` | Narrow band below the body with top border. |
2551
2556
  | **Centered card** | \`d-shell-centered-card\` | The content parent inside \`d-shell[data-layout="centered"]\`. Caps width at 28rem. |
2552
2557
  | **Mobile menu trigger** | \`d-shell-mobile-trigger\` | Hamburger button hidden above \`_md:\`, visible below. Toggles \`data-mobile-open\` on the sibling \`d-shell-sidebar\`. REQUIRED inside \`d-shell-header\` for any \`sidebar-main\` or \`sidebar-aside\` shell \u2014 without it, mobile users can't re-open the collapsed nav. |
@@ -3165,12 +3170,18 @@ Start implementation from the shell layouts and shared route structure before fi
3165
3170
  }
3166
3171
  briefLines.push(`- **Guard mode:** ${params.guardMode}`);
3167
3172
  briefLines.push("");
3173
+ const escDecCell = (s) => s.replace(/\|/g, "\\|");
3168
3174
  if (params.decoratorDefinitions && Object.keys(params.decoratorDefinitions).length > 0) {
3169
3175
  briefLines.push("### Decorator Quick Reference");
3170
- briefLines.push("| Class | Intent | Key CSS |");
3171
- briefLines.push("|-------|--------|---------|");
3176
+ briefLines.push(
3177
+ `Apply these classes \u2014 they carry the theme's visual identity. Without them the scaffold reads as "themed colors only."`
3178
+ );
3179
+ briefLines.push("");
3180
+ briefLines.push("| Class | Intent | Apply to | Key CSS |");
3181
+ briefLines.push("|-------|--------|----------|---------|");
3172
3182
  for (const [name, def] of Object.entries(params.decoratorDefinitions)) {
3173
- const intent = def.intent || "";
3183
+ const intent = escDecCell(def.intent || "");
3184
+ const applyTo = escDecCell((def.usage || []).join(", "));
3174
3185
  const props = def.suggested_properties ?? def.css ?? {};
3175
3186
  const base = Object.entries(props).map(([p, v]) => `${p}: ${v}`).join("; ");
3176
3187
  const hasHover = def.hover_properties && Object.keys(def.hover_properties).length > 0;
@@ -3182,7 +3193,9 @@ Start implementation from the shell layouts and shared route structure before fi
3182
3193
  hasActive && ":active"
3183
3194
  ].filter((m) => Boolean(m));
3184
3195
  const stateSuffix = stateMarkers.length > 0 ? ` _(+ ${stateMarkers.join(", ")})_` : "";
3185
- briefLines.push(`| \`.${name}\` | ${intent} | ${base}${stateSuffix} |`);
3196
+ briefLines.push(
3197
+ `| \`.${name}\` | ${intent} | ${applyTo} | ${escDecCell(base)}${stateSuffix} |`
3198
+ );
3186
3199
  }
3187
3200
  briefLines.push("");
3188
3201
  } else if (params.decorators && params.decorators.length > 0) {
@@ -3190,7 +3203,7 @@ Start implementation from the shell layouts and shared route structure before fi
3190
3203
  briefLines.push("| Class | Purpose |");
3191
3204
  briefLines.push("|-------|---------|");
3192
3205
  for (const d of params.decorators) {
3193
- briefLines.push(`| \`.${d.name}\` | ${d.description} |`);
3206
+ briefLines.push(`| \`.${d.name}\` | ${escDecCell(d.description)} |`);
3194
3207
  }
3195
3208
  briefLines.push("");
3196
3209
  }
@@ -4593,14 +4606,20 @@ function generateQuickStart(input) {
4593
4606
  if (patternLabels.length > 0) {
4594
4607
  lines.push(`**Key patterns:** ${patternLabels.join(", ")}`);
4595
4608
  }
4596
- const cssClasses = [];
4597
- const topDecorators = decorators.slice(0, 3).map((d) => d.name);
4598
- cssClasses.push(...topDecorators);
4609
+ if (decorators.length > 0) {
4610
+ const count = decorators.length;
4611
+ lines.push(
4612
+ `**Theme decorators:** ${count} class${count === 1 ? "" : "es"} \u2014 see "Required Theme Decorators" below for class + intent + apply-to`
4613
+ );
4614
+ }
4599
4615
  const pLower = personality.join(" ").toLowerCase();
4600
- if (pLower.includes("neon") || pLower.includes("glow")) cssClasses.push("neon-glow");
4601
- if (pLower.includes("mono") || pLower.includes("monospace")) cssClasses.push("mono-data");
4602
- if (cssClasses.length > 0) {
4603
- lines.push(`**CSS classes:** ${cssClasses.map((c) => `\`.${c}\``).join(", ")}`);
4616
+ const personalityUtils = [];
4617
+ if (pLower.includes("neon") || pLower.includes("glow")) personalityUtils.push("neon-glow");
4618
+ if (pLower.includes("mono") || pLower.includes("monospace")) personalityUtils.push("mono-data");
4619
+ if (personalityUtils.length > 0) {
4620
+ lines.push(
4621
+ `**Personality utilities:** ${personalityUtils.map((c) => `\`.${c}\``).join(", ")}`
4622
+ );
4604
4623
  }
4605
4624
  const density = section.dna_overrides?.density || "comfortable";
4606
4625
  lines.push(`**Density:** ${density}`);
@@ -4751,21 +4770,38 @@ function generateSectionContext(input) {
4751
4770
  );
4752
4771
  lines.push("");
4753
4772
  const decoratorDefs = input.themeData?.decorator_definitions;
4773
+ const escCell = (s) => s.replace(/\|/g, "\\|");
4754
4774
  if (decoratorDefs && Object.keys(decoratorDefs).length > 0) {
4755
- const usageEntries = Object.entries(decoratorDefs).filter(
4756
- ([, def]) => def.usage && def.usage.length > 0
4775
+ const renderableEntries = Object.entries(decoratorDefs).filter(
4776
+ ([, def]) => def.intent || def.description || def.usage && def.usage.length > 0
4757
4777
  );
4758
- if (usageEntries.length > 0) {
4759
- lines.push("**Section decorators (usage hints):**");
4760
- for (const [name, def] of usageEntries) {
4761
- lines.push(`- \`.${name}\`: ${(def.usage || []).join(", ")}`);
4778
+ if (renderableEntries.length > 0) {
4779
+ lines.push(`## Required Theme Decorators (${themeName})`);
4780
+ lines.push("");
4781
+ lines.push(
4782
+ `These classes carry the active theme's visual identity. Tokens alone give bones; decorators give personality. Generated source MUST apply these \u2014 without them, the page reads as "themed colors only" with no theme character.`
4783
+ );
4784
+ lines.push("");
4785
+ lines.push("| Class | Intent | Apply to |");
4786
+ lines.push("|-------|--------|----------|");
4787
+ for (const [name, def] of renderableEntries) {
4788
+ const intent = escCell(def.intent || def.description || "");
4789
+ const applyTo = escCell((def.usage || []).join(", "));
4790
+ lines.push(`| \`.${name}\` | ${intent} | ${applyTo} |`);
4762
4791
  }
4763
4792
  lines.push("");
4764
4793
  }
4765
4794
  } else if (decorators.length > 0) {
4766
- lines.push("**Section decorators:**");
4795
+ lines.push(`## Required Theme Decorators (${themeName})`);
4796
+ lines.push("");
4797
+ lines.push(
4798
+ "These classes carry the active theme's visual identity. Apply them across this section's patterns or the scaffold reads as generic."
4799
+ );
4800
+ lines.push("");
4801
+ lines.push("| Class | Description |");
4802
+ lines.push("|-------|-------------|");
4767
4803
  for (const d of decorators) {
4768
- lines.push(`- \`.${d.name}\` \u2014 ${d.description}`);
4804
+ lines.push(`| \`.${d.name}\` | ${escCell(d.description)} |`);
4769
4805
  }
4770
4806
  lines.push("");
4771
4807
  }
@@ -14,7 +14,7 @@ import {
14
14
  scaffoldProject,
15
15
  syncRegistry,
16
16
  writeExecutionPackBundleArtifacts
17
- } from "./chunk-BABBST2Q.js";
17
+ } from "./chunk-26JRGQ54.js";
18
18
  import {
19
19
  buildGuardRegistryContext,
20
20
  scanProjectInteractions
@@ -5942,7 +5942,7 @@ async function main() {
5942
5942
  break;
5943
5943
  }
5944
5944
  case "upgrade": {
5945
- const { cmdUpgrade } = await import("./upgrade-ARXL7WCP.js");
5945
+ const { cmdUpgrade } = await import("./upgrade-LVMAKWEA.js");
5946
5946
  const applyFlag = args.includes("--apply");
5947
5947
  await cmdUpgrade(process.cwd(), { apply: applyFlag });
5948
5948
  break;
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import "./chunk-AMP4C5NV.js";
2
- import "./chunk-BABBST2Q.js";
1
+ import "./chunk-GHLSLSRW.js";
2
+ import "./chunk-26JRGQ54.js";
3
3
  import "./chunk-QRQCPD3C.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  RegistryClient,
3
3
  refreshDerivedFiles
4
- } from "./chunk-BABBST2Q.js";
4
+ } from "./chunk-26JRGQ54.js";
5
5
 
6
6
  // src/commands/upgrade.ts
7
7
  import { existsSync, readFileSync, writeFileSync } from "fs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decantr/cli",
3
- "version": "1.7.17",
3
+ "version": "1.7.19",
4
4
  "description": "Decantr CLI — scaffold, audit, and maintain Decantr projects from the terminal",
5
5
  "author": "Decantr AI",
6
6
  "license": "MIT",
@@ -27,10 +27,10 @@
27
27
  "access": "public"
28
28
  },
29
29
  "dependencies": {
30
+ "@decantr/core": "1.0.2",
30
31
  "@decantr/essence-spec": "1.0.5",
31
- "@decantr/verifier": "1.0.3",
32
32
  "@decantr/registry": "1.0.2",
33
- "@decantr/core": "1.0.2"
33
+ "@decantr/verifier": "1.0.3"
34
34
  },
35
35
  "scripts": {
36
36
  "build": "tsup",