@miurajs/miura-render 0.0.0 → 0.1.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/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/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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handles generic attribute value composition — both single and multi-expression.
|
|
3
|
+
* For multi-expression attributes like style="color: ${a}; bg: ${b}",
|
|
4
|
+
* the binding concatenates static string segments with dynamic values.
|
|
5
|
+
*/
|
|
6
|
+
export class AttributeBinding {
|
|
7
|
+
element;
|
|
8
|
+
attrName;
|
|
9
|
+
strings;
|
|
10
|
+
values;
|
|
11
|
+
committed = false;
|
|
12
|
+
constructor(element, attrName, strings) {
|
|
13
|
+
this.element = element;
|
|
14
|
+
this.attrName = attrName;
|
|
15
|
+
this.strings = strings;
|
|
16
|
+
// strings has N+1 entries for N expression slots
|
|
17
|
+
this.values = new Array(strings.length - 1).fill('');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Set a specific part's value (for multi-expression attributes).
|
|
21
|
+
*/
|
|
22
|
+
setPartValue(partIndex, value) {
|
|
23
|
+
this.values[partIndex] = value;
|
|
24
|
+
this.commit();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Standard Binding interface — sets the first (and possibly only) value.
|
|
28
|
+
*/
|
|
29
|
+
setValue(value) {
|
|
30
|
+
this.setPartValue(0, value);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Recompute and apply the full attribute value.
|
|
34
|
+
*/
|
|
35
|
+
commit() {
|
|
36
|
+
let result = '';
|
|
37
|
+
for (let i = 0; i < this.strings.length; i++) {
|
|
38
|
+
result += this.strings[i];
|
|
39
|
+
if (i < this.values.length) {
|
|
40
|
+
const v = this.values[i];
|
|
41
|
+
result += v == null ? '' : String(v);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Strip the binding prefix (@, ., ?, #) from the actual DOM attribute name
|
|
45
|
+
const domName = this.attrName.replace(/^[.@?#]/, '');
|
|
46
|
+
this.element.setAttribute(domName, result);
|
|
47
|
+
this.committed = true;
|
|
48
|
+
}
|
|
49
|
+
clear() {
|
|
50
|
+
const domName = this.attrName.replace(/^[.@?#]/, '');
|
|
51
|
+
this.element.removeAttribute(domName);
|
|
52
|
+
this.committed = false;
|
|
53
|
+
}
|
|
54
|
+
disconnect() {
|
|
55
|
+
this.clear();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Thin wrapper for subsequent expressions in a multi-expression attribute.
|
|
60
|
+
* Delegates to the parent AttributeBinding with the correct part index.
|
|
61
|
+
*/
|
|
62
|
+
export class AttributePartBinding {
|
|
63
|
+
parent;
|
|
64
|
+
partIndex;
|
|
65
|
+
constructor(parent, partIndex) {
|
|
66
|
+
this.parent = parent;
|
|
67
|
+
this.partIndex = partIndex;
|
|
68
|
+
}
|
|
69
|
+
setValue(value) {
|
|
70
|
+
this.parent.setPartValue(this.partIndex, value);
|
|
71
|
+
}
|
|
72
|
+
clear() {
|
|
73
|
+
// Only the parent AttributeBinding clears the attribute
|
|
74
|
+
}
|
|
75
|
+
disconnect() {
|
|
76
|
+
// Managed by parent
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=attribute-binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribute-binding.js","sourceRoot":"","sources":["../../../../src/binding-manager/bindings/attribute-binding.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IAKb;IACA;IACA;IANJ,MAAM,CAAY;IAClB,SAAS,GAAG,KAAK,CAAC;IAE1B,YACY,OAAgB,EAChB,QAAgB,EAChB,OAAiB;QAFjB,YAAO,GAAP,OAAO,CAAS;QAChB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,YAAO,GAAP,OAAO,CAAU;QAEzB,iDAAiD;QACjD,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAAiB,EAAE,KAAc;QAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAc;QACnB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,MAAM;QACV,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;QAED,2EAA2E;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,UAAU;QACN,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAEjB;IACA;IAFZ,YACY,MAAwB,EACxB,SAAiB;QADjB,WAAM,GAAN,MAAM,CAAkB;QACxB,cAAS,GAAT,SAAS,CAAQ;IAC1B,CAAC;IAEJ,QAAQ,CAAC,KAAc;QACnB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,KAAK;QACD,wDAAwD;IAC5D,CAAC;IAED,UAAU;QACN,oBAAoB;IACxB,CAAC;CACJ"}
|