@clipkit/editor-core 1.0.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.
Files changed (71) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +20 -0
  3. package/dist/asset-store.d.ts +40 -0
  4. package/dist/asset-store.d.ts.map +1 -0
  5. package/dist/asset-store.js +181 -0
  6. package/dist/asset-store.js.map +1 -0
  7. package/dist/context.d.ts +17 -0
  8. package/dist/context.d.ts.map +1 -0
  9. package/dist/context.js +23 -0
  10. package/dist/context.js.map +1 -0
  11. package/dist/index.d.ts +20 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +17 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/node-graph.d.ts +42 -0
  16. package/dist/node-graph.d.ts.map +1 -0
  17. package/dist/node-graph.js +123 -0
  18. package/dist/node-graph.js.map +1 -0
  19. package/dist/registry/build.d.ts +3 -0
  20. package/dist/registry/build.d.ts.map +1 -0
  21. package/dist/registry/build.js +84 -0
  22. package/dist/registry/build.js.map +1 -0
  23. package/dist/registry/configuration.d.ts +51 -0
  24. package/dist/registry/configuration.d.ts.map +1 -0
  25. package/dist/registry/configuration.js +92 -0
  26. package/dist/registry/configuration.js.map +1 -0
  27. package/dist/registry/derive.d.ts +30 -0
  28. package/dist/registry/derive.d.ts.map +1 -0
  29. package/dist/registry/derive.js +212 -0
  30. package/dist/registry/derive.js.map +1 -0
  31. package/dist/registry/overrides.d.ts +7 -0
  32. package/dist/registry/overrides.d.ts.map +1 -0
  33. package/dist/registry/overrides.js +322 -0
  34. package/dist/registry/overrides.js.map +1 -0
  35. package/dist/registry/types.d.ts +58 -0
  36. package/dist/registry/types.d.ts.map +1 -0
  37. package/dist/registry/types.js +7 -0
  38. package/dist/registry/types.js.map +1 -0
  39. package/dist/source-diff.d.ts +8 -0
  40. package/dist/source-diff.d.ts.map +1 -0
  41. package/dist/source-diff.js +148 -0
  42. package/dist/source-diff.js.map +1 -0
  43. package/dist/stage-utils.d.ts +170 -0
  44. package/dist/stage-utils.d.ts.map +1 -0
  45. package/dist/stage-utils.js +476 -0
  46. package/dist/stage-utils.js.map +1 -0
  47. package/dist/store.d.ts +123 -0
  48. package/dist/store.d.ts.map +1 -0
  49. package/dist/store.js +234 -0
  50. package/dist/store.js.map +1 -0
  51. package/dist/timeline-utils.d.ts +69 -0
  52. package/dist/timeline-utils.d.ts.map +1 -0
  53. package/dist/timeline-utils.js +211 -0
  54. package/dist/timeline-utils.js.map +1 -0
  55. package/dist/types.d.ts +6 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +4 -0
  58. package/dist/types.js.map +1 -0
  59. package/dist/useEditor.d.ts +77 -0
  60. package/dist/useEditor.d.ts.map +1 -0
  61. package/dist/useEditor.js +74 -0
  62. package/dist/useEditor.js.map +1 -0
  63. package/dist/useEditorStore.d.ts +3 -0
  64. package/dist/useEditorStore.d.ts.map +1 -0
  65. package/dist/useEditorStore.js +15 -0
  66. package/dist/useEditorStore.js.map +1 -0
  67. package/dist/usePlaybackSession.d.ts +20 -0
  68. package/dist/usePlaybackSession.d.ts.map +1 -0
  69. package/dist/usePlaybackSession.js +120 -0
  70. package/dist/usePlaybackSession.js.map +1 -0
  71. package/package.json +39 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-utils.js","sourceRoot":"","sources":["../src/stage-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import type { Source, Element } from '@clipkit/protocol';
2
+ import type { ToolId } from './types.js';
3
+ export interface EditorPlaybackState {
4
+ time: number;
5
+ duration: number;
6
+ playing: boolean;
7
+ ready: boolean;
8
+ error: string | null;
9
+ }
10
+ export interface EditorUiState {
11
+ leftPanelOpen: boolean;
12
+ rightPanelOpen: boolean;
13
+ jsonViewOpen: boolean;
14
+ timelineHeight: number;
15
+ timelineScale: number;
16
+ isScrubbing: boolean;
17
+ /** When true, playback wraps to 0 at the end instead of pausing. */
18
+ loop: boolean;
19
+ /** Toggleable perf HUD (engine stats overlay). Bound to Shift+P. */
20
+ perfHudOpen: boolean;
21
+ /**
22
+ * The animated property whose curve is open in the graph drawer
23
+ * (editor state — the lens rule). Null = drawer closed.
24
+ */
25
+ curveTarget: {
26
+ elementId: string;
27
+ property: string;
28
+ } | null;
29
+ /**
30
+ * Color theme. The Editor's `theme` prop is the initial value;
31
+ * after mount the user can toggle via the header button and the
32
+ * store becomes the live source of truth.
33
+ */
34
+ theme: 'light' | 'dark';
35
+ /**
36
+ * Stage preview projection (CKP/1.0 camera). 'camera' renders through
37
+ * the scene camera (true framing); 'flat' ignores it for orthographic,
38
+ * gizmo-correct editing — AE's Camera vs Front view. The LENS RULE:
39
+ * preview-only, NEVER serialized; the stored source keeps its camera.
40
+ * Only meaningful when the source declares a `camera`.
41
+ */
42
+ stageView: 'camera' | 'flat';
43
+ /** Active stage tool: 'select' (click/marquee) or 'hand' (drag to pan). */
44
+ tool: 'select' | 'hand';
45
+ /** Group drill-down: ids of the groups entered (breadcrumb trail, root = []).
46
+ * The timeline scopes to the deepest entered group's children. */
47
+ groupPath: string[];
48
+ /** A group id to briefly flash on the stage (set on enter, auto-cleared). */
49
+ groupFlashId: string | null;
50
+ /** Stage zoom factor — 1.0 = 1px source pixel = 1 screen pixel. */
51
+ stageZoom: number;
52
+ /** Stage pan offset, in screen pixels relative to the viewport top-left. */
53
+ stagePan: {
54
+ x: number;
55
+ y: number;
56
+ };
57
+ /**
58
+ * Preview-only audio mute/solo (element ids). The LENS RULE: these
59
+ * compute engine preview gains and are NEVER serialized. Shared by
60
+ * the mixer rail and the inspector's volume knob.
61
+ */
62
+ audioMuted: readonly string[];
63
+ audioSolo: readonly string[];
64
+ }
65
+ export interface EditorState {
66
+ source: Source;
67
+ history: {
68
+ past: Source[];
69
+ future: Source[];
70
+ };
71
+ selection: string[];
72
+ tool: ToolId | null;
73
+ ui: EditorUiState;
74
+ playback: EditorPlaybackState;
75
+ _setSource: (source: Source, opts?: {
76
+ skipHistory?: boolean;
77
+ }) => void;
78
+ _updateElement: (id: string, patch: Partial<Element>) => void;
79
+ /**
80
+ * Patch SOURCE-LEVEL fields (width, duration, background_color,
81
+ * camera, …). `skipHistory` follows the _moveElements contract for
82
+ * live scrubs that snapshotted once via `_pushHistory()`.
83
+ */
84
+ _patchSource: (patch: Record<string, unknown>, opts?: {
85
+ skipHistory?: boolean;
86
+ }) => void;
87
+ _addElement: (element: Element) => void;
88
+ _removeElement: (id: string) => void;
89
+ /**
90
+ * Batched element update. When `opts.skipHistory` is true, history
91
+ * is not pushed — used during live drag dispatches after the caller
92
+ * has already snapshotted once via `_pushHistory()`.
93
+ */
94
+ _moveElements: (updates: ReadonlyArray<{
95
+ id: string;
96
+ patch: Partial<Element>;
97
+ }>, opts?: {
98
+ skipHistory?: boolean;
99
+ }) => void;
100
+ /**
101
+ * Snapshot the current source into history.past — used at the start
102
+ * of a multi-tick interactive operation (drag, etc.) so the whole
103
+ * operation collapses into a single undoable entry.
104
+ */
105
+ _pushHistory: () => void;
106
+ _setSelection: (ids: string[]) => void;
107
+ _setTool: (tool: ToolId | null) => void;
108
+ _undo: () => void;
109
+ _redo: () => void;
110
+ _setPlaybackState: (patch: Partial<EditorPlaybackState>) => void;
111
+ _setUiState: (patch: Partial<EditorUiState>) => void;
112
+ }
113
+ /**
114
+ * Create an editor store. Callers (the `Editor` root) construct one per
115
+ * editing session and pass it through context. Components read it via
116
+ * the `useEditorStore` hook re-exported by the root.
117
+ */
118
+ export declare function createEditorStore(initialSource: Source, initialTheme?: 'light' | 'dark'): import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<EditorState>, "setState"> & {
119
+ setState(nextStateOrUpdater: EditorState | Partial<EditorState> | ((state: import("immer").WritableDraft<EditorState>) => void), shouldReplace?: false): void;
120
+ setState(nextStateOrUpdater: EditorState | ((state: import("immer").WritableDraft<EditorState>) => void), shouldReplace: true): void;
121
+ }>;
122
+ export type EditorStore = ReturnType<typeof createEditorStore>;
123
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/store.js ADDED
@@ -0,0 +1,234 @@
1
+ // useEditorStore — the canonical state for an editing session.
2
+ //
3
+ // Sections (one store, organized internally):
4
+ // source — the canonical Source being edited
5
+ // history — past + future Source snapshots for undo/redo
6
+ // selection — selected element ids
7
+ // tool — active dock tool, or null
8
+ // ui — panel layout + transient interaction state
9
+ // playback — mirror of PlaybackEngine state (time, playing, …)
10
+ //
11
+ // Mutator actions are underscore-prefixed; they're low-level and don't
12
+ // know about the engine. The `useEditor()` facade wraps them with the
13
+ // engine-aware behavior (e.g., updateElement triggers engine.setSource
14
+ // via the Editor root's useEffect on source).
15
+ import { create } from 'zustand';
16
+ import { immer } from 'zustand/middleware/immer';
17
+ import { current } from 'immer';
18
+ import { elementLayer } from './timeline-utils.js';
19
+ const HISTORY_LIMIT = 50;
20
+ const defaultUi = {
21
+ leftPanelOpen: true,
22
+ rightPanelOpen: true,
23
+ jsonViewOpen: true,
24
+ timelineHeight: 280,
25
+ timelineScale: 100,
26
+ isScrubbing: false,
27
+ loop: true,
28
+ perfHudOpen: false,
29
+ curveTarget: null,
30
+ theme: 'dark',
31
+ // 0 sentinel for stageZoom means "auto-fit on first viewport measurement";
32
+ // the Stage's mount effect computes a real number once it has dimensions.
33
+ stageView: 'camera',
34
+ tool: 'select',
35
+ groupPath: [],
36
+ groupFlashId: null,
37
+ stageZoom: 0,
38
+ stagePan: { x: 0, y: 0 },
39
+ audioMuted: [],
40
+ audioSolo: [],
41
+ };
42
+ const defaultPlayback = {
43
+ time: 0,
44
+ duration: 0,
45
+ playing: false,
46
+ ready: false,
47
+ error: null,
48
+ };
49
+ /**
50
+ * Create an editor store. Callers (the `Editor` root) construct one per
51
+ * editing session and pass it through context. Components read it via
52
+ * the `useEditorStore` hook re-exported by the root.
53
+ */
54
+ export function createEditorStore(initialSource, initialTheme = 'dark') {
55
+ return create()(immer((set) => ({
56
+ source: initialSource,
57
+ history: { past: [], future: [] },
58
+ selection: [],
59
+ tool: null,
60
+ ui: { ...defaultUi, theme: initialTheme },
61
+ playback: defaultPlayback,
62
+ _setSource: (source, opts) => set((state) => {
63
+ if (!opts?.skipHistory)
64
+ pushHistory(state);
65
+ state.source = source;
66
+ // External source swap clears selection — ids may no longer
67
+ // exist in the new tree.
68
+ state.selection = [];
69
+ }),
70
+ _updateElement: (id, patch) => set((state) => {
71
+ const el = findElementById(state.source.elements, id);
72
+ if (!el)
73
+ return;
74
+ pushHistory(state);
75
+ Object.assign(el, patch);
76
+ alignSourceDuration(state);
77
+ }),
78
+ _patchSource: (patch, opts) => set((state) => {
79
+ if (!opts?.skipHistory)
80
+ pushHistory(state);
81
+ Object.assign(state.source, patch);
82
+ alignSourceDuration(state);
83
+ }),
84
+ _addElement: (element) => set((state) => {
85
+ pushHistory(state);
86
+ const els = state.source.elements;
87
+ // New elements (incl. duplicates) go ON TOP — layer 1 — and the
88
+ // existing siblings renumber to 2..N+1 so the container stays
89
+ // uniquely layered. Correct-by-construction at EDIT time (not a
90
+ // load-time normalize); element array order is preserved.
91
+ [...els]
92
+ .sort((a, b) => elementLayer(a) - elementLayer(b))
93
+ .forEach((el, i) => { el.layer = i + 2; });
94
+ element.layer = 1;
95
+ els.push(element);
96
+ if (element.id)
97
+ state.selection = [element.id];
98
+ alignSourceDuration(state);
99
+ }),
100
+ _removeElement: (id) => set((state) => {
101
+ const elements = state.source.elements;
102
+ const idx = elements.findIndex((e) => e.id === id);
103
+ if (idx < 0)
104
+ return;
105
+ pushHistory(state);
106
+ elements.splice(idx, 1);
107
+ state.selection = state.selection.filter((s) => s !== id);
108
+ alignSourceDuration(state);
109
+ }),
110
+ _moveElements: (updates, opts) => set((state) => {
111
+ if (updates.length === 0)
112
+ return;
113
+ if (!opts?.skipHistory)
114
+ pushHistory(state);
115
+ for (const { id, patch } of updates) {
116
+ const el = findElementById(state.source.elements, id);
117
+ if (!el)
118
+ continue;
119
+ Object.assign(el, patch);
120
+ }
121
+ alignSourceDuration(state);
122
+ }),
123
+ _pushHistory: () => set((state) => {
124
+ pushHistory(state);
125
+ }),
126
+ _setSelection: (ids) => set((state) => {
127
+ state.selection = ids;
128
+ }),
129
+ _setTool: (tool) => set((state) => {
130
+ state.tool = tool;
131
+ }),
132
+ _undo: () => set((state) => {
133
+ const previous = state.history.past.shift();
134
+ if (!previous)
135
+ return;
136
+ // current() unwraps the Immer draft to a plain snapshot
137
+ // suitable for storing in the future stack.
138
+ state.history.future.unshift(current(state.source));
139
+ state.source = previous;
140
+ // Preserve selection. Selection state is UI state, not
141
+ // source state, and undo/redo should only roll the Source.
142
+ // Drop any ids that no longer exist in the restored source
143
+ // (e.g. undoing an addElement that the selection pointed at)
144
+ // so the panel doesn't try to render a missing element.
145
+ pruneStaleSelection(state);
146
+ }),
147
+ _redo: () => set((state) => {
148
+ const next = state.history.future.shift();
149
+ if (!next)
150
+ return;
151
+ state.history.past.unshift(current(state.source));
152
+ state.source = next;
153
+ pruneStaleSelection(state);
154
+ }),
155
+ _setPlaybackState: (patch) => set((state) => {
156
+ Object.assign(state.playback, patch);
157
+ }),
158
+ _setUiState: (patch) => set((state) => {
159
+ Object.assign(state.ui, patch);
160
+ }),
161
+ })));
162
+ }
163
+ // ── Invariant: source.duration === max(element.time + element.duration) ─
164
+ //
165
+ // The schema treats source.duration as the authoritative playback
166
+ // duration (engine pauses there; the runtime stops rendering past it).
167
+ // Without an invariant, the timeline UI's derived extent and the
168
+ // engine's source.duration can disagree — the user drags a clip past
169
+ // the original end, hits play, and playback pauses where the source
170
+ // USED to end while the ruler/clip both say there's more.
171
+ //
172
+ // Solution: every editor mutation re-syncs source.duration to the
173
+ // authored content extent (bumping up AND shrinking down). One number,
174
+ // one truth, no UI/engine drift. If the user wants empty trailing
175
+ // time, they add a transparent element to fill it; explicit-duration
176
+ // authoring is still possible via `duration: 'auto'` (leaves it
177
+ // derived) or via direct JSON edits between mutations.
178
+ //
179
+ // Composition recursion: nested elements contribute to the parent's
180
+ // extent only via the composition's own time + duration, which the
181
+ // composition author controls explicitly. We still walk into
182
+ // compositions to find the top-level extent in case the top-level
183
+ // container is a composition.
184
+ function alignSourceDuration(state) {
185
+ let maxExtent = 0;
186
+ for (const el of state.source.elements) {
187
+ const t = typeof el.time === 'number' ? el.time : 0;
188
+ const d = typeof el.duration === 'number' ? el.duration : 0;
189
+ if (t + d > maxExtent)
190
+ maxExtent = t + d;
191
+ }
192
+ if (typeof state.source.duration === 'number') {
193
+ state.source.duration = maxExtent;
194
+ }
195
+ // 'auto' / unset: engine already derives from elements; leave it.
196
+ }
197
+ // ── History helpers ──────────────────────────────────────────────────
198
+ function pushHistory(state) {
199
+ // `state.source` is an Immer draft proxy. structuredClone can't
200
+ // clone proxies; `current()` unwraps to a plain immutable snapshot
201
+ // that's safe to keep in history.
202
+ state.history.past.unshift(current(state.source));
203
+ if (state.history.past.length > HISTORY_LIMIT) {
204
+ state.history.past.length = HISTORY_LIMIT;
205
+ }
206
+ // Any forward history is invalidated by a new mutation.
207
+ state.history.future = [];
208
+ }
209
+ /**
210
+ * Drop any selected ids that don't exist in the current source. Used
211
+ * after undo/redo to avoid showing the Edit panel for an element that
212
+ * was just un-added.
213
+ */
214
+ function pruneStaleSelection(state) {
215
+ if (state.selection.length === 0)
216
+ return;
217
+ const next = state.selection.filter((id) => findElementById(state.source.elements, id) !== null);
218
+ if (next.length !== state.selection.length)
219
+ state.selection = next;
220
+ }
221
+ // ── Element lookup (recurses into compositions) ──────────────────────
222
+ function findElementById(elements, id) {
223
+ for (const el of elements) {
224
+ if (el.id === id)
225
+ return el;
226
+ if (el.type === 'group') {
227
+ const nested = findElementById(el.elements, id);
228
+ if (nested)
229
+ return nested;
230
+ }
231
+ }
232
+ return null;
233
+ }
234
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { Element, Source } from '@clipkit/protocol';
2
+ export declare function elementTime(el: Element): number;
3
+ export declare function elementLayer(el: Element): number;
4
+ export declare function elementDuration(el: Element, sourceDuration: number): number;
5
+ export declare function elementLabel(el: Element): string;
6
+ export declare function listUsedLayers(source: Source): number[];
7
+ /** A container's elements sorted FRONT-TO-BACK (layer ascending; layer 1 = front). */
8
+ export declare function byLayer<T extends Element>(elements: readonly T[]): T[];
9
+ /**
10
+ * Stamp dense, unique `layer` values onto a container from its desired
11
+ * FRONT-TO-BACK order: index 0 → layer 1 (front / on top), last → layer N.
12
+ * Run on add / reorder / delete so the editor always writes valid, uniquely
13
+ * layered sources — correct-by-construction at edit time, NOT a load pass.
14
+ * Returns new element objects (all other fields untouched).
15
+ */
16
+ export declare function reassignLayers<T extends Element>(frontToBack: readonly T[]): T[];
17
+ /**
18
+ * Snap `value` to the nearest target within `threshold`. Returns the
19
+ * snapped value AND the target that won, so callers can render a
20
+ * visual snap indicator. If no target wins, returns the input
21
+ * unchanged with `target: null`.
22
+ */
23
+ export declare function snapTo(value: number, targets: readonly number[], threshold: number): {
24
+ value: number;
25
+ target: number | null;
26
+ };
27
+ /**
28
+ * Build the snap target list — composition bounds, the playhead, whole
29
+ * seconds, and every non-dragged element's start + end. Recurses into
30
+ * compositions.
31
+ */
32
+ export declare function buildSnapTargets(source: Source, sourceDuration: number, excludeIds: ReadonlySet<string>, playhead: number): number[];
33
+ /**
34
+ * Returns true if `[start, end)` on `layer` overlaps any non-excluded
35
+ * element on the same layer. Used to reject invalid drops.
36
+ */
37
+ export declare function hasOverlapOnLayer(source: Source, sourceDuration: number, layer: number, start: number, end: number, excludeIds: ReadonlySet<string>): boolean;
38
+ export declare function computeSourceDuration(source: Source): number;
39
+ /**
40
+ * Pick the smallest tick interval whose labels stay at least
41
+ * `minLabelPx` apart at the current zoom. `minor` subdivides each
42
+ * major span into 5 for unlabeled sub-ticks.
43
+ */
44
+ export declare function chooseTickInterval(pxPerSec: number, minLabelPx?: number): {
45
+ major: number;
46
+ minor: number;
47
+ };
48
+ /**
49
+ * Format a time for display. The UNIT is chosen from `unitFor`
50
+ * (default: the value itself) so a readout pair like "0:02.57 /
51
+ * 1:46.00" stays in one consistent format — pass the larger value
52
+ * (total duration) as `unitFor` for both sides.
53
+ *
54
+ * < 60s → "2.57s"
55
+ * < 1h → "1:46.00"
56
+ * ≥ 1h → "1:02:03.00"
57
+ */
58
+ export declare function formatTimecode(t: number, unitFor?: number): string;
59
+ /**
60
+ * Format a ruler tick label. Whole-unit display (no trailing
61
+ * decimals): "5s" / "2.5s" below a minute, "1:30" / "1:02:30" above
62
+ * (unit again chosen by `unitFor`, normally the source duration).
63
+ */
64
+ export declare function formatTickLabel(t: number, unitFor?: number,
65
+ /** The tick interval. When sub-second, labels gain decimals so a
66
+ * zoomed-in long composition shows 0.5s / 1:02.50 instead of
67
+ * repeating whole seconds. */
68
+ step?: number): string;
69
+ //# sourceMappingURL=timeline-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-utils.d.ts","sourceRoot":"","sources":["../src/timeline-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAIzD,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAE/C;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAEhD;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAuBhD;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAIvD;AAID,sFAAsF;AACtF,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAEtE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAEhF;AAID;;;;;GAKG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAY1C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CAKV;AAyBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,OAAO,CAST;AAID,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAS5D;AAcD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,SAAK,GACd;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKlC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,MAAU,GAAG,MAAM,CASrE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,MAAM,EACT,OAAO,GAAE,MAAU;AACnB;;8BAE8B;AAC9B,IAAI,SAAI,GACP,MAAM,CAiBR"}