@design.estate/wcctools 5.1.0 → 6.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 (128) hide show
  1. package/.smartconfig.json +7 -3
  2. package/changelog.md +15 -0
  3. package/cli.js +3 -0
  4. package/dist_shell/bundle.js +2970 -0
  5. package/dist_shell/bundle.js.map +1 -0
  6. package/dist_shell/bundle.js.third-party-notices.json +1722 -0
  7. package/dist_shell/bundle.js.third-party-notices.txt +4195 -0
  8. package/dist_shell/index.html +21 -0
  9. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  10. package/dist_ts/00_commitinfo_data.js +9 -0
  11. package/dist_ts/classes.devapi.d.ts +11 -0
  12. package/dist_ts/classes.devapi.js +21 -0
  13. package/dist_ts/classes.devserver.d.ts +49 -0
  14. package/dist_ts/classes.devserver.js +142 -0
  15. package/dist_ts/cli.d.ts +6 -0
  16. package/dist_ts/cli.js +45 -0
  17. package/dist_ts/index.d.ts +3 -0
  18. package/dist_ts/index.js +4 -0
  19. package/dist_ts/paths.d.ts +4 -0
  20. package/dist_ts/paths.js +6 -0
  21. package/dist_ts/plugins.d.ts +15 -0
  22. package/dist_ts/plugins.js +21 -0
  23. package/dist_ts/shellcontent.d.ts +9 -0
  24. package/dist_ts/shellcontent.js +42 -0
  25. package/dist_ts_interfaces/bridge.d.ts +88 -0
  26. package/dist_ts_interfaces/bridge.js +2 -0
  27. package/dist_ts_interfaces/catalog.d.ts +32 -0
  28. package/dist_ts_interfaces/catalog.js +6 -0
  29. package/dist_ts_interfaces/index.d.ts +3 -0
  30. package/dist_ts_interfaces/index.js +4 -0
  31. package/dist_ts_interfaces/plugins.d.ts +2 -0
  32. package/dist_ts_interfaces/plugins.js +3 -0
  33. package/dist_ts_interfaces/requests.d.ts +15 -0
  34. package/dist_ts_interfaces/requests.js +2 -0
  35. package/dist_ts_shared/index.d.ts +1 -0
  36. package/dist_ts_shared/index.js +2 -0
  37. package/dist_ts_shared/plugins.d.ts +2 -0
  38. package/dist_ts_shared/plugins.js +3 -0
  39. package/dist_ts_shared/previewroute.d.ts +18 -0
  40. package/dist_ts_shared/previewroute.js +47 -0
  41. package/{dist_ts_web → dist_ts_shell}/elements/wcc-contextmenu.js +1 -1
  42. package/dist_ts_shell/elements/wcc-preview-frame.d.ts +23 -0
  43. package/dist_ts_shell/elements/wcc-preview-frame.js +197 -0
  44. package/dist_ts_shell/elements/wcc-properties.d.ts +49 -0
  45. package/{dist_ts_web → dist_ts_shell}/elements/wcc-properties.js +149 -216
  46. package/{dist_ts_web → dist_ts_shell}/elements/wcc-record-button.js +1 -1
  47. package/{dist_ts_web → dist_ts_shell}/elements/wcc-recording-panel.d.ts +2 -2
  48. package/{dist_ts_web → dist_ts_shell}/elements/wcc-recording-panel.js +12 -16
  49. package/dist_ts_shell/elements/wcc-shell.d.ts +87 -0
  50. package/dist_ts_shell/elements/wcc-shell.js +524 -0
  51. package/{dist_ts_web → dist_ts_shell}/elements/wcc-sidebar.d.ts +12 -10
  52. package/{dist_ts_web → dist_ts_shell}/elements/wcc-sidebar.js +137 -183
  53. package/dist_ts_shell/index.d.ts +4 -0
  54. package/dist_ts_shell/index.js +5 -0
  55. package/dist_ts_shell/plugins.d.ts +4 -0
  56. package/dist_ts_shell/plugins.js +5 -0
  57. package/dist_ts_shell/previewconnection.d.ts +30 -0
  58. package/dist_ts_shell/previewconnection.js +86 -0
  59. package/dist_ts_shell/services/recorder.service.js +353 -0
  60. package/dist_ts_web/00_commitinfo_data.js +2 -2
  61. package/dist_ts_web/catalog.d.ts +45 -0
  62. package/dist_ts_web/catalog.js +153 -0
  63. package/dist_ts_web/elementproperties.d.ts +15 -0
  64. package/dist_ts_web/elementproperties.js +89 -0
  65. package/dist_ts_web/elements/wcc-preview.d.ts +19 -0
  66. package/dist_ts_web/elements/wcc-preview.js +164 -0
  67. package/dist_ts_web/elements/wcc-standalone-notice.d.ts +14 -0
  68. package/dist_ts_web/elements/wcc-standalone-notice.js +110 -0
  69. package/dist_ts_web/elements/wcctools.helpers.d.ts +2 -6
  70. package/dist_ts_web/elements/wcctools.helpers.js +1 -7
  71. package/dist_ts_web/index.d.ts +2 -5
  72. package/dist_ts_web/index.js +38 -17
  73. package/dist_ts_web/previewbridge.d.ts +39 -0
  74. package/dist_ts_web/previewbridge.js +153 -0
  75. package/dist_ts_web/renderedtree.d.ts +5 -0
  76. package/dist_ts_web/renderedtree.js +37 -0
  77. package/dist_ts_web/wcctools.interfaces.d.ts +3 -6
  78. package/dist_ts_web/wcctools.interfaces.js +1 -1
  79. package/dist_ts_web/wcctools.plugins.d.ts +3 -1
  80. package/dist_ts_web/wcctools.plugins.js +4 -2
  81. package/package.json +16 -8
  82. package/readme.md +60 -28
  83. package/ts/00_commitinfo_data.ts +8 -0
  84. package/ts/classes.devapi.ts +25 -0
  85. package/ts/classes.devserver.ts +161 -0
  86. package/ts/cli.ts +46 -0
  87. package/ts/index.ts +3 -0
  88. package/ts/paths.ts +7 -0
  89. package/ts/plugins.ts +29 -0
  90. package/ts/shellcontent.ts +42 -0
  91. package/ts_web/00_commitinfo_data.ts +1 -1
  92. package/ts_web/catalog.ts +194 -0
  93. package/ts_web/elementproperties.ts +96 -0
  94. package/ts_web/elements/wcc-preview.ts +111 -0
  95. package/ts_web/elements/wcc-standalone-notice.ts +65 -0
  96. package/ts_web/elements/wcctools.helpers.ts +2 -10
  97. package/ts_web/index.ts +38 -19
  98. package/ts_web/previewbridge.ts +189 -0
  99. package/ts_web/readme.md +26 -85
  100. package/ts_web/renderedtree.ts +43 -0
  101. package/ts_web/wcctools.interfaces.ts +4 -7
  102. package/ts_web/wcctools.plugins.ts +6 -1
  103. package/dist_bundle/bundle.js +0 -92419
  104. package/dist_bundle/bundle.js.map +0 -1
  105. package/dist_ts_web/elements/wcc-dashboard.d.ts +0 -119
  106. package/dist_ts_web/elements/wcc-dashboard.js +0 -700
  107. package/dist_ts_web/elements/wcc-frame.d.ts +0 -22
  108. package/dist_ts_web/elements/wcc-frame.js +0 -256
  109. package/dist_ts_web/elements/wcc-properties.d.ts +0 -43
  110. package/dist_ts_web/pages/index.d.ts +0 -1
  111. package/dist_ts_web/pages/index.js +0 -2
  112. package/dist_ts_web/services/recorder.service.js +0 -353
  113. package/ts_web/elements/wcc-contextmenu.ts +0 -291
  114. package/ts_web/elements/wcc-dashboard.ts +0 -672
  115. package/ts_web/elements/wcc-frame.ts +0 -189
  116. package/ts_web/elements/wcc-properties.ts +0 -1089
  117. package/ts_web/elements/wcc-record-button.ts +0 -108
  118. package/ts_web/elements/wcc-recording-panel.ts +0 -1010
  119. package/ts_web/elements/wcc-sidebar.ts +0 -1470
  120. package/ts_web/pages/index.ts +0 -1
  121. package/ts_web/services/recorder.service.ts +0 -451
  122. package/ts_web/types/dom-mediacapture-stub/index.d.ts +0 -12
  123. package/ts_web/types/dom-mediacapture-stub/package.json +0 -6
  124. package/ts_web/types/dom-webcodecs-stub/index.d.ts +0 -2
  125. package/ts_web/types/dom-webcodecs-stub/package.json +0 -6
  126. /package/{dist_ts_web → dist_ts_shell}/elements/wcc-contextmenu.d.ts +0 -0
  127. /package/{dist_ts_web → dist_ts_shell}/elements/wcc-record-button.d.ts +0 -0
  128. /package/{dist_ts_web → dist_ts_shell}/services/recorder.service.d.ts +0 -0
@@ -0,0 +1,524 @@
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;
27
+ };
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;
34
+ };
35
+ import { DeesElement, property, state, html, customElement } from '@design.estate/dees-element';
36
+ import * as plugins from '../plugins.js';
37
+ import { WccPreviewConnection } from '../previewconnection.js';
38
+ import './wcc-preview-frame.js';
39
+ import './wcc-sidebar.js';
40
+ import './wcc-properties.js';
41
+ const viewports = ['native', 'desktop', 'tablet', 'phablet', 'phone'];
42
+ const defaultSidebarWidth = 200;
43
+ const selectionKey = (selectionArg) => selectionArg ? `${selectionArg.sectionName}::${selectionArg.itemName}::${selectionArg.demoIndex}` : null;
44
+ /**
45
+ * The wcctools UI: catalog sidebar, properties and preview controls, and the preview frame
46
+ * that shows the catalog's own document. The shell owns the `/wcctools-route/...` URL and
47
+ * drives the preview through its bridge; a reloaded preview reconnects without the shell
48
+ * reloading.
49
+ */
50
+ let WccShell = (() => {
51
+ let _classDecorators = [customElement('wcc-shell')];
52
+ let _classDescriptor;
53
+ let _classExtraInitializers = [];
54
+ let _classThis;
55
+ let _classSuper = DeesElement;
56
+ let _previewPath_decorators;
57
+ let _previewPath_initializers = [];
58
+ let _previewPath_extraInitializers = [];
59
+ let _selection_decorators;
60
+ let _selection_initializers = [];
61
+ let _selection_extraInitializers = [];
62
+ let _selectedViewport_decorators;
63
+ let _selectedViewport_initializers = [];
64
+ let _selectedViewport_extraInitializers = [];
65
+ let _selectedTheme_decorators;
66
+ let _selectedTheme_initializers = [];
67
+ let _selectedTheme_extraInitializers = [];
68
+ let _searchQuery_decorators;
69
+ let _searchQuery_initializers = [];
70
+ let _searchQuery_extraInitializers = [];
71
+ let _pinnedItems_decorators;
72
+ let _pinnedItems_initializers = [];
73
+ let _pinnedItems_extraInitializers = [];
74
+ let _sidebarWidth_decorators;
75
+ let _sidebarWidth_initializers = [];
76
+ let _sidebarWidth_extraInitializers = [];
77
+ let _manifest_decorators;
78
+ let _manifest_initializers = [];
79
+ let _manifest_extraInitializers = [];
80
+ let _bridge_decorators;
81
+ let _bridge_initializers = [];
82
+ let _bridge_extraInitializers = [];
83
+ let _renderCount_decorators;
84
+ let _renderCount_initializers = [];
85
+ let _renderCount_extraInitializers = [];
86
+ let _previewSrc_decorators;
87
+ let _previewSrc_initializers = [];
88
+ let _previewSrc_extraInitializers = [];
89
+ let _advancedEditorOpen_decorators;
90
+ let _advancedEditorOpen_initializers = [];
91
+ let _advancedEditorOpen_extraInitializers = [];
92
+ let _isResizing_decorators;
93
+ let _isResizing_initializers = [];
94
+ let _isResizing_extraInitializers = [];
95
+ let _captureTarget_decorators;
96
+ let _captureTarget_initializers = [];
97
+ let _captureTarget_extraInitializers = [];
98
+ var WccShell = class extends _classSuper {
99
+ static { _classThis = this; }
100
+ static {
101
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
102
+ _previewPath_decorators = [property({ attribute: 'preview-path' })];
103
+ _selection_decorators = [property({ attribute: false })];
104
+ _selectedViewport_decorators = [property()];
105
+ _selectedTheme_decorators = [property()];
106
+ _searchQuery_decorators = [property()];
107
+ _pinnedItems_decorators = [property({ attribute: false })];
108
+ _sidebarWidth_decorators = [property({ type: Number })];
109
+ _manifest_decorators = [state()];
110
+ _bridge_decorators = [state()];
111
+ _renderCount_decorators = [state()];
112
+ _previewSrc_decorators = [state()];
113
+ _advancedEditorOpen_decorators = [state()];
114
+ _isResizing_decorators = [state()];
115
+ _captureTarget_decorators = [state()];
116
+ __esDecorate(this, null, _previewPath_decorators, { kind: "accessor", name: "previewPath", static: false, private: false, access: { has: obj => "previewPath" in obj, get: obj => obj.previewPath, set: (obj, value) => { obj.previewPath = value; } }, metadata: _metadata }, _previewPath_initializers, _previewPath_extraInitializers);
117
+ __esDecorate(this, null, _selection_decorators, { kind: "accessor", name: "selection", static: false, private: false, access: { has: obj => "selection" in obj, get: obj => obj.selection, set: (obj, value) => { obj.selection = value; } }, metadata: _metadata }, _selection_initializers, _selection_extraInitializers);
118
+ __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);
119
+ __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);
120
+ __esDecorate(this, null, _searchQuery_decorators, { kind: "accessor", name: "searchQuery", static: false, private: false, access: { has: obj => "searchQuery" in obj, get: obj => obj.searchQuery, set: (obj, value) => { obj.searchQuery = value; } }, metadata: _metadata }, _searchQuery_initializers, _searchQuery_extraInitializers);
121
+ __esDecorate(this, null, _pinnedItems_decorators, { kind: "accessor", name: "pinnedItems", static: false, private: false, access: { has: obj => "pinnedItems" in obj, get: obj => obj.pinnedItems, set: (obj, value) => { obj.pinnedItems = value; } }, metadata: _metadata }, _pinnedItems_initializers, _pinnedItems_extraInitializers);
122
+ __esDecorate(this, null, _sidebarWidth_decorators, { kind: "accessor", name: "sidebarWidth", static: false, private: false, access: { has: obj => "sidebarWidth" in obj, get: obj => obj.sidebarWidth, set: (obj, value) => { obj.sidebarWidth = value; } }, metadata: _metadata }, _sidebarWidth_initializers, _sidebarWidth_extraInitializers);
123
+ __esDecorate(this, null, _manifest_decorators, { kind: "accessor", name: "manifest", static: false, private: false, access: { has: obj => "manifest" in obj, get: obj => obj.manifest, set: (obj, value) => { obj.manifest = value; } }, metadata: _metadata }, _manifest_initializers, _manifest_extraInitializers);
124
+ __esDecorate(this, null, _bridge_decorators, { kind: "accessor", name: "bridge", static: false, private: false, access: { has: obj => "bridge" in obj, get: obj => obj.bridge, set: (obj, value) => { obj.bridge = value; } }, metadata: _metadata }, _bridge_initializers, _bridge_extraInitializers);
125
+ __esDecorate(this, null, _renderCount_decorators, { kind: "accessor", name: "renderCount", static: false, private: false, access: { has: obj => "renderCount" in obj, get: obj => obj.renderCount, set: (obj, value) => { obj.renderCount = value; } }, metadata: _metadata }, _renderCount_initializers, _renderCount_extraInitializers);
126
+ __esDecorate(this, null, _previewSrc_decorators, { kind: "accessor", name: "previewSrc", static: false, private: false, access: { has: obj => "previewSrc" in obj, get: obj => obj.previewSrc, set: (obj, value) => { obj.previewSrc = value; } }, metadata: _metadata }, _previewSrc_initializers, _previewSrc_extraInitializers);
127
+ __esDecorate(this, null, _advancedEditorOpen_decorators, { kind: "accessor", name: "advancedEditorOpen", static: false, private: false, access: { has: obj => "advancedEditorOpen" in obj, get: obj => obj.advancedEditorOpen, set: (obj, value) => { obj.advancedEditorOpen = value; } }, metadata: _metadata }, _advancedEditorOpen_initializers, _advancedEditorOpen_extraInitializers);
128
+ __esDecorate(this, null, _isResizing_decorators, { kind: "accessor", name: "isResizing", static: false, private: false, access: { has: obj => "isResizing" in obj, get: obj => obj.isResizing, set: (obj, value) => { obj.isResizing = value; } }, metadata: _metadata }, _isResizing_initializers, _isResizing_extraInitializers);
129
+ __esDecorate(this, null, _captureTarget_decorators, { kind: "accessor", name: "captureTarget", static: false, private: false, access: { has: obj => "captureTarget" in obj, get: obj => obj.captureTarget, set: (obj, value) => { obj.captureTarget = value; } }, metadata: _metadata }, _captureTarget_initializers, _captureTarget_extraInitializers);
130
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
131
+ WccShell = _classThis = _classDescriptor.value;
132
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
133
+ __runInitializers(_classThis, _classExtraInitializers);
134
+ }
135
+ #previewPath_accessor_storage = __runInitializers(this, _previewPath_initializers, plugins.shared.previewRoutePath);
136
+ /** The path the server serves the preview document on. */
137
+ get previewPath() { return this.#previewPath_accessor_storage; }
138
+ set previewPath(value) { this.#previewPath_accessor_storage = value; }
139
+ #selection_accessor_storage = (__runInitializers(this, _previewPath_extraInitializers), __runInitializers(this, _selection_initializers, null));
140
+ get selection() { return this.#selection_accessor_storage; }
141
+ set selection(value) { this.#selection_accessor_storage = value; }
142
+ #selectedViewport_accessor_storage = (__runInitializers(this, _selection_extraInitializers), __runInitializers(this, _selectedViewport_initializers, 'desktop'));
143
+ get selectedViewport() { return this.#selectedViewport_accessor_storage; }
144
+ set selectedViewport(value) { this.#selectedViewport_accessor_storage = value; }
145
+ #selectedTheme_accessor_storage = (__runInitializers(this, _selectedViewport_extraInitializers), __runInitializers(this, _selectedTheme_initializers, 'dark'));
146
+ get selectedTheme() { return this.#selectedTheme_accessor_storage; }
147
+ set selectedTheme(value) { this.#selectedTheme_accessor_storage = value; }
148
+ #searchQuery_accessor_storage = (__runInitializers(this, _selectedTheme_extraInitializers), __runInitializers(this, _searchQuery_initializers, ''));
149
+ get searchQuery() { return this.#searchQuery_accessor_storage; }
150
+ set searchQuery(value) { this.#searchQuery_accessor_storage = value; }
151
+ #pinnedItems_accessor_storage = (__runInitializers(this, _searchQuery_extraInitializers), __runInitializers(this, _pinnedItems_initializers, new Set()));
152
+ // Pinned items as Set of "sectionName::itemName"
153
+ get pinnedItems() { return this.#pinnedItems_accessor_storage; }
154
+ set pinnedItems(value) { this.#pinnedItems_accessor_storage = value; }
155
+ #sidebarWidth_accessor_storage = (__runInitializers(this, _pinnedItems_extraInitializers), __runInitializers(this, _sidebarWidth_initializers, defaultSidebarWidth));
156
+ get sidebarWidth() { return this.#sidebarWidth_accessor_storage; }
157
+ set sidebarWidth(value) { this.#sidebarWidth_accessor_storage = value; }
158
+ #manifest_accessor_storage = (__runInitializers(this, _sidebarWidth_extraInitializers), __runInitializers(this, _manifest_initializers, null));
159
+ /** The catalog as the connected preview describes it; kept while the preview reloads. */
160
+ get manifest() { return this.#manifest_accessor_storage; }
161
+ set manifest(value) { this.#manifest_accessor_storage = value; }
162
+ #bridge_accessor_storage = (__runInitializers(this, _manifest_extraInitializers), __runInitializers(this, _bridge_initializers, null));
163
+ /** The connected preview's bridge; null while the preview loads. */
164
+ get bridge() { return this.#bridge_accessor_storage; }
165
+ set bridge(value) { this.#bridge_accessor_storage = value; }
166
+ #renderCount_accessor_storage = (__runInitializers(this, _bridge_extraInitializers), __runInitializers(this, _renderCount_initializers, 0));
167
+ /** Counts the renders of the preview, so the properties panel reads them. */
168
+ get renderCount() { return this.#renderCount_accessor_storage; }
169
+ set renderCount(value) { this.#renderCount_accessor_storage = value; }
170
+ #previewSrc_accessor_storage = (__runInitializers(this, _renderCount_extraInitializers), __runInitializers(this, _previewSrc_initializers, ''));
171
+ get previewSrc() { return this.#previewSrc_accessor_storage; }
172
+ set previewSrc(value) { this.#previewSrc_accessor_storage = value; }
173
+ #advancedEditorOpen_accessor_storage = (__runInitializers(this, _previewSrc_extraInitializers), __runInitializers(this, _advancedEditorOpen_initializers, false));
174
+ get advancedEditorOpen() { return this.#advancedEditorOpen_accessor_storage; }
175
+ set advancedEditorOpen(value) { this.#advancedEditorOpen_accessor_storage = value; }
176
+ #isResizing_accessor_storage = (__runInitializers(this, _advancedEditorOpen_extraInitializers), __runInitializers(this, _isResizing_initializers, false));
177
+ get isResizing() { return this.#isResizing_accessor_storage; }
178
+ set isResizing(value) { this.#isResizing_accessor_storage = value; }
179
+ #captureTarget_accessor_storage = (__runInitializers(this, _isResizing_extraInitializers), __runInitializers(this, _captureTarget_initializers, null));
180
+ get captureTarget() { return this.#captureTarget_accessor_storage; }
181
+ set captureTarget(value) { this.#captureTarget_accessor_storage = value; }
182
+ get isNative() {
183
+ return this.selectedViewport === 'native';
184
+ }
185
+ frameScrollY = (__runInitializers(this, _captureTarget_extraInitializers), 0);
186
+ sidebarScrollY = 0;
187
+ scrollPositionsRestored = false;
188
+ /** The selection the preview shows, as far as the shell asked it to. */
189
+ previewSelectionKey = null;
190
+ connection = new WccPreviewConnection(() => this.shadowRoot?.querySelector('wcc-preview-frame')?.iframe ?? null, {
191
+ onReady: (bridgeArg) => {
192
+ this.handlePreviewReady(bridgeArg).catch((error) => {
193
+ console.error('wcctools: connecting the preview failed', error);
194
+ });
195
+ },
196
+ onDisconnect: () => {
197
+ this.bridge = null;
198
+ },
199
+ onEscape: () => this.leaveNative(),
200
+ onScroll: (scrollYArg) => {
201
+ this.frameScrollY = scrollYArg;
202
+ this.debouncedScrollUpdate();
203
+ },
204
+ });
205
+ routeDisposers = [];
206
+ scrollDisposers = [];
207
+ scrollUpdateTimeout;
208
+ render() {
209
+ return html `
210
+ <style>
211
+ :host {
212
+ background: #fcfcfc;
213
+ display: block;
214
+ box-sizing: border-box;
215
+ position: fixed;
216
+ inset: 0;
217
+ min-width: 0;
218
+ overflow: hidden;
219
+ container-type: inline-size;
220
+ container-name: wccShell;
221
+ }
222
+ :host([hidden]) {
223
+ display: none;
224
+ }
225
+ </style>
226
+ <wcc-sidebar
227
+ .manifest=${this.manifest}
228
+ .selection=${this.selection}
229
+ .searchQuery=${this.searchQuery}
230
+ .pinnedItems=${this.pinnedItems}
231
+ .sidebarWidth=${this.sidebarWidth}
232
+ .isNative=${this.isNative}
233
+ @selectionChanged=${(eventArg) => {
234
+ this.selection = eventArg.detail;
235
+ this.buildUrl();
236
+ }}
237
+ @searchChanged=${(eventArg) => {
238
+ this.searchQuery = eventArg.detail;
239
+ this.updateUrlWithScrollState();
240
+ }}
241
+ @pinnedChanged=${(eventArg) => {
242
+ this.pinnedItems = eventArg.detail;
243
+ this.updateUrlWithScrollState();
244
+ }}
245
+ @widthChanged=${(eventArg) => {
246
+ this.sidebarWidth = eventArg.detail;
247
+ }}
248
+ @widthCommitted=${() => this.updateUrlWithScrollState()}
249
+ @resizingChanged=${(eventArg) => {
250
+ this.isResizing = eventArg.detail;
251
+ }}
252
+ ></wcc-sidebar>
253
+ <wcc-properties
254
+ role="region"
255
+ aria-label="Properties and preview controls"
256
+ .bridge=${this.bridge}
257
+ .renderCount=${this.renderCount}
258
+ .captureTarget=${this.captureTarget}
259
+ .selectedViewport=${this.selectedViewport}
260
+ .selectedTheme=${this.selectedTheme}
261
+ .isNative=${this.isNative}
262
+ .sidebarWidth=${this.sidebarWidth}
263
+ @selectedViewport=${(eventArg) => {
264
+ this.selectedViewport = eventArg.detail;
265
+ this.buildUrl();
266
+ }}
267
+ @selectedTheme=${(eventArg) => {
268
+ this.selectedTheme = eventArg.detail;
269
+ this.buildUrl();
270
+ }}
271
+ @editorStateChanged=${(eventArg) => {
272
+ this.advancedEditorOpen = eventArg.detail.isOpen;
273
+ }}
274
+ ></wcc-properties>
275
+ <wcc-preview-frame
276
+ role="main"
277
+ aria-label="Preview"
278
+ .viewport=${this.selectedViewport}
279
+ .previewSrc=${this.previewSrc}
280
+ .isNative=${this.isNative}
281
+ .sidebarWidth=${this.sidebarWidth}
282
+ .advancedEditorOpen=${this.advancedEditorOpen}
283
+ .isResizing=${this.isResizing}
284
+ ></wcc-preview-frame>
285
+ `;
286
+ }
287
+ leaveNative() {
288
+ if (this.isNative) {
289
+ this.selectedViewport = 'desktop';
290
+ this.buildUrl();
291
+ }
292
+ }
293
+ handleDocumentKeydown = (event) => {
294
+ if (event.key === 'Escape') {
295
+ this.leaveNative();
296
+ }
297
+ };
298
+ async connectedCallback() {
299
+ const connected = super.connectedCallback();
300
+ document.addEventListener('keydown', this.handleDocumentKeydown);
301
+ this.connection.start();
302
+ if (this.hasUpdated) {
303
+ await this.setupSidebarScrollListener();
304
+ }
305
+ await this.connectRoutes();
306
+ return connected;
307
+ }
308
+ async disconnectedCallback() {
309
+ const disconnected = super.disconnectedCallback();
310
+ document.removeEventListener('keydown', this.handleDocumentKeydown);
311
+ this.connection.dispose();
312
+ this.bridge = null;
313
+ for (const dispose of this.routeDisposers) {
314
+ dispose();
315
+ }
316
+ this.routeDisposers = [];
317
+ this.releaseScrollListeners();
318
+ clearTimeout(this.scrollUpdateTimeout);
319
+ return disconnected;
320
+ }
321
+ async firstUpdated() {
322
+ await this.setupSidebarScrollListener();
323
+ }
324
+ async connectRoutes() {
325
+ const domtools = await this.domtoolsPromise;
326
+ if (!this.isConnected || this.routeDisposers.length > 0) {
327
+ return;
328
+ }
329
+ this.domtools = domtools;
330
+ const handleRoute = async (routeInfo) => {
331
+ const { sectionName, itemName, demoIndex, viewport, theme } = routeInfo.params;
332
+ this.applyRoute({ sectionName, itemName, demoIndex, viewport, theme }, routeInfo.queryParams);
333
+ };
334
+ this.routeDisposers = [
335
+ domtools.router.on('/wcctools-route/:sectionName/:itemName/:demoIndex/:viewport/:theme', handleRoute),
336
+ // Route without demo index (kept for existing links)
337
+ domtools.router.on('/wcctools-route/:sectionName/:itemName/:viewport/:theme', handleRoute),
338
+ ];
339
+ await domtools.router._handleRouteState();
340
+ if (this.isConnected && !this.previewSrc) {
341
+ // Loaded once: later selections render through the bridge without reloading the preview
342
+ this.previewSrc = `${this.previewPath}${plugins.shared.formatPreviewQuery({ selection: this.selection, theme: this.selectedTheme })}`;
343
+ }
344
+ }
345
+ /**
346
+ * Apply a `/wcctools-route/...` location to the shell state.
347
+ */
348
+ applyRoute(routeArg, queryParamsArg = {}) {
349
+ this.selection = {
350
+ sectionName: decodeURIComponent(routeArg.sectionName),
351
+ itemName: routeArg.itemName,
352
+ demoIndex: parseInt(routeArg.demoIndex ?? '0', 10) || 0,
353
+ };
354
+ this.selectedViewport = viewports.includes(routeArg.viewport)
355
+ ? routeArg.viewport
356
+ : 'desktop';
357
+ this.selectedTheme = routeArg.theme === 'bright' ? 'bright' : 'dark';
358
+ // Restore state from query parameters
359
+ this.searchQuery = queryParamsArg.search || '';
360
+ if (queryParamsArg.frameScrollY) {
361
+ this.frameScrollY = parseInt(queryParamsArg.frameScrollY, 10);
362
+ }
363
+ if (queryParamsArg.sidebarScrollY) {
364
+ this.sidebarScrollY = parseInt(queryParamsArg.sidebarScrollY, 10);
365
+ }
366
+ if (queryParamsArg.pinned) {
367
+ const newPinned = new Set(queryParamsArg.pinned.split(',').filter(Boolean));
368
+ // Only update if actually different to avoid update loops
369
+ if (this.pinnedItems.size !== newPinned.size ||
370
+ ![...newPinned].every(k => this.pinnedItems.has(k))) {
371
+ this.pinnedItems = newPinned;
372
+ }
373
+ }
374
+ else if (this.pinnedItems.size > 0) {
375
+ this.pinnedItems = new Set();
376
+ }
377
+ this.sidebarWidth = queryParamsArg.sidebarWidth
378
+ ? parseInt(queryParamsArg.sidebarWidth, 10)
379
+ : defaultSidebarWidth;
380
+ }
381
+ async updated(changedPropertiesArg) {
382
+ super.updated(changedPropertiesArg);
383
+ if (changedPropertiesArg.has('selection') && this.selection) {
384
+ document.title = this.selection.itemName;
385
+ }
386
+ if (changedPropertiesArg.has('selectedTheme')) {
387
+ await this.applyTheme();
388
+ }
389
+ if (changedPropertiesArg.has('selection')) {
390
+ await this.renderSelectionInPreview();
391
+ }
392
+ }
393
+ /** The shell's own elements and the preview follow the selected theme. */
394
+ async applyTheme() {
395
+ const theme = this.selectedTheme;
396
+ const domtools = await plugins.deesDomtools.elementBasic.setup();
397
+ theme === 'bright' ? domtools.themeManager.goBright() : domtools.themeManager.goDark();
398
+ if (this.bridge && this.bridge.getTheme() !== theme) {
399
+ await this.bridge.setTheme(theme);
400
+ }
401
+ }
402
+ /**
403
+ * Render the selection in the preview. Only a change of the selected entry or demo
404
+ * re-renders; theme, viewport, search, pins and sidebar width leave the rendered demo
405
+ * (and its internal state) untouched.
406
+ */
407
+ async renderSelectionInPreview() {
408
+ const bridge = this.bridge;
409
+ const key = selectionKey(this.selection);
410
+ if (!bridge || !this.selection || key === this.previewSelectionKey) {
411
+ return;
412
+ }
413
+ this.previewSelectionKey = key;
414
+ await bridge.render(this.selection);
415
+ if (this.bridge === bridge) {
416
+ this.renderCount++;
417
+ }
418
+ }
419
+ /** A preview document is ready: read its catalog and bring it to the shell's state. */
420
+ async handlePreviewReady(bridgeArg) {
421
+ this.bridge = bridgeArg;
422
+ this.manifest = bridgeArg.getManifest();
423
+ this.captureTarget = this.shadowRoot?.querySelector('wcc-preview-frame')?.iframe ?? null;
424
+ if (bridgeArg.getTheme() !== this.selectedTheme) {
425
+ await bridgeArg.setTheme(this.selectedTheme);
426
+ }
427
+ // A reloaded preview restores what it showed from its own URL
428
+ this.previewSelectionKey = selectionKey(bridgeArg.getSelection());
429
+ await this.renderSelectionInPreview();
430
+ if (this.bridge !== bridgeArg) {
431
+ return;
432
+ }
433
+ this.renderCount++;
434
+ await this.restoreScrollPositions();
435
+ }
436
+ /** Scroll the sidebar and the preview to the positions of the loaded URL, once. */
437
+ async restoreScrollPositions() {
438
+ if (this.scrollPositionsRestored) {
439
+ return;
440
+ }
441
+ this.scrollPositionsRestored = true;
442
+ const sidebar = this.shadowRoot?.querySelector('wcc-sidebar');
443
+ await this.updateComplete;
444
+ await sidebar?.updateComplete;
445
+ if (sidebar?.scrollableContainer && this.sidebarScrollY > 0) {
446
+ sidebar.scrollableContainer.scrollTop = this.sidebarScrollY;
447
+ }
448
+ if (this.frameScrollY > 0) {
449
+ this.connection.scrollPreviewTo(this.frameScrollY);
450
+ }
451
+ }
452
+ getRouteUrl() {
453
+ if (!this.selection) {
454
+ return null;
455
+ }
456
+ const sectionName = encodeURIComponent(this.selection.sectionName);
457
+ const baseUrl = `/wcctools-route/${sectionName}/${this.selection.itemName}/${this.selection.demoIndex}/${this.selectedViewport}/${this.selectedTheme}`;
458
+ const queryParams = new URLSearchParams();
459
+ if (this.searchQuery) {
460
+ queryParams.set('search', this.searchQuery);
461
+ }
462
+ if (this.frameScrollY > 0) {
463
+ queryParams.set('frameScrollY', this.frameScrollY.toString());
464
+ }
465
+ if (this.sidebarScrollY > 0) {
466
+ queryParams.set('sidebarScrollY', this.sidebarScrollY.toString());
467
+ }
468
+ if (this.pinnedItems.size > 0) {
469
+ queryParams.set('pinned', Array.from(this.pinnedItems).join(','));
470
+ }
471
+ if (this.sidebarWidth !== defaultSidebarWidth) {
472
+ queryParams.set('sidebarWidth', this.sidebarWidth.toString());
473
+ }
474
+ const queryString = queryParams.toString();
475
+ return queryString ? `${baseUrl}?${queryString}` : baseUrl;
476
+ }
477
+ /** Push the current state as a new history entry; without a selection there is no route to push. */
478
+ buildUrl() {
479
+ const url = this.getRouteUrl();
480
+ if (url && this.domtools) {
481
+ this.domtools.router.pushUrl(url);
482
+ }
483
+ }
484
+ updateUrlWithScrollState() {
485
+ const url = this.getRouteUrl();
486
+ if (url) {
487
+ // Use replaceState to update URL without navigation
488
+ window.history.replaceState(null, '', url);
489
+ }
490
+ }
491
+ handleSidebarScroll = (event) => {
492
+ this.sidebarScrollY = event.currentTarget.scrollTop;
493
+ this.debouncedScrollUpdate();
494
+ };
495
+ async setupSidebarScrollListener() {
496
+ const sidebar = this.shadowRoot?.querySelector('wcc-sidebar');
497
+ await sidebar?.updateComplete;
498
+ // Prevent duplicate listeners and listeners on a removed shell
499
+ if (!this.isConnected || this.scrollDisposers.length > 0) {
500
+ return;
501
+ }
502
+ const scrollContainer = sidebar?.scrollableContainer;
503
+ if (scrollContainer) {
504
+ scrollContainer.addEventListener('scroll', this.handleSidebarScroll);
505
+ this.scrollDisposers.push(() => scrollContainer.removeEventListener('scroll', this.handleSidebarScroll));
506
+ }
507
+ }
508
+ releaseScrollListeners() {
509
+ for (const dispose of this.scrollDisposers) {
510
+ dispose();
511
+ }
512
+ this.scrollDisposers = [];
513
+ }
514
+ debouncedScrollUpdate() {
515
+ clearTimeout(this.scrollUpdateTimeout);
516
+ this.scrollUpdateTimeout = setTimeout(() => {
517
+ this.updateUrlWithScrollState();
518
+ }, 300);
519
+ }
520
+ };
521
+ return WccShell = _classThis;
522
+ })();
523
+ export { WccShell };
524
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2NjLXNoZWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfc2hlbGwvZWxlbWVudHMvd2NjLXNoZWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUNySCxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUcvRCxPQUFPLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxxQkFBcUIsQ0FBQztBQVc3QixNQUFNLFNBQVMsR0FBbUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEYsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFFaEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxZQUFxRCxFQUFpQixFQUFFLENBQzVGLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsV0FBVyxLQUFLLFlBQVksQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFRM0c7Ozs7O0dBS0c7SUFFVSxRQUFROzRCQURwQixhQUFhLENBQUMsV0FBVyxDQUFDOzs7O3NCQUNHLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7d0JBQW5CLFNBQVEsV0FBVzs7Ozt1Q0FFdEMsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxDQUFDO3FDQUd2QyxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7NENBRzlCLFFB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
@@ -1,11 +1,8 @@
1
1
  import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
- import { WccDashboard } from './wcc-dashboard.js';
3
- import type { TTemplateFactory } from './wcctools.helpers.js';
4
- import type { IWccSection, TElementType } from '../wcctools.interfaces.js';
2
+ import * as plugins from '../plugins.js';
5
3
  export declare class WccSidebar extends DeesElement {
6
- accessor selectedItem: DeesElement | TTemplateFactory;
7
- accessor selectedType: TElementType;
8
- accessor dashboardRef: WccDashboard;
4
+ accessor manifest: plugins.interfaces.IWccCatalogManifest | null;
5
+ accessor selection: plugins.interfaces.IWccSelection | null;
9
6
  accessor isNative: boolean;
10
7
  accessor expandedElements: Set<string>;
11
8
  accessor collapsedSections: Set<string>;
@@ -16,12 +13,14 @@ export declare class WccSidebar extends DeesElement {
16
13
  accessor isResizing: boolean;
17
14
  accessor isHidden: boolean;
18
15
  accessor isMenuScrolled: boolean;
19
- private sectionsInitialized;
16
+ /** Section names whose configured initial collapse state was applied. */
17
+ private initializedSections;
20
18
  /** data-key of the tree item that holds the roving tab stop */
21
19
  private focusedKey;
22
20
  private hideTimeout;
23
21
  private highlightedGroup;
24
22
  private groupHighlightTimeout;
23
+ private endResize;
25
24
  disconnectedCallback(): Promise<void>;
26
25
  /**
27
26
  * Returns the scrollable container element (.menu) for external scroll management
@@ -31,9 +30,11 @@ export declare class WccSidebar extends DeesElement {
31
30
  private getSectionKey;
32
31
  private getItemKey;
33
32
  /**
34
- * Initialize collapsed sections from section config
33
+ * Apply each section's configured initial collapse state once, also to sections a reload adds
35
34
  */
36
35
  private initCollapsedSections;
36
+ private findEntry;
37
+ private isSelected;
37
38
  private getPinKey;
38
39
  private isPinned;
39
40
  private togglePin;
@@ -82,10 +83,11 @@ export declare class WccSidebar extends DeesElement {
82
83
  private focusTreeItem;
83
84
  private handleTreeFocusin;
84
85
  private handleTreeKeydown;
86
+ protected willUpdate(changedProperties: Map<string, unknown>): void;
85
87
  protected updated(changedProperties: Map<string, unknown>): void;
86
- /** Apply a sidebar width to the sidebar, frame and properties panel. */
88
+ /** Apply a sidebar width; the shell sizes the frame and properties panel from the event. */
87
89
  private applyWidth;
88
90
  private handleResizeKeydown;
89
91
  private startResize;
90
- selectItem(typeArg: TElementType, itemNameArg: string, itemArg: TTemplateFactory | DeesElement, demoIndex?: number, section?: IWccSection): void;
92
+ selectItem(sectionNameArg: string, itemNameArg: string, demoIndexArg?: number): void;
91
93
  }