@design.estate/dees-wcctools 3.1.2 → 3.3.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.
@@ -34,7 +34,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
34
34
  };
35
35
  import * as plugins from '../wcctools.plugins.js';
36
36
  import { DeesElement, property, html, customElement, state } from '@design.estate/dees-element';
37
- import { WccDashboard } from './wcc-dashboard.js';
37
+ import { WccDashboard, getSectionItems } from './wcc-dashboard.js';
38
38
  import { getDemoCount, hasMultipleDemos } from './wcctools.helpers.js';
39
39
  let WccSidebar = (() => {
40
40
  let _classDecorators = [customElement('wcc-sidebar')];
@@ -57,6 +57,9 @@ let WccSidebar = (() => {
57
57
  let _expandedElements_decorators;
58
58
  let _expandedElements_initializers = [];
59
59
  let _expandedElements_extraInitializers = [];
60
+ let _collapsedSections_decorators;
61
+ let _collapsedSections_initializers = [];
62
+ let _collapsedSections_extraInitializers = [];
60
63
  var WccSidebar = class extends _classSuper {
61
64
  static { _classThis = this; }
62
65
  static {
@@ -66,11 +69,13 @@ let WccSidebar = (() => {
66
69
  _dashboardRef_decorators = [property()];
67
70
  _isNative_decorators = [property()];
68
71
  _expandedElements_decorators = [state()];
72
+ _collapsedSections_decorators = [state()];
69
73
  __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);
70
74
  __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);
71
75
  __esDecorate(this, null, _dashboardRef_decorators, { kind: "accessor", name: "dashboardRef", static: false, private: false, access: { has: obj => "dashboardRef" in obj, get: obj => obj.dashboardRef, set: (obj, value) => { obj.dashboardRef = value; } }, metadata: _metadata }, _dashboardRef_initializers, _dashboardRef_extraInitializers);
72
76
  __esDecorate(this, null, _isNative_decorators, { kind: "accessor", name: "isNative", static: false, private: false, access: { has: obj => "isNative" in obj, get: obj => obj.isNative, set: (obj, value) => { obj.isNative = value; } }, metadata: _metadata }, _isNative_initializers, _isNative_extraInitializers);
73
77
  __esDecorate(this, null, _expandedElements_decorators, { kind: "accessor", name: "expandedElements", static: false, private: false, access: { has: obj => "expandedElements" in obj, get: obj => obj.expandedElements, set: (obj, value) => { obj.expandedElements = value; } }, metadata: _metadata }, _expandedElements_initializers, _expandedElements_extraInitializers);
78
+ __esDecorate(this, null, _collapsedSections_decorators, { kind: "accessor", name: "collapsedSections", static: false, private: false, access: { has: obj => "collapsedSections" in obj, get: obj => obj.collapsedSections, set: (obj, value) => { obj.collapsedSections = value; } }, metadata: _metadata }, _collapsedSections_initializers, _collapsedSections_extraInitializers);
74
79
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
75
80
  WccSidebar = _classThis = _classDescriptor.value;
76
81
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
@@ -92,6 +97,11 @@ let WccSidebar = (() => {
92
97
  // Track which elements are expanded (for multi-demo elements)
93
98
  get expandedElements() { return this.#expandedElements_accessor_storage; }
94
99
  set expandedElements(value) { this.#expandedElements_accessor_storage = value; }
100
+ #collapsedSections_accessor_storage = (__runInitializers(this, _expandedElements_extraInitializers), __runInitializers(this, _collapsedSections_initializers, new Set()));
101
+ // Track which sections are collapsed
102
+ get collapsedSections() { return this.#collapsedSections_accessor_storage; }
103
+ set collapsedSections(value) { this.#collapsedSections_accessor_storage = value; }
104
+ sectionsInitialized = (__runInitializers(this, _collapsedSections_extraInitializers), false);
95
105
  render() {
96
106
  return html `
97
107
  <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" rel="stylesheet" />
@@ -133,7 +143,7 @@ let WccSidebar = (() => {
133
143
  padding: 0.5rem 0;
134
144
  }
135
145
 
136
- h3 {
146
+ .section-header {
137
147
  padding: 0.3rem 0.75rem;
138
148
  font-size: 0.65rem;
139
149
  font-weight: 500;
@@ -145,12 +155,45 @@ let WccSidebar = (() => {
145
155
  background: rgba(59, 130, 246, 0.03);
146
156
  border-bottom: 1px solid var(--border);
147
157
  border-top: 1px solid var(--border);
158
+ display: flex;
159
+ align-items: center;
160
+ gap: 0.5rem;
161
+ cursor: pointer;
162
+ user-select: none;
163
+ transition: all 0.15s ease;
148
164
  }
149
165
 
150
- h3:first-child {
166
+ .section-header:first-child {
151
167
  margin-top: 0;
152
168
  }
153
169
 
170
+ .section-header:hover {
171
+ background: rgba(59, 130, 246, 0.08);
172
+ }
173
+
174
+ .section-header .expand-icon {
175
+ font-size: 14px;
176
+ opacity: 0.5;
177
+ transition: transform 0.2s ease;
178
+ }
179
+
180
+ .section-header.collapsed .expand-icon {
181
+ transform: rotate(-90deg);
182
+ }
183
+
184
+ .section-header .section-icon {
185
+ font-size: 14px;
186
+ opacity: 0.6;
187
+ }
188
+
189
+ .section-content {
190
+ overflow: hidden;
191
+ }
192
+
193
+ .section-content.collapsed {
194
+ display: none;
195
+ }
196
+
154
197
  .material-symbols-outlined {
155
198
  font-family: 'Material Symbols Outlined';
156
199
  font-weight: normal;
@@ -284,86 +327,137 @@ let WccSidebar = (() => {
284
327
  }
285
328
  </style>
286
329
  <div class="menu">
287
- <h3>Pages</h3>
288
- ${(() => {
289
- const pages = Object.keys(this.dashboardRef.pages);
290
- return pages.map(pageName => {
291
- const item = this.dashboardRef.pages[pageName];
330
+ ${this.renderSections()}
331
+ </div>
332
+ `;
333
+ }
334
+ /**
335
+ * Initialize collapsed sections from section config
336
+ */
337
+ initCollapsedSections() {
338
+ if (this.sectionsInitialized)
339
+ return;
340
+ const collapsed = new Set();
341
+ for (const section of this.dashboardRef.sections) {
342
+ if (section.collapsed) {
343
+ collapsed.add(section.name);
344
+ }
345
+ }
346
+ this.collapsedSections = collapsed;
347
+ this.sectionsInitialized = true;
348
+ }
349
+ /**
350
+ * Render all sections
351
+ */
352
+ renderSections() {
353
+ this.initCollapsedSections();
354
+ return this.dashboardRef.sections.map((section, index) => {
355
+ const isCollapsed = this.collapsedSections.has(section.name);
356
+ const sectionIcon = section.icon || (section.type === 'pages' ? 'insert_drive_file' : 'widgets');
357
+ return html `
358
+ <div
359
+ class="section-header ${isCollapsed ? 'collapsed' : ''}"
360
+ @click=${() => this.toggleSectionCollapsed(section.name)}
361
+ >
362
+ <i class="material-symbols-outlined expand-icon">expand_more</i>
363
+ ${section.icon ? html `<i class="material-symbols-outlined section-icon">${section.icon}</i>` : null}
364
+ <span>${section.name}</span>
365
+ </div>
366
+ <div class="section-content ${isCollapsed ? 'collapsed' : ''}">
367
+ ${this.renderSectionItems(section)}
368
+ </div>
369
+ `;
370
+ });
371
+ }
372
+ /**
373
+ * Render items for a section
374
+ */
375
+ renderSectionItems(section) {
376
+ const entries = getSectionItems(section);
377
+ if (section.type === 'pages') {
378
+ return entries.map(([pageName, item]) => {
292
379
  return html `
293
- <div
294
- class="selectOption ${this.selectedItem === item ? 'selected' : null}"
295
- @click=${async () => {
296
- const domtools = await plugins.deesDomtools.DomTools.setupDomTools();
297
- this.selectItem('page', pageName, item, 0);
380
+ <div
381
+ class="selectOption ${this.selectedItem === item ? 'selected' : ''}"
382
+ @click=${async () => {
383
+ await plugins.deesDomtools.DomTools.setupDomTools();
384
+ this.selectItem('page', pageName, item, 0, section);
298
385
  }}
299
- >
300
- <i class="material-symbols-outlined">insert_drive_file</i>
301
- <div class="text">${pageName}</div>
302
- </div>
303
- `;
386
+ >
387
+ <i class="material-symbols-outlined">insert_drive_file</i>
388
+ <div class="text">${pageName}</div>
389
+ </div>
390
+ `;
304
391
  });
305
- })()}
306
- <h3>Elements</h3>
307
- ${(() => {
308
- const elements = Object.keys(this.dashboardRef.elements);
309
- return elements.map(elementName => {
310
- const item = this.dashboardRef.elements[elementName];
311
- const demoCount = item.demo ? getDemoCount(item.demo) : 0;
312
- const isMultiDemo = item.demo && hasMultipleDemos(item.demo);
392
+ }
393
+ else {
394
+ // type === 'elements'
395
+ return entries.map(([elementName, item]) => {
396
+ const anonItem = item;
397
+ const demoCount = anonItem.demo ? getDemoCount(anonItem.demo) : 0;
398
+ const isMultiDemo = anonItem.demo && hasMultipleDemos(anonItem.demo);
313
399
  const isExpanded = this.expandedElements.has(elementName);
314
400
  const isSelected = this.selectedItem === item;
315
401
  if (isMultiDemo) {
316
402
  // Multi-demo element - render as expandable folder
317
403
  return html `
318
- <div
319
- class="selectOption folder ${isExpanded ? 'expanded' : ''} ${isSelected ? 'selected' : ''}"
320
- @click=${() => this.toggleExpanded(elementName)}
321
- >
322
- <i class="material-symbols-outlined expand-icon">chevron_right</i>
323
- <i class="material-symbols-outlined">folder</i>
324
- <div class="text">${elementName}</div>
325
- </div>
326
- ${isExpanded ? html `
327
- <div class="demo-children">
328
- ${Array.from({ length: demoCount }, (_, i) => {
404
+ <div
405
+ class="selectOption folder ${isExpanded ? 'expanded' : ''} ${isSelected ? 'selected' : ''}"
406
+ @click=${() => this.toggleExpanded(elementName)}
407
+ >
408
+ <i class="material-symbols-outlined expand-icon">chevron_right</i>
409
+ <i class="material-symbols-outlined">folder</i>
410
+ <div class="text">${elementName}</div>
411
+ </div>
412
+ ${isExpanded ? html `
413
+ <div class="demo-children">
414
+ ${Array.from({ length: demoCount }, (_, i) => {
329
415
  const demoIndex = i;
330
416
  const isThisDemoSelected = isSelected && this.dashboardRef.selectedDemoIndex === demoIndex;
331
417
  return html `
332
- <div
333
- class="demo-child ${isThisDemoSelected ? 'selected' : ''}"
334
- @click=${async () => {
418
+ <div
419
+ class="demo-child ${isThisDemoSelected ? 'selected' : ''}"
420
+ @click=${async () => {
335
421
  await plugins.deesDomtools.DomTools.setupDomTools();
336
- this.selectItem('element', elementName, item, demoIndex);
422
+ this.selectItem('element', elementName, item, demoIndex, section);
337
423
  }}
338
- >
339
- <i class="material-symbols-outlined">play_circle</i>
340
- <div class="text">demo${demoIndex + 1}</div>
341
- </div>
342
- `;
424
+ >
425
+ <i class="material-symbols-outlined">play_circle</i>
426
+ <div class="text">demo${demoIndex + 1}</div>
427
+ </div>
428
+ `;
343
429
  })}
344
- </div>
345
- ` : null}
346
- `;
430
+ </div>
431
+ ` : null}
432
+ `;
347
433
  }
348
434
  else {
349
- // Single demo element - render as normal
435
+ // Single demo element
350
436
  return html `
351
- <div
352
- class="selectOption ${isSelected ? 'selected' : null}"
353
- @click=${async () => {
437
+ <div
438
+ class="selectOption ${isSelected ? 'selected' : ''}"
439
+ @click=${async () => {
354
440
  await plugins.deesDomtools.DomTools.setupDomTools();
355
- this.selectItem('element', elementName, item, 0);
441
+ this.selectItem('element', elementName, item, 0, section);
356
442
  }}
357
- >
358
- <i class="material-symbols-outlined">featured_video</i>
359
- <div class="text">${elementName}</div>
360
- </div>
361
- `;
443
+ >
444
+ <i class="material-symbols-outlined">featured_video</i>
445
+ <div class="text">${elementName}</div>
446
+ </div>
447
+ `;
362
448
  }
363
449
  });
364
- })()}
365
- </div>
366
- `;
450
+ }
451
+ }
452
+ toggleSectionCollapsed(sectionName) {
453
+ const newSet = new Set(this.collapsedSections);
454
+ if (newSet.has(sectionName)) {
455
+ newSet.delete(sectionName);
456
+ }
457
+ else {
458
+ newSet.add(sectionName);
459
+ }
460
+ this.collapsedSections = newSet;
367
461
  }
368
462
  toggleExpanded(elementName) {
369
463
  const newSet = new Set(this.expandedElements);
@@ -375,14 +469,44 @@ let WccSidebar = (() => {
375
469
  }
376
470
  this.expandedElements = newSet;
377
471
  }
378
- selectItem(typeArg, itemNameArg, itemArg, demoIndex = 0) {
472
+ updated(changedProperties) {
473
+ super.updated(changedProperties);
474
+ // Auto-expand folder when a multi-demo element is selected
475
+ if (changedProperties.has('selectedItem') && this.selectedItem) {
476
+ // Find the element in any section
477
+ for (const section of this.dashboardRef.sections) {
478
+ if (section.type !== 'elements')
479
+ continue;
480
+ const entries = getSectionItems(section);
481
+ const found = entries.find(([_, item]) => item === this.selectedItem);
482
+ if (found) {
483
+ const [elementName, item] = found;
484
+ const anonItem = item;
485
+ if (anonItem.demo && hasMultipleDemos(anonItem.demo)) {
486
+ if (!this.expandedElements.has(elementName)) {
487
+ const newSet = new Set(this.expandedElements);
488
+ newSet.add(elementName);
489
+ this.expandedElements = newSet;
490
+ }
491
+ }
492
+ break;
493
+ }
494
+ }
495
+ }
496
+ }
497
+ selectItem(typeArg, itemNameArg, itemArg, demoIndex = 0, section) {
379
498
  console.log('selected item');
380
499
  console.log(itemNameArg);
381
500
  console.log(itemArg);
382
501
  console.log('demo index:', demoIndex);
502
+ console.log('section:', section?.name);
383
503
  this.selectedItem = itemArg;
384
504
  this.selectedType = typeArg;
385
505
  this.dashboardRef.selectedDemoIndex = demoIndex;
506
+ // Set the selected section on dashboard
507
+ if (section) {
508
+ this.dashboardRef.selectedSection = section;
509
+ }
386
510
  this.dispatchEvent(new CustomEvent('selectedType', {
387
511
  detail: typeArg
388
512
  }));
@@ -394,15 +518,10 @@ let WccSidebar = (() => {
394
518
  }));
395
519
  this.dashboardRef.buildUrl();
396
520
  // Force re-render to update demo child selection indicator
397
- // (needed when switching between demos of the same element)
398
521
  this.requestUpdate();
399
522
  }
400
- constructor() {
401
- super(...arguments);
402
- __runInitializers(this, _expandedElements_extraInitializers);
403
- }
404
523
  };
405
524
  return WccSidebar = _classThis;
406
525
  })();
407
526
  export { WccSidebar };
408
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2NjLXNpZGViYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvd2NjLXNpZGViYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBdUIsS0FBSyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztJQUsxRCxVQUFVOzRCQUR0QixhQUFhLENBQUMsYUFBYSxDQUFDOzs7O3NCQUNHLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBQW5CLFNBQVEsV0FBVzs7Ozt3Q0FDeEMsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO3dDQUc5QixRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7d0NBRzlCLFFBQVEsRUFBRTtvQ0FHVixRQUFRLEVBQUU7NENBSVYsS0FBSyxFQUFFO1lBWlIseUxBQVMsWUFBWSw2QkFBWixZQUFZLG1HQUFpQztZQUd0RCx5TEFBUyxZQUFZLDZCQUFaLFlBQVksbUdBQWU7WUFHcEMseUxBQVMsWUFBWSw2QkFBWixZQUFZLG1HQUFlO1lBR3BDLDZLQUFTLFFBQVEsNkJBQVIsUUFBUSwyRkFBa0I7WUFJbkMscU1BQVMsZ0JBQWdCLDZCQUFoQixnQkFBZ0IsMkdBQTBCO1lBZnJELDZLQTJVQzs7O1lBM1VZLHVEQUFVOztRQUVyQiw2RkFBc0Q7UUFBdEQsSUFBUyxZQUFZLGtEQUFpQztRQUF0RCxJQUFTLFlBQVksd0RBQWlDO1FBR3RELHlKQUFvQztRQUFwQyxJQUFTLFlB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
527
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2NjLXNpZGViYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvd2NjLXNpZGViYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBdUIsS0FBSyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7SUFJMUQsVUFBVTs0QkFEdEIsYUFBYSxDQUFDLGFBQWEsQ0FBQzs7OztzQkFDRyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQUFuQixTQUFRLFdBQVc7Ozs7d0NBQ3hDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQzt3Q0FHOUIsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO3dDQUc5QixRQUFRLEVBQUU7b0NBR1YsUUFBUSxFQUFFOzRDQUlWLEtBQUssRUFBRTs2Q0FJUCxLQUFLLEVBQUU7WUFoQlIseUxBQVMsWUFBWSw2QkFBWixZQUFZLG1HQUFpQztZQUd0RCx5TEFBUyxZQUFZLDZCQUFaLFlBQVksbUdBQWU7WUFHcEMseUxBQVMsWUFBWSw2QkFBWixZQUFZLG1HQUFlO1lBR3BDLDZLQUFTLFFBQVEsNkJBQVIsUUFBUSwyRkFBa0I7WUFJbkMscU1BQVMsZ0JBQWdCLDZCQUFoQixnQkFBZ0IsMkdBQTBCO1lBSW5ELHdNQUFTLGlCQUFpQiw2QkFBakIsaUJBQWlCLDZHQUEwQjtZQW5CdEQsNktBa2RDOzs7WUFsZFksdURBQVU7O1FBRXJCLDZGQUFzRDtR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
@@ -1,9 +1,29 @@
1
1
  import { LitElement } from 'lit';
2
2
  import type { TTemplateFactory } from './elements/wcctools.helpers.js';
3
+ import type { IWccConfig } from './wcctools.interfaces.js';
3
4
  export { RecorderService, type IRecorderEvents, type IRecordingOptions } from './services/recorder.service.js';
4
5
  export { WccRecordButton } from './elements/wcc-record-button.js';
5
6
  export { WccRecordingPanel } from './elements/wcc-recording-panel.js';
6
- declare const setupWccTools: (elementsArg?: {
7
+ export type { IWccConfig, IWccSection } from './wcctools.interfaces.js';
8
+ /**
9
+ * Setup WCC Tools dashboard
10
+ *
11
+ * New format (recommended):
12
+ * ```typescript
13
+ * setupWccTools({
14
+ * sections: [
15
+ * { name: 'Elements', type: 'elements', items: elements },
16
+ * { name: 'Pages', type: 'pages', items: pages },
17
+ * ]
18
+ * });
19
+ * ```
20
+ *
21
+ * Legacy format (still supported):
22
+ * ```typescript
23
+ * setupWccTools(elements, pages);
24
+ * ```
25
+ */
26
+ declare const setupWccTools: (configOrElements?: IWccConfig | {
7
27
  [key: string]: LitElement;
8
28
  }, pagesArg?: Record<string, TTemplateFactory>) => void;
9
29
  export { setupWccTools };
@@ -4,12 +4,64 @@ import { LitElement } from 'lit';
4
4
  export { RecorderService } from './services/recorder.service.js';
5
5
  export { WccRecordButton } from './elements/wcc-record-button.js';
6
6
  export { WccRecordingPanel } from './elements/wcc-recording-panel.js';
7
- const setupWccTools = (elementsArg, pagesArg) => {
7
+ /**
8
+ * Converts legacy (elements, pages) format to new sections config
9
+ */
10
+ const convertLegacyToConfig = (elementsArg, pagesArg) => {
11
+ const sections = [];
12
+ if (pagesArg && Object.keys(pagesArg).length > 0) {
13
+ sections.push({
14
+ name: 'Pages',
15
+ type: 'pages',
16
+ items: pagesArg,
17
+ });
18
+ }
19
+ if (elementsArg && Object.keys(elementsArg).length > 0) {
20
+ sections.push({
21
+ name: 'Elements',
22
+ type: 'elements',
23
+ items: elementsArg,
24
+ });
25
+ }
26
+ return { sections };
27
+ };
28
+ /**
29
+ * Check if the argument is the new config format
30
+ */
31
+ const isWccConfig = (arg) => {
32
+ return arg && typeof arg === 'object' && 'sections' in arg && Array.isArray(arg.sections);
33
+ };
34
+ /**
35
+ * Setup WCC Tools dashboard
36
+ *
37
+ * New format (recommended):
38
+ * ```typescript
39
+ * setupWccTools({
40
+ * sections: [
41
+ * { name: 'Elements', type: 'elements', items: elements },
42
+ * { name: 'Pages', type: 'pages', items: pages },
43
+ * ]
44
+ * });
45
+ * ```
46
+ *
47
+ * Legacy format (still supported):
48
+ * ```typescript
49
+ * setupWccTools(elements, pages);
50
+ * ```
51
+ */
52
+ const setupWccTools = (configOrElements, pagesArg) => {
53
+ let config;
54
+ if (isWccConfig(configOrElements)) {
55
+ config = configOrElements;
56
+ }
57
+ else {
58
+ config = convertLegacyToConfig(configOrElements, pagesArg);
59
+ }
8
60
  let hasRun = false;
9
61
  const runWccToolsSetup = async () => {
10
62
  if (document.readyState === 'complete' && !hasRun) {
11
63
  hasRun = true;
12
- const wccTools = new WccDashboard(elementsArg, pagesArg);
64
+ const wccTools = new WccDashboard(config);
13
65
  document.querySelector('body').append(wccTools);
14
66
  }
15
67
  };
@@ -17,4 +69,4 @@ const setupWccTools = (elementsArg, pagesArg) => {
17
69
  runWccToolsSetup();
18
70
  };
19
71
  export { setupWccTools };
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c193ZWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFHakMsMENBQTBDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQWdELE1BQU0sZ0NBQWdDLENBQUM7QUFDL0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE1BQU0sYUFBYSxHQUFHLENBQ3BCLFdBQTJDLEVBQzNDLFFBQTJDLEVBQzNDLEVBQUU7SUFDRixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDbkIsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLElBQUksRUFBRTtRQUNsQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEQsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNkLE1BQU0sUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLFdBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDaEUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUMsQ0FBQztJQUNGLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hFLGdCQUFnQixFQUFFLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUNMLGFBQWEsRUFDZCxDQUFDIn0=
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c193ZWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFJakMsMENBQTBDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQWdELE1BQU0sZ0NBQWdDLENBQUM7QUFDL0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBS3RFOztHQUVHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxDQUM1QixXQUEyQyxFQUMzQyxRQUEyQyxFQUMvQixFQUFFO0lBQ2QsTUFBTSxRQUFRLEdBQWtCLEVBQUUsQ0FBQztJQUVuQyxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ1osSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsT0FBTztZQUNiLEtBQUssRUFBRSxRQUFRO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2RCxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ1osSUFBSSxFQUFFLFVBQVU7WUFDaEIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsS0FBSyxFQUFFLFdBQVc7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUN0QixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBUSxFQUFxQixFQUFFO0lBQ2xELE9BQU8sR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxVQUFVLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVGLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sYUFBYSxHQUFHLENBQ3BCLGdCQUE2RCxFQUM3RCxRQUEyQyxFQUMzQyxFQUFFO0lBQ0YsSUFBSSxNQUFrQixDQUFDO0lBRXZCLElBQUksV0FBVyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLEdBQUcscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNuQixNQUFNLGdCQUFnQixHQUFHLEtBQUssSUFBSSxFQUFFO1FBQ2xDLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsRCxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2QsTUFBTSxRQUFRLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUMsQ0FBQztJQUNGLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hFLGdCQUFnQixFQUFFLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUNMLGFBQWEsRUFDZCxDQUFDIn0=
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Configuration for a section in the WCC Tools sidebar
3
+ */
4
+ export interface IWccSection {
5
+ /** Display name for the section header */
6
+ name: string;
7
+ /** How items in this section are rendered - 'elements' show demos, 'pages' render directly */
8
+ type: 'elements' | 'pages';
9
+ /** The items in this section - either element classes or page factory functions */
10
+ items: Record<string, any>;
11
+ /** Optional filter function to include/exclude items */
12
+ filter?: (name: string, item: any) => boolean;
13
+ /** Optional sort function for ordering items */
14
+ sort?: (a: [string, any], b: [string, any]) => number;
15
+ /** Optional Material icon name for the section header */
16
+ icon?: string;
17
+ /** Whether this section should start collapsed (default: false) */
18
+ collapsed?: boolean;
19
+ }
20
+ /**
21
+ * Configuration object for setupWccTools
22
+ */
23
+ export interface IWccConfig {
24
+ sections: IWccSection[];
25
+ }
26
+ /**
27
+ * Type for element selection types - now section-based
28
+ */
29
+ export type TElementType = 'element' | 'page';
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2NjdG9vbHMuaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3dlYi93Y2N0b29scy5pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==