@miurajs/miura-render 0.1.0 → 0.2.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.
- package/README.md +6 -6
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/src/binding-manager/binding-manager.d.ts +30 -0
- package/dist/src/binding-manager/binding-manager.d.ts.map +1 -0
- package/dist/src/binding-manager/binding-manager.js +245 -0
- package/dist/src/binding-manager/binding-manager.js.map +1 -0
- package/dist/src/binding-manager/binding-type.d.ts +24 -0
- package/dist/src/binding-manager/binding-type.d.ts.map +1 -0
- package/dist/src/binding-manager/binding-type.js +25 -0
- package/dist/src/binding-manager/binding-type.js.map +1 -0
- package/dist/src/binding-manager/bindings/async-binding.d.ts +23 -0
- package/dist/src/binding-manager/bindings/async-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/async-binding.js +67 -0
- package/dist/src/binding-manager/bindings/async-binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/attribute-binding.d.ts +41 -0
- package/dist/src/binding-manager/bindings/attribute-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/attribute-binding.js +79 -0
- package/dist/src/binding-manager/bindings/attribute-binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/bind-binding.d.ts +30 -0
- package/dist/src/binding-manager/bindings/bind-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/bind-binding.js +81 -0
- package/dist/src/binding-manager/bindings/bind-binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/binding.d.ts +6 -0
- package/dist/src/binding-manager/bindings/binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/binding.js +2 -0
- package/dist/src/binding-manager/bindings/binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/boolean-binding.d.ts +18 -0
- package/dist/src/binding-manager/bindings/boolean-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/boolean-binding.js +65 -0
- package/dist/src/binding-manager/bindings/boolean-binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/class-binding.d.ts +10 -0
- package/dist/src/binding-manager/bindings/class-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/class-binding.js +68 -0
- package/dist/src/binding-manager/bindings/class-binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/directive-binding.d.ts +15 -0
- package/dist/src/binding-manager/bindings/directive-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/directive-binding.js +70 -0
- package/dist/src/binding-manager/bindings/directive-binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/event-binding.d.ts +14 -0
- package/dist/src/binding-manager/bindings/event-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/event-binding.js +73 -0
- package/dist/src/binding-manager/bindings/event-binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/node-binding.d.ts +36 -0
- package/dist/src/binding-manager/bindings/node-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/node-binding.js +235 -0
- package/dist/src/binding-manager/bindings/node-binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/object-class-binding.d.ts +16 -0
- package/dist/src/binding-manager/bindings/object-class-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/object-class-binding.js +42 -0
- package/dist/src/binding-manager/bindings/object-class-binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/object-style-binding.d.ts +16 -0
- package/dist/src/binding-manager/bindings/object-style-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/object-style-binding.js +38 -0
- package/dist/src/binding-manager/bindings/object-style-binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/property-binding.d.ts +12 -0
- package/dist/src/binding-manager/bindings/property-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/property-binding.js +44 -0
- package/dist/src/binding-manager/bindings/property-binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/reference-binding.d.ts +14 -0
- package/dist/src/binding-manager/bindings/reference-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/reference-binding.js +44 -0
- package/dist/src/binding-manager/bindings/reference-binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/spread-binding.d.ts +16 -0
- package/dist/src/binding-manager/bindings/spread-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/spread-binding.js +40 -0
- package/dist/src/binding-manager/bindings/spread-binding.js.map +1 -0
- package/dist/src/binding-manager/bindings/style-binding.d.ts +10 -0
- package/dist/src/binding-manager/bindings/style-binding.d.ts.map +1 -0
- package/dist/src/binding-manager/bindings/style-binding.js +44 -0
- package/dist/src/binding-manager/bindings/style-binding.js.map +1 -0
- package/dist/src/compiler/code-factory.d.ts +45 -0
- package/dist/src/compiler/code-factory.d.ts.map +1 -0
- package/dist/src/compiler/code-factory.js +211 -0
- package/dist/src/compiler/code-factory.js.map +1 -0
- package/dist/src/compiler/compiler.d.ts +77 -0
- package/dist/src/compiler/compiler.d.ts.map +1 -0
- package/dist/src/compiler/compiler.js +77 -0
- package/dist/src/compiler/compiler.js.map +1 -0
- package/dist/src/compiler/constants.d.ts +5 -0
- package/dist/src/compiler/constants.d.ts.map +1 -0
- package/dist/src/compiler/constants.js +9 -0
- package/dist/src/compiler/constants.js.map +1 -0
- package/dist/src/css-result.d.ts +27 -0
- package/dist/src/css-result.d.ts.map +1 -0
- package/dist/src/css-result.js +56 -0
- package/dist/src/css-result.js.map +1 -0
- package/dist/src/css.d.ts +26 -0
- package/dist/src/css.d.ts.map +1 -0
- package/dist/src/css.js +62 -0
- package/dist/src/css.js.map +1 -0
- package/dist/src/directives/animate.directive.d.ts +42 -0
- package/dist/src/directives/animate.directive.d.ts.map +1 -0
- package/dist/src/directives/animate.directive.js +349 -0
- package/dist/src/directives/animate.directive.js.map +1 -0
- package/dist/src/directives/await.d.ts +68 -0
- package/dist/src/directives/await.d.ts.map +1 -0
- package/dist/src/directives/await.js +70 -0
- package/dist/src/directives/await.js.map +1 -0
- package/dist/src/directives/choose.d.ts +28 -0
- package/dist/src/directives/choose.d.ts.map +1 -0
- package/dist/src/directives/choose.js +30 -0
- package/dist/src/directives/choose.js.map +1 -0
- package/dist/src/directives/decorator-example.d.ts +8 -0
- package/dist/src/directives/decorator-example.d.ts.map +1 -0
- package/dist/src/directives/decorator-example.js +32 -0
- package/dist/src/directives/decorator-example.js.map +1 -0
- package/dist/src/directives/decorators.d.ts +3 -0
- package/dist/src/directives/decorators.d.ts.map +1 -0
- package/dist/src/directives/decorators.js +17 -0
- package/dist/src/directives/decorators.js.map +1 -0
- package/dist/src/directives/directive-manager.d.ts +26 -0
- package/dist/src/directives/directive-manager.d.ts.map +1 -0
- package/dist/src/directives/directive-manager.js +114 -0
- package/dist/src/directives/directive-manager.js.map +1 -0
- package/dist/src/directives/directive.d.ts +38 -0
- package/dist/src/directives/directive.d.ts.map +1 -0
- package/dist/src/directives/directive.js +18 -0
- package/dist/src/directives/directive.js.map +1 -0
- package/dist/src/directives/focus.directive.d.ts +16 -0
- package/dist/src/directives/focus.directive.d.ts.map +1 -0
- package/dist/src/directives/focus.directive.js +29 -0
- package/dist/src/directives/focus.directive.js.map +1 -0
- package/dist/src/directives/gesture.directive.d.ts +58 -0
- package/dist/src/directives/gesture.directive.d.ts.map +1 -0
- package/dist/src/directives/gesture.directive.js +331 -0
- package/dist/src/directives/gesture.directive.js.map +1 -0
- package/dist/src/directives/index.d.ts +34 -0
- package/dist/src/directives/index.d.ts.map +1 -0
- package/dist/src/directives/index.js +35 -0
- package/dist/src/directives/index.js.map +1 -0
- package/dist/src/directives/intersection.directive.d.ts +18 -0
- package/dist/src/directives/intersection.directive.d.ts.map +1 -0
- package/dist/src/directives/intersection.directive.js +50 -0
- package/dist/src/directives/intersection.directive.js.map +1 -0
- package/dist/src/directives/keyed-diff.d.ts +30 -0
- package/dist/src/directives/keyed-diff.d.ts.map +1 -0
- package/dist/src/directives/keyed-diff.js +185 -0
- package/dist/src/directives/keyed-diff.js.map +1 -0
- package/dist/src/directives/lazy-setup.d.ts +3 -0
- package/dist/src/directives/lazy-setup.d.ts.map +1 -0
- package/dist/src/directives/lazy-setup.js +55 -0
- package/dist/src/directives/lazy-setup.js.map +1 -0
- package/dist/src/directives/lazy.directive.d.ts +19 -0
- package/dist/src/directives/lazy.directive.d.ts.map +1 -0
- package/dist/src/directives/lazy.directive.js +73 -0
- package/dist/src/directives/lazy.directive.js.map +1 -0
- package/dist/src/directives/media.directive.d.ts +31 -0
- package/dist/src/directives/media.directive.d.ts.map +1 -0
- package/dist/src/directives/media.directive.js +105 -0
- package/dist/src/directives/media.directive.js.map +1 -0
- package/dist/src/directives/mutation.directive.d.ts +11 -0
- package/dist/src/directives/mutation.directive.d.ts.map +1 -0
- package/dist/src/directives/mutation.directive.js +56 -0
- package/dist/src/directives/mutation.directive.js.map +1 -0
- package/dist/src/directives/repeat.d.ts +50 -0
- package/dist/src/directives/repeat.d.ts.map +1 -0
- package/dist/src/directives/repeat.js +47 -0
- package/dist/src/directives/repeat.js.map +1 -0
- package/dist/src/directives/resize.directive.d.ts +14 -0
- package/dist/src/directives/resize.directive.d.ts.map +1 -0
- package/dist/src/directives/resize.directive.js +81 -0
- package/dist/src/directives/resize.directive.js.map +1 -0
- package/dist/src/directives/setup.d.ts +9 -0
- package/dist/src/directives/setup.d.ts.map +1 -0
- package/dist/src/directives/setup.js +9 -0
- package/dist/src/directives/setup.js.map +1 -0
- package/dist/src/directives/structural/async.directive.d.ts +39 -0
- package/dist/src/directives/structural/async.directive.d.ts.map +1 -0
- package/dist/src/directives/structural/async.directive.js +115 -0
- package/dist/src/directives/structural/async.directive.js.map +1 -0
- package/dist/src/directives/structural/for.directive.d.ts +37 -0
- package/dist/src/directives/structural/for.directive.d.ts.map +1 -0
- package/dist/src/directives/structural/for.directive.js +209 -0
- package/dist/src/directives/structural/for.directive.js.map +1 -0
- package/dist/src/directives/structural/if.directive.d.ts +54 -0
- package/dist/src/directives/structural/if.directive.d.ts.map +1 -0
- package/dist/src/directives/structural/if.directive.js +210 -0
- package/dist/src/directives/structural/if.directive.js.map +1 -0
- package/dist/src/directives/structural/structural.directive.d.ts +11 -0
- package/dist/src/directives/structural/structural.directive.d.ts.map +1 -0
- package/dist/src/directives/structural/structural.directive.js +29 -0
- package/dist/src/directives/structural/structural.directive.js.map +1 -0
- package/dist/src/directives/structural/switch.directive.d.ts +12 -0
- package/dist/src/directives/structural/switch.directive.d.ts.map +1 -0
- package/dist/src/directives/structural/switch.directive.js +69 -0
- package/dist/src/directives/structural/switch.directive.js.map +1 -0
- package/dist/src/directives/structural/virtual-scroll.directive.d.ts +50 -0
- package/dist/src/directives/structural/virtual-scroll.directive.d.ts.map +1 -0
- package/dist/src/directives/structural/virtual-scroll.directive.js +165 -0
- package/dist/src/directives/structural/virtual-scroll.directive.js.map +1 -0
- package/dist/src/directives/utils.d.ts +61 -0
- package/dist/src/directives/utils.d.ts.map +1 -0
- package/dist/src/directives/utils.js +121 -0
- package/dist/src/directives/utils.js.map +1 -0
- package/dist/src/directives/validate.directive.d.ts +41 -0
- package/dist/src/directives/validate.directive.d.ts.map +1 -0
- package/dist/src/directives/validate.directive.js +161 -0
- package/dist/src/directives/validate.directive.js.map +1 -0
- package/dist/src/directives/virtual-scroll.d.ts +91 -0
- package/dist/src/directives/virtual-scroll.d.ts.map +1 -0
- package/dist/src/directives/virtual-scroll.js +78 -0
- package/dist/src/directives/virtual-scroll.js.map +1 -0
- package/dist/src/directives/when.d.ts +24 -0
- package/dist/src/directives/when.d.ts.map +1 -0
- package/dist/src/directives/when.js +25 -0
- package/dist/src/directives/when.js.map +1 -0
- package/dist/src/html.d.ts +23 -0
- package/dist/src/html.d.ts.map +1 -0
- package/dist/src/html.js +37 -0
- package/dist/src/html.js.map +1 -0
- package/dist/src/modifiers/capture-modifier.d.ts +6 -0
- package/dist/src/modifiers/capture-modifier.d.ts.map +1 -0
- package/dist/src/modifiers/capture-modifier.js +14 -0
- package/dist/src/modifiers/capture-modifier.js.map +1 -0
- package/dist/src/modifiers/event-modifiers.d.ts +38 -0
- package/dist/src/modifiers/event-modifiers.d.ts.map +1 -0
- package/dist/src/modifiers/event-modifiers.js +90 -0
- package/dist/src/modifiers/event-modifiers.js.map +1 -0
- package/dist/src/modifiers/key-modifiers.d.ts +8 -0
- package/dist/src/modifiers/key-modifiers.d.ts.map +1 -0
- package/dist/src/modifiers/key-modifiers.js +29 -0
- package/dist/src/modifiers/key-modifiers.js.map +1 -0
- package/dist/src/modifiers/mouse-modifiers.d.ts +8 -0
- package/dist/src/modifiers/mouse-modifiers.d.ts.map +1 -0
- package/dist/src/modifiers/mouse-modifiers.js +15 -0
- package/dist/src/modifiers/mouse-modifiers.js.map +1 -0
- package/dist/src/modifiers/once-modifier.d.ts +6 -0
- package/dist/src/modifiers/once-modifier.d.ts.map +1 -0
- package/dist/src/modifiers/once-modifier.js +11 -0
- package/dist/src/modifiers/once-modifier.js.map +1 -0
- package/dist/src/modifiers/passive-modifier.d.ts +6 -0
- package/dist/src/modifiers/passive-modifier.d.ts.map +1 -0
- package/dist/src/modifiers/passive-modifier.js +14 -0
- package/dist/src/modifiers/passive-modifier.js.map +1 -0
- package/dist/src/processor/parser.d.ts +74 -0
- package/dist/src/processor/parser.d.ts.map +1 -0
- package/dist/src/processor/parser.js +345 -0
- package/dist/src/processor/parser.js.map +1 -0
- package/dist/src/processor/processor.d.ts +68 -0
- package/dist/src/processor/processor.d.ts.map +1 -0
- package/dist/src/processor/processor.js +138 -0
- package/dist/src/processor/processor.js.map +1 -0
- package/dist/src/processor/template-result.d.ts +74 -0
- package/dist/src/processor/template-result.d.ts.map +1 -0
- package/dist/src/processor/template-result.js +53 -0
- package/dist/src/processor/template-result.js.map +1 -0
- package/dist/src/processor/types.d.ts +16 -0
- package/dist/src/processor/types.d.ts.map +1 -0
- package/dist/src/processor/types.js +13 -0
- package/dist/src/processor/types.js.map +1 -0
- package/dist/src/utils/debug.d.ts +7 -0
- package/dist/src/utils/debug.d.ts.map +1 -0
- package/dist/src/utils/debug.js +7 -0
- package/dist/src/utils/debug.js.map +1 -0
- package/dist/src/utils/performance.d.ts +50 -0
- package/dist/src/utils/performance.d.ts.map +1 -0
- package/dist/src/utils/performance.js +51 -0
- package/dist/src/utils/performance.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +8 -10
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @miurajs/miura-render
|
|
2
2
|
|
|
3
3
|
The rendering engine for the miura framework. Provides tagged template literals (`html`/`css`), a state-machine parser, a binding manager, structural directives, and performance utilities including LIS-based keyed diffing, async rendering, and virtual scrolling.
|
|
4
4
|
|
|
@@ -16,7 +16,7 @@ The rendering engine for the miura framework. Provides tagged template literals
|
|
|
16
16
|
## Installation
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
pnpm add @
|
|
19
|
+
pnpm add @miurajs/miura-render
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
## Template Syntax
|
|
@@ -139,7 +139,7 @@ The algorithm identifies items already in correct relative order (via Longest In
|
|
|
139
139
|
Declarative promise-based rendering.
|
|
140
140
|
|
|
141
141
|
```typescript
|
|
142
|
-
import { createAsyncTracker, resolveAsync } from '@
|
|
142
|
+
import { createAsyncTracker, resolveAsync } from '@miurajs/miura-render';
|
|
143
143
|
|
|
144
144
|
// Create a tracker
|
|
145
145
|
const tracker = createAsyncTracker(
|
|
@@ -204,7 +204,7 @@ The directive:
|
|
|
204
204
|
Lower-level pure function for custom virtual scroll implementations:
|
|
205
205
|
|
|
206
206
|
```typescript
|
|
207
|
-
import { computeVirtualSlice } from '@
|
|
207
|
+
import { computeVirtualSlice } from '@miurajs/miura-render';
|
|
208
208
|
|
|
209
209
|
const vs = computeVirtualSlice({
|
|
210
210
|
items: this.allItems,
|
|
@@ -296,7 +296,7 @@ Template string → TemplateParser → ParsedTemplate (HTML + TemplateBinding[])
|
|
|
296
296
|
### Direct usage
|
|
297
297
|
|
|
298
298
|
```typescript
|
|
299
|
-
import { TemplateCompiler } from '@
|
|
299
|
+
import { TemplateCompiler } from '@miurajs/miura-render';
|
|
300
300
|
|
|
301
301
|
const compiler = new TemplateCompiler();
|
|
302
302
|
|
|
@@ -314,7 +314,7 @@ compiled.update(refs, newResult.values);
|
|
|
314
314
|
## CSS Tagged Template
|
|
315
315
|
|
|
316
316
|
```typescript
|
|
317
|
-
import { css } from '@
|
|
317
|
+
import { css } from '@miurajs/miura-render';
|
|
318
318
|
|
|
319
319
|
const styles = css`
|
|
320
320
|
:host { display: block; }
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from './src/processor/template-result';
|
|
2
|
+
export * from './src/processor/processor';
|
|
3
|
+
export * from './src/processor/types';
|
|
4
|
+
export * from './src/css-result';
|
|
5
|
+
export * from './src/utils/debug';
|
|
6
|
+
export * from './src/utils/performance';
|
|
7
|
+
export { html, getHtmlMetrics, resetHtmlMetrics } from './src/html';
|
|
8
|
+
export { css, getCssMetrics, resetCssMetrics, clearCssCache } from './src/css';
|
|
9
|
+
export * from './src/directives';
|
|
10
|
+
export { TemplateCompiler } from './src/compiler/compiler';
|
|
11
|
+
export type { CompiledTemplate } from './src/compiler/compiler';
|
|
12
|
+
export { NodeBinding } from './src/binding-manager/bindings/node-binding';
|
|
13
|
+
export { DirectiveBinding } from './src/binding-manager/bindings/directive-binding';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/E,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './src/processor/template-result';
|
|
2
|
+
export * from './src/processor/processor';
|
|
3
|
+
export * from './src/processor/types';
|
|
4
|
+
export * from './src/css-result';
|
|
5
|
+
export * from './src/utils/debug';
|
|
6
|
+
export * from './src/utils/performance';
|
|
7
|
+
export { html, getHtmlMetrics, resetHtmlMetrics } from './src/html';
|
|
8
|
+
export { css, getCssMetrics, resetCssMetrics, clearCssCache } from './src/css';
|
|
9
|
+
export * from './src/directives';
|
|
10
|
+
export { TemplateCompiler } from './src/compiler/compiler';
|
|
11
|
+
export { NodeBinding } from './src/binding-manager/bindings/node-binding';
|
|
12
|
+
export { DirectiveBinding } from './src/binding-manager/bindings/directive-binding';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/E,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Binding } from './bindings/binding';
|
|
2
|
+
import { TemplateBinding } from '../processor/parser';
|
|
3
|
+
import { ITemplateProcessor } from '../processor/types';
|
|
4
|
+
export declare class BindingManager {
|
|
5
|
+
/**
|
|
6
|
+
* Performance tracking
|
|
7
|
+
*/
|
|
8
|
+
private static metrics;
|
|
9
|
+
/**
|
|
10
|
+
* Get performance metrics
|
|
11
|
+
*/
|
|
12
|
+
static getPerformanceMetrics(): {
|
|
13
|
+
createTime: number;
|
|
14
|
+
initTime: number;
|
|
15
|
+
bindingCount: number;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Reset performance metrics
|
|
19
|
+
*/
|
|
20
|
+
static resetMetrics(): void;
|
|
21
|
+
static createAndInitializeParts(fragment: DocumentFragment, bindings: TemplateBinding[], values: unknown[], context?: unknown, processor?: ITemplateProcessor): Promise<Binding[]>;
|
|
22
|
+
private static createBindings;
|
|
23
|
+
private static createBindingForType;
|
|
24
|
+
private static findBindingElement;
|
|
25
|
+
private static findMarkers;
|
|
26
|
+
private static isBindingMarker;
|
|
27
|
+
private static hasBindingAttribute;
|
|
28
|
+
static initializeBindings(bindings: Binding[], values: unknown[], context?: unknown): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=binding-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-manager.d.ts","sourceRoot":"","sources":["../../../src/binding-manager/binding-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAuBxD,qBAAa,cAAc;IACvB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,OAAO,CAIpB;IAEF;;OAEG;IACH,MAAM,CAAC,qBAAqB;;;;;IAI5B;;OAEG;IACH,MAAM,CAAC,YAAY;WAQN,wBAAwB,CACjC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,eAAe,EAAE,EAC3B,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,EACjB,SAAS,CAAC,EAAE,kBAAkB,GAC/B,OAAO,CAAC,OAAO,EAAE,CAAC;IASrB,OAAO,CAAC,MAAM,CAAC,cAAc;IA0D7B,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAoEnC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA2BjC,OAAO,CAAC,MAAM,CAAC,WAAW;IAuC1B,OAAO,CAAC,MAAM,CAAC,eAAe;IAI9B,OAAO,CAAC,MAAM,CAAC,mBAAmB;WAMd,kBAAkB,CAClC,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC;CA6CnB"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { NodeBinding } from './bindings/node-binding';
|
|
2
|
+
import { BindingType } from '../processor/template-result';
|
|
3
|
+
import { debugLog } from '../utils/debug';
|
|
4
|
+
import { PropertyBinding } from './bindings/property-binding';
|
|
5
|
+
import { EventBinding } from './bindings/event-binding';
|
|
6
|
+
import { ClassBinding } from './bindings/class-binding';
|
|
7
|
+
import { BooleanBinding } from './bindings/boolean-binding';
|
|
8
|
+
import { ReferenceBinding } from './bindings/reference-binding';
|
|
9
|
+
import { StyleBinding } from './bindings/style-binding';
|
|
10
|
+
import { DirectiveBinding } from './bindings/directive-binding';
|
|
11
|
+
import { AttributeBinding, AttributePartBinding } from './bindings/attribute-binding';
|
|
12
|
+
import { BindBinding } from './bindings/bind-binding';
|
|
13
|
+
import { ObjectClassBinding } from './bindings/object-class-binding';
|
|
14
|
+
import { ObjectStyleBinding } from './bindings/object-style-binding';
|
|
15
|
+
import { SpreadBinding } from './bindings/spread-binding';
|
|
16
|
+
import { AsyncBinding } from './bindings/async-binding';
|
|
17
|
+
function _isSignal(v) {
|
|
18
|
+
return typeof v === 'function' && v.__isSignal === true;
|
|
19
|
+
}
|
|
20
|
+
export class BindingManager {
|
|
21
|
+
/**
|
|
22
|
+
* Performance tracking
|
|
23
|
+
*/
|
|
24
|
+
static metrics = {
|
|
25
|
+
createTime: 0,
|
|
26
|
+
initTime: 0,
|
|
27
|
+
bindingCount: 0
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Get performance metrics
|
|
31
|
+
*/
|
|
32
|
+
static getPerformanceMetrics() {
|
|
33
|
+
return { ...this.metrics };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Reset performance metrics
|
|
37
|
+
*/
|
|
38
|
+
static resetMetrics() {
|
|
39
|
+
this.metrics = {
|
|
40
|
+
createTime: 0,
|
|
41
|
+
initTime: 0,
|
|
42
|
+
bindingCount: 0
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
static async createAndInitializeParts(fragment, bindings, values, context, processor) {
|
|
46
|
+
const startTime = performance.now();
|
|
47
|
+
const parts = this.createBindings(fragment, bindings, processor);
|
|
48
|
+
await this.initializeBindings(parts, values, context);
|
|
49
|
+
this.metrics.createTime = performance.now() - startTime;
|
|
50
|
+
this.metrics.bindingCount += bindings.length;
|
|
51
|
+
return parts;
|
|
52
|
+
}
|
|
53
|
+
static createBindings(fragment, bindings, processor) {
|
|
54
|
+
debugLog('bindingManager', 'Creating bindings', { bindingsCount: bindings.length });
|
|
55
|
+
const bindingInstances = [];
|
|
56
|
+
// Caches for multi-part attribute groups
|
|
57
|
+
const elementCache = new Map();
|
|
58
|
+
const attrBindingCache = new Map();
|
|
59
|
+
bindings.forEach(binding => {
|
|
60
|
+
// Handle multi-part Attribute bindings
|
|
61
|
+
if (binding.type === BindingType.Attribute) {
|
|
62
|
+
const groupStart = binding.groupStart ?? binding.index;
|
|
63
|
+
let element;
|
|
64
|
+
if (groupStart === binding.index) {
|
|
65
|
+
// First part in the group — find element via marker
|
|
66
|
+
element = this.findBindingElement(fragment, binding.index);
|
|
67
|
+
if (element)
|
|
68
|
+
elementCache.set(groupStart, element);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Subsequent part — reuse cached element
|
|
72
|
+
element = elementCache.get(groupStart) || null;
|
|
73
|
+
}
|
|
74
|
+
if (!element)
|
|
75
|
+
return;
|
|
76
|
+
if (groupStart === binding.index) {
|
|
77
|
+
// Create the shared AttributeBinding
|
|
78
|
+
const strings = binding.strings || ['', ''];
|
|
79
|
+
const attrBinding = new AttributeBinding(element, binding.name || '', strings);
|
|
80
|
+
attrBindingCache.set(groupStart, attrBinding);
|
|
81
|
+
bindingInstances[binding.index] = attrBinding;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// Create a part binding that delegates to the shared parent
|
|
85
|
+
const parent = attrBindingCache.get(groupStart);
|
|
86
|
+
if (parent) {
|
|
87
|
+
bindingInstances[binding.index] = new AttributePartBinding(parent, binding.partIndex ?? 0);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// Non-attribute bindings — original logic
|
|
93
|
+
const element = this.findBindingElement(fragment, binding.index);
|
|
94
|
+
if (element) {
|
|
95
|
+
const bindingInstance = this.createBindingForType(element, binding, processor);
|
|
96
|
+
if (bindingInstance) {
|
|
97
|
+
bindingInstances[binding.index] = bindingInstance;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
return bindingInstances;
|
|
102
|
+
}
|
|
103
|
+
static createBindingForType(element, binding, processor) {
|
|
104
|
+
const name = binding.name || '';
|
|
105
|
+
switch (binding.type) {
|
|
106
|
+
case BindingType.Node:
|
|
107
|
+
const [startMarker, endMarker] = this.findMarkers(element, binding.index);
|
|
108
|
+
return new NodeBinding(element, startMarker, endMarker, processor);
|
|
109
|
+
case BindingType.Property:
|
|
110
|
+
return new PropertyBinding(element, name.slice(1)); // Remove . prefix
|
|
111
|
+
case BindingType.Boolean:
|
|
112
|
+
const booleanAttrName = name.startsWith('?') ? name.slice(1) : name;
|
|
113
|
+
return new BooleanBinding(element, booleanAttrName);
|
|
114
|
+
case BindingType.Event:
|
|
115
|
+
return new EventBinding(element, name, binding.modifiers || []);
|
|
116
|
+
case BindingType.Class:
|
|
117
|
+
debugLog('bindingManager', 'Creating class binding', {
|
|
118
|
+
element: element.tagName,
|
|
119
|
+
name
|
|
120
|
+
});
|
|
121
|
+
return new ClassBinding(element);
|
|
122
|
+
case BindingType.Reference:
|
|
123
|
+
const refName = name.startsWith('#') ? name.slice(1) : name;
|
|
124
|
+
return new ReferenceBinding(element);
|
|
125
|
+
case BindingType.Style:
|
|
126
|
+
return new StyleBinding(element);
|
|
127
|
+
case BindingType.Directive:
|
|
128
|
+
const directiveName = name.replace(/^#/, '');
|
|
129
|
+
return new DirectiveBinding(element, directiveName);
|
|
130
|
+
case BindingType.Bind: {
|
|
131
|
+
const bindProp = name.startsWith('&') ? name.slice(1) : name;
|
|
132
|
+
return new BindBinding(element, bindProp);
|
|
133
|
+
}
|
|
134
|
+
case BindingType.ObjectClass:
|
|
135
|
+
return new ObjectClassBinding(element);
|
|
136
|
+
case BindingType.ObjectStyle:
|
|
137
|
+
return new ObjectStyleBinding(element);
|
|
138
|
+
case BindingType.Spread:
|
|
139
|
+
return new SpreadBinding(element);
|
|
140
|
+
case BindingType.Async: {
|
|
141
|
+
const asyncProp = name.startsWith('~') ? name.slice(1) : name;
|
|
142
|
+
return new AsyncBinding(element, asyncProp);
|
|
143
|
+
}
|
|
144
|
+
default:
|
|
145
|
+
throw new Error(`Unsupported binding type: ${binding.type}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
static findBindingElement(fragment, index) {
|
|
149
|
+
const walker = document.createTreeWalker(fragment, NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_ELEMENT);
|
|
150
|
+
let node;
|
|
151
|
+
while ((node = walker.nextNode())) {
|
|
152
|
+
if (node.nodeType === Node.COMMENT_NODE) {
|
|
153
|
+
const comment = node;
|
|
154
|
+
if (this.isBindingMarker(comment, index)) {
|
|
155
|
+
return comment.parentElement;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else if (node.nodeType === Node.ELEMENT_NODE) {
|
|
159
|
+
const element = node;
|
|
160
|
+
if (this.hasBindingAttribute(element, index)) {
|
|
161
|
+
return element;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
static findMarkers(element, index) {
|
|
168
|
+
const walker = document.createTreeWalker(element.parentElement || element, NodeFilter.SHOW_COMMENT);
|
|
169
|
+
let startMarker = null;
|
|
170
|
+
let endMarker = null;
|
|
171
|
+
let foundStart = false;
|
|
172
|
+
let node;
|
|
173
|
+
while ((node = walker.nextNode())) {
|
|
174
|
+
const comment = node;
|
|
175
|
+
const value = comment.nodeValue || '';
|
|
176
|
+
if (!foundStart && value === `binding:${index}`) {
|
|
177
|
+
startMarker = comment;
|
|
178
|
+
foundStart = true;
|
|
179
|
+
}
|
|
180
|
+
else if (foundStart && value === `/binding:${index}`) {
|
|
181
|
+
endMarker = comment;
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (!startMarker || !endMarker) {
|
|
186
|
+
debugLog('bindingManager', 'Failed to find markers', {
|
|
187
|
+
index,
|
|
188
|
+
element,
|
|
189
|
+
parentHTML: element.parentElement?.innerHTML
|
|
190
|
+
});
|
|
191
|
+
throw new Error(`Could not find markers for binding ${index}`);
|
|
192
|
+
}
|
|
193
|
+
return [startMarker, endMarker];
|
|
194
|
+
}
|
|
195
|
+
static isBindingMarker(comment, index) {
|
|
196
|
+
return comment.nodeValue === `binding:${index}`;
|
|
197
|
+
}
|
|
198
|
+
static hasBindingAttribute(element, index) {
|
|
199
|
+
return Array.from(element.attributes).some(attr => attr.value === `binding:${index}`);
|
|
200
|
+
}
|
|
201
|
+
static async initializeBindings(bindings, values, context) {
|
|
202
|
+
const startTime = performance.now();
|
|
203
|
+
debugLog('bindingManager', 'Initializing bindings', {
|
|
204
|
+
bindingsCount: bindings.length,
|
|
205
|
+
valuesCount: values.length
|
|
206
|
+
});
|
|
207
|
+
const promises = bindings.map(async (binding, i) => {
|
|
208
|
+
try {
|
|
209
|
+
const value = values[i];
|
|
210
|
+
if (value === undefined)
|
|
211
|
+
return;
|
|
212
|
+
if (_isSignal(value)) {
|
|
213
|
+
// Already subscribed to this exact signal — skip (idempotent)
|
|
214
|
+
if (binding.__lastSignal === value)
|
|
215
|
+
return;
|
|
216
|
+
// Cancel previous subscription if the signal instance changed
|
|
217
|
+
const prev = binding.__signalUnsub;
|
|
218
|
+
if (typeof prev === 'function')
|
|
219
|
+
prev();
|
|
220
|
+
binding.__lastSignal = value;
|
|
221
|
+
binding.__signalUnsub = value.subscribe((v) => {
|
|
222
|
+
binding.setValue(v, context);
|
|
223
|
+
});
|
|
224
|
+
// Set current value immediately (no full re-render needed)
|
|
225
|
+
await binding.setValue(value.peek(), context);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
// Handle async directive bindings
|
|
229
|
+
if (binding.setValue.constructor.name === 'AsyncFunction') {
|
|
230
|
+
await binding.setValue(value, context);
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
binding.setValue(value, context);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
console.error(`Error initializing binding ${i}:`, error);
|
|
238
|
+
throw error;
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
await Promise.all(promises);
|
|
242
|
+
this.metrics.initTime = performance.now() - startTime;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=binding-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-manager.js","sourceRoot":"","sources":["../../../src/binding-manager/binding-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents the different types of bindings that can be used in templates
|
|
3
|
+
*/
|
|
4
|
+
export declare enum BindingType {
|
|
5
|
+
/** Text/Node content binding */
|
|
6
|
+
Node = "node",
|
|
7
|
+
/** Event binding (@event) */
|
|
8
|
+
Event = "event",
|
|
9
|
+
/** Property binding (.prop) */
|
|
10
|
+
Property = "property",
|
|
11
|
+
/** Boolean attribute binding (?attr) */
|
|
12
|
+
Boolean = "boolean",
|
|
13
|
+
/** Reference binding (#ref) */
|
|
14
|
+
Reference = "reference",
|
|
15
|
+
/** Class binding (class="...") */
|
|
16
|
+
Class = "class",
|
|
17
|
+
/** Style binding (style="...") */
|
|
18
|
+
Style = "style",
|
|
19
|
+
/** Template binding (for nested templates) */
|
|
20
|
+
Template = "template",
|
|
21
|
+
/** Expression binding (for computed values) */
|
|
22
|
+
Expression = "expression"
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=binding-type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-type.d.ts","sourceRoot":"","sources":["../../../src/binding-manager/binding-type.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,WAAW;IACnB,gCAAgC;IAChC,IAAI,SAAS;IAEb,6BAA6B;IAC7B,KAAK,UAAU;IAEf,+BAA+B;IAC/B,QAAQ,aAAa;IAErB,wCAAwC;IACxC,OAAO,YAAY;IAEnB,+BAA+B;IAC/B,SAAS,cAAc;IAEvB,kCAAkC;IAClC,KAAK,UAAU;IAEf,kCAAkC;IAClC,KAAK,UAAU;IAEf,8CAA8C;IAC9C,QAAQ,aAAa;IAErB,+CAA+C;IAC/C,UAAU,eAAe;CAC5B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents the different types of bindings that can be used in templates
|
|
3
|
+
*/
|
|
4
|
+
export var BindingType;
|
|
5
|
+
(function (BindingType) {
|
|
6
|
+
/** Text/Node content binding */
|
|
7
|
+
BindingType["Node"] = "node";
|
|
8
|
+
/** Event binding (@event) */
|
|
9
|
+
BindingType["Event"] = "event";
|
|
10
|
+
/** Property binding (.prop) */
|
|
11
|
+
BindingType["Property"] = "property";
|
|
12
|
+
/** Boolean attribute binding (?attr) */
|
|
13
|
+
BindingType["Boolean"] = "boolean";
|
|
14
|
+
/** Reference binding (#ref) */
|
|
15
|
+
BindingType["Reference"] = "reference";
|
|
16
|
+
/** Class binding (class="...") */
|
|
17
|
+
BindingType["Class"] = "class";
|
|
18
|
+
/** Style binding (style="...") */
|
|
19
|
+
BindingType["Style"] = "style";
|
|
20
|
+
/** Template binding (for nested templates) */
|
|
21
|
+
BindingType["Template"] = "template";
|
|
22
|
+
/** Expression binding (for computed values) */
|
|
23
|
+
BindingType["Expression"] = "expression";
|
|
24
|
+
})(BindingType || (BindingType = {}));
|
|
25
|
+
//# sourceMappingURL=binding-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-type.js","sourceRoot":"","sources":["../../../src/binding-manager/binding-type.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,WA2BX;AA3BD,WAAY,WAAW;IACnB,gCAAgC;IAChC,4BAAa,CAAA;IAEb,6BAA6B;IAC7B,8BAAe,CAAA;IAEf,+BAA+B;IAC/B,oCAAqB,CAAA;IAErB,wCAAwC;IACxC,kCAAmB,CAAA;IAEnB,+BAA+B;IAC/B,sCAAuB,CAAA;IAEvB,kCAAkC;IAClC,8BAAe,CAAA;IAEf,kCAAkC;IAClC,8BAAe,CAAA;IAEf,8CAA8C;IAC9C,oCAAqB,CAAA;IAErB,+CAA+C;IAC/C,wCAAyB,CAAA;AAC7B,CAAC,EA3BW,WAAW,KAAX,WAAW,QA2BtB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Binding } from './binding';
|
|
2
|
+
/**
|
|
3
|
+
* AsyncBinding — handles `~prop=${promise}`
|
|
4
|
+
*
|
|
5
|
+
* Accepts a Promise (or any thenable). While the promise is pending, sets a
|
|
6
|
+
* `data-pending` attribute on the element and optionally a `pending` property.
|
|
7
|
+
* When the promise resolves, sets `name` property to the resolved value and
|
|
8
|
+
* removes the pending marker. On rejection, sets `name` to undefined and adds
|
|
9
|
+
* a `data-error` attribute with the error message.
|
|
10
|
+
*
|
|
11
|
+
* Supports re-entrant updates: if a new promise arrives before the previous
|
|
12
|
+
* one settles, the previous result is discarded (last-write wins).
|
|
13
|
+
*/
|
|
14
|
+
export declare class AsyncBinding implements Binding {
|
|
15
|
+
private readonly element;
|
|
16
|
+
private readonly name;
|
|
17
|
+
private generation;
|
|
18
|
+
constructor(element: Element, name: string);
|
|
19
|
+
setValue(value: unknown): Promise<void>;
|
|
20
|
+
clear(): void;
|
|
21
|
+
disconnect(): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=async-binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-binding.d.ts","sourceRoot":"","sources":["../../../../src/binding-manager/bindings/async-binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;;;;;;GAWG;AACH,qBAAa,YAAa,YAAW,OAAO;IAIpC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJzB,OAAO,CAAC,UAAU,CAAK;gBAGF,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM;IAG3B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC7C,KAAK,IAAI,IAAI;IAQb,UAAU,IAAI,IAAI;CAGrB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AsyncBinding — handles `~prop=${promise}`
|
|
3
|
+
*
|
|
4
|
+
* Accepts a Promise (or any thenable). While the promise is pending, sets a
|
|
5
|
+
* `data-pending` attribute on the element and optionally a `pending` property.
|
|
6
|
+
* When the promise resolves, sets `name` property to the resolved value and
|
|
7
|
+
* removes the pending marker. On rejection, sets `name` to undefined and adds
|
|
8
|
+
* a `data-error` attribute with the error message.
|
|
9
|
+
*
|
|
10
|
+
* Supports re-entrant updates: if a new promise arrives before the previous
|
|
11
|
+
* one settles, the previous result is discarded (last-write wins).
|
|
12
|
+
*/
|
|
13
|
+
export class AsyncBinding {
|
|
14
|
+
element;
|
|
15
|
+
name;
|
|
16
|
+
generation = 0;
|
|
17
|
+
constructor(element, name) {
|
|
18
|
+
this.element = element;
|
|
19
|
+
this.name = name;
|
|
20
|
+
}
|
|
21
|
+
async setValue(value) {
|
|
22
|
+
if (value === null || value === undefined) {
|
|
23
|
+
this.element[this.name] = value;
|
|
24
|
+
this.element.removeAttribute('data-pending');
|
|
25
|
+
this.element.removeAttribute('data-error');
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Plain (non-promise) value — set directly
|
|
29
|
+
if (typeof value.then !== 'function') {
|
|
30
|
+
this.element[this.name] = value;
|
|
31
|
+
this.element.removeAttribute('data-pending');
|
|
32
|
+
this.element.removeAttribute('data-error');
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const gen = ++this.generation;
|
|
36
|
+
this.element.setAttribute('data-pending', '');
|
|
37
|
+
this.element['pending'] = true;
|
|
38
|
+
try {
|
|
39
|
+
const resolved = await value;
|
|
40
|
+
if (gen !== this.generation)
|
|
41
|
+
return; // superseded
|
|
42
|
+
this.element[this.name] = resolved;
|
|
43
|
+
this.element['pending'] = false;
|
|
44
|
+
this.element.removeAttribute('data-pending');
|
|
45
|
+
this.element.removeAttribute('data-error');
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (gen !== this.generation)
|
|
49
|
+
return; // superseded
|
|
50
|
+
this.element[this.name] = undefined;
|
|
51
|
+
this.element['pending'] = false;
|
|
52
|
+
this.element.removeAttribute('data-pending');
|
|
53
|
+
this.element.setAttribute('data-error', err instanceof Error ? err.message : String(err));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
clear() {
|
|
57
|
+
this.generation++;
|
|
58
|
+
this.element[this.name] = undefined;
|
|
59
|
+
this.element['pending'] = false;
|
|
60
|
+
this.element.removeAttribute('data-pending');
|
|
61
|
+
this.element.removeAttribute('data-error');
|
|
62
|
+
}
|
|
63
|
+
disconnect() {
|
|
64
|
+
this.generation++; // cancel any in-flight promise
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=async-binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-binding.js","sourceRoot":"","sources":["../../../../src/binding-manager/bindings/async-binding.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,YAAY;IAIA;IACA;IAJb,UAAU,GAAG,CAAC,CAAC;IAEvB,YACqB,OAAgB,EAChB,IAAY;QADZ,YAAO,GAAP,OAAO,CAAS;QAChB,SAAI,GAAJ,IAAI,CAAQ;IAC9B,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,KAAc;QACzB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAC3C,OAAO;QACX,CAAC;QAED,2CAA2C;QAC3C,IAAI,OAAQ,KAAa,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAC3C,OAAO;QACX,CAAC;QAED,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAe,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAExC,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAO,KAA0B,CAAC;YACnD,IAAI,GAAG,KAAK,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,aAAa;YACjD,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;YAC3C,IAAI,CAAC,OAAe,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,GAAG,KAAK,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,aAAa;YACjD,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;YAC5C,IAAI,CAAC,OAAe,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,YAAY,CACrB,YAAY,EACZ,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACnD,CAAC;QACN,CAAC;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;QAC5C,IAAI,CAAC,OAAe,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IAED,UAAU;QACN,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,+BAA+B;IACtD,CAAC;CACJ"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Binding } from './binding';
|
|
2
|
+
/**
|
|
3
|
+
* Handles generic attribute value composition — both single and multi-expression.
|
|
4
|
+
* For multi-expression attributes like style="color: ${a}; bg: ${b}",
|
|
5
|
+
* the binding concatenates static string segments with dynamic values.
|
|
6
|
+
*/
|
|
7
|
+
export declare class AttributeBinding implements Binding {
|
|
8
|
+
private element;
|
|
9
|
+
private attrName;
|
|
10
|
+
private strings;
|
|
11
|
+
private values;
|
|
12
|
+
private committed;
|
|
13
|
+
constructor(element: Element, attrName: string, strings: string[]);
|
|
14
|
+
/**
|
|
15
|
+
* Set a specific part's value (for multi-expression attributes).
|
|
16
|
+
*/
|
|
17
|
+
setPartValue(partIndex: number, value: unknown): void;
|
|
18
|
+
/**
|
|
19
|
+
* Standard Binding interface — sets the first (and possibly only) value.
|
|
20
|
+
*/
|
|
21
|
+
setValue(value: unknown): void;
|
|
22
|
+
/**
|
|
23
|
+
* Recompute and apply the full attribute value.
|
|
24
|
+
*/
|
|
25
|
+
private commit;
|
|
26
|
+
clear(): void;
|
|
27
|
+
disconnect(): void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Thin wrapper for subsequent expressions in a multi-expression attribute.
|
|
31
|
+
* Delegates to the parent AttributeBinding with the correct part index.
|
|
32
|
+
*/
|
|
33
|
+
export declare class AttributePartBinding implements Binding {
|
|
34
|
+
private parent;
|
|
35
|
+
private partIndex;
|
|
36
|
+
constructor(parent: AttributeBinding, partIndex: number);
|
|
37
|
+
setValue(value: unknown): void;
|
|
38
|
+
clear(): void;
|
|
39
|
+
disconnect(): void;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=attribute-binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribute-binding.d.ts","sourceRoot":"","sources":["../../../../src/binding-manager/bindings/attribute-binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,OAAO;IAKxC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IANnB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,SAAS,CAAS;gBAGd,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE;IAM7B;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAKrD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B;;OAEG;IACH,OAAO,CAAC,MAAM;IAgBd,KAAK,IAAI,IAAI;IAMb,UAAU,IAAI,IAAI;CAGrB;AAED;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,OAAO;IAE5C,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;gBADT,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,MAAM;IAG7B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B,KAAK,IAAI,IAAI;IAIb,UAAU,IAAI,IAAI;CAGrB"}
|