@celestia-island/hikari 0.49.1 → 0.49.2

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.49.1",
3
+ "version": "0.49.2",
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",
@@ -56,18 +56,18 @@
56
56
  z-index: 1;
57
57
  top: 50%;
58
58
  left: 50%;
59
+ // The centering translate is part of EVERY transform state — the
60
+ // enter/leave choreography scales on top of it and must never re-seat
61
+ // the frame.
59
62
  transform: translate(-50%, -50%);
60
- interpolate-size: allow-keywords;
61
63
  width: 100%;
62
64
  // Size changes animate instead of snapping: `height: auto` growth
63
65
  // cannot fire a CSS transition (verified in Chromium — neither auto
64
66
  // nor calc-size(auto, size) changes its computed value on content
65
- // growth, even under interpolate-size), so HkModal's useSizeMorph
66
- // measures the frame's natural (capped) height and pins it as px on
67
- // every content change — the transition below animates old→new px.
68
- // `interpolate-size: allow-keywords` stays for the enter/leave height
69
- // choreography's calc-size() keywords. The enter/leave classes below
70
- // override this transition during open/close, as they always have.
67
+ // growth), so HkModal's useSizeMorph measures the frame's natural
68
+ // (capped) height and pins it as px on every content change — the
69
+ // transition below animates old→new px. Both pinned values are
70
+ // explicit px, so this needs no interpolate-size keyword support.
71
71
  transition:
72
72
  height var(--duration-fast, 0.15s) var(--ease-standard, cubic-bezier(0.4, 0, 0.2, 1)),
73
73
  max-height var(--duration-fast, 0.15s) var(--ease-standard, cubic-bezier(0.4, 0, 0.2, 1));
@@ -88,47 +88,46 @@
88
88
  // ------
89
89
  // Content enter/leave transitions
90
90
  //
91
- // Height-clipped reveal: the frame grows from 80% of its
92
- // natural height to full height while fading in. Content
93
- // children are pinned at natural size (not squashed) —
94
- // overflow: hidden on the frame clips the viewport.
91
+ // Compositor-driven pop: the frame fades and scales 0.94 → 1 — transform
92
+ // and opacity ONLY, no layout properties. The previous desktop reveal
93
+ // animated `height` (calc-size keywords): height is a layout property, so
94
+ // every animation frame re-laid-out the entire modal subtree — for a
95
+ // content-heavy modal (a full graph stage, long report bodies) that is
96
+ // visible frame drops through the whole open/close, made worse by the
97
+ // frame's own backdrop-filter whose sampling region then also changed per
98
+ // frame. transform/opacity run on the compositor: zero layout, zero
99
+ // paint, and the blurred surface keeps a constant region. Mirrors the
100
+ // mobile sheet's translateY reveal, which has always been transform-based.
95
101
  // ------
96
102
 
97
103
  .hk-modal-content-enter-active {
98
104
  transition:
99
105
  opacity var(--hk-modal-duration, 0.3s)
100
106
  var(--hk-modal-ease-out, cubic-bezier(0.16, 1, 0.3, 1)),
101
- height var(--hk-modal-duration, 0.3s)
107
+ transform var(--hk-modal-duration, 0.3s)
102
108
  var(--hk-modal-ease-out, cubic-bezier(0.16, 1, 0.3, 1));
103
- will-change: height, opacity;
109
+ will-change: transform, opacity;
104
110
  }
105
111
 
106
112
  .hk-modal-content-leave-active {
107
113
  transition:
108
114
  opacity var(--hk-modal-duration, 0.25s)
109
115
  var(--hk-modal-ease-in, cubic-bezier(0.4, 0, 1, 1)),
110
- height var(--hk-modal-duration, 0.25s)
116
+ transform var(--hk-modal-duration, 0.25s)
111
117
  var(--hk-modal-ease-in, cubic-bezier(0.4, 0, 1, 1));
112
- will-change: height, opacity;
113
- }
114
-
115
- // Pin children to natural flex-basis during animation so the
116
- // frame's overflow: hidden does the clipping, not flex-shrink.
117
- .hk-modal-content-enter-active > *,
118
- .hk-modal-content-leave-active > * {
119
- flex: 0 0 auto;
118
+ will-change: transform, opacity;
120
119
  }
121
120
 
122
121
  .hk-modal-content-enter-from,
123
122
  .hk-modal-content-leave-to {
124
123
  opacity: 0;
125
- height: calc-size(auto, size * 0.8);
124
+ transform: translate(-50%, -50%) scale(0.94);
126
125
  }
127
126
 
128
127
  .hk-modal-content-enter-to,
129
128
  .hk-modal-content-leave-from {
130
129
  opacity: 1;
131
- height: auto;
130
+ transform: translate(-50%, -50%) scale(1);
132
131
  }
133
132
 
134
133
  // ------
@@ -344,7 +344,8 @@ export default defineComponent({
344
344
  surfTrack.cancel();
345
345
  onAfterEnter();
346
346
  // Size morphs arm once the open choreography finished —
347
- // pinning during enter would override its height reveal.
347
+ // pinning during enter would fight the reveal's transform
348
+ // transition.
348
349
  morph.start();
349
350
  } else if (to === "closingFrom") {
350
351
  // Close-request bookkeeping (was the watcher's close arm): the