@gzmjs/table 0.1.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.
@@ -0,0 +1,2969 @@
1
+ import * as B from "@gzmjs/ui-basic";
2
+ import { createStyleSheet, gzmHeader, createText, globalTexts, defineElement, strAttr, boolAttr, CornerHelper, xy } from "@gzmjs/ui-basic";
3
+ import * as M from "@gzmjs/mvvm";
4
+ import { ViewElement, handleModelEvent, ModelEventHandler } from "@gzmjs/mvvm";
5
+ import { createMenu } from "@gzmjs/menu";
6
+ import "@gzmjs/tooltip";
7
+ const tableViewTagName = "GZM-TABLE";
8
+ const tableListTagName = "GZM-TABLE-LIST";
9
+ const tableColStartTagName = "GZM-TABLE-COL-START";
10
+ const tableColHeadTagName = "GZM-TABLE-COL-HEAD";
11
+ const tableColMiddleTagName = "GZM-TABLE-COL-MIDDLE";
12
+ const tableColsTagName = "GZM-TABLE-COLS";
13
+ const tableColGroupTagName = "GZM-TABLE-COL-GROUP";
14
+ const tableColTagName = "GZM-TABLE-COL";
15
+ const tableColEndTagName = "GZM-TABLE-COL-END";
16
+ const tableColTailTagName = "GZM-TABLE-COL-TAIL";
17
+ const tableRowsTagName = "GZM-TABLE-ROWS";
18
+ const tableRowTagName = "GZM-TABLE-ROW";
19
+ const tableRowStartTagName = "GZM-TABLE-ROW-START";
20
+ const tableRowMiddleTagName = "GZM-TABLE-ROW-MIDDLE";
21
+ const tableRowEndTagName = "GZM-TABLE-ROW-END";
22
+ const tableCellTagName = "GZM-TABLE-CELL";
23
+ const tableAggsTagName = "GZM-TABLE-AGGS";
24
+ const tableAggStartTagName = "GZM-TABLE-AGG-START";
25
+ const tableAggMiddleTagName = "GZM-TABLE-AGG-MIDDLE";
26
+ const tableAggEndTagName = "GZM-TABLE-AGG-END";
27
+ const tableAggTagName = "GZM-TABLE-AGG";
28
+ const tableColWidthSetterTagName = "GZM-TABLE-COL-WIDTH-SETTER";
29
+ const tableColCheckTagName = "GZM-TABLE-COL-CHECK";
30
+ const tableRowCheckTagName = "GZM-TABLE-ROW-CHECK";
31
+ const tableColSerialTagName = "GZM-TABLE-COL-SERIAL";
32
+ const tableRowSerialTagName = "GZM-TABLE-ROW-SERIAL";
33
+ const tableColActionTagName = "GZM-TABLE-COL-ACTION";
34
+ const tableRowActionTagName = "GZM-TABLE-ROW-ACTION";
35
+ const tableColMenuTagName = "GZM-TABLE-COL-MENU";
36
+ const tableRowMenuTagName = "GZM-TABLE-ROW-MENU";
37
+ const styleSheet$1 = createStyleSheet({
38
+ //确保 section 能够显示滚动栏
39
+ ":host": `
40
+ overflow: hidden;
41
+ display: block;
42
+ `,
43
+ //section 负责显示滚动栏
44
+ ":host > section": `
45
+ display: grid;
46
+ grid-template-columns: auto auto;
47
+ gap: 0.5rem;
48
+ overflow: auto;
49
+ max-height: 100%;
50
+
51
+ --grid-row-serial: 0; /*行号从 1 开始*/
52
+ counter-reset: row-serial var(--grid-row-serial);
53
+ `,
54
+ [tableListTagName]: `
55
+ display: grid;
56
+ grid-auto-rows: max-content;/*每一行的高度都自动*/
57
+ gap: 0px;
58
+
59
+ /*3个span加在一起应该等于可见【列头+列+列尾】的数量*/
60
+ --grid-start-span: 0;
61
+ --grid-middle-span: 0;
62
+ --grid-end-span: 0;
63
+
64
+ /*列部分占用的行的数量*/
65
+ --grid-col-end: 0;
66
+ `,
67
+ /*下面 3 个占据了 grid-list 的上半部分。利用 subgrid 使其中元素占用 grid-list 的列。*/
68
+ [`${tableColStartTagName}, ${tableColMiddleTagName}, ${tableColEndTagName}`]: `
69
+ position: sticky;
70
+ top: 0px;
71
+
72
+ display: grid;
73
+ grid-template-columns: subgrid;
74
+ grid-template-rows: subgrid;
75
+ grid-row-start: 1;
76
+ grid-row-end: var(--grid-col-end);
77
+ `,
78
+ /*下面 3 个固定在左侧 */
79
+ [`${tableColStartTagName}, ${tableRowStartTagName}, ${tableAggStartTagName}`]: `
80
+ left: 0px;
81
+ grid-column-end: span var(--grid-start-span);
82
+ `,
83
+ [`${tableListTagName}[no-start] ${tableColStartTagName}, ${tableListTagName}[no-start] ${tableRowStartTagName}, ${tableListTagName}[no-start] ${tableAggStartTagName}`]: `
84
+ display: none;
85
+ `,
86
+ /*下面 3 个固定在右侧 */
87
+ [`${tableColEndTagName}, ${tableRowEndTagName}, ${tableAggEndTagName}`]: `
88
+ right: 0px;
89
+ grid-column-end: span var(--grid-end-span);
90
+ `,
91
+ [`${tableListTagName}[no-end] ${tableColEndTagName}, ${tableListTagName}[no-end] ${tableRowEndTagName}, ${tableListTagName}[no-end] ${tableAggEndTagName}`]: `
92
+ display: none;
93
+ `,
94
+ /* 中间的 上中下 3 个元素, 无 sticky,只设置宽度 */
95
+ [`${tableColMiddleTagName}, ${tableRowMiddleTagName}, ${tableAggMiddleTagName}`]: `
96
+ grid-column-end: span var(--grid-middle-span);
97
+ `,
98
+ /* 用来组织子元素的容器 */
99
+ [`${tableColHeadTagName}, ${tableColTailTagName}, ${tableColsTagName}, ${tableColGroupTagName}, ${tableRowsTagName}, ${tableRowTagName}, ${tableAggsTagName}`]: `
100
+ display: contents;
101
+ `,
102
+ /* 所有的列头和列尾,所有的列头和尾都只有一个元素 */
103
+ [`${tableColHeadTagName} > *, ${tableColTailTagName} > *`]: `
104
+ grid-row-start: 1;
105
+ grid-row-end: var(--grid-col-end);
106
+ text-align: center;
107
+ padding: 0.25rem 0.5rem;
108
+ `,
109
+ /* 不可滚动内容要求在 可滚动内容 的上面 */
110
+ [`${tableColStartTagName}, ${tableColEndTagName}`]: `
111
+ z-index: 40;
112
+ `,
113
+ /* COL */
114
+ [tableColTagName]: `
115
+ display: flex;
116
+ align-items: flex-end; /*1-col会跨行,这个使文本等靠底部显示。2-文本占用最大的地方,菜单⋮靠右*/
117
+ padding: 0.25rem 0.5rem;
118
+
119
+ position: sticky;
120
+ top: 0px;
121
+ z-index: 30;
122
+
123
+ grid-row-end: var(--grid-col-end);
124
+
125
+ white-space: nowrap;
126
+ ` + gzmHeader,
127
+ /* 列排序 */
128
+ [tableColTagName + "::before"]: `
129
+ content: attr(sort);
130
+ `,
131
+ /* 列文本 */
132
+ [tableColTagName + ">span"]: `
133
+ flex: 1 1 auto;
134
+ margin-right: 0.25rem;
135
+ `,
136
+ /* 列按钮:菜单等。鼠标悬停时显示菜单按钮。 */
137
+ [tableColTagName + ">.gzm-txt-btn"]: `
138
+ visibility: hidden;
139
+ `,
140
+ [tableColTagName + ":hover >.gzm-txt-btn"]: `
141
+ visibility: visible;
142
+ `,
143
+ /* COL-GROUP */
144
+ /*不能换行,div 高度必须保持不变*/
145
+ [tableColGroupTagName + ">div"]: `
146
+ display: flex;
147
+ gap: 0.25rem;
148
+ padding: 0.25rem 0.5rem;
149
+
150
+ position: sticky;
151
+ top: 0px;
152
+ z-index: 30;
153
+
154
+ white-space: nowrap;
155
+ ` + gzmHeader,
156
+ [tableColGroupTagName + ">div >span"]: `
157
+ flex: 1 1 auto;
158
+ `,
159
+ /* 列组按钮:菜单等。鼠标悬停时显示菜单按钮。 */
160
+ [tableColGroupTagName + ">div >.gzm-txt-btn"]: `
161
+ visibility: hidden;
162
+ `,
163
+ [tableColGroupTagName + ">div:hover >.gzm-txt-btn"]: `
164
+ visibility: visible;
165
+ `,
166
+ /* ROW */
167
+ [`${tableRowTagName}:hover >* >${tableCellTagName}`]: `
168
+ background: var(--gzm-h-btn-background);
169
+ border: var(--gzm-h-btn-border);
170
+ color: var(--gzm-h-btn-txt-color);
171
+ `,
172
+ [`${tableRowTagName}:active >* >${tableCellTagName}, ${tableRowTagName}[active] >* >${tableCellTagName}`]: `
173
+ color: var(--gzm-a-btn-txt-color) !important;
174
+ background: var(--gzm-a-btn-background) !important;
175
+ border: var(--gzm-a-btn-border) !important;
176
+ `,
177
+ [`${tableRowStartTagName}, ${tableRowMiddleTagName}, ${tableRowEndTagName}`]: `
178
+ display: grid;
179
+ grid-template-columns: subgrid;
180
+ grid-template-rows: subgrid;
181
+ `,
182
+ /*需要设置背景颜色,否则与可滚动内容字符重叠*/
183
+ [`${tableRowStartTagName}, ${tableRowEndTagName}`]: `
184
+ position: sticky;
185
+ z-index: 20;
186
+ background-color: var(--gzm-background-color);
187
+ `,
188
+ /* CELL */
189
+ [tableCellTagName]: `
190
+ padding: 0.25rem 0.5rem;
191
+ border: var(--gzm-header-border);
192
+ overflow: hidden;
193
+ text-overflow: ellipsis;
194
+ `,
195
+ [tableCellTagName + ">a"]: `
196
+ text-decoration: revert;
197
+ `,
198
+ /* AGGs */
199
+ [`${tableAggStartTagName}, ${tableAggMiddleTagName}, ${tableAggEndTagName}`]: `
200
+ display: grid;
201
+ grid-template-columns: subgrid;
202
+ grid-template-rows: subgrid;
203
+
204
+ position: sticky;
205
+ bottom: 0px;
206
+ `,
207
+ [tableAggTagName]: `
208
+ grid-row-end: -1;
209
+ `,
210
+ /*需要聚合的字段一定会设置聚合的名称*/
211
+ [tableAggTagName + "[title]"]: `
212
+ padding: 0.25rem 0.5rem;
213
+ white-space: nowrap;
214
+ z-index: 10;
215
+ ` + gzmHeader,
216
+ [`${tableAggStartTagName}, ${tableAggEndTagName}`]: `
217
+ z-index: 30;
218
+ `,
219
+ /* HEAD, TAIL */
220
+ [`${tableColCheckTagName}, ${tableColSerialTagName}, ${tableColMenuTagName}, ${tableColActionTagName}`]: `
221
+ display: flex;
222
+ align-items: flex-end;
223
+ ` + gzmHeader,
224
+ [`${tableColCheckTagName}, ${tableRowCheckTagName}`]: `
225
+ padding: 0.25rem 0.5rem;
226
+ text-align: center;
227
+ justify-content: center;
228
+ ` + gzmHeader,
229
+ [`${tableColSerialTagName}, ${tableRowSerialTagName}`]: `
230
+ padding: 0.25rem 0.5rem;
231
+ text-align: right; /* row 靠右对齐 */
232
+ justify-content: flex-end; /* col 靠右对齐 */
233
+ ` + gzmHeader,
234
+ [tableRowSerialTagName + "::after"]: `
235
+ counter-increment: row-serial; /*reset 在 :host 中*/
236
+ content: counter(row-serial);
237
+ `,
238
+ [tableRowMenuTagName]: `
239
+ padding: 0.25rem 0.5rem;
240
+ text-align: center;
241
+ ` + gzmHeader,
242
+ [tableRowActionTagName]: `
243
+ padding: 0.25rem 0.5rem;
244
+ border: var(--gzm-header-border);
245
+ `
246
+ });
247
+ const zh = {
248
+ agg: "统计",
249
+ noAgg: "无统计",
250
+ sort: "行排序",
251
+ noSort: "无排序",
252
+ autoWidth: "自动宽度",
253
+ minWidth: "最小宽度",
254
+ maxWidth: "最大宽度",
255
+ pxWidth: "指定宽度",
256
+ textWrap: "文本换行",
257
+ autoWrap: "自动换行",
258
+ noWrap: "禁止换行",
259
+ mustWrap: "强制换行",
260
+ textAlign: "文本对齐",
261
+ startAlign: "左对齐",
262
+ endAlign: "右对齐",
263
+ centerAlign: "居中对齐",
264
+ justifyAlign: "两侧对齐",
265
+ //CAF.Scaffolding.FieldAggregation 按道理不应该放在这里,偷懒了!
266
+ COUNT: "计数",
267
+ MAX: "最大值",
268
+ MIN: "最小值",
269
+ AVG: "平均值",
270
+ SUM: "合计",
271
+ STDDEV_POP: "总体标准差",
272
+ STDDEV_SAMP: "样本标准差",
273
+ VAR_POP: "总体方差",
274
+ VAR_SAMP: "样本方差",
275
+ toggleCheck: "全选 / 全不选"
276
+ };
277
+ const texts = { zh };
278
+ const defaultTexts = createText(texts, globalTexts);
279
+ function getTexts($ele) {
280
+ if ($ele.isConnected) {
281
+ return $ele.getRootNode().host.T;
282
+ }
283
+ return defaultTexts;
284
+ }
285
+ var __create$f = Object.create;
286
+ var __defProp$f = Object.defineProperty;
287
+ var __getOwnPropDesc$f = Object.getOwnPropertyDescriptor;
288
+ var __knownSymbol$f = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
289
+ var __typeError$f = (msg) => {
290
+ throw TypeError(msg);
291
+ };
292
+ var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
293
+ var __name$f = (target, value) => __defProp$f(target, "name", { value, configurable: true });
294
+ var __decoratorStart$f = (base) => [, , , __create$f(base?.[__knownSymbol$f("metadata")] ?? null)];
295
+ var __decoratorStrings$f = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
296
+ var __expectFn$f = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$f("Function expected") : fn;
297
+ var __decoratorContext$f = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$f[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$f("Already initialized") : fns.push(__expectFn$f(fn || null)) });
298
+ var __decoratorMetadata$f = (array, target) => __defNormalProp$f(target, __knownSymbol$f("metadata"), array[3]);
299
+ var __runInitializers$f = (array, flags, self, value) => {
300
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
301
+ return value;
302
+ };
303
+ var __decorateElement$f = (array, flags, name, decorators, target, extra) => {
304
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
305
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings$f[k + 5];
306
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
307
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc$f(k < 4 ? target : { get [name]() {
308
+ return __privateGet$3(this, extra);
309
+ }, set [name](x) {
310
+ return __privateSet$3(this, extra, x);
311
+ } }, name));
312
+ k ? p && k < 4 && __name$f(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name$f(target, name);
313
+ for (var i = decorators.length - 1; i >= 0; i--) {
314
+ ctx = __decoratorContext$f(k, name, done = {}, array[3], extraInitializers);
315
+ if (k) {
316
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn$3(target, x) : (x) => name in x };
317
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet$3 : __privateMethod$3)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
318
+ if (k > 2) access.set = p ? (x, y) => __privateSet$3(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
319
+ }
320
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
321
+ if (k ^ 4 || it === void 0) __expectFn$f(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
322
+ else if (typeof it !== "object" || it === null) __typeError$f("Object expected");
323
+ else __expectFn$f(fn = it.get) && (desc.get = fn), __expectFn$f(fn = it.set) && (desc.set = fn), __expectFn$f(fn = it.init) && initializers.unshift(fn);
324
+ }
325
+ return k || __decoratorMetadata$f(array, target), desc && __defProp$f(target, name, desc), p ? k ^ 4 ? extra : desc : target;
326
+ };
327
+ var __accessCheck$3 = (obj, member, msg) => member.has(obj) || __typeError$f("Cannot " + msg);
328
+ var __privateIn$3 = (member, obj) => Object(obj) !== obj ? __typeError$f('Cannot use the "in" operator on this value') : member.has(obj);
329
+ var __privateGet$3 = (obj, member, getter) => (__accessCheck$3(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
330
+ var __privateAdd$3 = (obj, member, value) => member.has(obj) ? __typeError$f("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
331
+ var __privateSet$3 = (obj, member, value, setter) => (__accessCheck$3(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
332
+ var __privateMethod$3 = (obj, member, method) => (__accessCheck$3(obj, member, "access private method"), method);
333
+ var _colKey_dec, _a$f, _TableCell_decorators, _init$f, _colKey;
334
+ _TableCell_decorators = [defineElement({ tagName: tableCellTagName })];
335
+ class TableCell extends (_a$f = HTMLElement, _colKey_dec = [strAttr], _a$f) {
336
+ constructor() {
337
+ super(...arguments);
338
+ __privateAdd$3(this, _colKey, __runInitializers$f(_init$f, 8, this)), __runInitializers$f(_init$f, 11, this);
339
+ }
340
+ // #endregion
341
+ get $row() {
342
+ return this.closest(tableRowTagName);
343
+ }
344
+ }
345
+ _init$f = __decoratorStart$f(_a$f);
346
+ _colKey = /* @__PURE__ */ new WeakMap();
347
+ __decorateElement$f(_init$f, 4, "colKey", _colKey_dec, TableCell, _colKey);
348
+ TableCell = __decorateElement$f(_init$f, 0, "TableCell", _TableCell_decorators, TableCell);
349
+ __runInitializers$f(_init$f, 1, TableCell);
350
+ var __create$e = Object.create;
351
+ var __defProp$e = Object.defineProperty;
352
+ var __getOwnPropDesc$e = Object.getOwnPropertyDescriptor;
353
+ var __knownSymbol$e = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
354
+ var __typeError$e = (msg) => {
355
+ throw TypeError(msg);
356
+ };
357
+ var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
358
+ var __name$e = (target, value) => __defProp$e(target, "name", { value, configurable: true });
359
+ var __decoratorStart$e = (base) => [, , , __create$e(base?.[__knownSymbol$e("metadata")] ?? null)];
360
+ var __decoratorStrings$e = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
361
+ var __expectFn$e = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$e("Function expected") : fn;
362
+ var __decoratorContext$e = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$e[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$e("Already initialized") : fns.push(__expectFn$e(fn || null)) });
363
+ var __decoratorMetadata$e = (array, target) => __defNormalProp$e(target, __knownSymbol$e("metadata"), array[3]);
364
+ var __runInitializers$e = (array, flags, self, value) => {
365
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
366
+ return value;
367
+ };
368
+ var __decorateElement$e = (array, flags, name, decorators, target, extra) => {
369
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
370
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings$e[k + 5];
371
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
372
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc$e(k < 4 ? target : { get [name]() {
373
+ return __privateGet$2(this, extra);
374
+ }, set [name](x) {
375
+ return __privateSet$2(this, extra, x);
376
+ } }, name));
377
+ k ? p && k < 4 && __name$e(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name$e(target, name);
378
+ for (var i = decorators.length - 1; i >= 0; i--) {
379
+ ctx = __decoratorContext$e(k, name, done = {}, array[3], extraInitializers);
380
+ if (k) {
381
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn$2(target, x) : (x) => name in x };
382
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet$2 : __privateMethod$2)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
383
+ if (k > 2) access.set = p ? (x, y) => __privateSet$2(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
384
+ }
385
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
386
+ if (k ^ 4 || it === void 0) __expectFn$e(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
387
+ else if (typeof it !== "object" || it === null) __typeError$e("Object expected");
388
+ else __expectFn$e(fn = it.get) && (desc.get = fn), __expectFn$e(fn = it.set) && (desc.set = fn), __expectFn$e(fn = it.init) && initializers.unshift(fn);
389
+ }
390
+ return k || __decoratorMetadata$e(array, target), desc && __defProp$e(target, name, desc), p ? k ^ 4 ? extra : desc : target;
391
+ };
392
+ var __publicField$2 = (obj, key, value) => __defNormalProp$e(obj, typeof key !== "symbol" ? key + "" : key, value);
393
+ var __accessCheck$2 = (obj, member, msg) => member.has(obj) || __typeError$e("Cannot " + msg);
394
+ var __privateIn$2 = (member, obj) => Object(obj) !== obj ? __typeError$e('Cannot use the "in" operator on this value') : member.has(obj);
395
+ var __privateGet$2 = (obj, member, getter) => (__accessCheck$2(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
396
+ var __privateAdd$2 = (obj, member, value) => member.has(obj) ? __typeError$e("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
397
+ var __privateSet$2 = (obj, member, value, setter) => (__accessCheck$2(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
398
+ var __privateMethod$2 = (obj, member, method) => (__accessCheck$2(obj, member, "access private method"), method);
399
+ var _active_dec, _a$e, _TableRow_decorators, _TableRow_instances, setActive_fn, refreshHead_fn, refreshTail_fn, refresh_fn, findColumnCell_fn, _init$e, _active, _b$4;
400
+ const mutableAttributes$7 = ["active"];
401
+ _TableRow_decorators = [defineElement({ tagName: tableRowTagName, mutableAttributes: mutableAttributes$7 })];
402
+ class TableRow extends (_b$4 = ViewElement) {
403
+ constructor() {
404
+ super(...arguments);
405
+ __privateAdd$2(this, _TableRow_instances);
406
+ __publicField$2(this, "$start", document.createElement(tableRowStartTagName));
407
+ __publicField$2(this, "$middle", document.createElement(tableRowMiddleTagName));
408
+ __publicField$2(this, "$end", document.createElement(tableRowEndTagName));
409
+ __privateAdd$2(this, _active, __runInitializers$e(_init$e, 8, this, false)), __runInitializers$e(_init$e, 11, this);
410
+ }
411
+ setViewProperty(p, v) {
412
+ if (p === "active" && v && !this.active) {
413
+ __privateMethod$2(this, _TableRow_instances, setActive_fn).call(this);
414
+ return true;
415
+ }
416
+ return super.setViewProperty(p, v);
417
+ }
418
+ connectedCallback() {
419
+ if (this.childElementCount === 0) {
420
+ this.append(this.$start, this.$middle, this.$end);
421
+ }
422
+ if (this.model?.active && !this.active) {
423
+ __privateMethod$2(this, _TableRow_instances, setActive_fn).call(this);
424
+ }
425
+ }
426
+ // #endregion
427
+ // #region 数据展示
428
+ [(_a$e = handleModelEvent, _active_dec = [boolAttr], _a$e)](source, evt) {
429
+ return new RowModelEventHandler(this, source).handle(evt);
430
+ }
431
+ refresh(ss, refreshCellData = false) {
432
+ __privateMethod$2(this, _TableRow_instances, refresh_fn).call(this, ss.$startColumns, this.$start, refreshCellData);
433
+ __privateMethod$2(this, _TableRow_instances, refresh_fn).call(this, ss.$middleColumns, this.$middle, refreshCellData);
434
+ __privateMethod$2(this, _TableRow_instances, refresh_fn).call(this, ss.$endColumns, this.$end, refreshCellData);
435
+ __privateMethod$2(this, _TableRow_instances, refreshHead_fn).call(this, ss.$columnHeads, refreshCellData);
436
+ __privateMethod$2(this, _TableRow_instances, refreshTail_fn).call(this, ss.$columnTails, refreshCellData);
437
+ }
438
+ _active_set() {
439
+ this.model?.afterActiveChanged?.(this);
440
+ }
441
+ get checked() {
442
+ const $rc = this.querySelector(tableRowCheckTagName);
443
+ if (!$rc) return false;
444
+ return $rc.$chk.checked;
445
+ }
446
+ set checked(v) {
447
+ const $rc = this.querySelector(tableRowCheckTagName);
448
+ if ($rc) {
449
+ $rc.$chk.checked = v;
450
+ }
451
+ }
452
+ // #endregion
453
+ }
454
+ _init$e = __decoratorStart$e(_b$4);
455
+ _TableRow_instances = /* @__PURE__ */ new WeakSet();
456
+ setActive_fn = function() {
457
+ if (!this.isConnected) {
458
+ return;
459
+ }
460
+ this.dispatchEvent(new MouseEvent("click", { bubbles: true }));
461
+ };
462
+ refreshHead_fn = function($heads, refreshCellData = false) {
463
+ let $lastHead;
464
+ const $start = this.$start;
465
+ for (let i = 0; i < $heads.length; i++) {
466
+ const $h = $heads[i];
467
+ const $head = $h.findInRow(this) || $h.createInRow();
468
+ $head.hidden = !$h.visible;
469
+ if (i === 0) {
470
+ const $fec = $start.firstElementChild;
471
+ if (!$fec) {
472
+ $start.prepend($head);
473
+ } else if ($fec === $head) ;
474
+ else {
475
+ $fec.before($head);
476
+ }
477
+ } else if ($lastHead?.nextElementSibling !== $head) {
478
+ $lastHead?.after($head);
479
+ }
480
+ $lastHead = $head;
481
+ if ($h.dataAware && refreshCellData) {
482
+ $h.refresh(this, $head);
483
+ }
484
+ }
485
+ };
486
+ refreshTail_fn = function($tails, refreshCellData = false) {
487
+ let $lastTail;
488
+ const $end = this.$end;
489
+ for (let i = $tails.length - 1; i >= 0; i--) {
490
+ const $t = $tails[i];
491
+ const $tail = $t.findInRow(this) || $t.createInRow();
492
+ $tail.hidden = !$t.visible;
493
+ if (i === $tails.length - 1) {
494
+ const $lec = $end.lastElementChild;
495
+ if (!$lec) {
496
+ $end.append($tail);
497
+ } else if ($lec === $tail) ;
498
+ else {
499
+ $lec.after($tail);
500
+ }
501
+ } else if ($lastTail?.previousElementSibling !== $tail) {
502
+ $lastTail?.before($tail);
503
+ }
504
+ $lastTail = $tail;
505
+ if ($t.dataAware && refreshCellData) {
506
+ $t.refresh(this, $tail);
507
+ }
508
+ }
509
+ };
510
+ refresh_fn = function($columns, $cellParent, refreshCellData) {
511
+ const $cells = Array.from($cellParent.querySelectorAll(tableCellTagName));
512
+ const di = this.model.data;
513
+ let needInsert = false;
514
+ for (let i = 0; i < $columns.length; i++) {
515
+ const $col = $columns[i];
516
+ let $cell;
517
+ if (i >= $cells.length) {
518
+ $cell = $col.createCell(di);
519
+ $cells.push($cell);
520
+ needInsert = true;
521
+ } else {
522
+ const j = __privateMethod$2(this, _TableRow_instances, findColumnCell_fn).call(this, i, $col.key, $cells);
523
+ if (j === i) {
524
+ $cell = $cells[j];
525
+ if (refreshCellData) {
526
+ $col._setCellData($cell, di);
527
+ }
528
+ } else if (j > i) {
529
+ $cell = $cells.splice(j, 1)[0];
530
+ $cells.splice(i, 0, $cell);
531
+ needInsert = true;
532
+ } else {
533
+ $cell = $col.createCell(di);
534
+ $cells.splice(i, 0, $cell);
535
+ needInsert = true;
536
+ }
537
+ }
538
+ $cell.hidden = !$col.visible;
539
+ }
540
+ if ($cells.length > $columns.length) {
541
+ const $toDel = $cells.splice($columns.length, $cells.length - $columns.length);
542
+ $toDel.forEach(($x) => $x.remove());
543
+ }
544
+ if (needInsert) {
545
+ const $df = document.createDocumentFragment();
546
+ $df.append(...$cells);
547
+ void ($cellParent === this.$end ? $cellParent.prepend($df) : $cellParent.append($df));
548
+ }
549
+ };
550
+ findColumnCell_fn = function(i, colKey, $cells) {
551
+ for (let j = i; j < $cells.length; j++) {
552
+ const $cell = $cells[j];
553
+ if ($cell.colKey === colKey) {
554
+ return j;
555
+ }
556
+ }
557
+ return -1;
558
+ };
559
+ _active = /* @__PURE__ */ new WeakMap();
560
+ __decorateElement$e(_init$e, 4, "active", _active_dec, TableRow, _active);
561
+ TableRow = __decorateElement$e(_init$e, 0, "TableRow", _TableRow_decorators, TableRow);
562
+ __runInitializers$e(_init$e, 1, TableRow);
563
+ class RowModelEventHandler extends ModelEventHandler {
564
+ handle(arg) {
565
+ const ret = super.handle(arg);
566
+ if (!ret && arg.type === "item-update") {
567
+ const iu = arg;
568
+ if ("data" in iu.updated) {
569
+ const $list = this.$view.closest(tableListTagName);
570
+ if ($list) {
571
+ $list.getRowRefreshFunc()(this.$view, true);
572
+ return true;
573
+ }
574
+ }
575
+ }
576
+ return ret;
577
+ }
578
+ }
579
+ var __create$d = Object.create;
580
+ var __defProp$d = Object.defineProperty;
581
+ var __getOwnPropDesc$d = Object.getOwnPropertyDescriptor;
582
+ var __knownSymbol$d = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
583
+ var __typeError$d = (msg) => {
584
+ throw TypeError(msg);
585
+ };
586
+ var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
587
+ var __name$d = (target, value) => __defProp$d(target, "name", { value, configurable: true });
588
+ var __decoratorStart$d = (base) => [, , , __create$d(base?.[__knownSymbol$d("metadata")] ?? null)];
589
+ var __decoratorStrings$d = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
590
+ var __expectFn$d = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$d("Function expected") : fn;
591
+ var __decoratorContext$d = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$d[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$d("Already initialized") : fns.push(__expectFn$d(fn || null)) });
592
+ var __decoratorMetadata$d = (array, target) => __defNormalProp$d(target, __knownSymbol$d("metadata"), array[3]);
593
+ var __runInitializers$d = (array, flags, self, value) => {
594
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
595
+ return value;
596
+ };
597
+ var __decorateElement$d = (array, flags, name, decorators, target, extra) => {
598
+ var it, done, ctx, k = flags & 7, p = false;
599
+ var j = 0;
600
+ var extraInitializers = array[j] || (array[j] = []);
601
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc$d(target, name));
602
+ __name$d(target, name);
603
+ for (var i = decorators.length - 1; i >= 0; i--) {
604
+ ctx = __decoratorContext$d(k, name, done = {}, array[3], extraInitializers);
605
+ it = (0, decorators[i])(target, ctx), done._ = 1;
606
+ __expectFn$d(it) && (target = it);
607
+ }
608
+ return __decoratorMetadata$d(array, target), desc && __defProp$d(target, name, desc), p ? k ^ 4 ? extra : desc : target;
609
+ };
610
+ var _TableColGroup_decorators, _init$d, _a$d;
611
+ const mutableAttributes$6 = ["hidden"];
612
+ _TableColGroup_decorators = [B.defineElement({ tagName: tableColGroupTagName, mutableAttributes: mutableAttributes$6 })];
613
+ let _TableColGroup = class _TableColGroup2 extends (_a$d = HTMLElement) {
614
+ // #region 子元素
615
+ constructor() {
616
+ super();
617
+ this.$lbl = document.createElement("span");
618
+ this.$menu = B.createTxtBtn("⋮");
619
+ this.$div = document.createElement("div");
620
+ this.$div.append(this.$lbl, this.$menu);
621
+ }
622
+ $div;
623
+ $lbl;
624
+ $menu;
625
+ /**
626
+ *
627
+ * @param {Number} start
628
+ * @returns 所有下级可见列的数量
629
+ */
630
+ setRow(start) {
631
+ if (this.hidden) {
632
+ throw new Error("call group.setRow() when not hidden");
633
+ }
634
+ const $cols = this.$columns;
635
+ const $gs = this.$groups;
636
+ if ($cols.length === 0 && $gs.length === 0) {
637
+ this.#$p = void 0;
638
+ this.remove();
639
+ return 0;
640
+ }
641
+ this.$div.style.gridRowStart = start.toString();
642
+ start++;
643
+ let colVisible = 0;
644
+ for (const $col of $cols) {
645
+ if ($col.hidden) ;
646
+ else {
647
+ $col.setRow(start);
648
+ colVisible++;
649
+ }
650
+ }
651
+ for (const $group of $gs) {
652
+ if ($group.hidden) ;
653
+ else {
654
+ colVisible += $group.setRow(start);
655
+ }
656
+ }
657
+ if (colVisible === 0) {
658
+ this.hidden = true;
659
+ return 0;
660
+ }
661
+ this.$div.style.gridColumnEnd = "span " + colVisible;
662
+ return colVisible;
663
+ }
664
+ /**
665
+ * 只属于这个 group 的列
666
+ */
667
+ get $columns() {
668
+ const ret = [];
669
+ for (const $c of this.children) {
670
+ if ($c instanceof TableCol) {
671
+ ret.push($c);
672
+ }
673
+ }
674
+ return ret;
675
+ }
676
+ /**
677
+ * 只属于这个 group 的下级 group
678
+ */
679
+ get $groups() {
680
+ const ret = [];
681
+ for (const $c of this.children) {
682
+ if ($c instanceof _TableColGroup2) {
683
+ ret.push($c);
684
+ }
685
+ }
686
+ return ret;
687
+ }
688
+ /**
689
+ * 当前列组是否显示
690
+ */
691
+ get visible() {
692
+ if (this.hidden) {
693
+ return false;
694
+ }
695
+ if (!this.isConnected) {
696
+ return false;
697
+ }
698
+ if (this.#$p instanceof _TableColGroup2) {
699
+ return this.#$p.visible;
700
+ }
701
+ return true;
702
+ }
703
+ /**
704
+ * 当直属于 table-cols,返回 1。
705
+ * grid-row-start 的值也是从 1 开始。
706
+ */
707
+ get tier() {
708
+ if (this.#$p instanceof _TableColGroup2) {
709
+ return this.#$p.tier + 1;
710
+ }
711
+ return 1;
712
+ }
713
+ // #endregion
714
+ // #region 上级元素
715
+ connectedCallback() {
716
+ if (this.#$p === this.parentElement) return;
717
+ this.prepend(this.$div);
718
+ this.#$p = this.parentElement;
719
+ this.#$p.notify({ groupAdd: true, $group: this });
720
+ }
721
+ #$p;
722
+ //为了 disconnected
723
+ disconnectedCallback() {
724
+ if (this.#$p && !this.parentElement) {
725
+ this.#$p.notify({ groupDel: true, $group: this });
726
+ this.#$p = void 0;
727
+ }
728
+ }
729
+ // #endregion
730
+ // #region ColNoticeReceiver
731
+ notify(n) {
732
+ if ("colAdd" in n && n.colAdd) {
733
+ if (!n.$col.hidden && this.hidden) this.hidden = false;
734
+ }
735
+ this.#$p?.notify(n);
736
+ }
737
+ // #endregion
738
+ // #region 属性
739
+ get label() {
740
+ return this.$lbl.textContent;
741
+ }
742
+ set label(v) {
743
+ this.$lbl.textContent = v;
744
+ }
745
+ _hidden_set() {
746
+ this.notify({ groupHide: true, $group: this });
747
+ }
748
+ // #endregion
749
+ // #region 组菜单
750
+ handleClick(e) {
751
+ if (e.target === this.$menu) {
752
+ this.#showMenu();
753
+ }
754
+ }
755
+ #showMenu() {
756
+ const mis = [
757
+ {
758
+ tag: "click",
759
+ label: this.T.hide,
760
+ group: "action",
761
+ onclick: () => {
762
+ this.hidden = true;
763
+ }
764
+ }
765
+ /* 无法与 table-cols.modelList 同步,所以删除此功能
766
+ {
767
+ label: T.del!(),
768
+ group: 'action',
769
+ onclick: () => {
770
+ this.remove();
771
+ }
772
+ },*/
773
+ ];
774
+ for (const $col of this.$columns) {
775
+ const colItem = {
776
+ tag: "check",
777
+ group: "table-col",
778
+ label: $col.label ?? "",
779
+ checked: !$col.hidden,
780
+ onclick() {
781
+ $col.setModelProperty("hidden", !$col.hidden);
782
+ }
783
+ };
784
+ mis.push(colItem);
785
+ }
786
+ const $sm = createMenu(...mis);
787
+ $sm.show(this.$menu, B.xy.rightBottom, B.xy.rightTop);
788
+ }
789
+ // #endregion
790
+ get T() {
791
+ return getTexts(this);
792
+ }
793
+ };
794
+ _init$d = __decoratorStart$d(_a$d);
795
+ _TableColGroup = __decorateElement$d(_init$d, 0, "TableColGroup", _TableColGroup_decorators, _TableColGroup);
796
+ __runInitializers$d(_init$d, 1, _TableColGroup);
797
+ let TableColGroup = _TableColGroup;
798
+ var __create$c = Object.create;
799
+ var __defProp$c = Object.defineProperty;
800
+ var __getOwnPropDesc$c = Object.getOwnPropertyDescriptor;
801
+ var __knownSymbol$c = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
802
+ var __typeError$c = (msg) => {
803
+ throw TypeError(msg);
804
+ };
805
+ var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
806
+ var __name$c = (target, value) => __defProp$c(target, "name", { value, configurable: true });
807
+ var __decoratorStart$c = (base) => [, , , __create$c(base?.[__knownSymbol$c("metadata")] ?? null)];
808
+ var __decoratorStrings$c = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
809
+ var __expectFn$c = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$c("Function expected") : fn;
810
+ var __decoratorContext$c = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$c[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$c("Already initialized") : fns.push(__expectFn$c(fn || null)) });
811
+ var __decoratorMetadata$c = (array, target) => __defNormalProp$c(target, __knownSymbol$c("metadata"), array[3]);
812
+ var __runInitializers$c = (array, flags, self, value) => {
813
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
814
+ return value;
815
+ };
816
+ var __decorateElement$c = (array, flags, name, decorators, target, extra) => {
817
+ var it, done, ctx, k = flags & 7, p = false;
818
+ var j = 0;
819
+ var extraInitializers = array[j] || (array[j] = []);
820
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc$c(target, name));
821
+ __name$c(target, name);
822
+ for (var i = decorators.length - 1; i >= 0; i--) {
823
+ ctx = __decoratorContext$c(k, name, done = {}, array[3], extraInitializers);
824
+ it = (0, decorators[i])(target, ctx), done._ = 1;
825
+ __expectFn$c(it) && (target = it);
826
+ }
827
+ return __decoratorMetadata$c(array, target), desc && __defProp$c(target, name, desc), p ? k ^ 4 ? extra : desc : target;
828
+ };
829
+ var _TableColWidthSetter_decorators, _init$c, _a$c;
830
+ const styleSheet = createStyleSheet({
831
+ [tableColWidthSetterTagName]: `
832
+ position: absolute;
833
+ z-index: 100;
834
+ top: 0px;
835
+ left: 0px;
836
+ border: var(--gzm-header-border);
837
+ background: var(--gzm-a-btn-background);
838
+ `,
839
+ [tableColWidthSetterTagName + "> input[type=range]"]: `
840
+ outline-style: none;
841
+ `
842
+ });
843
+ _TableColWidthSetter_decorators = [defineElement({ tagName: tableColWidthSetterTagName, style: styleSheet })];
844
+ class TableColWidthSetter extends (_a$c = HTMLElement) {
845
+ get $range() {
846
+ if (!this.#range) {
847
+ this.#range = document.createElement("input");
848
+ this.#range.type = "range";
849
+ this.append(this.#range);
850
+ }
851
+ return this.#range;
852
+ }
853
+ #range;
854
+ show($col) {
855
+ this.#calcSize($col);
856
+ this.$range.onchange = (e) => {
857
+ const $t = e.target;
858
+ console.debug("table column width range value = " + $t.value);
859
+ $col.width = $t.value + "px";
860
+ this.remove();
861
+ };
862
+ this.setAttribute("popover", "auto");
863
+ new CornerHelper(this, xy.leftTop, $col, xy.leftBottom).pos();
864
+ }
865
+ #calcSize($col) {
866
+ const root = $col.getRootNode();
867
+ const $table = root.host;
868
+ const colRect = $col.getBoundingClientRect();
869
+ const gridRect = $table.getBoundingClientRect();
870
+ const colRight2gridRight = Math.floor(gridRect.right - colRect.right);
871
+ const colRightEmptyWidth = colRight2gridRight - (gridRect.width - $table.clientWidth);
872
+ const max = Math.floor(colRect.width + colRightEmptyWidth);
873
+ const $r = this.$range;
874
+ $r.style.width = max + "px";
875
+ $r.max = max.toString();
876
+ $r.value = colRect.width.toString();
877
+ }
878
+ }
879
+ _init$c = __decoratorStart$c(_a$c);
880
+ TableColWidthSetter = __decorateElement$c(_init$c, 0, "TableColWidthSetter", _TableColWidthSetter_decorators, TableColWidthSetter);
881
+ __runInitializers$c(_init$c, 1, TableColWidthSetter);
882
+ var __create$b = Object.create;
883
+ var __defProp$b = Object.defineProperty;
884
+ var __getOwnPropDesc$b = Object.getOwnPropertyDescriptor;
885
+ var __knownSymbol$b = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
886
+ var __typeError$b = (msg) => {
887
+ throw TypeError(msg);
888
+ };
889
+ var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
890
+ var __name$b = (target, value) => __defProp$b(target, "name", { value, configurable: true });
891
+ var __decoratorStart$b = (base) => [, , , __create$b(base?.[__knownSymbol$b("metadata")] ?? null)];
892
+ var __decoratorStrings$b = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
893
+ var __expectFn$b = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$b("Function expected") : fn;
894
+ var __decoratorContext$b = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$b[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$b("Already initialized") : fns.push(__expectFn$b(fn || null)) });
895
+ var __decoratorMetadata$b = (array, target) => __defNormalProp$b(target, __knownSymbol$b("metadata"), array[3]);
896
+ var __runInitializers$b = (array, flags, self, value) => {
897
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
898
+ return value;
899
+ };
900
+ var __decorateElement$b = (array, flags, name, decorators, target, extra) => {
901
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
902
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings$b[k + 5];
903
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
904
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc$b(k < 4 ? target : { get [name]() {
905
+ return __privateGet$1(this, extra);
906
+ }, set [name](x) {
907
+ return __privateSet$1(this, extra, x);
908
+ } }, name));
909
+ k ? p && k < 4 && __name$b(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name$b(target, name);
910
+ for (var i = decorators.length - 1; i >= 0; i--) {
911
+ ctx = __decoratorContext$b(k, name, done = {}, array[3], extraInitializers);
912
+ if (k) {
913
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn$1(target, x) : (x) => name in x };
914
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet$1 : __privateMethod$1)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
915
+ if (k > 2) access.set = p ? (x, y) => __privateSet$1(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
916
+ }
917
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
918
+ if (k ^ 4 || it === void 0) __expectFn$b(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
919
+ else if (typeof it !== "object" || it === null) __typeError$b("Object expected");
920
+ else __expectFn$b(fn = it.get) && (desc.get = fn), __expectFn$b(fn = it.set) && (desc.set = fn), __expectFn$b(fn = it.init) && initializers.unshift(fn);
921
+ }
922
+ return k || __decoratorMetadata$b(array, target), desc && __defProp$b(target, name, desc), p ? k ^ 4 ? extra : desc : target;
923
+ };
924
+ var __publicField$1 = (obj, key, value) => __defNormalProp$b(obj, typeof key !== "symbol" ? key + "" : key, value);
925
+ var __accessCheck$1 = (obj, member, msg) => member.has(obj) || __typeError$b("Cannot " + msg);
926
+ var __privateIn$1 = (member, obj) => Object(obj) !== obj ? __typeError$b('Cannot use the "in" operator on this value') : member.has(obj);
927
+ var __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
928
+ var __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$b("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
929
+ var __privateSet$1 = (obj, member, value, setter) => (__accessCheck$1(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
930
+ var __privateMethod$1 = (obj, member, method) => (__accessCheck$1(obj, member, "access private method"), method);
931
+ var _agg_dec, _align_dec, _sort_dec, _width_dec, _label_dec, _key_dec, _a$b, _TableCol_decorators, _lbl, _$p, _vm, _TableCol_instances, setCellData_fn, createCellLink_fn, getDisplayFromList_fn, setCellStyle_fn, _init$b, _key, _label, _width, _sort, _align, _wrap, _agg, _agg2, showAggMenu_fn, createAggMenu_fn, _menuBtn, showMenu_fn, createMenu_fn, createWrapMenu_fn, createSortMenu_fn, createAlignMenu_fn, showWidthPopup_fn, sort_fn;
932
+ const sortAsc = "▲";
933
+ const sortDesc = "▼";
934
+ const tableColSort = ["", sortAsc, sortDesc];
935
+ function isAscSort(s) {
936
+ return s === sortAsc;
937
+ }
938
+ const tableColAlign = ["start", "end", "center", "justify"];
939
+ const mutableAttributes$5 = ["key", "label", "width", "hidden", "sort", "agg", "align"];
940
+ _TableCol_decorators = [B.defineElement({ tagName: tableColTagName, mutableAttributes: mutableAttributes$5 })];
941
+ class TableCol extends (_a$b = M.ViewElement, _key_dec = [B.strAttr], _label_dec = [B.strAttr], _width_dec = [B.strAttr], _sort_dec = [B.strAttr], _align_dec = [B.strAttr], _agg_dec = [B.strAttr], _a$b) {
942
+ constructor() {
943
+ super(...arguments);
944
+ __privateAdd$1(this, _TableCol_instances);
945
+ __privateAdd$1(this, _lbl);
946
+ __publicField$1(this, "$btns");
947
+ __privateAdd$1(this, _$p);
948
+ __privateAdd$1(this, _vm);
949
+ __privateAdd$1(this, _key, __runInitializers$b(_init$b, 8, this)), __runInitializers$b(_init$b, 11, this);
950
+ __privateAdd$1(this, _label, __runInitializers$b(_init$b, 12, this)), __runInitializers$b(_init$b, 15, this);
951
+ __privateAdd$1(this, _width, __runInitializers$b(_init$b, 16, this, "auto")), __runInitializers$b(_init$b, 19, this);
952
+ __privateAdd$1(this, _sort, __runInitializers$b(_init$b, 20, this, tableColSort[0])), __runInitializers$b(_init$b, 23, this);
953
+ __privateAdd$1(this, _align, __runInitializers$b(_init$b, 24, this, tableColAlign[0])), __runInitializers$b(_init$b, 27, this);
954
+ __privateAdd$1(this, _wrap);
955
+ __privateAdd$1(this, _agg, __runInitializers$b(_init$b, 28, this)), __runInitializers$b(_init$b, 31, this);
956
+ __privateAdd$1(this, _agg2);
957
+ __publicField$1(this, "$aggBtn");
958
+ __privateAdd$1(this, _menuBtn);
959
+ }
960
+ // #region 子元素
961
+ get $lbl() {
962
+ if (!__privateGet$1(this, _lbl)) {
963
+ __privateSet$1(this, _lbl, document.createElement("span"));
964
+ this.prepend(__privateGet$1(this, _lbl));
965
+ }
966
+ return __privateGet$1(this, _lbl);
967
+ }
968
+ /**
969
+ * $lbl 之后允许有多个按钮,最后两个是 agg 按钮和 menu 按钮,但有可能不生成。
970
+ * btns 按钮在 $lbl 和 agg 按钮之间
971
+ */
972
+ set btns(v) {
973
+ let $bs = this.$btns;
974
+ if (!v || !v.length) {
975
+ $bs?.forEach(($b) => $b.remove());
976
+ return;
977
+ }
978
+ const $df = document.createDocumentFragment();
979
+ for (const b of v) {
980
+ let $btn = $bs?.find(($b) => $b.textContent === b.icon);
981
+ if (!$btn) {
982
+ $btn = B.createTxtBtn(b.icon);
983
+ $btn.title = b.title;
984
+ }
985
+ $df.appendChild($btn);
986
+ }
987
+ $bs = this.$btns = Array.from($df.children);
988
+ this.$lbl.after(...$bs);
989
+ }
990
+ //生成的按钮数组
991
+ // #endregion
992
+ // #region 上级元素
993
+ connectedCallback() {
994
+ if (__privateGet$1(this, _$p) === this.parentElement) return;
995
+ __privateSet$1(this, _$p, this.parentElement);
996
+ __privateGet$1(this, _$p).notify({ colAdd: true, $col: this });
997
+ void this.$menuBtn;
998
+ }
999
+ //父元素, disconnectedCallback 的时候有用。
1000
+ disconnectedCallback() {
1001
+ if (!this.parentElement && __privateGet$1(this, _$p)) {
1002
+ this.$agg.remove();
1003
+ __privateGet$1(this, _$p).notify({ colDel: true, $col: this });
1004
+ __privateSet$1(this, _$p, void 0);
1005
+ }
1006
+ }
1007
+ get visible() {
1008
+ if (this.hidden) {
1009
+ return false;
1010
+ }
1011
+ const $p = __privateGet$1(this, _$p);
1012
+ if (!$p) {
1013
+ return false;
1014
+ }
1015
+ if ($p instanceof TableColGroup) {
1016
+ return $p.visible;
1017
+ }
1018
+ return true;
1019
+ }
1020
+ /**
1021
+ * 如果没有任何 group,那么每一列都应该调用 setRow(1)
1022
+ */
1023
+ setRow(start) {
1024
+ this.style.gridRowStart = start.toString();
1025
+ }
1026
+ // #endregion
1027
+ // #region 数据展示
1028
+ get valueMember() {
1029
+ return __privateGet$1(this, _vm);
1030
+ }
1031
+ set valueMember(v) {
1032
+ if (!(v instanceof M.ObjMember)) {
1033
+ v = new M.ObjMember(v);
1034
+ }
1035
+ __privateSet$1(this, _vm, v);
1036
+ __privateGet$1(this, _$p)?.notify({ colRefresh: true, $col: this });
1037
+ }
1038
+ set listSource(_) {
1039
+ __privateGet$1(this, _$p)?.notify({ colRefresh: true, $col: this });
1040
+ }
1041
+ createCell(dataItem) {
1042
+ const ret = document.createElement(tableCellTagName);
1043
+ ret.colKey = this.key;
1044
+ ret.hidden = this.hidden;
1045
+ __privateMethod$1(this, _TableCol_instances, setCellStyle_fn).call(this, ret);
1046
+ this._setCellData(ret, dataItem);
1047
+ return ret;
1048
+ }
1049
+ _setCellData($cell, dataItem = $cell.$row.model.data) {
1050
+ $cell.textContent = "";
1051
+ if (!dataItem) return;
1052
+ const dv = this.valueMember?.getObjValue(dataItem) ?? new M.ObjValue(void 0);
1053
+ __privateMethod$1(this, _TableCol_instances, setCellData_fn).call(this, $cell, dv);
1054
+ __privateMethod$1(this, _TableCol_instances, createCellLink_fn).call(this, $cell, dataItem, dv);
1055
+ }
1056
+ _key_set() {
1057
+ __privateMethod$1(this, _TableCol_instances, setCellStyle_fn).call(this, this.$agg);
1058
+ const a = this.align;
1059
+ if (a !== tableColAlign[0]) {
1060
+ this._align_set(a);
1061
+ }
1062
+ this._wrap_set(this.wrap);
1063
+ }
1064
+ _label_set(nv) {
1065
+ this.$lbl.textContent = nv;
1066
+ }
1067
+ _width_set() {
1068
+ __privateGet$1(this, _$p)?.notify({ colWidth: true, $col: this });
1069
+ }
1070
+ _sort_set() {
1071
+ __privateGet$1(this, _$p)?.notify({ colSort: true, $col: this });
1072
+ }
1073
+ get isAscSort() {
1074
+ return isAscSort(this.sort);
1075
+ }
1076
+ _align_set(nv) {
1077
+ const key = this.key;
1078
+ const $list = this.closest(tableListTagName);
1079
+ $list?.style.setProperty(`--gzm-text-align-${key}`, nv);
1080
+ }
1081
+ //因为 attribute 中的 bool 属性无法实现 3 种状态,所以这里没有使用 attribute。
1082
+ get wrap() {
1083
+ return __privateGet$1(this, _wrap);
1084
+ }
1085
+ set wrap(v) {
1086
+ __privateSet$1(this, _wrap, v);
1087
+ this._wrap_set(v);
1088
+ }
1089
+ _wrap_set(nv) {
1090
+ let whiteSpace = "normal";
1091
+ let wordBreak = "normal";
1092
+ switch (nv) {
1093
+ case true:
1094
+ wordBreak = "break-all";
1095
+ break;
1096
+ case false:
1097
+ whiteSpace = "nowrap";
1098
+ break;
1099
+ }
1100
+ const key = this.key;
1101
+ const $list = this.closest(tableListTagName);
1102
+ $list?.style.setProperty(`--gzm-white-space-${key}`, whiteSpace);
1103
+ $list?.style.setProperty(`--gzm-word-break-${key}`, wordBreak);
1104
+ }
1105
+ _agg_set() {
1106
+ this.aggValue = new M.ObjValue(void 0);
1107
+ __privateGet$1(this, _$p)?.notify({ colAgg: true, $col: this });
1108
+ }
1109
+ _hidden_set() {
1110
+ this.$agg.hidden = this.hidden;
1111
+ __privateGet$1(this, _$p)?.notify({ colHide: true, $col: this });
1112
+ console.debug(`grid column ${this.label} hidden = ${this.hidden}.
1113
+ `);
1114
+ }
1115
+ // #endregion
1116
+ // #region 聚合
1117
+ /**
1118
+ * 这个元素由列生成,但是不会作为列的子元素
1119
+ */
1120
+ get $agg() {
1121
+ if (!__privateGet$1(this, _agg2)) {
1122
+ const $agg = __privateSet$1(this, _agg2, document.createElement(tableAggTagName));
1123
+ $agg.hidden = this.hidden;
1124
+ }
1125
+ return __privateGet$1(this, _agg2);
1126
+ }
1127
+ set aggValue(v) {
1128
+ const $a = this.$agg;
1129
+ const agg = this.agg;
1130
+ if (agg) {
1131
+ $a.setAttribute("title", Reflect.get(this.T, agg));
1132
+ __privateMethod$1(this, _TableCol_instances, setCellData_fn).call(this, $a, v);
1133
+ } else {
1134
+ $a.removeAttribute("title");
1135
+ $a.textContent = "";
1136
+ }
1137
+ }
1138
+ /**
1139
+ * model.aggs 中的属性设置,无需保存在成员中。只是检查按钮是否存在。
1140
+ */
1141
+ set aggs(v) {
1142
+ if (v && v.length) {
1143
+ let $btn = this.$aggBtn;
1144
+ if (!$btn) {
1145
+ $btn = this.$aggBtn = B.createTxtBtn("𝚺");
1146
+ this.$menuBtn.before($btn);
1147
+ }
1148
+ } else {
1149
+ this.$aggBtn?.remove();
1150
+ this.$aggBtn = void 0;
1151
+ }
1152
+ }
1153
+ // #endregion
1154
+ // #region 菜单
1155
+ get $menuBtn() {
1156
+ if (!__privateGet$1(this, _menuBtn)) {
1157
+ __privateSet$1(this, _menuBtn, B.createTxtBtn("⋮"));
1158
+ this.append(__privateGet$1(this, _menuBtn));
1159
+ }
1160
+ return __privateGet$1(this, _menuBtn);
1161
+ }
1162
+ get noMenu() {
1163
+ return this.$menuBtn.hidden;
1164
+ }
1165
+ set noMenu(b) {
1166
+ this.$menuBtn.hidden = b;
1167
+ }
1168
+ // #endregion
1169
+ // #region 鼠标点击
1170
+ handleClick(e) {
1171
+ const $t = e.target;
1172
+ if ($t === this.$aggBtn) {
1173
+ __privateMethod$1(this, _TableCol_instances, showAggMenu_fn).call(this);
1174
+ } else if ($t === this.$menuBtn) {
1175
+ __privateMethod$1(this, _TableCol_instances, showMenu_fn).call(this);
1176
+ } else if (e.target === this.$lbl) {
1177
+ __privateMethod$1(this, _TableCol_instances, sort_fn).call(this);
1178
+ } else if (this.$btns?.includes($t)) {
1179
+ const i = this.$btns.indexOf($t);
1180
+ const func = this.model?.btns?.[i]?.onclick;
1181
+ func?.(this, $t);
1182
+ }
1183
+ }
1184
+ // #endregion
1185
+ get T() {
1186
+ return getTexts(this);
1187
+ }
1188
+ }
1189
+ _init$b = __decoratorStart$b(_a$b);
1190
+ _lbl = /* @__PURE__ */ new WeakMap();
1191
+ _$p = /* @__PURE__ */ new WeakMap();
1192
+ _vm = /* @__PURE__ */ new WeakMap();
1193
+ _TableCol_instances = /* @__PURE__ */ new WeakSet();
1194
+ setCellData_fn = function($cell, dv) {
1195
+ dv = __privateMethod$1(this, _TableCol_instances, getDisplayFromList_fn).call(this, dv) || dv;
1196
+ $cell.textContent = dv.toString(this);
1197
+ };
1198
+ createCellLink_fn = function($cell, dataItem, dataValue) {
1199
+ this.model?.setCellContent?.({
1200
+ $cell,
1201
+ $col: this,
1202
+ dataItem,
1203
+ dataValue
1204
+ });
1205
+ };
1206
+ getDisplayFromList_fn = function(dv) {
1207
+ const ls = this.model?.listSource;
1208
+ return ls?.getListDisplay(dv);
1209
+ };
1210
+ setCellStyle_fn = function($cell) {
1211
+ const key = this.key;
1212
+ $cell.style.textAlign = `var(--gzm-text-align-${key}, start)`;
1213
+ $cell.style.whiteSpace = `var(--gzm-white-space-${key}, normal)`;
1214
+ $cell.style.wordBreak = `var(--gzm-word-break-${key}, normal)`;
1215
+ };
1216
+ _key = /* @__PURE__ */ new WeakMap();
1217
+ _label = /* @__PURE__ */ new WeakMap();
1218
+ _width = /* @__PURE__ */ new WeakMap();
1219
+ _sort = /* @__PURE__ */ new WeakMap();
1220
+ _align = /* @__PURE__ */ new WeakMap();
1221
+ _wrap = /* @__PURE__ */ new WeakMap();
1222
+ _agg = /* @__PURE__ */ new WeakMap();
1223
+ _agg2 = /* @__PURE__ */ new WeakMap();
1224
+ showAggMenu_fn = function() {
1225
+ const mis = __privateMethod$1(this, _TableCol_instances, createAggMenu_fn).call(this);
1226
+ if (!mis || !mis.length) {
1227
+ this.$aggBtn?.showTooltip({
1228
+ render: ($tt) => {
1229
+ $tt.textContent = this.T.noMenuSet;
1230
+ }
1231
+ });
1232
+ return;
1233
+ }
1234
+ const $m = createMenu(...mis);
1235
+ $m.show(this.$aggBtn, B.xy.rightBottom, B.xy.rightTop);
1236
+ };
1237
+ createAggMenu_fn = function() {
1238
+ let aggs = this.model?.aggs;
1239
+ if (!aggs || !aggs.length) {
1240
+ return [];
1241
+ }
1242
+ const ta = this.agg ?? "";
1243
+ if (ta && !aggs.includes(ta)) {
1244
+ aggs = [ta, ...aggs];
1245
+ }
1246
+ aggs = ["", ...aggs];
1247
+ const T = this.T;
1248
+ const group = "agg";
1249
+ const items = aggs.map((a) => {
1250
+ return {
1251
+ tag: "radio",
1252
+ label: a ? Reflect.get(T, a) : T.noAgg,
1253
+ group,
1254
+ checked: ta === a,
1255
+ onclick: () => {
1256
+ this.setModelProperty("agg", a);
1257
+ }
1258
+ };
1259
+ });
1260
+ return items;
1261
+ };
1262
+ _menuBtn = /* @__PURE__ */ new WeakMap();
1263
+ showMenu_fn = function() {
1264
+ const mis = __privateMethod$1(this, _TableCol_instances, createMenu_fn).call(this);
1265
+ if (!mis || !mis.length) {
1266
+ this.$menuBtn.showTooltip({
1267
+ render: ($tt) => {
1268
+ $tt.textContent = this.T.noMenuSet;
1269
+ }
1270
+ });
1271
+ return;
1272
+ }
1273
+ const $m = createMenu(...mis);
1274
+ $m.show(this.$menuBtn, B.xy.rightBottom, B.xy.rightTop);
1275
+ };
1276
+ createMenu_fn = function() {
1277
+ const T = this.T;
1278
+ const hideItem = { tag: "click", label: T.hide, group: "c", onclick: () => this.setModelProperty("hidden", true) };
1279
+ const alignItem = { tag: "menu", label: T.textAlign, subItems: __privateMethod$1(this, _TableCol_instances, createAlignMenu_fn).call(this), group: "m" };
1280
+ const wrapItem = { tag: "menu", label: T.textWrap, subItems: __privateMethod$1(this, _TableCol_instances, createWrapMenu_fn).call(this), group: "m" };
1281
+ const sortItem = { tag: "menu", label: T.sort, subItems: __privateMethod$1(this, _TableCol_instances, createSortMenu_fn).call(this), group: "m" };
1282
+ const autoWidthItem = { tag: "radio", label: T.autoWidth, group: "width", onclick: () => this.setModelProperty("width", "auto") };
1283
+ const minItem = { tag: "radio", label: T.minWidth, group: "width", onclick: () => this.setModelProperty("width", "min-content") };
1284
+ const maxItem = { tag: "radio", label: T.maxWidth, group: "width", onclick: () => this.setModelProperty("width", "max-content") };
1285
+ const pxItem = { tag: "radio", label: T.pxWidth, group: "width", onclick: () => __privateMethod$1(this, _TableCol_instances, showWidthPopup_fn).call(this) };
1286
+ switch (this.width) {
1287
+ case "min-content":
1288
+ minItem.checked = true;
1289
+ break;
1290
+ case "max-content":
1291
+ maxItem.checked = true;
1292
+ break;
1293
+ case "auto":
1294
+ autoWidthItem.checked = true;
1295
+ break;
1296
+ default:
1297
+ {
1298
+ const regex = /^\d+(\.\d+)?px$/;
1299
+ if (regex.test(this.width)) {
1300
+ pxItem.checked = true;
1301
+ }
1302
+ }
1303
+ break;
1304
+ }
1305
+ const menuItems = [hideItem, alignItem, wrapItem, sortItem, autoWidthItem, minItem, maxItem, pxItem];
1306
+ this.model?.beforeMenuShow?.(menuItems, this.model);
1307
+ return menuItems;
1308
+ };
1309
+ createWrapMenu_fn = function() {
1310
+ const T = this.T;
1311
+ const Ts = [
1312
+ T.autoWrap,
1313
+ T.mustWrap,
1314
+ //url,email 这类字符串不换行,强制其换行。
1315
+ T.noWrap
1316
+ //中文文本会自动换行,强制其不换行。
1317
+ ];
1318
+ const tw = this.wrap;
1319
+ const tableColWrap = [void 0, true, false];
1320
+ const items = tableColWrap.map((w, i) => {
1321
+ return {
1322
+ tag: "radio",
1323
+ label: Ts[i],
1324
+ checked: tw === w,
1325
+ onclick: () => {
1326
+ this.setModelProperty("wrap", w);
1327
+ }
1328
+ };
1329
+ });
1330
+ return items;
1331
+ };
1332
+ createSortMenu_fn = function() {
1333
+ const T = this.T;
1334
+ const Ts = [
1335
+ T.noSort,
1336
+ T.asc,
1337
+ T.desc
1338
+ ];
1339
+ const ta = this.sort;
1340
+ const items = tableColSort.map((s, i) => {
1341
+ return {
1342
+ tag: "radio",
1343
+ label: Ts[i],
1344
+ checked: ta === s,
1345
+ onclick: () => {
1346
+ this.setModelProperty("sort", s);
1347
+ }
1348
+ };
1349
+ });
1350
+ return items;
1351
+ };
1352
+ createAlignMenu_fn = function() {
1353
+ const T = this.T;
1354
+ const Ts = [
1355
+ T.startAlign,
1356
+ T.endAlign,
1357
+ T.centerAlign,
1358
+ T.justifyAlign
1359
+ ];
1360
+ const ta = this.align;
1361
+ const items = tableColAlign.map((a, i) => {
1362
+ return {
1363
+ tag: "radio",
1364
+ label: Ts[i],
1365
+ checked: ta === a,
1366
+ onclick: () => {
1367
+ this.setModelProperty("align", a);
1368
+ }
1369
+ };
1370
+ });
1371
+ return items;
1372
+ };
1373
+ showWidthPopup_fn = function() {
1374
+ const $setter = document.createElement(tableColWidthSetterTagName);
1375
+ $setter.show(this);
1376
+ };
1377
+ sort_fn = function() {
1378
+ let s = this.sort;
1379
+ const i = tableColSort.indexOf(s);
1380
+ s = tableColSort[i + 1] ?? tableColSort[0];
1381
+ this.setModelProperty("sort", s);
1382
+ };
1383
+ __decorateElement$b(_init$b, 4, "key", _key_dec, TableCol, _key);
1384
+ __decorateElement$b(_init$b, 4, "label", _label_dec, TableCol, _label);
1385
+ __decorateElement$b(_init$b, 4, "width", _width_dec, TableCol, _width);
1386
+ __decorateElement$b(_init$b, 4, "sort", _sort_dec, TableCol, _sort);
1387
+ __decorateElement$b(_init$b, 4, "align", _align_dec, TableCol, _align);
1388
+ __decorateElement$b(_init$b, 4, "agg", _agg_dec, TableCol, _agg);
1389
+ TableCol = __decorateElement$b(_init$b, 0, "TableCol", _TableCol_decorators, TableCol);
1390
+ __runInitializers$b(_init$b, 1, TableCol);
1391
+ class Snapshot {
1392
+ constructor($t) {
1393
+ this.$t = $t;
1394
+ }
1395
+ $t;
1396
+ // #region 列
1397
+ get $startColumns() {
1398
+ return this.#startCols ??= Array.from(this.$t.$colStartCols.querySelectorAll(tableColTagName));
1399
+ }
1400
+ #startCols;
1401
+ get $startColumnsVisible() {
1402
+ return this.#startColsVisible ??= this.$startColumns.filter(($c) => $c.visible);
1403
+ }
1404
+ #startColsVisible;
1405
+ get $middleColumns() {
1406
+ return this.#middleCols ??= Array.from(this.$t.$colMiddleCols.querySelectorAll(tableColTagName));
1407
+ }
1408
+ #middleCols;
1409
+ get $middleColumnsVisible() {
1410
+ return this.#middleColsVisible ??= this.$middleColumns.filter(($c) => $c.visible);
1411
+ }
1412
+ #middleColsVisible;
1413
+ get $endColumns() {
1414
+ return this.#endCols ??= Array.from(this.$t.$colEndCols.querySelectorAll(tableColTagName));
1415
+ }
1416
+ #endCols;
1417
+ get $endColumnsVisible() {
1418
+ return this.#endColsVisible ??= this.$endColumns.filter(($c) => $c.visible);
1419
+ }
1420
+ #endColsVisible;
1421
+ get $columns() {
1422
+ return this.#cols ??= Array.from(this.$t.querySelectorAll(tableColTagName));
1423
+ }
1424
+ #cols;
1425
+ get $columnsVisible() {
1426
+ return this.#colsVisible ??= this.$columns.filter((c) => c.visible);
1427
+ }
1428
+ #colsVisible;
1429
+ get $columnsNeedAgg() {
1430
+ return this.#colsNeedAgg ??= this.$columnsVisible.filter((c) => c.agg);
1431
+ }
1432
+ #colsNeedAgg;
1433
+ get $columnsWantSort() {
1434
+ return this.#colsWantSort ??= this.$columnsVisible.filter((c) => c.sort);
1435
+ }
1436
+ #colsWantSort;
1437
+ // #endregion
1438
+ // #region 头和尾
1439
+ get $columnHeads() {
1440
+ return this.#colHeads ??= Array.from(this.$t.$colHead.children);
1441
+ }
1442
+ #colHeads;
1443
+ get $columnHeadsVisible() {
1444
+ return this.#colHeadsVisible ??= this.$columnHeads.filter(($c) => !$c.hidden);
1445
+ }
1446
+ #colHeadsVisible;
1447
+ get $columnTails() {
1448
+ return this.#colTails ??= Array.from(this.$t.$colTail.children);
1449
+ }
1450
+ #colTails;
1451
+ get $columnTailsVisible() {
1452
+ return this.#colTailsVisible ??= this.$columnTails.filter(($c) => !$c.hidden);
1453
+ }
1454
+ #colTailsVisible;
1455
+ // #endregion
1456
+ // #region 行
1457
+ get $rows() {
1458
+ return this.#rows ??= Array.from(this.$t.$rows.querySelectorAll(tableRowTagName));
1459
+ }
1460
+ #rows;
1461
+ get $rowsActive() {
1462
+ return this.#rowsActive ??= this.$rows.filter(($row) => $row.active);
1463
+ }
1464
+ #rowsActive;
1465
+ // #endregion
1466
+ // #region 列组
1467
+ /**
1468
+ * 顶层 column 和 group
1469
+ */
1470
+ get $visibleTopColumnsAndGroups() {
1471
+ if (!this.#visibleTopColsAndGroups) {
1472
+ this.#visibleTopColsAndGroups = [];
1473
+ const tmp = this.#visibleTopColsAndGroups;
1474
+ const $colss = [this.$t.$colStartCols, this.$t.$colMiddleCols, this.$t.$colEndCols];
1475
+ for (const $cols of $colss) {
1476
+ for (const $c of $cols.children) {
1477
+ if ($c instanceof TableCol && $c.visible) {
1478
+ tmp.push($c);
1479
+ } else if ($c instanceof TableColGroup && $c.visible) {
1480
+ tmp.push($c);
1481
+ }
1482
+ }
1483
+ }
1484
+ }
1485
+ return this.#visibleTopColsAndGroups;
1486
+ }
1487
+ #visibleTopColsAndGroups;
1488
+ /**
1489
+ * 所有可见列所属的 group 的最大 level
1490
+ */
1491
+ get groupsMaxTier() {
1492
+ if (this.#maxTier === void 0) {
1493
+ const tiers = this.$columnsVisible.map(($c) => $c.parentElement).filter(($c) => $c instanceof TableColGroup).map((c) => c.tier);
1494
+ if (tiers.length === 0) {
1495
+ this.#maxTier = 0;
1496
+ } else {
1497
+ this.#maxTier = Math.max(...tiers);
1498
+ }
1499
+ }
1500
+ return this.#maxTier;
1501
+ }
1502
+ #maxTier;
1503
+ // #endregion
1504
+ }
1505
+ class TableColHeadTailBase extends M.ViewElement {
1506
+ // #region 子元素
1507
+ _createUI() {
1508
+ }
1509
+ get $agg() {
1510
+ return this.#agg ??= document.createElement(tableAggTagName);
1511
+ }
1512
+ #agg;
1513
+ // #endregion
1514
+ // #region 父元素
1515
+ connectedCallback() {
1516
+ if (this.$p === this.parentElement) return;
1517
+ this.#checkUnique();
1518
+ this._createUI();
1519
+ this.$p = this.parentElement;
1520
+ this.$p.notifyConnected(this);
1521
+ }
1522
+ $p;
1523
+ //父元素,在 disconnectedCallback() 中使用
1524
+ disconnectedCallback() {
1525
+ if (!this.parentElement && this.$p) {
1526
+ this._clear();
1527
+ this.$agg.remove();
1528
+ this.$p.notifyDisconnected(this);
1529
+ this.$p = void 0;
1530
+ }
1531
+ }
1532
+ /**
1533
+ * 为了简化一种只允许在 grid 存在一个
1534
+ * 否则 findInRow() 就会非常复杂!
1535
+ */
1536
+ #checkUnique() {
1537
+ const root = this.getRootNode();
1538
+ if (root.querySelectorAll(this.tagName).length > 1) {
1539
+ throw new Error(`grid already has ${this.tagName}`);
1540
+ }
1541
+ }
1542
+ _clear() {
1543
+ }
1544
+ // #endregion
1545
+ // #region 属性
1546
+ get width() {
1547
+ return "36px";
1548
+ }
1549
+ get visible() {
1550
+ const $p = this.$p;
1551
+ if (!$p) return false;
1552
+ return !(this.hidden || $p.hidden);
1553
+ }
1554
+ get dataAware() {
1555
+ return false;
1556
+ }
1557
+ _hidden_set() {
1558
+ this.$agg.hidden = this.hidden;
1559
+ this.$p?.notifyHide(this);
1560
+ }
1561
+ // #endregion
1562
+ // #region 行
1563
+ createInRow() {
1564
+ return document.createElement(this.rowTagName);
1565
+ }
1566
+ /**
1567
+ * dataAware = true 时会被调用,由子类重写。
1568
+ */
1569
+ refresh($row, $headOrTail) {
1570
+ }
1571
+ findInRow($row) {
1572
+ return $row.querySelector(this.rowTagName);
1573
+ }
1574
+ getAllInRow() {
1575
+ const root = this.getRootNode();
1576
+ if (!root) return [];
1577
+ return Array.from(root.querySelectorAll(this.rowTagName));
1578
+ }
1579
+ // #endregion
1580
+ }
1581
+ var __create$a = Object.create;
1582
+ var __defProp$a = Object.defineProperty;
1583
+ var __getOwnPropDesc$a = Object.getOwnPropertyDescriptor;
1584
+ var __knownSymbol$a = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
1585
+ var __typeError$a = (msg) => {
1586
+ throw TypeError(msg);
1587
+ };
1588
+ var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1589
+ var __name$a = (target, value) => __defProp$a(target, "name", { value, configurable: true });
1590
+ var __decoratorStart$a = (base) => [, , , __create$a(base?.[__knownSymbol$a("metadata")] ?? null)];
1591
+ var __decoratorStrings$a = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
1592
+ var __expectFn$a = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$a("Function expected") : fn;
1593
+ var __decoratorContext$a = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$a[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$a("Already initialized") : fns.push(__expectFn$a(fn || null)) });
1594
+ var __decoratorMetadata$a = (array, target) => __defNormalProp$a(target, __knownSymbol$a("metadata"), array[3]);
1595
+ var __runInitializers$a = (array, flags, self, value) => {
1596
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
1597
+ return value;
1598
+ };
1599
+ var __decorateElement$a = (array, flags, name, decorators, target, extra) => {
1600
+ var it, done, ctx, k = flags & 7, p = false;
1601
+ var j = 0;
1602
+ var extraInitializers = array[j] || (array[j] = []);
1603
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc$a(target, name));
1604
+ __name$a(target, name);
1605
+ for (var i = decorators.length - 1; i >= 0; i--) {
1606
+ ctx = __decoratorContext$a(k, name, done = {}, array[3], extraInitializers);
1607
+ it = (0, decorators[i])(target, ctx), done._ = 1;
1608
+ __expectFn$a(it) && (target = it);
1609
+ }
1610
+ return __decoratorMetadata$a(array, target), desc && __defProp$a(target, name, desc), p ? k ^ 4 ? extra : desc : target;
1611
+ };
1612
+ var _TableColCheckbox_decorators, _init$a, _a$a, _TableRowCheckbox_decorators, _init2$2, _b$3;
1613
+ const mutableAttributes$4 = ["hidden"];
1614
+ _TableColCheckbox_decorators = [B.defineElement({ tagName: tableColCheckTagName, mutableAttributes: mutableAttributes$4 })];
1615
+ class TableColCheckbox extends (_a$a = TableColHeadTailBase) {
1616
+ $chk;
1617
+ _createUI() {
1618
+ const root = this.getRootNode();
1619
+ root.addEventListener("change", this.#changeHandler);
1620
+ if (!this.$chk) {
1621
+ const $chk = this.$chk = document.createElement("input");
1622
+ $chk.type = "checkbox";
1623
+ $chk.name = "0";
1624
+ const lbl = document.createElement("label");
1625
+ lbl.title = this.T.toggleCheck;
1626
+ lbl.append($chk);
1627
+ this.append(lbl);
1628
+ }
1629
+ }
1630
+ #changeHandler = (e) => {
1631
+ const $et = e.target;
1632
+ const checked = $et.checked;
1633
+ const $col = $et.closest(tableColCheckTagName);
1634
+ if ($col) {
1635
+ const $tl = $col.closest(tableListTagName);
1636
+ if ($tl) {
1637
+ $tl.createSnapshot().$rows.forEach(($row) => $row.setModelProperty("checked", checked));
1638
+ this.model?.rowsCheckChanged?.(checked);
1639
+ }
1640
+ return;
1641
+ }
1642
+ const $rc = $et.closest(tableRowCheckTagName);
1643
+ if ($rc) {
1644
+ const $row = $rc.closest(tableRowTagName);
1645
+ if ($row) {
1646
+ $row.setModelProperty("checked", checked);
1647
+ this.model?.rowCheckChanged?.($row, checked);
1648
+ }
1649
+ }
1650
+ };
1651
+ _clear() {
1652
+ const root = this.$p?.getRootNode();
1653
+ root?.removeEventListener("change", this.#changeHandler);
1654
+ }
1655
+ get rowTagName() {
1656
+ return tableRowCheckTagName;
1657
+ }
1658
+ get T() {
1659
+ return getTexts(this);
1660
+ }
1661
+ }
1662
+ _init$a = __decoratorStart$a(_a$a);
1663
+ TableColCheckbox = __decorateElement$a(_init$a, 0, "TableColCheckbox", _TableColCheckbox_decorators, TableColCheckbox);
1664
+ __runInitializers$a(_init$a, 1, TableColCheckbox);
1665
+ _TableRowCheckbox_decorators = [B.defineElement({ tagName: tableRowCheckTagName })];
1666
+ class TableRowCheckbox extends (_b$3 = HTMLElement) {
1667
+ constructor() {
1668
+ super();
1669
+ const $chk = this.$chk = document.createElement("input");
1670
+ $chk.type = "checkbox";
1671
+ $chk.name = "1";
1672
+ }
1673
+ $chk;
1674
+ connectedCallback() {
1675
+ this.append(this.$chk);
1676
+ }
1677
+ }
1678
+ _init2$2 = __decoratorStart$a(_b$3);
1679
+ TableRowCheckbox = __decorateElement$a(_init2$2, 0, "TableRowCheckbox", _TableRowCheckbox_decorators, TableRowCheckbox);
1680
+ __runInitializers$a(_init2$2, 1, TableRowCheckbox);
1681
+ var __create$9 = Object.create;
1682
+ var __defProp$9 = Object.defineProperty;
1683
+ var __getOwnPropDesc$9 = Object.getOwnPropertyDescriptor;
1684
+ var __knownSymbol$9 = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
1685
+ var __typeError$9 = (msg) => {
1686
+ throw TypeError(msg);
1687
+ };
1688
+ var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1689
+ var __name$9 = (target, value) => __defProp$9(target, "name", { value, configurable: true });
1690
+ var __decoratorStart$9 = (base) => [, , , __create$9(base?.[__knownSymbol$9("metadata")] ?? null)];
1691
+ var __decoratorStrings$9 = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
1692
+ var __expectFn$9 = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$9("Function expected") : fn;
1693
+ var __decoratorContext$9 = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$9[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$9("Already initialized") : fns.push(__expectFn$9(fn || null)) });
1694
+ var __decoratorMetadata$9 = (array, target) => __defNormalProp$9(target, __knownSymbol$9("metadata"), array[3]);
1695
+ var __runInitializers$9 = (array, flags, self, value) => {
1696
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
1697
+ return value;
1698
+ };
1699
+ var __decorateElement$9 = (array, flags, name, decorators, target, extra) => {
1700
+ var it, done, ctx, k = flags & 7, p = false;
1701
+ var j = 0;
1702
+ var extraInitializers = array[j] || (array[j] = []);
1703
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc$9(target, name));
1704
+ __name$9(target, name);
1705
+ for (var i = decorators.length - 1; i >= 0; i--) {
1706
+ ctx = __decoratorContext$9(k, name, done = {}, array[3], extraInitializers);
1707
+ it = (0, decorators[i])(target, ctx), done._ = 1;
1708
+ __expectFn$9(it) && (target = it);
1709
+ }
1710
+ return __decoratorMetadata$9(array, target), desc && __defProp$9(target, name, desc), p ? k ^ 4 ? extra : desc : target;
1711
+ };
1712
+ var _TableColSerialNo_decorators, _init$9, _a$9;
1713
+ const mutableAttributes$3 = ["hidden"];
1714
+ _TableColSerialNo_decorators = [B.defineElement({ tagName: tableColSerialTagName, mutableAttributes: mutableAttributes$3 })];
1715
+ class TableColSerialNo extends (_a$9 = TableColHeadTailBase) {
1716
+ get rowTagName() {
1717
+ return tableRowSerialTagName;
1718
+ }
1719
+ _createUI() {
1720
+ this.textContent = "#";
1721
+ }
1722
+ get width() {
1723
+ return "minmax(36px, auto)";
1724
+ }
1725
+ }
1726
+ _init$9 = __decoratorStart$9(_a$9);
1727
+ TableColSerialNo = __decorateElement$9(_init$9, 0, "TableColSerialNo", _TableColSerialNo_decorators, TableColSerialNo);
1728
+ __runInitializers$9(_init$9, 1, TableColSerialNo);
1729
+ var __create$8 = Object.create;
1730
+ var __defProp$8 = Object.defineProperty;
1731
+ var __getOwnPropDesc$8 = Object.getOwnPropertyDescriptor;
1732
+ var __knownSymbol$8 = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
1733
+ var __typeError$8 = (msg) => {
1734
+ throw TypeError(msg);
1735
+ };
1736
+ var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1737
+ var __name$8 = (target, value) => __defProp$8(target, "name", { value, configurable: true });
1738
+ var __decoratorStart$8 = (base) => [, , , __create$8(base?.[__knownSymbol$8("metadata")] ?? null)];
1739
+ var __decoratorStrings$8 = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
1740
+ var __expectFn$8 = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$8("Function expected") : fn;
1741
+ var __decoratorContext$8 = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$8[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$8("Already initialized") : fns.push(__expectFn$8(fn || null)) });
1742
+ var __decoratorMetadata$8 = (array, target) => __defNormalProp$8(target, __knownSymbol$8("metadata"), array[3]);
1743
+ var __runInitializers$8 = (array, flags, self, value) => {
1744
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
1745
+ return value;
1746
+ };
1747
+ var __decorateElement$8 = (array, flags, name, decorators, target, extra) => {
1748
+ var it, done, ctx, k = flags & 7, p = false;
1749
+ var j = 0;
1750
+ var extraInitializers = array[j] || (array[j] = []);
1751
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc$8(target, name));
1752
+ __name$8(target, name);
1753
+ for (var i = decorators.length - 1; i >= 0; i--) {
1754
+ ctx = __decoratorContext$8(k, name, done = {}, array[3], extraInitializers);
1755
+ it = (0, decorators[i])(target, ctx), done._ = 1;
1756
+ __expectFn$8(it) && (target = it);
1757
+ }
1758
+ return __decoratorMetadata$8(array, target), desc && __defProp$8(target, name, desc), p ? k ^ 4 ? extra : desc : target;
1759
+ };
1760
+ var _TableColAction_decorators, _init$8, _a$8, _TableRowAction_decorators, _init2$1, _b$2;
1761
+ const mutableAttributes$2 = ["hidden"];
1762
+ _TableColAction_decorators = [B.defineElement({ tagName: tableColActionTagName, mutableAttributes: mutableAttributes$2 })];
1763
+ class TableColAction extends (_a$8 = TableColHeadTailBase) {
1764
+ get rowTagName() {
1765
+ return tableRowActionTagName;
1766
+ }
1767
+ createInRow() {
1768
+ const $ret = super.createInRow();
1769
+ const acts = this.actions;
1770
+ if (acts) {
1771
+ for (const action in acts) {
1772
+ const $btn = B.createTxtBtn(action);
1773
+ $ret.append($btn);
1774
+ $ret.btns[action] = $btn;
1775
+ }
1776
+ }
1777
+ return $ret;
1778
+ }
1779
+ refresh($row, $headOrTail = this.findInRow($row)) {
1780
+ if (!$headOrTail) return;
1781
+ const $inRow = $headOrTail;
1782
+ this.model?.rowActionConfig?.($row, $inRow, $inRow.btns);
1783
+ }
1784
+ // #region 属性
1785
+ get width() {
1786
+ return "auto";
1787
+ }
1788
+ get dataAware() {
1789
+ return true;
1790
+ }
1791
+ actions;
1792
+ get label() {
1793
+ return this.textContent;
1794
+ }
1795
+ set label(v) {
1796
+ this.textContent = v;
1797
+ }
1798
+ // #endregion
1799
+ }
1800
+ _init$8 = __decoratorStart$8(_a$8);
1801
+ TableColAction = __decorateElement$8(_init$8, 0, "TableColAction", _TableColAction_decorators, TableColAction);
1802
+ __runInitializers$8(_init$8, 1, TableColAction);
1803
+ _TableRowAction_decorators = [B.defineElement({ tagName: tableRowActionTagName })];
1804
+ class TableRowAction extends (_b$2 = HTMLElement) {
1805
+ /**
1806
+ * 为了在 GridColAction.refresh() 中触发事件用,从功能上来说没有必要定义这个属性,可以临时生成 btns 对象。
1807
+ * 但是在触发事件时读取 button.innerText,导致在 _createRowsFromDataSource() 中调用时回流。
1808
+ * 因为按钮刚刚生成还未绘制,读取 innerText 就会回流,所以要避免读取 innerText。
1809
+ * 于是就在这里定义了这个属性。
1810
+ */
1811
+ btns = {};
1812
+ handleClick(e, $list) {
1813
+ const $btn = e.target;
1814
+ if (!B.isTxtBtn($btn)) return;
1815
+ const $row = this.closest(tableRowTagName);
1816
+ if (!$row) return;
1817
+ const $ht = $list.querySelector(tableColActionTagName);
1818
+ if (!$ht) return;
1819
+ const acts = $ht.model?.actions;
1820
+ if (!acts) return;
1821
+ const action = $btn.textContent;
1822
+ const func = acts[action];
1823
+ func?.({
1824
+ $row,
1825
+ $rowAction: this,
1826
+ $btn
1827
+ });
1828
+ }
1829
+ }
1830
+ _init2$1 = __decoratorStart$8(_b$2);
1831
+ TableRowAction = __decorateElement$8(_init2$1, 0, "TableRowAction", _TableRowAction_decorators, TableRowAction);
1832
+ __runInitializers$8(_init2$1, 1, TableRowAction);
1833
+ var __create$7 = Object.create;
1834
+ var __defProp$7 = Object.defineProperty;
1835
+ var __getOwnPropDesc$7 = Object.getOwnPropertyDescriptor;
1836
+ var __knownSymbol$7 = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
1837
+ var __typeError$7 = (msg) => {
1838
+ throw TypeError(msg);
1839
+ };
1840
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1841
+ var __name$7 = (target, value) => __defProp$7(target, "name", { value, configurable: true });
1842
+ var __decoratorStart$7 = (base) => [, , , __create$7(base?.[__knownSymbol$7("metadata")] ?? null)];
1843
+ var __decoratorStrings$7 = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
1844
+ var __expectFn$7 = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$7("Function expected") : fn;
1845
+ var __decoratorContext$7 = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$7[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$7("Already initialized") : fns.push(__expectFn$7(fn || null)) });
1846
+ var __decoratorMetadata$7 = (array, target) => __defNormalProp$7(target, __knownSymbol$7("metadata"), array[3]);
1847
+ var __runInitializers$7 = (array, flags, self, value) => {
1848
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
1849
+ return value;
1850
+ };
1851
+ var __decorateElement$7 = (array, flags, name, decorators, target, extra) => {
1852
+ var it, done, ctx, k = flags & 7, p = false;
1853
+ var j = 0;
1854
+ var extraInitializers = array[j] || (array[j] = []);
1855
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc$7(target, name));
1856
+ __name$7(target, name);
1857
+ for (var i = decorators.length - 1; i >= 0; i--) {
1858
+ ctx = __decoratorContext$7(k, name, done = {}, array[3], extraInitializers);
1859
+ it = (0, decorators[i])(target, ctx), done._ = 1;
1860
+ __expectFn$7(it) && (target = it);
1861
+ }
1862
+ return __decoratorMetadata$7(array, target), desc && __defProp$7(target, name, desc), p ? k ^ 4 ? extra : desc : target;
1863
+ };
1864
+ var _TableColMenu_decorators, _init$7, _a$7, _TableRowMenu_decorators, _init2, _b$1;
1865
+ const mutableAttributes$1 = ["hidden"];
1866
+ _TableColMenu_decorators = [B.defineElement({ tagName: tableColMenuTagName, mutableAttributes: mutableAttributes$1 })];
1867
+ class TableColMenu extends (_a$7 = TableColHeadTailBase) {
1868
+ get rowTagName() {
1869
+ return tableRowMenuTagName;
1870
+ }
1871
+ createInRow() {
1872
+ const $btn = B.createTxtBtn("⋮");
1873
+ const $ret = super.createInRow();
1874
+ $ret.append($btn);
1875
+ return $ret;
1876
+ }
1877
+ }
1878
+ _init$7 = __decoratorStart$7(_a$7);
1879
+ TableColMenu = __decorateElement$7(_init$7, 0, "TableColMenu", _TableColMenu_decorators, TableColMenu);
1880
+ __runInitializers$7(_init$7, 1, TableColMenu);
1881
+ _TableRowMenu_decorators = [B.defineElement({ tagName: tableRowMenuTagName })];
1882
+ class TableRowMenu extends (_b$1 = HTMLElement) {
1883
+ handleClick(e, $list) {
1884
+ const $btn = e.target;
1885
+ if (!B.isTxtBtn($btn)) return;
1886
+ const $row = this.closest(tableRowTagName);
1887
+ if (!$row) {
1888
+ return;
1889
+ }
1890
+ const $cm = $list.querySelector(tableColMenuTagName);
1891
+ if (!$cm) {
1892
+ return;
1893
+ }
1894
+ $cm.model?.rowMenuClick?.($row, this, $btn);
1895
+ }
1896
+ }
1897
+ _init2 = __decoratorStart$7(_b$1);
1898
+ TableRowMenu = __decorateElement$7(_init2, 0, "TableRowMenu", _TableRowMenu_decorators, TableRowMenu);
1899
+ __runInitializers$7(_init2, 1, TableRowMenu);
1900
+ var __create$6 = Object.create;
1901
+ var __defProp$6 = Object.defineProperty;
1902
+ var __getOwnPropDesc$6 = Object.getOwnPropertyDescriptor;
1903
+ var __knownSymbol$6 = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
1904
+ var __typeError$6 = (msg) => {
1905
+ throw TypeError(msg);
1906
+ };
1907
+ var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1908
+ var __name$6 = (target, value) => __defProp$6(target, "name", { value, configurable: true });
1909
+ var __decoratorStart$6 = (base) => [, , , __create$6(base?.[__knownSymbol$6("metadata")] ?? null)];
1910
+ var __decoratorStrings$6 = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
1911
+ var __expectFn$6 = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$6("Function expected") : fn;
1912
+ var __decoratorContext$6 = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$6[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$6("Already initialized") : fns.push(__expectFn$6(fn || null)) });
1913
+ var __decoratorMetadata$6 = (array, target) => __defNormalProp$6(target, __knownSymbol$6("metadata"), array[3]);
1914
+ var __runInitializers$6 = (array, flags, self, value) => {
1915
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
1916
+ return value;
1917
+ };
1918
+ var __decorateElement$6 = (array, flags, name, decorators, target, extra) => {
1919
+ var it, done, ctx, k = flags & 7, p = false;
1920
+ var j = 0;
1921
+ var extraInitializers = array[j] || (array[j] = []);
1922
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc$6(target, name));
1923
+ __name$6(target, name);
1924
+ for (var i = decorators.length - 1; i >= 0; i--) {
1925
+ ctx = __decoratorContext$6(k, name, done = {}, array[3], extraInitializers);
1926
+ it = (0, decorators[i])(target, ctx), done._ = 1;
1927
+ __expectFn$6(it) && (target = it);
1928
+ }
1929
+ return __decoratorMetadata$6(array, target), desc && __defProp$6(target, name, desc), p ? k ^ 4 ? extra : desc : target;
1930
+ };
1931
+ var _TableRows_decorators, _init$6, _a$6;
1932
+ _TableRows_decorators = [defineElement({ tagName: tableRowsTagName })];
1933
+ class TableRows extends (_a$6 = M.ViewListElement) {
1934
+ // #region ViewListElement
1935
+ _getViewItemTagName() {
1936
+ return tableRowTagName;
1937
+ }
1938
+ [M.handleModelEvent](source, evt) {
1939
+ if (source === this.modelList) {
1940
+ return new RowsModelListEventHandler(this, source).handle(evt);
1941
+ }
1942
+ return super[M.handleModelEvent](source, evt);
1943
+ }
1944
+ // #endregion
1945
+ /**
1946
+ * 根据数据源排序
1947
+ */
1948
+ sortDataSource(ss) {
1949
+ const ds = this.modelList;
1950
+ if (!ds || ds.length === 0) {
1951
+ return false;
1952
+ }
1953
+ const $cols = ss.$columnsWantSort;
1954
+ if ($cols.length === 0) {
1955
+ return false;
1956
+ }
1957
+ const func = getSortFunc($cols);
1958
+ ds.sort(func);
1959
+ if (M.modelEventPaused in ds) ;
1960
+ else {
1961
+ const ev = new M.ModelListSortEvent(ds);
1962
+ this[M.handleModelEvent](ds, ev);
1963
+ }
1964
+ return true;
1965
+ }
1966
+ }
1967
+ _init$6 = __decoratorStart$6(_a$6);
1968
+ TableRows = __decorateElement$6(_init$6, 0, "TableRows", _TableRows_decorators, TableRows);
1969
+ __runInitializers$6(_init$6, 1, TableRows);
1970
+ class RowsModelListEventHandler extends M.ModelListEventHandler {
1971
+ constructor($rows, source) {
1972
+ super($rows, source);
1973
+ this.$rows = $rows;
1974
+ this.$list = $rows.parentElement;
1975
+ this.#ss = this.$list.createSnapshot();
1976
+ }
1977
+ $rows;
1978
+ $list;
1979
+ #ss;
1980
+ #refreshFunc;
1981
+ refreshRow($row) {
1982
+ const rf = this.#refreshFunc ??= this.$list.getRowRefreshFunc(this.#ss);
1983
+ rf($row, true);
1984
+ }
1985
+ sortItem(item) {
1986
+ const $cols = this.#ss.$columnsWantSort;
1987
+ if ($cols.length === 0) return;
1988
+ const ml = this.$vl.modelList;
1989
+ if ("sortItem" in ml && typeof ml.sortItem === "function") {
1990
+ const func = getSortFunc($cols);
1991
+ ml.sortItem(item, func);
1992
+ }
1993
+ }
1994
+ _createEleItem(item) {
1995
+ const $ret = super._createEleItem(item);
1996
+ this.refreshRow($ret);
1997
+ return $ret;
1998
+ }
1999
+ _refresh($row) {
2000
+ this.refreshRow($row);
2001
+ }
2002
+ _insert(arg) {
2003
+ const ret = super._insert(arg);
2004
+ this.$list.refreshAggs(this.#ss);
2005
+ arg.items.forEach((item) => this.sortItem(item));
2006
+ return ret;
2007
+ }
2008
+ _update(arg) {
2009
+ const ret = super._update(arg);
2010
+ this.$list.refreshAggs(this.#ss);
2011
+ this.sortItem(arg.item);
2012
+ return ret;
2013
+ }
2014
+ _delete(arg) {
2015
+ const ret = super._delete(arg);
2016
+ this.$list.refreshAggs(this.#ss);
2017
+ return ret;
2018
+ }
2019
+ _replace(arg) {
2020
+ const ret = super._replace(arg);
2021
+ this.$list.refreshAggs(this.#ss);
2022
+ this.sortItem(arg.item);
2023
+ return ret;
2024
+ }
2025
+ _reset(arg) {
2026
+ const ret = super._reset(arg);
2027
+ this.$list.refreshAggs(this.#ss);
2028
+ if (this.$list.$table.autoSort) {
2029
+ this.$rows.sortDataSource(this.#ss);
2030
+ }
2031
+ return ret;
2032
+ }
2033
+ _sort(arg) {
2034
+ return super._sort(arg);
2035
+ }
2036
+ }
2037
+ function getSortFunc($cols) {
2038
+ const vms = $cols.flatMap(($c) => $c.valueMember?.member);
2039
+ if (vms.length === 0) {
2040
+ return () => 0;
2041
+ }
2042
+ const ads = $cols.flatMap(($c) => {
2043
+ const ad = $c.isAscSort ? 1 : -1;
2044
+ return Array.from({ length: $c.valueMember?.length ?? 0 }, () => ad);
2045
+ });
2046
+ return (r1, r2) => {
2047
+ for (let i = 0; i < vms.length; i++) {
2048
+ const vm = vms[i];
2049
+ const ad = ads[i];
2050
+ const v1 = Reflect.get(r1.data, vm);
2051
+ const v2 = Reflect.get(r2.data, vm);
2052
+ if (v1 < v2) {
2053
+ return -1 * ad;
2054
+ } else if (v1 > v2) {
2055
+ return 1 * ad;
2056
+ }
2057
+ }
2058
+ return 0;
2059
+ };
2060
+ }
2061
+ var __create$5 = Object.create;
2062
+ var __defProp$5 = Object.defineProperty;
2063
+ var __getOwnPropDesc$5 = Object.getOwnPropertyDescriptor;
2064
+ var __knownSymbol$5 = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
2065
+ var __typeError$5 = (msg) => {
2066
+ throw TypeError(msg);
2067
+ };
2068
+ var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2069
+ var __name$5 = (target, value) => __defProp$5(target, "name", { value, configurable: true });
2070
+ var __decoratorStart$5 = (base) => [, , , __create$5(base?.[__knownSymbol$5("metadata")] ?? null)];
2071
+ var __decoratorStrings$5 = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
2072
+ var __expectFn$5 = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$5("Function expected") : fn;
2073
+ var __decoratorContext$5 = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$5[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$5("Already initialized") : fns.push(__expectFn$5(fn || null)) });
2074
+ var __decoratorMetadata$5 = (array, target) => __defNormalProp$5(target, __knownSymbol$5("metadata"), array[3]);
2075
+ var __runInitializers$5 = (array, flags, self, value) => {
2076
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
2077
+ return value;
2078
+ };
2079
+ var __decorateElement$5 = (array, flags, name, decorators, target, extra) => {
2080
+ var it, done, ctx, k = flags & 7, p = false;
2081
+ var j = 0;
2082
+ var extraInitializers = array[j] || (array[j] = []);
2083
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc$5(target, name));
2084
+ __name$5(target, name);
2085
+ for (var i = decorators.length - 1; i >= 0; i--) {
2086
+ ctx = __decoratorContext$5(k, name, done = {}, array[3], extraInitializers);
2087
+ it = (0, decorators[i])(target, ctx), done._ = 1;
2088
+ __expectFn$5(it) && (target = it);
2089
+ }
2090
+ return __decoratorMetadata$5(array, target), desc && __defProp$5(target, name, desc), p ? k ^ 4 ? extra : desc : target;
2091
+ };
2092
+ var _TableAggs_decorators, _init$5, _a$5;
2093
+ _TableAggs_decorators = [defineElement({ tagName: tableAggsTagName })];
2094
+ class TableAggs extends (_a$5 = HTMLElement) {
2095
+ // #region 子元素
2096
+ constructor() {
2097
+ super();
2098
+ this.$start = document.createElement(tableAggStartTagName);
2099
+ this.$middle = document.createElement(tableAggMiddleTagName);
2100
+ this.$end = document.createElement(tableAggEndTagName);
2101
+ }
2102
+ $start;
2103
+ $middle;
2104
+ $end;
2105
+ get $grid() {
2106
+ const ret = this.parentElement?.parentElement;
2107
+ if (ret?.tagName === tableViewTagName) {
2108
+ return ret;
2109
+ }
2110
+ return null;
2111
+ }
2112
+ connectedCallback() {
2113
+ if (this.childElementCount > 0) return;
2114
+ this.append(this.$start, this.$middle, this.$end);
2115
+ }
2116
+ // #endregion
2117
+ // #region 数据展示
2118
+ refresh(ss) {
2119
+ let $aggs = [...ss.$columnHeads, ...ss.$startColumns].map(($x) => $x.$agg);
2120
+ this.$start.innerHTML = "";
2121
+ this.$start.append(...$aggs);
2122
+ this.$middle.innerHTML = "";
2123
+ this.$middle.append(...ss.$middleColumns.map(($x) => $x.$agg));
2124
+ $aggs = [...ss.$endColumns, ...ss.$columnTails].map(($x) => $x.$agg);
2125
+ this.$end.innerHTML = "";
2126
+ this.$end.append(...$aggs);
2127
+ }
2128
+ // #endregion
2129
+ }
2130
+ _init$5 = __decoratorStart$5(_a$5);
2131
+ TableAggs = __decorateElement$5(_init$5, 0, "TableAggs", _TableAggs_decorators, TableAggs);
2132
+ __runInitializers$5(_init$5, 1, TableAggs);
2133
+ var __create$4 = Object.create;
2134
+ var __defProp$4 = Object.defineProperty;
2135
+ var __getOwnPropDesc$4 = Object.getOwnPropertyDescriptor;
2136
+ var __knownSymbol$4 = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
2137
+ var __typeError$4 = (msg) => {
2138
+ throw TypeError(msg);
2139
+ };
2140
+ var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2141
+ var __name$4 = (target, value) => __defProp$4(target, "name", { value, configurable: true });
2142
+ var __decoratorStart$4 = (base) => [, , , __create$4(base?.[__knownSymbol$4("metadata")] ?? null)];
2143
+ var __decoratorStrings$4 = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
2144
+ var __expectFn$4 = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$4("Function expected") : fn;
2145
+ var __decoratorContext$4 = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$4[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$4("Already initialized") : fns.push(__expectFn$4(fn || null)) });
2146
+ var __decoratorMetadata$4 = (array, target) => __defNormalProp$4(target, __knownSymbol$4("metadata"), array[3]);
2147
+ var __runInitializers$4 = (array, flags, self, value) => {
2148
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
2149
+ return value;
2150
+ };
2151
+ var __decorateElement$4 = (array, flags, name, decorators, target, extra) => {
2152
+ var it, done, ctx, k = flags & 7, p = false;
2153
+ var j = 0;
2154
+ var extraInitializers = array[j] || (array[j] = []);
2155
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc$4(target, name));
2156
+ __name$4(target, name);
2157
+ for (var i = decorators.length - 1; i >= 0; i--) {
2158
+ ctx = __decoratorContext$4(k, name, done = {}, array[3], extraInitializers);
2159
+ it = (0, decorators[i])(target, ctx), done._ = 1;
2160
+ __expectFn$4(it) && (target = it);
2161
+ }
2162
+ return __decoratorMetadata$4(array, target), desc && __defProp$4(target, name, desc), p ? k ^ 4 ? extra : desc : target;
2163
+ };
2164
+ var _TableCols_decorators, _init$4, _a$4;
2165
+ _TableCols_decorators = [B.defineElement({ tagName: tableColsTagName })];
2166
+ class TableCols extends (_a$4 = M.ViewGroupElement) {
2167
+ // #region ViewGroupElement
2168
+ [M.handleModelEvent](source, evt) {
2169
+ const $l = this.closest(tableListTagName);
2170
+ const old = $l.colLayoutPaused;
2171
+ $l.colLayoutPaused = true;
2172
+ const ret = super[M.handleModelEvent](source, evt);
2173
+ $l.colLayoutPaused = old;
2174
+ return ret;
2175
+ }
2176
+ _getViewItemTagName() {
2177
+ return tableColTagName;
2178
+ }
2179
+ groupElementTagName = tableColGroupTagName;
2180
+ /**
2181
+ * 同时还实现了生成 group 元素的功能
2182
+ * 无需重写 _createGroupElement 和 _putGroupElement
2183
+ */
2184
+ _tryGetGroupElement(vm) {
2185
+ const group = this.getGroupValueFromModel(vm);
2186
+ if (!group) return this;
2187
+ const groupChain = this.#getGroupByLabel(group);
2188
+ groupChain.forEach((gc, i) => {
2189
+ let $g = gc.$group;
2190
+ if (!$g) {
2191
+ $g = gc.$group = document.createElement(tableColGroupTagName);
2192
+ $g.label = gc.label;
2193
+ if (i === 0) {
2194
+ this.append($g);
2195
+ } else {
2196
+ groupChain[i - 1].$group.append($g);
2197
+ }
2198
+ }
2199
+ });
2200
+ return groupChain.pop().$group;
2201
+ }
2202
+ #getGroupByLabel(group) {
2203
+ const sa = group.split("/");
2204
+ const ret = sa.map((s) => {
2205
+ return {
2206
+ label: s,
2207
+ $group: void 0
2208
+ };
2209
+ });
2210
+ let $p = this;
2211
+ for (const r of ret) {
2212
+ let found = false;
2213
+ for (const $c of $p.children) {
2214
+ if ($c instanceof TableColGroup) {
2215
+ if ($c.label === r.label) {
2216
+ found = true;
2217
+ $p = r.$group = $c;
2218
+ break;
2219
+ }
2220
+ }
2221
+ }
2222
+ if (!found) {
2223
+ break;
2224
+ }
2225
+ }
2226
+ return ret;
2227
+ }
2228
+ // #endregion
2229
+ // #region ColGroupNoticeReceiver
2230
+ notify(n) {
2231
+ const $list = this.closest(tableListTagName);
2232
+ $list?.notify(n);
2233
+ }
2234
+ // #endregion
2235
+ }
2236
+ _init$4 = __decoratorStart$4(_a$4);
2237
+ TableCols = __decorateElement$4(_init$4, 0, "TableCols", _TableCols_decorators, TableCols);
2238
+ __runInitializers$4(_init$4, 1, TableCols);
2239
+ var __create$3 = Object.create;
2240
+ var __defProp$3 = Object.defineProperty;
2241
+ var __getOwnPropDesc$3 = Object.getOwnPropertyDescriptor;
2242
+ var __knownSymbol$3 = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
2243
+ var __typeError$3 = (msg) => {
2244
+ throw TypeError(msg);
2245
+ };
2246
+ var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2247
+ var __name$3 = (target, value) => __defProp$3(target, "name", { value, configurable: true });
2248
+ var __decoratorStart$3 = (base) => [, , , __create$3(base?.[__knownSymbol$3("metadata")] ?? null)];
2249
+ var __decoratorStrings$3 = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
2250
+ var __expectFn$3 = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$3("Function expected") : fn;
2251
+ var __decoratorContext$3 = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$3[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$3("Already initialized") : fns.push(__expectFn$3(fn || null)) });
2252
+ var __decoratorMetadata$3 = (array, target) => __defNormalProp$3(target, __knownSymbol$3("metadata"), array[3]);
2253
+ var __runInitializers$3 = (array, flags, self, value) => {
2254
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
2255
+ return value;
2256
+ };
2257
+ var __decorateElement$3 = (array, flags, name, decorators, target, extra) => {
2258
+ var it, done, ctx, k = flags & 7, p = false;
2259
+ var j = 0;
2260
+ var extraInitializers = array[j] || (array[j] = []);
2261
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc$3(target, name));
2262
+ __name$3(target, name);
2263
+ for (var i = decorators.length - 1; i >= 0; i--) {
2264
+ ctx = __decoratorContext$3(k, name, done = {}, array[3], extraInitializers);
2265
+ it = (0, decorators[i])(target, ctx), done._ = 1;
2266
+ __expectFn$3(it) && (target = it);
2267
+ }
2268
+ return __decoratorMetadata$3(array, target), desc && __defProp$3(target, name, desc), p ? k ^ 4 ? extra : desc : target;
2269
+ };
2270
+ var _TableColHead_decorators, _init$3, _a$3;
2271
+ _TableColHead_decorators = [B.defineElement({ tagName: tableColHeadTagName })];
2272
+ class TableColHead extends (_a$3 = M.ViewListElement) {
2273
+ // #region ViewListElement
2274
+ [M.handleModelEvent](source, evt) {
2275
+ const $l = this.closest(tableListTagName);
2276
+ const old = $l.colLayoutPaused;
2277
+ $l.colLayoutPaused = true;
2278
+ const ret = super[M.handleModelEvent](source, evt);
2279
+ $l.colLayoutPaused = old;
2280
+ return ret;
2281
+ }
2282
+ _getViewItemTagName(options) {
2283
+ return options.tagName;
2284
+ }
2285
+ // #endregion
2286
+ get $list() {
2287
+ return this.closest(tableListTagName);
2288
+ }
2289
+ // #region TableHeadTailBridge
2290
+ notifyHide($child) {
2291
+ this.$list?.notify({ headHide: true, $head: $child });
2292
+ }
2293
+ notifyConnected($child) {
2294
+ this.$list?.notify({ headAdd: true, $head: $child });
2295
+ }
2296
+ notifyDisconnected($child) {
2297
+ this.$list?.notify({ headDel: true, $head: $child });
2298
+ }
2299
+ // #endregion
2300
+ }
2301
+ _init$3 = __decoratorStart$3(_a$3);
2302
+ TableColHead = __decorateElement$3(_init$3, 0, "TableColHead", _TableColHead_decorators, TableColHead);
2303
+ __runInitializers$3(_init$3, 1, TableColHead);
2304
+ var __create$2 = Object.create;
2305
+ var __defProp$2 = Object.defineProperty;
2306
+ var __getOwnPropDesc$2 = Object.getOwnPropertyDescriptor;
2307
+ var __knownSymbol$2 = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
2308
+ var __typeError$2 = (msg) => {
2309
+ throw TypeError(msg);
2310
+ };
2311
+ var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2312
+ var __name$2 = (target, value) => __defProp$2(target, "name", { value, configurable: true });
2313
+ var __decoratorStart$2 = (base) => [, , , __create$2(base?.[__knownSymbol$2("metadata")] ?? null)];
2314
+ var __decoratorStrings$2 = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
2315
+ var __expectFn$2 = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$2("Function expected") : fn;
2316
+ var __decoratorContext$2 = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$2[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$2("Already initialized") : fns.push(__expectFn$2(fn || null)) });
2317
+ var __decoratorMetadata$2 = (array, target) => __defNormalProp$2(target, __knownSymbol$2("metadata"), array[3]);
2318
+ var __runInitializers$2 = (array, flags, self, value) => {
2319
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
2320
+ return value;
2321
+ };
2322
+ var __decorateElement$2 = (array, flags, name, decorators, target, extra) => {
2323
+ var it, done, ctx, k = flags & 7, p = false;
2324
+ var j = 0;
2325
+ var extraInitializers = array[j] || (array[j] = []);
2326
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc$2(target, name));
2327
+ __name$2(target, name);
2328
+ for (var i = decorators.length - 1; i >= 0; i--) {
2329
+ ctx = __decoratorContext$2(k, name, done = {}, array[3], extraInitializers);
2330
+ it = (0, decorators[i])(target, ctx), done._ = 1;
2331
+ __expectFn$2(it) && (target = it);
2332
+ }
2333
+ return __decoratorMetadata$2(array, target), desc && __defProp$2(target, name, desc), p ? k ^ 4 ? extra : desc : target;
2334
+ };
2335
+ var _TableColTail_decorators, _init$2, _a$2;
2336
+ _TableColTail_decorators = [B.defineElement({ tagName: tableColTailTagName })];
2337
+ class TableColTail extends (_a$2 = M.ViewListElement) {
2338
+ // #region ViewListElement
2339
+ [M.handleModelEvent](source, evt) {
2340
+ const $l = this.closest(tableListTagName);
2341
+ const old = $l.colLayoutPaused;
2342
+ $l.colLayoutPaused = true;
2343
+ const ret = super[M.handleModelEvent](source, evt);
2344
+ $l.colLayoutPaused = old;
2345
+ return ret;
2346
+ }
2347
+ _getViewItemTagName(options) {
2348
+ return options.tagName;
2349
+ }
2350
+ // #endregion
2351
+ get $list() {
2352
+ return this.closest(tableListTagName);
2353
+ }
2354
+ // #region TableHeadTailBridge
2355
+ notifyHide($child) {
2356
+ this.$list?.notify({ tailHide: true, $tail: $child });
2357
+ }
2358
+ notifyConnected($child) {
2359
+ this.$list?.notify({ tailAdd: true, $tail: $child });
2360
+ }
2361
+ notifyDisconnected($child) {
2362
+ this.$list?.notify({ tailDel: true, $tail: $child });
2363
+ }
2364
+ // #endregion
2365
+ }
2366
+ _init$2 = __decoratorStart$2(_a$2);
2367
+ TableColTail = __decorateElement$2(_init$2, 0, "TableColTail", _TableColTail_decorators, TableColTail);
2368
+ __runInitializers$2(_init$2, 1, TableColTail);
2369
+ var __create$1 = Object.create;
2370
+ var __defProp$1 = Object.defineProperty;
2371
+ var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
2372
+ var __knownSymbol$1 = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
2373
+ var __typeError$1 = (msg) => {
2374
+ throw TypeError(msg);
2375
+ };
2376
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2377
+ var __name$1 = (target, value) => __defProp$1(target, "name", { value, configurable: true });
2378
+ var __decoratorStart$1 = (base) => [, , , __create$1(base?.[__knownSymbol$1("metadata")] ?? null)];
2379
+ var __decoratorStrings$1 = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
2380
+ var __expectFn$1 = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$1("Function expected") : fn;
2381
+ var __decoratorContext$1 = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$1[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$1("Already initialized") : fns.push(__expectFn$1(fn || null)) });
2382
+ var __decoratorMetadata$1 = (array, target) => __defNormalProp$1(target, __knownSymbol$1("metadata"), array[3]);
2383
+ var __runInitializers$1 = (array, flags, self, value) => {
2384
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
2385
+ return value;
2386
+ };
2387
+ var __decorateElement$1 = (array, flags, name, decorators, target, extra) => {
2388
+ var it, done, ctx, k = flags & 7, p = false;
2389
+ var j = 0;
2390
+ var extraInitializers = array[j] || (array[j] = []);
2391
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc$1(target, name));
2392
+ __name$1(target, name);
2393
+ for (var i = decorators.length - 1; i >= 0; i--) {
2394
+ ctx = __decoratorContext$1(k, name, done = {}, array[3], extraInitializers);
2395
+ it = (0, decorators[i])(target, ctx), done._ = 1;
2396
+ __expectFn$1(it) && (target = it);
2397
+ }
2398
+ return __decoratorMetadata$1(array, target), desc && __defProp$1(target, name, desc), p ? k ^ 4 ? extra : desc : target;
2399
+ };
2400
+ var _TableList_decorators, _init$1, _a$1;
2401
+ _TableList_decorators = [B.defineElement({ tagName: tableListTagName })];
2402
+ class TableList extends (_a$1 = HTMLElement) {
2403
+ // #region 布局
2404
+ $colStart = document.createElement(tableColStartTagName);
2405
+ $colMiddle = document.createElement(tableColMiddleTagName);
2406
+ $colEnd = document.createElement(tableColEndTagName);
2407
+ $colHead = document.createElement(tableColHeadTagName);
2408
+ $colTail = document.createElement(tableColTailTagName);
2409
+ $colStartCols = document.createElement(tableColsTagName);
2410
+ $colMiddleCols = document.createElement(tableColsTagName);
2411
+ $colEndCols = document.createElement(tableColsTagName);
2412
+ $rows = document.createElement(tableRowsTagName);
2413
+ $aggs = document.createElement(tableAggsTagName);
2414
+ initLayout() {
2415
+ this.append(this.$colStart, this.$colMiddle, this.$colEnd, this.$rows, this.$aggs);
2416
+ this.$colStart.append(this.$colHead, this.$colStartCols);
2417
+ this.$colMiddle.append(this.$colMiddleCols);
2418
+ this.$colEnd.append(this.$colEndCols, this.$colTail);
2419
+ }
2420
+ // #endregion
2421
+ createSnapshot() {
2422
+ return new Snapshot(this);
2423
+ }
2424
+ getCellsByColKey(colKey) {
2425
+ return Array.from(this.querySelectorAll(`${tableCellTagName}[col-key='${colKey}']`));
2426
+ }
2427
+ // #region 属性
2428
+ get $table() {
2429
+ return this.getRootNode().host;
2430
+ }
2431
+ // #endregion
2432
+ // #region 排序
2433
+ sortRows(ss = this.createSnapshot()) {
2434
+ const $t = this.$table;
2435
+ if ($t.autoSort) {
2436
+ this.$rows.sortDataSource(ss);
2437
+ } else {
2438
+ $t.model?.columnSort?.(ss.$columnsWantSort);
2439
+ }
2440
+ }
2441
+ // #endregion
2442
+ // #region 聚合
2443
+ _calcAgg($col) {
2444
+ const agg = $col.agg;
2445
+ if (agg) {
2446
+ this.showAggs(true);
2447
+ this.#doCalcAgg($col);
2448
+ } else {
2449
+ this.#hideAggsIfNotNeeded();
2450
+ }
2451
+ }
2452
+ showAggs(b) {
2453
+ this.$aggs.hidden = !b;
2454
+ }
2455
+ #hideAggsIfNotNeeded(ss = this.createSnapshot()) {
2456
+ const $cols = ss.$columnsNeedAgg;
2457
+ if ($cols.length === 0 || !this.$rows.childElementCount) {
2458
+ this.showAggs(false);
2459
+ return false;
2460
+ }
2461
+ return $cols;
2462
+ }
2463
+ #doCalcAgg($col) {
2464
+ const $t = this.$table;
2465
+ if ($t.autoAgg) {
2466
+ $col.aggValue = this.#calcAggValueFromDataSource($col);
2467
+ } else {
2468
+ $t.model?.columnAgg?.($col);
2469
+ }
2470
+ }
2471
+ #calcAggValueFromDataSource($col) {
2472
+ const ds = this.$rows.modelList;
2473
+ if (!ds || ds.length === 0) {
2474
+ return new M.ObjValue(0);
2475
+ }
2476
+ const agg = $col.agg;
2477
+ if (agg === "count") {
2478
+ return new M.ObjValue(ds.length);
2479
+ }
2480
+ const func = Reflect.get(this.$table, agg);
2481
+ if (typeof func !== "function") {
2482
+ return new M.ObjValue(void 0);
2483
+ }
2484
+ const vm = $col.valueMember?.member[0];
2485
+ if (!vm) return new M.ObjValue(void 0);
2486
+ const da = ds.map((r) => Reflect.get(r.data, vm));
2487
+ const ret = func.call(this.$table, ...da);
2488
+ return new M.ObjValue(ret);
2489
+ }
2490
+ refreshAggs(ss = this.createSnapshot()) {
2491
+ const $needAgg = this.#hideAggsIfNotNeeded(ss);
2492
+ if (!$needAgg) {
2493
+ return;
2494
+ }
2495
+ this.showAggs(true);
2496
+ $needAgg.forEach(($c) => this.#doCalcAgg($c));
2497
+ }
2498
+ // #endregion
2499
+ // #region 通知
2500
+ #colId = 0;
2501
+ notify(n) {
2502
+ if ("colAdd" in n && n.colAdd) {
2503
+ if (n.$col.key) ;
2504
+ else {
2505
+ n.$col.key = (++this.#colId).toString();
2506
+ }
2507
+ } else if ("colSort" in n && n.colSort) {
2508
+ let doSort = true;
2509
+ if (!this.$table.multiSort && n.$col.sort) {
2510
+ this.createSnapshot().$columnsWantSort.forEach(($c) => {
2511
+ if ($c !== n.$col) {
2512
+ $c.sort = "";
2513
+ doSort = false;
2514
+ }
2515
+ });
2516
+ }
2517
+ if (!doSort) return;
2518
+ console.debug(`grid column ${n.$col.label} sort ${n.$col.sort}`);
2519
+ }
2520
+ this.#columnsMovement.push(n);
2521
+ if (this.colLayoutPaused) return;
2522
+ this.#layoutCols();
2523
+ }
2524
+ refreshAll() {
2525
+ this.#columnsMovement.push({ all: true });
2526
+ if (this.colLayoutPaused) return;
2527
+ this.#layoutCols();
2528
+ }
2529
+ get colLayoutPaused() {
2530
+ return this.#colLayoutPaused;
2531
+ }
2532
+ set colLayoutPaused(b) {
2533
+ b = !!b;
2534
+ if (!b) {
2535
+ this.#layoutCols();
2536
+ }
2537
+ this.#colLayoutPaused = b;
2538
+ }
2539
+ #colLayoutPaused = false;
2540
+ /**
2541
+ * 用来处理 #columnsMovement 中需要单独处理的事件。
2542
+ * 如列的删除,需要删除所有对应的单元格;列的隐藏,需要隐藏所有对应的单元格。
2543
+ * 组的删除和隐藏,因为涉及到多个列,所以不在这里处理。
2544
+ */
2545
+ #beforeLayout(cms) {
2546
+ const ret = {};
2547
+ for (let i = 0; i < cms.length; i++) {
2548
+ const m = cms[i];
2549
+ if (!m) continue;
2550
+ if ("colDel" in m && m.colDel) {
2551
+ this.#delColCells(m.$col);
2552
+ } else if ("colHide" in m && m.colHide) {
2553
+ this.#hiddenColCells(m.$col);
2554
+ } else if ("colRefresh" in m && m.colRefresh) {
2555
+ this.#colRefresh(m.$col);
2556
+ } else if ("colSort" in m && m.colSort) {
2557
+ this.sortRows();
2558
+ } else if ("colAgg" in m && m.colAgg) {
2559
+ this._calcAgg(m.$col);
2560
+ } else if ("headDel" in m && m.headDel) {
2561
+ this.#delHeadCells(m.$head);
2562
+ } else if ("tailDel" in m && m.tailDel) {
2563
+ this.#delTailCells(m.$tail);
2564
+ }
2565
+ Object.assign(ret, m);
2566
+ }
2567
+ return ret;
2568
+ }
2569
+ #afterLayout() {
2570
+ if (this.#columnsMovement.length > 0) {
2571
+ this.#layoutCols();
2572
+ }
2573
+ }
2574
+ /**
2575
+ * 用来记录 colLayoutPaused 期间发生的布局改变事件
2576
+ */
2577
+ #columnsMovement = [];
2578
+ #layoutCols() {
2579
+ const ss = this.createSnapshot();
2580
+ const cms = this.#columnsMovement;
2581
+ this.#columnsMovement = [];
2582
+ const cm = this.#beforeLayout(cms);
2583
+ const col = cm.colAdd || cm.colDel || cm.colHide;
2584
+ const group = cm.groupAdd || cm.groupDel || cm.groupHide;
2585
+ const head = cm.headAdd || cm.headDel || cm.headHide;
2586
+ const tail = cm.tailAdd || cm.tailDel || cm.tailHide;
2587
+ if (cm.all) {
2588
+ this.#refreshColumns();
2589
+ }
2590
+ if (cm.all || col || group || head || tail || cm.colWidth) {
2591
+ this._setColumnsTemplate(ss);
2592
+ }
2593
+ if (cm.all || col || group) {
2594
+ this._layoutColumnGroup(ss);
2595
+ }
2596
+ if (cm.all || cm.colAdd || group || cm.headAdd || cm.tailAdd) {
2597
+ this.$aggs.refresh(ss);
2598
+ }
2599
+ if (cm.all || col || group || head || tail || cm.colWidth) {
2600
+ this.#refreshRows(ss);
2601
+ }
2602
+ this.#afterLayout();
2603
+ }
2604
+ // #endregion
2605
+ // #region 布局变化
2606
+ #hiddenColCells($col) {
2607
+ const hidden = !$col.visible;
2608
+ const $cells = this.getCellsByColKey($col.key);
2609
+ $cells.forEach(($cell) => $cell.hidden = hidden);
2610
+ }
2611
+ #delColCells($col) {
2612
+ const $cells = this.getCellsByColKey($col.key);
2613
+ $cells.forEach(($cell) => $cell.remove());
2614
+ }
2615
+ #colRefresh($col) {
2616
+ const $cells = this.getCellsByColKey($col.key);
2617
+ $cells.forEach(($cell) => $col._setCellData($cell));
2618
+ }
2619
+ #delHeadCells($head) {
2620
+ $head.getAllInRow().forEach(($h) => $h.remove());
2621
+ }
2622
+ #delTailCells($tail) {
2623
+ $tail.getAllInRow().forEach(($t) => $t.remove());
2624
+ }
2625
+ _setColumnsTemplate(ss = this.createSnapshot()) {
2626
+ const $heads = ss.$columnHeadsVisible;
2627
+ let startSpan = $heads.length;
2628
+ const $startCols = ss.$startColumnsVisible;
2629
+ startSpan += $startCols.length;
2630
+ const $middleCols = ss.$middleColumnsVisible;
2631
+ const middleSpan = $middleCols.length;
2632
+ const $endCols = ss.$endColumnsVisible;
2633
+ let endSpan = $endCols.length;
2634
+ const $tails = ss.$columnTailsVisible;
2635
+ endSpan += $tails.length;
2636
+ const str = [...$heads, ...$startCols, ...$middleCols, ...$endCols, ...$tails].map(($c) => $c.width).join(" ");
2637
+ this.style.gridTemplateColumns = str;
2638
+ this.style.setProperty("--grid-start-span", startSpan.toString());
2639
+ this.style.setProperty("--grid-middle-span", middleSpan.toString());
2640
+ this.style.setProperty("--grid-end-span", endSpan.toString());
2641
+ void (startSpan ? this.removeAttribute("no-start") : this.setAttribute("no-start", ""));
2642
+ void (endSpan ? this.removeAttribute("no-end") : this.setAttribute("no-end", ""));
2643
+ console.debug("grid column layout - " + str + " - startSpan = " + startSpan + ", middleSpan = " + middleSpan + ", endSpan = " + endSpan);
2644
+ }
2645
+ _layoutColumnGroup(ss = this.createSnapshot()) {
2646
+ const end = ss.groupsMaxTier + 1 + 1;
2647
+ this.style.setProperty("--grid-col-end", end.toString());
2648
+ ss.$visibleTopColumnsAndGroups.forEach(($cg) => $cg.setRow(1));
2649
+ console.debug("--grid-col-end = " + end);
2650
+ }
2651
+ #refreshRows(ss = this.createSnapshot()) {
2652
+ const begin = (/* @__PURE__ */ new Date()).valueOf();
2653
+ const refresh = this.getRowRefreshFunc(ss);
2654
+ const $rows = ss.$rows;
2655
+ $rows.forEach(($row) => {
2656
+ refresh($row);
2657
+ });
2658
+ const interval = (/* @__PURE__ */ new Date()).valueOf() - begin;
2659
+ console.debug(`grid refresh ${$rows.length} rows for ${interval} ms`);
2660
+ }
2661
+ getRowRefreshFunc(ss = this.createSnapshot()) {
2662
+ return ($row, refreshCellData = false) => {
2663
+ $row.refresh(ss, refreshCellData);
2664
+ };
2665
+ }
2666
+ #refreshColumns() {
2667
+ this.colLayoutPaused = true;
2668
+ this.$colStartCols.modelList = this.$colStartCols.modelList;
2669
+ this.$colMiddleCols.modelList = this.$colMiddleCols.modelList;
2670
+ this.$colEndCols.modelList = this.$colEndCols.modelList;
2671
+ this.colLayoutPaused = false;
2672
+ }
2673
+ // #endregion
2674
+ }
2675
+ _init$1 = __decoratorStart$1(_a$1);
2676
+ TableList = __decorateElement$1(_init$1, 0, "TableList", _TableList_decorators, TableList);
2677
+ __runInitializers$1(_init$1, 1, TableList);
2678
+ var __create = Object.create;
2679
+ var __defProp = Object.defineProperty;
2680
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
2681
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
2682
+ var __typeError = (msg) => {
2683
+ throw TypeError(msg);
2684
+ };
2685
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2686
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
2687
+ var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
2688
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
2689
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
2690
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
2691
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
2692
+ var __runInitializers = (array, flags, self, value) => {
2693
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
2694
+ return value;
2695
+ };
2696
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
2697
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
2698
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
2699
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
2700
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
2701
+ return __privateGet(this, extra);
2702
+ }, set [name](x) {
2703
+ return __privateSet(this, extra, x);
2704
+ } }, name));
2705
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
2706
+ for (var i = decorators.length - 1; i >= 0; i--) {
2707
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
2708
+ if (k) {
2709
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
2710
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
2711
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
2712
+ }
2713
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
2714
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
2715
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
2716
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
2717
+ }
2718
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
2719
+ };
2720
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
2721
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
2722
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
2723
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
2724
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
2725
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
2726
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
2727
+ var _autoAgg_dec, _autoSort_dec, _multiSort_dec, _multiple_dec, _a, _TableView_decorators, _clickHandler, _TableView_instances, switchActiveRow_fn, _ds, _init, _multiple, _multiSort, _autoSort, _autoAgg, num_fn, _b;
2728
+ const mutableAttributes = ["multiple", "auto-sort", "auto-agg"];
2729
+ _TableView_decorators = [B.defineElement({ tagName: tableViewTagName, mutableAttributes })];
2730
+ class TableView extends (_b = M.ViewElement) {
2731
+ constructor() {
2732
+ super();
2733
+ __privateAdd(this, _TableView_instances);
2734
+ __publicField(this, "$list");
2735
+ __privateAdd(this, _clickHandler, (e) => {
2736
+ const $cp = e.composedPath();
2737
+ const $ge = $cp.find(($c) => $c.tagName.startsWith("GZM-TABLE-"));
2738
+ if (!$ge) return;
2739
+ if ($ge instanceof TableCell) {
2740
+ const $row = $ge.closest(tableRowTagName);
2741
+ if ($row) {
2742
+ __privateMethod(this, _TableView_instances, switchActiveRow_fn).call(this, $row);
2743
+ }
2744
+ } else if ($ge instanceof TableRow) {
2745
+ __privateMethod(this, _TableView_instances, switchActiveRow_fn).call(this, $ge);
2746
+ } else {
2747
+ if ("handleClick" in $ge && typeof $ge.handleClick === "function") {
2748
+ $ge.handleClick(e, this.$list);
2749
+ }
2750
+ }
2751
+ });
2752
+ __privateAdd(this, _ds);
2753
+ __privateAdd(this, _multiple, __runInitializers(_init, 8, this, false)), __runInitializers(_init, 11, this);
2754
+ __privateAdd(this, _multiSort, __runInitializers(_init, 12, this, false)), __runInitializers(_init, 15, this);
2755
+ __privateAdd(this, _autoSort, __runInitializers(_init, 16, this, false)), __runInitializers(_init, 19, this);
2756
+ __privateAdd(this, _autoAgg, __runInitializers(_init, 20, this, false)), __runInitializers(_init, 23, this);
2757
+ __publicField(this, "T", B.createText(texts, B.globalTexts).bindHtmlElement(this));
2758
+ const $l = this.$list = document.createElement(tableListTagName);
2759
+ $l.initLayout();
2760
+ $l.onclick = __privateGet(this, _clickHandler);
2761
+ const $section = document.createElement("section");
2762
+ $section.append($l, document.createElement("div"));
2763
+ const $root = this.attachShadow({ mode: "open" });
2764
+ $root.adoptedStyleSheets = [B.baseStyle, B.utilityStyle, styleSheet$1];
2765
+ $root.append($section);
2766
+ }
2767
+ // #endregion
2768
+ // #region models
2769
+ /**
2770
+ * 设置 model 会导致此函数被调用来设置各个属性,所以需要控制 colLayoutPaused;
2771
+ */
2772
+ [(_a = M.handleModelEvent, _multiple_dec = [B.boolAttr], _multiSort_dec = [B.boolAttr], _autoSort_dec = [B.boolAttr], _autoAgg_dec = [B.boolAttr], _a)](source, evt) {
2773
+ if (source === this.dataSource) {
2774
+ return new M.DataListEventHandler(this.dataSource, this.$list.$rows.modelList, "data").handle(evt);
2775
+ }
2776
+ const $l = this.$list;
2777
+ const old = $l.colLayoutPaused;
2778
+ $l.colLayoutPaused = true;
2779
+ const ret = super[M.handleModelEvent](source, evt);
2780
+ $l.colLayoutPaused = old;
2781
+ return ret;
2782
+ }
2783
+ get heads() {
2784
+ return this.$list.$colHead.modelList;
2785
+ }
2786
+ set heads(v) {
2787
+ this.$list.$colHead.modelList = v;
2788
+ }
2789
+ get tails() {
2790
+ return this.$list.$colTail.modelList;
2791
+ }
2792
+ set tails(v) {
2793
+ this.$list.$colTail.modelList = v;
2794
+ }
2795
+ get colsStart() {
2796
+ return this.$list.$colStartCols.modelList;
2797
+ }
2798
+ set colsStart(v) {
2799
+ this.$list.$colStartCols.modelList = v;
2800
+ }
2801
+ get colsMiddle() {
2802
+ return this.$list.$colMiddleCols.modelList;
2803
+ }
2804
+ set colsMiddle(v) {
2805
+ this.$list.$colMiddleCols.modelList = v;
2806
+ }
2807
+ get colsEnd() {
2808
+ return this.$list.$colEndCols.modelList;
2809
+ }
2810
+ set colsEnd(v) {
2811
+ this.$list.$colEndCols.modelList = v;
2812
+ }
2813
+ get dataSource() {
2814
+ return __privateGet(this, _ds);
2815
+ }
2816
+ set dataSource(ds) {
2817
+ const old = __privateGet(this, _ds);
2818
+ if (old) {
2819
+ old[M.offModelEvent]?.(this);
2820
+ }
2821
+ __privateSet(this, _ds, ds);
2822
+ if (ds) {
2823
+ ds[M.onModelEvent]?.(this);
2824
+ const ml = new M.DataListEventHandler(ds, this.$list.$rows.modelList, "data").createModelList();
2825
+ this.$list.$rows.setModelProperty("modelList", M.createViewModel(ml));
2826
+ } else {
2827
+ this.$list.$rows.setModelProperty("modelList", []);
2828
+ }
2829
+ }
2830
+ // #endregion
2831
+ // #region 对外方法
2832
+ /**
2833
+ * @returns 选中的行的数据
2834
+ */
2835
+ getActiveModels() {
2836
+ return this.getActiveRows().map(($row) => $row.model);
2837
+ }
2838
+ getActiveRows() {
2839
+ return this.$list.createSnapshot().$rowsActive;
2840
+ }
2841
+ getCheckedRows() {
2842
+ const $chks = this.$list.querySelectorAll(`${tableRowCheckTagName} input[type="checkbox"]:checked`);
2843
+ const $rows = Array.from($chks).map(($x) => $x.closest(tableRowTagName));
2844
+ return $rows;
2845
+ }
2846
+ getCheckedModels() {
2847
+ return this.getCheckedRows().map(($row) => $row.model);
2848
+ }
2849
+ _multiple_set() {
2850
+ if (this.multiple) return;
2851
+ const $rs = this.$list.createSnapshot().$rowsActive;
2852
+ for (let i = 1; i < $rs.length; i++) {
2853
+ $rs[i]?.setModelProperty("active", false);
2854
+ }
2855
+ }
2856
+ _auto_sort_set() {
2857
+ this.$list.sortRows();
2858
+ }
2859
+ _auto_agg_set() {
2860
+ this.$list.refreshAggs();
2861
+ }
2862
+ // #endregion
2863
+ // #region 默认聚合函数 autoAgg 时调用,60-list #calcAggValueFromDataSource() 中使用
2864
+ count(...args) {
2865
+ return args.length;
2866
+ }
2867
+ sum(...args) {
2868
+ if (args.length === 0) return 0;
2869
+ args = __privateMethod(this, _TableView_instances, num_fn).call(this, ...args);
2870
+ if (args.length === 0) return void 0;
2871
+ return args.reduce((p, c) => p + c, 0);
2872
+ }
2873
+ avg(...args) {
2874
+ if (args.length === 0) return 0;
2875
+ const sum = this.sum(...args);
2876
+ return sum === void 0 ? sum : sum / args.length;
2877
+ }
2878
+ min(...args) {
2879
+ if (args.length === 0) return 0;
2880
+ const nums = __privateMethod(this, _TableView_instances, num_fn).call(this, ...args);
2881
+ if (nums.length === args.length) {
2882
+ return Math.min(...nums);
2883
+ }
2884
+ return args.reduce((min, current) => {
2885
+ try {
2886
+ return compare(current, min) < 0 ? current : min;
2887
+ } catch (e) {
2888
+ console.warn(e, min, current);
2889
+ }
2890
+ return min;
2891
+ }, args[0]);
2892
+ }
2893
+ max(...args) {
2894
+ if (args.length === 0) return 0;
2895
+ const nums = __privateMethod(this, _TableView_instances, num_fn).call(this, ...args);
2896
+ if (nums.length === args.length) {
2897
+ return Math.max(...nums);
2898
+ }
2899
+ return args.reduce((max, current) => {
2900
+ try {
2901
+ return compare(current, max) > 0 ? current : max;
2902
+ } catch (e) {
2903
+ console.warn(e, max, current);
2904
+ }
2905
+ return max;
2906
+ }, args[0]);
2907
+ }
2908
+ }
2909
+ _init = __decoratorStart(_b);
2910
+ _clickHandler = /* @__PURE__ */ new WeakMap();
2911
+ _TableView_instances = /* @__PURE__ */ new WeakSet();
2912
+ switchActiveRow_fn = function($row) {
2913
+ if ($row.active) {
2914
+ $row.setModelProperty("active", false);
2915
+ return;
2916
+ }
2917
+ if (this.multiple) {
2918
+ $row.setModelProperty("active", true);
2919
+ return;
2920
+ }
2921
+ const ss = this.$list.createSnapshot();
2922
+ ss.$rowsActive.forEach(($row2) => $row2.setModelProperty("active", false));
2923
+ $row.setModelProperty("active", true);
2924
+ };
2925
+ _ds = /* @__PURE__ */ new WeakMap();
2926
+ _multiple = /* @__PURE__ */ new WeakMap();
2927
+ _multiSort = /* @__PURE__ */ new WeakMap();
2928
+ _autoSort = /* @__PURE__ */ new WeakMap();
2929
+ _autoAgg = /* @__PURE__ */ new WeakMap();
2930
+ num_fn = function(...args) {
2931
+ args = args.flatMap((n) => n).map((n) => Number(n)).filter((n) => !Number.isNaN(n));
2932
+ return args;
2933
+ };
2934
+ __decorateElement(_init, 4, "multiple", _multiple_dec, TableView, _multiple);
2935
+ __decorateElement(_init, 4, "multiSort", _multiSort_dec, TableView, _multiSort);
2936
+ __decorateElement(_init, 4, "autoSort", _autoSort_dec, TableView, _autoSort);
2937
+ __decorateElement(_init, 4, "autoAgg", _autoAgg_dec, TableView, _autoAgg);
2938
+ TableView = __decorateElement(_init, 0, "TableView", _TableView_decorators, TableView);
2939
+ __runInitializers(_init, 1, TableView);
2940
+ function compare(a, b) {
2941
+ if (a === b) {
2942
+ return 0;
2943
+ }
2944
+ if (Array.isArray(a) && Array.isArray(b)) {
2945
+ const l = Math.max(a.length, b.length);
2946
+ for (let i = 0; i < l; i++) {
2947
+ const ret = compare(a[i], b[i]);
2948
+ if (ret !== 0) {
2949
+ return ret;
2950
+ }
2951
+ }
2952
+ return 0;
2953
+ }
2954
+ return a < b ? -1 : 1;
2955
+ }
2956
+ export {
2957
+ Snapshot,
2958
+ TableCol,
2959
+ TableRow,
2960
+ TableView,
2961
+ sortAsc,
2962
+ sortDesc,
2963
+ tableColActionTagName,
2964
+ tableColCheckTagName,
2965
+ tableColMenuTagName,
2966
+ tableColSerialTagName,
2967
+ tableViewTagName
2968
+ };
2969
+ //# sourceMappingURL=table.es.js.map