@energy8platform/game-engine 0.23.0 → 0.25.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 (68) hide show
  1. package/dist/core.cjs.js +2 -2
  2. package/dist/core.cjs.js.map +1 -1
  3. package/dist/core.d.ts +3 -3
  4. package/dist/core.esm.js +2 -2
  5. package/dist/core.esm.js.map +1 -1
  6. package/dist/devtools.cjs.js +577 -0
  7. package/dist/devtools.cjs.js.map +1 -0
  8. package/dist/devtools.d.ts +424 -0
  9. package/dist/devtools.esm.js +565 -0
  10. package/dist/devtools.esm.js.map +1 -0
  11. package/dist/harness.cjs.js +33 -0
  12. package/dist/harness.cjs.js.map +1 -0
  13. package/dist/harness.d.ts +25 -0
  14. package/dist/harness.esm.js +30 -0
  15. package/dist/harness.esm.js.map +1 -0
  16. package/dist/host.cjs.js +35 -10
  17. package/dist/host.cjs.js.map +1 -1
  18. package/dist/host.d.ts +22 -9
  19. package/dist/host.esm.js +24 -11
  20. package/dist/host.esm.js.map +1 -1
  21. package/dist/index.cjs.js +2 -2
  22. package/dist/index.cjs.js.map +1 -1
  23. package/dist/index.d.ts +3 -3
  24. package/dist/index.esm.js +2 -2
  25. package/dist/index.esm.js.map +1 -1
  26. package/dist/reel-panel-client.cjs.js +610 -0
  27. package/dist/reel-panel-client.cjs.js.map +1 -0
  28. package/dist/reel-panel-client.d.ts +5 -0
  29. package/dist/reel-panel-client.esm.js +608 -0
  30. package/dist/reel-panel-client.esm.js.map +1 -0
  31. package/dist/shell.cjs.js +4 -4
  32. package/dist/shell.d.ts +1 -1
  33. package/dist/shell.esm.js +1 -1
  34. package/dist/slot.cjs.js +226 -75
  35. package/dist/slot.cjs.js.map +1 -1
  36. package/dist/slot.d.ts +137 -19
  37. package/dist/slot.esm.js +224 -76
  38. package/dist/slot.esm.js.map +1 -1
  39. package/package.json +17 -2
  40. package/src/core/GameApplication.ts +3 -3
  41. package/src/harness/index.ts +35 -0
  42. package/src/host/createSlotGame.ts +6 -3
  43. package/src/host/index.ts +11 -1
  44. package/src/host/shellConfig.ts +22 -12
  45. package/src/host/types.ts +13 -2
  46. package/src/shell/index.ts +4 -3
  47. package/src/slot/cascade/TumbleController.ts +6 -3
  48. package/src/slot/config/ReelSystemConfig.ts +19 -0
  49. package/src/slot/devtools/configDiff.ts +41 -0
  50. package/src/slot/devtools/controlPanel.ts +151 -0
  51. package/src/slot/devtools/fieldSchema.ts +190 -0
  52. package/src/slot/devtools/index.ts +31 -0
  53. package/src/slot/devtools/panelClient.ts +113 -0
  54. package/src/slot/devtools/protocol.ts +29 -0
  55. package/src/slot/devtools/reelDevBridge.ts +80 -0
  56. package/src/slot/features/extra.ts +1 -2
  57. package/src/slot/features/symbols.ts +10 -10
  58. package/src/slot/features/types.ts +13 -5
  59. package/src/slot/features/wilds.ts +1 -1
  60. package/src/slot/grid/AnimatedSymbol.ts +20 -11
  61. package/src/slot/grid/ReelGrid.ts +80 -41
  62. package/src/slot/grid/SymbolCell.ts +14 -7
  63. package/src/slot/grid/SymbolView.ts +2 -2
  64. package/src/slot/grid/geometry.ts +155 -0
  65. package/src/slot/index.ts +3 -0
  66. package/src/slot/motion/SpinEngine.ts +1 -1
  67. package/src/slot/system/ReelSystem.ts +10 -0
  68. package/src/types.ts +1 -1
@@ -0,0 +1,610 @@
1
+ 'use strict';
2
+
3
+ // packages/game-engine/src/slot/devtools/fieldSchema.ts
4
+ //
5
+ // Declarative description of the reel-config control panel. Each control binds to a
6
+ // dot-path in the ReelSystemConfig. Pure data — no pixi, no DOM — so it bundles into
7
+ // the self-contained panel client served by the harness.
8
+ //
9
+ // NOTE: board shape (grid.cols / grid.rows / rowsPerReel) is intentionally OMITTED.
10
+ // The board shape is math-tied (paylines / ways / book geometry) and must not be
11
+ // tuned live from the harness. Everything else — cosmetic geometry, motion,
12
+ // anticipation, cascade, win presentation and features — is tunable.
13
+ const EASINGS = [
14
+ 'linear',
15
+ 'easeOutQuad',
16
+ 'easeOutCubic',
17
+ 'easeOutBack',
18
+ 'easeOutBounce',
19
+ 'easeInBack',
20
+ 'easeOutElastic',
21
+ 'easeInOutSine',
22
+ 'easeInOutQuad',
23
+ ];
24
+ /** The editable reel-config fields, grouped into collapsible sections. */
25
+ const REEL_FIELD_SCHEMA = [
26
+ {
27
+ title: 'Cell geometry',
28
+ controls: [
29
+ { kind: 'range', path: 'grid.cellSize', label: 'Cell size', min: 40, max: 120, step: 1 },
30
+ { kind: 'range', path: 'grid.gap', label: 'Gap', min: 0, max: 16, step: 1 },
31
+ {
32
+ kind: 'select',
33
+ path: 'grid.evaluation',
34
+ label: 'Evaluation',
35
+ options: ['lines', 'ways', 'anywhere', 'cluster', 'megaways', 'infinity'],
36
+ },
37
+ { kind: 'toggle', path: 'grid.mask', label: 'Mask reels' },
38
+ {
39
+ kind: 'range',
40
+ path: 'grid.cellWidth',
41
+ label: 'Cell width',
42
+ min: 40,
43
+ max: 160,
44
+ step: 1,
45
+ fallback: 'grid.cellSize',
46
+ },
47
+ {
48
+ kind: 'range',
49
+ path: 'grid.cellHeight',
50
+ label: 'Cell height',
51
+ min: 40,
52
+ max: 160,
53
+ step: 1,
54
+ fallback: 'grid.cellSize',
55
+ },
56
+ {
57
+ kind: 'range',
58
+ path: 'grid.colGap',
59
+ label: 'Column gap',
60
+ min: 0,
61
+ max: 40,
62
+ step: 1,
63
+ fallback: 'grid.gap',
64
+ },
65
+ {
66
+ kind: 'range',
67
+ path: 'grid.rowGap',
68
+ label: 'Row gap',
69
+ min: 0,
70
+ max: 40,
71
+ step: 1,
72
+ fallback: 'grid.gap',
73
+ },
74
+ ],
75
+ },
76
+ {
77
+ title: 'Motion',
78
+ controls: [
79
+ { kind: 'select', path: 'motion.style', label: 'Style', options: ['swap', 'strip', 'cascade-drop'] },
80
+ { kind: 'range', path: 'motion.spinUp', label: 'Spin-up (ms)', min: 100, max: 2500, step: 10 },
81
+ { kind: 'range', path: 'motion.hold', label: 'Hold (ms)', min: 0, max: 800, step: 10 },
82
+ { kind: 'range', path: 'motion.stopStagger', label: 'Stop stagger (ms)', min: 0, max: 400, step: 5 },
83
+ { kind: 'select', path: 'motion.stopMode', label: 'Stop mode', options: ['sequential', 'sync', 'random'] },
84
+ { kind: 'select', path: 'motion.stopOrder', label: 'Stop order', options: ['ltr', 'rtl'] },
85
+ { kind: 'range', path: 'motion.settle.amp', label: 'Settle amp (px)', min: 0, max: 24, step: 1 },
86
+ { kind: 'range', path: 'motion.settle.ms', label: 'Settle (ms)', min: 60, max: 500, step: 10 },
87
+ { kind: 'select', path: 'motion.settle.easing', label: 'Settle easing', options: EASINGS },
88
+ { kind: 'toggle', path: 'motion.squash.enabled', label: 'Squash on land' },
89
+ { kind: 'range', path: 'motion.squash.scaleX', label: 'Squash X', min: 1, max: 1.5, step: 0.01 },
90
+ { kind: 'range', path: 'motion.squash.scaleY', label: 'Squash Y', min: 0.5, max: 1, step: 0.01 },
91
+ { kind: 'toggle', path: 'motion.blur.enabled', label: 'Motion blur' },
92
+ { kind: 'range', path: 'motion.blur.alpha', label: 'Blur alpha', min: 0.3, max: 1, step: 0.01 },
93
+ { kind: 'range', path: 'motion.blur.strength', label: 'Blur strength', min: 0, max: 16, step: 1 },
94
+ { kind: 'toggle', path: 'motion.blur.streaks', label: 'Blur streaks' },
95
+ { kind: 'range', path: 'motion.turboFactor', label: 'Turbo factor', min: 0.2, max: 1, step: 0.05 },
96
+ { kind: 'select', path: 'motion.intensity', label: 'Intensity', options: ['full', 'reduced', 'minimal'] },
97
+ { kind: 'toggle', path: 'motion.slamStop', label: 'Slam stop' },
98
+ { kind: 'range', path: 'motion.symbolsPerReel', label: 'Tape length', min: 3, max: 24, step: 1 },
99
+ ],
100
+ },
101
+ {
102
+ title: 'Anticipation',
103
+ controls: [
104
+ { kind: 'toggle', path: 'anticipation.enabled', label: 'Enabled' },
105
+ { kind: 'range', path: 'anticipation.threshold', label: 'Threshold (N−1)', min: 1, max: 6, step: 1 },
106
+ { kind: 'range', path: 'anticipation.slowdownFactor', label: 'Slowdown', min: 0.1, max: 1, step: 0.05 },
107
+ { kind: 'range', path: 'anticipation.holdMs', label: 'Hold (ms)', min: 0, max: 1200, step: 50 },
108
+ { kind: 'toggle', path: 'anticipation.zoom.enabled', label: 'Reel zoom' },
109
+ { kind: 'range', path: 'anticipation.zoom.scale', label: 'Zoom scale', min: 1, max: 1.6, step: 0.05 },
110
+ { kind: 'range', path: 'anticipation.zoom.ms', label: 'Zoom (ms)', min: 200, max: 1200, step: 50 },
111
+ ],
112
+ },
113
+ {
114
+ title: 'Cascade / Tumble',
115
+ controls: [
116
+ { kind: 'toggle', path: 'cascade.enabled', label: 'Enabled' },
117
+ { kind: 'toggle', path: 'cascade.gravity', label: 'Gravity (survivors slide)' },
118
+ { kind: 'toggle', path: 'cascade.dimNonWinners', label: 'Dim non-winners' },
119
+ { kind: 'range', path: 'cascade.dimAlpha', label: 'Dim alpha', min: 0.1, max: 1, step: 0.05 },
120
+ { kind: 'range', path: 'cascade.perStepDecel', label: 'Per-step decel', min: 0, max: 0.4, step: 0.01 },
121
+ { kind: 'range', path: 'cascade.perStepDecelCap', label: 'Decel cap', min: 1, max: 3, step: 0.1 },
122
+ { kind: 'range', path: 'cascade.timings.remove', label: 'Remove (ms)', min: 80, max: 600, step: 10 },
123
+ { kind: 'range', path: 'cascade.timings.drop', label: 'Drop (ms)', min: 80, max: 600, step: 10 },
124
+ { kind: 'select', path: 'cascade.easings.drop', label: 'Drop easing', options: EASINGS },
125
+ { kind: 'toggle', path: 'cascade.multiplier.enabled', label: 'Win multiplier' },
126
+ { kind: 'select', path: 'cascade.multiplier.mode', label: 'Multiplier mode', options: ['add', 'mul'] },
127
+ { kind: 'range', path: 'cascade.multiplier.step', label: 'Multiplier step', min: 1, max: 5, step: 1 },
128
+ ],
129
+ },
130
+ {
131
+ title: 'Win presentation',
132
+ controls: [
133
+ { kind: 'range', path: 'win.highlightScale', label: 'Highlight scale', min: 1, max: 1.4, step: 0.01 },
134
+ { kind: 'toggle', path: 'win.glow', label: 'Glow' },
135
+ { kind: 'toggle', path: 'win.frameShake.enabled', label: 'Frame shake' },
136
+ { kind: 'range', path: 'win.frameShake.amp', label: 'Shake amp', min: 0, max: 10, step: 0.5 },
137
+ ],
138
+ },
139
+ {
140
+ title: 'Features',
141
+ controls: [
142
+ { kind: 'toggle', path: 'features.expandingWild.enabled', label: 'Expanding wild' },
143
+ { kind: 'toggle', path: 'features.expandingWild.toFullReel', label: '· to full reel' },
144
+ { kind: 'toggle', path: 'features.sticky.enabled', label: 'Sticky symbols' },
145
+ { kind: 'range', path: 'features.sticky.durationSpins', label: '· duration spins', min: 0, max: 6, step: 1 },
146
+ { kind: 'toggle', path: 'features.walkingWild.enabled', label: 'Walking wild' },
147
+ { kind: 'select', path: 'features.walkingWild.direction', label: '· direction', options: ['left', 'right'] },
148
+ { kind: 'toggle', path: 'features.randomWild.enabled', label: 'Random wild inject' },
149
+ { kind: 'toggle', path: 'features.randomWild.sticky', label: '· sticky' },
150
+ { kind: 'toggle', path: 'features.mystery.enabled', label: 'Mystery symbols' },
151
+ { kind: 'toggle', path: 'features.transform.enabled', label: 'Transform / upgrade' },
152
+ { kind: 'toggle', path: 'features.transform.upgradeOnly', label: '· upgrade only' },
153
+ { kind: 'toggle', path: 'features.giant.enabled', label: 'Giant symbol' },
154
+ { kind: 'range', path: 'features.giant.width', label: '· width', min: 1, max: 5, step: 1 },
155
+ { kind: 'range', path: 'features.giant.height', label: '· height', min: 1, max: 5, step: 1 },
156
+ { kind: 'toggle', path: 'features.split.enabled', label: 'Split (xSplit)' },
157
+ { kind: 'range', path: 'features.split.factor', label: '· factor', min: 2, max: 4, step: 1 },
158
+ { kind: 'toggle', path: 'features.stacked.enabled', label: 'Stacked symbols' },
159
+ { kind: 'range', path: 'features.stacked.height', label: '· stack height', min: 2, max: 7, step: 1 },
160
+ { kind: 'toggle', path: 'features.nudge.enabled', label: 'Nudge / xNudge' },
161
+ { kind: 'toggle', path: 'features.nudge.toFullReel', label: '· xNudge fill' },
162
+ { kind: 'toggle', path: 'features.multiplier.enabled', label: 'Multiplier symbols' },
163
+ { kind: 'select', path: 'features.multiplier.combine', label: '· combine', options: ['additive', 'multiplicative'] },
164
+ { kind: 'toggle', path: 'features.holdAndSpin.enabled', label: 'Hold & Spin' },
165
+ { kind: 'range', path: 'features.holdAndSpin.respinsAwarded', label: '· respins', min: 1, max: 5, step: 1 },
166
+ { kind: 'toggle', path: 'features.reelModifier.enabled', label: 'Reel modifier' },
167
+ ],
168
+ },
169
+ ];
170
+
171
+ // packages/game-engine/src/slot/devtools/controlPanel.ts
172
+ //
173
+ // Renders the reel-config field schema into a DOM panel and binds each control to a
174
+ // live config object. Pure DOM — no pixi. Shared by the harness reel sidebar and the
175
+ // reel-lab playground.
176
+ /* eslint-disable @typescript-eslint/no-explicit-any */
177
+ function getPath(obj, path) {
178
+ return path.split('.').reduce((o, k) => (o == null ? o : o[k]), obj);
179
+ }
180
+ function setPath(obj, path, value) {
181
+ const keys = path.split('.');
182
+ const last = keys.pop();
183
+ const target = keys.reduce((o, k) => (o[k] ??= {}), obj);
184
+ target[last] = value;
185
+ }
186
+ /** Build the control panel into `root`. Returns a `refresh()` that re-syncs inputs from config. */
187
+ function buildControlPanel(root, opts) {
188
+ const schema = opts.schema ?? REEL_FIELD_SCHEMA;
189
+ const updaters = [];
190
+ root.innerHTML = '';
191
+ for (const section of schema)
192
+ root.appendChild(renderSection(section, opts, updaters));
193
+ return { refresh: () => updaters.forEach((u) => u()) };
194
+ }
195
+ function renderSection(section, opts, updaters) {
196
+ const wrap = document.createElement('section');
197
+ wrap.className = 'panel-section';
198
+ const head = document.createElement('button');
199
+ head.className = 'section-head';
200
+ head.textContent = section.title;
201
+ const body = document.createElement('div');
202
+ body.className = 'section-body';
203
+ if (section.collapsed)
204
+ body.style.display = 'none';
205
+ head.addEventListener('click', () => {
206
+ body.style.display = body.style.display === 'none' ? '' : 'none';
207
+ });
208
+ wrap.appendChild(head);
209
+ wrap.appendChild(body);
210
+ for (const c of section.controls)
211
+ body.appendChild(renderControl(c, opts, updaters));
212
+ return wrap;
213
+ }
214
+ function renderControl(c, opts, updaters) {
215
+ const row = document.createElement('label');
216
+ row.className = 'control';
217
+ const name = document.createElement('span');
218
+ name.className = 'control-label';
219
+ name.textContent = c.label;
220
+ row.appendChild(name);
221
+ const emit = () => opts.onChange(c.path);
222
+ if (c.kind === 'toggle') {
223
+ const input = document.createElement('input');
224
+ input.type = 'checkbox';
225
+ const sync = () => {
226
+ input.checked = !!getPath(opts.config, c.path);
227
+ };
228
+ sync();
229
+ input.addEventListener('change', () => {
230
+ setPath(opts.config, c.path, input.checked);
231
+ emit();
232
+ });
233
+ row.classList.add('control-toggle');
234
+ row.appendChild(input);
235
+ updaters.push(sync);
236
+ }
237
+ else if (c.kind === 'select') {
238
+ const sel = document.createElement('select');
239
+ for (const o of c.options) {
240
+ const opt = document.createElement('option');
241
+ opt.value = o;
242
+ opt.textContent = o;
243
+ sel.appendChild(opt);
244
+ }
245
+ const sync = () => {
246
+ sel.value = String(getPath(opts.config, c.path));
247
+ };
248
+ sync();
249
+ sel.addEventListener('change', () => {
250
+ setPath(opts.config, c.path, sel.value);
251
+ emit();
252
+ });
253
+ row.appendChild(sel);
254
+ updaters.push(sync);
255
+ }
256
+ else if (c.kind === 'range') {
257
+ const input = document.createElement('input');
258
+ input.type = 'range';
259
+ input.min = String(c.min);
260
+ input.max = String(c.max);
261
+ input.step = String(c.step);
262
+ const val = document.createElement('output');
263
+ val.className = 'control-value';
264
+ const sync = () => {
265
+ let raw = getPath(opts.config, c.path);
266
+ if ((raw == null || typeof raw !== 'number') && c.fallback != null)
267
+ raw = getPath(opts.config, c.fallback);
268
+ const v = Number(raw);
269
+ input.value = String(v);
270
+ val.textContent = String(v);
271
+ };
272
+ sync();
273
+ input.addEventListener('input', () => {
274
+ const v = Number(input.value);
275
+ setPath(opts.config, c.path, v);
276
+ val.textContent = String(v);
277
+ emit();
278
+ });
279
+ row.appendChild(input);
280
+ row.appendChild(val);
281
+ updaters.push(sync);
282
+ }
283
+ else {
284
+ const input = document.createElement('input');
285
+ input.type = 'color';
286
+ const sync = () => {
287
+ input.value =
288
+ '#' +
289
+ Number(getPath(opts.config, c.path) ?? 0)
290
+ .toString(16)
291
+ .padStart(6, '0');
292
+ };
293
+ sync();
294
+ input.addEventListener('input', () => {
295
+ setPath(opts.config, c.path, parseInt(input.value.slice(1), 16));
296
+ emit();
297
+ });
298
+ row.appendChild(input);
299
+ updaters.push(sync);
300
+ }
301
+ return row;
302
+ }
303
+
304
+ // packages/game-engine/src/slot/config/ReelSystemConfig.ts
305
+ //
306
+ // The single, fully-typed configuration object for the configurable reel system.
307
+ // Everything is optional with sensible defaults — `resolveReelConfig(partial)` deep-merges
308
+ // a partial config onto DEFAULT_REEL_CONFIG so games (and the reel-lab playground) can
309
+ // override only what they need.
310
+ //
311
+ // Design notes are in docs/reels-analysis-and-design.md.
312
+ // ─────────────────────────────────────────────────────────────────────────────
313
+ // Defaults
314
+ // ─────────────────────────────────────────────────────────────────────────────
315
+ const DEFAULT_REEL_CONFIG = {
316
+ grid: {
317
+ cols: 5,
318
+ rows: 3,
319
+ cellSize: 96,
320
+ gap: 6,
321
+ evaluation: 'lines',
322
+ minRows: 2,
323
+ maxRows: 7,
324
+ topReel: null,
325
+ mask: true,
326
+ decoration: { padding: 0 },
327
+ },
328
+ motion: {
329
+ style: 'swap',
330
+ spinUp: 500,
331
+ hold: 200,
332
+ stopStagger: 120,
333
+ stopMode: 'sequential',
334
+ stopOrder: 'ltr',
335
+ settle: { amp: 7, ms: 240, easing: 'easeOutBack' },
336
+ squash: { enabled: false, scaleX: 1.18, scaleY: 0.82, ms: 90 },
337
+ blur: { enabled: false, alpha: 0.85, strength: 8, streaks: false },
338
+ turboFactor: 0.5,
339
+ intensity: 'full',
340
+ slamStop: true,
341
+ symbolsPerReel: 6,
342
+ },
343
+ anticipation: {
344
+ enabled: false,
345
+ triggerSymbols: ['scatter'],
346
+ threshold: 2,
347
+ reels: 'trailing',
348
+ slowdownFactor: 0.3,
349
+ holdMs: 400,
350
+ zoom: { enabled: false, scale: 1.15, ms: 600 },
351
+ },
352
+ cascade: {
353
+ enabled: false,
354
+ gravity: true,
355
+ timings: { reveal: 300, highlight: 400, remove: 250, drop: 220, refill: 220, wait: 150 },
356
+ easings: { highlight: 'easeOutQuad', remove: 'easeInBack', drop: 'easeOutBounce' },
357
+ perStepDecel: 0.08,
358
+ perStepDecelCap: 1.5,
359
+ dimNonWinners: false,
360
+ dimAlpha: 0.35,
361
+ multiplier: {
362
+ enabled: false,
363
+ start: 1,
364
+ mode: 'add',
365
+ step: 1,
366
+ cap: null,
367
+ persistInFreeSpins: false,
368
+ },
369
+ },
370
+ win: {
371
+ highlightScale: 1.12,
372
+ glow: true,
373
+ frameShake: { enabled: false, amp: 3, ms: 180, onlyOnSymbols: null },
374
+ },
375
+ features: {
376
+ expandingWild: {
377
+ enabled: false,
378
+ symbol: 'wild',
379
+ reels: [],
380
+ toFullReel: true,
381
+ ms: 420,
382
+ easing: 'easeOutBack',
383
+ onlyInFreeSpins: false,
384
+ },
385
+ sticky: { enabled: false, symbols: ['wild'], durationSpins: 3, ringColor: 0xec4899 },
386
+ walkingWild: {
387
+ enabled: false,
388
+ symbol: 'wild',
389
+ direction: 'left',
390
+ stepPerSpin: 1,
391
+ awardsRespin: true,
392
+ asStacked: false,
393
+ },
394
+ multiplier: {
395
+ enabled: false,
396
+ symbol: null,
397
+ scope: 'perSymbol',
398
+ combine: 'additive',
399
+ attachedToWild: false,
400
+ max: 128,
401
+ accumulateAcrossFreeSpins: false,
402
+ },
403
+ mystery: { enabled: false, symbol: 'mystery', revealPool: [], canRevealWild: false, ms: 300 },
404
+ transform: {
405
+ enabled: false,
406
+ trigger: null,
407
+ source: 'randomLow',
408
+ target: 'wild',
409
+ allInstances: true,
410
+ upgradeOnly: false,
411
+ ms: 320,
412
+ },
413
+ giant: {
414
+ enabled: false,
415
+ width: 2,
416
+ height: 2,
417
+ symbols: [],
418
+ chosenPerSpin: false,
419
+ onlyInFreeSpins: false,
420
+ },
421
+ split: { enabled: false, symbol: 'split', factor: 2, reels: [], deferUntilRespinsEnd: true },
422
+ stacked: { enabled: false, symbols: [], height: 3 },
423
+ nudge: {
424
+ enabled: false,
425
+ reels: [],
426
+ step: 1,
427
+ toFullReel: false,
428
+ multiplierStart: 1,
429
+ multiplierPerNudge: 1,
430
+ },
431
+ reelModifier: { enabled: false, pool: [], appliesIn: 'both' },
432
+ holdAndSpin: {
433
+ enabled: false,
434
+ lockSymbols: ['coin'],
435
+ triggerThreshold: 6,
436
+ respinsAwarded: 3,
437
+ resetOnNewSymbol: true,
438
+ jackpotTiers: ['Mini', 'Minor', 'Major', 'Grand'],
439
+ fullGridAwardsGrand: true,
440
+ },
441
+ randomWild: {
442
+ enabled: false,
443
+ count: [1, 3],
444
+ sticky: false,
445
+ multiplier: 1,
446
+ trigger: 'onFreeSpins',
447
+ chance: 0.2,
448
+ },
449
+ },
450
+ };
451
+ /** Deep-merge `partial` onto `base` (arrays replace, objects merge). Returns a new object. */
452
+ function mergeReelConfig(base, partial) {
453
+ return structuredCloneSafe(base);
454
+ }
455
+ /** Resolve a partial config to a fully-populated `ReelSystemConfig`. */
456
+ function resolveReelConfig(partial) {
457
+ return mergeReelConfig(DEFAULT_REEL_CONFIG);
458
+ }
459
+ function structuredCloneSafe(v) {
460
+ // structuredClone is available in modern browsers + Node 17+; fall back to JSON for safety.
461
+ if (typeof structuredClone === 'function')
462
+ return structuredClone(v);
463
+ return JSON.parse(JSON.stringify(v));
464
+ }
465
+
466
+ // packages/game-engine/src/slot/devtools/configDiff.ts
467
+ //
468
+ // Compute the minimal override diff of a reel config against the defaults, and emit a
469
+ // paste-ready `resolveReelConfig({...})` TypeScript snippet. Pure — no pixi, no DOM.
470
+ /* eslint-disable @typescript-eslint/no-explicit-any */
471
+ /** Deep diff `obj` against `base`: arrays compared whole, objects recursed, scalars by !==. */
472
+ function configDiff(base, obj) {
473
+ const out = {};
474
+ for (const k of Object.keys(obj ?? {})) {
475
+ const a = base?.[k];
476
+ const b = obj[k];
477
+ if (Array.isArray(b)) {
478
+ if (JSON.stringify(a) !== JSON.stringify(b))
479
+ out[k] = b;
480
+ }
481
+ else if (b && typeof b === 'object') {
482
+ const d = configDiff(a ?? {}, b);
483
+ if (Object.keys(d).length)
484
+ out[k] = d;
485
+ }
486
+ else if (a !== b) {
487
+ out[k] = b;
488
+ }
489
+ }
490
+ return out;
491
+ }
492
+ /* eslint-enable @typescript-eslint/no-explicit-any */
493
+ /** Diff a working config against DEFAULT_REEL_CONFIG (via resolveReelConfig()). */
494
+ function diffFromDefaults(config) {
495
+ return configDiff(resolveReelConfig(), config);
496
+ }
497
+ /** Emit a paste-ready TS module exporting the reel config as overrides-only. */
498
+ function emitReelConfigTs(config) {
499
+ const diff = diffFromDefaults(config);
500
+ return (`import { resolveReelConfig } from '@energy8platform/game-engine/slot';\n\n` +
501
+ `// Only the overrides vs DEFAULT_REEL_CONFIG.\n` +
502
+ `export const reelConfig = resolveReelConfig(${JSON.stringify(diff, null, 2)} as const);\n`);
503
+ }
504
+
505
+ // packages/game-engine/src/slot/devtools/protocol.ts
506
+ //
507
+ // The postMessage protocol between the harness reel panel (parent window) and the
508
+ // reel dev bridge (game iframe). Pure constants + message types — no deps.
509
+ const REEL_READY = 'e8:reel:ready';
510
+ const REEL_APPLY = 'e8:reel:apply';
511
+ const REEL_REQUEST = 'e8:reel:request';
512
+
513
+ // packages/game-engine/src/slot/devtools/panelClient.ts
514
+ //
515
+ // The harness "Reels" sidebar panel client. Built as a SELF-CONTAINED browser ESM
516
+ // (dist/reel-panel-client.js) and served by the harness at /__harness/panel/reels.js.
517
+ // Default-exports the HarnessPanelMount the core client calls.
518
+ //
519
+ // It seeds its controls from the running game's config (received over the bus), applies
520
+ // every edit LIVE (posts a patch → the game's reel bridge calls system.update), and
521
+ // offers a "Copy config" button that emits the paste-ready overrides snippet.
522
+ const CSS = `
523
+ .e8rp-wait { color: #6b7480; font-size: 12px; line-height: 1.6; padding: 8px 2px; }
524
+ .e8rp-bar { display: flex; gap: 8px; margin-bottom: 12px; }
525
+ .e8rp-bar button {
526
+ flex: 1 1 0; background: #1c2128; color: #cfd5dd; border: 1px solid #3a414c; border-radius: 8px;
527
+ padding: 8px; font: inherit; font-size: 12px; font-weight: 600; cursor: pointer;
528
+ }
529
+ .e8rp-bar button:hover { border-color: #4b5563; color: #fff; }
530
+ .e8rp-status { font-size: 11px; color: #6b7480; min-height: 14px; margin-bottom: 8px; }
531
+ .e8rp-controls .panel-section { border-top: 1px solid #1d222a; }
532
+ .e8rp-controls .section-head {
533
+ width: 100%; text-align: left; background: transparent; border: 0; color: #aab2bd;
534
+ font: inherit; font-size: 11px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;
535
+ padding: 10px 2px 6px; cursor: pointer;
536
+ }
537
+ .e8rp-controls .section-body { display: flex; flex-direction: column; gap: 2px; padding-bottom: 6px; }
538
+ .e8rp-controls .control {
539
+ display: flex; align-items: center; gap: 8px; padding: 4px 2px; font-size: 12px; color: #d3d8df;
540
+ }
541
+ .e8rp-controls .control-label { flex: 1 1 auto; }
542
+ .e8rp-controls .control-value { width: 34px; text-align: right; color: #828b98; font-variant-numeric: tabular-nums; }
543
+ .e8rp-controls input[type=range] { flex: 0 0 120px; }
544
+ .e8rp-controls select { background: #1c2128; color: #e9ecf1; border: 1px solid #3a414c; border-radius: 6px; padding: 3px 6px; font: inherit; font-size: 12px; }
545
+ .e8rp-controls .control-toggle { justify-content: space-between; }
546
+ `;
547
+ function injectCss() {
548
+ if (document.getElementById('e8-reel-panel-css'))
549
+ return;
550
+ const style = document.createElement('style');
551
+ style.id = 'e8-reel-panel-css';
552
+ style.textContent = CSS;
553
+ document.head.appendChild(style);
554
+ }
555
+ const mount = (ctx) => {
556
+ injectCss();
557
+ const root = ctx.root;
558
+ root.innerHTML = '<p class="e8rp-wait">Waiting for the game’s reel bridge…<br/>(the game must call <code>mountReelDevBridge</code>.)</p>';
559
+ let working = null;
560
+ let built = false;
561
+ const status = (msg) => {
562
+ const el = root.querySelector('.e8rp-status');
563
+ if (el)
564
+ el.textContent = msg;
565
+ };
566
+ const copy = (text, label) => {
567
+ navigator.clipboard
568
+ ?.writeText(text)
569
+ .then(() => status(`${label} copied`))
570
+ .catch(() => status('Copy failed'));
571
+ };
572
+ const buildUi = (config) => {
573
+ working = structuredClone(config);
574
+ root.innerHTML = '';
575
+ const bar = document.createElement('div');
576
+ bar.className = 'e8rp-bar';
577
+ const copyTs = document.createElement('button');
578
+ copyTs.textContent = 'Copy config';
579
+ copyTs.addEventListener('click', () => working && copy(emitReelConfigTs(working), 'TS config'));
580
+ const copyJson = document.createElement('button');
581
+ copyJson.textContent = 'Copy JSON';
582
+ copyJson.addEventListener('click', () => working && copy(JSON.stringify(working, null, 2), 'JSON'));
583
+ bar.append(copyTs, copyJson);
584
+ const statusEl = document.createElement('div');
585
+ statusEl.className = 'e8rp-status';
586
+ const controls = document.createElement('div');
587
+ controls.className = 'e8rp-controls';
588
+ root.append(bar, statusEl, controls);
589
+ buildControlPanel(controls, {
590
+ config: working,
591
+ onChange: () => {
592
+ ctx.post({ type: REEL_APPLY, patch: working });
593
+ },
594
+ });
595
+ built = true;
596
+ };
597
+ ctx.on((raw) => {
598
+ const msg = raw;
599
+ if (msg && typeof msg === 'object' && msg.type === REEL_READY)
600
+ buildUi(msg.config);
601
+ });
602
+ // Ask the game for its config (covers the game-loaded-first case); retry a couple times.
603
+ const request = () => ctx.post({ type: REEL_REQUEST });
604
+ request();
605
+ window.setTimeout(() => !built && request(), 400);
606
+ window.setTimeout(() => !built && request(), 1200);
607
+ };
608
+
609
+ module.exports = mount;
610
+ //# sourceMappingURL=reel-panel-client.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reel-panel-client.cjs.js","sources":["../src/slot/devtools/fieldSchema.ts","../src/slot/devtools/controlPanel.ts","../src/slot/config/ReelSystemConfig.ts","../src/slot/devtools/configDiff.ts","../src/slot/devtools/protocol.ts","../src/slot/devtools/panelClient.ts"],"sourcesContent":[null,null,null,null,null,null],"names":[],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAuBA,MAAM,OAAO,GAAG;IACd,QAAQ;IACR,aAAa;IACb,cAAc;IACd,aAAa;IACb,eAAe;IACf,YAAY;IACZ,gBAAgB;IAChB,eAAe;IACf,eAAe;CAChB;AAED;AACO,MAAM,iBAAiB,GAAc;AAC1C,IAAA;AACE,QAAA,KAAK,EAAE,eAAe;AACtB,QAAA,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE;YACxF,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AAC3E,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;AAC1E,aAAA;YACD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE;AAC1D,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,GAAG,EAAE,EAAE;AACP,gBAAA,GAAG,EAAE,GAAG;AACR,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,QAAQ,EAAE,eAAe;AAC1B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,GAAG,EAAE,EAAE;AACP,gBAAA,GAAG,EAAE,GAAG;AACR,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,QAAQ,EAAE,eAAe;AAC1B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,GAAG,EAAE,EAAE;AACP,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,QAAQ,EAAE,UAAU;AACrB,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,GAAG,EAAE,EAAE;AACP,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,QAAQ,EAAE,UAAU;AACrB,aAAA;AACF,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE;YACpG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;YAC9F,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;YACtF,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE;YACpG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;AAC1G,YAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YAC1F,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;YAChG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;AAC9F,YAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE;YAC1F,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,gBAAgB,EAAE;YAC1E,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;YAChG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;YAChG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,aAAa,EAAE;YACrE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;YAC/F,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;YACjG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,cAAc,EAAE;YACtE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;YAClG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;YACzG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE;YAC/D,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AACjG,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,cAAc;AACrB,QAAA,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,SAAS,EAAE;YAClE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;YACpG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;YACvG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;YAC/F,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,WAAW,EAAE;YACzE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;YACrG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;AACnG,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,kBAAkB;AACzB,QAAA,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE;YAC7D,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,2BAA2B,EAAE;YAC/E,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,iBAAiB,EAAE;YAC3E,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;YAC7F,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;YACtG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;YACjG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;YACpG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;AAChG,YAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE;YACxF,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,gBAAgB,EAAE;AAC/E,YAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YACtG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;AACtG,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,kBAAkB;AACzB,QAAA,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;YACrG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE;YACnD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,aAAa,EAAE;YACxE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;AAC9F,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,UAAU;AACjB,QAAA,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,gBAAgB,EAAE;YACnF,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,mCAAmC,EAAE,KAAK,EAAE,gBAAgB,EAAE;YACtF,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,gBAAgB,EAAE;YAC5E,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;YAC5G,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,cAAc,EAAE;AAC/E,YAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;YAC5G,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,oBAAoB,EAAE;YACpF,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,UAAU,EAAE;YACzE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,iBAAiB,EAAE;YAC9E,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,qBAAqB,EAAE;YACpF,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,gBAAgB,EAAE;YACnF,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,cAAc,EAAE;YACzE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;YAC1F,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;YAC5F,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,gBAAgB,EAAE;YAC3E,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;YAC5F,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,iBAAiB,EAAE;YAC9E,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;YACpG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,gBAAgB,EAAE;YAC3E,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,eAAe,EAAE;YAC7E,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,oBAAoB,EAAE;AACpF,YAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE;YACpH,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,aAAa,EAAE;YAC9E,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,qCAAqC,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;YAC3G,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,eAAe,EAAE;AAClF,SAAA;AACF,KAAA;CACF;;AC7LD;AACA;AACA;AACA;AACA;AAIA;AACM,SAAU,OAAO,CAAC,GAAQ,EAAE,IAAY,EAAA;AAC5C,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AACtE;SACgB,OAAO,CAAC,GAAQ,EAAE,IAAY,EAAE,KAAU,EAAA;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5B,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAY;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC;AACxD,IAAA,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK;AACtB;AAYA;AACM,SAAU,iBAAiB,CAC/B,IAAiB,EACjB,IAAyB,EAAA;AAEzB,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,iBAAiB;IAC/C,MAAM,QAAQ,GAAmB,EAAE;AACnC,IAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACnB,KAAK,MAAM,OAAO,IAAI,MAAM;AAAE,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACtF,IAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AACxD;AAEA,SAAS,aAAa,CACpB,OAAgB,EAChB,IAAyB,EACzB,QAAwB,EAAA;IAExB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;AAC9C,IAAA,IAAI,CAAC,SAAS,GAAG,eAAe;IAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC7C,IAAA,IAAI,CAAC,SAAS,GAAG,cAAc;AAC/B,IAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK;IAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,IAAA,IAAI,CAAC,SAAS,GAAG,cAAc;IAC/B,IAAI,OAAO,CAAC,SAAS;AAAE,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAClD,IAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;QAClC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM;AAClE,IAAA,CAAC,CAAC;AACF,IAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACtB,IAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACtB,IAAA,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ;AAAE,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACpF,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,aAAa,CAAC,CAAU,EAAE,IAAyB,EAAE,QAAwB,EAAA;IACpF,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC3C,IAAA,GAAG,CAAC,SAAS,GAAG,SAAS;IACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,IAAA,IAAI,CAAC,SAAS,GAAG,eAAe;AAChC,IAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK;AAC1B,IAAA,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;AAErB,IAAA,MAAM,IAAI,GAAG,MAAY,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAE9C,IAAA,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,QAAA,KAAK,CAAC,IAAI,GAAG,UAAU;QACvB,MAAM,IAAI,GAAG,MAAW;AACtB,YAAA,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;AAChD,QAAA,CAAC;AACD,QAAA,IAAI,EAAE;AACN,QAAA,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;AACpC,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;AAC3C,YAAA,IAAI,EAAE;AACR,QAAA,CAAC,CAAC;AACF,QAAA,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACnC,QAAA,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;AACtB,QAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB;AAAO,SAAA,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;QAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC5C,QAAA,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;YACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC5C,YAAA,GAAG,CAAC,KAAK,GAAG,CAAC;AACb,YAAA,GAAG,CAAC,WAAW,GAAG,CAAC;AACnB,YAAA,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC;QACtB;QACA,MAAM,IAAI,GAAG,MAAW;AACtB,YAAA,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAClD,QAAA,CAAC;AACD,QAAA,IAAI,EAAE;AACN,QAAA,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;AAClC,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,EAAE;AACR,QAAA,CAAC,CAAC;AACF,QAAA,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC;AACpB,QAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB;AAAO,SAAA,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,QAAA,KAAK,CAAC,IAAI,GAAG,OAAO;QACpB,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QACzB,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QACzB,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC5C,QAAA,GAAG,CAAC,SAAS,GAAG,eAAe;QAC/B,MAAM,IAAI,GAAG,MAAW;AACtB,YAAA,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;AACtC,YAAA,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,IAAI;gBAChE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC;AACxC,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AACrB,YAAA,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,YAAA,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;AAC7B,QAAA,CAAC;AACD,QAAA,IAAI,EAAE;AACN,QAAA,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;YACnC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/B,YAAA,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;AAC3B,YAAA,IAAI,EAAE;AACR,QAAA,CAAC,CAAC;AACF,QAAA,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;AACtB,QAAA,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC;AACpB,QAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB;SAAO;QACL,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,QAAA,KAAK,CAAC,IAAI,GAAG,OAAO;QACpB,MAAM,IAAI,GAAG,MAAW;AACtB,YAAA,KAAK,CAAC,KAAK;gBACT,GAAG;AACH,oBAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;yBACrC,QAAQ,CAAC,EAAE;AACX,yBAAA,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACvB,QAAA,CAAC;AACD,QAAA,IAAI,EAAE;AACN,QAAA,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;YACnC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChE,YAAA,IAAI,EAAE;AACR,QAAA,CAAC,CAAC;AACF,QAAA,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;AACtB,QAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB;AACA,IAAA,OAAO,GAAG;AACZ;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA+XA;AACA;AACA;AAEO,MAAM,mBAAmB,GAAqB;AACnD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,UAAU,EAAE,OAAO;AACnB,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;AAC3B,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,IAAI,EAAE,GAAG;AACT,QAAA,WAAW,EAAE,GAAG;AAChB,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE;AAClD,QAAA,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9D,QAAA,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE;AAClE,QAAA,WAAW,EAAE,GAAG;AAChB,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,cAAc,EAAE,CAAC;AAClB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,KAAK;QACd,cAAc,EAAE,CAAC,SAAS,CAAC;AAC3B,QAAA,SAAS,EAAE,CAAC;AACZ,QAAA,KAAK,EAAE,UAAU;AACjB,QAAA,cAAc,EAAE,GAAG;AACnB,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE;AAC/C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;AACxF,QAAA,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE;AAClF,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,eAAe,EAAE,GAAG;AACpB,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,kBAAkB,EAAE,KAAK;AAC1B,SAAA;AACF,KAAA;AACD,IAAA,GAAG,EAAE;AACH,QAAA,cAAc,EAAE,IAAI;AACpB,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE;AACrE,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,aAAa,EAAE;AACb,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,EAAE,EAAE,GAAG;AACP,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,eAAe,EAAE,KAAK;AACvB,SAAA;AACD,QAAA,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;AACpF,QAAA,WAAW,EAAE;AACX,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,yBAAyB,EAAE,KAAK;AACjC,SAAA;QACD,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE;AAC7F,QAAA,SAAS,EAAE;AACT,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,EAAE,EAAE,GAAG;AACR,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,eAAe,EAAE,KAAK;AACvB,SAAA;QACD,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE;AAC5F,QAAA,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;AACnD,QAAA,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,kBAAkB,EAAE,CAAC;AACtB,SAAA;AACD,QAAA,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;AAC7D,QAAA,WAAW,EAAE;AACX,YAAA,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,CAAC,MAAM,CAAC;AACrB,YAAA,gBAAgB,EAAE,CAAC;AACnB,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,gBAAgB,EAAE,IAAI;YACtB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,YAAA,mBAAmB,EAAE,IAAI;AAC1B,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACb,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,MAAM,EAAE,GAAG;AACZ,SAAA;AACF,KAAA;CACF;AASD;AACM,SAAU,eAAe,CAAI,IAAO,EAAE,OAAwB,EAAA;IAC7C,OAAO,mBAAmB,CAAC,IAAI,CAAC;AAUvD;AAEA;AACM,SAAU,iBAAiB,CAAC,OAAuC,EAAA;AACvE,IAAA,OAAO,eAAe,CAAC,mBAA4B,CAAC;AACtD;AAEA,SAAS,mBAAmB,CAAI,CAAI,EAAA;;IAElC,IAAI,OAAO,eAAe,KAAK,UAAU;AAAE,QAAA,OAAO,eAAe,CAAC,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAM;AAC3C;;ACjjBA;AACA;AACA;AACA;AAIA;AACA;AACM,SAAU,UAAU,CAAC,IAAS,EAAE,GAAQ,EAAA;IAC5C,MAAM,GAAG,GAAQ,EAAE;AACnB,IAAA,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;AACtC,QAAA,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;AACnB,QAAA,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAChB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAAE,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACzD;AAAO,aAAA,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACrC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAChC,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;AAAE,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACvC;AAAO,aAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AAClB,YAAA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACZ;IACF;AACA,IAAA,OAAO,GAAG;AACZ;AACA;AAEA;AACM,SAAU,gBAAgB,CAAC,MAAwB,EAAA;AACvD,IAAA,OAAO,UAAU,CAAC,iBAAiB,EAAE,EAAE,MAAM,CAA8B;AAC7E;AAEA;AACM,SAAU,gBAAgB,CAAC,MAAwB,EAAA;AACvD,IAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC;AACrC,IAAA,QACE,CAAA,0EAAA,CAA4E;QAC5E,CAAA,+CAAA,CAAiD;AACjD,QAAA,CAAA,4CAAA,EAA+C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA,aAAA,CAAe;AAE/F;;ACxCA;AACA;AACA;AACA;AAuBO,MAAM,UAAU,GAAG,eAAe;AAClC,MAAM,UAAU,GAAG,eAAe;AAClC,MAAM,YAAY,GAAG,iBAAiB;;AC5B7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBX;AAED,SAAS,SAAS,GAAA;AAChB,IAAA,IAAI,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC;QAAE;IAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,IAAA,KAAK,CAAC,EAAE,GAAG,mBAAmB;AAC9B,IAAA,KAAK,CAAC,WAAW,GAAG,GAAG;AACvB,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAClC;AAEA,MAAM,KAAK,GAAsB,CAAC,GAAG,KAAI;AACvC,IAAA,SAAS,EAAE;AACX,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI;AACrB,IAAA,IAAI,CAAC,SAAS,GAAG,wHAAwH;IAEzI,IAAI,OAAO,GAA4B,IAAI;IAC3C,IAAI,KAAK,GAAG,KAAK;AAEjB,IAAA,MAAM,MAAM,GAAG,CAAC,GAAW,KAAU;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAc,cAAc,CAAC;AAC1D,QAAA,IAAI,EAAE;AAAE,YAAA,EAAE,CAAC,WAAW,GAAG,GAAG;AAC9B,IAAA,CAAC;AACD,IAAA,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,KAAa,KAAU;AACjD,QAAA,SAAS,CAAC;cACN,SAAS,CAAC,IAAI;aACf,IAAI,CAAC,MAAM,MAAM,CAAC,CAAA,EAAG,KAAK,CAAA,OAAA,CAAS,CAAC;aACpC,KAAK,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;AACvC,IAAA,CAAC;AAED,IAAA,MAAM,OAAO,GAAG,CAAC,MAAwB,KAAU;AACjD,QAAA,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;QAEnB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,SAAS,GAAG,UAAU;QAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,MAAM,CAAC,WAAW,GAAG,aAAa;QAClC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;QAC/F,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACjD,QAAA,QAAQ,CAAC,WAAW,GAAG,WAAW;QAClC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACnG,QAAA,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;QAE5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C,QAAA,QAAQ,CAAC,SAAS,GAAG,aAAa;QAElC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C,QAAA,QAAQ,CAAC,SAAS,GAAG,eAAe;QAEpC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAEpC,iBAAiB,CAAC,QAAQ,EAAE;AAC1B,YAAA,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,MAAK;AACb,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAA2B,EAA2B,CAAC;YAC7F,CAAC;AACF,SAAA,CAAC;QACF,KAAK,GAAG,IAAI;AACd,IAAA,CAAC;AAED,IAAA,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAI;QACb,MAAM,GAAG,GAAG,GAAiC;QAC7C,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;AAAE,YAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AACpF,IAAA,CAAC,CAAC;;AAGF,IAAA,MAAM,OAAO,GAAG,MAAY,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAA2B,CAAC;AACrF,IAAA,OAAO,EAAE;AACT,IAAA,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,EAAE,EAAE,GAAG,CAAC;AACjD,IAAA,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC;AACpD;;;;"}
@@ -0,0 +1,5 @@
1
+ import { HarnessPanelMount } from '@energy8platform/harness/panel';
2
+
3
+ declare const mount: HarnessPanelMount;
4
+
5
+ export { mount as default };