@design.estate/dees-wcctools 1.2.1 → 2.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 (42) hide show
  1. package/dist_bundle/bundle.js +1764 -218
  2. package/dist_bundle/bundle.js.map +4 -4
  3. package/dist_ts_demotools/demotools.d.ts +1 -1
  4. package/dist_ts_demotools/demotools.js +86 -38
  5. package/dist_ts_web/00_commitinfo_data.js +1 -1
  6. package/dist_ts_web/elements/wcc-dashboard.d.ts +11 -10
  7. package/dist_ts_web/elements/wcc-dashboard.js +370 -246
  8. package/dist_ts_web/elements/wcc-frame.d.ts +3 -3
  9. package/dist_ts_web/elements/wcc-frame.js +108 -57
  10. package/dist_ts_web/elements/wcc-properties.d.ts +14 -8
  11. package/dist_ts_web/elements/wcc-properties.js +442 -323
  12. package/dist_ts_web/elements/wcc-record-button.d.ts +12 -0
  13. package/dist_ts_web/elements/wcc-record-button.js +165 -0
  14. package/dist_ts_web/elements/wcc-recording-panel.d.ts +42 -0
  15. package/dist_ts_web/elements/wcc-recording-panel.js +1067 -0
  16. package/dist_ts_web/elements/wcc-sidebar.d.ts +7 -5
  17. package/dist_ts_web/elements/wcc-sidebar.js +250 -81
  18. package/dist_ts_web/elements/wcctools.helpers.d.ts +13 -0
  19. package/dist_ts_web/elements/wcctools.helpers.js +26 -1
  20. package/dist_ts_web/index.d.ts +3 -0
  21. package/dist_ts_web/index.js +5 -1
  22. package/dist_ts_web/services/ffmpeg.service.d.ts +42 -0
  23. package/dist_ts_web/services/ffmpeg.service.js +276 -0
  24. package/dist_ts_web/services/mp4.service.d.ts +32 -0
  25. package/dist_ts_web/services/mp4.service.js +139 -0
  26. package/dist_ts_web/services/recorder.service.d.ts +44 -0
  27. package/dist_ts_web/services/recorder.service.js +307 -0
  28. package/dist_watch/bundle.js +2126 -541
  29. package/dist_watch/bundle.js.map +4 -4
  30. package/package.json +8 -8
  31. package/readme.md +133 -141
  32. package/ts_web/00_commitinfo_data.ts +1 -1
  33. package/ts_web/elements/wcc-dashboard.ts +86 -26
  34. package/ts_web/elements/wcc-frame.ts +3 -3
  35. package/ts_web/elements/wcc-properties.ts +53 -9
  36. package/ts_web/elements/wcc-record-button.ts +108 -0
  37. package/ts_web/elements/wcc-recording-panel.ts +978 -0
  38. package/ts_web/elements/wcc-sidebar.ts +133 -22
  39. package/ts_web/elements/wcctools.helpers.ts +31 -0
  40. package/ts_web/index.ts +5 -0
  41. package/ts_web/readme.md +123 -0
  42. package/ts_web/services/recorder.service.ts +393 -0
@@ -1,14 +1,39 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
6
27
  };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
9
34
  };
10
35
  import { DeesElement, property, html, customElement, queryAsync, render, domtools } from '@design.estate/dees-element';
11
- import { resolveTemplateFactory } from './wcctools.helpers.js';
36
+ import { resolveTemplateFactory, getDemoAtIndex, getDemoCount, hasMultipleDemos } from './wcctools.helpers.js';
12
37
  import * as plugins from '../wcctools.plugins.js';
13
38
  // wcc tools
14
39
  import './wcc-frame.js';
@@ -18,30 +43,125 @@ import {} from './wcc-properties.js';
18
43
  import {} from './wcc-sidebar.js';
19
44
  import { breakpoints } from '@design.estate/dees-domtools';
20
45
  import { WccFrame } from './wcc-frame.js';
21
- let WccDashboard = class WccDashboard extends DeesElement {
22
- constructor(elementsArg, pagesArg) {
23
- super();
24
- this.selectedViewport = 'desktop';
25
- this.selectedTheme = 'dark';
26
- this.isFullscreen = false;
27
- this.pages = {};
28
- this.elements = {};
29
- this.warning = null;
30
- this.frameScrollY = 0;
31
- this.sidebarScrollY = 0;
32
- this.scrollPositionsApplied = false;
33
- this.scrollListenersAttached = false;
34
- if (elementsArg) {
35
- this.elements = elementsArg;
36
- console.log('got elements:');
37
- console.log(this.elements);
46
+ let WccDashboard = (() => {
47
+ let _classDecorators = [customElement('wcc-dashboard')];
48
+ let _classDescriptor;
49
+ let _classExtraInitializers = [];
50
+ let _classThis;
51
+ let _classSuper = DeesElement;
52
+ let _selectedType_decorators;
53
+ let _selectedType_initializers = [];
54
+ let _selectedType_extraInitializers = [];
55
+ let _selectedItemName_decorators;
56
+ let _selectedItemName_initializers = [];
57
+ let _selectedItemName_extraInitializers = [];
58
+ let _selectedItem_decorators;
59
+ let _selectedItem_initializers = [];
60
+ let _selectedItem_extraInitializers = [];
61
+ let _selectedDemoIndex_decorators;
62
+ let _selectedDemoIndex_initializers = [];
63
+ let _selectedDemoIndex_extraInitializers = [];
64
+ let _selectedViewport_decorators;
65
+ let _selectedViewport_initializers = [];
66
+ let _selectedViewport_extraInitializers = [];
67
+ let _selectedTheme_decorators;
68
+ let _selectedTheme_initializers = [];
69
+ let _selectedTheme_extraInitializers = [];
70
+ let _isFullscreen_decorators;
71
+ let _isFullscreen_initializers = [];
72
+ let _isFullscreen_extraInitializers = [];
73
+ let _pages_decorators;
74
+ let _pages_initializers = [];
75
+ let _pages_extraInitializers = [];
76
+ let _elements_decorators;
77
+ let _elements_initializers = [];
78
+ let _elements_extraInitializers = [];
79
+ let _warning_decorators;
80
+ let _warning_initializers = [];
81
+ let _warning_extraInitializers = [];
82
+ let _wccFrame_decorators;
83
+ let _wccFrame_initializers = [];
84
+ let _wccFrame_extraInitializers = [];
85
+ var WccDashboard = class extends _classSuper {
86
+ static { _classThis = this; }
87
+ static {
88
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
89
+ _selectedType_decorators = [property()];
90
+ _selectedItemName_decorators = [property()];
91
+ _selectedItem_decorators = [property()];
92
+ _selectedDemoIndex_decorators = [property({ type: Number })];
93
+ _selectedViewport_decorators = [property()];
94
+ _selectedTheme_decorators = [property()];
95
+ _isFullscreen_decorators = [property()];
96
+ _pages_decorators = [property()];
97
+ _elements_decorators = [property()];
98
+ _warning_decorators = [property()];
99
+ _wccFrame_decorators = [queryAsync('wcc-frame')];
100
+ __esDecorate(this, null, _selectedType_decorators, { kind: "accessor", name: "selectedType", static: false, private: false, access: { has: obj => "selectedType" in obj, get: obj => obj.selectedType, set: (obj, value) => { obj.selectedType = value; } }, metadata: _metadata }, _selectedType_initializers, _selectedType_extraInitializers);
101
+ __esDecorate(this, null, _selectedItemName_decorators, { kind: "accessor", name: "selectedItemName", static: false, private: false, access: { has: obj => "selectedItemName" in obj, get: obj => obj.selectedItemName, set: (obj, value) => { obj.selectedItemName = value; } }, metadata: _metadata }, _selectedItemName_initializers, _selectedItemName_extraInitializers);
102
+ __esDecorate(this, null, _selectedItem_decorators, { kind: "accessor", name: "selectedItem", static: false, private: false, access: { has: obj => "selectedItem" in obj, get: obj => obj.selectedItem, set: (obj, value) => { obj.selectedItem = value; } }, metadata: _metadata }, _selectedItem_initializers, _selectedItem_extraInitializers);
103
+ __esDecorate(this, null, _selectedDemoIndex_decorators, { kind: "accessor", name: "selectedDemoIndex", static: false, private: false, access: { has: obj => "selectedDemoIndex" in obj, get: obj => obj.selectedDemoIndex, set: (obj, value) => { obj.selectedDemoIndex = value; } }, metadata: _metadata }, _selectedDemoIndex_initializers, _selectedDemoIndex_extraInitializers);
104
+ __esDecorate(this, null, _selectedViewport_decorators, { kind: "accessor", name: "selectedViewport", static: false, private: false, access: { has: obj => "selectedViewport" in obj, get: obj => obj.selectedViewport, set: (obj, value) => { obj.selectedViewport = value; } }, metadata: _metadata }, _selectedViewport_initializers, _selectedViewport_extraInitializers);
105
+ __esDecorate(this, null, _selectedTheme_decorators, { kind: "accessor", name: "selectedTheme", static: false, private: false, access: { has: obj => "selectedTheme" in obj, get: obj => obj.selectedTheme, set: (obj, value) => { obj.selectedTheme = value; } }, metadata: _metadata }, _selectedTheme_initializers, _selectedTheme_extraInitializers);
106
+ __esDecorate(this, null, _isFullscreen_decorators, { kind: "accessor", name: "isFullscreen", static: false, private: false, access: { has: obj => "isFullscreen" in obj, get: obj => obj.isFullscreen, set: (obj, value) => { obj.isFullscreen = value; } }, metadata: _metadata }, _isFullscreen_initializers, _isFullscreen_extraInitializers);
107
+ __esDecorate(this, null, _pages_decorators, { kind: "accessor", name: "pages", static: false, private: false, access: { has: obj => "pages" in obj, get: obj => obj.pages, set: (obj, value) => { obj.pages = value; } }, metadata: _metadata }, _pages_initializers, _pages_extraInitializers);
108
+ __esDecorate(this, null, _elements_decorators, { kind: "accessor", name: "elements", static: false, private: false, access: { has: obj => "elements" in obj, get: obj => obj.elements, set: (obj, value) => { obj.elements = value; } }, metadata: _metadata }, _elements_initializers, _elements_extraInitializers);
109
+ __esDecorate(this, null, _warning_decorators, { kind: "accessor", name: "warning", static: false, private: false, access: { has: obj => "warning" in obj, get: obj => obj.warning, set: (obj, value) => { obj.warning = value; } }, metadata: _metadata }, _warning_initializers, _warning_extraInitializers);
110
+ __esDecorate(this, null, _wccFrame_decorators, { kind: "accessor", name: "wccFrame", static: false, private: false, access: { has: obj => "wccFrame" in obj, get: obj => obj.wccFrame, set: (obj, value) => { obj.wccFrame = value; } }, metadata: _metadata }, _wccFrame_initializers, _wccFrame_extraInitializers);
111
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
112
+ WccDashboard = _classThis = _classDescriptor.value;
113
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
114
+ __runInitializers(_classThis, _classExtraInitializers);
38
115
  }
39
- if (pagesArg) {
40
- this.pages = pagesArg;
116
+ #selectedType_accessor_storage = __runInitializers(this, _selectedType_initializers, void 0);
117
+ get selectedType() { return this.#selectedType_accessor_storage; }
118
+ set selectedType(value) { this.#selectedType_accessor_storage = value; }
119
+ #selectedItemName_accessor_storage = (__runInitializers(this, _selectedType_extraInitializers), __runInitializers(this, _selectedItemName_initializers, void 0));
120
+ get selectedItemName() { return this.#selectedItemName_accessor_storage; }
121
+ set selectedItemName(value) { this.#selectedItemName_accessor_storage = value; }
122
+ #selectedItem_accessor_storage = (__runInitializers(this, _selectedItemName_extraInitializers), __runInitializers(this, _selectedItem_initializers, void 0));
123
+ get selectedItem() { return this.#selectedItem_accessor_storage; }
124
+ set selectedItem(value) { this.#selectedItem_accessor_storage = value; }
125
+ #selectedDemoIndex_accessor_storage = (__runInitializers(this, _selectedItem_extraInitializers), __runInitializers(this, _selectedDemoIndex_initializers, 0));
126
+ get selectedDemoIndex() { return this.#selectedDemoIndex_accessor_storage; }
127
+ set selectedDemoIndex(value) { this.#selectedDemoIndex_accessor_storage = value; }
128
+ #selectedViewport_accessor_storage = (__runInitializers(this, _selectedDemoIndex_extraInitializers), __runInitializers(this, _selectedViewport_initializers, 'desktop'));
129
+ get selectedViewport() { return this.#selectedViewport_accessor_storage; }
130
+ set selectedViewport(value) { this.#selectedViewport_accessor_storage = value; }
131
+ #selectedTheme_accessor_storage = (__runInitializers(this, _selectedViewport_extraInitializers), __runInitializers(this, _selectedTheme_initializers, 'dark'));
132
+ get selectedTheme() { return this.#selectedTheme_accessor_storage; }
133
+ set selectedTheme(value) { this.#selectedTheme_accessor_storage = value; }
134
+ #isFullscreen_accessor_storage = (__runInitializers(this, _selectedTheme_extraInitializers), __runInitializers(this, _isFullscreen_initializers, false));
135
+ get isFullscreen() { return this.#isFullscreen_accessor_storage; }
136
+ set isFullscreen(value) { this.#isFullscreen_accessor_storage = value; }
137
+ #pages_accessor_storage = (__runInitializers(this, _isFullscreen_extraInitializers), __runInitializers(this, _pages_initializers, {}));
138
+ get pages() { return this.#pages_accessor_storage; }
139
+ set pages(value) { this.#pages_accessor_storage = value; }
140
+ #elements_accessor_storage = (__runInitializers(this, _pages_extraInitializers), __runInitializers(this, _elements_initializers, {}));
141
+ get elements() { return this.#elements_accessor_storage; }
142
+ set elements(value) { this.#elements_accessor_storage = value; }
143
+ #warning_accessor_storage = (__runInitializers(this, _elements_extraInitializers), __runInitializers(this, _warning_initializers, null));
144
+ get warning() { return this.#warning_accessor_storage; }
145
+ set warning(value) { this.#warning_accessor_storage = value; }
146
+ frameScrollY = (__runInitializers(this, _warning_extraInitializers), 0);
147
+ sidebarScrollY = 0;
148
+ scrollPositionsApplied = false;
149
+ #wccFrame_accessor_storage = __runInitializers(this, _wccFrame_initializers, void 0);
150
+ get wccFrame() { return this.#wccFrame_accessor_storage; }
151
+ set wccFrame(value) { this.#wccFrame_accessor_storage = value; }
152
+ constructor(elementsArg, pagesArg) {
153
+ super();
154
+ if (elementsArg) {
155
+ this.elements = elementsArg;
156
+ console.log('got elements:');
157
+ console.log(this.elements);
158
+ }
159
+ if (pagesArg) {
160
+ this.pages = pagesArg;
161
+ }
41
162
  }
42
- }
43
- render() {
44
- return html `
163
+ render() {
164
+ return html `
45
165
  <style>
46
166
  :host {
47
167
  background: #fcfcfc;
@@ -57,14 +177,14 @@ let WccDashboard = class WccDashboard extends DeesElement {
57
177
  .selectedItem=${this.selectedItem}
58
178
  .isFullscreen=${this.isFullscreen}
59
179
  @selectedType=${(eventArg) => {
60
- this.selectedType = eventArg.detail;
61
- }}
180
+ this.selectedType = eventArg.detail;
181
+ }}
62
182
  @selectedItemName=${(eventArg) => {
63
- this.selectedItemName = eventArg.detail;
64
- }}
183
+ this.selectedItemName = eventArg.detail;
184
+ }}
65
185
  @selectedItem=${(eventArg) => {
66
- this.selectedItem = eventArg.detail;
67
- }}
186
+ this.selectedItem = eventArg.detail;
187
+ }}
68
188
  ></wcc-sidebar>
69
189
  <wcc-properties
70
190
  .dashboardRef=${this}
@@ -74,239 +194,243 @@ let WccDashboard = class WccDashboard extends DeesElement {
74
194
  .selectedTheme=${this.selectedTheme}
75
195
  .isFullscreen=${this.isFullscreen}
76
196
  @selectedViewport=${(eventArg) => {
77
- this.selectedViewport = eventArg.detail;
78
- this.scheduleUpdate();
79
- }}
197
+ this.selectedViewport = eventArg.detail;
198
+ this.scheduleUpdate();
199
+ }}
80
200
  @selectedTheme=${(eventArg) => {
81
- this.selectedTheme = eventArg.detail;
82
- }}
201
+ this.selectedTheme = eventArg.detail;
202
+ }}
83
203
  @editorStateChanged=${async (eventArg) => {
84
- const frame = await this.wccFrame;
85
- if (frame) {
86
- frame.advancedEditorOpen = eventArg.detail.isOpen;
87
- frame.requestUpdate();
88
- }
89
- }}
204
+ const frame = await this.wccFrame;
205
+ if (frame) {
206
+ frame.advancedEditorOpen = eventArg.detail.isOpen;
207
+ frame.requestUpdate();
208
+ }
209
+ }}
90
210
  @toggleFullscreen=${() => {
91
- this.toggleFullscreen();
92
- }}
211
+ this.toggleFullscreen();
212
+ }}
93
213
  ></wcc-properties>
94
214
  <wcc-frame id="wccFrame" viewport=${this.selectedViewport} .isFullscreen=${this.isFullscreen}>
95
215
  </wcc-frame>
96
216
  `;
97
- }
98
- setWarning(warningTextArg) {
99
- if (this.warning !== warningTextArg) {
100
- console.log(warningTextArg);
101
- this.warning = warningTextArg;
102
- setTimeout(() => {
103
- this.scheduleUpdate();
104
- }, 0);
105
217
  }
106
- }
107
- toggleFullscreen() {
108
- this.isFullscreen = !this.isFullscreen;
109
- }
110
- async firstUpdated() {
111
- this.domtools = await plugins.deesDomtools.DomTools.setupDomTools();
112
- // Add ESC key handler for fullscreen mode
113
- document.addEventListener('keydown', (event) => {
114
- if (event.key === 'Escape' && this.isFullscreen) {
115
- this.isFullscreen = false;
218
+ setWarning(warningTextArg) {
219
+ if (this.warning !== warningTextArg) {
220
+ console.log(warningTextArg);
221
+ this.warning = warningTextArg;
222
+ setTimeout(() => {
223
+ this.scheduleUpdate();
224
+ }, 0);
116
225
  }
117
- });
118
- // Set up scroll listeners after DOM is ready
119
- setTimeout(() => {
120
- this.setupScrollListeners();
121
- }, 500);
122
- this.domtools.router.on('/wcctools-route/:itemType/:itemName/:viewport/:theme', async (routeInfo) => {
123
- this.selectedType = routeInfo.params.itemType;
124
- this.selectedItemName = routeInfo.params.itemName;
125
- this.selectedViewport = routeInfo.params.viewport;
126
- this.selectedTheme = routeInfo.params.theme;
127
- if (routeInfo.params.itemType === 'element') {
128
- this.selectedItem = this.elements[routeInfo.params.itemName];
226
+ }
227
+ toggleFullscreen() {
228
+ this.isFullscreen = !this.isFullscreen;
229
+ }
230
+ async firstUpdated() {
231
+ this.domtools = await plugins.deesDomtools.DomTools.setupDomTools();
232
+ // Add ESC key handler for fullscreen mode
233
+ document.addEventListener('keydown', (event) => {
234
+ if (event.key === 'Escape' && this.isFullscreen) {
235
+ this.isFullscreen = false;
236
+ }
237
+ });
238
+ // Set up scroll listeners after DOM is ready
239
+ setTimeout(() => {
240
+ this.setupScrollListeners();
241
+ }, 500);
242
+ // Route with demo index (new format)
243
+ this.domtools.router.on('/wcctools-route/:itemType/:itemName/:demoIndex/:viewport/:theme', async (routeInfo) => {
244
+ this.selectedType = routeInfo.params.itemType;
245
+ this.selectedItemName = routeInfo.params.itemName;
246
+ this.selectedDemoIndex = parseInt(routeInfo.params.demoIndex) || 0;
247
+ this.selectedViewport = routeInfo.params.viewport;
248
+ this.selectedTheme = routeInfo.params.theme;
249
+ if (routeInfo.params.itemType === 'element') {
250
+ this.selectedItem = this.elements[routeInfo.params.itemName];
251
+ }
252
+ else if (routeInfo.params.itemType === 'page') {
253
+ this.selectedItem = this.pages[routeInfo.params.itemName];
254
+ }
255
+ // Restore scroll positions from query parameters
256
+ if (routeInfo.queryParams) {
257
+ const frameScrollY = routeInfo.queryParams.frameScrollY;
258
+ const sidebarScrollY = routeInfo.queryParams.sidebarScrollY;
259
+ if (frameScrollY) {
260
+ this.frameScrollY = parseInt(frameScrollY);
261
+ }
262
+ if (sidebarScrollY) {
263
+ this.sidebarScrollY = parseInt(sidebarScrollY);
264
+ }
265
+ // Apply scroll positions after a short delay to ensure DOM is ready
266
+ setTimeout(() => {
267
+ this.applyScrollPositions();
268
+ }, 100);
269
+ }
270
+ const domtoolsInstance = await plugins.deesDomtools.elementBasic.setup();
271
+ this.selectedTheme === 'bright'
272
+ ? domtoolsInstance.themeManager.goBright()
273
+ : domtoolsInstance.themeManager.goDark();
274
+ });
275
+ // Legacy route without demo index (for backwards compatibility)
276
+ this.domtools.router.on('/wcctools-route/:itemType/:itemName/:viewport/:theme', async (routeInfo) => {
277
+ this.selectedType = routeInfo.params.itemType;
278
+ this.selectedItemName = routeInfo.params.itemName;
279
+ this.selectedDemoIndex = 0; // Default to first demo
280
+ this.selectedViewport = routeInfo.params.viewport;
281
+ this.selectedTheme = routeInfo.params.theme;
282
+ if (routeInfo.params.itemType === 'element') {
283
+ this.selectedItem = this.elements[routeInfo.params.itemName];
284
+ }
285
+ else if (routeInfo.params.itemType === 'page') {
286
+ this.selectedItem = this.pages[routeInfo.params.itemName];
287
+ }
288
+ // Restore scroll positions from query parameters
289
+ if (routeInfo.queryParams) {
290
+ const frameScrollY = routeInfo.queryParams.frameScrollY;
291
+ const sidebarScrollY = routeInfo.queryParams.sidebarScrollY;
292
+ if (frameScrollY) {
293
+ this.frameScrollY = parseInt(frameScrollY);
294
+ }
295
+ if (sidebarScrollY) {
296
+ this.sidebarScrollY = parseInt(sidebarScrollY);
297
+ }
298
+ // Apply scroll positions after a short delay to ensure DOM is ready
299
+ setTimeout(() => {
300
+ this.applyScrollPositions();
301
+ }, 100);
302
+ }
303
+ const domtoolsInstance = await plugins.deesDomtools.elementBasic.setup();
304
+ this.selectedTheme === 'bright'
305
+ ? domtoolsInstance.themeManager.goBright()
306
+ : domtoolsInstance.themeManager.goDark();
307
+ });
308
+ }
309
+ async updated(changedPropertiesArg) {
310
+ this.domtools = await plugins.deesDomtools.DomTools.setupDomTools();
311
+ await this.domtools.router._handleRouteState();
312
+ const wccFrame = this.shadowRoot.querySelector('wcc-frame');
313
+ if (changedPropertiesArg.has('selectedItemName')) {
314
+ document.title = this.selectedItemName;
129
315
  }
130
- else if (routeInfo.params.itemType === 'page') {
131
- this.selectedItem = this.pages[routeInfo.params.itemName];
316
+ ;
317
+ if (this.selectedType === 'page' && this.selectedItem) {
318
+ if (typeof this.selectedItem === 'function') {
319
+ console.log('slotting page.');
320
+ const viewport = await wccFrame.getViewportElement();
321
+ const pageFactory = this.selectedItem;
322
+ const pageTemplate = await resolveTemplateFactory(pageFactory);
323
+ render(pageTemplate, viewport);
324
+ console.log('rendered page.');
325
+ }
326
+ else {
327
+ console.error('The selected item looks strange:');
328
+ console.log(this.selectedItem);
329
+ }
132
330
  }
133
- // Restore scroll positions from query parameters
134
- if (routeInfo.queryParams) {
135
- const frameScrollY = routeInfo.queryParams.frameScrollY;
136
- const sidebarScrollY = routeInfo.queryParams.sidebarScrollY;
137
- if (frameScrollY) {
138
- this.frameScrollY = parseInt(frameScrollY);
331
+ else if (this.selectedType === 'element' && this.selectedItem) {
332
+ console.log('slotting element.');
333
+ const anonItem = this.selectedItem;
334
+ if (!anonItem.demo) {
335
+ this.setWarning(`component ${anonItem.name} does not expose a demo property.`);
336
+ return;
139
337
  }
140
- if (sidebarScrollY) {
141
- this.sidebarScrollY = parseInt(sidebarScrollY);
338
+ // Support both single demo (function) and multiple demos (array)
339
+ const isArray = Array.isArray(anonItem.demo);
340
+ const isFunction = typeof anonItem.demo === 'function';
341
+ if (!isArray && !isFunction) {
342
+ this.setWarning(`component ${anonItem.name} has demo property, but it is not a function or array of functions`);
343
+ return;
142
344
  }
143
- // Apply scroll positions after a short delay to ensure DOM is ready
144
- setTimeout(() => {
145
- this.applyScrollPositions();
146
- }, 100);
345
+ // Get the specific demo to render
346
+ const demoFactory = getDemoAtIndex(anonItem.demo, this.selectedDemoIndex);
347
+ if (!demoFactory) {
348
+ this.setWarning(`component ${anonItem.name} does not have a demo at index ${this.selectedDemoIndex + 1}`);
349
+ return;
350
+ }
351
+ this.setWarning(null);
352
+ const viewport = await wccFrame.getViewportElement();
353
+ const demoTemplate = await resolveTemplateFactory(demoFactory);
354
+ render(demoTemplate, viewport);
147
355
  }
148
- const domtoolsInstance = await plugins.deesDomtools.elementBasic.setup();
149
- this.selectedTheme === 'bright'
150
- ? domtoolsInstance.themeManager.goBright()
151
- : domtoolsInstance.themeManager.goDark();
152
- });
153
- }
154
- async updated(changedPropertiesArg) {
155
- this.domtools = await plugins.deesDomtools.DomTools.setupDomTools();
156
- await this.domtools.router._handleRouteState();
157
- const wccFrame = this.shadowRoot.querySelector('wcc-frame');
158
- if (changedPropertiesArg.has('selectedItemName')) {
159
- document.title = this.selectedItemName;
160
356
  }
161
- ;
162
- if (this.selectedType === 'page' && this.selectedItem) {
163
- if (typeof this.selectedItem === 'function') {
164
- console.log('slotting page.');
165
- const viewport = await wccFrame.getViewportElement();
166
- const pageFactory = this.selectedItem;
167
- const pageTemplate = await resolveTemplateFactory(pageFactory);
168
- render(pageTemplate, viewport);
169
- console.log('rendered page.');
357
+ buildUrl() {
358
+ const baseUrl = `/wcctools-route/${this.selectedType}/${this.selectedItemName}/${this.selectedDemoIndex}/${this.selectedViewport}/${this.selectedTheme}`;
359
+ const queryParams = new URLSearchParams();
360
+ if (this.frameScrollY > 0) {
361
+ queryParams.set('frameScrollY', this.frameScrollY.toString());
170
362
  }
171
- else {
172
- console.error('The selected item looks strange:');
173
- console.log(this.selectedItem);
363
+ if (this.sidebarScrollY > 0) {
364
+ queryParams.set('sidebarScrollY', this.sidebarScrollY.toString());
174
365
  }
366
+ const queryString = queryParams.toString();
367
+ const fullUrl = queryString ? `${baseUrl}?${queryString}` : baseUrl;
368
+ this.domtools.router.pushUrl(fullUrl);
175
369
  }
176
- else if (this.selectedType === 'element' && this.selectedItem) {
177
- console.log('slotting element.');
178
- const anonItem = this.selectedItem;
179
- if (!anonItem.demo) {
180
- this.setWarning(`component ${anonItem.name} does not expose a demo property.`);
370
+ scrollUpdateTimeout = __runInitializers(this, _wccFrame_extraInitializers);
371
+ scrollListenersAttached = false;
372
+ async setupScrollListeners() {
373
+ // Prevent duplicate listeners
374
+ if (this.scrollListenersAttached) {
181
375
  return;
182
376
  }
183
- if (!(typeof anonItem.demo === 'function')) {
184
- this.setWarning(`component ${anonItem.name} has demo property, but it is not of type function`);
185
- return;
377
+ const wccFrame = await this.wccFrame;
378
+ const wccSidebar = this.shadowRoot.querySelector('wcc-sidebar');
379
+ if (wccFrame) {
380
+ // The frame element itself is the scrollable container
381
+ wccFrame.addEventListener('scroll', () => {
382
+ this.frameScrollY = wccFrame.scrollTop;
383
+ this.debouncedScrollUpdate();
384
+ });
385
+ this.scrollListenersAttached = true;
386
+ }
387
+ if (wccSidebar) {
388
+ // The sidebar element itself is the scrollable container
389
+ wccSidebar.addEventListener('scroll', () => {
390
+ this.sidebarScrollY = wccSidebar.scrollTop;
391
+ this.debouncedScrollUpdate();
392
+ });
186
393
  }
187
- this.setWarning(null);
188
- const viewport = await wccFrame.getViewportElement();
189
- const demoTemplate = await resolveTemplateFactory(() => anonItem.demo());
190
- render(demoTemplate, viewport);
191
- }
192
- }
193
- buildUrl() {
194
- const baseUrl = `/wcctools-route/${this.selectedType}/${this.selectedItemName}/${this.selectedViewport}/${this.selectedTheme}`;
195
- const queryParams = new URLSearchParams();
196
- if (this.frameScrollY > 0) {
197
- queryParams.set('frameScrollY', this.frameScrollY.toString());
198
- }
199
- if (this.sidebarScrollY > 0) {
200
- queryParams.set('sidebarScrollY', this.sidebarScrollY.toString());
201
- }
202
- const queryString = queryParams.toString();
203
- const fullUrl = queryString ? `${baseUrl}?${queryString}` : baseUrl;
204
- this.domtools.router.pushUrl(fullUrl);
205
- }
206
- async setupScrollListeners() {
207
- // Prevent duplicate listeners
208
- if (this.scrollListenersAttached) {
209
- return;
210
- }
211
- const wccFrame = await this.wccFrame;
212
- const wccSidebar = this.shadowRoot.querySelector('wcc-sidebar');
213
- if (wccFrame) {
214
- // The frame element itself is the scrollable container
215
- wccFrame.addEventListener('scroll', () => {
216
- this.frameScrollY = wccFrame.scrollTop;
217
- this.debouncedScrollUpdate();
218
- });
219
- this.scrollListenersAttached = true;
220
- }
221
- if (wccSidebar) {
222
- // The sidebar element itself is the scrollable container
223
- wccSidebar.addEventListener('scroll', () => {
224
- this.sidebarScrollY = wccSidebar.scrollTop;
225
- this.debouncedScrollUpdate();
226
- });
227
- }
228
- }
229
- debouncedScrollUpdate() {
230
- clearTimeout(this.scrollUpdateTimeout);
231
- this.scrollUpdateTimeout = setTimeout(() => {
232
- this.updateUrlWithScrollState();
233
- }, 300);
234
- }
235
- updateUrlWithScrollState() {
236
- const baseUrl = `/wcctools-route/${this.selectedType}/${this.selectedItemName}/${this.selectedViewport}/${this.selectedTheme}`;
237
- const queryParams = new URLSearchParams();
238
- if (this.frameScrollY > 0) {
239
- queryParams.set('frameScrollY', this.frameScrollY.toString());
240
- }
241
- if (this.sidebarScrollY > 0) {
242
- queryParams.set('sidebarScrollY', this.sidebarScrollY.toString());
243
394
  }
244
- const queryString = queryParams.toString();
245
- const fullUrl = queryString ? `${baseUrl}?${queryString}` : baseUrl;
246
- // Use replaceState to update URL without navigation
247
- window.history.replaceState(null, '', fullUrl);
248
- }
249
- async applyScrollPositions() {
250
- // Only apply scroll positions once to avoid interfering with user scrolling
251
- if (this.scrollPositionsApplied) {
252
- return;
395
+ debouncedScrollUpdate() {
396
+ clearTimeout(this.scrollUpdateTimeout);
397
+ this.scrollUpdateTimeout = setTimeout(() => {
398
+ this.updateUrlWithScrollState();
399
+ }, 300);
253
400
  }
254
- const wccFrame = await this.wccFrame;
255
- const wccSidebar = this.shadowRoot.querySelector('wcc-sidebar');
256
- if (wccFrame && this.frameScrollY > 0) {
257
- // The frame element itself is the scrollable container
258
- wccFrame.scrollTop = this.frameScrollY;
401
+ updateUrlWithScrollState() {
402
+ const baseUrl = `/wcctools-route/${this.selectedType}/${this.selectedItemName}/${this.selectedDemoIndex}/${this.selectedViewport}/${this.selectedTheme}`;
403
+ const queryParams = new URLSearchParams();
404
+ if (this.frameScrollY > 0) {
405
+ queryParams.set('frameScrollY', this.frameScrollY.toString());
406
+ }
407
+ if (this.sidebarScrollY > 0) {
408
+ queryParams.set('sidebarScrollY', this.sidebarScrollY.toString());
409
+ }
410
+ const queryString = queryParams.toString();
411
+ const fullUrl = queryString ? `${baseUrl}?${queryString}` : baseUrl;
412
+ // Use replaceState to update URL without navigation
413
+ window.history.replaceState(null, '', fullUrl);
259
414
  }
260
- if (wccSidebar && this.sidebarScrollY > 0) {
261
- // The sidebar element itself is the scrollable container
262
- wccSidebar.scrollTop = this.sidebarScrollY;
415
+ async applyScrollPositions() {
416
+ // Only apply scroll positions once to avoid interfering with user scrolling
417
+ if (this.scrollPositionsApplied) {
418
+ return;
419
+ }
420
+ const wccFrame = await this.wccFrame;
421
+ const wccSidebar = this.shadowRoot.querySelector('wcc-sidebar');
422
+ if (wccFrame && this.frameScrollY > 0) {
423
+ // The frame element itself is the scrollable container
424
+ wccFrame.scrollTop = this.frameScrollY;
425
+ }
426
+ if (wccSidebar && this.sidebarScrollY > 0) {
427
+ // The sidebar element itself is the scrollable container
428
+ wccSidebar.scrollTop = this.sidebarScrollY;
429
+ }
430
+ this.scrollPositionsApplied = true;
263
431
  }
264
- this.scrollPositionsApplied = true;
265
- }
266
- };
267
- __decorate([
268
- property(),
269
- __metadata("design:type", String)
270
- ], WccDashboard.prototype, "selectedType", void 0);
271
- __decorate([
272
- property(),
273
- __metadata("design:type", String)
274
- ], WccDashboard.prototype, "selectedItemName", void 0);
275
- __decorate([
276
- property(),
277
- __metadata("design:type", Object)
278
- ], WccDashboard.prototype, "selectedItem", void 0);
279
- __decorate([
280
- property(),
281
- __metadata("design:type", String)
282
- ], WccDashboard.prototype, "selectedViewport", void 0);
283
- __decorate([
284
- property(),
285
- __metadata("design:type", String)
286
- ], WccDashboard.prototype, "selectedTheme", void 0);
287
- __decorate([
288
- property(),
289
- __metadata("design:type", Boolean)
290
- ], WccDashboard.prototype, "isFullscreen", void 0);
291
- __decorate([
292
- property(),
293
- __metadata("design:type", Object)
294
- ], WccDashboard.prototype, "pages", void 0);
295
- __decorate([
296
- property(),
297
- __metadata("design:type", Object)
298
- ], WccDashboard.prototype, "elements", void 0);
299
- __decorate([
300
- property(),
301
- __metadata("design:type", String)
302
- ], WccDashboard.prototype, "warning", void 0);
303
- __decorate([
304
- queryAsync('wcc-frame'),
305
- __metadata("design:type", Promise)
306
- ], WccDashboard.prototype, "wccFrame", void 0);
307
- WccDashboard = __decorate([
308
- customElement('wcc-dashboard'),
309
- __metadata("design:paramtypes", [Object, Object])
310
- ], WccDashboard);
432
+ };
433
+ return WccDashboard = _classThis;
434
+ })();
311
435
  export { WccDashboard };
312
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2NjLWRhc2hib2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy93Y2MtZGFzaGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQXVCLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUksT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHL0QsT0FBTyxLQUFLLE9BQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUVsRCxZQUFZO0FBQ1osT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFlLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkMsSUFBTSxZQUFZLEdBQWxCLE1BQU0sWUFBYSxTQUFRLFdBQVc7SUFvQzNDLFlBQ0UsV0FBNEMsRUFDNUMsUUFBMkM7UUFFM0MsS0FBSyxFQUFFLENBQUM7UUE1QkgscUJBQWdCLEdBQStDLFNBQVMsQ0FBQztRQUd6RSxrQkFBYSxHQUFXLE1BQU0sQ0FBQztRQUcvQixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUc5QixVQUFLLEdBQXFDLEVBQUUsQ0FBQztRQUc3QyxhQUFRLEdBQW1DLEVBQUUsQ0FBQztRQUc5QyxZQUFPLEdBQVcsSUFBSSxDQUFDO1FBRXRCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQTRN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
436
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2NjLWRhc2hib2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy93Y2MtZGFzaGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUF1QixVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVJLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHL0csT0FBTyxLQUFLLE9BQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUVsRCxZQUFZO0FBQ1osT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFlLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7SUFHN0IsWUFBWTs0QkFEeEIsYUFBYSxDQUFDLGVBQWUsQ0FBQzs7OztzQkFDRyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzRCQUFuQixTQUFRLFdBQVc7Ozs7d0NBRTFDLFFBQVEsRUFBRTs0Q0FHVixRQUFRLEVBQUU7d0NBR1YsUUFBUSxFQUFFOzZDQUdWLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzs0Q0FHMUIsUUFBUSxFQUFFO3lDQUdWLFFBQVEsRUFBRTt3Q0FHVixRQUFRLEVBQUU7aUNBR1YsUUFBUSxFQUFFO29DQUdWLFFBQVEsRUFBRTttQ0FH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