@toolbox-web/grid 0.4.1 → 0.4.2
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/README.md +10 -13
- package/all.js +1101 -1048
- package/all.js.map +1 -1
- package/index.js +245 -137
- package/index.js.map +1 -1
- package/lib/core/grid.d.ts +10 -0
- package/lib/core/grid.d.ts.map +1 -1
- package/lib/core/internal/config-manager.d.ts +1 -0
- package/lib/core/internal/config-manager.d.ts.map +1 -1
- package/lib/core/internal/keyboard.d.ts.map +1 -1
- package/lib/core/internal/utils.d.ts +1 -0
- package/lib/core/internal/utils.d.ts.map +1 -1
- package/lib/core/plugin/base-plugin.d.ts +57 -1
- package/lib/core/plugin/base-plugin.d.ts.map +1 -1
- package/lib/core/plugin/expander-column.d.ts +51 -0
- package/lib/core/plugin/expander-column.d.ts.map +1 -0
- package/lib/core/plugin/types.d.ts +117 -1
- package/lib/core/plugin/types.d.ts.map +1 -1
- package/lib/core/types.d.ts +4 -2
- package/lib/core/types.d.ts.map +1 -1
- package/lib/plugins/clipboard/ClipboardPlugin.d.ts +5 -4
- package/lib/plugins/clipboard/ClipboardPlugin.d.ts.map +1 -1
- package/lib/plugins/clipboard/index.d.ts +1 -1
- package/lib/plugins/clipboard/index.d.ts.map +1 -1
- package/lib/plugins/clipboard/index.js +282 -188
- package/lib/plugins/clipboard/index.js.map +1 -1
- package/lib/plugins/clipboard/types.d.ts +72 -2
- package/lib/plugins/clipboard/types.d.ts.map +1 -1
- package/lib/plugins/column-virtualization/ColumnVirtualizationPlugin.d.ts +0 -1
- package/lib/plugins/column-virtualization/ColumnVirtualizationPlugin.d.ts.map +1 -1
- package/lib/plugins/column-virtualization/index.js +102 -26
- package/lib/plugins/column-virtualization/index.js.map +1 -1
- package/lib/plugins/context-menu/ContextMenuPlugin.d.ts +0 -1
- package/lib/plugins/context-menu/ContextMenuPlugin.d.ts.map +1 -1
- package/lib/plugins/context-menu/index.js +154 -78
- package/lib/plugins/context-menu/index.js.map +1 -1
- package/lib/plugins/editing/EditingPlugin.d.ts +1 -7
- package/lib/plugins/editing/EditingPlugin.d.ts.map +1 -1
- package/lib/plugins/editing/index.js +200 -136
- package/lib/plugins/editing/index.js.map +1 -1
- package/lib/plugins/export/ExportPlugin.d.ts +0 -1
- package/lib/plugins/export/ExportPlugin.d.ts.map +1 -1
- package/lib/plugins/export/index.js +175 -99
- package/lib/plugins/export/index.js.map +1 -1
- package/lib/plugins/filtering/FilteringPlugin.d.ts +5 -2
- package/lib/plugins/filtering/FilteringPlugin.d.ts.map +1 -1
- package/lib/plugins/filtering/index.js +129 -43
- package/lib/plugins/filtering/index.js.map +1 -1
- package/lib/plugins/grouping-columns/GroupingColumnsPlugin.d.ts +1 -2
- package/lib/plugins/grouping-columns/GroupingColumnsPlugin.d.ts.map +1 -1
- package/lib/plugins/grouping-columns/grouping-columns.d.ts +1 -1
- package/lib/plugins/grouping-columns/grouping-columns.d.ts.map +1 -1
- package/lib/plugins/grouping-columns/index.js +144 -66
- package/lib/plugins/grouping-columns/index.js.map +1 -1
- package/lib/plugins/grouping-rows/GroupingRowsPlugin.d.ts +14 -2
- package/lib/plugins/grouping-rows/GroupingRowsPlugin.d.ts.map +1 -1
- package/lib/plugins/grouping-rows/index.js +230 -138
- package/lib/plugins/grouping-rows/index.js.map +1 -1
- package/lib/plugins/master-detail/MasterDetailPlugin.d.ts +13 -11
- package/lib/plugins/master-detail/MasterDetailPlugin.d.ts.map +1 -1
- package/lib/plugins/master-detail/index.js +265 -196
- package/lib/plugins/master-detail/index.js.map +1 -1
- package/lib/plugins/master-detail/types.d.ts +0 -10
- package/lib/plugins/master-detail/types.d.ts.map +1 -1
- package/lib/plugins/multi-sort/MultiSortPlugin.d.ts +1 -2
- package/lib/plugins/multi-sort/MultiSortPlugin.d.ts.map +1 -1
- package/lib/plugins/multi-sort/index.js +105 -31
- package/lib/plugins/multi-sort/index.js.map +1 -1
- package/lib/plugins/pinned-columns/PinnedColumnsPlugin.d.ts +0 -1
- package/lib/plugins/pinned-columns/PinnedColumnsPlugin.d.ts.map +1 -1
- package/lib/plugins/pinned-columns/index.js +128 -52
- package/lib/plugins/pinned-columns/index.js.map +1 -1
- package/lib/plugins/pinned-rows/PinnedRowsPlugin.d.ts +1 -2
- package/lib/plugins/pinned-rows/PinnedRowsPlugin.d.ts.map +1 -1
- package/lib/plugins/pinned-rows/index.js +162 -88
- package/lib/plugins/pinned-rows/index.js.map +1 -1
- package/lib/plugins/pivot/PivotPlugin.d.ts +26 -4
- package/lib/plugins/pivot/PivotPlugin.d.ts.map +1 -1
- package/lib/plugins/pivot/index.js +398 -310
- package/lib/plugins/pivot/index.js.map +1 -1
- package/lib/plugins/pivot/pivot-rows.d.ts +2 -1
- package/lib/plugins/pivot/pivot-rows.d.ts.map +1 -1
- package/lib/plugins/reorder/ReorderPlugin.d.ts +13 -10
- package/lib/plugins/reorder/ReorderPlugin.d.ts.map +1 -1
- package/lib/plugins/reorder/index.js +288 -226
- package/lib/plugins/reorder/index.js.map +1 -1
- package/lib/plugins/selection/SelectionPlugin.d.ts +21 -3
- package/lib/plugins/selection/SelectionPlugin.d.ts.map +1 -1
- package/lib/plugins/selection/index.d.ts +2 -2
- package/lib/plugins/selection/index.d.ts.map +1 -1
- package/lib/plugins/selection/index.js +276 -145
- package/lib/plugins/selection/index.js.map +1 -1
- package/lib/plugins/selection/types.d.ts +24 -0
- package/lib/plugins/selection/types.d.ts.map +1 -1
- package/lib/plugins/server-side/ServerSidePlugin.d.ts +0 -1
- package/lib/plugins/server-side/ServerSidePlugin.d.ts.map +1 -1
- package/lib/plugins/server-side/index.js +83 -7
- package/lib/plugins/server-side/index.js.map +1 -1
- package/lib/plugins/tree/TreePlugin.d.ts +5 -1
- package/lib/plugins/tree/TreePlugin.d.ts.map +1 -1
- package/lib/plugins/tree/index.js +197 -112
- package/lib/plugins/tree/index.js.map +1 -1
- package/lib/plugins/tree/types.d.ts +0 -10
- package/lib/plugins/tree/types.d.ts.map +1 -1
- package/lib/plugins/undo-redo/UndoRedoPlugin.d.ts +0 -1
- package/lib/plugins/undo-redo/UndoRedoPlugin.d.ts.map +1 -1
- package/lib/plugins/undo-redo/index.js +93 -17
- package/lib/plugins/undo-redo/index.js.map +1 -1
- package/lib/plugins/visibility/VisibilityPlugin.d.ts +7 -4
- package/lib/plugins/visibility/VisibilityPlugin.d.ts.map +1 -1
- package/lib/plugins/visibility/index.js +144 -65
- package/lib/plugins/visibility/index.js.map +1 -1
- package/package.json +1 -1
- package/umd/grid.all.umd.js +17 -19
- package/umd/grid.all.umd.js.map +1 -1
- package/umd/grid.umd.js +7 -7
- package/umd/grid.umd.js.map +1 -1
- package/umd/plugins/clipboard.umd.js +5 -7
- package/umd/plugins/clipboard.umd.js.map +1 -1
- package/umd/plugins/column-virtualization.umd.js +1 -1
- package/umd/plugins/column-virtualization.umd.js.map +1 -1
- package/umd/plugins/context-menu.umd.js +1 -1
- package/umd/plugins/context-menu.umd.js.map +1 -1
- package/umd/plugins/editing.umd.js +1 -1
- package/umd/plugins/editing.umd.js.map +1 -1
- package/umd/plugins/export.umd.js +1 -1
- package/umd/plugins/export.umd.js.map +1 -1
- package/umd/plugins/filtering.umd.js +1 -1
- package/umd/plugins/filtering.umd.js.map +1 -1
- package/umd/plugins/grouping-columns.umd.js +1 -1
- package/umd/plugins/grouping-columns.umd.js.map +1 -1
- package/umd/plugins/grouping-rows.umd.js +1 -1
- package/umd/plugins/grouping-rows.umd.js.map +1 -1
- package/umd/plugins/master-detail.umd.js +1 -1
- package/umd/plugins/master-detail.umd.js.map +1 -1
- package/umd/plugins/multi-sort.umd.js +1 -1
- package/umd/plugins/multi-sort.umd.js.map +1 -1
- package/umd/plugins/pinned-columns.umd.js +1 -1
- package/umd/plugins/pinned-columns.umd.js.map +1 -1
- package/umd/plugins/pinned-rows.umd.js +1 -1
- package/umd/plugins/pinned-rows.umd.js.map +1 -1
- package/umd/plugins/pivot.umd.js +1 -1
- package/umd/plugins/pivot.umd.js.map +1 -1
- package/umd/plugins/reorder.umd.js +1 -1
- package/umd/plugins/reorder.umd.js.map +1 -1
- package/umd/plugins/selection.umd.js +1 -1
- package/umd/plugins/selection.umd.js.map +1 -1
- package/umd/plugins/server-side.umd.js +1 -1
- package/umd/plugins/server-side.umd.js.map +1 -1
- package/umd/plugins/tree.umd.js +1 -1
- package/umd/plugins/tree.umd.js.map +1 -1
- package/umd/plugins/undo-redo.umd.js +1 -1
- package/umd/plugins/undo-redo.umd.js.map +1 -1
- package/umd/plugins/visibility.umd.js +1 -1
- package/umd/plugins/visibility.umd.js.map +1 -1
- package/lib/core/internal/editing.d.ts +0 -76
- package/lib/core/internal/editing.d.ts.map +0 -1
|
@@ -14,7 +14,7 @@ import { ColumnGroup, GroupingColumnsConfig } from './types';
|
|
|
14
14
|
*/
|
|
15
15
|
export declare class GroupingColumnsPlugin extends BaseGridPlugin<GroupingColumnsConfig> {
|
|
16
16
|
readonly name = "groupingColumns";
|
|
17
|
-
readonly
|
|
17
|
+
readonly styles: string;
|
|
18
18
|
protected get defaultConfig(): Partial<GroupingColumnsConfig>;
|
|
19
19
|
private groups;
|
|
20
20
|
private isActive;
|
|
@@ -46,6 +46,5 @@ export declare class GroupingColumnsPlugin extends BaseGridPlugin<GroupingColumn
|
|
|
46
46
|
* Refresh column groups (recompute from current columns).
|
|
47
47
|
*/
|
|
48
48
|
refresh(): void;
|
|
49
|
-
readonly styles: string;
|
|
50
49
|
}
|
|
51
50
|
//# sourceMappingURL=GroupingColumnsPlugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupingColumnsPlugin.d.ts","sourceRoot":"","sources":["../../../../../../libs/grid/src/lib/plugins/grouping-columns/GroupingColumnsPlugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAQrD,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAElE;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,qBAAqB,CAAC;IAC9E,QAAQ,CAAC,IAAI,qBAAqB;IAClC,SAAkB,
|
|
1
|
+
{"version":3,"file":"GroupingColumnsPlugin.d.ts","sourceRoot":"","sources":["../../../../../../libs/grid/src/lib/plugins/grouping-columns/GroupingColumnsPlugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAQrD,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAElE;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,qBAAqB,CAAC;IAC9E,QAAQ,CAAC,IAAI,qBAAqB;IAClC,SAAkB,MAAM,SAAU;IAElC,cAAuB,aAAa,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAIrE;IAGD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAS;IAKhB,MAAM,IAAI,IAAI;IAQvB;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO;IAchD,cAAc,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,EAAE;IA0ChE,WAAW,IAAI,IAAI;IAgD5B;;;OAGG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;OAGG;IACH,SAAS,IAAI,WAAW,EAAE;IAI1B;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE;IAKhD;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -20,7 +20,7 @@ export declare function applyGroupedHeaderCellClasses(headerRowEl: HTMLElement |
|
|
|
20
20
|
* Build the group header row element.
|
|
21
21
|
*
|
|
22
22
|
* @param groups - The computed column groups
|
|
23
|
-
* @param columns - The column configurations
|
|
23
|
+
* @param columns - The column configurations (final array including any plugin-added columns)
|
|
24
24
|
* @returns The group header row element, or null if no groups
|
|
25
25
|
*/
|
|
26
26
|
export declare function buildGroupHeaderRow(groups: ColumnGroup[], columns: ColumnConfig[]): HTMLElement | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping-columns.d.ts","sourceRoot":"","sources":["../../../../../../libs/grid/src/lib/plugins/grouping-columns/grouping-columns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,SAAS,CAAC;AAEhE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CA+DnF;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,WAAW,GAAG,IAAI,EAC/B,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,EAAE,YAAY,EAAE,GACtB,IAAI,CA8BN;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"grouping-columns.d.ts","sourceRoot":"","sources":["../../../../../../libs/grid/src/lib/plugins/grouping-columns/grouping-columns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,SAAS,CAAC;AAEhE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CA+DnF;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,WAAW,GAAG,IAAI,EAC/B,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,EAAE,YAAY,EAAE,GACtB,IAAI,CA8BN;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,WAAW,GAAG,IAAI,CA4BtG;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAIzE"}
|
|
@@ -8,7 +8,7 @@ const g = {
|
|
|
8
8
|
dragHandle: "⋮⋮",
|
|
9
9
|
toolPanel: "☰"
|
|
10
10
|
};
|
|
11
|
-
class
|
|
11
|
+
class h {
|
|
12
12
|
/**
|
|
13
13
|
* Plugin dependencies - declare other plugins this one requires.
|
|
14
14
|
*
|
|
@@ -25,8 +25,11 @@ class a {
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
static dependencies;
|
|
28
|
-
/**
|
|
29
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Plugin version - defaults to grid version for built-in plugins.
|
|
30
|
+
* Third-party plugins can override with their own semver.
|
|
31
|
+
*/
|
|
32
|
+
version = typeof __GRID_VERSION__ < "u" ? __GRID_VERSION__ : "dev";
|
|
30
33
|
/** CSS styles to inject into the grid's shadow DOM */
|
|
31
34
|
styles;
|
|
32
35
|
/** Custom cell renderers keyed by type name */
|
|
@@ -113,12 +116,28 @@ class a {
|
|
|
113
116
|
emit(e, r) {
|
|
114
117
|
this.grid?.dispatchEvent?.(new CustomEvent(e, { detail: r, bubbles: !0 }));
|
|
115
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Emit a cancelable custom event from the grid.
|
|
121
|
+
* @returns `true` if the event was cancelled (preventDefault called), `false` otherwise
|
|
122
|
+
*/
|
|
123
|
+
emitCancelable(e, r) {
|
|
124
|
+
const t = new CustomEvent(e, { detail: r, bubbles: !0, cancelable: !0 });
|
|
125
|
+
return this.grid?.dispatchEvent?.(t), t.defaultPrevented;
|
|
126
|
+
}
|
|
116
127
|
/**
|
|
117
128
|
* Request a re-render of the grid.
|
|
118
129
|
*/
|
|
119
130
|
requestRender() {
|
|
120
131
|
this.grid?.requestRender?.();
|
|
121
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Request a re-render and restore focus styling afterward.
|
|
135
|
+
* Use this when a plugin action (like expand/collapse) triggers a render
|
|
136
|
+
* but needs to maintain keyboard navigation focus.
|
|
137
|
+
*/
|
|
138
|
+
requestRenderWithFocus() {
|
|
139
|
+
this.grid?.requestRenderWithFocus?.();
|
|
140
|
+
}
|
|
122
141
|
/**
|
|
123
142
|
* Request a lightweight style update without rebuilding DOM.
|
|
124
143
|
* Use this instead of requestRender() when only CSS classes need updating.
|
|
@@ -152,6 +171,19 @@ class a {
|
|
|
152
171
|
get visibleColumns() {
|
|
153
172
|
return this.grid?._visibleColumns ?? [];
|
|
154
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Get the grid as an HTMLElement for direct DOM operations.
|
|
176
|
+
* Use sparingly - prefer the typed GridElementRef API when possible.
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* ```ts
|
|
180
|
+
* const width = this.gridElement.clientWidth;
|
|
181
|
+
* this.gridElement.classList.add('my-plugin-active');
|
|
182
|
+
* ```
|
|
183
|
+
*/
|
|
184
|
+
get gridElement() {
|
|
185
|
+
return this.grid;
|
|
186
|
+
}
|
|
155
187
|
/**
|
|
156
188
|
* Get the shadow root of the grid.
|
|
157
189
|
*/
|
|
@@ -186,6 +218,51 @@ class a {
|
|
|
186
218
|
const e = this.grid?.gridConfig?.icons ?? {};
|
|
187
219
|
return { ...g, ...e };
|
|
188
220
|
}
|
|
221
|
+
// #region Animation Helpers
|
|
222
|
+
/**
|
|
223
|
+
* Check if animations are enabled at the grid level.
|
|
224
|
+
* Respects gridConfig.animation.mode and the CSS variable set by the grid.
|
|
225
|
+
*
|
|
226
|
+
* Plugins should use this to skip animations when:
|
|
227
|
+
* - Animation mode is 'off' or `false`
|
|
228
|
+
* - User prefers reduced motion and mode is 'reduced-motion' (default)
|
|
229
|
+
*
|
|
230
|
+
* @example
|
|
231
|
+
* ```ts
|
|
232
|
+
* private get animationStyle(): 'slide' | 'fade' | false {
|
|
233
|
+
* if (!this.isAnimationEnabled) return false;
|
|
234
|
+
* return this.config.animation ?? 'slide';
|
|
235
|
+
* }
|
|
236
|
+
* ```
|
|
237
|
+
*/
|
|
238
|
+
get isAnimationEnabled() {
|
|
239
|
+
const e = this.grid?.effectiveConfig?.animation?.mode ?? "reduced-motion";
|
|
240
|
+
if (e === !1 || e === "off") return !1;
|
|
241
|
+
if (e === !0 || e === "on") return !0;
|
|
242
|
+
const r = this.shadowRoot?.host;
|
|
243
|
+
return r ? getComputedStyle(r).getPropertyValue("--tbw-animation-enabled").trim() !== "0" : !0;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get the animation duration in milliseconds from CSS variable.
|
|
247
|
+
* Falls back to 200ms if not set.
|
|
248
|
+
*
|
|
249
|
+
* Plugins can use this for their animation timing to stay consistent
|
|
250
|
+
* with the grid-level animation.duration setting.
|
|
251
|
+
*
|
|
252
|
+
* @example
|
|
253
|
+
* ```ts
|
|
254
|
+
* element.animate(keyframes, { duration: this.animationDuration });
|
|
255
|
+
* ```
|
|
256
|
+
*/
|
|
257
|
+
get animationDuration() {
|
|
258
|
+
const e = this.shadowRoot?.host;
|
|
259
|
+
if (e) {
|
|
260
|
+
const r = getComputedStyle(e).getPropertyValue("--tbw-animation-duration").trim(), t = parseInt(r, 10);
|
|
261
|
+
if (!isNaN(t)) return t;
|
|
262
|
+
}
|
|
263
|
+
return 200;
|
|
264
|
+
}
|
|
265
|
+
// #endregion
|
|
189
266
|
/**
|
|
190
267
|
* Resolve an icon value to string or HTMLElement.
|
|
191
268
|
* Checks plugin config first, then grid-level icons, then defaults.
|
|
@@ -215,74 +292,76 @@ class a {
|
|
|
215
292
|
}
|
|
216
293
|
// #endregion
|
|
217
294
|
}
|
|
218
|
-
function
|
|
219
|
-
if (!
|
|
220
|
-
const e = /* @__PURE__ */ new Map(), r = [], t = (o,
|
|
221
|
-
if (!
|
|
222
|
-
const
|
|
223
|
-
if (
|
|
224
|
-
|
|
295
|
+
function c(l) {
|
|
296
|
+
if (!l.length) return [];
|
|
297
|
+
const e = /* @__PURE__ */ new Map(), r = [], t = (o, i) => {
|
|
298
|
+
if (!i.length) return;
|
|
299
|
+
const s = r[r.length - 1];
|
|
300
|
+
if (s && s.implicit && s.firstIndex + s.columns.length === o) {
|
|
301
|
+
s.columns.push(...i);
|
|
225
302
|
return;
|
|
226
303
|
}
|
|
227
304
|
r.push({
|
|
228
305
|
id: "__implicit__" + o,
|
|
229
306
|
label: void 0,
|
|
230
|
-
columns:
|
|
307
|
+
columns: i,
|
|
231
308
|
firstIndex: o,
|
|
232
309
|
implicit: !0
|
|
233
310
|
});
|
|
234
311
|
};
|
|
235
|
-
let
|
|
236
|
-
return
|
|
237
|
-
const
|
|
238
|
-
if (!
|
|
239
|
-
|
|
312
|
+
let u = [], n = 0;
|
|
313
|
+
return l.forEach((o, i) => {
|
|
314
|
+
const s = o.group;
|
|
315
|
+
if (!s) {
|
|
316
|
+
u.length === 0 && (n = i), u.push(o);
|
|
240
317
|
return;
|
|
241
318
|
}
|
|
242
|
-
|
|
243
|
-
const
|
|
244
|
-
let
|
|
245
|
-
|
|
246
|
-
id:
|
|
247
|
-
label: typeof
|
|
319
|
+
u.length && (t(n, u.slice()), u = []);
|
|
320
|
+
const d = typeof s == "string" ? s : s.id;
|
|
321
|
+
let a = e.get(d);
|
|
322
|
+
a || (a = {
|
|
323
|
+
id: d,
|
|
324
|
+
label: typeof s == "string" ? void 0 : s.label,
|
|
248
325
|
columns: [],
|
|
249
|
-
firstIndex:
|
|
250
|
-
}, e.set(
|
|
251
|
-
}),
|
|
326
|
+
firstIndex: i
|
|
327
|
+
}, e.set(d, a), r.push(a)), a.columns.push(o);
|
|
328
|
+
}), u.length && t(n, u), r.length === 1 && r[0].implicit && r[0].columns.length === l.length ? [] : r;
|
|
252
329
|
}
|
|
253
|
-
function p(
|
|
254
|
-
if (!e.length || !
|
|
330
|
+
function p(l, e, r) {
|
|
331
|
+
if (!e.length || !l) return;
|
|
255
332
|
const t = /* @__PURE__ */ new Map();
|
|
256
|
-
for (const
|
|
257
|
-
for (const o of
|
|
258
|
-
o.field && t.set(o.field,
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
const o =
|
|
262
|
-
|
|
333
|
+
for (const n of e)
|
|
334
|
+
for (const o of n.columns)
|
|
335
|
+
o.field && t.set(o.field, n.id);
|
|
336
|
+
const u = Array.from(l.querySelectorAll(".cell[data-field]"));
|
|
337
|
+
u.forEach((n) => {
|
|
338
|
+
const o = n.getAttribute("data-field") || "", i = t.get(o);
|
|
339
|
+
i && (n.classList.add("grouped"), n.getAttribute("data-group") || n.setAttribute("data-group", i));
|
|
263
340
|
});
|
|
264
|
-
for (const
|
|
265
|
-
const o =
|
|
266
|
-
|
|
341
|
+
for (const n of e) {
|
|
342
|
+
const o = n.columns[n.columns.length - 1], i = u.find((s) => s.getAttribute("data-field") === o.field);
|
|
343
|
+
i && i.classList.add("group-end");
|
|
267
344
|
}
|
|
268
345
|
}
|
|
269
|
-
function f(
|
|
270
|
-
if (
|
|
346
|
+
function f(l, e) {
|
|
347
|
+
if (l.length === 0) return null;
|
|
271
348
|
const r = document.createElement("div");
|
|
272
349
|
r.className = "header-group-row", r.setAttribute("role", "row");
|
|
273
|
-
for (const t of
|
|
274
|
-
const
|
|
275
|
-
|
|
350
|
+
for (const t of l) {
|
|
351
|
+
const u = t.columns[0], n = u ? e.findIndex((d) => d.field === u.field) : -1;
|
|
352
|
+
if (n === -1) continue;
|
|
353
|
+
const o = String(t.id).startsWith("__implicit__"), i = o ? "" : t.label || t.id, s = document.createElement("div");
|
|
354
|
+
s.className = "cell header-group-cell", o && s.classList.add("implicit-group"), s.setAttribute("data-group", String(t.id)), s.style.gridColumn = `${n + 1} / span ${t.columns.length}`, s.textContent = i, r.appendChild(s);
|
|
276
355
|
}
|
|
277
356
|
return r;
|
|
278
357
|
}
|
|
279
|
-
function m(
|
|
280
|
-
return
|
|
358
|
+
function m(l) {
|
|
359
|
+
return l.some((e) => e.group != null);
|
|
281
360
|
}
|
|
282
361
|
const b = ".header-group-row{display:grid;grid-auto-flow:column;background:var(--tbw-grouping-columns-header-bg, var(--tbw-color-header-bg));border-bottom:1px solid var(--tbw-grouping-columns-border, var(--tbw-color-border))}.header-group-cell{display:flex;align-items:center;justify-content:center;padding:4px 8px;font-weight:600;font-size:.9em;text-transform:uppercase;letter-spacing:.5px;border-right:1px solid var(--tbw-grouping-columns-border, var(--tbw-color-border))}.header-group-cell:last-child{border-right:none}.header-row .cell.grouped{border-top:none}.header-row .cell.group-end{border-right:2px solid var(--tbw-grouping-columns-separator, var(--tbw-color-border-strong))}.header-row .cell.group-end:last-child{border-right:none}.header-group-row.no-borders{border-bottom:none}.header-group-row.no-borders .header-group-cell{border-right:none}.header-row.no-group-borders .cell.group-end{border-right:1px solid var(--tbw-color-border)}";
|
|
283
|
-
class w extends
|
|
362
|
+
class w extends h {
|
|
284
363
|
name = "groupingColumns";
|
|
285
|
-
|
|
364
|
+
styles = b;
|
|
286
365
|
get defaultConfig() {
|
|
287
366
|
return {
|
|
288
367
|
showGroupBorders: !0
|
|
@@ -314,37 +393,39 @@ class w extends a {
|
|
|
314
393
|
const r = this.grid?.gridConfig?.columnGroups;
|
|
315
394
|
let t;
|
|
316
395
|
if (r && Array.isArray(r) && r.length > 0) {
|
|
317
|
-
const
|
|
396
|
+
const n = /* @__PURE__ */ new Map();
|
|
318
397
|
for (const o of r)
|
|
319
|
-
for (const
|
|
320
|
-
|
|
398
|
+
for (const i of o.children)
|
|
399
|
+
n.set(i, { id: o.id, label: o.header });
|
|
321
400
|
t = e.map((o) => {
|
|
322
|
-
const
|
|
323
|
-
return
|
|
401
|
+
const i = n.get(o.field);
|
|
402
|
+
return i && !o.group ? { ...o, group: i } : o;
|
|
324
403
|
});
|
|
325
404
|
} else
|
|
326
405
|
t = [...e];
|
|
327
|
-
const
|
|
328
|
-
return
|
|
406
|
+
const u = c(t);
|
|
407
|
+
return u.length === 0 ? (this.isActive = !1, this.groups = [], t) : (this.isActive = !0, this.groups = u, t);
|
|
329
408
|
}
|
|
330
409
|
afterRender() {
|
|
331
|
-
if (!this.isActive
|
|
332
|
-
const
|
|
333
|
-
|
|
410
|
+
if (!this.isActive) {
|
|
411
|
+
const s = this.shadowRoot?.querySelector(".header")?.querySelector(".header-group-row");
|
|
412
|
+
s && s.remove();
|
|
334
413
|
return;
|
|
335
414
|
}
|
|
336
415
|
const e = this.shadowRoot?.querySelector(".header");
|
|
337
416
|
if (!e) return;
|
|
338
417
|
const r = e.querySelector(".header-group-row");
|
|
339
418
|
r && r.remove();
|
|
340
|
-
const t =
|
|
341
|
-
if (
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
419
|
+
const t = this.columns, u = c(t);
|
|
420
|
+
if (u.length === 0) return;
|
|
421
|
+
const n = f(u, t);
|
|
422
|
+
if (n) {
|
|
423
|
+
n.classList.toggle("no-borders", !this.config.showGroupBorders);
|
|
424
|
+
const i = e.querySelector(".header-row");
|
|
425
|
+
i ? e.insertBefore(n, i) : e.appendChild(n);
|
|
345
426
|
}
|
|
346
|
-
const
|
|
347
|
-
|
|
427
|
+
const o = e.querySelector(".header-row");
|
|
428
|
+
o && (o.classList.toggle("no-group-borders", !this.config.showGroupBorders), p(o, u));
|
|
348
429
|
}
|
|
349
430
|
// #endregion
|
|
350
431
|
// #region Public API
|
|
@@ -378,9 +459,6 @@ class w extends a {
|
|
|
378
459
|
this.requestRender();
|
|
379
460
|
}
|
|
380
461
|
// #endregion
|
|
381
|
-
// #region Styles
|
|
382
|
-
styles = b;
|
|
383
|
-
// #endregion
|
|
384
462
|
}
|
|
385
463
|
export {
|
|
386
464
|
w as GroupingColumnsPlugin
|