@ibyar/core 2.5.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/annotation/decorators.d.ts +2 -30
  2. package/annotation/decorators.d.ts.map +1 -1
  3. package/annotation/decorators.js +2 -89
  4. package/annotation/decorators.js.map +1 -1
  5. package/annotation/options.d.ts +12 -6
  6. package/annotation/options.d.ts.map +1 -1
  7. package/annotation/options.js.map +1 -1
  8. package/binding/binding.expressions copy.d.ts +43 -0
  9. package/binding/binding.expressions copy.d.ts.map +1 -0
  10. package/binding/binding.expressions copy.js +161 -0
  11. package/binding/binding.expressions copy.js.map +1 -0
  12. package/binding/signal.expressions.d.ts +50 -0
  13. package/binding/signal.expressions.d.ts.map +1 -0
  14. package/binding/signal.expressions.js +182 -0
  15. package/binding/signal.expressions.js.map +1 -0
  16. package/component/component.d.ts +1 -1
  17. package/component/component.d.ts.map +1 -1
  18. package/component/component.js +5 -8
  19. package/component/component.js.map +1 -1
  20. package/component/custom-element.d.ts +4 -15
  21. package/component/custom-element.d.ts.map +1 -1
  22. package/component/custom-element.js +1 -2
  23. package/component/custom-element.js.map +1 -1
  24. package/component/initializer.d.ts +39 -27
  25. package/component/initializer.d.ts.map +1 -1
  26. package/component/initializer.js +47 -29
  27. package/component/initializer.js.map +1 -1
  28. package/component/reflect.d.ts.map +1 -1
  29. package/component/reflect.js +8 -2
  30. package/component/reflect.js.map +1 -1
  31. package/di/provider.d.ts +1 -0
  32. package/di/provider.d.ts.map +1 -1
  33. package/di/provider.js +11 -0
  34. package/di/provider.js.map +1 -1
  35. package/directive/directive.d.ts +21 -12
  36. package/directive/directive.d.ts.map +1 -1
  37. package/directive/directive.js +76 -27
  38. package/directive/directive.js.map +1 -1
  39. package/html/deserialize.d.ts.map +1 -1
  40. package/html/deserialize.js +7 -0
  41. package/html/deserialize.js.map +1 -1
  42. package/html/expression.d.ts.map +1 -1
  43. package/html/expression.js +41 -8
  44. package/html/expression.js.map +1 -1
  45. package/linker/change-detector-ref.d.ts +3 -3
  46. package/linker/change-detector-ref.js.map +1 -1
  47. package/linker/template-ref.js +3 -3
  48. package/linker/template-ref.js.map +1 -1
  49. package/linker/view-container-ref.d.ts.map +1 -1
  50. package/linker/view-container-ref.js +4 -4
  51. package/linker/view-container-ref.js.map +1 -1
  52. package/linker/view-ref.d.ts +2 -2
  53. package/linker/view-ref.js.map +1 -1
  54. package/package.json +7 -7
  55. package/pipe/pipe.d.ts +2 -2
  56. package/pipe/pipe.js +2 -2
  57. package/pipe/pipe.js.map +1 -1
  58. package/signals/factory.d.ts +3 -7
  59. package/signals/factory.d.ts.map +1 -1
  60. package/signals/factory.js +6 -12
  61. package/signals/factory.js.map +1 -1
  62. package/signals/runtime.d.ts +6 -6
  63. package/signals/runtime.d.ts.map +1 -1
  64. package/signals/runtime.js +29 -18
  65. package/signals/runtime.js.map +1 -1
  66. package/signals/scopes.d.ts +4 -0
  67. package/signals/scopes.d.ts.map +1 -0
  68. package/signals/scopes.js +4 -0
  69. package/signals/scopes.js.map +1 -0
  70. package/signals/signals.d.ts +2 -7
  71. package/signals/signals.d.ts.map +1 -1
  72. package/signals/signals.js +0 -9
  73. package/signals/signals.js.map +1 -1
  74. package/utils/elements-util.d.ts +0 -1
  75. package/utils/elements-util.d.ts.map +1 -1
  76. package/utils/elements-util.js +0 -9
  77. package/utils/elements-util.js.map +1 -1
  78. package/view/base-view.d.ts.map +1 -1
  79. package/view/base-view.js +38 -84
  80. package/view/base-view.js.map +1 -1
  81. package/view/render.d.ts +5 -3
  82. package/view/render.d.ts.map +1 -1
  83. package/view/render.js +64 -30
  84. package/view/render.js.map +1 -1
  85. package/view/view.d.ts.map +1 -1
  86. package/view/view.js +3 -16
  87. package/view/view.js.map +1 -1
package/view/view.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { __esDecorate, __propKey, __runInitializers, __setFunctionName } from "tslib";
2
2
  import { Metadata } from '@ibyar/decorators';
3
- import { getReactiveNode, Signal } from '@ibyar/expressions';
4
3
  import { getAllAttributes } from '@ibyar/elements';
5
4
  import { ToCamelCase } from '../utils/utils.js';
6
5
  import { baseFactoryView } from './base-view.js';
@@ -62,22 +61,10 @@ export function initCustomElementView(modelClass, componentRef) {
62
61
  componentRef.inputs.forEach((input) => {
63
62
  Object.defineProperty(viewClass.prototype, input.viewAttribute, {
64
63
  get() {
65
- const value = this._modelScope.get(input.modelProperty);
66
- const signal = getReactiveNode(value);
67
- if (signal) {
68
- return signal.get();
69
- }
70
- return value;
64
+ return this._render.modelStack.get(input.modelProperty);
71
65
  },
72
66
  set(value) {
73
- const model = this._modelScope.get(input.modelProperty);
74
- const signal = getReactiveNode(model);
75
- if (signal instanceof Signal) {
76
- signal.set(value);
77
- }
78
- else {
79
- this._modelScope.set(input.modelProperty, value);
80
- }
67
+ return this._render.modelStack.set(input.modelProperty, value);
81
68
  },
82
69
  enumerable: true,
83
70
  });
@@ -91,7 +78,7 @@ export function initCustomElementView(modelClass, componentRef) {
91
78
  });
92
79
  let eventListener;
93
80
  let subscription;
94
- Object.defineProperty(viewClass.prototype, 'on' + ToCamelCase(output.viewAttribute), {
81
+ Object.defineProperty(viewClass.prototype, `on${ToCamelCase(output.viewAttribute)}`, {
95
82
  get() {
96
83
  return eventListener;
97
84
  },
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 { Type } from '../utils/typeof.js';\nimport { MetadataClass, Metadata } from '@ibyar/decorators';\nimport { getReactiveNode, Signal } from '@ibyar/expressions';\nimport { getAllAttributes } 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 { baseFactoryView } from './base-view.js';\nimport { baseFormFactoryView } from './form-view.js';\nimport { isComponentModelClass } from './utils.js';\n\nconst FACTORY_CACHE = new WeakMap<Type<HTMLElement>, Type<HTMLComponent<any>>>();\n\n/**\n * \n * @param modelClass \n * @param componentRef \n */\nexport function initCustomElementView<T extends Object>(modelClass: MetadataClass<T>, componentRef: ComponentRef<T>): MetadataClass<HTMLComponent<T>> {\n\tconst htmlParent = componentRef.extend.classRef as Type<HTMLElement>;\n\tconst viewClassName = buildViewClassNameFromSelector(componentRef.selector);\n\tconst htmlViewClassName = `HTML${viewClassName}Element`;\n\n\tlet parentClass: Type<HTMLComponent<T>>;\n\tif (componentRef.extendCustomElement) {\n\t\tparentClass = componentRef.extend.classRef as Type<HTMLComponent<T>>;\n\t} else {\n\t\tif (FACTORY_CACHE.has(htmlParent)) {\n\t\t\tparentClass = FACTORY_CACHE.get(htmlParent) as Type<HTMLComponent<T>>;\n\t\t} else {\n\t\t\tparentClass = componentRef.formAssociated ? baseFormFactoryView<T>(htmlParent) : baseFactoryView<T>(htmlParent);\n\t\t\tFACTORY_CACHE.set(htmlParent, parentClass);\n\t\t}\n\t}\n\n\tconst viewClass = ({\n\t\t[htmlViewClassName]: @Metadata() class extends parentClass {\n\t\t\tpublic static allAttributes: string[] = [];\n\t\t\tpublic static disabledFeatures: string[] = [];\n\t\t\tpublic static observedAttributes: string[] = [];\n\t\t\tconstructor(optionalComponentRef?: ComponentRef<T>, modelConstructor?: Type<T>) {\n\t\t\t\tsuper(optionalComponentRef ?? componentRef, modelConstructor ?? modelClass);\n\t\t\t}\n\t\t}\n\t})[htmlViewClassName];\n\n\tcomponentRef.inputs.forEach((input) => {\n\t\tObject.defineProperty(viewClass.prototype, input.viewAttribute, {\n\t\t\tget(this: HTMLComponent<T>): any {\n\t\t\t\tconst value = this._modelScope.get(input.modelProperty);\n\t\t\t\tconst signal = getReactiveNode(value);\n\t\t\t\tif (signal) {\n\t\t\t\t\treturn signal.get();\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(this: HTMLComponent<{ [key: string]: any; }>, value: any) {\n\t\t\t\tconst model = this._modelScope.get(input.modelProperty);\n\t\t\t\tconst signal = getReactiveNode(model);\n\t\t\t\tif (signal instanceof Signal) {\n\t\t\t\t\tsignal.set(value);\n\t\t\t\t} else {\n\t\t\t\t\tthis._modelScope.set(input.modelProperty, 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\tget(): Function | undefined {\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\n\tcomponentRef.inputs.map(input => input.modelProperty)\n\t\t.concat(componentRef.outputs.map(output => output.modelProperty))\n\t\t.concat(componentRef.hostBindings.map(host => host.hostPropertyName))\n\t\t.concat(componentRef.viewChild.map(child => child.modelName))\n\t\t.filter(modelName => !(modelName in modelClass.prototype))\n\t\t.forEach(modelName => modelClass.prototype[modelName] = undefined);\n\n\tconst defaultAttributes = getAllAttributes(componentRef.extend.name);\n\tconst observedAttributes = componentRef.inputs.map(input => input.viewAttribute)\n\t\t.concat(componentRef.outputs.map(output => 'on' + ToCamelCase(output.viewAttribute)));\n\tif (componentRef.formAssociated && !observedAttributes.includes('value')) {\n\t\tobservedAttributes.push('value');\n\t}\n\n\tviewClass.allAttributes.push(...defaultAttributes.concat(observedAttributes));\n\tviewClass.observedAttributes.push(...observedAttributes);\n\tif (Array.isArray(componentRef.disabledFeatures)) {\n\t\tviewClass.disabledFeatures.push(...componentRef.disabledFeatures);\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 as Type<HTMLComponent<T>> as MetadataClass;\n}\n\nexport type ComponentModelClass =\n\tMetadataClass\n\t& { [key: string]: string }\n\t& { component: { [key: string]: string } }\n\t& { [key: string]: Type<HTMLComponent<any>> };\n\nexport function addViewToModelClass<T extends object>(modelClass: MetadataClass<T>, selector: string, viewClass: Type<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"]}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/core/view/view.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Type } from '../utils/typeof.js';\nimport { MetadataClass, Metadata } from '@ibyar/decorators';\nimport { getAllAttributes } 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 { baseFactoryView } from './base-view.js';\nimport { baseFormFactoryView } from './form-view.js';\nimport { isComponentModelClass } from './utils.js';\n\nconst FACTORY_CACHE = new WeakMap<Type<HTMLElement>, Type<HTMLComponent<any>>>();\n\n/**\n * \n * @param modelClass \n * @param componentRef \n */\nexport function initCustomElementView<T extends Object>(modelClass: MetadataClass<T>, componentRef: ComponentRef<T>): MetadataClass<HTMLComponent<T>> {\n\tconst htmlParent = componentRef.extend.classRef as Type<HTMLElement>;\n\tconst viewClassName = buildViewClassNameFromSelector(componentRef.selector);\n\tconst htmlViewClassName = `HTML${viewClassName}Element`;\n\n\tlet parentClass: Type<HTMLComponent<T>>;\n\tif (componentRef.extendCustomElement) {\n\t\tparentClass = componentRef.extend.classRef as Type<HTMLComponent<T>>;\n\t} else {\n\t\tif (FACTORY_CACHE.has(htmlParent)) {\n\t\t\tparentClass = FACTORY_CACHE.get(htmlParent) as Type<HTMLComponent<T>>;\n\t\t} else {\n\t\t\tparentClass = componentRef.formAssociated ? baseFormFactoryView<T>(htmlParent) : baseFactoryView<T>(htmlParent);\n\t\t\tFACTORY_CACHE.set(htmlParent, parentClass);\n\t\t}\n\t}\n\n\tconst viewClass = ({\n\t\t[htmlViewClassName]: @Metadata() class extends parentClass {\n\t\t\tpublic static allAttributes: string[] = [];\n\t\t\tpublic static disabledFeatures: string[] = [];\n\t\t\tpublic static observedAttributes: string[] = [];\n\t\t\tconstructor(optionalComponentRef?: ComponentRef<T>, modelConstructor?: Type<T>) {\n\t\t\t\tsuper(optionalComponentRef ?? componentRef, modelConstructor ?? modelClass);\n\t\t\t}\n\t\t}\n\t})[htmlViewClassName];\n\n\tcomponentRef.inputs.forEach((input) => {\n\t\tObject.defineProperty(viewClass.prototype, input.viewAttribute, {\n\t\t\tget(this: HTMLComponent<T>): any {\n\t\t\t\treturn this._render.modelStack.get(input.modelProperty);\n\t\t\t},\n\t\t\tset(this: HTMLComponent<{ [key: string]: any; }>, value: any) {\n\t\t\t\treturn this._render.modelStack.set(input.modelProperty, value);\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\tget(): Function | undefined {\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\n\tcomponentRef.inputs.map(input => input.modelProperty)\n\t\t.concat(componentRef.outputs.map(output => output.modelProperty))\n\t\t.concat(componentRef.hostBindings.map(host => host.hostPropertyName))\n\t\t.concat(componentRef.viewChild.map(child => child.modelName))\n\t\t.filter(modelName => !(modelName in modelClass.prototype))\n\t\t.forEach(modelName => modelClass.prototype[modelName] = undefined);\n\n\tconst defaultAttributes = getAllAttributes(componentRef.extend.name);\n\tconst observedAttributes = componentRef.inputs.map(input => input.viewAttribute)\n\t\t.concat(componentRef.outputs.map(output => 'on' + ToCamelCase(output.viewAttribute)));\n\tif (componentRef.formAssociated && !observedAttributes.includes('value')) {\n\t\tobservedAttributes.push('value');\n\t}\n\n\tviewClass.allAttributes.push(...defaultAttributes.concat(observedAttributes));\n\tviewClass.observedAttributes.push(...observedAttributes);\n\tif (Array.isArray(componentRef.disabledFeatures)) {\n\t\tviewClass.disabledFeatures.push(...componentRef.disabledFeatures);\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 as Type<HTMLComponent<T>> as MetadataClass;\n}\n\nexport type ComponentModelClass =\n\tMetadataClass\n\t& { [key: string]: string }\n\t& { component: { [key: string]: string } }\n\t& { [key: string]: Type<HTMLComponent<any>> };\n\nexport function addViewToModelClass<T extends object>(modelClass: MetadataClass<T>, selector: string, viewClass: Type<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"]}