@ng-atomic/core 16.0.0 → 16.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.
@@ -19,7 +19,6 @@ export class NgAtomicComponent extends InjectableComponent {
19
19
  #destroy$;
20
20
  constructor() {
21
21
  super();
22
- this._effectMap = new EffectMap();
23
22
  this.root = inject(NgAtomicRootActionStore);
24
23
  this.#destroy$ = inject(DestroyRef);
25
24
  this.root.actions$.pipe(takeUntilDestroyed(this.#destroy$)).subscribe(action => this.#effect(action, 'root'));
@@ -48,4 +47,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
48
47
  type: Directive,
49
48
  args: [{ standalone: true }]
50
49
  }], ctorParameters: function () { return []; } });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG5nLWF0b21pYy9jb3JlL3NyYy9saWIvY29tcG9uZW50LXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNyQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHekQsTUFBTSxPQUFPLHNCQUFzQjtJQURuQztRQUVXLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBQzlDOytHQUZZLHNCQUFzQjttR0FBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQURsQyxTQUFTO21CQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs7QUFNL0IsTUFBTSxPQUFPLGlCQUFrQixTQUFRLG1CQUFtQjtJQUd4RCxTQUFTLENBQXNCO0lBRS9CO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFMQSxlQUFVLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM3QixTQUFJLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDakQsY0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUk3QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3JCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDbkMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYyxFQUFFLEtBQUssR0FBRyxTQUFTO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxJQUFJLEtBQUssS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRTtZQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakM7YUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsTUFBYyxFQUFFLEtBQUssR0FBRyxTQUFTO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUUsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxLQUFLLEtBQUssRUFBRTtZQUNoRCxJQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDM0Q7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOytHQTVCVSxpQkFBaUI7bUdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsU0FBUzttQkFBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlQ29tcG9uZW50IH0gZnJvbSBcIi4vaW5qZWN0YWJsZS1jb21wb25lbnRcIjtcbmltcG9ydCB7IEVmZmVjdE1hcCB9IGZyb20gXCIuL2VmZmVjdFwiO1xuaW1wb3J0IHsgTmdBdG9taWNSb290QWN0aW9uU3RvcmUgfSBmcm9tIFwiLi9hY3Rpb24tc3RvcmVcIjtcblxuQERpcmVjdGl2ZSh7IHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ0F0b21pY0NvbXBvbmVudFN0b3JlIHtcbiAgcmVhZG9ubHkgYWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxBY3Rpb24+KCk7XG59XG5cbkBEaXJlY3RpdmUoeyBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmdBdG9taWNDb21wb25lbnQgZXh0ZW5kcyBJbmplY3RhYmxlQ29tcG9uZW50IHtcbiAgcHJvdGVjdGVkIF9lZmZlY3RNYXAgPSBuZXcgRWZmZWN0TWFwKCk7XG4gIHByb3RlY3RlZCByb290ID0gaW5qZWN0KE5nQXRvbWljUm9vdEFjdGlvblN0b3JlKTtcbiAgI2Rlc3Ryb3kkID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5yb290LmFjdGlvbnMkLnBpcGUoXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveSQpLFxuICAgICkuc3Vic2NyaWJlKGFjdGlvbiA9PiB0aGlzLiNlZmZlY3QoYWN0aW9uLCAncm9vdCcpKTtcbiAgfVxuXG4gIGRpc3BhdGNoKGFjdGlvbjogQWN0aW9uLCBzY29wZSA9ICdkZWZhdWx0Jykge1xuICAgIHRoaXMucm9vdC5sb2coYWN0aW9uLCBzY29wZSk7XG4gICAgY29uc3QgZWZmZWN0ID0gdGhpcy4jZWZmZWN0KGFjdGlvbiwgc2NvcGUpO1xuICAgIGlmIChzY29wZSA9PT0gJ3Jvb3QnICYmICghZWZmZWN0Py5wcm9wcyB8fCBlZmZlY3Q/LnByb3BzPy5kaXNwYXRjaCkpIHtcbiAgICAgIHRoaXMucm9vdC5hY3Rpb25zJC5lbWl0KGFjdGlvbik7XG4gICAgfSBlbHNlIGlmICghZWZmZWN0Py5wcm9wcyB8fCBlZmZlY3Q/LnByb3BzPy5kaXNwYXRjaCkge1xuICAgICAgdGhpcy5hY3Rpb24uZW1pdChhY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gICNlZmZlY3QoYWN0aW9uOiBBY3Rpb24sIHNjb3BlID0gJ2RlZmF1bHQnKSB7XG4gICAgY29uc3QgZWZmZWN0ID0gKHRoaXMuX2VmZmVjdE1hcCA/PyBuZXcgRWZmZWN0TWFwKCkpLmdldChhY3Rpb24uaWQsIHNjb3BlKTtcbiAgICBpZiAoZWZmZWN0Py5rZXkgJiYgZWZmZWN0Py5wcm9wcz8uc2NvcGUgPT09IHNjb3BlKSB7XG4gICAgICAodGhpcyBhcyBhbnkpW2VmZmVjdD8ua2V5XShlZmZlY3QucHJvcHMuYWNjZXNzb3IoYWN0aW9uKSk7XG4gICAgfVxuICAgIHJldHVybiBlZmZlY3Q7XG4gIH1cbn1cbiJdfQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG5nLWF0b21pYy9jb3JlL3NyYy9saWIvY29tcG9uZW50LXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNyQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHekQsTUFBTSxPQUFPLHNCQUFzQjtJQURuQztRQUVXLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBQzlDOytHQUZZLHNCQUFzQjttR0FBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQURsQyxTQUFTO21CQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs7QUFNL0IsTUFBTSxPQUFPLGlCQUFrQixTQUFRLG1CQUFtQjtJQUl4RCxTQUFTLENBQXNCO0lBRS9CO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFKQSxTQUFJLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDakQsY0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUk3QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3JCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDbkMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYyxFQUFFLEtBQUssR0FBRyxTQUFTO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxJQUFJLEtBQUssS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRTtZQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakM7YUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsTUFBYyxFQUFFLEtBQUssR0FBRyxTQUFTO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUUsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxLQUFLLEtBQUssRUFBRTtZQUNoRCxJQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDM0Q7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOytHQTdCVSxpQkFBaUI7bUdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsU0FBUzttQkFBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlQ29tcG9uZW50IH0gZnJvbSBcIi4vaW5qZWN0YWJsZS1jb21wb25lbnRcIjtcbmltcG9ydCB7IEVmZmVjdE1hcCB9IGZyb20gXCIuL2VmZmVjdFwiO1xuaW1wb3J0IHsgTmdBdG9taWNSb290QWN0aW9uU3RvcmUgfSBmcm9tIFwiLi9hY3Rpb24tc3RvcmVcIjtcblxuQERpcmVjdGl2ZSh7IHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ0F0b21pY0NvbXBvbmVudFN0b3JlIHtcbiAgcmVhZG9ubHkgYWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxBY3Rpb24+KCk7XG59XG5cbkBEaXJlY3RpdmUoeyBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmdBdG9taWNDb21wb25lbnQgZXh0ZW5kcyBJbmplY3RhYmxlQ29tcG9uZW50IHtcbiAgLy8gQHRzLWlnbm9yZVxuICBwcm90ZWN0ZWQgX2VmZmVjdE1hcDogRWZmZWN0TWFwO1xuICBwcm90ZWN0ZWQgcm9vdCA9IGluamVjdChOZ0F0b21pY1Jvb3RBY3Rpb25TdG9yZSk7XG4gICNkZXN0cm95JCA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucm9vdC5hY3Rpb25zJC5waXBlKFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3kkKSxcbiAgICApLnN1YnNjcmliZShhY3Rpb24gPT4gdGhpcy4jZWZmZWN0KGFjdGlvbiwgJ3Jvb3QnKSk7XG4gIH1cblxuICBkaXNwYXRjaChhY3Rpb246IEFjdGlvbiwgc2NvcGUgPSAnZGVmYXVsdCcpIHtcbiAgICB0aGlzLnJvb3QubG9nKGFjdGlvbiwgc2NvcGUpO1xuICAgIGNvbnN0IGVmZmVjdCA9IHRoaXMuI2VmZmVjdChhY3Rpb24sIHNjb3BlKTtcbiAgICBpZiAoc2NvcGUgPT09ICdyb290JyAmJiAoIWVmZmVjdD8ucHJvcHMgfHwgZWZmZWN0Py5wcm9wcz8uZGlzcGF0Y2gpKSB7XG4gICAgICB0aGlzLnJvb3QuYWN0aW9ucyQuZW1pdChhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoIWVmZmVjdD8ucHJvcHMgfHwgZWZmZWN0Py5wcm9wcz8uZGlzcGF0Y2gpIHtcbiAgICAgIHRoaXMuYWN0aW9uLmVtaXQoYWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICAjZWZmZWN0KGFjdGlvbjogQWN0aW9uLCBzY29wZSA9ICdkZWZhdWx0Jykge1xuICAgIGNvbnN0IGVmZmVjdCA9ICh0aGlzLl9lZmZlY3RNYXAgPz8gbmV3IEVmZmVjdE1hcCgpKS5nZXQoYWN0aW9uLmlkLCBzY29wZSk7XG4gICAgaWYgKGVmZmVjdD8ua2V5ICYmIGVmZmVjdD8ucHJvcHM/LnNjb3BlID09PSBzY29wZSkge1xuICAgICAgKHRoaXMgYXMgYW55KVtlZmZlY3Q/LmtleV0oZWZmZWN0LnByb3BzLmFjY2Vzc29yKGFjdGlvbikpO1xuICAgIH1cbiAgICByZXR1cm4gZWZmZWN0O1xuICB9XG59XG4iXX0=
@@ -1,5 +1,6 @@
1
1
  import { DestroyRef, Directive, ElementRef, EventEmitter, Injector, Input, Output, ViewContainerRef, inject } from "@angular/core";
2
2
  import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
3
+ import { reflectComponentType } from "@angular/core";
3
4
  import * as i0 from "@angular/core";
4
5
  export function provideComponent(abstract, typeOrFactory) {
5
6
  async function loadComponentType() {
@@ -13,14 +14,27 @@ export function provideComponent(abstract, typeOrFactory) {
13
14
  ;
14
15
  return { provide: abstract['TOKEN'], useValue: loadComponentType };
15
16
  }
16
- export function getInputs(type, meta = 'ɵcmp') {
17
- return Object.entries(type[meta]['inputs']);
17
+ export var HostType;
18
+ (function (HostType) {
19
+ HostType["Dir"] = "\u0275dir";
20
+ HostType["Cmp"] = "\u0275cmp";
21
+ })(HostType || (HostType = {}));
22
+ export function getMeta(type) {
23
+ return type[HostType.Cmp] || type[HostType.Dir];
24
+ }
25
+ export function getInputs(type) {
26
+ return Object.entries(getMeta(type)['inputs'])
27
+ .map(([propName, templateName]) => ({ propName, templateName }));
28
+ }
29
+ export function getOutputs(type) {
30
+ return Object.entries(getMeta(type)['outputs'])
31
+ .map(([propName, templateName]) => ({ propName, templateName }));
18
32
  }
19
33
  export function getInputsByComponentRef(cmp) {
20
34
  return getInputs(cmp.instance.constructor);
21
35
  }
22
36
  export function getOutputsByInstance(cmp) {
23
- return Object.entries(cmp.instance.constructor['ɵcmp']['outputs']);
37
+ return getOutputs(cmp.instance.constructor);
24
38
  }
25
39
  export class InjectableComponent {
26
40
  constructor() {
@@ -28,6 +42,8 @@ export class InjectableComponent {
28
42
  this.#injector = inject(Injector);
29
43
  this.#destroy$ = inject(DestroyRef);
30
44
  this.#el = inject(ElementRef);
45
+ this.#component = null;
46
+ this.#componentMirror = null;
31
47
  this.injectable = false;
32
48
  this.action = new EventEmitter();
33
49
  }
@@ -35,8 +51,10 @@ export class InjectableComponent {
35
51
  #injector;
36
52
  #destroy$;
37
53
  #el;
38
- #setAttribute(component) {
39
- const hostElement = component.hostView.rootNodes[0];
54
+ #component;
55
+ #componentMirror;
56
+ #setAttribute() {
57
+ const hostElement = this.#component.hostView.rootNodes[0];
40
58
  const attributes = this.#el.nativeElement.attributes;
41
59
  for (let i = 0; i < attributes.length; i++) {
42
60
  const attr = attributes.item(i);
@@ -45,30 +63,62 @@ export class InjectableComponent {
45
63
  }
46
64
  }
47
65
  }
48
- #bindInputs(component) {
49
- Object.entries(this.constructor['ɵdir']['inputs']).forEach(([key, value]) => {
50
- if (key === 'injectable')
66
+ #bindInputs() {
67
+ // for (const input of this.#componentMirror!.inputs) {
68
+ // if (input.propName === 'injectable') return;
69
+ // this.#component!.setInput(input.propName, (this as any)[input.propName]);
70
+ // }
71
+ for (const input of getInputs(this.constructor)) {
72
+ if (input.propName === 'injectable')
51
73
  return;
52
- component.setInput(key, this[value]);
53
- });
74
+ this.#component.setInput(input.propName, this[input.propName]);
75
+ }
54
76
  }
55
- #bindOutputs(component) {
56
- getOutputsByInstance(component).forEach(([alias, attr]) => {
57
- component.instance[attr].pipe(takeUntilDestroyed(this.#destroy$)).subscribe((value) => this[attr].emit(value));
58
- });
77
+ #bindOutputs() {
78
+ // for (const output of this.#componentMirror!.outputs) {
79
+ // (this.#component!.instance as any)[output.templateName].pipe(
80
+ // takeUntilDestroyed(this.#destroy$)
81
+ // ).subscribe((value: any) => (this as any)[output.templateName].emit(value));
82
+ // }
83
+ for (const output of getOutputs(this.constructor)) {
84
+ this.#component.instance[output.templateName]?.pipe(takeUntilDestroyed(this.#destroy$)).subscribe((value) => {
85
+ console.debug('output=>>', output.templateName, value);
86
+ this[output.templateName].emit(value);
87
+ });
88
+ }
59
89
  }
60
90
  ngOnInit() {
61
91
  if (this.injectable) {
62
92
  this.#injector.get(this.constructor['TOKEN'])().then(type => {
63
- const ref = this.#outlet.createComponent(type);
64
- this.#bindInputs(ref);
65
- this.#bindOutputs(ref);
66
- this.#setAttribute(ref);
93
+ this.#component = this.#outlet.createComponent(type);
94
+ this.#componentMirror = reflectComponentType(type);
95
+ this.#bindInputs();
96
+ this.#bindOutputs();
97
+ this.#setAttribute();
67
98
  });
68
99
  }
69
100
  }
101
+ ngOnChanges(simpleChanges) {
102
+ if (this.injectable && this.#componentMirror) {
103
+ // for (const input of this.#componentMirror.inputs) {
104
+ // if (input.propName === 'injectable') return;
105
+ // const change = simpleChanges[input.propName] as SimpleChange;
106
+ // if (change) {
107
+ // this.#component!.setInput(input.propName, change.currentValue);
108
+ // }
109
+ // }
110
+ for (const input of getInputs(this.constructor)) {
111
+ if (input.propName === 'injectable')
112
+ return;
113
+ const change = simpleChanges[input.propName];
114
+ if (change) {
115
+ this.#component.setInput(input.propName, change.currentValue);
116
+ }
117
+ }
118
+ }
119
+ }
70
120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InjectableComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
71
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "16.2.12", type: InjectableComponent, isStandalone: true, inputs: { injectable: ["injectable", "injectable", (value) => value === '' ? true : value] }, outputs: { action: "action" }, ngImport: i0 }); }
121
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "16.2.12", type: InjectableComponent, isStandalone: true, inputs: { injectable: ["injectable", "injectable", (value) => value === '' ? true : value] }, outputs: { action: "action" }, usesOnChanges: true, ngImport: i0 }); }
72
122
  }
73
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InjectableComponent, decorators: [{
74
124
  type: Directive,
@@ -79,4 +129,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
79
129
  }], action: [{
80
130
  type: Output
81
131
  }] } });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0YWJsZS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbmctYXRvbWljL2NvcmUvc3JjL2xpYi9pbmplY3RhYmxlLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFtQixZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVEsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hLLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQVFoRSxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFFBQW1CLEVBQ25CLGFBQTZDO0lBRTdDLEtBQUssVUFBVSxpQkFBaUI7UUFDOUIsSUFBSSxPQUFPLGFBQWEsS0FBSyxVQUFVLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFO1lBQ25FLE9BQU8sTUFBTyxhQUFtQyxFQUFFLENBQUM7U0FDckQ7YUFBTTtZQUNMLE9BQU8sYUFBMkIsQ0FBQztTQUNwQztJQUNILENBQUM7SUFBQSxDQUFDO0lBQ0YsT0FBTyxFQUFFLE9BQU8sRUFBRyxRQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0FBQzlFLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFJLElBQWEsRUFBRSxPQUF3QixNQUFNO0lBQ3hFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBRSxJQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFVLEdBQW9CO0lBQ25FLE9BQU8sU0FBUyxDQUFFLEdBQUcsQ0FBQyxRQUFnQixDQUFDLFdBQXNCLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsTUFBTSxV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QUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzsrR0F6Q21CLG1CQUFtQjttR0FBbkIsbUJBQW1CLHlFQTJDcEIsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSzs7NEZBM0MxQyxtQkFBbUI7a0JBRHhDLFNBQVM7bUJBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFOzhCQTZDckIsVUFBVTtzQkFEakIsS0FBSzt1QkFBQyxFQUFDLFNBQVMsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUM7Z0JBSXJELE1BQU07c0JBRGYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiwgRGVzdHJveVJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFbWJlZGRlZFZpZXdSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPdXRwdXQsIFR5cGUsIFZpZXdDb250YWluZXJSZWYsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiO1xuaW1wb3J0IHsgTmdBdG9taWNDb21wb25lbnRTdG9yZSB9IGZyb20gXCIuL2NvbXBvbmVudC1zdG9yZVwiO1xuXG5leHBvcnQgdHlwZSBUeXBlRmFjdG9yeUFzeW5jPFQ+ID0gKCkgPT4gUHJvbWlzZTxUeXBlPFQ+PjtcblxuZXhwb3J0IHR5cGUgVHlwZUZhY3Rvcnk8VD4gPSAoKSA9PiAoVHlwZTxUPiB8IFByb21pc2U8VHlwZTxUPj4pO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNvbXBvbmVudDxBQlMgPSBhbnksIElNUEwgPSBhbnk+KFxuICBhYnN0cmFjdDogVHlwZTxBQlM+LFxuICB0eXBlT3JGYWN0b3J5OiBUeXBlPElNUEw+IHwgVHlwZUZhY3Rvcnk8SU1QTD4sXG4pIHtcbiAgYXN5bmMgZnVuY3Rpb24gbG9hZENvbXBvbmVudFR5cGUoKTogUHJvbWlzZTxUeXBlPElNUEw+PiB7XG4gICAgaWYgKHR5cGVvZiB0eXBlT3JGYWN0b3J5ID09PSAnZnVuY3Rpb24nICYmICF0eXBlT3JGYWN0b3J5LnByb3RvdHlwZSkge1xuICAgICAgcmV0dXJuIGF3YWl0ICh0eXBlT3JGYWN0b3J5IGFzIFR5cGVGYWN0b3J5PElNUEw+KSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHlwZU9yRmFjdG9yeSBhcyBUeXBlPElNUEw+O1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHsgcHJvdmlkZTogKGFic3RyYWN0IGFzIGFueSlbJ1RPS0VOJ10sIHVzZVZhbHVlOiBsb2FkQ29tcG9uZW50VHlwZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRzPFQ+KHR5cGU6IFR5cGU8VD4sIG1ldGE6ICfJtWNtcCcgfCAnybVkaXInID0gJ8m1Y21wJyk6IFtzdHJpbmcsIHN0cmluZ11bXSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcygodHlwZSBhcyBhbnkpW21ldGFdWydpbnB1dHMnXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dHNCeUNvbXBvbmVudFJlZjxUID0gYW55PihjbXA6IENvbXBvbmVudFJlZjxUPik6IFtzdHJpbmcsIHN0cmluZ11bXSB7XG4gIHJldHVybiBnZXRJbnB1dHMoKGNtcC5pbnN0YW5jZSBhcyBhbnkpLmNvbnN0cnVjdG9yIGFzIFR5cGU8VD4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0cHV0c0J5SW5zdGFuY2U8VCA9IGFueT4oY21wOiBDb21wb25lbnRSZWY8VD4pOiBbc3RyaW5nLCBzdHJpbmddW10ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoKGNtcC5pbnN0YW5jZSBhcyBhbnkpLmNvbnN0cnVjdG9yWyfJtWNtcCddWydvdXRwdXRzJ10pO1xufVxuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEluamVjdGFibGVDb21wb25lbnQ8VCBleHRlbmRzIE5nQXRvbWljQ29tcG9uZW50U3RvcmUgPSBhbnk+IHtcbiAgcmVhZG9ubHkgI291dGxldCA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcmVhZG9ubHkgI2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcmVhZG9ubHkgI2Rlc3Ryb3kkID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICByZWFkb25seSAjZWwgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgI3NldEF0dHJpYnV0ZShjb21wb25lbnQ6IENvbXBvbmVudFJlZjxUPikge1xuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gKGNvbXBvbmVudC5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGF0dHJpYnV0ZXM6IE5hbWVkTm9kZU1hcCA9IHRoaXMuI2VsLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaSkhO1xuICAgICAgaWYgKGF0dHIubmFtZS5zdGFydHNXaXRoKCdfbmdjb250ZW50JykpIHtcbiAgICAgICAgaG9zdEVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI2JpbmRJbnB1dHMoY29tcG9uZW50OiBDb21wb25lbnRSZWY8VD4pIHtcbiAgICBPYmplY3QuZW50cmllczxzdHJpbmc+KCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSlbJ8m1ZGlyJ11bJ2lucHV0cyddKS5mb3JFYWNoKChba2V5LCB2YWx1ZV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgIGlmIChrZXkgPT09ICdpbmplY3RhYmxlJykgcmV0dXJuO1xuICAgICAgY29tcG9uZW50LnNldElucHV0KGtleSwgKHRoaXMgYXMgYW55KVt2YWx1ZV0pO1xuICAgIH0pO1xuICB9XG5cbiAgI2JpbmRPdXRwdXRzKGNvbXBvbmVudDogQ29tcG9uZW50UmVmPFQ+KSB7XG4gICAgZ2V0T3V0cHV0c0J5SW5zdGFuY2UoY29tcG9uZW50KS5mb3JFYWNoKChbYWxpYXMsIGF0dHJdOiBbc3RyaW5nLCBzdHJpbmddKSA9PiB7XG4gICAgICAoY29tcG9uZW50Lmluc3RhbmNlIGFzIGFueSlbYXR0cl0ucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3kkKVxuICAgICAgKS5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+ICh0aGlzIGFzIGFueSlbYXR0cl0uZW1pdCh2YWx1ZSkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuaW5qZWN0YWJsZSkge1xuICAgICAgdGhpcy4jaW5qZWN0b3IuZ2V0PFR5cGVGYWN0b3J5QXN5bmM8VD4+KCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSlbJ1RPS0VOJ10pKCkudGhlbih0eXBlID0+IHtcbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy4jb3V0bGV0LmNyZWF0ZUNvbXBvbmVudCh0eXBlKTtcbiAgICAgICAgdGhpcy4jYmluZElucHV0cyhyZWYpO1xuICAgICAgICB0aGlzLiNiaW5kT3V0cHV0cyhyZWYpO1xuICAgICAgICB0aGlzLiNzZXRBdHRyaWJ1dGUocmVmKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiAodmFsdWU6IGFueSkgPT4gdmFsdWUgPT09ICcnID8gdHJ1ZSA6IHZhbHVlfSlcbiAgcHJpdmF0ZSBpbmplY3RhYmxlID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpXG4gIHByb3RlY3RlZCBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPEFjdGlvbj4oKTtcbn1cbiJdfQ==
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0YWJsZS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbmctYXRvbWljL2NvcmUvc3JjL2xpYi9pbmplY3RhYmxlLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFtQixZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQXFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0TixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUXJELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsUUFBbUIsRUFDbkIsYUFBNkM7SUFFN0MsS0FBSyxVQUFVLGlCQUFpQjtRQUM5QixJQUFJLE9BQU8sYUFBYSxLQUFLLFVBQVUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUU7WUFDbkUsT0FBTyxNQUFPLGFBQW1DLEVBQUUsQ0FBQztTQUNyRDthQUFNO1lBQ0wsT0FBTyxhQUEyQixDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUFBLENBQUM7SUFDRixPQUFPLEVBQUUsT0FBTyxFQUFHLFFBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLENBQUM7QUFDOUUsQ0FBQztBQUVELE1BQU0sQ0FBTixJQUFZLFFBR1g7QUFIRCxXQUFZLFFBQVE7SUFDbEIsNkJBQVksQ0FBQTtJQUNaLDZCQUFZLENBQUE7QUFDZCxDQUFDLEVBSFcsUUFBUSxLQUFSLFFBQVEsUUFHbkI7QUFJRCxNQUFNLFVBQVUsT0FBTyxDQUFJLElBQWE7SUFDdEMsT0FBUSxJQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFLLElBQVksQ0FBQyxRQUFRLENB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LElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzVDLHNEQUFzRDtZQUN0RCxpREFBaUQ7WUFDakQsa0VBQWtFO1lBQ2xFLGtCQUFrQjtZQUNsQixzRUFBc0U7WUFDdEUsTUFBTTtZQUNOLElBQUk7WUFFSixLQUFLLE1BQU0sS0FBSyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBc0IsQ0FBQyxFQUFFO2dCQUMxRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssWUFBWTtvQkFBRSxPQUFPO2dCQUM1QyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBaUIsQ0FBQztnQkFDN0QsSUFBSSxNQUFNLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLFVBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ2hFO2FBQ0Y7U0FDRjtJQUNILENBQUM7K0dBOUVtQixtQkFBbUI7bUdBQW5CLG1CQUFtQix5RUFnRnBCLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7OzRGQWhGMUMsbUJBQW1CO2tCQUR4QyxTQUFTO21CQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs4QkFrRnJCLFVBQVU7c0JBRGpCLEtBQUs7dUJBQUMsRUFBQyxTQUFTLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDO2dCQUlyRCxNQUFNO3NCQURmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRNaXJyb3IsIENvbXBvbmVudFJlZiwgRGVzdHJveVJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFbWJlZGRlZFZpZXdSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgVHlwZSwgVmlld0NvbnRhaW5lclJlZiwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiO1xuaW1wb3J0IHsgcmVmbGVjdENvbXBvbmVudFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCI7XG5pbXBvcnQgeyBOZ0F0b21pY0NvbXBvbmVudFN0b3JlIH0gZnJvbSBcIi4vY29tcG9uZW50LXN0b3JlXCI7XG5cbmV4cG9ydCB0eXBlIFR5cGVGYWN0b3J5QXN5bmM8VD4gPSAoKSA9PiBQcm9taXNlPFR5cGU8VD4+O1xuXG5leHBvcnQgdHlwZSBUeXBlRmFjdG9yeTxUPiA9ICgpID0+IChUeXBlPFQ+IHwgUHJvbWlzZTxUeXBlPFQ+Pik7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQ29tcG9uZW50PEFCUyA9IGFueSwgSU1QTCA9IGFueT4oXG4gIGFic3RyYWN0OiBUeXBlPEFCUz4sXG4gIHR5cGVPckZhY3Rvcnk6IFR5cGU8SU1QTD4gfCBUeXBlRmFjdG9yeTxJTVBMPixcbikge1xuICBhc3luYyBmdW5jdGlvbiBsb2FkQ29tcG9uZW50VHlwZSgpOiBQcm9taXNlPFR5cGU8SU1QTD4+IHtcbiAgICBpZiAodHlwZW9mIHR5cGVPckZhY3RvcnkgPT09ICdmdW5jdGlvbicgJiYgIXR5cGVPckZhY3RvcnkucHJvdG90eXBlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgKHR5cGVPckZhY3RvcnkgYXMgVHlwZUZhY3Rvcnk8SU1QTD4pKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0eXBlT3JGYWN0b3J5IGFzIFR5cGU8SU1QTD47XG4gICAgfVxuICB9O1xuICByZXR1cm4geyBwcm92aWRlOiAoYWJzdHJhY3QgYXMgYW55KVsnVE9LRU4nXSwgdXNlVmFsdWU6IGxvYWRDb21wb25lbnRUeXBlIH07XG59XG5cbmV4cG9ydCBlbnVtIEhvc3RUeXBlIHtcbiAgRGlyID0gJ8m1ZGlyJyxcbiAgQ21wID0gJ8m1Y21wJyxcbn1cblxudHlwZSBJTyA9IHtwcm9wTmFtZTogc3RyaW5nLCB0ZW1wbGF0ZU5hbWU6IHN0cmluZ307XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhPFQ+KHR5cGU6IFR5cGU8VD4pIHtcbiAgcmV0dXJuICh0eXBlIGFzIGFueSlbSG9zdFR5cGUuQ21wXSB8fCAodHlwZSBhcyBhbnkpW0hvc3RUeXBlLkRpcl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dHM8VD4odHlwZTogVHlwZTxUPik6IElPW10ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXM8c3RyaW5nPihnZXRNZXRhKHR5cGUpWydpbnB1dHMnXSlcbiAgICAubWFwKChbcHJvcE5hbWUsIHRlbXBsYXRlTmFtZV0pID0+ICh7cHJvcE5hbWUsIHRlbXBsYXRlTmFtZX0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE91dHB1dHM8VD4odHlwZTogVHlwZTxUPik6IElPW10ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXM8c3RyaW5nPihnZXRNZXRhKHR5cGUpWydvdXRwdXRzJ10pXG4gICAgLm1hcCgoW3Byb3BOYW1lLCB0ZW1wbGF0ZU5hbWVdKSA9PiAoe3Byb3BOYW1lLCB0ZW1wbGF0ZU5hbWV9KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dHNCeUNvbXBvbmVudFJlZjxUIGV4dGVuZHMge30gPSBhbnk+KGNtcDogQ29tcG9uZW50UmVmPFQ+KTogSU9bXSB7XG4gIHJldHVybiBnZXRJbnB1dHMoY21wLmluc3RhbmNlLmNvbnN0cnVjdG9yIGFzIFR5cGU8VD4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0cHV0c0J5SW5zdGFuY2U8VCBleHRlbmRzIHt9ID0gYW55PihjbXA6IENvbXBvbmVudFJlZjxUPik6IElPW10ge1xuICByZXR1cm4gZ2V0T3V0cHV0cyhjbXAuaW5zdGFuY2UuY29uc3RydWN0b3IgYXMgVHlwZTxUPik7XG59XG5cbkBEaXJlY3RpdmUoeyBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5qZWN0YWJsZUNvbXBvbmVudDxUIGV4dGVuZHMgTmdBdG9taWNDb21wb25lbnRTdG9yZSA9IGFueT4ge1xuICByZWFkb25seSAjb3V0bGV0ID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICByZWFkb25seSAjaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICByZWFkb25seSAjZGVzdHJveSQgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHJlYWRvbmx5ICNlbCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgI2NvbXBvbmVudDogQ29tcG9uZW50UmVmPFQ+IHwgbnVsbCA9IG51bGw7XG4gICNjb21wb25lbnRNaXJyb3I6IENvbXBvbmVudE1pcnJvcjxUPiB8IG51bGwgPSBudWxsO1xuXG4gICNzZXRBdHRyaWJ1dGUoKSB7XG4gICAgY29uc3QgaG9zdEVsZW1lbnQgPSAodGhpcy4jY29tcG9uZW50IS5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGF0dHJpYnV0ZXM6IE5hbWVkTm9kZU1hcCA9IHRoaXMuI2VsLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaSkhO1xuICAgICAgaWYgKGF0dHIubmFtZS5zdGFydHNXaXRoKCdfbmdjb250ZW50JykpIHtcbiAgICAgICAgaG9zdEVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI2JpbmRJbnB1dHMoKSB7XG4gICAgLy8gZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLiNjb21wb25lbnRNaXJyb3IhLmlucHV0cykge1xuICAgIC8vICAgaWYgKGlucHV0LnByb3BOYW1lID09PSAnaW5qZWN0YWJsZScpIHJldHVybjtcbiAgICAvLyAgIHRoaXMuI2NvbXBvbmVudCEuc2V0SW5wdXQoaW5wdXQucHJvcE5hbWUsICh0aGlzIGFzIGFueSlbaW5wdXQucHJvcE5hbWVdKTtcbiAgICAvLyB9XG5cbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGdldElucHV0cyh0aGlzLmNvbnN0cnVjdG9yIGFzIFR5cGU8VD4pKSB7XG4gICAgICBpZiAoaW5wdXQucHJvcE5hbWUgPT09ICdpbmplY3RhYmxlJykgcmV0dXJuO1xuICAgICAgdGhpcy4jY29tcG9uZW50IS5zZXRJbnB1dChpbnB1dC5wcm9wTmFtZSwgKHRoaXMgYXMgYW55KVtpbnB1dC5wcm9wTmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gICNiaW5kT3V0cHV0cygpIHtcbiAgICAvLyBmb3IgKGNvbnN0IG91dHB1dCBvZiB0aGlzLiNjb21wb25lbnRNaXJyb3IhLm91dHB1dHMpIHtcbiAgICAvLyAgICh0aGlzLiNjb21wb25lbnQhLmluc3RhbmNlIGFzIGFueSlbb3V0cHV0LnRlbXBsYXRlTmFtZV0ucGlwZShcbiAgICAvLyAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3kkKVxuICAgIC8vICAgKS5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+ICh0aGlzIGFzIGFueSlbb3V0cHV0LnRlbXBsYXRlTmFtZV0uZW1pdCh2YWx1ZSkpO1xuICAgIC8vIH1cblxuICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIGdldE91dHB1dHModGhpcy5jb25zdHJ1Y3RvciBhcyBUeXBlPFQ+KSkge1xuICAgICAgKHRoaXMuI2NvbXBvbmVudCEuaW5zdGFuY2UgYXMgYW55KVtvdXRwdXQudGVtcGxhdGVOYW1lXT8ucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3kkKVxuICAgICAgKS5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5kZWJ1Zygnb3V0cHV0PT4+Jywgb3V0cHV0LnRlbXBsYXRlTmFtZSwgdmFsdWUpO1xuICAgICAgICAodGhpcyBhcyBhbnkpW291dHB1dC50ZW1wbGF0ZU5hbWVdLmVtaXQodmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuaW5qZWN0YWJsZSkge1xuICAgICAgdGhpcy4jaW5qZWN0b3IuZ2V0PFR5cGVGYWN0b3J5QXN5bmM8VD4+KCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSlbJ1RPS0VOJ10pKCkudGhlbih0eXBlID0+IHtcbiAgICAgICAgdGhpcy4jY29tcG9uZW50ID0gdGhpcy4jb3V0bGV0LmNyZWF0ZUNvbXBvbmVudCh0eXBlKTtcbiAgICAgICAgdGhpcy4jY29tcG9uZW50TWlycm9yID0gcmVmbGVjdENvbXBvbmVudFR5cGUodHlwZSk7XG4gICAgICAgIHRoaXMuI2JpbmRJbnB1dHMoKTtcbiAgICAgICAgdGhpcy4jYmluZE91dHB1dHMoKTtcbiAgICAgICAgdGhpcy4jc2V0QXR0cmlidXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKHRoaXMuaW5qZWN0YWJsZSAmJiB0aGlzLiNjb21wb25lbnRNaXJyb3IpIHtcbiAgICAgIC8vIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy4jY29tcG9uZW50TWlycm9yLmlucHV0cykge1xuICAgICAgLy8gICBpZiAoaW5wdXQucHJvcE5hbWUgPT09ICdpbmplY3RhYmxlJykgcmV0dXJuO1xuICAgICAgLy8gICBjb25zdCBjaGFuZ2UgPSBzaW1wbGVDaGFuZ2VzW2lucHV0LnByb3BOYW1lXSBhcyBTaW1wbGVDaGFuZ2U7XG4gICAgICAvLyAgIGlmIChjaGFuZ2UpIHtcbiAgICAgIC8vICAgICB0aGlzLiNjb21wb25lbnQhLnNldElucHV0KGlucHV0LnByb3BOYW1lLCBjaGFuZ2UuY3VycmVudFZhbHVlKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuXG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGdldElucHV0cyh0aGlzLmNvbnN0cnVjdG9yIGFzIFR5cGU8VD4pKSB7XG4gICAgICAgIGlmIChpbnB1dC5wcm9wTmFtZSA9PT0gJ2luamVjdGFibGUnKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGNoYW5nZSA9IHNpbXBsZUNoYW5nZXNbaW5wdXQucHJvcE5hbWVdIGFzIFNpbXBsZUNoYW5nZTtcbiAgICAgICAgaWYgKGNoYW5nZSkge1xuICAgICAgICAgIHRoaXMuI2NvbXBvbmVudCEuc2V0SW5wdXQoaW5wdXQucHJvcE5hbWUsIGNoYW5nZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQElucHV0KHt0cmFuc2Zvcm06ICh2YWx1ZTogYW55KSA9PiB2YWx1ZSA9PT0gJycgPyB0cnVlIDogdmFsdWV9KVxuICBwcml2YXRlIGluamVjdGFibGUgPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgcHJvdGVjdGVkIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8QWN0aW9uPigpO1xufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Injectable, inject, ViewContainerRef, Injector, DestroyRef, ElementRef, Directive, Input, Output } from '@angular/core';
2
+ import { EventEmitter, Injectable, inject, ViewContainerRef, Injector, DestroyRef, ElementRef, reflectComponentType, Directive, Input, Output } from '@angular/core';
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
 
5
5
  class NgAtomicRootActionStore {
@@ -61,14 +61,27 @@ function provideComponent(abstract, typeOrFactory) {
61
61
  ;
62
62
  return { provide: abstract['TOKEN'], useValue: loadComponentType };
63
63
  }
64
- function getInputs(type, meta = 'ɵcmp') {
65
- return Object.entries(type[meta]['inputs']);
64
+ var HostType;
65
+ (function (HostType) {
66
+ HostType["Dir"] = "\u0275dir";
67
+ HostType["Cmp"] = "\u0275cmp";
68
+ })(HostType || (HostType = {}));
69
+ function getMeta(type) {
70
+ return type[HostType.Cmp] || type[HostType.Dir];
71
+ }
72
+ function getInputs(type) {
73
+ return Object.entries(getMeta(type)['inputs'])
74
+ .map(([propName, templateName]) => ({ propName, templateName }));
75
+ }
76
+ function getOutputs(type) {
77
+ return Object.entries(getMeta(type)['outputs'])
78
+ .map(([propName, templateName]) => ({ propName, templateName }));
66
79
  }
67
80
  function getInputsByComponentRef(cmp) {
68
81
  return getInputs(cmp.instance.constructor);
69
82
  }
70
83
  function getOutputsByInstance(cmp) {
71
- return Object.entries(cmp.instance.constructor['ɵcmp']['outputs']);
84
+ return getOutputs(cmp.instance.constructor);
72
85
  }
73
86
  class InjectableComponent {
74
87
  constructor() {
@@ -76,6 +89,8 @@ class InjectableComponent {
76
89
  this.#injector = inject(Injector);
77
90
  this.#destroy$ = inject(DestroyRef);
78
91
  this.#el = inject(ElementRef);
92
+ this.#component = null;
93
+ this.#componentMirror = null;
79
94
  this.injectable = false;
80
95
  this.action = new EventEmitter();
81
96
  }
@@ -83,8 +98,10 @@ class InjectableComponent {
83
98
  #injector;
84
99
  #destroy$;
85
100
  #el;
86
- #setAttribute(component) {
87
- const hostElement = component.hostView.rootNodes[0];
101
+ #component;
102
+ #componentMirror;
103
+ #setAttribute() {
104
+ const hostElement = this.#component.hostView.rootNodes[0];
88
105
  const attributes = this.#el.nativeElement.attributes;
89
106
  for (let i = 0; i < attributes.length; i++) {
90
107
  const attr = attributes.item(i);
@@ -93,30 +110,62 @@ class InjectableComponent {
93
110
  }
94
111
  }
95
112
  }
96
- #bindInputs(component) {
97
- Object.entries(this.constructor['ɵdir']['inputs']).forEach(([key, value]) => {
98
- if (key === 'injectable')
113
+ #bindInputs() {
114
+ // for (const input of this.#componentMirror!.inputs) {
115
+ // if (input.propName === 'injectable') return;
116
+ // this.#component!.setInput(input.propName, (this as any)[input.propName]);
117
+ // }
118
+ for (const input of getInputs(this.constructor)) {
119
+ if (input.propName === 'injectable')
99
120
  return;
100
- component.setInput(key, this[value]);
101
- });
121
+ this.#component.setInput(input.propName, this[input.propName]);
122
+ }
102
123
  }
103
- #bindOutputs(component) {
104
- getOutputsByInstance(component).forEach(([alias, attr]) => {
105
- component.instance[attr].pipe(takeUntilDestroyed(this.#destroy$)).subscribe((value) => this[attr].emit(value));
106
- });
124
+ #bindOutputs() {
125
+ // for (const output of this.#componentMirror!.outputs) {
126
+ // (this.#component!.instance as any)[output.templateName].pipe(
127
+ // takeUntilDestroyed(this.#destroy$)
128
+ // ).subscribe((value: any) => (this as any)[output.templateName].emit(value));
129
+ // }
130
+ for (const output of getOutputs(this.constructor)) {
131
+ this.#component.instance[output.templateName]?.pipe(takeUntilDestroyed(this.#destroy$)).subscribe((value) => {
132
+ console.debug('output=>>', output.templateName, value);
133
+ this[output.templateName].emit(value);
134
+ });
135
+ }
107
136
  }
108
137
  ngOnInit() {
109
138
  if (this.injectable) {
110
139
  this.#injector.get(this.constructor['TOKEN'])().then(type => {
111
- const ref = this.#outlet.createComponent(type);
112
- this.#bindInputs(ref);
113
- this.#bindOutputs(ref);
114
- this.#setAttribute(ref);
140
+ this.#component = this.#outlet.createComponent(type);
141
+ this.#componentMirror = reflectComponentType(type);
142
+ this.#bindInputs();
143
+ this.#bindOutputs();
144
+ this.#setAttribute();
115
145
  });
116
146
  }
117
147
  }
148
+ ngOnChanges(simpleChanges) {
149
+ if (this.injectable && this.#componentMirror) {
150
+ // for (const input of this.#componentMirror.inputs) {
151
+ // if (input.propName === 'injectable') return;
152
+ // const change = simpleChanges[input.propName] as SimpleChange;
153
+ // if (change) {
154
+ // this.#component!.setInput(input.propName, change.currentValue);
155
+ // }
156
+ // }
157
+ for (const input of getInputs(this.constructor)) {
158
+ if (input.propName === 'injectable')
159
+ return;
160
+ const change = simpleChanges[input.propName];
161
+ if (change) {
162
+ this.#component.setInput(input.propName, change.currentValue);
163
+ }
164
+ }
165
+ }
166
+ }
118
167
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InjectableComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
119
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "16.2.12", type: InjectableComponent, isStandalone: true, inputs: { injectable: ["injectable", "injectable", (value) => value === '' ? true : value] }, outputs: { action: "action" }, ngImport: i0 }); }
168
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "16.2.12", type: InjectableComponent, isStandalone: true, inputs: { injectable: ["injectable", "injectable", (value) => value === '' ? true : value] }, outputs: { action: "action" }, usesOnChanges: true, ngImport: i0 }); }
120
169
  }
121
170
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InjectableComponent, decorators: [{
122
171
  type: Directive,
@@ -143,7 +192,6 @@ class NgAtomicComponent extends InjectableComponent {
143
192
  #destroy$;
144
193
  constructor() {
145
194
  super();
146
- this._effectMap = new EffectMap();
147
195
  this.root = inject(NgAtomicRootActionStore);
148
196
  this.#destroy$ = inject(DestroyRef);
149
197
  this.root.actions$.pipe(takeUntilDestroyed(this.#destroy$)).subscribe(action => this.#effect(action, 'root'));
@@ -177,5 +225,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
177
225
  * Generated bundle index. Do not edit.
178
226
  */
179
227
 
180
- export { Effect, EffectMap, InjectableComponent, NgAtomicComponent, NgAtomicComponentStore, NgAtomicRootActionStore, getInputs, getInputsByComponentRef, getOutputsByInstance, provideComponent, resolveActions };
228
+ export { Effect, EffectMap, HostType, InjectableComponent, NgAtomicComponent, NgAtomicComponentStore, NgAtomicRootActionStore, getInputs, getInputsByComponentRef, getMeta, getOutputs, getOutputsByInstance, provideComponent, resolveActions };
181
229
  //# sourceMappingURL=ng-atomic-core.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ng-atomic-core.mjs","sources":["../../../../../packages/@ng-atomic/core/src/lib/action-store.ts","../../../../../packages/@ng-atomic/core/src/lib/action.ts","../../../../../packages/@ng-atomic/core/src/lib/effect.ts","../../../../../packages/@ng-atomic/core/src/lib/injectable-component.ts","../../../../../packages/@ng-atomic/core/src/lib/component-store.ts","../../../../../packages/@ng-atomic/core/src/ng-atomic-core.ts"],"sourcesContent":["import { EventEmitter, Injectable } from \"@angular/core\";\nimport { Action } from \"./action\";\n\n@Injectable({providedIn: 'root'})\nexport class NgAtomicRootActionStore {\n readonly actions$ = new EventEmitter<Action>();\n\n constructor() {\n this.actions$.subscribe(action => this.log(action, 'root'));\n }\n\n dispatch(action: Action) {\n this.actions$.emit(action);\n }\n\n log(action: Action, scope: string = 'default') {\n console.debug(action, scope);\n }\n}\n","export interface Action<T = any> {\n id: string;\n payload?: T;\n name?: string;\n icon?: string;\n color?: string;\n disabled?: boolean;\n children?: Action<T>[],\n}\n\nexport type Actions = ((...args: any[]) => Action[]) | Action[];\n\nexport function resolveActions(actions: Actions, ...args: any[]) {\n if (typeof actions === 'function') {\n return actions(...args);\n }\n return actions;\n}\n","import { Action } from \"./action\";\n\nexport interface EffectProps {\n dispatch: boolean;\n scope: string;\n accessor: <T = any>(action: Action) => T;\n}\n\nexport class EffectMap extends Map<string, {key: string, props: EffectProps}> {\n override get(key: string, scope = 'default'): { key: string; props: EffectProps; } {\n return super.get(this.makeKey(key, scope))!; \n }\n\n override set(key: string, value: { key: string; props: EffectProps; }): this {\n return super.set(this.makeKey(key, value.props.scope), value);\n }\n\n override has(key: string, scope = 'default'): boolean {\n return super.has(this.makeKey(key, scope));\n }\n\n private makeKey(key: string, scope = 'default') {\n return `[${scope}]#${key}`;\n }\n}\n\nexport function Effect(id: string, {\n dispatch = false,\n scope = 'default',\n accessor = (action: Action) => action.payload,\n}: Partial<EffectProps> = {}) {\n return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n target['_effectMap'] ??= new EffectMap();\n target['_effectMap'].set(id, {key: propertyKey, props: {dispatch, scope, accessor}});\n };\n}\n","import { ComponentRef, DestroyRef, Directive, ElementRef, EmbeddedViewRef, EventEmitter, Injector, Input, Output, Type, ViewContainerRef, inject } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { Action } from \"./action\";\nimport { NgAtomicComponentStore } from \"./component-store\";\n\nexport type TypeFactoryAsync<T> = () => Promise<Type<T>>;\n\nexport type TypeFactory<T> = () => (Type<T> | Promise<Type<T>>);\n\nexport function provideComponent<ABS = any, IMPL = any>(\n abstract: Type<ABS>,\n typeOrFactory: Type<IMPL> | TypeFactory<IMPL>,\n) {\n async function loadComponentType(): Promise<Type<IMPL>> {\n if (typeof typeOrFactory === 'function' && !typeOrFactory.prototype) {\n return await (typeOrFactory as TypeFactory<IMPL>)();\n } else {\n return typeOrFactory as Type<IMPL>;\n }\n };\n return { provide: (abstract as any)['TOKEN'], useValue: loadComponentType };\n}\n\nexport function getInputs<T>(type: Type<T>, meta: 'ɵcmp' | 'ɵdir' = 'ɵcmp'): [string, string][] {\n return Object.entries((type as any)[meta]['inputs']);\n}\n\nexport function getInputsByComponentRef<T = any>(cmp: ComponentRef<T>): [string, string][] {\n return getInputs((cmp.instance as any).constructor as Type<T>);\n}\n\nexport function getOutputsByInstance<T = any>(cmp: ComponentRef<T>): [string, string][] {\n return Object.entries((cmp.instance as any).constructor['ɵcmp']['outputs']);\n}\n\n@Directive({ standalone: true })\nexport abstract class InjectableComponent<T extends NgAtomicComponentStore = any> {\n readonly #outlet = inject(ViewContainerRef);\n readonly #injector = inject(Injector);\n readonly #destroy$ = inject(DestroyRef);\n readonly #el = inject(ElementRef);\n\n #setAttribute(component: ComponentRef<T>) {\n const hostElement = (component.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n const attributes: NamedNodeMap = this.#el.nativeElement.attributes;\n for (let i = 0; i < attributes.length; i++) {\n const attr = attributes.item(i)!;\n if (attr.name.startsWith('_ngcontent')) {\n hostElement.setAttribute(attr.name, attr.value);\n }\n }\n }\n\n #bindInputs(component: ComponentRef<T>) {\n Object.entries<string>((this.constructor as any)['ɵdir']['inputs']).forEach(([key, value]: [string, string]) => {\n if (key === 'injectable') return;\n component.setInput(key, (this as any)[value]);\n });\n }\n\n #bindOutputs(component: ComponentRef<T>) {\n getOutputsByInstance(component).forEach(([alias, attr]: [string, string]) => {\n (component.instance as any)[attr].pipe(\n takeUntilDestroyed(this.#destroy$)\n ).subscribe((value: any) => (this as any)[attr].emit(value));\n });\n }\n\n ngOnInit() {\n if (this.injectable) {\n this.#injector.get<TypeFactoryAsync<T>>((this.constructor as any)['TOKEN'])().then(type => {\n const ref = this.#outlet.createComponent(type);\n this.#bindInputs(ref);\n this.#bindOutputs(ref);\n this.#setAttribute(ref);\n });\n }\n }\n\n @Input({transform: (value: any) => value === '' ? true : value})\n private injectable = false;\n\n @Output()\n protected action = new EventEmitter<Action>();\n}\n","import { DestroyRef, Directive, EventEmitter, inject } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { Action } from \"./action\";\nimport { InjectableComponent } from \"./injectable-component\";\nimport { EffectMap } from \"./effect\";\nimport { NgAtomicRootActionStore } from \"./action-store\";\n\n@Directive({ standalone: true })\nexport class NgAtomicComponentStore {\n readonly action = new EventEmitter<Action>();\n}\n\n@Directive({ standalone: true })\nexport class NgAtomicComponent extends InjectableComponent {\n protected _effectMap = new EffectMap();\n protected root = inject(NgAtomicRootActionStore);\n #destroy$ = inject(DestroyRef);\n\n constructor() {\n super();\n this.root.actions$.pipe(\n takeUntilDestroyed(this.#destroy$),\n ).subscribe(action => this.#effect(action, 'root'));\n }\n\n dispatch(action: Action, scope = 'default') {\n this.root.log(action, scope);\n const effect = this.#effect(action, scope);\n if (scope === 'root' && (!effect?.props || effect?.props?.dispatch)) {\n this.root.actions$.emit(action);\n } else if (!effect?.props || effect?.props?.dispatch) {\n this.action.emit(action);\n }\n }\n\n #effect(action: Action, scope = 'default') {\n const effect = (this._effectMap ?? new EffectMap()).get(action.id, scope);\n if (effect?.key && effect?.props?.scope === scope) {\n (this as any)[effect?.key](effect.props.accessor(action));\n }\n return effect;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-atomic-core.mjs","sources":["../../../../../packages/@ng-atomic/core/src/lib/action-store.ts","../../../../../packages/@ng-atomic/core/src/lib/action.ts","../../../../../packages/@ng-atomic/core/src/lib/effect.ts","../../../../../packages/@ng-atomic/core/src/lib/injectable-component.ts","../../../../../packages/@ng-atomic/core/src/lib/component-store.ts","../../../../../packages/@ng-atomic/core/src/ng-atomic-core.ts"],"sourcesContent":["import { EventEmitter, Injectable } from \"@angular/core\";\nimport { Action } from \"./action\";\n\n@Injectable({providedIn: 'root'})\nexport class NgAtomicRootActionStore {\n readonly actions$ = new EventEmitter<Action>();\n\n constructor() {\n this.actions$.subscribe(action => this.log(action, 'root'));\n }\n\n dispatch(action: Action) {\n this.actions$.emit(action);\n }\n\n log(action: Action, scope: string = 'default') {\n console.debug(action, scope);\n }\n}\n","export interface Action<T = any> {\n id: string;\n payload?: T;\n name?: string;\n icon?: string;\n color?: string;\n disabled?: boolean;\n children?: Action<T>[],\n}\n\nexport type Actions = ((...args: any[]) => Action[]) | Action[];\n\nexport function resolveActions(actions: Actions, ...args: any[]) {\n if (typeof actions === 'function') {\n return actions(...args);\n }\n return actions;\n}\n","import { Action } from \"./action\";\n\nexport interface EffectProps {\n dispatch: boolean;\n scope: string;\n accessor: <T = any>(action: Action) => T;\n}\n\nexport class EffectMap extends Map<string, {key: string, props: EffectProps}> {\n override get(key: string, scope = 'default'): { key: string; props: EffectProps; } {\n return super.get(this.makeKey(key, scope))!; \n }\n\n override set(key: string, value: { key: string; props: EffectProps; }): this {\n return super.set(this.makeKey(key, value.props.scope), value);\n }\n\n override has(key: string, scope = 'default'): boolean {\n return super.has(this.makeKey(key, scope));\n }\n\n private makeKey(key: string, scope = 'default') {\n return `[${scope}]#${key}`;\n }\n}\n\nexport function Effect(id: string, {\n dispatch = false,\n scope = 'default',\n accessor = (action: Action) => action.payload,\n}: Partial<EffectProps> = {}) {\n return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n target['_effectMap'] ??= new EffectMap();\n target['_effectMap'].set(id, {key: propertyKey, props: {dispatch, scope, accessor}});\n };\n}\n","import { ComponentMirror, ComponentRef, DestroyRef, Directive, ElementRef, EmbeddedViewRef, EventEmitter, Injector, Input, Output, SimpleChange, SimpleChanges, Type, ViewContainerRef, inject } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { reflectComponentType } from \"@angular/core\";\nimport { Action } from \"./action\";\nimport { NgAtomicComponentStore } from \"./component-store\";\n\nexport type TypeFactoryAsync<T> = () => Promise<Type<T>>;\n\nexport type TypeFactory<T> = () => (Type<T> | Promise<Type<T>>);\n\nexport function provideComponent<ABS = any, IMPL = any>(\n abstract: Type<ABS>,\n typeOrFactory: Type<IMPL> | TypeFactory<IMPL>,\n) {\n async function loadComponentType(): Promise<Type<IMPL>> {\n if (typeof typeOrFactory === 'function' && !typeOrFactory.prototype) {\n return await (typeOrFactory as TypeFactory<IMPL>)();\n } else {\n return typeOrFactory as Type<IMPL>;\n }\n };\n return { provide: (abstract as any)['TOKEN'], useValue: loadComponentType };\n}\n\nexport enum HostType {\n Dir = 'ɵdir',\n Cmp = 'ɵcmp',\n}\n\ntype IO = {propName: string, templateName: string};\n\nexport function getMeta<T>(type: Type<T>) {\n return (type as any)[HostType.Cmp] || (type as any)[HostType.Dir];\n}\n\nexport function getInputs<T>(type: Type<T>): IO[] {\n return Object.entries<string>(getMeta(type)['inputs'])\n .map(([propName, templateName]) => ({propName, templateName}));\n}\n\nexport function getOutputs<T>(type: Type<T>): IO[] {\n return Object.entries<string>(getMeta(type)['outputs'])\n .map(([propName, templateName]) => ({propName, templateName}));\n}\n\nexport function getInputsByComponentRef<T extends {} = any>(cmp: ComponentRef<T>): IO[] {\n return getInputs(cmp.instance.constructor as Type<T>);\n}\n\nexport function getOutputsByInstance<T extends {} = any>(cmp: ComponentRef<T>): IO[] {\n return getOutputs(cmp.instance.constructor as Type<T>);\n}\n\n@Directive({ standalone: true })\nexport abstract class InjectableComponent<T extends NgAtomicComponentStore = any> {\n readonly #outlet = inject(ViewContainerRef);\n readonly #injector = inject(Injector);\n readonly #destroy$ = inject(DestroyRef);\n readonly #el = inject(ElementRef);\n #component: ComponentRef<T> | null = null;\n #componentMirror: ComponentMirror<T> | null = null;\n\n #setAttribute() {\n const hostElement = (this.#component!.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n const attributes: NamedNodeMap = this.#el.nativeElement.attributes;\n for (let i = 0; i < attributes.length; i++) {\n const attr = attributes.item(i)!;\n if (attr.name.startsWith('_ngcontent')) {\n hostElement.setAttribute(attr.name, attr.value);\n }\n }\n }\n\n #bindInputs() {\n // for (const input of this.#componentMirror!.inputs) {\n // if (input.propName === 'injectable') return;\n // this.#component!.setInput(input.propName, (this as any)[input.propName]);\n // }\n\n for (const input of getInputs(this.constructor as Type<T>)) {\n if (input.propName === 'injectable') return;\n this.#component!.setInput(input.propName, (this as any)[input.propName]);\n }\n }\n\n #bindOutputs() {\n // for (const output of this.#componentMirror!.outputs) {\n // (this.#component!.instance as any)[output.templateName].pipe(\n // takeUntilDestroyed(this.#destroy$)\n // ).subscribe((value: any) => (this as any)[output.templateName].emit(value));\n // }\n\n for (const output of getOutputs(this.constructor as Type<T>)) {\n (this.#component!.instance as any)[output.templateName]?.pipe(\n takeUntilDestroyed(this.#destroy$)\n ).subscribe((value: any) => {\n console.debug('output=>>', output.templateName, value);\n (this as any)[output.templateName].emit(value);\n });\n }\n }\n\n ngOnInit() {\n if (this.injectable) {\n this.#injector.get<TypeFactoryAsync<T>>((this.constructor as any)['TOKEN'])().then(type => {\n this.#component = this.#outlet.createComponent(type);\n this.#componentMirror = reflectComponentType(type);\n this.#bindInputs();\n this.#bindOutputs();\n this.#setAttribute();\n });\n }\n }\n\n ngOnChanges(simpleChanges: SimpleChanges) {\n if (this.injectable && this.#componentMirror) {\n // for (const input of this.#componentMirror.inputs) {\n // if (input.propName === 'injectable') return;\n // const change = simpleChanges[input.propName] as SimpleChange;\n // if (change) {\n // this.#component!.setInput(input.propName, change.currentValue);\n // }\n // }\n\n for (const input of getInputs(this.constructor as Type<T>)) {\n if (input.propName === 'injectable') return;\n const change = simpleChanges[input.propName] as SimpleChange;\n if (change) {\n this.#component!.setInput(input.propName, change.currentValue);\n }\n }\n }\n }\n\n @Input({transform: (value: any) => value === '' ? true : value})\n private injectable = false;\n\n @Output()\n protected action = new EventEmitter<Action>();\n}\n","import { DestroyRef, Directive, EventEmitter, inject } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { Action } from \"./action\";\nimport { InjectableComponent } from \"./injectable-component\";\nimport { EffectMap } from \"./effect\";\nimport { NgAtomicRootActionStore } from \"./action-store\";\n\n@Directive({ standalone: true })\nexport class NgAtomicComponentStore {\n readonly action = new EventEmitter<Action>();\n}\n\n@Directive({ standalone: true })\nexport class NgAtomicComponent extends InjectableComponent {\n // @ts-ignore\n protected _effectMap: EffectMap;\n protected root = inject(NgAtomicRootActionStore);\n #destroy$ = inject(DestroyRef);\n\n constructor() {\n super();\n this.root.actions$.pipe(\n takeUntilDestroyed(this.#destroy$),\n ).subscribe(action => this.#effect(action, 'root'));\n }\n\n dispatch(action: Action, scope = 'default') {\n this.root.log(action, scope);\n const effect = this.#effect(action, scope);\n if (scope === 'root' && (!effect?.props || effect?.props?.dispatch)) {\n this.root.actions$.emit(action);\n } else if (!effect?.props || effect?.props?.dispatch) {\n this.action.emit(action);\n }\n }\n\n #effect(action: Action, scope = 'default') {\n const effect = (this._effectMap ?? new EffectMap()).get(action.id, scope);\n if (effect?.key && effect?.props?.scope === scope) {\n (this as any)[effect?.key](effect.props.accessor(action));\n }\n return effect;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAIa,uBAAuB,CAAA;AAGlC,IAAA,WAAA,GAAA;AAFS,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAU,CAAC;AAG7C,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;KAC7D;AAED,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC5B;AAED,IAAA,GAAG,CAAC,MAAc,EAAE,KAAA,GAAgB,SAAS,EAAA;AAC3C,QAAA,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC9B;+GAbU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADX,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAClB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAA;;;SCShB,cAAc,CAAC,OAAgB,EAAE,GAAG,IAAW,EAAA;AAC7D,IAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACjC,QAAA,OAAO,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACzB,KAAA;AACD,IAAA,OAAO,OAAO,CAAC;AACjB;;ACTM,MAAO,SAAU,SAAQ,GAA8C,CAAA;AAClE,IAAA,GAAG,CAAC,GAAW,EAAE,KAAK,GAAG,SAAS,EAAA;AACzC,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAE,CAAC;KAC7C;IAEQ,GAAG,CAAC,GAAW,EAAE,KAA2C,EAAA;AACnE,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;KAC/D;AAEQ,IAAA,GAAG,CAAC,GAAW,EAAE,KAAK,GAAG,SAAS,EAAA;AACzC,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;KAC5C;AAEO,IAAA,OAAO,CAAC,GAAW,EAAE,KAAK,GAAG,SAAS,EAAA;AAC5C,QAAA,OAAO,CAAI,CAAA,EAAA,KAAK,CAAK,EAAA,EAAA,GAAG,EAAE,CAAC;KAC5B;AACF,CAAA;AAEK,SAAU,MAAM,CAAC,EAAU,EAAE,EACjC,QAAQ,GAAG,KAAK,EAChB,KAAK,GAAG,SAAS,EACjB,QAAQ,GAAG,CAAC,MAAc,KAAK,MAAM,CAAC,OAAO,GAAA,GACrB,EAAE,EAAA;AAC1B,IAAA,OAAO,UAAU,MAAW,EAAE,WAAmB,EAAE,UAA8B,EAAA;AAC/E,QAAA,MAAM,CAAC,YAAY,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;QACzC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC,EAAC,CAAC,CAAC;AACvF,KAAC,CAAC;AACJ;;ACzBgB,SAAA,gBAAgB,CAC9B,QAAmB,EACnB,aAA6C,EAAA;AAE7C,IAAA,eAAe,iBAAiB,GAAA;QAC9B,IAAI,OAAO,aAAa,KAAK,UAAU,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;YACnE,OAAO,MAAO,aAAmC,EAAE,CAAC;AACrD,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,aAA2B,CAAC;AACpC,SAAA;KACF;IAAA,CAAC;AACF,IAAA,OAAO,EAAE,OAAO,EAAG,QAAgB,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;AAC9E,CAAC;IAEW,SAGX;AAHD,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,WAAY,CAAA;AACZ,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,WAAY,CAAA;AACd,CAAC,EAHW,QAAQ,KAAR,QAAQ,GAGnB,EAAA,CAAA,CAAA,CAAA;AAIK,SAAU,OAAO,CAAI,IAAa,EAAA;AACtC,IAAA,OAAQ,IAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAK,IAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpE,CAAC;AAEK,SAAU,SAAS,CAAI,IAAa,EAAA;IACxC,OAAO,MAAM,CAAC,OAAO,CAAS,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;AACnD,SAAA,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,MAAM,EAAC,QAAQ,EAAE,YAAY,EAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAEK,SAAU,UAAU,CAAI,IAAa,EAAA;IACzC,OAAO,MAAM,CAAC,OAAO,CAAS,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;AACpD,SAAA,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,MAAM,EAAC,QAAQ,EAAE,YAAY,EAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAEK,SAAU,uBAAuB,CAAqB,GAAoB,EAAA;IAC9E,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAsB,CAAC,CAAC;AACxD,CAAC;AAEK,SAAU,oBAAoB,CAAqB,GAAoB,EAAA;IAC3E,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAsB,CAAC,CAAC;AACzD,CAAC;MAGqB,mBAAmB,CAAA;AADzC,IAAA,WAAA,GAAA;AAEW,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACnC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC/B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAClC,IAAU,CAAA,UAAA,GAA2B,IAAI,CAAC;QAC1C,IAAgB,CAAA,gBAAA,GAA8B,IAAI,CAAC;QA2E3C,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;AAGjB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAU,CAAC;AAC/C,KAAA;AApFU,IAAA,OAAO,CAA4B;AACnC,IAAA,SAAS,CAAoB;AAC7B,IAAA,SAAS,CAAsB;AAC/B,IAAA,GAAG,CAAsB;AAClC,IAAA,UAAU,CAAgC;AAC1C,IAAA,gBAAgB,CAAmC;IAEnD,aAAa,GAAA;AACX,QAAA,MAAM,WAAW,GAAI,IAAI,CAAC,UAAW,CAAC,QAAiC,CAAC,SAAS,CAAC,CAAC,CAAgB,CAAC;QACpG,MAAM,UAAU,GAAiB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC;AACnE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;YACjC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;gBACtC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACjD,aAAA;AACF,SAAA;KACF;IAED,WAAW,GAAA;;;;;QAMT,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,WAAsB,CAAC,EAAE;AAC1D,YAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY;gBAAE,OAAO;AAC5C,YAAA,IAAI,CAAC,UAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAG,IAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1E,SAAA;KACF;IAED,YAAY,GAAA;;;;;;QAOV,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,WAAsB,CAAC,EAAE;YAC3D,IAAI,CAAC,UAAW,CAAC,QAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,CAC3D,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CACnC,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;gBACzB,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBACtD,IAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjD,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;IAED,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAuB,IAAI,CAAC,WAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,IAAG;gBACxF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,gBAAgB,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,WAAW,CAAC,aAA4B,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,EAAE;;;;;;;;YAS5C,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,WAAsB,CAAC,EAAE;AAC1D,gBAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY;oBAAE,OAAO;gBAC5C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAiB,CAAC;AAC7D,gBAAA,IAAI,MAAM,EAAE;AACV,oBAAA,IAAI,CAAC,UAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;AAChE,iBAAA;AACF,aAAA;AACF,SAAA;KACF;+GA9EmB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,yEAgFpB,CAAC,KAAU,KAAK,KAAK,KAAK,EAAE,GAAG,IAAI,GAAG,KAAK,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAhF1C,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBADxC,SAAS;mBAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;8BAkFrB,UAAU,EAAA,CAAA;sBADjB,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAC,SAAS,EAAE,CAAC,KAAU,KAAK,KAAK,KAAK,EAAE,GAAG,IAAI,GAAG,KAAK,EAAC,CAAA;gBAIrD,MAAM,EAAA,CAAA;sBADf,MAAM;;;MCjII,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;AAEW,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAU,CAAC;AAC9C,KAAA;+GAFY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,SAAS;mBAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;;AAMzB,MAAO,iBAAkB,SAAQ,mBAAmB,CAAA;AAIxD,IAAA,SAAS,CAAsB;AAE/B,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;AAJA,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AACjD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAI7B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CACrB,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CACnC,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;KACrD;AAED,IAAA,QAAQ,CAAC,MAAc,EAAE,KAAK,GAAG,SAAS,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3C,QAAA,IAAI,KAAK,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE;YACnE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjC,SAAA;aAAM,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,SAAA;KACF;AAED,IAAA,OAAO,CAAC,MAAc,EAAE,KAAK,GAAG,SAAS,EAAA;QACvC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,SAAS,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1E,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAChD,YAAA,IAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3D,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;+GA7BU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,SAAS;mBAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;;;ACZ/B;;AAEG;;;;"}
@@ -1,4 +1,4 @@
1
- import { ComponentRef, EventEmitter, Type } from "@angular/core";
1
+ import { ComponentRef, EventEmitter, SimpleChanges, Type } from "@angular/core";
2
2
  import { Action } from "./action";
3
3
  import { NgAtomicComponentStore } from "./component-store";
4
4
  import * as i0 from "@angular/core";
@@ -8,24 +8,27 @@ export declare function provideComponent<ABS = any, IMPL = any>(abstract: Type<A
8
8
  provide: any;
9
9
  useValue: () => Promise<Type<IMPL>>;
10
10
  };
11
- export declare function getInputs<T>(type: Type<T>, meta?: 'ɵcmp' | 'ɵdir'): [
12
- string,
13
- string
14
- ][];
15
- export declare function getInputsByComponentRef<T = any>(cmp: ComponentRef<T>): [
16
- string,
17
- string
18
- ][];
19
- export declare function getOutputsByInstance<T = any>(cmp: ComponentRef<T>): [
20
- string,
21
- string
22
- ][];
11
+ export declare enum HostType {
12
+ Dir = "\u0275dir",
13
+ Cmp = "\u0275cmp"
14
+ }
15
+ type IO = {
16
+ propName: string;
17
+ templateName: string;
18
+ };
19
+ export declare function getMeta<T>(type: Type<T>): any;
20
+ export declare function getInputs<T>(type: Type<T>): IO[];
21
+ export declare function getOutputs<T>(type: Type<T>): IO[];
22
+ export declare function getInputsByComponentRef<T extends {} = any>(cmp: ComponentRef<T>): IO[];
23
+ export declare function getOutputsByInstance<T extends {} = any>(cmp: ComponentRef<T>): IO[];
23
24
  export declare abstract class InjectableComponent<T extends NgAtomicComponentStore = any> {
24
25
  #private;
25
26
  ngOnInit(): void;
27
+ ngOnChanges(simpleChanges: SimpleChanges): void;
26
28
  private injectable;
27
29
  protected action: EventEmitter<Action<any>>;
28
30
  static ɵfac: i0.ɵɵFactoryDeclaration<InjectableComponent<any>, never>;
29
31
  static ɵdir: i0.ɵɵDirectiveDeclaration<InjectableComponent<any>, never, never, { "injectable": { "alias": "injectable"; "required": false; }; }, { "action": "action"; }, never, never, true, never>;
30
32
  static ngAcceptInputType_injectable: any;
31
33
  }
34
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ng-atomic/core",
3
- "version": "16.0.0",
3
+ "version": "16.1.1",
4
4
  "peerDependencies": {
5
5
  "@angular/core": "^16.0.0"
6
6
  },