@neuravision/construct 2.1.4 → 2.1.6
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 +25 -0
- package/components/card.css +11 -6
- package/components/datum.css +6 -0
- package/components/modal.css +4 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,31 @@ All notable changes to `@neuravision/construct` will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.1.6] - 2026-07-19
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Datum registration marks on `ct-datum-frame` and `ct-card--datum` now establish an
|
|
13
|
+
isolated component stacking context and render above component-local chrome. Opaque,
|
|
14
|
+
positioned headers (such as terminal captions at `z-index: 1`) previously painted over
|
|
15
|
+
the orange corner even though `ct-datum-frame` explicitly supports code samples. The
|
|
16
|
+
mark remains contained below global overlays, and the Storybook contract now covers a
|
|
17
|
+
clipped, rounded code frame with layered chrome.
|
|
18
|
+
|
|
19
|
+
## [2.1.5] - 2026-07-17
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- **Card & Modal: the 2.1.4 `[hidden]` slot guards are replaced with `:not(:has(*))`
|
|
24
|
+
empty-slot rules — update immediately if you are on 2.1.4.** The attribute guards
|
|
25
|
+
trusted the wrapper's projection detection; ng-construct's `AfCard`/`AfModal` detection
|
|
26
|
+
(`contentChild('[header]')` resolves a template reference name, never a CSS selector)
|
|
27
|
+
reports "empty" for every slot, so 2.1.4 blanked out populated card headers/footers and
|
|
28
|
+
every modal footer in consuming apps. The slots now decide visibility purely in CSS:
|
|
29
|
+
a header/footer wrapper with no projected element hides itself, one with content always
|
|
30
|
+
renders — regardless of what the wrapper's `hidden` attribute claims. The original
|
|
31
|
+
2.1.4 goal (no ghost divider under footerless cards/modals) is preserved.
|
|
32
|
+
|
|
8
33
|
## [2.1.4] - 2026-07-17
|
|
9
34
|
|
|
10
35
|
### Fixed
|
package/components/card.css
CHANGED
|
@@ -46,12 +46,12 @@
|
|
|
46
46
|
border-top: var(--border-thin) solid var(--color-border-subtle);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
/*
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
.ct-card__header
|
|
54
|
-
.ct-card__footer
|
|
49
|
+
/* Slot wrappers render even when no content is projected into them (framework
|
|
50
|
+
wrappers cannot reliably detect projection, and the `hidden` attribute they
|
|
51
|
+
set is overridden by the display rules above). Hide slots without projected
|
|
52
|
+
content so an empty header/footer leaves no ghost spacing or divider. */
|
|
53
|
+
.ct-card__header:not(:has(*)),
|
|
54
|
+
.ct-card__footer:not(:has(*)) {
|
|
55
55
|
display: none;
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -110,6 +110,9 @@
|
|
|
110
110
|
Both are opt-in and additive — they don't change default cards. */
|
|
111
111
|
.ct-card--datum {
|
|
112
112
|
position: relative;
|
|
113
|
+
/* Contain the datum's internal paint layer so it cannot overlap adjacent
|
|
114
|
+
cards or consumer overlays. */
|
|
115
|
+
isolation: isolate;
|
|
113
116
|
}
|
|
114
117
|
|
|
115
118
|
.ct-card--datum::before {
|
|
@@ -122,6 +125,8 @@
|
|
|
122
125
|
border-block-start: var(--border-medium) solid var(--color-brand-accent);
|
|
123
126
|
border-inline-start: var(--border-medium) solid var(--color-brand-accent);
|
|
124
127
|
border-start-start-radius: var(--radius-lg);
|
|
128
|
+
/* Card chrome may use layer 1; the registration mark stays above it. */
|
|
129
|
+
z-index: 2;
|
|
125
130
|
pointer-events: none;
|
|
126
131
|
}
|
|
127
132
|
|
package/components/datum.css
CHANGED
|
@@ -255,6 +255,9 @@
|
|
|
255
255
|
forced colors keeps the borders via CanvasText automatically. */
|
|
256
256
|
.ct-datum-frame {
|
|
257
257
|
position: relative;
|
|
258
|
+
/* Keep the datum's internal paint layer above local figure chrome without
|
|
259
|
+
allowing it to participate in the consumer's global overlay stack. */
|
|
260
|
+
isolation: isolate;
|
|
258
261
|
}
|
|
259
262
|
|
|
260
263
|
.ct-datum-frame::before {
|
|
@@ -267,6 +270,9 @@
|
|
|
267
270
|
border-block-start: var(--border-medium) solid var(--color-brand-accent);
|
|
268
271
|
border-inline-start: var(--border-medium) solid var(--color-brand-accent);
|
|
269
272
|
border-start-start-radius: var(--radius-lg);
|
|
273
|
+
/* Code-frame headers commonly occupy layer 1. The datum must remain visible
|
|
274
|
+
above that chrome because it is the frame's registration mark. */
|
|
275
|
+
z-index: 2;
|
|
270
276
|
pointer-events: none;
|
|
271
277
|
}
|
|
272
278
|
|
package/components/modal.css
CHANGED
|
@@ -64,10 +64,10 @@
|
|
|
64
64
|
flex-wrap: wrap;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
/*
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
.ct-modal__footer
|
|
67
|
+
/* The footer wrapper renders even when no content is projected into it
|
|
68
|
+
(framework wrappers cannot reliably detect projection). Hide it when
|
|
69
|
+
empty so footerless modals leave no ghost divider behind. */
|
|
70
|
+
.ct-modal__footer:not(:has(*)) {
|
|
71
71
|
display: none;
|
|
72
72
|
}
|
|
73
73
|
|