@bodil/dom 0.1.7 → 0.1.8

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.
Files changed (64) hide show
  1. package/dist/component.d.ts +165 -0
  2. package/dist/component.js +435 -0
  3. package/dist/component.js.map +1 -0
  4. package/dist/component.test.d.ts +1 -0
  5. package/dist/component.test.js +210 -0
  6. package/dist/component.test.js.map +1 -0
  7. package/dist/css.d.ts +14 -0
  8. package/dist/css.js +63 -0
  9. package/dist/css.js.map +1 -0
  10. package/dist/decorators/attribute.d.ts +48 -0
  11. package/dist/decorators/attribute.js +141 -0
  12. package/dist/decorators/attribute.js.map +1 -0
  13. package/dist/decorators/attribute.test.d.ts +1 -0
  14. package/dist/decorators/attribute.test.js +369 -0
  15. package/dist/decorators/attribute.test.js.map +1 -0
  16. package/dist/decorators/connect.d.ts +9 -0
  17. package/dist/decorators/connect.js +44 -0
  18. package/dist/decorators/connect.js.map +1 -0
  19. package/dist/decorators/connect.test.d.ts +1 -0
  20. package/dist/decorators/connect.test.js +196 -0
  21. package/dist/decorators/connect.test.js.map +1 -0
  22. package/dist/decorators/reactive.d.ts +8 -0
  23. package/dist/decorators/reactive.js +45 -0
  24. package/dist/decorators/reactive.js.map +1 -0
  25. package/dist/decorators/reactive.test.d.ts +1 -0
  26. package/dist/decorators/reactive.test.js +113 -0
  27. package/dist/decorators/reactive.test.js.map +1 -0
  28. package/dist/decorators/require.d.ts +3 -0
  29. package/dist/decorators/require.js +6 -0
  30. package/dist/decorators/require.js.map +1 -0
  31. package/dist/decorators/require.test.d.ts +1 -0
  32. package/dist/decorators/require.test.js +117 -0
  33. package/dist/decorators/require.test.js.map +1 -0
  34. package/dist/decorators/types.d.ts +7 -0
  35. package/dist/decorators/types.js +2 -0
  36. package/dist/decorators/types.js.map +1 -0
  37. package/dist/dom.d.ts +92 -0
  38. package/dist/dom.js +354 -0
  39. package/dist/dom.js.map +1 -0
  40. package/dist/emitter.d.ts +83 -0
  41. package/dist/emitter.js +57 -0
  42. package/dist/emitter.js.map +1 -0
  43. package/dist/event.d.ts +70 -0
  44. package/dist/event.js +14 -0
  45. package/dist/event.js.map +1 -0
  46. package/dist/event.test.d.ts +1 -0
  47. package/dist/event.test.js +20 -0
  48. package/dist/event.test.js.map +1 -0
  49. package/dist/geometry.d.ts +48 -0
  50. package/dist/geometry.js +117 -0
  51. package/dist/geometry.js.map +1 -0
  52. package/dist/index.d.ts +10 -0
  53. package/dist/index.js +11 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/scheduler.d.ts +2 -0
  56. package/dist/scheduler.js +54 -0
  57. package/dist/scheduler.js.map +1 -0
  58. package/dist/slot.d.ts +32 -0
  59. package/dist/slot.js +70 -0
  60. package/dist/slot.js.map +1 -0
  61. package/dist/test-global.d.ts +0 -0
  62. package/dist/test-global.js +5 -0
  63. package/dist/test-global.js.map +1 -0
  64. package/package.json +2 -2
@@ -0,0 +1,210 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import { sleep } from "@bodil/core/async";
36
+ import { html } from "lit";
37
+ import { customElement } from "lit/decorators.js";
38
+ import { createRef, ref } from "lit/directives/ref.js";
39
+ import { expect, expectTypeOf, test } from "vitest";
40
+ import { Component, ComponentUpdateLoopError } from "./component";
41
+ test("Component.query", async () => {
42
+ let QueryTestClass = (() => {
43
+ let _classDecorators = [customElement("query-test-class")];
44
+ let _classDescriptor;
45
+ let _classExtraInitializers = [];
46
+ let _classThis;
47
+ let _classSuper = Component;
48
+ var QueryTestClass = class extends _classSuper {
49
+ static { _classThis = this; }
50
+ constructor() {
51
+ super(...arguments);
52
+ this.div = createRef();
53
+ this.p = createRef();
54
+ }
55
+ static {
56
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
57
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
58
+ QueryTestClass = _classThis = _classDescriptor.value;
59
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
60
+ __runInitializers(_classThis, _classExtraInitializers);
61
+ }
62
+ render() {
63
+ return html `<div ${ref(this.div)} class="welp"></div>
64
+ <p ${ref(this.p)} class="welp"></p>`;
65
+ }
66
+ };
67
+ return QueryTestClass = _classThis;
68
+ })();
69
+ const t = document.createElement("query-test-class");
70
+ document.body.append(t);
71
+ await t.updateComplete;
72
+ expect(t.query("div")).toBe(t.div.value);
73
+ expectTypeOf(t.query("div")).toEqualTypeOf();
74
+ expect(t.query("p")).toBe(t.p.value);
75
+ expectTypeOf(t.query("p")).toEqualTypeOf();
76
+ expect(t.query(".welp")).toBe(t.div.value);
77
+ expectTypeOf(t.query(".welp")).toEqualTypeOf();
78
+ expect(Array.from(t.queryAll("div"))).deep.equal([t.div.value]);
79
+ expectTypeOf(t.queryAll("div")).toEqualTypeOf();
80
+ expect(Array.from(t.queryAll("p"))).deep.equal([t.p.value]);
81
+ expectTypeOf(t.queryAll("p")).toEqualTypeOf();
82
+ expect(Array.from(t.queryAll(".welp"))).deep.equal([t.div.value, t.p.value]);
83
+ expectTypeOf(t.queryAll(".welp")).toEqualTypeOf();
84
+ });
85
+ test("Component.querySlot", async () => {
86
+ let QuerySlotTestClass = (() => {
87
+ let _classDecorators = [customElement("query-slot-test-class")];
88
+ let _classDescriptor;
89
+ let _classExtraInitializers = [];
90
+ let _classThis;
91
+ let _classSuper = Component;
92
+ var QuerySlotTestClass = class extends _classSuper {
93
+ static { _classThis = this; }
94
+ static {
95
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
96
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
97
+ QuerySlotTestClass = _classThis = _classDescriptor.value;
98
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
99
+ __runInitializers(_classThis, _classExtraInitializers);
100
+ }
101
+ render() {
102
+ return html `<slot></slot><slot name="fixes-the-bug"></slot>`;
103
+ }
104
+ };
105
+ return QuerySlotTestClass = _classThis;
106
+ })();
107
+ const t = document.createElement("query-slot-test-class");
108
+ document.body.append(t);
109
+ const e = (cls, slot) => {
110
+ const el = document.createElement("div");
111
+ el.classList.add(cls);
112
+ if (slot !== undefined) {
113
+ el.slot = slot;
114
+ }
115
+ t.append(el);
116
+ return el;
117
+ };
118
+ const joe = e("joe");
119
+ const mike = e("mike");
120
+ const robert = e("robert", "fixes-the-bug");
121
+ await t.updateComplete;
122
+ expect(t.querySlot()).toEqual([joe, mike]);
123
+ expect(t.querySlot({ slot: "fixes-the-bug" })).toEqual([robert]);
124
+ const slot = t.querySlot({ slot: "fixes-the-bug", reactive: true });
125
+ expectTypeOf(slot).toEqualTypeOf();
126
+ expect(slot.get()).toEqual([robert]);
127
+ joe.slot = "fixes-the-bug"; // for argument's sake
128
+ await sleep(1);
129
+ expect(slot.get()).toEqual([joe, robert]);
130
+ expect(t.querySlot()).toEqual([mike]);
131
+ robert.removeAttribute("slot");
132
+ await sleep(1);
133
+ expect(slot.get()).toEqual([joe]);
134
+ expect(t.querySlot()).toEqual([mike, robert]);
135
+ const divsByInstance = t.querySlot({ instanceOf: HTMLDivElement });
136
+ expectTypeOf(divsByInstance).toEqualTypeOf();
137
+ expect(divsByInstance).toEqual([mike, robert]);
138
+ const divsBySelector = t.querySlot({ selector: "div" });
139
+ expectTypeOf(divsBySelector).toEqualTypeOf();
140
+ expect(divsBySelector).toEqual([mike, robert]);
141
+ expect(t.querySlot({ selector: "div.robert" })).toEqual([robert]);
142
+ expectTypeOf(t.querySlot({ nodes: true })).toEqualTypeOf();
143
+ });
144
+ test("Component.querySlot signal in render() triggers update", async () => {
145
+ let QuerySlotSignalTestClass = (() => {
146
+ let _classDecorators = [customElement("query-slot-signal-test-class")];
147
+ let _classDescriptor;
148
+ let _classExtraInitializers = [];
149
+ let _classThis;
150
+ let _classSuper = Component;
151
+ var QuerySlotSignalTestClass = class extends _classSuper {
152
+ static { _classThis = this; }
153
+ static {
154
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
155
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
156
+ QuerySlotSignalTestClass = _classThis = _classDescriptor.value;
157
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
158
+ __runInitializers(_classThis, _classExtraInitializers);
159
+ }
160
+ render() {
161
+ // This query will return empty on the first update, because the
162
+ // slot element hasn't been created yet. We expect render() to be
163
+ // re-run once the slot exists, inside the same update cycle.
164
+ if (this.querySlot({ reactive: true }).get().length === 0) {
165
+ return html `<slot></slot>
166
+ <div class="no-members">no members</div>`;
167
+ }
168
+ return html `<slot></slot>
169
+ <div class="has-members">has members</div>`;
170
+ }
171
+ };
172
+ return QuerySlotSignalTestClass = _classThis;
173
+ })();
174
+ const t = document.createElement("query-slot-signal-test-class");
175
+ document.body.append(t);
176
+ const joe = document.createElement("div");
177
+ joe.classList.add("joe");
178
+ t.append(joe);
179
+ await t.updateComplete;
180
+ expect(t.querySlot({ reactive: true }).get()).deep.equal([joe]);
181
+ expect(t.query("div.has-members")).toBeInstanceOf(HTMLDivElement);
182
+ });
183
+ test("dirty render loop aborts", async () => {
184
+ let DirtyRenderLoopTestClass = (() => {
185
+ let _classDecorators = [customElement("dirty-render-loop-test-class")];
186
+ let _classDescriptor;
187
+ let _classExtraInitializers = [];
188
+ let _classThis;
189
+ let _classSuper = Component;
190
+ var DirtyRenderLoopTestClass = class extends _classSuper {
191
+ static { _classThis = this; }
192
+ static {
193
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
194
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
195
+ DirtyRenderLoopTestClass = _classThis = _classDescriptor.value;
196
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
197
+ __runInitializers(_classThis, _classExtraInitializers);
198
+ }
199
+ render() {
200
+ this.requestUpdate();
201
+ return html `welp!`;
202
+ }
203
+ };
204
+ return DirtyRenderLoopTestClass = _classThis;
205
+ })();
206
+ const t = document.createElement("dirty-render-loop-test-class");
207
+ document.body.append(t);
208
+ await expect(t.updateComplete).rejects.toThrowError(ComponentUpdateLoopError);
209
+ });
210
+ //# sourceMappingURL=component.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.test.js","sourceRoot":"","sources":["../src/component.test.ts"],"names":[],"mappings":"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"}
package/dist/css.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ import { Option } from "@bodil/opt";
2
+ export type Pixels = number;
3
+ /**
4
+ * Get a computed CSS property for an element.
5
+ */
6
+ export declare function getComputedProperty(element: Element, property: string): Option<string>;
7
+ /**
8
+ * Parse a CSS size value with units into pixels.
9
+ */
10
+ export declare function parseSize(value: string): Option<Pixels>;
11
+ /**
12
+ * Parse a CSS time value with units into milliseconds.
13
+ */
14
+ export declare function parseTime(value: string): Option<number>;
package/dist/css.js ADDED
@@ -0,0 +1,63 @@
1
+ import { assert } from "@bodil/core/assert";
2
+ import { None, Option, Some } from "@bodil/opt";
3
+ /**
4
+ * Get a computed CSS property for an element.
5
+ */
6
+ export function getComputedProperty(element, property) {
7
+ return Option.from(window.getComputedStyle(element)?.getPropertyValue(property));
8
+ }
9
+ const NUMBER_MATCHER = /^(?<number>[+-]?\d+(?:[.]\d+)?(?:e\d+)?)(?<unit>[a-zA-Z]+)$/;
10
+ function parseWithUnit(value) {
11
+ const match = NUMBER_MATCHER.exec(value.trim());
12
+ if (match?.groups === undefined) {
13
+ return None;
14
+ }
15
+ assert(match.groups.number !== undefined);
16
+ assert(match.groups.unit !== undefined);
17
+ const number = Number.parseFloat(match.groups.number);
18
+ if (Number.isNaN(number)) {
19
+ return None;
20
+ }
21
+ return Some({ number, unit: match.groups.unit });
22
+ }
23
+ /**
24
+ * Parse a CSS size value with units into pixels.
25
+ */
26
+ export function parseSize(value) {
27
+ return parseWithUnit(value).chain(({ number, unit }) => {
28
+ switch (unit) {
29
+ case "px":
30
+ return Some(number);
31
+ case "cm":
32
+ return Some((number * 96) / 2.54);
33
+ case "mm":
34
+ return Some((number * 96) / 0.254);
35
+ case "Q":
36
+ return Some((number * 96) / 0.0635);
37
+ case "in":
38
+ return Some(number * 96);
39
+ case "pc":
40
+ return Some((number * 96) / 6);
41
+ case "pt":
42
+ return Some((number * 96) / 72);
43
+ default:
44
+ return None;
45
+ }
46
+ });
47
+ }
48
+ /**
49
+ * Parse a CSS time value with units into milliseconds.
50
+ */
51
+ export function parseTime(value) {
52
+ return parseWithUnit(value).chain(({ number, unit }) => {
53
+ switch (unit) {
54
+ case "ms":
55
+ return Some(number);
56
+ case "s":
57
+ return Some(number * 1000);
58
+ default:
59
+ return None;
60
+ }
61
+ });
62
+ }
63
+ //# sourceMappingURL=css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.js","sourceRoot":"","sources":["../src/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAIhD;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,QAAgB;IAClE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,cAAc,GAAG,6DAA6D,CAAC;AAErF,SAAS,aAAa,CAAC,KAAa;IAChC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,KAAK,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACnC,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;QACnD,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,IAAI;gBACL,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,KAAK,IAAI;gBACL,OAAO,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YACtC,KAAK,IAAI;gBACL,OAAO,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;YACvC,KAAK,GAAG;gBACJ,OAAO,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;YACxC,KAAK,IAAI;gBACL,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;YAC7B,KAAK,IAAI;gBACL,OAAO,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,KAAK,IAAI;gBACL,OAAO,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YACpC;gBACI,OAAO,IAAI,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACnC,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;QACnD,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,IAAI;gBACL,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,KAAK,GAAG;gBACJ,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;YAC/B;gBACI,OAAO,IAAI,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { Component } from "../component";
2
+ import type { ClassAccessorDecoratorFunction, ClassGetterDecoratorFunction, ClassGetterDecoratorResult, ClassGetterDecoratorTarget, ClassSetterDecoratorFunction, ClassSetterDecoratorResult, ClassSetterDecoratorTarget } from "./types";
3
+ export declare const attributeConfig: unique symbol;
4
+ export type AttributeType = typeof String | typeof Number | typeof Boolean;
5
+ export type AttributeGetterSetterOptions = {
6
+ type?: AttributeType;
7
+ name?: string;
8
+ };
9
+ export type AttributeOptions = AttributeGetterSetterOptions & {
10
+ reflect?: boolean;
11
+ reactive?: boolean;
12
+ };
13
+ export type AttributeConfig = {
14
+ type: AttributeType;
15
+ property: string;
16
+ name: string;
17
+ reflect: boolean;
18
+ reactive: boolean;
19
+ };
20
+ export declare function toAttribute(value: unknown, type: AttributeType): string | null;
21
+ export declare function fromAttribute(value: string | null, type: typeof Number): number | undefined;
22
+ export declare function fromAttribute(value: string | null, type: typeof Boolean): boolean;
23
+ export declare function fromAttribute(value: string | null, type: typeof String): string | undefined;
24
+ export declare function fromAttribute(value: string | null, type: AttributeType): string | number | boolean | undefined;
25
+ export declare function attributeGetter<C extends Component, T extends number | undefined>(options: AttributeOptions & {
26
+ type: typeof Number;
27
+ }): ClassGetterDecoratorFunction<C, T>;
28
+ export declare function attributeGetter<C extends Component, T extends boolean | undefined>(options: AttributeOptions & {
29
+ type: typeof Boolean;
30
+ }): ClassGetterDecoratorFunction<C, T>;
31
+ export declare function attributeGetter<C extends Component, T extends string | undefined>(options: AttributeOptions): ClassGetterDecoratorFunction<C, T>;
32
+ export declare function attributeGetter<C extends Component, T extends string | undefined>(value: ClassGetterDecoratorTarget<C, T>, context: ClassGetterDecoratorContext<C, T>): ClassGetterDecoratorResult<C, T>;
33
+ export declare function attributeSetter<C extends Component, T extends number | undefined>(options: AttributeOptions & {
34
+ type: typeof Number;
35
+ }): ClassSetterDecoratorFunction<C, T>;
36
+ export declare function attributeSetter<C extends Component, T extends boolean | undefined>(options: AttributeOptions & {
37
+ type: typeof Boolean;
38
+ }): ClassSetterDecoratorFunction<C, T>;
39
+ export declare function attributeSetter<C extends Component, T extends string | undefined>(options: AttributeOptions): ClassSetterDecoratorFunction<C, T>;
40
+ export declare function attributeSetter<C extends Component, T extends string | undefined>(value: ClassSetterDecoratorTarget<C, T>, context: ClassSetterDecoratorContext<C, T>): ClassSetterDecoratorResult<C, T>;
41
+ export declare function attribute<C extends Component, T extends number | undefined>(options: AttributeOptions & {
42
+ type: typeof Number;
43
+ }): ClassAccessorDecoratorFunction<C, T>;
44
+ export declare function attribute<C extends Component, T extends boolean | undefined>(options: AttributeOptions & {
45
+ type: typeof Boolean;
46
+ }): ClassAccessorDecoratorFunction<C, T>;
47
+ export declare function attribute<C extends Component, T extends string | undefined>(options: AttributeOptions): ClassAccessorDecoratorFunction<C, T>;
48
+ export declare function attribute<C extends Component, T extends string | undefined>(value: ClassAccessorDecoratorTarget<C, T>, context: ClassAccessorDecoratorContext<C, T>): ClassAccessorDecoratorResult<C, T>;
@@ -0,0 +1,141 @@
1
+ /* eslint-disable @typescript-eslint/unified-signatures */
2
+ import { isDeepEqual, isNullish, unreachable } from "@bodil/core/assert";
3
+ import { None, Some } from "@bodil/opt";
4
+ import { Signal } from "@bodil/signal";
5
+ import { signalForObject } from "./reactive";
6
+ export const attributeConfig = Symbol("attributeConfig");
7
+ export function toAttribute(value, type) {
8
+ if (isNullish(value)) {
9
+ return null;
10
+ }
11
+ switch (type) {
12
+ case Number:
13
+ return `${value}`;
14
+ case Boolean:
15
+ return value ? "" : null;
16
+ case String:
17
+ return value;
18
+ default:
19
+ unreachable();
20
+ }
21
+ }
22
+ export function fromAttribute(value, type) {
23
+ switch (type) {
24
+ case Number: {
25
+ const num = value === null ? undefined : Number(value);
26
+ if (num !== undefined && Number.isNaN(num)) {
27
+ throw new TypeError(`numeric attribute value ${JSON.stringify(value)} parsed as NaN`);
28
+ }
29
+ return num;
30
+ }
31
+ case Boolean:
32
+ return value !== null;
33
+ case String:
34
+ return value ?? undefined;
35
+ default:
36
+ unreachable();
37
+ }
38
+ }
39
+ function toKebabCase(s) {
40
+ return s.replace(/((?<=[a-z\d])[A-Z]|(?<=[A-Z\d])[A-Z](?=[a-z]))/g, "-$1").toLowerCase();
41
+ }
42
+ export function attributeGetter(valueOrOptions, context) {
43
+ //@ts-ignore
44
+ return attribute(valueOrOptions, context);
45
+ }
46
+ export function attributeSetter(valueOrOptions, context) {
47
+ //@ts-ignore
48
+ return attribute(valueOrOptions, context);
49
+ }
50
+ export function attribute(valueOrOptions, context) {
51
+ if (context !== undefined) {
52
+ //@ts-ignore
53
+ return attribute({})(valueOrOptions, context);
54
+ }
55
+ return (value, context) => {
56
+ if (typeof context.name !== "string") {
57
+ throw new TypeError(`Can't declare a ${typeof context.name} as an attribute (${JSON.stringify(context.name)})`);
58
+ }
59
+ const options = {
60
+ ...{
61
+ type: String,
62
+ property: context.name,
63
+ reactive: context.kind === "accessor",
64
+ reflect: true,
65
+ name: toKebabCase(context.name),
66
+ },
67
+ ...(valueOrOptions ?? {}),
68
+ };
69
+ let attrs = context.metadata[attributeConfig];
70
+ if (attrs === undefined) {
71
+ context.metadata[attributeConfig] = attrs = new Map();
72
+ }
73
+ if (context.kind === "getter" || context.kind === "setter") {
74
+ const oldOpts = attrs.get(options.name);
75
+ if (oldOpts !== undefined && !isDeepEqual(oldOpts, options)) {
76
+ throw new TypeError(`Attribute options for ${JSON.stringify(context.name)} must be identical for getters and setters`);
77
+ }
78
+ }
79
+ attrs.set(options.name, options);
80
+ if (context.kind === "accessor") {
81
+ return accessor(options, context, value);
82
+ }
83
+ // ensure getters/setters aren't configured with reactive or reflect
84
+ if (options.reactive) {
85
+ throw new TypeError(`Getter/setter attributes cannot be declared with reactive: true (on ${JSON.stringify(context.name)})`);
86
+ }
87
+ if (context.kind === "setter") {
88
+ return setter(options, value);
89
+ }
90
+ };
91
+ }
92
+ function syncAttribute(target, options, value, force = false) {
93
+ const key = options.name;
94
+ const attributeValue = toAttribute(value, options.type);
95
+ if (force || attributeValue !== target.getAttribute(key)) {
96
+ target.setAttributeQuietly(key, attributeValue);
97
+ }
98
+ }
99
+ function setter(options, setter) {
100
+ if (options.reflect) {
101
+ return function (value) {
102
+ setter.call(this, value);
103
+ syncAttribute(this, options, value);
104
+ };
105
+ }
106
+ }
107
+ function accessor(options, context, value) {
108
+ if (options.reactive) {
109
+ let initValue = None;
110
+ const getSig = (obj) => signalForObject(obj, context.name, () => Signal(initValue.unwrapExact(), {
111
+ equals: Object.is,
112
+ }));
113
+ return {
114
+ get() {
115
+ return getSig(this).get();
116
+ },
117
+ set(newValue) {
118
+ getSig(this).set(newValue);
119
+ if (options.reflect) {
120
+ syncAttribute(this, options, newValue);
121
+ }
122
+ },
123
+ init(value) {
124
+ initValue = Some(value);
125
+ return value;
126
+ },
127
+ };
128
+ }
129
+ return {
130
+ get() {
131
+ return value.get.call(this);
132
+ },
133
+ set(newValue) {
134
+ value.set.call(this, newValue);
135
+ if (options.reflect) {
136
+ syncAttribute(this, options, newValue);
137
+ }
138
+ },
139
+ };
140
+ }
141
+ //# sourceMappingURL=attribute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute.js","sourceRoot":"","sources":["../../src/decorators/attribute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};