@toyz/loom 0.14.0 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/debug/inspect.js.map +1 -1
- package/dist/decorators/symbols.d.ts +3 -3
- package/dist/decorators/symbols.d.ts.map +1 -1
- package/dist/decorators/symbols.js.map +1 -1
- package/dist/element/element.d.ts +4 -0
- package/dist/element/element.d.ts.map +1 -1
- package/dist/element/element.js +6 -6
- package/dist/element/element.js.map +1 -1
- package/dist/element/image.d.ts +12 -0
- package/dist/element/image.d.ts.map +1 -1
- package/dist/element/image.js +80 -8
- package/dist/element/image.js.map +1 -1
- package/dist/element/index.d.ts +1 -1
- package/dist/element/index.d.ts.map +1 -1
- package/dist/element/index.js.map +1 -1
- package/dist/element/slots.d.ts.map +1 -1
- package/dist/element/slots.js +13 -8
- package/dist/element/slots.js.map +1 -1
- package/dist/element/timing.d.ts +26 -0
- package/dist/element/timing.d.ts.map +1 -1
- package/dist/element/timing.js +22 -21
- package/dist/element/timing.js.map +1 -1
- package/dist/event.d.ts +1 -1
- package/dist/event.d.ts.map +1 -1
- package/dist/event.js.map +1 -1
- package/dist/jsx-runtime.d.ts +3 -3
- package/dist/jsx-runtime.d.ts.map +1 -1
- package/dist/jsx-runtime.js +5 -5
- package/dist/jsx-runtime.js.map +1 -1
- package/dist/morph.d.ts +8 -1
- package/dist/morph.d.ts.map +1 -1
- package/dist/morph.js +15 -15
- package/dist/morph.js.map +1 -1
- package/dist/query/decorators.d.ts +1 -1
- package/dist/query/decorators.d.ts.map +1 -1
- package/dist/query/decorators.js +9 -8
- package/dist/query/decorators.js.map +1 -1
- package/dist/render-loop.d.ts +1 -2
- package/dist/render-loop.d.ts.map +1 -1
- package/dist/render-loop.js +19 -15
- package/dist/render-loop.js.map +1 -1
- package/dist/router/decorators.d.ts +1 -1
- package/dist/router/decorators.d.ts.map +1 -1
- package/dist/router/decorators.js +1 -1
- package/dist/router/decorators.js.map +1 -1
- package/dist/router/link.js.map +1 -1
- package/dist/router/outlet.d.ts.map +1 -1
- package/dist/router/outlet.js +5 -4
- package/dist/router/outlet.js.map +1 -1
- package/dist/router/route-lifecycle.d.ts.map +1 -1
- package/dist/router/route-lifecycle.js +10 -8
- package/dist/router/route-lifecycle.js.map +1 -1
- package/dist/router/route.d.ts +1 -1
- package/dist/router/route.d.ts.map +1 -1
- package/dist/router/router.js +6 -6
- package/dist/router/router.js.map +1 -1
- package/dist/store/decorators.d.ts.map +1 -1
- package/dist/store/decorators.js +50 -42
- package/dist/store/decorators.js.map +1 -1
- package/dist/store/readonly.d.ts.map +1 -1
- package/dist/store/readonly.js +3 -2
- package/dist/store/readonly.js.map +1 -1
- package/dist/store/watch.d.ts.map +1 -1
- package/dist/store/watch.js +22 -11
- package/dist/store/watch.js.map +1 -1
- package/dist/trace.js.map +1 -1
- package/dist/transform/transform.d.ts.map +1 -1
- package/dist/transform/transform.js +5 -3
- package/dist/transform/transform.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/debug/inspect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,EAAW;IACjC,IAAI,CAAC,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/debug/inspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,11 +9,11 @@ export declare class LoomSymbol<T = unknown> {
|
|
|
9
9
|
readonly name: string;
|
|
10
10
|
constructor(name: string);
|
|
11
11
|
/** Read metadata from target — typed */
|
|
12
|
-
from(target:
|
|
12
|
+
from(target: object): T | undefined;
|
|
13
13
|
/** Write metadata to target — typed */
|
|
14
|
-
set(target:
|
|
14
|
+
set(target: object, value: T): void;
|
|
15
15
|
/** Check if target has this metadata */
|
|
16
|
-
has(target:
|
|
16
|
+
has(target: object): boolean;
|
|
17
17
|
/** Symbol description */
|
|
18
18
|
get description(): string | undefined;
|
|
19
19
|
toString(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/decorators/symbols.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,qBAAa,UAAU,CAAC,CAAC,GAAG,OAAO;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM;IAKxB,wCAAwC;IACxC,IAAI,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/decorators/symbols.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,qBAAa,UAAU,CAAC,CAAC,GAAG,OAAO;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM;IAKxB,wCAAwC;IACxC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAInC,uCAAuC;IACvC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAInC,wCAAwC;IACxC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI5B,yBAAyB;IACzB,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,QAAQ,IAAI,MAAM;CACnB;AAED,QAAA,MAAM,eAAe,kCAAgC,CAAC;AAEtD,wBAAgB,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAMrE;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,eAAO,MAAM,SAAS,qBAA4B,CAAC;AACnD,eAAO,MAAM,KAAK,qBAAwB,CAAC;AAC3C,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAC9C,eAAO,MAAM,QAAQ,qBAAwB,CAAC;AAC9C,eAAO,MAAM,QAAQ,qBAAuB,CAAC;AAC7C,eAAO,MAAM,cAAc,qBAAiC,CAAC;AAC7D,eAAO,MAAM,aAAa,qBAAwB,CAAC;AACnD,eAAO,MAAM,cAAc,qBAA8B,CAAC;AAC1D,eAAO,MAAM,cAAc,qBAAwB,CAAC;AACpD,eAAO,MAAM,gBAAgB,qBAA0B,CAAC;AACxD,eAAO,MAAM,aAAa,qBAAgC,CAAC;AAC3D,eAAO,MAAM,WAAW,qBAA8B,CAAC;AACvD,eAAO,MAAM,UAAU,qBAA6B,CAAC;AACrD,eAAO,MAAM,WAAW,qBAA8B,CAAC;AACvD,eAAO,MAAM,WAAW,qBAA8B,CAAC;AACvD,eAAO,MAAM,aAAa,qBAAgC,CAAC;AAC3D,eAAO,MAAM,mBAAmB,qBAAsC,CAAC;AACvE,eAAO,MAAM,YAAY,oBAAuC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/decorators/symbols.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,sDAAsD;AACtD,iEAAiE;AACjE,qDAAqD;AAErD;;;;;GAKG;AACH,MAAM,OAAO,UAAU;IACZ,GAAG,CAAS;IACZ,IAAI,CAAS;IAEtB,YAAY,IAAY;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/decorators/symbols.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,10 @@ import { type Constructor, type Handler } from "../bus";
|
|
|
2
2
|
import { type LoomEvent } from "../event";
|
|
3
3
|
import { type CSSValue } from "../css";
|
|
4
4
|
import { type TraceDeps } from "../trace";
|
|
5
|
+
/** Structural type for objects that support Loom's render scheduling */
|
|
6
|
+
export interface Schedulable {
|
|
7
|
+
scheduleUpdate?: () => void;
|
|
8
|
+
}
|
|
5
9
|
export declare abstract class LoomElement extends HTMLElement {
|
|
6
10
|
/** Access the LoomApp instance for inline provider resolution */
|
|
7
11
|
protected get app(): import("..").LoomApp;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../../src/element/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,QAAQ,EAAY,MAAM,QAAQ,CAAC;AAIjD,OAAO,EAAqF,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAE7H,8BAAsB,WAAY,SAAQ,WAAW;IACnD,iEAAiE;IACjE,SAAS,KAAK,GAAG,yBAAkB;IAEnC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAsB;IACtC,qEAAqE;IACrE,WAAW,EAAE,SAAS,GAAG,IAAI,CAAQ;;IAerC,8DAA8D;IAC9D,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IACjC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI;IAQzE;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IAa1C,8DAA8D;IAC9D,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAMtE,yBAAyB;IACzB,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAMnD,sDAAsD;IACtD,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI;IAM9B,uCAAuC;IACvC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,GAAG,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAInE,0CAA0C;IAC1C,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,OAAO,GAAG,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE;IAM/D,iBAAiB,IAAI,IAAI;IAgBzB,oBAAoB,IAAI,IAAI;IAQ5B;;;OAGG;IACH,MAAM,IAAI,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI;IAE9B;;;OAGG;IACH,YAAY,IAAI,IAAI;IAEpB;;;OAGG;IACH,YAAY,IAAI,OAAO;IAMvB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,YAAY,CA4BlB;IAEF,0DAA0D;IAC1D,cAAc,IAAI,IAAI;IAMtB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAiCpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoCnB;;;OAGG;IACH,KAAK,IAAI,IAAI;CAKd"}
|
|
1
|
+
{"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../../src/element/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,QAAQ,EAAY,MAAM,QAAQ,CAAC;AAIjD,OAAO,EAAqF,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAE7H,wEAAwE;AACxE,MAAM,WAAW,WAAW;IAC1B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,8BAAsB,WAAY,SAAQ,WAAW;IACnD,iEAAiE;IACjE,SAAS,KAAK,GAAG,yBAAkB;IAEnC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAsB;IACtC,qEAAqE;IACrE,WAAW,EAAE,SAAS,GAAG,IAAI,CAAQ;;IAerC,8DAA8D;IAC9D,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IACjC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI;IAQzE;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IAa1C,8DAA8D;IAC9D,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAMtE,yBAAyB;IACzB,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAMnD,sDAAsD;IACtD,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI;IAM9B,uCAAuC;IACvC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,GAAG,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAInE,0CAA0C;IAC1C,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,OAAO,GAAG,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE;IAM/D,iBAAiB,IAAI,IAAI;IAgBzB,oBAAoB,IAAI,IAAI;IAQ5B;;;OAGG;IACH,MAAM,IAAI,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI;IAE9B;;;OAGG;IACH,YAAY,IAAI,IAAI;IAEpB;;;OAGG;IACH,YAAY,IAAI,OAAO;IAMvB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,YAAY,CA4BlB;IAEF,0DAA0D;IAC1D,cAAc,IAAI,IAAI;IAMtB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAiCpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoCnB;;;OAGG;IACH,KAAK,IAAI,IAAI;CAKd"}
|
package/dist/element/element.js
CHANGED
|
@@ -69,7 +69,7 @@ export class LoomElement extends HTMLElement {
|
|
|
69
69
|
// ── Lifecycle ──
|
|
70
70
|
connectedCallback() {
|
|
71
71
|
// Run decorator-registered connect hooks (from @mount, @interval, @watch, etc.)
|
|
72
|
-
const hooks =
|
|
72
|
+
const hooks = CONNECT_HOOKS.from(this);
|
|
73
73
|
if (hooks) {
|
|
74
74
|
for (let i = 0; i < hooks.length; i++) {
|
|
75
75
|
const cleanup = hooks[i](this);
|
|
@@ -78,7 +78,7 @@ export class LoomElement extends HTMLElement {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
// Trigger initial render for reactive components
|
|
81
|
-
const hasReactives = (
|
|
81
|
+
const hasReactives = (REACTIVES.from(this.constructor)?.length ?? 0) > 0;
|
|
82
82
|
const overridesUpdate = this.update !== LoomElement.prototype.update;
|
|
83
83
|
if (hasReactives || overridesUpdate)
|
|
84
84
|
this.scheduleUpdate();
|
|
@@ -120,7 +120,7 @@ export class LoomElement extends HTMLElement {
|
|
|
120
120
|
return;
|
|
121
121
|
// Tier 2 — FAST PATCH: all dirty deps have bindings
|
|
122
122
|
if (this.__traceDeps && canFastPatch(this.__traceDeps)) {
|
|
123
|
-
const dirtyKeys =
|
|
123
|
+
const dirtyKeys = COMPUTED_DIRTY.from(this);
|
|
124
124
|
if (dirtyKeys) {
|
|
125
125
|
for (let i = 0; i < dirtyKeys.length; i++) {
|
|
126
126
|
this[dirtyKeys[i]] = true;
|
|
@@ -172,7 +172,7 @@ export class LoomElement extends HTMLElement {
|
|
|
172
172
|
}
|
|
173
173
|
this._hasUpdated = true;
|
|
174
174
|
this.firstUpdated();
|
|
175
|
-
const hooks =
|
|
175
|
+
const hooks = FIRST_UPDATED_HOOKS.from(this);
|
|
176
176
|
if (hooks) {
|
|
177
177
|
for (let i = 0; i < hooks.length; i++) {
|
|
178
178
|
const cleanup = hooks[i](this);
|
|
@@ -186,7 +186,7 @@ export class LoomElement extends HTMLElement {
|
|
|
186
186
|
*/
|
|
187
187
|
_fullRender() {
|
|
188
188
|
// Dirty all @computed caches
|
|
189
|
-
const dirtyKeys =
|
|
189
|
+
const dirtyKeys = COMPUTED_DIRTY.from(this);
|
|
190
190
|
if (dirtyKeys) {
|
|
191
191
|
for (let i = 0; i < dirtyKeys.length; i++) {
|
|
192
192
|
this[dirtyKeys[i]] = true;
|
|
@@ -206,7 +206,7 @@ export class LoomElement extends HTMLElement {
|
|
|
206
206
|
this.firstUpdated();
|
|
207
207
|
// Run decorator-registered first-updated hooks (from @form, etc.)
|
|
208
208
|
// These fire after the first morph(), so shadow DOM content exists.
|
|
209
|
-
const fuhooks =
|
|
209
|
+
const fuhooks = FIRST_UPDATED_HOOKS.from(this);
|
|
210
210
|
if (fuhooks) {
|
|
211
211
|
for (let i = 0; i < fuhooks.length; i++) {
|
|
212
212
|
const cleanup = fuhooks[i](this);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/element/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAkC,MAAM,QAAQ,CAAC;AAE7D,OAAO,EAAiB,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACtG,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAkB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/element/element.ts"],"names":[],"mappings":"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"}
|
package/dist/element/image.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* - In-memory image cache (static Map) — repeated URLs are instant
|
|
7
7
|
* - Smooth fade-in on load
|
|
8
8
|
* - Customizable placeholder (slot or default shimmer)
|
|
9
|
+
* - Error fallback with optional retry URL and customizable error slot
|
|
9
10
|
*
|
|
10
11
|
* Usage:
|
|
11
12
|
* <loom-image src="/photo.jpg" alt="Description" />
|
|
@@ -15,6 +16,11 @@
|
|
|
15
16
|
* <loom-image src="/photo.jpg">
|
|
16
17
|
* <div slot="placeholder" class="my-skeleton">Loading...</div>
|
|
17
18
|
* </loom-image>
|
|
19
|
+
*
|
|
20
|
+
* Custom error state:
|
|
21
|
+
* <loom-image src="/photo.jpg" fallback="/fallback.jpg">
|
|
22
|
+
* <div slot="error">Failed to load image</div>
|
|
23
|
+
* </loom-image>
|
|
18
24
|
*/
|
|
19
25
|
import { LoomElement } from "./element";
|
|
20
26
|
export declare class LoomImage extends LoomElement {
|
|
@@ -28,12 +34,18 @@ export declare class LoomImage extends LoomElement {
|
|
|
28
34
|
accessor height: number;
|
|
29
35
|
/** Object-fit mode for the image */
|
|
30
36
|
accessor fit: string;
|
|
37
|
+
/** Fallback image URL — tried when the primary src fails */
|
|
38
|
+
accessor fallback: string;
|
|
31
39
|
private _loaded;
|
|
32
40
|
private _visible;
|
|
41
|
+
private _error;
|
|
33
42
|
accessor imgEl: HTMLImageElement;
|
|
34
43
|
accessor placeholderEl: HTMLDivElement;
|
|
44
|
+
accessor errorEl: HTMLDivElement;
|
|
35
45
|
private onIntersect;
|
|
36
46
|
private loadImage;
|
|
47
|
+
/** Transition to error state — hides placeholder, shows error slot */
|
|
48
|
+
private _showError;
|
|
37
49
|
private applyImage;
|
|
38
50
|
/** Preload images into the cache */
|
|
39
51
|
static preload(...urls: string[]): Promise<void[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/element/image.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/element/image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAkFxC,qBAEa,SAAU,SAAQ,WAAW;IAIxC,uBAAuB;IACjB,QAAQ,CAAC,GAAG,SAAM;IAExB,iCAAiC;IAC3B,QAAQ,CAAC,GAAG,SAAM;IAExB,2CAA2C;IACrC,QAAQ,CAAC,KAAK,SAAK;IAEzB,4CAA4C;IACtC,QAAQ,CAAC,MAAM,SAAK;IAE1B,oCAAoC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAW;IAErC,4DAA4D;IACtD,QAAQ,CAAC,QAAQ,SAAM;IAI7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;IAKvB,QAAQ,CAAC,KAAK,EAAG,gBAAgB,CAAC;IAGlC,QAAQ,CAAC,aAAa,EAAG,cAAc,CAAC;IAGxC,QAAQ,CAAC,OAAO,EAAG,cAAc,CAAC;IAKlC,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,SAAS;IAiCjB,sEAAsE;IACtE,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,UAAU;IAkBlB,oCAAoC;IACpC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAYlD,kDAAkD;IAClD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM;IAK9B,+BAA+B;IAC/B,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAMrC,MAAM,IAAI,IAAI,EAAE;IAgDhB,YAAY,IAAI,OAAO;CAGxB"}
|
package/dist/element/image.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* - In-memory image cache (static Map) — repeated URLs are instant
|
|
7
7
|
* - Smooth fade-in on load
|
|
8
8
|
* - Customizable placeholder (slot or default shimmer)
|
|
9
|
+
* - Error fallback with optional retry URL and customizable error slot
|
|
9
10
|
*
|
|
10
11
|
* Usage:
|
|
11
12
|
* <loom-image src="/photo.jpg" alt="Description" />
|
|
@@ -15,6 +16,11 @@
|
|
|
15
16
|
* <loom-image src="/photo.jpg">
|
|
16
17
|
* <div slot="placeholder" class="my-skeleton">Loading...</div>
|
|
17
18
|
* </loom-image>
|
|
19
|
+
*
|
|
20
|
+
* Custom error state:
|
|
21
|
+
* <loom-image src="/photo.jpg" fallback="/fallback.jpg">
|
|
22
|
+
* <div slot="error">Failed to load image</div>
|
|
23
|
+
* </loom-image>
|
|
18
24
|
*/
|
|
19
25
|
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
20
26
|
var useValue = arguments.length > 2;
|
|
@@ -65,7 +71,8 @@ const imageStyles = css `
|
|
|
65
71
|
line-height: 0;
|
|
66
72
|
}
|
|
67
73
|
|
|
68
|
-
.placeholder
|
|
74
|
+
.placeholder,
|
|
75
|
+
.error {
|
|
69
76
|
position: absolute;
|
|
70
77
|
inset: 0;
|
|
71
78
|
border-radius: inherit;
|
|
@@ -73,7 +80,8 @@ const imageStyles = css `
|
|
|
73
80
|
transition: opacity 0.3s ease;
|
|
74
81
|
}
|
|
75
82
|
|
|
76
|
-
.placeholder.hidden
|
|
83
|
+
.placeholder.hidden,
|
|
84
|
+
.error.hidden {
|
|
77
85
|
opacity: 0;
|
|
78
86
|
pointer-events: none;
|
|
79
87
|
}
|
|
@@ -97,6 +105,23 @@ const imageStyles = css `
|
|
|
97
105
|
100% { background-position: -200% 0; }
|
|
98
106
|
}
|
|
99
107
|
|
|
108
|
+
.default-error {
|
|
109
|
+
position: absolute;
|
|
110
|
+
inset: 0;
|
|
111
|
+
display: flex;
|
|
112
|
+
align-items: center;
|
|
113
|
+
justify-content: center;
|
|
114
|
+
background: rgba(0,0,0,0.06);
|
|
115
|
+
border-radius: inherit;
|
|
116
|
+
color: rgba(255,255,255,0.3);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.default-error svg {
|
|
120
|
+
width: 32px;
|
|
121
|
+
height: 32px;
|
|
122
|
+
opacity: 0.5;
|
|
123
|
+
}
|
|
124
|
+
|
|
100
125
|
img {
|
|
101
126
|
display: block;
|
|
102
127
|
width: 100%;
|
|
@@ -132,12 +157,18 @@ let LoomImage = (() => {
|
|
|
132
157
|
let _fit_decorators;
|
|
133
158
|
let _fit_initializers = [];
|
|
134
159
|
let _fit_extraInitializers = [];
|
|
160
|
+
let _fallback_decorators;
|
|
161
|
+
let _fallback_initializers = [];
|
|
162
|
+
let _fallback_extraInitializers = [];
|
|
135
163
|
let _imgEl_decorators;
|
|
136
164
|
let _imgEl_initializers = [];
|
|
137
165
|
let _imgEl_extraInitializers = [];
|
|
138
166
|
let _placeholderEl_decorators;
|
|
139
167
|
let _placeholderEl_initializers = [];
|
|
140
168
|
let _placeholderEl_extraInitializers = [];
|
|
169
|
+
let _errorEl_decorators;
|
|
170
|
+
let _errorEl_initializers = [];
|
|
171
|
+
let _errorEl_extraInitializers = [];
|
|
141
172
|
let _onIntersect_decorators;
|
|
142
173
|
var LoomImage = class extends _classSuper {
|
|
143
174
|
static { _classThis = this; }
|
|
@@ -148,16 +179,20 @@ let LoomImage = (() => {
|
|
|
148
179
|
_width_decorators = [prop];
|
|
149
180
|
_height_decorators = [prop];
|
|
150
181
|
_fit_decorators = [prop];
|
|
182
|
+
_fallback_decorators = [prop];
|
|
151
183
|
_imgEl_decorators = [query("img")];
|
|
152
184
|
_placeholderEl_decorators = [query(".placeholder")];
|
|
185
|
+
_errorEl_decorators = [query(".error")];
|
|
153
186
|
_onIntersect_decorators = [observer("intersection", { threshold: 0.01, rootMargin: "200px" })];
|
|
154
187
|
__esDecorate(this, null, _src_decorators, { kind: "accessor", name: "src", static: false, private: false, access: { has: obj => "src" in obj, get: obj => obj.src, set: (obj, value) => { obj.src = value; } }, metadata: _metadata }, _src_initializers, _src_extraInitializers);
|
|
155
188
|
__esDecorate(this, null, _alt_decorators, { kind: "accessor", name: "alt", static: false, private: false, access: { has: obj => "alt" in obj, get: obj => obj.alt, set: (obj, value) => { obj.alt = value; } }, metadata: _metadata }, _alt_initializers, _alt_extraInitializers);
|
|
156
189
|
__esDecorate(this, null, _width_decorators, { kind: "accessor", name: "width", static: false, private: false, access: { has: obj => "width" in obj, get: obj => obj.width, set: (obj, value) => { obj.width = value; } }, metadata: _metadata }, _width_initializers, _width_extraInitializers);
|
|
157
190
|
__esDecorate(this, null, _height_decorators, { kind: "accessor", name: "height", static: false, private: false, access: { has: obj => "height" in obj, get: obj => obj.height, set: (obj, value) => { obj.height = value; } }, metadata: _metadata }, _height_initializers, _height_extraInitializers);
|
|
158
191
|
__esDecorate(this, null, _fit_decorators, { kind: "accessor", name: "fit", static: false, private: false, access: { has: obj => "fit" in obj, get: obj => obj.fit, set: (obj, value) => { obj.fit = value; } }, metadata: _metadata }, _fit_initializers, _fit_extraInitializers);
|
|
192
|
+
__esDecorate(this, null, _fallback_decorators, { kind: "accessor", name: "fallback", static: false, private: false, access: { has: obj => "fallback" in obj, get: obj => obj.fallback, set: (obj, value) => { obj.fallback = value; } }, metadata: _metadata }, _fallback_initializers, _fallback_extraInitializers);
|
|
159
193
|
__esDecorate(this, null, _imgEl_decorators, { kind: "accessor", name: "imgEl", static: false, private: false, access: { has: obj => "imgEl" in obj, get: obj => obj.imgEl, set: (obj, value) => { obj.imgEl = value; } }, metadata: _metadata }, _imgEl_initializers, _imgEl_extraInitializers);
|
|
160
194
|
__esDecorate(this, null, _placeholderEl_decorators, { kind: "accessor", name: "placeholderEl", static: false, private: false, access: { has: obj => "placeholderEl" in obj, get: obj => obj.placeholderEl, set: (obj, value) => { obj.placeholderEl = value; } }, metadata: _metadata }, _placeholderEl_initializers, _placeholderEl_extraInitializers);
|
|
195
|
+
__esDecorate(this, null, _errorEl_decorators, { kind: "accessor", name: "errorEl", static: false, private: false, access: { has: obj => "errorEl" in obj, get: obj => obj.errorEl, set: (obj, value) => { obj.errorEl = value; } }, metadata: _metadata }, _errorEl_initializers, _errorEl_extraInitializers);
|
|
161
196
|
__esDecorate(this, null, _onIntersect_decorators, { kind: "method", name: "onIntersect", static: false, private: false, access: { has: obj => "onIntersect" in obj, get: obj => obj.onIntersect }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
162
197
|
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
163
198
|
LoomImage = _classThis = _classDescriptor.value;
|
|
@@ -185,9 +220,14 @@ let LoomImage = (() => {
|
|
|
185
220
|
/** Object-fit mode for the image */
|
|
186
221
|
get fit() { return this.#fit_accessor_storage; }
|
|
187
222
|
set fit(value) { this.#fit_accessor_storage = value; }
|
|
223
|
+
#fallback_accessor_storage = (__runInitializers(this, _fit_extraInitializers), __runInitializers(this, _fallback_initializers, ""));
|
|
224
|
+
/** Fallback image URL — tried when the primary src fails */
|
|
225
|
+
get fallback() { return this.#fallback_accessor_storage; }
|
|
226
|
+
set fallback(value) { this.#fallback_accessor_storage = value; }
|
|
188
227
|
// ── Internal state ──
|
|
189
|
-
_loaded = (__runInitializers(this,
|
|
228
|
+
_loaded = (__runInitializers(this, _fallback_extraInitializers), false);
|
|
190
229
|
_visible = false;
|
|
230
|
+
_error = false;
|
|
191
231
|
#imgEl_accessor_storage = __runInitializers(this, _imgEl_initializers, void 0);
|
|
192
232
|
// ── DOM refs ──
|
|
193
233
|
get imgEl() { return this.#imgEl_accessor_storage; }
|
|
@@ -195,6 +235,9 @@ let LoomImage = (() => {
|
|
|
195
235
|
#placeholderEl_accessor_storage = (__runInitializers(this, _imgEl_extraInitializers), __runInitializers(this, _placeholderEl_initializers, void 0));
|
|
196
236
|
get placeholderEl() { return this.#placeholderEl_accessor_storage; }
|
|
197
237
|
set placeholderEl(value) { this.#placeholderEl_accessor_storage = value; }
|
|
238
|
+
#errorEl_accessor_storage = (__runInitializers(this, _placeholderEl_extraInitializers), __runInitializers(this, _errorEl_initializers, void 0));
|
|
239
|
+
get errorEl() { return this.#errorEl_accessor_storage; }
|
|
240
|
+
set errorEl(value) { this.#errorEl_accessor_storage = value; }
|
|
198
241
|
// ── Lazy loading via @observer ──
|
|
199
242
|
onIntersect(entry) {
|
|
200
243
|
if (entry.isIntersecting && !this._visible) {
|
|
@@ -219,12 +262,29 @@ let LoomImage = (() => {
|
|
|
219
262
|
this.applyImage(img.src);
|
|
220
263
|
};
|
|
221
264
|
img.onerror = () => {
|
|
222
|
-
//
|
|
223
|
-
if (this.
|
|
224
|
-
|
|
265
|
+
// Try fallback if available and not already using it
|
|
266
|
+
if (this.fallback && this.src !== this.fallback) {
|
|
267
|
+
const fallbackImg = new Image();
|
|
268
|
+
fallbackImg.onload = () => {
|
|
269
|
+
imageCache.set(this.fallback, fallbackImg);
|
|
270
|
+
this.applyImage(fallbackImg.src);
|
|
271
|
+
};
|
|
272
|
+
fallbackImg.onerror = () => this._showError();
|
|
273
|
+
fallbackImg.src = this.fallback;
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
this._showError();
|
|
225
277
|
};
|
|
226
278
|
img.src = this.src;
|
|
227
279
|
}
|
|
280
|
+
/** Transition to error state — hides placeholder, shows error slot */
|
|
281
|
+
_showError() {
|
|
282
|
+
this._error = true;
|
|
283
|
+
if (this.placeholderEl)
|
|
284
|
+
this.placeholderEl.classList.add("hidden");
|
|
285
|
+
if (this.errorEl)
|
|
286
|
+
this.errorEl.classList.remove("hidden");
|
|
287
|
+
}
|
|
228
288
|
applyImage(src) {
|
|
229
289
|
if (!this.imgEl)
|
|
230
290
|
return;
|
|
@@ -294,14 +354,26 @@ let LoomImage = (() => {
|
|
|
294
354
|
defaultSkeleton.className = "default-skeleton";
|
|
295
355
|
slot.appendChild(defaultSkeleton);
|
|
296
356
|
placeholder.appendChild(slot);
|
|
297
|
-
|
|
357
|
+
// Error wrapper: user-slotted content or default broken-image icon
|
|
358
|
+
const errorWrapper = document.createElement("div");
|
|
359
|
+
errorWrapper.className = "error hidden";
|
|
360
|
+
errorWrapper.setAttribute("loom-keep", "");
|
|
361
|
+
const errorSlot = document.createElement("slot");
|
|
362
|
+
errorSlot.name = "error";
|
|
363
|
+
// Default error icon shown when no slotted content
|
|
364
|
+
const defaultError = document.createElement("div");
|
|
365
|
+
defaultError.className = "default-error";
|
|
366
|
+
defaultError.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2z"/><circle cx="15.5" cy="9.5" r="1.5"/><line x1="4" y1="4" x2="20" y2="20" stroke-width="2"/></svg>`;
|
|
367
|
+
errorSlot.appendChild(defaultError);
|
|
368
|
+
errorWrapper.appendChild(errorSlot);
|
|
369
|
+
return [placeholder, errorWrapper, img];
|
|
298
370
|
}
|
|
299
371
|
shouldUpdate() {
|
|
300
372
|
return !this.imgEl;
|
|
301
373
|
}
|
|
302
374
|
constructor() {
|
|
303
375
|
super(...arguments);
|
|
304
|
-
__runInitializers(this,
|
|
376
|
+
__runInitializers(this, _errorEl_extraInitializers);
|
|
305
377
|
}
|
|
306
378
|
};
|
|
307
379
|
return LoomImage = _classThis;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/element/image.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/element/image.ts"],"names":[],"mappings":"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"}
|
package/dist/element/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export { component, query, queryAll, styles } from "./decorators";
|
|
|
8
8
|
export { catch_, suspend, mount, unmount } from "./lifecycle";
|
|
9
9
|
export { event } from "./events";
|
|
10
10
|
export { observer } from "./observers";
|
|
11
|
-
export { interval, timeout, debounce, throttle, animationFrame } from "./timing";
|
|
11
|
+
export { interval, timeout, debounce, throttle, animationFrame, type AnimationFrameOptions } from "./timing";
|
|
12
12
|
export { form } from "./form";
|
|
13
13
|
export type { FormState, FormSchema, FieldSchema } from "./form";
|
|
14
14
|
export { lazy } from "./lazy";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/element/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AASxC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGlE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG9D,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/element/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AASxC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGlE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG9D,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAG7G,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAGjE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG1C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/element/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,kEAAkE;AAClE,gEAAgE;AAChE,0DAA0D;AAC1D,8DAA8D;AAC9D,4DAA4D;AAE5D,qBAAqB;AACrB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAElE,uBAAuB;AACvB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE9D,kBAAkB;AAClB,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,qBAAqB;AACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,oBAAoB;AACpB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/element/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,kEAAkE;AAClE,gEAAgE;AAChE,0DAA0D;AAC1D,8DAA8D;AAC9D,4DAA4D;AAE5D,qBAAqB;AACrB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAElE,uBAAuB;AACvB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE9D,kBAAkB;AAClB,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,qBAAqB;AACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,oBAAoB;AACpB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAA8B,MAAM,UAAU,CAAC;AAE7G,iBAAiB;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,yBAAyB;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,iBAAiB;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,uBAAuB;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/element/slots.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/element/slots.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,wBAAgB,IAAI,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,IACzD,IAAI,SAAS;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,EACzC,SAAS,4BAA4B,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EACxD,SAAS,6BAA6B,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KACxD,4BAA4B,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAuCnD"}
|
package/dist/element/slots.js
CHANGED
|
@@ -22,24 +22,29 @@ export function slot(name) {
|
|
|
22
22
|
return (_target, context) => {
|
|
23
23
|
const storageKey = Symbol(`slot:${String(context.name)}`);
|
|
24
24
|
context.addInitializer(function () {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
const self = this;
|
|
26
|
+
const hooks = CONNECT_HOOKS.from(self);
|
|
27
|
+
const hook = (el) => {
|
|
28
|
+
const host = el;
|
|
28
29
|
// Defer to allow update() to render the slot elements first
|
|
29
30
|
queueMicrotask(() => {
|
|
30
31
|
const selector = name ? `slot[name="${name}"]` : "slot:not([name])";
|
|
31
|
-
const slotEl =
|
|
32
|
+
const slotEl = host.shadow.querySelector(selector);
|
|
32
33
|
if (!slotEl)
|
|
33
34
|
return;
|
|
34
35
|
const updateSlotted = () => {
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
host[storageKey] = slotEl.assignedElements({ flatten: true });
|
|
37
|
+
host.scheduleUpdate?.();
|
|
37
38
|
};
|
|
38
39
|
updateSlotted();
|
|
39
40
|
slotEl.addEventListener("slotchange", updateSlotted);
|
|
40
|
-
|
|
41
|
+
host.track(() => slotEl.removeEventListener("slotchange", updateSlotted));
|
|
41
42
|
});
|
|
42
|
-
}
|
|
43
|
+
};
|
|
44
|
+
if (!hooks)
|
|
45
|
+
CONNECT_HOOKS.set(self, [hook]);
|
|
46
|
+
else
|
|
47
|
+
hooks.push(hook);
|
|
43
48
|
});
|
|
44
49
|
return {
|
|
45
50
|
get() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../../src/element/slots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../../src/element/slots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,UAAU,IAAI,CAAkC,IAAa;IACjE,OAAO,CACL,OAAwD,EACxD,OAAyD,EACR,EAAE;QACnD,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE1D,OAAO,CAAC,cAAc,CAAC;YACrB,MAAM,IAAI,GAAG,IAAc,CAAC;YAC5B,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAA2D,CAAC;YACjG,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,EAAE;gBAC1B,MAAM,IAAI,GAAG,EAAqG,CAAC;gBACnH,4DAA4D;gBAC5D,cAAc,CAAC,GAAG,EAAE;oBAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC;oBACpE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAA2B,CAAC;oBAE7E,IAAI,CAAC,MAAM;wBAAE,OAAO;oBAEpB,MAAM,aAAa,GAAG,GAAG,EAAE;wBACzB,IAAI,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC9D,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC1B,CAAC,CAAC;oBAEF,aAAa,EAAE,CAAC;oBAEhB,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;oBACrD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;gBAC5E,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YACF,IAAI,CAAC,KAAK;gBAAE,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;;gBACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,GAAG;gBACD,OAAQ,IAA2C,CAAC,UAAU,CAAgB,IAAI,EAAE,CAAC;YACvF,CAAC;YACD,GAAG,CAAa,GAAgB;gBAC7B,IAA2C,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;YACjE,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/element/timing.d.ts
CHANGED
|
@@ -48,6 +48,32 @@ export declare function debounce(ms: number): (method: Function, context: ClassM
|
|
|
48
48
|
* ```
|
|
49
49
|
*/
|
|
50
50
|
export declare function throttle(ms: number): (method: Function, context: ClassMethodDecoratorContext) => (this: any, ...args: unknown[]) => void;
|
|
51
|
+
/**
|
|
52
|
+
* Centralized rAF loop via RenderLoop. Method receives (deltaTime, timestamp).
|
|
53
|
+
* Use layer to control execution order (lower = earlier).
|
|
54
|
+
* Use fps to cap the callback rate (default: uncapped, runs every frame).
|
|
55
|
+
*
|
|
56
|
+
* ```ts
|
|
57
|
+
* @animationFrame(10) // layer 10, every frame
|
|
58
|
+
* draw(dt: number, t: number) { ... }
|
|
59
|
+
*
|
|
60
|
+
* @animationFrame({ fps: 30 }) // 30fps, layer 0
|
|
61
|
+
* particles(dt: number, t: number) { ... }
|
|
62
|
+
*
|
|
63
|
+
* @animationFrame({ fps: 24, layer: 5 }) // 24fps, layer 5
|
|
64
|
+
* ambient(dt: number, t: number) { ... }
|
|
65
|
+
*
|
|
66
|
+
* @animationFrame // also valid (layer 0, every frame)
|
|
67
|
+
* render(dt: number) { ... }
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export interface AnimationFrameOptions {
|
|
71
|
+
/** Execution layer — lower layers run first (default: 0) */
|
|
72
|
+
layer?: number;
|
|
73
|
+
/** Target frames per second — caps callback rate (default: uncapped) */
|
|
74
|
+
fps?: number;
|
|
75
|
+
}
|
|
76
|
+
export declare function animationFrame(opts: AnimationFrameOptions): (method: Function, context: ClassMethodDecoratorContext) => void;
|
|
51
77
|
export declare function animationFrame(layer?: number): (method: Function, context: ClassMethodDecoratorContext) => void;
|
|
52
78
|
export declare function animationFrame(method: Function, context: ClassMethodDecoratorContext): void;
|
|
53
79
|
//# sourceMappingURL=timing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/element/timing.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,kFAKnB,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,kFAKlB,CAAC;AAEH;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,IACzB,QAAQ,QAAQ,EAAE,SAAS,2BAA2B,YAIjC,GAAG,WAAW,OAAO,EAAE,UAerD;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,IACzB,QAAQ,QAAQ,EAAE,SAAS,2BAA2B,YAKjC,GAAG,WAAW,OAAO,EAAE,UAyBrD;
|
|
1
|
+
{"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/element/timing.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,kFAKnB,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,kFAKlB,CAAC;AAEH;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,IACzB,QAAQ,QAAQ,EAAE,SAAS,2BAA2B,YAIjC,GAAG,WAAW,OAAO,EAAE,UAerD;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,IACzB,QAAQ,QAAQ,EAAE,SAAS,2BAA2B,YAKjC,GAAG,WAAW,OAAO,EAAE,UAyBrD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,qBAAqB;IACpC,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAmBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,KAAK,IAAI,CAAC;AAC9H,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,KAAK,IAAI,CAAC;AACjH,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,GAAG,IAAI,CAAC"}
|
package/dist/element/timing.js
CHANGED
|
@@ -108,34 +108,35 @@ export function throttle(ms) {
|
|
|
108
108
|
return replacement;
|
|
109
109
|
};
|
|
110
110
|
}
|
|
111
|
-
|
|
112
|
-
* Centralized rAF loop via RenderLoop. Method receives (deltaTime, timestamp).
|
|
113
|
-
* Use layer to control execution order (lower = earlier).
|
|
114
|
-
*
|
|
115
|
-
* ```ts
|
|
116
|
-
* @animationFrame(10) // layer 10
|
|
117
|
-
* draw(dt: number, t: number) { ... }
|
|
118
|
-
*
|
|
119
|
-
* @animationFrame() // default layer 0
|
|
120
|
-
* physics(dt: number) { ... }
|
|
121
|
-
*
|
|
122
|
-
* @animationFrame // also valid
|
|
123
|
-
* render(dt: number) { ... }
|
|
124
|
-
* ```
|
|
125
|
-
*/
|
|
126
|
-
const _af = createDecorator((method, _key, layer) => {
|
|
111
|
+
const _af = createDecorator((method, _key, layer, fps) => {
|
|
127
112
|
return (el) => {
|
|
113
|
+
if (fps && fps > 0 && fps < 60) {
|
|
114
|
+
const budget = 1 / fps;
|
|
115
|
+
let acc = 0;
|
|
116
|
+
return renderLoop.add(layer, (dt, t) => {
|
|
117
|
+
acc += dt;
|
|
118
|
+
if (acc >= budget) {
|
|
119
|
+
acc -= budget;
|
|
120
|
+
method.call(el, dt, t);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
128
124
|
return renderLoop.add(layer, (dt, t) => method.call(el, dt, t));
|
|
129
125
|
};
|
|
130
126
|
});
|
|
131
|
-
export function animationFrame(
|
|
127
|
+
export function animationFrame(methodOrLayerOrOpts, context) {
|
|
132
128
|
// Called as @animationFrame (no parens) — method is first arg
|
|
133
|
-
if (typeof
|
|
134
|
-
_af(0)(
|
|
129
|
+
if (typeof methodOrLayerOrOpts === "function" && context) {
|
|
130
|
+
_af(0, undefined)(methodOrLayerOrOpts, context);
|
|
135
131
|
return;
|
|
136
132
|
}
|
|
133
|
+
// Called as @animationFrame({ fps: 30, layer: 5 })
|
|
134
|
+
if (typeof methodOrLayerOrOpts === "object" && methodOrLayerOrOpts !== null) {
|
|
135
|
+
const opts = methodOrLayerOrOpts;
|
|
136
|
+
return _af(opts.layer ?? 0, opts.fps);
|
|
137
|
+
}
|
|
137
138
|
// Called as @animationFrame() or @animationFrame(layer)
|
|
138
|
-
const layer = typeof
|
|
139
|
-
return _af(layer);
|
|
139
|
+
const layer = typeof methodOrLayerOrOpts === "number" ? methodOrLayerOrOpts : 0;
|
|
140
|
+
return _af(layer, undefined);
|
|
140
141
|
}
|
|
141
142
|
//# sourceMappingURL=timing.js.map
|