@celestia-island/hikari 0.55.128 → 0.55.130

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celestia-island/hikari",
3
- "version": "0.55.128",
3
+ "version": "0.55.130",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Hikari Vue 3 component library — production-grade UI components based on shittim-chest design system",
@@ -18,8 +18,20 @@ import type { SurfacePhase } from "../runtime/surfaceMachine";
18
18
  * always plays over the content the user was actually looking at. Vue's
19
19
  * patch skips identical vnode references, so the held DOM is never
20
20
  * re-patched during the close; child components with their own store
21
- * subscriptions may still self-update (harmless — the failure mode under
22
- * repair is content VANISHING, not content ticking).
21
+ * subscriptions may still self-update.
22
+ *
23
+ * ⚠️ CONTRACT for bodies under this hold (the 2026-10-06 chest crash:
24
+ * `TypeError: Cannot read properties of null (reading 'content')` in a
25
+ * report window's close fold): a held child that subscribed to the body's
26
+ * reactive reads re-renders with the FROZEN slot closures, so any slot
27
+ * body that re-reads a live ref at invocation time sees the host's
28
+ * teardown null and throws. The "self-updates are harmless" claim the
29
+ * original comment made is wrong in exactly that case. Bodies must render
30
+ * a per-render SNAPSHOT of their nullable state (read it once in the
31
+ * render function, hand the captured value to every deferred closure) —
32
+ * never re-read the live ref inside a slot or callback the fold can
33
+ * re-run. (The failure mode under repair remains content VANISHING; a
34
+ * throwing deferred read is the second, sharper failure mode.)
23
35
  *
24
36
  * The hold releases the moment the surface leaves a closing phase: a
25
37
  * reopen interrupt (closing → openingFrom) serves live slots again, and
package/src/scale.scss CHANGED
@@ -7,7 +7,7 @@
7
7
  * foundation) were normalized to the values the production composition
8
8
  * resolves to (chest: admin-tokens + foundation last). This file is the
9
9
  * upstream of styles/theme/scale.scss — edit here, then re-run
10
- * scripts/theme/sync-vendored.sh; do not hand-edit the vendored copy.
10
+ * scripts/theme/sync-vendored.py; do not hand-edit the vendored copy.
11
11
  */
12
12
  :root {
13
13
  /* Spacing (N px at the 16px root). */
@@ -9,7 +9,7 @@
9
9
  * foundation) were normalized to the values the production composition
10
10
  * resolves to (chest: admin-tokens + foundation last). This file is the
11
11
  * upstream of styles/theme/scale.scss — edit here, then re-run
12
- * scripts/theme/sync-vendored.sh; do not hand-edit the vendored copy.
12
+ * scripts/theme/sync-vendored.py; do not hand-edit the vendored copy.
13
13
  */
14
14
  :root {
15
15
  /* Spacing (N px at the 16px root). */
@@ -16,7 +16,7 @@ import { describe, expect, it } from "vitest";
16
16
  *
17
17
  * The re-copy adds exactly one provenance header comment block; everything
18
18
  * after it must match the upstream byte-for-byte. Edit the UPSTREAM, then
19
- * re-run scripts/theme/sync-vendored.sh — never hand-edit the copies.
19
+ * re-run scripts/theme/sync-vendored.py — never hand-edit the copies.
20
20
  */
21
21
 
22
22
  const stylesDir = resolve(dirname(fileURLToPath(import.meta.url)));