@copilotkitnext/angular 0.0.5 → 0.0.7

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.
@@ -57,10 +57,19 @@ function createComponent(viewContainer, component, props, injector, outputs) {
57
57
  injector
58
58
  });
59
59
  if (props) {
60
- // Apply props using setInput
61
- for (const key in props) {
62
- const value = props[key];
63
- componentRef.setInput(key, value);
60
+ // Apply props using setInput, but only for declared inputs
61
+ const cmpDef = component.ɵcmp;
62
+ const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
63
+ if (declaredInputs.has('props')) {
64
+ componentRef.setInput('props', props);
65
+ }
66
+ else {
67
+ for (const key in props) {
68
+ if (declaredInputs.has(key)) {
69
+ const value = props[key];
70
+ componentRef.setInput(key, value);
71
+ }
72
+ }
64
73
  }
65
74
  }
66
75
  if (outputs) {
@@ -219,4 +228,4 @@ export function createSlotRenderer(defaultComponent, slotName) {
219
228
  });
220
229
  };
221
230
  }
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2xvdHMvc2xvdC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsV0FBVyxFQUtYLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1ELFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU1Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixhQUErQixFQUMvQixPQUE2QjtJQUU3QixNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXJFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUV0QixNQUFNLGFBQWEsR0FBRyxJQUFJLElBQUksZ0JBQWdCLENBQUM7SUFDL0MsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQztJQUU3RCxJQUFJLGFBQWEsWUFBWSxXQUFXLEVBQUUsQ0FBQztRQUN6QywrQkFBK0I7UUFDL0IsT0FBTyxhQUFhLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFO1lBQ3JELFNBQVMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN0QixLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUU7U0FDWixDQUFDLENBQUM7SUFDWixDQUFDO1NBQU0sSUFBSSxlQUFlLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxlQUFlLENBQ3BCLGFBQWEsRUFDYixhQUF3QixFQUN4QixLQUFLLEVBQ0wsaUJBQWlCLEVBQ2pCLE9BQU8sQ0FDUixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLDZC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O0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLGdCQUF5QixFQUN6QixRQUFpQjtJQUVqQixtRUFBbUU7SUFDbkUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRWpELE9BQU8sQ0FDTCxhQUErQixFQUMvQixJQUFtQixFQUNuQixLQUFrQixFQUNsQixPQUE4QyxFQUM5QyxFQUFFO1FBQ0YsK0NBQStDO1FBQy9DLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixJQUFJLEtBQUssQ0FBQyxTQUFTO29CQUFFLElBQUksR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO3FCQUN2QyxJQUFJLEtBQUssQ0FBQyxRQUFRO29CQUFFLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ2pELENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUMsYUFBYSxFQUFFO1lBQy9CLElBQUk7WUFDSixnQkFBZ0I7WUFDaEIsS0FBSztZQUNMLE9BQU87U0FDUixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgXG4gIFR5cGUsIFxuICBUZW1wbGF0ZVJlZiwgXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIENvbXBvbmVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBJbmplY3RvcixcbiAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2xvdFZhbHVlLCBSZW5kZXJTbG90T3B0aW9ucywgU2xvdFJlZ2lzdHJ5RW50cnksIFNMT1RfQ09ORklHIH0gZnJvbSAnLi9zbG90LnR5cGVzJztcblxuLyoqXG4gKiBSZW5kZXJzIGEgc2xvdCB2YWx1ZSBpbnRvIGEgVmlld0NvbnRhaW5lclJlZi5cbiAqIFRoaXMgaXMgdGhlIGNvcmUgdXRpbGl0eSBmb3Igc2xvdCByZW5kZXJpbmcuXG4gKiBcbiAqIEBwYXJhbSB2aWV3Q29udGFpbmVyIC0gVGhlIFZpZXdDb250YWluZXJSZWYgdG8gcmVuZGVyIGludG9cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgcmVuZGVyaW5nIHRoZSBzbG90XG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBjb21wb25lbnQgb3IgZW1iZWRkZWQgdmlldyByZWZlcmVuY2VcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBjb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xuICogICBcbiAqICAgcmVuZGVyQnV0dG9uKCkge1xuICogICAgIHJlbmRlclNsb3QodGhpcy5jb250YWluZXIsIHtcbiAqICAgICAgIHNsb3Q6IHRoaXMuYnV0dG9uT3ZlcnJpZGUsXG4gKiAgICAgICBkZWZhdWx0Q29tcG9uZW50OiBEZWZhdWx0QnV0dG9uLFxuICogICAgICAgcHJvcHM6IHsgdGV4dDogJ0NsaWNrIG1lJyB9LFxuICogICAgICAgb3V0cHV0czogeyBjbGljazogKGV2ZW50KSA9PiB0aGlzLmhhbmRsZUNsaWNrKGV2ZW50KSB9XG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyU2xvdDxUID0gYW55PihcbiAgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgb3B0aW9uczogUmVuZGVyU2xvdE9wdGlvbnM8VD5cbik6IENvbXBvbmVudFJlZjxUPiB8IEVtYmVkZGVkVmlld1JlZjxUPiB8IG51bGwge1xuICBjb25zdCB7IHNsb3QsIGRlZmF1bHRDb21wb25lbnQsIHByb3BzLCBpbmplY3Rvciwgb3V0cHV0cyB9ID0gb3B0aW9ucztcbiAgXG4gIHZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgXG4gIGNvbnN0IGVmZmVjdGl2ZVNsb3QgPSBzbG90ID8/IGRlZmF1bHRDb21wb25lbnQ7XG4gIGNvbnN0IGVmZmVjdGl2ZUluamVjdG9yID0gaW5qZWN0b3IgPz8gdmlld0NvbnRhaW5lci5pbmplY3RvcjtcbiAgXG4gIGlmIChlZmZlY3RpdmVTbG90IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAvLyBUZW1wbGF0ZVJlZjogcmVuZGVyIHRlbXBsYXRlXG4gICAgcmV0dXJuIHZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGVmZmVjdGl2ZVNsb3QsIHtcbiAgICAgICRpbXBsaWNpdDogcHJvcHMgPz8ge30sXG4gICAgICBwcm9wczogcHJvcHMgPz8ge31cbiAgICB9IGFzIGFueSk7XG4gIH0gZWxzZSBpZiAoaXNDb21wb25lbnRUeXBlKGVmZmVjdGl2ZVNsb3QpKSB7XG4gICAgLy8gQ29tcG9uZW50IHR5cGUgLSB3cmFwIGluIHRyeS9jYXRjaCBmb3Igc2FmZXR5XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjcmVhdGVDb21wb25lbnQoXG4gICAgICAgIHZpZXdDb250YWluZXIsXG4gICAgICAgIGVmZmVjdGl2ZVNsb3QgYXMgVHlwZTxUPixcbiAgICAgICAgcHJvcHMsXG4gICAgICAgIGVmZmVjdGl2ZUluamVjdG9yLFxuICAgICAgICBvdXRwdXRzXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBjcmVhdGUgY29tcG9uZW50OicsIGVmZmVjdGl2ZVNsb3QsIGVycm9yKTtcbiAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IGNvbXBvbmVudFxuICAgIH1cbiAgfVxuICBcbiAgLy8gRGVmYXVsdDogcmVuZGVyIGRlZmF1bHQgY29tcG9uZW50IGlmIHByb3ZpZGVkXG4gIHJldHVybiBkZWZhdWx0Q29tcG9uZW50ID8gY3JlYXRlQ29tcG9uZW50KFxuICAgIHZpZXdDb250YWluZXIsXG4gICAgZGVmYXVsdENvbXBvbmVudCxcbiAgICBwcm9wcyxcbiAgICBlZmZlY3RpdmVJbmplY3RvcixcbiAgICBvdXRwdXRzXG4gICkgOiBudWxsO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBjb21wb25lbnQgYW5kIGFwcGxpZXMgcHJvcGVydGllcy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50PFQ+KFxuICB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICBjb21wb25lbnQ6IFR5cGU8VD4sXG4gIHByb3BzPzogUGFydGlhbDxUPixcbiAgaW5qZWN0b3I/OiBJbmplY3RvcixcbiAgb3V0cHV0cz86IFJlY29yZDxzdHJpbmcsIChldmVudDogYW55KSA9PiB2b2lkPlxuKTogQ29tcG9uZW50UmVmPFQ+IHtcbiAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50LCB7XG4gICAgaW5qZWN0b3JcbiAgfSk7XG4gIFxuICBpZiAocHJvcHMpIHtcbiAgICAvLyBBcHBseSBwcm9wcyB1c2luZyBzZXRJbnB1dFxuICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHByb3BzW2tleV07XG4gICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIFxuICBpZiAob3V0cHV0cykge1xuICAgIC8vIFdpcmUgdXAgb3V0cHV0IGV2ZW50IGhhbmRsZXJzIHdpdGggcHJvcGVyIGNsZWFudXBcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uczogYW55W10gPSBbXTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IFtldmVudE5hbWUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKG91dHB1dHMpKSB7XG4gICAgICBpZiAoaW5zdGFuY2VbZXZlbnROYW1lXT8uc3Vic2NyaWJlKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGluc3RhbmNlW2V2ZW50TmFtZV0uc3Vic2NyaWJlKGhhbmRsZXIpO1xuICAgICAgICBzdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gUmVnaXN0ZXIgY2xlYW51cCBvbiBjb21wb25lbnQgZGVzdHJveVxuICAgIGNvbXBvbmVudFJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgfSk7XG4gIH1cbiAgXG4gIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICBcbiAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbn1cblxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgY29tcG9uZW50IHR5cGUuXG4gKiBTaW1wbGlmaWVkIGNoZWNrIC0gcmVseSBvbiB0cnkvY2F0Y2ggZm9yIGFjdHVhbCB2YWxpZGF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wb25lbnRUeXBlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgLy8gQXJyb3cgZnVuY3Rpb25zIGFuZCByZWd1bGFyIGZ1bmN0aW9ucyB3aXRob3V0IGEgcHJvdG90eXBlIGFyZSBub3QgY29tcG9uZW50c1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICEhdmFsdWUucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgdmFsaWQgc2xvdCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2xvdFZhbHVlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBTbG90VmFsdWUge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiB8fCBpc0NvbXBvbmVudFR5cGUodmFsdWUpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBzbG90IHZhbHVlIHRvIGEgY29uc2lzdGVudCBmb3JtYXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTbG90VmFsdWU8VCA9IGFueT4oXG4gIHZhbHVlOiBTbG90VmFsdWU8VD4gfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRDb21wb25lbnQ6IFR5cGU8VD4gfCB1bmRlZmluZWRcbik6IFNsb3RSZWdpc3RyeUVudHJ5PFQ+IHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiB7IGNvbXBvbmVudDogZGVmYXVsdENvbXBvbmVudCB9O1xuICB9XG4gIFxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgIHJldHVybiB7IHRlbXBsYXRlOiB2YWx1ZSB9O1xuICB9XG4gIFxuICBpZiAoaXNDb21wb25lbnRUeXBlKHZhbHVlKSkge1xuICAgIHJldHVybiB7IGNvbXBvbmVudDogdmFsdWUgYXMgVHlwZTxUPiB9O1xuICB9XG4gIFxuICByZXR1cm4geyBjb21wb25lbnQ6IGRlZmF1bHRDb21wb25lbnQgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2xvdCBjb25maWd1cmF0aW9uIG1hcCBmb3IgYSBjb21wb25lbnQuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzbG90cyA9IGNyZWF0ZVNsb3RDb25maWcoe1xuICogICBzZW5kQnV0dG9uOiBDdXN0b21TZW5kQnV0dG9uLFxuICogICB0b29sYmFyOiAnY3VzdG9tLXRvb2xiYXItY2xhc3MnLFxuICogICBmb290ZXI6IGZvb3RlclRlbXBsYXRlXG4gKiB9LCB7XG4gKiAgIHNlbmRCdXR0b246IERlZmF1bHRTZW5kQnV0dG9uLFxuICogICB0b29sYmFyOiBEZWZhdWx0VG9vbGJhcixcbiAqICAgZm9vdGVyOiBEZWZhdWx0Rm9vdGVyXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2xvdENvbmZpZzxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgVHlwZTxhbnk+Pj4oXG4gIG92ZXJyaWRlczogUGFydGlhbDxSZWNvcmQ8a2V5b2YgVCwgU2xvdFZhbHVlPj4sXG4gIGRlZmF1bHRzOiBUXG4pOiBNYXA8a2V5b2YgVCwgU2xvdFJlZ2lzdHJ5RW50cnk+IHtcbiAgY29uc3QgY29uZmlnID0gbmV3IE1hcDxrZXlvZiBULCBTbG90UmVnaXN0cnlFbnRyeT4oKTtcbiAgXG4gIGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXNba2V5XTtcbiAgICBjb25zdCBkZWZhdWx0Q29tcG9uZW50ID0gZGVmYXVsdHNba2V5XTtcbiAgICBjb25maWcuc2V0KGtleSwgbm9ybWFsaXplU2xvdFZhbHVlKG92ZXJyaWRlLCBkZWZhdWx0Q29tcG9uZW50KSk7XG4gIH1cbiAgXG4gIHJldHVybiBjb25maWc7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgc2xvdCBjb25maWd1cmF0aW9uIHRvIGNoaWxkIGNvbXBvbmVudHMgdmlhIERJLlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogQENvbXBvbmVudCh7XG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHByb3ZpZGVTbG90cyh7XG4gKiAgICAgICBzZW5kQnV0dG9uOiBDdXN0b21TZW5kQnV0dG9uLFxuICogICAgICAgdG9vbGJhcjogQ3VzdG9tVG9vbGJhclxuICogICAgIH0pXG4gKiAgIF1cbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVTbG90cyhzbG90czogUmVjb3JkPHN0cmluZywgVHlwZTxhbnk+Pikge1xuICBjb25zdCBzbG90TWFwID0gbmV3IE1hcDxzdHJpbmcsIFNsb3RSZWdpc3RyeUVudHJ5PigpO1xuICBcbiAgLy8gT25seSBhY2NlcHQgY29tcG9uZW50IHR5cGVzIGluIERJICh0ZW1wbGF0ZXMgbGFjayB2aWV3IGNvbnRleHQpXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuICAgIGlmIChpc0NvbXBvbmVudFR5cGUodmFsdWUpKSB7XG4gICAgICBzbG90TWFwLnNldChrZXksIHsgY29tcG9uZW50OiB2YWx1ZSBhcyBUeXBlPGFueT4gfSk7XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IFNMT1RfQ09ORklHLFxuICAgIHVzZVZhbHVlOiBzbG90TWFwXG4gIH07XG59XG5cbi8qKlxuICogR2V0cyBzbG90IGNvbmZpZ3VyYXRpb24gZnJvbSBESS5cbiAqIE11c3QgYmUgY2FsbGVkIHdpdGhpbiBhbiBpbmplY3Rpb24gY29udGV4dC5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIHNsb3RzID0gZ2V0U2xvdENvbmZpZygpO1xuICogICBcbiAqICAgbmdPbkluaXQoKSB7XG4gKiAgICAgY29uc3Qgc2VuZEJ1dHRvbiA9IHRoaXMuc2xvdHM/LmdldCgnc2VuZEJ1dHRvbicpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb3RDb25maWcoKTogUmVhZG9ubHlNYXA8c3RyaW5nLCBTbG90UmVnaXN0cnlFbnRyeT4gfCBudWxsIHtcbiAgcmV0dXJuIGluamVjdChTTE9UX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVuZGVyIGZ1bmN0aW9uIGZvciBhIHNwZWNpZmljIHNsb3QuXG4gKiBVc2VmdWwgZm9yIGNyZWF0aW5nIHJldXNhYmxlIHNsb3QgcmVuZGVyZXJzLlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVuZGVyU2VuZEJ1dHRvbiA9IGNyZWF0ZVNsb3RSZW5kZXJlcihcbiAqICAgRGVmYXVsdFNlbmRCdXR0b24sXG4gKiAgICdzZW5kQnV0dG9uJ1xuICogKTtcbiAqIFxuICogLy8gTGF0ZXIgaW4gdGVtcGxhdGVcbiAqIHJlbmRlclNlbmRCdXR0b24odGhpcy52aWV3Q29udGFpbmVyLCB0aGlzLnNlbmRCdXR0b25PdmVycmlkZSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNsb3RSZW5kZXJlcjxUPihcbiAgZGVmYXVsdENvbXBvbmVudDogVHlwZTxUPixcbiAgc2xvdE5hbWU/OiBzdHJpbmdcbikge1xuICAvLyBHZXQgY29uZmlnIGluIHRoZSBpbmplY3Rpb24gY29udGV4dCB3aGVuIHRoZSByZW5kZXJlciBpcyBjcmVhdGVkXG4gIGNvbnN0IGNvbmZpZyA9IHNsb3ROYW1lID8gZ2V0U2xvdENvbmZpZygpIDogbnVsbDtcbiAgXG4gIHJldHVybiAoXG4gICAgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBzbG90PzogU2xvdFZhbHVlPFQ+LFxuICAgIHByb3BzPzogUGFydGlhbDxUPixcbiAgICBvdXRwdXRzPzogUmVjb3JkPHN0cmluZywgKGV2ZW50OiBhbnkpID0+IHZvaWQ+XG4gICkgPT4ge1xuICAgIC8vIENoZWNrIERJIGZvciBvdmVycmlkZXMgaWYgc2xvdCBuYW1lIHByb3ZpZGVkXG4gICAgaWYgKHNsb3ROYW1lICYmICFzbG90ICYmIGNvbmZpZykge1xuICAgICAgY29uc3QgZW50cnkgPSBjb25maWcuZ2V0KHNsb3ROYW1lKTtcbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBpZiAoZW50cnkuY29tcG9uZW50KSBzbG90ID0gZW50cnkuY29tcG9uZW50O1xuICAgICAgICBlbHNlIGlmIChlbnRyeS50ZW1wbGF0ZSkgc2xvdCA9IGVudHJ5LnRlbXBsYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcmVuZGVyU2xvdCh2aWV3Q29udGFpbmVyLCB7XG4gICAgICBzbG90LFxuICAgICAgZGVmYXVsdENvbXBvbmVudCxcbiAgICAgIHByb3BzLFxuICAgICAgb3V0cHV0c1xuICAgIH0pO1xuICB9O1xufSJdfQ==
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2xvdHMvc2xvdC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsV0FBVyxFQUtYLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1ELFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU1Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixhQUErQixFQUMvQixPQUE2QjtJQUU3QixNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXJFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUV0QixNQUFNLGFBQWEsR0FBRyxJQUFJLElBQUksZ0JBQWdCLENBQUM7SUFDL0MsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQztJQUU3RCxJQUFJLGFBQWEsWUFBWSxXQUFXLEVBQUUsQ0FBQztRQUN6QywrQkFBK0I7UUFDL0IsT0FBTyxhQUFhLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFO1lBQ3JELFNBQVMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN0QixLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUU7U0FDWixDQUFDLENBQUM7SUFDWixDQUFDO1NBQU0sSUFBSSxlQUFlLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxlQUFlLENBQ3BCLGFBQWEsRUFDYixhQUF3QixFQUN4QixLQUFLLEVBQ0wsaUJBQWlCLEVBQ2pCLE9BQU8sQ0FDUixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLDZC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LGdCQUFnQjtZQUNoQixLQUFLO1lBQ0wsT0FBTztTQUNSLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBcbiAgVHlwZSwgXG4gIFRlbXBsYXRlUmVmLCBcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgQ29tcG9uZW50UmVmLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIEluamVjdG9yLFxuICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTbG90VmFsdWUsIFJlbmRlclNsb3RPcHRpb25zLCBTbG90UmVnaXN0cnlFbnRyeSwgU0xPVF9DT05GSUcgfSBmcm9tICcuL3Nsb3QudHlwZXMnO1xuXG4vKipcbiAqIFJlbmRlcnMgYSBzbG90IHZhbHVlIGludG8gYSBWaWV3Q29udGFpbmVyUmVmLlxuICogVGhpcyBpcyB0aGUgY29yZSB1dGlsaXR5IGZvciBzbG90IHJlbmRlcmluZy5cbiAqIFxuICogQHBhcmFtIHZpZXdDb250YWluZXIgLSBUaGUgVmlld0NvbnRhaW5lclJlZiB0byByZW5kZXIgaW50b1xuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciByZW5kZXJpbmcgdGhlIHNsb3RcbiAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGNvbXBvbmVudCBvciBlbWJlZGRlZCB2aWV3IHJlZmVyZW5jZVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGNvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG4gKiAgIFxuICogICByZW5kZXJCdXR0b24oKSB7XG4gKiAgICAgcmVuZGVyU2xvdCh0aGlzLmNvbnRhaW5lciwge1xuICogICAgICAgc2xvdDogdGhpcy5idXR0b25PdmVycmlkZSxcbiAqICAgICAgIGRlZmF1bHRDb21wb25lbnQ6IERlZmF1bHRCdXR0b24sXG4gKiAgICAgICBwcm9wczogeyB0ZXh0OiAnQ2xpY2sgbWUnIH0sXG4gKiAgICAgICBvdXRwdXRzOiB7IGNsaWNrOiAoZXZlbnQpID0+IHRoaXMuaGFuZGxlQ2xpY2soZXZlbnQpIH1cbiAqICAgICB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJTbG90PFQgPSBhbnk+KFxuICB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICBvcHRpb25zOiBSZW5kZXJTbG90T3B0aW9uczxUPlxuKTogQ29tcG9uZW50UmVmPFQ+IHwgRW1iZWRkZWRWaWV3UmVmPFQ+IHwgbnVsbCB7XG4gIGNvbnN0IHsgc2xvdCwgZGVmYXVsdENvbXBvbmVudCwgcHJvcHMsIGluamVjdG9yLCBvdXRwdXRzIH0gPSBvcHRpb25zO1xuICBcbiAgdmlld0NvbnRhaW5lci5jbGVhcigpO1xuICBcbiAgY29uc3QgZWZmZWN0aXZlU2xvdCA9IHNsb3QgPz8gZGVmYXVsdENvbXBvbmVudDtcbiAgY29uc3QgZWZmZWN0aXZlSW5qZWN0b3IgPSBpbmplY3RvciA/PyB2aWV3Q29udGFpbmVyLmluamVjdG9yO1xuICBcbiAgaWYgKGVmZmVjdGl2ZVNsb3QgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgIC8vIFRlbXBsYXRlUmVmOiByZW5kZXIgdGVtcGxhdGVcbiAgICByZXR1cm4gdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZWZmZWN0aXZlU2xvdCwge1xuICAgICAgJGltcGxpY2l0OiBwcm9wcyA/PyB7fSxcbiAgICAgIHByb3BzOiBwcm9wcyA/PyB7fVxuICAgIH0gYXMgYW55KTtcbiAgfSBlbHNlIGlmIChpc0NvbXBvbmVudFR5cGUoZWZmZWN0aXZlU2xvdCkpIHtcbiAgICAvLyBDb21wb25lbnQgdHlwZSAtIHdyYXAgaW4gdHJ5L2NhdGNoIGZvciBzYWZldHlcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUNvbXBvbmVudChcbiAgICAgICAgdmlld0NvbnRhaW5lcixcbiAgICAgICAgZWZmZWN0aXZlU2xvdCBhcyBUeXBlPFQ+LFxuICAgICAgICBwcm9wcyxcbiAgICAgICAgZWZmZWN0aXZlSW5qZWN0b3IsXG4gICAgICAgIG91dHB1dHNcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGNyZWF0ZSBjb21wb25lbnQ6JywgZWZmZWN0aXZlU2xvdCwgZXJyb3IpO1xuICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgY29tcG9uZW50XG4gICAgfVxuICB9XG4gIFxuICAvLyBEZWZhdWx0OiByZW5kZXIgZGVmYXVsdCBjb21wb25lbnQgaWYgcHJvdmlkZWRcbiAgcmV0dXJuIGRlZmF1bHRDb21wb25lbnQgPyBjcmVhdGVDb21wb25lbnQoXG4gICAgdmlld0NvbnRhaW5lcixcbiAgICBkZWZhdWx0Q29tcG9uZW50LFxuICAgIHByb3BzLFxuICAgIGVmZmVjdGl2ZUluamVjdG9yLFxuICAgIG91dHB1dHNcbiAgKSA6IG51bGw7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBvbmVudCBhbmQgYXBwbGllcyBwcm9wZXJ0aWVzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnQ8VD4oXG4gIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gIGNvbXBvbmVudDogVHlwZTxUPixcbiAgcHJvcHM/OiBQYXJ0aWFsPFQ+LFxuICBpbmplY3Rvcj86IEluamVjdG9yLFxuICBvdXRwdXRzPzogUmVjb3JkPHN0cmluZywgKGV2ZW50OiBhbnkpID0+IHZvaWQ+XG4pOiBDb21wb25lbnRSZWY8VD4ge1xuICBjb25zdCBjb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHtcbiAgICBpbmplY3RvclxuICB9KTtcbiAgXG4gIGlmIChwcm9wcykge1xuICAgIC8vIEFwcGx5IHByb3BzIHVzaW5nIHNldElucHV0LCBidXQgb25seSBmb3IgZGVjbGFyZWQgaW5wdXRzXG4gICAgY29uc3QgY21wRGVmOiBhbnkgPSAoY29tcG9uZW50IGFzIGFueSkuybVjbXA7XG4gICAgY29uc3QgZGVjbGFyZWRJbnB1dHMgPSBuZXcgU2V0PHN0cmluZz4oT2JqZWN0LmtleXMoY21wRGVmPy5pbnB1dHMgPz8ge30pKTtcblxuICAgIGlmIChkZWNsYXJlZElucHV0cy5oYXMoJ3Byb3BzJykpIHtcbiAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgncHJvcHMnLCBwcm9wcyBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgICAgICBpZiAoZGVjbGFyZWRJbnB1dHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IChwcm9wcyBhcyBhbnkpW2tleV07XG4gICAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICBpZiAob3V0cHV0cykge1xuICAgIC8vIFdpcmUgdXAgb3V0cHV0IGV2ZW50IGhhbmRsZXJzIHdpdGggcHJvcGVyIGNsZWFudXBcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uczogYW55W10gPSBbXTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IFtldmVudE5hbWUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKG91dHB1dHMpKSB7XG4gICAgICBpZiAoaW5zdGFuY2VbZXZlbnROYW1lXT8uc3Vic2NyaWJlKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGluc3RhbmNlW2V2ZW50TmFtZV0uc3Vic2NyaWJlKGhhbmRsZXIpO1xuICAgICAgICBzdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gUmVnaXN0ZXIgY2xlYW51cCBvbiBjb21wb25lbnQgZGVzdHJveVxuICAgIGNvbXBvbmVudFJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgfSk7XG4gIH1cbiAgXG4gIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICBcbiAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbn1cblxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgY29tcG9uZW50IHR5cGUuXG4gKiBTaW1wbGlmaWVkIGNoZWNrIC0gcmVseSBvbiB0cnkvY2F0Y2ggZm9yIGFjdHVhbCB2YWxpZGF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wb25lbnRUeXBlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgLy8gQXJyb3cgZnVuY3Rpb25zIGFuZCByZWd1bGFyIGZ1bmN0aW9ucyB3aXRob3V0IGEgcHJvdG90eXBlIGFyZSBub3QgY29tcG9uZW50c1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICEhdmFsdWUucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgdmFsaWQgc2xvdCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2xvdFZhbHVlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBTbG90VmFsdWUge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiB8fCBpc0NvbXBvbmVudFR5cGUodmFsdWUpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBzbG90IHZhbHVlIHRvIGEgY29uc2lzdGVudCBmb3JtYXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTbG90VmFsdWU8VCA9IGFueT4oXG4gIHZhbHVlOiBTbG90VmFsdWU8VD4gfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRDb21wb25lbnQ6IFR5cGU8VD4gfCB1bmRlZmluZWRcbik6IFNsb3RSZWdpc3RyeUVudHJ5PFQ+IHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiB7IGNvbXBvbmVudDogZGVmYXVsdENvbXBvbmVudCB9O1xuICB9XG4gIFxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgIHJldHVybiB7IHRlbXBsYXRlOiB2YWx1ZSB9O1xuICB9XG4gIFxuICBpZiAoaXNDb21wb25lbnRUeXBlKHZhbHVlKSkge1xuICAgIHJldHVybiB7IGNvbXBvbmVudDogdmFsdWUgYXMgVHlwZTxUPiB9O1xuICB9XG4gIFxuICByZXR1cm4geyBjb21wb25lbnQ6IGRlZmF1bHRDb21wb25lbnQgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2xvdCBjb25maWd1cmF0aW9uIG1hcCBmb3IgYSBjb21wb25lbnQuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzbG90cyA9IGNyZWF0ZVNsb3RDb25maWcoe1xuICogICBzZW5kQnV0dG9uOiBDdXN0b21TZW5kQnV0dG9uLFxuICogICB0b29sYmFyOiAnY3VzdG9tLXRvb2xiYXItY2xhc3MnLFxuICogICBmb290ZXI6IGZvb3RlclRlbXBsYXRlXG4gKiB9LCB7XG4gKiAgIHNlbmRCdXR0b246IERlZmF1bHRTZW5kQnV0dG9uLFxuICogICB0b29sYmFyOiBEZWZhdWx0VG9vbGJhcixcbiAqICAgZm9vdGVyOiBEZWZhdWx0Rm9vdGVyXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2xvdENvbmZpZzxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgVHlwZTxhbnk+Pj4oXG4gIG92ZXJyaWRlczogUGFydGlhbDxSZWNvcmQ8a2V5b2YgVCwgU2xvdFZhbHVlPj4sXG4gIGRlZmF1bHRzOiBUXG4pOiBNYXA8a2V5b2YgVCwgU2xvdFJlZ2lzdHJ5RW50cnk+IHtcbiAgY29uc3QgY29uZmlnID0gbmV3IE1hcDxrZXlvZiBULCBTbG90UmVnaXN0cnlFbnRyeT4oKTtcbiAgXG4gIGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXNba2V5XTtcbiAgICBjb25zdCBkZWZhdWx0Q29tcG9uZW50ID0gZGVmYXVsdHNba2V5XTtcbiAgICBjb25maWcuc2V0KGtleSwgbm9ybWFsaXplU2xvdFZhbHVlKG92ZXJyaWRlLCBkZWZhdWx0Q29tcG9uZW50KSk7XG4gIH1cbiAgXG4gIHJldHVybiBjb25maWc7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgc2xvdCBjb25maWd1cmF0aW9uIHRvIGNoaWxkIGNvbXBvbmVudHMgdmlhIERJLlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogQENvbXBvbmVudCh7XG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHByb3ZpZGVTbG90cyh7XG4gKiAgICAgICBzZW5kQnV0dG9uOiBDdXN0b21TZW5kQnV0dG9uLFxuICogICAgICAgdG9vbGJhcjogQ3VzdG9tVG9vbGJhclxuICogICAgIH0pXG4gKiAgIF1cbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVTbG90cyhzbG90czogUmVjb3JkPHN0cmluZywgVHlwZTxhbnk+Pikge1xuICBjb25zdCBzbG90TWFwID0gbmV3IE1hcDxzdHJpbmcsIFNsb3RSZWdpc3RyeUVudHJ5PigpO1xuICBcbiAgLy8gT25seSBhY2NlcHQgY29tcG9uZW50IHR5cGVzIGluIERJICh0ZW1wbGF0ZXMgbGFjayB2aWV3IGNvbnRleHQpXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuICAgIGlmIChpc0NvbXBvbmVudFR5cGUodmFsdWUpKSB7XG4gICAgICBzbG90TWFwLnNldChrZXksIHsgY29tcG9uZW50OiB2YWx1ZSBhcyBUeXBlPGFueT4gfSk7XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IFNMT1RfQ09ORklHLFxuICAgIHVzZVZhbHVlOiBzbG90TWFwXG4gIH07XG59XG5cbi8qKlxuICogR2V0cyBzbG90IGNvbmZpZ3VyYXRpb24gZnJvbSBESS5cbiAqIE11c3QgYmUgY2FsbGVkIHdpdGhpbiBhbiBpbmplY3Rpb24gY29udGV4dC5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIHNsb3RzID0gZ2V0U2xvdENvbmZpZygpO1xuICogICBcbiAqICAgbmdPbkluaXQoKSB7XG4gKiAgICAgY29uc3Qgc2VuZEJ1dHRvbiA9IHRoaXMuc2xvdHM/LmdldCgnc2VuZEJ1dHRvbicpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb3RDb25maWcoKTogUmVhZG9ubHlNYXA8c3RyaW5nLCBTbG90UmVnaXN0cnlFbnRyeT4gfCBudWxsIHtcbiAgcmV0dXJuIGluamVjdChTTE9UX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVuZGVyIGZ1bmN0aW9uIGZvciBhIHNwZWNpZmljIHNsb3QuXG4gKiBVc2VmdWwgZm9yIGNyZWF0aW5nIHJldXNhYmxlIHNsb3QgcmVuZGVyZXJzLlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVuZGVyU2VuZEJ1dHRvbiA9IGNyZWF0ZVNsb3RSZW5kZXJlcihcbiAqICAgRGVmYXVsdFNlbmRCdXR0b24sXG4gKiAgICdzZW5kQnV0dG9uJ1xuICogKTtcbiAqIFxuICogLy8gTGF0ZXIgaW4gdGVtcGxhdGVcbiAqIHJlbmRlclNlbmRCdXR0b24odGhpcy52aWV3Q29udGFpbmVyLCB0aGlzLnNlbmRCdXR0b25PdmVycmlkZSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNsb3RSZW5kZXJlcjxUPihcbiAgZGVmYXVsdENvbXBvbmVudDogVHlwZTxUPixcbiAgc2xvdE5hbWU/OiBzdHJpbmdcbikge1xuICAvLyBHZXQgY29uZmlnIGluIHRoZSBpbmplY3Rpb24gY29udGV4dCB3aGVuIHRoZSByZW5kZXJlciBpcyBjcmVhdGVkXG4gIGNvbnN0IGNvbmZpZyA9IHNsb3ROYW1lID8gZ2V0U2xvdENvbmZpZygpIDogbnVsbDtcbiAgXG4gIHJldHVybiAoXG4gICAgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBzbG90PzogU2xvdFZhbHVlPFQ+LFxuICAgIHByb3BzPzogUGFydGlhbDxUPixcbiAgICBvdXRwdXRzPzogUmVjb3JkPHN0cmluZywgKGV2ZW50OiBhbnkpID0+IHZvaWQ+XG4gICkgPT4ge1xuICAgIC8vIENoZWNrIERJIGZvciBvdmVycmlkZXMgaWYgc2xvdCBuYW1lIHByb3ZpZGVkXG4gICAgaWYgKHNsb3ROYW1lICYmICFzbG90ICYmIGNvbmZpZykge1xuICAgICAgY29uc3QgZW50cnkgPSBjb25maWcuZ2V0KHNsb3ROYW1lKTtcbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBpZiAoZW50cnkuY29tcG9uZW50KSBzbG90ID0gZW50cnkuY29tcG9uZW50O1xuICAgICAgICBlbHNlIGlmIChlbnRyeS50ZW1wbGF0ZSkgc2xvdCA9IGVudHJ5LnRlbXBsYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcmVuZGVyU2xvdCh2aWV3Q29udGFpbmVyLCB7XG4gICAgICBzbG90LFxuICAgICAgZGVmYXVsdENvbXBvbmVudCxcbiAgICAgIHByb3BzLFxuICAgICAgb3V0cHV0c1xuICAgIH0pO1xuICB9O1xufVxuIl19
@@ -1,4 +1,4 @@
1
- import { DestroyRef, inject, signal, computed } from "@angular/core";
1
+ import { DestroyRef, inject, signal, computed, runInInjectionContext, } from "@angular/core";
2
2
  import { toObservable } from "@angular/core/rxjs-interop";
3
3
  import { CopilotKitService } from "../core/copilotkit.service";
4
4
  import { DEFAULT_AGENT_ID } from "@copilotkitnext/shared";
@@ -137,6 +137,32 @@ export function getAgent(service, agentId) {
137
137
  const effectiveAgentId = agentId ?? DEFAULT_AGENT_ID;
138
138
  return service.copilotkit.getAgent(effectiveAgentId);
139
139
  }
140
+ /**
141
+ * Convenience wrapper for watchAgent that handles injection context.
142
+ * Useful when you need to call watchAgent outside of a constructor or field initializer.
143
+ *
144
+ * @param injector - The Angular Injector to use for injection context
145
+ * @param config - Optional configuration with agentId
146
+ * @returns Object with agent, messages, and isRunning signals plus observables
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * export class MyComponent {
151
+ * constructor(private injector: Injector) {}
152
+ *
153
+ * switchAgent(newAgentId: string) {
154
+ * // Can call outside of constructor using watchAgentWith
155
+ * const watcher = watchAgentWith(this.injector, { agentId: newAgentId });
156
+ * this.agent = watcher.agent;
157
+ * this.messages = watcher.messages;
158
+ * this.isRunning = watcher.isRunning;
159
+ * }
160
+ * }
161
+ * ```
162
+ */
163
+ export function watchAgentWith(injector, config) {
164
+ return runInInjectionContext(injector, () => watchAgent(config));
165
+ }
140
166
  /**
141
167
  * Subscribes to an agent's events with custom callbacks.
142
168
  * Returns a cleanup function that should be called to unsubscribe.
@@ -183,22 +209,4 @@ export function subscribeToAgent(service, agentId, callbacks) {
183
209
  });
184
210
  return () => subscription.unsubscribe();
185
211
  }
186
- /**
187
- * Registers an agent watcher that automatically cleans up on component destroy.
188
- * This is an alias for watchAgent with a more explicit name.
189
- * Must be called within an injection context.
190
- *
191
- * @param config - Optional configuration with agentId
192
- * @returns Object with agent, messages, and isRunning signals plus observables
193
- *
194
- * @example
195
- * ```typescript
196
- * export class MyComponent {
197
- * agentState = registerAgentWatcher({ agentId: 'my-agent' });
198
- * }
199
- * ```
200
- */
201
- export function registerAgentWatcher(config) {
202
- return watchAgent(config);
203
- }
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvYWdlbnQudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFNL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUE2QjtJQUN0RCxtREFBbUQ7SUFDbkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxFQUFFLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQztJQUU3RCxtRUFBbUU7SUFDbkUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUE0QixTQUFTLENBQUMsQ0FBQztJQUNqRSxNQUFNLElBQUksR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRS9DLDhEQUE4RDtJQUM5RCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQzdCLHNDQUFzQztRQUN0QyxJQUFJLEVBQUUsQ0FBQztRQUNQLE1BQU0sQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDbEIsb0RBQW9EO1FBQ3BELE9BQU8sQ0FBQyxD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VSxRQUFRLENBQ3RCLE9BQTBCLEVBQzFCLE9BQWdCO0lBRWhCLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxJQUFJLGdCQUFnQixDQUFDO0lBQ3JELE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBS0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixPQUEwQixFQUMxQixPQUFnQixFQUNoQixTQUFzQztJQUV0QyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQztJQUNyRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLDhDQUE4QztRQUM5QyxPQUFPLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCO1FBQy9DLGNBQWMsRUFBRSxTQUFTLEVBQUUsY0FBYztRQUN6QyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCO1FBQzdDLGNBQWMsRUFBRSxTQUFTLEVBQUUsY0FBYztRQUN6QyxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVc7S0FDcEMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDMUMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE1BRXBDO0lBQ0MsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIGluamVjdCwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIjtcbmltcG9ydCB7IENvcGlsb3RLaXRTZXJ2aWNlIH0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBBZ2VudFN1YnNjcmlwdGlvbkNhbGxiYWNrcyxcbiAgQWdlbnRXYXRjaFJlc3VsdCxcbn0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC50eXBlc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RBZ2VudCB9IGZyb20gXCJAYWctdWkvY2xpZW50XCI7XG5pbXBvcnQgeyBERUZBVUxUX0FHRU5UX0lEIH0gZnJvbSBcIkBjb3BpbG90a2l0bmV4dC9zaGFyZWRcIjtcblxuLyoqXG4gKiBXYXRjaGVzIGFuIGFnZW50IGFuZCBwcm92aWRlcyByZWFjdGl2ZSBzaWduYWxzIGZvciBpdHMgc3RhdGUuXG4gKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQuXG4gKiBBdXRvbWF0aWNhbGx5IGNsZWFucyB1cCB3aGVuIHRoZSBjb21wb25lbnQvc2VydmljZSBpcyBkZXN0cm95ZWQuXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gd2l0aCBhZ2VudElkXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBhZ2VudCwgbWVzc2FnZXMsIGFuZCBpc1J1bm5pbmcgc2lnbmFscyBwbHVzIG9ic2VydmFibGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIC8vIEF1dG9tYXRpY2FsbHkgdHJhY2tzIGFnZW50IHN0YXRlXG4gKiAgIGFnZW50U3RhdGUgPSB3YXRjaEFnZW50KHsgYWdlbnRJZDogJ215LWFnZW50JyB9KTtcbiAqXG4gKiAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgIGVmZmVjdCgoKSA9PiB7XG4gKiAgICAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMuYWdlbnRTdGF0ZS5tZXNzYWdlcygpO1xuICogICAgICAgY29uc3QgaXNSdW5uaW5nID0gdGhpcy5hZ2VudFN0YXRlLmlzUnVubmluZygpO1xuICogICAgICAgY29uc29sZS5sb2coJ01lc3NhZ2VzOicsIG1lc3NhZ2VzLmxlbmd0aCwgJ1J1bm5pbmc6JywgaXNSdW5uaW5nKTtcbiAqICAgICB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaEFnZW50KGNvbmZpZz86IHsgYWdlbnRJZD86IHN0cmluZyB9KTogQWdlbnRXYXRjaFJlc3VsdCB7XG4gIC8vIFVzZSBpbmplY3QoKSBpbnRlcm5hbGx5IHRvIGdldCByZXF1aXJlZCBzZXJ2aWNlc1xuICBjb25zdCBzZXJ2aWNlID0gaW5qZWN0KENvcGlsb3RLaXRTZXJ2aWNlKTtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgZWZmZWN0aXZlQWdlbnRJZCA9IGNvbmZpZz8uYWdlbnRJZCA/PyBERUZBVUxUX0FHRU5UX0lEO1xuXG4gIC8vIENyZWF0ZSByZWFjdGl2ZSBzaWduYWxzIHdpdGggdGljayBtZWNoYW5pc20gZm9yIHJlbGlhYmxlIHVwZGF0ZXNcbiAgY29uc3QgYWdlbnRTaWduYWwgPSBzaWduYWw8QWJzdHJhY3RBZ2VudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgdGljayA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBjb25zdCBpc1J1bm5pbmdTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIENyZWF0ZSBjb21wdXRlZCBtZXNzYWdlcyBzaWduYWwgdGhhdCByZWFjdHMgdG8gdGljayBjaGFuZ2VzXG4gIGNvbnN0IG1lc3NhZ2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vIEFjY2VzcyB0aWNrIHRvIGVuc3VyZSByZWNvbXB1dGF0aW9uXG4gICAgdGljaygpO1xuICAgIGNvbnN0IGEgPSBhZ2VudFNpZ25hbCgpO1xuICAgIGlmICghYSkgcmV0dXJuIFtdO1xuICAgIC8vIFJldHVybiBhIHNoYWxsb3cgY2xvbmUgdG8gZW5zdXJlIGNoYW5nZSBkZXRlY3Rpb25cbiAgICByZXR1cm4gYS5tZXNzYWdlcy5tYXAoKG0pID0+ICh7IC4uLm0gfSkpO1xuICB9KTtcblxuICAvLyBHZXQgaW5pdGlhbCBhZ2VudFxuICBjb25zdCB1cGRhdGVBZ2VudCA9ICgpID0+IHtcbiAgICBjb25zdCBhZ2VudCA9IHNlcnZpY2UuY29waWxvdGtpdC5nZXRBZ2VudChlZmZlY3RpdmVBZ2VudElkKTtcbiAgICBhZ2VudFNpZ25hbC5zZXQoYWdlbnQpO1xuICAgIHJldHVybiBhZ2VudDtcbiAgfTtcblxuICAvLyBJbml0aWFsIHVwZGF0ZVxuICBsZXQgY3VycmVudEFnZW50ID0gdXBkYXRlQWdlbnQoKTtcblxuICAvLyBTdWJzY3JpYmUgdG8gYWdlbnQgY2hhbmdlc1xuICBsZXQgYWdlbnRTdWJzY3JpcHRpb246IHsgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQgfSB8IHVuZGVmaW5lZDtcblxuICBjb25zdCBzdWJzY3JpYmVUb0FnZW50ID0gKCkgPT4ge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gcHJldmlvdXMgYWdlbnQgaWYgYW55XG4gICAgYWdlbnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAoY3VycmVudEFnZW50KSB7XG4gICAgICBhZ2VudFN1YnNjcmlwdGlvbiA9IGN1cnJlbnRBZ2VudC5zdWJzY3JpYmUoe1xuICAgICAgICBvbk1lc3NhZ2VzQ2hhbmdlZCgpIHtcbiAgICAgICAgICAvLyBJbmNyZW1lbnQgdGljayB0byBmb3JjZSByZWNvbXB1dGF0aW9uIG9mIG1lc3NhZ2VzIGNvbXB1dGVkXG4gICAgICAgICAgdGljay51cGRhdGUoKHYpID0+IHYgKyAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TdGF0ZUNoYW5nZWQoKSB7XG4gICAgICAgICAgLy8gSW5jcmVtZW50IHRpY2sgdG8gZm9yY2UgcmVjb21wdXRhdGlvblxuICAgICAgICAgIHRpY2sudXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUnVuSW5pdGlhbGl6ZWQoKSB7XG4gICAgICAgICAgaXNSdW5uaW5nU2lnbmFsLnNldCh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SdW5GaW5hbGl6ZWQoKSB7XG4gICAgICAgICAgaXNSdW5uaW5nU2lnbmFsLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUnVuRmFpbGVkKCkge1xuICAgICAgICAgIGlzUnVubmluZ1NpZ25hbC5zZXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIEluaXRpYWwgc3Vic2NyaXB0aW9uXG4gIHN1YnNjcmliZVRvQWdlbnQoKTtcblxuICAvLyBTdWJzY3JpYmUgdG8gQ29waWxvdEtpdCBjaGFuZ2VzIHRvIGRldGVjdCBhZ2VudCB1cGRhdGVzXG4gIGNvbnN0IGNvcmVVbnN1YnNjcmliZSA9IHNlcnZpY2UuY29waWxvdGtpdC5zdWJzY3JpYmUoe1xuICAgIG9uUnVudGltZUxvYWRlZCgpIHtcbiAgICAgIC8vIFJlLWNoZWNrIGFnZW50IHdoZW4gcnVudGltZSBsb2Fkc1xuICAgICAgY3VycmVudEFnZW50ID0gdXBkYXRlQWdlbnQoKTtcbiAgICAgIHN1YnNjcmliZVRvQWdlbnQoKTtcbiAgICB9LFxuICAgIG9uUnVudGltZUxvYWRFcnJvcigpIHtcbiAgICAgIC8vIEFsc28gcmUtY2hlY2sgYWdlbnQgb24gcnVudGltZSBsb2FkIGVycm9yIHRvIGVuc3VyZSBjb25zaXN0ZW5jeVxuICAgICAgY3VycmVudEFnZW50ID0gdXBkYXRlQWdlbnQoKTtcbiAgICAgIHN1YnNjcmliZVRvQWdlbnQoKTtcbiAgICB9LFxuICB9KTtcblxuICAvLyBSZWdpc3RlciBjbGVhbnVwXG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgIGFnZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIGNvcmVVbnN1YnNjcmliZSgpOyAvLyBzdWJzY3JpYmUgcmV0dXJucyBhIGZ1bmN0aW9uIGRpcmVjdGx5XG4gIH07XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3kodW5zdWJzY3JpYmUpO1xuXG4gIC8vIENyZWF0ZSBvYnNlcnZhYmxlcyBmcm9tIHNpZ25hbHMgdXNpbmcgdG9PYnNlcnZhYmxlXG4gIGNvbnN0IGFnZW50JCA9IHRvT2JzZXJ2YWJsZShhZ2VudFNpZ25hbCk7XG4gIGNvbnN0IGlzUnVubmluZyQgPSB0b09ic2VydmFibGUoaXNSdW5uaW5nU2lnbmFsKTtcbiAgY29uc3QgbWVzc2FnZXMkID0gdG9PYnNlcnZhYmxlKG1lc3NhZ2VzKTtcblxuICByZXR1cm4ge1xuICAgIGFnZW50OiBhZ2VudFNpZ25hbC5hc1JlYWRvbmx5KCksXG4gICAgbWVzc2FnZXM6IG1lc3NhZ2VzLFxuICAgIGlzUnVubmluZzogaXNSdW5uaW5nU2lnbmFsLmFzUmVhZG9ubHkoKSxcbiAgICBhZ2VudCQsXG4gICAgbWVzc2FnZXMkLFxuICAgIGlzUnVubmluZyQsXG4gICAgdW5zdWJzY3JpYmUsXG4gIH07XG59XG5cbi8qKlxuICogR2V0cyBhbiBhZ2VudCBieSBJRCB3aXRob3V0IHN1YnNjcmliaW5nIHRvIGNoYW5nZXMuXG4gKlxuICogQHBhcmFtIHNlcnZpY2UgLSBUaGUgQ29waWxvdEtpdFNlcnZpY2UgaW5zdGFuY2VcbiAqIEBwYXJhbSBhZ2VudElkIC0gT3B0aW9uYWwgYWdlbnQgSUQgKGRlZmF1bHRzIHRvIERFRkFVTFRfQUdFTlRfSUQpXG4gKiBAcmV0dXJucyBUaGUgYWdlbnQgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQge1xuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvcGlsb3RraXQ6IENvcGlsb3RLaXRTZXJ2aWNlKSB7fVxuICpcbiAqICAgZ2V0Q3VycmVudEFnZW50KCkge1xuICogICAgIHJldHVybiBnZXRBZ2VudCh0aGlzLmNvcGlsb3RraXQsICdteS1hZ2VudCcpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFnZW50KFxuICBzZXJ2aWNlOiBDb3BpbG90S2l0U2VydmljZSxcbiAgYWdlbnRJZD86IHN0cmluZ1xuKTogQWJzdHJhY3RBZ2VudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGVmZmVjdGl2ZUFnZW50SWQgPSBhZ2VudElkID8/IERFRkFVTFRfQUdFTlRfSUQ7XG4gIHJldHVybiBzZXJ2aWNlLmNvcGlsb3RraXQuZ2V0QWdlbnQoZWZmZWN0aXZlQWdlbnRJZCk7XG59XG5cbi8vIFJlLWV4cG9ydCB0aGUgdHlwZSBmb3IgY29udmVuaWVuY2UgKHRoZSBhY3R1YWwgdHlwZSBpcyBpbiBjb3BpbG90a2l0LnR5cGVzKVxuZXhwb3J0IHR5cGUgeyBBZ2VudFdhdGNoUmVzdWx0IH0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC50eXBlc1wiO1xuXG4vKipcbiAqIFN1YnNjcmliZXMgdG8gYW4gYWdlbnQncyBldmVudHMgd2l0aCBjdXN0b20gY2FsbGJhY2tzLlxuICogUmV0dXJucyBhIGNsZWFudXAgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkIHRvIHVuc3Vic2NyaWJlLlxuICpcbiAqIEBwYXJhbSBzZXJ2aWNlIC0gVGhlIENvcGlsb3RLaXRTZXJ2aWNlIGluc3RhbmNlXG4gKiBAcGFyYW0gYWdlbnRJZCAtIE9wdGlvbmFsIGFnZW50IElEIChkZWZhdWx0cyB0byBERUZBVUxUX0FHRU5UX0lEKVxuICogQHBhcmFtIGNhbGxiYWNrcyAtIEV2ZW50IGNhbGxiYWNrc1xuICogQHJldHVybnMgQ2xlYW51cCBmdW5jdGlvbiB0byB1bnN1YnNjcmliZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gKiAgIHByaXZhdGUgdW5zdWJzY3JpYmU/OiAoKSA9PiB2b2lkO1xuICpcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb3BpbG90a2l0OiBDb3BpbG90S2l0U2VydmljZSkge31cbiAqXG4gKiAgIG5nT25Jbml0KCkge1xuICogICAgIHRoaXMudW5zdWJzY3JpYmUgPSBzdWJzY3JpYmVUb0FnZW50KHRoaXMuY29waWxvdGtpdCwgJ215LWFnZW50Jywge1xuICogICAgICAgb25SdW5Jbml0aWFsaXplZDogKCkgPT4gY29uc29sZS5sb2coJ1J1biBzdGFydGVkJyksXG4gKiAgICAgICBvblJ1bkZpbmFsaXplZDogKCkgPT4gY29uc29sZS5sb2coJ1J1biBjb21wbGV0ZWQnKSxcbiAqICAgICAgIG9uUnVuRmFpbGVkOiAoZXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoJ1J1biBmYWlsZWQnLCBlcnJvciksXG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqXG4gKiAgIG5nT25EZXN0cm95KCkge1xuICogICAgIHRoaXMudW5zdWJzY3JpYmU/LigpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnNjcmliZVRvQWdlbnQoXG4gIHNlcnZpY2U6IENvcGlsb3RLaXRTZXJ2aWNlLFxuICBhZ2VudElkPzogc3RyaW5nLFxuICBjYWxsYmFja3M/OiBBZ2VudFN1YnNjcmlwdGlvbkNhbGxiYWNrc1xuKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGVmZmVjdGl2ZUFnZW50SWQgPSBhZ2VudElkID8/IERFRkFVTFRfQUdFTlRfSUQ7XG4gIGNvbnN0IGFnZW50ID0gc2VydmljZS5jb3BpbG90a2l0LmdldEFnZW50KGVmZmVjdGl2ZUFnZW50SWQpO1xuXG4gIGlmICghYWdlbnQpIHtcbiAgICAvLyBSZXR1cm4gbm8tb3AgY2xlYW51cCBpZiBhZ2VudCBkb2Vzbid0IGV4aXN0XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0gYWdlbnQuc3Vic2NyaWJlKHtcbiAgICBvbk1lc3NhZ2VzQ2hhbmdlZDogY2FsbGJhY2tzPy5vbk1lc3NhZ2VzQ2hhbmdlZCxcbiAgICBvblN0YXRlQ2hhbmdlZDogY2FsbGJhY2tzPy5vblN0YXRlQ2hhbmdlZCxcbiAgICBvblJ1bkluaXRpYWxpemVkOiBjYWxsYmFja3M/Lm9uUnVuSW5pdGlhbGl6ZWQsXG4gICAgb25SdW5GaW5hbGl6ZWQ6IGNhbGxiYWNrcz8ub25SdW5GaW5hbGl6ZWQsXG4gICAgb25SdW5GYWlsZWQ6IGNhbGxiYWNrcz8ub25SdW5GYWlsZWQsXG4gIH0pO1xuXG4gIHJldHVybiAoKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYW4gYWdlbnQgd2F0Y2hlciB0aGF0IGF1dG9tYXRpY2FsbHkgY2xlYW5zIHVwIG9uIGNvbXBvbmVudCBkZXN0cm95LlxuICogVGhpcyBpcyBhbiBhbGlhcyBmb3Igd2F0Y2hBZ2VudCB3aXRoIGEgbW9yZSBleHBsaWNpdCBuYW1lLlxuICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGFuIGluamVjdGlvbiBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIHdpdGggYWdlbnRJZFxuICogQHJldHVybnMgT2JqZWN0IHdpdGggYWdlbnQsIG1lc3NhZ2VzLCBhbmQgaXNSdW5uaW5nIHNpZ25hbHMgcGx1cyBvYnNlcnZhYmxlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQge1xuICogICBhZ2VudFN0YXRlID0gcmVnaXN0ZXJBZ2VudFdhdGNoZXIoeyBhZ2VudElkOiAnbXktYWdlbnQnIH0pO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckFnZW50V2F0Y2hlcihjb25maWc/OiB7XG4gIGFnZW50SWQ/OiBzdHJpbmc7XG59KTogQWdlbnRXYXRjaFJlc3VsdCB7XG4gIHJldHVybiB3YXRjaEFnZW50KGNvbmZpZyk7XG59XG4iXX0=
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvYWdlbnQudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFFUixxQkFBcUIsR0FDdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBTS9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBNkI7SUFDdEQsbURBQW1EO0lBQ25ELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sRUFBRSxPQUFPLElBQUksZ0JBQWdCLENBQUM7SUFFN0QsbUVBQW1FO0lBQ25FLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBNEIsU0FBUyxDQUFDLENBQUM7SUFDakUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUUvQyw4REFBOEQ7SUFDOUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUM3QixzQ0FBc0M7UUFDdEMsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLG9EQUFvRDtRQUNw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QUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZXN0cm95UmVmLFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIEluamVjdG9yLFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIjtcbmltcG9ydCB7IENvcGlsb3RLaXRTZXJ2aWNlIH0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBBZ2VudFN1YnNjcmlwdGlvbkNhbGxiYWNrcyxcbiAgQWdlbnRXYXRjaFJlc3VsdCxcbn0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC50eXBlc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RBZ2VudCB9IGZyb20gXCJAYWctdWkvY2xpZW50XCI7XG5pbXBvcnQgeyBERUZBVUxUX0FHRU5UX0lEIH0gZnJvbSBcIkBjb3BpbG90a2l0bmV4dC9zaGFyZWRcIjtcblxuLyoqXG4gKiBXYXRjaGVzIGFuIGFnZW50IGFuZCBwcm92aWRlcyByZWFjdGl2ZSBzaWduYWxzIGZvciBpdHMgc3RhdGUuXG4gKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQuXG4gKiBBdXRvbWF0aWNhbGx5IGNsZWFucyB1cCB3aGVuIHRoZSBjb21wb25lbnQvc2VydmljZSBpcyBkZXN0cm95ZWQuXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gd2l0aCBhZ2VudElkXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBhZ2VudCwgbWVzc2FnZXMsIGFuZCBpc1J1bm5pbmcgc2lnbmFscyBwbHVzIG9ic2VydmFibGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIC8vIEF1dG9tYXRpY2FsbHkgdHJhY2tzIGFnZW50IHN0YXRlXG4gKiAgIGFnZW50U3RhdGUgPSB3YXRjaEFnZW50KHsgYWdlbnRJZDogJ215LWFnZW50JyB9KTtcbiAqXG4gKiAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgIGVmZmVjdCgoKSA9PiB7XG4gKiAgICAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMuYWdlbnRTdGF0ZS5tZXNzYWdlcygpO1xuICogICAgICAgY29uc3QgaXNSdW5uaW5nID0gdGhpcy5hZ2VudFN0YXRlLmlzUnVubmluZygpO1xuICogICAgICAgY29uc29sZS5sb2coJ01lc3NhZ2VzOicsIG1lc3NhZ2VzLmxlbmd0aCwgJ1J1bm5pbmc6JywgaXNSdW5uaW5nKTtcbiAqICAgICB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaEFnZW50KGNvbmZpZz86IHsgYWdlbnRJZD86IHN0cmluZyB9KTogQWdlbnRXYXRjaFJlc3VsdCB7XG4gIC8vIFVzZSBpbmplY3QoKSBpbnRlcm5hbGx5IHRvIGdldCByZXF1aXJlZCBzZXJ2aWNlc1xuICBjb25zdCBzZXJ2aWNlID0gaW5qZWN0KENvcGlsb3RLaXRTZXJ2aWNlKTtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgZWZmZWN0aXZlQWdlbnRJZCA9IGNvbmZpZz8uYWdlbnRJZCA/PyBERUZBVUxUX0FHRU5UX0lEO1xuXG4gIC8vIENyZWF0ZSByZWFjdGl2ZSBzaWduYWxzIHdpdGggdGljayBtZWNoYW5pc20gZm9yIHJlbGlhYmxlIHVwZGF0ZXNcbiAgY29uc3QgYWdlbnRTaWduYWwgPSBzaWduYWw8QWJzdHJhY3RBZ2VudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgdGljayA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBjb25zdCBpc1J1bm5pbmdTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIENyZWF0ZSBjb21wdXRlZCBtZXNzYWdlcyBzaWduYWwgdGhhdCByZWFjdHMgdG8gdGljayBjaGFuZ2VzXG4gIGNvbnN0IG1lc3NhZ2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vIEFjY2VzcyB0aWNrIHRvIGVuc3VyZSByZWNvbXB1dGF0aW9uXG4gICAgdGljaygpO1xuICAgIGNvbnN0IGEgPSBhZ2VudFNpZ25hbCgpO1xuICAgIGlmICghYSkgcmV0dXJuIFtdO1xuICAgIC8vIFJldHVybiBhIHNoYWxsb3cgY2xvbmUgdG8gZW5zdXJlIGNoYW5nZSBkZXRlY3Rpb25cbiAgICByZXR1cm4gYS5tZXNzYWdlcy5tYXAoKG0pID0+ICh7IC4uLm0gfSkpO1xuICB9KTtcblxuICAvLyBHZXQgaW5pdGlhbCBhZ2VudFxuICBjb25zdCB1cGRhdGVBZ2VudCA9ICgpID0+IHtcbiAgICBjb25zdCBhZ2VudCA9IHNlcnZpY2UuY29waWxvdGtpdC5nZXRBZ2VudChlZmZlY3RpdmVBZ2VudElkKTtcbiAgICBhZ2VudFNpZ25hbC5zZXQoYWdlbnQpO1xuICAgIHJldHVybiBhZ2VudDtcbiAgfTtcblxuICAvLyBJbml0aWFsIHVwZGF0ZVxuICBsZXQgY3VycmVudEFnZW50ID0gdXBkYXRlQWdlbnQoKTtcblxuICAvLyBTdWJzY3JpYmUgdG8gYWdlbnQgY2hhbmdlc1xuICBsZXQgYWdlbnRTdWJzY3JpcHRpb246IHsgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQgfSB8IHVuZGVmaW5lZDtcblxuICBjb25zdCBzdWJzY3JpYmVUb0FnZW50ID0gKCkgPT4ge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gcHJldmlvdXMgYWdlbnQgaWYgYW55XG4gICAgYWdlbnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAoY3VycmVudEFnZW50KSB7XG4gICAgICBhZ2VudFN1YnNjcmlwdGlvbiA9IGN1cnJlbnRBZ2VudC5zdWJzY3JpYmUoe1xuICAgICAgICBvbk1lc3NhZ2VzQ2hhbmdlZCgpIHtcbiAgICAgICAgICAvLyBJbmNyZW1lbnQgdGljayB0byBmb3JjZSByZWNvbXB1dGF0aW9uIG9mIG1lc3NhZ2VzIGNvbXB1dGVkXG4gICAgICAgICAgdGljay51cGRhdGUoKHYpID0+IHYgKyAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TdGF0ZUNoYW5nZWQoKSB7XG4gICAgICAgICAgLy8gSW5jcmVtZW50IHRpY2sgdG8gZm9yY2UgcmVjb21wdXRhdGlvblxuICAgICAgICAgIHRpY2sudXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUnVuSW5pdGlhbGl6ZWQoKSB7XG4gICAgICAgICAgaXNSdW5uaW5nU2lnbmFsLnNldCh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SdW5GaW5hbGl6ZWQoKSB7XG4gICAgICAgICAgaXNSdW5uaW5nU2lnbmFsLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUnVuRmFpbGVkKCkge1xuICAgICAgICAgIGlzUnVubmluZ1NpZ25hbC5zZXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIEluaXRpYWwgc3Vic2NyaXB0aW9uXG4gIHN1YnNjcmliZVRvQWdlbnQoKTtcblxuICAvLyBTdWJzY3JpYmUgdG8gQ29waWxvdEtpdCBjaGFuZ2VzIHRvIGRldGVjdCBhZ2VudCB1cGRhdGVzXG4gIGNvbnN0IGNvcmVVbnN1YnNjcmliZSA9IHNlcnZpY2UuY29waWxvdGtpdC5zdWJzY3JpYmUoe1xuICAgIG9uUnVudGltZUxvYWRlZCgpIHtcbiAgICAgIC8vIFJlLWNoZWNrIGFnZW50IHdoZW4gcnVudGltZSBsb2Fkc1xuICAgICAgY3VycmVudEFnZW50ID0gdXBkYXRlQWdlbnQoKTtcbiAgICAgIHN1YnNjcmliZVRvQWdlbnQoKTtcbiAgICB9LFxuICAgIG9uUnVudGltZUxvYWRFcnJvcigpIHtcbiAgICAgIC8vIEFsc28gcmUtY2hlY2sgYWdlbnQgb24gcnVudGltZSBsb2FkIGVycm9yIHRvIGVuc3VyZSBjb25zaXN0ZW5jeVxuICAgICAgY3VycmVudEFnZW50ID0gdXBkYXRlQWdlbnQoKTtcbiAgICAgIHN1YnNjcmliZVRvQWdlbnQoKTtcbiAgICB9LFxuICB9KTtcblxuICAvLyBSZWdpc3RlciBjbGVhbnVwXG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgIGFnZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIGNvcmVVbnN1YnNjcmliZSgpOyAvLyBzdWJzY3JpYmUgcmV0dXJucyBhIGZ1bmN0aW9uIGRpcmVjdGx5XG4gIH07XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3kodW5zdWJzY3JpYmUpO1xuXG4gIC8vIENyZWF0ZSBvYnNlcnZhYmxlcyBmcm9tIHNpZ25hbHMgdXNpbmcgdG9PYnNlcnZhYmxlXG4gIGNvbnN0IGFnZW50JCA9IHRvT2JzZXJ2YWJsZShhZ2VudFNpZ25hbCk7XG4gIGNvbnN0IGlzUnVubmluZyQgPSB0b09ic2VydmFibGUoaXNSdW5uaW5nU2lnbmFsKTtcbiAgY29uc3QgbWVzc2FnZXMkID0gdG9PYnNlcnZhYmxlKG1lc3NhZ2VzKTtcblxuICByZXR1cm4ge1xuICAgIGFnZW50OiBhZ2VudFNpZ25hbC5hc1JlYWRvbmx5KCksXG4gICAgbWVzc2FnZXM6IG1lc3NhZ2VzLFxuICAgIGlzUnVubmluZzogaXNSdW5uaW5nU2lnbmFsLmFzUmVhZG9ubHkoKSxcbiAgICBhZ2VudCQsXG4gICAgbWVzc2FnZXMkLFxuICAgIGlzUnVubmluZyQsXG4gICAgdW5zdWJzY3JpYmUsXG4gIH07XG59XG5cbi8qKlxuICogR2V0cyBhbiBhZ2VudCBieSBJRCB3aXRob3V0IHN1YnNjcmliaW5nIHRvIGNoYW5nZXMuXG4gKlxuICogQHBhcmFtIHNlcnZpY2UgLSBUaGUgQ29waWxvdEtpdFNlcnZpY2UgaW5zdGFuY2VcbiAqIEBwYXJhbSBhZ2VudElkIC0gT3B0aW9uYWwgYWdlbnQgSUQgKGRlZmF1bHRzIHRvIERFRkFVTFRfQUdFTlRfSUQpXG4gKiBAcmV0dXJucyBUaGUgYWdlbnQgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQge1xuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvcGlsb3RraXQ6IENvcGlsb3RLaXRTZXJ2aWNlKSB7fVxuICpcbiAqICAgZ2V0Q3VycmVudEFnZW50KCkge1xuICogICAgIHJldHVybiBnZXRBZ2VudCh0aGlzLmNvcGlsb3RraXQsICdteS1hZ2VudCcpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFnZW50KFxuICBzZXJ2aWNlOiBDb3BpbG90S2l0U2VydmljZSxcbiAgYWdlbnRJZD86IHN0cmluZ1xuKTogQWJzdHJhY3RBZ2VudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGVmZmVjdGl2ZUFnZW50SWQgPSBhZ2VudElkID8/IERFRkFVTFRfQUdFTlRfSUQ7XG4gIHJldHVybiBzZXJ2aWNlLmNvcGlsb3RraXQuZ2V0QWdlbnQoZWZmZWN0aXZlQWdlbnRJZCk7XG59XG5cbi8vIFJlLWV4cG9ydCB0aGUgdHlwZSBmb3IgY29udmVuaWVuY2UgKHRoZSBhY3R1YWwgdHlwZSBpcyBpbiBjb3BpbG90a2l0LnR5cGVzKVxuZXhwb3J0IHR5cGUgeyBBZ2VudFdhdGNoUmVzdWx0IH0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC50eXBlc1wiO1xuXG4vKipcbiAqIENvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHdhdGNoQWdlbnQgdGhhdCBoYW5kbGVzIGluamVjdGlvbiBjb250ZXh0LlxuICogVXNlZnVsIHdoZW4geW91IG5lZWQgdG8gY2FsbCB3YXRjaEFnZW50IG91dHNpZGUgb2YgYSBjb25zdHJ1Y3RvciBvciBmaWVsZCBpbml0aWFsaXplci5cbiAqXG4gKiBAcGFyYW0gaW5qZWN0b3IgLSBUaGUgQW5ndWxhciBJbmplY3RvciB0byB1c2UgZm9yIGluamVjdGlvbiBjb250ZXh0XG4gKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiB3aXRoIGFnZW50SWRcbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGFnZW50LCBtZXNzYWdlcywgYW5kIGlzUnVubmluZyBzaWduYWxzIHBsdXMgb2JzZXJ2YWJsZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG4gKlxuICogICBzd2l0Y2hBZ2VudChuZXdBZ2VudElkOiBzdHJpbmcpIHtcbiAqICAgICAvLyBDYW4gY2FsbCBvdXRzaWRlIG9mIGNvbnN0cnVjdG9yIHVzaW5nIHdhdGNoQWdlbnRXaXRoXG4gKiAgICAgY29uc3Qgd2F0Y2hlciA9IHdhdGNoQWdlbnRXaXRoKHRoaXMuaW5qZWN0b3IsIHsgYWdlbnRJZDogbmV3QWdlbnRJZCB9KTtcbiAqICAgICB0aGlzLmFnZW50ID0gd2F0Y2hlci5hZ2VudDtcbiAqICAgICB0aGlzLm1lc3NhZ2VzID0gd2F0Y2hlci5tZXNzYWdlcztcbiAqICAgICB0aGlzLmlzUnVubmluZyA9IHdhdGNoZXIuaXNSdW5uaW5nO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoQWdlbnRXaXRoKFxuICBpbmplY3RvcjogSW5qZWN0b3IsXG4gIGNvbmZpZz86IHsgYWdlbnRJZD86IHN0cmluZyB9XG4pOiBBZ2VudFdhdGNoUmVzdWx0IHtcbiAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4gd2F0Y2hBZ2VudChjb25maWcpKTtcbn1cblxuLyoqXG4gKiBTdWJzY3JpYmVzIHRvIGFuIGFnZW50J3MgZXZlbnRzIHdpdGggY3VzdG9tIGNhbGxiYWNrcy5cbiAqIFJldHVybnMgYSBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB0byB1bnN1YnNjcmliZS5cbiAqXG4gKiBAcGFyYW0gc2VydmljZSAtIFRoZSBDb3BpbG90S2l0U2VydmljZSBpbnN0YW5jZVxuICogQHBhcmFtIGFnZW50SWQgLSBPcHRpb25hbCBhZ2VudCBJRCAoZGVmYXVsdHMgdG8gREVGQVVMVF9BR0VOVF9JRClcbiAqIEBwYXJhbSBjYWxsYmFja3MgLSBFdmVudCBjYWxsYmFja3NcbiAqIEByZXR1cm5zIENsZWFudXAgZnVuY3Rpb24gdG8gdW5zdWJzY3JpYmVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICogICBwcml2YXRlIHVuc3Vic2NyaWJlPzogKCkgPT4gdm9pZDtcbiAqXG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29waWxvdGtpdDogQ29waWxvdEtpdFNlcnZpY2UpIHt9XG4gKlxuICogICBuZ09uSW5pdCgpIHtcbiAqICAgICB0aGlzLnVuc3Vic2NyaWJlID0gc3Vic2NyaWJlVG9BZ2VudCh0aGlzLmNvcGlsb3RraXQsICdteS1hZ2VudCcsIHtcbiAqICAgICAgIG9uUnVuSW5pdGlhbGl6ZWQ6ICgpID0+IGNvbnNvbGUubG9nKCdSdW4gc3RhcnRlZCcpLFxuICogICAgICAgb25SdW5GaW5hbGl6ZWQ6ICgpID0+IGNvbnNvbGUubG9nKCdSdW4gY29tcGxldGVkJyksXG4gKiAgICAgICBvblJ1bkZhaWxlZDogKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKCdSdW4gZmFpbGVkJywgZXJyb3IpLFxuICogICAgIH0pO1xuICogICB9XG4gKlxuICogICBuZ09uRGVzdHJveSgpIHtcbiAqICAgICB0aGlzLnVuc3Vic2NyaWJlPy4oKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmVUb0FnZW50KFxuICBzZXJ2aWNlOiBDb3BpbG90S2l0U2VydmljZSxcbiAgYWdlbnRJZD86IHN0cmluZyxcbiAgY2FsbGJhY2tzPzogQWdlbnRTdWJzY3JpcHRpb25DYWxsYmFja3Ncbik6ICgpID0+IHZvaWQge1xuICBjb25zdCBlZmZlY3RpdmVBZ2VudElkID0gYWdlbnRJZCA/PyBERUZBVUxUX0FHRU5UX0lEO1xuICBjb25zdCBhZ2VudCA9IHNlcnZpY2UuY29waWxvdGtpdC5nZXRBZ2VudChlZmZlY3RpdmVBZ2VudElkKTtcblxuICBpZiAoIWFnZW50KSB7XG4gICAgLy8gUmV0dXJuIG5vLW9wIGNsZWFudXAgaWYgYWdlbnQgZG9lc24ndCBleGlzdFxuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfVxuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGFnZW50LnN1YnNjcmliZSh7XG4gICAgb25NZXNzYWdlc0NoYW5nZWQ6IGNhbGxiYWNrcz8ub25NZXNzYWdlc0NoYW5nZWQsXG4gICAgb25TdGF0ZUNoYW5nZWQ6IGNhbGxiYWNrcz8ub25TdGF0ZUNoYW5nZWQsXG4gICAgb25SdW5Jbml0aWFsaXplZDogY2FsbGJhY2tzPy5vblJ1bkluaXRpYWxpemVkLFxuICAgIG9uUnVuRmluYWxpemVkOiBjYWxsYmFja3M/Lm9uUnVuRmluYWxpemVkLFxuICAgIG9uUnVuRmFpbGVkOiBjYWxsYmFja3M/Lm9uUnVuRmFpbGVkLFxuICB9KTtcblxuICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, signal, computed, effect, untracked, Inject, Injectable, Optional, inject, DestroyRef, ChangeDetectionStrategy, Component, ElementRef, ViewContainerRef, HostListener, Input, Directive, isDevMode, EventEmitter, Output, TemplateRef, ViewChild, ViewEncapsulation, ContentChild, ChangeDetectorRef, PLATFORM_ID, forwardRef, runInInjectionContext, SkipSelf } from '@angular/core';
2
+ import { InjectionToken, signal, computed, effect, untracked, Inject, Injectable, Optional, inject, DestroyRef, runInInjectionContext, ChangeDetectionStrategy, Component, ElementRef, ViewContainerRef, HostListener, Input, Directive, isDevMode, EventEmitter, Output, TemplateRef, ViewChild, ViewEncapsulation, ContentChild, ChangeDetectorRef, PLATFORM_ID, forwardRef, SkipSelf } from '@angular/core';
3
3
  import { toObservable } from '@angular/core/rxjs-interop';
4
4
  import { CopilotKitCore, ToolCallStatus, completePartialMarkdown } from '@copilotkitnext/core';
5
5
  export { ToolCallStatus } from '@copilotkitnext/core';
@@ -259,16 +259,7 @@ class CopilotKitService {
259
259
  });
260
260
  }
261
261
  });
262
- // Warn if renderToolCalls changes
263
- effect(() => {
264
- const current = this._renderToolCalls();
265
- if (current !== this.initialRenderToolCalls &&
266
- this.initialRenderToolCalls.length > 0) {
267
- untracked(() => {
268
- console.error("renderToolCalls must be a stable object. To add/remove tools dynamically, use dynamic tool registration.");
269
- });
270
- }
271
- });
262
+ // Previously warned if renderToolCalls reference changed; removed per UX feedback
272
263
  }
273
264
  /**
274
265
  * Setup effects to sync runtime configuration with CopilotKitCore
@@ -366,9 +357,6 @@ class CopilotKitService {
366
357
  * Update render tool calls (warns if object reference changes)
367
358
  */
368
359
  setRenderToolCalls(renderToolCalls) {
369
- if (renderToolCalls !== this.initialRenderToolCalls) {
370
- console.error("renderToolCalls must be a stable object. To add/remove tools dynamically, use dynamic tool registration.");
371
- }
372
360
  this._renderToolCalls.set(renderToolCalls);
373
361
  }
374
362
  /**
@@ -1203,6 +1191,32 @@ function getAgent(service, agentId) {
1203
1191
  const effectiveAgentId = agentId ?? DEFAULT_AGENT_ID;
1204
1192
  return service.copilotkit.getAgent(effectiveAgentId);
1205
1193
  }
1194
+ /**
1195
+ * Convenience wrapper for watchAgent that handles injection context.
1196
+ * Useful when you need to call watchAgent outside of a constructor or field initializer.
1197
+ *
1198
+ * @param injector - The Angular Injector to use for injection context
1199
+ * @param config - Optional configuration with agentId
1200
+ * @returns Object with agent, messages, and isRunning signals plus observables
1201
+ *
1202
+ * @example
1203
+ * ```typescript
1204
+ * export class MyComponent {
1205
+ * constructor(private injector: Injector) {}
1206
+ *
1207
+ * switchAgent(newAgentId: string) {
1208
+ * // Can call outside of constructor using watchAgentWith
1209
+ * const watcher = watchAgentWith(this.injector, { agentId: newAgentId });
1210
+ * this.agent = watcher.agent;
1211
+ * this.messages = watcher.messages;
1212
+ * this.isRunning = watcher.isRunning;
1213
+ * }
1214
+ * }
1215
+ * ```
1216
+ */
1217
+ function watchAgentWith(injector, config) {
1218
+ return runInInjectionContext(injector, () => watchAgent(config));
1219
+ }
1206
1220
  /**
1207
1221
  * Subscribes to an agent's events with custom callbacks.
1208
1222
  * Returns a cleanup function that should be called to unsubscribe.
@@ -1249,24 +1263,6 @@ function subscribeToAgent(service, agentId, callbacks) {
1249
1263
  });
1250
1264
  return () => subscription.unsubscribe();
1251
1265
  }
1252
- /**
1253
- * Registers an agent watcher that automatically cleans up on component destroy.
1254
- * This is an alias for watchAgent with a more explicit name.
1255
- * Must be called within an injection context.
1256
- *
1257
- * @param config - Optional configuration with agentId
1258
- * @returns Object with agent, messages, and isRunning signals plus observables
1259
- *
1260
- * @example
1261
- * ```typescript
1262
- * export class MyComponent {
1263
- * agentState = registerAgentWatcher({ agentId: 'my-agent' });
1264
- * }
1265
- * ```
1266
- */
1267
- function registerAgentWatcher(config) {
1268
- return watchAgent(config);
1269
- }
1270
1266
 
1271
1267
  /**
1272
1268
  * Registers a human-in-the-loop tool that requires user interaction.
@@ -3039,20 +3035,17 @@ class CopilotKitToolRenderComponent {
3039
3035
  this.container.clear();
3040
3036
  // Create the component
3041
3037
  this.componentRef = this.container.createComponent(componentClass);
3042
- // Set inputs on the component using setInput
3043
- // Try setting a single 'props' input first
3044
- try {
3038
+ // Determine declared inputs to avoid NG0303 logs
3039
+ const cmpDef = componentClass.ɵcmp;
3040
+ const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
3041
+ if (declaredInputs.has('props')) {
3045
3042
  this.componentRef.setInput('props', props);
3046
3043
  }
3047
- catch (e) {
3048
- // If props input doesn't exist, try setting individual inputs
3044
+ else {
3049
3045
  for (const [key, value] of Object.entries(props)) {
3050
- try {
3046
+ if (declaredInputs.has(key)) {
3051
3047
  this.componentRef.setInput(key, value);
3052
3048
  }
3053
- catch (inputError) {
3054
- // Input might not exist on the component, skip it
3055
- }
3056
3049
  }
3057
3050
  }
3058
3051
  // Trigger change detection
@@ -3192,10 +3185,19 @@ function createComponent(viewContainer, component, props, injector, outputs) {
3192
3185
  injector
3193
3186
  });
3194
3187
  if (props) {
3195
- // Apply props using setInput
3196
- for (const key in props) {
3197
- const value = props[key];
3198
- componentRef.setInput(key, value);
3188
+ // Apply props using setInput, but only for declared inputs
3189
+ const cmpDef = component.ɵcmp;
3190
+ const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
3191
+ if (declaredInputs.has('props')) {
3192
+ componentRef.setInput('props', props);
3193
+ }
3194
+ else {
3195
+ for (const key in props) {
3196
+ if (declaredInputs.has(key)) {
3197
+ const value = props[key];
3198
+ componentRef.setInput(key, value);
3199
+ }
3200
+ }
3199
3201
  }
3200
3202
  }
3201
3203
  if (outputs) {
@@ -3430,11 +3432,21 @@ class CopilotSlotComponent {
3430
3432
  return;
3431
3433
  }
3432
3434
  const props = this.context;
3433
- // Update props using setInput
3435
+ // Update props using setInput, only for declared inputs
3434
3436
  if (props) {
3435
- for (const key in props) {
3436
- const value = props[key];
3437
- this.componentRef.setInput(key, value);
3437
+ const ctor = this.componentRef.instance.constructor;
3438
+ const cmpDef = ctor?.ɵcmp;
3439
+ const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
3440
+ if (declaredInputs.has('props')) {
3441
+ this.componentRef.setInput('props', props);
3442
+ }
3443
+ else {
3444
+ for (const key in props) {
3445
+ if (declaredInputs.has(key)) {
3446
+ const value = props[key];
3447
+ this.componentRef.setInput(key, value);
3448
+ }
3449
+ }
3438
3450
  }
3439
3451
  }
3440
3452
  // Trigger change detection
@@ -5940,13 +5952,19 @@ class CopilotChatToolCallsViewComponent {
5940
5952
  // Create the component
5941
5953
  const componentRef = this.container.createComponent(componentClass);
5942
5954
  this.componentRefs.set(toolCallId, componentRef);
5943
- // Set inputs on the component
5944
- for (const [key, value] of Object.entries(props)) {
5945
- try {
5946
- componentRef.setInput(key, value);
5947
- }
5948
- catch (e) {
5949
- // Input might not exist on the component, which is fine
5955
+ // Determine declared inputs to avoid Angular NG0303 console errors
5956
+ const cmpDef = componentClass.ɵcmp;
5957
+ const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
5958
+ // Prefer a single 'props' input if declared
5959
+ if (declaredInputs.has('props')) {
5960
+ componentRef.setInput('props', props);
5961
+ }
5962
+ else {
5963
+ // Otherwise, set only inputs that the component actually declares
5964
+ for (const [key, value] of Object.entries(props)) {
5965
+ if (declaredInputs.has(key)) {
5966
+ componentRef.setInput(key, value);
5967
+ }
5950
5968
  }
5951
5969
  }
5952
5970
  // Trigger change detection
@@ -6790,6 +6808,12 @@ class CopilotChatAssistantMessageComponent {
6790
6808
  toolbarContext = computed(() => ({
6791
6809
  children: null // Will be populated by the toolbar content
6792
6810
  }));
6811
+ // Return true if assistant message has non-empty text content
6812
+ hasMessageContent() {
6813
+ const raw = (this.message?.content ?? '');
6814
+ const content = typeof raw === 'string' ? raw : String(raw ?? '');
6815
+ return content.trim().length > 0;
6816
+ }
6793
6817
  toolCallsViewContext = computed(() => ({
6794
6818
  message: this.message,
6795
6819
  messages: this.messages,
@@ -6847,8 +6871,8 @@ class CopilotChatAssistantMessageComponent {
6847
6871
  </copilot-chat-tool-calls-view>
6848
6872
  }
6849
6873
 
6850
- <!-- Toolbar -->
6851
- <ng-container *ngIf="toolbarVisible">
6874
+ <!-- Toolbar: show only when there is assistant text content -->
6875
+ <ng-container *ngIf="toolbarVisible && hasMessageContent()">
6852
6876
  @if (toolbarTemplate || toolbarComponent) {
6853
6877
  <copilot-slot
6854
6878
  [slot]="toolbarTemplate || toolbarComponent"
@@ -6975,8 +6999,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
6975
6999
  </copilot-chat-tool-calls-view>
6976
7000
  }
6977
7001
 
6978
- <!-- Toolbar -->
6979
- <ng-container *ngIf="toolbarVisible">
7002
+ <!-- Toolbar: show only when there is assistant text content -->
7003
+ <ng-container *ngIf="toolbarVisible && hasMessageContent()">
6980
7004
  @if (toolbarTemplate || toolbarComponent) {
6981
7005
  <copilot-slot
6982
7006
  [slot]="toolbarTemplate || toolbarComponent"
@@ -9116,19 +9140,25 @@ class CopilotChatComponent {
9116
9140
  a.threadId = this.threadId || this.generatedThreadId;
9117
9141
  if (!this.hasConnectedOnce) {
9118
9142
  this.hasConnectedOnce = true;
9119
- this.connectToAgent(a);
9143
+ if ('isCopilotKitAgent' in a) {
9144
+ this.connectToAgent(a);
9145
+ }
9146
+ else {
9147
+ // Not a CopilotKit agent: ensure UI not showing loading cursor
9148
+ this.showCursor.set(false);
9149
+ this.cdr.markForCheck();
9150
+ }
9120
9151
  }
9121
9152
  }, { allowSignalWrites: true });
9122
9153
  }
9123
- // Signals from watchAgent - using direct references instead of assignment
9124
- agent = signal(undefined).asReadonly();
9125
- messages = signal([]).asReadonly();
9126
- isRunning = signal(false).asReadonly();
9154
+ // Signals from watchAgent - destructured from watcher
9155
+ agent;
9156
+ messages;
9157
+ isRunning;
9127
9158
  showCursor = signal(false);
9128
9159
  generatedThreadId = randomUUID();
9129
- agentWatcher;
9160
+ watcher;
9130
9161
  hasConnectedOnce = false;
9131
- lastAgentId;
9132
9162
  ngOnInit() {
9133
9163
  this.setupChatHandlers();
9134
9164
  }
@@ -9215,24 +9245,18 @@ class CopilotChatComponent {
9215
9245
  // Keep input state if needed
9216
9246
  });
9217
9247
  }
9218
- ngOnDestroy() {
9219
- if (this.agentWatcher?.unsubscribe) {
9220
- this.agentWatcher.unsubscribe();
9221
- }
9222
- }
9223
9248
  createWatcher(desiredAgentId) {
9224
- // Tear down previous watcher if it exists
9225
- if (this.agentWatcher?.unsubscribe) {
9226
- this.agentWatcher.unsubscribe();
9227
- this.agentWatcher = undefined;
9228
- }
9229
- // Setup watcher for desired agent - ensure injection context
9230
- this.agentWatcher = runInInjectionContext(this.injector, () => watchAgent({ agentId: desiredAgentId }));
9231
- this.agent = this.agentWatcher.agent;
9232
- this.messages = this.agentWatcher.messages;
9233
- this.isRunning = this.agentWatcher.isRunning;
9249
+ // Tear down previous watcher if it exists to prevent parallel subscriptions
9250
+ this.watcher?.unsubscribe();
9251
+ // Create new watcher using the ergonomic helper
9252
+ const w = watchAgentWith(this.injector, { agentId: desiredAgentId });
9253
+ // Destructure signals directly to class fields
9254
+ this.agent = w.agent;
9255
+ this.messages = w.messages;
9256
+ this.isRunning = w.isRunning;
9257
+ this.watcher = w;
9258
+ // Reset connection state for new agent
9234
9259
  this.hasConnectedOnce = false;
9235
- this.lastAgentId = desiredAgentId;
9236
9260
  }
9237
9261
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatComponent, deps: [{ token: CopilotChatConfigurationService, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
9238
9262
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CopilotChatComponent, isStandalone: true, selector: "copilot-chat", inputs: { agentId: "agentId", threadId: "threadId" }, providers: [
@@ -9297,5 +9321,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
9297
9321
  * Generated bundle index. Do not edit.
9298
9322
  */
9299
9323
 
9300
- export { AudioRecorderError, COPILOTKIT_AGENTS, COPILOTKIT_FRONTEND_TOOLS, COPILOTKIT_HEADERS, COPILOTKIT_HUMAN_IN_THE_LOOP, COPILOTKIT_PROPERTIES, COPILOTKIT_RENDER_TOOL_CALLS, COPILOTKIT_RUNTIME_URL, COPILOT_CHAT_DEFAULT_LABELS, COPILOT_CHAT_INITIAL_CONFIG, CopilotChatAddFileButtonComponent, CopilotChatAssistantMessageComponent, CopilotChatAssistantMessageCopyButtonComponent, CopilotChatAssistantMessageReadAloudButtonComponent, CopilotChatAssistantMessageRegenerateButtonComponent, CopilotChatAssistantMessageRendererComponent, CopilotChatAssistantMessageThumbsDownButtonComponent, CopilotChatAssistantMessageThumbsUpButtonComponent, CopilotChatAssistantMessageToolbarButtonComponent, CopilotChatAssistantMessageToolbarComponent, CopilotChatAudioRecorderComponent, CopilotChatCancelTranscribeButtonComponent, CopilotChatComponent, CopilotChatConfigurationService, CopilotChatFinishTranscribeButtonComponent, CopilotChatInputComponent, CopilotChatInputDefaults, CopilotChatMessageViewComponent, CopilotChatMessageViewCursorComponent, CopilotChatSendButtonComponent, CopilotChatStartTranscribeButtonComponent, CopilotChatTextareaComponent, CopilotChatToolCallsViewComponent, CopilotChatToolbarButtonComponent, CopilotChatToolbarComponent, CopilotChatToolsMenuComponent, CopilotChatUserMessageBranchNavigationComponent, CopilotChatUserMessageComponent, CopilotChatUserMessageCopyButtonComponent, CopilotChatUserMessageEditButtonComponent, CopilotChatUserMessageRendererComponent, CopilotChatUserMessageToolbarButtonComponent, CopilotChatUserMessageToolbarComponent, CopilotChatViewComponent, CopilotChatViewDisclaimerComponent, CopilotChatViewFeatherComponent, CopilotChatViewInputContainerComponent, CopilotChatViewScrollToBottomButtonComponent, CopilotChatViewScrollViewComponent, CopilotKitAgentContextDirective, CopilotKitAgentDirective, CopilotKitChatConfigDirective, CopilotKitConfigDirective, CopilotKitFrontendToolDirective, CopilotKitHumanInTheLoopDirective, CopilotKitHumanInTheLoopRespondDirective, CopilotKitService, CopilotKitToolRenderComponent, CopilotTooltipDirective, ResizeObserverService, ScrollPositionService, StickToBottomDirective, addAgentContext, addFrontendTool, addHumanInTheLoop, createChatConfigController, createDynamicFrontendTool, createHumanInTheLoop, createReactiveContext, enhancePropsForHumanInTheLoop, getAgent, getChatInputValue, getChatLabels, injectCopilotKit, provideCopilotChatConfiguration, provideCopilotKit, registerAgentContext, registerAgentWatcher, registerChatConfig, registerFrontendTool, registerHumanInTheLoop, removeFrontendTool, setChatInputValue, setChatLabels, subscribeToAgent, watchAgent, watchChatConfig };
9324
+ export { AudioRecorderError, COPILOTKIT_AGENTS, COPILOTKIT_FRONTEND_TOOLS, COPILOTKIT_HEADERS, COPILOTKIT_HUMAN_IN_THE_LOOP, COPILOTKIT_PROPERTIES, COPILOTKIT_RENDER_TOOL_CALLS, COPILOTKIT_RUNTIME_URL, COPILOT_CHAT_DEFAULT_LABELS, COPILOT_CHAT_INITIAL_CONFIG, CopilotChatAddFileButtonComponent, CopilotChatAssistantMessageComponent, CopilotChatAssistantMessageCopyButtonComponent, CopilotChatAssistantMessageReadAloudButtonComponent, CopilotChatAssistantMessageRegenerateButtonComponent, CopilotChatAssistantMessageRendererComponent, CopilotChatAssistantMessageThumbsDownButtonComponent, CopilotChatAssistantMessageThumbsUpButtonComponent, CopilotChatAssistantMessageToolbarButtonComponent, CopilotChatAssistantMessageToolbarComponent, CopilotChatAudioRecorderComponent, CopilotChatCancelTranscribeButtonComponent, CopilotChatComponent, CopilotChatConfigurationService, CopilotChatFinishTranscribeButtonComponent, CopilotChatInputComponent, CopilotChatInputDefaults, CopilotChatMessageViewComponent, CopilotChatMessageViewCursorComponent, CopilotChatSendButtonComponent, CopilotChatStartTranscribeButtonComponent, CopilotChatTextareaComponent, CopilotChatToolCallsViewComponent, CopilotChatToolbarButtonComponent, CopilotChatToolbarComponent, CopilotChatToolsMenuComponent, CopilotChatUserMessageBranchNavigationComponent, CopilotChatUserMessageComponent, CopilotChatUserMessageCopyButtonComponent, CopilotChatUserMessageEditButtonComponent, CopilotChatUserMessageRendererComponent, CopilotChatUserMessageToolbarButtonComponent, CopilotChatUserMessageToolbarComponent, CopilotChatViewComponent, CopilotChatViewDisclaimerComponent, CopilotChatViewFeatherComponent, CopilotChatViewInputContainerComponent, CopilotChatViewScrollToBottomButtonComponent, CopilotChatViewScrollViewComponent, CopilotKitAgentContextDirective, CopilotKitAgentDirective, CopilotKitChatConfigDirective, CopilotKitConfigDirective, CopilotKitFrontendToolDirective, CopilotKitHumanInTheLoopDirective, CopilotKitHumanInTheLoopRespondDirective, CopilotKitService, CopilotKitToolRenderComponent, CopilotTooltipDirective, ResizeObserverService, ScrollPositionService, StickToBottomDirective, addAgentContext, addFrontendTool, addHumanInTheLoop, createChatConfigController, createDynamicFrontendTool, createHumanInTheLoop, createReactiveContext, enhancePropsForHumanInTheLoop, getAgent, getChatInputValue, getChatLabels, injectCopilotKit, provideCopilotChatConfiguration, provideCopilotKit, registerAgentContext, registerChatConfig, registerFrontendTool, registerHumanInTheLoop, removeFrontendTool, setChatInputValue, setChatLabels, subscribeToAgent, watchAgent, watchAgentWith, watchChatConfig };
9301
9325
  //# sourceMappingURL=copilotkitnext-angular.mjs.map