@ibyar/core 0.3.3 → 0.3.6

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.
@@ -1,5 +1,6 @@
1
1
  import type { ReactiveScope } from '@ibyar/expressions';
2
2
  import type { TypeOf } from '../utils/typeof.js';
3
+ import type { ElementReactiveScope } from '../directive/providers.js';
3
4
  import { EventEmitter } from './events.js';
4
5
  import { PropertyRef, ComponentRef } from './component.js';
5
6
  import { Model } from '../model/change-detection.js';
@@ -16,7 +17,7 @@ export interface BaseComponent<T extends Object> extends CustomElement {
16
17
  _modelScope: ReactiveScope<T & Model & {
17
18
  [key: string]: any;
18
19
  }>;
19
- _viewScope: ReactiveScope<HTMLComponent<T>>;
20
+ _viewScope: ElementReactiveScope;
20
21
  getComponentRef(): ComponentRef<T>;
21
22
  setParentComponent<V>(parent: HTMLComponent<V>): void;
22
23
  getParentComponent<V>(): HTMLComponent<V>;
@@ -1 +1 @@
1
- {"version":3,"file":"custom-element.js","sourceRoot":"","sources":["../../../src/core/component/custom-element.ts"],"names":[],"mappings":"AA+CA,MAAM,UAAU,eAAe,CAAC,MAAW;IAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;WAChC,MAAM,YAAY,WAAW,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAW,EAAE,SAAyB;IAC3E,OAAO,eAAe,CAAC,MAAM,CAAC;WAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,SAAS,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAoB;IACjD,OAAO,OAAO,IAAI,OAAO,YAAY,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoB;IACxD,OAAO,OAAO,IAAI,OAAO,YAAY,kBAAkB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5F,CAAC","sourcesContent":["import type { ReactiveScope } from '@ibyar/expressions';\nimport type { TypeOf } from '../utils/typeof.js';\nimport { EventEmitter } from './events.js';\nimport { PropertyRef, ComponentRef } from './component.js';\nimport { Model } from '../model/change-detection.js';\n\nexport interface CustomElement {\n\tadoptedCallback(): void;\n\tattributeChangedCallback(name: string, oldValue: any, newValue: any): void;\n\tconnectedCallback(): void;\n\tdisconnectedCallback(): void;\n}\n\nexport interface BaseComponent<T extends Object> extends CustomElement {\n\n\t_model: T & Model & { [key: string]: any };\n\t_modelScope: ReactiveScope<T & Model & { [key: string]: any; }>;\n\t_viewScope: ReactiveScope<HTMLComponent<T>>;\n\n\tgetComponentRef(): ComponentRef<T>;\n\n\tsetParentComponent<V>(parent: HTMLComponent<V>): void;\n\tgetParentComponent<V>(): HTMLComponent<V>;\n\thasParentComponent(): boolean;\n\n\thasInputStartWith(viewProp: string): boolean;\n\tgetInputStartWith(viewProp: string): PropertyRef | undefined;\n\tgetInput(viewProp: string): PropertyRef | undefined;\n\tgetInputValue(viewProp: string): any;\n\tsetInputValue(viewProp: string, value: any): void;\n\n\thasInput(viewProp: string): boolean;\n\thasProp(propName: string): boolean;\n\thasOutput(viewProp: string): boolean;\n\n\tgetOutput(viewProp: string): PropertyRef | undefined;\n\tgetEventEmitter<V>(viewProp: string): EventEmitter<V> | undefined;\n\n\ttriggerOutput(eventName: string, value?: any): void;\n\ttriggerModelChange(eventName: string, value?: any, source?: HTMLElement): void;\n\temitRootChanges(): void;\n\temitChanges(...events: string[]): void;\n\n}\n\nexport interface HTMLComponent<T extends Object> extends BaseComponent<T>, HTMLElement { }\n\nexport function isHTMLComponent(object: any): object is HTMLComponent<any> {\n\treturn Reflect.has(object, '_model')\n\t\t&& object instanceof HTMLElement;\n}\n\nexport function isHTMLComponentOfType(object: any, typeClass: TypeOf<Object>): object is HTMLComponent<any> {\n\treturn isHTMLComponent(object)\n\t\t&& Reflect.get(object, '_model') instanceof typeClass;\n}\n\nexport function isHTMLElement(element: HTMLElement): element is HTMLElement {\n\treturn element && element instanceof HTMLElement && !element.tagName?.includes('-');\n}\n\nexport function isHTMLUnknownElement(element: HTMLElement): element is HTMLElement {\n\treturn element && element instanceof HTMLUnknownElement && !element.tagName?.includes('-');\n}\n\n/**\n * Lifecycle callbacks\n * A map, whose keys are the strings \"connectedCallback\", \"disconnectedCallback\", \"adoptedCallback\", \"attributeChangedCallback\", \n * \"formAssociatedCallback\", \"formDisabledCallback\", \"formResetCallback\", and \"formStateRestoreCallback\" \n * https://html.spec.whatwg.org/multipage/custom-elements.html#concept-custom-element-definition-lifecycle-callbacks\n * \n * A form-associated custom element API includes a set of extra lifecycle callbacks to tie in to the form lifecycle.\n * The callbacks are optional: only implement a callback if your element needs to do something at that point in the lifecycle.\n * https://html.spec.whatwg.org/multipage/custom-elements.html#the-elementinternals-interface \n * https://docs.google.com/document/d/1JO8puctCSpW-ZYGU8lF-h4FWRIDQNDVexzHoOQ2iQmY/edit\n */\nexport interface CustomFormElement extends CustomElement {\n\n\t/**\n\t * Called when the browser associates the element with a form element,\n\t * or disassociates the element from a form element.\n\t * @param form \n\t */\n\tformAssociatedCallback(form: HTMLFormElement): void;\n\n\t/**\n\t * Called after the disabled state of the element changes,\n\t * either because the disabled attribute of this element was added or removed;\n\t * or because the disabled state changed on a <fieldset> that's an ancestor of this element.\n\t * The disabled parameter represents the new disabled state of the element.\n\t * The element may, for example, disable elements in its shadow DOM when it is disabled.\n\t * @param disabled \n\t */\n\tformDisabledCallback(disabled: boolean): void;\n\n\t/**\n\t * Called after the form is reset.\n\t * The element should reset itself to some kind of default state.\n\t * For <input> elements, this usually involves setting the value property to\n\t * match the value attribute set in markup (or in the case of a checkbox,\n\t * setting the checked property to match the checked attribute.\n\t */\n\tformResetCallback(): void;\n\n\t/**\n\t * Called in one of two circumstances:\n\t * When the browser restores the state of the element (for example, after a navigation, or when the browser restarts).\n\t * The mode argument is \"restore\" in this case.\n\t * \n\t * When the browser's input-assist features such as form autofilling sets a value.\n\t * The mode argument is \"autocomplete\" in this case.\n\t * \n\t * The type of the first argument depends on how the setFormValue() method was called.\n\t * For more details, see Restoring form state.\n\t */\n\tformStateRestoreCallback(value: any, mode: 'restore' | 'autocomplete'): void;\n}\n\nexport interface BaseFormElementComponent<T extends Object> extends BaseComponent<T>, CustomFormElement { }\n\nexport interface HTMLFormElementComponent<T extends Object> extends BaseFormElementComponent<T>, HTMLComponent<T> { }\n\nexport type HTMLFormElement = HTMLButtonElement | HTMLDataListElement | HTMLFieldSetElement | HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n"]}
1
+ {"version":3,"file":"custom-element.js","sourceRoot":"","sources":["../../../src/core/component/custom-element.ts"],"names":[],"mappings":"AAgDA,MAAM,UAAU,eAAe,CAAC,MAAW;IAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;WAChC,MAAM,YAAY,WAAW,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAW,EAAE,SAAyB;IAC3E,OAAO,eAAe,CAAC,MAAM,CAAC;WAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,SAAS,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAoB;IACjD,OAAO,OAAO,IAAI,OAAO,YAAY,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoB;IACxD,OAAO,OAAO,IAAI,OAAO,YAAY,kBAAkB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5F,CAAC","sourcesContent":["import type { ReactiveScope } from '@ibyar/expressions';\nimport type { TypeOf } from '../utils/typeof.js';\nimport type { ElementReactiveScope } from '../directive/providers.js';\nimport { EventEmitter } from './events.js';\nimport { PropertyRef, ComponentRef } from './component.js';\nimport { Model } from '../model/change-detection.js';\n\nexport interface CustomElement {\n\tadoptedCallback(): void;\n\tattributeChangedCallback(name: string, oldValue: any, newValue: any): void;\n\tconnectedCallback(): void;\n\tdisconnectedCallback(): void;\n}\n\nexport interface BaseComponent<T extends Object> extends CustomElement {\n\n\t_model: T & Model & { [key: string]: any };\n\t_modelScope: ReactiveScope<T & Model & { [key: string]: any; }>;\n\t_viewScope: ElementReactiveScope;\n\n\tgetComponentRef(): ComponentRef<T>;\n\n\tsetParentComponent<V>(parent: HTMLComponent<V>): void;\n\tgetParentComponent<V>(): HTMLComponent<V>;\n\thasParentComponent(): boolean;\n\n\thasInputStartWith(viewProp: string): boolean;\n\tgetInputStartWith(viewProp: string): PropertyRef | undefined;\n\tgetInput(viewProp: string): PropertyRef | undefined;\n\tgetInputValue(viewProp: string): any;\n\tsetInputValue(viewProp: string, value: any): void;\n\n\thasInput(viewProp: string): boolean;\n\thasProp(propName: string): boolean;\n\thasOutput(viewProp: string): boolean;\n\n\tgetOutput(viewProp: string): PropertyRef | undefined;\n\tgetEventEmitter<V>(viewProp: string): EventEmitter<V> | undefined;\n\n\ttriggerOutput(eventName: string, value?: any): void;\n\ttriggerModelChange(eventName: string, value?: any, source?: HTMLElement): void;\n\temitRootChanges(): void;\n\temitChanges(...events: string[]): void;\n\n}\n\nexport interface HTMLComponent<T extends Object> extends BaseComponent<T>, HTMLElement { }\n\nexport function isHTMLComponent(object: any): object is HTMLComponent<any> {\n\treturn Reflect.has(object, '_model')\n\t\t&& object instanceof HTMLElement;\n}\n\nexport function isHTMLComponentOfType(object: any, typeClass: TypeOf<Object>): object is HTMLComponent<any> {\n\treturn isHTMLComponent(object)\n\t\t&& Reflect.get(object, '_model') instanceof typeClass;\n}\n\nexport function isHTMLElement(element: HTMLElement): element is HTMLElement {\n\treturn element && element instanceof HTMLElement && !element.tagName?.includes('-');\n}\n\nexport function isHTMLUnknownElement(element: HTMLElement): element is HTMLElement {\n\treturn element && element instanceof HTMLUnknownElement && !element.tagName?.includes('-');\n}\n\n/**\n * Lifecycle callbacks\n * A map, whose keys are the strings \"connectedCallback\", \"disconnectedCallback\", \"adoptedCallback\", \"attributeChangedCallback\", \n * \"formAssociatedCallback\", \"formDisabledCallback\", \"formResetCallback\", and \"formStateRestoreCallback\" \n * https://html.spec.whatwg.org/multipage/custom-elements.html#concept-custom-element-definition-lifecycle-callbacks\n * \n * A form-associated custom element API includes a set of extra lifecycle callbacks to tie in to the form lifecycle.\n * The callbacks are optional: only implement a callback if your element needs to do something at that point in the lifecycle.\n * https://html.spec.whatwg.org/multipage/custom-elements.html#the-elementinternals-interface \n * https://docs.google.com/document/d/1JO8puctCSpW-ZYGU8lF-h4FWRIDQNDVexzHoOQ2iQmY/edit\n */\nexport interface CustomFormElement extends CustomElement {\n\n\t/**\n\t * Called when the browser associates the element with a form element,\n\t * or disassociates the element from a form element.\n\t * @param form \n\t */\n\tformAssociatedCallback(form: HTMLFormElement): void;\n\n\t/**\n\t * Called after the disabled state of the element changes,\n\t * either because the disabled attribute of this element was added or removed;\n\t * or because the disabled state changed on a <fieldset> that's an ancestor of this element.\n\t * The disabled parameter represents the new disabled state of the element.\n\t * The element may, for example, disable elements in its shadow DOM when it is disabled.\n\t * @param disabled \n\t */\n\tformDisabledCallback(disabled: boolean): void;\n\n\t/**\n\t * Called after the form is reset.\n\t * The element should reset itself to some kind of default state.\n\t * For <input> elements, this usually involves setting the value property to\n\t * match the value attribute set in markup (or in the case of a checkbox,\n\t * setting the checked property to match the checked attribute.\n\t */\n\tformResetCallback(): void;\n\n\t/**\n\t * Called in one of two circumstances:\n\t * When the browser restores the state of the element (for example, after a navigation, or when the browser restarts).\n\t * The mode argument is \"restore\" in this case.\n\t * \n\t * When the browser's input-assist features such as form autofilling sets a value.\n\t * The mode argument is \"autocomplete\" in this case.\n\t * \n\t * The type of the first argument depends on how the setFormValue() method was called.\n\t * For more details, see Restoring form state.\n\t */\n\tformStateRestoreCallback(value: any, mode: 'restore' | 'autocomplete'): void;\n}\n\nexport interface BaseFormElementComponent<T extends Object> extends BaseComponent<T>, CustomFormElement { }\n\nexport interface HTMLFormElementComponent<T extends Object> extends BaseFormElementComponent<T>, HTMLComponent<T> { }\n\nexport type HTMLFormElement = HTMLButtonElement | HTMLDataListElement | HTMLFieldSetElement | HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n"]}
@@ -1,11 +1,11 @@
1
- import { Scope } from '@ibyar/expressions';
1
+ import { ReactiveScope } from '@ibyar/expressions';
2
2
  import { AttributeDirective } from './directive.js';
3
3
  export declare type ElementContext = {
4
4
  this: HTMLElement;
5
5
  } & {
6
6
  [key: string]: AttributeDirective | undefined;
7
7
  };
8
- export declare class ElementReactiveScope extends Scope<ElementContext> {
8
+ export declare class ElementReactiveScope extends ReactiveScope<ElementContext> {
9
9
  private el;
10
10
  private directiveMap;
11
11
  constructor(el: HTMLElement);
@@ -1,8 +1,8 @@
1
- import { Scope } from '@ibyar/expressions';
1
+ import { ReactiveScope } from '@ibyar/expressions';
2
2
  import { isOnInit } from '../component/lifecycle.js';
3
3
  import { ClassRegistryProvider } from '../providers/provider.js';
4
4
  import { AttributeDirective } from './directive.js';
5
- export class ElementReactiveScope extends Scope {
5
+ export class ElementReactiveScope extends ReactiveScope {
6
6
  constructor(el) {
7
7
  super({}, 'block');
8
8
  this.el = el;
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/core/directive/providers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scope } from '@ibyar/expressions';\nimport { isOnInit } from '../component/lifecycle.js';\nimport { ClassRegistryProvider } from '../providers/provider.js';\nimport { AttributeDirective } from './directive.js';\n\nexport type ElementContext = { this: HTMLElement } & { [key: string]: AttributeDirective | undefined; };\nexport class ElementReactiveScope extends Scope<ElementContext> {\n\tprivate directiveMap: Map<string, AttributeDirective> = new Map();\n\tconstructor(private el: HTMLElement) {\n\t\tsuper({} as ElementContext, 'block');\n\t\tthis.context.this = el;\n\t}\n\tgetElement() {\n\t\treturn this.el;\n\t}\n\tgetDirectives() {\n\t\treturn this.directiveMap;\n\t}\n\tget(propertyKey: PropertyKey): any {\n\t\tif (propertyKey === 'this') {\n\t\t\treturn this.el;\n\t\t}\n\t\tif (this.directiveMap.has(propertyKey as string)) {\n\t\t\tconst directive = this.directiveMap.get(propertyKey as string)!;\n\t\t\treturn directive;\n\t\t}\n\t\tfor (const directive of this.directiveMap.values()) {\n\t\t\tif (propertyKey in directive) {\n\t\t\t\treturn Reflect.get(directive, propertyKey);\n\t\t\t}\n\t\t}\n\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<any>(propertyKey as string);\n\t\tif (directiveRef && directiveRef.modelClass instanceof AttributeDirective) {\n\t\t\tconst directive = new directiveRef.modelClass(this.el) as AttributeDirective;\n\t\t\tthis.directiveMap.set(propertyKey as string, directive);\n\t\t\tthis.context[propertyKey as string] = directive;\n\t\t\tif (isOnInit(directive)) {\n\t\t\t\tdirective.onInit();\n\t\t\t}\n\t\t\treturn Reflect.get(directive, propertyKey as string);\n\t\t}\n\t\treturn void 0;\n\t}\n\tset(propertyKey: PropertyKey, value: any, receiver?: any): boolean {\n\t\tif (propertyKey in this.el) {\n\t\t\treturn Reflect.set(this.el, propertyKey, value);\n\t\t}\n\t\tif (this.directiveMap.has(propertyKey as string)) {\n\t\t\tconst directive = this.directiveMap.get(propertyKey as string)!;\n\t\t\treturn Reflect.set(directive, propertyKey, value);\n\t\t}\n\t\tfor (const directive of this.directiveMap.values()) {\n\t\t\tif (propertyKey in directive) {\n\t\t\t\treturn Reflect.set(directive, propertyKey, value);\n\t\t\t}\n\t\t}\n\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<any>(propertyKey as string);\n\t\tif (directiveRef && directiveRef.modelClass.prototype instanceof AttributeDirective) {\n\t\t\tconst directive = new directiveRef.modelClass(this.el) as AttributeDirective;\n\t\t\tthis.directiveMap.set(propertyKey as string, directive);\n\t\t\tconst result = Reflect.set(directive, propertyKey, value);\n\t\t\tif (isOnInit(directive)) {\n\t\t\t\tdirective.onInit();\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\treturn false;\n\t}\n\thas(propertyKey: string): boolean {\n\t\tif (propertyKey in this.context) {\n\t\t\treturn true;\n\t\t}\n\t\tif (this.directiveMap.has(propertyKey)) {\n\t\t\treturn true;\n\t\t}\n\t\tfor (const directive of this.directiveMap.values()) {\n\t\t\tif (propertyKey in directive) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tif (ClassRegistryProvider.hasDirective(propertyKey)) {\n\t\t\treturn true;\n\t\t}\n\t\tif (ClassRegistryProvider.directiveHasInput(propertyKey)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n}\n"]}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/core/directive/providers.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactiveScope } from '@ibyar/expressions';\nimport { isOnInit } from '../component/lifecycle.js';\nimport { ClassRegistryProvider } from '../providers/provider.js';\nimport { AttributeDirective } from './directive.js';\n\nexport type ElementContext = { this: HTMLElement } & { [key: string]: AttributeDirective | undefined; };\nexport class ElementReactiveScope extends ReactiveScope<ElementContext> {\n\tprivate directiveMap: Map<string, AttributeDirective> = new Map();\n\tconstructor(private el: HTMLElement) {\n\t\tsuper({} as ElementContext, 'block');\n\t\tthis.context.this = el;\n\t}\n\tgetElement() {\n\t\treturn this.el;\n\t}\n\tgetDirectives() {\n\t\treturn this.directiveMap;\n\t}\n\tget(propertyKey: PropertyKey): any {\n\t\tif (propertyKey === 'this') {\n\t\t\treturn this.el;\n\t\t}\n\t\tif (this.directiveMap.has(propertyKey as string)) {\n\t\t\tconst directive = this.directiveMap.get(propertyKey as string)!;\n\t\t\treturn directive;\n\t\t}\n\t\tfor (const directive of this.directiveMap.values()) {\n\t\t\tif (propertyKey in directive) {\n\t\t\t\treturn Reflect.get(directive, propertyKey);\n\t\t\t}\n\t\t}\n\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<any>(propertyKey as string);\n\t\tif (directiveRef && directiveRef.modelClass instanceof AttributeDirective) {\n\t\t\tconst directive = new directiveRef.modelClass(this.el) as AttributeDirective;\n\t\t\tthis.directiveMap.set(propertyKey as string, directive);\n\t\t\tthis.context[propertyKey as string] = directive;\n\t\t\tif (isOnInit(directive)) {\n\t\t\t\tdirective.onInit();\n\t\t\t}\n\t\t\treturn Reflect.get(directive, propertyKey as string);\n\t\t}\n\t\treturn void 0;\n\t}\n\tset(propertyKey: PropertyKey, value: any, receiver?: any): boolean {\n\t\tif (propertyKey in this.el) {\n\t\t\treturn Reflect.set(this.el, propertyKey, value);\n\t\t}\n\t\tif (this.directiveMap.has(propertyKey as string)) {\n\t\t\tconst directive = this.directiveMap.get(propertyKey as string)!;\n\t\t\treturn Reflect.set(directive, propertyKey, value);\n\t\t}\n\t\tfor (const directive of this.directiveMap.values()) {\n\t\t\tif (propertyKey in directive) {\n\t\t\t\treturn Reflect.set(directive, propertyKey, value);\n\t\t\t}\n\t\t}\n\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<any>(propertyKey as string);\n\t\tif (directiveRef && directiveRef.modelClass.prototype instanceof AttributeDirective) {\n\t\t\tconst directive = new directiveRef.modelClass(this.el) as AttributeDirective;\n\t\t\tthis.directiveMap.set(propertyKey as string, directive);\n\t\t\tconst result = Reflect.set(directive, propertyKey, value);\n\t\t\tif (isOnInit(directive)) {\n\t\t\t\tdirective.onInit();\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\treturn false;\n\t}\n\thas(propertyKey: string): boolean {\n\t\tif (propertyKey in this.context) {\n\t\t\treturn true;\n\t\t}\n\t\tif (this.directiveMap.has(propertyKey)) {\n\t\t\treturn true;\n\t\t}\n\t\tfor (const directive of this.directiveMap.values()) {\n\t\t\tif (propertyKey in directive) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tif (ClassRegistryProvider.hasDirective(propertyKey)) {\n\t\t\treturn true;\n\t\t}\n\t\tif (ClassRegistryProvider.directiveHasInput(propertyKey)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n}\n"]}
@@ -12,17 +12,23 @@ function convertToMemberAccessStyle(source) {
12
12
  }
13
13
  return dashSplits[0] + dashSplits.splice(1).map(s => (s[0].toUpperCase() + s.substring(1))).join('');
14
14
  }
15
+ function checkAndValidateObjectSyntax(source) {
16
+ if (source.startsWith('{')) {
17
+ return `(${source})`;
18
+ }
19
+ return source;
20
+ }
15
21
  function parseLiveAttribute(attr) {
16
- const elementSource = `this.${JavaScriptParser.parse(convertToMemberAccessStyle(attr.name))}`;
22
+ const elementSource = `this.${convertToMemberAccessStyle(attr.name)}`;
17
23
  const elementExpression = JavaScriptParser.parse(elementSource);
18
- const modelExpression = JavaScriptParser.parse(attr.value);
24
+ const modelExpression = JavaScriptParser.parse(checkAndValidateObjectSyntax(attr.value));
19
25
  attr.expression = new HTMLNodeAssignmentExpression(elementExpression, modelExpression);
20
26
  attr.callbackExpression = new AssignmentExpression('=', modelExpression, elementExpression);
21
27
  }
22
28
  function parseLiveAttributeUpdateElement(attr) {
23
- const elementSource = `this.${JavaScriptParser.parse(convertToMemberAccessStyle(attr.name))}`;
29
+ const elementSource = `this.${convertToMemberAccessStyle(attr.name)}`;
24
30
  const elementExpression = JavaScriptParser.parse(elementSource);
25
- const modelExpression = JavaScriptParser.parse(attr.value);
31
+ const modelExpression = JavaScriptParser.parse(checkAndValidateObjectSyntax(attr.value));
26
32
  attr.expression = new HTMLNodeAssignmentExpression(elementExpression, modelExpression);
27
33
  }
28
34
  function parseOutputExpression(attr) {
@@ -1 +1 @@
1
- {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../src/core/html/expression.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tBaseNode, DOMDirectiveNode, DOMElementNode, DOMFragmentNode, DOMNode,\n\tDOMParentNode, ElementAttribute, LiveAttribute, LiveTextContent\n} from '@ibyar/elements';\nimport { AssignmentExpression, ExpressionNode, JavaScriptParser } from '@ibyar/expressions';\nimport { HTMLNodeAssignmentExpression, TextNodeAssignmentExpression } from './update.js';\n\nconst ThisTextContent = JavaScriptParser.parse('this.textContent');\nfunction parseLiveText(text: LiveTextContent<ExpressionNode>) {\n\ttext.expression = new TextNodeAssignmentExpression(ThisTextContent, JavaScriptParser.parse(text.value));\n}\n\nfunction convertToMemberAccessStyle(source: string) {\n\tconst dashSplits = source.split('-');\n\tif (dashSplits.length === 1) {\n\t\treturn source;\n\t}\n\treturn dashSplits[0] + dashSplits.splice(1).map(s => (s[0].toUpperCase() + s.substring(1))).join('');\n}\nfunction parseLiveAttribute(attr: LiveAttribute<ExpressionNode>) {\n\tconst elementSource = `this.${JavaScriptParser.parse(convertToMemberAccessStyle(attr.name))}`;\n\tconst elementExpression = JavaScriptParser.parse(elementSource);\n\tconst modelExpression = JavaScriptParser.parse(attr.value);\n\n\tattr.expression = new HTMLNodeAssignmentExpression(elementExpression, modelExpression);\n\tattr.callbackExpression = new AssignmentExpression('=', modelExpression, elementExpression);\n}\n\nfunction parseLiveAttributeUpdateElement(attr: LiveAttribute<ExpressionNode>) {\n\tconst elementSource = `this.${JavaScriptParser.parse(convertToMemberAccessStyle(attr.name))}`;\n\tconst elementExpression = JavaScriptParser.parse(elementSource);\n\tconst modelExpression = JavaScriptParser.parse(attr.value);\n\tattr.expression = new HTMLNodeAssignmentExpression(elementExpression, modelExpression);\n}\n\nfunction parseOutputExpression(attr: ElementAttribute<string, string, ExpressionNode>) {\n\tattr.expression = JavaScriptParser.parse(attr.value);\n}\n\nfunction parseElementAttribute(attr: ElementAttribute<string, any, ExpressionNode>) {\n\tattr.expression = JavaScriptParser.parse('this.' + convertToMemberAccessStyle(attr.name));\n}\n\n\nfunction parseBaseNode(base: BaseNode<ExpressionNode>) {\n\tbase.inputs?.forEach(parseLiveAttributeUpdateElement);\n\tbase.outputs?.forEach(parseOutputExpression);\n\tbase.twoWayBinding?.forEach(parseLiveAttribute);\n\tbase.templateAttrs?.forEach(parseLiveAttribute);\n\tbase.attributes?.forEach(parseElementAttribute);\n\tparseDomParentNode(base);\n}\n\nfunction parseChild(child: DOMNode<ExpressionNode>) {\n\tif (child instanceof DOMElementNode) {\n\t\t// DomElementNode\n\t\tparseBaseNode(child);\n\t} else if (child instanceof DOMDirectiveNode) {\n\t\t// DomDirectiveNode\n\t\tparseDomParentNode(child);\n\t} else if (child instanceof LiveTextContent) {\n\t\tparseLiveText(child);\n\t}\n}\nfunction parseDomParentNode(parent: DOMParentNode<ExpressionNode>) {\n\tparent.children?.forEach(parseChild);\n}\n\nexport function buildExpressionNodes(node: DOMNode<ExpressionNode>) {\n\tif (node instanceof DOMFragmentNode) {\n\t\tparseDomParentNode(node);\n\t} else {\n\t\tparseChild(node);\n\t}\n}\n"]}
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../src/core/html/expression.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tBaseNode, DOMDirectiveNode, DOMElementNode, DOMFragmentNode, DOMNode,\n\tDOMParentNode, ElementAttribute, LiveAttribute, LiveTextContent\n} from '@ibyar/elements';\nimport { AssignmentExpression, ExpressionNode, JavaScriptParser } from '@ibyar/expressions';\nimport { HTMLNodeAssignmentExpression, TextNodeAssignmentExpression } from './update.js';\n\nconst ThisTextContent = JavaScriptParser.parse('this.textContent');\nfunction parseLiveText(text: LiveTextContent<ExpressionNode>) {\n\ttext.expression = new TextNodeAssignmentExpression(ThisTextContent, JavaScriptParser.parse(text.value));\n}\n\nfunction convertToMemberAccessStyle(source: string) {\n\tconst dashSplits = source.split('-');\n\tif (dashSplits.length === 1) {\n\t\treturn source;\n\t}\n\treturn dashSplits[0] + dashSplits.splice(1).map(s => (s[0].toUpperCase() + s.substring(1))).join('');\n}\n\n/**\n * warp js code with `()` if necessary\n * \n * `{name: 'alex'}` will be `({name: 'alex'})`\n * \n * @param params \n */\nfunction checkAndValidateObjectSyntax(source: string) {\n\tif (source.startsWith('{')) {\n\t\treturn `(${source})`;\n\t}\n\treturn source;\n}\nfunction parseLiveAttribute(attr: LiveAttribute<ExpressionNode>) {\n\tconst elementSource = `this.${convertToMemberAccessStyle(attr.name)}`;\n\tconst elementExpression = JavaScriptParser.parse(elementSource);\n\tconst modelExpression = JavaScriptParser.parse(checkAndValidateObjectSyntax(attr.value));\n\n\tattr.expression = new HTMLNodeAssignmentExpression(elementExpression, modelExpression);\n\tattr.callbackExpression = new AssignmentExpression('=', modelExpression, elementExpression);\n}\n\nfunction parseLiveAttributeUpdateElement(attr: LiveAttribute<ExpressionNode>) {\n\tconst elementSource = `this.${convertToMemberAccessStyle(attr.name)}`;\n\tconst elementExpression = JavaScriptParser.parse(elementSource);\n\tconst modelExpression = JavaScriptParser.parse(checkAndValidateObjectSyntax(attr.value));\n\tattr.expression = new HTMLNodeAssignmentExpression(elementExpression, modelExpression);\n}\n\nfunction parseOutputExpression(attr: ElementAttribute<string, string, ExpressionNode>) {\n\tattr.expression = JavaScriptParser.parse(attr.value);\n}\n\nfunction parseElementAttribute(attr: ElementAttribute<string, any, ExpressionNode>) {\n\tattr.expression = JavaScriptParser.parse('this.' + convertToMemberAccessStyle(attr.name));\n}\n\n\nfunction parseBaseNode(base: BaseNode<ExpressionNode>) {\n\tbase.inputs?.forEach(parseLiveAttributeUpdateElement);\n\tbase.outputs?.forEach(parseOutputExpression);\n\tbase.twoWayBinding?.forEach(parseLiveAttribute);\n\tbase.templateAttrs?.forEach(parseLiveAttribute);\n\tbase.attributes?.forEach(parseElementAttribute);\n\tparseDomParentNode(base);\n}\n\nfunction parseChild(child: DOMNode<ExpressionNode>) {\n\tif (child instanceof DOMElementNode) {\n\t\t// DomElementNode\n\t\tparseBaseNode(child);\n\t} else if (child instanceof DOMDirectiveNode) {\n\t\t// DomDirectiveNode\n\t\tparseDomParentNode(child);\n\t} else if (child instanceof LiveTextContent) {\n\t\tparseLiveText(child);\n\t}\n}\nfunction parseDomParentNode(parent: DOMParentNode<ExpressionNode>) {\n\tparent.children?.forEach(parseChild);\n}\n\nexport function buildExpressionNodes(node: DOMNode<ExpressionNode>) {\n\tif (node instanceof DOMFragmentNode) {\n\t\tparseDomParentNode(node);\n\t} else {\n\t\tparseChild(node);\n\t}\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibyar/core",
3
- "version": "0.3.3",
3
+ "version": "0.3.6",
4
4
  "description": "Implements Aurora's core functionality, low-level services, and utilities",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/ibyar/aurora",
@@ -15,8 +15,8 @@
15
15
  "access": "public"
16
16
  },
17
17
  "dependencies": {
18
- "@ibyar/elements": "^0.3.3",
19
- "@ibyar/expressions": "^0.3.3",
18
+ "@ibyar/elements": "^0.3.6",
19
+ "@ibyar/expressions": "^0.3.6",
20
20
  "reflect-metadata": "^0.1.13",
21
21
  "tslib": "^2.3.1"
22
22
  },
@@ -30,6 +30,10 @@
30
30
  "aurora",
31
31
  "ibyar",
32
32
  "custom-elements",
33
+ "web-components",
34
+ "webcomponents",
35
+ "shadow-dom",
36
+ "shadowdom",
33
37
  "dependency-injection",
34
38
  "reflect-metadata",
35
39
  "services",
@@ -48,8 +52,7 @@
48
52
  "elements-info",
49
53
  "element",
50
54
  "interceptor",
51
- "shadow-dom",
52
55
  "typescript"
53
56
  ],
54
- "gitHead": "57f8f29d0fb25275c90286fdd9ebbce75bef5ac1"
57
+ "gitHead": "b641c29b0dbac9a13c5ee2ef6f2a0b0bf427a10d"
55
58
  }
package/view/base-view.js CHANGED
@@ -1,8 +1,8 @@
1
- import { ReactiveScope } from '@ibyar/expressions';
2
1
  import { isAfterContentChecked, isAfterContentInit, isAfterViewChecked, isAfterViewInit, isDoCheck, isOnChanges, isOnDestroy, isOnInit } from '../component/lifecycle.js';
3
2
  import { defineModel } from '../model/change-detection.js';
4
3
  import { ComponentRender } from './render.js';
5
4
  import { ElementModelReactiveScope } from '../component/provider.js';
5
+ import { ElementReactiveScope } from '../directive/providers.js';
6
6
  const FACTORY_CACHE = new WeakMap();
7
7
  function defineInstancePropertyMap(instance) {
8
8
  if (typeof instance !== 'object') {
@@ -40,10 +40,13 @@ export function baseFactoryView(htmlElementType) {
40
40
  defineInstancePropertyMap(model);
41
41
  this._model = defineModel(model);
42
42
  this._modelScope = ElementModelReactiveScope.blockScopeFor(this._model);
43
- this._viewScope = ReactiveScope.blockScopeFor(this);
43
+ this._viewScope = new ElementReactiveScope(this);
44
44
  if (this._componentRef.view) {
45
45
  Reflect.set(this._model, this._componentRef.view, this);
46
46
  }
47
+ this._viewScope.subscribe((viewProperty, oldValue, newValue) => {
48
+ this.setInputValue(viewProperty, newValue);
49
+ });
47
50
  this._render = new ComponentRender(this);
48
51
  }
49
52
  getComponentRef() {
@@ -91,8 +94,7 @@ export function baseFactoryView(htmlElementType) {
91
94
  setInputValue(viewProp, value) {
92
95
  const inputRef = this.getInput(viewProp);
93
96
  if (inputRef) {
94
- Reflect.set(this._model, inputRef.modelProperty, value);
95
- this._model.emitChangeModel(inputRef.modelProperty);
97
+ this._modelScope.set(inputRef.modelProperty, value);
96
98
  }
97
99
  }
98
100
  hasOutput(viewProp) {
@@ -112,9 +114,9 @@ export function baseFactoryView(htmlElementType) {
112
114
  }
113
115
  setAttributeHelper(attrViewName, value) {
114
116
  if (value === null || value === undefined) {
115
- return;
117
+ this.removeAttribute(attrViewName);
116
118
  }
117
- if (typeof value === 'boolean') {
119
+ else if (typeof value === 'boolean') {
118
120
  if (value) {
119
121
  super.setAttribute(attrViewName, '');
120
122
  }
@@ -123,13 +125,10 @@ export function baseFactoryView(htmlElementType) {
123
125
  }
124
126
  }
125
127
  else {
126
- super.setAttribute(attrViewName, String(value));
128
+ super.setAttribute(attrViewName, value);
127
129
  }
128
130
  }
129
131
  setAttribute(attrViewName, value) {
130
- if (value === null || value === undefined) {
131
- return;
132
- }
133
132
  this.setInputValue(attrViewName, value);
134
133
  this.setAttributeHelper(attrViewName, value);
135
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base-view.js","sourceRoot":"","sources":["../../../src/core/view/base-view.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TypeOf } from '../utils/typeof.js';\nimport { ReactiveScope } from '@ibyar/expressions';\nimport {\n\tisAfterContentChecked, isAfterContentInit, isAfterViewChecked,\n\tisAfterViewInit, isDoCheck, isOnChanges, isOnDestroy, isOnInit\n} from '../component/lifecycle.js';\nimport { ComponentRef, PropertyRef } from '../component/component.js';\nimport { BaseComponent, CustomElement, HTMLComponent } from '../component/custom-element.js';\nimport { EventEmitter } from '../component/events.js';\nimport { defineModel, Model } from '../model/change-detection.js';\nimport { ComponentRender } from './render.js';\nimport { ElementModelReactiveScope } from '../component/provider.js';\n\nconst FACTORY_CACHE = new WeakMap<TypeOf<HTMLElement>, TypeOf<HTMLComponent<any>>>();\n\nfunction defineInstancePropertyMap<T extends { [key: string]: any }>(instance: T) {\n\tif (typeof instance !== 'object') {\n\t\treturn;\n\t}\n\tconst prototype = Object.getPrototypeOf(instance);\n\tif (!prototype) {\n\t\treturn;\n\t}\n\tconst keys = Reflect.getMetadataKeys(prototype);\n\tkeys\n\t\t.filter(key => !Reflect.has(instance, key))\n\t\t.forEach(key => Reflect.set(instance, key, undefined));\n}\n\nexport function baseFactoryView<T extends Object>(htmlElementType: TypeOf<HTMLElement>): TypeOf<HTMLComponent<T>> {\n\n\tif (FACTORY_CACHE.has(htmlElementType)) {\n\t\treturn FACTORY_CACHE.get(htmlElementType) as TypeOf<HTMLComponent<T>>;\n\t}\n\tclass CustomView<T> extends htmlElementType implements BaseComponent<T>, CustomElement {\n\t\t_model: T & Model & { [key: string]: any; };\n\t\t_parentComponent: HTMLComponent<object>;\n\t\t_render: ComponentRender<T>;\n\t\t_shadowRoot: ShadowRoot;\n\n\t\t_componentRef: ComponentRef<T>;\n\n\t\t_modelScope: ReactiveScope<T & Model & { [key: string]: any; }>;\n\t\t_viewScope: ReactiveScope<CustomView<T>>;\n\n\t\tconstructor(componentRef: ComponentRef<T>, modelClass: TypeOf<T>) {\n\t\t\tsuper();\n\t\t\tthis._componentRef = componentRef;\n\t\t\tif (componentRef.isShadowDom) {\n\t\t\t\tthis._shadowRoot = this.attachShadow({\n\t\t\t\t\tmode: componentRef.shadowDomMode,\n\t\t\t\t\tdelegatesFocus: componentRef.shadowDomDelegatesFocus\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst model = new modelClass(/* resolve dependency injection*/);\n\t\t\tdefineInstancePropertyMap(model);\n\t\t\tthis._model = defineModel(model);\n\n\t\t\tthis._modelScope = ElementModelReactiveScope.blockScopeFor(this._model);\n\t\t\tthis._viewScope = ReactiveScope.blockScopeFor(this);\n\n\t\t\t// if model had view decorator\n\t\t\tif (this._componentRef.view) {\n\t\t\t\t// this._model[componentRef.view] = this;\n\t\t\t\tReflect.set(this._model, this._componentRef.view, this);\n\t\t\t}\n\n\t\t\tthis._render = new ComponentRender(this);\n\t\t}\n\n\t\tdoBlockCallback = (): void => {\n\t\t\tif (isDoCheck(this._model)) {\n\t\t\t\tthis._model.doCheck();\n\t\t\t}\n\t\t};\n\n\t\tgetComponentRef(): ComponentRef<T> {\n\t\t\treturn this._componentRef;\n\t\t}\n\n\t\tsetParentComponent(parent: HTMLComponent<any>): void {\n\t\t\tthis._parentComponent = parent;\n\t\t}\n\n\t\tgetParentComponent(): HTMLComponent<any> {\n\t\t\treturn this._parentComponent;\n\t\t}\n\n\t\thasParentComponent(): boolean {\n\t\t\treturn this._parentComponent ? true : false;\n\t\t}\n\n\t\thasInputStartWith(viewProp: string): boolean {\n\t\t\tlet dotIndex = viewProp.indexOf('.');\n\t\t\tif (dotIndex > 0) {\n\t\t\t\tviewProp = viewProp.substring(0, dotIndex);\n\t\t\t}\n\t\t\treturn this.hasInput(viewProp);\n\t\t}\n\n\t\tgetInputStartWith(viewProp: string): PropertyRef | undefined {\n\t\t\tlet index = viewProp.indexOf('.');\n\t\t\tif (index > 0) {\n\t\t\t\tviewProp = viewProp.substring(0, index);\n\t\t\t}\n\t\t\tindex = viewProp.indexOf('[');\n\t\t\tif (index > 0) {\n\t\t\t\tviewProp = viewProp.substring(0, index);\n\t\t\t}\n\t\t\treturn this.getInput(viewProp);\n\t\t}\n\n\t\thasInput(viewProp: string): boolean {\n\t\t\treturn this._componentRef.inputs.some(input => input.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetInput(viewProp: string): PropertyRef | undefined {\n\t\t\treturn this._componentRef.inputs.find(input => input.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetInputValue(viewProp: string): any {\n\t\t\tconst inputRef = this.getInput(viewProp);\n\t\t\tif (inputRef) {\n\t\t\t\treturn this._model[inputRef.modelProperty];\n\t\t\t}\n\t\t}\n\n\t\tsetInputValue(viewProp: string, value: any): void {\n\t\t\tconst inputRef = this.getInput(viewProp);\n\t\t\tif (inputRef) {\n\t\t\t\t// console.log('about to change input', inputRef.modelProperty, value);\n\t\t\t\tReflect.set(this._model, inputRef.modelProperty, value);\n\t\t\t\t// this._changeObservable.emit(viewProp);\n\t\t\t\tthis._model.emitChangeModel(inputRef.modelProperty);\n\t\t\t}\n\t\t}\n\n\t\thasOutput(viewProp: string): boolean {\n\t\t\treturn this._componentRef.outputs.some(output => output.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetOutput(viewProp: string): PropertyRef | undefined {\n\t\t\treturn this._componentRef.outputs.find(output => output.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetEventEmitter<V>(viewProp: string): EventEmitter<V> | undefined {\n\t\t\tconst outputRef = this.getOutput(viewProp);\n\t\t\tif (outputRef) {\n\t\t\t\treturn this._model[outputRef.modelProperty] as EventEmitter<V>;\n\t\t\t}\n\t\t}\n\n\t\thasProp(propName: string): boolean {\n\t\t\treturn Reflect.has(this._model, propName);\n\t\t}\n\n\t\tprivate setAttributeHelper(attrViewName: string, value: any): void {\n\t\t\tif (value === null || value === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (typeof value === 'boolean') {\n\t\t\t\tif (value) {\n\t\t\t\t\tsuper.setAttribute(attrViewName, '');\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeAttribute(attrViewName);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsuper.setAttribute(attrViewName, String(value));\n\t\t\t}\n\t\t}\n\n\t\tsetAttribute(attrViewName: string, value: any): void {\n\t\t\tif (value === null || value === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.setInputValue(attrViewName, value);\n\t\t\tthis.setAttributeHelper(attrViewName, value);\n\t\t}\n\n\t\tgetAttribute(attrViewName: string): string | null {\n\t\t\treturn this.getInputValue(attrViewName) ?? super.getAttribute(attrViewName);\n\t\t}\n\n\t\tattributeChangedCallback(name: string, oldValue: string, newValue: string) {\n\t\t\tif (newValue === oldValue) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// this._changeObservable.emit(name);\n\t\t\tconst inputRef = this.getInput(name);\n\t\t\tif (inputRef) {\n\t\t\t\tthis._model.emitChangeModel(inputRef.modelProperty);\n\t\t\t}\n\t\t\tif (isOnChanges(this._model)) {\n\t\t\t\tthis._model.onChanges();\n\t\t\t}\n\t\t\tthis.doBlockCallback();\n\t\t}\n\n\t\tconnectedCallback() {\n\n\t\t\tthis._componentRef.inputs.forEach(input => {\n\t\t\t\tconst inputDefaultValue = this._model[input.modelProperty];\n\t\t\t\tif (inputDefaultValue !== null && inputDefaultValue !== undefined) {\n\t\t\t\t\tthis.setAttributeHelper(input.viewAttribute, inputDefaultValue);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// if (!this.hasParentComponent() && this.attributes.length > 0) {\n\t\t\t// \tlet oldAttrValues = Array.prototype.slice.call(this.attributes);\n\t\t\t//\toldAttrValues.forEach((attr: Attr) => {\n\t\t\t// \t\tReflect.set(this, attr.name, attr.value);\n\t\t\t// \t});\n\t\t\t// }\n\n\t\t\tif (!this.hasParentComponent() && this.attributes.length > 0) {\n\t\t\t\tlet attrs: Attr[] = Array.prototype.slice.call(this.attributes);\n\t\t\t\tattrs.forEach(attr => this.initOuterAttribute(attr));\n\t\t\t}\n\n\t\t\tif (isOnChanges(this._model)) {\n\t\t\t\tthis._model.onChanges();\n\t\t\t}\n\t\t\tif (isOnInit(this._model)) {\n\t\t\t\tthis._model.onInit();\n\t\t\t}\n\t\t\tif (isDoCheck(this._model)) {\n\t\t\t\tthis._model.doCheck();\n\t\t\t}\n\t\t\tif (isAfterContentInit(this._model)) {\n\t\t\t\tthis._model.afterContentInit();\n\t\t\t}\n\t\t\tif (isAfterContentChecked(this._model)) {\n\t\t\t\tthis._model.afterContentChecked();\n\t\t\t}\n\n\t\t\t// if (!this.hasParentComponent()) {\n\t\t\t// \tArray.prototype.slice.call(this.attributes).forEach((attr: Attr) => {\n\t\t\t// \t\tthis.initOuterAttribute(attr);\n\t\t\t// \t});\n\t\t\t// }\n\n\t\t\t// do once\n\t\t\tif (this.childNodes.length === 0) {\n\t\t\t\t// setup ui view\n\t\t\t\tthis._render.initView();\n\n\t\t\t\t// init Host Listener events\n\t\t\t\tthis._render.initHostListener();\n\t\t\t}\n\n\t\t\tif (isAfterViewInit(this._model)) {\n\t\t\t\tthis._model.afterViewInit();\n\t\t\t}\n\t\t\tif (isAfterViewChecked(this._model)) {\n\t\t\t\tthis._model.afterViewChecked();\n\t\t\t}\n\t\t\tthis.doBlockCallback = () => {\n\t\t\t\tif (isDoCheck(this._model)) {\n\t\t\t\t\tthis._model.doCheck();\n\t\t\t\t}\n\t\t\t\tif (isAfterContentChecked(this._model)) {\n\t\t\t\t\tthis._model.afterContentChecked();\n\t\t\t\t}\n\t\t\t\tif (isAfterViewChecked(this._model)) {\n\t\t\t\t\tthis._model.afterViewChecked();\n\t\t\t\t}\n\t\t\t\tthis.emitRootChanges();\n\t\t\t};\n\t\t\tthis.emitRootChanges();\n\t\t}\n\n\t\temitRootChanges(): void {\n\t\t\tthis.emitChanges(...Object.keys(this._model.__observable).filter(event => event !== 'destroy'));\n\t\t}\n\n\t\temitChanges(...events: string[]): void {\n\t\t\tconst sources: any[] = [];\n\t\t\tevents.forEach(key => {\n\t\t\t\tthis._model.emitChangeModel(key, sources);\n\t\t\t});\n\t\t}\n\n\t\tinitOuterAttribute(attr: Attr) {\n\t\t\t// [window, this] scop\n\t\t\tlet elementAttr = attr.name;\n\t\t\tlet modelProperty = attr.value;\n\t\t\tif (elementAttr.startsWith('[')) {\n\t\t\t\telementAttr = elementAttr.substring(1, elementAttr.length - 1);\n\t\t\t\tif (Reflect.has(window, modelProperty)) {\n\t\t\t\t\tthis.setInputValue(elementAttr, Reflect.get(window, modelProperty));\n\t\t\t\t}\n\t\t\t\t// else {\n\t\t\t\t// \tlet value: any;\n\t\t\t\t// \tObject.defineProperty(window, modelProperty, {\n\t\t\t\t// \t\tset: (v: any) => {\n\t\t\t\t// \t\t\tvalue = v;\n\t\t\t\t// \t\t\tif (this) {\n\t\t\t\t// \t\t\t\tthis.setInputValue(elementAttr, v);\n\t\t\t\t// \t\t\t\t// fake connect element\n\t\t\t\t// \t\t\t\tthis.connectedCallback();\n\t\t\t\t// \t\t\t}\n\t\t\t\t// \t\t},\n\t\t\t\t// \t\tget: (): any => value\n\t\t\t\t// \t});\n\t\t\t\t// }\n\n\t\t\t}\n\t\t\telse if (elementAttr.startsWith('(')) {\n\t\t\t\t// (elementAttr)=\"modelProperty()\"\n\t\t\t\telementAttr = elementAttr.substring(1, elementAttr.length - 1);\n\t\t\t\t// this.handleEvent(element, elementAttr, viewProperty);\n\t\t\t\tmodelProperty = modelProperty.endsWith('()') ?\n\t\t\t\t\tmodelProperty.substring(0, modelProperty.length - 2) : modelProperty;\n\t\t\t\tlet callback: Function = Reflect.get(window, modelProperty);\n\t\t\t\tthis.addEventListener(elementAttr, event => {\n\t\t\t\t\tcallback(event);\n\t\t\t\t});\n\t\t\t} else if (elementAttr.startsWith('on')) {\n\t\t\t\tconst modelEvent = this.getEventEmitter<any>(elementAttr.substring(2));\n\t\t\t\tif (modelEvent) {\n\t\t\t\t\t// modelEvent.subscribe(listener);\n\t\t\t\t\tmodelProperty = modelProperty.endsWith('()') ?\n\t\t\t\t\t\tmodelProperty.substring(0, modelProperty.length - 2) : modelProperty;\n\t\t\t\t\tlet listener: Function = Reflect.get(window, modelProperty);\n\t\t\t\t\tmodelEvent.subscribe((data: any) => {\n\t\t\t\t\t\t(listener as Function)(data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.setInputValue(attr.name, attr.value);\n\t\t\t}\n\t\t}\n\n\t\tadoptedCallback() {\n\t\t\t// restart the process\n\t\t\tthis.innerHTML = '';\n\t\t\tthis.connectedCallback();\n\t\t}\n\t\tdisconnectedCallback() {\n\t\t\t// notify first, then call model.onDestroy func\n\t\t\t// this._changeObservable.emit('destroy');\n\t\t\tif (isOnDestroy(this._model)) {\n\t\t\t\tthis._model.onDestroy();\n\t\t\t}\n\t\t\tthis.emitChanges('destroy');\n\t\t}\n\n\t\t// events api\n\t\taddEventListener(eventName: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void {\n\t\t\tif ('on' + eventName in this) {\n\t\t\t\tsuper.addEventListener(eventName, (event: Event) => {\n\t\t\t\t\t(listener as Function)(event);\n\t\t\t\t}, options);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst modelOutput = this.getEventEmitter<any>(eventName);\n\t\t\tif (modelOutput) {\n\t\t\t\t// modelOutput.subscribe(listener);\n\t\t\t\tmodelOutput.subscribe((data: any) => {\n\t\t\t\t\t(listener as Function)(data);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._model.subscribeModel(eventName, listener as () => void);\n\t\t\t}\n\t\t}\n\n\t\ttriggerOutput(eventName: string, value?: any): void {\n\t\t\tconst modelEvent = this.getEventEmitter<any>(eventName);\n\t\t\tif (modelEvent) {\n\t\t\t\tmodelEvent.emit(value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\ttriggerModelChange(eventName: string, value?: any): void {\n\t\t\t// this._changeObservable.emit(eventName, value);\n\t\t\tthis._model.emitChangeModel(eventName);\n\t\t}\n\t};\n\tFACTORY_CACHE.set(htmlElementType, CustomView);\n\treturn CustomView;\n}\n\n// const CustomViewTypes: WeakMap<TypeOf<HTMLElement>, TypeOf<HTMLComponent<any>>> = new WeakMap();\n// function createViewClass(elementType: TypeOf<HTMLElement>, isForm: boolean) {\n// if (isForm) {\n// let ViewClass = baseFormFactoryView(elementType);\n// CustomViewTypes.set(elementType, ViewClass);\n// return ViewClass;\n// }\n// else {\n// let ViewClass = baseFactoryView(elementType);\n// CustomViewTypes.set(elementType, ViewClass);\n// return ViewClass;\n// }\n// }\n\n// export function getBaseViewClassByHTMLElementType(elementType?: TypeOf<HTMLElement>, isFormAssociated?: boolean) {\n// if (elementType && CustomViewTypes.has(elementType)) {\n// return CustomViewTypes.get(elementType);\n// }\n// // start to created view class\n// else if (!elementType || elementType === HTMLElement) {\n// return createViewClass(HTMLElement, isFormAssociated || false);\n// }\n// if (CustomViewTypes.has(elementType)) {\n// return CustomViewTypes.get(elementType);\n// } else {\n\n// }\n// }\n"]}
1
+ {"version":3,"file":"base-view.js","sourceRoot":"","sources":["../../../src/core/view/base-view.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TypeOf } from '../utils/typeof.js';\nimport { ReactiveScope } from '@ibyar/expressions';\nimport {\n\tisAfterContentChecked, isAfterContentInit, isAfterViewChecked,\n\tisAfterViewInit, isDoCheck, isOnChanges, isOnDestroy, isOnInit\n} from '../component/lifecycle.js';\nimport { ComponentRef, PropertyRef } from '../component/component.js';\nimport { BaseComponent, CustomElement, HTMLComponent } from '../component/custom-element.js';\nimport { EventEmitter } from '../component/events.js';\nimport { defineModel, Model } from '../model/change-detection.js';\nimport { ComponentRender } from './render.js';\nimport { ElementModelReactiveScope } from '../component/provider.js';\nimport { ElementReactiveScope } from '../directive/providers.js';\n\nconst FACTORY_CACHE = new WeakMap<TypeOf<HTMLElement>, TypeOf<HTMLComponent<any>>>();\n\nfunction defineInstancePropertyMap<T extends { [key: string]: any }>(instance: T) {\n\tif (typeof instance !== 'object') {\n\t\treturn;\n\t}\n\tconst prototype = Object.getPrototypeOf(instance);\n\tif (!prototype) {\n\t\treturn;\n\t}\n\tconst keys = Reflect.getMetadataKeys(prototype);\n\tkeys\n\t\t.filter(key => !Reflect.has(instance, key))\n\t\t.forEach(key => Reflect.set(instance, key, undefined));\n}\n\nexport function baseFactoryView<T extends Object>(htmlElementType: TypeOf<HTMLElement>): TypeOf<HTMLComponent<T>> {\n\n\tif (FACTORY_CACHE.has(htmlElementType)) {\n\t\treturn FACTORY_CACHE.get(htmlElementType) as TypeOf<HTMLComponent<T>>;\n\t}\n\tclass CustomView<T> extends htmlElementType implements BaseComponent<T>, CustomElement {\n\t\t_model: T & Model & { [key: string]: any; };\n\t\t_parentComponent: HTMLComponent<object>;\n\t\t_render: ComponentRender<T>;\n\t\t_shadowRoot: ShadowRoot;\n\n\t\t_componentRef: ComponentRef<T>;\n\n\t\t_modelScope: ReactiveScope<T & Model & { [key: string]: any; }>;\n\t\t_viewScope: ElementReactiveScope;\n\n\t\tconstructor(componentRef: ComponentRef<T>, modelClass: TypeOf<T>) {\n\t\t\tsuper();\n\t\t\tthis._componentRef = componentRef;\n\t\t\tif (componentRef.isShadowDom) {\n\t\t\t\tthis._shadowRoot = this.attachShadow({\n\t\t\t\t\tmode: componentRef.shadowDomMode,\n\t\t\t\t\tdelegatesFocus: componentRef.shadowDomDelegatesFocus\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst model = new modelClass(/* resolve dependency injection*/);\n\t\t\tdefineInstancePropertyMap(model);\n\t\t\tthis._model = defineModel(model);\n\n\t\t\tthis._modelScope = ElementModelReactiveScope.blockScopeFor(this._model);\n\t\t\tthis._viewScope = new ElementReactiveScope(this);\n\n\t\t\t// if model had view decorator\n\t\t\tif (this._componentRef.view) {\n\t\t\t\t// this._model[componentRef.view] = this;\n\t\t\t\tReflect.set(this._model, this._componentRef.view, this);\n\t\t\t}\n\t\t\tthis._viewScope.subscribe((viewProperty, oldValue, newValue) => {\n\t\t\t\tthis.setInputValue(viewProperty, newValue);\n\t\t\t});\n\t\t\t// this._modelScope.subscribe((modelProperty, oldValue, newValue) => {\n\t\t\t// \tconsole.log('emit model', modelProperty, oldValue, newValue);\n\t\t\t// \t// this.emitChanges(modelProperty as string);\n\t\t\t// });\n\t\t\tthis._render = new ComponentRender(this);\n\t\t}\n\n\t\tdoBlockCallback = (): void => {\n\t\t\tif (isDoCheck(this._model)) {\n\t\t\t\tthis._model.doCheck();\n\t\t\t}\n\t\t};\n\n\t\tgetComponentRef(): ComponentRef<T> {\n\t\t\treturn this._componentRef;\n\t\t}\n\n\t\tsetParentComponent(parent: HTMLComponent<any>): void {\n\t\t\tthis._parentComponent = parent;\n\t\t}\n\n\t\tgetParentComponent(): HTMLComponent<any> {\n\t\t\treturn this._parentComponent;\n\t\t}\n\n\t\thasParentComponent(): boolean {\n\t\t\treturn this._parentComponent ? true : false;\n\t\t}\n\n\t\thasInputStartWith(viewProp: string): boolean {\n\t\t\tlet dotIndex = viewProp.indexOf('.');\n\t\t\tif (dotIndex > 0) {\n\t\t\t\tviewProp = viewProp.substring(0, dotIndex);\n\t\t\t}\n\t\t\treturn this.hasInput(viewProp);\n\t\t}\n\n\t\tgetInputStartWith(viewProp: string): PropertyRef | undefined {\n\t\t\tlet index = viewProp.indexOf('.');\n\t\t\tif (index > 0) {\n\t\t\t\tviewProp = viewProp.substring(0, index);\n\t\t\t}\n\t\t\tindex = viewProp.indexOf('[');\n\t\t\tif (index > 0) {\n\t\t\t\tviewProp = viewProp.substring(0, index);\n\t\t\t}\n\t\t\treturn this.getInput(viewProp);\n\t\t}\n\n\t\thasInput(viewProp: string): boolean {\n\t\t\treturn this._componentRef.inputs.some(input => input.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetInput(viewProp: string): PropertyRef | undefined {\n\t\t\treturn this._componentRef.inputs.find(input => input.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetInputValue(viewProp: string): any {\n\t\t\tconst inputRef = this.getInput(viewProp);\n\t\t\tif (inputRef) {\n\t\t\t\treturn this._model[inputRef.modelProperty];\n\t\t\t}\n\t\t}\n\n\t\tsetInputValue(viewProp: PropertyKey, value: any): void {\n\t\t\tconst inputRef = this.getInput(viewProp as string);\n\t\t\tif (inputRef) {\n\t\t\t\t// console.log('about to change input', inputRef.modelProperty, value);\n\t\t\t\t// Reflect.set(this._model, inputRef.modelProperty, value);\n\t\t\t\t// this._model.emitChangeModel(inputRef.modelProperty);\n\t\t\t\tthis._modelScope.set(inputRef.modelProperty, value);\n\t\t\t}\n\t\t}\n\n\t\thasOutput(viewProp: string): boolean {\n\t\t\treturn this._componentRef.outputs.some(output => output.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetOutput(viewProp: string): PropertyRef | undefined {\n\t\t\treturn this._componentRef.outputs.find(output => output.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetEventEmitter<V>(viewProp: string): EventEmitter<V> | undefined {\n\t\t\tconst outputRef = this.getOutput(viewProp);\n\t\t\tif (outputRef) {\n\t\t\t\treturn this._model[outputRef.modelProperty] as EventEmitter<V>;\n\t\t\t}\n\t\t}\n\n\t\thasProp(propName: string): boolean {\n\t\t\treturn Reflect.has(this._model, propName);\n\t\t}\n\n\t\tprivate setAttributeHelper(attrViewName: string, value: any): void {\n\t\t\tif (value === null || value === undefined) {\n\t\t\t\tthis.removeAttribute(attrViewName);\n\t\t\t}\n\t\t\telse if (typeof value === 'boolean') {\n\t\t\t\tif (value) {\n\t\t\t\t\tsuper.setAttribute(attrViewName, '');\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeAttribute(attrViewName);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsuper.setAttribute(attrViewName, value);\n\t\t\t}\n\t\t}\n\n\t\tsetAttribute(attrViewName: string, value: any): void {\n\t\t\tthis.setInputValue(attrViewName, value);\n\t\t\tthis.setAttributeHelper(attrViewName, value);\n\t\t}\n\n\t\tgetAttribute(attrViewName: string): string | null {\n\t\t\treturn this.getInputValue(attrViewName) ?? super.getAttribute(attrViewName);\n\t\t}\n\n\t\tattributeChangedCallback(name: string, oldValue: string, newValue: string) {\n\t\t\tif (newValue === oldValue) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// this._changeObservable.emit(name);\n\t\t\tconst inputRef = this.getInput(name);\n\t\t\tif (inputRef) {\n\t\t\t\tthis._model.emitChangeModel(inputRef.modelProperty);\n\t\t\t}\n\t\t\tif (isOnChanges(this._model)) {\n\t\t\t\tthis._model.onChanges();\n\t\t\t}\n\t\t\tthis.doBlockCallback();\n\t\t}\n\n\t\tconnectedCallback() {\n\n\t\t\tthis._componentRef.inputs.forEach(input => {\n\t\t\t\tconst inputDefaultValue = this._model[input.modelProperty];\n\t\t\t\tif (inputDefaultValue !== null && inputDefaultValue !== undefined) {\n\t\t\t\t\tthis.setAttributeHelper(input.viewAttribute, inputDefaultValue);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// if (!this.hasParentComponent() && this.attributes.length > 0) {\n\t\t\t// \tlet oldAttrValues = Array.prototype.slice.call(this.attributes);\n\t\t\t//\toldAttrValues.forEach((attr: Attr) => {\n\t\t\t// \t\tReflect.set(this, attr.name, attr.value);\n\t\t\t// \t});\n\t\t\t// }\n\n\t\t\tif (!this.hasParentComponent() && this.attributes.length > 0) {\n\t\t\t\tlet attrs: Attr[] = Array.prototype.slice.call(this.attributes);\n\t\t\t\tattrs.forEach(attr => this.initOuterAttribute(attr));\n\t\t\t}\n\n\t\t\tif (isOnChanges(this._model)) {\n\t\t\t\tthis._model.onChanges();\n\t\t\t}\n\t\t\tif (isOnInit(this._model)) {\n\t\t\t\tthis._model.onInit();\n\t\t\t}\n\t\t\tif (isDoCheck(this._model)) {\n\t\t\t\tthis._model.doCheck();\n\t\t\t}\n\t\t\tif (isAfterContentInit(this._model)) {\n\t\t\t\tthis._model.afterContentInit();\n\t\t\t}\n\t\t\tif (isAfterContentChecked(this._model)) {\n\t\t\t\tthis._model.afterContentChecked();\n\t\t\t}\n\n\t\t\t// if (!this.hasParentComponent()) {\n\t\t\t// \tArray.prototype.slice.call(this.attributes).forEach((attr: Attr) => {\n\t\t\t// \t\tthis.initOuterAttribute(attr);\n\t\t\t// \t});\n\t\t\t// }\n\n\t\t\t// do once\n\t\t\tif (this.childNodes.length === 0) {\n\t\t\t\t// setup ui view\n\t\t\t\tthis._render.initView();\n\n\t\t\t\t// init Host Listener events\n\t\t\t\tthis._render.initHostListener();\n\t\t\t}\n\n\t\t\tif (isAfterViewInit(this._model)) {\n\t\t\t\tthis._model.afterViewInit();\n\t\t\t}\n\t\t\tif (isAfterViewChecked(this._model)) {\n\t\t\t\tthis._model.afterViewChecked();\n\t\t\t}\n\t\t\tthis.doBlockCallback = () => {\n\t\t\t\tif (isDoCheck(this._model)) {\n\t\t\t\t\tthis._model.doCheck();\n\t\t\t\t}\n\t\t\t\tif (isAfterContentChecked(this._model)) {\n\t\t\t\t\tthis._model.afterContentChecked();\n\t\t\t\t}\n\t\t\t\tif (isAfterViewChecked(this._model)) {\n\t\t\t\t\tthis._model.afterViewChecked();\n\t\t\t\t}\n\t\t\t\tthis.emitRootChanges();\n\t\t\t};\n\t\t\tthis.emitRootChanges();\n\t\t}\n\n\t\temitRootChanges(): void {\n\t\t\tthis.emitChanges(...Object.keys(this._model.__observable).filter(event => event !== 'destroy'));\n\t\t}\n\n\t\temitChanges(...events: string[]): void {\n\t\t\tconst sources: any[] = [];\n\t\t\tevents.forEach(key => {\n\t\t\t\tthis._model.emitChangeModel(key, sources);\n\t\t\t});\n\t\t}\n\n\t\tinitOuterAttribute(attr: Attr) {\n\t\t\t// [window, this] scop\n\t\t\tlet elementAttr = attr.name;\n\t\t\tlet modelProperty = attr.value;\n\t\t\tif (elementAttr.startsWith('[')) {\n\t\t\t\telementAttr = elementAttr.substring(1, elementAttr.length - 1);\n\t\t\t\tif (Reflect.has(window, modelProperty)) {\n\t\t\t\t\tthis.setInputValue(elementAttr, Reflect.get(window, modelProperty));\n\t\t\t\t}\n\t\t\t\t// else {\n\t\t\t\t// \tlet value: any;\n\t\t\t\t// \tObject.defineProperty(window, modelProperty, {\n\t\t\t\t// \t\tset: (v: any) => {\n\t\t\t\t// \t\t\tvalue = v;\n\t\t\t\t// \t\t\tif (this) {\n\t\t\t\t// \t\t\t\tthis.setInputValue(elementAttr, v);\n\t\t\t\t// \t\t\t\t// fake connect element\n\t\t\t\t// \t\t\t\tthis.connectedCallback();\n\t\t\t\t// \t\t\t}\n\t\t\t\t// \t\t},\n\t\t\t\t// \t\tget: (): any => value\n\t\t\t\t// \t});\n\t\t\t\t// }\n\n\t\t\t}\n\t\t\telse if (elementAttr.startsWith('(')) {\n\t\t\t\t// (elementAttr)=\"modelProperty()\"\n\t\t\t\telementAttr = elementAttr.substring(1, elementAttr.length - 1);\n\t\t\t\t// this.handleEvent(element, elementAttr, viewProperty);\n\t\t\t\tmodelProperty = modelProperty.endsWith('()') ?\n\t\t\t\t\tmodelProperty.substring(0, modelProperty.length - 2) : modelProperty;\n\t\t\t\tlet callback: Function = Reflect.get(window, modelProperty);\n\t\t\t\tthis.addEventListener(elementAttr, event => {\n\t\t\t\t\tcallback(event);\n\t\t\t\t});\n\t\t\t} else if (elementAttr.startsWith('on')) {\n\t\t\t\tconst modelEvent = this.getEventEmitter<any>(elementAttr.substring(2));\n\t\t\t\tif (modelEvent) {\n\t\t\t\t\t// modelEvent.subscribe(listener);\n\t\t\t\t\tmodelProperty = modelProperty.endsWith('()') ?\n\t\t\t\t\t\tmodelProperty.substring(0, modelProperty.length - 2) : modelProperty;\n\t\t\t\t\tlet listener: Function = Reflect.get(window, modelProperty);\n\t\t\t\t\tmodelEvent.subscribe((data: any) => {\n\t\t\t\t\t\t(listener as Function)(data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.setInputValue(attr.name, attr.value);\n\t\t\t}\n\t\t}\n\n\t\tadoptedCallback() {\n\t\t\t// restart the process\n\t\t\tthis.innerHTML = '';\n\t\t\tthis.connectedCallback();\n\t\t}\n\t\tdisconnectedCallback() {\n\t\t\t// notify first, then call model.onDestroy func\n\t\t\t// this._changeObservable.emit('destroy');\n\t\t\tif (isOnDestroy(this._model)) {\n\t\t\t\tthis._model.onDestroy();\n\t\t\t}\n\t\t\tthis.emitChanges('destroy');\n\t\t}\n\n\t\t// events api\n\t\taddEventListener(eventName: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void {\n\t\t\tif ('on' + eventName in this) {\n\t\t\t\tsuper.addEventListener(eventName, (event: Event) => {\n\t\t\t\t\t(listener as Function)(event);\n\t\t\t\t}, options);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst modelOutput = this.getEventEmitter<any>(eventName);\n\t\t\tif (modelOutput) {\n\t\t\t\t// modelOutput.subscribe(listener);\n\t\t\t\tmodelOutput.subscribe((data: any) => {\n\t\t\t\t\t(listener as Function)(data);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._model.subscribeModel(eventName, listener as () => void);\n\t\t\t}\n\t\t}\n\n\t\ttriggerOutput(eventName: string, value?: any): void {\n\t\t\tconst modelEvent = this.getEventEmitter<any>(eventName);\n\t\t\tif (modelEvent) {\n\t\t\t\tmodelEvent.emit(value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\ttriggerModelChange(eventName: string, value?: any): void {\n\t\t\t// this._changeObservable.emit(eventName, value);\n\t\t\tthis._model.emitChangeModel(eventName);\n\t\t}\n\t};\n\tFACTORY_CACHE.set(htmlElementType, CustomView);\n\treturn CustomView;\n}\n\n// const CustomViewTypes: WeakMap<TypeOf<HTMLElement>, TypeOf<HTMLComponent<any>>> = new WeakMap();\n// function createViewClass(elementType: TypeOf<HTMLElement>, isForm: boolean) {\n// if (isForm) {\n// let ViewClass = baseFormFactoryView(elementType);\n// CustomViewTypes.set(elementType, ViewClass);\n// return ViewClass;\n// }\n// else {\n// let ViewClass = baseFactoryView(elementType);\n// CustomViewTypes.set(elementType, ViewClass);\n// return ViewClass;\n// }\n// }\n\n// export function getBaseViewClassByHTMLElementType(elementType?: TypeOf<HTMLElement>, isFormAssociated?: boolean) {\n// if (elementType && CustomViewTypes.has(elementType)) {\n// return CustomViewTypes.get(elementType);\n// }\n// // start to created view class\n// else if (!elementType || elementType === HTMLElement) {\n// return createViewClass(HTMLElement, isFormAssociated || false);\n// }\n// if (CustomViewTypes.has(elementType)) {\n// return CustomViewTypes.get(elementType);\n// } else {\n\n// }\n// }\n"]}
package/view/render.js CHANGED
@@ -223,7 +223,7 @@ export class ComponentRender {
223
223
  }
224
224
  createElement(node, contextStack) {
225
225
  const element = this.createElementByTagName(node);
226
- const elContext = new ElementReactiveScope(element);
226
+ const elContext = isHTMLComponent(element) ? element._viewScope : new ElementReactiveScope(element);
227
227
  contextStack = contextStack.copyStack();
228
228
  contextStack.pushScope(elContext);
229
229
  this.initAttribute(element, node, contextStack);
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/core/view/render.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpressionNode, Stack } from '@ibyar/expressions';\nimport {\n\tCommentNode, DOMDirectiveNode,\n\tDOMElementNode, DOMFragmentNode, DOMNode,\n\tisTagNameNative, isValidCustomElementName,\n\tLiveAttribute, LiveTextContent, TextContent\n} from '@ibyar/elements';\nimport { ComponentRef, ListenerRef } from '../component/component.js';\nimport { ElementMutation } from './mutation.js';\nimport { HTMLComponent, isHTMLComponent } from '../component/custom-element.js';\nimport { documentStack } from '../context/stack.js';\nimport { ClassRegistryProvider } from '../providers/provider.js';\nimport { EventEmitter } from '../component/events.js';\nimport { isOnDestroy, isOnInit } from '../component/lifecycle.js';\nimport { hasAttr } from '../utils/elements-util.js';\nimport {\n\taddChangeListener, isModel, Model,\n\tSourceFollowerCallback, subscribe1way, subscribe2way\n} from '../model/change-detection.js';\nimport { AsyncPipeProvider, PipeProvider, PipeTransform } from '../pipe/pipe.js';\nimport { ElementReactiveScope } from '../directive/providers.js';\n\nfunction getChangeEventName(element: HTMLElement, elementAttr: string): 'input' | 'change' | string {\n\tif (elementAttr === 'value') {\n\t\tif (element instanceof HTMLInputElement) {\n\t\t\treturn 'input';\n\t\t} else if (element instanceof HTMLSelectElement\n\t\t\t|| element instanceof HTMLTextAreaElement) {\n\t\t\treturn 'change';\n\t\t}\n\t}\n\treturn elementAttr;\n}\nexport class ComponentRender<T> {\n\tcomponentRef: ComponentRef<T>;\n\ttemplate: DOMNode<ExpressionNode>;\n\tnativeElementMutation: ElementMutation;\n\tcontextStack: Stack;\n\ttemplateRefMap = new Map<string, DOMElementNode<ExpressionNode>>();\n\tconstructor(public view: HTMLComponent<T>) {\n\t\tthis.componentRef = this.view.getComponentRef();\n\t\tthis.contextStack = documentStack.copyStack();\n\t\tthis.contextStack.pushFunctionScope(); // to protect documentStack\n\t\tthis.contextStack.pushScope(this.view._viewScope);\n\t\tthis.contextStack.pushScope(this.view._modelScope);\n\t}\n\tinitView(): void {\n\t\tif (this.componentRef.template) {\n\t\t\tif (typeof this.componentRef.template === 'function') {\n\t\t\t\tthis.template = this.componentRef.template(this.view._model);\n\t\t\t} else {\n\t\t\t\tthis.template = this.componentRef.template;\n\t\t\t}\n\n\t\t\tlet rootRef: HTMLElement | ShadowRoot;\n\t\t\tif (this.componentRef.isShadowDom) {\n\t\t\t\tif (this.view.shadowRoot /* OPEN MODE */) {\n\t\t\t\t\trootRef = this.view.shadowRoot;\n\t\t\t\t} else /* CLOSED MODE*/ {\n\t\t\t\t\trootRef = Reflect.get(this.view, '_shadowRoot') as ShadowRoot;\n\t\t\t\t\tReflect.deleteProperty(this.view, '_shadowRoot');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trootRef = this.view;\n\t\t\t}\n\t\t\tthis.initTemplateRefMap(this.template);\n\t\t\tconst rootFragment = document.createDocumentFragment();\n\t\t\tthis.appendChildToParent(rootFragment, this.template, this.contextStack);\n\t\t\trootRef.append(rootFragment);\n\t\t}\n\t}\n\tisTemplateRefName(template: DOMNode<ExpressionNode>): template is DOMElementNode<ExpressionNode> {\n\t\tif (template instanceof DOMElementNode) {\n\t\t\tif (template.tagName === 'template' && template.templateRefName) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tinitTemplateRefMap(domNode: DOMNode<ExpressionNode>) {\n\t\tif (domNode instanceof DOMElementNode || domNode instanceof DOMDirectiveNode || domNode instanceof DOMFragmentNode) {\n\t\t\tif (domNode.children) {\n\t\t\t\tconst toRemove: { index: number, template: DOMElementNode<ExpressionNode> }[] = [];\n\t\t\t\tfor (let index = 0; index < domNode.children.length; index++) {\n\t\t\t\t\tconst child = domNode.children[index];\n\t\t\t\t\tif (this.isTemplateRefName(child)) {\n\t\t\t\t\t\ttoRemove.unshift({ index, template: child });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.initTemplateRefMap(child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoRemove.forEach(info => {\n\t\t\t\t\tthis.templateRefMap.set(info.template.templateRefName.name, info.template);\n\t\t\t\t\tdomNode.children.splice(info.index, 1);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tinitHostListener(): void {\n\t\tthis.componentRef.hostListeners?.forEach(\n\t\t\tlistener => this.handelHostListener(listener)\n\t\t);\n\t}\n\thandelHostListener(listener: ListenerRef) {\n\t\tlet eventName: string = listener.eventName, source: HTMLElement | Window;\n\t\tif (listener.eventName.includes(':')) {\n\t\t\tconst eventSource = eventName.substring(0, eventName.indexOf(':'));\n\t\t\teventName = eventName.substring(eventName.indexOf(':') + 1);\n\t\t\tif ('window' === eventSource.toLowerCase()) {\n\t\t\t\tsource = window;\n\t\t\t\tthis.addNativeEventListener(source, eventName, (event: any) => {\n\t\t\t\t\tthis.view._model[listener.modelCallbackName](event);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t} else if (eventSource in this.view) {\n\t\t\t\tsource = Reflect.get(this.view, eventSource);\n\t\t\t\tif (!Reflect.has(source, '_model')) {\n\t\t\t\t\tthis.addNativeEventListener(source, eventName, (event: any) => {\n\t\t\t\t\t\tthis.view._model[listener.modelCallbackName](event);\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsource = this.view;\n\t\t\t}\n\t\t} else {\n\t\t\tsource = this.view;\n\t\t}\n\t\tconst sourceModel = Reflect.get(source, '_model') as Model & { [key: string]: EventEmitter<any> };\n\t\tconst output = ClassRegistryProvider.hasOutput(sourceModel, eventName);\n\t\tif (output) {\n\t\t\tsourceModel[output.modelProperty].subscribe((value: any) => {\n\t\t\t\tthis.view._model[listener.modelCallbackName](value);\n\t\t\t});\n\t\t}\n\t\telse if (Reflect.has(source, 'on' + eventName)) {\n\t\t\tthis.addNativeEventListener(source, eventName, (event: any) => {\n\t\t\t\tthis.view._model[listener.modelCallbackName](event);\n\t\t\t});\n\t\t}\n\t\t// else if (this.componentRef.encapsulation === 'template' && !this.view.hasParentComponent()) {\n\t\t// \tthis.addNativeEventListener(this.view, eventName, eventCallback);\n\t\t// }\n\t\telse {\n\t\t\t// listen to internal changes\n\t\t\t// TODO: need to resolve parameter\n\t\t\taddChangeListener(sourceModel, eventName, () => this.view._model[listener.modelCallbackName]());\n\t\t}\n\t}\n\taddNativeEventListener(source: HTMLElement | Window, eventName: string, funcCallback: Function) {\n\t\tsource.addEventListener(eventName, (event: Event) => {\n\t\t\tfuncCallback.call(this.view._model, event);\n\t\t});\n\t}\n\tgetElementByName(name: string) {\n\t\treturn Reflect.get(this.view, name);\n\t}\n\tcreateDirective(directive: DOMDirectiveNode<ExpressionNode>, comment: Comment, directiveStack: Stack): void {\n\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<T>(directive.directiveName);\n\t\tif (directiveRef) {\n\t\t\t// structural directive selector\n\t\t\tconst structural = new directiveRef.modelClass(this, comment, directive, directiveStack.copyStack());\n\t\t\tif (isOnInit(structural)) {\n\t\t\t\tstructural.onInit();\n\t\t\t}\n\t\t\tif (isOnDestroy(structural)) {\n\t\t\t\tthis.view._model.subscribeModel('destroy', () => structural.onDestroy());\n\t\t\t}\n\t\t} else {\n\t\t\t// didn't find directive or it is not define yet.\n\t\t\t// class registry should have 'when defined' callback\n\t\t}\n\t}\n\tcreateComment(node: CommentNode): Comment {\n\t\treturn document.createComment(`${node.comment}`);\n\t}\n\tcreateText(node: TextContent): Text {\n\t\treturn new Text(node.value);\n\t}\n\tcreateLiveText(textNode: LiveTextContent<ExpressionNode>, contextStack: Stack): Text {\n\t\tconst liveText = new Text('');\n\t\tcontextStack = contextStack.copyStack();\n\t\tcontextStack.pushBlockScopeFor({ this: liveText });\n\t\tthis.bind1Way(liveText, textNode, contextStack);\n\t\treturn liveText;\n\t}\n\tcreateDocumentFragment(node: DOMFragmentNode<ExpressionNode>, contextStack: Stack): DocumentFragment {\n\t\tconst fragment = document.createDocumentFragment();\n\t\tnode.children.forEach(child => this.appendChildToParent(fragment, child, contextStack));\n\t\treturn fragment;\n\t}\n\tappendChildToParent(parent: HTMLElement | DocumentFragment, child: DOMNode<ExpressionNode>, contextStack: Stack) {\n\t\tif (child instanceof DOMElementNode) {\n\t\t\tparent.append(this.createElement(child, contextStack));\n\t\t} else if (child instanceof DOMDirectiveNode) {\n\t\t\tconst comment = document.createComment(`start ${child.directiveName}: ${child.directiveValue}`);\n\t\t\tparent.append(comment);\n\t\t\tconst lastComment = document.createComment(`end ${child.directiveName}: ${child.directiveValue}`);\n\t\t\tcomment.after(lastComment);\n\t\t\tthis.createDirective(child, comment, contextStack);\n\t\t} else if (child instanceof LiveTextContent) {\n\t\t\tparent.append(this.createLiveText(child, contextStack));\n\t\t} else if (child instanceof TextContent) {\n\t\t\tparent.append(this.createText(child));\n\t\t} else if (child instanceof CommentNode) {\n\t\t\tparent.append(this.createComment(child));\n\t\t} else if (child instanceof DOMFragmentNode) {\n\t\t\tparent.append(this.createDocumentFragment(child, contextStack));\n\t\t}\n\t}\n\tcreateElementByTagName(node: DOMElementNode<ExpressionNode>): HTMLElement {\n\t\tlet element: HTMLElement;\n\t\tif (isValidCustomElementName(node.tagName)) {\n\t\t\tconst ViewClass = customElements.get(node.tagName) as ((new () => HTMLElement) | undefined);\n\t\t\tif (ViewClass) {\n\t\t\t\telement = new ViewClass();\n\t\t\t} else {\n\t\t\t\telement = document.createElement(node.tagName);\n\t\t\t\tif (element.constructor.name === 'HTMLElement') {\n\t\t\t\t\tcustomElements.whenDefined(node.tagName).then(() => customElements.upgrade(element));\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (isTagNameNative(node.tagName)) {\n\t\t\t// native tags // and custom tags can be used her\n\t\t\telement = document.createElement(node.tagName, node.is ? { is: node.is } : undefined);\n\t\t} else {\n\t\t\t// html unknown element\n\t\t\telement = document.createElement(node.tagName);\n\t\t}\n\t\tif (isHTMLComponent(element)) {\n\t\t\telement.setParentComponent(this.view);\n\t\t}\n\t\treturn element;\n\t}\n\tcreateElement(node: DOMElementNode<ExpressionNode>, contextStack: Stack): HTMLElement {\n\t\tconst element = this.createElementByTagName(node);\n\t\tconst elContext = new ElementReactiveScope(element);\n\t\tcontextStack = contextStack.copyStack();\n\t\tcontextStack.pushScope(elContext);\n\t\tthis.initAttribute(element, node, contextStack);\n\t\tif (node.templateRefName) {\n\t\t\tReflect.set(this.view, node.templateRefName.name, element);\n\t\t\tconst view = this.componentRef.viewChild.find(child => child.selector === node.templateRefName.name);\n\t\t\tif (view) {\n\t\t\t\tReflect.set(this.view._model, view.modelName, element);\n\t\t\t}\n\t\t}\n\t\tif (node.children) {\n\t\t\tfor (const child of node.children) {\n\t\t\t\tthis.appendChildToParent(element, child, contextStack);\n\t\t\t}\n\t\t}\n\t\treturn element;\n\t}\n\tinitAttribute(element: HTMLElement, node: DOMElementNode<ExpressionNode>, contextStack: Stack): void {\n\t\tif (node.attributes) {\n\t\t\tnode.attributes.forEach(attr => {\n\t\t\t\t/**\n\t\t\t\t * <input id=\"23\" name=\"person-name\" />\n\t\t\t\t */\n\t\t\t\tconst isAttr = hasAttr(element, attr.name);\n\t\t\t\tif (isAttr) {\n\t\t\t\t\tif (attr.value === false) {\n\t\t\t\t\t\telement.removeAttribute(attr.name);\n\t\t\t\t\t} else if (attr.value === true) {\n\t\t\t\t\t\telement.setAttribute(attr.name, '');\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.setAttribute(attr.name, attr.value as string);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tReflect.set(element, attr.name, attr.value);\n\t\t\t\t}\n\t\t\t\t// (attr.node as ExpressionNode).set(contextStack, attr.value);\n\t\t\t});\n\t\t}\n\t\tif (node.twoWayBinding) {\n\t\t\tnode.twoWayBinding.forEach(attr => {\n\t\t\t\tthis.bind2Way(element, attr, contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.inputs) {\n\t\t\tnode.inputs.forEach(attr => {\n\t\t\t\tthis.bind1Way(element, attr, contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.outputs) {\n\t\t\tnode.outputs.forEach(event => {\n\t\t\t\tlet listener: Function;\n\t\t\t\t/**\n\t\t\t\t * <a (click)=\"onLinkClick($event)\"></a>\n\t\t\t\t * <a @click=\"onLinkClick($event)\"></a>\n\t\t\t\t * <input [(value)]=\"person.name\" />\n\t\t\t\t * <input (value)=\"person.name\" />\n\t\t\t\t * <!-- <input (value)=\"person.name = $event\" /> -->\n\t\t\t\t * \n\t\t\t\t * TODO: diff of event listener and back-way data binding\n\t\t\t\t */\n\t\t\t\tif (typeof event.value === 'string') {\n\t\t\t\t\tlistener = ($event: Event) => {\n\t\t\t\t\t\tconst stack = contextStack.copyStack();\n\t\t\t\t\t\tstack.pushBlockScopeFor({ $event });\n\t\t\t\t\t\tevent.expression.get(stack, this.view._model);\n\t\t\t\t\t};\n\t\t\t\t} else /* if (typeof event.sourceHandler === 'function')*/ {\n\t\t\t\t\t// let eventName: keyof HTMLElementEventMap = event.eventName;\n\t\t\t\t\tlistener = event.value;\n\t\t\t\t}\n\t\t\t\telement.addEventListener(event.name as any, listener as any);\n\t\t\t});\n\t\t}\n\t\tif (node.templateAttrs) {\n\t\t\tnode.templateAttrs.forEach(attr => {\n\t\t\t\tthis.bind1Way(element, attr, contextStack);\n\t\t\t});\n\t\t}\n\t}\n\n\tbind1Way(element: HTMLElement | Text, attr: LiveAttribute<ExpressionNode> | LiveTextContent<ExpressionNode>, contextStack: Stack) {\n\t\tconst callback = () => {\n\t\t\tattr.expression.get(contextStack);\n\t\t};\n\t\tthis.subscribeExpressionNode(attr.expression, contextStack, callback, element, attr.name);\n\t\tcallback();\n\t}\n\tsubscribeExpressionNode(node: ExpressionNode, contextStack: Stack, callback: SourceFollowerCallback, object?: object, attrName?: string) {\n\t\tnode.events().forEach(eventName => {\n\t\t\tconst context = contextStack.findScope(eventName)?.getContext();\n\t\t\tif (context) {\n\t\t\t\tif (AsyncPipeProvider.AsyncPipeContext === context) {\n\t\t\t\t\tconst pipe: PipeTransform<any, any> = contextStack.get(eventName);\n\t\t\t\t\tsubscribe1way(pipe, eventName, callback, object, attrName);\n\t\t\t\t\tif (isOnDestroy(pipe)) {\n\t\t\t\t\t\tthis.view._model.subscribeModel('destroy', () => pipe.onDestroy());\n\t\t\t\t\t}\n\t\t\t\t\tconst pipeContext: { [key: string]: Function; } = {};\n\t\t\t\t\tpipeContext[eventName] = pipe.transform.bind(pipe);\n\t\t\t\t\tcontextStack.pushBlockScopeFor(pipeContext);\n\t\t\t\t} else if (PipeProvider.PipeContext !== context) {\n\t\t\t\t\tsubscribe1way(context, eventName, callback, object, attrName);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tbind2Way(element: HTMLElement, attr: LiveAttribute<ExpressionNode>, contextStack: Stack) {\n\t\tconst callback1 = () => {\n\t\t\tattr.expression.get(contextStack);\n\t\t};\n\t\tconst callback2 = () => {\n\t\t\tattr.callbackExpression.get(contextStack);\n\t\t};\n\t\tattr.expression.events().forEach(eventName => {\n\t\t\tconst context = contextStack.findScope(eventName)?.getContext();\n\t\t\tif (context) {\n\t\t\t\tif (AsyncPipeProvider.AsyncPipeContext === context) {\n\t\t\t\t\tconst pipe: PipeTransform<any, any> = contextStack.get(eventName);\n\t\t\t\t\tsubscribe2way(pipe, eventName, callback1, element, attr.name, callback2);\n\t\t\t\t\tif (isOnDestroy(pipe)) {\n\t\t\t\t\t\tthis.view._model.subscribeModel('destroy', () => pipe.onDestroy());\n\t\t\t\t\t}\n\t\t\t\t\tconst pipeContext: { [key: string]: Function } = {};\n\t\t\t\t\tpipeContext[eventName] = pipe.transform.bind(pipe);\n\t\t\t\t\tcontextStack.pushBlockScopeFor(pipeContext);\n\t\t\t\t} else if (PipeProvider.PipeContext !== context) {\n\t\t\t\t\tsubscribe2way(context, eventName, callback1, element, attr.name, callback2);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tcallback1();\n\t\tconst changeEventName = getChangeEventName(element, attr.name);\n\t\tif ((changeEventName === 'input' || changeEventName === 'change')\n\t\t\t&& isModel(element)) {\n\t\t\telement.addEventListener(changeEventName, () => {\n\t\t\t\telement.emitChangeModel(attr.name);\n\t\t\t});\n\t\t}\n\t\telse if (isHTMLComponent(element)) {\n\t\t\t// ignore, it is applied by default\n\t\t}\n\t\telse {\n\t\t\tif (!this.nativeElementMutation) {\n\t\t\t\tthis.nativeElementMutation = new ElementMutation();\n\t\t\t}\n\t\t\tthis.nativeElementMutation.subscribe(element, attr.name, () => {\n\t\t\t\tif (isModel(element)) {\n\t\t\t\t\telement.emitChangeModel(attr.name);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n}\n"]}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/core/view/render.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpressionNode, Stack } from '@ibyar/expressions';\nimport {\n\tCommentNode, DOMDirectiveNode,\n\tDOMElementNode, DOMFragmentNode, DOMNode,\n\tisTagNameNative, isValidCustomElementName,\n\tLiveAttribute, LiveTextContent, TextContent\n} from '@ibyar/elements';\nimport { ComponentRef, ListenerRef } from '../component/component.js';\nimport { ElementMutation } from './mutation.js';\nimport { HTMLComponent, isHTMLComponent } from '../component/custom-element.js';\nimport { documentStack } from '../context/stack.js';\nimport { ClassRegistryProvider } from '../providers/provider.js';\nimport { EventEmitter } from '../component/events.js';\nimport { isOnDestroy, isOnInit } from '../component/lifecycle.js';\nimport { hasAttr } from '../utils/elements-util.js';\nimport {\n\taddChangeListener, isModel, Model,\n\tSourceFollowerCallback, subscribe1way, subscribe2way\n} from '../model/change-detection.js';\nimport { AsyncPipeProvider, PipeProvider, PipeTransform } from '../pipe/pipe.js';\nimport { ElementReactiveScope } from '../directive/providers.js';\n\nfunction getChangeEventName(element: HTMLElement, elementAttr: string): 'input' | 'change' | string {\n\tif (elementAttr === 'value') {\n\t\tif (element instanceof HTMLInputElement) {\n\t\t\treturn 'input';\n\t\t} else if (element instanceof HTMLSelectElement\n\t\t\t|| element instanceof HTMLTextAreaElement) {\n\t\t\treturn 'change';\n\t\t}\n\t}\n\treturn elementAttr;\n}\nexport class ComponentRender<T> {\n\tcomponentRef: ComponentRef<T>;\n\ttemplate: DOMNode<ExpressionNode>;\n\tnativeElementMutation: ElementMutation;\n\tcontextStack: Stack;\n\ttemplateRefMap = new Map<string, DOMElementNode<ExpressionNode>>();\n\tconstructor(public view: HTMLComponent<T>) {\n\t\tthis.componentRef = this.view.getComponentRef();\n\t\tthis.contextStack = documentStack.copyStack();\n\t\tthis.contextStack.pushFunctionScope(); // to protect documentStack\n\t\tthis.contextStack.pushScope(this.view._viewScope);\n\t\tthis.contextStack.pushScope(this.view._modelScope);\n\t}\n\tinitView(): void {\n\t\tif (this.componentRef.template) {\n\t\t\tif (typeof this.componentRef.template === 'function') {\n\t\t\t\tthis.template = this.componentRef.template(this.view._model);\n\t\t\t} else {\n\t\t\t\tthis.template = this.componentRef.template;\n\t\t\t}\n\n\t\t\tlet rootRef: HTMLElement | ShadowRoot;\n\t\t\tif (this.componentRef.isShadowDom) {\n\t\t\t\tif (this.view.shadowRoot /* OPEN MODE */) {\n\t\t\t\t\trootRef = this.view.shadowRoot;\n\t\t\t\t} else /* CLOSED MODE*/ {\n\t\t\t\t\trootRef = Reflect.get(this.view, '_shadowRoot') as ShadowRoot;\n\t\t\t\t\tReflect.deleteProperty(this.view, '_shadowRoot');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trootRef = this.view;\n\t\t\t}\n\t\t\tthis.initTemplateRefMap(this.template);\n\t\t\tconst rootFragment = document.createDocumentFragment();\n\t\t\tthis.appendChildToParent(rootFragment, this.template, this.contextStack);\n\t\t\trootRef.append(rootFragment);\n\t\t}\n\t}\n\tisTemplateRefName(template: DOMNode<ExpressionNode>): template is DOMElementNode<ExpressionNode> {\n\t\tif (template instanceof DOMElementNode) {\n\t\t\tif (template.tagName === 'template' && template.templateRefName) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tinitTemplateRefMap(domNode: DOMNode<ExpressionNode>) {\n\t\tif (domNode instanceof DOMElementNode || domNode instanceof DOMDirectiveNode || domNode instanceof DOMFragmentNode) {\n\t\t\tif (domNode.children) {\n\t\t\t\tconst toRemove: { index: number, template: DOMElementNode<ExpressionNode> }[] = [];\n\t\t\t\tfor (let index = 0; index < domNode.children.length; index++) {\n\t\t\t\t\tconst child = domNode.children[index];\n\t\t\t\t\tif (this.isTemplateRefName(child)) {\n\t\t\t\t\t\ttoRemove.unshift({ index, template: child });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.initTemplateRefMap(child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoRemove.forEach(info => {\n\t\t\t\t\tthis.templateRefMap.set(info.template.templateRefName.name, info.template);\n\t\t\t\t\tdomNode.children.splice(info.index, 1);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tinitHostListener(): void {\n\t\tthis.componentRef.hostListeners?.forEach(\n\t\t\tlistener => this.handelHostListener(listener)\n\t\t);\n\t}\n\thandelHostListener(listener: ListenerRef) {\n\t\tlet eventName: string = listener.eventName, source: HTMLElement | Window;\n\t\tif (listener.eventName.includes(':')) {\n\t\t\tconst eventSource = eventName.substring(0, eventName.indexOf(':'));\n\t\t\teventName = eventName.substring(eventName.indexOf(':') + 1);\n\t\t\tif ('window' === eventSource.toLowerCase()) {\n\t\t\t\tsource = window;\n\t\t\t\tthis.addNativeEventListener(source, eventName, (event: any) => {\n\t\t\t\t\tthis.view._model[listener.modelCallbackName](event);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t} else if (eventSource in this.view) {\n\t\t\t\tsource = Reflect.get(this.view, eventSource);\n\t\t\t\tif (!Reflect.has(source, '_model')) {\n\t\t\t\t\tthis.addNativeEventListener(source, eventName, (event: any) => {\n\t\t\t\t\t\tthis.view._model[listener.modelCallbackName](event);\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsource = this.view;\n\t\t\t}\n\t\t} else {\n\t\t\tsource = this.view;\n\t\t}\n\t\tconst sourceModel = Reflect.get(source, '_model') as Model & { [key: string]: EventEmitter<any> };\n\t\tconst output = ClassRegistryProvider.hasOutput(sourceModel, eventName);\n\t\tif (output) {\n\t\t\tsourceModel[output.modelProperty].subscribe((value: any) => {\n\t\t\t\tthis.view._model[listener.modelCallbackName](value);\n\t\t\t});\n\t\t}\n\t\telse if (Reflect.has(source, 'on' + eventName)) {\n\t\t\tthis.addNativeEventListener(source, eventName, (event: any) => {\n\t\t\t\tthis.view._model[listener.modelCallbackName](event);\n\t\t\t});\n\t\t}\n\t\t// else if (this.componentRef.encapsulation === 'template' && !this.view.hasParentComponent()) {\n\t\t// \tthis.addNativeEventListener(this.view, eventName, eventCallback);\n\t\t// }\n\t\telse {\n\t\t\t// listen to internal changes\n\t\t\t// TODO: need to resolve parameter\n\t\t\taddChangeListener(sourceModel, eventName, () => this.view._model[listener.modelCallbackName]());\n\t\t}\n\t}\n\taddNativeEventListener(source: HTMLElement | Window, eventName: string, funcCallback: Function) {\n\t\tsource.addEventListener(eventName, (event: Event) => {\n\t\t\tfuncCallback.call(this.view._model, event);\n\t\t});\n\t}\n\tgetElementByName(name: string) {\n\t\treturn Reflect.get(this.view, name);\n\t}\n\tcreateDirective(directive: DOMDirectiveNode<ExpressionNode>, comment: Comment, directiveStack: Stack): void {\n\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<T>(directive.directiveName);\n\t\tif (directiveRef) {\n\t\t\t// structural directive selector\n\t\t\tconst structural = new directiveRef.modelClass(this, comment, directive, directiveStack.copyStack());\n\t\t\tif (isOnInit(structural)) {\n\t\t\t\tstructural.onInit();\n\t\t\t}\n\t\t\tif (isOnDestroy(structural)) {\n\t\t\t\tthis.view._model.subscribeModel('destroy', () => structural.onDestroy());\n\t\t\t}\n\t\t} else {\n\t\t\t// didn't find directive or it is not define yet.\n\t\t\t// class registry should have 'when defined' callback\n\t\t}\n\t}\n\tcreateComment(node: CommentNode): Comment {\n\t\treturn document.createComment(`${node.comment}`);\n\t}\n\tcreateText(node: TextContent): Text {\n\t\treturn new Text(node.value);\n\t}\n\tcreateLiveText(textNode: LiveTextContent<ExpressionNode>, contextStack: Stack): Text {\n\t\tconst liveText = new Text('');\n\t\tcontextStack = contextStack.copyStack();\n\t\tcontextStack.pushBlockScopeFor({ this: liveText });\n\t\tthis.bind1Way(liveText, textNode, contextStack);\n\t\treturn liveText;\n\t}\n\tcreateDocumentFragment(node: DOMFragmentNode<ExpressionNode>, contextStack: Stack): DocumentFragment {\n\t\tconst fragment = document.createDocumentFragment();\n\t\tnode.children.forEach(child => this.appendChildToParent(fragment, child, contextStack));\n\t\treturn fragment;\n\t}\n\tappendChildToParent(parent: HTMLElement | DocumentFragment, child: DOMNode<ExpressionNode>, contextStack: Stack) {\n\t\tif (child instanceof DOMElementNode) {\n\t\t\tparent.append(this.createElement(child, contextStack));\n\t\t} else if (child instanceof DOMDirectiveNode) {\n\t\t\tconst comment = document.createComment(`start ${child.directiveName}: ${child.directiveValue}`);\n\t\t\tparent.append(comment);\n\t\t\tconst lastComment = document.createComment(`end ${child.directiveName}: ${child.directiveValue}`);\n\t\t\tcomment.after(lastComment);\n\t\t\tthis.createDirective(child, comment, contextStack);\n\t\t} else if (child instanceof LiveTextContent) {\n\t\t\tparent.append(this.createLiveText(child, contextStack));\n\t\t} else if (child instanceof TextContent) {\n\t\t\tparent.append(this.createText(child));\n\t\t} else if (child instanceof CommentNode) {\n\t\t\tparent.append(this.createComment(child));\n\t\t} else if (child instanceof DOMFragmentNode) {\n\t\t\tparent.append(this.createDocumentFragment(child, contextStack));\n\t\t}\n\t}\n\tcreateElementByTagName(node: DOMElementNode<ExpressionNode>): HTMLElement {\n\t\tlet element: HTMLElement;\n\t\tif (isValidCustomElementName(node.tagName)) {\n\t\t\tconst ViewClass = customElements.get(node.tagName) as ((new () => HTMLElement) | undefined);\n\t\t\tif (ViewClass) {\n\t\t\t\telement = new ViewClass();\n\t\t\t} else {\n\t\t\t\telement = document.createElement(node.tagName);\n\t\t\t\tif (element.constructor.name === 'HTMLElement') {\n\t\t\t\t\tcustomElements.whenDefined(node.tagName).then(() => customElements.upgrade(element));\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (isTagNameNative(node.tagName)) {\n\t\t\t// native tags // and custom tags can be used her\n\t\t\telement = document.createElement(node.tagName, node.is ? { is: node.is } : undefined);\n\t\t} else {\n\t\t\t// html unknown element\n\t\t\telement = document.createElement(node.tagName);\n\t\t}\n\t\tif (isHTMLComponent(element)) {\n\t\t\telement.setParentComponent(this.view);\n\t\t}\n\t\treturn element;\n\t}\n\tcreateElement(node: DOMElementNode<ExpressionNode>, contextStack: Stack): HTMLElement {\n\t\tconst element = this.createElementByTagName(node);\n\t\tconst elContext = isHTMLComponent(element) ? element._viewScope : new ElementReactiveScope(element);\n\t\tcontextStack = contextStack.copyStack();\n\t\tcontextStack.pushScope(elContext);\n\t\tthis.initAttribute(element, node, contextStack);\n\t\tif (node.templateRefName) {\n\t\t\tReflect.set(this.view, node.templateRefName.name, element);\n\t\t\tconst view = this.componentRef.viewChild.find(child => child.selector === node.templateRefName.name);\n\t\t\tif (view) {\n\t\t\t\tReflect.set(this.view._model, view.modelName, element);\n\t\t\t}\n\t\t}\n\t\tif (node.children) {\n\t\t\tfor (const child of node.children) {\n\t\t\t\tthis.appendChildToParent(element, child, contextStack);\n\t\t\t}\n\t\t}\n\t\treturn element;\n\t}\n\tinitAttribute(element: HTMLElement, node: DOMElementNode<ExpressionNode>, contextStack: Stack): void {\n\t\tif (node.attributes) {\n\t\t\tnode.attributes.forEach(attr => {\n\t\t\t\t/**\n\t\t\t\t * <input id=\"23\" name=\"person-name\" />\n\t\t\t\t */\n\t\t\t\tconst isAttr = hasAttr(element, attr.name);\n\t\t\t\tif (isAttr) {\n\t\t\t\t\tif (attr.value === false) {\n\t\t\t\t\t\telement.removeAttribute(attr.name);\n\t\t\t\t\t} else if (attr.value === true) {\n\t\t\t\t\t\telement.setAttribute(attr.name, '');\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.setAttribute(attr.name, attr.value as string);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tReflect.set(element, attr.name, attr.value);\n\t\t\t\t}\n\t\t\t\t// (attr.node as ExpressionNode).set(contextStack, attr.value);\n\t\t\t});\n\t\t}\n\t\tif (node.twoWayBinding) {\n\t\t\tnode.twoWayBinding.forEach(attr => {\n\t\t\t\tthis.bind2Way(element, attr, contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.inputs) {\n\t\t\tnode.inputs.forEach(attr => {\n\t\t\t\tthis.bind1Way(element, attr, contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.outputs) {\n\t\t\tnode.outputs.forEach(event => {\n\t\t\t\tlet listener: Function;\n\t\t\t\t/**\n\t\t\t\t * <a (click)=\"onLinkClick($event)\"></a>\n\t\t\t\t * <a @click=\"onLinkClick($event)\"></a>\n\t\t\t\t * <input [(value)]=\"person.name\" />\n\t\t\t\t * <input (value)=\"person.name\" />\n\t\t\t\t * <!-- <input (value)=\"person.name = $event\" /> -->\n\t\t\t\t * \n\t\t\t\t * TODO: diff of event listener and back-way data binding\n\t\t\t\t */\n\t\t\t\tif (typeof event.value === 'string') {\n\t\t\t\t\tlistener = ($event: Event) => {\n\t\t\t\t\t\tconst stack = contextStack.copyStack();\n\t\t\t\t\t\tstack.pushBlockScopeFor({ $event });\n\t\t\t\t\t\tevent.expression.get(stack, this.view._model);\n\t\t\t\t\t};\n\t\t\t\t} else /* if (typeof event.sourceHandler === 'function')*/ {\n\t\t\t\t\t// let eventName: keyof HTMLElementEventMap = event.eventName;\n\t\t\t\t\tlistener = event.value;\n\t\t\t\t}\n\t\t\t\telement.addEventListener(event.name as any, listener as any);\n\t\t\t});\n\t\t}\n\t\tif (node.templateAttrs) {\n\t\t\tnode.templateAttrs.forEach(attr => {\n\t\t\t\tthis.bind1Way(element, attr, contextStack);\n\t\t\t});\n\t\t}\n\t}\n\n\tbind1Way(element: HTMLElement | Text, attr: LiveAttribute<ExpressionNode> | LiveTextContent<ExpressionNode>, contextStack: Stack) {\n\t\tconst callback = () => {\n\t\t\tattr.expression.get(contextStack);\n\t\t};\n\t\tthis.subscribeExpressionNode(attr.expression, contextStack, callback, element, attr.name);\n\t\tcallback();\n\t}\n\tsubscribeExpressionNode(node: ExpressionNode, contextStack: Stack, callback: SourceFollowerCallback, object?: object, attrName?: string) {\n\t\tnode.events().forEach(eventName => {\n\t\t\tconst context = contextStack.findScope(eventName)?.getContext();\n\t\t\tif (context) {\n\t\t\t\tif (AsyncPipeProvider.AsyncPipeContext === context) {\n\t\t\t\t\tconst pipe: PipeTransform<any, any> = contextStack.get(eventName);\n\t\t\t\t\tsubscribe1way(pipe, eventName, callback, object, attrName);\n\t\t\t\t\tif (isOnDestroy(pipe)) {\n\t\t\t\t\t\tthis.view._model.subscribeModel('destroy', () => pipe.onDestroy());\n\t\t\t\t\t}\n\t\t\t\t\tconst pipeContext: { [key: string]: Function; } = {};\n\t\t\t\t\tpipeContext[eventName] = pipe.transform.bind(pipe);\n\t\t\t\t\tcontextStack.pushBlockScopeFor(pipeContext);\n\t\t\t\t} else if (PipeProvider.PipeContext !== context) {\n\t\t\t\t\tsubscribe1way(context, eventName, callback, object, attrName);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tbind2Way(element: HTMLElement, attr: LiveAttribute<ExpressionNode>, contextStack: Stack) {\n\t\tconst callback1 = () => {\n\t\t\tattr.expression.get(contextStack);\n\t\t};\n\t\tconst callback2 = () => {\n\t\t\tattr.callbackExpression.get(contextStack);\n\t\t};\n\t\tattr.expression.events().forEach(eventName => {\n\t\t\tconst context = contextStack.findScope(eventName)?.getContext();\n\t\t\tif (context) {\n\t\t\t\tif (AsyncPipeProvider.AsyncPipeContext === context) {\n\t\t\t\t\tconst pipe: PipeTransform<any, any> = contextStack.get(eventName);\n\t\t\t\t\tsubscribe2way(pipe, eventName, callback1, element, attr.name, callback2);\n\t\t\t\t\tif (isOnDestroy(pipe)) {\n\t\t\t\t\t\tthis.view._model.subscribeModel('destroy', () => pipe.onDestroy());\n\t\t\t\t\t}\n\t\t\t\t\tconst pipeContext: { [key: string]: Function } = {};\n\t\t\t\t\tpipeContext[eventName] = pipe.transform.bind(pipe);\n\t\t\t\t\tcontextStack.pushBlockScopeFor(pipeContext);\n\t\t\t\t} else if (PipeProvider.PipeContext !== context) {\n\t\t\t\t\tsubscribe2way(context, eventName, callback1, element, attr.name, callback2);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tcallback1();\n\t\tconst changeEventName = getChangeEventName(element, attr.name);\n\t\tif ((changeEventName === 'input' || changeEventName === 'change')\n\t\t\t&& isModel(element)) {\n\t\t\telement.addEventListener(changeEventName, () => {\n\t\t\t\telement.emitChangeModel(attr.name);\n\t\t\t});\n\t\t}\n\t\telse if (isHTMLComponent(element)) {\n\t\t\t// ignore, it is applied by default\n\t\t}\n\t\telse {\n\t\t\tif (!this.nativeElementMutation) {\n\t\t\t\tthis.nativeElementMutation = new ElementMutation();\n\t\t\t}\n\t\t\tthis.nativeElementMutation.subscribe(element, attr.name, () => {\n\t\t\t\tif (isModel(element)) {\n\t\t\t\t\telement.emitChangeModel(attr.name);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n}\n"]}
package/view/view.js CHANGED
@@ -24,7 +24,7 @@ export function initCustomElementView(modelClass, componentRef) {
24
24
  return this._model[input.modelProperty] || parentProperty?.get?.call(this);
25
25
  },
26
26
  set(value) {
27
- this._model[input.modelProperty] = value;
27
+ this._modelScope.set(input.modelProperty, value);
28
28
  if (parentProperty?.set) {
29
29
  parentProperty.set.call(this, value);
30
30
  }
package/view/view.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/core/view/view.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TypeOf } from '../utils/typeof.js';\nimport { isFormElement } from '@ibyar/elements';\nimport { ComponentRef } from '../component/component.js';\nimport { HTMLComponent } from '../component/custom-element.js';\nimport { EventEmitter, Subscription } from '../component/events.js';\nimport { ToCamelCase } from '../utils/utils.js';\nimport { Constructable } from '../providers/injector.js';\nimport { baseFactoryView } from './base-view.js';\nimport { baseFormFactoryView } from './form-view.js';\n\n/**\n * \n * @param modelClass \n * @param componentRef \n */\nexport function initCustomElementView<T extends Object>(modelClass: TypeOf<T>, componentRef: ComponentRef<T>): TypeOf<HTMLComponent<T>> {\n\tconst htmlParent = componentRef.extend.classRef as TypeOf<HTMLElement>;\n\tlet viewClass: TypeOf<HTMLComponent<T>>;\n\tconst viewClassName = buildViewClassNameFromSelector(componentRef.selector);\n\tconst htmlViewClassName = `HTML${viewClassName}Element`;\n\tconst parentClass = componentRef.extend.name\n\t\t? (isFormElement(componentRef.extend.name)\n\t\t\t? baseFormFactoryView<T>(htmlParent)\n\t\t\t: baseFactoryView<T>(htmlParent)\n\t\t)\n\t\t: baseFactoryView<T>(HTMLElement);\n\tviewClass = ({\n\t\t[htmlViewClassName]: class extends parentClass { constructor() { super(componentRef, modelClass); } }\n\t})[htmlViewClassName];\n\n\tcomponentRef.inputs.forEach((input) => {\n\t\tconst parentProperty = Object.getOwnPropertyDescriptor(\n\t\t\thtmlParent.prototype,\n\t\t\tinput.viewAttribute\n\t\t);\n\t\tObject.defineProperty(viewClass.prototype, input.viewAttribute, {\n\t\t\tget(this: HTMLComponent<T>): any {\n\t\t\t\treturn this._model[input.modelProperty] || parentProperty?.get?.call(this);\n\t\t\t},\n\t\t\tset(this: HTMLComponent<{ [key: string]: any; }>, value: any) {\n\t\t\t\tthis._model[input.modelProperty] = value;\n\t\t\t\tif (parentProperty?.set) {\n\t\t\t\t\tparentProperty.set.call(this, value);\n\t\t\t\t}\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t});\n\t});\n\n\tcomponentRef.outputs.forEach(output => {\n\t\tObject.defineProperty(viewClass.prototype, output.viewAttribute, {\n\t\t\tget(): EventEmitter<any> {\n\t\t\t\treturn this._model[output.modelProperty];\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t\tlet eventListener: Function | undefined;\n\t\tlet subscription: Subscription<any>;\n\t\tObject.defineProperty(viewClass.prototype, 'on' + ToCamelCase(output.viewAttribute), {\n\t\t\t// get(): EventEmitter<any> {\n\t\t\t// \t// return this._model[output.modelProperty];\n\t\t\t// },\n\t\t\tget(): Function | undefined {\n\t\t\t\t// return this._model[output.modelProperty];\n\t\t\t\treturn eventListener;\n\t\t\t},\n\t\t\tset(this: HTMLComponent<T>, event: string | Function): void {\n\t\t\t\tif (!event) {\n\t\t\t\t\tif (subscription) {\n\t\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\t\teventListener = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof event === 'string') {\n\t\t\t\t\tif (event.endsWith('()')) {\n\t\t\t\t\t\tevent = event.substring(0, event.length - 2);\n\t\t\t\t\t}\n\t\t\t\t\tevent = Reflect.get(window, event);\n\t\t\t\t}\n\t\t\t\teventListener = event as Function;\n\t\t\t\tsubscription = (this._model[output.modelProperty] as EventEmitter<any>).subscribe(event);\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t});\n\tObject.defineProperty(viewClass, 'observedAttributes', {\n\t\tget() {\n\t\t\treturn componentRef.inputs.map(input => input.viewAttribute);\n\t\t}\n\t});\n\t// https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-face-example\n\tif (false) {\n\t\tObject.defineProperty(viewClass, 'formAssociated', {\n\t\t\tget() {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t}\n\taddViewToModelClass<T>(modelClass, componentRef.selector, viewClass, htmlViewClassName);\n\tif (!Reflect.has(window, htmlViewClassName)) {\n\t\tReflect.set(window, htmlViewClassName, viewClass);\n\t}\n\treturn viewClass;\n}\n\nexport type ComponentModelClass = Constructable & { [key: string]: string } & { component: { [key: string]: string } };\n\nexport function isComponentModelClass(target: Constructable): target is ComponentModelClass {\n\treturn Reflect.has(target, 'component');\n}\n\nexport function addViewToModelClass<T>(modelClass: TypeOf<T>, selector: string, viewClass: TypeOf<HTMLComponent<T>>, htmlViewClassName: string) {\n\tObject.defineProperty(modelClass, htmlViewClassName, { value: viewClass });\n\n\tif (!isComponentModelClass(modelClass)) {\n\t\tReflect.set(modelClass, 'component', {});\n\t}\n\n\tif (isComponentModelClass(modelClass)) {\n\t\tmodelClass.component[selector] = htmlViewClassName;\n\t}\n}\n\nexport function buildViewClassNameFromSelector(selector: string) {\n\treturn selector\n\t\t.split('-')\n\t\t.map(name => name.replace(/^\\w/, char => char.toUpperCase()))\n\t\t.join('');\n}\n\nexport function ComponentView<T>(modelClass: TypeOf<T>, selector?: string): TypeOf<HTMLComponent<T>> | undefined {\n\tif (isComponentModelClass(modelClass)) {\n\t\tlet viewClassName: string;\n\t\tif (selector) {\n\t\t\tviewClassName = modelClass.component[selector];\n\t\t\tif (!viewClassName) {\n\t\t\t\tthrow new Error(`${modelClass.name} doesn't have ${selector} as view`);\n\t\t\t}\n\t\t} else {\n\t\t\tviewClassName = Object.keys(modelClass.component)[0];\n\t\t}\n\t\treturn Reflect.get(modelClass, viewClassName);\n\t}\n}\n"]}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/core/view/view.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TypeOf } from '../utils/typeof.js';\nimport { isFormElement } from '@ibyar/elements';\nimport { ComponentRef } from '../component/component.js';\nimport { HTMLComponent } from '../component/custom-element.js';\nimport { EventEmitter, Subscription } from '../component/events.js';\nimport { ToCamelCase } from '../utils/utils.js';\nimport { Constructable } from '../providers/injector.js';\nimport { baseFactoryView } from './base-view.js';\nimport { baseFormFactoryView } from './form-view.js';\n\n/**\n * \n * @param modelClass \n * @param componentRef \n */\nexport function initCustomElementView<T extends Object>(modelClass: TypeOf<T>, componentRef: ComponentRef<T>): TypeOf<HTMLComponent<T>> {\n\tconst htmlParent = componentRef.extend.classRef as TypeOf<HTMLElement>;\n\tlet viewClass: TypeOf<HTMLComponent<T>>;\n\tconst viewClassName = buildViewClassNameFromSelector(componentRef.selector);\n\tconst htmlViewClassName = `HTML${viewClassName}Element`;\n\tconst parentClass = componentRef.extend.name\n\t\t? (isFormElement(componentRef.extend.name)\n\t\t\t? baseFormFactoryView<T>(htmlParent)\n\t\t\t: baseFactoryView<T>(htmlParent)\n\t\t)\n\t\t: baseFactoryView<T>(HTMLElement);\n\tviewClass = ({\n\t\t[htmlViewClassName]: class extends parentClass { constructor() { super(componentRef, modelClass); } }\n\t})[htmlViewClassName];\n\n\tcomponentRef.inputs.forEach((input) => {\n\t\tconst parentProperty = Object.getOwnPropertyDescriptor(\n\t\t\thtmlParent.prototype,\n\t\t\tinput.viewAttribute\n\t\t);\n\t\tObject.defineProperty(viewClass.prototype, input.viewAttribute, {\n\t\t\tget(this: HTMLComponent<T>): any {\n\t\t\t\treturn this._model[input.modelProperty] || parentProperty?.get?.call(this);\n\t\t\t},\n\t\t\tset(this: HTMLComponent<{ [key: string]: any; }>, value: any) {\n\t\t\t\tthis._modelScope.set(input.modelProperty, value);\n\t\t\t\t// this._model[input.modelProperty] = value;\n\t\t\t\tif (parentProperty?.set) {\n\t\t\t\t\tparentProperty.set.call(this, value);\n\t\t\t\t}\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t});\n\t});\n\n\tcomponentRef.outputs.forEach(output => {\n\t\tObject.defineProperty(viewClass.prototype, output.viewAttribute, {\n\t\t\tget(): EventEmitter<any> {\n\t\t\t\treturn this._model[output.modelProperty];\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t\tlet eventListener: Function | undefined;\n\t\tlet subscription: Subscription<any>;\n\t\tObject.defineProperty(viewClass.prototype, 'on' + ToCamelCase(output.viewAttribute), {\n\t\t\t// get(): EventEmitter<any> {\n\t\t\t// \t// return this._model[output.modelProperty];\n\t\t\t// },\n\t\t\tget(): Function | undefined {\n\t\t\t\t// return this._model[output.modelProperty];\n\t\t\t\treturn eventListener;\n\t\t\t},\n\t\t\tset(this: HTMLComponent<T>, event: string | Function): void {\n\t\t\t\tif (!event) {\n\t\t\t\t\tif (subscription) {\n\t\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\t\teventListener = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof event === 'string') {\n\t\t\t\t\tif (event.endsWith('()')) {\n\t\t\t\t\t\tevent = event.substring(0, event.length - 2);\n\t\t\t\t\t}\n\t\t\t\t\tevent = Reflect.get(window, event);\n\t\t\t\t}\n\t\t\t\teventListener = event as Function;\n\t\t\t\tsubscription = (this._model[output.modelProperty] as EventEmitter<any>).subscribe(event);\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t});\n\tObject.defineProperty(viewClass, 'observedAttributes', {\n\t\tget() {\n\t\t\treturn componentRef.inputs.map(input => input.viewAttribute);\n\t\t}\n\t});\n\t// https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-face-example\n\tif (false) {\n\t\tObject.defineProperty(viewClass, 'formAssociated', {\n\t\t\tget() {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t}\n\taddViewToModelClass<T>(modelClass, componentRef.selector, viewClass, htmlViewClassName);\n\tif (!Reflect.has(window, htmlViewClassName)) {\n\t\tReflect.set(window, htmlViewClassName, viewClass);\n\t}\n\treturn viewClass;\n}\n\nexport type ComponentModelClass = Constructable & { [key: string]: string } & { component: { [key: string]: string } };\n\nexport function isComponentModelClass(target: Constructable): target is ComponentModelClass {\n\treturn Reflect.has(target, 'component');\n}\n\nexport function addViewToModelClass<T>(modelClass: TypeOf<T>, selector: string, viewClass: TypeOf<HTMLComponent<T>>, htmlViewClassName: string) {\n\tObject.defineProperty(modelClass, htmlViewClassName, { value: viewClass });\n\n\tif (!isComponentModelClass(modelClass)) {\n\t\tReflect.set(modelClass, 'component', {});\n\t}\n\n\tif (isComponentModelClass(modelClass)) {\n\t\tmodelClass.component[selector] = htmlViewClassName;\n\t}\n}\n\nexport function buildViewClassNameFromSelector(selector: string) {\n\treturn selector\n\t\t.split('-')\n\t\t.map(name => name.replace(/^\\w/, char => char.toUpperCase()))\n\t\t.join('');\n}\n\nexport function ComponentView<T>(modelClass: TypeOf<T>, selector?: string): TypeOf<HTMLComponent<T>> | undefined {\n\tif (isComponentModelClass(modelClass)) {\n\t\tlet viewClassName: string;\n\t\tif (selector) {\n\t\t\tviewClassName = modelClass.component[selector];\n\t\t\tif (!viewClassName) {\n\t\t\t\tthrow new Error(`${modelClass.name} doesn't have ${selector} as view`);\n\t\t\t}\n\t\t} else {\n\t\t\tviewClassName = Object.keys(modelClass.component)[0];\n\t\t}\n\t\treturn Reflect.get(modelClass, viewClassName);\n\t}\n}\n"]}