@tekyzinc/gsd-t 2.73.21 → 2.73.23
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/CHANGELOG.md +10 -0
- package/package.json +1 -1
- package/scripts/gsd-t-design-review-inject.js +38 -14
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to GSD-T are documented here. Updated with each release.
|
|
4
4
|
|
|
5
|
+
## [2.73.23] - 2026-04-09
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- **Container props auto-redirect to parent** — setting `gap`, `borderRadius`, or `overflow` on a bar segment (child) now auto-targets the parent flex/grid container. Previously only worked when the container itself was selected.
|
|
9
|
+
|
|
10
|
+
## [2.73.22] - 2026-04-09
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **Stack-level border-radius** — setting `borderRadius` on a flex/grid bar column container auto-sets `overflow: hidden` (so rounded corners clip child segments) and propagates to all sibling columns. One change rounds all stacked bars.
|
|
14
|
+
|
|
5
15
|
## [2.73.21] - 2026-04-09
|
|
6
16
|
|
|
7
17
|
### Fixed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tekyzinc/gsd-t",
|
|
3
|
-
"version": "2.73.
|
|
3
|
+
"version": "2.73.23",
|
|
4
4
|
"description": "GSD-T: Contract-Driven Development for Claude Code — 56 slash commands with headless CI/CD mode, graph-powered code analysis, real-time agent dashboard, execution intelligence, task telemetry, doc-ripple enforcement, backlog management, impact analysis, test sync, milestone archival, and PRD generation",
|
|
5
5
|
"author": "Tekyz, Inc.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -712,8 +712,22 @@
|
|
|
712
712
|
const propagate = msg.propagate !== false; // default true
|
|
713
713
|
let propagatedCount = 0;
|
|
714
714
|
|
|
715
|
-
//
|
|
716
|
-
|
|
715
|
+
// Container-only props: if applied to a non-container child, redirect to parent
|
|
716
|
+
const containerOnlyProps = new Set(["gap", "row-gap", "column-gap", "border-radius"]);
|
|
717
|
+
let targetEl = lockedEl;
|
|
718
|
+
if (containerOnlyProps.has(cssName)) {
|
|
719
|
+
const elStyle = getComputedStyle(lockedEl);
|
|
720
|
+
const isContainer = elStyle.display === "flex" || elStyle.display === "inline-flex" || elStyle.display === "grid";
|
|
721
|
+
if (!isContainer && lockedEl.parentElement) {
|
|
722
|
+
const parentStyle = getComputedStyle(lockedEl.parentElement);
|
|
723
|
+
if (parentStyle.display === "flex" || parentStyle.display === "inline-flex" || parentStyle.display === "grid") {
|
|
724
|
+
targetEl = lockedEl.parentElement;
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
// Apply to target element (may be parent for container-only props)
|
|
730
|
+
targetEl.style.setProperty(cssName, msg.value, "important");
|
|
717
731
|
|
|
718
732
|
// Typography props cascade to descendants
|
|
719
733
|
const inheritProps = new Set(["font-size", "font-weight", "font-family", "line-height",
|
|
@@ -792,18 +806,28 @@
|
|
|
792
806
|
} else if (tag === "div" && parent) {
|
|
793
807
|
const elStyle = getComputedStyle(lockedEl);
|
|
794
808
|
const parentStyle = getComputedStyle(parent);
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
809
|
+
|
|
810
|
+
// Props that propagate across sibling containers (all bar columns)
|
|
811
|
+
const containerProps = new Set(["gap", "row-gap", "column-gap", "border-radius", "overflow"]);
|
|
812
|
+
|
|
813
|
+
if (containerProps.has(cssName)) {
|
|
814
|
+
// Use targetEl (may be parent if redirected) for container propagation
|
|
815
|
+
const containerEl = targetEl;
|
|
816
|
+
const containerParent = containerEl.parentElement;
|
|
817
|
+
const containerDisplay = getComputedStyle(containerEl).display;
|
|
818
|
+
if (containerParent && (containerDisplay === "flex" || containerDisplay === "inline-flex" || containerDisplay === "grid")) {
|
|
819
|
+
// Auto-set overflow:hidden when border-radius is applied to a container
|
|
820
|
+
if (cssName === "border-radius" && msg.value && msg.value !== "0px" && msg.value !== "0") {
|
|
821
|
+
containerEl.style.setProperty("overflow", "hidden", "important");
|
|
822
|
+
}
|
|
823
|
+
for (const sib of containerParent.children) {
|
|
824
|
+
if (sib === containerEl || sib.tagName !== "DIV") continue;
|
|
804
825
|
const sibStyle = getComputedStyle(sib);
|
|
805
|
-
if (sibStyle.display ===
|
|
826
|
+
if (sibStyle.display === containerDisplay) {
|
|
806
827
|
sib.style.setProperty(cssName, msg.value, "important");
|
|
828
|
+
if (cssName === "border-radius" && msg.value && msg.value !== "0px" && msg.value !== "0") {
|
|
829
|
+
sib.style.setProperty("overflow", "hidden", "important");
|
|
830
|
+
}
|
|
807
831
|
propagatedCount++;
|
|
808
832
|
}
|
|
809
833
|
}
|
|
@@ -826,7 +850,7 @@
|
|
|
826
850
|
const tag = lockedEl.tagName.toLowerCase();
|
|
827
851
|
const columnProps = new Set(["text-align", "width", "min-width", "max-width"]);
|
|
828
852
|
const rowProps = new Set(["height", "min-height", "max-height"]);
|
|
829
|
-
const
|
|
853
|
+
const containerPropsLabel = new Set(["gap", "row-gap", "column-gap", "border-radius", "overflow"]);
|
|
830
854
|
if ((tag === "td" || tag === "th") && columnProps.has(cssName)) {
|
|
831
855
|
const row = lockedEl.closest("tr");
|
|
832
856
|
const colIdx = row ? Array.from(row.children).indexOf(lockedEl) + 1 : 0;
|
|
@@ -835,7 +859,7 @@
|
|
|
835
859
|
propagateScope = "all rows";
|
|
836
860
|
} else if (tag === "tr") {
|
|
837
861
|
propagateScope = "all rows";
|
|
838
|
-
} else if (
|
|
862
|
+
} else if (containerPropsLabel.has(cssName)) {
|
|
839
863
|
propagateScope = "all columns";
|
|
840
864
|
} else {
|
|
841
865
|
propagateScope = "similar";
|