@neuravision/construct 2.1.4 → 2.1.5

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 CHANGED
@@ -5,6 +5,20 @@ 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.5] - 2026-07-17
9
+
10
+ ### Fixed
11
+
12
+ - **Card & Modal: the 2.1.4 `[hidden]` slot guards are replaced with `:not(:has(*))`
13
+ empty-slot rules — update immediately if you are on 2.1.4.** The attribute guards
14
+ trusted the wrapper's projection detection; ng-construct's `AfCard`/`AfModal` detection
15
+ (`contentChild('[header]')` resolves a template reference name, never a CSS selector)
16
+ reports "empty" for every slot, so 2.1.4 blanked out populated card headers/footers and
17
+ every modal footer in consuming apps. The slots now decide visibility purely in CSS:
18
+ a header/footer wrapper with no projected element hides itself, one with content always
19
+ renders — regardless of what the wrapper's `hidden` attribute claims. The original
20
+ 2.1.4 goal (no ghost divider under footerless cards/modals) is preserved.
21
+
8
22
  ## [2.1.4] - 2026-07-17
9
23
 
10
24
  ### Fixed
@@ -46,12 +46,12 @@
46
46
  border-top: var(--border-thin) solid var(--color-border-subtle);
47
47
  }
48
48
 
49
- /* Wrappers hide empty slots via the `hidden` attribute (e.g. framework
50
- integrations when no content is projected). The display rules above would
51
- otherwise override the UA stylesheet's `[hidden] { display: none }` and
52
- leave a ghost divider + spacing behind. */
53
- .ct-card__header[hidden],
54
- .ct-card__footer[hidden] {
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
 
@@ -64,10 +64,10 @@
64
64
  flex-wrap: wrap;
65
65
  }
66
66
 
67
- /* Wrappers hide the footer via the `hidden` attribute when no content is
68
- projected; `display: flex` above would otherwise override the UA
69
- stylesheet's `[hidden]` rule and leave a ghost divider behind. */
70
- .ct-modal__footer[hidden] {
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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neuravision/construct",
3
- "version": "2.1.4",
3
+ "version": "2.1.5",
4
4
  "description": "Construct Design System - Accessible, token-based design system for modern web applications",
5
5
  "license": "MIT",
6
6
  "repository": {