@ishibashi0112/spreadsheet-grid 0.38.0 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SpreadsheetGrid.d.ts +1 -2
- package/dist/hooks/useCellContextMenuController.d.ts +4 -4
- package/dist/hooks/useColumnAutosizeRunner.d.ts +2 -2
- package/dist/hooks/useColumnHeaderDragController.d.ts +2 -2
- package/dist/hooks/useColumnMenuController.d.ts +5 -5
- package/dist/hooks/useColumnSelectOptionsCollector.d.ts +2 -2
- package/dist/hooks/useFilterPopoverController.d.ts +8 -8
- package/dist/hooks/useGlobalFilteredOrder.d.ts +3 -3
- package/dist/hooks/useGridBarContext.d.ts +3 -2
- package/dist/hooks/useGridClipboardController.d.ts +1 -1
- package/dist/hooks/useGridEditController.d.ts +4 -4
- package/dist/hooks/useGridHistoryController.d.ts +1 -1
- package/dist/hooks/useGridKeyboardInteractions.d.ts +1 -1
- package/dist/hooks/useGridPointerInteractions.d.ts +8 -8
- package/dist/hooks/useGridStore.d.ts +1 -1
- package/dist/hooks/useGridViewportSync.d.ts +1 -1
- package/dist/hooks/useResolvedGridTheme.d.ts +1 -1
- package/dist/hooks/useRowDragController.d.ts +2 -2
- package/dist/hooks/useServerSideRowModel.d.ts +3 -3
- package/dist/hooks/useToolPanelController.d.ts +2 -2
- package/dist/index.cjs +1 -10
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2841 -8666
- package/dist/model/gridTypes.d.ts +3 -2
- package/dist/style.css +1 -1
- package/dist/testing/index.d.ts +1 -5
- package/dist/testing.cjs +1 -1
- package/dist/testing.js +1 -51
- package/dist/view/ColumnChooserPanel.d.ts +1 -1
- package/dist/view/ColumnFilterPopover.d.ts +5 -5
- package/dist/view/GridBodyLabelRow.d.ts +24 -0
- package/dist/view/GridBodyLayer.d.ts +13 -4
- package/dist/view/GridDetailLayer.d.ts +1 -1
- package/dist/view/GridHeaderRow.d.ts +2 -2
- package/dist/view/GridScrollHint.d.ts +2 -2
- package/dist/view/GridStickyLabelLayer.d.ts +28 -0
- package/dist/view/gridBarHelpers.d.ts +2 -2
- package/package.json +8 -28
- package/README.md +0 -582
- package/dist/controllers/autoHeightMeasurer.d.ts +0 -30
- package/dist/controllers/clipboardController.d.ts +0 -31
- package/dist/controllers/columnAutosizeRunner.d.ts +0 -31
- package/dist/controllers/columnHeaderDragController.d.ts +0 -44
- package/dist/controllers/columnMenuController.d.ts +0 -49
- package/dist/controllers/contextMenuController.d.ts +0 -30
- package/dist/controllers/debouncedValueStore.d.ts +0 -11
- package/dist/controllers/editController.d.ts +0 -27
- package/dist/controllers/filterPopoverController.d.ts +0 -53
- package/dist/controllers/globalFilteredOrder.d.ts +0 -38
- package/dist/controllers/historyController.d.ts +0 -28
- package/dist/controllers/keyboardController.d.ts +0 -36
- package/dist/controllers/panelHeaderDragController.d.ts +0 -21
- package/dist/controllers/pointerInteractionsController.d.ts +0 -74
- package/dist/controllers/popoverSupport.d.ts +0 -18
- package/dist/controllers/rowDragController.d.ts +0 -40
- package/dist/controllers/scrollSyncController.d.ts +0 -17
- package/dist/controllers/selectOptionsCollector.d.ts +0 -31
- package/dist/controllers/serverSideRowModel.d.ts +0 -36
- package/dist/controllers/systemColorSchemeStore.d.ts +0 -5
- package/dist/controllers/toolPanelController.d.ts +0 -36
- package/dist/controllers/tooltipController.d.ts +0 -6
- package/dist/controllers/viewportSyncController.d.ts +0 -30
- package/dist/engine/columnCommands.d.ts +0 -56
- package/dist/engine/columnLayout.d.ts +0 -43
- package/dist/engine/createGridEngine.d.ts +0 -46
- package/dist/engine/filterPopoverCommands.d.ts +0 -56
- package/dist/engine/gridApi.d.ts +0 -61
- package/dist/engine/memo.d.ts +0 -2
- package/dist/engine/notifiers.d.ts +0 -35
- package/dist/engine/rowPipeline.d.ts +0 -50
- package/dist/engine/rowSelectionCommands.d.ts +0 -21
- package/dist/engine/verticalLayout.d.ts +0 -52
- package/dist/logic/aggregation.d.ts +0 -13
- package/dist/logic/autoScrollGeometry.d.ts +0 -27
- package/dist/logic/autoSizeOnData.d.ts +0 -10
- package/dist/logic/cellOverflowTooltip.d.ts +0 -5
- package/dist/logic/checkboxEditor.d.ts +0 -12
- package/dist/logic/chunkedLoop.d.ts +0 -8
- package/dist/logic/clearCells.d.ts +0 -31
- package/dist/logic/columnAutosize.d.ts +0 -18
- package/dist/logic/columnFlex.d.ts +0 -4
- package/dist/logic/columnReset.d.ts +0 -7
- package/dist/logic/contextMenuTarget.d.ts +0 -4
- package/dist/logic/cx.d.ts +0 -1
- package/dist/logic/dateFilterCondition.d.ts +0 -26
- package/dist/logic/dateFilterPresets.d.ts +0 -13
- package/dist/logic/dateFilterTree.d.ts +0 -17
- package/dist/logic/datePickerCalendar.d.ts +0 -12
- package/dist/logic/detailRow.d.ts +0 -38
- package/dist/logic/domGuards.d.ts +0 -7
- package/dist/logic/editorValues.d.ts +0 -5
- package/dist/logic/exportCsv.d.ts +0 -12
- package/dist/logic/exportData.d.ts +0 -9
- package/dist/logic/exportScope.d.ts +0 -3
- package/dist/logic/filterPopoverLayout.d.ts +0 -17
- package/dist/logic/filterPopoverOutsideClick.d.ts +0 -2
- package/dist/logic/filterSummary.d.ts +0 -3
- package/dist/logic/filtering.d.ts +0 -33
- package/dist/logic/geometry.d.ts +0 -72
- package/dist/logic/gridState.d.ts +0 -13
- package/dist/logic/grouping.d.ts +0 -34
- package/dist/logic/history.d.ts +0 -16
- package/dist/logic/inferFilterType.d.ts +0 -19
- package/dist/logic/numberFilterCondition.d.ts +0 -21
- package/dist/logic/panelDragGeometry.d.ts +0 -13
- package/dist/logic/rowHeightStore.d.ts +0 -13
- package/dist/logic/rowReorder.d.ts +0 -18
- package/dist/logic/rowSelection.d.ts +0 -16
- package/dist/logic/scrollHint.d.ts +0 -41
- package/dist/logic/scrollTargets.d.ts +0 -22
- package/dist/logic/selectEditorState.d.ts +0 -28
- package/dist/logic/selectOptions.d.ts +0 -9
- package/dist/logic/serverSideBlocks.d.ts +0 -2
- package/dist/logic/serverSideCache.d.ts +0 -14
- package/dist/logic/serverSideEdits.d.ts +0 -16
- package/dist/logic/serverSideQuery.d.ts +0 -7
- package/dist/logic/setFilterSearch.d.ts +0 -14
- package/dist/logic/setFilterSelection.d.ts +0 -5
- package/dist/logic/slotDom.d.ts +0 -8
- package/dist/logic/slotProps.d.ts +0 -18
- package/dist/logic/sorting.d.ts +0 -11
- package/dist/logic/textFilterCondition.d.ts +0 -18
- package/dist/logic/theme.d.ts +0 -3
- package/dist/logic/tooltipGeometry.d.ts +0 -19
- package/dist/logic/validation.d.ts +0 -14
- package/dist/logic/valueFormatters.d.ts +0 -9
- package/dist/logic/valueStore.d.ts +0 -6
- package/dist/logic/verticalGeometry.d.ts +0 -58
- package/dist/model/gridActions.d.ts +0 -125
- package/dist/model/gridReducer.d.ts +0 -4
- package/dist/model/gridSelectors.d.ts +0 -40
- package/dist/model/gridStore.d.ts +0 -24
- package/dist/model/gridTypes.core.d.ts +0 -796
- package/dist/utils/clipboard.d.ts +0 -29
- package/dist/utils/excelColumnName.d.ts +0 -1
- package/dist/utils/permissions.d.ts +0 -4
- package/dist/utils/scheduler.d.ts +0 -1
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { CSSProperties, ReactNode, Ref } from 'react';
|
|
2
|
-
import type * as Core from '
|
|
3
|
-
export type * from '
|
|
2
|
+
import type * as Core from '@ishibashi0112/spreadsheet-grid-core/model/gridTypes.core';
|
|
3
|
+
export type * from '@ishibashi0112/spreadsheet-grid-core/model/gridTypes.core';
|
|
4
4
|
export type ReactGridTypes = {
|
|
5
5
|
node: ReactNode;
|
|
6
6
|
style: CSSProperties;
|
|
7
7
|
};
|
|
8
8
|
export type CellRenderContext<T> = Core.CellRenderContext<T, ReactGridTypes>;
|
|
9
9
|
export type DetailRowOptions<T> = Core.DetailRowOptions<T, ReactGridTypes>;
|
|
10
|
+
export type LabelRowOptions<T> = Core.LabelRowOptions<T, ReactGridTypes>;
|
|
10
11
|
export type CellStyleContext<T> = Core.CellStyleContext<T, ReactGridTypes>;
|
|
11
12
|
export type HeaderRenderContext<T> = Core.HeaderRenderContext<T, ReactGridTypes>;
|
|
12
13
|
export type CellValueFormatterParams<T> = Core.CellValueFormatterParams<T, ReactGridTypes>;
|
package/dist/style.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
:where(.ssg-root,.ssg-popover,.ssg-menu-panel,.ssg-filter-popover,.ssg-select-editor-popover,[data-grid-drag-ghost],.ssg-tooltip){--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--ssg-accent:#3461c9;--ssg-accent-strong:#1d4ed8;--ssg-line:#f1f5f9;--ssg-line-strong:#e5e7eb;--ssg-divider:#d7dce3;--ssg-header-bg:#f8fafc;--ssg-row-hover-bg:#f1f5f9;--ssg-glyph:#94a3b8;--ssg-glyph-hover:#475569;--ssg-icon-hover-bg:#d6dee8;--ssg-icon-active-bg:#e3e9f5;--ssg-icon-active-bg-hover:#d4ddf0;--ssg-icon-active-border:#c7d3ea;--ssg-cell-bg:#fff;--ssg-cell-text:#0f172a;--ssg-readonly-bg:#f8fafc;--ssg-readonly-text:#64748b;--ssg-readonly-hover-bg:#eef2f7;--ssg-header-text:#334155;--ssg-header-hover-bg:#e2e8f0;--ssg-select-bg:#e3e9f5;--ssg-select-bg-hover:#ccd7ee;--ssg-row-selected-bg:#eff4ff;--ssg-group-row-bg:#f2f5fa;--ssg-group-row-hover-bg:#e9eef7;--ssg-checkbox-border:#94a3b8;--ssg-checkbox-bg:#fff;--ssg-checkbox-checked-bg:var(--ssg-accent);--ssg-checkbox-checked-mark:#fff;--ssg-checkbox-hover-border:var(--ssg-accent);--ssg-selection-fill:#3461c914;--ssg-radius:8px;--ssg-icon-btn-size:20px;--ssg-cell-pad-x:10px;--ssg-bar-pad-x:10px;--ssg-bar-pad-y:5px;--ssg-panel-bg:#fff;--ssg-panel-border:#cbd5e1;--ssg-panel-separator:#e2e8f0;--ssg-panel-text-strong:#1e293b;--ssg-panel-text:#334155;--ssg-panel-text-sub:#475569;--ssg-panel-text-muted:#64748b;--ssg-panel-text-faint:#94a3b8;--ssg-panel-text-disabled:#cbd5e1;--ssg-panel-hover-bg:#f1f5f9;--ssg-panel-hover-bg-subtle:#f8fafc;--ssg-panel-accent:#2563eb;--ssg-panel-accent-bg:#eff6ff;--ssg-panel-accent-text:var(--ssg-accent-strong);--ssg-panel-accent-contrast:#fff;--ssg-danger:#dc2626;--ssg-danger-bg:#fef2f2;--ssg-seg-track-bg:#f1f3f5;--ssg-seg-indicator-bg:#fff;--ssg-seg-indicator-shadow:0 1px 3px #0f172a2e;--ssg-root-shadow:0 4px 14px #0f172a0a;--ssg-panel-shadow:0 12px 28px #0f172a29;--ssg-popover-shadow:0 10px 24px #0f172a1f;--ssg-overlay-chip-shadow:0 6px 20px #0f172a2e;--ssg-pane-border:#cbd5e1;--ssg-pane-shadow-left:6px 0 8px -6px #0f172a59;--ssg-pane-shadow-right:-6px 0 8px -6px #0f172a59;--ssg-pill-bg:#0f172ad1;--ssg-pill-text:#f8fafc;--ssg-pill-shadow:0 6px 20px #0f172a40;--ssg-ghost-bg:#1e293b;--ssg-ghost-text:#f8fafc;--ssg-ghost-border:#ffffff1a;--ssg-ghost-shadow:0 8px 20px #02061757, 0 1px 2px #0206173d;--ssg-tooltip-bg:#1e293b;--ssg-tooltip-text:#f8fafc;--ssg-tooltip-shadow:0 4px 12px #02061740;--ssg-invalid:#ef4444;--ssg-invalid-bg:#ef444414;--ssg-drop-indicator:#0f172a;--ssg-glyph-faint:#cbd5e1;--ssg-skeleton-bar:#e2e8f0;--ssg-scrollhint-track-bg:#f3f5f8;--ssg-scrollhint-thumb:#c3cad4;--ssg-scrollhint-thumb-active:#a9b1bf}:where(.ssg-root--density-compact){--ssg-cell-pad-x:6px;--ssg-bar-pad-x:8px;--ssg-bar-pad-y:3px;--ssg-icon-btn-size:18px}:where(.ssg-root--density-comfortable){--ssg-cell-pad-x:14px;--ssg-bar-pad-x:12px;--ssg-bar-pad-y:7px;--ssg-icon-btn-size:22px}:where(.ssg-root--density-compact) .ssg-body-cell{font-size:.85em}:where(.ssg-root--density-comfortable) .ssg-body-cell{font-size:1.1em}:where(.ssg-theme-dark){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--ssg-accent:#4dabf7;--ssg-accent-strong:#74c0fc;--ssg-line:#212226;--ssg-line-strong:#2c2e33;--ssg-divider:#373a40;--ssg-header-bg:#25262b;--ssg-row-hover-bg:#25262b;--ssg-glyph:#909296;--ssg-glyph-hover:#c1c2c5;--ssg-glyph-faint:#5c5f66;--ssg-icon-hover-bg:#2c2e33;--ssg-icon-active-bg:#24344d;--ssg-icon-active-bg-hover:#2b3f5e;--ssg-icon-active-border:#3a5378;--ssg-cell-bg:#1a1b1e;--ssg-cell-text:#c1c2c5;--ssg-readonly-bg:#1f2023;--ssg-readonly-text:#909296;--ssg-readonly-hover-bg:#26272c;--ssg-header-text:#c1c2c5;--ssg-header-hover-bg:#2c2e33;--ssg-select-bg:#24344d;--ssg-select-bg-hover:#2b3f5e;--ssg-row-selected-bg:#1e2c44;--ssg-group-row-bg:#222429;--ssg-group-row-hover-bg:#292b31;--ssg-checkbox-border:#5c5f66;--ssg-checkbox-bg:#1a1b1e;--ssg-checkbox-checked-mark:#141517;--ssg-selection-fill:#4dabf721;--ssg-panel-bg:#25262b;--ssg-panel-border:#373a40;--ssg-panel-separator:#2c2e33;--ssg-panel-text-strong:#f1f3f5;--ssg-panel-text:#c1c2c5;--ssg-panel-text-sub:#a6a7ab;--ssg-panel-text-muted:#909296;--ssg-panel-text-faint:#5c5f66;--ssg-panel-text-disabled:#43464d;--ssg-panel-hover-bg:#2c2e33;--ssg-panel-hover-bg-subtle:#26272c;--ssg-panel-accent:#4dabf7;--ssg-panel-accent-bg:#1d3450;--ssg-panel-accent-contrast:#141517;--ssg-danger:#ff6b6b;--ssg-danger-bg:#3a2325;--ssg-seg-track-bg:#1e1f23;--ssg-seg-indicator-bg:#373a40;--ssg-seg-indicator-shadow:0 1px 3px #00000080;--ssg-root-shadow:0 4px 14px #0006;--ssg-panel-shadow:0 12px 28px #0000008c;--ssg-popover-shadow:0 10px 24px #00000080;--ssg-overlay-chip-shadow:0 6px 20px #00000073;--ssg-pane-border:#373a40;--ssg-pane-shadow-left:6px 0 8px -6px #0000008c;--ssg-pane-shadow-right:-6px 0 8px -6px #0000008c;--ssg-pill-bg:#373a40f2;--ssg-pill-text:#f1f3f5;--ssg-pill-shadow:0 6px 20px #00000073;--ssg-ghost-bg:#373a40;--ssg-ghost-text:#f1f3f5;--ssg-ghost-border:#ffffff1f;--ssg-ghost-shadow:0 8px 20px #00000080, 0 1px 2px #00000059;--ssg-tooltip-bg:#373a40;--ssg-tooltip-text:#f1f3f5;--ssg-tooltip-shadow:0 4px 12px #00000073;--ssg-invalid:#f87171;--ssg-invalid-bg:#f8717124;--ssg-drop-indicator:#c1c2c5;--ssg-skeleton-bar:#2c2e33;--ssg-scrollhint-track-bg:#1f2126;--ssg-scrollhint-thumb:#41454d;--ssg-scrollhint-thumb-active:#545a64}:where(.ssg-root,.ssg-popover,.ssg-menu-panel,.ssg-filter-popover,.ssg-tooltip),:where(.ssg-root,.ssg-popover,.ssg-menu-panel,.ssg-filter-popover,.ssg-tooltip) :where(*),:where(.ssg-root,.ssg-popover,.ssg-menu-panel,.ssg-filter-popover,.ssg-tooltip) :where(*):before,:where(.ssg-root,.ssg-popover,.ssg-menu-panel,.ssg-filter-popover,.ssg-tooltip) :where(*):after{box-sizing:border-box}.ssg-root{border:1px solid var(--ssg-divider);border-radius:var(--ssg-radius);touch-action:manipulation;background-color:var(--ssg-cell-bg);min-width:0;box-shadow:var(--ssg-root-shadow);overflow:hidden}.ssg-icon-btn{width:var(--ssg-icon-btn-size);height:var(--ssg-icon-btn-size);color:var(--ssg-glyph);cursor:pointer;background-color:#0000;border:1px solid #0000;border-radius:6px;flex:none;justify-content:center;align-items:center;padding:0;font-size:11px;line-height:1;transition:background-color .1s,color .1s;display:inline-flex}.ssg-icon-btn:hover{background-color:var(--ssg-icon-hover-bg);color:var(--ssg-glyph-hover)}.ssg-icon-btn--active{border-color:var(--ssg-icon-active-border);background-color:var(--ssg-icon-active-bg);color:var(--ssg-accent)}.ssg-icon-btn--active:hover{background-color:var(--ssg-icon-active-bg-hover);color:var(--ssg-accent)}.ssg-body-cell{box-sizing:border-box;padding:0 var(--ssg-cell-pad-x);border-right:1px solid var(--ssg-line);border-bottom:1px solid var(--ssg-line-strong);background-color:var(--ssg-cell-bg);color:var(--ssg-cell-text);white-space:nowrap;cursor:default;-webkit-user-select:none;user-select:none;outline:none;align-items:center;display:flex;position:absolute;top:0;overflow:hidden}.ssg-body-cell--autoheight{white-space:normal;word-break:break-word;align-items:flex-start;overflow:visible}.ssg-body-cell--align-center{text-align:center;justify-content:center}.ssg-body-cell--align-right{text-align:right;justify-content:flex-end}.ssg-body-cell--row-hovered{background-color:var(--ssg-row-hover-bg)}.ssg-group-cell{background-color:var(--ssg-group-row-bg);font-weight:600}.ssg-group-cell.ssg-body-cell--row-hovered{background-color:var(--ssg-group-row-hover-bg)}.ssg-group-toggle{width:18px;height:18px;color:var(--ssg-glyph-hover);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;margin-right:2px;padding:0;font-size:12px;line-height:1;display:inline-flex}.ssg-group-toggle:hover{background-color:var(--ssg-icon-hover-bg);color:var(--ssg-accent)}.ssg-group-toggle:focus-visible{outline:2px solid var(--ssg-accent);outline-offset:1px}.ssg-group-indent{flex:none;display:inline-block}.ssg-group-label{text-overflow:ellipsis;overflow:hidden}.ssg-group-count{color:var(--ssg-glyph);flex:none;margin-left:4px;font-size:.85em;font-weight:400}.ssg-detail-band{box-sizing:border-box;background-color:var(--ssg-group-row-bg);border-bottom:1px solid var(--ssg-divider)}.ssg-detail-card-holder{box-sizing:border-box;height:100%;padding:8px 12px;position:sticky}.ssg-detail-card{box-sizing:border-box;border:1px solid var(--ssg-line-strong);background-color:var(--ssg-cell-bg);height:100%;color:var(--ssg-cell-text);text-align:left;white-space:normal;cursor:auto;-webkit-user-select:text;user-select:text;border-radius:6px;font-size:13px;font-weight:400;overflow:auto}.ssg-detail-toggle{width:18px;height:18px;color:var(--ssg-glyph-hover);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;margin:0 auto;padding:0;font-size:12px;line-height:1;display:inline-flex}.ssg-detail-toggle:hover{background-color:var(--ssg-icon-hover-bg);color:var(--ssg-accent)}.ssg-detail-toggle:focus-visible{outline:2px solid var(--ssg-accent);outline-offset:1px}.ssg-body-cell--detail-toggle,.ssg-body-cell--row-drag-handle{justify-content:center;padding:0}.ssg-row-drag-handle{width:18px;height:20px;color:var(--ssg-glyph-faint);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;border-radius:4px;justify-content:center;align-items:center;display:inline-flex}.ssg-row-drag-handle:hover{background-color:var(--ssg-icon-hover-bg);color:var(--ssg-glyph-hover)}.ssg-row-drag-handle--disabled{opacity:.35;cursor:not-allowed}.ssg-row-drag-handle--disabled:hover{color:var(--ssg-glyph-faint);background-color:#0000}.ssg-body-row[data-ssg-row-dragging] .ssg-body-cell,.ssg-body-row[data-ssg-row-dragging] .ssg-row-header-cell{opacity:.45}:where(.ssg-root--dim-readonly) .ssg-body-cell--readonly{background-color:var(--ssg-readonly-bg);color:var(--ssg-readonly-text)}:where(.ssg-root--dim-readonly) .ssg-body-cell--readonly.ssg-body-cell--row-hovered{background-color:var(--ssg-readonly-hover-bg)}.ssg-header-row{z-index:6;background-color:var(--ssg-header-bg);position:sticky;top:0}.ssg-header-cell{box-sizing:border-box;border-right:1px solid var(--ssg-line);border-bottom:1px solid var(--ssg-divider);background-color:var(--ssg-header-bg);color:var(--ssg-header-text);align-items:center;gap:4px;padding:0 6px;font-size:13px;font-weight:600;display:flex;position:absolute;top:0}.ssg-header-cell--hovered{background-color:var(--ssg-header-hover-bg)}.ssg-header-cell--selected{background-color:var(--ssg-select-bg)}.ssg-header-cell--selected.ssg-header-cell--hovered{background-color:var(--ssg-select-bg-hover)}.ssg-row-header-cell{z-index:5;justify-content:center;font-weight:500;left:0}.ssg-corner-cell{z-index:7;border-right:1px solid var(--ssg-line-strong);justify-content:center;padding:0;line-height:1;left:0}.ssg-row-checkbox{box-sizing:border-box;border:1.5px solid var(--ssg-checkbox-border);background-color:var(--ssg-checkbox-bg);border-radius:4px;width:16px;height:16px;transition:background-color .12s,border-color .12s;display:inline-block;position:relative}.ssg-row-checkbox[data-state=checked],.ssg-row-checkbox[data-state=indeterminate]{border-color:var(--ssg-checkbox-checked-bg);background-color:var(--ssg-checkbox-checked-bg)}.ssg-row-checkbox[data-state=checked]:after{content:"";border:solid var(--ssg-checkbox-checked-mark);border-width:0 2px 2px 0;width:6px;height:10px;position:absolute;top:1.5px;left:4.5px;transform:rotate(45deg)}.ssg-row-checkbox[data-state=indeterminate]:after{content:"";background-color:var(--ssg-checkbox-checked-mark);border-radius:1px;height:2px;position:absolute;top:6.5px;left:3px;right:3px}.ssg-row-checkbox[data-disabled=true]{opacity:.45}.ssg-row-header-cell--checkbox:hover .ssg-row-checkbox[data-state=unchecked],.ssg-corner-cell--checkbox:hover .ssg-row-checkbox[data-state=unchecked]{border-color:var(--ssg-checkbox-hover-border)}.ssg-active-cell-overlay{box-sizing:border-box;border:2px solid var(--ssg-accent);pointer-events:none;z-index:4}.ssg-selection-overlay{box-sizing:border-box;border:2px solid var(--ssg-accent);background-color:var(--ssg-selection-fill);pointer-events:none;z-index:2}.ssg-cell-editor{pointer-events:none;z-index:5}.ssg-cell-editor-input{box-sizing:border-box;border:2px solid var(--ssg-accent);width:100%;height:100%;padding:0 var(--ssg-cell-pad-x);color:var(--ssg-cell-text);background-color:var(--ssg-cell-bg);pointer-events:auto;outline:none;margin:0;font-size:16px}.ssg-cell-editor-input--select{cursor:default;caret-color:#0000}.ssg-select-editor-popover{box-sizing:border-box;overscroll-behavior:contain;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);box-shadow:var(--ssg-popover-shadow);z-index:1000;border-radius:8px;padding:4px;position:fixed;overflow-y:auto}.ssg-select-editor-option{box-sizing:border-box;height:28px;color:var(--ssg-panel-text);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:none;user-select:none;border-radius:6px;padding:0 10px;font-size:13px;line-height:28px;overflow:hidden}.ssg-select-editor-option--highlighted{background-color:var(--ssg-panel-accent-bg);color:var(--ssg-panel-accent-text)}.ssg-select-editor-empty{height:28px;color:var(--ssg-panel-text-muted);padding:0 10px;font-size:12px;line-height:28px}.ssg-cell-checkbox{cursor:pointer;align-items:center;display:inline-flex}.ssg-cell-checkbox[aria-disabled=true]{cursor:default}.ssg-body-cell--invalid{background-color:var(--ssg-invalid-bg)}.ssg-body-cell--invalid:after{content:"";border-top:6px solid var(--ssg-invalid);pointer-events:none;border-left:6px solid #0000;position:absolute;top:0;right:0}.ssg-cell-editor-input--invalid{border-color:var(--ssg-invalid)}.ssg-cell-editor-error{white-space:nowrap;text-overflow:ellipsis;color:#fff;background-color:var(--ssg-invalid);max-width:280px;box-shadow:var(--ssg-popover-shadow);pointer-events:none;z-index:6;border-radius:6px;padding:4px 8px;font-size:12px;line-height:1.5;position:absolute;top:calc(100% + 4px);left:0;overflow:hidden}.ssg-cell-editor-error--above{top:auto;bottom:calc(100% + 4px)}.ssg-bar--top{border-bottom:1px solid var(--ssg-divider)}.ssg-bar--bottom{border-top:1px solid var(--ssg-divider)}.ssg-bar-container{padding:var(--ssg-bar-pad-y) var(--ssg-bar-pad-x);background-color:var(--ssg-header-bg);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px;display:flex}.ssg-bar-group{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.ssg-bar-leading{min-width:0;color:var(--ssg-header-text);flex:auto;font-size:12px}.ssg-bar-title{letter-spacing:.06em;text-transform:uppercase;color:var(--ssg-glyph);margin-right:2px;font-size:10px;font-weight:600}.ssg-bar-chip{color:var(--ssg-header-text);font-variant-numeric:tabular-nums;white-space:nowrap;background-color:#0000;border:none;border-radius:5px;align-items:center;padding:1px 6px;font-size:11.5px;display:inline-flex}.ssg-bar-chip--emphasis{background-color:var(--ssg-header-hover-bg);color:var(--ssg-header-text);font-weight:600}.ssg-bar-chip--action{font-family:inherit;line-height:inherit;cursor:pointer}.ssg-bar-chip--action:hover{background-color:var(--ssg-icon-active-bg);color:var(--ssg-accent-strong)}.ssg-bar-input{box-sizing:border-box;min-width:0;color:var(--ssg-cell-text);caret-color:var(--ssg-cell-text);-webkit-text-fill-color:var(--ssg-cell-text);background-color:#0000;border:none;outline:none;flex:auto;padding:6px 0;font-size:13px;line-height:1.4}.ssg-bar-input-group{box-sizing:border-box;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-cell-bg);border-radius:6px;align-items:center;gap:6px;width:100%;max-width:380px;padding:0 8px;display:flex}.ssg-bar-input-group:focus-within{border-color:var(--ssg-accent)}.ssg-bar-container>.ssg-bar-input-group:only-child{flex:auto;max-width:480px}.ssg-bar-input-icon{color:var(--ssg-glyph);pointer-events:none;flex:none;justify-content:center;align-items:center;display:inline-flex}.ssg-bar-input-clear{width:18px;height:18px;color:var(--ssg-glyph);cursor:pointer;background-color:#0000;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.ssg-bar-input-clear:hover{background-color:var(--ssg-row-hover-bg);color:var(--ssg-glyph-hover)}.ssg-filter-chip-bar{padding:var(--ssg-bar-pad-y) var(--ssg-bar-pad-x);background-color:var(--ssg-header-bg);border-bottom:1px solid var(--ssg-divider);flex-wrap:wrap;align-items:center;gap:6px;display:flex}.ssg-filter-chip{border:1px solid var(--ssg-icon-active-border);background-color:var(--ssg-icon-active-bg);border-radius:6px;align-items:center;display:inline-flex;overflow:hidden}.ssg-filter-chip--hidden{opacity:.75}.ssg-filter-chip-label{max-width:260px;color:var(--ssg-accent-strong);cursor:pointer;background-color:#0000;border:none;align-items:center;gap:5px;padding:2px 6px 2px 8px;font-size:11.5px;line-height:1.5;display:inline-flex}.ssg-filter-chip-label:disabled{cursor:default}.ssg-filter-chip-label:not(:disabled):hover{background-color:var(--ssg-icon-active-bg-hover)}.ssg-filter-chip-name{white-space:nowrap;font-weight:700}.ssg-filter-chip-summary{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.ssg-filter-chip-clear{width:18px;color:var(--ssg-accent-strong);cursor:pointer;background-color:#0000;border:none;justify-content:center;align-self:stretch;align-items:center;font-size:12px;line-height:1;display:flex}.ssg-filter-chip-clear:disabled{cursor:default;color:var(--ssg-glyph)}.ssg-filter-chip-clear:not(:disabled):hover{background-color:var(--ssg-icon-active-bg-hover)}.ssg-filter-chip-bar-clear-all{color:var(--ssg-glyph-hover);cursor:pointer;white-space:nowrap;background-color:#0000;border:none;border-radius:5px;padding:2px 6px;font-size:11.5px}.ssg-filter-chip-bar-clear-all:disabled{color:var(--ssg-glyph);cursor:default}.ssg-filter-chip-bar-clear-all:not(:disabled):hover{background-color:var(--ssg-header-hover-bg)}.ssg-popover{box-sizing:border-box;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);box-shadow:var(--ssg-panel-shadow);z-index:1000;border-radius:12px;flex-direction:column;padding:12px;display:flex;position:fixed}.ssg-popover-header{border-bottom:1px solid var(--ssg-panel-separator);justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;padding-bottom:8px;display:flex}.ssg-popover-title{color:var(--ssg-panel-text-strong);-webkit-user-select:none;user-select:none;font-size:13px;font-weight:700}.ssg-popover-close{width:24px;height:24px;color:var(--ssg-panel-text-muted);cursor:pointer;background-color:#0000;border:none;border-radius:6px;justify-content:center;align-items:center;font-size:16px;line-height:1;display:flex}.ssg-popover-close:hover{background-color:var(--ssg-panel-hover-bg)}.ssg-popover-footer{border-top:1px solid var(--ssg-panel-separator);gap:8px;margin-top:8px;padding-top:8px;display:flex}.ssg-popover-header--draggable{cursor:grab;touch-action:none}.ssg-popover-header--draggable:active{cursor:grabbing}.ssg-toolpanel{max-height:420px}@keyframes ssg-toolpanel-flash{0%{box-shadow:0 0 0 3px var(--ssg-panel-accent-bg), 0 0 0 4px var(--ssg-panel-accent), var(--ssg-panel-shadow)}to{box-shadow:var(--ssg-panel-shadow)}}.ssg-toolpanel--flash{animation:.45s ease-out ssg-toolpanel-flash}@media (prefers-reduced-motion:reduce){.ssg-toolpanel--flash{animation:none}}.ssg-toolpanel-header{border-bottom:1px solid var(--ssg-panel-separator);align-items:center;gap:8px;margin-bottom:8px;padding-bottom:8px;display:flex}.ssg-toolpanel-seg{background-color:var(--ssg-seg-track-bg);border-radius:9px;flex:auto;min-width:0;padding:3px;display:flex;position:relative}.ssg-toolpanel-seg-indicator{width:calc((100% - 6px) / var(--ssg-seg-count));background-color:var(--ssg-seg-indicator-bg);box-shadow:var(--ssg-seg-indicator-shadow);transform:translateX(calc(var(--ssg-seg-index) * 100%));border-radius:7px;transition:transform .16s;position:absolute;top:3px;bottom:3px;left:3px}.ssg-toolpanel-seg-btn{z-index:1;min-width:0;color:var(--ssg-panel-text-muted);white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:7px;flex:1 1 0;justify-content:center;align-items:center;gap:5px;padding:4px 6px;font-size:12.5px;font-weight:500;line-height:1.3;transition:color .12s;display:inline-flex;position:relative}.ssg-toolpanel-seg-btn:not(.ssg-toolpanel-seg-btn--active):hover{color:var(--ssg-panel-text-sub)}.ssg-toolpanel-seg-btn--active{color:var(--ssg-panel-text-strong);cursor:default;font-weight:600}.ssg-toolpanel-seg-badge{background-color:var(--ssg-panel-accent);min-width:16px;height:16px;color:var(--ssg-panel-accent-contrast);text-align:center;border-radius:8px;padding:0 4px;font-size:10px;font-weight:700;line-height:16px}.ssg-toolpanel-body{flex-direction:column;flex:auto;min-width:0;min-height:240px;display:flex}.ssg-sort-list{flex-direction:column;flex:1;gap:6px;min-height:0;margin:0 -4px;padding:0 4px;display:flex;overflow-y:auto}.ssg-sort-empty{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;padding:10px 4px;font-size:12px}.ssg-sort-level{opacity:1;border-top:2px solid #0000;align-items:center;gap:6px;display:flex}.ssg-sort-level--drop-before{border-top-color:var(--ssg-panel-accent)}.ssg-sort-level--dragging{opacity:.4}.ssg-sort-handle{cursor:grab;touch-action:none;border-radius:6px;flex:none;justify-content:center;align-items:center;width:16px;height:26px;display:flex}.ssg-sort-handle--dragging{cursor:grabbing}.ssg-sort-handle--disabled{cursor:default}.ssg-sort-handle:not(.ssg-sort-handle--disabled):hover{background-color:var(--ssg-panel-hover-bg)}.ssg-sort-badge{background-color:var(--ssg-panel-accent-bg);width:18px;height:18px;color:var(--ssg-panel-accent);-webkit-user-select:none;user-select:none;border-radius:9px;flex:none;justify-content:center;align-items:center;font-size:11px;font-weight:700;display:flex}.ssg-sort-select{box-sizing:border-box;border:1px solid var(--ssg-panel-border);min-width:0;color:var(--ssg-panel-text);background-color:var(--ssg-panel-bg);cursor:pointer;border-radius:6px;flex:1;padding:5px 6px;font-size:13px}.ssg-sort-select:disabled{cursor:default}.ssg-sort-dir-group{flex:none;display:flex}.ssg-sort-dir-btn{box-sizing:border-box;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);color:var(--ssg-panel-text-sub);cursor:pointer;flex:none;padding:4px 9px;font-size:12px;line-height:1.4}.ssg-sort-dir-group>.ssg-sort-dir-btn:first-child{border-right:none;border-top-left-radius:6px;border-bottom-left-radius:6px}.ssg-sort-dir-group>.ssg-sort-dir-btn:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.ssg-sort-dir-btn--active{border-color:var(--ssg-panel-accent);background-color:var(--ssg-panel-accent);color:var(--ssg-panel-accent-contrast)}.ssg-sort-dir-btn:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-sort-delete{width:26px;height:26px;color:var(--ssg-panel-text-muted);cursor:pointer;background-color:#0000;border:none;border-radius:6px;flex:none;justify-content:center;align-items:center;font-size:15px;line-height:1;display:flex}.ssg-sort-delete:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-sort-delete:not(:disabled):hover{background-color:var(--ssg-danger-bg);color:var(--ssg-danger)}.ssg-sort-drop-end{border-top:2px solid var(--ssg-panel-accent);height:0}.ssg-sort-footer-btn{box-sizing:border-box;border:1px solid var(--ssg-panel-separator);color:var(--ssg-panel-text);cursor:pointer;text-align:center;-webkit-user-select:none;user-select:none;background-color:#0000;border-radius:8px;font-size:13px}.ssg-sort-footer-btn--add{flex:1;padding:7px 8px}.ssg-sort-footer-btn--clear{flex:none;padding:7px 12px}.ssg-sort-footer-btn:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-sort-footer-btn:not(:disabled):hover{background-color:var(--ssg-panel-hover-bg)}.ssg-sort-note{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;margin-top:8px;font-size:11px}.ssg-filter-manage-list{flex-direction:column;flex:1;gap:2px;min-height:0;margin:0 -4px;padding:0 4px;display:flex;overflow-y:auto}.ssg-filter-manage-empty{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;padding:10px 4px;font-size:12px}.ssg-filter-manage-row{border-radius:8px;align-items:center;gap:8px;padding:5px 6px;display:flex}.ssg-filter-manage-row:hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-filter-manage-row--global{border-bottom:1px solid var(--ssg-panel-separator);border-radius:0;margin-bottom:6px;padding-bottom:9px}.ssg-filter-manage-row--global:hover{background-color:#0000}.ssg-filter-manage-glyph{color:var(--ssg-panel-accent-text);flex:none;align-items:center;display:flex}.ssg-filter-manage-glyph--global{color:var(--ssg-panel-text-muted)}.ssg-filter-manage-main{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.ssg-filter-manage-name{color:var(--ssg-panel-text-strong);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:700;overflow:hidden}.ssg-filter-manage-hidden-note{color:var(--ssg-panel-text-faint);margin-left:4px;font-size:10.5px;font-weight:500}.ssg-filter-manage-summary{color:var(--ssg-panel-text-muted);text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}.ssg-filter-manage-actions{flex:none;gap:2px;display:flex}.ssg-filter-manage-icon-btn{width:24px;height:24px;color:var(--ssg-panel-text-muted);cursor:pointer;background-color:#0000;border:none;border-radius:6px;justify-content:center;align-items:center;font-size:13px;line-height:1;display:flex}.ssg-filter-manage-icon-btn:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-filter-manage-icon-btn:not(:disabled):hover{background-color:var(--ssg-panel-hover-bg);color:var(--ssg-panel-text-strong)}.ssg-filter-manage-icon-btn--danger:not(:disabled):hover{background-color:var(--ssg-danger-bg);color:var(--ssg-danger)}.ssg-filter-manage-add{border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);min-width:0;color:var(--ssg-panel-text);cursor:pointer;border-radius:6px;outline:none;flex:1;padding:5px 6px;font-size:12px}.ssg-filter-manage-add:focus{border-color:var(--ssg-panel-accent)}.ssg-filter-manage-add:disabled{color:var(--ssg-panel-text-faint);cursor:default}.ssg-filter-manage-clear-all{color:var(--ssg-panel-text-muted);cursor:pointer;white-space:nowrap;background-color:#0000;border:none;border-radius:6px;flex:none;padding:5px 8px;font-size:12px}.ssg-filter-manage-clear-all:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-filter-manage-clear-all:not(:disabled):hover{background-color:var(--ssg-danger-bg);color:var(--ssg-danger)}.ssg-chooser-search-row{align-items:center;gap:8px;margin-bottom:8px;display:flex}.ssg-chooser-master-btn{cursor:pointer;background:0 0;border:none;align-items:center;padding:0;display:flex}.ssg-chooser-master-btn:disabled{cursor:default}.ssg-chooser-search-field{flex:1;min-width:0;position:relative}.ssg-chooser-search-icon{color:var(--ssg-panel-text-faint);pointer-events:none;font-size:13px;line-height:1;position:absolute;top:50%;left:9px;transform:translateY(-50%)}.ssg-chooser-search-input{box-sizing:border-box;border:1px solid var(--ssg-panel-border);width:100%;color:var(--ssg-panel-text);border-radius:8px;outline:none;padding:7px 10px 7px 26px;font-size:13px}.ssg-chooser-list{flex:1;min-height:0;margin:0 -4px;padding:0 4px;overflow-y:auto}.ssg-chooser-empty{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;padding:10px 4px;font-size:12px}.ssg-chooser-section-heading{color:var(--ssg-panel-text-faint);letter-spacing:.4px;-webkit-user-select:none;user-select:none;padding:8px 4px 4px;font-size:11px;font-weight:700}.ssg-chooser-row{opacity:1;border-top:2px solid #0000;align-items:center;gap:4px;display:flex}.ssg-chooser-row--drop-before{border-top-color:var(--ssg-panel-accent)}.ssg-chooser-row--dragging{opacity:.4}.ssg-chooser-handle{cursor:grab;touch-action:none;border-radius:6px;flex:none;justify-content:center;align-items:center;width:18px;height:28px;display:flex}.ssg-chooser-handle--dragging{cursor:grabbing}.ssg-chooser-handle--disabled{cursor:default}.ssg-chooser-handle:not(.ssg-chooser-handle--disabled):hover{background-color:var(--ssg-panel-hover-bg)}.ssg-chooser-toggle{box-sizing:border-box;cursor:pointer;text-align:left;background-color:#0000;border:none;border-radius:8px;flex:1;align-items:center;gap:10px;min-width:0;padding:7px 8px;display:flex}.ssg-chooser-toggle:disabled{cursor:default}.ssg-chooser-toggle:not(:disabled):hover{background-color:var(--ssg-panel-hover-bg)}.ssg-chooser-label{min-width:0;color:var(--ssg-panel-text);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;overflow:hidden}.ssg-chooser-label--muted{color:var(--ssg-panel-text-faint)}.ssg-chooser-drop-end{border-top:2px solid var(--ssg-panel-accent);height:0}.ssg-chooser-footer{border-top:1px solid var(--ssg-panel-separator);margin-top:8px;padding-top:8px}.ssg-chooser-reset-btn{box-sizing:border-box;border:1px solid var(--ssg-panel-separator);width:100%;color:var(--ssg-panel-text);cursor:pointer;text-align:center;-webkit-user-select:none;user-select:none;background-color:#0000;border-radius:8px;padding:7px 8px;font-size:13px;display:block}.ssg-chooser-reset-btn:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-chooser-reset-btn:not(:disabled):hover{background-color:var(--ssg-panel-hover-bg)}.ssg-chooser-note{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;margin-top:8px;font-size:11px}.ssg-checkbox{border:1.5px solid var(--ssg-checkbox-border);background-color:var(--ssg-panel-bg);border-radius:5px;flex:none;justify-content:center;align-items:center;width:18px;height:18px;transition:background-color 80ms,border-color 80ms;display:flex}.ssg-checkbox--filled{border-color:var(--ssg-panel-accent);background-color:var(--ssg-panel-accent)}.ssg-checkbox--disabled{border-color:var(--ssg-panel-border);background-color:var(--ssg-panel-hover-bg)}.ssg-checkbox-dash{background-color:var(--ssg-panel-accent-contrast);border-radius:1px;width:9px;height:2px}.ssg-filter-popover{box-sizing:border-box;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);box-shadow:var(--ssg-popover-shadow);z-index:1000;border-radius:10px;flex-direction:column;padding:10px;display:flex;position:fixed}.ssg-filter-popover>*{flex:none}.ssg-filter-title{color:var(--ssg-panel-text);margin-bottom:6px;font-size:11.5px;font-weight:700}.ssg-filter-hint,.ssg-filter-meta{color:var(--ssg-panel-text-muted);margin-bottom:6px;font-size:10.5px}.ssg-filter-meta--ellipsis{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ssg-filter-collecting{text-align:center;color:var(--ssg-panel-text-muted);padding:20px;font-size:11.5px}.ssg-filter-input{box-sizing:border-box;border:1px solid var(--ssg-panel-border);border-radius:7px;outline:none;width:100%;margin-bottom:6px;padding:5px 8px;font-size:12.5px}.ssg-filter-select{box-sizing:border-box;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);border-radius:7px;outline:none;width:100%;margin-bottom:6px;padding:5px 8px;font-size:12.5px}.ssg-filter-cond-values{align-items:center;gap:6px;display:flex}.ssg-filter-cond-values .ssg-filter-input{flex:1 1 0;min-width:0}.ssg-filter-cond-tilde{color:var(--ssg-panel-text-muted);flex:none;margin-bottom:6px;font-size:12px}.ssg-filter-sec-head{align-items:baseline;gap:8px;margin:2px 0 5px;display:flex}.ssg-filter-sec-label{letter-spacing:.05em;color:var(--ssg-panel-text-muted);font-size:10.5px;font-weight:700}.ssg-filter-sec-meta{color:var(--ssg-panel-text-faint);font-size:10.5px}.ssg-filter-sec-clear{color:var(--ssg-panel-accent);cursor:pointer;background:0 0;border:none;margin-left:auto;padding:0;font-size:10.5px}.ssg-filter-sec-clear:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-filter-sep{border-top:1px solid var(--ssg-panel-separator);margin:2px 0 8px}.ssg-filter-summary{color:var(--ssg-panel-text);background-color:var(--ssg-panel-accent-bg);text-overflow:ellipsis;white-space:nowrap;border-radius:6px;margin-bottom:8px;padding:4px 7px;font-size:10.5px;overflow:hidden}.ssg-filter-presets{flex-wrap:wrap;gap:5px;margin-bottom:6px;display:flex}.ssg-filter-preset-chip{border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);color:var(--ssg-panel-text-muted);cursor:pointer;border-radius:999px;padding:1px 8px;font-size:10.5px}.ssg-filter-preset-chip--active{border-color:var(--ssg-panel-accent);background-color:var(--ssg-panel-accent-bg);color:var(--ssg-panel-accent)}.ssg-filter-tree-toggle{width:14px;color:var(--ssg-panel-text-muted);cursor:pointer;background:0 0;border:none;flex:none;padding:0;font-size:10px}.ssg-filter-tree-toggle--placeholder{visibility:hidden}.ssg-filter-selectall{cursor:pointer;height:24px;color:var(--ssg-panel-text);border-bottom:1px solid var(--ssg-panel-separator);-webkit-user-select:none;user-select:none;align-items:center;gap:8px;padding:0 8px;font-size:11.5px;display:flex}.ssg-filter-selectall-label{font-weight:600}.ssg-filter-list{border:1px solid var(--ssg-panel-separator);border-top:none;border-radius:0 0 8px 8px;flex:0 auto;height:176px;min-height:84px;margin-bottom:6px;overflow-y:auto}.ssg-filter-empty{color:var(--ssg-panel-text-faint);text-align:center;padding:10px;font-size:11.5px}.ssg-filter-virt{width:100%;position:relative}.ssg-filter-option{box-sizing:border-box;cursor:pointer;color:var(--ssg-panel-text);-webkit-user-select:none;user-select:none;align-items:center;gap:8px;padding:0 8px;font-size:11.5px;display:flex;position:absolute;top:0;left:0;right:0}.ssg-filter-option-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ssg-filter-footer{justify-content:flex-end;gap:8px;display:flex}.ssg-filter-btn-secondary{border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);color:var(--ssg-panel-text-sub);cursor:pointer;border-radius:7px;padding:4px 9px;font-size:11.5px}.ssg-filter-btn-primary{border:1px solid var(--ssg-panel-accent);background-color:var(--ssg-panel-accent);color:var(--ssg-panel-accent-contrast);cursor:pointer;border-radius:7px;padding:4px 9px;font-size:11.5px}.ssg-dp-root{flex:1 1 0;min-width:0;position:relative}.ssg-dp-field{border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);border-radius:7px;align-items:stretch;margin-bottom:6px;display:flex;overflow:hidden}.ssg-dp-field--open{border-color:var(--ssg-panel-accent)}.ssg-dp-field--invalid{border-color:#d64545}.ssg-dp-input{font-variant-numeric:tabular-nums;min-width:0;color:var(--ssg-panel-text);background:0 0;border:none;outline:none;flex:1 1 0;padding:5px 5px 5px 6px;font-family:inherit;font-size:11px}.ssg-dp-input::placeholder{color:var(--ssg-panel-text-faint)}.ssg-dp-cal-btn{border:none;border-left:1px solid var(--ssg-panel-separator);width:20px;color:var(--ssg-panel-text-muted);cursor:pointer;background:0 0;flex:none;justify-content:center;align-items:center;display:flex}.ssg-dp-cal-btn:hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-dp-panel{z-index:10;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);width:218px;box-shadow:var(--ssg-popover-shadow);border-radius:9px;padding:8px;position:absolute;top:calc(100% - 2px);left:0}.ssg-dp-panel--right{left:auto;right:0}.ssg-dp-nav{align-items:center;gap:4px;margin-bottom:6px;display:flex}.ssg-dp-nav-btn{width:22px;height:22px;color:var(--ssg-panel-text-muted);cursor:pointer;background:0 0;border:none;border-radius:5px;flex:none;font-size:12px;line-height:1}.ssg-dp-nav-btn:hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-dp-nav-title{text-align:center;min-width:0;color:var(--ssg-panel-text);cursor:pointer;background:0 0;border:none;border-radius:5px;flex:1;padding:3px 0;font-family:inherit;font-size:11.5px;font-weight:700}.ssg-dp-nav-title:not(:disabled):hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-dp-nav-title:disabled{cursor:default}.ssg-dp-dow{grid-template-columns:repeat(7,1fr);margin-bottom:2px;display:grid}.ssg-dp-dow span{text-align:center;color:var(--ssg-panel-text-faint);padding:2px 0;font-size:9.5px}.ssg-dp-dow .ssg-dp-dow--sun{color:#d67979}.ssg-dp-dow .ssg-dp-dow--sat{color:#7996d6}.ssg-dp-days{grid-template-columns:repeat(7,1fr);gap:1px;display:grid}.ssg-dp-day{font-variant-numeric:tabular-nums;height:24px;color:var(--ssg-panel-text);cursor:pointer;background:0 0;border:none;border-radius:6px;font-family:inherit;font-size:11px}.ssg-dp-day:hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-dp-day--out{color:var(--ssg-panel-text-faint)}.ssg-dp-day--today{box-shadow:inset 0 0 0 1px var(--ssg-panel-accent);color:var(--ssg-panel-accent);font-weight:700}.ssg-dp-day--selected{background-color:var(--ssg-panel-accent);color:var(--ssg-panel-accent-contrast);font-weight:700}.ssg-dp-day--selected:hover{background-color:var(--ssg-panel-accent)}.ssg-dp-grid{grid-template-columns:repeat(3,1fr);gap:4px;display:grid}.ssg-dp-cell{font-variant-numeric:tabular-nums;height:30px;color:var(--ssg-panel-text);cursor:pointer;background:0 0;border:none;border-radius:6px;font-family:inherit;font-size:11px}.ssg-dp-cell:hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-dp-cell--selected{background-color:var(--ssg-panel-accent);color:var(--ssg-panel-accent-contrast);font-weight:700}.ssg-dp-cell--selected:hover{background-color:var(--ssg-panel-accent)}.ssg-dp-foot{border-top:1px solid var(--ssg-panel-separator);justify-content:space-between;gap:8px;margin-top:6px;padding-top:6px;display:flex}.ssg-dp-foot-btn{color:var(--ssg-panel-accent);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 4px;font-family:inherit;font-size:10.5px}.ssg-dp-foot-btn--muted{color:var(--ssg-panel-text-muted)}.ssg-dp-foot-btn:hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-menu-panel{box-sizing:border-box;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);box-shadow:var(--ssg-popover-shadow);border-radius:10px;padding:8px}.ssg-menu-title{color:var(--ssg-panel-text);text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid var(--ssg-panel-separator);-webkit-user-select:none;user-select:none;margin-bottom:4px;padding:2px 8px 6px;font-size:12px;font-weight:700;overflow:hidden}.ssg-menu-item{box-sizing:border-box;width:100%;color:var(--ssg-panel-text);text-align:left;cursor:pointer;background-color:#0000;border:none;border-radius:8px;align-items:center;gap:8px;padding:7px 8px;font-size:13px;display:flex}.ssg-menu-item:disabled,.ssg-menu-item--disabled{color:var(--ssg-panel-text-faint);cursor:default}.ssg-menu-item--active,.ssg-menu-item:not(:disabled):not(.ssg-menu-item--disabled):hover{background-color:var(--ssg-panel-hover-bg)}.ssg-menu-section-label{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;padding:6px 8px 2px;font-size:11px;font-weight:600}.ssg-menu-item--danger{color:var(--ssg-danger)}.ssg-menu-item--danger:not(:disabled):not(.ssg-menu-item--disabled):hover{background-color:var(--ssg-danger-bg)}.ssg-menu-submenu-anchor{position:relative}.ssg-menu-icon{text-align:center;flex:none;width:14px}.ssg-menu-sort-icon{text-align:center;width:14px;color:var(--ssg-panel-text-faint);flex:none;font-weight:400}.ssg-menu-sort-icon--active{color:var(--ssg-panel-accent);font-weight:700}.ssg-menu-check{text-align:center;width:14px;color:var(--ssg-panel-accent);flex:none;font-weight:700}.ssg-menu-check--hidden{visibility:hidden}.ssg-menu-label{flex:1;min-width:0}.ssg-menu-label--sorted{color:var(--ssg-panel-accent-text)}.ssg-menu-caret{color:var(--ssg-panel-text-faint);flex:none;font-size:12px;line-height:1}.ssg-menu-separator{border-top:1px solid var(--ssg-panel-separator);margin:4px 0}.ssg-menu-note{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;padding:4px 8px 2px;font-size:11px}.ssg-menu-footer{border-top:1px solid var(--ssg-panel-separator);justify-content:flex-end;margin-top:4px;padding-top:6px;display:flex}.ssg-menu-close-btn{border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);color:var(--ssg-panel-text-sub);cursor:pointer;border-radius:8px;padding:5px 10px;font-size:12px}.ssg-body-row{contain:layout style paint;width:100%;position:absolute;top:0;left:0}.ssg-body-row--checked{background-color:var(--ssg-row-selected-bg)}.ssg-body-row--checked .ssg-body-cell:not(.ssg-body-cell--row-hovered){background-color:#0000}.ssg-header-grip{width:12px;height:20px;color:var(--ssg-glyph-faint);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;display:inline-flex}.ssg-header-status{flex:none;align-items:center;gap:3px;display:inline-flex}.ssg-header-actions{background-color:var(--ssg-header-bg);opacity:0;pointer-events:none;align-items:center;gap:2px;height:100%;padding:0 6px 0 14px;transition:opacity .1s;display:flex;position:absolute;top:0;right:0}.ssg-header-cell:hover .ssg-header-actions{opacity:1;pointer-events:auto;background-color:var(--ssg-header-hover-bg)}@media (hover:none){.ssg-header-actions{opacity:1;pointer-events:auto;background-color:#0000;height:auto;padding:0;position:static}}.ssg-header-actions .ssg-header-grip,.ssg-header-actions .ssg-icon-btn:not(.ssg-icon-btn--active){color:var(--ssg-glyph-hover)}.ssg-header-label{min-width:0;color:var(--ssg-header-text);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.ssg-header-label--filtered{color:var(--ssg-accent-strong)}.ssg-header-sort{color:var(--ssg-accent);flex:none;align-items:center;gap:1px;font-size:12px;font-weight:700;line-height:1;display:inline-flex}.ssg-header-sort-priority{font-size:9px;font-weight:700;line-height:1}.ssg-header-filtered-mark{color:var(--ssg-accent-strong);flex:none;align-items:center;display:inline-flex}@keyframes ssg-header-jump-flash{0%{box-shadow:inset 0 0 0 2px var(--ssg-accent);background-color:var(--ssg-select-bg)}70%{box-shadow:inset 0 0 0 2px var(--ssg-accent);background-color:var(--ssg-select-bg)}to{box-shadow:none}}.ssg-header-cell--jump-flash{animation:1.2s ease-out ssg-header-jump-flash}.ssg-header-resize{cursor:col-resize;z-index:3;touch-action:none;width:6px;height:100%;position:absolute;top:0;right:-3px}.ssg-skeleton-rowheader{color:var(--ssg-glyph)}.ssg-skeleton-bar{background-color:var(--ssg-skeleton-bar);border-radius:4px;height:10px}.ssg-shell{background-color:var(--ssg-cell-bg);position:relative;overflow:hidden}.ssg-scroll-container{max-height:480px;position:relative;overflow:auto}.ssg-inner-row{display:flex}.ssg-center-pane{z-index:1;flex-shrink:0;position:relative}.ssg-empty-state{height:160px;color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;font-size:13px;display:flex;position:sticky;left:0}.ssg-autosize-overlay{pointer-events:none;z-index:5;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.ssg-autosize-pill{background-color:var(--ssg-pill-bg);color:var(--ssg-pill-text);box-shadow:var(--ssg-pill-shadow);-webkit-user-select:none;user-select:none;border-radius:8px;padding:8px 14px;font-size:13px;font-weight:600}.ssg-filter-overlay{pointer-events:none;z-index:5;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.ssg-filter-overlay-chip{background-color:var(--ssg-cell-bg);border:1px solid var(--ssg-line-strong);box-shadow:var(--ssg-overlay-chip-shadow);color:var(--ssg-readonly-text);font-variant-numeric:tabular-nums;white-space:nowrap;-webkit-user-select:none;user-select:none;border-radius:999px;align-items:center;gap:8px;padding:6px 12px;font-size:12px;display:inline-flex}.ssg-filter-overlay-text{text-align:center;min-width:5.5em}.ssg-filter-spinner{border:2px solid var(--ssg-line-strong);border-top-color:var(--ssg-accent);border-radius:50%;width:14px;height:14px;animation:.7s linear infinite ssg-filter-spin}@keyframes ssg-filter-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.ssg-filter-spinner{animation:none}}.ssg-ssrm-error-bars{z-index:5;flex-direction:column;align-items:center;gap:8px;max-width:calc(100% - 24px);display:flex;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.ssg-ssrm-error-bar{background-color:var(--ssg-pill-bg);max-width:100%;color:var(--ssg-pill-text);box-shadow:var(--ssg-pill-shadow);white-space:nowrap;-webkit-user-select:none;user-select:none;border-radius:999px;align-items:center;gap:10px;padding:6px 8px 6px 14px;font-size:12.5px;display:flex}.ssg-ssrm-error-bar-dot{background-color:var(--ssg-invalid);border-radius:50%;flex:none;width:8px;height:8px}.ssg-ssrm-error-bar-msg{text-overflow:ellipsis;overflow:hidden}.ssg-ssrm-error-bar-retry{appearance:none;font:inherit;cursor:pointer;background-color:var(--ssg-pill-text);color:var(--ssg-ghost-bg);border:none;border-radius:999px;padding:3px 12px;font-weight:600}.ssg-ssrm-error-bar-close{appearance:none;color:inherit;opacity:.7;cursor:pointer;background:0 0;border:none;padding:2px 6px;font-size:13px;line-height:1}.ssg-ssrm-error-bar-close:hover{opacity:1}.ssg-col-drop-indicator{background-color:var(--ssg-drop-indicator);width:2px}.ssg-col-drop-indicator:before,.ssg-col-drop-indicator:after{content:"";background-color:var(--ssg-drop-indicator);width:7px;height:7px;position:absolute;left:50%;transform:translate(-50%)rotate(45deg)}.ssg-col-drop-indicator:before{top:-3px}.ssg-col-drop-indicator:after{bottom:-3px}.ssg-row-drop-indicator{background-color:var(--ssg-drop-indicator);pointer-events:none;z-index:8;height:2px;display:none;position:absolute;left:0;right:0}.ssg-row-drop-indicator--cap:before{content:"";background-color:var(--ssg-drop-indicator);border-radius:50%;width:7px;height:7px;position:absolute;top:50%;left:0;transform:translateY(-50%)}.ssg-tooltip{z-index:9000;pointer-events:none;opacity:0;white-space:pre-line;overflow-wrap:break-word;background-color:var(--ssg-tooltip-bg);max-width:260px;color:var(--ssg-tooltip-text);box-shadow:var(--ssg-tooltip-shadow);border-radius:6px;padding:5px 10px;font-size:12px;font-weight:500;line-height:1.45;transition:opacity .12s,transform .12s;position:fixed;transform:translateY(2px)}.ssg-tooltip--visible{opacity:1;transform:translateY(0)}.ssg-scroll-hint{z-index:5;pointer-events:none;position:absolute;inset:0;overflow:hidden}.ssg-scroll-hint-bubble{background-color:var(--ssg-pill-bg);color:var(--ssg-pill-text);box-shadow:var(--ssg-pill-shadow);white-space:nowrap;opacity:0;border-radius:6px;flex-direction:column;align-items:flex-end;row-gap:1px;padding:4px 10px;font-size:12px;line-height:1.4;transition:opacity .18s;display:flex;position:absolute;transform:translateY(-50%)}.ssg-scroll-hint-bubble--visible{opacity:1}.ssg-scroll-hint-bubble-main{font-variant-numeric:tabular-nums;font-weight:600}.ssg-scroll-hint-bubble-total{opacity:.72;font-size:10px;font-weight:400}.ssg-scroll-hint-bubble-detail{font-variant-numeric:tabular-nums;opacity:.9;text-overflow:ellipsis;max-width:240px;font-size:11px;overflow:hidden}.ssg-scroll-hint-ruler{background:linear-gradient(to left, var(--ssg-cell-bg) 62%, transparent);opacity:0;width:76px;transition:opacity .18s;position:absolute;bottom:0}.ssg-scroll-hint-ruler--visible{opacity:.96}.ssg-scroll-hint-ruler-tick{width:100%;height:0;position:absolute;right:0}.ssg-scroll-hint-ruler-tick:before{content:"";background-color:var(--ssg-glyph);width:10px;height:1px;position:absolute;top:0;right:0}.ssg-scroll-hint-ruler-label{color:var(--ssg-glyph-hover);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:10px;line-height:1;position:absolute;top:0;right:14px;transform:translateY(-50%)}.ssg-scroll-hint-jumpline{border-top:1px dashed var(--ssg-accent);opacity:.9;height:0;position:absolute;left:0}.ssg-scroll-hint-jumpline-label{background-color:var(--ssg-pill-bg);color:var(--ssg-pill-text);box-shadow:var(--ssg-pill-shadow);white-space:nowrap;font-variant-numeric:tabular-nums;border-radius:6px;padding:2px 8px;font-size:11px;font-weight:600;line-height:1.4;position:absolute;bottom:5px;right:6px}.ssg-scroll-hint-jumpline-label--below{top:5px;bottom:auto}.ssg-scroll-hint-jumpline-detail{opacity:.9;font-weight:400}.ssg-scroll-hint-scrollbar{pointer-events:auto;touch-action:none;background-color:var(--ssg-scrollhint-track-bg);border-left:1px solid var(--ssg-line-strong);position:absolute;right:0}.ssg-scroll-hint-scrollbar-thumb{background-color:var(--ssg-scrollhint-thumb);border-radius:4px;transition:background-color .12s;position:absolute;left:3px;right:3px}.ssg-scroll-hint-scrollbar:hover .ssg-scroll-hint-scrollbar-thumb,.ssg-scroll-hint-scrollbar--dragging .ssg-scroll-hint-scrollbar-thumb{background-color:var(--ssg-scrollhint-thumb-active)}.ssg-scroll-container--custom-scrollbar{scrollbar-color:var(--ssg-scrollhint-thumb) var(--ssg-scrollhint-track-bg);margin-right:14px}.ssg-scroll-container--custom-scrollbar::-webkit-scrollbar{width:0;height:10px}.ssg-scroll-container--custom-scrollbar::-webkit-scrollbar-track{background-color:var(--ssg-scrollhint-track-bg)}.ssg-scroll-container--custom-scrollbar::-webkit-scrollbar-thumb{background-color:var(--ssg-scrollhint-thumb);border:2px solid var(--ssg-scrollhint-track-bg);border-radius:5px}.ssg-scroll-container--custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--ssg-scrollhint-thumb-active)}@media (prefers-reduced-motion:reduce){.ssg-scroll-hint-bubble,.ssg-scroll-hint-ruler{transition:none}}
|
|
1
|
+
:where(.ssg-root,.ssg-popover,.ssg-menu-panel,.ssg-filter-popover,.ssg-select-editor-popover,[data-grid-drag-ghost],.ssg-tooltip){--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--ssg-accent:#3461c9;--ssg-accent-strong:#1d4ed8;--ssg-line:#f1f5f9;--ssg-line-strong:#e5e7eb;--ssg-divider:#d7dce3;--ssg-header-bg:#f8fafc;--ssg-row-hover-bg:#f1f5f9;--ssg-glyph:#94a3b8;--ssg-glyph-hover:#475569;--ssg-icon-hover-bg:#d6dee8;--ssg-icon-active-bg:#e3e9f5;--ssg-icon-active-bg-hover:#d4ddf0;--ssg-icon-active-border:#c7d3ea;--ssg-cell-bg:#fff;--ssg-cell-text:#0f172a;--ssg-readonly-bg:#f8fafc;--ssg-readonly-text:#64748b;--ssg-readonly-hover-bg:#eef2f7;--ssg-header-text:#334155;--ssg-header-hover-bg:#e2e8f0;--ssg-select-bg:#e3e9f5;--ssg-select-bg-hover:#ccd7ee;--ssg-row-selected-bg:#eff4ff;--ssg-group-row-bg:#f2f5fa;--ssg-group-row-hover-bg:#e9eef7;--ssg-label-row-bg:#eef2f7;--ssg-label-row-text:#1e293b;--ssg-label-row-accent:var(--ssg-accent);--ssg-checkbox-border:#94a3b8;--ssg-checkbox-bg:#fff;--ssg-checkbox-checked-bg:var(--ssg-accent);--ssg-checkbox-checked-mark:#fff;--ssg-checkbox-hover-border:var(--ssg-accent);--ssg-selection-fill:#3461c914;--ssg-radius:8px;--ssg-icon-btn-size:20px;--ssg-cell-pad-x:10px;--ssg-bar-pad-x:10px;--ssg-bar-pad-y:5px;--ssg-panel-bg:#fff;--ssg-panel-border:#cbd5e1;--ssg-panel-separator:#e2e8f0;--ssg-panel-text-strong:#1e293b;--ssg-panel-text:#334155;--ssg-panel-text-sub:#475569;--ssg-panel-text-muted:#64748b;--ssg-panel-text-faint:#94a3b8;--ssg-panel-text-disabled:#cbd5e1;--ssg-panel-hover-bg:#f1f5f9;--ssg-panel-hover-bg-subtle:#f8fafc;--ssg-panel-accent:#2563eb;--ssg-panel-accent-bg:#eff6ff;--ssg-panel-accent-text:var(--ssg-accent-strong);--ssg-panel-accent-contrast:#fff;--ssg-danger:#dc2626;--ssg-danger-bg:#fef2f2;--ssg-seg-track-bg:#f1f3f5;--ssg-seg-indicator-bg:#fff;--ssg-seg-indicator-shadow:0 1px 3px #0f172a2e;--ssg-root-shadow:0 4px 14px #0f172a0a;--ssg-panel-shadow:0 12px 28px #0f172a29;--ssg-popover-shadow:0 10px 24px #0f172a1f;--ssg-overlay-chip-shadow:0 6px 20px #0f172a2e;--ssg-pane-border:#cbd5e1;--ssg-pane-shadow-left:6px 0 8px -6px #0f172a59;--ssg-pane-shadow-right:-6px 0 8px -6px #0f172a59;--ssg-pill-bg:#0f172ad1;--ssg-pill-text:#f8fafc;--ssg-pill-shadow:0 6px 20px #0f172a40;--ssg-ghost-bg:#1e293b;--ssg-ghost-text:#f8fafc;--ssg-ghost-border:#ffffff1a;--ssg-ghost-shadow:0 8px 20px #02061757, 0 1px 2px #0206173d;--ssg-tooltip-bg:#1e293b;--ssg-tooltip-text:#f8fafc;--ssg-tooltip-shadow:0 4px 12px #02061740;--ssg-invalid:#ef4444;--ssg-invalid-bg:#ef444414;--ssg-drop-indicator:#0f172a;--ssg-glyph-faint:#cbd5e1;--ssg-skeleton-bar:#e2e8f0;--ssg-scrollhint-track-bg:#f3f5f8;--ssg-scrollhint-thumb:#c3cad4;--ssg-scrollhint-thumb-active:#a9b1bf}:where(.ssg-root--density-compact){--ssg-cell-pad-x:6px;--ssg-bar-pad-x:8px;--ssg-bar-pad-y:3px;--ssg-icon-btn-size:18px}:where(.ssg-root--density-comfortable){--ssg-cell-pad-x:14px;--ssg-bar-pad-x:12px;--ssg-bar-pad-y:7px;--ssg-icon-btn-size:22px}:where(.ssg-root--density-compact) .ssg-body-cell{font-size:.85em}:where(.ssg-root--density-comfortable) .ssg-body-cell{font-size:1.1em}:where(.ssg-theme-dark){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--ssg-accent:#4dabf7;--ssg-accent-strong:#74c0fc;--ssg-line:#212226;--ssg-line-strong:#2c2e33;--ssg-divider:#373a40;--ssg-header-bg:#25262b;--ssg-row-hover-bg:#25262b;--ssg-glyph:#909296;--ssg-glyph-hover:#c1c2c5;--ssg-glyph-faint:#5c5f66;--ssg-icon-hover-bg:#2c2e33;--ssg-icon-active-bg:#24344d;--ssg-icon-active-bg-hover:#2b3f5e;--ssg-icon-active-border:#3a5378;--ssg-cell-bg:#1a1b1e;--ssg-cell-text:#c1c2c5;--ssg-readonly-bg:#1f2023;--ssg-readonly-text:#909296;--ssg-readonly-hover-bg:#26272c;--ssg-header-text:#c1c2c5;--ssg-header-hover-bg:#2c2e33;--ssg-select-bg:#24344d;--ssg-select-bg-hover:#2b3f5e;--ssg-row-selected-bg:#1e2c44;--ssg-group-row-bg:#222429;--ssg-group-row-hover-bg:#292b31;--ssg-label-row-bg:#24272e;--ssg-label-row-text:#e6e7ea;--ssg-label-row-accent:var(--ssg-accent);--ssg-checkbox-border:#5c5f66;--ssg-checkbox-bg:#1a1b1e;--ssg-checkbox-checked-mark:#141517;--ssg-selection-fill:#4dabf721;--ssg-panel-bg:#25262b;--ssg-panel-border:#373a40;--ssg-panel-separator:#2c2e33;--ssg-panel-text-strong:#f1f3f5;--ssg-panel-text:#c1c2c5;--ssg-panel-text-sub:#a6a7ab;--ssg-panel-text-muted:#909296;--ssg-panel-text-faint:#5c5f66;--ssg-panel-text-disabled:#43464d;--ssg-panel-hover-bg:#2c2e33;--ssg-panel-hover-bg-subtle:#26272c;--ssg-panel-accent:#4dabf7;--ssg-panel-accent-bg:#1d3450;--ssg-panel-accent-contrast:#141517;--ssg-danger:#ff6b6b;--ssg-danger-bg:#3a2325;--ssg-seg-track-bg:#1e1f23;--ssg-seg-indicator-bg:#373a40;--ssg-seg-indicator-shadow:0 1px 3px #00000080;--ssg-root-shadow:0 4px 14px #0006;--ssg-panel-shadow:0 12px 28px #0000008c;--ssg-popover-shadow:0 10px 24px #00000080;--ssg-overlay-chip-shadow:0 6px 20px #00000073;--ssg-pane-border:#373a40;--ssg-pane-shadow-left:6px 0 8px -6px #0000008c;--ssg-pane-shadow-right:-6px 0 8px -6px #0000008c;--ssg-pill-bg:#373a40f2;--ssg-pill-text:#f1f3f5;--ssg-pill-shadow:0 6px 20px #00000073;--ssg-ghost-bg:#373a40;--ssg-ghost-text:#f1f3f5;--ssg-ghost-border:#ffffff1f;--ssg-ghost-shadow:0 8px 20px #00000080, 0 1px 2px #00000059;--ssg-tooltip-bg:#373a40;--ssg-tooltip-text:#f1f3f5;--ssg-tooltip-shadow:0 4px 12px #00000073;--ssg-invalid:#f87171;--ssg-invalid-bg:#f8717124;--ssg-drop-indicator:#c1c2c5;--ssg-skeleton-bar:#2c2e33;--ssg-scrollhint-track-bg:#1f2126;--ssg-scrollhint-thumb:#41454d;--ssg-scrollhint-thumb-active:#545a64}:where(.ssg-root,.ssg-popover,.ssg-menu-panel,.ssg-filter-popover,.ssg-tooltip),:where(.ssg-root,.ssg-popover,.ssg-menu-panel,.ssg-filter-popover,.ssg-tooltip) :where(*),:where(.ssg-root,.ssg-popover,.ssg-menu-panel,.ssg-filter-popover,.ssg-tooltip) :where(*):before,:where(.ssg-root,.ssg-popover,.ssg-menu-panel,.ssg-filter-popover,.ssg-tooltip) :where(*):after{box-sizing:border-box}.ssg-root{border:1px solid var(--ssg-divider);border-radius:var(--ssg-radius);touch-action:manipulation;background-color:var(--ssg-cell-bg);min-width:0;box-shadow:var(--ssg-root-shadow);overflow:hidden}.ssg-icon-btn{width:var(--ssg-icon-btn-size);height:var(--ssg-icon-btn-size);color:var(--ssg-glyph);cursor:pointer;background-color:#0000;border:1px solid #0000;border-radius:6px;flex:none;justify-content:center;align-items:center;padding:0;font-size:11px;line-height:1;transition:background-color .1s,color .1s;display:inline-flex}.ssg-icon-btn:hover{background-color:var(--ssg-icon-hover-bg);color:var(--ssg-glyph-hover)}.ssg-icon-btn--active{border-color:var(--ssg-icon-active-border);background-color:var(--ssg-icon-active-bg);color:var(--ssg-accent)}.ssg-icon-btn--active:hover{background-color:var(--ssg-icon-active-bg-hover);color:var(--ssg-accent)}.ssg-body-cell{box-sizing:border-box;padding:0 var(--ssg-cell-pad-x);border-right:1px solid var(--ssg-line);border-bottom:1px solid var(--ssg-line-strong);background-color:var(--ssg-cell-bg);color:var(--ssg-cell-text);white-space:nowrap;cursor:default;-webkit-user-select:none;user-select:none;outline:none;align-items:center;display:flex;position:absolute;top:0;overflow:hidden}.ssg-body-cell--autoheight{white-space:normal;word-break:break-word;align-items:flex-start;overflow:visible}.ssg-body-cell--align-center{text-align:center;justify-content:center}.ssg-body-cell--align-right{text-align:right;justify-content:flex-end}.ssg-body-cell--row-hovered{background-color:var(--ssg-row-hover-bg)}.ssg-group-cell{background-color:var(--ssg-group-row-bg);font-weight:600}.ssg-group-cell.ssg-body-cell--row-hovered{background-color:var(--ssg-group-row-hover-bg)}.ssg-group-toggle{width:18px;height:18px;color:var(--ssg-glyph-hover);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;margin-right:2px;padding:0;font-size:12px;line-height:1;display:inline-flex}.ssg-group-toggle:hover{background-color:var(--ssg-icon-hover-bg);color:var(--ssg-accent)}.ssg-group-toggle:focus-visible{outline:2px solid var(--ssg-accent);outline-offset:1px}.ssg-group-indent{flex:none;display:inline-block}.ssg-group-label{text-overflow:ellipsis;overflow:hidden}.ssg-group-count{color:var(--ssg-glyph);flex:none;margin-left:4px;font-size:.85em;font-weight:400}.ssg-label-row{contain:layout style;background-color:var(--ssg-label-row-bg);border-bottom:1px solid var(--ssg-divider)}.ssg-row-header-cell--label{background-color:var(--ssg-label-row-bg)}.ssg-label-row-content-holder{box-sizing:border-box;align-items:center;display:flex;position:sticky;top:0;overflow:hidden}.ssg-label-row-content{box-sizing:border-box;min-width:0;max-width:100%;height:100%;padding:0 var(--ssg-cell-pad-x);color:var(--ssg-label-row-text);white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:8px;font-size:13px;font-weight:600;display:flex;overflow:hidden}.ssg-label-row-content--default:before{content:"";background-color:var(--ssg-label-row-accent);border-radius:2px;flex:none;width:3px;height:1.1em}.ssg-label-row-text{text-overflow:ellipsis;overflow:hidden}.ssg-sticky-label-layer{z-index:5;pointer-events:none;height:0;position:sticky;left:0;overflow:visible}.ssg-label-row--sticky{pointer-events:auto;box-shadow:0 1px 0 var(--ssg-divider)}.ssg-detail-band{box-sizing:border-box;background-color:var(--ssg-group-row-bg);border-bottom:1px solid var(--ssg-divider)}.ssg-detail-card-holder{box-sizing:border-box;height:100%;padding:8px 12px;position:sticky}.ssg-detail-card{box-sizing:border-box;border:1px solid var(--ssg-line-strong);background-color:var(--ssg-cell-bg);height:100%;color:var(--ssg-cell-text);text-align:left;white-space:normal;cursor:auto;-webkit-user-select:text;user-select:text;border-radius:6px;font-size:13px;font-weight:400;overflow:auto}.ssg-detail-toggle{width:18px;height:18px;color:var(--ssg-glyph-hover);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;margin:0 auto;padding:0;font-size:12px;line-height:1;display:inline-flex}.ssg-detail-toggle:hover{background-color:var(--ssg-icon-hover-bg);color:var(--ssg-accent)}.ssg-detail-toggle:focus-visible{outline:2px solid var(--ssg-accent);outline-offset:1px}.ssg-body-cell--detail-toggle,.ssg-body-cell--row-drag-handle{justify-content:center;padding:0}.ssg-row-drag-handle{width:18px;height:20px;color:var(--ssg-glyph-faint);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;border-radius:4px;justify-content:center;align-items:center;display:inline-flex}.ssg-row-drag-handle:hover{background-color:var(--ssg-icon-hover-bg);color:var(--ssg-glyph-hover)}.ssg-row-drag-handle--disabled{opacity:.35;cursor:not-allowed}.ssg-row-drag-handle--disabled:hover{color:var(--ssg-glyph-faint);background-color:#0000}.ssg-body-row[data-ssg-row-dragging] .ssg-body-cell,.ssg-body-row[data-ssg-row-dragging] .ssg-row-header-cell{opacity:.45}:where(.ssg-root--dim-readonly) .ssg-body-cell--readonly{background-color:var(--ssg-readonly-bg);color:var(--ssg-readonly-text)}:where(.ssg-root--dim-readonly) .ssg-body-cell--readonly.ssg-body-cell--row-hovered{background-color:var(--ssg-readonly-hover-bg)}.ssg-header-row{z-index:6;background-color:var(--ssg-header-bg);position:sticky;top:0}.ssg-header-cell{box-sizing:border-box;border-right:1px solid var(--ssg-line);border-bottom:1px solid var(--ssg-divider);background-color:var(--ssg-header-bg);color:var(--ssg-header-text);align-items:center;gap:4px;padding:0 6px;font-size:13px;font-weight:600;display:flex;position:absolute;top:0}.ssg-header-cell--hovered{background-color:var(--ssg-header-hover-bg)}.ssg-header-cell--selected{background-color:var(--ssg-select-bg)}.ssg-header-cell--selected.ssg-header-cell--hovered{background-color:var(--ssg-select-bg-hover)}.ssg-row-header-cell{z-index:5;justify-content:center;font-weight:500;left:0}.ssg-corner-cell{z-index:7;border-right:1px solid var(--ssg-line-strong);justify-content:center;padding:0;line-height:1;left:0}.ssg-row-checkbox{box-sizing:border-box;border:1.5px solid var(--ssg-checkbox-border);background-color:var(--ssg-checkbox-bg);border-radius:4px;width:16px;height:16px;transition:background-color .12s,border-color .12s;display:inline-block;position:relative}.ssg-row-checkbox[data-state=checked],.ssg-row-checkbox[data-state=indeterminate]{border-color:var(--ssg-checkbox-checked-bg);background-color:var(--ssg-checkbox-checked-bg)}.ssg-row-checkbox[data-state=checked]:after{content:"";border:solid var(--ssg-checkbox-checked-mark);border-width:0 2px 2px 0;width:6px;height:10px;position:absolute;top:1.5px;left:4.5px;transform:rotate(45deg)}.ssg-row-checkbox[data-state=indeterminate]:after{content:"";background-color:var(--ssg-checkbox-checked-mark);border-radius:1px;height:2px;position:absolute;top:6.5px;left:3px;right:3px}.ssg-row-checkbox[data-disabled=true]{opacity:.45}.ssg-row-header-cell--checkbox:hover .ssg-row-checkbox[data-state=unchecked],.ssg-corner-cell--checkbox:hover .ssg-row-checkbox[data-state=unchecked]{border-color:var(--ssg-checkbox-hover-border)}.ssg-active-cell-overlay{box-sizing:border-box;border:2px solid var(--ssg-accent);pointer-events:none;z-index:4}.ssg-selection-overlay{box-sizing:border-box;border:2px solid var(--ssg-accent);background-color:var(--ssg-selection-fill);pointer-events:none;z-index:2}.ssg-cell-editor{pointer-events:none;z-index:5}.ssg-cell-editor-input{box-sizing:border-box;border:2px solid var(--ssg-accent);width:100%;height:100%;padding:0 var(--ssg-cell-pad-x);color:var(--ssg-cell-text);background-color:var(--ssg-cell-bg);pointer-events:auto;outline:none;margin:0;font-size:16px}.ssg-cell-editor-input--select{cursor:default;caret-color:#0000}.ssg-select-editor-popover{box-sizing:border-box;overscroll-behavior:contain;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);box-shadow:var(--ssg-popover-shadow);z-index:1000;border-radius:8px;padding:4px;position:fixed;overflow-y:auto}.ssg-select-editor-option{box-sizing:border-box;height:28px;color:var(--ssg-panel-text);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:none;user-select:none;border-radius:6px;padding:0 10px;font-size:13px;line-height:28px;overflow:hidden}.ssg-select-editor-option--highlighted{background-color:var(--ssg-panel-accent-bg);color:var(--ssg-panel-accent-text)}.ssg-select-editor-empty{height:28px;color:var(--ssg-panel-text-muted);padding:0 10px;font-size:12px;line-height:28px}.ssg-cell-checkbox{cursor:pointer;align-items:center;display:inline-flex}.ssg-cell-checkbox[aria-disabled=true]{cursor:default}.ssg-body-cell--invalid{background-color:var(--ssg-invalid-bg)}.ssg-body-cell--invalid:after{content:"";border-top:6px solid var(--ssg-invalid);pointer-events:none;border-left:6px solid #0000;position:absolute;top:0;right:0}.ssg-cell-editor-input--invalid{border-color:var(--ssg-invalid)}.ssg-cell-editor-error{white-space:nowrap;text-overflow:ellipsis;color:#fff;background-color:var(--ssg-invalid);max-width:280px;box-shadow:var(--ssg-popover-shadow);pointer-events:none;z-index:6;border-radius:6px;padding:4px 8px;font-size:12px;line-height:1.5;position:absolute;top:calc(100% + 4px);left:0;overflow:hidden}.ssg-cell-editor-error--above{top:auto;bottom:calc(100% + 4px)}.ssg-bar--top{border-bottom:1px solid var(--ssg-divider)}.ssg-bar--bottom{border-top:1px solid var(--ssg-divider)}.ssg-bar-container{padding:var(--ssg-bar-pad-y) var(--ssg-bar-pad-x);background-color:var(--ssg-header-bg);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px;display:flex}.ssg-bar-group{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.ssg-bar-leading{min-width:0;color:var(--ssg-header-text);flex:auto;font-size:12px}.ssg-bar-title{letter-spacing:.06em;text-transform:uppercase;color:var(--ssg-glyph);margin-right:2px;font-size:10px;font-weight:600}.ssg-bar-chip{color:var(--ssg-header-text);font-variant-numeric:tabular-nums;white-space:nowrap;background-color:#0000;border:none;border-radius:5px;align-items:center;padding:1px 6px;font-size:11.5px;display:inline-flex}.ssg-bar-chip--emphasis{background-color:var(--ssg-header-hover-bg);color:var(--ssg-header-text);font-weight:600}.ssg-bar-chip--action{font-family:inherit;line-height:inherit;cursor:pointer}.ssg-bar-chip--action:hover{background-color:var(--ssg-icon-active-bg);color:var(--ssg-accent-strong)}.ssg-bar-input{box-sizing:border-box;min-width:0;color:var(--ssg-cell-text);caret-color:var(--ssg-cell-text);-webkit-text-fill-color:var(--ssg-cell-text);background-color:#0000;border:none;outline:none;flex:auto;padding:6px 0;font-size:13px;line-height:1.4}.ssg-bar-input-group{box-sizing:border-box;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-cell-bg);border-radius:6px;align-items:center;gap:6px;width:100%;max-width:380px;padding:0 8px;display:flex}.ssg-bar-input-group:focus-within{border-color:var(--ssg-accent)}.ssg-bar-container>.ssg-bar-input-group:only-child{flex:auto;max-width:480px}.ssg-bar-input-icon{color:var(--ssg-glyph);pointer-events:none;flex:none;justify-content:center;align-items:center;display:inline-flex}.ssg-bar-input-clear{width:18px;height:18px;color:var(--ssg-glyph);cursor:pointer;background-color:#0000;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.ssg-bar-input-clear:hover{background-color:var(--ssg-row-hover-bg);color:var(--ssg-glyph-hover)}.ssg-filter-chip-bar{padding:var(--ssg-bar-pad-y) var(--ssg-bar-pad-x);background-color:var(--ssg-header-bg);border-bottom:1px solid var(--ssg-divider);flex-wrap:wrap;align-items:center;gap:6px;display:flex}.ssg-filter-chip{border:1px solid var(--ssg-icon-active-border);background-color:var(--ssg-icon-active-bg);border-radius:6px;align-items:center;display:inline-flex;overflow:hidden}.ssg-filter-chip--hidden{opacity:.75}.ssg-filter-chip-label{max-width:260px;color:var(--ssg-accent-strong);cursor:pointer;background-color:#0000;border:none;align-items:center;gap:5px;padding:2px 6px 2px 8px;font-size:11.5px;line-height:1.5;display:inline-flex}.ssg-filter-chip-label:disabled{cursor:default}.ssg-filter-chip-label:not(:disabled):hover{background-color:var(--ssg-icon-active-bg-hover)}.ssg-filter-chip-name{white-space:nowrap;font-weight:700}.ssg-filter-chip-summary{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.ssg-filter-chip-clear{width:18px;color:var(--ssg-accent-strong);cursor:pointer;background-color:#0000;border:none;justify-content:center;align-self:stretch;align-items:center;font-size:12px;line-height:1;display:flex}.ssg-filter-chip-clear:disabled{cursor:default;color:var(--ssg-glyph)}.ssg-filter-chip-clear:not(:disabled):hover{background-color:var(--ssg-icon-active-bg-hover)}.ssg-filter-chip-bar-clear-all{color:var(--ssg-glyph-hover);cursor:pointer;white-space:nowrap;background-color:#0000;border:none;border-radius:5px;padding:2px 6px;font-size:11.5px}.ssg-filter-chip-bar-clear-all:disabled{color:var(--ssg-glyph);cursor:default}.ssg-filter-chip-bar-clear-all:not(:disabled):hover{background-color:var(--ssg-header-hover-bg)}.ssg-popover{box-sizing:border-box;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);box-shadow:var(--ssg-panel-shadow);z-index:1000;border-radius:12px;flex-direction:column;padding:12px;display:flex;position:fixed}.ssg-popover-header{border-bottom:1px solid var(--ssg-panel-separator);justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;padding-bottom:8px;display:flex}.ssg-popover-title{color:var(--ssg-panel-text-strong);-webkit-user-select:none;user-select:none;font-size:13px;font-weight:700}.ssg-popover-close{width:24px;height:24px;color:var(--ssg-panel-text-muted);cursor:pointer;background-color:#0000;border:none;border-radius:6px;justify-content:center;align-items:center;font-size:16px;line-height:1;display:flex}.ssg-popover-close:hover{background-color:var(--ssg-panel-hover-bg)}.ssg-popover-footer{border-top:1px solid var(--ssg-panel-separator);gap:8px;margin-top:8px;padding-top:8px;display:flex}.ssg-popover-header--draggable{cursor:grab;touch-action:none}.ssg-popover-header--draggable:active{cursor:grabbing}.ssg-toolpanel{max-height:420px}@keyframes ssg-toolpanel-flash{0%{box-shadow:0 0 0 3px var(--ssg-panel-accent-bg), 0 0 0 4px var(--ssg-panel-accent), var(--ssg-panel-shadow)}to{box-shadow:var(--ssg-panel-shadow)}}.ssg-toolpanel--flash{animation:.45s ease-out ssg-toolpanel-flash}@media (prefers-reduced-motion:reduce){.ssg-toolpanel--flash{animation:none}}.ssg-toolpanel-header{border-bottom:1px solid var(--ssg-panel-separator);align-items:center;gap:8px;margin-bottom:8px;padding-bottom:8px;display:flex}.ssg-toolpanel-seg{background-color:var(--ssg-seg-track-bg);border-radius:9px;flex:auto;min-width:0;padding:3px;display:flex;position:relative}.ssg-toolpanel-seg-indicator{width:calc((100% - 6px) / var(--ssg-seg-count));background-color:var(--ssg-seg-indicator-bg);box-shadow:var(--ssg-seg-indicator-shadow);transform:translateX(calc(var(--ssg-seg-index) * 100%));border-radius:7px;transition:transform .16s;position:absolute;top:3px;bottom:3px;left:3px}.ssg-toolpanel-seg-btn{z-index:1;min-width:0;color:var(--ssg-panel-text-muted);white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:7px;flex:1 1 0;justify-content:center;align-items:center;gap:5px;padding:4px 6px;font-size:12.5px;font-weight:500;line-height:1.3;transition:color .12s;display:inline-flex;position:relative}.ssg-toolpanel-seg-btn:not(.ssg-toolpanel-seg-btn--active):hover{color:var(--ssg-panel-text-sub)}.ssg-toolpanel-seg-btn--active{color:var(--ssg-panel-text-strong);cursor:default;font-weight:600}.ssg-toolpanel-seg-badge{background-color:var(--ssg-panel-accent);min-width:16px;height:16px;color:var(--ssg-panel-accent-contrast);text-align:center;border-radius:8px;padding:0 4px;font-size:10px;font-weight:700;line-height:16px}.ssg-toolpanel-body{flex-direction:column;flex:auto;min-width:0;min-height:240px;display:flex}.ssg-sort-list{flex-direction:column;flex:1;gap:6px;min-height:0;margin:0 -4px;padding:0 4px;display:flex;overflow-y:auto}.ssg-sort-empty{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;padding:10px 4px;font-size:12px}.ssg-sort-level{opacity:1;border-top:2px solid #0000;align-items:center;gap:6px;display:flex}.ssg-sort-level--drop-before{border-top-color:var(--ssg-panel-accent)}.ssg-sort-level--dragging{opacity:.4}.ssg-sort-handle{cursor:grab;touch-action:none;border-radius:6px;flex:none;justify-content:center;align-items:center;width:16px;height:26px;display:flex}.ssg-sort-handle--dragging{cursor:grabbing}.ssg-sort-handle--disabled{cursor:default}.ssg-sort-handle:not(.ssg-sort-handle--disabled):hover{background-color:var(--ssg-panel-hover-bg)}.ssg-sort-badge{background-color:var(--ssg-panel-accent-bg);width:18px;height:18px;color:var(--ssg-panel-accent);-webkit-user-select:none;user-select:none;border-radius:9px;flex:none;justify-content:center;align-items:center;font-size:11px;font-weight:700;display:flex}.ssg-sort-select{box-sizing:border-box;border:1px solid var(--ssg-panel-border);min-width:0;color:var(--ssg-panel-text);background-color:var(--ssg-panel-bg);cursor:pointer;border-radius:6px;flex:1;padding:5px 6px;font-size:13px}.ssg-sort-select:disabled{cursor:default}.ssg-sort-dir-group{flex:none;display:flex}.ssg-sort-dir-btn{box-sizing:border-box;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);color:var(--ssg-panel-text-sub);cursor:pointer;flex:none;padding:4px 9px;font-size:12px;line-height:1.4}.ssg-sort-dir-group>.ssg-sort-dir-btn:first-child{border-right:none;border-top-left-radius:6px;border-bottom-left-radius:6px}.ssg-sort-dir-group>.ssg-sort-dir-btn:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.ssg-sort-dir-btn--active{border-color:var(--ssg-panel-accent);background-color:var(--ssg-panel-accent);color:var(--ssg-panel-accent-contrast)}.ssg-sort-dir-btn:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-sort-delete{width:26px;height:26px;color:var(--ssg-panel-text-muted);cursor:pointer;background-color:#0000;border:none;border-radius:6px;flex:none;justify-content:center;align-items:center;font-size:15px;line-height:1;display:flex}.ssg-sort-delete:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-sort-delete:not(:disabled):hover{background-color:var(--ssg-danger-bg);color:var(--ssg-danger)}.ssg-sort-drop-end{border-top:2px solid var(--ssg-panel-accent);height:0}.ssg-sort-footer-btn{box-sizing:border-box;border:1px solid var(--ssg-panel-separator);color:var(--ssg-panel-text);cursor:pointer;text-align:center;-webkit-user-select:none;user-select:none;background-color:#0000;border-radius:8px;font-size:13px}.ssg-sort-footer-btn--add{flex:1;padding:7px 8px}.ssg-sort-footer-btn--clear{flex:none;padding:7px 12px}.ssg-sort-footer-btn:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-sort-footer-btn:not(:disabled):hover{background-color:var(--ssg-panel-hover-bg)}.ssg-sort-note{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;margin-top:8px;font-size:11px}.ssg-filter-manage-list{flex-direction:column;flex:1;gap:2px;min-height:0;margin:0 -4px;padding:0 4px;display:flex;overflow-y:auto}.ssg-filter-manage-empty{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;padding:10px 4px;font-size:12px}.ssg-filter-manage-row{border-radius:8px;align-items:center;gap:8px;padding:5px 6px;display:flex}.ssg-filter-manage-row:hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-filter-manage-row--global{border-bottom:1px solid var(--ssg-panel-separator);border-radius:0;margin-bottom:6px;padding-bottom:9px}.ssg-filter-manage-row--global:hover{background-color:#0000}.ssg-filter-manage-glyph{color:var(--ssg-panel-accent-text);flex:none;align-items:center;display:flex}.ssg-filter-manage-glyph--global{color:var(--ssg-panel-text-muted)}.ssg-filter-manage-main{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.ssg-filter-manage-name{color:var(--ssg-panel-text-strong);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:700;overflow:hidden}.ssg-filter-manage-hidden-note{color:var(--ssg-panel-text-faint);margin-left:4px;font-size:10.5px;font-weight:500}.ssg-filter-manage-summary{color:var(--ssg-panel-text-muted);text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}.ssg-filter-manage-actions{flex:none;gap:2px;display:flex}.ssg-filter-manage-icon-btn{width:24px;height:24px;color:var(--ssg-panel-text-muted);cursor:pointer;background-color:#0000;border:none;border-radius:6px;justify-content:center;align-items:center;font-size:13px;line-height:1;display:flex}.ssg-filter-manage-icon-btn:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-filter-manage-icon-btn:not(:disabled):hover{background-color:var(--ssg-panel-hover-bg);color:var(--ssg-panel-text-strong)}.ssg-filter-manage-icon-btn--danger:not(:disabled):hover{background-color:var(--ssg-danger-bg);color:var(--ssg-danger)}.ssg-filter-manage-add{border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);min-width:0;color:var(--ssg-panel-text);cursor:pointer;border-radius:6px;outline:none;flex:1;padding:5px 6px;font-size:12px}.ssg-filter-manage-add:focus{border-color:var(--ssg-panel-accent)}.ssg-filter-manage-add:disabled{color:var(--ssg-panel-text-faint);cursor:default}.ssg-filter-manage-clear-all{color:var(--ssg-panel-text-muted);cursor:pointer;white-space:nowrap;background-color:#0000;border:none;border-radius:6px;flex:none;padding:5px 8px;font-size:12px}.ssg-filter-manage-clear-all:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-filter-manage-clear-all:not(:disabled):hover{background-color:var(--ssg-danger-bg);color:var(--ssg-danger)}.ssg-chooser-search-row{align-items:center;gap:8px;margin-bottom:8px;display:flex}.ssg-chooser-master-btn{cursor:pointer;background:0 0;border:none;align-items:center;padding:0;display:flex}.ssg-chooser-master-btn:disabled{cursor:default}.ssg-chooser-search-field{flex:1;min-width:0;position:relative}.ssg-chooser-search-icon{color:var(--ssg-panel-text-faint);pointer-events:none;font-size:13px;line-height:1;position:absolute;top:50%;left:9px;transform:translateY(-50%)}.ssg-chooser-search-input{box-sizing:border-box;border:1px solid var(--ssg-panel-border);width:100%;color:var(--ssg-panel-text);border-radius:8px;outline:none;padding:7px 10px 7px 26px;font-size:13px}.ssg-chooser-list{flex:1;min-height:0;margin:0 -4px;padding:0 4px;overflow-y:auto}.ssg-chooser-empty{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;padding:10px 4px;font-size:12px}.ssg-chooser-section-heading{color:var(--ssg-panel-text-faint);letter-spacing:.4px;-webkit-user-select:none;user-select:none;padding:8px 4px 4px;font-size:11px;font-weight:700}.ssg-chooser-row{opacity:1;border-top:2px solid #0000;align-items:center;gap:4px;display:flex}.ssg-chooser-row--drop-before{border-top-color:var(--ssg-panel-accent)}.ssg-chooser-row--dragging{opacity:.4}.ssg-chooser-handle{cursor:grab;touch-action:none;border-radius:6px;flex:none;justify-content:center;align-items:center;width:18px;height:28px;display:flex}.ssg-chooser-handle--dragging{cursor:grabbing}.ssg-chooser-handle--disabled{cursor:default}.ssg-chooser-handle:not(.ssg-chooser-handle--disabled):hover{background-color:var(--ssg-panel-hover-bg)}.ssg-chooser-toggle{box-sizing:border-box;cursor:pointer;text-align:left;background-color:#0000;border:none;border-radius:8px;flex:1;align-items:center;gap:10px;min-width:0;padding:7px 8px;display:flex}.ssg-chooser-toggle:disabled{cursor:default}.ssg-chooser-toggle:not(:disabled):hover{background-color:var(--ssg-panel-hover-bg)}.ssg-chooser-label{min-width:0;color:var(--ssg-panel-text);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;overflow:hidden}.ssg-chooser-label--muted{color:var(--ssg-panel-text-faint)}.ssg-chooser-drop-end{border-top:2px solid var(--ssg-panel-accent);height:0}.ssg-chooser-footer{border-top:1px solid var(--ssg-panel-separator);margin-top:8px;padding-top:8px}.ssg-chooser-reset-btn{box-sizing:border-box;border:1px solid var(--ssg-panel-separator);width:100%;color:var(--ssg-panel-text);cursor:pointer;text-align:center;-webkit-user-select:none;user-select:none;background-color:#0000;border-radius:8px;padding:7px 8px;font-size:13px;display:block}.ssg-chooser-reset-btn:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-chooser-reset-btn:not(:disabled):hover{background-color:var(--ssg-panel-hover-bg)}.ssg-chooser-note{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;margin-top:8px;font-size:11px}.ssg-checkbox{border:1.5px solid var(--ssg-checkbox-border);background-color:var(--ssg-panel-bg);border-radius:5px;flex:none;justify-content:center;align-items:center;width:18px;height:18px;transition:background-color 80ms,border-color 80ms;display:flex}.ssg-checkbox--filled{border-color:var(--ssg-panel-accent);background-color:var(--ssg-panel-accent)}.ssg-checkbox--disabled{border-color:var(--ssg-panel-border);background-color:var(--ssg-panel-hover-bg)}.ssg-checkbox-dash{background-color:var(--ssg-panel-accent-contrast);border-radius:1px;width:9px;height:2px}.ssg-filter-popover{box-sizing:border-box;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);box-shadow:var(--ssg-popover-shadow);z-index:1000;border-radius:10px;flex-direction:column;padding:10px;display:flex;position:fixed}.ssg-filter-popover>*{flex:none}.ssg-filter-title{color:var(--ssg-panel-text);margin-bottom:6px;font-size:11.5px;font-weight:700}.ssg-filter-hint,.ssg-filter-meta{color:var(--ssg-panel-text-muted);margin-bottom:6px;font-size:10.5px}.ssg-filter-meta--ellipsis{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ssg-filter-collecting{text-align:center;color:var(--ssg-panel-text-muted);padding:20px;font-size:11.5px}.ssg-filter-input{box-sizing:border-box;border:1px solid var(--ssg-panel-border);border-radius:7px;outline:none;width:100%;margin-bottom:6px;padding:5px 8px;font-size:12.5px}.ssg-filter-select{box-sizing:border-box;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);border-radius:7px;outline:none;width:100%;margin-bottom:6px;padding:5px 8px;font-size:12.5px}.ssg-filter-cond-values{align-items:center;gap:6px;display:flex}.ssg-filter-cond-values .ssg-filter-input{flex:1 1 0;min-width:0}.ssg-filter-cond-tilde{color:var(--ssg-panel-text-muted);flex:none;margin-bottom:6px;font-size:12px}.ssg-filter-sec-head{align-items:baseline;gap:8px;margin:2px 0 5px;display:flex}.ssg-filter-sec-label{letter-spacing:.05em;color:var(--ssg-panel-text-muted);font-size:10.5px;font-weight:700}.ssg-filter-sec-meta{color:var(--ssg-panel-text-faint);font-size:10.5px}.ssg-filter-sec-clear{color:var(--ssg-panel-accent);cursor:pointer;background:0 0;border:none;margin-left:auto;padding:0;font-size:10.5px}.ssg-filter-sec-clear:disabled{color:var(--ssg-panel-text-disabled);cursor:default}.ssg-filter-sep{border-top:1px solid var(--ssg-panel-separator);margin:2px 0 8px}.ssg-filter-summary{color:var(--ssg-panel-text);background-color:var(--ssg-panel-accent-bg);text-overflow:ellipsis;white-space:nowrap;border-radius:6px;margin-bottom:8px;padding:4px 7px;font-size:10.5px;overflow:hidden}.ssg-filter-presets{flex-wrap:wrap;gap:5px;margin-bottom:6px;display:flex}.ssg-filter-preset-chip{border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);color:var(--ssg-panel-text-muted);cursor:pointer;border-radius:999px;padding:1px 8px;font-size:10.5px}.ssg-filter-preset-chip--active{border-color:var(--ssg-panel-accent);background-color:var(--ssg-panel-accent-bg);color:var(--ssg-panel-accent)}.ssg-filter-tree-toggle{width:14px;color:var(--ssg-panel-text-muted);cursor:pointer;background:0 0;border:none;flex:none;padding:0;font-size:10px}.ssg-filter-tree-toggle--placeholder{visibility:hidden}.ssg-filter-selectall{cursor:pointer;height:24px;color:var(--ssg-panel-text);border-bottom:1px solid var(--ssg-panel-separator);-webkit-user-select:none;user-select:none;align-items:center;gap:8px;padding:0 8px;font-size:11.5px;display:flex}.ssg-filter-selectall-label{font-weight:600}.ssg-filter-list{border:1px solid var(--ssg-panel-separator);border-top:none;border-radius:0 0 8px 8px;flex:0 auto;height:176px;min-height:84px;margin-bottom:6px;overflow-y:auto}.ssg-filter-empty{color:var(--ssg-panel-text-faint);text-align:center;padding:10px;font-size:11.5px}.ssg-filter-virt{width:100%;position:relative}.ssg-filter-option{box-sizing:border-box;cursor:pointer;color:var(--ssg-panel-text);-webkit-user-select:none;user-select:none;align-items:center;gap:8px;padding:0 8px;font-size:11.5px;display:flex;position:absolute;top:0;left:0;right:0}.ssg-filter-option-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ssg-filter-footer{justify-content:flex-end;gap:8px;display:flex}.ssg-filter-btn-secondary{border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);color:var(--ssg-panel-text-sub);cursor:pointer;border-radius:7px;padding:4px 9px;font-size:11.5px}.ssg-filter-btn-primary{border:1px solid var(--ssg-panel-accent);background-color:var(--ssg-panel-accent);color:var(--ssg-panel-accent-contrast);cursor:pointer;border-radius:7px;padding:4px 9px;font-size:11.5px}.ssg-dp-root{flex:1 1 0;min-width:0;position:relative}.ssg-dp-field{border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);border-radius:7px;align-items:stretch;margin-bottom:6px;display:flex;overflow:hidden}.ssg-dp-field--open{border-color:var(--ssg-panel-accent)}.ssg-dp-field--invalid{border-color:#d64545}.ssg-dp-input{font-variant-numeric:tabular-nums;min-width:0;color:var(--ssg-panel-text);background:0 0;border:none;outline:none;flex:1 1 0;padding:5px 5px 5px 6px;font-family:inherit;font-size:11px}.ssg-dp-input::placeholder{color:var(--ssg-panel-text-faint)}.ssg-dp-cal-btn{border:none;border-left:1px solid var(--ssg-panel-separator);width:20px;color:var(--ssg-panel-text-muted);cursor:pointer;background:0 0;flex:none;justify-content:center;align-items:center;display:flex}.ssg-dp-cal-btn:hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-dp-panel{z-index:10;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);width:218px;box-shadow:var(--ssg-popover-shadow);border-radius:9px;padding:8px;position:absolute;top:calc(100% - 2px);left:0}.ssg-dp-panel--right{left:auto;right:0}.ssg-dp-nav{align-items:center;gap:4px;margin-bottom:6px;display:flex}.ssg-dp-nav-btn{width:22px;height:22px;color:var(--ssg-panel-text-muted);cursor:pointer;background:0 0;border:none;border-radius:5px;flex:none;font-size:12px;line-height:1}.ssg-dp-nav-btn:hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-dp-nav-title{text-align:center;min-width:0;color:var(--ssg-panel-text);cursor:pointer;background:0 0;border:none;border-radius:5px;flex:1;padding:3px 0;font-family:inherit;font-size:11.5px;font-weight:700}.ssg-dp-nav-title:not(:disabled):hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-dp-nav-title:disabled{cursor:default}.ssg-dp-dow{grid-template-columns:repeat(7,1fr);margin-bottom:2px;display:grid}.ssg-dp-dow span{text-align:center;color:var(--ssg-panel-text-faint);padding:2px 0;font-size:9.5px}.ssg-dp-dow .ssg-dp-dow--sun{color:#d67979}.ssg-dp-dow .ssg-dp-dow--sat{color:#7996d6}.ssg-dp-days{grid-template-columns:repeat(7,1fr);gap:1px;display:grid}.ssg-dp-day{font-variant-numeric:tabular-nums;height:24px;color:var(--ssg-panel-text);cursor:pointer;background:0 0;border:none;border-radius:6px;font-family:inherit;font-size:11px}.ssg-dp-day:hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-dp-day--out{color:var(--ssg-panel-text-faint)}.ssg-dp-day--today{box-shadow:inset 0 0 0 1px var(--ssg-panel-accent);color:var(--ssg-panel-accent);font-weight:700}.ssg-dp-day--selected{background-color:var(--ssg-panel-accent);color:var(--ssg-panel-accent-contrast);font-weight:700}.ssg-dp-day--selected:hover{background-color:var(--ssg-panel-accent)}.ssg-dp-grid{grid-template-columns:repeat(3,1fr);gap:4px;display:grid}.ssg-dp-cell{font-variant-numeric:tabular-nums;height:30px;color:var(--ssg-panel-text);cursor:pointer;background:0 0;border:none;border-radius:6px;font-family:inherit;font-size:11px}.ssg-dp-cell:hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-dp-cell--selected{background-color:var(--ssg-panel-accent);color:var(--ssg-panel-accent-contrast);font-weight:700}.ssg-dp-cell--selected:hover{background-color:var(--ssg-panel-accent)}.ssg-dp-foot{border-top:1px solid var(--ssg-panel-separator);justify-content:space-between;gap:8px;margin-top:6px;padding-top:6px;display:flex}.ssg-dp-foot-btn{color:var(--ssg-panel-accent);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 4px;font-family:inherit;font-size:10.5px}.ssg-dp-foot-btn--muted{color:var(--ssg-panel-text-muted)}.ssg-dp-foot-btn:hover{background-color:var(--ssg-panel-hover-bg-subtle)}.ssg-menu-panel{box-sizing:border-box;border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);box-shadow:var(--ssg-popover-shadow);border-radius:10px;padding:8px}.ssg-menu-title{color:var(--ssg-panel-text);text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid var(--ssg-panel-separator);-webkit-user-select:none;user-select:none;margin-bottom:4px;padding:2px 8px 6px;font-size:12px;font-weight:700;overflow:hidden}.ssg-menu-item{box-sizing:border-box;width:100%;color:var(--ssg-panel-text);text-align:left;cursor:pointer;background-color:#0000;border:none;border-radius:8px;align-items:center;gap:8px;padding:7px 8px;font-size:13px;display:flex}.ssg-menu-item:disabled,.ssg-menu-item--disabled{color:var(--ssg-panel-text-faint);cursor:default}.ssg-menu-item--active,.ssg-menu-item:not(:disabled):not(.ssg-menu-item--disabled):hover{background-color:var(--ssg-panel-hover-bg)}.ssg-menu-section-label{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;padding:6px 8px 2px;font-size:11px;font-weight:600}.ssg-menu-item--danger{color:var(--ssg-danger)}.ssg-menu-item--danger:not(:disabled):not(.ssg-menu-item--disabled):hover{background-color:var(--ssg-danger-bg)}.ssg-menu-submenu-anchor{position:relative}.ssg-menu-icon{text-align:center;flex:none;width:14px}.ssg-menu-sort-icon{text-align:center;width:14px;color:var(--ssg-panel-text-faint);flex:none;font-weight:400}.ssg-menu-sort-icon--active{color:var(--ssg-panel-accent);font-weight:700}.ssg-menu-check{text-align:center;width:14px;color:var(--ssg-panel-accent);flex:none;font-weight:700}.ssg-menu-check--hidden{visibility:hidden}.ssg-menu-label{flex:1;min-width:0}.ssg-menu-label--sorted{color:var(--ssg-panel-accent-text)}.ssg-menu-caret{color:var(--ssg-panel-text-faint);flex:none;font-size:12px;line-height:1}.ssg-menu-separator{border-top:1px solid var(--ssg-panel-separator);margin:4px 0}.ssg-menu-note{color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;padding:4px 8px 2px;font-size:11px}.ssg-menu-footer{border-top:1px solid var(--ssg-panel-separator);justify-content:flex-end;margin-top:4px;padding-top:6px;display:flex}.ssg-menu-close-btn{border:1px solid var(--ssg-panel-border);background-color:var(--ssg-panel-bg);color:var(--ssg-panel-text-sub);cursor:pointer;border-radius:8px;padding:5px 10px;font-size:12px}.ssg-body-row{contain:layout style paint;width:100%;position:absolute;top:0;left:0}.ssg-body-row--checked{background-color:var(--ssg-row-selected-bg)}.ssg-body-row--checked .ssg-body-cell:not(.ssg-body-cell--row-hovered){background-color:#0000}.ssg-header-grip{width:12px;height:20px;color:var(--ssg-glyph-faint);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;display:inline-flex}.ssg-header-status{flex:none;align-items:center;gap:3px;display:inline-flex}.ssg-header-actions{background-color:var(--ssg-header-bg);opacity:0;pointer-events:none;align-items:center;gap:2px;height:100%;padding:0 6px 0 14px;transition:opacity .1s;display:flex;position:absolute;top:0;right:0}.ssg-header-cell:hover .ssg-header-actions{opacity:1;pointer-events:auto;background-color:var(--ssg-header-hover-bg)}@media (hover:none){.ssg-header-actions{opacity:1;pointer-events:auto;background-color:#0000;height:auto;padding:0;position:static}}.ssg-header-actions .ssg-header-grip,.ssg-header-actions .ssg-icon-btn:not(.ssg-icon-btn--active){color:var(--ssg-glyph-hover)}.ssg-header-label{min-width:0;color:var(--ssg-header-text);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.ssg-header-label--filtered{color:var(--ssg-accent-strong)}.ssg-header-sort{color:var(--ssg-accent);flex:none;align-items:center;gap:1px;font-size:12px;font-weight:700;line-height:1;display:inline-flex}.ssg-header-sort-priority{font-size:9px;font-weight:700;line-height:1}.ssg-header-filtered-mark{color:var(--ssg-accent-strong);flex:none;align-items:center;display:inline-flex}@keyframes ssg-header-jump-flash{0%{box-shadow:inset 0 0 0 2px var(--ssg-accent);background-color:var(--ssg-select-bg)}70%{box-shadow:inset 0 0 0 2px var(--ssg-accent);background-color:var(--ssg-select-bg)}to{box-shadow:none}}.ssg-header-cell--jump-flash{animation:1.2s ease-out ssg-header-jump-flash}.ssg-header-resize{cursor:col-resize;z-index:3;touch-action:none;width:6px;height:100%;position:absolute;top:0;right:-3px}.ssg-skeleton-rowheader{color:var(--ssg-glyph)}.ssg-skeleton-bar{background-color:var(--ssg-skeleton-bar);border-radius:4px;height:10px}.ssg-shell{background-color:var(--ssg-cell-bg);position:relative;overflow:hidden}.ssg-scroll-container{max-height:480px;position:relative;overflow:auto}.ssg-inner-row{display:flex}.ssg-center-pane{z-index:1;flex-shrink:0;position:relative}.ssg-empty-state{height:160px;color:var(--ssg-panel-text-faint);-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;font-size:13px;display:flex;position:sticky;left:0}.ssg-autosize-overlay{pointer-events:none;z-index:5;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.ssg-autosize-pill{background-color:var(--ssg-pill-bg);color:var(--ssg-pill-text);box-shadow:var(--ssg-pill-shadow);-webkit-user-select:none;user-select:none;border-radius:8px;padding:8px 14px;font-size:13px;font-weight:600}.ssg-filter-overlay{pointer-events:none;z-index:5;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.ssg-filter-overlay-chip{background-color:var(--ssg-cell-bg);border:1px solid var(--ssg-line-strong);box-shadow:var(--ssg-overlay-chip-shadow);color:var(--ssg-readonly-text);font-variant-numeric:tabular-nums;white-space:nowrap;-webkit-user-select:none;user-select:none;border-radius:999px;align-items:center;gap:8px;padding:6px 12px;font-size:12px;display:inline-flex}.ssg-filter-overlay-text{text-align:center;min-width:5.5em}.ssg-filter-spinner{border:2px solid var(--ssg-line-strong);border-top-color:var(--ssg-accent);border-radius:50%;width:14px;height:14px;animation:.7s linear infinite ssg-filter-spin}@keyframes ssg-filter-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.ssg-filter-spinner{animation:none}}.ssg-ssrm-error-bars{z-index:5;flex-direction:column;align-items:center;gap:8px;max-width:calc(100% - 24px);display:flex;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.ssg-ssrm-error-bar{background-color:var(--ssg-pill-bg);max-width:100%;color:var(--ssg-pill-text);box-shadow:var(--ssg-pill-shadow);white-space:nowrap;-webkit-user-select:none;user-select:none;border-radius:999px;align-items:center;gap:10px;padding:6px 8px 6px 14px;font-size:12.5px;display:flex}.ssg-ssrm-error-bar-dot{background-color:var(--ssg-invalid);border-radius:50%;flex:none;width:8px;height:8px}.ssg-ssrm-error-bar-msg{text-overflow:ellipsis;overflow:hidden}.ssg-ssrm-error-bar-retry{appearance:none;font:inherit;cursor:pointer;background-color:var(--ssg-pill-text);color:var(--ssg-ghost-bg);border:none;border-radius:999px;padding:3px 12px;font-weight:600}.ssg-ssrm-error-bar-close{appearance:none;color:inherit;opacity:.7;cursor:pointer;background:0 0;border:none;padding:2px 6px;font-size:13px;line-height:1}.ssg-ssrm-error-bar-close:hover{opacity:1}.ssg-col-drop-indicator{background-color:var(--ssg-drop-indicator);width:2px}.ssg-col-drop-indicator:before,.ssg-col-drop-indicator:after{content:"";background-color:var(--ssg-drop-indicator);width:7px;height:7px;position:absolute;left:50%;transform:translate(-50%)rotate(45deg)}.ssg-col-drop-indicator:before{top:-3px}.ssg-col-drop-indicator:after{bottom:-3px}.ssg-row-drop-indicator{background-color:var(--ssg-drop-indicator);pointer-events:none;z-index:8;height:2px;display:none;position:absolute;left:0;right:0}.ssg-row-drop-indicator--cap:before{content:"";background-color:var(--ssg-drop-indicator);border-radius:50%;width:7px;height:7px;position:absolute;top:50%;left:0;transform:translateY(-50%)}.ssg-tooltip{z-index:9000;pointer-events:none;opacity:0;white-space:pre-line;overflow-wrap:break-word;background-color:var(--ssg-tooltip-bg);max-width:260px;color:var(--ssg-tooltip-text);box-shadow:var(--ssg-tooltip-shadow);border-radius:6px;padding:5px 10px;font-size:12px;font-weight:500;line-height:1.45;transition:opacity .12s,transform .12s;position:fixed;transform:translateY(2px)}.ssg-tooltip--visible{opacity:1;transform:translateY(0)}.ssg-scroll-hint{z-index:5;pointer-events:none;position:absolute;inset:0;overflow:hidden}.ssg-scroll-hint-bubble{background-color:var(--ssg-pill-bg);color:var(--ssg-pill-text);box-shadow:var(--ssg-pill-shadow);white-space:nowrap;opacity:0;border-radius:6px;flex-direction:column;align-items:flex-end;row-gap:1px;padding:4px 10px;font-size:12px;line-height:1.4;transition:opacity .18s;display:flex;position:absolute;transform:translateY(-50%)}.ssg-scroll-hint-bubble--visible{opacity:1}.ssg-scroll-hint-bubble-main{font-variant-numeric:tabular-nums;font-weight:600}.ssg-scroll-hint-bubble-total{opacity:.72;font-size:10px;font-weight:400}.ssg-scroll-hint-bubble-detail{font-variant-numeric:tabular-nums;opacity:.9;text-overflow:ellipsis;max-width:240px;font-size:11px;overflow:hidden}.ssg-scroll-hint-ruler{background:linear-gradient(to left, var(--ssg-cell-bg) 62%, transparent);opacity:0;width:76px;transition:opacity .18s;position:absolute;bottom:0}.ssg-scroll-hint-ruler--visible{opacity:.96}.ssg-scroll-hint-ruler-tick{width:100%;height:0;position:absolute;right:0}.ssg-scroll-hint-ruler-tick:before{content:"";background-color:var(--ssg-glyph);width:10px;height:1px;position:absolute;top:0;right:0}.ssg-scroll-hint-ruler-label{color:var(--ssg-glyph-hover);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:10px;line-height:1;position:absolute;top:0;right:14px;transform:translateY(-50%)}.ssg-scroll-hint-jumpline{border-top:1px dashed var(--ssg-accent);opacity:.9;height:0;position:absolute;left:0}.ssg-scroll-hint-jumpline-label{background-color:var(--ssg-pill-bg);color:var(--ssg-pill-text);box-shadow:var(--ssg-pill-shadow);white-space:nowrap;font-variant-numeric:tabular-nums;border-radius:6px;padding:2px 8px;font-size:11px;font-weight:600;line-height:1.4;position:absolute;bottom:5px;right:6px}.ssg-scroll-hint-jumpline-label--below{top:5px;bottom:auto}.ssg-scroll-hint-jumpline-detail{opacity:.9;font-weight:400}.ssg-scroll-hint-scrollbar{pointer-events:auto;touch-action:none;background-color:var(--ssg-scrollhint-track-bg);border-left:1px solid var(--ssg-line-strong);position:absolute;right:0}.ssg-scroll-hint-scrollbar-thumb{background-color:var(--ssg-scrollhint-thumb);border-radius:4px;transition:background-color .12s;position:absolute;left:3px;right:3px}.ssg-scroll-hint-scrollbar:hover .ssg-scroll-hint-scrollbar-thumb,.ssg-scroll-hint-scrollbar--dragging .ssg-scroll-hint-scrollbar-thumb{background-color:var(--ssg-scrollhint-thumb-active)}.ssg-scroll-container--custom-scrollbar{scrollbar-color:var(--ssg-scrollhint-thumb) var(--ssg-scrollhint-track-bg);margin-right:14px}.ssg-scroll-container--custom-scrollbar::-webkit-scrollbar{width:0;height:10px}.ssg-scroll-container--custom-scrollbar::-webkit-scrollbar-track{background-color:var(--ssg-scrollhint-track-bg)}.ssg-scroll-container--custom-scrollbar::-webkit-scrollbar-thumb{background-color:var(--ssg-scrollhint-thumb);border:2px solid var(--ssg-scrollhint-track-bg);border-radius:5px}.ssg-scroll-container--custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--ssg-scrollhint-thumb-active)}@media (prefers-reduced-motion:reduce){.ssg-scroll-hint-bubble,.ssg-scroll-hint-ruler{transition:none}}
|
|
2
2
|
/*$vite$:1*/
|
package/dist/testing/index.d.ts
CHANGED
package/dist/testing.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=require("@ishibashi0112/spreadsheet-grid-core/testing");Object.keys(e).forEach(function(t){t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:function(){return e[t]}})});
|
package/dist/testing.js
CHANGED
|
@@ -1,51 +1 @@
|
|
|
1
|
-
|
|
2
|
-
function e(e = {}) {
|
|
3
|
-
let t = e.width ?? 1200, n = e.height ?? 600, r = Element.prototype, i = HTMLElement.prototype, a = Object.getOwnPropertyDescriptor(i, "clientHeight"), o = Object.getOwnPropertyDescriptor(i, "clientWidth"), s = r.getBoundingClientRect, c = globalThis.ResizeObserver, l = r.scrollTo;
|
|
4
|
-
Object.defineProperty(i, "clientHeight", {
|
|
5
|
-
configurable: !0,
|
|
6
|
-
get: () => n
|
|
7
|
-
}), Object.defineProperty(i, "clientWidth", {
|
|
8
|
-
configurable: !0,
|
|
9
|
-
get: () => t
|
|
10
|
-
}), r.getBoundingClientRect = () => ({
|
|
11
|
-
x: 0,
|
|
12
|
-
y: 0,
|
|
13
|
-
top: 0,
|
|
14
|
-
left: 0,
|
|
15
|
-
bottom: n,
|
|
16
|
-
right: t,
|
|
17
|
-
width: t,
|
|
18
|
-
height: n,
|
|
19
|
-
toJSON: () => ({})
|
|
20
|
-
});
|
|
21
|
-
class u {
|
|
22
|
-
callback;
|
|
23
|
-
constructor(e) {
|
|
24
|
-
this.callback = e;
|
|
25
|
-
}
|
|
26
|
-
observe(e) {
|
|
27
|
-
let r = {
|
|
28
|
-
inlineSize: t,
|
|
29
|
-
blockSize: n
|
|
30
|
-
};
|
|
31
|
-
this.callback([{
|
|
32
|
-
target: e,
|
|
33
|
-
contentRect: {
|
|
34
|
-
width: t,
|
|
35
|
-
height: n,
|
|
36
|
-
top: 0,
|
|
37
|
-
left: 0
|
|
38
|
-
},
|
|
39
|
-
borderBoxSize: [r],
|
|
40
|
-
contentBoxSize: [r]
|
|
41
|
-
}], this);
|
|
42
|
-
}
|
|
43
|
-
unobserve() {}
|
|
44
|
-
disconnect() {}
|
|
45
|
-
}
|
|
46
|
-
return globalThis.ResizeObserver = u, r.scrollTo ||= () => {}, () => {
|
|
47
|
-
a ? Object.defineProperty(i, "clientHeight", a) : delete i.clientHeight, o ? Object.defineProperty(i, "clientWidth", o) : delete i.clientWidth, r.getBoundingClientRect = s, globalThis.ResizeObserver = c, r.scrollTo = l;
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
//#endregion
|
|
51
|
-
export { e as installJsdomLayoutStubs };
|
|
1
|
+
export * from "@ishibashi0112/spreadsheet-grid-core/testing";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { ColumnFilterUiType, FilterDateInputContext } from '../model/gridTypes';
|
|
2
2
|
export type ColumnFilterDateInputRenderer = (ctx: Omit<FilterDateInputContext, 'columnKey'>) => ReactNode;
|
|
3
3
|
import { type ReactNode, type RefObject } from 'react';
|
|
4
|
-
import { type ColumnFilterSetSelection } from '
|
|
5
|
-
import { type NumberFilterConditionDraft } from '
|
|
6
|
-
import { type TextFilterConditionDraft } from '
|
|
7
|
-
import { type DateFilterConditionDraft } from '
|
|
8
|
-
import { type NormalizedDateFilterPreset } from '
|
|
4
|
+
import { type ColumnFilterSetSelection } from '@ishibashi0112/spreadsheet-grid-core/logic/setFilterSelection';
|
|
5
|
+
import { type NumberFilterConditionDraft } from '@ishibashi0112/spreadsheet-grid-core/logic/numberFilterCondition';
|
|
6
|
+
import { type TextFilterConditionDraft } from '@ishibashi0112/spreadsheet-grid-core/logic/textFilterCondition';
|
|
7
|
+
import { type DateFilterConditionDraft } from '@ishibashi0112/spreadsheet-grid-core/logic/dateFilterCondition';
|
|
8
|
+
import { type NormalizedDateFilterPreset } from '@ishibashi0112/spreadsheet-grid-core/logic/dateFilterPresets';
|
|
9
9
|
import type { GridResolvedSlot } from '../model/gridTypes';
|
|
10
10
|
export type ColumnFilterPopoverLayout = {
|
|
11
11
|
top: number;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type CSSProperties, type ReactNode } from 'react';
|
|
2
|
+
import type { GridLabelRow, GridRowKey } from '../model/gridTypes';
|
|
3
|
+
import type { GridPaneKind } from './GridHeaderRow';
|
|
4
|
+
import type { GridResolvedSlots } from '../model/gridTypes';
|
|
5
|
+
export type GridBodyLabelRowRenderContent<T> = (labelRow: GridLabelRow<T>, rowIndex: number, rowKey: GridRowKey) => ReactNode;
|
|
6
|
+
type GridBodyLabelRowProps<T> = {
|
|
7
|
+
pane: GridPaneKind;
|
|
8
|
+
ownsRowHeader: boolean;
|
|
9
|
+
rowIndex: number;
|
|
10
|
+
rowKey: GridRowKey;
|
|
11
|
+
top: number;
|
|
12
|
+
rowHeight: number;
|
|
13
|
+
rowHeaderCellStyle: CSSProperties;
|
|
14
|
+
labelRow: GridLabelRow<T>;
|
|
15
|
+
renderContent: GridBodyLabelRowRenderContent<T> | null;
|
|
16
|
+
contentStickyLeft: number;
|
|
17
|
+
contentWidth: number;
|
|
18
|
+
rowClassName?: string;
|
|
19
|
+
rowStyle?: CSSProperties;
|
|
20
|
+
slots?: GridResolvedSlots;
|
|
21
|
+
};
|
|
22
|
+
declare function GridBodyLabelRowInner<T>({ pane, ownsRowHeader, rowIndex, rowKey, top, rowHeight, rowHeaderCellStyle, labelRow, renderContent, contentStickyLeft, contentWidth, rowClassName, rowStyle, slots, }: GridBodyLabelRowProps<T>): import("react").JSX.Element;
|
|
23
|
+
export declare const GridBodyLabelRow: typeof GridBodyLabelRowInner;
|
|
24
|
+
export default GridBodyLabelRow;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { CSSProperties, PointerEvent, ReactNode } from 'react';
|
|
2
|
-
import type { SelectionSnapshot } from '
|
|
3
|
-
import type { CellCoord, CellRenderState, GridColumn, RowModel, RowSelectionState, RowStyleContext, SpreadsheetGridProps } from '../model/gridTypes';
|
|
4
|
-
import type
|
|
2
|
+
import type { SelectionSnapshot } from '@ishibashi0112/spreadsheet-grid-core/model/gridSelectors';
|
|
3
|
+
import type { CellCoord, CellRenderState, GridColumn, GridLabelRow, RowModel, RowSelectionState, RowStyleContext, SpreadsheetGridProps } from '../model/gridTypes';
|
|
4
|
+
import { type GridBodyLabelRowRenderContent } from './GridBodyLabelRow';
|
|
5
|
+
import type { PaneColumnEntry } from '@ishibashi0112/spreadsheet-grid-core/logic/geometry';
|
|
5
6
|
import type { GridPaneKind } from './GridHeaderRow';
|
|
6
7
|
import type { GridResolvedSlots, GridSlotProps } from '../model/gridTypes';
|
|
7
8
|
type VirtualRowLike = {
|
|
@@ -9,6 +10,12 @@ type VirtualRowLike = {
|
|
|
9
10
|
start: number;
|
|
10
11
|
size?: number;
|
|
11
12
|
};
|
|
13
|
+
export type GridBodyLabelRowLayer<T> = {
|
|
14
|
+
renderContent: GridBodyLabelRowRenderContent<T> | null;
|
|
15
|
+
contentStickyLeft: number;
|
|
16
|
+
contentWidth: number;
|
|
17
|
+
resolveRowSlot: (labelRow: GridLabelRow<T>) => GridSlotProps | undefined;
|
|
18
|
+
};
|
|
12
19
|
type GridBodyLayerProps<T> = {
|
|
13
20
|
pane: GridPaneKind;
|
|
14
21
|
ownsRowHeader: boolean;
|
|
@@ -24,6 +31,8 @@ type GridBodyLayerProps<T> = {
|
|
|
24
31
|
isServerSide?: boolean;
|
|
25
32
|
collapsedGroupKeys?: ReadonlySet<string>;
|
|
26
33
|
onGroupToggle?: (groupKey: string) => void;
|
|
34
|
+
labelRowLayer?: GridBodyLabelRowLayer<T>;
|
|
35
|
+
labelViewIndexes?: Int32Array;
|
|
27
36
|
rowHeaderCellStyle: CSSProperties;
|
|
28
37
|
hoveredRowIndex: number | null;
|
|
29
38
|
isWholeGridSelected: boolean;
|
|
@@ -44,5 +53,5 @@ type GridBodyLayerProps<T> = {
|
|
|
44
53
|
getRowClassName?: (row: T, rowIndex: number, ctx: RowStyleContext<T>) => GridSlotProps | undefined;
|
|
45
54
|
slots?: GridResolvedSlots;
|
|
46
55
|
};
|
|
47
|
-
export declare function GridBodyLayer<T>({ pane, ownsRowHeader, leadingWidth, rowModel, virtualRows, virtualRowIndexes, renderEntries, rowHeight, autoHeight, showCellOverflowTooltip, showValidationMarks, isServerSide, collapsedGroupKeys, onGroupToggle, rowHeaderCellStyle, hoveredRowIndex, isWholeGridSelected, enableRowSelection, rowSelectionState, activeCell, editingCell, selectionSnapshot, readOnly, canEditCell, onRowHeaderPointerDown, onRowHeaderPointerEnter, onRowHeaderPointerLeave, onCellPointerDown, onCellPointerEnter, onCellDoubleClick, renderCellContent, getRowClassName, slots, }: GridBodyLayerProps<T>): import("react").JSX.Element;
|
|
56
|
+
export declare function GridBodyLayer<T>({ pane, ownsRowHeader, leadingWidth, rowModel, virtualRows, virtualRowIndexes, renderEntries, rowHeight, autoHeight, showCellOverflowTooltip, showValidationMarks, isServerSide, collapsedGroupKeys, onGroupToggle, labelRowLayer, labelViewIndexes, rowHeaderCellStyle, hoveredRowIndex, isWholeGridSelected, enableRowSelection, rowSelectionState, activeCell, editingCell, selectionSnapshot, readOnly, canEditCell, onRowHeaderPointerDown, onRowHeaderPointerEnter, onRowHeaderPointerLeave, onCellPointerDown, onCellPointerEnter, onCellDoubleClick, renderCellContent, getRowClassName, slots, }: GridBodyLayerProps<T>): import("react").JSX.Element;
|
|
48
57
|
export default GridBodyLayer;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
|
-
import type { VerticalRow } from '
|
|
2
|
+
import type { VerticalRow } from '@ishibashi0112/spreadsheet-grid-core/logic/verticalGeometry';
|
|
3
3
|
import type { GridResolvedSlot, GridResolvedSlots } from '../model/gridTypes';
|
|
4
4
|
export type GridDetailLayerEntry = {
|
|
5
5
|
rowKey: string | number;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type CSSProperties, type MouseEvent, type PointerEvent } from 'react';
|
|
2
|
-
import type { SelectionSnapshot } from '
|
|
2
|
+
import type { SelectionSnapshot } from '@ishibashi0112/spreadsheet-grid-core/model/gridSelectors';
|
|
3
3
|
import type { ColumnFilterValue, GridColumn, GridSortState, SelectAllState } from '../model/gridTypes';
|
|
4
|
-
import type { PaneColumnEntry } from '
|
|
4
|
+
import type { PaneColumnEntry } from '@ishibashi0112/spreadsheet-grid-core/logic/geometry';
|
|
5
5
|
import type { GridResolvedSlots } from '../model/gridTypes';
|
|
6
6
|
export type GridPaneKind = 'left' | 'center' | 'right';
|
|
7
7
|
type GridHeaderRowProps<T> = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RefObject } from 'react';
|
|
2
2
|
import type { RowModel } from '../model/gridTypes';
|
|
3
|
-
import type { RowMetrics } from '
|
|
4
|
-
import type { ResolvedScrollHintOptions } from '
|
|
3
|
+
import type { RowMetrics } from '@ishibashi0112/spreadsheet-grid-core/logic/verticalGeometry';
|
|
4
|
+
import type { ResolvedScrollHintOptions } from '@ishibashi0112/spreadsheet-grid-core/logic/scrollHint';
|
|
5
5
|
import type { GridResolvedSlot } from '../model/gridTypes';
|
|
6
6
|
import type { ReactGridTypes } from '../model/gridTypes';
|
|
7
7
|
export declare const SCROLL_HINT_GUTTER_WIDTH_PX = 14;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type CSSProperties } from 'react';
|
|
2
|
+
import type { GridLabelRow, GridRowKey } from '../model/gridTypes';
|
|
3
|
+
import type { GridPaneKind } from './GridHeaderRow';
|
|
4
|
+
import type { GridResolvedSlots } from '../model/gridTypes';
|
|
5
|
+
import type { GridBodyLabelRowRenderContent } from './GridBodyLabelRow';
|
|
6
|
+
export type GridStickyLabelEntry<T> = {
|
|
7
|
+
labelRow: GridLabelRow<T>;
|
|
8
|
+
rowIndex: number;
|
|
9
|
+
rowKey: GridRowKey;
|
|
10
|
+
height: number;
|
|
11
|
+
pushOffset: number;
|
|
12
|
+
};
|
|
13
|
+
type GridStickyLabelLayerProps<T> = {
|
|
14
|
+
pane: GridPaneKind;
|
|
15
|
+
ownsRowHeader: boolean;
|
|
16
|
+
entry: GridStickyLabelEntry<T> | null;
|
|
17
|
+
headerHeight: number;
|
|
18
|
+
rowHeaderCellStyle: CSSProperties;
|
|
19
|
+
renderContent: GridBodyLabelRowRenderContent<T> | null;
|
|
20
|
+
contentStickyLeft: number;
|
|
21
|
+
contentWidth: number;
|
|
22
|
+
rowClassName?: string;
|
|
23
|
+
rowStyle?: CSSProperties;
|
|
24
|
+
slots?: GridResolvedSlots;
|
|
25
|
+
};
|
|
26
|
+
declare function GridStickyLabelLayerInner<T>({ pane, ownsRowHeader, entry, headerHeight, rowHeaderCellStyle, renderContent, contentStickyLeft, contentWidth, rowClassName, rowStyle, slots, }: GridStickyLabelLayerProps<T>): import("react").JSX.Element | null;
|
|
27
|
+
export declare const GridStickyLabelLayer: typeof GridStickyLabelLayerInner;
|
|
28
|
+
export default GridStickyLabelLayer;
|
|
@@ -3,10 +3,10 @@ import type { CellCoord, GridSelection, SpreadsheetGridSlotContext, SpreadsheetG
|
|
|
3
3
|
export declare const resolveGridSlot: <T>(slotRenderer: ((context: SpreadsheetGridSlotContext<T>) => ReactNode) | undefined, context: SpreadsheetGridSlotContext<T>, fallback: ReactNode) => ReactNode;
|
|
4
4
|
export declare const formatGridCellLabel: (cell: CellCoord | null) => string;
|
|
5
5
|
export declare const formatGridSelectionLabel: (selection: GridSelection) => string;
|
|
6
|
-
export declare const formatGridRowSummary: <T>(context: Pick<SpreadsheetGridSlotContext<T>, "rows">, filteredRowCount: number) => string;
|
|
6
|
+
export declare const formatGridRowSummary: <T>(context: Pick<SpreadsheetGridSlotContext<T>, "rows">, filteredRowCount: number, totalRowCount?: number) => string;
|
|
7
7
|
export declare const formatGridColumnSummary: <T>(context: Pick<SpreadsheetGridSlotContext<T>, "columns" | "visibleColumns">) => string;
|
|
8
8
|
export declare const getGridSelectionStats: <T>(context: Pick<SpreadsheetGridSlotContext<T>, "selection" | "visibleColumns">, filteredRowCount: number) => SpreadsheetGridSelectionStats;
|
|
9
9
|
export declare const formatGridSelectionStatsLabel: <T>(context: Pick<SpreadsheetGridSlotContext<T>, "selection" | "visibleColumns">, filteredRowCount: number) => string;
|
|
10
10
|
export declare const formatGridFilterSummary: <T>(context: Pick<SpreadsheetGridSlotContext<T>, "globalFilterText" | "columnFilterValues">) => string;
|
|
11
11
|
export declare const formatGridSortSummary: <T>(context: Pick<SpreadsheetGridSlotContext<T>, "columns" | "sortState">) => string;
|
|
12
|
-
export declare const buildGridDerivedSummary: <T>(context: Pick<SpreadsheetGridSlotContext<T>, "rows" | "columns" | "visibleColumns" | "globalFilterText" | "columnFilterValues" | "sortState" | "activeCell" | "selection">, filteredRowCount: number) => SpreadsheetGridDerivedSummary;
|
|
12
|
+
export declare const buildGridDerivedSummary: <T>(context: Pick<SpreadsheetGridSlotContext<T>, "rows" | "columns" | "visibleColumns" | "globalFilterText" | "columnFilterValues" | "sortState" | "activeCell" | "selection">, filteredRowCount: number, totalRowCount?: number) => SpreadsheetGridDerivedSummary;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ishibashi0112/spreadsheet-grid",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "React 19 製のカスタム仮想化データグリッド。100 万行対応の仮想化・3
|
|
3
|
+
"version": "0.40.0",
|
|
4
|
+
"description": "React 19 製のカスタム仮想化データグリッド。100 万行対応の仮想化・3 ペイン固定列・ソート/フィルター・クライアント/サーバーサイド行モデル対応。コアは @ishibashi0112/spreadsheet-grid-core。",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
7
7
|
"react19",
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
"author": "Yuki Sakakibara",
|
|
19
19
|
"repository": {
|
|
20
20
|
"type": "git",
|
|
21
|
-
"url": "git+https://github.com/ishibashi0112/datasheet-grid.git"
|
|
21
|
+
"url": "git+https://github.com/ishibashi0112/datasheet-grid.git",
|
|
22
|
+
"directory": "packages/react"
|
|
22
23
|
},
|
|
23
24
|
"homepage": "https://github.com/ishibashi0112/datasheet-grid#readme",
|
|
24
25
|
"bugs": {
|
|
@@ -59,38 +60,17 @@
|
|
|
59
60
|
"react-dom": "^19.0.0"
|
|
60
61
|
},
|
|
61
62
|
"dependencies": {
|
|
62
|
-
"@tanstack/virtual-core": "^3.17.0"
|
|
63
|
+
"@tanstack/virtual-core": "^3.17.0",
|
|
64
|
+
"@ishibashi0112/spreadsheet-grid-core": "^0.40.0"
|
|
63
65
|
},
|
|
64
66
|
"devDependencies": {
|
|
65
|
-
"@eslint/js": "^10.0.1",
|
|
66
|
-
"@testing-library/dom": "^10.4.1",
|
|
67
|
-
"@testing-library/react": "^16.3.2",
|
|
68
|
-
"@types/node": "^24.12.3",
|
|
69
67
|
"@types/react": "^19.3.0",
|
|
70
68
|
"@types/react-dom": "^19.3.0",
|
|
71
|
-
"@vitejs/plugin-react": "^6.0.1",
|
|
72
|
-
"eslint": "^10.3.0",
|
|
73
|
-
"eslint-plugin-react-hooks": "^7.1.1",
|
|
74
|
-
"eslint-plugin-react-refresh": "^0.5.2",
|
|
75
|
-
"globals": "^17.6.0",
|
|
76
|
-
"jsdom": "^29.1.1",
|
|
77
69
|
"react": "^19.3.0",
|
|
78
|
-
"react-dom": "^19.3.0"
|
|
79
|
-
"typescript": "~6.0.2",
|
|
80
|
-
"typescript-eslint": "^8.59.2",
|
|
81
|
-
"vite": "^8.0.12",
|
|
82
|
-
"vite-plus": "^0.2.4",
|
|
83
|
-
"vitest": "^4.1.9"
|
|
70
|
+
"react-dom": "^19.3.0"
|
|
84
71
|
},
|
|
85
72
|
"scripts": {
|
|
86
|
-
"dev": "vp dev",
|
|
87
|
-
"build": "tsc -b && vp build",
|
|
88
73
|
"build:lib": "vp build --config vite.lib.config.ts && tsc -p tsconfig.lib.json && node scripts/emit-layer-css.mjs",
|
|
89
|
-
"build:types": "tsc -p tsconfig.lib.json"
|
|
90
|
-
"lint": "eslint .",
|
|
91
|
-
"preview": "vp preview",
|
|
92
|
-
"test": "vitest run",
|
|
93
|
-
"test:watch": "vitest",
|
|
94
|
-
"typecheck:test": "tsc --noEmit -p tsconfig.vitest.json"
|
|
74
|
+
"build:types": "tsc -p tsconfig.lib.json"
|
|
95
75
|
}
|
|
96
76
|
}
|