@ornery/ui-grid-vanilla 5.0.1 → 5.0.3
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.
- package/dist/adopt-styles.d.ts +1 -0
- package/dist/adopt-styles.d.ts.map +1 -1
- package/dist/browser/ui-grid-element.js +317 -89
- package/dist/components/grid-filter-cell/grid-filter-cell.template.d.ts.map +1 -1
- package/dist/components/grid-group-row/grid-group-row.d.ts +3 -0
- package/dist/components/grid-group-row/grid-group-row.d.ts.map +1 -1
- package/dist/components/grid-group-row/grid-group-row.template.d.ts +1 -0
- package/dist/components/grid-group-row/grid-group-row.template.d.ts.map +1 -1
- package/dist/framework-slots.d.ts +2 -0
- package/dist/framework-slots.d.ts.map +1 -1
- package/dist/grid-controller.d.ts +7 -1
- package/dist/grid-controller.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +234 -67
- package/dist/index.mjs +239 -69
- package/dist/pagination-range-label.d.ts +8 -0
- package/dist/pagination-range-label.d.ts.map +1 -0
- package/dist/patch.d.ts +1 -1
- package/dist/patch.d.ts.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/templates/index.d.ts +2 -1
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/ui-grid-standalone.element.d.ts +10 -0
- package/dist/ui-grid-standalone.element.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/adopt-styles.ts +31 -1
- package/src/auto-resize.test.ts +4 -2
- package/src/components/grid-filter-cell/grid-filter-cell.template.ts +4 -3
- package/src/components/grid-group-row/grid-group-row.template.ts +6 -4
- package/src/components/grid-group-row/grid-group-row.ts +5 -1
- package/src/framework-slots.ts +38 -17
- package/src/grid-controller.ts +78 -15
- package/src/group-row.test.ts +66 -0
- package/src/index.integration.test.ts +34 -12
- package/src/index.ts +2 -1
- package/src/pagination-range-label.test.ts +85 -0
- package/src/pagination-range-label.ts +10 -0
- package/src/pagination-range.test.ts +60 -0
- package/src/patch.ts +31 -9
- package/src/render.pagination.test.ts +37 -0
- package/src/render.ts +34 -10
- package/src/row-height.test.ts +52 -0
- package/src/scrollbar-compensation.test.ts +52 -0
- package/src/selection-pinning.test.ts +39 -0
- package/src/slot-updates.test.ts +137 -0
- package/src/templates/index.ts +8 -4
- package/src/theming-hooks.test.ts +66 -0
- package/src/ui-grid-empty.template.ts +1 -1
- package/src/ui-grid-shell.template.ts +2 -2
- package/src/ui-grid-standalone.element.ts +41 -2
- package/tsup.config.ts +1 -0
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import { registerUiGridWasmEngineFromModule } from "@ornery/ui-grid-core";
|
|
3
|
+
|
|
1
4
|
// src/ui-grid-standalone.element.ts
|
|
2
5
|
import {
|
|
3
6
|
interpolateGridTemplate
|
|
@@ -209,7 +212,8 @@ var FrameworkSlotBridge = class {
|
|
|
209
212
|
this.diffAndEmit(
|
|
210
213
|
this.lastExpandableRowSlots,
|
|
211
214
|
this.pendingExpandableRowSlots,
|
|
212
|
-
"expandableRowSlotsChanged"
|
|
215
|
+
"expandableRowSlotsChanged",
|
|
216
|
+
(previous, current) => previous.context.row !== current.context.row || previous.rowIndex !== current.rowIndex || previous.context.expanded !== current.context.expanded
|
|
213
217
|
);
|
|
214
218
|
this.lastExpandableRowSlots = this.pendingExpandableRowSlots;
|
|
215
219
|
this.pendingExpandableRowSlots = /* @__PURE__ */ new Map();
|
|
@@ -220,17 +224,26 @@ var FrameworkSlotBridge = class {
|
|
|
220
224
|
);
|
|
221
225
|
this.lastGroupRowSlots = this.pendingGroupRowSlots;
|
|
222
226
|
this.pendingGroupRowSlots = /* @__PURE__ */ new Map();
|
|
223
|
-
this.diffAndEmit(
|
|
227
|
+
this.diffAndEmit(
|
|
228
|
+
this.lastHeaderSlots,
|
|
229
|
+
this.pendingHeaderSlots,
|
|
230
|
+
"headerSlotsChanged",
|
|
231
|
+
(previous, current) => previous.context.column !== current.context.column
|
|
232
|
+
);
|
|
224
233
|
this.lastHeaderSlots = this.pendingHeaderSlots;
|
|
225
234
|
this.pendingHeaderSlots = /* @__PURE__ */ new Map();
|
|
226
|
-
this.diffAndEmit(
|
|
235
|
+
this.diffAndEmit(
|
|
236
|
+
this.lastFilterSlots,
|
|
237
|
+
this.pendingFilterSlots,
|
|
238
|
+
"filterSlotsChanged",
|
|
239
|
+
(previous, current) => previous.value !== current.value || previous.placeholder !== current.placeholder || previous.disabled !== current.disabled || previous.column !== current.column
|
|
240
|
+
);
|
|
227
241
|
this.lastFilterSlots = this.pendingFilterSlots;
|
|
228
242
|
this.pendingFilterSlots = /* @__PURE__ */ new Map();
|
|
229
|
-
this.diffAndEmitSingleton(
|
|
230
|
-
|
|
231
|
-
this.pendingEmptyStateSlot,
|
|
243
|
+
this.diffAndEmitSingleton(this.lastEmptyStateSlot, this.pendingEmptyStateSlot, [
|
|
244
|
+
"emptyStateSlotsChanged",
|
|
232
245
|
"emptyStateSlotChanged"
|
|
233
|
-
);
|
|
246
|
+
]);
|
|
234
247
|
this.lastEmptyStateSlot = this.pendingEmptyStateSlot;
|
|
235
248
|
this.pendingEmptyStateSlot = null;
|
|
236
249
|
}
|
|
@@ -256,36 +269,41 @@ var FrameworkSlotBridge = class {
|
|
|
256
269
|
flushRemovals() {
|
|
257
270
|
this.flush();
|
|
258
271
|
}
|
|
259
|
-
diffAndEmit(previous, current, eventName) {
|
|
272
|
+
diffAndEmit(previous, current, eventName, changed) {
|
|
260
273
|
const added = [];
|
|
261
274
|
const removed = [];
|
|
275
|
+
const updated = [];
|
|
262
276
|
for (const [key, slot] of current) {
|
|
263
|
-
|
|
277
|
+
const before = previous.get(key);
|
|
278
|
+
if (!before) added.push(slot);
|
|
279
|
+
else if (changed?.(before, slot)) updated.push(slot);
|
|
264
280
|
}
|
|
265
281
|
for (const [key, slot] of previous) {
|
|
266
282
|
if (!current.has(key)) removed.push(slot);
|
|
267
283
|
}
|
|
268
|
-
if (added.length === 0 && removed.length === 0) return;
|
|
284
|
+
if (added.length === 0 && removed.length === 0 && updated.length === 0) return;
|
|
269
285
|
this.host.dispatchEvent(
|
|
270
286
|
new CustomEvent(eventName, {
|
|
271
|
-
detail: { added, removed },
|
|
287
|
+
detail: { added, removed, updated },
|
|
272
288
|
bubbles: false,
|
|
273
289
|
composed: false
|
|
274
290
|
})
|
|
275
291
|
);
|
|
276
292
|
}
|
|
277
|
-
diffAndEmitSingleton(previous, current,
|
|
293
|
+
diffAndEmitSingleton(previous, current, eventNames) {
|
|
278
294
|
if (previous === current) return;
|
|
279
295
|
if (!previous && !current) return;
|
|
280
296
|
const added = current ? [current] : [];
|
|
281
297
|
const removed = previous ? [previous] : [];
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
298
|
+
for (const eventName of eventNames) {
|
|
299
|
+
this.host.dispatchEvent(
|
|
300
|
+
new CustomEvent(eventName, {
|
|
301
|
+
detail: { added, removed, updated: [] },
|
|
302
|
+
bubbles: false,
|
|
303
|
+
composed: false
|
|
304
|
+
})
|
|
305
|
+
);
|
|
306
|
+
}
|
|
289
307
|
}
|
|
290
308
|
};
|
|
291
309
|
function setsEqual(a, b) {
|
|
@@ -507,17 +525,20 @@ function slotRegistryMarkup(cellSlots) {
|
|
|
507
525
|
function filterRowMarkup(templateColumns, filterCells) {
|
|
508
526
|
return `<div class="filter-grid ui-grid-header" style="grid-template-columns:${templateColumns}">${filterCells}</div>`;
|
|
509
527
|
}
|
|
510
|
-
function
|
|
511
|
-
return
|
|
528
|
+
function virtualSpacerStyle(totalVirtualHeight, rowSize) {
|
|
529
|
+
return `height:${totalVirtualHeight}px;--ui-grid-row-height:${rowSize}px`;
|
|
530
|
+
}
|
|
531
|
+
function bodyVirtualMarkup(templateColumns, totalVirtualHeight, virtualOffset, bodyContent, rowSize) {
|
|
532
|
+
return `<div class="grid-virtual-spacer" style="${virtualSpacerStyle(totalVirtualHeight, rowSize)}"><div class="body-grid ui-grid-canvas grid-virtual-body" style="grid-template-columns:${templateColumns};top:${virtualOffset}px">${bodyContent}</div></div>`;
|
|
512
533
|
}
|
|
513
534
|
function bodyStaticMarkup(templateColumns, bodyContent) {
|
|
514
535
|
return `<div class="body-grid ui-grid-canvas" style="grid-template-columns:${templateColumns}">${bodyContent}</div>`;
|
|
515
536
|
}
|
|
516
537
|
function emptyDataMarkup(heading, description) {
|
|
517
|
-
return `<div class="empty-state ui-grid-no-row-overlay"><strong>${heading}</strong><p>${description}</p></div>`;
|
|
538
|
+
return `<div part="empty-state" class="empty-state ui-grid-no-row-overlay"><strong>${heading}</strong><p>${description}</p></div>`;
|
|
518
539
|
}
|
|
519
540
|
function expandableRowMarkup(expandableContent) {
|
|
520
|
-
return `<div class="expandable-row ui-grid-row ui-grid-expandable-row" style="grid-column:1 / -1">${expandableContent}</div>`;
|
|
541
|
+
return `<div part="expandable-row" class="expandable-row ui-grid-row ui-grid-expandable-row" style="grid-column:1 / -1">${expandableContent}</div>`;
|
|
521
542
|
}
|
|
522
543
|
function treeToggleMarkup(rowId, toggleLabel, iconViewBox, iconPath) {
|
|
523
544
|
return `<button type="button" class="row-toggle" data-action="toggle-tree" data-row="${rowId}" aria-label="${toggleLabel}">${iconMarkup("toggle-icon", iconViewBox, iconPath)}<span class="sr-only">${toggleLabel}</span></button>`;
|
|
@@ -538,6 +559,12 @@ function resizerMarkup(columnName, headerValue) {
|
|
|
538
559
|
return `<button type="button" class="column-resizer" data-action="resize" data-column="${columnName}" aria-label="Resize ${headerValue} column" title="Drag to resize, double-click to auto fit"></button>`;
|
|
539
560
|
}
|
|
540
561
|
|
|
562
|
+
// src/pagination-range-label.ts
|
|
563
|
+
function formatPaginationRangeLabel(range) {
|
|
564
|
+
if (range.totalItems === 0) return "0 of 0";
|
|
565
|
+
return `${range.firstRowIndex + 1}-${range.lastRowIndex + 1} of ${range.totalItems}`;
|
|
566
|
+
}
|
|
567
|
+
|
|
541
568
|
// src/utils/cell-class.ts
|
|
542
569
|
function bodyCellClass(isOdd, align, isPinned, isPinnedLeftLast, isPinnedRightFirst, isFocused, isEditing, isRowSelected, isRowFocused, isRowDirty, isRowSaving, isRowError, isCellInvalid) {
|
|
543
570
|
let cls = "body-cell ui-grid-cell";
|
|
@@ -624,7 +651,10 @@ function renderHeaderCell(el, column, sortEnabled, groupingEnabled, pinningEnabl
|
|
|
624
651
|
const selectAll = el.snapshot?.selectAll === true;
|
|
625
652
|
const showSelectAll = resolvedSel.enableSelectAll && resolvedSel.multiSelect;
|
|
626
653
|
const inner = showSelectAll ? `<button type="button" class="ui-grid-selection-select-all" data-action="select-all" aria-label="Select all rows"${selectAll ? ' aria-checked="true"' : ' aria-checked="false"'}><span class="ui-grid-selection-checkbox${selectAll ? " ui-grid-selection-checkbox-checked" : ""}"></span></button>` : "";
|
|
627
|
-
|
|
654
|
+
const pinOffset2 = controller.isPinned(column) ? controller.pinnedOffset(column) : null;
|
|
655
|
+
const pinClass = pinOffset2 ? ` is-pinned${controller.isPinnedLeftLast(column) ? " is-pinned-left-last" : ""}` : "";
|
|
656
|
+
const stickyStyle2 = pinOffset2 ? ` style="${escapeHtml(`${pinOffset2.side}:${pinOffset2.offset};`)}"` : "";
|
|
657
|
+
return `<ui-grid-header-cell part="header-cell" class="header-cell ui-grid-selection-row-header${pinClass}"${stickyStyle2} data-column="selectionRowHeaderCol">${inner}</ui-grid-header-cell>`;
|
|
628
658
|
}
|
|
629
659
|
if (el.frameworkSlots.hasHeader(column.name)) {
|
|
630
660
|
el.frameworkSlots.stageHeader(column);
|
|
@@ -632,7 +662,16 @@ function renderHeaderCell(el, column, sortEnabled, groupingEnabled, pinningEnabl
|
|
|
632
662
|
const isPinned2 = controller.isPinned(column);
|
|
633
663
|
const pinOffset2 = isPinned2 ? controller.pinnedOffset(column) : null;
|
|
634
664
|
const stickyStyle2 = pinOffset2 ? `${pinOffset2.side}:${pinOffset2.offset};` : "";
|
|
635
|
-
|
|
665
|
+
const slotClassName = headerCellClass(
|
|
666
|
+
false,
|
|
667
|
+
isPinned2,
|
|
668
|
+
controller.isPinnedLeftLast(column),
|
|
669
|
+
controller.isPinnedRightFirst(column),
|
|
670
|
+
false,
|
|
671
|
+
false,
|
|
672
|
+
false
|
|
673
|
+
);
|
|
674
|
+
return `<ui-grid-header-cell part="header-cell" class="${slotClassName}"${stickyStyle2 ? ` style="${escapeHtml(stickyStyle2)}"` : ""} data-column="${escapeHtml(column.name)}" data-pinned="${isPinned2}" data-sticky-style="${escapeHtml(stickyStyle2)}"><slot name="${escapeHtml(slotName)}"></slot></ui-grid-header-cell>`;
|
|
636
675
|
}
|
|
637
676
|
const sortDirection = controller.getSortDirection(column);
|
|
638
677
|
const sortLabel = controller.sortButtonLabel(column);
|
|
@@ -663,13 +702,14 @@ function renderHeaderCell(el, column, sortEnabled, groupingEnabled, pinningEnabl
|
|
|
663
702
|
isDragTarget,
|
|
664
703
|
isDragging
|
|
665
704
|
);
|
|
666
|
-
return `<ui-grid-header-cell class="${className}"${isDraggable ? ' draggable="true"' : ""}${stickyStyle ? ` style="${escapeHtml(stickyStyle)}"` : ""} data-column="${escapeHtml(column.name)}" data-sort-active="${sortDirection !== SORT_DIRECTIONS.none}" data-pinned="${isPinned}" data-pinned-left-last="${isPinnedLeftLast}" data-pinned-right-first="${isPinnedRightFirst}" data-pin-menu-open="${isPinMenuOpen}" data-drag-target="${isDragTarget}" data-dragging="${isDragging}" data-draggable="${isDraggable}" data-sticky-style="${escapeHtml(stickyStyle)}"><span class="header-label">${headerValue}</span><span class="header-actions">${canSort ? `<button type="button" class="header-action" data-action="sort" data-column="${escapeHtml(column.name)}" aria-label="${escapeHtml(sortLabel)}">${el.icons.renderControlIcon(sortIconKey)}<span class="sr-only">${escapeHtml(sortLabel)}</span></button>` : ""}${canGroup ? `<button type="button" class="chip-action${controller.isColumnGrouped(column) ? " chip-action-active" : ""}" data-action="group" data-column="${escapeHtml(column.name)}" aria-label="${escapeHtml(groupingLabel)}">${el.icons.renderControlIcon("group")}<span class="sr-only">${escapeHtml(groupingLabel)}</span></button>` : ""}${canPin ? `<div class="pin-control${isPinMenuOpen ? " pin-control-open" : ""}"><button type="button" class="chip-action pin-trigger${isPinned ? " chip-action-active" : ""}" data-action="pin-trigger" data-column="${escapeHtml(column.name)}" aria-label="${escapeHtml(pinLabel)}">${el.icons.renderControlIcon("pin")}<span class="sr-only">${escapeHtml(pinLabel)}</span></button><div class="pin-menu" role="menu" aria-label="${escapeHtml(pinLabel)}"><button type="button" class="pin-menu-action" data-action="pin-left" data-column="${escapeHtml(column.name)}" aria-label="${escapeHtml(el.snapshot?.labels.pinLeft ?? "Pin left")}">${el.icons.renderIconWithClass("control-icon", "pinLeft")}<span class="sr-only">${escapeHtml(el.snapshot?.labels.pinLeft ?? "Pin left")}</span></button><button type="button" class="pin-menu-action" data-action="pin-right" data-column="${escapeHtml(column.name)}" aria-label="${escapeHtml(el.snapshot?.labels.pinRight ?? "Pin right")}">${el.icons.renderIconWithClass("control-icon", "pinRight")}<span class="sr-only">${escapeHtml(el.snapshot?.labels.pinRight ?? "Pin right")}</span></button></div></div>` : ""}</span>${resizerHtml}</ui-grid-header-cell>`;
|
|
705
|
+
return `<ui-grid-header-cell part="header-cell" class="${className}"${isDraggable ? ' draggable="true"' : ""}${stickyStyle ? ` style="${escapeHtml(stickyStyle)}"` : ""} data-column="${escapeHtml(column.name)}" data-sort-active="${sortDirection !== SORT_DIRECTIONS.none}" data-pinned="${isPinned}" data-pinned-left-last="${isPinnedLeftLast}" data-pinned-right-first="${isPinnedRightFirst}" data-pin-menu-open="${isPinMenuOpen}" data-drag-target="${isDragTarget}" data-dragging="${isDragging}" data-draggable="${isDraggable}" data-sticky-style="${escapeHtml(stickyStyle)}"><span class="header-label" part="header-label">${headerValue}</span><span class="header-actions" part="header-actions">${canSort ? `<button type="button" class="header-action" data-action="sort" data-column="${escapeHtml(column.name)}" aria-label="${escapeHtml(sortLabel)}">${el.icons.renderControlIcon(sortIconKey)}<span class="sr-only">${escapeHtml(sortLabel)}</span></button>` : ""}${canGroup ? `<button type="button" class="chip-action${controller.isColumnGrouped(column) ? " chip-action-active" : ""}" data-action="group" data-column="${escapeHtml(column.name)}" aria-label="${escapeHtml(groupingLabel)}">${el.icons.renderControlIcon("group")}<span class="sr-only">${escapeHtml(groupingLabel)}</span></button>` : ""}${canPin ? `<div class="pin-control${isPinMenuOpen ? " pin-control-open" : ""}"><button type="button" class="chip-action pin-trigger${isPinned ? " chip-action-active" : ""}" data-action="pin-trigger" data-column="${escapeHtml(column.name)}" aria-label="${escapeHtml(pinLabel)}">${el.icons.renderControlIcon("pin")}<span class="sr-only">${escapeHtml(pinLabel)}</span></button><div class="pin-menu" part="pin-menu" role="menu" aria-label="${escapeHtml(pinLabel)}"><button type="button" class="pin-menu-action" data-action="pin-left" data-column="${escapeHtml(column.name)}" aria-label="${escapeHtml(el.snapshot?.labels.pinLeft ?? "Pin left")}">${el.icons.renderIconWithClass("control-icon", "pinLeft")}<span class="sr-only">${escapeHtml(el.snapshot?.labels.pinLeft ?? "Pin left")}</span></button><button type="button" class="pin-menu-action" data-action="pin-right" data-column="${escapeHtml(column.name)}" aria-label="${escapeHtml(el.snapshot?.labels.pinRight ?? "Pin right")}">${el.icons.renderIconWithClass("control-icon", "pinRight")}<span class="sr-only">${escapeHtml(el.snapshot?.labels.pinRight ?? "Pin right")}</span></button></div></div>` : ""}</span>${resizerHtml}</ui-grid-header-cell>`;
|
|
667
706
|
}
|
|
668
707
|
function renderFilterCell(el, column) {
|
|
669
708
|
if (column.name === "selectionRowHeaderCol") {
|
|
670
709
|
const pinOffset2 = el.controller.isPinned(column) ? el.controller.pinnedOffset(column) : null;
|
|
671
710
|
const stickyStyle2 = pinOffset2 ? `${pinOffset2.side}:${pinOffset2.offset};` : "";
|
|
672
|
-
|
|
711
|
+
const pinClass = pinOffset2 ? " is-pinned" : "";
|
|
712
|
+
return `<div part="filter-cell" class="filter-cell ui-grid-selection-row-header${pinClass}" data-column="selectionRowHeaderCol"${stickyStyle2 ? ` style="${escapeHtml(stickyStyle2)}"` : ""}></div>`;
|
|
673
713
|
}
|
|
674
714
|
const value = el.snapshot?.activeFilters[column.name] ?? "";
|
|
675
715
|
const controller = el.controller;
|
|
@@ -679,9 +719,10 @@ function renderFilterCell(el, column) {
|
|
|
679
719
|
if (el.frameworkSlots.hasFilter(column.name)) {
|
|
680
720
|
el.frameworkSlots.stageFilter(column, value, controller.filterPlaceholder(column), !canFilter);
|
|
681
721
|
const slotName = filterSlotName(column);
|
|
682
|
-
|
|
722
|
+
const pinClass = pinOffset ? ` is-pinned${controller.isPinnedLeftLast(column) ? " is-pinned-left-last" : ""}${controller.isPinnedRightFirst(column) ? " is-pinned-right-first" : ""}` : "";
|
|
723
|
+
return `<div part="filter-cell" class="filter-cell ui-grid-filter-container${pinClass}" data-column="${escapeHtml(column.name)}"${stickyStyle ? ` style="${escapeHtml(stickyStyle)}"` : ""}><slot name="${escapeHtml(slotName)}"></slot></div>`;
|
|
683
724
|
}
|
|
684
|
-
return `<ui-grid-filter-cell data-column="${escapeHtml(column.name)}" data-value="${escapeHtml(value)}" data-placeholder="${escapeHtml(controller.filterPlaceholder(column))}" data-disabled="${!canFilter}" data-pinned="${controller.isPinned(column)}" data-pinned-left-last="${controller.isPinnedLeftLast(column)}" data-pinned-right-first="${controller.isPinnedRightFirst(column)}" data-sticky-style="${escapeHtml(stickyStyle)}"></ui-grid-filter-cell>`;
|
|
725
|
+
return `<ui-grid-filter-cell part="filter-cell" data-column="${escapeHtml(column.name)}" data-value="${escapeHtml(value)}" data-placeholder="${escapeHtml(controller.filterPlaceholder(column))}" data-disabled="${!canFilter}" data-pinned="${controller.isPinned(column)}" data-pinned-left-last="${controller.isPinnedLeftLast(column)}" data-pinned-right-first="${controller.isPinnedRightFirst(column)}" data-sticky-style="${escapeHtml(stickyStyle)}"></ui-grid-filter-cell>`;
|
|
685
726
|
}
|
|
686
727
|
function renderDisplayItem(el, item, displayIndex) {
|
|
687
728
|
if (!el.snapshot || !el.controller) return "";
|
|
@@ -690,12 +731,12 @@ function renderDisplayItem(el, item, displayIndex) {
|
|
|
690
731
|
if (el.frameworkSlots.hasGroupRow()) {
|
|
691
732
|
el.frameworkSlots.stageGroupRow(group);
|
|
692
733
|
const slotName = groupRowSlotName(group);
|
|
693
|
-
return `<div class="group-row ui-grid-row ui-grid-group-row" data-group="${escapeHtml(group.id)}" style="grid-column:1 / -1"><slot name="${escapeHtml(slotName)}"></slot></div>`;
|
|
734
|
+
return `<div part="group-row" class="group-row ui-grid-row ui-grid-group-row" data-group="${escapeHtml(group.id)}" style="grid-column:1 / -1"><slot name="${escapeHtml(slotName)}"></slot></div>`;
|
|
694
735
|
}
|
|
695
736
|
const iconKey = group.collapsed ? "groupCollapsed" : "groupExpanded";
|
|
696
737
|
const icon = el.icons.resolve(iconKey);
|
|
697
738
|
const disclosureLabel = el.controller.groupDisclosureLabel(group);
|
|
698
|
-
return `<ui-grid-group-row data-action="toggle-group" data-group="${escapeHtml(group.id)}" data-collapsed="${group.collapsed ? "true" : "false"}" data-field="${escapeHtml(group.field)}" data-label="${escapeHtml(group.label)}" data-count="${group.count}" data-depth="${group.depth}" data-disclosure-label="${escapeHtml(disclosureLabel)}" data-icon-path="${icon.path}" data-icon-view-box="${icon.viewBox ?? "0 0 24 24"}" data-rows-suffix="${escapeHtml(el.
|
|
739
|
+
return `<ui-grid-group-row part="group-row" data-action="toggle-group" data-group="${escapeHtml(group.id)}" data-collapsed="${group.collapsed ? "true" : "false"}" data-field="${escapeHtml(group.field)}" data-column-label="${escapeHtml(el.controller.groupColumnLabel(group))}" data-label="${escapeHtml(group.label)}" data-count="${group.count}" data-depth="${group.depth}" data-disclosure-label="${escapeHtml(disclosureLabel)}" data-icon-path="${icon.path}" data-icon-view-box="${icon.viewBox ?? "0 0 24 24"}" data-rows-suffix="${escapeHtml(el.controller.groupRowsSuffix(group))}"></ui-grid-group-row>`;
|
|
699
740
|
}
|
|
700
741
|
if (item.kind === "expandable") {
|
|
701
742
|
const row = item.row;
|
|
@@ -762,7 +803,7 @@ function renderBodyCell(el, row, column, displayIndex) {
|
|
|
762
803
|
isCellInvalid
|
|
763
804
|
);
|
|
764
805
|
const titleAttr = isCellInvalid ? ` title="${escapeHtml(controller.gridApi.validate.getTitleFormattedErrors(row.entity, column))}"` : "";
|
|
765
|
-
return `<ui-grid-body-cell class="${className}" tabindex="0"${stickyStyle ? ` style="${escapeHtml(stickyStyle)}"` : ""}${titleAttr} data-row="${escapeHtml(rowId)}" data-column="${escapeHtml(columnName)}" data-odd="${displayIndex % 2 !== 0}" data-align="${escapeHtml(align)}" data-pinned="${isPinned}" data-pinned-left-last="${isPinnedLeftLast}" data-pinned-right-first="${isPinnedRightFirst}" data-focused="${isFocused}" data-editing="${editing}" data-sticky-style="${escapeHtml(stickyStyle)}"><div class="cell-shell" style="padding-inline-start:${escapeHtml(controller.cellIndent(row, column))}">${treeToggle}${expandToggle}<div class="cell-content">${content}</div></div></ui-grid-body-cell>`;
|
|
806
|
+
return `<ui-grid-body-cell part="body-cell" class="${className}" tabindex="0"${stickyStyle ? ` style="${escapeHtml(stickyStyle)}"` : ""}${titleAttr} data-row="${escapeHtml(rowId)}" data-column="${escapeHtml(columnName)}" data-odd="${displayIndex % 2 !== 0}" data-align="${escapeHtml(align)}" data-pinned="${isPinned}" data-pinned-left-last="${isPinnedLeftLast}" data-pinned-right-first="${isPinnedRightFirst}" data-focused="${isFocused}" data-editing="${editing}" data-sticky-style="${escapeHtml(stickyStyle)}"><div class="cell-shell" style="padding-inline-start:${escapeHtml(controller.cellIndent(row, column))}">${treeToggle}${expandToggle}<div class="cell-content">${content}</div></div></ui-grid-body-cell>`;
|
|
766
807
|
}
|
|
767
808
|
function renderCellShellContents(el, row, column, displayIndex, editing, templateMarkupMap) {
|
|
768
809
|
const controller = el.controller;
|
|
@@ -800,7 +841,12 @@ function renderPagination(el, snapshot) {
|
|
|
800
841
|
const pageSizes = snapshot.options.paginationPageSizes ?? [10, 25, 50, 100];
|
|
801
842
|
const prevIcon = el.icons.resolve("paginationPrev");
|
|
802
843
|
const nextIcon = el.icons.resolve("paginationNext");
|
|
803
|
-
|
|
844
|
+
const rangeLabel = formatPaginationRangeLabel({
|
|
845
|
+
firstRowIndex: snapshot.firstRowIndex,
|
|
846
|
+
lastRowIndex: snapshot.lastRowIndex,
|
|
847
|
+
totalItems: snapshot.pipeline.totalItems
|
|
848
|
+
});
|
|
849
|
+
return `<ui-grid-pagination part="pagination" data-range-label="${escapeHtml(rangeLabel)}" data-current-page="${snapshot.currentPage}" data-total-pages="${snapshot.totalPages}" data-page-label="${escapeHtml(snapshot.labels.paginationPage)}" data-of-label="${escapeHtml(snapshot.labels.paginationOf)}" data-prev-label="${escapeHtml(snapshot.labels.paginationPrevious)}" data-next-label="${escapeHtml(snapshot.labels.paginationNext)}" data-rows-label="${escapeHtml(snapshot.labels.paginationRows)}" data-prev-icon-path="${prevIcon.path}" data-prev-icon-view-box="${prevIcon.viewBox ?? "0 0 24 24"}" data-next-icon-path="${nextIcon.path}" data-next-icon-view-box="${nextIcon.viewBox ?? "0 0 24 24"}" data-page-sizes="${escapeHtml(JSON.stringify(pageSizes))}" data-page-size="${snapshot.pageSize}" data-prev-disabled="${snapshot.currentPage <= 1}" data-next-disabled="${snapshot.currentPage >= snapshot.totalPages}"></ui-grid-pagination>`;
|
|
804
850
|
}
|
|
805
851
|
function renderSlotRegistry(columns) {
|
|
806
852
|
const cellSlots = columns.map((column) => `<slot name="${escapeHtml(`cell-${column.name}`)}"></slot>`).join("");
|
|
@@ -983,7 +1029,7 @@ function renderPatch(el, plan, root) {
|
|
|
983
1029
|
reconcilePagination(el, root, snapshot, paginationEnabled && showPagination);
|
|
984
1030
|
el.frameworkSlots.flush();
|
|
985
1031
|
}
|
|
986
|
-
function reconcileBodyRoot(el, root, kind, options, labels, templateColumns, virtualOffset, totalVirtualHeight) {
|
|
1032
|
+
function reconcileBodyRoot(el, root, kind, options, labels, templateColumns, virtualOffset, totalVirtualHeight, rowSize) {
|
|
987
1033
|
const bodyViewport = root.querySelector(".grid-body-viewport");
|
|
988
1034
|
if (!bodyViewport) return null;
|
|
989
1035
|
const currentEmpty = bodyViewport.querySelector(":scope > .empty-state");
|
|
@@ -1020,7 +1066,7 @@ function reconcileBodyRoot(el, root, kind, options, labels, templateColumns, vir
|
|
|
1020
1066
|
return currentVirtual.querySelector(".grid-virtual-body");
|
|
1021
1067
|
}
|
|
1022
1068
|
const fresh2 = createFromMarkup(
|
|
1023
|
-
bodyVirtualMarkup(templateColumns, totalVirtualHeight, virtualOffset, "")
|
|
1069
|
+
bodyVirtualMarkup(templateColumns, totalVirtualHeight, virtualOffset, "", rowSize)
|
|
1024
1070
|
);
|
|
1025
1071
|
if (fresh2) swapBodyChild(bodyViewport, currentNode, fresh2);
|
|
1026
1072
|
return fresh2?.querySelector(".grid-virtual-body") ?? null;
|
|
@@ -1052,15 +1098,26 @@ function reconcilePagination(el, root, snapshot, shouldShow) {
|
|
|
1052
1098
|
function patchFilterCells(el, filterGrid, snapshot) {
|
|
1053
1099
|
const controller = el.controller;
|
|
1054
1100
|
const existing = /* @__PURE__ */ new Map();
|
|
1055
|
-
for (const e of filterGrid.querySelectorAll(
|
|
1101
|
+
for (const e of filterGrid.querySelectorAll(
|
|
1102
|
+
"ui-grid-filter-cell[data-column], .ui-grid-filter-container[data-column]"
|
|
1103
|
+
)) {
|
|
1056
1104
|
const column = e.dataset["column"];
|
|
1057
1105
|
if (column) existing.set(column, e);
|
|
1058
1106
|
}
|
|
1059
1107
|
for (const column of snapshot.visibleColumns) {
|
|
1060
|
-
const target = existing.get(column.name);
|
|
1061
|
-
if (!target) continue;
|
|
1062
1108
|
const value = snapshot.activeFilters[column.name] ?? "";
|
|
1063
1109
|
const canFilter = controller.isColumnFilterable(column);
|
|
1110
|
+
if (el.frameworkSlots.hasFilter(column.name)) {
|
|
1111
|
+
el.frameworkSlots.stageFilter(column, value, controller.filterPlaceholder(column), !canFilter);
|
|
1112
|
+
const target2 = existing.get(column.name);
|
|
1113
|
+
const pinOffset2 = controller.isPinned(column) ? controller.pinnedOffset(column) : null;
|
|
1114
|
+
if (target2) {
|
|
1115
|
+
setAttr(target2, "style", pinOffset2 ? `${pinOffset2.side}:${pinOffset2.offset};` : "");
|
|
1116
|
+
}
|
|
1117
|
+
continue;
|
|
1118
|
+
}
|
|
1119
|
+
const target = existing.get(column.name);
|
|
1120
|
+
if (!target) continue;
|
|
1064
1121
|
const pinOffset = controller.isPinned(column) ? controller.pinnedOffset(column) : null;
|
|
1065
1122
|
const stickyStyle = pinOffset ? `${pinOffset.side}:${pinOffset.offset};` : "";
|
|
1066
1123
|
setAttr(target, "data-value", value);
|
|
@@ -1083,7 +1140,8 @@ function patchBodyRegion(el, root, snapshot, options, labels, templateColumns, v
|
|
|
1083
1140
|
labels,
|
|
1084
1141
|
templateColumns,
|
|
1085
1142
|
virtualOffset,
|
|
1086
|
-
totalVirtualHeight
|
|
1143
|
+
totalVirtualHeight,
|
|
1144
|
+
snapshot.rowSize
|
|
1087
1145
|
);
|
|
1088
1146
|
if (!hasRows) {
|
|
1089
1147
|
el.lastItemsFingerprint = "";
|
|
@@ -1092,8 +1150,9 @@ function patchBodyRegion(el, root, snapshot, options, labels, templateColumns, v
|
|
|
1092
1150
|
const itemsFingerprint = fingerprintItems(itemsToRender);
|
|
1093
1151
|
if (virtualizationEnabled) {
|
|
1094
1152
|
const spacer = root.querySelector(".grid-virtual-spacer");
|
|
1095
|
-
|
|
1096
|
-
|
|
1153
|
+
const spacerStyle = virtualSpacerStyle(totalVirtualHeight, snapshot.rowSize);
|
|
1154
|
+
if (spacer && spacer.getAttribute("style") !== spacerStyle) {
|
|
1155
|
+
spacer.setAttribute("style", spacerStyle);
|
|
1097
1156
|
el.lastTotalVirtualHeight = totalVirtualHeight;
|
|
1098
1157
|
}
|
|
1099
1158
|
if (bodyContainer) {
|
|
@@ -1254,19 +1313,19 @@ function buildRowFingerprint(row, displayIndex, visibleColumns) {
|
|
|
1254
1313
|
return `${displayIndex}|${flags}|${row.treeLevel}|${row.height}|${row.expandedRowHeight}|${invalidBits}`;
|
|
1255
1314
|
}
|
|
1256
1315
|
function patchGroupRow(el, target, group) {
|
|
1257
|
-
const snapshot = el.snapshot;
|
|
1258
1316
|
const controller = el.controller;
|
|
1259
1317
|
const iconKey = group.collapsed ? "groupCollapsed" : "groupExpanded";
|
|
1260
1318
|
const icon = el.icons.resolve(iconKey);
|
|
1261
1319
|
setAttr(target, "data-collapsed", group.collapsed ? "true" : "false");
|
|
1262
1320
|
setAttr(target, "data-field", group.field);
|
|
1321
|
+
setAttr(target, "data-column-label", controller.groupColumnLabel(group));
|
|
1263
1322
|
setAttr(target, "data-label", group.label);
|
|
1264
1323
|
setAttr(target, "data-count", String(group.count));
|
|
1265
1324
|
setAttr(target, "data-depth", String(group.depth));
|
|
1266
1325
|
setAttr(target, "data-disclosure-label", controller.groupDisclosureLabel(group));
|
|
1267
1326
|
setAttr(target, "data-icon-path", icon.path);
|
|
1268
1327
|
setAttr(target, "data-icon-view-box", icon.viewBox ?? "0 0 24 24");
|
|
1269
|
-
setAttr(target, "data-rows-suffix",
|
|
1328
|
+
setAttr(target, "data-rows-suffix", controller.groupRowsSuffix(group));
|
|
1270
1329
|
}
|
|
1271
1330
|
function patchBodyCell(el, cell, row, column, displayIndex, templateMarkupMap) {
|
|
1272
1331
|
const controller = el.controller;
|
|
@@ -1345,7 +1404,11 @@ function patchPagination(el, paginationEl, snapshot) {
|
|
|
1345
1404
|
setAttr(
|
|
1346
1405
|
paginationEl,
|
|
1347
1406
|
"data-range-label",
|
|
1348
|
-
|
|
1407
|
+
formatPaginationRangeLabel({
|
|
1408
|
+
firstRowIndex: snapshot.firstRowIndex,
|
|
1409
|
+
lastRowIndex: snapshot.lastRowIndex,
|
|
1410
|
+
totalItems: snapshot.pipeline.totalItems
|
|
1411
|
+
})
|
|
1349
1412
|
);
|
|
1350
1413
|
setAttr(paginationEl, "data-current-page", String(snapshot.currentPage));
|
|
1351
1414
|
setAttr(paginationEl, "data-total-pages", String(snapshot.totalPages));
|
|
@@ -2236,7 +2299,6 @@ var IconRegistry = class {
|
|
|
2236
2299
|
// src/grid-controller.ts
|
|
2237
2300
|
import {
|
|
2238
2301
|
SORT_DIRECTIONS as SORT_DIRECTIONS2,
|
|
2239
|
-
activeGridEngineBackend,
|
|
2240
2302
|
beginGridCellEditCommand,
|
|
2241
2303
|
buildGridRows,
|
|
2242
2304
|
buildGridCellContext,
|
|
@@ -2252,7 +2314,9 @@ import {
|
|
|
2252
2314
|
defaultGridEngine,
|
|
2253
2315
|
expandAllGridRowsCommand,
|
|
2254
2316
|
expandAllGridTreeRowsCommand,
|
|
2255
|
-
|
|
2317
|
+
initWasmCore,
|
|
2318
|
+
getConfiguredUiGridWasmAssetBase,
|
|
2319
|
+
getWasmCoreInitializationState,
|
|
2256
2320
|
findGridRowById as coreFindGridRowById,
|
|
2257
2321
|
formatGridCellDisplayValue,
|
|
2258
2322
|
getCellValue as getCellValue3,
|
|
@@ -2434,6 +2498,7 @@ var VanillaGridController = class {
|
|
|
2434
2498
|
columnWidthOverrides = {};
|
|
2435
2499
|
viewportWidth = 0;
|
|
2436
2500
|
currentPage = 1;
|
|
2501
|
+
lastOptionsCurrentPage;
|
|
2437
2502
|
pageSize = 0;
|
|
2438
2503
|
editingCell = null;
|
|
2439
2504
|
editingValue = "";
|
|
@@ -2462,10 +2527,10 @@ var VanillaGridController = class {
|
|
|
2462
2527
|
visibleColumns = [];
|
|
2463
2528
|
apiRegistered = false;
|
|
2464
2529
|
disposed = false;
|
|
2465
|
-
wasmEngineInitRequested = false;
|
|
2466
2530
|
subscribers = /* @__PURE__ */ new Set();
|
|
2467
2531
|
gridApi;
|
|
2468
2532
|
constructor(options) {
|
|
2533
|
+
this.syncPaginationCurrentPage(options);
|
|
2469
2534
|
this.options = options;
|
|
2470
2535
|
this.labels = resolveGridLabels(options.labels);
|
|
2471
2536
|
this.validatorRegistry = createGridValidatorRegistry(this.labels);
|
|
@@ -2676,7 +2741,15 @@ var VanillaGridController = class {
|
|
|
2676
2741
|
this.disposeLanguageListener = null;
|
|
2677
2742
|
this.subscribers.clear();
|
|
2678
2743
|
}
|
|
2744
|
+
syncPaginationCurrentPage(options) {
|
|
2745
|
+
const page = options.paginationCurrentPage;
|
|
2746
|
+
if (page !== void 0 && page !== this.lastOptionsCurrentPage) {
|
|
2747
|
+
this.currentPage = Number.isFinite(page) ? Math.max(1, Math.floor(page)) : 1;
|
|
2748
|
+
}
|
|
2749
|
+
this.lastOptionsCurrentPage = page;
|
|
2750
|
+
}
|
|
2679
2751
|
setOptions(options) {
|
|
2752
|
+
this.syncPaginationCurrentPage(options);
|
|
2680
2753
|
this.options = options;
|
|
2681
2754
|
this.labels = resolveGridLabels(options.labels);
|
|
2682
2755
|
const rebuiltDefaults = createGridValidatorRegistry(this.labels);
|
|
@@ -3442,8 +3515,10 @@ var VanillaGridController = class {
|
|
|
3442
3515
|
}
|
|
3443
3516
|
setColumnWidthOverride(columnName, widthPx) {
|
|
3444
3517
|
const nextWidth = `${Math.max(88, Math.round(widthPx))}px`;
|
|
3518
|
+
if (this.columnWidthOverrides[columnName] === nextWidth) return;
|
|
3445
3519
|
this.columnWidthOverrides = { ...this.columnWidthOverrides, [columnName]: nextWidth };
|
|
3446
3520
|
this.refresh();
|
|
3521
|
+
this.gridApi.core.raise.columnSizeChanged(columnName, nextWidth);
|
|
3447
3522
|
}
|
|
3448
3523
|
/** Returns the grid-template-columns string as if `columnName` had the given width,
|
|
3449
3524
|
* without triggering a full refresh. Used for smooth drag-resize DOM updates. */
|
|
@@ -3515,22 +3590,42 @@ var VanillaGridController = class {
|
|
|
3515
3590
|
if (typeof condition === "boolean") return condition;
|
|
3516
3591
|
return condition({ row: row.entity, column, rowIndex: row.index });
|
|
3517
3592
|
}
|
|
3593
|
+
// Pin state as laid out: the selection row-header column sits in front of
|
|
3594
|
+
// the left-pinned columns, so it is pinned with them (#7399).
|
|
3595
|
+
layoutPinnedColumns() {
|
|
3596
|
+
const pinned = this.pinnedColumns;
|
|
3597
|
+
if (pinned[SELECTION_COLUMN] !== void 0) return pinned;
|
|
3598
|
+
if (!Object.values(pinned).includes("left")) return pinned;
|
|
3599
|
+
if (this.visibleColumns[0]?.name !== SELECTION_COLUMN) return pinned;
|
|
3600
|
+
return { [SELECTION_COLUMN]: "left", ...pinned };
|
|
3601
|
+
}
|
|
3518
3602
|
isPinned(column) {
|
|
3519
|
-
return this.
|
|
3603
|
+
return this.layoutPinnedColumns()[column.name] !== void 0;
|
|
3520
3604
|
}
|
|
3521
3605
|
isPinnedLeftLast(column) {
|
|
3522
|
-
const
|
|
3606
|
+
const pinned = this.layoutPinnedColumns();
|
|
3607
|
+
const leftPinned = this.visibleColumns.filter((c) => pinned[c.name] === "left");
|
|
3523
3608
|
return leftPinned.length > 0 && leftPinned[leftPinned.length - 1].name === column.name;
|
|
3524
3609
|
}
|
|
3525
3610
|
isPinnedRightFirst(column) {
|
|
3526
|
-
const
|
|
3611
|
+
const pinned = this.layoutPinnedColumns();
|
|
3612
|
+
const rightPinned = this.visibleColumns.filter((c) => pinned[c.name] === "right");
|
|
3527
3613
|
return rightPinned.length > 0 && rightPinned[0].name === column.name;
|
|
3528
3614
|
}
|
|
3529
3615
|
groupDisclosureLabel(group) {
|
|
3530
3616
|
return gridGroupDisclosureLabel(group.collapsed, this.labels);
|
|
3531
3617
|
}
|
|
3618
|
+
groupColumnLabel(group) {
|
|
3619
|
+
const column = this.options.columnDefs.find((candidate) => candidate.name === group.field);
|
|
3620
|
+
return column ? headerLabel(column) : group.field;
|
|
3621
|
+
}
|
|
3622
|
+
groupRowsSuffix(group) {
|
|
3623
|
+
const plural = this.labels.groupRowsSuffix;
|
|
3624
|
+
if (group.count !== 1) return plural;
|
|
3625
|
+
return this.labels.groupRowSuffixOne ?? GROUP_ROW_SUFFIX_ONE[plural] ?? plural;
|
|
3626
|
+
}
|
|
3532
3627
|
pinnedOffset(column) {
|
|
3533
|
-
return computePinnedOffset(this.visibleColumns, this.
|
|
3628
|
+
return computePinnedOffset(this.visibleColumns, this.layoutPinnedColumns(), column);
|
|
3534
3629
|
}
|
|
3535
3630
|
displayValue(row, column) {
|
|
3536
3631
|
return formatGridCellDisplayValue(buildGridCellContext(row, column));
|
|
@@ -3736,17 +3831,24 @@ var VanillaGridController = class {
|
|
|
3736
3831
|
}
|
|
3737
3832
|
this.emit();
|
|
3738
3833
|
}
|
|
3834
|
+
awaitingWasmEngine = false;
|
|
3835
|
+
// WASM is opt-in (#7396). The grid starts a load only when the app set a
|
|
3836
|
+
// WASM asset base; otherwise it waits for a load the app started. Either
|
|
3837
|
+
// way it refreshes once WASM is ready so it switches engines.
|
|
3739
3838
|
maybeEnableWasmEngine() {
|
|
3740
|
-
|
|
3839
|
+
const state = getWasmCoreInitializationState();
|
|
3840
|
+
const optedIn = state === "loading" || state === "idle" && getConfiguredUiGridWasmAssetBase() !== null;
|
|
3841
|
+
if (this.awaitingWasmEngine || !optedIn) {
|
|
3741
3842
|
return;
|
|
3742
3843
|
}
|
|
3743
|
-
this.
|
|
3744
|
-
void
|
|
3745
|
-
|
|
3844
|
+
this.awaitingWasmEngine = true;
|
|
3845
|
+
void initWasmCore().then((ready) => {
|
|
3846
|
+
this.awaitingWasmEngine = false;
|
|
3847
|
+
if (ready && !this.disposed) {
|
|
3746
3848
|
this.refresh();
|
|
3747
3849
|
}
|
|
3748
3850
|
}).catch(() => {
|
|
3749
|
-
this.
|
|
3851
|
+
this.awaitingWasmEngine = false;
|
|
3750
3852
|
});
|
|
3751
3853
|
}
|
|
3752
3854
|
emit() {
|
|
@@ -3791,9 +3893,14 @@ var VanillaGridController = class {
|
|
|
3791
3893
|
this.pageSize
|
|
3792
3894
|
);
|
|
3793
3895
|
}
|
|
3896
|
+
// Core's index helpers describe the slice, which external paging skips; the
|
|
3897
|
+
// range shown and returned by the API is where this page sits in totalItems.
|
|
3898
|
+
rangeOptions() {
|
|
3899
|
+
return this.options.useExternalPagination === true ? { ...this.options, useExternalPagination: false } : this.options;
|
|
3900
|
+
}
|
|
3794
3901
|
getFirstRowIndex() {
|
|
3795
3902
|
return getFirstRowIndexValue(
|
|
3796
|
-
this.
|
|
3903
|
+
this.rangeOptions(),
|
|
3797
3904
|
this.currentPage,
|
|
3798
3905
|
this.pipeline.totalItems,
|
|
3799
3906
|
this.pageSize
|
|
@@ -3801,7 +3908,7 @@ var VanillaGridController = class {
|
|
|
3801
3908
|
}
|
|
3802
3909
|
getLastRowIndex() {
|
|
3803
3910
|
return getLastRowIndexValue(
|
|
3804
|
-
this.
|
|
3911
|
+
this.rangeOptions(),
|
|
3805
3912
|
this.currentPage,
|
|
3806
3913
|
this.pipeline.totalItems,
|
|
3807
3914
|
this.pageSize
|
|
@@ -4206,13 +4313,17 @@ var VanillaGridController = class {
|
|
|
4206
4313
|
};
|
|
4207
4314
|
}
|
|
4208
4315
|
};
|
|
4316
|
+
var SELECTION_COLUMN = "selectionRowHeaderCol";
|
|
4317
|
+
var GROUP_ROW_SUFFIX_ONE = {
|
|
4318
|
+
rows: "row",
|
|
4319
|
+
lignes: "ligne",
|
|
4320
|
+
Zeilen: "Zeile",
|
|
4321
|
+
filas: "fila"
|
|
4322
|
+
};
|
|
4209
4323
|
function createVanillaGridController(options) {
|
|
4210
4324
|
return new VanillaGridController(options);
|
|
4211
4325
|
}
|
|
4212
4326
|
|
|
4213
|
-
// scss-inline:/home/runner/work/ui-grid/ui-grid/projects/ui-grid-vanilla/src/ui-grid-shell.scss
|
|
4214
|
-
var ui_grid_shell_default = ':host{--_ui-grid-border-color: var(--ui-grid-border-color, var(--app-ui-grid-border-color, #d4d4d8));--_ui-grid-header-background: var( --ui-grid-header-background, var(--app-ui-grid-header-background, #f3f4f6) );--_ui-grid-row-odd: var(--ui-grid-row-odd, var(--app-ui-grid-row-odd, #fcfcfd));--_ui-grid-row-even: var(--ui-grid-row-even, var(--app-ui-grid-row-even, #f7f7f8));--_ui-grid-row-hover: var( --ui-grid-row-hover, var( --app-ui-grid-row-hover, color-mix(in srgb, var(--_ui-grid-accent) 4%, var(--_ui-grid-surface)) ) );--_ui-grid-row-focus-background: var( --ui-grid-row-focus-background, var( --app-ui-grid-row-focus-background, color-mix(in srgb, var(--_ui-grid-accent) 9%, var(--_ui-grid-surface)) ) );--_ui-grid-cell-color: var(--ui-grid-cell-color, var(--app-ui-grid-cell-color, #111827));--_ui-grid-muted-color: var(--ui-grid-muted-color, var(--app-ui-grid-muted-color, #6b7280));--_ui-grid-surface: var(--ui-grid-surface, var(--app-ui-grid-surface, #ffffff));--_ui-grid-radius: var(--ui-grid-radius, var(--app-ui-grid-radius, 4px));--_ui-grid-shadow: var( --ui-grid-shadow, var(--app-ui-grid-shadow, 0 10px 24px rgba(15, 23, 42, 0.08)) );--_ui-grid-header-weight: var(--ui-grid-header-weight, var(--app-ui-grid-header-weight, 700));--_ui-grid-accent: var(--ui-grid-accent, var(--app-ui-grid-accent, #2563eb));--_ui-grid-group-background: var( --ui-grid-group-background, var(--app-ui-grid-group-background, #eceff3) );--_ui-grid-status-active-bg: var( --ui-grid-status-active-bg, var(--app-ui-grid-status-active-bg, rgba(22, 163, 74, 0.14)) );--_ui-grid-status-active-color: var( --ui-grid-status-active-color, var(--app-ui-grid-status-active-color, #166534) );--_ui-grid-status-expansion-bg: var( --ui-grid-status-expansion-bg, var(--app-ui-grid-status-expansion-bg, rgba(37, 99, 235, 0.14)) );--_ui-grid-status-expansion-color: var( --ui-grid-status-expansion-color, var(--app-ui-grid-status-expansion-color, #1d4ed8) );--_ui-grid-status-enterprise-bg: var( --ui-grid-status-enterprise-bg, var(--app-ui-grid-status-enterprise-bg, rgba(15, 118, 110, 0.14)) );--_ui-grid-status-enterprise-color: var( --ui-grid-status-enterprise-color, var(--app-ui-grid-status-enterprise-color, #115e59) );--_ui-grid-status-pilot-bg: var( --ui-grid-status-pilot-bg, var(--app-ui-grid-status-pilot-bg, rgba(234, 88, 12, 0.14)) );--_ui-grid-status-pilot-color: var( --ui-grid-status-pilot-color, var(--app-ui-grid-status-pilot-color, #c2410c) );--_ui-grid-shell-gap: var(--ui-grid-shell-gap, var(--app-ui-grid-shell-gap, 1.5rem));--_ui-grid-hero-gap: var(--ui-grid-hero-gap, var(--app-ui-grid-hero-gap, 1.5rem));--_ui-grid-hero-padding-block: var( --ui-grid-hero-padding-block, var(--app-ui-grid-hero-padding-block, 1rem) );--_ui-grid-eyebrow-margin-block-end: var( --ui-grid-eyebrow-margin-block-end, var(--app-ui-grid-eyebrow-margin-block-end, 0.5rem) );--_ui-grid-eyebrow-letter-spacing: var( --ui-grid-eyebrow-letter-spacing, var(--app-ui-grid-eyebrow-letter-spacing, 0.18em) );--_ui-grid-eyebrow-font-size: var( --ui-grid-eyebrow-font-size, var(--app-ui-grid-eyebrow-font-size, 0.72rem) );--_ui-grid-hero-title-font-size: var( --ui-grid-hero-title-font-size, var(--app-ui-grid-hero-title-font-size, clamp(1.4rem, 2vw, 2rem)) );--_ui-grid-hero-title-line-height: var( --ui-grid-hero-title-line-height, var(--app-ui-grid-hero-title-line-height, 1.1) );--_ui-grid-hero-deck-max-width: var( --ui-grid-hero-deck-max-width, var(--app-ui-grid-hero-deck-max-width, 56ch) );--_ui-grid-hero-deck-margin-block-start: var( --ui-grid-hero-deck-margin-block-start, var(--app-ui-grid-hero-deck-margin-block-start, 0.75rem) );--_ui-grid-hero-actions-gap: var( --ui-grid-hero-actions-gap, var(--app-ui-grid-hero-actions-gap, 1rem) );--_ui-grid-action-radius: var(--ui-grid-action-radius, var(--app-ui-grid-action-radius, 999px));--_ui-grid-action-padding-block: var( --ui-grid-action-padding-block, var(--app-ui-grid-action-padding-block, 0.8rem) );--_ui-grid-action-padding-inline: var( --ui-grid-action-padding-inline, var(--app-ui-grid-action-padding-inline, 1.1rem) );--_ui-grid-stats-card-min-width: var( --ui-grid-stats-card-min-width, var(--app-ui-grid-stats-card-min-width, 8rem) );--_ui-grid-stats-card-padding-block: var( --ui-grid-stats-card-padding-block, var(--app-ui-grid-stats-card-padding-block, 0.85rem) );--_ui-grid-stats-card-padding-inline: var( --ui-grid-stats-card-padding-inline, var(--app-ui-grid-stats-card-padding-inline, 1rem) );--_ui-grid-stats-card-value-font-size: var( --ui-grid-stats-card-value-font-size, var(--app-ui-grid-stats-card-value-font-size, 1.9rem) );--_ui-grid-metrics-gap: var(--ui-grid-metrics-gap, var(--app-ui-grid-metrics-gap, 1rem));--_ui-grid-metric-card-padding-block: var( --ui-grid-metric-card-padding-block, var(--app-ui-grid-metric-card-padding-block, 1rem) );--_ui-grid-metric-card-padding-inline: var( --ui-grid-metric-card-padding-inline, var(--app-ui-grid-metric-card-padding-inline, 1.1rem) );--_ui-grid-metric-value-font-size: var( --ui-grid-metric-value-font-size, var(--app-ui-grid-metric-value-font-size, 1.3rem) );--_ui-grid-toolbar-gap: var(--ui-grid-toolbar-gap, var(--app-ui-grid-toolbar-gap, 1rem));--_ui-grid-toolbar-padding-block: var( --ui-grid-toolbar-padding-block, var(--app-ui-grid-toolbar-padding-block, 1rem) );--_ui-grid-toolbar-padding-inline: var( --ui-grid-toolbar-padding-inline, var(--app-ui-grid-toolbar-padding-inline, 1.25rem) );--_ui-grid-toolbar-inline-gap: var( --ui-grid-toolbar-inline-gap, var(--app-ui-grid-toolbar-inline-gap, 0.4rem) );--_ui-grid-overflow-x: var(--ui-grid-overflow-x, var(--app-ui-grid-overflow-x, auto));--_ui-grid-overflow-y: var(--ui-grid-overflow-y, var(--app-ui-grid-overflow-y, auto));--_ui-grid-header-z-index: var(--ui-grid-header-z-index, var(--app-ui-grid-header-z-index, 3));--_ui-grid-pinned-cell-z-index: var( --ui-grid-pinned-cell-z-index, var(--app-ui-grid-pinned-cell-z-index, 2) );--_ui-grid-pin-menu-open-z-index: var( --ui-grid-pin-menu-open-z-index, var(--app-ui-grid-pin-menu-open-z-index, 8) );--_ui-grid-pin-menu-z-index: var(--ui-grid-pin-menu-z-index, var(--app-ui-grid-pin-menu-z-index, 20));--_ui-grid-header-cell-gap: var( --ui-grid-header-cell-gap, var(--app-ui-grid-header-cell-gap, 0.75rem) );--_ui-grid-header-cell-padding-block: var( --ui-grid-header-cell-padding-block, var(--app-ui-grid-header-cell-padding-block, 0.85rem) );--_ui-grid-header-cell-padding-inline: var( --ui-grid-header-cell-padding-inline, var(--app-ui-grid-header-cell-padding-inline, 1rem) );--_ui-grid-header-cell-background-active: var( --ui-grid-header-cell-background-active, var( --app-ui-grid-header-cell-background-active, color-mix(in srgb, var(--_ui-grid-accent) 8%, var(--_ui-grid-header-background)) ) );--_ui-grid-pinned-divider-shadow-left: var( --ui-grid-pinned-divider-shadow-left, var( --app-ui-grid-pinned-divider-shadow-left, 2px 0 4px rgba(0, 0, 0, 0.06) ) );--_ui-grid-pinned-divider-shadow-right: var( --ui-grid-pinned-divider-shadow-right, var( --app-ui-grid-pinned-divider-shadow-right, -2px 0 4px rgba(0, 0, 0, 0.06) ) );--_ui-grid-pinned-divider-clip-left: var( --ui-grid-pinned-divider-clip-left, var(--app-ui-grid-pinned-divider-clip-left, inset(0 -4px 0 0)) );--_ui-grid-pinned-divider-clip-right: var( --ui-grid-pinned-divider-clip-right, var(--app-ui-grid-pinned-divider-clip-right, inset(0 0 0 -4px)) );--_ui-grid-header-actions-gap: var( --ui-grid-header-actions-gap, var(--app-ui-grid-header-actions-gap, 0.4rem) );--_ui-grid-control-size: var(--ui-grid-control-size, var(--app-ui-grid-control-size, 2rem));--_ui-grid-control-radius: var( --ui-grid-control-radius, var(--app-ui-grid-control-radius, 999px) );--_ui-grid-control-icon-size: var( --ui-grid-control-icon-size, var(--app-ui-grid-control-icon-size, 1rem) );--_ui-grid-control-background: var( --ui-grid-control-background, var(--app-ui-grid-control-background, var(--_ui-grid-surface)) );--_ui-grid-control-border-color: var( --ui-grid-control-border-color, var(--app-ui-grid-control-border-color, var(--_ui-grid-border-color)) );--_ui-grid-control-color: var( --ui-grid-control-color, var(--app-ui-grid-control-color, var(--_ui-grid-muted-color)) );--_ui-grid-control-background-active: var( --ui-grid-control-background-active, var( --app-ui-grid-control-background-active, color-mix(in srgb, var(--_ui-grid-accent) 12%, var(--_ui-grid-surface)) ) );--_ui-grid-control-border-color-active: var( --ui-grid-control-border-color-active, var( --app-ui-grid-control-border-color-active, color-mix(in srgb, var(--_ui-grid-accent) 35%, var(--_ui-grid-border-color)) ) );--_ui-grid-control-color-active: var( --ui-grid-control-color-active, var(--app-ui-grid-control-color-active, var(--_ui-grid-accent)) );--_ui-grid-pin-menu-offset-block-start: var( --ui-grid-pin-menu-offset-block-start, var(--app-ui-grid-pin-menu-offset-block-start, 0.35rem) );--_ui-grid-pin-menu-gap: var(--ui-grid-pin-menu-gap, var(--app-ui-grid-pin-menu-gap, 0.25rem));--_ui-grid-pin-menu-padding: var( --ui-grid-pin-menu-padding, var(--app-ui-grid-pin-menu-padding, 0.25rem) );--_ui-grid-pin-menu-radius: var(--ui-grid-pin-menu-radius, var(--app-ui-grid-pin-menu-radius, 999px));--_ui-grid-pin-menu-shadow: var( --ui-grid-pin-menu-shadow, var( --app-ui-grid-pin-menu-shadow, 0 10px 24px color-mix(in srgb, var(--_ui-grid-cell-color) 10%, transparent) ) );--_ui-grid-pin-menu-action-size: var( --ui-grid-pin-menu-action-size, var(--app-ui-grid-pin-menu-action-size, 1.75rem) );--_ui-grid-pin-control-collapsed-size: var( --ui-grid-pin-control-collapsed-size, var(--app-ui-grid-pin-control-collapsed-size, 1px) );--_ui-grid-pin-control-transition-duration: var( --ui-grid-pin-control-transition-duration, var(--app-ui-grid-pin-control-transition-duration, 160ms) );--_ui-grid-pin-control-transition-easing: var( --ui-grid-pin-control-transition-easing, var(--app-ui-grid-pin-control-transition-easing, cubic-bezier(0.22, 1, 0.36, 1)) );--_ui-grid-pin-menu-scale-closed: var( --ui-grid-pin-menu-scale-closed, var(--app-ui-grid-pin-menu-scale-closed, 0.72) );--_ui-grid-filter-cell-padding-block-start: var( --ui-grid-filter-cell-padding-block-start, var(--app-ui-grid-filter-cell-padding-block-start, 0.75rem) );--_ui-grid-filter-cell-padding-block-end: var( --ui-grid-filter-cell-padding-block-end, var(--app-ui-grid-filter-cell-padding-block-end, 1rem) );--_ui-grid-filter-cell-padding-inline: var( --ui-grid-filter-cell-padding-inline, var(--app-ui-grid-filter-cell-padding-inline, 1rem) );--_ui-grid-filter-input-padding-block: var( --ui-grid-filter-input-padding-block, var(--app-ui-grid-filter-input-padding-block, 0.55rem) );--_ui-grid-filter-input-padding-inline: var( --ui-grid-filter-input-padding-inline, var(--app-ui-grid-filter-input-padding-inline, 0.7rem) );--_ui-grid-filter-input-focus-outline: var( --ui-grid-filter-input-focus-outline, var( --app-ui-grid-filter-input-focus-outline, 2px solid color-mix(in srgb, var(--_ui-grid-accent) 18%, transparent) ) );--_ui-grid-body-cell-padding-block: var( --ui-grid-body-cell-padding-block, var(--app-ui-grid-body-cell-padding-block, 0.95rem) );--_ui-grid-body-cell-padding-inline: var( --ui-grid-body-cell-padding-inline, var(--app-ui-grid-body-cell-padding-inline, 1rem) );--_ui-grid-cell-shell-gap: var(--ui-grid-cell-shell-gap, var(--app-ui-grid-cell-shell-gap, 0.55rem));--_ui-grid-row-toggle-size: var(--ui-grid-row-toggle-size, var(--app-ui-grid-row-toggle-size, 1.55rem));--_ui-grid-row-toggle-radius: var( --ui-grid-row-toggle-radius, var(--app-ui-grid-row-toggle-radius, 999px) );--_ui-grid-toggle-icon-size: var( --ui-grid-toggle-icon-size, var(--app-ui-grid-toggle-icon-size, 1.1rem) );--_ui-grid-group-disclosure-icon-size: var( --ui-grid-group-disclosure-icon-size, var(--app-ui-grid-group-disclosure-icon-size, 0.9rem) );--_ui-grid-pagination-icon-size: var( --ui-grid-pagination-icon-size, var(--app-ui-grid-pagination-icon-size, 1.2rem) );--_ui-grid-expandable-row-padding-block: var( --ui-grid-expandable-row-padding-block, var(--app-ui-grid-expandable-row-padding-block, 1rem) );--_ui-grid-expandable-row-padding-inline: var( --ui-grid-expandable-row-padding-inline, var(--app-ui-grid-expandable-row-padding-inline, 1.25rem) );--_ui-grid-expandable-row-background: var( --ui-grid-expandable-row-background, var( --app-ui-grid-expandable-row-background, color-mix(in srgb, var(--_ui-grid-accent) 4%, var(--_ui-grid-surface)) ) );--_ui-grid-cell-focus-background: var( --ui-grid-cell-focus-background, var( --app-ui-grid-cell-focus-background, color-mix(in srgb, var(--_ui-grid-accent) 14%, var(--_ui-grid-surface)) ) );--_ui-grid-cell-focus-ring: var( --ui-grid-cell-focus-ring, var( --app-ui-grid-cell-focus-ring, inset 0 0 0 1px color-mix(in srgb, var(--_ui-grid-accent) 28%, transparent) ) );--_ui-grid-cell-editing-background: var( --ui-grid-cell-editing-background, var( --app-ui-grid-cell-editing-background, color-mix(in srgb, var(--_ui-grid-accent) 7%, var(--_ui-grid-surface)) ) );--_ui-grid-cell-editor-border-color: var( --ui-grid-cell-editor-border-color, var( --app-ui-grid-cell-editor-border-color, color-mix(in srgb, var(--_ui-grid-accent) 45%, var(--_ui-grid-border-color)) ) );--_ui-grid-cell-editor-radius: var( --ui-grid-cell-editor-radius, var(--app-ui-grid-cell-editor-radius, calc(var(--_ui-grid-radius) - 1px)) );--_ui-grid-cell-editor-padding-block: var( --ui-grid-cell-editor-padding-block, var(--app-ui-grid-cell-editor-padding-block, 0.45rem) );--_ui-grid-cell-editor-padding-inline: var( --ui-grid-cell-editor-padding-inline, var(--app-ui-grid-cell-editor-padding-inline, 0.55rem) );--_ui-grid-cell-editor-focus-outline: var( --ui-grid-cell-editor-focus-outline, var( --app-ui-grid-cell-editor-focus-outline, 2px solid color-mix(in srgb, var(--_ui-grid-accent) 18%, transparent) ) );--_ui-grid-group-row-gap: var(--ui-grid-group-row-gap, var(--app-ui-grid-group-row-gap, 0.9rem));--_ui-grid-group-row-padding-block: var( --ui-grid-group-row-padding-block, var(--app-ui-grid-group-row-padding-block, 0.9rem) );--_ui-grid-group-row-padding-inline: var( --ui-grid-group-row-padding-inline, var(--app-ui-grid-group-row-padding-inline, 1rem) );--_ui-grid-drag-preview-shadow: var( --ui-grid-drag-preview-shadow, var(--app-ui-grid-drag-preview-shadow, 0 12px 30px rgba(15, 23, 42, 0.16)) );--_ui-grid-drag-preview-radius: var( --ui-grid-drag-preview-radius, var(--app-ui-grid-drag-preview-radius, 0.9rem) );--_ui-grid-drag-placeholder-opacity: var( --ui-grid-drag-placeholder-opacity, var(--app-ui-grid-drag-placeholder-opacity, 0.3) );--_ui-grid-drag-placeholder-background: var( --ui-grid-drag-placeholder-background, var( --app-ui-grid-drag-placeholder-background, color-mix(in srgb, var(--_ui-grid-accent) 9%, var(--_ui-grid-header-background)) ) );--_ui-grid-drag-placeholder-border: var( --ui-grid-drag-placeholder-border, var( --app-ui-grid-drag-placeholder-border, 1px dashed color-mix(in srgb, var(--_ui-grid-accent) 45%, var(--_ui-grid-border-color)) ) );--_ui-grid-drag-placeholder-shadow: var( --ui-grid-drag-placeholder-shadow, var( --app-ui-grid-drag-placeholder-shadow, inset 0 0 0 1px color-mix(in srgb, var(--_ui-grid-accent) 18%, transparent) ) );--_ui-grid-empty-state-gap: var( --ui-grid-empty-state-gap, var(--app-ui-grid-empty-state-gap, 0.35rem) );--_ui-grid-empty-state-min-height: var( --ui-grid-empty-state-min-height, var(--app-ui-grid-empty-state-min-height, 16rem) );--_ui-grid-empty-state-padding: var( --ui-grid-empty-state-padding, var(--app-ui-grid-empty-state-padding, 2rem) );--_ui-grid-pagination-gap: var(--ui-grid-pagination-gap, var(--app-ui-grid-pagination-gap, 1rem));--_ui-grid-pagination-padding-block: var( --ui-grid-pagination-padding-block, var(--app-ui-grid-pagination-padding-block, 0.85rem) );--_ui-grid-pagination-padding-inline: var( --ui-grid-pagination-padding-inline, var(--app-ui-grid-pagination-padding-inline, 1.25rem) );--_ui-grid-pagination-controls-gap: var( --ui-grid-pagination-controls-gap, var(--app-ui-grid-pagination-controls-gap, 0.75rem) );--_ui-grid-pagination-size-gap: var( --ui-grid-pagination-size-gap, var(--app-ui-grid-pagination-size-gap, 0.4rem) );--_ui-grid-pagination-button-padding-block: var( --ui-grid-pagination-button-padding-block, var(--app-ui-grid-pagination-button-padding-block, 0.45rem) );--_ui-grid-pagination-button-padding-inline: var( --ui-grid-pagination-button-padding-inline, var(--app-ui-grid-pagination-button-padding-inline, 0.8rem) );--_ui-grid-pagination-select-padding-block: var( --ui-grid-pagination-select-padding-block, var(--app-ui-grid-pagination-select-padding-block, 0.35rem) );--_ui-grid-pagination-select-padding-inline: var( --ui-grid-pagination-select-padding-inline, var(--app-ui-grid-pagination-select-padding-inline, 0.55rem) );--_ui-grid-status-pill-padding-block: var( --ui-grid-status-pill-padding-block, var(--app-ui-grid-status-pill-padding-block, 0.2rem) );--_ui-grid-status-pill-padding-inline: var( --ui-grid-status-pill-padding-inline, var(--app-ui-grid-status-pill-padding-inline, 0.55rem) );--_ui-grid-status-pill-radius: var( --ui-grid-status-pill-radius, var(--app-ui-grid-status-pill-radius, 999px) );--_ui-grid-status-pill-font-size: var( --ui-grid-status-pill-font-size, var(--app-ui-grid-status-pill-font-size, 0.85rem) );--_ui-grid-status-pill-default-bg: var( --ui-grid-status-pill-default-bg, var(--app-ui-grid-status-pill-default-bg, rgba(15, 23, 42, 0.07)) );display:block;color:var(--_ui-grid-cell-color)}:host *,:host *::before,:host *::after{--ui-grid-border-color: var(--_ui-grid-border-color);--ui-grid-header-background: var(--_ui-grid-header-background);--ui-grid-row-odd: var(--_ui-grid-row-odd);--ui-grid-row-even: var(--_ui-grid-row-even);--ui-grid-row-hover: var(--_ui-grid-row-hover);--ui-grid-row-focus-background: var(--_ui-grid-row-focus-background);--ui-grid-cell-color: var(--_ui-grid-cell-color);--ui-grid-muted-color: var(--_ui-grid-muted-color);--ui-grid-surface: var(--_ui-grid-surface);--ui-grid-radius: var(--_ui-grid-radius);--ui-grid-shadow: var(--_ui-grid-shadow);--ui-grid-header-weight: var(--_ui-grid-header-weight);--ui-grid-accent: var(--_ui-grid-accent);--ui-grid-group-background: var(--_ui-grid-group-background);--ui-grid-status-active-bg: var(--_ui-grid-status-active-bg);--ui-grid-status-active-color: var(--_ui-grid-status-active-color);--ui-grid-status-expansion-bg: var(--_ui-grid-status-expansion-bg);--ui-grid-status-expansion-color: var(--_ui-grid-status-expansion-color);--ui-grid-status-enterprise-bg: var(--_ui-grid-status-enterprise-bg);--ui-grid-status-enterprise-color: var(--_ui-grid-status-enterprise-color);--ui-grid-status-pilot-bg: var(--_ui-grid-status-pilot-bg);--ui-grid-status-pilot-color: var(--_ui-grid-status-pilot-color);--ui-grid-shell-gap: var(--_ui-grid-shell-gap);--ui-grid-hero-gap: var(--_ui-grid-hero-gap);--ui-grid-hero-padding-block: var(--_ui-grid-hero-padding-block);--ui-grid-eyebrow-margin-block-end: var(--_ui-grid-eyebrow-margin-block-end);--ui-grid-eyebrow-letter-spacing: var(--_ui-grid-eyebrow-letter-spacing);--ui-grid-eyebrow-font-size: var(--_ui-grid-eyebrow-font-size);--ui-grid-hero-title-font-size: var(--_ui-grid-hero-title-font-size);--ui-grid-hero-title-line-height: var(--_ui-grid-hero-title-line-height);--ui-grid-hero-deck-max-width: var(--_ui-grid-hero-deck-max-width);--ui-grid-hero-deck-margin-block-start: var(--_ui-grid-hero-deck-margin-block-start);--ui-grid-hero-actions-gap: var(--_ui-grid-hero-actions-gap);--ui-grid-action-radius: var(--_ui-grid-action-radius);--ui-grid-action-padding-block: var(--_ui-grid-action-padding-block);--ui-grid-action-padding-inline: var(--_ui-grid-action-padding-inline);--ui-grid-stats-card-min-width: var(--_ui-grid-stats-card-min-width);--ui-grid-stats-card-padding-block: var(--_ui-grid-stats-card-padding-block);--ui-grid-stats-card-padding-inline: var(--_ui-grid-stats-card-padding-inline);--ui-grid-stats-card-value-font-size: var(--_ui-grid-stats-card-value-font-size);--ui-grid-metrics-gap: var(--_ui-grid-metrics-gap);--ui-grid-metric-card-padding-block: var(--_ui-grid-metric-card-padding-block);--ui-grid-metric-card-padding-inline: var(--_ui-grid-metric-card-padding-inline);--ui-grid-metric-value-font-size: var(--_ui-grid-metric-value-font-size);--ui-grid-toolbar-gap: var(--_ui-grid-toolbar-gap);--ui-grid-toolbar-padding-block: var(--_ui-grid-toolbar-padding-block);--ui-grid-toolbar-padding-inline: var(--_ui-grid-toolbar-padding-inline);--ui-grid-toolbar-inline-gap: var(--_ui-grid-toolbar-inline-gap);--ui-grid-overflow-x: var(--_ui-grid-overflow-x);--ui-grid-overflow-y: var(--_ui-grid-overflow-y);--ui-grid-header-z-index: var(--_ui-grid-header-z-index);--ui-grid-pinned-cell-z-index: var(--_ui-grid-pinned-cell-z-index);--ui-grid-pin-menu-open-z-index: var(--_ui-grid-pin-menu-open-z-index);--ui-grid-pin-menu-z-index: var(--_ui-grid-pin-menu-z-index);--ui-grid-header-cell-gap: var(--_ui-grid-header-cell-gap);--ui-grid-header-cell-padding-block: var(--_ui-grid-header-cell-padding-block);--ui-grid-header-cell-padding-inline: var(--_ui-grid-header-cell-padding-inline);--ui-grid-header-cell-background-active: var(--_ui-grid-header-cell-background-active);--ui-grid-pinned-divider-shadow-left: var(--_ui-grid-pinned-divider-shadow-left);--ui-grid-pinned-divider-shadow-right: var(--_ui-grid-pinned-divider-shadow-right);--ui-grid-pinned-divider-clip-left: var(--_ui-grid-pinned-divider-clip-left);--ui-grid-pinned-divider-clip-right: var(--_ui-grid-pinned-divider-clip-right);--ui-grid-header-actions-gap: var(--_ui-grid-header-actions-gap);--ui-grid-control-size: var(--_ui-grid-control-size);--ui-grid-control-radius: var(--_ui-grid-control-radius);--ui-grid-control-icon-size: var(--_ui-grid-control-icon-size);--ui-grid-control-background: var(--_ui-grid-control-background);--ui-grid-control-border-color: var(--_ui-grid-control-border-color);--ui-grid-control-color: var(--_ui-grid-control-color);--ui-grid-control-background-active: var(--_ui-grid-control-background-active);--ui-grid-control-border-color-active: var(--_ui-grid-control-border-color-active);--ui-grid-control-color-active: var(--_ui-grid-control-color-active);--ui-grid-pin-menu-offset-block-start: var(--_ui-grid-pin-menu-offset-block-start);--ui-grid-pin-menu-gap: var(--_ui-grid-pin-menu-gap);--ui-grid-pin-menu-padding: var(--_ui-grid-pin-menu-padding);--ui-grid-pin-menu-radius: var(--_ui-grid-pin-menu-radius);--ui-grid-pin-menu-shadow: var(--_ui-grid-pin-menu-shadow);--ui-grid-pin-menu-action-size: var(--_ui-grid-pin-menu-action-size);--ui-grid-pin-control-collapsed-size: var(--_ui-grid-pin-control-collapsed-size);--ui-grid-pin-control-transition-duration: var(--_ui-grid-pin-control-transition-duration);--ui-grid-pin-control-transition-easing: var(--_ui-grid-pin-control-transition-easing);--ui-grid-pin-menu-scale-closed: var(--_ui-grid-pin-menu-scale-closed);--ui-grid-filter-cell-padding-block-start: var(--_ui-grid-filter-cell-padding-block-start);--ui-grid-filter-cell-padding-block-end: var(--_ui-grid-filter-cell-padding-block-end);--ui-grid-filter-cell-padding-inline: var(--_ui-grid-filter-cell-padding-inline);--ui-grid-filter-input-padding-block: var(--_ui-grid-filter-input-padding-block);--ui-grid-filter-input-padding-inline: var(--_ui-grid-filter-input-padding-inline);--ui-grid-filter-input-focus-outline: var(--_ui-grid-filter-input-focus-outline);--ui-grid-body-cell-padding-block: var(--_ui-grid-body-cell-padding-block);--ui-grid-body-cell-padding-inline: var(--_ui-grid-body-cell-padding-inline);--ui-grid-cell-shell-gap: var(--_ui-grid-cell-shell-gap);--ui-grid-row-toggle-size: var(--_ui-grid-row-toggle-size);--ui-grid-row-toggle-radius: var(--_ui-grid-row-toggle-radius);--ui-grid-toggle-icon-size: var(--_ui-grid-toggle-icon-size);--ui-grid-group-disclosure-icon-size: var(--_ui-grid-group-disclosure-icon-size);--ui-grid-pagination-icon-size: var(--_ui-grid-pagination-icon-size);--ui-grid-expandable-row-padding-block: var(--_ui-grid-expandable-row-padding-block);--ui-grid-expandable-row-padding-inline: var(--_ui-grid-expandable-row-padding-inline);--ui-grid-expandable-row-background: var(--_ui-grid-expandable-row-background);--ui-grid-cell-focus-background: var(--_ui-grid-cell-focus-background);--ui-grid-cell-focus-ring: var(--_ui-grid-cell-focus-ring);--ui-grid-cell-editing-background: var(--_ui-grid-cell-editing-background);--ui-grid-cell-editor-border-color: var(--_ui-grid-cell-editor-border-color);--ui-grid-cell-editor-radius: var(--_ui-grid-cell-editor-radius);--ui-grid-cell-editor-padding-block: var(--_ui-grid-cell-editor-padding-block);--ui-grid-cell-editor-padding-inline: var(--_ui-grid-cell-editor-padding-inline);--ui-grid-cell-editor-focus-outline: var(--_ui-grid-cell-editor-focus-outline);--ui-grid-group-row-gap: var(--_ui-grid-group-row-gap);--ui-grid-group-row-padding-block: var(--_ui-grid-group-row-padding-block);--ui-grid-group-row-padding-inline: var(--_ui-grid-group-row-padding-inline);--ui-grid-drag-preview-shadow: var(--_ui-grid-drag-preview-shadow);--ui-grid-drag-preview-radius: var(--_ui-grid-drag-preview-radius);--ui-grid-drag-placeholder-opacity: var(--_ui-grid-drag-placeholder-opacity);--ui-grid-drag-placeholder-background: var(--_ui-grid-drag-placeholder-background);--ui-grid-drag-placeholder-border: var(--_ui-grid-drag-placeholder-border);--ui-grid-drag-placeholder-shadow: var(--_ui-grid-drag-placeholder-shadow);--ui-grid-empty-state-gap: var(--_ui-grid-empty-state-gap);--ui-grid-empty-state-min-height: var(--_ui-grid-empty-state-min-height);--ui-grid-empty-state-padding: var(--_ui-grid-empty-state-padding);--ui-grid-pagination-gap: var(--_ui-grid-pagination-gap);--ui-grid-pagination-padding-block: var(--_ui-grid-pagination-padding-block);--ui-grid-pagination-padding-inline: var(--_ui-grid-pagination-padding-inline);--ui-grid-pagination-controls-gap: var(--_ui-grid-pagination-controls-gap);--ui-grid-pagination-size-gap: var(--_ui-grid-pagination-size-gap);--ui-grid-pagination-button-padding-block: var(--_ui-grid-pagination-button-padding-block);--ui-grid-pagination-button-padding-inline: var(--_ui-grid-pagination-button-padding-inline);--ui-grid-pagination-select-padding-block: var(--_ui-grid-pagination-select-padding-block);--ui-grid-pagination-select-padding-inline: var(--_ui-grid-pagination-select-padding-inline);--ui-grid-status-pill-padding-block: var(--_ui-grid-status-pill-padding-block);--ui-grid-status-pill-padding-inline: var(--_ui-grid-status-pill-padding-inline);--ui-grid-status-pill-radius: var(--_ui-grid-status-pill-radius);--ui-grid-status-pill-font-size: var(--_ui-grid-status-pill-font-size);--ui-grid-status-pill-default-bg: var(--_ui-grid-status-pill-default-bg);box-sizing:border-box}:host{isolation:isolate;contain:layout paint}.grid-shell{display:grid;gap:var(--ui-grid-shell-gap)}.grid-hero{display:flex;justify-content:space-between;gap:var(--ui-grid-hero-gap);align-items:end;padding:var(--ui-grid-hero-padding-block) 0;color:var(--ui-grid-cell-color)}.eyebrow{margin:0 0 var(--ui-grid-eyebrow-margin-block-end);text-transform:uppercase;letter-spacing:var(--ui-grid-eyebrow-letter-spacing);font-size:var(--ui-grid-eyebrow-font-size);color:var(--ui-grid-muted-color)}h1{margin:0;font-size:var(--ui-grid-hero-title-font-size);line-height:var(--ui-grid-hero-title-line-height)}.deck{max-width:var(--ui-grid-hero-deck-max-width);margin:var(--ui-grid-hero-deck-margin-block-start) 0 0;color:var(--ui-grid-muted-color)}.hero-actions{display:flex;gap:var(--ui-grid-hero-actions-gap);align-items:center;flex-wrap:wrap}.action{border:0;border-radius:var(--ui-grid-action-radius);padding:var(--ui-grid-action-padding-block) var(--ui-grid-action-padding-inline);font:inherit;cursor:pointer}.action-secondary{background:var(--ui-grid-surface);color:var(--ui-grid-cell-color);border:1px solid var(--ui-grid-border-color)}.stats-card{min-width:var(--ui-grid-stats-card-min-width);padding:var(--ui-grid-stats-card-padding-block) var(--ui-grid-stats-card-padding-inline);border-radius:var(--ui-grid-radius);background:var(--ui-grid-surface);border:1px solid var(--ui-grid-border-color);display:grid}.stats-card span{font-size:var(--ui-grid-stats-card-value-font-size);font-weight:700}.stats-card small{color:var(--ui-grid-muted-color)}.grid-frame{display:grid;grid-template-rows:auto minmax(0, 1fr) auto;height:100%;min-height:0;border-radius:var(--ui-grid-radius);background:var(--ui-grid-surface);border:1px solid var(--ui-grid-border-color);box-shadow:var(--ui-grid-shadow);overflow:hidden}.metrics-strip{display:grid;grid-template-columns:repeat(4, minmax(0, 1fr));gap:var(--ui-grid-metrics-gap)}.metrics-strip article{padding:var(--ui-grid-metric-card-padding-block) var(--ui-grid-metric-card-padding-inline);border-radius:var(--ui-grid-radius);background:var(--ui-grid-surface);border:1px solid var(--ui-grid-border-color);display:grid}.metrics-strip strong{font-size:var(--ui-grid-metric-value-font-size)}.metrics-strip span{color:var(--ui-grid-muted-color)}.grid-toolbar{display:flex;justify-content:space-between;gap:var(--ui-grid-toolbar-gap);padding:var(--ui-grid-toolbar-padding-block) var(--ui-grid-toolbar-padding-inline);align-items:center;background:var(--ui-grid-header-background);border-bottom:1px solid var(--ui-grid-border-color)}.grid-toolbar div{display:flex;gap:var(--ui-grid-toolbar-inline-gap);align-items:baseline}.grid-toolbar p{margin:0;color:var(--ui-grid-muted-color)}.grid-table{position:relative;height:100%;min-height:0;width:100%;min-width:0;display:flex;flex-direction:column;background:var(--ui-grid-surface);overflow-anchor:none}.grid-header-strip,.grid-filter-strip{flex:0 0 auto;position:sticky;z-index:var(--ui-grid-header-z-index);background:var(--ui-grid-surface);overflow:hidden}.grid-header-strip{top:0}.grid-filter-strip{top:var(--ui-grid-header-sticky-top, 0px)}.grid-body-viewport{flex:1 1 auto;min-height:0;overflow-x:auto;overflow-anchor:none;overscroll-behavior-x:none}.header-grid,.filter-grid,.body-grid{display:grid;width:100%;min-width:max-content}.header-cell,.filter-cell,.body-cell,.group-row{min-width:0}.header-cell{display:grid;grid-template-columns:minmax(0, 1fr) auto;gap:var(--ui-grid-header-cell-gap);padding:var(--ui-grid-header-cell-padding-block) var(--ui-grid-header-cell-padding-inline);border-bottom:1px solid var(--ui-grid-border-color);background:var(--ui-grid-header-background);font-weight:var(--ui-grid-header-weight);align-items:center;position:relative}.header-cell.is-active{background:var(--ui-grid-header-cell-background-active)}.header-cell[draggable=true]{cursor:grab}.header-cell.is-dragging{opacity:.6}.header-cell.is-drag-target{background:color-mix(in srgb, var(--ui-grid-accent) 9%, var(--ui-grid-header-background));border:1px dashed color-mix(in srgb, var(--ui-grid-accent) 45%, var(--ui-grid-border-color));box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--ui-grid-accent) 18%, transparent)}.header-cell.is-pin-menu-open{z-index:var(--ui-grid-pin-menu-open-z-index)}.header-cell.is-pinned,.filter-cell.is-pinned,.body-cell.is-pinned{position:sticky;z-index:var(--ui-grid-pinned-cell-z-index);background:var(--ui-grid-surface)}.header-cell.is-pinned{background:var(--ui-grid-header-background)}.body-cell.is-pinned.body-cell-odd{background:var(--ui-grid-row-odd)}.body-cell.is-pinned:not(.body-cell-odd){background:var(--ui-grid-row-even)}.header-cell.is-pinned-left-last,.filter-cell.is-pinned-left-last,.body-cell.is-pinned-left-last{box-shadow:var(--ui-grid-pinned-divider-shadow-left);clip-path:var(--ui-grid-pinned-divider-clip-left)}.header-cell.is-pinned-right-first,.filter-cell.is-pinned-right-first,.body-cell.is-pinned-right-first{box-shadow:var(--ui-grid-pinned-divider-shadow-right);clip-path:var(--ui-grid-pinned-divider-clip-right)}.header-label{min-width:0;display:block;white-space:nowrap;overflow:hidden;text-overflow:clip;hyphens:none}.header-actions{display:inline-flex;align-items:center;gap:var(--ui-grid-header-actions-gap);justify-self:end}.column-resizer{position:absolute;top:0;right:-4px;width:8px;height:100%;padding:0;border:0;background:rgba(0,0,0,0);cursor:col-resize;z-index:5}.column-resizer::after{content:"";position:absolute;top:20%;bottom:20%;left:50%;width:2px;transform:translateX(-50%);border-radius:999px;background:color-mix(in srgb, var(--_ui-grid-border-color) 80%, transparent);opacity:0;transition:opacity 120ms ease}.header-cell:hover .column-resizer::after,.column-resizer:focus-visible::after{opacity:1}.pin-control{position:relative;display:inline-grid;place-items:center;justify-items:center;min-width:var(--ui-grid-control-size);overflow:hidden}.header-action,.chip-action{display:inline-flex;align-items:center;justify-content:center;width:var(--ui-grid-control-size);height:var(--ui-grid-control-size);display:flex;border:0;background:var(--ui-grid-control-background);padding:0;font:inherit;border-radius:var(--ui-grid-control-radius);cursor:pointer}.header-action-disabled{cursor:default}.header-action svg,.chip-action svg{width:var(--ui-grid-control-icon-size);height:var(--ui-grid-control-icon-size);fill:currentColor}.header-action{color:var(--ui-grid-control-color);border:1px solid var(--ui-grid-control-border-color)}.header-cell.is-active .header-action{color:var(--ui-grid-control-color-active);border-color:var(--ui-grid-control-border-color-active)}.chip-action{border:1px solid var(--ui-grid-control-border-color);color:var(--ui-grid-control-color)}.chip-action-active{background:var(--ui-grid-control-background-active);border-color:var(--ui-grid-control-border-color-active);color:var(--ui-grid-control-color-active)}.pin-trigger{grid-area:1/1;transform-origin:center;transition:width var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),height var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),opacity var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),transform var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),border-color var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),background-color var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),color var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing)}.pin-menu{grid-area:1/1;z-index:var(--ui-grid-pin-menu-z-index);display:grid;grid-auto-rows:var(--ui-grid-pin-menu-action-size);gap:var(--ui-grid-pin-menu-gap);padding:var(--ui-grid-pin-menu-padding);border:1px solid var(--ui-grid-border-color);border-radius:var(--ui-grid-pin-menu-radius);background:var(--ui-grid-surface);box-shadow:var(--ui-grid-pin-menu-shadow);justify-items:center;align-items:center;width:var(--ui-grid-control-size);max-height:var(--ui-grid-pin-control-collapsed-size);opacity:0;pointer-events:none;transform:scale(var(--ui-grid-pin-menu-scale-closed));transform-origin:center;transition:max-height var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),opacity var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),transform var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),padding var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),border-color var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),box-shadow var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing)}.pin-control-open{align-items:start}.pin-control-open .pin-trigger{width:var(--ui-grid-pin-control-collapsed-size);height:var(--ui-grid-pin-control-collapsed-size);opacity:0;transform:scale(0.72);pointer-events:none}.pin-control-open .pin-menu{max-height:calc(var(--ui-grid-pin-menu-action-size)*2 + var(--ui-grid-pin-menu-gap) + var(--ui-grid-pin-menu-padding)*2);opacity:1;pointer-events:auto;transform:scale(1)}.pin-menu-action{display:inline-flex;align-items:center;justify-content:center;width:var(--ui-grid-pin-menu-action-size);height:var(--ui-grid-pin-menu-action-size);border:0;border-radius:var(--ui-grid-control-radius);background:rgba(0,0,0,0);color:var(--ui-grid-control-color);cursor:pointer}.pin-menu-action:hover,.pin-menu-action:focus-visible{outline:0;background:var(--ui-grid-control-background-active);color:var(--ui-grid-control-color-active)}.pin-menu-action svg{width:var(--ui-grid-control-icon-size);height:var(--ui-grid-control-icon-size);fill:currentColor}.body-cell{padding:var(--ui-grid-body-cell-padding-block) var(--ui-grid-body-cell-padding-inline);border-bottom:1px solid var(--ui-grid-border-color);color:var(--ui-grid-cell-color);background:var(--ui-grid-row-even);outline:0}.body-cell.body-cell-odd{background:var(--ui-grid-row-odd)}.cell-shell{display:flex;align-items:center;gap:var(--ui-grid-cell-shell-gap);min-width:0}.cell-value{min-width:0;flex:1 1 auto}.row-toggle{border:1px solid var(--ui-grid-border-color);background:var(--ui-grid-surface);color:var(--ui-grid-cell-color);width:var(--ui-grid-row-toggle-size);height:var(--ui-grid-row-toggle-size);border-radius:var(--ui-grid-row-toggle-radius);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex:0 0 auto;padding:0;font:inherit}.toggle-icon{width:var(--ui-grid-toggle-icon-size);height:var(--ui-grid-toggle-icon-size);fill:currentColor;pointer-events:none}.group-disclosure-icon{width:var(--ui-grid-group-disclosure-icon-size);height:var(--ui-grid-group-disclosure-icon-size)}.pagination-icon{width:var(--ui-grid-pagination-icon-size);height:var(--ui-grid-pagination-icon-size);fill:currentColor}.expandable-row{padding:var(--ui-grid-expandable-row-padding-block) var(--ui-grid-expandable-row-padding-inline);border-bottom:1px solid var(--ui-grid-border-color);background:var(--ui-grid-expandable-row-background)}.body-grid>.body-cell:hover:not(.row-focused):not(.cell-focused):not(.cell-editing){background:var(--ui-grid-row-hover);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--ui-grid-accent) 10%, transparent)}.body-cell.row-focused,.body-grid>.body-cell.row-focused{background:var(--ui-grid-row-focus-background)}.body-cell.cell-focused,.body-grid>.body-cell.cell-focused{background:var(--ui-grid-cell-focus-background);box-shadow:var(--ui-grid-cell-focus-ring)}.body-cell.cell-editing,.body-grid>.body-cell.cell-editing{background:var(--ui-grid-cell-editing-background)}.cell-editor{display:block;width:100%;min-width:0;max-width:100%;border:1px solid var(--ui-grid-cell-editor-border-color);border-radius:var(--ui-grid-cell-editor-radius);background:var(--ui-grid-surface);color:var(--ui-grid-cell-color);padding:var(--ui-grid-cell-editor-padding-block) var(--ui-grid-cell-editor-padding-inline);font:inherit}.cell-editor:focus{outline:var(--ui-grid-cell-editor-focus-outline)}.grid-viewport{width:100%}.grid-virtual-spacer{position:relative;width:max-content;min-width:100%}.grid-virtual-body{position:absolute;left:0}.body-cell.align-center{text-align:center}.body-cell.align-end{text-align:right}.empty-state{display:grid;place-items:center;gap:var(--ui-grid-empty-state-gap);min-height:var(--ui-grid-empty-state-min-height);text-align:center;padding:var(--ui-grid-empty-state-padding);color:var(--ui-grid-muted-color);background:var(--ui-grid-surface)}.empty-state p,.empty-state strong{margin:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.status-pill{display:inline-flex;align-items:center;justify-content:center;padding:var(--ui-grid-status-pill-padding-block) var(--ui-grid-status-pill-padding-inline);border-radius:var(--ui-grid-status-pill-radius);background:var(--ui-grid-status-pill-default-bg);color:var(--ui-grid-cell-color);font-size:var(--ui-grid-status-pill-font-size);font-weight:700}.status-pill-enterprise{background:var(--ui-grid-status-enterprise-bg);color:var(--ui-grid-status-enterprise-color)}.status-pill-active{background:var(--ui-grid-status-active-bg);color:var(--ui-grid-status-active-color)}.status-pill-expansion{background:var(--ui-grid-status-expansion-bg);color:var(--ui-grid-status-expansion-color)}.status-pill-pilot{background:var(--ui-grid-status-pilot-bg);color:var(--ui-grid-status-pilot-color)}@media(max-width: 900px){.metrics-strip{grid-template-columns:repeat(2, minmax(0, 1fr))}.grid-hero,.grid-toolbar{grid-template-columns:1fr;display:grid}.hero-actions{justify-content:space-between}}@media(max-width: 640px){.metrics-strip{grid-template-columns:1fr}}.ui-grid-row-selected,.body-cell.ui-grid-row-selected{background:var(--ui-grid-row-selected-bg, var(--app-ui-grid-row-selected-bg, color-mix(in srgb, var(--ui-grid-accent, #2563eb) 22%, var(--ui-grid-surface, #ffffff))));color:var(--ui-grid-row-selected-color, var(--app-ui-grid-row-selected-color, var(--ui-grid-cell-color)))}.body-cell.ui-grid-row-selected.body-cell-odd{background:var(--ui-grid-row-selected-bg-odd, var(--app-ui-grid-row-selected-bg-odd, color-mix(in srgb, var(--ui-grid-accent, #2563eb) 26%, var(--ui-grid-surface, #ffffff))))}.ui-grid-row-focused,.body-cell.ui-grid-row-focused{outline:1px dashed var(--ui-grid-accent, #2563eb);outline-offset:-1px}.body-cell[data-column=selectionRowHeaderCol],.header-cell[data-column=selectionRowHeaderCol],.filter-cell[data-column=selectionRowHeaderCol]{padding:0 !important;cursor:pointer;user-select:none;-webkit-user-select:none;display:flex;align-items:center;justify-content:center}.body-cell[data-column=selectionRowHeaderCol]>.cell-shell,.body-cell[data-column=selectionRowHeaderCol]>.cell-shell>.cell-content{padding:0 !important;padding-inline-start:0 !important;margin:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.filter-cell[data-column=selectionRowHeaderCol]{padding:0;background:var(--_ui-grid-header-background, var(--ui-grid-header-background, transparent));border-bottom:1px solid var(--_ui-grid-border-color, var(--ui-grid-border-color, transparent))}.ui-grid-selection-row-header-buttons{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;cursor:pointer}.ui-grid-selection-checkbox{display:inline-block;width:16px;height:16px;box-sizing:border-box;border:2px solid currentColor;border-radius:3px;background:rgba(0,0,0,0);color:var(--ui-grid-cell-color, currentColor);position:relative;transition:background 120ms ease,border-color 120ms ease,color 120ms ease;opacity:.7}.ui-grid-selection-row-header-buttons:hover .ui-grid-selection-checkbox{opacity:1;color:var(--ui-grid-accent, var(--_ui-grid-accent, #2563eb))}.ui-grid-selection-checkbox-checked{background:var(--ui-grid-accent, var(--_ui-grid-accent, #2563eb));color:var(--ui-grid-accent, var(--_ui-grid-accent, #2563eb));border-color:var(--ui-grid-accent, var(--_ui-grid-accent, #2563eb));opacity:1}.ui-grid-selection-checkbox-checked::after{content:"";position:absolute;left:3px;top:0;width:5px;height:9px;border:2px solid var(--ui-grid-surface, var(--_ui-grid-surface, #ffffff));border-top:0;border-left:0;transform:rotate(45deg)}.ui-grid-selection-checkbox-disabled{opacity:.3;cursor:not-allowed}.ui-grid-selection-select-all{display:inline-flex;align-items:center;justify-content:center;background:rgba(0,0,0,0);border:0;padding:0;margin:0;cursor:pointer;width:100%;height:100%}.ui-grid-selection-select-all:focus-visible{outline:2px solid var(--_ui-grid-accent, var(--ui-grid-accent, #2563eb));outline-offset:-2px}.grid-body-viewport:has([data-column=selectionRowHeaderCol]){user-select:none;-webkit-user-select:none}.body-cell.ui-grid-row-dirty{color:var(--ui-grid-row-dirty-color, var(--app-ui-grid-row-dirty-color, #610B38));background:var(--ui-grid-row-dirty-bg, var(--app-ui-grid-row-dirty-bg, color-mix(in srgb, var(--ui-grid-accent, #2563eb) 8%, var(--ui-grid-surface, #ffffff))))}.body-cell.ui-grid-row-saving{color:var(--ui-grid-row-saving-color, var(--app-ui-grid-row-saving-color, #848484)) !important;opacity:var(--ui-grid-row-saving-opacity, 0.75);cursor:progress}.body-cell.ui-grid-row-error{color:var(--ui-grid-row-error-color, var(--app-ui-grid-row-error-color, #FF0000)) !important;background:var(--ui-grid-row-error-bg, var(--app-ui-grid-row-error-bg, color-mix(in srgb, #ff0000 14%, var(--ui-grid-surface, #ffffff))))}.body-cell.ui-grid-cell-invalid{position:relative;background:var(--ui-grid-cell-invalid-bg, var(--app-ui-grid-cell-invalid-bg, color-mix(in srgb, #ff0000 10%, var(--ui-grid-surface, #ffffff))))}.body-cell.ui-grid-cell-invalid::after{content:"";position:absolute;top:0;right:0;width:0;height:0;border-style:solid;border-width:0 var(--ui-grid-cell-invalid-marker-size, 8px) var(--ui-grid-cell-invalid-marker-size, 8px) 0;border-color:rgba(0,0,0,0) var(--ui-grid-cell-invalid-marker-color, #ff0000) rgba(0,0,0,0) rgba(0,0,0,0);pointer-events:none}.filter-cell{padding:var(--ui-grid-filter-cell-padding-block-start) var(--ui-grid-filter-cell-padding-inline) var(--ui-grid-filter-cell-padding-block-end);border-bottom:1px solid var(--ui-grid-border-color);background:var(--ui-grid-header-background)}.filter-cell input{width:100%;min-width:0;box-sizing:border-box;border:1px solid var(--ui-grid-border-color);border-radius:var(--ui-grid-radius);background:var(--ui-grid-surface);padding:var(--ui-grid-filter-input-padding-block) var(--ui-grid-filter-input-padding-inline);font:inherit}.filter-cell input:focus{outline:var(--ui-grid-filter-input-focus-outline);border-color:var(--ui-grid-accent)}.group-row{display:flex;align-items:center;gap:var(--ui-grid-group-row-gap);border:0;width:100%;padding:var(--ui-grid-group-row-padding-block) var(--ui-grid-group-row-padding-inline);background:var(--ui-grid-group-background);border-bottom:1px solid var(--ui-grid-border-color);color:var(--ui-grid-cell-color);cursor:pointer;text-align:left}.group-row span,.group-row small{color:var(--ui-grid-muted-color)}.pagination-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-grid-pagination-gap);padding:var(--ui-grid-pagination-padding-block) var(--ui-grid-pagination-padding-inline);border-top:1px solid var(--ui-grid-border-color);background:var(--ui-grid-header-background)}.pagination-bar p{margin:0;color:var(--ui-grid-muted-color)}.pagination-controls{display:flex;align-items:center;gap:var(--ui-grid-pagination-controls-gap);flex-wrap:wrap}.pagination-button{padding:var(--ui-grid-pagination-button-padding-block) var(--ui-grid-pagination-button-padding-inline)}.pagination-size{display:inline-flex;align-items:center;gap:var(--ui-grid-pagination-size-gap)}.pagination-size select{border:1px solid var(--ui-grid-border-color);border-radius:var(--ui-grid-radius);background:var(--ui-grid-surface);padding:var(--ui-grid-pagination-select-padding-block) var(--ui-grid-pagination-select-padding-inline);font:inherit}';
|
|
4215
|
-
|
|
4216
4327
|
// src/adopt-styles.ts
|
|
4217
4328
|
var sheetsSupported = null;
|
|
4218
4329
|
function supportsAdoptedStyleSheets() {
|
|
@@ -4246,9 +4357,36 @@ function adoptStyles(shadowRoot, css, key) {
|
|
|
4246
4357
|
sheetCache.set(key, sheet);
|
|
4247
4358
|
}
|
|
4248
4359
|
if (!shadowRoot.adoptedStyleSheets.includes(sheet)) {
|
|
4249
|
-
shadowRoot.adoptedStyleSheets
|
|
4360
|
+
const own = shadowRoot.adoptedStyleSheets.filter((s) => !isUserSheet(shadowRoot, s));
|
|
4361
|
+
shadowRoot.adoptedStyleSheets = [...own, sheet, ...userSheetsOf(shadowRoot)];
|
|
4250
4362
|
}
|
|
4251
4363
|
}
|
|
4364
|
+
var userSheets = /* @__PURE__ */ new WeakMap();
|
|
4365
|
+
function userSheetsOf(shadowRoot) {
|
|
4366
|
+
return userSheets.get(shadowRoot) ?? [];
|
|
4367
|
+
}
|
|
4368
|
+
function isUserSheet(shadowRoot, sheet) {
|
|
4369
|
+
return userSheetsOf(shadowRoot).includes(sheet);
|
|
4370
|
+
}
|
|
4371
|
+
function addUserStyles(shadowRoot, css) {
|
|
4372
|
+
if (!supportsAdoptedStyleSheets()) {
|
|
4373
|
+
const styleEl = document.createElement("style");
|
|
4374
|
+
styleEl.textContent = css;
|
|
4375
|
+
shadowRoot.append(styleEl);
|
|
4376
|
+
return () => styleEl.remove();
|
|
4377
|
+
}
|
|
4378
|
+
const sheet = new CSSStyleSheet();
|
|
4379
|
+
sheet.replaceSync(css);
|
|
4380
|
+
userSheets.set(shadowRoot, [...userSheetsOf(shadowRoot), sheet]);
|
|
4381
|
+
shadowRoot.adoptedStyleSheets = [...shadowRoot.adoptedStyleSheets, sheet];
|
|
4382
|
+
return () => {
|
|
4383
|
+
userSheets.set(shadowRoot, userSheetsOf(shadowRoot).filter((s) => s !== sheet));
|
|
4384
|
+
shadowRoot.adoptedStyleSheets = shadowRoot.adoptedStyleSheets.filter((s) => s !== sheet);
|
|
4385
|
+
};
|
|
4386
|
+
}
|
|
4387
|
+
|
|
4388
|
+
// scss-inline:/home/runner/work/ui-grid/ui-grid/projects/ui-grid-vanilla/src/ui-grid-shell.scss
|
|
4389
|
+
var ui_grid_shell_default = ':host{--_ui-grid-border-color: var(--ui-grid-border-color, var(--app-ui-grid-border-color, #d4d4d8));--_ui-grid-header-background: var( --ui-grid-header-background, var(--app-ui-grid-header-background, #f3f4f6) );--_ui-grid-row-odd: var(--ui-grid-row-odd, var(--app-ui-grid-row-odd, #fcfcfd));--_ui-grid-row-even: var(--ui-grid-row-even, var(--app-ui-grid-row-even, #f7f7f8));--_ui-grid-row-hover: var( --ui-grid-row-hover, var( --app-ui-grid-row-hover, color-mix(in srgb, var(--_ui-grid-accent) 4%, var(--_ui-grid-surface)) ) );--_ui-grid-row-focus-background: var( --ui-grid-row-focus-background, var( --app-ui-grid-row-focus-background, color-mix(in srgb, var(--_ui-grid-accent) 9%, var(--_ui-grid-surface)) ) );--_ui-grid-cell-color: var(--ui-grid-cell-color, var(--app-ui-grid-cell-color, #111827));--_ui-grid-muted-color: var(--ui-grid-muted-color, var(--app-ui-grid-muted-color, #6b7280));--_ui-grid-surface: var(--ui-grid-surface, var(--app-ui-grid-surface, #ffffff));--_ui-grid-radius: var(--ui-grid-radius, var(--app-ui-grid-radius, 4px));--_ui-grid-shadow: var( --ui-grid-shadow, var(--app-ui-grid-shadow, 0 10px 24px rgba(15, 23, 42, 0.08)) );--_ui-grid-header-weight: var(--ui-grid-header-weight, var(--app-ui-grid-header-weight, 700));--_ui-grid-accent: var(--ui-grid-accent, var(--app-ui-grid-accent, #2563eb));--_ui-grid-group-background: var( --ui-grid-group-background, var(--app-ui-grid-group-background, #eceff3) );--_ui-grid-status-active-bg: var( --ui-grid-status-active-bg, var(--app-ui-grid-status-active-bg, rgba(22, 163, 74, 0.14)) );--_ui-grid-status-active-color: var( --ui-grid-status-active-color, var(--app-ui-grid-status-active-color, #166534) );--_ui-grid-status-expansion-bg: var( --ui-grid-status-expansion-bg, var(--app-ui-grid-status-expansion-bg, rgba(37, 99, 235, 0.14)) );--_ui-grid-status-expansion-color: var( --ui-grid-status-expansion-color, var(--app-ui-grid-status-expansion-color, #1d4ed8) );--_ui-grid-status-enterprise-bg: var( --ui-grid-status-enterprise-bg, var(--app-ui-grid-status-enterprise-bg, rgba(15, 118, 110, 0.14)) );--_ui-grid-status-enterprise-color: var( --ui-grid-status-enterprise-color, var(--app-ui-grid-status-enterprise-color, #115e59) );--_ui-grid-status-pilot-bg: var( --ui-grid-status-pilot-bg, var(--app-ui-grid-status-pilot-bg, rgba(234, 88, 12, 0.14)) );--_ui-grid-status-pilot-color: var( --ui-grid-status-pilot-color, var(--app-ui-grid-status-pilot-color, #c2410c) );--_ui-grid-shell-gap: var(--ui-grid-shell-gap, var(--app-ui-grid-shell-gap, 1.5rem));--_ui-grid-hero-gap: var(--ui-grid-hero-gap, var(--app-ui-grid-hero-gap, 1.5rem));--_ui-grid-hero-padding-block: var( --ui-grid-hero-padding-block, var(--app-ui-grid-hero-padding-block, 1rem) );--_ui-grid-eyebrow-margin-block-end: var( --ui-grid-eyebrow-margin-block-end, var(--app-ui-grid-eyebrow-margin-block-end, 0.5rem) );--_ui-grid-eyebrow-letter-spacing: var( --ui-grid-eyebrow-letter-spacing, var(--app-ui-grid-eyebrow-letter-spacing, 0.18em) );--_ui-grid-eyebrow-font-size: var( --ui-grid-eyebrow-font-size, var(--app-ui-grid-eyebrow-font-size, 0.72rem) );--_ui-grid-hero-title-font-size: var( --ui-grid-hero-title-font-size, var(--app-ui-grid-hero-title-font-size, clamp(1.4rem, 2vw, 2rem)) );--_ui-grid-hero-title-line-height: var( --ui-grid-hero-title-line-height, var(--app-ui-grid-hero-title-line-height, 1.1) );--_ui-grid-hero-deck-max-width: var( --ui-grid-hero-deck-max-width, var(--app-ui-grid-hero-deck-max-width, 56ch) );--_ui-grid-hero-deck-margin-block-start: var( --ui-grid-hero-deck-margin-block-start, var(--app-ui-grid-hero-deck-margin-block-start, 0.75rem) );--_ui-grid-hero-actions-gap: var( --ui-grid-hero-actions-gap, var(--app-ui-grid-hero-actions-gap, 1rem) );--_ui-grid-action-radius: var(--ui-grid-action-radius, var(--app-ui-grid-action-radius, 999px));--_ui-grid-action-padding-block: var( --ui-grid-action-padding-block, var(--app-ui-grid-action-padding-block, 0.8rem) );--_ui-grid-action-padding-inline: var( --ui-grid-action-padding-inline, var(--app-ui-grid-action-padding-inline, 1.1rem) );--_ui-grid-stats-card-min-width: var( --ui-grid-stats-card-min-width, var(--app-ui-grid-stats-card-min-width, 8rem) );--_ui-grid-stats-card-padding-block: var( --ui-grid-stats-card-padding-block, var(--app-ui-grid-stats-card-padding-block, 0.85rem) );--_ui-grid-stats-card-padding-inline: var( --ui-grid-stats-card-padding-inline, var(--app-ui-grid-stats-card-padding-inline, 1rem) );--_ui-grid-stats-card-value-font-size: var( --ui-grid-stats-card-value-font-size, var(--app-ui-grid-stats-card-value-font-size, 1.9rem) );--_ui-grid-metrics-gap: var(--ui-grid-metrics-gap, var(--app-ui-grid-metrics-gap, 1rem));--_ui-grid-metric-card-padding-block: var( --ui-grid-metric-card-padding-block, var(--app-ui-grid-metric-card-padding-block, 1rem) );--_ui-grid-metric-card-padding-inline: var( --ui-grid-metric-card-padding-inline, var(--app-ui-grid-metric-card-padding-inline, 1.1rem) );--_ui-grid-metric-value-font-size: var( --ui-grid-metric-value-font-size, var(--app-ui-grid-metric-value-font-size, 1.3rem) );--_ui-grid-toolbar-gap: var(--ui-grid-toolbar-gap, var(--app-ui-grid-toolbar-gap, 1rem));--_ui-grid-toolbar-padding-block: var( --ui-grid-toolbar-padding-block, var(--app-ui-grid-toolbar-padding-block, 1rem) );--_ui-grid-toolbar-padding-inline: var( --ui-grid-toolbar-padding-inline, var(--app-ui-grid-toolbar-padding-inline, 1.25rem) );--_ui-grid-toolbar-inline-gap: var( --ui-grid-toolbar-inline-gap, var(--app-ui-grid-toolbar-inline-gap, 0.4rem) );--_ui-grid-overflow-x: var(--ui-grid-overflow-x, var(--app-ui-grid-overflow-x, auto));--_ui-grid-overflow-y: var(--ui-grid-overflow-y, var(--app-ui-grid-overflow-y, auto));--_ui-grid-header-z-index: var(--ui-grid-header-z-index, var(--app-ui-grid-header-z-index, 3));--_ui-grid-pinned-cell-z-index: var( --ui-grid-pinned-cell-z-index, var(--app-ui-grid-pinned-cell-z-index, 2) );--_ui-grid-pin-menu-open-z-index: var( --ui-grid-pin-menu-open-z-index, var(--app-ui-grid-pin-menu-open-z-index, 8) );--_ui-grid-pin-menu-z-index: var(--ui-grid-pin-menu-z-index, var(--app-ui-grid-pin-menu-z-index, 20));--_ui-grid-header-cell-gap: var( --ui-grid-header-cell-gap, var(--app-ui-grid-header-cell-gap, 0.75rem) );--_ui-grid-header-cell-padding-block: var( --ui-grid-header-cell-padding-block, var(--app-ui-grid-header-cell-padding-block, 0.85rem) );--_ui-grid-header-cell-padding-inline: var( --ui-grid-header-cell-padding-inline, var(--app-ui-grid-header-cell-padding-inline, 1rem) );--_ui-grid-header-cell-background-active: var( --ui-grid-header-cell-background-active, var( --app-ui-grid-header-cell-background-active, color-mix(in srgb, var(--_ui-grid-accent) 8%, var(--_ui-grid-header-background)) ) );--_ui-grid-pinned-divider-shadow-left: var( --ui-grid-pinned-divider-shadow-left, var( --app-ui-grid-pinned-divider-shadow-left, 2px 0 4px rgba(0, 0, 0, 0.06) ) );--_ui-grid-pinned-divider-shadow-right: var( --ui-grid-pinned-divider-shadow-right, var( --app-ui-grid-pinned-divider-shadow-right, -2px 0 4px rgba(0, 0, 0, 0.06) ) );--_ui-grid-pinned-divider-clip-left: var( --ui-grid-pinned-divider-clip-left, var(--app-ui-grid-pinned-divider-clip-left, inset(0 -4px 0 0)) );--_ui-grid-pinned-divider-clip-right: var( --ui-grid-pinned-divider-clip-right, var(--app-ui-grid-pinned-divider-clip-right, inset(0 0 0 -4px)) );--_ui-grid-header-actions-gap: var( --ui-grid-header-actions-gap, var(--app-ui-grid-header-actions-gap, 0.4rem) );--_ui-grid-control-size: var(--ui-grid-control-size, var(--app-ui-grid-control-size, 2rem));--_ui-grid-control-radius: var( --ui-grid-control-radius, var(--app-ui-grid-control-radius, 999px) );--_ui-grid-control-icon-size: var( --ui-grid-control-icon-size, var(--app-ui-grid-control-icon-size, 1rem) );--_ui-grid-control-background: var( --ui-grid-control-background, var(--app-ui-grid-control-background, var(--_ui-grid-surface)) );--_ui-grid-control-border-color: var( --ui-grid-control-border-color, var(--app-ui-grid-control-border-color, var(--_ui-grid-border-color)) );--_ui-grid-control-color: var( --ui-grid-control-color, var(--app-ui-grid-control-color, var(--_ui-grid-muted-color)) );--_ui-grid-control-background-active: var( --ui-grid-control-background-active, var( --app-ui-grid-control-background-active, color-mix(in srgb, var(--_ui-grid-accent) 12%, var(--_ui-grid-surface)) ) );--_ui-grid-control-border-color-active: var( --ui-grid-control-border-color-active, var( --app-ui-grid-control-border-color-active, color-mix(in srgb, var(--_ui-grid-accent) 35%, var(--_ui-grid-border-color)) ) );--_ui-grid-control-color-active: var( --ui-grid-control-color-active, var(--app-ui-grid-control-color-active, var(--_ui-grid-accent)) );--_ui-grid-pin-menu-offset-block-start: var( --ui-grid-pin-menu-offset-block-start, var(--app-ui-grid-pin-menu-offset-block-start, 0.35rem) );--_ui-grid-pin-menu-gap: var(--ui-grid-pin-menu-gap, var(--app-ui-grid-pin-menu-gap, 0.25rem));--_ui-grid-pin-menu-padding: var( --ui-grid-pin-menu-padding, var(--app-ui-grid-pin-menu-padding, 0.25rem) );--_ui-grid-pin-menu-radius: var(--ui-grid-pin-menu-radius, var(--app-ui-grid-pin-menu-radius, 999px));--_ui-grid-pin-menu-shadow: var( --ui-grid-pin-menu-shadow, var( --app-ui-grid-pin-menu-shadow, 0 10px 24px color-mix(in srgb, var(--_ui-grid-cell-color) 10%, transparent) ) );--_ui-grid-pin-menu-direction: var( --ui-grid-pin-menu-direction, var(--app-ui-grid-pin-menu-direction, row) );--_ui-grid-pin-menu-action-size: var( --ui-grid-pin-menu-action-size, var(--app-ui-grid-pin-menu-action-size, 1.75rem) );--_ui-grid-pin-control-collapsed-size: var( --ui-grid-pin-control-collapsed-size, var(--app-ui-grid-pin-control-collapsed-size, 1px) );--_ui-grid-pin-control-transition-duration: var( --ui-grid-pin-control-transition-duration, var(--app-ui-grid-pin-control-transition-duration, 160ms) );--_ui-grid-pin-control-transition-easing: var( --ui-grid-pin-control-transition-easing, var(--app-ui-grid-pin-control-transition-easing, cubic-bezier(0.22, 1, 0.36, 1)) );--_ui-grid-pin-menu-scale-closed: var( --ui-grid-pin-menu-scale-closed, var(--app-ui-grid-pin-menu-scale-closed, 0.72) );--_ui-grid-filter-cell-padding-block-start: var( --ui-grid-filter-cell-padding-block-start, var(--app-ui-grid-filter-cell-padding-block-start, 0.75rem) );--_ui-grid-filter-cell-padding-block-end: var( --ui-grid-filter-cell-padding-block-end, var(--app-ui-grid-filter-cell-padding-block-end, 1rem) );--_ui-grid-filter-cell-padding-inline: var( --ui-grid-filter-cell-padding-inline, var(--app-ui-grid-filter-cell-padding-inline, 1rem) );--_ui-grid-filter-input-padding-block: var( --ui-grid-filter-input-padding-block, var(--app-ui-grid-filter-input-padding-block, 0.55rem) );--_ui-grid-filter-input-padding-inline: var( --ui-grid-filter-input-padding-inline, var(--app-ui-grid-filter-input-padding-inline, 0.7rem) );--_ui-grid-filter-input-focus-outline: var( --ui-grid-filter-input-focus-outline, var( --app-ui-grid-filter-input-focus-outline, 2px solid color-mix(in srgb, var(--_ui-grid-accent) 18%, transparent) ) );--_ui-grid-body-cell-padding-block: var( --ui-grid-body-cell-padding-block, var(--app-ui-grid-body-cell-padding-block, 0.95rem) );--_ui-grid-body-cell-padding-inline: var( --ui-grid-body-cell-padding-inline, var(--app-ui-grid-body-cell-padding-inline, 1rem) );--_ui-grid-body-cell-align: var(--ui-grid-body-cell-align, var(--app-ui-grid-body-cell-align, start));--_ui-grid-cell-shell-gap: var(--ui-grid-cell-shell-gap, var(--app-ui-grid-cell-shell-gap, 0.55rem));--_ui-grid-row-toggle-size: var(--ui-grid-row-toggle-size, var(--app-ui-grid-row-toggle-size, 1.55rem));--_ui-grid-row-toggle-radius: var( --ui-grid-row-toggle-radius, var(--app-ui-grid-row-toggle-radius, 999px) );--_ui-grid-toggle-icon-size: var( --ui-grid-toggle-icon-size, var(--app-ui-grid-toggle-icon-size, 1.1rem) );--_ui-grid-group-disclosure-icon-size: var( --ui-grid-group-disclosure-icon-size, var(--app-ui-grid-group-disclosure-icon-size, 0.9rem) );--_ui-grid-pagination-icon-size: var( --ui-grid-pagination-icon-size, var(--app-ui-grid-pagination-icon-size, 1.2rem) );--_ui-grid-expandable-row-padding-block: var( --ui-grid-expandable-row-padding-block, var(--app-ui-grid-expandable-row-padding-block, 1rem) );--_ui-grid-expandable-row-padding-inline: var( --ui-grid-expandable-row-padding-inline, var(--app-ui-grid-expandable-row-padding-inline, 1.25rem) );--_ui-grid-expandable-row-background: var( --ui-grid-expandable-row-background, var( --app-ui-grid-expandable-row-background, color-mix(in srgb, var(--_ui-grid-accent) 4%, var(--_ui-grid-surface)) ) );--_ui-grid-cell-focus-background: var( --ui-grid-cell-focus-background, var( --app-ui-grid-cell-focus-background, color-mix(in srgb, var(--_ui-grid-accent) 14%, var(--_ui-grid-surface)) ) );--_ui-grid-cell-focus-ring: var( --ui-grid-cell-focus-ring, var( --app-ui-grid-cell-focus-ring, inset 0 0 0 1px color-mix(in srgb, var(--_ui-grid-accent) 28%, transparent) ) );--_ui-grid-cell-editing-background: var( --ui-grid-cell-editing-background, var( --app-ui-grid-cell-editing-background, color-mix(in srgb, var(--_ui-grid-accent) 7%, var(--_ui-grid-surface)) ) );--_ui-grid-cell-editor-border-color: var( --ui-grid-cell-editor-border-color, var( --app-ui-grid-cell-editor-border-color, color-mix(in srgb, var(--_ui-grid-accent) 45%, var(--_ui-grid-border-color)) ) );--_ui-grid-cell-editor-radius: var( --ui-grid-cell-editor-radius, var(--app-ui-grid-cell-editor-radius, calc(var(--_ui-grid-radius) - 1px)) );--_ui-grid-cell-editor-padding-block: var( --ui-grid-cell-editor-padding-block, var(--app-ui-grid-cell-editor-padding-block, 0.45rem) );--_ui-grid-cell-editor-padding-inline: var( --ui-grid-cell-editor-padding-inline, var(--app-ui-grid-cell-editor-padding-inline, 0.55rem) );--_ui-grid-cell-editor-focus-outline: var( --ui-grid-cell-editor-focus-outline, var( --app-ui-grid-cell-editor-focus-outline, 2px solid color-mix(in srgb, var(--_ui-grid-accent) 18%, transparent) ) );--_ui-grid-group-row-gap: var(--ui-grid-group-row-gap, var(--app-ui-grid-group-row-gap, 0.9rem));--_ui-grid-group-row-padding-block: var( --ui-grid-group-row-padding-block, var(--app-ui-grid-group-row-padding-block, 0.9rem) );--_ui-grid-group-row-padding-inline: var( --ui-grid-group-row-padding-inline, var(--app-ui-grid-group-row-padding-inline, 1rem) );--_ui-grid-drag-preview-shadow: var( --ui-grid-drag-preview-shadow, var(--app-ui-grid-drag-preview-shadow, 0 12px 30px rgba(15, 23, 42, 0.16)) );--_ui-grid-drag-preview-radius: var( --ui-grid-drag-preview-radius, var(--app-ui-grid-drag-preview-radius, 0.9rem) );--_ui-grid-drag-placeholder-opacity: var( --ui-grid-drag-placeholder-opacity, var(--app-ui-grid-drag-placeholder-opacity, 0.3) );--_ui-grid-drag-placeholder-background: var( --ui-grid-drag-placeholder-background, var( --app-ui-grid-drag-placeholder-background, color-mix(in srgb, var(--_ui-grid-accent) 9%, var(--_ui-grid-header-background)) ) );--_ui-grid-drag-placeholder-border: var( --ui-grid-drag-placeholder-border, var( --app-ui-grid-drag-placeholder-border, 1px dashed color-mix(in srgb, var(--_ui-grid-accent) 45%, var(--_ui-grid-border-color)) ) );--_ui-grid-drag-placeholder-shadow: var( --ui-grid-drag-placeholder-shadow, var( --app-ui-grid-drag-placeholder-shadow, inset 0 0 0 1px color-mix(in srgb, var(--_ui-grid-accent) 18%, transparent) ) );--_ui-grid-empty-state-gap: var( --ui-grid-empty-state-gap, var(--app-ui-grid-empty-state-gap, 0.35rem) );--_ui-grid-empty-state-min-height: var( --ui-grid-empty-state-min-height, var(--app-ui-grid-empty-state-min-height, 16rem) );--_ui-grid-empty-state-padding: var( --ui-grid-empty-state-padding, var(--app-ui-grid-empty-state-padding, 2rem) );--_ui-grid-pagination-gap: var(--ui-grid-pagination-gap, var(--app-ui-grid-pagination-gap, 1rem));--_ui-grid-pagination-padding-block: var( --ui-grid-pagination-padding-block, var(--app-ui-grid-pagination-padding-block, 0.85rem) );--_ui-grid-pagination-padding-inline: var( --ui-grid-pagination-padding-inline, var(--app-ui-grid-pagination-padding-inline, 1.25rem) );--_ui-grid-pagination-controls-gap: var( --ui-grid-pagination-controls-gap, var(--app-ui-grid-pagination-controls-gap, 0.75rem) );--_ui-grid-pagination-size-gap: var( --ui-grid-pagination-size-gap, var(--app-ui-grid-pagination-size-gap, 0.4rem) );--_ui-grid-pagination-button-padding-block: var( --ui-grid-pagination-button-padding-block, var(--app-ui-grid-pagination-button-padding-block, 0.45rem) );--_ui-grid-pagination-button-padding-inline: var( --ui-grid-pagination-button-padding-inline, var(--app-ui-grid-pagination-button-padding-inline, 0.8rem) );--_ui-grid-pagination-select-padding-block: var( --ui-grid-pagination-select-padding-block, var(--app-ui-grid-pagination-select-padding-block, 0.35rem) );--_ui-grid-pagination-select-padding-inline: var( --ui-grid-pagination-select-padding-inline, var(--app-ui-grid-pagination-select-padding-inline, 0.55rem) );--_ui-grid-status-pill-padding-block: var( --ui-grid-status-pill-padding-block, var(--app-ui-grid-status-pill-padding-block, 0.2rem) );--_ui-grid-status-pill-padding-inline: var( --ui-grid-status-pill-padding-inline, var(--app-ui-grid-status-pill-padding-inline, 0.55rem) );--_ui-grid-status-pill-radius: var( --ui-grid-status-pill-radius, var(--app-ui-grid-status-pill-radius, 999px) );--_ui-grid-status-pill-font-size: var( --ui-grid-status-pill-font-size, var(--app-ui-grid-status-pill-font-size, 0.85rem) );--_ui-grid-status-pill-default-bg: var( --ui-grid-status-pill-default-bg, var(--app-ui-grid-status-pill-default-bg, rgba(15, 23, 42, 0.07)) );display:block;color:var(--_ui-grid-cell-color)}:host *,:host *::before,:host *::after{--ui-grid-border-color: var(--_ui-grid-border-color);--ui-grid-header-background: var(--_ui-grid-header-background);--ui-grid-row-odd: var(--_ui-grid-row-odd);--ui-grid-row-even: var(--_ui-grid-row-even);--ui-grid-row-hover: var(--_ui-grid-row-hover);--ui-grid-row-focus-background: var(--_ui-grid-row-focus-background);--ui-grid-cell-color: var(--_ui-grid-cell-color);--ui-grid-muted-color: var(--_ui-grid-muted-color);--ui-grid-surface: var(--_ui-grid-surface);--ui-grid-radius: var(--_ui-grid-radius);--ui-grid-shadow: var(--_ui-grid-shadow);--ui-grid-header-weight: var(--_ui-grid-header-weight);--ui-grid-accent: var(--_ui-grid-accent);--ui-grid-group-background: var(--_ui-grid-group-background);--ui-grid-status-active-bg: var(--_ui-grid-status-active-bg);--ui-grid-status-active-color: var(--_ui-grid-status-active-color);--ui-grid-status-expansion-bg: var(--_ui-grid-status-expansion-bg);--ui-grid-status-expansion-color: var(--_ui-grid-status-expansion-color);--ui-grid-status-enterprise-bg: var(--_ui-grid-status-enterprise-bg);--ui-grid-status-enterprise-color: var(--_ui-grid-status-enterprise-color);--ui-grid-status-pilot-bg: var(--_ui-grid-status-pilot-bg);--ui-grid-status-pilot-color: var(--_ui-grid-status-pilot-color);--ui-grid-shell-gap: var(--_ui-grid-shell-gap);--ui-grid-hero-gap: var(--_ui-grid-hero-gap);--ui-grid-hero-padding-block: var(--_ui-grid-hero-padding-block);--ui-grid-eyebrow-margin-block-end: var(--_ui-grid-eyebrow-margin-block-end);--ui-grid-eyebrow-letter-spacing: var(--_ui-grid-eyebrow-letter-spacing);--ui-grid-eyebrow-font-size: var(--_ui-grid-eyebrow-font-size);--ui-grid-hero-title-font-size: var(--_ui-grid-hero-title-font-size);--ui-grid-hero-title-line-height: var(--_ui-grid-hero-title-line-height);--ui-grid-hero-deck-max-width: var(--_ui-grid-hero-deck-max-width);--ui-grid-hero-deck-margin-block-start: var(--_ui-grid-hero-deck-margin-block-start);--ui-grid-hero-actions-gap: var(--_ui-grid-hero-actions-gap);--ui-grid-action-radius: var(--_ui-grid-action-radius);--ui-grid-action-padding-block: var(--_ui-grid-action-padding-block);--ui-grid-action-padding-inline: var(--_ui-grid-action-padding-inline);--ui-grid-stats-card-min-width: var(--_ui-grid-stats-card-min-width);--ui-grid-stats-card-padding-block: var(--_ui-grid-stats-card-padding-block);--ui-grid-stats-card-padding-inline: var(--_ui-grid-stats-card-padding-inline);--ui-grid-stats-card-value-font-size: var(--_ui-grid-stats-card-value-font-size);--ui-grid-metrics-gap: var(--_ui-grid-metrics-gap);--ui-grid-metric-card-padding-block: var(--_ui-grid-metric-card-padding-block);--ui-grid-metric-card-padding-inline: var(--_ui-grid-metric-card-padding-inline);--ui-grid-metric-value-font-size: var(--_ui-grid-metric-value-font-size);--ui-grid-toolbar-gap: var(--_ui-grid-toolbar-gap);--ui-grid-toolbar-padding-block: var(--_ui-grid-toolbar-padding-block);--ui-grid-toolbar-padding-inline: var(--_ui-grid-toolbar-padding-inline);--ui-grid-toolbar-inline-gap: var(--_ui-grid-toolbar-inline-gap);--ui-grid-overflow-x: var(--_ui-grid-overflow-x);--ui-grid-overflow-y: var(--_ui-grid-overflow-y);--ui-grid-header-z-index: var(--_ui-grid-header-z-index);--ui-grid-pinned-cell-z-index: var(--_ui-grid-pinned-cell-z-index);--ui-grid-pin-menu-open-z-index: var(--_ui-grid-pin-menu-open-z-index);--ui-grid-pin-menu-z-index: var(--_ui-grid-pin-menu-z-index);--ui-grid-header-cell-gap: var(--_ui-grid-header-cell-gap);--ui-grid-header-cell-padding-block: var(--_ui-grid-header-cell-padding-block);--ui-grid-header-cell-padding-inline: var(--_ui-grid-header-cell-padding-inline);--ui-grid-header-cell-background-active: var(--_ui-grid-header-cell-background-active);--ui-grid-pinned-divider-shadow-left: var(--_ui-grid-pinned-divider-shadow-left);--ui-grid-pinned-divider-shadow-right: var(--_ui-grid-pinned-divider-shadow-right);--ui-grid-pinned-divider-clip-left: var(--_ui-grid-pinned-divider-clip-left);--ui-grid-pinned-divider-clip-right: var(--_ui-grid-pinned-divider-clip-right);--ui-grid-header-actions-gap: var(--_ui-grid-header-actions-gap);--ui-grid-control-size: var(--_ui-grid-control-size);--ui-grid-control-radius: var(--_ui-grid-control-radius);--ui-grid-control-icon-size: var(--_ui-grid-control-icon-size);--ui-grid-control-background: var(--_ui-grid-control-background);--ui-grid-control-border-color: var(--_ui-grid-control-border-color);--ui-grid-control-color: var(--_ui-grid-control-color);--ui-grid-control-background-active: var(--_ui-grid-control-background-active);--ui-grid-control-border-color-active: var(--_ui-grid-control-border-color-active);--ui-grid-control-color-active: var(--_ui-grid-control-color-active);--ui-grid-pin-menu-offset-block-start: var(--_ui-grid-pin-menu-offset-block-start);--ui-grid-pin-menu-gap: var(--_ui-grid-pin-menu-gap);--ui-grid-pin-menu-padding: var(--_ui-grid-pin-menu-padding);--ui-grid-pin-menu-radius: var(--_ui-grid-pin-menu-radius);--ui-grid-pin-menu-shadow: var(--_ui-grid-pin-menu-shadow);--ui-grid-pin-menu-direction: var(--_ui-grid-pin-menu-direction);--ui-grid-pin-menu-action-size: var(--_ui-grid-pin-menu-action-size);--ui-grid-pin-control-collapsed-size: var(--_ui-grid-pin-control-collapsed-size);--ui-grid-pin-control-transition-duration: var(--_ui-grid-pin-control-transition-duration);--ui-grid-pin-control-transition-easing: var(--_ui-grid-pin-control-transition-easing);--ui-grid-pin-menu-scale-closed: var(--_ui-grid-pin-menu-scale-closed);--ui-grid-filter-cell-padding-block-start: var(--_ui-grid-filter-cell-padding-block-start);--ui-grid-filter-cell-padding-block-end: var(--_ui-grid-filter-cell-padding-block-end);--ui-grid-filter-cell-padding-inline: var(--_ui-grid-filter-cell-padding-inline);--ui-grid-filter-input-padding-block: var(--_ui-grid-filter-input-padding-block);--ui-grid-filter-input-padding-inline: var(--_ui-grid-filter-input-padding-inline);--ui-grid-filter-input-focus-outline: var(--_ui-grid-filter-input-focus-outline);--ui-grid-body-cell-padding-block: var(--_ui-grid-body-cell-padding-block);--ui-grid-body-cell-padding-inline: var(--_ui-grid-body-cell-padding-inline);--ui-grid-body-cell-align: var(--_ui-grid-body-cell-align);--ui-grid-cell-shell-gap: var(--_ui-grid-cell-shell-gap);--ui-grid-row-toggle-size: var(--_ui-grid-row-toggle-size);--ui-grid-row-toggle-radius: var(--_ui-grid-row-toggle-radius);--ui-grid-toggle-icon-size: var(--_ui-grid-toggle-icon-size);--ui-grid-group-disclosure-icon-size: var(--_ui-grid-group-disclosure-icon-size);--ui-grid-pagination-icon-size: var(--_ui-grid-pagination-icon-size);--ui-grid-expandable-row-padding-block: var(--_ui-grid-expandable-row-padding-block);--ui-grid-expandable-row-padding-inline: var(--_ui-grid-expandable-row-padding-inline);--ui-grid-expandable-row-background: var(--_ui-grid-expandable-row-background);--ui-grid-cell-focus-background: var(--_ui-grid-cell-focus-background);--ui-grid-cell-focus-ring: var(--_ui-grid-cell-focus-ring);--ui-grid-cell-editing-background: var(--_ui-grid-cell-editing-background);--ui-grid-cell-editor-border-color: var(--_ui-grid-cell-editor-border-color);--ui-grid-cell-editor-radius: var(--_ui-grid-cell-editor-radius);--ui-grid-cell-editor-padding-block: var(--_ui-grid-cell-editor-padding-block);--ui-grid-cell-editor-padding-inline: var(--_ui-grid-cell-editor-padding-inline);--ui-grid-cell-editor-focus-outline: var(--_ui-grid-cell-editor-focus-outline);--ui-grid-group-row-gap: var(--_ui-grid-group-row-gap);--ui-grid-group-row-padding-block: var(--_ui-grid-group-row-padding-block);--ui-grid-group-row-padding-inline: var(--_ui-grid-group-row-padding-inline);--ui-grid-drag-preview-shadow: var(--_ui-grid-drag-preview-shadow);--ui-grid-drag-preview-radius: var(--_ui-grid-drag-preview-radius);--ui-grid-drag-placeholder-opacity: var(--_ui-grid-drag-placeholder-opacity);--ui-grid-drag-placeholder-background: var(--_ui-grid-drag-placeholder-background);--ui-grid-drag-placeholder-border: var(--_ui-grid-drag-placeholder-border);--ui-grid-drag-placeholder-shadow: var(--_ui-grid-drag-placeholder-shadow);--ui-grid-empty-state-gap: var(--_ui-grid-empty-state-gap);--ui-grid-empty-state-min-height: var(--_ui-grid-empty-state-min-height);--ui-grid-empty-state-padding: var(--_ui-grid-empty-state-padding);--ui-grid-pagination-gap: var(--_ui-grid-pagination-gap);--ui-grid-pagination-padding-block: var(--_ui-grid-pagination-padding-block);--ui-grid-pagination-padding-inline: var(--_ui-grid-pagination-padding-inline);--ui-grid-pagination-controls-gap: var(--_ui-grid-pagination-controls-gap);--ui-grid-pagination-size-gap: var(--_ui-grid-pagination-size-gap);--ui-grid-pagination-button-padding-block: var(--_ui-grid-pagination-button-padding-block);--ui-grid-pagination-button-padding-inline: var(--_ui-grid-pagination-button-padding-inline);--ui-grid-pagination-select-padding-block: var(--_ui-grid-pagination-select-padding-block);--ui-grid-pagination-select-padding-inline: var(--_ui-grid-pagination-select-padding-inline);--ui-grid-status-pill-padding-block: var(--_ui-grid-status-pill-padding-block);--ui-grid-status-pill-padding-inline: var(--_ui-grid-status-pill-padding-inline);--ui-grid-status-pill-radius: var(--_ui-grid-status-pill-radius);--ui-grid-status-pill-font-size: var(--_ui-grid-status-pill-font-size);--ui-grid-status-pill-default-bg: var(--_ui-grid-status-pill-default-bg);box-sizing:border-box}:host{isolation:isolate;contain:layout paint}.grid-shell{display:grid;gap:var(--ui-grid-shell-gap)}.grid-hero{display:flex;justify-content:space-between;gap:var(--ui-grid-hero-gap);align-items:end;padding:var(--ui-grid-hero-padding-block) 0;color:var(--ui-grid-cell-color)}.eyebrow{margin:0 0 var(--ui-grid-eyebrow-margin-block-end);text-transform:uppercase;letter-spacing:var(--ui-grid-eyebrow-letter-spacing);font-size:var(--ui-grid-eyebrow-font-size);color:var(--ui-grid-muted-color)}h1{margin:0;font-size:var(--ui-grid-hero-title-font-size);line-height:var(--ui-grid-hero-title-line-height)}.deck{max-width:var(--ui-grid-hero-deck-max-width);margin:var(--ui-grid-hero-deck-margin-block-start) 0 0;color:var(--ui-grid-muted-color)}.hero-actions{display:flex;gap:var(--ui-grid-hero-actions-gap);align-items:center;flex-wrap:wrap}.action{border:0;border-radius:var(--ui-grid-action-radius);padding:var(--ui-grid-action-padding-block) var(--ui-grid-action-padding-inline);font:inherit;cursor:pointer}.action-secondary{background:var(--ui-grid-surface);color:var(--ui-grid-cell-color);border:1px solid var(--ui-grid-border-color)}.stats-card{min-width:var(--ui-grid-stats-card-min-width);padding:var(--ui-grid-stats-card-padding-block) var(--ui-grid-stats-card-padding-inline);border-radius:var(--ui-grid-radius);background:var(--ui-grid-surface);border:1px solid var(--ui-grid-border-color);display:grid}.stats-card span{font-size:var(--ui-grid-stats-card-value-font-size);font-weight:700}.stats-card small{color:var(--ui-grid-muted-color)}.grid-frame{display:grid;grid-template-rows:auto minmax(0, 1fr) auto;height:100%;min-height:0;border-radius:var(--ui-grid-radius);background:var(--ui-grid-surface);border:1px solid var(--ui-grid-border-color);box-shadow:var(--ui-grid-shadow);overflow:hidden}.metrics-strip{display:grid;grid-template-columns:repeat(4, minmax(0, 1fr));gap:var(--ui-grid-metrics-gap)}.metrics-strip article{padding:var(--ui-grid-metric-card-padding-block) var(--ui-grid-metric-card-padding-inline);border-radius:var(--ui-grid-radius);background:var(--ui-grid-surface);border:1px solid var(--ui-grid-border-color);display:grid}.metrics-strip strong{font-size:var(--ui-grid-metric-value-font-size)}.metrics-strip span{color:var(--ui-grid-muted-color)}.grid-toolbar{display:flex;justify-content:space-between;gap:var(--ui-grid-toolbar-gap);padding:var(--ui-grid-toolbar-padding-block) var(--ui-grid-toolbar-padding-inline);align-items:center;background:var(--ui-grid-header-background);border-bottom:1px solid var(--ui-grid-border-color)}.grid-toolbar div{display:flex;gap:var(--ui-grid-toolbar-inline-gap);align-items:baseline}.grid-toolbar p{margin:0;color:var(--ui-grid-muted-color)}.grid-table{position:relative;height:100%;min-height:0;width:100%;min-width:0;display:flex;flex-direction:column;background:var(--ui-grid-surface);overflow-anchor:none}.grid-header-strip,.grid-filter-strip{flex:0 0 auto;position:sticky;z-index:var(--ui-grid-header-z-index);background:var(--ui-grid-surface);overflow:hidden;width:calc(100% - var(--ui-grid-scrollbar-width, 0px))}.grid-header-strip{top:0}.grid-filter-strip{top:var(--ui-grid-header-sticky-top, 0px)}.grid-body-viewport{flex:1 1 auto;min-height:0;overflow-x:auto;overflow-anchor:none;overscroll-behavior-x:none}.header-grid,.filter-grid,.body-grid{display:grid;width:100%;min-width:max-content}.header-cell,.filter-cell,.body-cell,.group-row{min-width:0}.header-cell{display:grid;grid-template-columns:minmax(0, 1fr) auto;gap:var(--ui-grid-header-cell-gap);padding:var(--ui-grid-header-cell-padding-block) var(--ui-grid-header-cell-padding-inline);border-bottom:1px solid var(--ui-grid-border-color);background:var(--ui-grid-header-background);font-weight:var(--ui-grid-header-weight);align-items:center;position:relative}.header-cell.is-active{background:var(--ui-grid-header-cell-background-active)}.header-cell[draggable=true]{cursor:grab}.header-cell.is-dragging{opacity:.6}.header-cell.is-drag-target{background:color-mix(in srgb, var(--ui-grid-accent) 9%, var(--ui-grid-header-background));border:1px dashed color-mix(in srgb, var(--ui-grid-accent) 45%, var(--ui-grid-border-color));box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--ui-grid-accent) 18%, transparent)}.header-cell.is-pinned.is-pin-menu-open{z-index:var(--ui-grid-pin-menu-open-z-index)}.header-cell.is-pin-menu-open:not(.is-pinned){z-index:max(0,var(--ui-grid-pinned-cell-z-index) - 1)}.header-cell.is-pinned,.filter-cell.is-pinned,.body-cell.is-pinned{position:sticky;z-index:var(--ui-grid-pinned-cell-z-index);background:var(--ui-grid-surface)}.header-cell.is-pinned{background:var(--ui-grid-header-background)}.body-cell.is-pinned.body-cell-odd{background:var(--ui-grid-row-odd)}.body-cell.is-pinned:not(.body-cell-odd){background:var(--ui-grid-row-even)}.header-cell.is-pinned-left-last,.filter-cell.is-pinned-left-last,.body-cell.is-pinned-left-last{box-shadow:var(--ui-grid-pinned-divider-shadow-left);clip-path:var(--ui-grid-pinned-divider-clip-left)}.header-cell.is-pinned-right-first,.filter-cell.is-pinned-right-first,.body-cell.is-pinned-right-first{box-shadow:var(--ui-grid-pinned-divider-shadow-right);clip-path:var(--ui-grid-pinned-divider-clip-right)}.header-label{min-width:0;display:block;white-space:nowrap;overflow:hidden;text-overflow:clip;hyphens:none}.header-actions{display:inline-flex;align-items:center;gap:var(--ui-grid-header-actions-gap);justify-self:end}.column-resizer{position:absolute;top:0;right:-4px;width:8px;height:100%;padding:0;border:0;background:rgba(0,0,0,0);cursor:col-resize;z-index:5}.column-resizer::after{content:"";position:absolute;top:20%;bottom:20%;left:50%;width:2px;transform:translateX(-50%);border-radius:999px;background:color-mix(in srgb, var(--_ui-grid-border-color) 80%, transparent);opacity:0;transition:opacity 120ms ease}.header-cell:hover .column-resizer::after,.column-resizer:focus-visible::after{opacity:1}.pin-control{position:relative;display:inline-grid;place-items:center;justify-items:center;min-width:var(--ui-grid-control-size);overflow:hidden}.header-action,.chip-action{display:inline-flex;align-items:center;justify-content:center;width:var(--ui-grid-control-size);height:var(--ui-grid-control-size);display:flex;border:0;background:var(--ui-grid-control-background);padding:0;font:inherit;border-radius:var(--ui-grid-control-radius);cursor:pointer}.header-action-disabled{cursor:default}.header-action svg,.chip-action svg{width:var(--ui-grid-control-icon-size);height:var(--ui-grid-control-icon-size);fill:currentColor}.header-action{color:var(--ui-grid-control-color);border:1px solid var(--ui-grid-control-border-color)}.header-cell.is-active .header-action{color:var(--ui-grid-control-color-active);border-color:var(--ui-grid-control-border-color-active)}.chip-action{border:1px solid var(--ui-grid-control-border-color);color:var(--ui-grid-control-color)}.chip-action-active{background:var(--ui-grid-control-background-active);border-color:var(--ui-grid-control-border-color-active);color:var(--ui-grid-control-color-active)}.pin-trigger{grid-area:1/1;transform-origin:center;transition:width var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),height var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),opacity var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),transform var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),border-color var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),background-color var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),color var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing)}.pin-menu{grid-area:1/1;z-index:var(--ui-grid-pin-menu-z-index);display:grid;grid-auto-flow:var(--ui-grid-pin-menu-direction);grid-auto-rows:var(--ui-grid-pin-menu-action-size);grid-auto-columns:var(--ui-grid-pin-menu-action-size);gap:var(--ui-grid-pin-menu-gap);padding:var(--ui-grid-pin-menu-padding);border:1px solid var(--ui-grid-border-color);border-radius:var(--ui-grid-pin-menu-radius);background:var(--ui-grid-surface);box-shadow:var(--ui-grid-pin-menu-shadow);justify-items:center;align-items:center;width:var(--ui-grid-control-size);max-height:var(--ui-grid-pin-control-collapsed-size);opacity:0;pointer-events:none;transform:scale(var(--ui-grid-pin-menu-scale-closed));transform-origin:center;transition:max-height var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),opacity var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),transform var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),padding var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),border-color var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing),box-shadow var(--ui-grid-pin-control-transition-duration) var(--ui-grid-pin-control-transition-easing)}.pin-control-open{align-items:start;overflow:visible}.pin-control-open .pin-trigger{width:var(--ui-grid-pin-control-collapsed-size);height:var(--ui-grid-pin-control-collapsed-size);opacity:0;transform:scale(0.72);pointer-events:none}.pin-control-open .pin-menu{max-height:calc(var(--ui-grid-pin-menu-action-size)*2 + var(--ui-grid-pin-menu-gap) + var(--ui-grid-pin-menu-padding)*2);width:max-content;min-width:var(--ui-grid-control-size);opacity:1;pointer-events:auto;transform:scale(1)}.pin-menu-action{display:inline-flex;align-items:center;justify-content:center;width:var(--ui-grid-pin-menu-action-size);height:var(--ui-grid-pin-menu-action-size);border:0;border-radius:var(--ui-grid-control-radius);background:rgba(0,0,0,0);color:var(--ui-grid-control-color);cursor:pointer}.pin-menu-action:hover,.pin-menu-action:focus-visible{outline:0;background:var(--ui-grid-control-background-active);color:var(--ui-grid-control-color-active)}.pin-menu-action svg{width:var(--ui-grid-control-icon-size);height:var(--ui-grid-control-icon-size);fill:currentColor}.body-cell{display:grid;grid-template-columns:minmax(0, 1fr);align-items:var(--ui-grid-body-cell-align);padding:var(--ui-grid-body-cell-padding-block) var(--ui-grid-body-cell-padding-inline);border-bottom:1px solid var(--ui-grid-border-color);color:var(--ui-grid-cell-color);background:var(--ui-grid-row-even);outline:0}.body-cell.body-cell-odd{background:var(--ui-grid-row-odd)}.cell-shell{display:flex;align-items:center;gap:var(--ui-grid-cell-shell-gap);min-width:0}.cell-value{min-width:0;flex:1 1 auto}.row-toggle{border:1px solid var(--ui-grid-border-color);background:var(--ui-grid-surface);color:var(--ui-grid-cell-color);width:var(--ui-grid-row-toggle-size);height:var(--ui-grid-row-toggle-size);border-radius:var(--ui-grid-row-toggle-radius);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex:0 0 auto;padding:0;font:inherit}.toggle-icon{width:var(--ui-grid-toggle-icon-size);height:var(--ui-grid-toggle-icon-size);fill:currentColor;pointer-events:none}.group-disclosure-icon{width:var(--ui-grid-group-disclosure-icon-size);height:var(--ui-grid-group-disclosure-icon-size)}.pagination-icon{width:var(--ui-grid-pagination-icon-size);height:var(--ui-grid-pagination-icon-size);fill:currentColor}.expandable-row{padding:var(--ui-grid-expandable-row-padding-block) var(--ui-grid-expandable-row-padding-inline);border-bottom:1px solid var(--ui-grid-border-color);background:var(--ui-grid-expandable-row-background)}.body-grid>.body-cell:hover:not(.row-focused):not(.cell-focused):not(.cell-editing){background:var(--ui-grid-row-hover);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--ui-grid-accent) 10%, transparent)}.body-cell.row-focused,.body-grid>.body-cell.row-focused{background:var(--ui-grid-row-focus-background)}.body-cell.cell-focused,.body-grid>.body-cell.cell-focused{background:var(--ui-grid-cell-focus-background);box-shadow:var(--ui-grid-cell-focus-ring)}.body-cell.cell-editing,.body-grid>.body-cell.cell-editing{background:var(--ui-grid-cell-editing-background)}.cell-editor{display:block;width:100%;min-width:0;max-width:100%;border:1px solid var(--ui-grid-cell-editor-border-color);border-radius:var(--ui-grid-cell-editor-radius);background:var(--ui-grid-surface);color:var(--ui-grid-cell-color);padding:var(--ui-grid-cell-editor-padding-block) var(--ui-grid-cell-editor-padding-inline);font:inherit}.cell-editor:focus{outline:var(--ui-grid-cell-editor-focus-outline)}.grid-viewport{width:100%}.grid-virtual-spacer{position:relative;width:max-content;min-width:100%}.grid-virtual-body{position:absolute;left:0}.grid-virtual-body>:not(.expandable-row){box-sizing:border-box;height:var(--ui-grid-row-height);overflow:hidden}.body-cell.align-center{text-align:center}.body-cell.align-end{text-align:right}.empty-state{display:grid;place-items:center;gap:var(--ui-grid-empty-state-gap);min-height:var(--ui-grid-empty-state-min-height);text-align:center;padding:var(--ui-grid-empty-state-padding);color:var(--ui-grid-muted-color);background:var(--ui-grid-surface)}.empty-state p,.empty-state strong{margin:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.status-pill{display:inline-flex;align-items:center;justify-content:center;padding:var(--ui-grid-status-pill-padding-block) var(--ui-grid-status-pill-padding-inline);border-radius:var(--ui-grid-status-pill-radius);background:var(--ui-grid-status-pill-default-bg);color:var(--ui-grid-cell-color);font-size:var(--ui-grid-status-pill-font-size);font-weight:700}.status-pill-enterprise{background:var(--ui-grid-status-enterprise-bg);color:var(--ui-grid-status-enterprise-color)}.status-pill-active{background:var(--ui-grid-status-active-bg);color:var(--ui-grid-status-active-color)}.status-pill-expansion{background:var(--ui-grid-status-expansion-bg);color:var(--ui-grid-status-expansion-color)}.status-pill-pilot{background:var(--ui-grid-status-pilot-bg);color:var(--ui-grid-status-pilot-color)}@media(max-width: 900px){.metrics-strip{grid-template-columns:repeat(2, minmax(0, 1fr))}.grid-hero,.grid-toolbar{grid-template-columns:1fr;display:grid}.hero-actions{justify-content:space-between}}@media(max-width: 640px){.metrics-strip{grid-template-columns:1fr}}.ui-grid-row-selected,.body-cell.ui-grid-row-selected{background:var(--ui-grid-row-selected-bg, var(--app-ui-grid-row-selected-bg, color-mix(in srgb, var(--ui-grid-accent, #2563eb) 22%, var(--ui-grid-surface, #ffffff))));color:var(--ui-grid-row-selected-color, var(--app-ui-grid-row-selected-color, var(--ui-grid-cell-color)))}.body-cell.ui-grid-row-selected.body-cell-odd{background:var(--ui-grid-row-selected-bg-odd, var(--app-ui-grid-row-selected-bg-odd, color-mix(in srgb, var(--ui-grid-accent, #2563eb) 26%, var(--ui-grid-surface, #ffffff))))}.ui-grid-row-focused,.body-cell.ui-grid-row-focused{outline:1px dashed var(--ui-grid-accent, #2563eb);outline-offset:-1px}.body-cell[data-column=selectionRowHeaderCol],.header-cell[data-column=selectionRowHeaderCol],.filter-cell[data-column=selectionRowHeaderCol]{padding:0 !important;cursor:pointer;user-select:none;-webkit-user-select:none;display:flex;align-items:center;justify-content:center}.body-cell[data-column=selectionRowHeaderCol]>.cell-shell,.body-cell[data-column=selectionRowHeaderCol]>.cell-shell>.cell-content{padding:0 !important;padding-inline-start:0 !important;margin:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.filter-cell[data-column=selectionRowHeaderCol]{padding:0;background:var(--_ui-grid-header-background, var(--ui-grid-header-background, transparent));border-bottom:1px solid var(--_ui-grid-border-color, var(--ui-grid-border-color, transparent))}.ui-grid-selection-row-header-buttons{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;cursor:pointer}.ui-grid-selection-checkbox{display:inline-block;width:16px;height:16px;box-sizing:border-box;border:2px solid currentColor;border-radius:3px;background:rgba(0,0,0,0);color:var(--ui-grid-cell-color, currentColor);position:relative;transition:background 120ms ease,border-color 120ms ease,color 120ms ease;opacity:.7}.ui-grid-selection-row-header-buttons:hover .ui-grid-selection-checkbox{opacity:1;color:var(--ui-grid-accent, var(--_ui-grid-accent, #2563eb))}.ui-grid-selection-checkbox-checked{background:var(--ui-grid-accent, var(--_ui-grid-accent, #2563eb));color:var(--ui-grid-accent, var(--_ui-grid-accent, #2563eb));border-color:var(--ui-grid-accent, var(--_ui-grid-accent, #2563eb));opacity:1}.ui-grid-selection-checkbox-checked::after{content:"";position:absolute;left:3px;top:0;width:5px;height:9px;border:2px solid var(--ui-grid-surface, var(--_ui-grid-surface, #ffffff));border-top:0;border-left:0;transform:rotate(45deg)}.ui-grid-selection-checkbox-disabled{opacity:.3;cursor:not-allowed}.ui-grid-selection-select-all{display:inline-flex;align-items:center;justify-content:center;background:rgba(0,0,0,0);border:0;padding:0;margin:0;cursor:pointer;width:100%;height:100%}.ui-grid-selection-select-all:focus-visible{outline:2px solid var(--_ui-grid-accent, var(--ui-grid-accent, #2563eb));outline-offset:-2px}.grid-body-viewport:has([data-column=selectionRowHeaderCol]){user-select:none;-webkit-user-select:none}.body-cell.ui-grid-row-dirty{color:var(--ui-grid-row-dirty-color, var(--app-ui-grid-row-dirty-color, #610B38));background:var(--ui-grid-row-dirty-bg, var(--app-ui-grid-row-dirty-bg, color-mix(in srgb, var(--ui-grid-accent, #2563eb) 8%, var(--ui-grid-surface, #ffffff))))}.body-cell.ui-grid-row-saving{color:var(--ui-grid-row-saving-color, var(--app-ui-grid-row-saving-color, #848484)) !important;opacity:var(--ui-grid-row-saving-opacity, 0.75);cursor:progress}.body-cell.ui-grid-row-error{color:var(--ui-grid-row-error-color, var(--app-ui-grid-row-error-color, #FF0000)) !important;background:var(--ui-grid-row-error-bg, var(--app-ui-grid-row-error-bg, color-mix(in srgb, #ff0000 14%, var(--ui-grid-surface, #ffffff))))}.body-cell.ui-grid-cell-invalid{position:relative;background:var(--ui-grid-cell-invalid-bg, var(--app-ui-grid-cell-invalid-bg, color-mix(in srgb, #ff0000 10%, var(--ui-grid-surface, #ffffff))))}.body-cell.ui-grid-cell-invalid::after{content:"";position:absolute;top:0;right:0;width:0;height:0;border-style:solid;border-width:0 var(--ui-grid-cell-invalid-marker-size, 8px) var(--ui-grid-cell-invalid-marker-size, 8px) 0;border-color:rgba(0,0,0,0) var(--ui-grid-cell-invalid-marker-color, #ff0000) rgba(0,0,0,0) rgba(0,0,0,0);pointer-events:none}.filter-cell{padding:var(--ui-grid-filter-cell-padding-block-start) var(--ui-grid-filter-cell-padding-inline) var(--ui-grid-filter-cell-padding-block-end);border-bottom:1px solid var(--ui-grid-border-color);background:var(--ui-grid-header-background)}.filter-cell input{width:100%;min-width:0;box-sizing:border-box;border:1px solid var(--ui-grid-border-color);border-radius:var(--ui-grid-radius);background:var(--ui-grid-surface);padding:var(--ui-grid-filter-input-padding-block) var(--ui-grid-filter-input-padding-inline);font:inherit}.filter-cell input:focus{outline:var(--ui-grid-filter-input-focus-outline);border-color:var(--ui-grid-accent)}.group-row{display:flex;align-items:center;gap:var(--ui-grid-group-row-gap);border:0;width:100%;padding:var(--ui-grid-group-row-padding-block) var(--ui-grid-group-row-padding-inline);background:var(--ui-grid-group-background);border-bottom:1px solid var(--ui-grid-border-color);color:var(--ui-grid-cell-color);cursor:pointer;text-align:left}.group-row span,.group-row small{color:var(--ui-grid-muted-color)}.pagination-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-grid-pagination-gap);padding:var(--ui-grid-pagination-padding-block) var(--ui-grid-pagination-padding-inline);border-top:1px solid var(--ui-grid-border-color);background:var(--ui-grid-header-background)}.pagination-bar p{margin:0;color:var(--ui-grid-muted-color)}.pagination-controls{display:flex;align-items:center;gap:var(--ui-grid-pagination-controls-gap);flex-wrap:wrap}.pagination-button{padding:var(--ui-grid-pagination-button-padding-block) var(--ui-grid-pagination-button-padding-inline)}.pagination-size{display:inline-flex;align-items:center;gap:var(--ui-grid-pagination-size-gap)}.pagination-size select{border:1px solid var(--ui-grid-border-color);border-radius:var(--ui-grid-radius);background:var(--ui-grid-surface);padding:var(--ui-grid-pagination-select-padding-block) var(--ui-grid-pagination-select-padding-inline);font:inherit}';
|
|
4252
4390
|
|
|
4253
4391
|
// src/ui-grid-empty.template.ts
|
|
4254
4392
|
var STYLE_KEY = {};
|
|
@@ -4257,7 +4395,7 @@ function emptyTemplate(ctx) {
|
|
|
4257
4395
|
connect(root) {
|
|
4258
4396
|
if (!root) return;
|
|
4259
4397
|
adoptStyles(root, ui_grid_shell_default, STYLE_KEY);
|
|
4260
|
-
root.innerHTML = `<section class="grid-shell ui-grid-shell"><div class="empty-state ui-grid-no-row-overlay"><strong>${ctx.message}</strong></div></section>`;
|
|
4398
|
+
root.innerHTML = `<section class="grid-shell ui-grid-shell"><div part="empty-state" class="empty-state ui-grid-no-row-overlay"><strong>${ctx.message}</strong></div></section>`;
|
|
4261
4399
|
}
|
|
4262
4400
|
};
|
|
4263
4401
|
}
|
|
@@ -4270,7 +4408,7 @@ function gridShellTemplate(ctx) {
|
|
|
4270
4408
|
const target = root ?? ctx.shadowRoot;
|
|
4271
4409
|
if (!target) return;
|
|
4272
4410
|
adoptStyles(target, ui_grid_shell_default, STYLE_KEY2);
|
|
4273
|
-
target.innerHTML = `${ctx.slotRegistry}<section class="grid-frame ui-grid" role="grid" aria-label="${ctx.gridTitle}"><div class="grid-table ui-grid-contents-wrapper" style="${ctx.gridTableStyle}"><div class="grid-header-strip"><div class="header-grid ui-grid-header ui-grid-header-canvas" style="grid-template-columns:${ctx.templateColumns}">` + ctx.headerContent + `</div></div><div class="grid-filter-strip">` + ctx.filterRowContent + `</div><div class="grid-body-viewport" style="${ctx.bodyViewportStyle}">` + ctx.bodyContent + `</div>` + ctx.paginationContent + `</div></section>`;
|
|
4411
|
+
target.innerHTML = `${ctx.slotRegistry}<section class="grid-frame ui-grid" part="grid-frame" role="grid" aria-label="${ctx.gridTitle}"><div class="grid-table ui-grid-contents-wrapper" style="${ctx.gridTableStyle}"><div class="grid-header-strip"><div class="header-grid ui-grid-header ui-grid-header-canvas" part="header" style="grid-template-columns:${ctx.templateColumns}">` + ctx.headerContent + `</div></div><div class="grid-filter-strip">` + ctx.filterRowContent + `</div><div class="grid-body-viewport" style="${ctx.bodyViewportStyle}">` + ctx.bodyContent + `</div>` + ctx.paginationContent + `</div></section>`;
|
|
4274
4412
|
}
|
|
4275
4413
|
};
|
|
4276
4414
|
}
|
|
@@ -4282,7 +4420,7 @@ var grid_filter_cell_default = ":host{display:block;box-sizing:border-box;paddin
|
|
|
4282
4420
|
var STYLE_KEY3 = {};
|
|
4283
4421
|
function renderFilterCell2(ctx, shadowRoot) {
|
|
4284
4422
|
adoptStyles(shadowRoot, grid_filter_cell_default, STYLE_KEY3);
|
|
4285
|
-
shadowRoot.innerHTML = `<input class="ui-grid-filter-input" data-role="filter" data-column="${ctx.columnName}" placeholder="${ctx.placeholder}" value="${ctx.value}">`;
|
|
4423
|
+
shadowRoot.innerHTML = `<input class="ui-grid-filter-input" data-role="filter" data-column="${escapeHtml(ctx.columnName)}" placeholder="${escapeHtml(ctx.placeholder)}" value="${escapeHtml(ctx.value)}">`;
|
|
4286
4424
|
}
|
|
4287
4425
|
|
|
4288
4426
|
// src/components/grid-filter-cell/grid-filter-cell.ts
|
|
@@ -4385,7 +4523,7 @@ var grid_group_row_default = ".sr-only{position:absolute;width:1px;height:1px;pa
|
|
|
4385
4523
|
var STYLE_KEY4 = {};
|
|
4386
4524
|
function renderGroupRow(ctx, shadowRoot) {
|
|
4387
4525
|
adoptStyles(shadowRoot, grid_group_row_default, STYLE_KEY4);
|
|
4388
|
-
shadowRoot.innerHTML = `<svg class="toggle-icon group-disclosure-icon" viewBox="${ctx.iconViewBox}" aria-hidden="true" focusable="false"><path d="${ctx.iconPath}"></path></svg><span class="sr-only">${ctx.disclosureLabel}</span><strong>${ctx.field}: ${ctx.label}</strong><span>${ctx.count} ${ctx.rowsSuffix}</span>`;
|
|
4526
|
+
shadowRoot.innerHTML = `<svg class="toggle-icon group-disclosure-icon" viewBox="${escapeHtml(ctx.iconViewBox)}" aria-hidden="true" focusable="false"><path d="${escapeHtml(ctx.iconPath)}"></path></svg><span class="sr-only">${escapeHtml(ctx.disclosureLabel)}</span><strong>${escapeHtml(ctx.columnLabel || ctx.field)}: ${escapeHtml(ctx.label)}</strong><span>${escapeHtml(ctx.count)} ${escapeHtml(ctx.rowsSuffix)}</span>`;
|
|
4389
4527
|
}
|
|
4390
4528
|
|
|
4391
4529
|
// src/components/grid-group-row/grid-group-row.ts
|
|
@@ -4393,6 +4531,8 @@ var UIGridGroupRow = class _UIGridGroupRow extends HTMLElement {
|
|
|
4393
4531
|
static TAG = "ui-grid-group-row";
|
|
4394
4532
|
/** The grouping field name (e.g. "category"). */
|
|
4395
4533
|
field = "";
|
|
4534
|
+
/** The grouped column's header (e.g. "Category"); falls back to `field`. */
|
|
4535
|
+
columnLabel = "";
|
|
4396
4536
|
/** The group value label (e.g. "Fruit"). */
|
|
4397
4537
|
label = "";
|
|
4398
4538
|
/** Number of rows in this group. */
|
|
@@ -4414,6 +4554,7 @@ var UIGridGroupRow = class _UIGridGroupRow extends HTMLElement {
|
|
|
4414
4554
|
"data-group",
|
|
4415
4555
|
"data-collapsed",
|
|
4416
4556
|
"data-field",
|
|
4557
|
+
"data-column-label",
|
|
4417
4558
|
"data-label",
|
|
4418
4559
|
"data-count",
|
|
4419
4560
|
"data-depth",
|
|
@@ -4434,6 +4575,7 @@ var UIGridGroupRow = class _UIGridGroupRow extends HTMLElement {
|
|
|
4434
4575
|
render() {
|
|
4435
4576
|
const depth = parseInt(this.getAttribute("data-depth") ?? "0", 10);
|
|
4436
4577
|
this.field = this.getAttribute("data-field") ?? "";
|
|
4578
|
+
this.columnLabel = this.getAttribute("data-column-label") ?? "";
|
|
4437
4579
|
this.label = this.getAttribute("data-label") ?? "";
|
|
4438
4580
|
this.count = this.getAttribute("data-count") ?? "0";
|
|
4439
4581
|
this.disclosureLabel = this.getAttribute("data-disclosure-label") ?? "";
|
|
@@ -4985,6 +5127,10 @@ var UiGridStandaloneElement = class extends HTMLElement {
|
|
|
4985
5127
|
this.icons.setOverrides(this.activeOptions.iconOverrides ?? {});
|
|
4986
5128
|
this.ensureController(this.buildEffectiveOptions(this.activeOptions));
|
|
4987
5129
|
}
|
|
5130
|
+
/** Append application CSS after the grid styles; return a removal callback. */
|
|
5131
|
+
addStyles(cssText) {
|
|
5132
|
+
return addUserStyles(this.ensureShadowRoot(), cssText);
|
|
5133
|
+
}
|
|
4988
5134
|
/**
|
|
4989
5135
|
* Declare which slots are framework-rendered. When a slot is flagged, the
|
|
4990
5136
|
* element renders a `<slot name="…">` placeholder at the usual site instead
|
|
@@ -5005,6 +5151,7 @@ var UiGridStandaloneElement = class extends HTMLElement {
|
|
|
5005
5151
|
setFrameworkRenderedSlots(config) {
|
|
5006
5152
|
if (this.frameworkSlots.configure(config)) {
|
|
5007
5153
|
this.lastRowStateFingerprints.clear();
|
|
5154
|
+
this.lastStructureKey = null;
|
|
5008
5155
|
this.render();
|
|
5009
5156
|
}
|
|
5010
5157
|
}
|
|
@@ -5387,6 +5534,9 @@ var UiGridStandaloneElement = class extends HTMLElement {
|
|
|
5387
5534
|
this.templateObserver?.disconnect();
|
|
5388
5535
|
this.templateObserver = null;
|
|
5389
5536
|
this.teardownAutoResize();
|
|
5537
|
+
this.scrollbarObserver?.disconnect();
|
|
5538
|
+
this.scrollbarObserver = null;
|
|
5539
|
+
this.observedBodyViewport = null;
|
|
5390
5540
|
if (this.scrollFrame !== null) {
|
|
5391
5541
|
cancelAnimationFrame(this.scrollFrame);
|
|
5392
5542
|
this.scrollFrame = null;
|
|
@@ -5659,8 +5809,27 @@ var UiGridStandaloneElement = class extends HTMLElement {
|
|
|
5659
5809
|
this.render();
|
|
5660
5810
|
});
|
|
5661
5811
|
}
|
|
5812
|
+
this.syncScrollbarCompensation(root);
|
|
5662
5813
|
this.autoAdjustHeight(snapshot);
|
|
5663
5814
|
}
|
|
5815
|
+
scrollbarObserver = null;
|
|
5816
|
+
observedBodyViewport = null;
|
|
5817
|
+
// The header and filter strips have no scrollbar, so they are narrowed by the
|
|
5818
|
+
// body viewport's to keep right-pinned cells and scroll range aligned (#7402).
|
|
5819
|
+
syncScrollbarCompensation(root) {
|
|
5820
|
+
const frame = root.querySelector(".grid-frame");
|
|
5821
|
+
const viewport = root.querySelector(".grid-body-viewport");
|
|
5822
|
+
if (!frame || !viewport) return;
|
|
5823
|
+
const width = `${Math.max(0, viewport.offsetWidth - viewport.clientWidth)}px`;
|
|
5824
|
+
if (frame.style.getPropertyValue("--ui-grid-scrollbar-width") !== width) {
|
|
5825
|
+
frame.style.setProperty("--ui-grid-scrollbar-width", width);
|
|
5826
|
+
}
|
|
5827
|
+
if (viewport === this.observedBodyViewport || typeof ResizeObserver === "undefined") return;
|
|
5828
|
+
this.scrollbarObserver ??= new ResizeObserver(() => this.syncScrollbarCompensation(root));
|
|
5829
|
+
if (this.observedBodyViewport) this.scrollbarObserver.unobserve(this.observedBodyViewport);
|
|
5830
|
+
this.scrollbarObserver.observe(viewport);
|
|
5831
|
+
this.observedBodyViewport = viewport;
|
|
5832
|
+
}
|
|
5664
5833
|
/** @internal */
|
|
5665
5834
|
inAutoAdjust = false;
|
|
5666
5835
|
lastAutoHeight = 0;
|
|
@@ -5805,7 +5974,7 @@ var UiGridStandaloneElement = class extends HTMLElement {
|
|
|
5805
5974
|
snapshot.visibleColumns.map((column) => this.renderFilterCell(column)).join("")
|
|
5806
5975
|
) : "";
|
|
5807
5976
|
const bodyContent = itemsToRender.map((item, index) => this.renderDisplayItem(item, startIndex + index)).join("");
|
|
5808
|
-
const body = snapshot.pipeline.displayItems.length > 0 ? virtualizationEnabled ? bodyVirtualMarkup(templateColumns, totalVirtualHeight, virtualOffset, bodyContent) : bodyStaticMarkup(templateColumns, bodyContent) : this.renderEmptyState(
|
|
5977
|
+
const body = snapshot.pipeline.displayItems.length > 0 ? virtualizationEnabled ? bodyVirtualMarkup(templateColumns, totalVirtualHeight, virtualOffset, bodyContent, snapshot.rowSize) : bodyStaticMarkup(templateColumns, bodyContent) : this.renderEmptyState(
|
|
5809
5978
|
options.emptyMessage ?? labels.emptyHeading,
|
|
5810
5979
|
labels.emptyDescription
|
|
5811
5980
|
);
|
|
@@ -5834,8 +6003,8 @@ var UiGridStandaloneElement = class extends HTMLElement {
|
|
|
5834
6003
|
renderPatch(plan, root) {
|
|
5835
6004
|
renderPatch(this, plan, root);
|
|
5836
6005
|
}
|
|
5837
|
-
reconcileBodyRoot(root, kind, options, labels, templateColumns, virtualOffset, totalVirtualHeight) {
|
|
5838
|
-
return reconcileBodyRoot(this, root, kind, options, labels, templateColumns, virtualOffset, totalVirtualHeight);
|
|
6006
|
+
reconcileBodyRoot(root, kind, options, labels, templateColumns, virtualOffset, totalVirtualHeight, rowSize) {
|
|
6007
|
+
return reconcileBodyRoot(this, root, kind, options, labels, templateColumns, virtualOffset, totalVirtualHeight, rowSize);
|
|
5839
6008
|
}
|
|
5840
6009
|
reconcilePagination(root, snapshot, shouldShow) {
|
|
5841
6010
|
reconcilePagination(this, root, snapshot, shouldShow);
|
|
@@ -6042,6 +6211,7 @@ async function defineStandaloneUiGridElement(tagName = "ui-grid-element") {
|
|
|
6042
6211
|
// src/index.ts
|
|
6043
6212
|
async function registerVanillaUiGridRustModule(module, input) {
|
|
6044
6213
|
await module.default(input);
|
|
6214
|
+
registerUiGridWasmEngineFromModule(module);
|
|
6045
6215
|
}
|
|
6046
6216
|
async function mountVanillaUiGrid(target, options, rustModule, tagName = "ui-grid-element") {
|
|
6047
6217
|
if (rustModule) {
|