@design.estate/dees-catalog 3.94.0 → 3.96.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 (31) hide show
  1. package/dist_bundle/bundle.js +1744 -788
  2. package/dist_ts_web/00_commitinfo_data.js +1 -1
  3. package/dist_ts_web/elements/00group-layout/dees-mosaic/dees-mosaic.d.ts +49 -0
  4. package/dist_ts_web/elements/00group-layout/dees-mosaic/dees-mosaic.demo.d.ts +1 -0
  5. package/dist_ts_web/elements/00group-layout/dees-mosaic/dees-mosaic.demo.js +82 -0
  6. package/dist_ts_web/elements/00group-layout/dees-mosaic/dees-mosaic.js +622 -0
  7. package/dist_ts_web/elements/00group-layout/dees-mosaic/index.d.ts +3 -0
  8. package/dist_ts_web/elements/00group-layout/dees-mosaic/index.js +4 -0
  9. package/dist_ts_web/elements/00group-layout/dees-mosaic/interaction.d.ts +37 -0
  10. package/dist_ts_web/elements/00group-layout/dees-mosaic/interaction.js +174 -0
  11. package/dist_ts_web/elements/00group-layout/dees-mosaic/tree.d.ts +33 -0
  12. package/dist_ts_web/elements/00group-layout/dees-mosaic/tree.js +199 -0
  13. package/dist_ts_web/elements/00group-layout/dees-mosaic/types.d.ts +52 -0
  14. package/dist_ts_web/elements/00group-layout/dees-mosaic/types.js +8 -0
  15. package/dist_ts_web/elements/00group-layout/index.d.ts +1 -0
  16. package/dist_ts_web/elements/00group-layout/index.js +2 -1
  17. package/dist_ts_web/services/DeesServiceLibLoader.d.ts +14 -13
  18. package/dist_ts_web/services/DeesServiceLibLoader.js +37 -12
  19. package/dist_watch/bundle.js +1745 -789
  20. package/dist_watch/bundle.js.map +4 -4
  21. package/package.json +1 -1
  22. package/readme.md +28 -1
  23. package/ts_web/00_commitinfo_data.ts +1 -1
  24. package/ts_web/elements/00group-layout/dees-mosaic/dees-mosaic.demo.ts +87 -0
  25. package/ts_web/elements/00group-layout/dees-mosaic/dees-mosaic.ts +562 -0
  26. package/ts_web/elements/00group-layout/dees-mosaic/index.ts +3 -0
  27. package/ts_web/elements/00group-layout/dees-mosaic/interaction.ts +187 -0
  28. package/ts_web/elements/00group-layout/dees-mosaic/tree.ts +239 -0
  29. package/ts_web/elements/00group-layout/dees-mosaic/types.ts +63 -0
  30. package/ts_web/elements/00group-layout/index.ts +1 -0
  31. package/ts_web/services/DeesServiceLibLoader.ts +42 -12
@@ -0,0 +1,622 @@
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 { demoFunc } from './dees-mosaic.demo.js';
36
+ import { DeesElement, html, css, customElement, property, state, cssManager, } from '@design.estate/dees-element';
37
+ import { themeDefaultStyles } from '../../00theme.js';
38
+ import { mosaicEqualize, mosaicLeaves, mosaicRemove, mosaicResize } from './tree.js';
39
+ import { MosaicDragController } from './interaction.js';
40
+ import '../../00group-utility/dees-icon/dees-icon.js';
41
+ /**
42
+ * Sway-like tiling workspace. Controlled component: the host owns `layout`
43
+ * and applies the complete next layouts emitted through
44
+ * `mosaic-layout-change`. Tile content projects through named slots
45
+ * (`slot="tile-<leafId>"`) so hosts keep light-DOM ownership — the load-
46
+ * bearing property for Electron webviews, which must never be reparented
47
+ * (slot reassignment is safe; verified by spike).
48
+ */
49
+ let DeesMosaic = (() => {
50
+ let _classDecorators = [customElement('dees-mosaic')];
51
+ let _classDescriptor;
52
+ let _classExtraInitializers = [];
53
+ let _classThis;
54
+ let _classSuper = DeesElement;
55
+ let _layout_decorators;
56
+ let _layout_initializers = [];
57
+ let _layout_extraInitializers = [];
58
+ let _surfaces_decorators;
59
+ let _surfaces_initializers = [];
60
+ let _surfaces_extraInitializers = [];
61
+ let _focusedLeafId_decorators;
62
+ let _focusedLeafId_initializers = [];
63
+ let _focusedLeafId_extraInitializers = [];
64
+ let _minTileWidth_decorators;
65
+ let _minTileWidth_initializers = [];
66
+ let _minTileWidth_extraInitializers = [];
67
+ let _minTileHeight_decorators;
68
+ let _minTileHeight_initializers = [];
69
+ let _minTileHeight_extraInitializers = [];
70
+ let _tilebarHeight_decorators;
71
+ let _tilebarHeight_initializers = [];
72
+ let _tilebarHeight_extraInitializers = [];
73
+ let _resizeEnabled_decorators;
74
+ let _resizeEnabled_initializers = [];
75
+ let _resizeEnabled_extraInitializers = [];
76
+ let _dragEnabled_decorators;
77
+ let _dragEnabled_initializers = [];
78
+ let _dragEnabled_extraInitializers = [];
79
+ let _dropTarget_decorators;
80
+ let _dropTarget_initializers = [];
81
+ let _dropTarget_extraInitializers = [];
82
+ var DeesMosaic = class extends _classSuper {
83
+ static { _classThis = this; }
84
+ static {
85
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
86
+ _layout_decorators = [property({ attribute: false })];
87
+ _surfaces_decorators = [property({ attribute: false })];
88
+ _focusedLeafId_decorators = [property()];
89
+ _minTileWidth_decorators = [property({ type: Number })];
90
+ _minTileHeight_decorators = [property({ type: Number })];
91
+ _tilebarHeight_decorators = [property({ type: Number })];
92
+ _resizeEnabled_decorators = [property({ type: Boolean })];
93
+ _dragEnabled_decorators = [property({ type: Boolean })];
94
+ _dropTarget_decorators = [state()];
95
+ __esDecorate(this, null, _layout_decorators, { kind: "accessor", name: "layout", static: false, private: false, access: { has: obj => "layout" in obj, get: obj => obj.layout, set: (obj, value) => { obj.layout = value; } }, metadata: _metadata }, _layout_initializers, _layout_extraInitializers);
96
+ __esDecorate(this, null, _surfaces_decorators, { kind: "accessor", name: "surfaces", static: false, private: false, access: { has: obj => "surfaces" in obj, get: obj => obj.surfaces, set: (obj, value) => { obj.surfaces = value; } }, metadata: _metadata }, _surfaces_initializers, _surfaces_extraInitializers);
97
+ __esDecorate(this, null, _focusedLeafId_decorators, { kind: "accessor", name: "focusedLeafId", static: false, private: false, access: { has: obj => "focusedLeafId" in obj, get: obj => obj.focusedLeafId, set: (obj, value) => { obj.focusedLeafId = value; } }, metadata: _metadata }, _focusedLeafId_initializers, _focusedLeafId_extraInitializers);
98
+ __esDecorate(this, null, _minTileWidth_decorators, { kind: "accessor", name: "minTileWidth", static: false, private: false, access: { has: obj => "minTileWidth" in obj, get: obj => obj.minTileWidth, set: (obj, value) => { obj.minTileWidth = value; } }, metadata: _metadata }, _minTileWidth_initializers, _minTileWidth_extraInitializers);
99
+ __esDecorate(this, null, _minTileHeight_decorators, { kind: "accessor", name: "minTileHeight", static: false, private: false, access: { has: obj => "minTileHeight" in obj, get: obj => obj.minTileHeight, set: (obj, value) => { obj.minTileHeight = value; } }, metadata: _metadata }, _minTileHeight_initializers, _minTileHeight_extraInitializers);
100
+ __esDecorate(this, null, _tilebarHeight_decorators, { kind: "accessor", name: "tilebarHeight", static: false, private: false, access: { has: obj => "tilebarHeight" in obj, get: obj => obj.tilebarHeight, set: (obj, value) => { obj.tilebarHeight = value; } }, metadata: _metadata }, _tilebarHeight_initializers, _tilebarHeight_extraInitializers);
101
+ __esDecorate(this, null, _resizeEnabled_decorators, { kind: "accessor", name: "resizeEnabled", static: false, private: false, access: { has: obj => "resizeEnabled" in obj, get: obj => obj.resizeEnabled, set: (obj, value) => { obj.resizeEnabled = value; } }, metadata: _metadata }, _resizeEnabled_initializers, _resizeEnabled_extraInitializers);
102
+ __esDecorate(this, null, _dragEnabled_decorators, { kind: "accessor", name: "dragEnabled", static: false, private: false, access: { has: obj => "dragEnabled" in obj, get: obj => obj.dragEnabled, set: (obj, value) => { obj.dragEnabled = value; } }, metadata: _metadata }, _dragEnabled_initializers, _dragEnabled_extraInitializers);
103
+ __esDecorate(this, null, _dropTarget_decorators, { kind: "accessor", name: "dropTarget", static: false, private: false, access: { has: obj => "dropTarget" in obj, get: obj => obj.dropTarget, set: (obj, value) => { obj.dropTarget = value; } }, metadata: _metadata }, _dropTarget_initializers, _dropTarget_extraInitializers);
104
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
105
+ DeesMosaic = _classThis = _classDescriptor.value;
106
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
107
+ }
108
+ static demo = demoFunc;
109
+ static demoGroups = ['Layout'];
110
+ #layout_accessor_storage = __runInitializers(this, _layout_initializers, { root: null });
111
+ get layout() { return this.#layout_accessor_storage; }
112
+ set layout(value) { this.#layout_accessor_storage = value; }
113
+ #surfaces_accessor_storage = (__runInitializers(this, _layout_extraInitializers), __runInitializers(this, _surfaces_initializers, {}));
114
+ get surfaces() { return this.#surfaces_accessor_storage; }
115
+ set surfaces(value) { this.#surfaces_accessor_storage = value; }
116
+ #focusedLeafId_accessor_storage = (__runInitializers(this, _surfaces_extraInitializers), __runInitializers(this, _focusedLeafId_initializers, ''));
117
+ get focusedLeafId() { return this.#focusedLeafId_accessor_storage; }
118
+ set focusedLeafId(value) { this.#focusedLeafId_accessor_storage = value; }
119
+ #minTileWidth_accessor_storage = (__runInitializers(this, _focusedLeafId_extraInitializers), __runInitializers(this, _minTileWidth_initializers, 160));
120
+ get minTileWidth() { return this.#minTileWidth_accessor_storage; }
121
+ set minTileWidth(value) { this.#minTileWidth_accessor_storage = value; }
122
+ #minTileHeight_accessor_storage = (__runInitializers(this, _minTileWidth_extraInitializers), __runInitializers(this, _minTileHeight_initializers, 100));
123
+ get minTileHeight() { return this.#minTileHeight_accessor_storage; }
124
+ set minTileHeight(value) { this.#minTileHeight_accessor_storage = value; }
125
+ #tilebarHeight_accessor_storage = (__runInitializers(this, _minTileHeight_extraInitializers), __runInitializers(this, _tilebarHeight_initializers, 26));
126
+ get tilebarHeight() { return this.#tilebarHeight_accessor_storage; }
127
+ set tilebarHeight(value) { this.#tilebarHeight_accessor_storage = value; }
128
+ #resizeEnabled_accessor_storage = (__runInitializers(this, _tilebarHeight_extraInitializers), __runInitializers(this, _resizeEnabled_initializers, true));
129
+ get resizeEnabled() { return this.#resizeEnabled_accessor_storage; }
130
+ set resizeEnabled(value) { this.#resizeEnabled_accessor_storage = value; }
131
+ #dragEnabled_accessor_storage = (__runInitializers(this, _resizeEnabled_extraInitializers), __runInitializers(this, _dragEnabled_initializers, true));
132
+ get dragEnabled() { return this.#dragEnabled_accessor_storage; }
133
+ set dragEnabled(value) { this.#dragEnabled_accessor_storage = value; }
134
+ #dropTarget_accessor_storage = (__runInitializers(this, _dragEnabled_extraInitializers), __runInitializers(this, _dropTarget_initializers, null));
135
+ /** transient drop-target highlight during a tile drag */
136
+ get dropTarget() { return this.#dropTarget_accessor_storage; }
137
+ set dropTarget(value) { this.#dropTarget_accessor_storage = value; }
138
+ dragController = (__runInitializers(this, _dropTarget_extraInitializers), new MosaicDragController(this));
139
+ /** cancels an in-flight divider drag when the host disconnects mid-gesture */
140
+ activeDividerCancel = null;
141
+ async disconnectedCallback() {
142
+ this.activeDividerCancel?.();
143
+ this.dragController.cancelActiveGesture();
144
+ await super.disconnectedCallback();
145
+ }
146
+ static styles = [
147
+ themeDefaultStyles,
148
+ cssManager.defaultStyles,
149
+ css `
150
+ :host {
151
+ display: block;
152
+ position: relative;
153
+ min-width: 0;
154
+ min-height: 0;
155
+ height: 100%;
156
+ font-family: var(--dees-font-family);
157
+ background: var(--dees-color-bg-canvas);
158
+ --mosaic-tilebar-height: 26px;
159
+ }
160
+
161
+ .rootBox {
162
+ position: relative;
163
+ width: 100%;
164
+ height: 100%;
165
+ overflow: hidden;
166
+ }
167
+
168
+ .split {
169
+ display: flex;
170
+ min-width: 0;
171
+ min-height: 0;
172
+ width: 100%;
173
+ height: 100%;
174
+ }
175
+
176
+ .split.row {
177
+ flex-direction: row;
178
+ }
179
+
180
+ .split.column {
181
+ flex-direction: column;
182
+ }
183
+
184
+ .cell {
185
+ min-width: 0;
186
+ min-height: 0;
187
+ display: flex;
188
+ }
189
+
190
+ .divider {
191
+ flex: 0 0 5px;
192
+ position: relative;
193
+ background: transparent;
194
+ z-index: 1;
195
+ }
196
+
197
+ .split.row > .divider {
198
+ cursor: col-resize;
199
+ }
200
+
201
+ .split.column > .divider {
202
+ cursor: row-resize;
203
+ }
204
+
205
+ .divider::after {
206
+ content: '';
207
+ position: absolute;
208
+ inset: 0;
209
+ margin: auto;
210
+ background: var(--dees-color-border-subtle);
211
+ transition: background var(--dees-transition-fast) var(--dees-ease-standard);
212
+ }
213
+
214
+ .split.row > .divider::after {
215
+ width: 1px;
216
+ }
217
+
218
+ .split.column > .divider::after {
219
+ height: 1px;
220
+ }
221
+
222
+ .divider:hover::after,
223
+ .divider:focus-visible::after,
224
+ .divider.dragging::after {
225
+ background: var(--dees-color-accent-primary);
226
+ }
227
+
228
+ .split.row > .divider:hover::after,
229
+ .split.row > .divider.dragging::after {
230
+ width: 3px;
231
+ }
232
+
233
+ .split.column > .divider:hover::after,
234
+ .split.column > .divider.dragging::after {
235
+ height: 3px;
236
+ }
237
+
238
+ .divider:focus-visible {
239
+ outline: none;
240
+ }
241
+
242
+ .pane {
243
+ flex: 1;
244
+ min-width: 0;
245
+ min-height: 0;
246
+ display: flex;
247
+ flex-direction: column;
248
+ border-radius: var(--dees-radius-md);
249
+ corner-shape: var(--dees-corner-shape);
250
+ background: var(--dees-color-bg-primary);
251
+ border: 1px solid var(--dees-color-border-subtle);
252
+ overflow: hidden;
253
+ }
254
+
255
+ .pane.focused {
256
+ border-color: var(--dees-color-border-strong);
257
+ }
258
+
259
+ /* really slim tilebar: drag handle + title + close */
260
+ .tilebar {
261
+ flex: 0 0 var(--mosaic-tilebar-height);
262
+ display: flex;
263
+ align-items: center;
264
+ gap: var(--dees-spacing-xs);
265
+ padding: 0 4px 0 var(--dees-spacing-sm);
266
+ background: var(--dees-color-bg-secondary);
267
+ border-bottom: 1px solid var(--dees-color-border-subtle);
268
+ cursor: grab;
269
+ user-select: none;
270
+ }
271
+
272
+ .tilebar.dragging {
273
+ cursor: grabbing;
274
+ }
275
+
276
+ .tilebar dees-icon {
277
+ color: var(--dees-color-text-secondary);
278
+ flex: 0 0 auto;
279
+ }
280
+
281
+ .tileTitle {
282
+ min-width: 0;
283
+ color: var(--dees-color-text-secondary);
284
+ font-size: var(--dees-font-caption1-size, 11px);
285
+ font-weight: 600;
286
+ overflow: hidden;
287
+ text-overflow: ellipsis;
288
+ white-space: nowrap;
289
+ }
290
+
291
+ .pane.focused .tileTitle {
292
+ color: var(--dees-color-text-primary);
293
+ }
294
+
295
+ .tileSpacer {
296
+ flex: 1;
297
+ }
298
+
299
+ .tileClose {
300
+ flex: 0 0 auto;
301
+ display: grid;
302
+ place-items: center;
303
+ width: 20px;
304
+ height: 20px;
305
+ border: 0;
306
+ border-radius: var(--dees-radius-sm);
307
+ corner-shape: var(--dees-corner-shape);
308
+ background: transparent;
309
+ color: var(--dees-color-text-muted);
310
+ cursor: pointer;
311
+ padding: 0;
312
+ }
313
+
314
+ .tileClose:hover {
315
+ background: var(--dees-color-hover);
316
+ color: var(--dees-color-text-primary);
317
+ }
318
+
319
+ .paneContent {
320
+ flex: 1;
321
+ min-width: 0;
322
+ min-height: 0;
323
+ position: relative;
324
+ display: flex;
325
+ }
326
+
327
+ .paneContent ::slotted(*) {
328
+ flex: 1;
329
+ min-width: 0;
330
+ min-height: 0;
331
+ }
332
+
333
+ .emptyBox {
334
+ display: grid;
335
+ place-items: center;
336
+ width: 100%;
337
+ height: 100%;
338
+ }
339
+
340
+ /* drag artifacts */
341
+ .dragShield {
342
+ position: fixed;
343
+ inset: 0;
344
+ z-index: 40;
345
+ cursor: grabbing;
346
+ }
347
+
348
+ .dragGhost {
349
+ position: fixed;
350
+ z-index: 42;
351
+ transform: translate(-50%, -120%);
352
+ padding: 3px 10px;
353
+ border-radius: var(--dees-radius-full);
354
+ background: var(--dees-material-thick-bg);
355
+ backdrop-filter: var(--dees-material-thick-filter);
356
+ border: 1px solid var(--dees-color-border-default);
357
+ color: var(--dees-color-text-primary);
358
+ font-size: var(--dees-font-caption1-size, 11px);
359
+ font-weight: 600;
360
+ pointer-events: none;
361
+ box-shadow: var(--dees-shadow-md);
362
+ white-space: nowrap;
363
+ }
364
+
365
+ .dropPreview {
366
+ position: absolute;
367
+ z-index: 41;
368
+ border-radius: var(--dees-radius-md);
369
+ corner-shape: var(--dees-corner-shape);
370
+ background: color-mix(in srgb, var(--dees-color-accent-primary) 18%, transparent);
371
+ border: 1px solid var(--dees-color-accent-primary);
372
+ pointer-events: none;
373
+ transition:
374
+ left var(--dees-transition-fast) var(--dees-ease-standard),
375
+ top var(--dees-transition-fast) var(--dees-ease-standard),
376
+ width var(--dees-transition-fast) var(--dees-ease-standard),
377
+ height var(--dees-transition-fast) var(--dees-ease-standard);
378
+ }
379
+
380
+ @media (prefers-reduced-motion: reduce) {
381
+ .dropPreview {
382
+ transition: none;
383
+ }
384
+ }
385
+ `,
386
+ ];
387
+ render() {
388
+ return html `
389
+ <div
390
+ class="rootBox"
391
+ style="--mosaic-tilebar-height: ${this.tilebarHeight}px"
392
+ @pointerdown=${this.handleRootPointerDown}
393
+ >
394
+ ${this.layout.root
395
+ ? this.renderNode(this.layout.root)
396
+ : html `<div class="emptyBox"><slot name="empty"></slot></div>`}
397
+ ${this.renderDropPreview()}
398
+ </div>
399
+ `;
400
+ }
401
+ renderNode(node) {
402
+ if (node.type === 'leaf') {
403
+ const meta = this.surfaces[node.surface] ?? { title: node.surface };
404
+ const title = node.title || meta.title;
405
+ const closeable = meta.closeable !== false;
406
+ return html `
407
+ <div class="pane ${this.focusedLeafId === node.id ? 'focused' : ''}" data-leaf-id=${node.id}>
408
+ <div
409
+ class="tilebar"
410
+ data-leaf-id=${node.id}
411
+ @pointerdown=${(event) => this.dragController.handleTilebarPointerDown(event, node.id, title)}
412
+ >
413
+ ${meta.icon ? html `<dees-icon .icon=${meta.icon} iconSize="12"></dees-icon>` : ''}
414
+ <span class="tileTitle">${title}</span>
415
+ <span class="tileSpacer"></span>
416
+ ${closeable
417
+ ? html `
418
+ <button
419
+ class="tileClose"
420
+ type="button"
421
+ aria-label="Close ${title}"
422
+ @pointerdown=${(event) => event.stopPropagation()}
423
+ @click=${() => this.requestCloseTile(node.id, node.surface)}
424
+ >
425
+ <dees-icon icon="lucide:X" iconSize="12"></dees-icon>
426
+ </button>
427
+ `
428
+ : ''}
429
+ </div>
430
+ <div class="paneContent" data-leaf-id=${node.id}>
431
+ <slot name="tile-${node.id}"></slot>
432
+ </div>
433
+ </div>
434
+ `;
435
+ }
436
+ const parts = [];
437
+ node.children.forEach((child, index) => {
438
+ parts.push(html `
439
+ <div class="cell" data-cell-of=${node.id} style="flex: ${node.ratios[index]} 1 0%">
440
+ ${this.renderNode(child)}
441
+ </div>
442
+ `);
443
+ if (index < node.children.length - 1 && this.resizeEnabled) {
444
+ parts.push(html `
445
+ <div
446
+ class="divider"
447
+ role="separator"
448
+ tabindex="0"
449
+ aria-orientation=${node.orientation === 'row' ? 'vertical' : 'horizontal'}
450
+ data-split-id=${node.id}
451
+ data-divider-index=${index}
452
+ @pointerdown=${(event) => this.handleDividerPointerDown(event, node, index)}
453
+ @dblclick=${() => this.commitLayout(mosaicEqualize(this.layout, node.id), 'equalize')}
454
+ @keydown=${(event) => this.handleDividerKeydown(event, node, index)}
455
+ ></div>
456
+ `);
457
+ }
458
+ });
459
+ return html `<div class="split ${node.orientation}" data-split-id=${node.id}>${parts}</div>`;
460
+ }
461
+ renderDropPreview() {
462
+ const target = this.dropTarget;
463
+ if (!target)
464
+ return html ``;
465
+ const hostRect = this.getBoundingClientRect();
466
+ const rect = target.previewRect;
467
+ return html `
468
+ <div
469
+ class="dropPreview"
470
+ style="left: ${rect.left - hostRect.left}px; top: ${rect.top - hostRect.top}px; width: ${rect.width}px; height: ${rect.height}px"
471
+ ></div>
472
+ `;
473
+ }
474
+ // ------------------------------------------------------------- public API
475
+ /** Content-area rect per leaf id, in viewport coordinates. */
476
+ getLeafRects() {
477
+ const rects = {};
478
+ for (const pane of this.shadowRoot?.querySelectorAll('.paneContent[data-leaf-id]') ?? []) {
479
+ rects[pane.dataset.leafId] = pane.getBoundingClientRect();
480
+ }
481
+ return rects;
482
+ }
483
+ equalize(splitId) {
484
+ this.commitLayout(mosaicEqualize(this.layout, splitId), 'equalize');
485
+ }
486
+ focusTile(leafId) {
487
+ this.focusedLeafId = leafId;
488
+ const leaf = mosaicLeaves(this.layout).find((candidate) => candidate.id === leafId);
489
+ if (leaf)
490
+ this.emitTileEvent('mosaic-tile-focus', leaf.id, leaf.surface);
491
+ }
492
+ // ------------------------------------------------------------- internals
493
+ commitLayout(layout, reason) {
494
+ const detail = { layout, reason };
495
+ this.dispatchEvent(new CustomEvent('mosaic-layout-change', { detail, bubbles: true, composed: true }));
496
+ }
497
+ requestCloseTile(leafId, surface) {
498
+ const closeEvent = new CustomEvent('mosaic-tile-close', {
499
+ detail: { leafId, surface },
500
+ bubbles: true,
501
+ composed: true,
502
+ cancelable: true,
503
+ });
504
+ const proceed = this.dispatchEvent(closeEvent);
505
+ if (!proceed)
506
+ return;
507
+ this.commitLayout(mosaicRemove(this.layout, leafId), 'close');
508
+ }
509
+ emitTileEvent(name, leafId, surface) {
510
+ this.dispatchEvent(new CustomEvent(name, { detail: { leafId, surface }, bubbles: true, composed: true }));
511
+ }
512
+ handleRootPointerDown = (event) => {
513
+ const pane = (event.composedPath().find((element) => element instanceof HTMLElement && element.classList?.contains('pane')));
514
+ const leafId = pane?.dataset.leafId;
515
+ if (!leafId || leafId === this.focusedLeafId)
516
+ return;
517
+ this.focusTile(leafId);
518
+ };
519
+ // -------------------------------------------------------------- resizing
520
+ handleDividerPointerDown(event, split, dividerIndex) {
521
+ if (!this.resizeEnabled || event.button !== 0)
522
+ return;
523
+ if (this.activeDividerCancel)
524
+ return; // one divider gesture at a time (multi-touch guard)
525
+ event.preventDefault();
526
+ const divider = event.currentTarget;
527
+ const container = divider.parentElement;
528
+ const horizontal = split.orientation === 'row';
529
+ const containerExtent = horizontal ? container.clientWidth : container.clientHeight;
530
+ const startCoord = horizontal ? event.clientX : event.clientY;
531
+ const cells = Array.from(container.children).filter((child) => child instanceof HTMLElement && child.classList.contains('cell'));
532
+ const leftCell = cells[dividerIndex];
533
+ const rightCell = cells[dividerIndex + 1];
534
+ if (!leftCell || !rightCell || !containerExtent)
535
+ return;
536
+ const startLeftRatio = split.ratios[dividerIndex];
537
+ const startRightRatio = split.ratios[dividerIndex + 1];
538
+ const pair = startLeftRatio + startRightRatio;
539
+ const minPx = horizontal ? this.minTileWidth : this.minTileHeight;
540
+ const minRatio = Math.max(0.05, Math.min(minPx / containerExtent, pair / 2));
541
+ divider.classList.add('dragging');
542
+ try {
543
+ divider.setPointerCapture(event.pointerId);
544
+ }
545
+ catch {
546
+ // synthetic pointers (tests) cannot be captured; listeners work anyway
547
+ }
548
+ let lastLeftRatio = startLeftRatio;
549
+ let resizeEmitFrame = 0;
550
+ const onMove = (moveEvent) => {
551
+ const delta = (horizontal ? moveEvent.clientX : moveEvent.clientY) - startCoord;
552
+ const ratioDelta = delta / containerExtent;
553
+ lastLeftRatio = Math.min(Math.max(startLeftRatio + ratioDelta, minRatio), pair - minRatio);
554
+ // css-only while dragging; the tree commits once on release
555
+ leftCell.style.flex = `${lastLeftRatio} 1 0%`;
556
+ rightCell.style.flex = `${pair - lastLeftRatio} 1 0%`;
557
+ if (!resizeEmitFrame) {
558
+ resizeEmitFrame = requestAnimationFrame(() => {
559
+ resizeEmitFrame = 0;
560
+ this.dispatchEvent(new CustomEvent('mosaic-resizing', { detail: {}, bubbles: true, composed: true }));
561
+ });
562
+ }
563
+ };
564
+ const finish = (commit) => {
565
+ this.activeDividerCancel = null;
566
+ divider.classList.remove('dragging');
567
+ divider.removeEventListener('pointermove', onMove);
568
+ divider.removeEventListener('pointerup', onUp);
569
+ divider.removeEventListener('lostpointercapture', onLost);
570
+ window.removeEventListener('keydown', onKey, true);
571
+ if (resizeEmitFrame)
572
+ cancelAnimationFrame(resizeEmitFrame);
573
+ if (commit && lastLeftRatio !== startLeftRatio) {
574
+ this.commitLayout(mosaicResize(this.layout, split.id, dividerIndex, lastLeftRatio - startLeftRatio), 'resize');
575
+ }
576
+ else if (!commit) {
577
+ leftCell.style.flex = `${startLeftRatio} 1 0%`;
578
+ rightCell.style.flex = `${startRightRatio} 1 0%`;
579
+ }
580
+ };
581
+ const onUp = () => finish(true);
582
+ const onLost = () => finish(true);
583
+ const onKey = (keyEvent) => {
584
+ if (keyEvent.key === 'Escape') {
585
+ keyEvent.preventDefault();
586
+ try {
587
+ divider.releasePointerCapture(event.pointerId);
588
+ }
589
+ catch {
590
+ // not captured (synthetic pointer)
591
+ }
592
+ finish(false);
593
+ }
594
+ };
595
+ divider.addEventListener('pointermove', onMove);
596
+ divider.addEventListener('pointerup', onUp);
597
+ divider.addEventListener('lostpointercapture', onLost);
598
+ window.addEventListener('keydown', onKey, true);
599
+ this.activeDividerCancel = () => finish(false);
600
+ }
601
+ handleDividerKeydown(event, split, dividerIndex) {
602
+ const horizontal = split.orientation === 'row';
603
+ const decrease = horizontal ? 'ArrowLeft' : 'ArrowUp';
604
+ const increase = horizontal ? 'ArrowRight' : 'ArrowDown';
605
+ if (event.key !== decrease && event.key !== increase)
606
+ return;
607
+ event.preventDefault();
608
+ const container = event.currentTarget.parentElement;
609
+ const extent = horizontal ? container.clientWidth : container.clientHeight;
610
+ if (!extent)
611
+ return;
612
+ const step = (event.key === increase ? 16 : -16) / extent;
613
+ this.commitLayout(mosaicResize(this.layout, split.id, dividerIndex, step), 'resize');
614
+ }
615
+ static {
616
+ __runInitializers(_classThis, _classExtraInitializers);
617
+ }
618
+ };
619
+ return DeesMosaic = _classThis;
620
+ })();
621
+ export { DeesMosaic };
622
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1tb3NhaWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1tb3NhaWMvZGVlcy1tb3NhaWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsV0FBVyxFQUNYLElBQUksRUFDSixHQUFHLEVBQ0gsYUFBYSxFQUViLFFBQVEsRUFDUixLQUFLLEVBQ0wsVUFBVSxHQUNYLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFTdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyRixPQUFPLEVBQUUsb0JBQW9CLEVBQTBCLE1BQU0sa0JBQWtCLENBQUM7QUFDaEYsT0FBTyw4Q0FBOEMsQ0FBQztBQVF0RDs7Ozs7OztHQU9HO0lBRVUsVUFBVTs0QkFEdEIsYUFBYSxDQUFDLGFBQWEsQ0FBQzs7OztzQkFDRyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQUFuQixTQUFRLFdBQVc7Ozs7a0NBSXhDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztvQ0FHOUIsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO3lDQUc5QixRQUFRLEVBQUU7d0NBR1YsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO3lDQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7eUNBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzt5Q0FHMUIsUUFB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
@@ -0,0 +1,3 @@
1
+ export * from './dees-mosaic.js';
2
+ export * from './types.js';
3
+ export * from './tree.js';
@@ -0,0 +1,4 @@
1
+ export * from './dees-mosaic.js';
2
+ export * from './types.js';
3
+ export * from './tree.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1tb3NhaWMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFdBQVcsQ0FBQyJ9