@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
|
@@ -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
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
//
|
|
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
|
-
//
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
//
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|