@design.estate/dees-catalog 3.61.2 → 3.63.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.
@@ -36,6 +36,7 @@ import * as plugins from '../../00plugins.js';
36
36
  import { demoFunc } from './dees-table.demo.js';
37
37
  import { customElement, html, DeesElement, property, directives } from '@design.estate/dees-element';
38
38
  import { DeesContextmenu } from '../../00group-overlay/dees-contextmenu/dees-contextmenu.js';
39
+ import { DeesModal } from '../../00group-overlay/dees-modal/dees-modal.js';
39
40
  import * as domtools from '@design.estate/dees-domtools';
40
41
  import {} from '../../00group-utility/dees-icon/dees-icon.js';
41
42
  import { tableStyles } from './styles.js';
@@ -43,6 +44,12 @@ import { computeColumnsFromDisplayFunction as computeColumnsFromDisplayFunctionF
43
44
  import { compileLucenePredicate } from './lucene.js';
44
45
  import { themeDefaultStyles } from '../../00theme.js';
45
46
  import '../../00group-layout/dees-tile/dees-tile.js';
47
+ /** Returns the English ordinal label for a 1-based position (e.g. 1 → "1st"). */
48
+ function ordinalLabel(n) {
49
+ const s = ['th', 'st', 'nd', 'rd'];
50
+ const v = n % 100;
51
+ return n + (s[(v - 20) % 10] || s[v] || s[0]);
52
+ }
46
53
  // interfaces moved to ./types.ts and re-exported above
47
54
  // the table implementation
48
55
  let DeesTable = (() => {
@@ -111,12 +118,9 @@ let DeesTable = (() => {
111
118
  let _showGrid_decorators;
112
119
  let _showGrid_initializers = [];
113
120
  let _showGrid_extraInitializers = [];
114
- let _sortKey_decorators;
115
- let _sortKey_initializers = [];
116
- let _sortKey_extraInitializers = [];
117
- let _sortDir_decorators;
118
- let _sortDir_initializers = [];
119
- let _sortDir_extraInitializers = [];
121
+ let _sortBy_decorators;
122
+ let _sortBy_initializers = [];
123
+ let _sortBy_extraInitializers = [];
120
124
  let _filterText_decorators;
121
125
  let _filterText_initializers = [];
122
126
  let _filterText_extraInitializers = [];
@@ -126,9 +130,9 @@ let DeesTable = (() => {
126
130
  let _showColumnFilters_decorators;
127
131
  let _showColumnFilters_initializers = [];
128
132
  let _showColumnFilters_extraInitializers = [];
129
- let _stickyHeader_decorators;
130
- let _stickyHeader_initializers = [];
131
- let _stickyHeader_extraInitializers = [];
133
+ let _fixedHeight_decorators;
134
+ let _fixedHeight_initializers = [];
135
+ let _fixedHeight_extraInitializers = [];
132
136
  let _searchMode_decorators;
133
137
  let _searchMode_initializers = [];
134
138
  let _searchMode_extraInitializers = [];
@@ -203,12 +207,11 @@ let DeesTable = (() => {
203
207
  reflect: true,
204
208
  attribute: 'show-grid'
205
209
  })];
206
- _sortKey_decorators = [property({ attribute: false })];
207
- _sortDir_decorators = [property({ attribute: false })];
210
+ _sortBy_decorators = [property({ attribute: false })];
208
211
  _filterText_decorators = [property({ type: String })];
209
212
  _columnFilters_decorators = [property({ attribute: false })];
210
213
  _showColumnFilters_decorators = [property({ type: Boolean, attribute: 'show-column-filters' })];
211
- _stickyHeader_decorators = [property({ type: Boolean, reflect: true, attribute: 'sticky-header' })];
214
+ _fixedHeight_decorators = [property({ type: Boolean, reflect: true, attribute: 'fixed-height' })];
212
215
  _searchMode_decorators = [property({ type: String })];
213
216
  _selectionMode_decorators = [property({ type: String })];
214
217
  _selectedIds_decorators = [property({ attribute: false })];
@@ -232,12 +235,11 @@ let DeesTable = (() => {
232
235
  __esDecorate(this, null, _showVerticalLines_decorators, { kind: "accessor", name: "showVerticalLines", static: false, private: false, access: { has: obj => "showVerticalLines" in obj, get: obj => obj.showVerticalLines, set: (obj, value) => { obj.showVerticalLines = value; } }, metadata: _metadata }, _showVerticalLines_initializers, _showVerticalLines_extraInitializers);
233
236
  __esDecorate(this, null, _showHorizontalLines_decorators, { kind: "accessor", name: "showHorizontalLines", static: false, private: false, access: { has: obj => "showHorizontalLines" in obj, get: obj => obj.showHorizontalLines, set: (obj, value) => { obj.showHorizontalLines = value; } }, metadata: _metadata }, _showHorizontalLines_initializers, _showHorizontalLines_extraInitializers);
234
237
  __esDecorate(this, null, _showGrid_decorators, { kind: "accessor", name: "showGrid", static: false, private: false, access: { has: obj => "showGrid" in obj, get: obj => obj.showGrid, set: (obj, value) => { obj.showGrid = value; } }, metadata: _metadata }, _showGrid_initializers, _showGrid_extraInitializers);
235
- __esDecorate(this, null, _sortKey_decorators, { kind: "accessor", name: "sortKey", static: false, private: false, access: { has: obj => "sortKey" in obj, get: obj => obj.sortKey, set: (obj, value) => { obj.sortKey = value; } }, metadata: _metadata }, _sortKey_initializers, _sortKey_extraInitializers);
236
- __esDecorate(this, null, _sortDir_decorators, { kind: "accessor", name: "sortDir", static: false, private: false, access: { has: obj => "sortDir" in obj, get: obj => obj.sortDir, set: (obj, value) => { obj.sortDir = value; } }, metadata: _metadata }, _sortDir_initializers, _sortDir_extraInitializers);
238
+ __esDecorate(this, null, _sortBy_decorators, { kind: "accessor", name: "sortBy", static: false, private: false, access: { has: obj => "sortBy" in obj, get: obj => obj.sortBy, set: (obj, value) => { obj.sortBy = value; } }, metadata: _metadata }, _sortBy_initializers, _sortBy_extraInitializers);
237
239
  __esDecorate(this, null, _filterText_decorators, { kind: "accessor", name: "filterText", static: false, private: false, access: { has: obj => "filterText" in obj, get: obj => obj.filterText, set: (obj, value) => { obj.filterText = value; } }, metadata: _metadata }, _filterText_initializers, _filterText_extraInitializers);
238
240
  __esDecorate(this, null, _columnFilters_decorators, { kind: "accessor", name: "columnFilters", static: false, private: false, access: { has: obj => "columnFilters" in obj, get: obj => obj.columnFilters, set: (obj, value) => { obj.columnFilters = value; } }, metadata: _metadata }, _columnFilters_initializers, _columnFilters_extraInitializers);
239
241
  __esDecorate(this, null, _showColumnFilters_decorators, { kind: "accessor", name: "showColumnFilters", static: false, private: false, access: { has: obj => "showColumnFilters" in obj, get: obj => obj.showColumnFilters, set: (obj, value) => { obj.showColumnFilters = value; } }, metadata: _metadata }, _showColumnFilters_initializers, _showColumnFilters_extraInitializers);
240
- __esDecorate(this, null, _stickyHeader_decorators, { kind: "accessor", name: "stickyHeader", static: false, private: false, access: { has: obj => "stickyHeader" in obj, get: obj => obj.stickyHeader, set: (obj, value) => { obj.stickyHeader = value; } }, metadata: _metadata }, _stickyHeader_initializers, _stickyHeader_extraInitializers);
242
+ __esDecorate(this, null, _fixedHeight_decorators, { kind: "accessor", name: "fixedHeight", static: false, private: false, access: { has: obj => "fixedHeight" in obj, get: obj => obj.fixedHeight, set: (obj, value) => { obj.fixedHeight = value; } }, metadata: _metadata }, _fixedHeight_initializers, _fixedHeight_extraInitializers);
241
243
  __esDecorate(this, null, _searchMode_decorators, { kind: "accessor", name: "searchMode", static: false, private: false, access: { has: obj => "searchMode" in obj, get: obj => obj.searchMode, set: (obj, value) => { obj.searchMode = value; } }, metadata: _metadata }, _searchMode_initializers, _searchMode_extraInitializers);
242
244
  __esDecorate(this, null, _selectionMode_decorators, { kind: "accessor", name: "selectionMode", static: false, private: false, access: { has: obj => "selectionMode" in obj, get: obj => obj.selectionMode, set: (obj, value) => { obj.selectionMode = value; } }, metadata: _metadata }, _selectionMode_initializers, _selectionMode_extraInitializers);
243
245
  __esDecorate(this, null, _selectedIds_decorators, { kind: "accessor", name: "selectedIds", static: false, private: false, access: { has: obj => "selectedIds" in obj, get: obj => obj.selectedIds, set: (obj, value) => { obj.selectedIds = value; } }, metadata: _metadata }, _selectedIds_initializers, _selectedIds_extraInitializers);
@@ -330,14 +332,14 @@ let DeesTable = (() => {
330
332
  files = (__runInitializers(this, _showGrid_extraInitializers), []);
331
333
  fileWeakMap = new WeakMap();
332
334
  dataChangeSubject = new domtools.plugins.smartrx.rxjs.Subject();
333
- #sortKey_accessor_storage = __runInitializers(this, _sortKey_initializers, undefined);
334
- // simple client-side sorting (Phase 1)
335
- get sortKey() { return this.#sortKey_accessor_storage; }
336
- set sortKey(value) { this.#sortKey_accessor_storage = value; }
337
- #sortDir_accessor_storage = (__runInitializers(this, _sortKey_extraInitializers), __runInitializers(this, _sortDir_initializers, null));
338
- get sortDir() { return this.#sortDir_accessor_storage; }
339
- set sortDir(value) { this.#sortDir_accessor_storage = value; }
340
- #filterText_accessor_storage = (__runInitializers(this, _sortDir_extraInitializers), __runInitializers(this, _filterText_initializers, ''));
335
+ #sortBy_accessor_storage = __runInitializers(this, _sortBy_initializers, []);
336
+ /**
337
+ * Multi-column sort cascade. The first entry is the primary sort key,
338
+ * subsequent entries are tiebreakers in priority order.
339
+ */
340
+ get sortBy() { return this.#sortBy_accessor_storage; }
341
+ set sortBy(value) { this.#sortBy_accessor_storage = value; }
342
+ #filterText_accessor_storage = (__runInitializers(this, _sortBy_extraInitializers), __runInitializers(this, _filterText_initializers, ''));
341
343
  // simple client-side filtering (Phase 1)
342
344
  get filterText() { return this.#filterText_accessor_storage; }
343
345
  set filterText(value) { this.#filterText_accessor_storage = value; }
@@ -348,10 +350,19 @@ let DeesTable = (() => {
348
350
  #showColumnFilters_accessor_storage = (__runInitializers(this, _columnFilters_extraInitializers), __runInitializers(this, _showColumnFilters_initializers, false));
349
351
  get showColumnFilters() { return this.#showColumnFilters_accessor_storage; }
350
352
  set showColumnFilters(value) { this.#showColumnFilters_accessor_storage = value; }
351
- #stickyHeader_accessor_storage = (__runInitializers(this, _showColumnFilters_extraInitializers), __runInitializers(this, _stickyHeader_initializers, false));
352
- get stickyHeader() { return this.#stickyHeader_accessor_storage; }
353
- set stickyHeader(value) { this.#stickyHeader_accessor_storage = value; }
354
- #searchMode_accessor_storage = (__runInitializers(this, _stickyHeader_extraInitializers), __runInitializers(this, _searchMode_initializers, 'table'));
353
+ #fixedHeight_accessor_storage = (__runInitializers(this, _showColumnFilters_extraInitializers), __runInitializers(this, _fixedHeight_initializers, false));
354
+ /**
355
+ * When set, the table renders inside a fixed-height scroll container
356
+ * (`max-height: var(--table-max-height, 360px)`) and the header sticks
357
+ * within that box via plain CSS sticky.
358
+ *
359
+ * When unset (the default), the table flows naturally and a JS-managed
360
+ * floating header keeps the column headers visible while the table is
361
+ * scrolled past in any ancestor scroll container (page or otherwise).
362
+ */
363
+ get fixedHeight() { return this.#fixedHeight_accessor_storage; }
364
+ set fixedHeight(value) { this.#fixedHeight_accessor_storage = value; }
365
+ #searchMode_accessor_storage = (__runInitializers(this, _fixedHeight_extraInitializers), __runInitializers(this, _searchMode_initializers, 'table'));
355
366
  // search row state
356
367
  get searchMode() { return this.#searchMode_accessor_storage; }
357
368
  set searchMode(value) { this.#searchMode_accessor_storage = value; }
@@ -376,7 +387,7 @@ let DeesTable = (() => {
376
387
  ? computeEffectiveColumnsFn(this.columns, this.augmentFromDisplayFunction, this.displayFunction, this.data)
377
388
  : computeColumnsFromDisplayFunctionFn(this.displayFunction, this.data);
378
389
  const lucenePred = compileLucenePredicate(this.filterText, this.searchMode === 'data' ? 'data' : 'table', effectiveColumns);
379
- const viewData = getViewDataFn(this.data, effectiveColumns, this.sortKey, this.sortDir, this.filterText, this.columnFilters, this.searchMode === 'data' ? 'data' : 'table', lucenePred || undefined);
390
+ const viewData = getViewDataFn(this.data, effectiveColumns, this.sortBy, this.filterText, this.columnFilters, this.searchMode === 'data' ? 'data' : 'table', lucenePred || undefined);
380
391
  this._lastViewData = viewData;
381
392
  return html `
382
393
  <dees-tile>
@@ -445,70 +456,7 @@ let DeesTable = (() => {
445
456
  <div class="tableScroll">
446
457
  <table>
447
458
  <thead>
448
- <tr>
449
- ${this.selectionMode !== 'none'
450
- ? html `
451
- <th style="width:42px; text-align:center;">
452
- ${this.selectionMode === 'multi'
453
- ? html `
454
- <dees-input-checkbox
455
- .value=${this.areAllVisibleSelected()}
456
- .indeterminate=${this.isVisibleSelectionIndeterminate()}
457
- @newValue=${(e) => {
458
- e.stopPropagation();
459
- this.setSelectVisible(e.detail === true);
460
- }}
461
- ></dees-input-checkbox>
462
- `
463
- : html ``}
464
- </th>
465
- `
466
- : html ``}
467
- ${effectiveColumns
468
- .filter((c) => !c.hidden)
469
- .map((col) => {
470
- const isSortable = !!col.sortable;
471
- const ariaSort = this.getAriaSort(col);
472
- return html `
473
- <th
474
- role="columnheader"
475
- aria-sort=${ariaSort}
476
- style="${isSortable ? 'cursor: pointer;' : ''}"
477
- @click=${() => (isSortable ? this.toggleSort(col) : null)}
478
- >
479
- ${col.header ?? col.key}
480
- ${this.renderSortIndicator(col)}
481
- </th>`;
482
- })}
483
- ${(() => {
484
- if (this.dataActions && this.dataActions.length > 0) {
485
- return html ` <th class="actionsCol">Actions</th> `;
486
- }
487
- })()}
488
- </tr>
489
- ${this.showColumnFilters
490
- ? html `<tr class="filtersRow">
491
- ${this.selectionMode !== 'none'
492
- ? html `<th style="width:42px;"></th>`
493
- : html ``}
494
- ${effectiveColumns
495
- .filter((c) => !c.hidden)
496
- .map((col) => {
497
- const key = String(col.key);
498
- if (col.filterable === false)
499
- return html `<th></th>`;
500
- return html `<th>
501
- <input type="text" placeholder="Filter..." .value=${this.columnFilters[key] || ''}
502
- @input=${(e) => this.setColumnFilter(key, e.target.value)} />
503
- </th>`;
504
- })}
505
- ${(() => {
506
- if (this.dataActions && this.dataActions.length > 0) {
507
- return html ` <th></th> `;
508
- }
509
- })()}
510
- </tr>`
511
- : html ``}
459
+ ${this.renderHeaderRows(effectiveColumns)}
512
460
  </thead>
513
461
  <tbody>
514
462
  ${viewData.map((itemArg, rowIndex) => {
@@ -646,6 +594,13 @@ let DeesTable = (() => {
646
594
  </tbody>
647
595
  </table>
648
596
  </div>
597
+ <div class="floatingHeader" aria-hidden="true">
598
+ <table>
599
+ <thead>
600
+ ${this.renderHeaderRows(effectiveColumns)}
601
+ </thead>
602
+ </table>
603
+ </div>
649
604
  `
650
605
  : html ` <div class="noDataSet">No data set!</div> `}
651
606
  <div slot="footer" class="footer">
@@ -682,11 +637,286 @@ let DeesTable = (() => {
682
637
  </dees-tile>
683
638
  `;
684
639
  }
640
+ /**
641
+ * Renders the header rows. Used twice per render: once inside the real
642
+ * `<thead>` and once inside the floating-header clone, so sort indicators
643
+ * and filter inputs stay in sync automatically.
644
+ */
645
+ renderHeaderRows(effectiveColumns) {
646
+ return html `
647
+ <tr>
648
+ ${this.selectionMode !== 'none'
649
+ ? html `
650
+ <th style="width:42px; text-align:center;">
651
+ ${this.selectionMode === 'multi'
652
+ ? html `
653
+ <dees-input-checkbox
654
+ .value=${this.areAllVisibleSelected()}
655
+ .indeterminate=${this.isVisibleSelectionIndeterminate()}
656
+ @newValue=${(e) => {
657
+ e.stopPropagation();
658
+ this.setSelectVisible(e.detail === true);
659
+ }}
660
+ ></dees-input-checkbox>
661
+ `
662
+ : html ``}
663
+ </th>
664
+ `
665
+ : html ``}
666
+ ${effectiveColumns
667
+ .filter((c) => !c.hidden)
668
+ .map((col) => {
669
+ const isSortable = !!col.sortable;
670
+ const ariaSort = this.getAriaSort(col);
671
+ return html `
672
+ <th
673
+ role="columnheader"
674
+ aria-sort=${ariaSort}
675
+ style="${isSortable ? 'cursor: pointer;' : ''}"
676
+ @click=${(eventArg) => isSortable ? this.handleHeaderClick(eventArg, col, effectiveColumns) : null}
677
+ @contextmenu=${(eventArg) => isSortable
678
+ ? this.openHeaderContextMenu(eventArg, col, effectiveColumns)
679
+ : null}
680
+ >
681
+ ${col.header ?? col.key}
682
+ ${this.renderSortIndicator(col)}
683
+ </th>`;
684
+ })}
685
+ ${this.dataActions && this.dataActions.length > 0
686
+ ? html `<th class="actionsCol">Actions</th>`
687
+ : html ``}
688
+ </tr>
689
+ ${this.showColumnFilters
690
+ ? html `<tr class="filtersRow">
691
+ ${this.selectionMode !== 'none'
692
+ ? html `<th style="width:42px;"></th>`
693
+ : html ``}
694
+ ${effectiveColumns
695
+ .filter((c) => !c.hidden)
696
+ .map((col) => {
697
+ const key = String(col.key);
698
+ if (col.filterable === false)
699
+ return html `<th></th>`;
700
+ return html `<th>
701
+ <input type="text" placeholder="Filter..." .value=${this.columnFilters[key] || ''}
702
+ @input=${(e) => this.setColumnFilter(key, e.target.value)} />
703
+ </th>`;
704
+ })}
705
+ ${this.dataActions && this.dataActions.length > 0
706
+ ? html `<th></th>`
707
+ : html ``}
708
+ </tr>`
709
+ : html ``}
710
+ `;
711
+ }
712
+ // ─── Floating header (page-sticky) lifecycle ─────────────────────────
713
+ __floatingResizeObserver;
714
+ __floatingScrollHandler;
715
+ __floatingActive = false;
716
+ __scrollAncestors = [];
717
+ get __floatingHeaderEl() {
718
+ return this.shadowRoot?.querySelector('.floatingHeader') ?? null;
719
+ }
720
+ get __realTableEl() {
721
+ return this.shadowRoot?.querySelector('.tableScroll > table') ?? null;
722
+ }
723
+ get __floatingTableEl() {
724
+ return this.shadowRoot?.querySelector('.floatingHeader > table') ?? null;
725
+ }
726
+ /**
727
+ * Walks up the DOM (and through shadow roots) collecting every ancestor
728
+ * element whose computed `overflow-y` makes it a scroll container, plus
729
+ * `window` at the end. We listen for scroll on all of them so the floating
730
+ * header reacts whether the user scrolls the page or any nested container.
731
+ */
732
+ __collectScrollAncestors() {
733
+ const result = [];
734
+ let node = this;
735
+ const scrollish = (v) => v === 'auto' || v === 'scroll' || v === 'overlay';
736
+ while (node) {
737
+ if (node instanceof Element) {
738
+ const style = getComputedStyle(node);
739
+ const sy = scrollish(style.overflowY);
740
+ const sx = scrollish(style.overflowX);
741
+ if (sy || sx) {
742
+ result.push({ target: node, scrollsY: sy, scrollsX: sx });
743
+ }
744
+ }
745
+ const parent = node.assignedSlot
746
+ ? node.assignedSlot
747
+ : node.parentNode;
748
+ if (parent) {
749
+ node = parent;
750
+ }
751
+ else if (node.host) {
752
+ node = node.host;
753
+ }
754
+ else {
755
+ node = null;
756
+ }
757
+ }
758
+ result.push({ target: window, scrollsY: true, scrollsX: true });
759
+ return result;
760
+ }
761
+ /**
762
+ * Returns the "stick line" — the y-coordinate (in viewport space) at which
763
+ * the floating header should appear. Defaults to 0 (page top), but if the
764
+ * table is inside a scroll container we use that container's content-box
765
+ * top so the header sits inside the container's border/padding instead of
766
+ * floating over it.
767
+ */
768
+ __getStickContext() {
769
+ let top = 0;
770
+ let left = 0;
771
+ let right = window.innerWidth;
772
+ for (const a of this.__scrollAncestors) {
773
+ if (a.target === window)
774
+ continue;
775
+ const el = a.target;
776
+ const r = el.getBoundingClientRect();
777
+ const cs = getComputedStyle(el);
778
+ // Only constrain top from ancestors that actually scroll vertically —
779
+ // a horizontal-only scroll container (like .tableScroll) must not push
780
+ // the stick line down to its own top.
781
+ if (a.scrollsY) {
782
+ const bt = parseFloat(cs.borderTopWidth) || 0;
783
+ top = Math.max(top, r.top + bt);
784
+ }
785
+ // Same for horizontal clipping.
786
+ if (a.scrollsX) {
787
+ const bl = parseFloat(cs.borderLeftWidth) || 0;
788
+ const br = parseFloat(cs.borderRightWidth) || 0;
789
+ left = Math.max(left, r.left + bl);
790
+ right = Math.min(right, r.right - br);
791
+ }
792
+ }
793
+ return { top, left, right };
794
+ }
795
+ setupFloatingHeader() {
796
+ this.teardownFloatingHeader();
797
+ if (this.fixedHeight)
798
+ return;
799
+ const realTable = this.__realTableEl;
800
+ if (!realTable)
801
+ return;
802
+ this.__scrollAncestors = this.__collectScrollAncestors();
803
+ // .tableScroll is a descendant (inside our shadow root), not an ancestor,
804
+ // so the upward walk above misses it. Add it explicitly so horizontal
805
+ // scrolling inside the table re-syncs the floating header.
806
+ const tableScrollEl = this.shadowRoot?.querySelector('.tableScroll');
807
+ if (tableScrollEl) {
808
+ this.__scrollAncestors.unshift({ target: tableScrollEl, scrollsY: false, scrollsX: true });
809
+ }
810
+ // Track resize of the real table so we can mirror its width and column widths.
811
+ this.__floatingResizeObserver = new ResizeObserver(() => {
812
+ this.__syncFloatingHeader();
813
+ });
814
+ this.__floatingResizeObserver.observe(realTable);
815
+ this.__floatingScrollHandler = () => this.__syncFloatingHeader();
816
+ for (const a of this.__scrollAncestors) {
817
+ a.target.addEventListener('scroll', this.__floatingScrollHandler, { passive: true });
818
+ }
819
+ window.addEventListener('resize', this.__floatingScrollHandler, { passive: true });
820
+ this.__syncFloatingHeader();
821
+ }
822
+ teardownFloatingHeader() {
823
+ this.__floatingResizeObserver?.disconnect();
824
+ this.__floatingResizeObserver = undefined;
825
+ if (this.__floatingScrollHandler) {
826
+ for (const a of this.__scrollAncestors) {
827
+ a.target.removeEventListener('scroll', this.__floatingScrollHandler);
828
+ }
829
+ window.removeEventListener('resize', this.__floatingScrollHandler);
830
+ this.__floatingScrollHandler = undefined;
831
+ }
832
+ this.__scrollAncestors = [];
833
+ this.__floatingActive = false;
834
+ const fh = this.__floatingHeaderEl;
835
+ if (fh)
836
+ fh.classList.remove('active');
837
+ }
838
+ /**
839
+ * Single function that drives both activation and geometry of the floating
840
+ * header. Called on scroll, resize, table-resize, and after each render.
841
+ */
842
+ __syncFloatingHeader() {
843
+ const fh = this.__floatingHeaderEl;
844
+ const realTable = this.__realTableEl;
845
+ const floatTable = this.__floatingTableEl;
846
+ if (!fh || !realTable || !floatTable)
847
+ return;
848
+ const tableRect = realTable.getBoundingClientRect();
849
+ const stick = this.__getStickContext();
850
+ // Mirror table layout + per-cell widths so columns line up.
851
+ floatTable.style.tableLayout = realTable.style.tableLayout || 'auto';
852
+ const realHeadRows = realTable.tHead?.rows;
853
+ const floatHeadRows = floatTable.tHead?.rows;
854
+ let headerHeight = 0;
855
+ if (realHeadRows && floatHeadRows) {
856
+ for (let r = 0; r < realHeadRows.length && r < floatHeadRows.length; r++) {
857
+ headerHeight += realHeadRows[r].getBoundingClientRect().height;
858
+ const realCells = realHeadRows[r].cells;
859
+ const floatCells = floatHeadRows[r].cells;
860
+ for (let c = 0; c < realCells.length && c < floatCells.length; c++) {
861
+ const w = realCells[c].getBoundingClientRect().width;
862
+ floatCells[c].style.width = `${w}px`;
863
+ floatCells[c].style.minWidth = `${w}px`;
864
+ floatCells[c].style.maxWidth = `${w}px`;
865
+ }
866
+ }
867
+ }
868
+ // Active when the table top is above the stick line and the table bottom
869
+ // hasn't yet scrolled past it.
870
+ const shouldBeActive = tableRect.top < stick.top && tableRect.bottom > stick.top + Math.min(headerHeight, 1);
871
+ if (shouldBeActive !== this.__floatingActive) {
872
+ this.__floatingActive = shouldBeActive;
873
+ fh.classList.toggle('active', shouldBeActive);
874
+ }
875
+ if (!shouldBeActive)
876
+ return;
877
+ // Position the floating header. Clip horizontally to the scroll context
878
+ // so a horizontally-scrolled inner container's header doesn't bleed
879
+ // outside the container's border.
880
+ const clipLeft = Math.max(tableRect.left, stick.left);
881
+ const clipRight = Math.min(tableRect.right, stick.right);
882
+ const clipWidth = Math.max(0, clipRight - clipLeft);
883
+ fh.style.top = `${stick.top}px`;
884
+ fh.style.left = `${clipLeft}px`;
885
+ fh.style.width = `${clipWidth}px`;
886
+ // The inner table is positioned so the visible region matches the real
887
+ // table's left edge — shift it left when we clipped to the container.
888
+ floatTable.style.width = `${tableRect.width}px`;
889
+ floatTable.style.marginLeft = `${tableRect.left - clipLeft}px`;
890
+ }
891
+ async disconnectedCallback() {
892
+ super.disconnectedCallback();
893
+ this.teardownFloatingHeader();
894
+ }
685
895
  async firstUpdated() {
896
+ // Floating-header observers are wired up in `updated()` once the
897
+ // table markup actually exists (it only renders when data.length > 0).
686
898
  }
687
899
  async updated(changedProperties) {
688
900
  super.updated(changedProperties);
689
901
  this.determineColumnWidths();
902
+ // (Re)wire the floating header whenever the relevant props change or
903
+ // the table markup may have appeared/disappeared.
904
+ if (changedProperties.has('fixedHeight') ||
905
+ changedProperties.has('data') ||
906
+ changedProperties.has('columns') ||
907
+ !this.__floatingScrollHandler) {
908
+ if (!this.fixedHeight && this.data.length > 0) {
909
+ this.setupFloatingHeader();
910
+ }
911
+ else {
912
+ this.teardownFloatingHeader();
913
+ }
914
+ }
915
+ // Keep the floating header in sync after any re-render
916
+ // (column widths may have changed).
917
+ if (!this.fixedHeight && this.data.length > 0) {
918
+ this.__syncFloatingHeader();
919
+ }
690
920
  if (this.searchable) {
691
921
  const existing = this.dataActions.find((actionArg) => actionArg.type?.includes('header') && actionArg.name === 'Search');
692
922
  if (!existing) {
@@ -792,37 +1022,322 @@ let DeesTable = (() => {
792
1022
  table.style.tableLayout = 'fixed';
793
1023
  }
794
1024
  // compute helpers moved to ./data.ts
795
- toggleSort(col) {
1025
+ // ─── sort: public API ────────────────────────────────────────────────
1026
+ /** Returns the descriptor for `key` if the column is currently in the cascade. */
1027
+ getSortDescriptor(key) {
1028
+ return this.sortBy.find((d) => d.key === key);
1029
+ }
1030
+ /** Returns the 0-based priority of `key` in the cascade, or -1 if not present. */
1031
+ getSortPriority(key) {
1032
+ return this.sortBy.findIndex((d) => d.key === key);
1033
+ }
1034
+ /** Replaces the cascade with a single sort entry. */
1035
+ setSort(key, dir) {
1036
+ this.sortBy = [{ key, dir }];
1037
+ this.emitSortChange();
1038
+ this.requestUpdate();
1039
+ }
1040
+ /**
1041
+ * Inserts (or moves) `key` to a 0-based position in the cascade. If the key is
1042
+ * already present elsewhere, its previous entry is removed before insertion so
1043
+ * a column appears at most once.
1044
+ */
1045
+ addSortAt(key, position, dir) {
1046
+ const next = this.sortBy.filter((d) => d.key !== key);
1047
+ const clamped = Math.max(0, Math.min(position, next.length));
1048
+ next.splice(clamped, 0, { key, dir });
1049
+ this.sortBy = next;
1050
+ this.emitSortChange();
1051
+ this.requestUpdate();
1052
+ }
1053
+ /** Appends `key` to the end of the cascade (or moves it there if already present). */
1054
+ appendSort(key, dir) {
1055
+ const next = this.sortBy.filter((d) => d.key !== key);
1056
+ next.push({ key, dir });
1057
+ this.sortBy = next;
1058
+ this.emitSortChange();
1059
+ this.requestUpdate();
1060
+ }
1061
+ /** Removes `key` from the cascade. No-op if not present. */
1062
+ removeSort(key) {
1063
+ if (!this.sortBy.some((d) => d.key === key))
1064
+ return;
1065
+ this.sortBy = this.sortBy.filter((d) => d.key !== key);
1066
+ this.emitSortChange();
1067
+ this.requestUpdate();
1068
+ }
1069
+ /** Empties the cascade. */
1070
+ clearSorts() {
1071
+ if (this.sortBy.length === 0)
1072
+ return;
1073
+ this.sortBy = [];
1074
+ this.emitSortChange();
1075
+ this.requestUpdate();
1076
+ }
1077
+ emitSortChange() {
1078
+ this.dispatchEvent(new CustomEvent('sortChange', {
1079
+ detail: { sortBy: this.sortBy.map((d) => ({ ...d })) },
1080
+ bubbles: true,
1081
+ }));
1082
+ }
1083
+ // ─── sort: header interaction handlers ───────────────────────────────
1084
+ /**
1085
+ * Plain left-click on a sortable header. Cycles `none → asc → desc → none`
1086
+ * collapsing the cascade to a single column. If a multi-column cascade is
1087
+ * active, asks the user to confirm the destructive replacement first. A
1088
+ * Shift+click bypasses the modal and routes through the multi-sort cycle.
1089
+ */
1090
+ async handleHeaderClick(eventArg, col, _effectiveColumns) {
1091
+ if (eventArg.shiftKey) {
1092
+ this.handleHeaderShiftClick(col);
1093
+ return;
1094
+ }
1095
+ const proceed = await this.confirmReplaceCascade(col);
1096
+ if (!proceed)
1097
+ return;
1098
+ this.cycleSingleSort(col);
1099
+ }
1100
+ /**
1101
+ * Cycles a single column through `none → asc → desc → none`, collapsing the
1102
+ * cascade. Used by both plain click and the menu's "Sort Ascending/Descending"
1103
+ * shortcuts (after confirmation).
1104
+ */
1105
+ cycleSingleSort(col) {
1106
+ const key = String(col.key);
1107
+ const current = this.sortBy.length === 1 && this.sortBy[0].key === key ? this.sortBy[0].dir : null;
1108
+ if (current === 'asc')
1109
+ this.setSort(key, 'desc');
1110
+ else if (current === 'desc')
1111
+ this.clearSorts();
1112
+ else
1113
+ this.setSort(key, 'asc');
1114
+ }
1115
+ /**
1116
+ * Shift+click cycle on a sortable header. Edits the cascade in place without
1117
+ * destroying other sort keys: append → flip dir → remove.
1118
+ */
1119
+ handleHeaderShiftClick(col) {
796
1120
  const key = String(col.key);
797
- if (this.sortKey !== key) {
798
- this.sortKey = key;
799
- this.sortDir = 'asc';
1121
+ const existing = this.getSortDescriptor(key);
1122
+ if (!existing) {
1123
+ this.appendSort(key, 'asc');
1124
+ }
1125
+ else if (existing.dir === 'asc') {
1126
+ this.sortBy = this.sortBy.map((d) => (d.key === key ? { key, dir: 'desc' } : d));
1127
+ this.emitSortChange();
1128
+ this.requestUpdate();
800
1129
  }
801
1130
  else {
802
- if (this.sortDir === 'asc')
803
- this.sortDir = 'desc';
804
- else if (this.sortDir === 'desc') {
805
- this.sortDir = null;
806
- this.sortKey = undefined;
807
- }
808
- else
809
- this.sortDir = 'asc';
1131
+ this.removeSort(key);
810
1132
  }
811
- this.dispatchEvent(new CustomEvent('sortChange', {
812
- detail: { key: this.sortKey, dir: this.sortDir },
813
- bubbles: true,
814
- }));
815
- this.requestUpdate();
816
1133
  }
1134
+ /**
1135
+ * Opens a confirmation modal when the cascade has more than one entry and the
1136
+ * user attempts a destructive single-sort replacement. Resolves to `true` if
1137
+ * the user accepts, `false` if they cancel. If the cascade has 0 or 1 entries
1138
+ * the modal is skipped and we resolve to `true` immediately.
1139
+ */
1140
+ confirmReplaceCascade(targetCol) {
1141
+ if (this.sortBy.length <= 1)
1142
+ return Promise.resolve(true);
1143
+ return new Promise((resolve) => {
1144
+ let settled = false;
1145
+ const settle = (result) => {
1146
+ if (settled)
1147
+ return;
1148
+ settled = true;
1149
+ resolve(result);
1150
+ };
1151
+ const summary = this.sortBy
1152
+ .map((d, i) => {
1153
+ const c = this._lookupColumnByKey?.(d.key);
1154
+ const label = c?.header ?? d.key;
1155
+ return html `<li>${i + 1}. ${label} ${d.dir === 'asc' ? '▲' : '▼'}</li>`;
1156
+ });
1157
+ DeesModal.createAndShow({
1158
+ heading: 'Replace multi-column sort?',
1159
+ width: 'small',
1160
+ showCloseButton: true,
1161
+ content: html `
1162
+ <div style="font-size:13px; line-height:1.55;">
1163
+ <p style="margin:0 0 8px;">
1164
+ You currently have a ${this.sortBy.length}-column sort active:
1165
+ </p>
1166
+ <ul style="margin:0 0 12px; padding-left:18px;">${summary}</ul>
1167
+ <p style="margin:0;">
1168
+ Continuing will discard the cascade and replace it with a single sort on
1169
+ <strong>${targetCol.header ?? String(targetCol.key)}</strong>.
1170
+ </p>
1171
+ </div>
1172
+ `,
1173
+ menuOptions: [
1174
+ {
1175
+ name: 'Cancel',
1176
+ iconName: 'lucide:x',
1177
+ action: async (modal) => {
1178
+ settle(false);
1179
+ await modal.destroy();
1180
+ return null;
1181
+ },
1182
+ },
1183
+ {
1184
+ name: 'Replace',
1185
+ iconName: 'lucide:check',
1186
+ action: async (modal) => {
1187
+ settle(true);
1188
+ await modal.destroy();
1189
+ return null;
1190
+ },
1191
+ },
1192
+ ],
1193
+ });
1194
+ });
1195
+ }
1196
+ /**
1197
+ * Looks up a column by its string key in the currently effective column set.
1198
+ * Used by the modal helper to render human-friendly labels.
1199
+ */
1200
+ _lookupColumnByKey(key) {
1201
+ const usingColumns = Array.isArray(this.columns) && this.columns.length > 0;
1202
+ const effective = usingColumns
1203
+ ? computeEffectiveColumnsFn(this.columns, this.augmentFromDisplayFunction, this.displayFunction, this.data)
1204
+ : computeColumnsFromDisplayFunctionFn(this.displayFunction, this.data);
1205
+ return effective.find((c) => String(c.key) === key);
1206
+ }
1207
+ /**
1208
+ * Opens the header context menu for explicit multi-sort priority control.
1209
+ */
1210
+ openHeaderContextMenu(eventArg, col, effectiveColumns) {
1211
+ const items = this.buildHeaderMenuItems(col, effectiveColumns);
1212
+ DeesContextmenu.openContextMenuWithOptions(eventArg, items);
1213
+ }
1214
+ /**
1215
+ * Builds the dynamic context-menu structure for a single column header.
1216
+ */
1217
+ buildHeaderMenuItems(col, effectiveColumns) {
1218
+ const key = String(col.key);
1219
+ const existing = this.getSortDescriptor(key);
1220
+ const cascadeLen = this.sortBy.length;
1221
+ // Maximum exposed slot: one beyond the current cascade, capped at the
1222
+ // number of sortable columns. If the column is already in the cascade we
1223
+ // never need to grow the slot count.
1224
+ const sortableColumnCount = effectiveColumns.filter((c) => !!c.sortable).length;
1225
+ const maxSlot = Math.min(Math.max(cascadeLen + (existing ? 0 : 1), 1), Math.max(sortableColumnCount, 1));
1226
+ const items = [];
1227
+ // Single-sort shortcuts. These are destructive when a cascade is active, so
1228
+ // they go through confirmReplaceCascade just like a plain click.
1229
+ items.push({
1230
+ name: 'Sort Ascending',
1231
+ iconName: cascadeLen === 1 && existing?.dir === 'asc' ? 'lucide:check' : 'lucide:arrowUp',
1232
+ action: async () => {
1233
+ if (await this.confirmReplaceCascade(col))
1234
+ this.setSort(key, 'asc');
1235
+ return null;
1236
+ },
1237
+ });
1238
+ items.push({
1239
+ name: 'Sort Descending',
1240
+ iconName: cascadeLen === 1 && existing?.dir === 'desc' ? 'lucide:check' : 'lucide:arrowDown',
1241
+ action: async () => {
1242
+ if (await this.confirmReplaceCascade(col))
1243
+ this.setSort(key, 'desc');
1244
+ return null;
1245
+ },
1246
+ });
1247
+ items.push({ divider: true });
1248
+ // Priority slot entries (1..maxSlot). Each slot has an asc/desc submenu.
1249
+ for (let slot = 1; slot <= maxSlot; slot++) {
1250
+ const ordinal = ordinalLabel(slot);
1251
+ const isCurrentSlot = existing && this.getSortPriority(key) === slot - 1;
1252
+ items.push({
1253
+ name: `Set as ${ordinal} sort`,
1254
+ iconName: isCurrentSlot ? 'lucide:check' : 'lucide:listOrdered',
1255
+ submenu: [
1256
+ {
1257
+ name: 'Ascending',
1258
+ iconName: 'lucide:arrowUp',
1259
+ action: async () => {
1260
+ this.addSortAt(key, slot - 1, 'asc');
1261
+ return null;
1262
+ },
1263
+ },
1264
+ {
1265
+ name: 'Descending',
1266
+ iconName: 'lucide:arrowDown',
1267
+ action: async () => {
1268
+ this.addSortAt(key, slot - 1, 'desc');
1269
+ return null;
1270
+ },
1271
+ },
1272
+ ],
1273
+ });
1274
+ }
1275
+ items.push({ divider: true });
1276
+ items.push({
1277
+ name: 'Append to sort',
1278
+ iconName: 'lucide:plus',
1279
+ submenu: [
1280
+ {
1281
+ name: 'Ascending',
1282
+ iconName: 'lucide:arrowUp',
1283
+ action: async () => {
1284
+ this.appendSort(key, 'asc');
1285
+ return null;
1286
+ },
1287
+ },
1288
+ {
1289
+ name: 'Descending',
1290
+ iconName: 'lucide:arrowDown',
1291
+ action: async () => {
1292
+ this.appendSort(key, 'desc');
1293
+ return null;
1294
+ },
1295
+ },
1296
+ ],
1297
+ });
1298
+ if (existing) {
1299
+ items.push({ divider: true });
1300
+ items.push({
1301
+ name: 'Remove from sort',
1302
+ iconName: 'lucide:minus',
1303
+ action: async () => {
1304
+ this.removeSort(key);
1305
+ return null;
1306
+ },
1307
+ });
1308
+ }
1309
+ if (cascadeLen > 0) {
1310
+ if (!existing)
1311
+ items.push({ divider: true });
1312
+ items.push({
1313
+ name: 'Clear all sorts',
1314
+ iconName: 'lucide:trash',
1315
+ action: async () => {
1316
+ this.clearSorts();
1317
+ return null;
1318
+ },
1319
+ });
1320
+ }
1321
+ return items;
1322
+ }
1323
+ // ─── sort: indicator + ARIA ──────────────────────────────────────────
817
1324
  getAriaSort(col) {
818
- if (String(col.key) !== this.sortKey || !this.sortDir)
1325
+ // ARIA sort reflects only the primary sort key (standard grid pattern).
1326
+ const primary = this.sortBy[0];
1327
+ if (!primary || primary.key !== String(col.key))
819
1328
  return 'none';
820
- return this.sortDir === 'asc' ? 'ascending' : 'descending';
1329
+ return primary.dir === 'asc' ? 'ascending' : 'descending';
821
1330
  }
822
1331
  renderSortIndicator(col) {
823
- if (String(col.key) !== this.sortKey || !this.sortDir)
1332
+ const idx = this.getSortPriority(String(col.key));
1333
+ if (idx < 0)
824
1334
  return html ``;
825
- return html `<span style="margin-left:6px; opacity:0.7;">${this.sortDir === 'asc' ? '▲' : '▼'}</span>`;
1335
+ const desc = this.sortBy[idx];
1336
+ const arrow = desc.dir === 'asc' ? '▲' : '▼';
1337
+ if (this.sortBy.length === 1) {
1338
+ return html `<span class="sortArrow">${arrow}</span>`;
1339
+ }
1340
+ return html `<span class="sortArrow">${arrow}</span><span class="sortBadge">${idx + 1}</span>`;
826
1341
  }
827
1342
  // filtering helpers
828
1343
  setFilterText(value) {
@@ -985,4 +1500,4 @@ let DeesTable = (() => {
985
1500
  return DeesTable = _classThis;
986
1501
  })();
987
1502
  export { DeesTable };
988
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy10YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtdGFibGUvZGVlcy10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBdUIsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFMUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQzdGLE9BQU8sS0FBSyxRQUFRLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFpQixNQUFNLDhDQUE4QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUMsT0FBTyxFQUNMLGlDQUFpQyxJQUFJLG1DQUFtQyxFQUN4RSx1QkFBdUIsSUFBSSx5QkFBeUIsRUFDcEQsWUFBWSxJQUFJLGNBQWMsRUFDOUIsV0FBVyxJQUFJLGFBQWEsR0FDN0IsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sNkNBQTZDLENBQUM7QUFVckQsdURBQXVEO0FBRXZELDJCQUEyQjtJQUVkLFNBQVM7NEJBRHJCLGFBQWEsQ0FBQyxZQUFZLENBQUM7Ozs7c0JBQ00sV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
1503
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy10YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtdGFibGUvZGVlcy10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBdUIsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFMUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUMzRSxPQUFPLEtBQUssUUFBUSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBaUIsTUFBTSw4Q0FBOEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE9BQU8sRUFDTCxpQ0FBaUMsSUFBSSxtQ0FBbUMsRUFDeEUsdUJBQXVCLElBQUkseUJBQXlCLEVBQ3BELFlBQVksSUFBSSxjQUFjLEVBQzlCLFdBQVcsSUFBSSxhQUFhLEdBQzdCLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLDZDQUE2QyxDQUFDO0FBSXJELGlGQUFpRjtBQUNqRixTQUFTLFlBQVksQ0FBQyxDQUFTO0lBQzdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7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