@decantr/cli 1.7.15 → 1.7.18

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-M2DFCY3N.js";
3
- import "./chunk-WINKQSUX.js";
2
+ import "./chunk-VHDAHJKS.js";
3
+ import "./chunk-5ZMHI3R4.js";
4
4
  import "./chunk-QRQCPD3C.js";
@@ -763,12 +763,60 @@ ${themeBody}
763
763
  lines.push(" bottom: 0;");
764
764
  lines.push(" z-index: 50;");
765
765
  lines.push(" transform: translateX(-100%);");
766
+ lines.push(" box-shadow: var(--d-elevation-4, 0 8px 24px rgba(0,0,0,0.25));");
766
767
  lines.push(" }");
767
768
  lines.push(' .d-shell-sidebar[data-mobile-open="true"] {');
768
769
  lines.push(" transform: translateX(0);");
769
770
  lines.push(" }");
770
771
  lines.push("}");
771
772
  lines.push("");
773
+ emitRule(".d-shell-mobile-trigger", [
774
+ ["display", "none"],
775
+ ["align-items", "center"],
776
+ ["justify-content", "center"],
777
+ ["width", "36px"],
778
+ ["height", "36px"],
779
+ ["border", "1px solid var(--d-border)"],
780
+ ["border-radius", "var(--d-radius-sm)"],
781
+ ["background", "transparent"],
782
+ ["color", "var(--d-text)"],
783
+ ["cursor", "pointer"],
784
+ ["flex-shrink", "0"],
785
+ [
786
+ "transition",
787
+ "background var(--d-motion-fast, 150ms) var(--d-motion-ease-out, cubic-bezier(0,0,0.2,1)), border-color var(--d-motion-fast, 150ms) var(--d-motion-ease-out, cubic-bezier(0,0,0.2,1))"
788
+ ]
789
+ ]);
790
+ emitRule(".d-shell-mobile-trigger:hover", [
791
+ ["background", "var(--d-surface)"],
792
+ ["border-color", "var(--d-primary)"]
793
+ ]);
794
+ emitRule(".d-shell-mobile-trigger:focus-visible", [
795
+ ["outline", "2px solid var(--d-primary)"],
796
+ ["outline-offset", "2px"]
797
+ ]);
798
+ emitRule(".d-shell-mobile-backdrop", [
799
+ ["display", "none"],
800
+ ["position", "fixed"],
801
+ ["inset", "0"],
802
+ ["z-index", "49"],
803
+ ["background", "color-mix(in srgb, var(--d-bg) 60%, transparent)"],
804
+ ["backdrop-filter", "blur(2px)"],
805
+ ["-webkit-backdrop-filter", "blur(2px)"],
806
+ [
807
+ "transition",
808
+ "opacity var(--d-motion-fast, 150ms) var(--d-motion-ease-out, cubic-bezier(0,0,0.2,1))"
809
+ ]
810
+ ]);
811
+ lines.push("@media (max-width: 767.98px) {");
812
+ lines.push(" .d-shell-mobile-trigger {");
813
+ lines.push(" display: inline-flex;");
814
+ lines.push(" }");
815
+ lines.push(' .d-shell-mobile-backdrop[data-visible="true"] {');
816
+ lines.push(" display: block;");
817
+ lines.push(" }");
818
+ lines.push("}");
819
+ lines.push("");
772
820
  emitRule(".d-shell-main", [
773
821
  ["display", "flex"],
774
822
  ["flex-direction", "column"],
@@ -795,11 +843,19 @@ ${themeBody}
795
843
  ["min-width", "0"],
796
844
  ["overflow-y", "auto"],
797
845
  ["overflow-x", "clip"],
798
- ["padding", "1rem"]
846
+ ["padding", "1rem"],
847
+ ["display", "flex"],
848
+ ["flex-direction", "column"],
849
+ ["gap", "var(--d-section-gap, 2rem)"]
799
850
  ]);
800
851
  emitRule('.d-shell-body[data-padding="compact"]', [["padding", "0.75rem"]]);
801
852
  emitRule('.d-shell-body[data-padding="spacious"]', [["padding", "1.5rem"]]);
802
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
+ ]);
803
859
  emitRule(".d-shell-footer", [
804
860
  ["padding", "1rem clamp(1rem, 2vw, 1.5rem)"],
805
861
  ["border-top", "1px solid var(--d-border)"],
@@ -2495,9 +2551,11 @@ Pair \`d-card\` with a theme card decorator (e.g., \`carbon-card\`) for hover gl
2495
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. |
2496
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"\`. |
2497
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). |
2498
- | **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. |
2499
2555
  | **Footer** | \`d-shell-footer\` | Narrow band below the body with top border. |
2500
2556
  | **Centered card** | \`d-shell-centered-card\` | The content parent inside \`d-shell[data-layout="centered"]\`. Caps width at 28rem. |
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. |
2558
+ | **Mobile backdrop** | \`d-shell-mobile-backdrop\` | Dim scrim shown behind the open sidebar drawer below \`_md:\`. Apply \`data-visible="true"\` when sidebar is open; click to close. Hidden above \`_md:\`. |
2501
2559
 
2502
2560
  **Shell layout recipes:**
2503
2561
  - **Auth / confirmation:** \`d-shell[data-layout="centered"] + d-shell-centered-card\`.
@@ -2507,6 +2565,47 @@ Pair \`d-card\` with a theme card decorator (e.g., \`carbon-card\`) for hover gl
2507
2565
 
2508
2566
  Do NOT hand-roll \`.shell-sidebar\`, \`.shell-centered\`, \`.shell-tnf\`, \`.shell-aside\`, \`.sidebar-main-layout\`, or similar class names. They exist as treatments.
2509
2567
 
2568
+ **Mobile sidebar wiring (REQUIRED for sidebar-main / sidebar-aside shells):**
2569
+
2570
+ The sidebar collapses to off-canvas below \`_mdmax:\`. Without an explicit toggle, mobile users get stuck \u2014 collapsed sidebar, no way to re-open it. Wire it up like this:
2571
+
2572
+ \`\`\`tsx
2573
+ function AppShell() {
2574
+ const [navOpen, setNavOpen] = useState(false);
2575
+ return (
2576
+ <div className="d-shell" data-layout="sidebar-main">
2577
+ <aside
2578
+ className="d-shell-sidebar"
2579
+ data-mobile-open={navOpen ? 'true' : undefined}
2580
+ >
2581
+ {/* nav items */}
2582
+ </aside>
2583
+ <div
2584
+ className="d-shell-mobile-backdrop"
2585
+ data-visible={navOpen ? 'true' : undefined}
2586
+ onClick={() => setNavOpen(false)}
2587
+ />
2588
+ <main className="d-shell-main">
2589
+ <header className="d-shell-header">
2590
+ <button
2591
+ className="d-shell-mobile-trigger"
2592
+ aria-label={navOpen ? 'Close navigation' : 'Open navigation'}
2593
+ aria-expanded={navOpen}
2594
+ onClick={() => setNavOpen((v) => !v)}
2595
+ >
2596
+ <Menu size={18} aria-hidden />
2597
+ </button>
2598
+ {/* rest of header */}
2599
+ </header>
2600
+ <div className="d-shell-body">{/* page content */}</div>
2601
+ </main>
2602
+ </div>
2603
+ );
2604
+ }
2605
+ \`\`\`
2606
+
2607
+ The trigger auto-hides above \`_md:\` (where the sidebar is always visible inline) and the backdrop only shows when \`data-visible="true"\` AND viewport is below \`_md:\`. Close-on-route-change is recommended for SPA blueprints \u2014 wire \`useEffect\` on \`location.pathname\` to reset \`navOpen\` to false.
2608
+
2510
2609
  ### Theme toggle
2511
2610
 
2512
2611
  If the blueprint declares the \`theme-toggle\` feature, \`tokens.css\` includes a \`[data-mode="<opposite>"]\` selector block. Flip the visible mode by setting \`data-mode\` on \`<html>\` (or any ancestor):
@@ -14,7 +14,7 @@ import {
14
14
  scaffoldProject,
15
15
  syncRegistry,
16
16
  writeExecutionPackBundleArtifacts
17
- } from "./chunk-WINKQSUX.js";
17
+ } from "./chunk-5ZMHI3R4.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-Q7PHW34P.js");
5945
+ const { cmdUpgrade } = await import("./upgrade-LK3Z44M2.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-M2DFCY3N.js";
2
- import "./chunk-WINKQSUX.js";
1
+ import "./chunk-VHDAHJKS.js";
2
+ import "./chunk-5ZMHI3R4.js";
3
3
  import "./chunk-QRQCPD3C.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  RegistryClient,
3
3
  refreshDerivedFiles
4
- } from "./chunk-WINKQSUX.js";
4
+ } from "./chunk-5ZMHI3R4.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.15",
3
+ "version": "1.7.18",
4
4
  "description": "Decantr CLI — scaffold, audit, and maintain Decantr projects from the terminal",
5
5
  "author": "Decantr AI",
6
6
  "license": "MIT",
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "@decantr/core": "1.0.2",
31
- "@decantr/essence-spec": "1.0.4",
31
+ "@decantr/essence-spec": "1.0.5",
32
32
  "@decantr/verifier": "1.0.3",
33
33
  "@decantr/registry": "1.0.2"
34
34
  },