@flyingrobots/bijou-tui 2.1.0 → 3.1.0
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/README.md +64 -21
- package/dist/animate.d.ts +0 -2
- package/dist/animate.d.ts.map +1 -1
- package/dist/animate.js +17 -26
- package/dist/animate.js.map +1 -1
- package/dist/app-frame-actions.d.ts +1 -5
- package/dist/app-frame-actions.d.ts.map +1 -1
- package/dist/app-frame-actions.js +21 -17
- package/dist/app-frame-actions.js.map +1 -1
- package/dist/app-frame-render.d.ts +2 -0
- package/dist/app-frame-render.d.ts.map +1 -1
- package/dist/app-frame-render.js +55 -8
- package/dist/app-frame-render.js.map +1 -1
- package/dist/app-frame-types.d.ts +9 -0
- package/dist/app-frame-types.d.ts.map +1 -1
- package/dist/app-frame-types.js +4 -4
- package/dist/app-frame-types.js.map +1 -1
- package/dist/app-frame.d.ts +39 -2
- package/dist/app-frame.d.ts.map +1 -1
- package/dist/app-frame.js +195 -31
- package/dist/app-frame.js.map +1 -1
- package/dist/canvas.d.ts +37 -25
- package/dist/canvas.d.ts.map +1 -1
- package/dist/canvas.js +116 -30
- package/dist/canvas.js.map +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +12 -4
- package/dist/commands.js.map +1 -1
- package/dist/css/install.d.ts +4 -0
- package/dist/css/install.d.ts.map +1 -0
- package/dist/css/install.js +24 -0
- package/dist/css/install.js.map +1 -0
- package/dist/css/parser.d.ts +14 -0
- package/dist/css/parser.d.ts.map +1 -0
- package/dist/css/parser.js +92 -0
- package/dist/css/parser.js.map +1 -0
- package/dist/css/resolver.d.ts +36 -0
- package/dist/css/resolver.d.ts.map +1 -0
- package/dist/css/resolver.js +130 -0
- package/dist/css/resolver.js.map +1 -0
- package/dist/css/text-style.d.ts +17 -0
- package/dist/css/text-style.d.ts.map +1 -0
- package/dist/css/text-style.js +59 -0
- package/dist/css/text-style.js.map +1 -0
- package/dist/css/types.d.ts +27 -0
- package/dist/css/types.d.ts.map +1 -0
- package/dist/css/types.js +5 -0
- package/dist/css/types.js.map +1 -0
- package/dist/driver.d.ts +14 -7
- package/dist/driver.d.ts.map +1 -1
- package/dist/driver.js +38 -17
- package/dist/driver.js.map +1 -1
- package/dist/eventbus.d.ts +42 -3
- package/dist/eventbus.d.ts.map +1 -1
- package/dist/eventbus.js +127 -3
- package/dist/eventbus.js.map +1 -1
- package/dist/focus-area.d.ts +4 -0
- package/dist/focus-area.d.ts.map +1 -1
- package/dist/focus-area.js +11 -1
- package/dist/focus-area.js.map +1 -1
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/layout-v3.d.ts +10 -0
- package/dist/layout-v3.d.ts.map +1 -0
- package/dist/layout-v3.js +35 -0
- package/dist/layout-v3.js.map +1 -0
- package/dist/motion/motion.d.ts +14 -0
- package/dist/motion/motion.d.ts.map +1 -0
- package/dist/motion/motion.js +31 -0
- package/dist/motion/motion.js.map +1 -0
- package/dist/motion/reconciler.d.ts +15 -0
- package/dist/motion/reconciler.d.ts.map +1 -0
- package/dist/motion/reconciler.js +109 -0
- package/dist/motion/reconciler.js.map +1 -0
- package/dist/motion/types.d.ts +52 -0
- package/dist/motion/types.d.ts.map +1 -0
- package/dist/motion/types.js +2 -0
- package/dist/motion/types.js.map +1 -0
- package/dist/notification.d.ts +73 -0
- package/dist/notification.d.ts.map +1 -0
- package/dist/notification.js +693 -0
- package/dist/notification.js.map +1 -0
- package/dist/overlay.d.ts +3 -1
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js.map +1 -1
- package/dist/pipeline/middleware/css.d.ts +20 -0
- package/dist/pipeline/middleware/css.d.ts.map +1 -0
- package/dist/pipeline/middleware/css.js +41 -0
- package/dist/pipeline/middleware/css.js.map +1 -0
- package/dist/pipeline/middleware/grayscale.d.ts +9 -0
- package/dist/pipeline/middleware/grayscale.d.ts.map +1 -0
- package/dist/pipeline/middleware/grayscale.js +39 -0
- package/dist/pipeline/middleware/grayscale.js.map +1 -0
- package/dist/pipeline/middleware/motion.d.ts +6 -0
- package/dist/pipeline/middleware/motion.d.ts.map +1 -0
- package/dist/pipeline/middleware/motion.js +19 -0
- package/dist/pipeline/middleware/motion.js.map +1 -0
- package/dist/pipeline/middleware/paint.d.ts +6 -0
- package/dist/pipeline/middleware/paint.d.ts.map +1 -0
- package/dist/pipeline/middleware/paint.js +21 -0
- package/dist/pipeline/middleware/paint.js.map +1 -0
- package/dist/pipeline/pipeline.d.ts +56 -0
- package/dist/pipeline/pipeline.d.ts.map +1 -0
- package/dist/pipeline/pipeline.js +45 -0
- package/dist/pipeline/pipeline.js.map +1 -0
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +180 -18
- package/dist/runtime.js.map +1 -1
- package/dist/screen.d.ts +12 -1
- package/dist/screen.d.ts.map +1 -1
- package/dist/screen.js +14 -1
- package/dist/screen.js.map +1 -1
- package/dist/subapp/mount.d.ts +67 -0
- package/dist/subapp/mount.d.ts.map +1 -0
- package/dist/subapp/mount.js +60 -0
- package/dist/subapp/mount.js.map +1 -0
- package/dist/types.d.ts +75 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -1
- package/dist/view-output.d.ts +15 -0
- package/dist/view-output.d.ts.map +1 -0
- package/dist/view-output.js +53 -0
- package/dist/view-output.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { resolveSpringConfig, resolveTweenConfig, springStep, tweenStep, } from '../spring.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registry of active motion components across frames.
|
|
4
|
+
*/
|
|
5
|
+
export class MotionReconciler {
|
|
6
|
+
tracked = new Map();
|
|
7
|
+
/**
|
|
8
|
+
* Reconcile the target layout tree with the last known positions.
|
|
9
|
+
* If a node with a known key has moved, it initiates/continues a transition.
|
|
10
|
+
*/
|
|
11
|
+
reconcile(node, dt) {
|
|
12
|
+
if (node.id) {
|
|
13
|
+
this.processNode(node, dt);
|
|
14
|
+
}
|
|
15
|
+
for (const child of node.children) {
|
|
16
|
+
this.reconcile(child, dt);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
processNode(node, dt) {
|
|
20
|
+
const key = node.id;
|
|
21
|
+
const motion = node.motion;
|
|
22
|
+
const targetRect = { ...node.rect };
|
|
23
|
+
let state = this.tracked.get(key);
|
|
24
|
+
if (!state) {
|
|
25
|
+
const initialRect = resolveInitialRect(targetRect, motion?.initial);
|
|
26
|
+
state = {
|
|
27
|
+
key,
|
|
28
|
+
targetRect,
|
|
29
|
+
currentRect: initialRect,
|
|
30
|
+
velocity: { x: 0, y: 0, w: 0, h: 0 },
|
|
31
|
+
mode: motion?.transition?.type ?? 'spring',
|
|
32
|
+
tweenElapsedMs: 0,
|
|
33
|
+
tweenFromRect: initialRect,
|
|
34
|
+
done: isSameRect(initialRect, targetRect),
|
|
35
|
+
};
|
|
36
|
+
this.tracked.set(key, state);
|
|
37
|
+
}
|
|
38
|
+
const nextMode = motion?.transition?.type ?? state.mode ?? 'spring';
|
|
39
|
+
const targetChanged = !isSameRect(state.targetRect, targetRect) || state.mode !== nextMode;
|
|
40
|
+
if (targetChanged) {
|
|
41
|
+
state.targetRect = targetRect;
|
|
42
|
+
state.mode = nextMode;
|
|
43
|
+
state.done = false;
|
|
44
|
+
if (nextMode === 'tween') {
|
|
45
|
+
state.tweenElapsedMs = 0;
|
|
46
|
+
state.tweenFromRect = { ...state.currentRect };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// If target changed or we are still moving, step the physics
|
|
50
|
+
const needsUpdate = !isSameRect(state.currentRect, state.targetRect) || !state.done;
|
|
51
|
+
if (needsUpdate && dt > 0) {
|
|
52
|
+
if (state.mode === 'tween') {
|
|
53
|
+
const tween = tweenStep({ value: state.tweenElapsedMs <= 0 ? 0 : state.tweenElapsedMs, elapsed: state.tweenElapsedMs, done: false }, resolveTweenConfig({ duration: Math.max(1, motion?.transition?.duration ?? 300) }), dt * 1000);
|
|
54
|
+
state.tweenElapsedMs = tween.elapsed;
|
|
55
|
+
state.currentRect = lerpRect(state.tweenFromRect, state.targetRect, tween.value);
|
|
56
|
+
state.done = tween.done;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
const config = resolveSpringConfig(motion?.transition?.spring ?? 'gentle');
|
|
60
|
+
const nextX = this.step(state.currentRect.x, state.targetRect.x, state.velocity.x, config, dt);
|
|
61
|
+
const nextY = this.step(state.currentRect.y, state.targetRect.y, state.velocity.y, config, dt);
|
|
62
|
+
const nextW = this.step(state.currentRect.width, state.targetRect.width, state.velocity.w, config, dt);
|
|
63
|
+
const nextH = this.step(state.currentRect.height, state.targetRect.height, state.velocity.h, config, dt);
|
|
64
|
+
state.currentRect = { x: nextX.val, y: nextY.val, width: nextW.val, height: nextH.val };
|
|
65
|
+
state.velocity = { x: nextX.vel, y: nextY.vel, w: nextW.vel, h: nextH.vel };
|
|
66
|
+
state.done = nextX.done && nextY.done && nextW.done && nextH.done;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Apply interpolated rect to the layout node for the paint pass
|
|
70
|
+
node.rect = roundRect(state.currentRect);
|
|
71
|
+
}
|
|
72
|
+
step(curr, target, vel, config, dt) {
|
|
73
|
+
const s = springStep({ value: curr, velocity: vel, done: false }, target, config, dt);
|
|
74
|
+
return { val: s.value, vel: s.velocity, done: s.done };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function isSameRect(a, b) {
|
|
78
|
+
return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
|
|
79
|
+
}
|
|
80
|
+
function resolveInitialRect(target, initial) {
|
|
81
|
+
if (initial == null)
|
|
82
|
+
return { ...target };
|
|
83
|
+
return {
|
|
84
|
+
x: target.x + (initial.x ?? 0),
|
|
85
|
+
y: target.y + (initial.y ?? 0),
|
|
86
|
+
width: initial.width ?? target.width,
|
|
87
|
+
height: initial.height ?? target.height,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function lerpRect(from, to, progress) {
|
|
91
|
+
return {
|
|
92
|
+
x: lerp(from.x, to.x, progress),
|
|
93
|
+
y: lerp(from.y, to.y, progress),
|
|
94
|
+
width: lerp(from.width, to.width, progress),
|
|
95
|
+
height: lerp(from.height, to.height, progress),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function lerp(from, to, progress) {
|
|
99
|
+
return from + (to - from) * progress;
|
|
100
|
+
}
|
|
101
|
+
function roundRect(rect) {
|
|
102
|
+
return {
|
|
103
|
+
x: Math.round(rect.x),
|
|
104
|
+
y: Math.round(rect.y),
|
|
105
|
+
width: Math.max(0, Math.round(rect.width)),
|
|
106
|
+
height: Math.max(0, Math.round(rect.height)),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=reconciler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconciler.js","sourceRoot":"","sources":["../../src/motion/reconciler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { LayoutRect } from '@flyingrobots/bijou';
|
|
2
|
+
import type { SpringConfig, SpringPreset } from '../spring.js';
|
|
3
|
+
/**
|
|
4
|
+
* Options for the motion() declarative wrapper.
|
|
5
|
+
*/
|
|
6
|
+
export interface MotionOptions {
|
|
7
|
+
/**
|
|
8
|
+
* A unique key to track this component across frames.
|
|
9
|
+
* Essential for stable transitions during list re-ordering.
|
|
10
|
+
*/
|
|
11
|
+
key: string;
|
|
12
|
+
/**
|
|
13
|
+
* Transition configuration.
|
|
14
|
+
* Defaults to a 'gentle' spring.
|
|
15
|
+
*/
|
|
16
|
+
transition?: {
|
|
17
|
+
type?: 'spring' | 'tween';
|
|
18
|
+
spring?: SpringPreset | SpringConfig;
|
|
19
|
+
duration?: number;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Initial layout offsets or size overrides when the component first appears.
|
|
23
|
+
* e.g. { x: -10, y: 2, width: 0 }
|
|
24
|
+
*/
|
|
25
|
+
initial?: Partial<LayoutRect>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Internal state for a tracked motion component.
|
|
29
|
+
*/
|
|
30
|
+
export interface TrackedMotion {
|
|
31
|
+
key: string;
|
|
32
|
+
/** The target rect we are moving towards. */
|
|
33
|
+
targetRect: LayoutRect;
|
|
34
|
+
/** The current interpolated rect being rendered. */
|
|
35
|
+
currentRect: LayoutRect;
|
|
36
|
+
/** Velocity for spring physics. */
|
|
37
|
+
velocity: {
|
|
38
|
+
x: number;
|
|
39
|
+
y: number;
|
|
40
|
+
w: number;
|
|
41
|
+
h: number;
|
|
42
|
+
};
|
|
43
|
+
/** Resolved motion mode for the current transition. */
|
|
44
|
+
mode: 'spring' | 'tween';
|
|
45
|
+
/** Elapsed time for tween transitions. */
|
|
46
|
+
tweenElapsedMs: number;
|
|
47
|
+
/** Starting rect for the active tween. */
|
|
48
|
+
tweenFromRect: LayoutRect;
|
|
49
|
+
/** Whether the motion has settled. */
|
|
50
|
+
done: boolean;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/motion/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;QAC1B,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAC7C,UAAU,EAAE,UAAU,CAAC;IACvB,oDAAoD;IACpD,WAAW,EAAE,UAAU,CAAC;IACxB,mCAAmC;IACnC,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,uDAAuD;IACvD,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,0CAA0C;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,aAAa,EAAE,UAAU,CAAC;IAC1B,sCAAsC;IACtC,IAAI,EAAE,OAAO,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/motion/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { BijouContext, OverflowBehavior, TokenValue } from '@flyingrobots/bijou';
|
|
2
|
+
import type { Overlay } from './overlay.js';
|
|
3
|
+
import type { LayoutRect } from './layout-rect.js';
|
|
4
|
+
export type NotificationVariant = 'ACTIONABLE' | 'INLINE' | 'TOAST';
|
|
5
|
+
export type NotificationTone = 'INFO' | 'SUCCESS' | 'WARNING' | 'ERROR';
|
|
6
|
+
export type NotificationPlacement = 'UPPER_LEFT' | 'UPPER_RIGHT' | 'LOWER_LEFT' | 'LOWER_RIGHT' | 'TOP_CENTER' | 'BOTTOM_CENTER' | 'CENTER';
|
|
7
|
+
export interface NotificationAction<Msg> {
|
|
8
|
+
readonly label: string;
|
|
9
|
+
readonly payload: Msg;
|
|
10
|
+
}
|
|
11
|
+
export interface NotificationSpec<Msg> {
|
|
12
|
+
readonly title: string;
|
|
13
|
+
readonly message?: string;
|
|
14
|
+
readonly variant?: NotificationVariant;
|
|
15
|
+
readonly tone?: NotificationTone;
|
|
16
|
+
readonly durationMs?: number | null;
|
|
17
|
+
readonly placement?: NotificationPlacement;
|
|
18
|
+
readonly action?: NotificationAction<Msg>;
|
|
19
|
+
readonly bgToken?: TokenValue;
|
|
20
|
+
readonly accentToken?: TokenValue;
|
|
21
|
+
readonly overflow?: OverflowBehavior;
|
|
22
|
+
}
|
|
23
|
+
export type NotificationPhase = 'entering' | 'visible' | 'exiting';
|
|
24
|
+
export interface NotificationRecord<Msg> {
|
|
25
|
+
readonly id: number;
|
|
26
|
+
readonly title: string;
|
|
27
|
+
readonly message: string;
|
|
28
|
+
readonly variant: NotificationVariant;
|
|
29
|
+
readonly tone: NotificationTone;
|
|
30
|
+
readonly durationMs: number | null;
|
|
31
|
+
readonly placement: NotificationPlacement;
|
|
32
|
+
readonly action?: NotificationAction<Msg>;
|
|
33
|
+
readonly bgToken?: TokenValue;
|
|
34
|
+
readonly accentToken?: TokenValue;
|
|
35
|
+
readonly overflow: OverflowBehavior;
|
|
36
|
+
readonly createdAtMs: number;
|
|
37
|
+
readonly updatedAtMs: number;
|
|
38
|
+
readonly enteredAtMs?: number;
|
|
39
|
+
readonly exitStartedAtMs?: number;
|
|
40
|
+
readonly phase: NotificationPhase;
|
|
41
|
+
readonly progress: number;
|
|
42
|
+
}
|
|
43
|
+
export interface NotificationState<Msg> {
|
|
44
|
+
readonly items: readonly NotificationRecord<Msg>[];
|
|
45
|
+
readonly overflowExits: readonly NotificationRecord<Msg>[];
|
|
46
|
+
readonly history: readonly NotificationRecord<Msg>[];
|
|
47
|
+
readonly nextId: number;
|
|
48
|
+
readonly focusedId?: number;
|
|
49
|
+
}
|
|
50
|
+
export interface RenderNotificationStackOptions {
|
|
51
|
+
readonly screenWidth: number;
|
|
52
|
+
readonly screenHeight: number;
|
|
53
|
+
readonly region?: LayoutRect;
|
|
54
|
+
readonly ctx?: BijouContext;
|
|
55
|
+
readonly margin?: number;
|
|
56
|
+
readonly gap?: number;
|
|
57
|
+
}
|
|
58
|
+
export declare function createNotificationState<Msg>(): NotificationState<Msg>;
|
|
59
|
+
export declare function pushNotification<Msg>(state: NotificationState<Msg>, spec: NotificationSpec<Msg>, nowMs: number): NotificationState<Msg>;
|
|
60
|
+
export declare function dismissNotification<Msg>(state: NotificationState<Msg>, id: number, nowMs: number): NotificationState<Msg>;
|
|
61
|
+
export declare function dismissFocusedNotification<Msg>(state: NotificationState<Msg>, nowMs: number): NotificationState<Msg>;
|
|
62
|
+
export declare function relocateNotifications<Msg>(state: NotificationState<Msg>, placement: NotificationPlacement, nowMs?: number): NotificationState<Msg>;
|
|
63
|
+
export declare function cycleNotificationFocus<Msg>(state: NotificationState<Msg>, delta: number): NotificationState<Msg>;
|
|
64
|
+
export declare function activateFocusedNotification<Msg>(state: NotificationState<Msg>, nowMs: number): {
|
|
65
|
+
readonly state: NotificationState<Msg>;
|
|
66
|
+
readonly payload?: Msg;
|
|
67
|
+
};
|
|
68
|
+
export declare function tickNotifications<Msg>(state: NotificationState<Msg>, nowMs: number): NotificationState<Msg>;
|
|
69
|
+
export declare function hasNotifications<Msg>(state: NotificationState<Msg>): boolean;
|
|
70
|
+
export declare function notificationsNeedTick<Msg>(state: NotificationState<Msg>): boolean;
|
|
71
|
+
export declare function trimNotificationsToViewport<Msg>(state: NotificationState<Msg>, options: RenderNotificationStackOptions, nowMs?: number): NotificationState<Msg>;
|
|
72
|
+
export declare function renderNotificationStack<Msg>(state: NotificationState<Msg>, options: RenderNotificationStackOptions): readonly Overlay[];
|
|
73
|
+
//# sourceMappingURL=notification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../src/notification.ts"],"names":[],"mappings":"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"}
|