@gzmjs/accordion 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,24 @@
1
+ import { AttributeHandlers } from '@gzmjs/ui-basic';
2
+ import { ViewListModel, ViewListElement } from '@gzmjs/mvvm';
3
+ import * as P from './pane';
4
+ export declare const tagName = "GZM-ACCORDION";
5
+ declare global {
6
+ interface HTMLElementTagNameMap {
7
+ [tagName]: Accordion;
8
+ }
9
+ }
10
+ export interface AccordionOptions extends ViewListModel<P.PaneOptions, P.Pane, Accordion> {
11
+ tagName?: typeof tagName;
12
+ multiple?: boolean;
13
+ }
14
+ declare const mutableAttributes: readonly ["multiple"];
15
+ export declare class Accordion extends ViewListElement<P.PaneOptions, P.Pane, AccordionOptions> implements AttributeHandlers<typeof mutableAttributes[number]> {
16
+ #private;
17
+ constructor();
18
+ readonly shadowRoot: ShadowRoot;
19
+ protected get $activePanes(): P.Pane[];
20
+ protected _getViewItemTagName(): string;
21
+ accessor multiple: boolean;
22
+ _multiple_set(): void;
23
+ }
24
+ export {};
@@ -0,0 +1,40 @@
1
+ import { Icon, AttributeHandlers } from '@gzmjs/ui-basic';
2
+ import { ViewModel, ViewElement } from '@gzmjs/mvvm';
3
+ export interface PaneOptions extends ViewModel<Pane> {
4
+ label: string;
5
+ icon?: string;
6
+ badge?: string;
7
+ active?: boolean;
8
+ render?(this: PaneOptions): HTMLElement;
9
+ deactivated?(this: PaneOptions): void;
10
+ activated?(this: PaneOptions): void;
11
+ }
12
+ export declare const tagName = "GZM-ACCORDION-PANE";
13
+ declare const mutableAttributes: readonly ["icon", "label", "active", "badge"];
14
+ export declare class Pane extends ViewElement<PaneOptions> implements AttributeHandlers<typeof mutableAttributes[number]> {
15
+ #private;
16
+ disconnectedCallback(): void;
17
+ get $pane(): HTMLElement | undefined;
18
+ tryRender(): HTMLElement | undefined;
19
+ setViewProperty(p: string, v: unknown): boolean;
20
+ connectedCallback(): void;
21
+ /**
22
+ * this 之下的两个子元素:header 和 slot。
23
+ */
24
+ protected get $header(): HTMLElement;
25
+ protected get $lbl(): HTMLElement;
26
+ protected $icn?: Icon;
27
+ /**
28
+ * 同一个 accordion 中唯一,用来控制内容的显示。
29
+ */
30
+ readonly key: string;
31
+ accessor icon: string | undefined;
32
+ accessor label: string | undefined;
33
+ accessor badge: string | undefined;
34
+ accessor active: boolean;
35
+ _active_set(): void;
36
+ _label_set(newval: string | null): void;
37
+ _icon_set(newval: string | null): void;
38
+ _badge_set(newval: string | null): void;
39
+ }
40
+ export {};
@@ -0,0 +1,372 @@
1
+ import { defineElement, generateId, iconTagName, badgeTagName, strAttr, boolAttr, createStyleSheet, baseStyle } from "@gzmjs/ui-basic";
2
+ import { ViewElement, ViewListElement } from "@gzmjs/mvvm";
3
+ var __create$1 = Object.create;
4
+ var __defProp$1 = Object.defineProperty;
5
+ var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
6
+ var __knownSymbol$1 = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
7
+ var __typeError$1 = (msg) => {
8
+ throw TypeError(msg);
9
+ };
10
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __name$1 = (target, value) => __defProp$1(target, "name", { value, configurable: true });
12
+ var __decoratorStart$1 = (base) => [, , , __create$1(base?.[__knownSymbol$1("metadata")] ?? null)];
13
+ var __decoratorStrings$1 = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
14
+ var __expectFn$1 = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$1("Function expected") : fn;
15
+ 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)) });
16
+ var __decoratorMetadata$1 = (array, target) => __defNormalProp$1(target, __knownSymbol$1("metadata"), array[3]);
17
+ var __runInitializers$1 = (array, flags, self, value) => {
18
+ 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);
19
+ return value;
20
+ };
21
+ var __decorateElement$1 = (array, flags, name, decorators, target, extra) => {
22
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
23
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings$1[k + 5];
24
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
25
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc$1(k < 4 ? target : { get [name]() {
26
+ return __privateGet$1(this, extra);
27
+ }, set [name](x) {
28
+ return __privateSet$1(this, extra, x);
29
+ } }, name));
30
+ k ? p && k < 4 && __name$1(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name$1(target, name);
31
+ for (var i = decorators.length - 1; i >= 0; i--) {
32
+ ctx = __decoratorContext$1(k, name, done = {}, array[3], extraInitializers);
33
+ if (k) {
34
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn$1(target, x) : (x) => name in x };
35
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet$1 : __privateMethod$1)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
36
+ if (k > 2) access.set = p ? (x, y) => __privateSet$1(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
37
+ }
38
+ 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;
39
+ if (k ^ 4 || it === void 0) __expectFn$1(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
40
+ else if (typeof it !== "object" || it === null) __typeError$1("Object expected");
41
+ else __expectFn$1(fn = it.get) && (desc.get = fn), __expectFn$1(fn = it.set) && (desc.set = fn), __expectFn$1(fn = it.init) && initializers.unshift(fn);
42
+ }
43
+ return k || __decoratorMetadata$1(array, target), desc && __defProp$1(target, name, desc), p ? k ^ 4 ? extra : desc : target;
44
+ };
45
+ var __publicField = (obj, key, value) => __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
46
+ var __accessCheck$1 = (obj, member, msg) => member.has(obj) || __typeError$1("Cannot " + msg);
47
+ var __privateIn$1 = (member, obj) => Object(obj) !== obj ? __typeError$1('Cannot use the "in" operator on this value') : member.has(obj);
48
+ var __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
49
+ var __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
50
+ 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);
51
+ var __privateMethod$1 = (obj, member, method) => (__accessCheck$1(obj, member, "access private method"), method);
52
+ var _active_dec, _badge_dec, _label_dec, _icon_dec, _a$1, _Pane_decorators, _pane, _Pane_instances, setActive_fn, _header, _lbl, _init$1, _icon, _label, _badge, _active;
53
+ const tagName$1 = "GZM-ACCORDION-PANE";
54
+ const mutableAttributes$1 = ["icon", "label", "active", "badge"];
55
+ _Pane_decorators = [defineElement({ tagName: tagName$1, mutableAttributes: mutableAttributes$1 })];
56
+ class Pane extends (_a$1 = ViewElement, _icon_dec = [strAttr], _label_dec = [strAttr], _badge_dec = [strAttr], _active_dec = [boolAttr], _a$1) {
57
+ constructor() {
58
+ super(...arguments);
59
+ __privateAdd$1(this, _Pane_instances);
60
+ __privateAdd$1(this, _pane);
61
+ __privateAdd$1(this, _header);
62
+ __privateAdd$1(this, _lbl);
63
+ __publicField(this, "$icn");
64
+ __publicField(this, "key", generateId());
65
+ __privateAdd$1(this, _icon, __runInitializers$1(_init$1, 8, this)), __runInitializers$1(_init$1, 11, this);
66
+ __privateAdd$1(this, _label, __runInitializers$1(_init$1, 12, this)), __runInitializers$1(_init$1, 15, this);
67
+ __privateAdd$1(this, _badge, __runInitializers$1(_init$1, 16, this)), __runInitializers$1(_init$1, 19, this);
68
+ __privateAdd$1(this, _active, __runInitializers$1(_init$1, 20, this, false)), __runInitializers$1(_init$1, 23, this);
69
+ }
70
+ disconnectedCallback() {
71
+ if (this.parentElement) {
72
+ return;
73
+ }
74
+ this.$pane?.remove();
75
+ }
76
+ get $pane() {
77
+ return __privateGet$1(this, _pane)?.deref();
78
+ }
79
+ tryRender() {
80
+ let $p = this.$pane;
81
+ if ($p) return $p;
82
+ const os = this.model;
83
+ if (!os) return;
84
+ $p = os.render?.();
85
+ if ($p) {
86
+ $p.setAttribute("slot", this.key);
87
+ __privateSet$1(this, _pane, new WeakRef($p));
88
+ return $p;
89
+ }
90
+ }
91
+ setViewProperty(p, v) {
92
+ if (p === "active" && v && !this.active) {
93
+ __privateMethod$1(this, _Pane_instances, setActive_fn).call(this);
94
+ return true;
95
+ }
96
+ return super.setViewProperty(p, v);
97
+ }
98
+ connectedCallback() {
99
+ if (this.model?.active && !this.active) {
100
+ __privateMethod$1(this, _Pane_instances, setActive_fn).call(this);
101
+ }
102
+ }
103
+ /**
104
+ * this 之下的两个子元素:header 和 slot。
105
+ */
106
+ get $header() {
107
+ if (!__privateGet$1(this, _header)) {
108
+ __privateSet$1(this, _header, document.createElement("header"));
109
+ const $s = document.createElement("slot");
110
+ $s.name = this.key;
111
+ this.append(__privateGet$1(this, _header), $s);
112
+ }
113
+ return __privateGet$1(this, _header);
114
+ }
115
+ get $lbl() {
116
+ if (!__privateGet$1(this, _lbl)) {
117
+ __privateSet$1(this, _lbl, document.createElement("strong"));
118
+ this.$header.append(__privateGet$1(this, _lbl));
119
+ }
120
+ return __privateGet$1(this, _lbl);
121
+ }
122
+ _active_set() {
123
+ const options = this.model;
124
+ const $p = this.$pane;
125
+ if (this.active) {
126
+ if ($p) {
127
+ $p.hidden = false;
128
+ }
129
+ options?.activated?.();
130
+ } else {
131
+ if ($p) {
132
+ $p.hidden = true;
133
+ }
134
+ options?.deactivated?.();
135
+ }
136
+ }
137
+ _label_set(newval) {
138
+ this.$lbl.textContent = newval;
139
+ }
140
+ _icon_set(newval) {
141
+ if (newval) {
142
+ if (!this.$icn) {
143
+ const $icn = this.$icn = document.createElement(iconTagName);
144
+ $icn.icon = newval;
145
+ this.$lbl.before($icn);
146
+ } else {
147
+ this.$icn.icon = newval;
148
+ }
149
+ } else {
150
+ if (this.$icn) {
151
+ this.$icn.remove();
152
+ this.$icn = void 0;
153
+ }
154
+ }
155
+ }
156
+ _badge_set(newval) {
157
+ let $b = this.$header.querySelector(badgeTagName);
158
+ if (!newval) {
159
+ $b?.remove();
160
+ return;
161
+ }
162
+ if (!$b) {
163
+ $b = document.createElement(badgeTagName);
164
+ this.$header.append($b);
165
+ }
166
+ $b.badge = newval;
167
+ }
168
+ // #endregion
169
+ }
170
+ _init$1 = __decoratorStart$1(_a$1);
171
+ _pane = /* @__PURE__ */ new WeakMap();
172
+ _Pane_instances = /* @__PURE__ */ new WeakSet();
173
+ setActive_fn = function() {
174
+ if (!this.isConnected) {
175
+ return;
176
+ }
177
+ this.dispatchEvent(new MouseEvent("click", { bubbles: true }));
178
+ };
179
+ _header = /* @__PURE__ */ new WeakMap();
180
+ _lbl = /* @__PURE__ */ new WeakMap();
181
+ _icon = /* @__PURE__ */ new WeakMap();
182
+ _label = /* @__PURE__ */ new WeakMap();
183
+ _badge = /* @__PURE__ */ new WeakMap();
184
+ _active = /* @__PURE__ */ new WeakMap();
185
+ __decorateElement$1(_init$1, 4, "icon", _icon_dec, Pane, _icon);
186
+ __decorateElement$1(_init$1, 4, "label", _label_dec, Pane, _label);
187
+ __decorateElement$1(_init$1, 4, "badge", _badge_dec, Pane, _badge);
188
+ __decorateElement$1(_init$1, 4, "active", _active_dec, Pane, _active);
189
+ Pane = __decorateElement$1(_init$1, 0, "Pane", _Pane_decorators, Pane);
190
+ __runInitializers$1(_init$1, 1, Pane);
191
+ var __create = Object.create;
192
+ var __defProp = Object.defineProperty;
193
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
194
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
195
+ var __typeError = (msg) => {
196
+ throw TypeError(msg);
197
+ };
198
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
199
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
200
+ var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
201
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
202
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
203
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
204
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
205
+ var __runInitializers = (array, flags, self, value) => {
206
+ 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);
207
+ return value;
208
+ };
209
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
210
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
211
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
212
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
213
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
214
+ return __privateGet(this, extra);
215
+ }, set [name](x) {
216
+ return __privateSet(this, extra, x);
217
+ } }, name));
218
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
219
+ for (var i = decorators.length - 1; i >= 0; i--) {
220
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
221
+ if (k) {
222
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
223
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
224
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
225
+ }
226
+ 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;
227
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
228
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
229
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
230
+ }
231
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
232
+ };
233
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
234
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
235
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
236
+ 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);
237
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
238
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
239
+ var _multiple_dec, _a, _Accordion_decorators, _onclick, _Accordion_instances, deactivate_fn, activate_fn, _init, _multiple;
240
+ const styleSheet = createStyleSheet({
241
+ ":host": {
242
+ display: "flex",
243
+ "flex-direction": "column",
244
+ gap: "0.125rem",
245
+ overflow: "hidden"
246
+ },
247
+ //pane
248
+ [tagName$1]: {
249
+ display: "flex",
250
+ "flex-direction": "column",
251
+ "border-radius": "0.5rem",
252
+ border: "var(--gzm-btn-border)"
253
+ },
254
+ [tagName$1 + "[active]"]: {
255
+ flex: "1 1 auto",
256
+ overflow: "hidden"
257
+ },
258
+ [`${tagName$1}:has(header:active), ${tagName$1}[active]`]: {
259
+ border: "var(--gzm-a-btn-border)"
260
+ },
261
+ [`${tagName$1}:has(header:hover)`]: {
262
+ border: "var(--gzm-h-btn-border)"
263
+ },
264
+ //header
265
+ [tagName$1 + " > header"]: {
266
+ display: "flex",
267
+ gap: "0.25rem",
268
+ "align-items": "center",
269
+ color: "var(--gzm-btn-txt-color)",
270
+ background: "var(--gzm-btn-background)",
271
+ cursor: "pointer",
272
+ padding: "0.5rem 1rem",
273
+ width: "100%"
274
+ },
275
+ [`${tagName$1}:not([active]) > header`]: {
276
+ "border-bottom": "1px solid transparent",
277
+ "border-radius": "0.5rem"
278
+ },
279
+ [`${tagName$1} > header:active, ${tagName$1}[active] > header`]: {
280
+ color: "var(--gzm-a-btn-txt-color)",
281
+ background: "var(--gzm-a-btn-background)",
282
+ "border-radius": "0.5rem 0.5rem 0px 0px",
283
+ "border-bottom": "var(--gzm-a-btn-border)"
284
+ },
285
+ [`${tagName$1} > header:hover`]: {
286
+ color: "var(--gzm-h-btn-txt-color)",
287
+ background: "var(--gzm-h-btn-background)"
288
+ },
289
+ [`${tagName$1}[active] > header:hover`]: {
290
+ "border-bottom": "var(--gzm-h-btn-border)"
291
+ },
292
+ //其他
293
+ [tagName$1 + " > slot"]: {
294
+ flex: "1 1 auto"
295
+ },
296
+ [tagName$1 + " > header > strong"]: {
297
+ flex: "1 1 auto"
298
+ },
299
+ //用 ::before 模拟:display: list-item; list-style-type: disclosure-open / disclosure-closed;
300
+ [tagName$1 + " > header::before"]: {
301
+ content: '"▶"',
302
+ display: "inline-block",
303
+ "font-size": "0.75rem"
304
+ },
305
+ [tagName$1 + "[active] > header::before"]: {
306
+ transform: "rotate(90deg)",
307
+ //旋转右箭头变为下箭头
308
+ "transform-origin": "center"
309
+ }
310
+ });
311
+ const tagName = "GZM-ACCORDION";
312
+ const mutableAttributes = ["multiple"];
313
+ _Accordion_decorators = [defineElement({ tagName, mutableAttributes })];
314
+ class Accordion extends (_a = ViewListElement, _multiple_dec = [boolAttr], _a) {
315
+ constructor() {
316
+ super();
317
+ __privateAdd(this, _Accordion_instances);
318
+ __privateAdd(this, _onclick, (e) => {
319
+ const $t = e.target;
320
+ const $p = $t.closest(tagName$1);
321
+ if ($p) {
322
+ void ($p.active ? __privateMethod(this, _Accordion_instances, deactivate_fn).call(this, $p) : __privateMethod(this, _Accordion_instances, activate_fn).call(this, $p));
323
+ }
324
+ });
325
+ __privateAdd(this, _multiple, __runInitializers(_init, 8, this, false)), __runInitializers(_init, 11, this);
326
+ const root = this.attachShadow({ mode: "open" });
327
+ root.adoptedStyleSheets = [baseStyle, styleSheet];
328
+ root.addEventListener("click", __privateGet(this, _onclick));
329
+ }
330
+ get $activePanes() {
331
+ return this.$viewItems.filter(($p) => $p.active);
332
+ }
333
+ _getViewItemTagName() {
334
+ return tagName$1;
335
+ }
336
+ _multiple_set() {
337
+ const m = this.multiple;
338
+ if (m) return;
339
+ const $aps = this.$activePanes;
340
+ if ($aps.length <= 1) return;
341
+ for (let i = 1; i < $aps.length; i++) {
342
+ __privateMethod(this, _Accordion_instances, deactivate_fn).call(this, $aps[i]);
343
+ }
344
+ }
345
+ // #endregion
346
+ }
347
+ _init = __decoratorStart(_a);
348
+ _onclick = /* @__PURE__ */ new WeakMap();
349
+ _Accordion_instances = /* @__PURE__ */ new WeakSet();
350
+ deactivate_fn = function($p) {
351
+ $p.setModelProperty("active", false);
352
+ };
353
+ activate_fn = function($pane) {
354
+ if ($pane.active) return;
355
+ if (!this.multiple) {
356
+ const $aps = this.$activePanes;
357
+ $aps.forEach(($ap) => __privateMethod(this, _Accordion_instances, deactivate_fn).call(this, $ap));
358
+ }
359
+ let $p = $pane.$pane;
360
+ void ($p ?? (($p = $pane.tryRender()) && this.append($p)));
361
+ $pane.setModelProperty("active", true);
362
+ };
363
+ _multiple = /* @__PURE__ */ new WeakMap();
364
+ __decorateElement(_init, 4, "multiple", _multiple_dec, Accordion, _multiple);
365
+ Accordion = __decorateElement(_init, 0, "Accordion", _Accordion_decorators, Accordion);
366
+ __runInitializers(_init, 1, Accordion);
367
+ export {
368
+ Accordion,
369
+ Pane,
370
+ tagName as accordionTagName
371
+ };
372
+ //# sourceMappingURL=accordion.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accordion.es.js","sources":["../src/020-accordion/pane.ts","../src/020-accordion/accordion.ts"],"sourcesContent":["import {badgeTagName, boolAttr, defineElement, type Icon, iconTagName, strAttr, generateId, type AttributeHandlers} from '@gzmjs/ui-basic';\r\nimport {type ViewModel, ViewElement} from '@gzmjs/mvvm';\r\n\r\nexport interface PaneOptions extends ViewModel<Pane> {\r\n //label 必须要有\r\n label: string;\r\n icon?: string;\r\n badge?: string;\r\n active?: boolean;\r\n\r\n render?(this: PaneOptions): HTMLElement;\r\n\r\n deactivated?(this: PaneOptions): void;\r\n activated?(this: PaneOptions): void;\r\n};\r\n\r\nexport const tagName = 'GZM-ACCORDION-PANE';\r\nconst mutableAttributes = ['icon', 'label', 'active', 'badge'] as const;\r\n\r\n@defineElement({tagName, mutableAttributes})\r\nexport class Pane extends ViewElement<PaneOptions> implements AttributeHandlers<typeof mutableAttributes[number]> {\r\n disconnectedCallback(): void {\r\n if (this.parentElement) {\r\n return;//与父元素一起删除,不处理\r\n }\r\n this.$pane?.remove();\r\n }\r\n\r\n public get $pane(): HTMLElement | undefined {\r\n return this.#pane?.deref();\r\n }\r\n #pane?: WeakRef<HTMLElement>;\r\n\r\n public tryRender(): HTMLElement | undefined {\r\n let $p = this.$pane;\r\n if ($p) return $p;//已经渲染过了\r\n \r\n const os = this.model;\r\n if (!os) return;\r\n\r\n $p = os.render?.();\r\n if ($p) {\r\n $p.setAttribute('slot', this.key);\r\n this.#pane = new WeakRef($p);\r\n return $p;\r\n }\r\n }\r\n\r\n public setViewProperty(p: string, v: unknown): boolean {\r\n if (p === 'active' && v && !this.active) {\r\n this.#setActive();\r\n return true;\r\n }\r\n return super.setViewProperty(p, v);\r\n }\r\n #setActive(): void {\r\n if (!this.isConnected) {\r\n return;//还未加入 dom,在 connectedCallback() 中处理。\r\n }\r\n //需要处理 multiple 的情况,所以模拟点击的情况。\r\n this.dispatchEvent(new MouseEvent('click', {bubbles: true}));\r\n }\r\n connectedCallback() {\r\n if (this.model?.active && !this.active) {\r\n this.#setActive();\r\n }\r\n }\r\n\r\n /**\r\n * this 之下的两个子元素:header 和 slot。\r\n */\r\n protected get $header(): HTMLElement {\r\n if (!this.#header) {\r\n this.#header = document.createElement('header');\r\n\r\n const $s = document.createElement('slot');\r\n $s.name = this.key;\r\n this.append(this.#header, $s);\r\n }\r\n return this.#header;\r\n }\r\n #header?: HTMLElement;\r\n\r\n protected get $lbl(): HTMLElement { //显示文本的元素\r\n if (!this.#lbl) {\r\n this.#lbl = document.createElement('strong');\r\n this.$header.append(this.#lbl);\r\n }\r\n return this.#lbl;\r\n }\r\n #lbl?: HTMLElement;\r\n \r\n protected $icn?: Icon; //显示图标的元素\r\n\r\n // #region 属性\r\n /**\r\n * 同一个 accordion 中唯一,用来控制内容的显示。\r\n */\r\n readonly key: string = generateId();\r\n\r\n @strAttr\r\n accessor icon: string | undefined;\r\n \r\n @strAttr\r\n accessor label: string | undefined;\r\n\r\n @strAttr\r\n accessor badge: string | undefined;\r\n\r\n @boolAttr\r\n accessor active: boolean = false;\r\n\r\n _active_set() {\r\n const options = this.model;\r\n const $p = this.$pane;\r\n\r\n if (this.active) {\r\n if ($p) {\r\n $p.hidden = false;\r\n }\r\n options?.activated?.();\r\n }\r\n else {\r\n if ($p) {\r\n $p.hidden = true;\r\n }\r\n options?.deactivated?.();\r\n }\r\n }\r\n _label_set(newval: string | null) {\r\n this.$lbl.textContent = newval;\r\n }\r\n _icon_set(newval: string | null) {\r\n if (newval) {\r\n if (!this.$icn) {\r\n const $icn = this.$icn = document.createElement(iconTagName);\r\n $icn.icon = newval;\r\n this.$lbl.before($icn);\r\n }\r\n else {\r\n this.$icn.icon = newval;\r\n }\r\n }\r\n else {\r\n if (this.$icn) {\r\n this.$icn.remove();\r\n this.$icn = void 0;\r\n }\r\n }\r\n }\r\n _badge_set(newval: string | null) {\r\n let $b = this.$header.querySelector(badgeTagName);\r\n if (!newval) {\r\n $b?.remove();\r\n return;\r\n }\r\n\r\n if (!$b) {\r\n $b = document.createElement(badgeTagName);\r\n this.$header.append($b);\r\n }\r\n $b.badge = newval;\r\n }\r\n // #endregion\r\n}","import {createStyleSheet, baseStyle, boolAttr, defineElement, type AttributeHandlers} from '@gzmjs/ui-basic';\r\nimport {type ViewListModel, ViewListElement} from '@gzmjs/mvvm';\r\nimport * as P from './pane';\r\n\r\nconst styleSheet = createStyleSheet({\r\n ':host': {\r\n display: 'flex',\r\n 'flex-direction': 'column',\r\n gap: '0.125rem',\r\n overflow: 'hidden',\r\n },\r\n\r\n //pane\r\n [P.tagName]: {\r\n display: 'flex',\r\n 'flex-direction': 'column',\r\n 'border-radius': '0.5rem',\r\n border: 'var(--gzm-btn-border)',\r\n },\r\n [P.tagName + '[active]']: {\r\n flex: '1 1 auto',\r\n overflow: 'hidden',\r\n },\r\n [`${P.tagName}:has(header:active), ${P.tagName}[active]`]: {\r\n border: 'var(--gzm-a-btn-border)',\r\n },\r\n [`${P.tagName}:has(header:hover)`]: {\r\n border: 'var(--gzm-h-btn-border)',\r\n },\r\n\r\n //header\r\n [P.tagName + ' > header']: {\r\n display: 'flex',\r\n gap: '0.25rem',\r\n 'align-items': 'center',\r\n color: 'var(--gzm-btn-txt-color)',\r\n background: 'var(--gzm-btn-background)',\r\n cursor: 'pointer',\r\n padding: '0.5rem 1rem',\r\n width: '100%',\r\n },\r\n [`${P.tagName}:not([active]) > header`]: {\r\n 'border-bottom': '1px solid transparent',\r\n 'border-radius': '0.5rem',\r\n },\r\n\r\n [`${P.tagName} > header:active, ${P.tagName}[active] > header`]: {\r\n color: 'var(--gzm-a-btn-txt-color)',\r\n background: 'var(--gzm-a-btn-background)',\r\n 'border-radius': '0.5rem 0.5rem 0px 0px',\r\n 'border-bottom': 'var(--gzm-a-btn-border)',\r\n },\r\n\r\n [`${P.tagName} > header:hover`]: {\r\n color: 'var(--gzm-h-btn-txt-color)',\r\n background: 'var(--gzm-h-btn-background)',\r\n },\r\n [`${P.tagName}[active] > header:hover`]: {\r\n 'border-bottom': 'var(--gzm-h-btn-border)',\r\n },\r\n\r\n //其他\r\n [P.tagName + ' > slot']: {\r\n flex: '1 1 auto',\r\n },\r\n [P.tagName + ' > header > strong']: {\r\n flex: '1 1 auto',\r\n },\r\n \r\n //用 ::before 模拟:display: list-item; list-style-type: disclosure-open / disclosure-closed;\r\n [P.tagName + ' > header::before']: {\r\n content: '\"▶\"',\r\n display: 'inline-block',\r\n 'font-size': '0.75rem',\r\n },\r\n [P.tagName + '[active] > header::before']: {\r\n transform: 'rotate(90deg)', //旋转右箭头变为下箭头\r\n 'transform-origin': 'center',\r\n },\r\n});\r\n\r\nexport const tagName = 'GZM-ACCORDION';\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n [tagName]: Accordion;\r\n }\r\n}\r\n\r\nexport interface AccordionOptions extends ViewListModel<P.PaneOptions, P.Pane, Accordion> {\r\n tagName?: typeof tagName;\r\n multiple?: boolean;\r\n}\r\n\r\nconst mutableAttributes = ['multiple'] as const;\r\n\r\n@defineElement({tagName, mutableAttributes})\r\nexport class Accordion extends ViewListElement<P.PaneOptions, P.Pane, AccordionOptions> implements AttributeHandlers<typeof mutableAttributes[number]> {\r\n constructor() {\r\n super();\r\n const root = this.attachShadow({ mode: 'open' });\r\n root.adoptedStyleSheets = [baseStyle, styleSheet];\r\n root.addEventListener('click', this.#onclick);\r\n }\r\n declare readonly shadowRoot: ShadowRoot;\r\n\r\n protected get $activePanes(): P.Pane[] {\r\n return this.$viewItems.filter($p => $p.active);\r\n }\r\n\r\n #onclick = (e: Event) => {\r\n const $t = e.target as Element;\r\n const $p = $t.closest(P.tagName) as P.Pane;\r\n if ($p) {\r\n void ($p.active ? this.#deactivate($p) : this.#activate($p));\r\n }\r\n }\r\n #deactivate($p: P.Pane): void {\r\n $p.setModelProperty('active', false);\r\n }\r\n #activate($pane: P.Pane) {\r\n if ($pane.active) return;\r\n\r\n //先取消原来的选中\r\n if (!this.multiple) {\r\n const $aps = this.$activePanes;\r\n $aps.forEach($ap => this.#deactivate($ap));\r\n }\r\n \r\n //检查内容是否生成\r\n let $p = $pane.$pane;\r\n void ($p ?? (($p = $pane.tryRender()) && this.append($p)));\r\n $pane.setModelProperty('active', true);\r\n }\r\n\r\n protected _getViewItemTagName(): string {\r\n return P.tagName;\r\n }\r\n\r\n // #region 属性\r\n @boolAttr\r\n accessor multiple: boolean = false;\r\n\r\n _multiple_set(): void {\r\n const m = this.multiple;\r\n if (m) return;//允许多选,不需要处理\r\n\r\n const $aps = this.$activePanes;\r\n if ($aps.length <= 1) return;//没有选中,或者只选中了一个\r\n\r\n //多于一个被选中,取消后面的选中\r\n for (let i = 1; i < $aps.length; i++) {\r\n this.#deactivate($aps[i]!);\r\n }\r\n }\r\n // #endregion\r\n}\r\n"],"names":["_a","_init","tagName","mutableAttributes","__privateAdd","__runInitializers","__privateGet","__privateSet","__privateMethod","__decoratorStart","__decorateElement","P.tagName"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { type PaneOptions, Pane } from './020-accordion/pane';
2
+ export { tagName as accordionTagName, type AccordionOptions, Accordion } from './020-accordion/accordion';
package/dist/vite.svg ADDED
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@gzmjs/accordion",
3
+ "description": "GZMJS UI Accordion Component",
4
+ "version": "0.1.0",
5
+ "module": "dist/accordion.es.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "dev": "vite",
13
+ "build": "tsc && vite build",
14
+ "preview": "vite preview",
15
+ "analyzer": "vite-bundle-visualizer"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^25.1.0",
19
+ "eslint": "^9.39.2",
20
+ "typescript": "~5.9.3",
21
+ "typescript-eslint": "^8.54.0",
22
+ "vite": "^7.2.4",
23
+ "vite-bundle-visualizer": "^1.2.1",
24
+ "vite-plugin-dts": "^4.5.4"
25
+ },
26
+ "dependencies": {
27
+ "@gzmjs/mvvm": "^0.1.0",
28
+ "@gzmjs/ui-basic": "^0.3.0"
29
+ }
30
+ }