{"version":3,"file":"hashbrownai-angular.mjs","sources":["../tmp-esm2022/utils/create-runtime-function.fn.js","../tmp-esm2022/utils/create-runtime.fn.js","../tmp-esm2022/utils/create-tool.fn.js","../tmp-esm2022/utils/create-tool-javascript.fn.js","../tmp-esm2022/utils/deep-signal.js","../tmp-esm2022/utils/expose-component.fn.js","../tmp-esm2022/utils/signals.js","../tmp-esm2022/utils/ui-chat.helpers.js","../tmp-esm2022/components/render-message.component.js","../tmp-esm2022/components/magic-text-renderer.component.js","../tmp-esm2022/providers/provide-hashbrown.fn.js","../tmp-esm2022/resources/chat-resource.fn.js","../tmp-esm2022/resources/completion-resource.fn.js","../tmp-esm2022/resources/structured-chat-resource.fn.js","../tmp-esm2022/resources/structured-completion-resource.fn.js","../tmp-esm2022/resources/ui-chat-resource.fn.js","../tmp-esm2022/resources/ui-completion-resource.fn.js","../tmp-esm2022/hashbrownai-angular.js"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { inject, Injector, runInInjectionContext } from '@angular/core';\nimport { ɵcreateRuntimeFunctionImpl, } from '@hashbrownai/core';\n/**\n * Creates a function with an input schema.\n *\n * @public\n * @param cfg - The configuration for the function containing:\n *   - `name`: The name of the function\n *   - `description`: The description of the function\n *   - `args`: The args schema of the function\n *   - `result`: The result schema of the function\n *   - `handler`: The handler of the function\n * @returns The function reference.\n */\nexport function createRuntimeFunction(cfg) {\n    const injector = inject(Injector);\n    return ɵcreateRuntimeFunctionImpl({\n        ...cfg,\n        handler: (...args) => {\n            return runInInjectionContext(injector, () => cfg.handler(...args));\n        },\n    });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXJ1bnRpbWUtZnVuY3Rpb24uZm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL3NyYy91dGlscy9jcmVhdGUtcnVudGltZS1mdW5jdGlvbi5mbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUdMLDBCQUEwQixHQUMzQixNQUFNLG1CQUFtQixDQUFDO0FBdUYzQjs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsR0F3Qks7SUFFTCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsT0FBTywwQkFBMEIsQ0FBQztRQUNoQyxHQUFHLEdBQUc7UUFDTixPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFO1lBQzFCLE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUN6QyxHQUFHLENBQUMsT0FBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQzlCLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IGluamVjdCwgSW5qZWN0b3IsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgUnVudGltZUZ1bmN0aW9uUmVmLFxuICBzLFxuICDJtWNyZWF0ZVJ1bnRpbWVGdW5jdGlvbkltcGwsXG59IGZyb20gJ0BoYXNoYnJvd25haS9jb3JlJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gd2l0aCBhbiBpbnB1dCBzY2hlbWEuXG4gKlxuICogQHB1YmxpY1xuICogQHBhcmFtIGNmZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZnVuY3Rpb24gY29udGFpbmluZzpcbiAqICAgLSBgbmFtZWA6IFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvblxuICogICAtIGBkZXNjcmlwdGlvbmA6IFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25cbiAqICAgLSBgYXJnc2A6IFRoZSBpbnB1dCBzY2hlbWEgb2YgdGhlIGZ1bmN0aW9uXG4gKiAgIC0gYHJlc3VsdGA6IFRoZSByZXN1bHQgc2NoZW1hIG9mIHRoZSBmdW5jdGlvblxuICogICAtIGBoYW5kbGVyYDogVGhlIGhhbmRsZXIgb2YgdGhlIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBUaGUgZnVuY3Rpb24gcmVmZXJlbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUnVudGltZUZ1bmN0aW9uPFxuICBBcmdzU2NoZW1hIGV4dGVuZHMgcy5IYXNoYnJvd25UeXBlLFxuICBSZXN1bHRTY2hlbWEgZXh0ZW5kcyBzLkhhc2hicm93blR5cGUsXG4+KGNmZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFyZ3M6IEFyZ3NTY2hlbWE7XG4gIHJlc3VsdDogUmVzdWx0U2NoZW1hO1xuICBoYW5kbGVyOiAoXG4gICAgaW5wdXQ6IHMuSW5mZXI8QXJnc1NjaGVtYT4sXG4gICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKSA9PiBzLkluZmVyPFJlc3VsdFNjaGVtYT4gfCBQcm9taXNlPHMuSW5mZXI8UmVzdWx0U2NoZW1hPj47XG59KTogUnVudGltZUZ1bmN0aW9uUmVmPHMuSW5mZXI8QXJnc1NjaGVtYT4sIHMuSW5mZXI8UmVzdWx0U2NoZW1hPj47XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHdpdGhvdXQgYW4gaW5wdXQgc2NoZW1hLlxuICpcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBjZmcgLSBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGZ1bmN0aW9uIGNvbnRhaW5pbmc6XG4gKiAgIC0gYG5hbWVgOiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb25cbiAqICAgLSBgZGVzY3JpcHRpb25gOiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uXG4gKiAgIC0gYHJlc3VsdGA6IFRoZSByZXN1bHQgc2NoZW1hIG9mIHRoZSBmdW5jdGlvblxuICogICAtIGBoYW5kbGVyYDogVGhlIGhhbmRsZXIgb2YgdGhlIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBUaGUgZnVuY3Rpb24gcmVmZXJlbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUnVudGltZUZ1bmN0aW9uPFxuICBSZXN1bHRTY2hlbWEgZXh0ZW5kcyBzLkhhc2hicm93blR5cGUsXG4+KGNmZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHJlc3VsdDogUmVzdWx0U2NoZW1hO1xuICBoYW5kbGVyOiAoXG4gICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKSA9PiBzLkluZmVyPFJlc3VsdFNjaGVtYT4gfCBQcm9taXNlPHMuSW5mZXI8UmVzdWx0U2NoZW1hPj47XG59KTogUnVudGltZUZ1bmN0aW9uUmVmPG51bGwsIHMuSW5mZXI8UmVzdWx0U2NoZW1hPj47XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHdpdGggYW4gaW5wdXQgc2NoZW1hLlxuICpcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBjZmcgLSBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGZ1bmN0aW9uIGNvbnRhaW5pbmc6XG4gKiAgIC0gYG5hbWVgOiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb25cbiAqICAgLSBgZGVzY3JpcHRpb25gOiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uXG4gKiAgIC0gYGFyZ3NgOiBUaGUgYXJncyBzY2hlbWEgb2YgdGhlIGZ1bmN0aW9uXG4gKiAgIC0gYGhhbmRsZXJgOiBUaGUgaGFuZGxlciBvZiB0aGUgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBmdW5jdGlvbiByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSdW50aW1lRnVuY3Rpb248QXJnc1NjaGVtYSBleHRlbmRzIHMuSGFzaGJyb3duVHlwZT4oY2ZnOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgYXJnczogQXJnc1NjaGVtYTtcbiAgaGFuZGxlcjogKFxuICAgIGFyZ3M6IHMuSW5mZXI8QXJnc1NjaGVtYT4sXG4gICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn0pOiBSdW50aW1lRnVuY3Rpb25SZWY8cy5JbmZlcjxBcmdzU2NoZW1hPiwgdm9pZD47XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHdpdGhvdXQgaW5wdXQgb3Igb3V0cHV0IHNjaGVtYS5cbiAqXG4gKiBAcHVibGljXG4gKiBAcGFyYW0gY2ZnIC0gVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBmdW5jdGlvbiBjb250YWluaW5nOlxuICogICAtIGBuYW1lYDogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uXG4gKiAgIC0gYGRlc2NyaXB0aW9uYDogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBmdW5jdGlvblxuICogICAtIGBoYW5kbGVyYDogVGhlIGhhbmRsZXIgb2YgdGhlIGZ1bmN0aW9uLCB3aGljaCByZXR1cm5zIHZvaWQgb3IgYSBwcm9taXNlIHRoZXJlb2ZcbiAqIEByZXR1cm5zIFRoZSBmdW5jdGlvbiByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSdW50aW1lRnVuY3Rpb24oY2ZnOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaGFuZGxlcjogKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xufSk6IFJ1bnRpbWVGdW5jdGlvblJlZjxudWxsLCB2b2lkPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gd2l0aCBhbiBpbnB1dCBzY2hlbWEuXG4gKlxuICogQHB1YmxpY1xuICogQHBhcmFtIGNmZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZnVuY3Rpb24gY29udGFpbmluZzpcbiAqICAgLSBgbmFtZWA6IFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvblxuICogICAtIGBkZXNjcmlwdGlvbmA6IFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25cbiAqICAgLSBgYXJnc2A6IFRoZSBhcmdzIHNjaGVtYSBvZiB0aGUgZnVuY3Rpb25cbiAqICAgLSBgcmVzdWx0YDogVGhlIHJlc3VsdCBzY2hlbWEgb2YgdGhlIGZ1bmN0aW9uXG4gKiAgIC0gYGhhbmRsZXJgOiBUaGUgaGFuZGxlciBvZiB0aGUgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBmdW5jdGlvbiByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSdW50aW1lRnVuY3Rpb24oXG4gIGNmZzpcbiAgICB8IHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAgICBhcmdzOiBzLkhhc2hicm93blR5cGU7XG4gICAgICAgIHJlc3VsdDogcy5IYXNoYnJvd25UeXBlO1xuICAgICAgICBoYW5kbGVyOiAoYXJnczogdW5rbm93biwgYWJvcnQ/OiBBYm9ydFNpZ25hbCkgPT4gdW5rbm93bjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAgICByZXN1bHQ6IHMuSGFzaGJyb3duVHlwZTtcbiAgICAgICAgaGFuZGxlcjogKGFib3J0PzogQWJvcnRTaWduYWwpID0+IHVua25vd247XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgICAgYXJnczogcy5IYXNoYnJvd25UeXBlO1xuICAgICAgICBoYW5kbGVyOiAoYXJnczogdW5rbm93biwgYWJvcnQ/OiBBYm9ydFNpZ25hbCkgPT4gdW5rbm93bjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAgICBoYW5kbGVyOiAoYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gdW5rbm93bjtcbiAgICAgIH0sXG4pOiBSdW50aW1lRnVuY3Rpb25SZWY8YW55LCBhbnk+IHtcbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICByZXR1cm4gybVjcmVhdGVSdW50aW1lRnVuY3Rpb25JbXBsKHtcbiAgICAuLi5jZmcsXG4gICAgaGFuZGxlcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PlxuICAgICAgICAoY2ZnLmhhbmRsZXIgYXMgYW55KSguLi5hcmdzKSxcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ɵcreateRuntimeImpl, } from '@hashbrownai/core';\n/**\n * Creates a new runtime.\n *\n * @public\n * @param options - The options for creating the runtime.\n * @returns A reference to the runtime.\n */\nexport function createRuntime(options) {\n    return ɵcreateRuntimeImpl(options);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXJ1bnRpbWUuZm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL3NyYy91dGlscy9jcmVhdGUtcnVudGltZS5mbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUdMLGtCQUFrQixHQUNuQixNQUFNLG1CQUFtQixDQUFDO0FBcUIzQjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQTZCO0lBQ3pELE9BQU8sa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuaW1wb3J0IHtcbiAgUnVudGltZUZ1bmN0aW9uUmVmLFxuICBSdW50aW1lUmVmLFxuICDJtWNyZWF0ZVJ1bnRpbWVJbXBsLFxufSBmcm9tICdAaGFzaGJyb3duYWkvY29yZSc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBydW50aW1lLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVSdW50aW1lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdGltZW91dCBmb3IgdGhlIHJ1bnRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgMTAwMDBcbiAgICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIGluIHRoZSBydW50aW1lLlxuICAgKi9cbiAgZnVuY3Rpb25zOiBbLi4uUnVudGltZUZ1bmN0aW9uUmVmPGFueSwgYW55PltdXTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJ1bnRpbWUuXG4gKlxuICogQHB1YmxpY1xuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIHJ1bnRpbWUuXG4gKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgcnVudGltZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJ1bnRpbWUob3B0aW9uczogQ3JlYXRlUnVudGltZU9wdGlvbnMpOiBSdW50aW1lUmVmIHtcbiAgcmV0dXJuIMm1Y3JlYXRlUnVudGltZUltcGwob3B0aW9ucyk7XG59XG4iXX0=","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { s } from '@hashbrownai/core';\nimport { runInInjectionContext, untracked } from '@angular/core';\n/**\n * @public\n */\nexport function createTool(input) {\n    if ('schema' in input) {\n        const { name, description, schema, handler } = input;\n        return {\n            name,\n            description,\n            schema,\n            handler: (args, abortSignal) => handler(args, abortSignal),\n        };\n    }\n    else {\n        const { name, description, handler } = input;\n        return {\n            name,\n            description,\n            schema: s.object('Empty Object', {}),\n            handler: (_, abortSignal) => handler(abortSignal),\n        };\n    }\n}\nexport function bindToolToInjector(tool, injector) {\n    return {\n        ...tool,\n        handler: (args, abortSignal) => untracked(() => runInInjectionContext(injector, () => tool.handler(args, abortSignal))),\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXRvb2wuZm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL3NyYy91dGlscy9jcmVhdGUtdG9vbC5mbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFRLENBQUMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBWSxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFxRTNFOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsS0FpQks7SUFFTCxJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN0QixNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3JELE9BQU87WUFDTCxJQUFJO1lBQ0osV0FBVztZQUNYLE1BQU07WUFDTixPQUFPLEVBQUUsQ0FBQyxJQUFhLEVBQUUsV0FBd0IsRUFBRSxFQUFFLENBQ25ELE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDO1NBQzdCLENBQUM7SUFDSixDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQztRQUM3QyxPQUFPO1lBQ0wsSUFBSTtZQUNKLFdBQVc7WUFDWCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sRUFBRSxDQUFDLENBQU8sRUFBRSxXQUF3QixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1NBQ3JFLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FFaEMsSUFBTyxFQUFFLFFBQWtCO0lBQzNCLE9BQU87UUFDTCxHQUFHLElBQUk7UUFDUCxPQUFPLEVBQUUsQ0FBQyxJQUFhLEVBQUUsV0FBd0IsRUFBRSxFQUFFLENBQ25ELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDYixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FDdkU7S0FDSixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENoYXQsIHMgfSBmcm9tICdAaGFzaGJyb3duYWkvY29yZSc7XG5pbXBvcnQgeyBJbmplY3RvciwgcnVuSW5JbmplY3Rpb25Db250ZXh0LCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgdG9vbCB3aXRoIGEgc2NoZW1hLlxuICpcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBpbnB1dCBmb3IgdGhlIHRvb2wgY29udGFpbmluZzpcbiAqICAgLSBgbmFtZWA6IFRoZSBuYW1lIG9mIHRoZSB0b29sXG4gKiAgIC0gYGRlc2NyaXB0aW9uYDogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB0b29sXG4gKiAgIC0gYHNjaGVtYWA6IFRoZSBzY2hlbWEgb2YgdGhlIHRvb2xcbiAqICAgLSBgaGFuZGxlcmA6IFRoZSBoYW5kbGVyIG9mIHRoZSB0b29sXG4gKiBAcGFyYW0gTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0b29sLlxuICogQHBhcmFtIFNjaGVtYSAtIFRoZSBzY2hlbWEgb2YgdGhlIHRvb2wuXG4gKiBAcGFyYW0gUmVzdWx0IC0gVGhlIHJlc3VsdCBvZiB0aGUgdG9vbC5cbiAqIEByZXR1cm5zIFRoZSB0b29sLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9vbDxcbiAgY29uc3QgTmFtZSBleHRlbmRzIHN0cmluZyxcbiAgU2NoZW1hIGV4dGVuZHMgcy5IYXNoYnJvd25UeXBlLFxuICBSZXN1bHQsXG4+KGlucHV0OiB7XG4gIG5hbWU6IE5hbWU7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHNjaGVtYTogU2NoZW1hO1xuICBoYW5kbGVyOiAoXG4gICAgaW5wdXQ6IHMuSW5mZXI8U2NoZW1hPixcbiAgICBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwsXG4gICkgPT4gUHJvbWlzZTxSZXN1bHQ+O1xufSk6IENoYXQuVG9vbDxOYW1lLCBzLkluZmVyPFNjaGVtYT4sIFJlc3VsdD47XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRvb2wgd2l0aCBhIHVua25vd24gSlNPTiBzY2hlbWEuXG4gKlxuICogQHB1YmxpY1xuICogQHBhcmFtIGlucHV0IC0gVGhlIGlucHV0IGZvciB0aGUgdG9vbCBjb250YWluaW5nOlxuICogICAtIGBuYW1lYDogVGhlIG5hbWUgb2YgdGhlIHRvb2xcbiAqICAgLSBgZGVzY3JpcHRpb25gOiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHRvb2xcbiAqICAgLSBgc2NoZW1hYDogVGhlIHNjaGVtYSBvZiB0aGUgdG9vbFxuICogICAtIGBoYW5kbGVyYDogVGhlIGhhbmRsZXIgb2YgdGhlIHRvb2xcbiAqIEBwYXJhbSBOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRvb2wuXG4gKiBAcGFyYW0gU2NoZW1hIC0gVGhlIHNjaGVtYSBvZiB0aGUgdG9vbC5cbiAqIEBwYXJhbSBSZXN1bHQgLSBUaGUgcmVzdWx0IG9mIHRoZSB0b29sLlxuICogQHJldHVybnMgVGhlIHRvb2wuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUb29sPGNvbnN0IE5hbWUgZXh0ZW5kcyBzdHJpbmcsIFJlc3VsdD4oaW5wdXQ6IHtcbiAgbmFtZTogTmFtZTtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc2NoZW1hOiBvYmplY3Q7XG4gIGhhbmRsZXI6IChpbnB1dDogYW55LCBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpID0+IFByb21pc2U8UmVzdWx0Pjtcbn0pOiBDaGF0LlRvb2w8TmFtZSwgYW55LCBSZXN1bHQ+O1xuXG4vKipcbiAqIENyZWF0ZXMgYSB0b29sIHdpdGhvdXQgYSBzY2hlbWEuXG4gKlxuICogQHB1YmxpY1xuICogQHBhcmFtIGlucHV0IC0gVGhlIGlucHV0IGZvciB0aGUgdG9vbCBjb250YWluaW5nOlxuICogICAtIGBuYW1lYDogVGhlIG5hbWUgb2YgdGhlIHRvb2xcbiAqICAgLSBgZGVzY3JpcHRpb25gOiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHRvb2xcbiAqICAgLSBgaGFuZGxlcmA6IFRoZSBoYW5kbGVyIG9mIHRoZSB0b29sXG4gKiBAcGFyYW0gTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0b29sLlxuICogQHBhcmFtIFJlc3VsdCAtIFRoZSByZXN1bHQgb2YgdGhlIHRvb2wuXG4gKiBAcmV0dXJucyBUaGUgdG9vbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRvb2w8Y29uc3QgTmFtZSBleHRlbmRzIHN0cmluZywgUmVzdWx0PihpbnB1dDoge1xuICBuYW1lOiBOYW1lO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBoYW5kbGVyOiAoYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPFJlc3VsdD47XG59KTogQ2hhdC5Ub29sPE5hbWUsIHZvaWQsIFJlc3VsdD47XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9vbChcbiAgaW5wdXQ6XG4gICAgfCB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgICAgc2NoZW1hOiBzLkhhc2hicm93blR5cGU7XG4gICAgICAgIGhhbmRsZXI6IChhOiB1bmtub3duLCBzOiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTx1bmtub3duPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAgICBoYW5kbGVyOiAoczogQWJvcnRTaWduYWwpID0+IFByb21pc2U8dW5rbm93bj47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgICAgc2NoZW1hOiBvYmplY3Q7XG4gICAgICAgIGhhbmRsZXI6IChhOiB1bmtub3duLCBzOiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTx1bmtub3duPjtcbiAgICAgIH0sXG4pOiB1bmtub3duIHtcbiAgaWYgKCdzY2hlbWEnIGluIGlucHV0KSB7XG4gICAgY29uc3QgeyBuYW1lLCBkZXNjcmlwdGlvbiwgc2NoZW1hLCBoYW5kbGVyIH0gPSBpbnB1dDtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgc2NoZW1hLFxuICAgICAgaGFuZGxlcjogKGFyZ3M6IHVua25vd24sIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCkgPT5cbiAgICAgICAgaGFuZGxlcihhcmdzLCBhYm9ydFNpZ25hbCksXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IG5hbWUsIGRlc2NyaXB0aW9uLCBoYW5kbGVyIH0gPSBpbnB1dDtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgc2NoZW1hOiBzLm9iamVjdCgnRW1wdHkgT2JqZWN0Jywge30pLFxuICAgICAgaGFuZGxlcjogKF86IHZvaWQsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCkgPT4gaGFuZGxlcihhYm9ydFNpZ25hbCksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZFRvb2xUb0luamVjdG9yPFxuICBUIGV4dGVuZHMgQ2hhdC5Ub29sPHN0cmluZywgdW5rbm93biwgdW5rbm93bj4sXG4+KHRvb2w6IFQsIGluamVjdG9yOiBJbmplY3Rvcik6IFQge1xuICByZXR1cm4ge1xuICAgIC4uLnRvb2wsXG4gICAgaGFuZGxlcjogKGFyZ3M6IHVua25vd24sIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCkgPT5cbiAgICAgIHVudHJhY2tlZCgoKSA9PlxuICAgICAgICBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHRvb2wuaGFuZGxlcihhcmdzLCBhYm9ydFNpZ25hbCkpLFxuICAgICAgKSxcbiAgfTtcbn1cbiJdfQ==","import { s } from '@hashbrownai/core';\nimport { createTool } from './create-tool.fn';\n/**\n * The schema for the javascript tool.\n */\nconst schema = s.streaming.object('The result', {\n    code: s.streaming.string('The JavaScript code to run'),\n});\n/**\n * Creates a tool that allows the LLM to run JavaScript code. It is run\n * in a stateful JavaScript environment, with no access to the internet, the DOM,\n * or any function that you have not explicitly defined.\n *\n * @public\n * @param options - The options for creating the tool.\n * @returns The tool.\n */\nexport function createToolJavaScript({ runtime, }) {\n    return createTool({\n        name: 'javascript',\n        description: [\n            'Whenever you send a message containing JavaScript code to javascript, it will be',\n            'executed in a stateful JavaScript environment. javascript will respond with the output',\n            'of the execution or time out after ${runtime.timeout / 1000} seconds. Internet access',\n            'for this session is disabled. Do not make external web requests or API calls as they',\n            'will fail.',\n            '',\n            'Important: Prefer calling javascript once with a large amount of code, rather than calling it',\n            'multiple times with smaller amounts of code.',\n            '',\n            'The following functions are available to you:',\n            runtime.describe(),\n        ].join('\\n'),\n        schema,\n        handler: async ({ code }, abortSignal) => {\n            return runtime.run(code, abortSignal);\n        },\n    });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXRvb2wtamF2YXNjcmlwdC5mbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvc3JjL3V0aWxzL2NyZWF0ZS10b29sLWphdmFzY3JpcHQuZm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixDQUFDLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFjOUM7O0dBRUc7QUFDSCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUU7SUFDOUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFDO0NBQ3ZELENBQUMsQ0FBQztBQUVIOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFTLEVBQzNDLE9BQU8sR0FDcUI7SUFLNUIsT0FBTyxVQUFVLENBQUM7UUFDaEIsSUFBSSxFQUFFLFlBQVk7UUFDbEIsV0FBVyxFQUFFO1lBQ1gsa0ZBQWtGO1lBQ2xGLHdGQUF3RjtZQUN4Rix1RkFBdUY7WUFDdkYsc0ZBQXNGO1lBQ3RGLFlBQVk7WUFDWixFQUFFO1lBQ0YsK0ZBQStGO1lBQy9GLDhDQUE4QztZQUM5QyxFQUFFO1lBQ0YsK0NBQStDO1lBQy9DLE9BQU8sQ0FBQyxRQUFRLEVBQUU7U0FDbkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ1osTUFBTTtRQUNOLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRTtZQUN2QyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhdCwgUnVudGltZVJlZiwgcyB9IGZyb20gJ0BoYXNoYnJvd25haS9jb3JlJztcbmltcG9ydCB7IGNyZWF0ZVRvb2wgfSBmcm9tICcuL2NyZWF0ZS10b29sLmZuJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhIHRvb2wgdGhhdCBjYW4gcnVuIEphdmFTY3JpcHQgY29kZS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlVG9vbEphdmFTY3JpcHRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBydW50aW1lIHRvIHVzZSBmb3IgdGhlIEphdmFTY3JpcHQgY29kZSwgY3JlYXRlZCB3aXRoIGBkZWZpbmVBc3luY1J1bnRpbWVgLlxuICAgKi9cbiAgcnVudGltZTogUnVudGltZVJlZjtcbn1cblxuLyoqXG4gKiBUaGUgc2NoZW1hIGZvciB0aGUgamF2YXNjcmlwdCB0b29sLlxuICovXG5jb25zdCBzY2hlbWEgPSBzLnN0cmVhbWluZy5vYmplY3QoJ1RoZSByZXN1bHQnLCB7XG4gIGNvZGU6IHMuc3RyZWFtaW5nLnN0cmluZygnVGhlIEphdmFTY3JpcHQgY29kZSB0byBydW4nKSxcbn0pO1xuXG4vKipcbiAqIENyZWF0ZXMgYSB0b29sIHRoYXQgYWxsb3dzIHRoZSBMTE0gdG8gcnVuIEphdmFTY3JpcHQgY29kZS4gSXQgaXMgcnVuXG4gKiBpbiBhIHN0YXRlZnVsIEphdmFTY3JpcHQgZW52aXJvbm1lbnQsIHdpdGggbm8gYWNjZXNzIHRvIHRoZSBpbnRlcm5ldCwgdGhlIERPTSxcbiAqIG9yIGFueSBmdW5jdGlvbiB0aGF0IHlvdSBoYXZlIG5vdCBleHBsaWNpdGx5IGRlZmluZWQuXG4gKlxuICogQHB1YmxpY1xuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIHRvb2wuXG4gKiBAcmV0dXJucyBUaGUgdG9vbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRvb2xKYXZhU2NyaXB0PFJlc3VsdD4oe1xuICBydW50aW1lLFxufTogQ3JlYXRlVG9vbEphdmFTY3JpcHRPcHRpb25zKTogQ2hhdC5Ub29sPFxuICAnamF2YXNjcmlwdCcsXG4gIHMuSW5mZXI8dHlwZW9mIHNjaGVtYT4sXG4gIFJlc3VsdFxuPiB7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBuYW1lOiAnamF2YXNjcmlwdCcsXG4gICAgZGVzY3JpcHRpb246IFtcbiAgICAgICdXaGVuZXZlciB5b3Ugc2VuZCBhIG1lc3NhZ2UgY29udGFpbmluZyBKYXZhU2NyaXB0IGNvZGUgdG8gamF2YXNjcmlwdCwgaXQgd2lsbCBiZScsXG4gICAgICAnZXhlY3V0ZWQgaW4gYSBzdGF0ZWZ1bCBKYXZhU2NyaXB0IGVudmlyb25tZW50LiBqYXZhc2NyaXB0IHdpbGwgcmVzcG9uZCB3aXRoIHRoZSBvdXRwdXQnLFxuICAgICAgJ29mIHRoZSBleGVjdXRpb24gb3IgdGltZSBvdXQgYWZ0ZXIgJHtydW50aW1lLnRpbWVvdXQgLyAxMDAwfSBzZWNvbmRzLiBJbnRlcm5ldCBhY2Nlc3MnLFxuICAgICAgJ2ZvciB0aGlzIHNlc3Npb24gaXMgZGlzYWJsZWQuIERvIG5vdCBtYWtlIGV4dGVybmFsIHdlYiByZXF1ZXN0cyBvciBBUEkgY2FsbHMgYXMgdGhleScsXG4gICAgICAnd2lsbCBmYWlsLicsXG4gICAgICAnJyxcbiAgICAgICdJbXBvcnRhbnQ6IFByZWZlciBjYWxsaW5nIGphdmFzY3JpcHQgb25jZSB3aXRoIGEgbGFyZ2UgYW1vdW50IG9mIGNvZGUsIHJhdGhlciB0aGFuIGNhbGxpbmcgaXQnLFxuICAgICAgJ211bHRpcGxlIHRpbWVzIHdpdGggc21hbGxlciBhbW91bnRzIG9mIGNvZGUuJyxcbiAgICAgICcnLFxuICAgICAgJ1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgdG8geW91OicsXG4gICAgICBydW50aW1lLmRlc2NyaWJlKCksXG4gICAgXS5qb2luKCdcXG4nKSxcbiAgICBzY2hlbWEsXG4gICAgaGFuZGxlcjogYXN5bmMgKHsgY29kZSB9LCBhYm9ydFNpZ25hbCkgPT4ge1xuICAgICAgcmV0dXJuIHJ1bnRpbWUucnVuKGNvZGUsIGFib3J0U2lnbmFsKTtcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, isSignal, untracked } from '@angular/core';\n/**\n * Symbol used to mark signals that were created by toDeepSignal.\n * This helps us identify and clean up stale deep signal properties\n * when the structure of the data changes.\n */\nconst DEEP_SIGNAL = Symbol('DEEP_SIGNAL');\n/**\n * Converts a Signal to a DeepSignal, allowing reactive access to nested properties.\n *\n * This implementation is lifted from @ngrx/signals and uses a Proxy to lazily create\n * computed signals for nested properties as they are accessed.\n *\n * @param signal - The signal to convert to a deep signal\n * @returns A DeepSignal that allows accessing nested properties as signals\n *\n * @remarks\n * The implementation uses a Proxy to intercept property access and lazily creates\n * computed signals for nested properties. This ensures:\n * - Minimal memory overhead (signals are only created when accessed)\n * - Automatic cleanup of stale signals when data structure changes\n * - Full reactivity for nested properties\n *\n * @example\n * ```typescript\n * const messages = signal([{ content: { text: 'Hello' } }]);\n * const deepMessages = toDeepSignal(messages);\n *\n * // In a component or effect:\n * effect(() => {\n *   // This will re-run when the text changes\n *   console.log(deepMessages()[0].content.text);\n * });\n * ```\n *\n * @public\n */\nexport function toDeepSignal(signal) {\n    return new Proxy(signal, {\n        has(target, prop) {\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            return !!this.get(target, prop, undefined);\n        },\n        get(target, prop) {\n            const value = untracked(target);\n            if (!isRecord(value) || !(prop in value)) {\n                if (isSignal(target[prop]) && target[prop][DEEP_SIGNAL]) {\n                    delete target[prop];\n                }\n                return target[prop];\n            }\n            if (!isSignal(target[prop])) {\n                Object.defineProperty(target, prop, {\n                    value: computed(() => target()[prop]),\n                    configurable: true,\n                });\n                target[prop][DEEP_SIGNAL] = true;\n            }\n            return toDeepSignal(target[prop]);\n        },\n    });\n}\nconst nonRecords = [\n    WeakSet,\n    WeakMap,\n    Promise,\n    Date,\n    Error,\n    RegExp,\n    ArrayBuffer,\n    DataView,\n    Function,\n];\nfunction isRecord(value) {\n    if (value === null || typeof value !== 'object' || isIterable(value)) {\n        return false;\n    }\n    let proto = Object.getPrototypeOf(value);\n    if (proto === Object.prototype) {\n        return true;\n    }\n    while (proto && proto !== Object.prototype) {\n        if (nonRecords.includes(proto.constructor)) {\n            return false;\n        }\n        proto = Object.getPrototypeOf(proto);\n    }\n    return proto === Object.prototype;\n}\nfunction isIterable(value) {\n    return typeof value?.[Symbol.iterator] === 'function';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcC1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL3NyYy91dGlscy9kZWVwLXNpZ25hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3RFOzs7O0dBSUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFnQzFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUksTUFBaUI7SUFDL0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDdkIsR0FBRyxDQUFDLE1BQVcsRUFBRSxJQUFJO1lBQ25CLG9FQUFvRTtZQUNwRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELEdBQUcsQ0FBQyxNQUFXLEVBQUUsSUFBSTtZQUNuQixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFLLE1BQU0sQ0FBQyxJQUFJLENBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO29CQUNqRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEIsQ0FBQztnQkFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QixDQUFDO1lBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7b0JBQ2xDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3JDLFlBQVksRUFBRSxJQUFJO2lCQUNuQixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNuQyxDQUFDO1lBRUQsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEMsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsR0FBRztJQUNqQixPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxJQUFJO0lBQ0osS0FBSztJQUNMLE1BQU07SUFDTixXQUFXO0lBQ1gsUUFBUTtJQUNSLFFBQVE7Q0FDVCxDQUFDO0FBRUYsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM5QixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsSUFBSSxLQUFLLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sS0FBSyxJQUFJLEtBQUssS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDM0MsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxPQUFPLEtBQUssS0FBSyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFVO0lBQzVCLE9BQU8sT0FBTyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssVUFBVSxDQUFDO0FBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBjb21wdXRlZCwgaXNTaWduYWwsIFNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJc0tub3duUmVjb3JkIH0gZnJvbSAnLi90cy1oZWxwZXJzJztcblxuLyoqXG4gKiBTeW1ib2wgdXNlZCB0byBtYXJrIHNpZ25hbHMgdGhhdCB3ZXJlIGNyZWF0ZWQgYnkgdG9EZWVwU2lnbmFsLlxuICogVGhpcyBoZWxwcyB1cyBpZGVudGlmeSBhbmQgY2xlYW4gdXAgc3RhbGUgZGVlcCBzaWduYWwgcHJvcGVydGllc1xuICogd2hlbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhIGNoYW5nZXMuXG4gKi9cbmNvbnN0IERFRVBfU0lHTkFMID0gU3ltYm9sKCdERUVQX1NJR05BTCcpO1xuXG4vKipcbiAqIERlZXBTaWduYWwgdHlwZSBhbGxvd3MgYWNjZXNzaW5nIG5lc3RlZCBwcm9wZXJ0aWVzIG9mIGEgc2lnbmFsIGFzIHNpZ25hbHMgdGhlbXNlbHZlcy5cbiAqXG4gKiBGb3IgcGxhaW4gb2JqZWN0cyAoSXNLbm93blJlY29yZCksIGl0IHJlY3Vyc2l2ZWx5IGFwcGxpZXMgRGVlcFNpZ25hbCB0byBuZXN0ZWQgcHJvcGVydGllcy5cbiAqIEZvciBub24tb2JqZWN0cyBvciBidWlsdC1pbiB0eXBlcyAoYXJyYXlzLCBkYXRlcywgZXRjLiksIGl0IHJldHVybnMgdW5rbm93biB0byBwcmV2ZW50XG4gKiBkZWVwIHNpZ25hbCBwcm9wZXJ0eSBhY2Nlc3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHN0YXRlID0gc2lnbmFsKHsgdXNlcjogeyBuYW1lOiAnSm9obicsIGFnZTogMzAgfSB9KTtcbiAqIGNvbnN0IGRlZXBTdGF0ZSA9IHRvRGVlcFNpZ25hbChzdGF0ZSk7XG4gKlxuICogLy8gQWxsIG9mIHRoZXNlIHdvcmsgYW5kIHJldHVybiBzaWduYWxzOlxuICogZGVlcFN0YXRlKCkgICAgICAgICAgICAgIC8vIFNpZ25hbDx7IHVzZXI6IHsgbmFtZTogc3RyaW5nLCBhZ2U6IG51bWJlciB9IH0+XG4gKiBkZWVwU3RhdGUudXNlcigpICAgICAgICAgLy8gU2lnbmFsPHsgbmFtZTogc3RyaW5nLCBhZ2U6IG51bWJlciB9PlxuICogZGVlcFN0YXRlLnVzZXIubmFtZSgpICAgIC8vIFNpZ25hbDxzdHJpbmc+XG4gKiBkZWVwU3RhdGUudXNlci5hZ2UoKSAgICAgLy8gU2lnbmFsPG51bWJlcj5cbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGVlcFNpZ25hbDxUPiA9IFNpZ25hbDxUPiAmXG4gIChJc0tub3duUmVjb3JkPFQ+IGV4dGVuZHMgdHJ1ZVxuICAgID8gUmVhZG9ubHk8e1xuICAgICAgICBbSyBpbiBrZXlvZiBUXTogSXNLbm93blJlY29yZDxUW0tdPiBleHRlbmRzIHRydWVcbiAgICAgICAgICA/IERlZXBTaWduYWw8VFtLXT5cbiAgICAgICAgICA6IFNpZ25hbDxUW0tdPjtcbiAgICAgIH0+XG4gICAgOiB1bmtub3duKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFNpZ25hbCB0byBhIERlZXBTaWduYWwsIGFsbG93aW5nIHJlYWN0aXZlIGFjY2VzcyB0byBuZXN0ZWQgcHJvcGVydGllcy5cbiAqXG4gKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGxpZnRlZCBmcm9tIEBuZ3J4L3NpZ25hbHMgYW5kIHVzZXMgYSBQcm94eSB0byBsYXppbHkgY3JlYXRlXG4gKiBjb21wdXRlZCBzaWduYWxzIGZvciBuZXN0ZWQgcHJvcGVydGllcyBhcyB0aGV5IGFyZSBhY2Nlc3NlZC5cbiAqXG4gKiBAcGFyYW0gc2lnbmFsIC0gVGhlIHNpZ25hbCB0byBjb252ZXJ0IHRvIGEgZGVlcCBzaWduYWxcbiAqIEByZXR1cm5zIEEgRGVlcFNpZ25hbCB0aGF0IGFsbG93cyBhY2Nlc3NpbmcgbmVzdGVkIHByb3BlcnRpZXMgYXMgc2lnbmFsc1xuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyBhIFByb3h5IHRvIGludGVyY2VwdCBwcm9wZXJ0eSBhY2Nlc3MgYW5kIGxhemlseSBjcmVhdGVzXG4gKiBjb21wdXRlZCBzaWduYWxzIGZvciBuZXN0ZWQgcHJvcGVydGllcy4gVGhpcyBlbnN1cmVzOlxuICogLSBNaW5pbWFsIG1lbW9yeSBvdmVyaGVhZCAoc2lnbmFscyBhcmUgb25seSBjcmVhdGVkIHdoZW4gYWNjZXNzZWQpXG4gKiAtIEF1dG9tYXRpYyBjbGVhbnVwIG9mIHN0YWxlIHNpZ25hbHMgd2hlbiBkYXRhIHN0cnVjdHVyZSBjaGFuZ2VzXG4gKiAtIEZ1bGwgcmVhY3Rpdml0eSBmb3IgbmVzdGVkIHByb3BlcnRpZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbWVzc2FnZXMgPSBzaWduYWwoW3sgY29udGVudDogeyB0ZXh0OiAnSGVsbG8nIH0gfV0pO1xuICogY29uc3QgZGVlcE1lc3NhZ2VzID0gdG9EZWVwU2lnbmFsKG1lc3NhZ2VzKTtcbiAqXG4gKiAvLyBJbiBhIGNvbXBvbmVudCBvciBlZmZlY3Q6XG4gKiBlZmZlY3QoKCkgPT4ge1xuICogICAvLyBUaGlzIHdpbGwgcmUtcnVuIHdoZW4gdGhlIHRleHQgY2hhbmdlc1xuICogICBjb25zb2xlLmxvZyhkZWVwTWVzc2FnZXMoKVswXS5jb250ZW50LnRleHQpO1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0RlZXBTaWduYWw8VD4oc2lnbmFsOiBTaWduYWw8VD4pOiBEZWVwU2lnbmFsPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm94eShzaWduYWwsIHtcbiAgICBoYXModGFyZ2V0OiBhbnksIHByb3ApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICByZXR1cm4gISF0aGlzLmdldCEodGFyZ2V0LCBwcm9wLCB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZ2V0KHRhcmdldDogYW55LCBwcm9wKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHVudHJhY2tlZCh0YXJnZXQpO1xuICAgICAgaWYgKCFpc1JlY29yZCh2YWx1ZSkgfHwgIShwcm9wIGluIHZhbHVlKSkge1xuICAgICAgICBpZiAoaXNTaWduYWwodGFyZ2V0W3Byb3BdKSAmJiAodGFyZ2V0W3Byb3BdIGFzIGFueSlbREVFUF9TSUdOQUxdKSB7XG4gICAgICAgICAgZGVsZXRlIHRhcmdldFtwcm9wXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNTaWduYWwodGFyZ2V0W3Byb3BdKSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbXB1dGVkKCgpID0+IHRhcmdldCgpW3Byb3BdKSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0YXJnZXRbcHJvcF1bREVFUF9TSUdOQUxdID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRvRGVlcFNpZ25hbCh0YXJnZXRbcHJvcF0pO1xuICAgIH0sXG4gIH0pO1xufVxuXG5jb25zdCBub25SZWNvcmRzID0gW1xuICBXZWFrU2V0LFxuICBXZWFrTWFwLFxuICBQcm9taXNlLFxuICBEYXRlLFxuICBFcnJvcixcbiAgUmVnRXhwLFxuICBBcnJheUJ1ZmZlcixcbiAgRGF0YVZpZXcsXG4gIEZ1bmN0aW9uLFxuXTtcblxuZnVuY3Rpb24gaXNSZWNvcmQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IGlzSXRlcmFibGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB3aGlsZSAocHJvdG8gJiYgcHJvdG8gIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBpZiAobm9uUmVjb3Jkcy5pbmNsdWRlcyhwcm90by5jb25zdHJ1Y3RvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG5cbiAgcmV0dXJuIHByb3RvID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBJdGVyYWJsZTxhbnk+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZT8uW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbic7XG59XG4iXX0=","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { reflectComponentType } from '@angular/core';\n/**\n * Exposes a component by combining it with additional configuration details.\n *\n * @public\n * @typeParam T - The type of the Angular component.\n * @param component - The Angular component to be exposed.\n * @param config - The configuration object for the component, excluding the component itself.\n * @returns An object representing the exposed component, including the component and its configuration.\n */\nexport function exposeComponent(component, config) {\n    const reflected = reflectComponentType(component);\n    if (!reflected?.selector) {\n        throw new Error(`Could not reflect component: ${component}`);\n    }\n    const { input, name, ...rest } = config;\n    return {\n        component,\n        ...rest,\n        props: input,\n        name: name ?? reflected?.selector,\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3NlLWNvbXBvbmVudC5mbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvc3JjL3V0aWxzL2V4cG9zZS1jb21wb25lbnQuZm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWdDckQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixTQUFZLEVBQ1osTUFLQztJQUVELE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRWxELElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFeEMsT0FBTztRQUNMLFNBQVM7UUFDVCxHQUFHLElBQUk7UUFDUCxLQUFLLEVBQUUsS0FBSztRQUNaLElBQUksRUFBRSxJQUFJLElBQUksU0FBUyxFQUFFLFFBQVE7S0FDbEMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyByZWZsZWN0Q29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcywgybV0eXBlcyB9IGZyb20gJ0BoYXNoYnJvd25haS9jb3JlJztcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEFuZ3VsYXJTaWduYWxMaWtlPFQ+ID0gKCkgPT4gVDtcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIENvbXBvbmVudFByb3BTY2hlbWE8VD4gPSDJtXR5cGVzLlByZXR0aWZ5PFxuICBUIGV4dGVuZHMgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogaW5mZXIgUCB9XG4gICAgPyB7XG4gICAgICAgIFtLIGluIGtleW9mIFBdPzogUFtLXSBleHRlbmRzIEFuZ3VsYXJTaWduYWxMaWtlPGluZmVyIFU+XG4gICAgICAgICAgPyBzLlNjaGVtYTxVPlxuICAgICAgICAgIDogcy5TY2hlbWE8UFtLXT47XG4gICAgICB9XG4gICAgOiBuZXZlclxuPjtcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3NlZENvbXBvbmVudDxUIGV4dGVuZHMgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogYW55IH0+IHtcbiAgY29tcG9uZW50OiBUO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogJ2FueScgfCAndGV4dCcgfCBFeHBvc2VkQ29tcG9uZW50PGFueT5bXSB8IGZhbHNlO1xuICBwcm9wcz86IENvbXBvbmVudFByb3BTY2hlbWE8VD47XG59XG5cbi8qKlxuICogRXhwb3NlcyBhIGNvbXBvbmVudCBieSBjb21iaW5pbmcgaXQgd2l0aCBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZGV0YWlscy5cbiAqXG4gKiBAcHVibGljXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgQW5ndWxhciBjb21wb25lbnQuXG4gKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIEFuZ3VsYXIgY29tcG9uZW50IHRvIGJlIGV4cG9zZWQuXG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgY29tcG9uZW50LCBleGNsdWRpbmcgdGhlIGNvbXBvbmVudCBpdHNlbGYuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBleHBvc2VkIGNvbXBvbmVudCwgaW5jbHVkaW5nIHRoZSBjb21wb25lbnQgYW5kIGl0cyBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3NlQ29tcG9uZW50PFQgZXh0ZW5kcyB7IG5ldyAoLi4uYXJnczogYW55W10pOiBhbnkgfT4oXG4gIGNvbXBvbmVudDogVCxcbiAgY29uZmlnOiDJtXR5cGVzLlByZXR0aWZ5PFxuICAgIE9taXQ8RXhwb3NlZENvbXBvbmVudDxUPiwgJ2NvbXBvbmVudCcgfCAnbmFtZScgfCAncHJvcHMnPiAmIHtcbiAgICAgIGlucHV0PzogQ29tcG9uZW50UHJvcFNjaGVtYTxUPjtcbiAgICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgfVxuICA+LFxuKTogRXhwb3NlZENvbXBvbmVudDxUPiB7XG4gIGNvbnN0IHJlZmxlY3RlZCA9IHJlZmxlY3RDb21wb25lbnRUeXBlKGNvbXBvbmVudCk7XG5cbiAgaWYgKCFyZWZsZWN0ZWQ/LnNlbGVjdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcmVmbGVjdCBjb21wb25lbnQ6ICR7Y29tcG9uZW50fWApO1xuICB9XG5cbiAgY29uc3QgeyBpbnB1dCwgbmFtZSwgLi4ucmVzdCB9ID0gY29uZmlnO1xuXG4gIHJldHVybiB7XG4gICAgY29tcG9uZW50LFxuICAgIC4uLnJlc3QsXG4gICAgcHJvcHM6IGlucHV0LFxuICAgIG5hbWU6IG5hbWUgPz8gcmVmbGVjdGVkPy5zZWxlY3RvcixcbiAgfTtcbn1cbiJdfQ==","import { DestroyRef, inject, isSignal, signal, } from '@angular/core';\nexport function readSignalLike(signalLike) {\n    if (isSignal(signalLike)) {\n        return signalLike();\n    }\n    if (typeof signalLike === 'function') {\n        return signalLike();\n    }\n    return signalLike;\n}\nexport function toNgSignal(source, debugName) {\n    const destroyRef = inject(DestroyRef);\n    const options = debugName ? { debugName } : undefined;\n    const _signal = signal(source(), options);\n    const teardown = source.subscribe((value) => {\n        _signal.set(value);\n    });\n    destroyRef.onDestroy(() => {\n        teardown();\n    });\n    return _signal.asReadonly();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvc3JjL3V0aWxzL3NpZ25hbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUVSLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUd2QixNQUFNLFVBQVUsY0FBYyxDQUFJLFVBQXlCO0lBQ3pELElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxPQUFPLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNyQyxPQUFRLFVBQXNCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQVNELE1BQU0sVUFBVSxVQUFVLENBQ3hCLE1BQTBCLEVBQzFCLFNBQWtCO0lBRWxCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN0RCxNQUFNLE9BQU8sR0FBc0IsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTdELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBRUgsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDeEIsUUFBUSxFQUFFLENBQUM7SUFDYixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZXN0cm95UmVmLFxuICBpbmplY3QsXG4gIGlzU2lnbmFsLFxuICBTaWduYWwsXG4gIHNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2lnbmFsTGlrZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFNpZ25hbExpa2U8VD4oc2lnbmFsTGlrZTogU2lnbmFsTGlrZTxUPik6IFQge1xuICBpZiAoaXNTaWduYWwoc2lnbmFsTGlrZSkpIHtcbiAgICByZXR1cm4gc2lnbmFsTGlrZSgpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzaWduYWxMaWtlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIChzaWduYWxMaWtlIGFzICgpID0+IFQpKCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmFsTGlrZTtcbn1cblxudHlwZSBUZWFyZG93bkZuID0gKCkgPT4gdm9pZDtcblxudHlwZSBIYXNoYnJvd25TaWduYWw8VD4gPSB7XG4gICgpOiBUO1xuICBzdWJzY3JpYmUob25DaGFuZ2U6IChuZXdWYWx1ZTogVCkgPT4gdm9pZCk6IFRlYXJkb3duRm47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9OZ1NpZ25hbDxUPihcbiAgc291cmNlOiBIYXNoYnJvd25TaWduYWw8VD4sXG4gIGRlYnVnTmFtZT86IHN0cmluZyxcbik6IFNpZ25hbDxUPiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IG9wdGlvbnMgPSBkZWJ1Z05hbWUgPyB7IGRlYnVnTmFtZSB9IDogdW5kZWZpbmVkO1xuICBjb25zdCBfc2lnbmFsOiBXcml0YWJsZVNpZ25hbDxUPiA9IHNpZ25hbChzb3VyY2UoKSwgb3B0aW9ucyk7XG5cbiAgY29uc3QgdGVhcmRvd24gPSBzb3VyY2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgIF9zaWduYWwuc2V0KHZhbHVlKTtcbiAgfSk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgIHRlYXJkb3duKCk7XG4gIH0pO1xuXG4gIHJldHVybiBfc2lnbmFsLmFzUmVhZG9ubHkoKTtcbn1cbiJdfQ==","export const TAG_NAME_REGISTRY = Symbol('ɵtagNameRegistry');\nexport const getTagNameRegistry = (message) => {\n    if (TAG_NAME_REGISTRY in message) {\n        return message[TAG_NAME_REGISTRY];\n    }\n    return undefined;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktY2hhdC5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9zcmMvdXRpbHMvdWktY2hhdC5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBZ0I1RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUNoQyxPQUFpRCxFQUNwQixFQUFFO0lBQy9CLElBQUksaUJBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDakMsT0FBTyxPQUFPLENBQUMsaUJBQWlCLENBQW9CLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYXQsIHMgfSBmcm9tICdAaGFzaGJyb3duYWkvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBUQUdfTkFNRV9SRUdJU1RSWSA9IFN5bWJvbCgnybV0YWdOYW1lUmVnaXN0cnknKTtcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFRhZ05hbWVSZWdpc3RyeSA9IHtcbiAgW3RhZ05hbWU6IHN0cmluZ106IHtcbiAgICBwcm9wczogUmVjb3JkPHN0cmluZywgcy5IYXNoYnJvd25UeXBlPjtcbiAgICBjb21wb25lbnQ6IFR5cGU8b2JqZWN0PjtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFJlbmRlcmFibGVNZXNzYWdlID0ge1xuICBbVEFHX05BTUVfUkVHSVNUUlldOiBUYWdOYW1lUmVnaXN0cnk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGFnTmFtZVJlZ2lzdHJ5ID0gKFxuICBtZXNzYWdlOiBDaGF0Lk1lc3NhZ2U8VWlDaGF0U2NoZW1hLCBDaGF0LkFueVRvb2w+LFxuKTogVGFnTmFtZVJlZ2lzdHJ5IHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKFRBR19OQU1FX1JFR0lTVFJZIGluIG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gbWVzc2FnZVtUQUdfTkFNRV9SRUdJU1RSWV0gYXMgVGFnTmFtZVJlZ2lzdHJ5O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpQ2hhdFNjaGVtYUNvbXBvbmVudCB7XG4gICR0YWc6IHN0cmluZztcbiAgJGNoaWxkcmVuOiBzdHJpbmcgfCBVaUNoYXRTY2hlbWFDb21wb25lbnRbXTtcbiAgJHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVaUNoYXRTY2hlbWEge1xuICB1aTogVWlDaGF0U2NoZW1hQ29tcG9uZW50W107XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBVaUFzc2lzdGFudE1lc3NhZ2U8VG9vbHMgZXh0ZW5kcyBDaGF0LkFueVRvb2wgPSBDaGF0LkFueVRvb2w+ID1cbiAgQ2hhdC5Bc3Npc3RhbnRNZXNzYWdlPFVpQ2hhdFNjaGVtYSwgVG9vbHM+ICYge1xuICAgIFtUQUdfTkFNRV9SRUdJU1RSWV06IFRhZ05hbWVSZWdpc3RyeTtcbiAgfTtcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFVpVXNlck1lc3NhZ2UgPSBDaGF0LlVzZXJNZXNzYWdlO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgVWlFcnJvck1lc3NhZ2UgPSBDaGF0LkVycm9yTWVzc2FnZTtcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFVpQ2hhdE1lc3NhZ2U8VG9vbHMgZXh0ZW5kcyBDaGF0LkFueVRvb2wgPSBDaGF0LkFueVRvb2w+ID1cbiAgfCBVaUFzc2lzdGFudE1lc3NhZ2U8VG9vbHM+XG4gIHwgVWlVc2VyTWVzc2FnZVxuICB8IFVpRXJyb3JNZXNzYWdlO1xuIl19","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable @angular-eslint/component-selector */\nimport { ApplicationRef, Component, computed, inject, input, ViewContainerRef, } from '@angular/core';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { getTagNameRegistry, } from '../utils';\nimport * as i0 from \"@angular/core\";\n/**\n * Renders messages generated by the assistant from uiChatResource.\n *\n * @public\n * @example\n *\n * ```html\n * <hb-render-message [message]=\"message\" />\n * ```\n */\nexport class RenderMessageComponent {\n    message = input.required(...(ngDevMode ? [{ debugName: \"message\" }] : []));\n    /**\n     * @internal\n     */\n    appRef = inject(ApplicationRef);\n    /**\n     * @internal\n     */\n    content = computed(() => this.message().content?.ui ?? [], ...(ngDevMode ? [{ debugName: \"content\" }] : []));\n    /**\n     * @internal\n     */\n    tagNameRegistry = computed(() => getTagNameRegistry(this.message()), ...(ngDevMode ? [{ debugName: \"tagNameRegistry\" }] : []));\n    /**\n     * @internal\n     */\n    viewContainerRef = inject(ViewContainerRef);\n    /**\n     * @internal\n     */\n    rootNodesWeakMap = new WeakMap();\n    /**\n     * @internal\n     */\n    embeddedViewsWeakMap = new WeakMap();\n    /**\n     * @internal\n     */\n    getTagComponent(tagName) {\n        return this.tagNameRegistry()?.[tagName]?.component ?? null;\n    }\n    /**\n     * @internal\n     */\n    getEmbeddedView(tpl) {\n        if (this.embeddedViewsWeakMap.has(tpl)) {\n            return this.embeddedViewsWeakMap.get(tpl);\n        }\n        const view = this.viewContainerRef.createEmbeddedView(tpl);\n        this.embeddedViewsWeakMap.set(tpl, view);\n        return view;\n    }\n    /**\n     * @internal\n     */\n    getRootNodes(tpl) {\n        if (this.rootNodesWeakMap.has(tpl)) {\n            return this.rootNodesWeakMap.get(tpl);\n        }\n        const view = this.getEmbeddedView(tpl);\n        const nodes = [view.rootNodes];\n        this.rootNodesWeakMap.set(tpl, nodes);\n        return nodes;\n    }\n    /**\n     * @internal\n     */\n    isTextNode(node) {\n        return typeof node.$children === 'string';\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: RenderMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.4\", type: RenderMessageComponent, isStandalone: true, selector: \"hb-render-message\", inputs: { message: { classPropertyName: \"message\", publicName: \"message\", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `\n    <ng-template #nodeTemplateRef let-node=\"node\">\n      <ng-template #childrenTemplateRef>\n        @if (isTextNode(node)) {\n          {{ node.$children }}\n        } @else {\n          @for (child of node.$children; track $index) {\n            <ng-container\n              *ngTemplateOutlet=\"nodeTemplateRef; context: { node: child }\"\n            />\n          }\n        }\n      </ng-template>\n\n      @if (node) {\n        <ng-container\n          *ngComponentOutlet=\"\n            getTagComponent(node.$tag);\n            inputs: node.$props;\n            content: getRootNodes(childrenTemplateRef)\n          \"\n        ></ng-container>\n      }\n    </ng-template>\n\n    @if (content()) {\n      @for (node of content(); track $index) {\n        <ng-template\n          [ngTemplateOutlet]=\"nodeTemplateRef\"\n          [ngTemplateOutletContext]=\"node\"\n        >\n        </ng-template>\n        <ng-container\n          *ngTemplateOutlet=\"nodeTemplateRef; context: { node: node }\"\n        />\n      }\n    }\n  `, isInline: true, dependencies: [{ kind: \"directive\", type: NgComponentOutlet, selector: \"[ngComponentOutlet]\", inputs: [\"ngComponentOutlet\", \"ngComponentOutletInputs\", \"ngComponentOutletInjector\", \"ngComponentOutletEnvironmentInjector\", \"ngComponentOutletContent\", \"ngComponentOutletNgModule\", \"ngComponentOutletNgModuleFactory\"], exportAs: [\"ngComponentOutlet\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: RenderMessageComponent, decorators: [{\n            type: Component,\n            args: [{\n                    selector: 'hb-render-message',\n                    imports: [NgComponentOutlet, NgTemplateOutlet],\n                    template: `\n    <ng-template #nodeTemplateRef let-node=\"node\">\n      <ng-template #childrenTemplateRef>\n        @if (isTextNode(node)) {\n          {{ node.$children }}\n        } @else {\n          @for (child of node.$children; track $index) {\n            <ng-container\n              *ngTemplateOutlet=\"nodeTemplateRef; context: { node: child }\"\n            />\n          }\n        }\n      </ng-template>\n\n      @if (node) {\n        <ng-container\n          *ngComponentOutlet=\"\n            getTagComponent(node.$tag);\n            inputs: node.$props;\n            content: getRootNodes(childrenTemplateRef)\n          \"\n        ></ng-container>\n      }\n    </ng-template>\n\n    @if (content()) {\n      @for (node of content(); track $index) {\n        <ng-template\n          [ngTemplateOutlet]=\"nodeTemplateRef\"\n          [ngTemplateOutletContext]=\"node\"\n        >\n        </ng-template>\n        <ng-container\n          *ngTemplateOutlet=\"nodeTemplateRef; context: { node: node }\"\n        />\n      }\n    }\n  `,\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLW1lc3NhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9zcmMvY29tcG9uZW50cy9yZW5kZXItbWVzc2FnZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELDZEQUE2RDtBQUM3RCx1REFBdUQ7QUFDdkQsT0FBTyxFQUNMLGNBQWMsRUFDZCxTQUFTLEVBQ1QsUUFBUSxFQUVSLE1BQU0sRUFDTixLQUFLLEVBRUwsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFDTCxrQkFBa0IsR0FHbkIsTUFBTSxVQUFVLENBQUM7O0FBRWxCOzs7Ozs7Ozs7R0FTRztBQTJDSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxrREFBMkIsQ0FBQztJQUNwRDs7T0FFRztJQUNILE1BQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFaEM7O09BRUc7SUFDSCxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsbURBQUMsQ0FBQztJQUUzRDs7T0FFRztJQUNILGVBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLDJEQUFDLENBQUM7SUFFckU7O09BRUc7SUFDSCxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU1Qzs7T0FFRztJQUNILGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUEyQixDQUFDO0lBRTFEOztPQUVHO0lBQ0gsb0JBQW9CLEdBQUcsSUFBSSxPQUFPLEVBQTBDLENBQUM7SUFFN0U7O09BRUc7SUFDSCxlQUFlLENBQUMsT0FBZTtRQUM3QixPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUM7SUFDOUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZSxDQUFDLEdBQXFCO1FBQ25DLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQztRQUM3QyxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLEdBQXFCO1FBQ2hDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQztRQUN6QyxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxJQUEyQjtRQUNwQyxPQUFPLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUM7SUFDNUMsQ0FBQzt1R0F2RVUsc0JBQXNCOzJGQUF0QixzQkFBc0Isc05BdkN2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDVCw0REF0Q1MsaUJBQWlCLDZUQUFFLGdCQUFnQjs7MkZBd0NsQyxzQkFBc0I7a0JBMUNsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDO29CQUM5QyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ1Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG5pbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZixcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NvbXBvbmVudE91dGxldCwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBnZXRUYWdOYW1lUmVnaXN0cnksXG4gIFVpQXNzaXN0YW50TWVzc2FnZSxcbiAgVWlDaGF0U2NoZW1hQ29tcG9uZW50LFxufSBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogUmVuZGVycyBtZXNzYWdlcyBnZW5lcmF0ZWQgYnkgdGhlIGFzc2lzdGFudCBmcm9tIHVpQ2hhdFJlc291cmNlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgaHRtbFxuICogPGhiLXJlbmRlci1tZXNzYWdlIFttZXNzYWdlXT1cIm1lc3NhZ2VcIiAvPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hiLXJlbmRlci1tZXNzYWdlJyxcbiAgaW1wb3J0czogW05nQ29tcG9uZW50T3V0bGV0LCBOZ1RlbXBsYXRlT3V0bGV0XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgI25vZGVUZW1wbGF0ZVJlZiBsZXQtbm9kZT1cIm5vZGVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY2hpbGRyZW5UZW1wbGF0ZVJlZj5cbiAgICAgICAgQGlmIChpc1RleHROb2RlKG5vZGUpKSB7XG4gICAgICAgICAge3sgbm9kZS4kY2hpbGRyZW4gfX1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgQGZvciAoY2hpbGQgb2Ygbm9kZS4kY2hpbGRyZW47IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm5vZGVUZW1wbGF0ZVJlZjsgY29udGV4dDogeyBub2RlOiBjaGlsZCB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICBAaWYgKG5vZGUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cIlxuICAgICAgICAgICAgZ2V0VGFnQ29tcG9uZW50KG5vZGUuJHRhZyk7XG4gICAgICAgICAgICBpbnB1dHM6IG5vZGUuJHByb3BzO1xuICAgICAgICAgICAgY29udGVudDogZ2V0Um9vdE5vZGVzKGNoaWxkcmVuVGVtcGxhdGVSZWYpXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgfVxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICBAaWYgKGNvbnRlbnQoKSkge1xuICAgICAgQGZvciAobm9kZSBvZiBjb250ZW50KCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJub2RlXCJcbiAgICAgICAgPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub2RlVGVtcGxhdGVSZWY7IGNvbnRleHQ6IHsgbm9kZTogbm9kZSB9XCJcbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICB9XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFJlbmRlck1lc3NhZ2VDb21wb25lbnQge1xuICBtZXNzYWdlID0gaW5wdXQucmVxdWlyZWQ8VWlBc3Npc3RhbnRNZXNzYWdlPGFueT4+KCk7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFwcFJlZiA9IGluamVjdChBcHBsaWNhdGlvblJlZik7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29udGVudCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubWVzc2FnZSgpLmNvbnRlbnQ/LnVpID8/IFtdKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICB0YWdOYW1lUmVnaXN0cnkgPSBjb21wdXRlZCgoKSA9PiBnZXRUYWdOYW1lUmVnaXN0cnkodGhpcy5tZXNzYWdlKCkpKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJvb3ROb2Rlc1dlYWtNYXAgPSBuZXcgV2Vha01hcDxUZW1wbGF0ZVJlZjxhbnk+LCBhbnlbXT4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbWJlZGRlZFZpZXdzV2Vha01hcCA9IG5ldyBXZWFrTWFwPFRlbXBsYXRlUmVmPGFueT4sIEVtYmVkZGVkVmlld1JlZjxhbnk+PigpO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFRhZ0NvbXBvbmVudCh0YWdOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy50YWdOYW1lUmVnaXN0cnkoKT8uW3RhZ05hbWVdPy5jb21wb25lbnQgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldEVtYmVkZGVkVmlldyh0cGw6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAodGhpcy5lbWJlZGRlZFZpZXdzV2Vha01hcC5oYXModHBsKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW1iZWRkZWRWaWV3c1dlYWtNYXAuZ2V0KHRwbCkhO1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRwbCk7XG4gICAgdGhpcy5lbWJlZGRlZFZpZXdzV2Vha01hcC5zZXQodHBsLCB2aWV3KTtcbiAgICByZXR1cm4gdmlldztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFJvb3ROb2Rlcyh0cGw6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAodGhpcy5yb290Tm9kZXNXZWFrTWFwLmhhcyh0cGwpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290Tm9kZXNXZWFrTWFwLmdldCh0cGwpITtcbiAgICB9XG5cbiAgICBjb25zdCB2aWV3ID0gdGhpcy5nZXRFbWJlZGRlZFZpZXcodHBsKTtcbiAgICBjb25zdCBub2RlcyA9IFt2aWV3LnJvb3ROb2Rlc107XG4gICAgdGhpcy5yb290Tm9kZXNXZWFrTWFwLnNldCh0cGwsIG5vZGVzKTtcbiAgICByZXR1cm4gbm9kZXM7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBpc1RleHROb2RlKG5vZGU6IFVpQ2hhdFNjaGVtYUNvbXBvbmVudCkge1xuICAgIHJldHVybiB0eXBlb2Ygbm9kZS4kY2hpbGRyZW4gPT09ICdzdHJpbmcnO1xuICB9XG59XG4iXX0=","/* eslint-disable @angular-eslint/component-class-suffix */\n/* eslint-disable no-useless-escape */\n/* eslint-disable @angular-eslint/component-selector */\n/* eslint-disable @angular-eslint/directive-selector */\nimport { ChangeDetectionStrategy, Component, computed, contentChild, Directive, input, output, TemplateRef, ViewEncapsulation, } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { prepareMagicText, } from '@hashbrownai/core';\nimport * as i0 from \"@angular/core\";\nexport class MagicTextRenderLink {\n    template;\n    constructor(template) {\n        this.template = template;\n    }\n    static ngTemplateContextGuard(dir, context) {\n        return true;\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: MagicTextRenderLink, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.4\", type: MagicTextRenderLink, isStandalone: true, selector: \"ng-template[hbMagicTextRenderLink]\", ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: MagicTextRenderLink, decorators: [{\n            type: Directive,\n            args: [{ selector: 'ng-template[hbMagicTextRenderLink]' }]\n        }], ctorParameters: () => [{ type: i0.TemplateRef }] });\nexport class MagicTextRenderText {\n    template;\n    constructor(template) {\n        this.template = template;\n    }\n    static ngTemplateContextGuard(dir, context) {\n        return true;\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: MagicTextRenderText, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.4\", type: MagicTextRenderText, isStandalone: true, selector: \"ng-template[hbMagicTextRenderText]\", ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: MagicTextRenderText, decorators: [{\n            type: Directive,\n            args: [{ selector: 'ng-template[hbMagicTextRenderText]' }]\n        }], ctorParameters: () => [{ type: i0.TemplateRef }] });\n/** @public */\nexport class MagicTextRenderCitation {\n    template;\n    constructor(template) {\n        this.template = template;\n    }\n    static ngTemplateContextGuard(dir, context) {\n        return true;\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: MagicTextRenderCitation, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.4\", type: MagicTextRenderCitation, isStandalone: true, selector: \"ng-template[hbMagicTextRenderCitation]\", ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: MagicTextRenderCitation, decorators: [{\n            type: Directive,\n            args: [{ selector: 'ng-template[hbMagicTextRenderCitation]' }]\n        }], ctorParameters: () => [{ type: i0.TemplateRef }] });\n/** @public */\nexport class MagicTextRenderWhitespace {\n    template;\n    constructor(template) {\n        this.template = template;\n    }\n    static ngTemplateContextGuard(dir, context) {\n        return true;\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: MagicTextRenderWhitespace, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.4\", type: MagicTextRenderWhitespace, isStandalone: true, selector: \"ng-template[hbMagicTextRenderWhitespace]\", ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: MagicTextRenderWhitespace, decorators: [{\n            type: Directive,\n            args: [{ selector: 'ng-template[hbMagicTextRenderWhitespace]' }]\n        }], ctorParameters: () => [{ type: i0.TemplateRef }] });\n/** @public */\nexport class MagicText {\n    text = input.required(...(ngDevMode ? [{ debugName: \"text\" }] : []));\n    defaultLinkTarget = input('_blank', ...(ngDevMode ? [{ debugName: \"defaultLinkTarget\" }] : []));\n    defaultLinkRel = input('noopener noreferrer', ...(ngDevMode ? [{ debugName: \"defaultLinkRel\" }] : []));\n    citations = input(...(ngDevMode ? [undefined, { debugName: \"citations\" }] : []));\n    linkClick = output();\n    citationClick = output();\n    linkTemplate = contentChild(MagicTextRenderLink, ...(ngDevMode ? [{ debugName: \"linkTemplate\" }] : []));\n    textTemplate = contentChild(MagicTextRenderText, ...(ngDevMode ? [{ debugName: \"textTemplate\" }] : []));\n    citationTemplate = contentChild(MagicTextRenderCitation, ...(ngDevMode ? [{ debugName: \"citationTemplate\" }] : []));\n    whitespaceTemplate = contentChild(MagicTextRenderWhitespace, ...(ngDevMode ? [{ debugName: \"whitespaceTemplate\" }] : []));\n    fragments = computed(() => {\n        const fragments = prepareMagicText(this.text()).fragments;\n        return fragments.map((fragment, index, all) => {\n            if (fragment.type !== 'text') {\n                return fragment;\n            }\n            const next = all[index + 1];\n            const prev = all[index - 1];\n            // Keep natural spacing, but strip edge spaces that would create gaps\n            // around tight footnote citations.\n            let text = fragment.text.replace(/[\\u00a0\\u202f]/g, ' ');\n            if (next?.type === 'citation') {\n                text = text.replace(/\\s+$/, '');\n            }\n            if (prev?.type === 'citation') {\n                text = text.replace(/^\\s+/, '');\n            }\n            return { ...fragment, text };\n        });\n    }, ...(ngDevMode ? [{ debugName: \"fragments\" }] : []));\n    citationLookup = computed(() => {\n        const map = new Map();\n        for (const citation of this.citations() ?? []) {\n            if (!citation) {\n                continue;\n            }\n            const key = citation.id?.trim?.() ?? '';\n            const url = citation.url?.trim?.() ?? '';\n            if (key && url) {\n                map.set(key, url);\n            }\n        }\n        return map;\n    }, ...(ngDevMode ? [{ debugName: \"citationLookup\" }] : []));\n    whitespaceContext(fragment, position, index) {\n        const fragments = this.fragments();\n        const previous = fragments[index - 1];\n        let render = position === 'before'\n            ? fragment.renderWhitespace.before\n            : fragment.renderWhitespace.after;\n        if (position === 'before' && index === 0) {\n            render = false;\n        }\n        const next = fragments[index + 1];\n        const hasLeadingWhitespace = (frag) => frag?.type === 'text' && /^\\s/.test(frag.text);\n        const hasTrailingWhitespace = (frag) => frag?.type === 'text' && /\\s$/.test(frag.text);\n        if (position === 'before') {\n            // If the surrounding fragments already carry whitespace in their text,\n            // avoid rendering an extra spacer node.\n            const hasWhitespaceInText = hasTrailingWhitespace(previous) || hasLeadingWhitespace(fragment);\n            render = render && !hasWhitespaceInText;\n        }\n        if (position === 'after') {\n            const hasWhitespaceInText = hasTrailingWhitespace(fragment) || hasLeadingWhitespace(next);\n            render = render && !hasWhitespaceInText;\n        }\n        if (position === 'before' && fragment.type === 'citation') {\n            render = false;\n        }\n        // Footnote-style citations should sit tight against the preceding text.\n        if (position === 'after' && next?.type === 'citation') {\n            render = false;\n        }\n        const startsTight = (frag) => frag?.type === 'text' && /^[,.;:!?|\\)\\]]/.test(frag.text.trim());\n        const endsWithNoGap = (frag) => frag?.type === 'text' && /([\\(\\|])$/.test(frag.text.trim());\n        if (position === 'before' && startsTight(fragment)) {\n            render = false;\n        }\n        if (position === 'after' && startsTight(next)) {\n            render = false;\n        }\n        if (position === 'after' && endsWithNoGap(fragment)) {\n            render = false;\n        }\n        return {\n            $implicit: { position, render, fragment },\n            position,\n            render,\n            fragment,\n            index,\n        };\n    }\n    templateContext(node) {\n        return { $implicit: node, node };\n    }\n    toTextNode(fragment) {\n        const text = this.normalizeFragmentText(fragment);\n        return {\n            text,\n            tags: fragment.tags,\n            state: fragment.state,\n            isStatic: fragment.isStatic,\n            renderWhitespace: fragment.renderWhitespace,\n            isCode: fragment.isCode,\n            fragment,\n        };\n    }\n    normalizeFragmentText(fragment) {\n        // Normalize only non-breaking spaces; keep the original whitespace intact\n        // so we don't double-insert gaps alongside rendered spacer nodes.\n        return fragment.text.replace(/[\\u00a0\\u202f]/g, ' ');\n    }\n    toLinkNode(fragment) {\n        const link = fragment.marks.link;\n        if (!link) {\n            throw new Error('Link fragment is missing link metadata.');\n        }\n        return {\n            ...this.toTextNode(fragment),\n            href: link.href,\n            title: link.title,\n            ariaLabel: link.ariaLabel,\n            rel: link.rel,\n            target: link.target,\n            link,\n        };\n    }\n    toCitationNode(fragment) {\n        const url = this.citationLookup().get(String(fragment.citation.id));\n        const text = fragment.text.trim();\n        return {\n            citation: { ...fragment.citation, url },\n            text,\n            state: fragment.state,\n            isStatic: fragment.isStatic,\n            renderWhitespace: fragment.renderWhitespace,\n            fragment,\n        };\n    }\n    handleLinkClick(event, fragment) {\n        const href = fragment.marks.link?.href ?? '';\n        this.linkClick.emit({ mouseEvent: event, href, fragment });\n    }\n    handleCitationClick(event, context) {\n        this.citationClick.emit({\n            mouseEvent: event,\n            citation: { id: context.citation.id, url: context.citation.url },\n            fragment: context.fragment,\n        });\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: MagicText, deps: [], target: i0.ɵɵFactoryTarget.Component });\n    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.4\", type: MagicText, isStandalone: true, selector: \"hb-magic-text\", inputs: { text: { classPropertyName: \"text\", publicName: \"text\", isSignal: true, isRequired: true, transformFunction: null }, defaultLinkTarget: { classPropertyName: \"defaultLinkTarget\", publicName: \"defaultLinkTarget\", isSignal: true, isRequired: false, transformFunction: null }, defaultLinkRel: { classPropertyName: \"defaultLinkRel\", publicName: \"defaultLinkRel\", isSignal: true, isRequired: false, transformFunction: null }, citations: { classPropertyName: \"citations\", publicName: \"citations\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { linkClick: \"linkClick\", citationClick: \"citationClick\" }, queries: [{ propertyName: \"linkTemplate\", first: true, predicate: MagicTextRenderLink, descendants: true, isSignal: true }, { propertyName: \"textTemplate\", first: true, predicate: MagicTextRenderText, descendants: true, isSignal: true }, { propertyName: \"citationTemplate\", first: true, predicate: MagicTextRenderCitation, descendants: true, isSignal: true }, { propertyName: \"whitespaceTemplate\", first: true, predicate: MagicTextRenderWhitespace, descendants: true, isSignal: true }], ngImport: i0, template: `\n    <ng-template\n      #defaultWhitespace\n      let-fragment=\"fragment\"\n      let-position=\"position\"\n      let-render=\"render\"\n    >\n      @if (render) {\n        <span\n          class=\"hb-space\"\n          [class.hb-space--before]=\"position === 'before'\"\n          [class.hb-space--after]=\"position === 'after'\"\n          aria-hidden=\"true\"\n          >{{ ' ' }}</span\n        >\n      }\n    </ng-template>\n\n    <ng-template #defaultText let-node=\"node\">\n      <span\n        class=\"hb-text\"\n        [class.hb-text--code]=\"node.isCode\"\n        [class.hb-text--strong]=\"node.tags.includes('strong')\"\n        [class.hb-text--em]=\"node.tags.includes('em')\"\n        [attr.data-fragment-state]=\"node.state\"\n        animate.enter=\"hb-text--enter\"\n        >{{ node.text }}</span\n      >\n    </ng-template>\n\n    <ng-template #defaultLink let-node=\"node\">\n      <a\n        class=\"hb-link\"\n        [attr.href]=\"node.href\"\n        [attr.title]=\"node.title || null\"\n        [attr.aria-label]=\"node.ariaLabel || null\"\n        [attr.rel]=\"node.rel || defaultLinkRel()\"\n        [attr.target]=\"node.target || defaultLinkTarget()\"\n        data-fragment-kind=\"text\"\n        [attr.data-fragment-state]=\"node.state\"\n        animate.enter=\"hb-text--enter\"\n        (click)=\"handleLinkClick($event, node.fragment)\"\n      >\n        <ng-container\n          *ngTemplateOutlet=\"\n            textTemplate()?.template ?? defaultText;\n            context: templateContext(toTextNode(node.fragment))\n          \"\n        />\n      </a>\n    </ng-template>\n\n    <ng-template #defaultCitation let-node=\"node\">\n      <span animate.enter=\"hb-text--enter\">\n        @if (node.citation.url) {\n          <a\n            class=\"hb-citation\"\n            role=\"doc-noteref\"\n            [attr.href]=\"node.citation.url\"\n            [attr.rel]=\"defaultLinkRel()\"\n            [attr.target]=\"defaultLinkTarget()\"\n            data-fragment-kind=\"citation\"\n            [attr.data-fragment-state]=\"node.state\"\n            (click)=\"handleCitationClick($event, node)\"\n            >{{ node.text }}</a\n          >\n        } @else {\n          <button\n            type=\"button\"\n            class=\"hb-citation hb-citation-placeholder\"\n            role=\"doc-noteref\"\n            data-fragment-kind=\"citation\"\n            [attr.data-fragment-state]=\"node.state\"\n            (click)=\"handleCitationClick($event, node)\"\n          >\n            {{ node.text }}\n          </button>\n        }\n      </span>\n    </ng-template>\n\n    @for (fragment of fragments(); track fragment.key; let i = $index) {\n      <ng-container\n        *ngTemplateOutlet=\"\n          whitespaceTemplate()?.template ?? defaultWhitespace;\n          context: whitespaceContext(fragment, 'before', i)\n        \"\n      />\n\n      <span\n        class=\"hb-fragment\"\n        [attr.data-fragment-kind]=\"fragment.type\"\n        [attr.data-fragment-state]=\"fragment.state\"\n        animate.enter=\"hb-text--enter\"\n      >\n        @if (fragment.type === 'text') {\n          @if (fragment.marks.link) {\n            <ng-container\n              *ngTemplateOutlet=\"\n                linkTemplate()?.template ?? defaultLink;\n                context: templateContext(toLinkNode(fragment))\n              \"\n            />\n          } @else {\n            <ng-container\n              *ngTemplateOutlet=\"\n                textTemplate()?.template ?? defaultText;\n                context: templateContext(toTextNode(fragment))\n              \"\n            />\n          }\n        } @else {\n          <ng-container\n            *ngTemplateOutlet=\"\n              citationTemplate()?.template ?? defaultCitation;\n              context: templateContext(toCitationNode(fragment))\n            \"\n          />\n        }\n      </span>\n\n      <ng-container\n        *ngTemplateOutlet=\"\n          whitespaceTemplate()?.template ?? defaultWhitespace;\n          context: whitespaceContext(fragment, 'after', i)\n        \"\n      />\n    }\n  `, isInline: true, styles: [\".hb-text--code{font-family:monospace}.hb-text--strong{font-weight:700}.hb-text--em{font-style:italic}.hb-text--enter{animation:enter .35s ease-in-out}@keyframes enter{0%{opacity:0}to{opacity:1}}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: MagicText, decorators: [{\n            type: Component,\n            args: [{ selector: 'hb-magic-text', imports: [NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: `\n    <ng-template\n      #defaultWhitespace\n      let-fragment=\"fragment\"\n      let-position=\"position\"\n      let-render=\"render\"\n    >\n      @if (render) {\n        <span\n          class=\"hb-space\"\n          [class.hb-space--before]=\"position === 'before'\"\n          [class.hb-space--after]=\"position === 'after'\"\n          aria-hidden=\"true\"\n          >{{ ' ' }}</span\n        >\n      }\n    </ng-template>\n\n    <ng-template #defaultText let-node=\"node\">\n      <span\n        class=\"hb-text\"\n        [class.hb-text--code]=\"node.isCode\"\n        [class.hb-text--strong]=\"node.tags.includes('strong')\"\n        [class.hb-text--em]=\"node.tags.includes('em')\"\n        [attr.data-fragment-state]=\"node.state\"\n        animate.enter=\"hb-text--enter\"\n        >{{ node.text }}</span\n      >\n    </ng-template>\n\n    <ng-template #defaultLink let-node=\"node\">\n      <a\n        class=\"hb-link\"\n        [attr.href]=\"node.href\"\n        [attr.title]=\"node.title || null\"\n        [attr.aria-label]=\"node.ariaLabel || null\"\n        [attr.rel]=\"node.rel || defaultLinkRel()\"\n        [attr.target]=\"node.target || defaultLinkTarget()\"\n        data-fragment-kind=\"text\"\n        [attr.data-fragment-state]=\"node.state\"\n        animate.enter=\"hb-text--enter\"\n        (click)=\"handleLinkClick($event, node.fragment)\"\n      >\n        <ng-container\n          *ngTemplateOutlet=\"\n            textTemplate()?.template ?? defaultText;\n            context: templateContext(toTextNode(node.fragment))\n          \"\n        />\n      </a>\n    </ng-template>\n\n    <ng-template #defaultCitation let-node=\"node\">\n      <span animate.enter=\"hb-text--enter\">\n        @if (node.citation.url) {\n          <a\n            class=\"hb-citation\"\n            role=\"doc-noteref\"\n            [attr.href]=\"node.citation.url\"\n            [attr.rel]=\"defaultLinkRel()\"\n            [attr.target]=\"defaultLinkTarget()\"\n            data-fragment-kind=\"citation\"\n            [attr.data-fragment-state]=\"node.state\"\n            (click)=\"handleCitationClick($event, node)\"\n            >{{ node.text }}</a\n          >\n        } @else {\n          <button\n            type=\"button\"\n            class=\"hb-citation hb-citation-placeholder\"\n            role=\"doc-noteref\"\n            data-fragment-kind=\"citation\"\n            [attr.data-fragment-state]=\"node.state\"\n            (click)=\"handleCitationClick($event, node)\"\n          >\n            {{ node.text }}\n          </button>\n        }\n      </span>\n    </ng-template>\n\n    @for (fragment of fragments(); track fragment.key; let i = $index) {\n      <ng-container\n        *ngTemplateOutlet=\"\n          whitespaceTemplate()?.template ?? defaultWhitespace;\n          context: whitespaceContext(fragment, 'before', i)\n        \"\n      />\n\n      <span\n        class=\"hb-fragment\"\n        [attr.data-fragment-kind]=\"fragment.type\"\n        [attr.data-fragment-state]=\"fragment.state\"\n        animate.enter=\"hb-text--enter\"\n      >\n        @if (fragment.type === 'text') {\n          @if (fragment.marks.link) {\n            <ng-container\n              *ngTemplateOutlet=\"\n                linkTemplate()?.template ?? defaultLink;\n                context: templateContext(toLinkNode(fragment))\n              \"\n            />\n          } @else {\n            <ng-container\n              *ngTemplateOutlet=\"\n                textTemplate()?.template ?? defaultText;\n                context: templateContext(toTextNode(fragment))\n              \"\n            />\n          }\n        } @else {\n          <ng-container\n            *ngTemplateOutlet=\"\n              citationTemplate()?.template ?? defaultCitation;\n              context: templateContext(toCitationNode(fragment))\n            \"\n          />\n        }\n      </span>\n\n      <ng-container\n        *ngTemplateOutlet=\"\n          whitespaceTemplate()?.template ?? defaultWhitespace;\n          context: whitespaceContext(fragment, 'after', i)\n        \"\n      />\n    }\n  `, encapsulation: ViewEncapsulation.None, styles: [\".hb-text--code{font-family:monospace}.hb-text--strong{font-weight:700}.hb-text--em{font-style:italic}.hb-text--enter{animation:enter .35s ease-in-out}@keyframes enter{0%{opacity:0}to{opacity:1}}\\n\"] }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFnaWMtdGV4dC1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL3NyYy9jb21wb25lbnRzL21hZ2ljLXRleHQtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJEQUEyRDtBQUMzRCxzQ0FBc0M7QUFDdEMsdURBQXVEO0FBQ3ZELHVEQUF1RDtBQUN2RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQU1MLGdCQUFnQixHQUNqQixNQUFNLG1CQUFtQixDQUFDOztBQWtFM0IsTUFBTSxPQUFPLG1CQUFtQjtJQUNUO0lBQXJCLFlBQXFCLFFBQWlEO1FBQWpELGFBQVEsR0FBUixRQUFRLENBQXlDO0lBQUcsQ0FBQztJQUUxRSxNQUFNLENBQUMsc0JBQXNCLENBQzNCLEdBQXdCLEVBQ3hCLE9BQWdCO1FBRWhCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt1R0FSVSxtQkFBbUI7MkZBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFEL0IsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxvQ0FBb0MsRUFBRTs7QUFhN0QsTUFBTSxPQUFPLG1CQUFtQjtJQUNUO0lBQXJCLFlBQXFCLFFBQWlEO1FBQWpELGFBQVEsR0FBUixRQUFRLENBQXlDO0lBQUcsQ0FBQztJQUUxRSxNQUFNLENBQUMsc0JBQXNCLENBQzNCLEdBQXdCLEVBQ3hCLE9BQWdCO1FBRWhCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt1R0FSVSxtQkFBbUI7MkZBQW5CLG1CQUFtQjs7MkZB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnSVQsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtY2xhc3Mtc3VmZml4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvciAqL1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGNvbnRlbnRDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICB0eXBlIE1hZ2ljVGV4dEZyYWdtZW50LFxuICB0eXBlIE1hZ2ljVGV4dEZyYWdtZW50Q2l0YXRpb24sXG4gIHR5cGUgTWFnaWNUZXh0RnJhZ21lbnRUZXh0LFxuICB0eXBlIE1hZ2ljVGV4dEhhc1doaXRlc3BhY2UsXG4gIHR5cGUgTWFnaWNUZXh0VGFnLFxuICBwcmVwYXJlTWFnaWNUZXh0LFxufSBmcm9tICdAaGFzaGJyb3duYWkvY29yZSc7XG5pbXBvcnQgeyBQcmV0dGlmeSB9IGZyb20gJy4uL3V0aWxzL3RzLWhlbHBlcnMnO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IHR5cGUgTWFnaWNUZXh0Q2l0YXRpb24gPSB7IGlkOiBzdHJpbmc7IHVybDogc3RyaW5nIH07XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBNYWdpY1RleHRMaW5rQ2xpY2tFdmVudCA9IHtcbiAgbW91c2VFdmVudDogTW91c2VFdmVudDtcbiAgaHJlZjogc3RyaW5nO1xuICBmcmFnbWVudDogTWFnaWNUZXh0RnJhZ21lbnRUZXh0O1xufTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIE1hZ2ljVGV4dENpdGF0aW9uQ2xpY2tFdmVudCA9IHtcbiAgbW91c2VFdmVudDogTW91c2VFdmVudDtcbiAgY2l0YXRpb246IHsgaWQ6IHN0cmluZzsgdXJsPzogc3RyaW5nIH07XG4gIGZyYWdtZW50OiBNYWdpY1RleHRGcmFnbWVudENpdGF0aW9uO1xufTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIE1hZ2ljVGV4dFdoaXRlc3BhY2VQb3NpdGlvbiA9ICdiZWZvcmUnIHwgJ2FmdGVyJztcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIE1hZ2ljVGV4dFdoaXRlc3BhY2VDb250ZXh0ID0ge1xuICBwb3NpdGlvbjogTWFnaWNUZXh0V2hpdGVzcGFjZVBvc2l0aW9uO1xuICByZW5kZXI6IGJvb2xlYW47XG4gIGZyYWdtZW50OiBNYWdpY1RleHRGcmFnbWVudDtcbn07XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBNYWdpY1RleHRSZW5kZXJUZXh0Q29udGV4dCA9IHtcbiAgdGV4dDogc3RyaW5nO1xuICB0YWdzOiBNYWdpY1RleHRUYWdbXTtcbiAgc3RhdGU6IE1hZ2ljVGV4dEZyYWdtZW50VGV4dFsnc3RhdGUnXTtcbiAgaXNTdGF0aWM6IGJvb2xlYW47XG4gIHJlbmRlcldoaXRlc3BhY2U6IE1hZ2ljVGV4dEhhc1doaXRlc3BhY2U7XG4gIGlzQ29kZTogYm9vbGVhbjtcbiAgZnJhZ21lbnQ6IE1hZ2ljVGV4dEZyYWdtZW50VGV4dDtcbn07XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBNYWdpY1RleHRSZW5kZXJMaW5rQ29udGV4dCA9IFByZXR0aWZ5PFxuICBNYWdpY1RleHRSZW5kZXJUZXh0Q29udGV4dCAmIHtcbiAgICBocmVmOiBzdHJpbmc7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgYXJpYUxhYmVsPzogc3RyaW5nO1xuICAgIHJlbD86IHN0cmluZztcbiAgICB0YXJnZXQ/OiBzdHJpbmc7XG4gICAgbGluazogTm9uTnVsbGFibGU8TWFnaWNUZXh0RnJhZ21lbnRUZXh0WydtYXJrcyddWydsaW5rJ10+O1xuICB9XG4+O1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGludGVyZmFjZSBNYWdpY1RleHRSZW5kZXJDaXRhdGlvbkNvbnRleHQge1xuICBjaXRhdGlvbjogeyBpZDogc3RyaW5nOyBudW1iZXI6IG51bWJlciB8IHN0cmluZzsgdXJsPzogc3RyaW5nIH07XG4gIHRleHQ6IHN0cmluZztcbiAgc3RhdGU6IE1hZ2ljVGV4dEZyYWdtZW50Q2l0YXRpb25bJ3N0YXRlJ107XG4gIGlzU3RhdGljOiBib29sZWFuO1xuICByZW5kZXJXaGl0ZXNwYWNlOiBNYWdpY1RleHRIYXNXaGl0ZXNwYWNlO1xuICBmcmFnbWVudDogTWFnaWNUZXh0RnJhZ21lbnRDaXRhdGlvbjtcbn1cblxudHlwZSAkSW1wbGljaXQ8VD4gPSB7ICRpbXBsaWNpdDogVCB9O1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtoYk1hZ2ljVGV4dFJlbmRlckxpbmtdJyB9KVxuZXhwb3J0IGNsYXNzIE1hZ2ljVGV4dFJlbmRlckxpbmsge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8TWFnaWNUZXh0UmVuZGVyTGlua0NvbnRleHQ+KSB7fVxuXG4gIHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKFxuICAgIGRpcjogTWFnaWNUZXh0UmVuZGVyTGluayxcbiAgICBjb250ZXh0OiB1bmtub3duLFxuICApOiBjb250ZXh0IGlzICRJbXBsaWNpdDxNYWdpY1RleHRSZW5kZXJMaW5rQ29udGV4dD4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2hiTWFnaWNUZXh0UmVuZGVyVGV4dF0nIH0pXG5leHBvcnQgY2xhc3MgTWFnaWNUZXh0UmVuZGVyVGV4dCB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxNYWdpY1RleHRSZW5kZXJUZXh0Q29udGV4dD4pIHt9XG5cbiAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoXG4gICAgZGlyOiBNYWdpY1RleHRSZW5kZXJUZXh0LFxuICAgIGNvbnRleHQ6IHVua25vd24sXG4gICk6IGNvbnRleHQgaXMgJEltcGxpY2l0PE1hZ2ljVGV4dFJlbmRlclRleHRDb250ZXh0PiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqIEBwdWJsaWMgKi9cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2hiTWFnaWNUZXh0UmVuZGVyQ2l0YXRpb25dJyB9KVxuZXhwb3J0IGNsYXNzIE1hZ2ljVGV4dFJlbmRlckNpdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPE1hZ2ljVGV4dFJlbmRlckNpdGF0aW9uQ29udGV4dD4pIHt9XG5cbiAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoXG4gICAgZGlyOiBNYWdpY1RleHRSZW5kZXJDaXRhdGlvbixcbiAgICBjb250ZXh0OiB1bmtub3duLFxuICApOiBjb250ZXh0IGlzICRJbXBsaWNpdDxNYWdpY1RleHRSZW5kZXJDaXRhdGlvbkNvbnRleHQ+IHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKiogQHB1YmxpYyAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbaGJNYWdpY1RleHRSZW5kZXJXaGl0ZXNwYWNlXScgfSlcbmV4cG9ydCBjbGFzcyBNYWdpY1RleHRSZW5kZXJXaGl0ZXNwYWNlIHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPE1hZ2ljVGV4dFdoaXRlc3BhY2VDb250ZXh0Pikge31cblxuICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChcbiAgICBkaXI6IE1hZ2ljVGV4dFJlbmRlcldoaXRlc3BhY2UsXG4gICAgY29udGV4dDogdW5rbm93bixcbiAgKTogY29udGV4dCBpcyAkSW1wbGljaXQ8TWFnaWNUZXh0V2hpdGVzcGFjZUNvbnRleHQ+IHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKiogQHB1YmxpYyAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGItbWFnaWMtdGV4dCcsXG4gIGltcG9ydHM6IFtOZ1RlbXBsYXRlT3V0bGV0XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAjZGVmYXVsdFdoaXRlc3BhY2VcbiAgICAgIGxldC1mcmFnbWVudD1cImZyYWdtZW50XCJcbiAgICAgIGxldC1wb3NpdGlvbj1cInBvc2l0aW9uXCJcbiAgICAgIGxldC1yZW5kZXI9XCJyZW5kZXJcIlxuICAgID5cbiAgICAgIEBpZiAocmVuZGVyKSB7XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJoYi1zcGFjZVwiXG4gICAgICAgICAgW2NsYXNzLmhiLXNwYWNlLS1iZWZvcmVdPVwicG9zaXRpb24gPT09ICdiZWZvcmUnXCJcbiAgICAgICAgICBbY2xhc3MuaGItc3BhY2UtLWFmdGVyXT1cInBvc2l0aW9uID09PSAnYWZ0ZXInXCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgID57eyAnICcgfX08L3NwYW5cbiAgICAgICAgPlxuICAgICAgfVxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZXh0IGxldC1ub2RlPVwibm9kZVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJoYi10ZXh0XCJcbiAgICAgICAgW2NsYXNzLmhiLXRleHQtLWNvZGVdPVwibm9kZS5pc0NvZGVcIlxuICAgICAgICBbY2xhc3MuaGItdGV4dC0tc3Ryb25nXT1cIm5vZGUudGFncy5pbmNsdWRlcygnc3Ryb25nJylcIlxuICAgICAgICBbY2xhc3MuaGItdGV4dC0tZW1dPVwibm9kZS50YWdzLmluY2x1ZGVzKCdlbScpXCJcbiAgICAgICAgW2F0dHIuZGF0YS1mcmFnbWVudC1zdGF0ZV09XCJub2RlLnN0YXRlXCJcbiAgICAgICAgYW5pbWF0ZS5lbnRlcj1cImhiLXRleHQtLWVudGVyXCJcbiAgICAgICAgPnt7IG5vZGUudGV4dCB9fTwvc3BhblxuICAgICAgPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMaW5rIGxldC1ub2RlPVwibm9kZVwiPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3M9XCJoYi1saW5rXCJcbiAgICAgICAgW2F0dHIuaHJlZl09XCJub2RlLmhyZWZcIlxuICAgICAgICBbYXR0ci50aXRsZV09XCJub2RlLnRpdGxlIHx8IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm5vZGUuYXJpYUxhYmVsIHx8IG51bGxcIlxuICAgICAgICBbYXR0ci5yZWxdPVwibm9kZS5yZWwgfHwgZGVmYXVsdExpbmtSZWwoKVwiXG4gICAgICAgIFthdHRyLnRhcmdldF09XCJub2RlLnRhcmdldCB8fCBkZWZhdWx0TGlua1RhcmdldCgpXCJcbiAgICAgICAgZGF0YS1mcmFnbWVudC1raW5kPVwidGV4dFwiXG4gICAgICAgIFthdHRyLmRhdGEtZnJhZ21lbnQtc3RhdGVdPVwibm9kZS5zdGF0ZVwiXG4gICAgICAgIGFuaW1hdGUuZW50ZXI9XCJoYi10ZXh0LS1lbnRlclwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVMaW5rQ2xpY2soJGV2ZW50LCBub2RlLmZyYWdtZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgdGV4dFRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IGRlZmF1bHRUZXh0O1xuICAgICAgICAgICAgY29udGV4dDogdGVtcGxhdGVDb250ZXh0KHRvVGV4dE5vZGUobm9kZS5mcmFnbWVudCkpXG4gICAgICAgICAgXCJcbiAgICAgICAgLz5cbiAgICAgIDwvYT5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2l0YXRpb24gbGV0LW5vZGU9XCJub2RlXCI+XG4gICAgICA8c3BhbiBhbmltYXRlLmVudGVyPVwiaGItdGV4dC0tZW50ZXJcIj5cbiAgICAgICAgQGlmIChub2RlLmNpdGF0aW9uLnVybCkge1xuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cImhiLWNpdGF0aW9uXCJcbiAgICAgICAgICAgIHJvbGU9XCJkb2Mtbm90ZXJlZlwiXG4gICAgICAgICAgICBbYXR0ci5ocmVmXT1cIm5vZGUuY2l0YXRpb24udXJsXCJcbiAgICAgICAgICAgIFthdHRyLnJlbF09XCJkZWZhdWx0TGlua1JlbCgpXCJcbiAgICAgICAgICAgIFthdHRyLnRhcmdldF09XCJkZWZhdWx0TGlua1RhcmdldCgpXCJcbiAgICAgICAgICAgIGRhdGEtZnJhZ21lbnQta2luZD1cImNpdGF0aW9uXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZnJhZ21lbnQtc3RhdGVdPVwibm9kZS5zdGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2l0YXRpb25DbGljaygkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgID57eyBub2RlLnRleHQgfX08L2FcbiAgICAgICAgICA+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJoYi1jaXRhdGlvbiBoYi1jaXRhdGlvbi1wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICByb2xlPVwiZG9jLW5vdGVyZWZcIlxuICAgICAgICAgICAgZGF0YS1mcmFnbWVudC1raW5kPVwiY2l0YXRpb25cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1mcmFnbWVudC1zdGF0ZV09XCJub2RlLnN0YXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDaXRhdGlvbkNsaWNrKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IG5vZGUudGV4dCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIEBmb3IgKGZyYWdtZW50IG9mIGZyYWdtZW50cygpOyB0cmFjayBmcmFnbWVudC5rZXk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgd2hpdGVzcGFjZVRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IGRlZmF1bHRXaGl0ZXNwYWNlO1xuICAgICAgICAgIGNvbnRleHQ6IHdoaXRlc3BhY2VDb250ZXh0KGZyYWdtZW50LCAnYmVmb3JlJywgaSlcbiAgICAgICAgXCJcbiAgICAgIC8+XG5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiaGItZnJhZ21lbnRcIlxuICAgICAgICBbYXR0ci5kYXRhLWZyYWdtZW50LWtpbmRdPVwiZnJhZ21lbnQudHlwZVwiXG4gICAgICAgIFthdHRyLmRhdGEtZnJhZ21lbnQtc3RhdGVdPVwiZnJhZ21lbnQuc3RhdGVcIlxuICAgICAgICBhbmltYXRlLmVudGVyPVwiaGItdGV4dC0tZW50ZXJcIlxuICAgICAgPlxuICAgICAgICBAaWYgKGZyYWdtZW50LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIEBpZiAoZnJhZ21lbnQubWFya3MubGluaykge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIGxpbmtUZW1wbGF0ZSgpPy50ZW1wbGF0ZSA/PyBkZWZhdWx0TGluaztcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB0ZW1wbGF0ZUNvbnRleHQodG9MaW5rTm9kZShmcmFnbWVudCkpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHRleHRUZW1wbGF0ZSgpPy50ZW1wbGF0ZSA/PyBkZWZhdWx0VGV4dDtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB0ZW1wbGF0ZUNvbnRleHQodG9UZXh0Tm9kZShmcmFnbWVudCkpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgY2l0YXRpb25UZW1wbGF0ZSgpPy50ZW1wbGF0ZSA/PyBkZWZhdWx0Q2l0YXRpb247XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHRlbXBsYXRlQ29udGV4dCh0b0NpdGF0aW9uTm9kZShmcmFnbWVudCkpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIHdoaXRlc3BhY2VUZW1wbGF0ZSgpPy50ZW1wbGF0ZSA/PyBkZWZhdWx0V2hpdGVzcGFjZTtcbiAgICAgICAgICBjb250ZXh0OiB3aGl0ZXNwYWNlQ29udGV4dChmcmFnbWVudCwgJ2FmdGVyJywgaSlcbiAgICAgICAgXCJcbiAgICAgIC8+XG4gICAgfVxuICBgLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZXM6IGBcbiAgICAuaGItdGV4dC0tY29kZSB7XG4gICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICAgIH1cblxuICAgIC5oYi10ZXh0LS1zdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgfVxuXG4gICAgLmhiLXRleHQtLWVtIHtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9XG5cbiAgICAuaGItdGV4dC0tZW50ZXIge1xuICAgICAgYW5pbWF0aW9uOiBlbnRlciAzNTBtcyBlYXNlLWluLW91dDtcbiAgICB9XG5cbiAgICBAa2V5ZnJhbWVzIGVudGVyIHtcbiAgICAgIGZyb20ge1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgfVxuICAgICAgdG8ge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgTWFnaWNUZXh0IHtcbiAgcmVhZG9ubHkgdGV4dCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZGVmYXVsdExpbmtUYXJnZXQgPSBpbnB1dCgnX2JsYW5rJyk7XG4gIHJlYWRvbmx5IGRlZmF1bHRMaW5rUmVsID0gaW5wdXQoJ25vb3BlbmVyIG5vcmVmZXJyZXInKTtcbiAgcmVhZG9ubHkgY2l0YXRpb25zID0gaW5wdXQ8TWFnaWNUZXh0Q2l0YXRpb25bXSB8IHVuZGVmaW5lZD4oKTtcblxuICByZWFkb25seSBsaW5rQ2xpY2sgPSBvdXRwdXQ8TWFnaWNUZXh0TGlua0NsaWNrRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IGNpdGF0aW9uQ2xpY2sgPSBvdXRwdXQ8TWFnaWNUZXh0Q2l0YXRpb25DbGlja0V2ZW50PigpO1xuXG4gIHJlYWRvbmx5IGxpbmtUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChNYWdpY1RleHRSZW5kZXJMaW5rKTtcbiAgcmVhZG9ubHkgdGV4dFRlbXBsYXRlID0gY29udGVudENoaWxkKE1hZ2ljVGV4dFJlbmRlclRleHQpO1xuICByZWFkb25seSBjaXRhdGlvblRlbXBsYXRlID0gY29udGVudENoaWxkKE1hZ2ljVGV4dFJlbmRlckNpdGF0aW9uKTtcbiAgcmVhZG9ubHkgd2hpdGVzcGFjZVRlbXBsYXRlID0gY29udGVudENoaWxkKE1hZ2ljVGV4dFJlbmRlcldoaXRlc3BhY2UpO1xuXG4gIHByb3RlY3RlZCBmcmFnbWVudHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0gcHJlcGFyZU1hZ2ljVGV4dCh0aGlzLnRleHQoKSkuZnJhZ21lbnRzO1xuICAgIHJldHVybiBmcmFnbWVudHMubWFwKChmcmFnbWVudCwgaW5kZXgsIGFsbCkgPT4ge1xuICAgICAgaWYgKGZyYWdtZW50LnR5cGUgIT09ICd0ZXh0Jykge1xuICAgICAgICByZXR1cm4gZnJhZ21lbnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHQgPSBhbGxbaW5kZXggKyAxXTtcbiAgICAgIGNvbnN0IHByZXYgPSBhbGxbaW5kZXggLSAxXTtcblxuICAgICAgLy8gS2VlcCBuYXR1cmFsIHNwYWNpbmcsIGJ1dCBzdHJpcCBlZGdlIHNwYWNlcyB0aGF0IHdvdWxkIGNyZWF0ZSBnYXBzXG4gICAgICAvLyBhcm91bmQgdGlnaHQgZm9vdG5vdGUgY2l0YXRpb25zLlxuICAgICAgbGV0IHRleHQgPSBmcmFnbWVudC50ZXh0LnJlcGxhY2UoL1tcXHUwMGEwXFx1MjAyZl0vZywgJyAnKTtcbiAgICAgIGlmIChuZXh0Py50eXBlID09PSAnY2l0YXRpb24nKSB7XG4gICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xccyskLywgJycpO1xuICAgICAgfVxuICAgICAgaWYgKHByZXY/LnR5cGUgPT09ICdjaXRhdGlvbicpIHtcbiAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXlxccysvLCAnJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IC4uLmZyYWdtZW50LCB0ZXh0IH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBjaXRhdGlvbkxvb2t1cCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgY2l0YXRpb24gb2YgdGhpcy5jaXRhdGlvbnMoKSA/PyBbXSkge1xuICAgICAgaWYgKCFjaXRhdGlvbikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGNpdGF0aW9uLmlkPy50cmltPy4oKSA/PyAnJztcbiAgICAgIGNvbnN0IHVybCA9IGNpdGF0aW9uLnVybD8udHJpbT8uKCkgPz8gJyc7XG4gICAgICBpZiAoa2V5ICYmIHVybCkge1xuICAgICAgICBtYXAuc2V0KGtleSwgdXJsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHdoaXRlc3BhY2VDb250ZXh0KFxuICAgIGZyYWdtZW50OiBNYWdpY1RleHRGcmFnbWVudCxcbiAgICBwb3NpdGlvbjogTWFnaWNUZXh0V2hpdGVzcGFjZVBvc2l0aW9uLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHRoaXMuZnJhZ21lbnRzKCk7XG4gICAgY29uc3QgcHJldmlvdXMgPSBmcmFnbWVudHNbaW5kZXggLSAxXTtcblxuICAgIGxldCByZW5kZXIgPVxuICAgICAgcG9zaXRpb24gPT09ICdiZWZvcmUnXG4gICAgICAgID8gZnJhZ21lbnQucmVuZGVyV2hpdGVzcGFjZS5iZWZvcmVcbiAgICAgICAgOiBmcmFnbWVudC5yZW5kZXJXaGl0ZXNwYWNlLmFmdGVyO1xuXG4gICAgaWYgKHBvc2l0aW9uID09PSAnYmVmb3JlJyAmJiBpbmRleCA9PT0gMCkge1xuICAgICAgcmVuZGVyID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dCA9IGZyYWdtZW50c1tpbmRleCArIDFdO1xuICAgIGNvbnN0IGhhc0xlYWRpbmdXaGl0ZXNwYWNlID0gKGZyYWc6IE1hZ2ljVGV4dEZyYWdtZW50IHwgdW5kZWZpbmVkKSA9PlxuICAgICAgZnJhZz8udHlwZSA9PT0gJ3RleHQnICYmIC9eXFxzLy50ZXN0KGZyYWcudGV4dCk7XG4gICAgY29uc3QgaGFzVHJhaWxpbmdXaGl0ZXNwYWNlID0gKGZyYWc6IE1hZ2ljVGV4dEZyYWdtZW50IHwgdW5kZWZpbmVkKSA9PlxuICAgICAgZnJhZz8udHlwZSA9PT0gJ3RleHQnICYmIC9cXHMkLy50ZXN0KGZyYWcudGV4dCk7XG5cbiAgICBpZiAocG9zaXRpb24gPT09ICdiZWZvcmUnKSB7XG4gICAgICAvLyBJZiB0aGUgc3Vycm91bmRpbmcgZnJhZ21lbnRzIGFscmVhZHkgY2Fycnkgd2hpdGVzcGFjZSBpbiB0aGVpciB0ZXh0LFxuICAgICAgLy8gYXZvaWQgcmVuZGVyaW5nIGFuIGV4dHJhIHNwYWNlciBub2RlLlxuICAgICAgY29uc3QgaGFzV2hpdGVzcGFjZUluVGV4dCA9XG4gICAgICAgIGhhc1RyYWlsaW5nV2hpdGVzcGFjZShwcmV2aW91cykgfHwgaGFzTGVhZGluZ1doaXRlc3BhY2UoZnJhZ21lbnQpO1xuICAgICAgcmVuZGVyID0gcmVuZGVyICYmICFoYXNXaGl0ZXNwYWNlSW5UZXh0O1xuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbiA9PT0gJ2FmdGVyJykge1xuICAgICAgY29uc3QgaGFzV2hpdGVzcGFjZUluVGV4dCA9XG4gICAgICAgIGhhc1RyYWlsaW5nV2hpdGVzcGFjZShmcmFnbWVudCkgfHwgaGFzTGVhZGluZ1doaXRlc3BhY2UobmV4dCk7XG4gICAgICByZW5kZXIgPSByZW5kZXIgJiYgIWhhc1doaXRlc3BhY2VJblRleHQ7XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uID09PSAnYmVmb3JlJyAmJiBmcmFnbWVudC50eXBlID09PSAnY2l0YXRpb24nKSB7XG4gICAgICByZW5kZXIgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBGb290bm90ZS1zdHlsZSBjaXRhdGlvbnMgc2hvdWxkIHNpdCB0aWdodCBhZ2FpbnN0IHRoZSBwcmVjZWRpbmcgdGV4dC5cbiAgICBpZiAocG9zaXRpb24gPT09ICdhZnRlcicgJiYgbmV4dD8udHlwZSA9PT0gJ2NpdGF0aW9uJykge1xuICAgICAgcmVuZGVyID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRzVGlnaHQgPSAoZnJhZzogTWFnaWNUZXh0RnJhZ21lbnQgfCB1bmRlZmluZWQpOiBib29sZWFuID0+XG4gICAgICBmcmFnPy50eXBlID09PSAndGV4dCcgJiYgL15bLC47OiE/fFxcKVxcXV0vLnRlc3QoZnJhZy50ZXh0LnRyaW0oKSk7XG5cbiAgICBjb25zdCBlbmRzV2l0aE5vR2FwID0gKGZyYWc6IE1hZ2ljVGV4dEZyYWdtZW50IHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PlxuICAgICAgZnJhZz8udHlwZSA9PT0gJ3RleHQnICYmIC8oW1xcKFxcfF0pJC8udGVzdChmcmFnLnRleHQudHJpbSgpKTtcblxuICAgIGlmIChwb3NpdGlvbiA9PT0gJ2JlZm9yZScgJiYgc3RhcnRzVGlnaHQoZnJhZ21lbnQpKSB7XG4gICAgICByZW5kZXIgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb24gPT09ICdhZnRlcicgJiYgc3RhcnRzVGlnaHQobmV4dCkpIHtcbiAgICAgIHJlbmRlciA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbiA9PT0gJ2FmdGVyJyAmJiBlbmRzV2l0aE5vR2FwKGZyYWdtZW50KSkge1xuICAgICAgcmVuZGVyID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogeyBwb3NpdGlvbiwgcmVuZGVyLCBmcmFnbWVudCB9LFxuICAgICAgcG9zaXRpb24sXG4gICAgICByZW5kZXIsXG4gICAgICBmcmFnbWVudCxcbiAgICAgIGluZGV4LFxuICAgIH0gc2F0aXNmaWVzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG5cbiAgcHJvdGVjdGVkIHRlbXBsYXRlQ29udGV4dDxUPihub2RlOiBUKTogJEltcGxpY2l0PFQ+ICYgeyBub2RlOiBUIH0ge1xuICAgIHJldHVybiB7ICRpbXBsaWNpdDogbm9kZSwgbm9kZSB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvVGV4dE5vZGUoXG4gICAgZnJhZ21lbnQ6IE1hZ2ljVGV4dEZyYWdtZW50VGV4dCxcbiAgKTogTWFnaWNUZXh0UmVuZGVyVGV4dENvbnRleHQge1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLm5vcm1hbGl6ZUZyYWdtZW50VGV4dChmcmFnbWVudCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHQsXG4gICAgICB0YWdzOiBmcmFnbWVudC50YWdzLFxuICAgICAgc3RhdGU6IGZyYWdtZW50LnN0YXRlLFxuICAgICAgaXNTdGF0aWM6IGZyYWdtZW50LmlzU3RhdGljLFxuICAgICAgcmVuZGVyV2hpdGVzcGFjZTogZnJhZ21lbnQucmVuZGVyV2hpdGVzcGFjZSxcbiAgICAgIGlzQ29kZTogZnJhZ21lbnQuaXNDb2RlLFxuICAgICAgZnJhZ21lbnQsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub3JtYWxpemVGcmFnbWVudFRleHQoZnJhZ21lbnQ6IE1hZ2ljVGV4dEZyYWdtZW50VGV4dCk6IHN0cmluZyB7XG4gICAgLy8gTm9ybWFsaXplIG9ubHkgbm9uLWJyZWFraW5nIHNwYWNlczsga2VlcCB0aGUgb3JpZ2luYWwgd2hpdGVzcGFjZSBpbnRhY3RcbiAgICAvLyBzbyB3ZSBkb24ndCBkb3VibGUtaW5zZXJ0IGdhcHMgYWxvbmdzaWRlIHJlbmRlcmVkIHNwYWNlciBub2Rlcy5cbiAgICByZXR1cm4gZnJhZ21lbnQudGV4dC5yZXBsYWNlKC9bXFx1MDBhMFxcdTIwMmZdL2csICcgJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9MaW5rTm9kZShcbiAgICBmcmFnbWVudDogTWFnaWNUZXh0RnJhZ21lbnRUZXh0LFxuICApOiBNYWdpY1RleHRSZW5kZXJMaW5rQ29udGV4dCB7XG4gICAgY29uc3QgbGluayA9IGZyYWdtZW50Lm1hcmtzLmxpbms7XG4gICAgaWYgKCFsaW5rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xpbmsgZnJhZ21lbnQgaXMgbWlzc2luZyBsaW5rIG1ldGFkYXRhLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy50b1RleHROb2RlKGZyYWdtZW50KSxcbiAgICAgIGhyZWY6IGxpbmsuaHJlZixcbiAgICAgIHRpdGxlOiBsaW5rLnRpdGxlLFxuICAgICAgYXJpYUxhYmVsOiBsaW5rLmFyaWFMYWJlbCxcbiAgICAgIHJlbDogbGluay5yZWwsXG4gICAgICB0YXJnZXQ6IGxpbmsudGFyZ2V0LFxuICAgICAgbGluayxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvQ2l0YXRpb25Ob2RlKFxuICAgIGZyYWdtZW50OiBNYWdpY1RleHRGcmFnbWVudENpdGF0aW9uLFxuICApOiBNYWdpY1RleHRSZW5kZXJDaXRhdGlvbkNvbnRleHQge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuY2l0YXRpb25Mb29rdXAoKS5nZXQoU3RyaW5nKGZyYWdtZW50LmNpdGF0aW9uLmlkKSk7XG4gICAgY29uc3QgdGV4dCA9IGZyYWdtZW50LnRleHQudHJpbSgpO1xuICAgIHJldHVybiB7XG4gICAgICBjaXRhdGlvbjogeyAuLi5mcmFnbWVudC5jaXRhdGlvbiwgdXJsIH0sXG4gICAgICB0ZXh0LFxuICAgICAgc3RhdGU6IGZyYWdtZW50LnN0YXRlLFxuICAgICAgaXNTdGF0aWM6IGZyYWdtZW50LmlzU3RhdGljLFxuICAgICAgcmVuZGVyV2hpdGVzcGFjZTogZnJhZ21lbnQucmVuZGVyV2hpdGVzcGFjZSxcbiAgICAgIGZyYWdtZW50LFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlTGlua0NsaWNrKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIGZyYWdtZW50OiBNYWdpY1RleHRGcmFnbWVudFRleHQsXG4gICkge1xuICAgIGNvbnN0IGhyZWYgPSBmcmFnbWVudC5tYXJrcy5saW5rPy5ocmVmID8/ICcnO1xuICAgIHRoaXMubGlua0NsaWNrLmVtaXQoeyBtb3VzZUV2ZW50OiBldmVudCwgaHJlZiwgZnJhZ21lbnQgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQ2l0YXRpb25DbGljayhcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBjb250ZXh0OiBNYWdpY1RleHRSZW5kZXJDaXRhdGlvbkNvbnRleHQsXG4gICkge1xuICAgIHRoaXMuY2l0YXRpb25DbGljay5lbWl0KHtcbiAgICAgIG1vdXNlRXZlbnQ6IGV2ZW50LFxuICAgICAgY2l0YXRpb246IHsgaWQ6IGNvbnRleHQuY2l0YXRpb24uaWQsIHVybDogY29udGV4dC5jaXRhdGlvbi51cmwgfSxcbiAgICAgIGZyYWdtZW50OiBjb250ZXh0LmZyYWdtZW50LFxuICAgIH0pO1xuICB9XG59XG4iXX0=","import { inject, InjectionToken } from '@angular/core';\n/**\n * @internal\n */\nexport const ɵHASHBROWN_CONFIG_INJECTION_TOKEN = new InjectionToken('HashbrownConfig');\n/**\n * Provides the Hashbrown configuration.\n *\n * @public\n * @param options - The Hashbrown configuration.\n * @returns The Hashbrown configuration.\n */\nexport function provideHashbrown(options) {\n    return {\n        provide: ɵHASHBROWN_CONFIG_INJECTION_TOKEN,\n        useValue: options,\n    };\n}\n/**\n * @internal\n */\nexport function ɵinjectHashbrownConfig() {\n    return inject(ɵHASHBROWN_CONFIG_INJECTION_TOKEN);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1oYXNoYnJvd24uZm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL3NyYy9wcm92aWRlcnMvcHJvdmlkZS1oYXNoYnJvd24uZm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFrQ2pFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQzVDLElBQUksY0FBYyxDQUEwQixpQkFBaUIsQ0FBQyxDQUFDO0FBRWpFOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxPQUFnQztJQUMvRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLGlDQUFpQztRQUMxQyxRQUFRLEVBQUUsT0FBTztLQUNsQixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGlvblRva2VuLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhdCwgdHlwZSBUcmFuc3BvcnRPckZhY3RvcnkgfSBmcm9tICdAaGFzaGJyb3duYWkvY29yZSc7XG5cbi8qKlxuICogSGFzaGJyb3duIG11c3QgYmUgY29uZmlndXJlZCB3aXRoIGEgYmFzZSBVUkwsXG4gKiBhbmQgbWF5IG9wdGlvbmFsbHkgaW5jbHVkZSBtaWRkbGV3YXJlIGFuZCBhIGZsYWdcbiAqIHRvIGVtdWxhdGUgc3RydWN0dXJlZCBvdXRwdXQuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVIYXNoYnJvd25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCBvZiB0aGUgSGFzaGJyb3duIEFQSS5cbiAgICovXG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBNaWRkbGV3YXJlIHRvIGFwcGx5IHRvIGFsbCByZXF1ZXN0cy5cbiAgICovXG4gIG1pZGRsZXdhcmU/OiBDaGF0Lk1pZGRsZXdhcmVbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW11bGF0ZSBzdHJ1Y3R1cmVkIG91dHB1dC4gVXNlZnVsIGZvciBtb2RlbHNcbiAgICogdGhhdCBkb24ndCBzdXBwb3J0IHRvb2wgY2FsbGluZyB3aXRoIHN0cnVjdHVyZWQgb3V0cHV0c1xuICAgKiBlbmFibGVkLiBXaGVuIHNldCB0byB0cnVlLCBIYXNoYnJvd24gc2lsZW50bHkgYWRkcyBhblxuICAgKiBcIm91dHB1dFwiIHRvb2wgdG8gdGhlIHRoZSBsaXN0IG9mIHRvb2xzIHRoZSBtb2RlbCBjYW5cbiAgICogY2FsbCwgYW5kIHRoZW4gaGFuZGxlcyB0aGUgYXJndW1lbnRzIHRvIHRoZSB0b29sIGNhbGxcbiAgICogYXMgaWYgdGhlIG1vZGVsIGhhcyBwcm9kdWNlZCBpdCB2aWEgc3RydWN0dXJlZCBvdXRwdXRzLlxuICAgKi9cbiAgZW11bGF0ZVN0cnVjdHVyZWRPdXRwdXQ/OiBib29sZWFuO1xuICAvKipcbiAgICogT3B0aW9uYWwgdHJhbnNwb3J0IHRvIHVzZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IEhUVFAgdHJhbnNwb3J0LlxuICAgKi9cbiAgdHJhbnNwb3J0PzogVHJhbnNwb3J0T3JGYWN0b3J5O1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgybVIQVNIQlJPV05fQ09ORklHX0lOSkVDVElPTl9UT0tFTiA9XG4gIG5ldyBJbmplY3Rpb25Ub2tlbjxQcm92aWRlSGFzaGJyb3duT3B0aW9ucz4oJ0hhc2hicm93bkNvbmZpZycpO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBIYXNoYnJvd24gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAcHVibGljXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBIYXNoYnJvd24gY29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBIYXNoYnJvd24gY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVIYXNoYnJvd24ob3B0aW9uczogUHJvdmlkZUhhc2hicm93bk9wdGlvbnMpOiBQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogybVIQVNIQlJPV05fQ09ORklHX0lOSkVDVElPTl9UT0tFTixcbiAgICB1c2VWYWx1ZTogb3B0aW9ucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIMm1aW5qZWN0SGFzaGJyb3duQ29uZmlnKCkge1xuICByZXR1cm4gaW5qZWN0KMm1SEFTSEJST1dOX0NPTkZJR19JTkpFQ1RJT05fVE9LRU4pO1xufVxuIl19","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, DestroyRef, inject, Injector, runInInjectionContext, } from '@angular/core';\nimport { fryHashbrown, } from '@hashbrownai/core';\nimport { ɵinjectHashbrownConfig } from '../providers/provide-hashbrown.fn';\nimport { readSignalLike, toNgSignal } from '../utils/signals';\nimport { bindToolToInjector } from '../utils/create-tool.fn';\n/**\n * This Angular resource provides a reactive chat interface for send and receiving messages from a model.\n * The resource-based API includes signals for the current messages, status, and control methods for sending and stopping messages.\n *\n * @public\n * @remarks\n * The `chatResource` function provides the most basic functionality for un-structured chats.  Unstructured chats include things like general chats and natural language controls.\n *\n * @param options - Configuration for the chat resource.\n * @returns An object with reactive signals and methods for interacting with the chat.\n * @typeParam Tools - The set of tool definitions available to the chat.\n * @example\n * This example demonstrates how to use the `chatResource` function to create a simple chat component.\n *\n * ```ts\n * const chat = chatResource({\n *   system: 'hashbrowns should be covered and smothered',\n *   model: 'gpt-5',\n * });\n *\n * chat.sendMessage(\\{ role: 'user', content: 'Write a short story about breakfast.' \\});\n * ```\n */\nexport function chatResource(options) {\n    const config = ɵinjectHashbrownConfig();\n    const injector = inject(Injector);\n    const destroyRef = inject(DestroyRef);\n    const hashbrown = fryHashbrown({\n        apiUrl: options.apiUrl ?? config.baseUrl,\n        middleware: config.middleware?.map((m) => {\n            return (requestInit) => runInInjectionContext(injector, () => m(requestInit));\n        }),\n        system: readSignalLike(options.system),\n        model: readSignalLike(options.model),\n        tools: options.tools?.map((tool) => bindToolToInjector(tool, injector)),\n        emulateStructuredOutput: config.emulateStructuredOutput,\n        debugName: options.debugName,\n        transport: options.transport ?? config.transport,\n        ui: false,\n        threadId: readSignalLike(options.threadId),\n    });\n    const teardown = hashbrown.sizzle();\n    destroyRef.onDestroy(() => teardown());\n    const value = toNgSignal(hashbrown.messages, options.debugName && `${options.debugName}.value`);\n    const isReceiving = toNgSignal(hashbrown.isReceiving, options.debugName && `${options.debugName}.isReceiving`);\n    const isSending = toNgSignal(hashbrown.isSending, options.debugName && `${options.debugName}.isSending`);\n    const isGenerating = toNgSignal(hashbrown.isGenerating, options.debugName && `${options.debugName}.isGenerating`);\n    const isRunningToolCalls = toNgSignal(hashbrown.isRunningToolCalls, options.debugName && `${options.debugName}.isRunningToolCalls`);\n    const isLoading = toNgSignal(hashbrown.isLoading, options.debugName && `${options.debugName}.isLoading`);\n    const error = toNgSignal(hashbrown.error, options.debugName && `${options.debugName}.error`);\n    const sendingError = toNgSignal(hashbrown.sendingError, options.debugName && `${options.debugName}.sendingError`);\n    const generatingError = toNgSignal(hashbrown.generatingError, options.debugName && `${options.debugName}.generatingError`);\n    const lastAssistantMessage = toNgSignal(hashbrown.lastAssistantMessage, options.debugName && `${options.debugName}.lastAssistantMessage`);\n    const isLoadingThread = toNgSignal(hashbrown.isLoadingThread, options.debugName && `${options.debugName}.isLoadingThread`);\n    const isSavingThread = toNgSignal(hashbrown.isSavingThread, options.debugName && `${options.debugName}.isSavingThread`);\n    const threadLoadError = toNgSignal(hashbrown.threadLoadError, options.debugName && `${options.debugName}.threadLoadError`);\n    const threadSaveError = toNgSignal(hashbrown.threadSaveError, options.debugName && `${options.debugName}.threadSaveError`);\n    const status = computed(() => {\n        if (isLoading()) {\n            return 'loading';\n        }\n        if (error()) {\n            return 'error';\n        }\n        const hasAssistantMessage = value().some((message) => message.role === 'assistant');\n        if (hasAssistantMessage) {\n            return 'resolved';\n        }\n        return 'idle';\n    }, { debugName: options.debugName && `${options.debugName}.status` });\n    function reload() {\n        const lastMessage = value()[value().length - 1];\n        if (lastMessage.role === 'assistant') {\n            hashbrown.setMessages(value().slice(0, -1));\n            return true;\n        }\n        return false;\n    }\n    function hasValue() {\n        return value().some((message) => message.role === 'assistant');\n    }\n    function sendMessage(message) {\n        hashbrown.sendMessage(message);\n    }\n    function stop(clearStreamingMessage = false) {\n        hashbrown.stop(clearStreamingMessage);\n    }\n    return {\n        hasValue: hasValue,\n        status,\n        isReceiving,\n        isSending,\n        isGenerating,\n        isRunningToolCalls,\n        isLoading,\n        isLoadingThread,\n        isSavingThread,\n        sendingError,\n        generatingError,\n        threadLoadError,\n        threadSaveError,\n        reload,\n        sendMessage,\n        stop,\n        value,\n        error,\n        lastAssistantMessage,\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1yZXNvdXJjZS5mbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvc3JjL3Jlc291cmNlcy9jaGF0LXJlc291cmNlLmZuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUdSLHFCQUFxQixHQUV0QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsWUFBWSxHQUdiLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQWtJN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixPQUFtQztJQUVuQyxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDO1FBQzdCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPO1FBQ3hDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBbUIsRUFBRTtZQUN4RCxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FDckIscUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzFELENB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QUFDLENBQUMsQ0FBQztZQUU1QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxTQUFTLFFBQVE7UUFDZixPQUFPLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsU0FBUyxXQUFXLENBQUMsT0FBeUI7UUFDNUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsU0FBUyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSztRQUN6QyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELE9BQU87UUFDTCxRQUFRLEVBQUUsUUFBZTtRQUN6QixNQUFNO1FBQ04sV0FBVztRQUNYLFNBQVM7UUFDVCxZQUFZO1FBQ1osa0JBQWtCO1FBQ2xCLFNBQVM7UUFDVCxlQUFlO1FBQ2YsY0FBYztRQUNkLFlBQVk7UUFDWixlQUFlO1FBQ2YsZUFBZTtRQUNmLGVBQWU7UUFDZixNQUFNO1FBQ04sV0FBVztRQUNYLElBQUk7UUFDSixLQUFLO1FBQ0wsS0FBSztRQUNMLG9CQUFvQjtLQUNyQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7XG4gIGNvbXB1dGVkLFxuICBEZXN0cm95UmVmLFxuICBpbmplY3QsXG4gIEluamVjdG9yLFxuICBSZXNvdXJjZSxcbiAgUmVzb3VyY2VTdGF0dXMsXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbiAgU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENoYXQsXG4gIGZyeUhhc2hicm93bixcbiAgdHlwZSBNb2RlbElucHV0LFxuICB0eXBlIFRyYW5zcG9ydE9yRmFjdG9yeSxcbn0gZnJvbSAnQGhhc2hicm93bmFpL2NvcmUnO1xuaW1wb3J0IHsgybVpbmplY3RIYXNoYnJvd25Db25maWcgfSBmcm9tICcuLi9wcm92aWRlcnMvcHJvdmlkZS1oYXNoYnJvd24uZm4nO1xuaW1wb3J0IHsgcmVhZFNpZ25hbExpa2UsIHRvTmdTaWduYWwgfSBmcm9tICcuLi91dGlscy9zaWduYWxzJztcbmltcG9ydCB7IFNpZ25hbExpa2UgfSBmcm9tICcuLi91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBiaW5kVG9vbFRvSW5qZWN0b3IgfSBmcm9tICcuLi91dGlscy9jcmVhdGUtdG9vbC5mbic7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgcmVhY3RpdmUgY2hhdCByZXNvdXJjZSwgaW5jbHVkaW5nIGN1cnJlbnQgbWVzc2FnZXMgYW5kIGNvbnRyb2wgbWV0aG9kcy5cbiAqXG4gKiBAcHVibGljXG4gKiBAdHlwZVBhcmFtIFRvb2xzIC0gVGhlIHNldCBvZiB0b29sIGRlZmluaXRpb25zIGF2YWlsYWJsZSB0byB0aGUgY2hhdC5cbiAqIEBwYXJhbSBzZW5kTWVzc2FnZSAtIFNlbmQgYSBuZXcgdXNlciBtZXNzYWdlIHRvIHRoZSBjaGF0LlxuICogQHBhcmFtIHJlbG9hZCAtIFJlbW92ZSB0aGUgbGFzdCBhc3Npc3RhbnQgcmVzcG9uc2UgYW5kIHJlLXNlbmQgdGhlIHByZXZpb3VzIHVzZXIgbWVzc2FnZS4gUmV0dXJucyB0cnVlIGlmIGEgcmVsb2FkIHdhcyBwZXJmb3JtZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFJlc291cmNlUmVmPFRvb2xzIGV4dGVuZHMgQ2hhdC5BbnlUb29sPlxuICBleHRlbmRzIFJlc291cmNlPENoYXQuTWVzc2FnZTxzdHJpbmcsIFRvb2xzPltdPiB7XG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY2hhdCBpcyBjdXJyZW50bHkgcmVjZWl2aW5nIHRva2Vucy4gKi9cbiAgaXNSZWNlaXZpbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjaGF0IGlzIGN1cnJlbnRseSBzZW5kaW5nIGEgdXNlciBtZXNzYWdlLiAqL1xuICBpc1NlbmRpbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjaGF0IGlzIGN1cnJlbnRseSBnZW5lcmF0aW5nIGFzc2lzdGFudCBvdXRwdXQuICovXG4gIGlzR2VuZXJhdGluZzogU2lnbmFsPGJvb2xlYW4+O1xuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNoYXQgaXMgcnVubmluZyB0b29sIGNhbGxzLiAqL1xuICBpc1J1bm5pbmdUb29sQ2FsbHM6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIEFnZ3JlZ2F0ZSBsb2FkaW5nIGZsYWcgYWNyb3NzIHRyYW5zcG9ydCwgZ2VuZXJhdGlvbiwgdG9vbCBjYWxscywgYW5kIHRocmVhZCBsb2FkL3NhdmUuICovXG4gIGlzTG9hZGluZzogU2lnbmFsPGJvb2xlYW4+O1xuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgYSB0aHJlYWQgbG9hZCByZXF1ZXN0IGlzIGluIGZsaWdodC4gKi9cbiAgaXNMb2FkaW5nVGhyZWFkOiBTaWduYWw8Ym9vbGVhbj47XG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciBhIHRocmVhZCBzYXZlIHJlcXVlc3QgaXMgaW4gZmxpZ2h0LiAqL1xuICBpc1NhdmluZ1RocmVhZDogU2lnbmFsPGJvb2xlYW4+O1xuICAvKiogVHJhbnNwb3J0L3JlcXVlc3QgZXJyb3IgYmVmb3JlIGdlbmVyYXRpb24gZnJhbWVzIGFycml2ZS4gKi9cbiAgc2VuZGluZ0Vycm9yOiBTaWduYWw8RXJyb3IgfCB1bmRlZmluZWQ+O1xuICAvKiogRXJyb3IgZW1pdHRlZCBkdXJpbmcgZ2VuZXJhdGlvbiBmcmFtZXMuICovXG4gIGdlbmVyYXRpbmdFcnJvcjogU2lnbmFsPEVycm9yIHwgdW5kZWZpbmVkPjtcbiAgLyoqIFRocmVhZCBsb2FkaW5nIGVycm9yLCBpZiBwcmVzZW50LiAqL1xuICB0aHJlYWRMb2FkRXJyb3I6IFNpZ25hbDx7IGVycm9yOiBzdHJpbmc7IHN0YWNrdHJhY2U/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZD47XG4gIC8qKiBUaHJlYWQgc2F2aW5nIGVycm9yLCBpZiBwcmVzZW50LiAqL1xuICB0aHJlYWRTYXZlRXJyb3I6IFNpZ25hbDx7IGVycm9yOiBzdHJpbmc7IHN0YWNrdHJhY2U/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZD47XG4gIC8qKlxuICAgKiBTZW5kIGEgbmV3IHVzZXIgbWVzc2FnZSB0byB0aGUgY2hhdC5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgdXNlciBtZXNzYWdlIHRvIHNlbmQuXG4gICAqL1xuICBzZW5kTWVzc2FnZTogKG1lc3NhZ2U6IENoYXQuVXNlck1lc3NhZ2UpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFN0b3BzIGFueSBjdXJyZW50bHktc3RyZWFtaW5nIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjbGVhclN0cmVhbWluZ01lc3NhZ2UgLSBXaGV0aGVyIHRoZSBjdXJyZW50bHktc3RyZWFtaW5nIG1lc3NhZ2Ugc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBzdGF0ZS5cbiAgICovXG4gIHN0b3A6IChjbGVhclN0cmVhbWluZ01lc3NhZ2U/OiBib29sZWFuKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGxhc3QgYXNzaXN0YW50IHJlc3BvbnNlIGFuZCByZS1zZW5kIHRoZSBwcmV2aW91cyB1c2VyIG1lc3NhZ2UuIFJldHVybnMgdHJ1ZSBpZiBhIHJlbG9hZCB3YXMgcGVyZm9ybWVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSByZXNvdXJjZSB3YXMgcmVsb2FkZWQuXG4gICAqL1xuICByZWxvYWQ6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBsYXN0IGFzc2lzdGFudCBtZXNzYWdlIGZvciB0aGUgY2hhdC5cbiAgICpcbiAgICovXG4gIGxhc3RBc3Npc3RhbnRNZXNzYWdlOiBTaWduYWw8XG4gICAgQ2hhdC5Bc3Npc3RhbnRNZXNzYWdlPHN0cmluZywgVG9vbHM+IHwgdW5kZWZpbmVkXG4gID47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgY2hhdCByZXNvdXJjZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdHlwZVBhcmFtIFRvb2xzIC0gVGhlIHNldCBvZiB0b29sIGRlZmluaXRpb25zIGF2YWlsYWJsZSB0byB0aGUgY2hhdC5cbiAqIEBwYXJhbSBzeXN0ZW0gLSBUaGUgc3lzdGVtIChhc3Npc3RhbnQpIHByb21wdC5cbiAqIEBwYXJhbSBtb2RlbCAtIFRoZSBtb2RlbCBpZGVudGlmaWVyIHRvIHVzZSBmb3IgdGhlIGNoYXQuXG4gKiBAcGFyYW0gdG9vbHMgLSBPcHRpb25hbCBhcnJheSBvZiBib3VuZCB0b29scyBhdmFpbGFibGUgdG8gdGhlIGNoYXQuXG4gKiBAcGFyYW0gbWVzc2FnZXMgLSBPcHRpb25hbCBpbml0aWFsIGxpc3Qgb2YgY2hhdCBtZXNzYWdlcy5cbiAqIEBwYXJhbSBkZWJvdW5jZSAtIE9wdGlvbmFsIGRlYm91bmNlIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVzZXIgaW5wdXRzLlxuICogQHBhcmFtIGRlYnVnTmFtZSAtIE9wdGlvbmFsIG5hbWUgdXNlZCBmb3IgZGVidWdnaW5nIGluIGxvZ3MuXG4gKiBAcGFyYW0gYXBpVXJsIC0gT3B0aW9uYWwgb3ZlcnJpZGUgZm9yIHRoZSBBUEkgYmFzZSBVUkwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFJlc291cmNlT3B0aW9uczxUb29scyBleHRlbmRzIENoYXQuQW55VG9vbD4ge1xuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9tcHQgdG8gdXNlIGZvciB0aGUgY2hhdC5cbiAgICovXG4gIHN5c3RlbTogc3RyaW5nIHwgU2lnbmFsPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RlbCB0byB1c2UgZm9yIHRoZSBjaGF0LlxuICAgKi9cbiAgbW9kZWw6IE1vZGVsSW5wdXQgfCBTaWduYWw8TW9kZWxJbnB1dD47XG5cbiAgLyoqXG4gICAqIFRoZSB0b29scyB0byB1c2UgZm9yIHRoZSBjaGF0LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRvb2xzIC0gVGhlIHNldCBvZiB0b29sIGRlZmluaXRpb25zIGF2YWlsYWJsZSB0byB0aGUgY2hhdC5cbiAgICovXG4gIHRvb2xzPzogVG9vbHNbXTtcblxuICAvKipcbiAgICogVGhlIGluaXRpYWwgbWVzc2FnZXMgZm9yIHRoZSBjaGF0LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRvb2xzIC0gVGhlIHNldCBvZiB0b29sIGRlZmluaXRpb25zIGF2YWlsYWJsZSB0byB0aGUgY2hhdC5cbiAgICovXG4gIG1lc3NhZ2VzPzpcbiAgICB8IENoYXQuTWVzc2FnZTxzdHJpbmcsIFRvb2xzPltdXG4gICAgfCBTaWduYWw8Q2hhdC5NZXNzYWdlPHN0cmluZywgVG9vbHM+W10+O1xuXG4gIC8qKlxuICAgKiBUaGUgZGVib3VuY2UgdGltZSBmb3IgdGhlIGNoYXQuXG4gICAqL1xuICBkZWJvdW5jZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRlYnVnIG5hbWUgZm9yIHRoZSBjaGF0LlxuICAgKi9cbiAgZGVidWdOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJIFVSTCB0byB1c2UgZm9yIHRoZSBjaGF0LlxuICAgKi9cbiAgYXBpVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gdHJhbnNwb3J0IHRvIHVzZSBmb3IgdGhpcyBjaGF0IHJlc291cmNlLlxuICAgKi9cbiAgdHJhbnNwb3J0PzogVHJhbnNwb3J0T3JGYWN0b3J5O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0aHJlYWQgaWRlbnRpZmllciB1c2VkIHRvIGxvYWQgb3IgY29udGludWUgYW4gZXhpc3RpbmcgY29udmVyc2F0aW9uLlxuICAgKi9cbiAgdGhyZWFkSWQ/OiBTaWduYWxMaWtlPHN0cmluZyB8IHVuZGVmaW5lZD47XG59XG5cbi8qKlxuICogVGhpcyBBbmd1bGFyIHJlc291cmNlIHByb3ZpZGVzIGEgcmVhY3RpdmUgY2hhdCBpbnRlcmZhY2UgZm9yIHNlbmQgYW5kIHJlY2VpdmluZyBtZXNzYWdlcyBmcm9tIGEgbW9kZWwuXG4gKiBUaGUgcmVzb3VyY2UtYmFzZWQgQVBJIGluY2x1ZGVzIHNpZ25hbHMgZm9yIHRoZSBjdXJyZW50IG1lc3NhZ2VzLCBzdGF0dXMsIGFuZCBjb250cm9sIG1ldGhvZHMgZm9yIHNlbmRpbmcgYW5kIHN0b3BwaW5nIG1lc3NhZ2VzLlxuICpcbiAqIEBwdWJsaWNcbiAqIEByZW1hcmtzXG4gKiBUaGUgYGNoYXRSZXNvdXJjZWAgZnVuY3Rpb24gcHJvdmlkZXMgdGhlIG1vc3QgYmFzaWMgZnVuY3Rpb25hbGl0eSBmb3IgdW4tc3RydWN0dXJlZCBjaGF0cy4gIFVuc3RydWN0dXJlZCBjaGF0cyBpbmNsdWRlIHRoaW5ncyBsaWtlIGdlbmVyYWwgY2hhdHMgYW5kIG5hdHVyYWwgbGFuZ3VhZ2UgY29udHJvbHMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgY2hhdCByZXNvdXJjZS5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHJlYWN0aXZlIHNpZ25hbHMgYW5kIG1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGNoYXQuXG4gKiBAdHlwZVBhcmFtIFRvb2xzIC0gVGhlIHNldCBvZiB0b29sIGRlZmluaXRpb25zIGF2YWlsYWJsZSB0byB0aGUgY2hhdC5cbiAqIEBleGFtcGxlXG4gKiBUaGlzIGV4YW1wbGUgZGVtb25zdHJhdGVzIGhvdyB0byB1c2UgdGhlIGBjaGF0UmVzb3VyY2VgIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIHNpbXBsZSBjaGF0IGNvbXBvbmVudC5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgY2hhdCA9IGNoYXRSZXNvdXJjZSh7XG4gKiAgIHN5c3RlbTogJ2hhc2hicm93bnMgc2hvdWxkIGJlIGNvdmVyZWQgYW5kIHNtb3RoZXJlZCcsXG4gKiAgIG1vZGVsOiAnZ3B0LTUnLFxuICogfSk7XG4gKlxuICogY2hhdC5zZW5kTWVzc2FnZShcXHsgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnV3JpdGUgYSBzaG9ydCBzdG9yeSBhYm91dCBicmVha2Zhc3QuJyBcXH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGF0UmVzb3VyY2U8VG9vbHMgZXh0ZW5kcyBDaGF0LkFueVRvb2w+KFxuICBvcHRpb25zOiBDaGF0UmVzb3VyY2VPcHRpb25zPFRvb2xzPixcbik6IENoYXRSZXNvdXJjZVJlZjxUb29scz4ge1xuICBjb25zdCBjb25maWcgPSDJtWluamVjdEhhc2hicm93bkNvbmZpZygpO1xuICBjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGhhc2hicm93biA9IGZyeUhhc2hicm93bih7XG4gICAgYXBpVXJsOiBvcHRpb25zLmFwaVVybCA/PyBjb25maWcuYmFzZVVybCxcbiAgICBtaWRkbGV3YXJlOiBjb25maWcubWlkZGxld2FyZT8ubWFwKChtKTogQ2hhdC5NaWRkbGV3YXJlID0+IHtcbiAgICAgIHJldHVybiAocmVxdWVzdEluaXQpID0+XG4gICAgICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4gbShyZXF1ZXN0SW5pdCkpO1xuICAgIH0pLFxuICAgIHN5c3RlbTogcmVhZFNpZ25hbExpa2Uob3B0aW9ucy5zeXN0ZW0pLFxuICAgIG1vZGVsOiByZWFkU2lnbmFsTGlrZShvcHRpb25zLm1vZGVsKSxcbiAgICB0b29sczogb3B0aW9ucy50b29scz8ubWFwKCh0b29sKSA9PiBiaW5kVG9vbFRvSW5qZWN0b3IodG9vbCwgaW5qZWN0b3IpKSxcbiAgICBlbXVsYXRlU3RydWN0dXJlZE91dHB1dDogY29uZmlnLmVtdWxhdGVTdHJ1Y3R1cmVkT3V0cHV0LFxuICAgIGRlYnVnTmFtZTogb3B0aW9ucy5kZWJ1Z05hbWUsXG4gICAgdHJhbnNwb3J0OiBvcHRpb25zLnRyYW5zcG9ydCA/PyBjb25maWcudHJhbnNwb3J0LFxuICAgIHVpOiBmYWxzZSxcbiAgICB0aHJlYWRJZDogcmVhZFNpZ25hbExpa2Uob3B0aW9ucy50aHJlYWRJZCksXG4gIH0pO1xuXG4gIGNvbnN0IHRlYXJkb3duID0gaGFzaGJyb3duLnNpenpsZSgpO1xuXG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHRlYXJkb3duKCkpO1xuXG4gIGNvbnN0IHZhbHVlID0gdG9OZ1NpZ25hbChcbiAgICBoYXNoYnJvd24ubWVzc2FnZXMsXG4gICAgb3B0aW9ucy5kZWJ1Z05hbWUgJiYgYCR7b3B0aW9ucy5kZWJ1Z05hbWV9LnZhbHVlYCxcbiAgKTtcbiAgY29uc3QgaXNSZWNlaXZpbmcgPSB0b05nU2lnbmFsKFxuICAgIGhhc2hicm93bi5pc1JlY2VpdmluZyxcbiAgICBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0uaXNSZWNlaXZpbmdgLFxuICApO1xuICBjb25zdCBpc1NlbmRpbmcgPSB0b05nU2lnbmFsKFxuICAgIGhhc2hicm93bi5pc1NlbmRpbmcsXG4gICAgb3B0aW9ucy5kZWJ1Z05hbWUgJiYgYCR7b3B0aW9ucy5kZWJ1Z05hbWV9LmlzU2VuZGluZ2AsXG4gICk7XG4gIGNvbnN0IGlzR2VuZXJhdGluZyA9IHRvTmdTaWduYWwoXG4gICAgaGFzaGJyb3duLmlzR2VuZXJhdGluZyxcbiAgICBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0uaXNHZW5lcmF0aW5nYCxcbiAgKTtcbiAgY29uc3QgaXNSdW5uaW5nVG9vbENhbGxzID0gdG9OZ1NpZ25hbChcbiAgICBoYXNoYnJvd24uaXNSdW5uaW5nVG9vbENhbGxzLFxuICAgIG9wdGlvbnMuZGVidWdOYW1lICYmIGAke29wdGlvbnMuZGVidWdOYW1lfS5pc1J1bm5pbmdUb29sQ2FsbHNgLFxuICApO1xuICBjb25zdCBpc0xvYWRpbmcgPSB0b05nU2lnbmFsKFxuICAgIGhhc2hicm93bi5pc0xvYWRpbmcsXG4gICAgb3B0aW9ucy5kZWJ1Z05hbWUgJiYgYCR7b3B0aW9ucy5kZWJ1Z05hbWV9LmlzTG9hZGluZ2AsXG4gICk7XG4gIGNvbnN0IGVycm9yID0gdG9OZ1NpZ25hbChcbiAgICBoYXNoYnJvd24uZXJyb3IsXG4gICAgb3B0aW9ucy5kZWJ1Z05hbWUgJiYgYCR7b3B0aW9ucy5kZWJ1Z05hbWV9LmVycm9yYCxcbiAgKTtcbiAgY29uc3Qgc2VuZGluZ0Vycm9yID0gdG9OZ1NpZ25hbChcbiAgICBoYXNoYnJvd24uc2VuZGluZ0Vycm9yLFxuICAgIG9wdGlvbnMuZGVidWdOYW1lICYmIGAke29wdGlvbnMuZGVidWdOYW1lfS5zZW5kaW5nRXJyb3JgLFxuICApO1xuICBjb25zdCBnZW5lcmF0aW5nRXJyb3IgPSB0b05nU2lnbmFsKFxuICAgIGhhc2hicm93bi5nZW5lcmF0aW5nRXJyb3IsXG4gICAgb3B0aW9ucy5kZWJ1Z05hbWUgJiYgYCR7b3B0aW9ucy5kZWJ1Z05hbWV9LmdlbmVyYXRpbmdFcnJvcmAsXG4gICk7XG4gIGNvbnN0IGxhc3RBc3Npc3RhbnRNZXNzYWdlID0gdG9OZ1NpZ25hbChcbiAgICBoYXNoYnJvd24ubGFzdEFzc2lzdGFudE1lc3NhZ2UsXG4gICAgb3B0aW9ucy5kZWJ1Z05hbWUgJiYgYCR7b3B0aW9ucy5kZWJ1Z05hbWV9Lmxhc3RBc3Npc3RhbnRNZXNzYWdlYCxcbiAgKTtcbiAgY29uc3QgaXNMb2FkaW5nVGhyZWFkID0gdG9OZ1NpZ25hbChcbiAgICBoYXNoYnJvd24uaXNMb2FkaW5nVGhyZWFkLFxuICAgIG9wdGlvbnMuZGVidWdOYW1lICYmIGAke29wdGlvbnMuZGVidWdOYW1lfS5pc0xvYWRpbmdUaHJlYWRgLFxuICApO1xuICBjb25zdCBpc1NhdmluZ1RocmVhZCA9IHRvTmdTaWduYWwoXG4gICAgaGFzaGJyb3duLmlzU2F2aW5nVGhyZWFkLFxuICAgIG9wdGlvbnMuZGVidWdOYW1lICYmIGAke29wdGlvbnMuZGVidWdOYW1lfS5pc1NhdmluZ1RocmVhZGAsXG4gICk7XG4gIGNvbnN0IHRocmVhZExvYWRFcnJvciA9IHRvTmdTaWduYWwoXG4gICAgaGFzaGJyb3duLnRocmVhZExvYWRFcnJvcixcbiAgICBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0udGhyZWFkTG9hZEVycm9yYCxcbiAgKTtcbiAgY29uc3QgdGhyZWFkU2F2ZUVycm9yID0gdG9OZ1NpZ25hbChcbiAgICBoYXNoYnJvd24udGhyZWFkU2F2ZUVycm9yLFxuICAgIG9wdGlvbnMuZGVidWdOYW1lICYmIGAke29wdGlvbnMuZGVidWdOYW1lfS50aHJlYWRTYXZlRXJyb3JgLFxuICApO1xuXG4gIGNvbnN0IHN0YXR1cyA9IGNvbXB1dGVkKFxuICAgICgpOiBSZXNvdXJjZVN0YXR1cyA9PiB7XG4gICAgICBpZiAoaXNMb2FkaW5nKCkpIHtcbiAgICAgICAgcmV0dXJuICdsb2FkaW5nJztcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yKCkpIHtcbiAgICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc0Fzc2lzdGFudE1lc3NhZ2UgPSB2YWx1ZSgpLnNvbWUoXG4gICAgICAgIChtZXNzYWdlKSA9PiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnLFxuICAgICAgKTtcblxuICAgICAgaWYgKGhhc0Fzc2lzdGFudE1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuICdyZXNvbHZlZCc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnaWRsZSc7XG4gICAgfSxcbiAgICB7IGRlYnVnTmFtZTogb3B0aW9ucy5kZWJ1Z05hbWUgJiYgYCR7b3B0aW9ucy5kZWJ1Z05hbWV9LnN0YXR1c2AgfSxcbiAgKTtcblxuICBmdW5jdGlvbiByZWxvYWQoKSB7XG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSB2YWx1ZSgpW3ZhbHVlKCkubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAobGFzdE1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgIGhhc2hicm93bi5zZXRNZXNzYWdlcyh2YWx1ZSgpLnNsaWNlKDAsIC0xKSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhc1ZhbHVlKCkge1xuICAgIHJldHVybiB2YWx1ZSgpLnNvbWUoKG1lc3NhZ2UpID0+IG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VuZE1lc3NhZ2UobWVzc2FnZTogQ2hhdC5Vc2VyTWVzc2FnZSkge1xuICAgIGhhc2hicm93bi5zZW5kTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3AoY2xlYXJTdHJlYW1pbmdNZXNzYWdlID0gZmFsc2UpIHtcbiAgICBoYXNoYnJvd24uc3RvcChjbGVhclN0cmVhbWluZ01lc3NhZ2UpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNWYWx1ZTogaGFzVmFsdWUgYXMgYW55LFxuICAgIHN0YXR1cyxcbiAgICBpc1JlY2VpdmluZyxcbiAgICBpc1NlbmRpbmcsXG4gICAgaXNHZW5lcmF0aW5nLFxuICAgIGlzUnVubmluZ1Rvb2xDYWxscyxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNMb2FkaW5nVGhyZWFkLFxuICAgIGlzU2F2aW5nVGhyZWFkLFxuICAgIHNlbmRpbmdFcnJvcixcbiAgICBnZW5lcmF0aW5nRXJyb3IsXG4gICAgdGhyZWFkTG9hZEVycm9yLFxuICAgIHRocmVhZFNhdmVFcnJvcixcbiAgICByZWxvYWQsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgc3RvcCxcbiAgICB2YWx1ZSxcbiAgICBlcnJvcixcbiAgICBsYXN0QXNzaXN0YW50TWVzc2FnZSxcbiAgfTtcbn1cbiJdfQ==","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, DestroyRef, effect, inject, Injector, runInInjectionContext, } from '@angular/core';\nimport { fryHashbrown } from '@hashbrownai/core';\nimport { ɵinjectHashbrownConfig } from '../providers/provide-hashbrown.fn';\nimport { readSignalLike, toNgSignal } from '../utils/signals';\n/**\n * Creates a completion resource.\n *\n * @public\n * @param options - The options for the completion resource.\n * @typeParam Input - The type of the input to the completion.\n * @returns The completion resource.\n */\nexport function completionResource(options) {\n    const { model, input, system } = options;\n    const injector = inject(Injector);\n    const destroyRef = inject(DestroyRef);\n    const config = ɵinjectHashbrownConfig();\n    const hashbrown = fryHashbrown({\n        debugName: options.debugName,\n        apiUrl: options.apiUrl ?? config.baseUrl,\n        middleware: config.middleware?.map((m) => {\n            return (requestInit) => runInInjectionContext(injector, () => m(requestInit));\n        }),\n        model: readSignalLike(model),\n        system: readSignalLike(system),\n        messages: [],\n        tools: [],\n        retries: 3,\n        transport: options.transport ?? config.transport,\n        threadId: options.threadId ? readSignalLike(options.threadId) : undefined,\n    });\n    const teardown = hashbrown.sizzle();\n    destroyRef.onDestroy(() => teardown());\n    const messages = toNgSignal(hashbrown.messages);\n    const isReceiving = toNgSignal(hashbrown.isReceiving);\n    const isSending = toNgSignal(hashbrown.isSending);\n    const isGenerating = toNgSignal(hashbrown.isGenerating);\n    const isRunningToolCalls = toNgSignal(hashbrown.isRunningToolCalls);\n    const isLoading = toNgSignal(hashbrown.isLoading);\n    const isLoadingThread = toNgSignal(hashbrown.isLoadingThread);\n    const isSavingThread = toNgSignal(hashbrown.isSavingThread);\n    const sendingError = toNgSignal(hashbrown.sendingError);\n    const generatingError = toNgSignal(hashbrown.generatingError);\n    const threadLoadError = toNgSignal(hashbrown.threadLoadError);\n    const threadSaveError = toNgSignal(hashbrown.threadSaveError);\n    const internalMessages = computed(() => {\n        const _input = input();\n        if (!_input) {\n            return [];\n        }\n        return [\n            {\n                role: 'user',\n                content: _input,\n            },\n        ];\n    }, ...(ngDevMode ? [{ debugName: \"internalMessages\" }] : []));\n    const error = toNgSignal(hashbrown.error, options.debugName && `${options.debugName}.error`);\n    const exhaustedRetries = toNgSignal(hashbrown.exhaustedRetries, options.debugName && `${options.debugName}.exhaustedRetries`);\n    effect(() => {\n        const _messages = internalMessages();\n        hashbrown.setMessages(_messages);\n    });\n    const value = computed(() => {\n        const lastMessage = messages()[messages().length - 1];\n        if (lastMessage &&\n            lastMessage.role === 'assistant' &&\n            lastMessage.content &&\n            typeof lastMessage.content === 'string') {\n            return lastMessage.content;\n        }\n        return null;\n    }, { debugName: options.debugName && `${options.debugName}.value` });\n    const status = computed(() => {\n        if (isLoading()) {\n            return 'loading';\n        }\n        if (exhaustedRetries()) {\n            return 'error';\n        }\n        return 'idle';\n    }, ...(ngDevMode ? [{ debugName: \"status\" }] : []));\n    const reload = () => {\n        return true;\n    };\n    function hasValue() {\n        return Boolean(value());\n    }\n    function stop(clearStreamingMessage = false) {\n        hashbrown.stop(clearStreamingMessage);\n    }\n    return {\n        value,\n        status,\n        error,\n        isLoading,\n        isReceiving,\n        isSending,\n        isGenerating,\n        isRunningToolCalls,\n        isLoadingThread,\n        isSavingThread,\n        sendingError,\n        generatingError,\n        threadLoadError,\n        threadSaveError,\n        reload,\n        stop,\n        hasValue: hasValue,\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGlvbi1yZXNvdXJjZS5mbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvc3JjL3Jlc291cmNlcy9jb21wbGV0aW9uLXJlc291cmNlLmZuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFHUixxQkFBcUIsR0FFdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFRLFlBQVksRUFBMkIsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBc0Y5RDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxPQUF5QztJQUV6QyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQztRQUM3QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7UUFDNUIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU87UUFDeEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFtQixFQUFFO1lBQ3hELE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUNyQixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDO1FBQ0YsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDNUIsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDOUIsUUFBUSxFQUFFLEVBQUU7UUFDWixLQUFLLEVBQUUsRUFBRTtRQUNULE9BQU8sRUFBRSxDQUFDO1FBQ1YsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFNBQVM7UUFDaEQsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDMUUsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRXBDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUV2QyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEQsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hELE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEQsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM5RCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEQsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM5RCxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzlELE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDOUQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU87WUFDTDtnQkFDRSxJQUFJLEVBQUUsTUFBZTtnQkFDckIsT0FBTyxFQUFFLE1BQU07YUFDaEI7U0FDRixDQUFDO0lBQ0osQ0FBQyw0REFBQyxDQUFDO0lBRUgsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUN0QixTQUFTLENBQUMsS0FBSyxFQUNmLE9BQU8sQ0FBQyxTQUFTLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxRQUFRLENBQ2xELENBQUM7SUFFRixNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FDakMsU0FBUyxDQUFDLGdCQUFnQixFQUMxQixPQUFPLENBQUMsU0FBUyxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsbUJBQW1CLENBQzdELENBQUM7SUFFRixNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ1YsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUVyQyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUNwQixHQUFHLEVBQUU7UUFDSCxNQUFNLFdBQVcsR0FBRyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFdEQsSUFDRSxXQUFXO1lBQ1gsV0FBVyxDQUFDLElBQUksS0FBSyxXQUFXO1lBQ2hDLFdBQVcsQ0FBQyxPQUFPO1lBQ25CLE9BQU8sV0FBVyxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQ3ZDLENBQUM7WUFDRCxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDN0IsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxFQUNELEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxRQUFRLEVBQUUsQ0FDakUsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFtQixFQUFFO1FBQzNDLElBQUksU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNoQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7WUFDdkIsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsa0RBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRTtRQUNsQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztJQUVGLFNBQVMsUUFBUTtRQUNmLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELFNBQVMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUs7UUFDekMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxPQUFPO1FBQ0wsS0FBSztRQUNMLE1BQU07UUFDTixLQUFLO1FBQ0wsU0FBUztRQUNULFdBQVc7UUFDWCxTQUFTO1FBQ1QsWUFBWTtRQUNaLGtCQUFrQjtRQUNsQixlQUFlO1FBQ2YsY0FBYztRQUNkLFlBQVk7UUFDWixlQUFlO1FBQ2YsZUFBZTtRQUNmLGVBQWU7UUFDZixNQUFNO1FBQ04sSUFBSTtRQUNKLFFBQVEsRUFBRSxRQUFlO0tBQzFCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtcbiAgY29tcHV0ZWQsXG4gIERlc3Ryb3lSZWYsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBJbmplY3RvcixcbiAgUmVzb3VyY2UsXG4gIFJlc291cmNlU3RhdHVzLFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gIFNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGF0LCBmcnlIYXNoYnJvd24sIHR5cGUgVHJhbnNwb3J0T3JGYWN0b3J5IH0gZnJvbSAnQGhhc2hicm93bmFpL2NvcmUnO1xuaW1wb3J0IHsgybVpbmplY3RIYXNoYnJvd25Db25maWcgfSBmcm9tICcuLi9wcm92aWRlcnMvcHJvdmlkZS1oYXNoYnJvd24uZm4nO1xuaW1wb3J0IHsgU2lnbmFsTGlrZSB9IGZyb20gJy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IHJlYWRTaWduYWxMaWtlLCB0b05nU2lnbmFsIH0gZnJvbSAnLi4vdXRpbHMvc2lnbmFscyc7XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gdGhlIGNvbXBsZXRpb24gcmVzb3VyY2UuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRpb25SZXNvdXJjZVJlZiBleHRlbmRzIFJlc291cmNlPHN0cmluZyB8IG51bGw+IHtcbiAgLyoqXG4gICAqIFJlbG9hZHMgdGhlIHJlc291cmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSByZXNvdXJjZSB3YXMgcmVsb2FkZWQuXG4gICAqL1xuICByZWxvYWQ6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFN0b3BzIGFueSBjdXJyZW50bHktc3RyZWFtaW5nIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBjbGVhclN0cmVhbWluZ01lc3NhZ2UgLSBXaGV0aGVyIHRoZSBjdXJyZW50bHktc3RyZWFtaW5nIG1lc3NhZ2Ugc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBzdGF0ZS5cbiAgICovXG4gIHN0b3A6IChjbGVhclN0cmVhbWluZ01lc3NhZ2U/OiBib29sZWFuKSA9PiB2b2lkO1xuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNoYXQgaXMgcmVjZWl2aW5nIHRva2Vucy4gKi9cbiAgaXNSZWNlaXZpbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjaGF0IGlzIHNlbmRpbmcuICovXG4gIGlzU2VuZGluZzogU2lnbmFsPGJvb2xlYW4+O1xuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNoYXQgaXMgZ2VuZXJhdGluZy4gKi9cbiAgaXNHZW5lcmF0aW5nOiBTaWduYWw8Ym9vbGVhbj47XG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0b29sIGNhbGxzIGFyZSBydW5uaW5nLiAqL1xuICBpc1J1bm5pbmdUb29sQ2FsbHM6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIEFnZ3JlZ2F0ZSBsb2FkaW5nIGZsYWcgYWNyb3NzIHRyYW5zcG9ydCwgZ2VuZXJhdGlvbiwgdG9vbCBjYWxscywgYW5kIHRocmVhZCBsb2FkL3NhdmUuICovXG4gIGlzTG9hZGluZzogU2lnbmFsPGJvb2xlYW4+O1xuICAvKiogV2hldGhlciBhIHRocmVhZCBsb2FkIHJlcXVlc3QgaXMgaW4gZmxpZ2h0LiAqL1xuICBpc0xvYWRpbmdUaHJlYWQ6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgYSB0aHJlYWQgc2F2ZSByZXF1ZXN0IGlzIGluIGZsaWdodC4gKi9cbiAgaXNTYXZpbmdUaHJlYWQ6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIEVycm9yIGVuY291bnRlcmVkIHdoaWxlIGxvYWRpbmcgYSB0aHJlYWQuICovXG4gIHRocmVhZExvYWRFcnJvcjogU2lnbmFsPHsgZXJyb3I6IHN0cmluZzsgc3RhY2t0cmFjZT86IHN0cmluZyB9IHwgdW5kZWZpbmVkPjtcbiAgLyoqIEVycm9yIGVuY291bnRlcmVkIHdoaWxlIHNhdmluZyBhIHRocmVhZC4gKi9cbiAgdGhyZWFkU2F2ZUVycm9yOiBTaWduYWw8eyBlcnJvcjogc3RyaW5nOyBzdGFja3RyYWNlPzogc3RyaW5nIH0gfCB1bmRlZmluZWQ+O1xuICAvKiogVHJhbnNwb3J0L3JlcXVlc3QgZXJyb3IgYmVmb3JlIGdlbmVyYXRpb24gZnJhbWVzIGFycml2ZS4gKi9cbiAgc2VuZGluZ0Vycm9yOiBTaWduYWw8RXJyb3IgfCB1bmRlZmluZWQ+O1xuICAvKiogRXJyb3IgZW1pdHRlZCBkdXJpbmcgZ2VuZXJhdGlvbiBmcmFtZXMuICovXG4gIGdlbmVyYXRpbmdFcnJvcjogU2lnbmFsPEVycm9yIHwgdW5kZWZpbmVkPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgY29tcGxldGlvbiByZXNvdXJjZS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxldGlvblJlc291cmNlT3B0aW9uczxJbnB1dD4ge1xuICAvKipcbiAgICogVGhlIG1vZGVsIHRvIHVzZSBmb3IgdGhlIGNvbXBsZXRpb24uXG4gICAqL1xuICBtb2RlbDogU2lnbmFsTGlrZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgdG8gdGhlIGNvbXBsZXRpb24uXG4gICAqL1xuICBpbnB1dDogU2lnbmFsPElucHV0IHwgbnVsbCB8IHVuZGVmaW5lZD47XG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvbXB0IHRvIHVzZSBmb3IgdGhlIGNvbXBsZXRpb24uXG4gICAqL1xuICBzeXN0ZW06IFNpZ25hbExpa2U8c3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIEFQSSBVUkwgdG8gdXNlIGZvciB0aGUgY29tcGxldGlvbi5cbiAgICovXG4gIGFwaVVybD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlYnVnIG5hbWUgZm9yIHRoZSBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgZGVidWdOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gdHJhbnNwb3J0IG92ZXJyaWRlIGZvciB0aGlzIGNvbXBsZXRpb24gcmVzb3VyY2UuXG4gICAqL1xuICB0cmFuc3BvcnQ/OiBUcmFuc3BvcnRPckZhY3Rvcnk7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRocmVhZCBpZGVudGlmaWVyIHVzZWQgdG8gbG9hZCBvciBjb250aW51ZSBhbiBleGlzdGluZyBjb252ZXJzYXRpb24uXG4gICAqL1xuICB0aHJlYWRJZD86IFNpZ25hbExpa2U8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGxldGlvbiByZXNvdXJjZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgY29tcGxldGlvbiByZXNvdXJjZS5cbiAqIEB0eXBlUGFyYW0gSW5wdXQgLSBUaGUgdHlwZSBvZiB0aGUgaW5wdXQgdG8gdGhlIGNvbXBsZXRpb24uXG4gKiBAcmV0dXJucyBUaGUgY29tcGxldGlvbiByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBsZXRpb25SZXNvdXJjZTxJbnB1dD4oXG4gIG9wdGlvbnM6IENvbXBsZXRpb25SZXNvdXJjZU9wdGlvbnM8SW5wdXQ+LFxuKTogQ29tcGxldGlvblJlc291cmNlUmVmIHtcbiAgY29uc3QgeyBtb2RlbCwgaW5wdXQsIHN5c3RlbSB9ID0gb3B0aW9ucztcbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBjb25zdCBjb25maWcgPSDJtWluamVjdEhhc2hicm93bkNvbmZpZygpO1xuICBjb25zdCBoYXNoYnJvd24gPSBmcnlIYXNoYnJvd24oe1xuICAgIGRlYnVnTmFtZTogb3B0aW9ucy5kZWJ1Z05hbWUsXG4gICAgYXBpVXJsOiBvcHRpb25zLmFwaVVybCA/PyBjb25maWcuYmFzZVVybCxcbiAgICBtaWRkbGV3YXJlOiBjb25maWcubWlkZGxld2FyZT8ubWFwKChtKTogQ2hhdC5NaWRkbGV3YXJlID0+IHtcbiAgICAgIHJldHVybiAocmVxdWVzdEluaXQpID0+XG4gICAgICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4gbShyZXF1ZXN0SW5pdCkpO1xuICAgIH0pLFxuICAgIG1vZGVsOiByZWFkU2lnbmFsTGlrZShtb2RlbCksXG4gICAgc3lzdGVtOiByZWFkU2lnbmFsTGlrZShzeXN0ZW0pLFxuICAgIG1lc3NhZ2VzOiBbXSxcbiAgICB0b29sczogW10sXG4gICAgcmV0cmllczogMyxcbiAgICB0cmFuc3BvcnQ6IG9wdGlvbnMudHJhbnNwb3J0ID8/IGNvbmZpZy50cmFuc3BvcnQsXG4gICAgdGhyZWFkSWQ6IG9wdGlvbnMudGhyZWFkSWQgPyByZWFkU2lnbmFsTGlrZShvcHRpb25zLnRocmVhZElkKSA6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgdGVhcmRvd24gPSBoYXNoYnJvd24uc2l6emxlKCk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gdGVhcmRvd24oKSk7XG5cbiAgY29uc3QgbWVzc2FnZXMgPSB0b05nU2lnbmFsKGhhc2hicm93bi5tZXNzYWdlcyk7XG4gIGNvbnN0IGlzUmVjZWl2aW5nID0gdG9OZ1NpZ25hbChoYXNoYnJvd24uaXNSZWNlaXZpbmcpO1xuICBjb25zdCBpc1NlbmRpbmcgPSB0b05nU2lnbmFsKGhhc2hicm93bi5pc1NlbmRpbmcpO1xuICBjb25zdCBpc0dlbmVyYXRpbmcgPSB0b05nU2lnbmFsKGhhc2hicm93bi5pc0dlbmVyYXRpbmcpO1xuICBjb25zdCBpc1J1bm5pbmdUb29sQ2FsbHMgPSB0b05nU2lnbmFsKGhhc2hicm93bi5pc1J1bm5pbmdUb29sQ2FsbHMpO1xuICBjb25zdCBpc0xvYWRpbmcgPSB0b05nU2lnbmFsKGhhc2hicm93bi5pc0xvYWRpbmcpO1xuICBjb25zdCBpc0xvYWRpbmdUaHJlYWQgPSB0b05nU2lnbmFsKGhhc2hicm93bi5pc0xvYWRpbmdUaHJlYWQpO1xuICBjb25zdCBpc1NhdmluZ1RocmVhZCA9IHRvTmdTaWduYWwoaGFzaGJyb3duLmlzU2F2aW5nVGhyZWFkKTtcbiAgY29uc3Qgc2VuZGluZ0Vycm9yID0gdG9OZ1NpZ25hbChoYXNoYnJvd24uc2VuZGluZ0Vycm9yKTtcbiAgY29uc3QgZ2VuZXJhdGluZ0Vycm9yID0gdG9OZ1NpZ25hbChoYXNoYnJvd24uZ2VuZXJhdGluZ0Vycm9yKTtcbiAgY29uc3QgdGhyZWFkTG9hZEVycm9yID0gdG9OZ1NpZ25hbChoYXNoYnJvd24udGhyZWFkTG9hZEVycm9yKTtcbiAgY29uc3QgdGhyZWFkU2F2ZUVycm9yID0gdG9OZ1NpZ25hbChoYXNoYnJvd24udGhyZWFkU2F2ZUVycm9yKTtcbiAgY29uc3QgaW50ZXJuYWxNZXNzYWdlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBfaW5wdXQgPSBpbnB1dCgpO1xuXG4gICAgaWYgKCFfaW5wdXQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICByb2xlOiAndXNlcicgYXMgY29uc3QsXG4gICAgICAgIGNvbnRlbnQ6IF9pbnB1dCxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSk7XG5cbiAgY29uc3QgZXJyb3IgPSB0b05nU2lnbmFsKFxuICAgIGhhc2hicm93bi5lcnJvcixcbiAgICBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0uZXJyb3JgLFxuICApO1xuXG4gIGNvbnN0IGV4aGF1c3RlZFJldHJpZXMgPSB0b05nU2lnbmFsKFxuICAgIGhhc2hicm93bi5leGhhdXN0ZWRSZXRyaWVzLFxuICAgIG9wdGlvbnMuZGVidWdOYW1lICYmIGAke29wdGlvbnMuZGVidWdOYW1lfS5leGhhdXN0ZWRSZXRyaWVzYCxcbiAgKTtcblxuICBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IF9tZXNzYWdlcyA9IGludGVybmFsTWVzc2FnZXMoKTtcblxuICAgIGhhc2hicm93bi5zZXRNZXNzYWdlcyhfbWVzc2FnZXMpO1xuICB9KTtcblxuICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXMoKVttZXNzYWdlcygpLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGxhc3RNZXNzYWdlICYmXG4gICAgICAgIGxhc3RNZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnICYmXG4gICAgICAgIGxhc3RNZXNzYWdlLmNvbnRlbnQgJiZcbiAgICAgICAgdHlwZW9mIGxhc3RNZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGxhc3RNZXNzYWdlLmNvbnRlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHsgZGVidWdOYW1lOiBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0udmFsdWVgIH0sXG4gICk7XG5cbiAgY29uc3Qgc3RhdHVzID0gY29tcHV0ZWQoKCk6IFJlc291cmNlU3RhdHVzID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nKCkpIHtcbiAgICAgIHJldHVybiAnbG9hZGluZyc7XG4gICAgfVxuXG4gICAgaWYgKGV4aGF1c3RlZFJldHJpZXMoKSkge1xuICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgfVxuXG4gICAgcmV0dXJuICdpZGxlJztcbiAgfSk7XG4gIGNvbnN0IHJlbG9hZCA9ICgpID0+IHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBmdW5jdGlvbiBoYXNWYWx1ZSh0aGlzOiBDb21wbGV0aW9uUmVzb3VyY2VSZWYpIHtcbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3AoY2xlYXJTdHJlYW1pbmdNZXNzYWdlID0gZmFsc2UpIHtcbiAgICBoYXNoYnJvd24uc3RvcChjbGVhclN0cmVhbWluZ01lc3NhZ2UpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZSxcbiAgICBzdGF0dXMsXG4gICAgZXJyb3IsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzUmVjZWl2aW5nLFxuICAgIGlzU2VuZGluZyxcbiAgICBpc0dlbmVyYXRpbmcsXG4gICAgaXNSdW5uaW5nVG9vbENhbGxzLFxuICAgIGlzTG9hZGluZ1RocmVhZCxcbiAgICBpc1NhdmluZ1RocmVhZCxcbiAgICBzZW5kaW5nRXJyb3IsXG4gICAgZ2VuZXJhdGluZ0Vycm9yLFxuICAgIHRocmVhZExvYWRFcnJvcixcbiAgICB0aHJlYWRTYXZlRXJyb3IsXG4gICAgcmVsb2FkLFxuICAgIHN0b3AsXG4gICAgaGFzVmFsdWU6IGhhc1ZhbHVlIGFzIGFueSxcbiAgfTtcbn1cbiJdfQ==","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, DestroyRef, effect, inject, Injector, runInInjectionContext, } from '@angular/core';\nimport { fryHashbrown, } from '@hashbrownai/core';\nimport { ɵinjectHashbrownConfig } from '../providers/provide-hashbrown.fn';\nimport { readSignalLike, toNgSignal } from '../utils/signals';\nimport { bindToolToInjector } from '../utils/create-tool.fn';\nimport { toDeepSignal } from '../utils/deep-signal';\n/**\n * Creates a structured chat resource.\n *\n * @public\n * @param options - The options for the structured chat resource.\n * @returns The structured chat resource.\n */\nexport function structuredChatResource(options) {\n    const config = ɵinjectHashbrownConfig();\n    const injector = inject(Injector);\n    const destroyRef = inject(DestroyRef);\n    const hashbrown = fryHashbrown({\n        apiUrl: options.apiUrl ?? config.baseUrl,\n        middleware: config.middleware?.map((m) => {\n            return (requestInit) => runInInjectionContext(injector, () => m(requestInit));\n        }),\n        system: readSignalLike(options.system),\n        messages: [...(options.messages ?? [])],\n        model: options.model,\n        tools: options.tools?.map((tool) => bindToolToInjector(tool, injector)),\n        responseSchema: options.schema,\n        debugName: options.debugName,\n        emulateStructuredOutput: config.emulateStructuredOutput,\n        debounce: options.debounce,\n        retries: options.retries,\n        transport: options.transport ?? config.transport,\n        ui: options.ui ?? false,\n        threadId: options.threadId ? readSignalLike(options.threadId) : undefined,\n    });\n    const optionsEffect = effect(() => {\n        const model = options.model;\n        const system = readSignalLike(options.system);\n        const threadId = options.threadId\n            ? readSignalLike(options.threadId)\n            : undefined;\n        hashbrown.updateOptions({\n            model,\n            system,\n            ui: options.ui ?? false,\n            threadId,\n        });\n    }, ...(ngDevMode ? [{ debugName: \"optionsEffect\" }] : []));\n    const teardown = hashbrown.sizzle();\n    destroyRef.onDestroy(() => {\n        teardown();\n        optionsEffect.destroy();\n    });\n    const valueSignal = toNgSignal(hashbrown.messages, options.debugName && `${options.debugName}.value`);\n    const value = toDeepSignal(valueSignal);\n    const isReceiving = toNgSignal(hashbrown.isReceiving, options.debugName && `${options.debugName}.isReceiving`);\n    const isSending = toNgSignal(hashbrown.isSending, options.debugName && `${options.debugName}.isSending`);\n    const isGenerating = toNgSignal(hashbrown.isGenerating, options.debugName && `${options.debugName}.isGenerating`);\n    const isRunningToolCalls = toNgSignal(hashbrown.isRunningToolCalls, options.debugName && `${options.debugName}.isRunningToolCalls`);\n    const isLoading = toNgSignal(hashbrown.isLoading, options.debugName && `${options.debugName}.isLoading`);\n    const error = toNgSignal(hashbrown.error, options.debugName && `${options.debugName}.error`);\n    const sendingError = toNgSignal(hashbrown.sendingError, options.debugName && `${options.debugName}.sendingError`);\n    const generatingError = toNgSignal(hashbrown.generatingError, options.debugName && `${options.debugName}.generatingError`);\n    const lastAssistantMessage = toNgSignal(hashbrown.lastAssistantMessage, options.debugName && `${options.debugName}.lastAssistantMessage`);\n    const exhaustedRetries = toNgSignal(hashbrown.exhaustedRetries);\n    const isLoadingThread = toNgSignal(hashbrown.isLoadingThread, options.debugName && `${options.debugName}.isLoadingThread`);\n    const isSavingThread = toNgSignal(hashbrown.isSavingThread, options.debugName && `${options.debugName}.isSavingThread`);\n    const threadLoadError = toNgSignal(hashbrown.threadLoadError, options.debugName && `${options.debugName}.threadLoadError`);\n    const threadSaveError = toNgSignal(hashbrown.threadSaveError, options.debugName && `${options.debugName}.threadSaveError`);\n    const status = computed(() => {\n        if (isLoading()) {\n            return 'loading';\n        }\n        if (exhaustedRetries()) {\n            return 'error';\n        }\n        const hasAssistantMessage = value().some((message) => message.role === 'assistant');\n        if (hasAssistantMessage) {\n            return 'resolved';\n        }\n        return 'idle';\n    }, { debugName: options.debugName && `${options.debugName}.status` });\n    function reload() {\n        const lastMessage = value()[value().length - 1];\n        if (lastMessage.role === 'assistant') {\n            hashbrown.setMessages(value().slice(0, -1));\n            return true;\n        }\n        return false;\n    }\n    function hasValue() {\n        return value().some((message) => message.role === 'assistant');\n    }\n    function sendMessage(message) {\n        hashbrown.sendMessage(message);\n    }\n    function resendMessages() {\n        hashbrown.resendMessages();\n    }\n    function setMessages(messages) {\n        hashbrown.setMessages(messages);\n    }\n    function stop(clearStreamingMessage = false) {\n        hashbrown.stop(clearStreamingMessage);\n    }\n    return {\n        hasValue: hasValue,\n        status,\n        isLoading,\n        isGenerating,\n        isSending,\n        isReceiving,\n        isRunningToolCalls,\n        reload,\n        sendMessage,\n        resendMessages,\n        stop,\n        value,\n        error,\n        sendingError,\n        generatingError,\n        setMessages,\n        lastAssistantMessage,\n        isLoadingThread,\n        isSavingThread,\n        threadLoadError,\n        threadSaveError,\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJlZC1jaGF0LXJlc291cmNlLmZuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9zcmMvcmVzb3VyY2VzL3N0cnVjdHVyZWQtY2hhdC1yZXNvdXJjZS5mbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUNMLFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBR1IscUJBQXFCLEdBRXRCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxZQUFZLEdBSWIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQXNKcEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUtwQyxPQUE2RDtJQUU3RCxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUF3QjtRQUNwRCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTztRQUN4QyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQW1CLEVBQUU7WUFDeEQsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQ3JCLHFCQUFxQixDQUFDLFFB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QUNmLE9BQU8sS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxTQUFTLFdBQVcsQ0FBQyxPQUF5QjtRQUM1QyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxTQUFTLGNBQWM7UUFDckIsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxTQUFTLFdBQVcsQ0FBQyxRQUF1QztRQUMxRCxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxTQUFTLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLO1FBQ3pDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsT0FBTztRQUNMLFFBQVEsRUFBRSxRQUFlO1FBQ3pCLE1BQU07UUFDTixTQUFTO1FBQ1QsWUFBWTtRQUNaLFNBQVM7UUFDVCxXQUFXO1FBQ1gsa0JBQWtCO1FBQ2xCLE1BQU07UUFDTixXQUFXO1FBQ1gsY0FBYztRQUNkLElBQUk7UUFDSixLQUFLO1FBQ0wsS0FBSztRQUNMLFlBQVk7UUFDWixlQUFlO1FBQ2YsV0FBVztRQUNYLG9CQUFvQjtRQUNwQixlQUFlO1FBQ2YsY0FBYztRQUNkLGVBQWU7UUFDZixlQUFlO0tBQ2hCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtcbiAgY29tcHV0ZWQsXG4gIERlc3Ryb3lSZWYsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBJbmplY3RvcixcbiAgUmVzb3VyY2UsXG4gIFJlc291cmNlU3RhdHVzLFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gIFNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDaGF0LFxuICBmcnlIYXNoYnJvd24sXG4gIHR5cGUgTW9kZWxJbnB1dCxcbiAgcyxcbiAgdHlwZSBUcmFuc3BvcnRPckZhY3RvcnksXG59IGZyb20gJ0BoYXNoYnJvd25haS9jb3JlJztcbmltcG9ydCB7IMm1aW5qZWN0SGFzaGJyb3duQ29uZmlnIH0gZnJvbSAnLi4vcHJvdmlkZXJzL3Byb3ZpZGUtaGFzaGJyb3duLmZuJztcbmltcG9ydCB7IHJlYWRTaWduYWxMaWtlLCB0b05nU2lnbmFsIH0gZnJvbSAnLi4vdXRpbHMvc2lnbmFscyc7XG5pbXBvcnQgeyBTaWduYWxMaWtlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgYmluZFRvb2xUb0luamVjdG9yIH0gZnJvbSAnLi4vdXRpbHMvY3JlYXRlLXRvb2wuZm4nO1xuaW1wb3J0IHsgdG9EZWVwU2lnbmFsIH0gZnJvbSAnLi4vdXRpbHMvZGVlcC1zaWduYWwnO1xuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIHRoZSBzdHJ1Y3R1cmVkIGNoYXQgcmVzb3VyY2UuXG4gKlxuICogQHB1YmxpY1xuICogQHR5cGVQYXJhbSBPdXRwdXQgLSBUaGUgdHlwZSBvZiB0aGUgb3V0cHV0IGZyb20gdGhlIGNoYXQuXG4gKiBAdHlwZVBhcmFtIFRvb2xzIC0gVGhlIHNldCBvZiB0b29sIGRlZmluaXRpb25zIGF2YWlsYWJsZSB0byB0aGUgY2hhdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVkQ2hhdFJlc291cmNlUmVmPE91dHB1dCwgVG9vbHMgZXh0ZW5kcyBDaGF0LkFueVRvb2w+XG4gIGV4dGVuZHMgUmVzb3VyY2U8Q2hhdC5NZXNzYWdlPE91dHB1dCwgVG9vbHM+W10+IHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGNoYXQgY2FsbCBpcyBjdXJyZW50bHkgc2VuZGluZyBhIG1lc3NhZ2UuXG4gICAqL1xuICBpc1NlbmRpbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjaGF0IGlzIGdlbmVyYXRpbmcgYXNzaXN0YW50IG91dHB1dC5cbiAgICovXG4gIGlzR2VuZXJhdGluZzogU2lnbmFsPGJvb2xlYW4+O1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcmVzb3VyY2UgaXMgY3VycmVudGx5IHJlY2VpdmluZyBhIHJlc3BvbnNlIGZyb20gdGhlIG1vZGVsLlxuICAgKi9cbiAgaXNSZWNlaXZpbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNoYXQgaXMgcnVubmluZyB0b29sIGNhbGxzLlxuICAgKi9cbiAgaXNSdW5uaW5nVG9vbENhbGxzOiBTaWduYWw8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBBZ2dyZWdhdGUgbG9hZGluZyBmbGFnIGFjcm9zcyB0cmFuc3BvcnQsIGdlbmVyYXRpb24sIHRvb2wgY2FsbHMsIGFuZCB0aHJlYWQgbG9hZC9zYXZlLlxuICAgKi9cbiAgaXNMb2FkaW5nOiBTaWduYWw8Ym9vbGVhbj47XG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciBhIHRocmVhZCBsb2FkIHJlcXVlc3QgaXMgaW4gZmxpZ2h0LiAqL1xuICBpc0xvYWRpbmdUaHJlYWQ6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIGEgdGhyZWFkIHNhdmUgcmVxdWVzdCBpcyBpbiBmbGlnaHQuICovXG4gIGlzU2F2aW5nVGhyZWFkOiBTaWduYWw8Ym9vbGVhbj47XG4gIC8qKiBUcmFuc3BvcnQvcmVxdWVzdCBlcnJvciBiZWZvcmUgZ2VuZXJhdGlvbiBmcmFtZXMgYXJyaXZlLiAqL1xuICBzZW5kaW5nRXJyb3I6IFNpZ25hbDxFcnJvciB8IHVuZGVmaW5lZD47XG4gIC8qKiBFcnJvciBlbWl0dGVkIGR1cmluZyBnZW5lcmF0aW9uIGZyYW1lcy4gKi9cbiAgZ2VuZXJhdGluZ0Vycm9yOiBTaWduYWw8RXJyb3IgfCB1bmRlZmluZWQ+O1xuICAvKiogVGhyZWFkIGxvYWRpbmcgZXJyb3IsIGlmIHByZXNlbnQuICovXG4gIHRocmVhZExvYWRFcnJvcjogU2lnbmFsPHsgZXJyb3I6IHN0cmluZzsgc3RhY2t0cmFjZT86IHN0cmluZyB9IHwgdW5kZWZpbmVkPjtcbiAgLyoqIFRocmVhZCBzYXZpbmcgZXJyb3IsIGlmIHByZXNlbnQuICovXG4gIHRocmVhZFNhdmVFcnJvcjogU2lnbmFsPHsgZXJyb3I6IHN0cmluZzsgc3RhY2t0cmFjZT86IHN0cmluZyB9IHwgdW5kZWZpbmVkPjtcbiAgLyoqXG4gICAqIFNlbmQgYSBuZXcgdXNlciBtZXNzYWdlIHRvIHRoZSBjaGF0LlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSB1c2VyIG1lc3NhZ2UgdG8gc2VuZC5cbiAgICovXG4gIHNlbmRNZXNzYWdlOiAobWVzc2FnZTogQ2hhdC5Vc2VyTWVzc2FnZSkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQ2F1c2UgY3VycmVudCBtZXNzYWdlcyB0byBiZSByZXNlbnQuICBDYW4gYmUgdXNlZCBhZnRlciBhbiBlcnJvciBpbiBjaGF0LlxuICAgKi9cbiAgcmVzZW5kTWVzc2FnZXM6ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY2hhdCBtZXNzYWdlcy5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2VzIC0gVGhlIG5ldyBhcnJheSBvZiBjaGF0IG1lc3NhZ2VzLlxuICAgKi9cbiAgc2V0TWVzc2FnZXM6IChtZXNzYWdlczogQ2hhdC5NZXNzYWdlPE91dHB1dCwgVG9vbHM+W10pID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgbGFzdCBhc3Npc3RhbnQgcmVzcG9uc2UgYW5kIHJlLXNlbmQgdGhlIHByZXZpb3VzIHVzZXIgbWVzc2FnZS4gUmV0dXJucyB0cnVlIGlmIGEgcmVsb2FkIHdhcyBwZXJmb3JtZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlc291cmNlIHdhcyByZWxvYWRlZC5cbiAgICovXG4gIHJlbG9hZDogKCkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogU3RvcHMgYW55IGN1cnJlbnRseS1zdHJlYW1pbmcgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNsZWFyU3RyZWFtaW5nTWVzc2FnZSAtIFdoZXRoZXIgdGhlIGN1cnJlbnRseS1zdHJlYW1pbmcgbWVzc2FnZSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHN0YXRlLlxuICAgKi9cbiAgc3RvcDogKGNsZWFyU3RyZWFtaW5nTWVzc2FnZT86IGJvb2xlYW4pID0+IHZvaWQ7XG4gIGxhc3RBc3Npc3RhbnRNZXNzYWdlOiBTaWduYWw8XG4gICAgQ2hhdC5Bc3Npc3RhbnRNZXNzYWdlPE91dHB1dCwgVG9vbHM+IHwgdW5kZWZpbmVkXG4gID47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIHN0cnVjdHVyZWQgY2hhdCByZXNvdXJjZS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlZENoYXRSZXNvdXJjZU9wdGlvbnM8XG4gIFNjaGVtYSBleHRlbmRzIHMuSGFzaGJyb3duVHlwZSxcbiAgVG9vbHMgZXh0ZW5kcyBDaGF0LkFueVRvb2wsXG4gIE91dHB1dCBleHRlbmRzIHMuSW5mZXI8U2NoZW1hPiA9IHMuSW5mZXI8U2NoZW1hPixcbj4ge1xuICAvKipcbiAgICogVGhlIG1vZGVsIHRvIHVzZSBmb3IgdGhlIHN0cnVjdHVyZWQgY2hhdCByZXNvdXJjZS5cbiAgICovXG4gIG1vZGVsOiBNb2RlbElucHV0O1xuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb21wdCB0byB1c2UgZm9yIHRoZSBzdHJ1Y3R1cmVkIGNoYXQgcmVzb3VyY2UuXG4gICAqL1xuICBzeXN0ZW06IHN0cmluZyB8IFNpZ25hbDxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgc2NoZW1hIHRvIHVzZSBmb3IgdGhlIHN0cnVjdHVyZWQgY2hhdCByZXNvdXJjZS5cbiAgICovXG4gIHNjaGVtYTogU2NoZW1hO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbHMgdG8gdXNlIGZvciB0aGUgc3RydWN0dXJlZCBjaGF0IHJlc291cmNlLlxuICAgKi9cbiAgdG9vbHM/OiBUb29sc1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCBtZXNzYWdlcyBmb3IgdGhlIHN0cnVjdHVyZWQgY2hhdCByZXNvdXJjZS5cbiAgICovXG4gIG1lc3NhZ2VzPzogQ2hhdC5NZXNzYWdlPE91dHB1dCwgVG9vbHM+W107XG5cbiAgLyoqXG4gICAqIFRoZSBkZWJ1ZyBuYW1lIGZvciB0aGUgc3RydWN0dXJlZCBjaGF0IHJlc291cmNlLlxuICAgKi9cbiAgZGVidWdOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVib3VuY2UgdGltZSBmb3IgdGhlIHN0cnVjdHVyZWQgY2hhdCByZXNvdXJjZS5cbiAgICovXG4gIGRlYm91bmNlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHJldHJpZXMgZm9yIHRoZSBzdHJ1Y3R1cmVkIGNoYXQgcmVzb3VyY2UuXG4gICAqL1xuICByZXRyaWVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJIFVSTCB0byB1c2UgZm9yIHRoZSBzdHJ1Y3R1cmVkIGNoYXQgcmVzb3VyY2UuXG4gICAqL1xuICBhcGlVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSB0cmFuc3BvcnQgb3ZlcnJpZGUgZm9yIHRoZSBzdHJ1Y3R1cmVkIGNoYXQgcmVzb3VyY2UuXG4gICAqL1xuICB0cmFuc3BvcnQ/OiBUcmFuc3BvcnRPckZhY3Rvcnk7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgc3RydWN0dXJlZCBjaGF0IGlzIGdlbmVyYXRpbmcgVUkgY29udGVudC5cbiAgICovXG4gIHVpPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgdGhyZWFkIGlkZW50aWZpZXIgdXNlZCB0byBsb2FkIG9yIGNvbnRpbnVlIGFuIGV4aXN0aW5nIGNvbnZlcnNhdGlvbi5cbiAgICovXG4gIHRocmVhZElkPzogU2lnbmFsTGlrZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdHJ1Y3R1cmVkIGNoYXQgcmVzb3VyY2UuXG4gKlxuICogQHB1YmxpY1xuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHN0cnVjdHVyZWQgY2hhdCByZXNvdXJjZS5cbiAqIEByZXR1cm5zIFRoZSBzdHJ1Y3R1cmVkIGNoYXQgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJ1Y3R1cmVkQ2hhdFJlc291cmNlPFxuICBTY2hlbWEgZXh0ZW5kcyBzLkhhc2hicm93blR5cGUsXG4gIFRvb2xzIGV4dGVuZHMgQ2hhdC5BbnlUb29sLFxuICBPdXRwdXQgZXh0ZW5kcyBzLkluZmVyPFNjaGVtYT4gPSBzLkluZmVyPFNjaGVtYT4sXG4+KFxuICBvcHRpb25zOiBTdHJ1Y3R1cmVkQ2hhdFJlc291cmNlT3B0aW9uczxTY2hlbWEsIFRvb2xzLCBPdXRwdXQ+LFxuKTogU3RydWN0dXJlZENoYXRSZXNvdXJjZVJlZjxPdXRwdXQsIFRvb2xzPiB7XG4gIGNvbnN0IGNvbmZpZyA9IMm1aW5qZWN0SGFzaGJyb3duQ29uZmlnKCk7XG4gIGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgaGFzaGJyb3duID0gZnJ5SGFzaGJyb3duPFNjaGVtYSwgVG9vbHMsIE91dHB1dD4oe1xuICAgIGFwaVVybDogb3B0aW9ucy5hcGlVcmwgPz8gY29uZmlnLmJhc2VVcmwsXG4gICAgbWlkZGxld2FyZTogY29uZmlnLm1pZGRsZXdhcmU/Lm1hcCgobSk6IENoYXQuTWlkZGxld2FyZSA9PiB7XG4gICAgICByZXR1cm4gKHJlcXVlc3RJbml0KSA9PlxuICAgICAgICBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IG0ocmVxdWVzdEluaXQpKTtcbiAgICB9KSxcbiAgICBzeXN0ZW06IHJlYWRTaWduYWxMaWtlKG9wdGlvbnMuc3lzdGVtKSxcbiAgICBtZXNzYWdlczogWy4uLihvcHRpb25zLm1lc3NhZ2VzID8/IFtdKV0sXG4gICAgbW9kZWw6IG9wdGlvbnMubW9kZWwsXG4gICAgdG9vbHM6IG9wdGlvbnMudG9vbHM/Lm1hcCgodG9vbCkgPT4gYmluZFRvb2xUb0luamVjdG9yKHRvb2wsIGluamVjdG9yKSksXG4gICAgcmVzcG9uc2VTY2hlbWE6IG9wdGlvbnMuc2NoZW1hLFxuICAgIGRlYnVnTmFtZTogb3B0aW9ucy5kZWJ1Z05hbWUsXG4gICAgZW11bGF0ZVN0cnVjdHVyZWRPdXRwdXQ6IGNvbmZpZy5lbXVsYXRlU3RydWN0dXJlZE91dHB1dCxcbiAgICBkZWJvdW5jZTogb3B0aW9ucy5kZWJvdW5jZSxcbiAgICByZXRyaWVzOiBvcHRpb25zLnJldHJpZXMsXG4gICAgdHJhbnNwb3J0OiBvcHRpb25zLnRyYW5zcG9ydCA/PyBjb25maWcudHJhbnNwb3J0LFxuICAgIHVpOiBvcHRpb25zLnVpID8/IGZhbHNlLFxuICAgIHRocmVhZElkOiBvcHRpb25zLnRocmVhZElkID8gcmVhZFNpZ25hbExpa2Uob3B0aW9ucy50aHJlYWRJZCkgOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIGNvbnN0IG9wdGlvbnNFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG1vZGVsID0gb3B0aW9ucy5tb2RlbDtcbiAgICBjb25zdCBzeXN0ZW0gPSByZWFkU2lnbmFsTGlrZShvcHRpb25zLnN5c3RlbSk7XG4gICAgY29uc3QgdGhyZWFkSWQgPSBvcHRpb25zLnRocmVhZElkXG4gICAgICA/IHJlYWRTaWduYWxMaWtlKG9wdGlvbnMudGhyZWFkSWQpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGhhc2hicm93bi51cGRhdGVPcHRpb25zKHtcbiAgICAgIG1vZGVsLFxuICAgICAgc3lzdGVtLFxuICAgICAgdWk6IG9wdGlvbnMudWkgPz8gZmFsc2UsXG4gICAgICB0aHJlYWRJZCxcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgdGVhcmRvd24gPSBoYXNoYnJvd24uc2l6emxlKCk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgIHRlYXJkb3duKCk7XG4gICAgb3B0aW9uc0VmZmVjdC5kZXN0cm95KCk7XG4gIH0pO1xuXG4gIGNvbnN0IHZhbHVlU2lnbmFsID0gdG9OZ1NpZ25hbChcbiAgICBoYXNoYnJvd24ubWVzc2FnZXMsXG4gICAgb3B0aW9ucy5kZWJ1Z05hbWUgJiYgYCR7b3B0aW9ucy5kZWJ1Z05hbWV9LnZhbHVlYCxcbiAgKTtcbiAgY29uc3QgdmFsdWUgPSB0b0RlZXBTaWduYWwodmFsdWVTaWduYWwpO1xuICBjb25zdCBpc1JlY2VpdmluZyA9IHRvTmdTaWduYWwoXG4gICAgaGFzaGJyb3duLmlzUmVjZWl2aW5nLFxuICAgIG9wdGlvbnMuZGVidWdOYW1lICYmIGAke29wdGlvbnMuZGVidWdOYW1lfS5pc1JlY2VpdmluZ2AsXG4gICk7XG4gIGNvbnN0IGlzU2VuZGluZyA9IHRvTmdTaWduYWwoXG4gICAgaGFzaGJyb3duLmlzU2VuZGluZyxcbiAgICBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0uaXNTZW5kaW5nYCxcbiAgKTtcbiAgY29uc3QgaXNHZW5lcmF0aW5nID0gdG9OZ1NpZ25hbChcbiAgICBoYXNoYnJvd24uaXNHZW5lcmF0aW5nLFxuICAgIG9wdGlvbnMuZGVidWdOYW1lICYmIGAke29wdGlvbnMuZGVidWdOYW1lfS5pc0dlbmVyYXRpbmdgLFxuICApO1xuICBjb25zdCBpc1J1bm5pbmdUb29sQ2FsbHMgPSB0b05nU2lnbmFsKFxuICAgIGhhc2hicm93bi5pc1J1bm5pbmdUb29sQ2FsbHMsXG4gICAgb3B0aW9ucy5kZWJ1Z05hbWUgJiYgYCR7b3B0aW9ucy5kZWJ1Z05hbWV9LmlzUnVubmluZ1Rvb2xDYWxsc2AsXG4gICk7XG4gIGNvbnN0IGlzTG9hZGluZyA9IHRvTmdTaWduYWwoXG4gICAgaGFzaGJyb3duLmlzTG9hZGluZyxcbiAgICBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0uaXNMb2FkaW5nYCxcbiAgKTtcbiAgY29uc3QgZXJyb3IgPSB0b05nU2lnbmFsKFxuICAgIGhhc2hicm93bi5lcnJvcixcbiAgICBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0uZXJyb3JgLFxuICApO1xuICBjb25zdCBzZW5kaW5nRXJyb3IgPSB0b05nU2lnbmFsKFxuICAgIGhhc2hicm93bi5zZW5kaW5nRXJyb3IsXG4gICAgb3B0aW9ucy5kZWJ1Z05hbWUgJiYgYCR7b3B0aW9ucy5kZWJ1Z05hbWV9LnNlbmRpbmdFcnJvcmAsXG4gICk7XG4gIGNvbnN0IGdlbmVyYXRpbmdFcnJvciA9IHRvTmdTaWduYWwoXG4gICAgaGFzaGJyb3duLmdlbmVyYXRpbmdFcnJvcixcbiAgICBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0uZ2VuZXJhdGluZ0Vycm9yYCxcbiAgKTtcbiAgY29uc3QgbGFzdEFzc2lzdGFudE1lc3NhZ2UgPSB0b05nU2lnbmFsKFxuICAgIGhhc2hicm93bi5sYXN0QXNzaXN0YW50TWVzc2FnZSxcbiAgICBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0ubGFzdEFzc2lzdGFudE1lc3NhZ2VgLFxuICApO1xuICBjb25zdCBleGhhdXN0ZWRSZXRyaWVzID0gdG9OZ1NpZ25hbChoYXNoYnJvd24uZXhoYXVzdGVkUmV0cmllcyk7XG4gIGNvbnN0IGlzTG9hZGluZ1RocmVhZCA9IHRvTmdTaWduYWwoXG4gICAgaGFzaGJyb3duLmlzTG9hZGluZ1RocmVhZCxcbiAgICBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0uaXNMb2FkaW5nVGhyZWFkYCxcbiAgKTtcbiAgY29uc3QgaXNTYXZpbmdUaHJlYWQgPSB0b05nU2lnbmFsKFxuICAgIGhhc2hicm93bi5pc1NhdmluZ1RocmVhZCxcbiAgICBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0uaXNTYXZpbmdUaHJlYWRgLFxuICApO1xuICBjb25zdCB0aHJlYWRMb2FkRXJyb3IgPSB0b05nU2lnbmFsKFxuICAgIGhhc2hicm93bi50aHJlYWRMb2FkRXJyb3IsXG4gICAgb3B0aW9ucy5kZWJ1Z05hbWUgJiYgYCR7b3B0aW9ucy5kZWJ1Z05hbWV9LnRocmVhZExvYWRFcnJvcmAsXG4gICk7XG4gIGNvbnN0IHRocmVhZFNhdmVFcnJvciA9IHRvTmdTaWduYWwoXG4gICAgaGFzaGJyb3duLnRocmVhZFNhdmVFcnJvcixcbiAgICBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0udGhyZWFkU2F2ZUVycm9yYCxcbiAgKTtcblxuICBjb25zdCBzdGF0dXMgPSBjb21wdXRlZChcbiAgICAoKTogUmVzb3VyY2VTdGF0dXMgPT4ge1xuICAgICAgaWYgKGlzTG9hZGluZygpKSB7XG4gICAgICAgIHJldHVybiAnbG9hZGluZyc7XG4gICAgICB9XG5cbiAgICAgIGlmIChleGhhdXN0ZWRSZXRyaWVzKCkpIHtcbiAgICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc0Fzc2lzdGFudE1lc3NhZ2UgPSB2YWx1ZSgpLnNvbWUoXG4gICAgICAgIChtZXNzYWdlKSA9PiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnLFxuICAgICAgKTtcblxuICAgICAgaWYgKGhhc0Fzc2lzdGFudE1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuICdyZXNvbHZlZCc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnaWRsZSc7XG4gICAgfSxcbiAgICB7IGRlYnVnTmFtZTogb3B0aW9ucy5kZWJ1Z05hbWUgJiYgYCR7b3B0aW9ucy5kZWJ1Z05hbWV9LnN0YXR1c2AgfSxcbiAgKTtcblxuICBmdW5jdGlvbiByZWxvYWQoKSB7XG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSB2YWx1ZSgpW3ZhbHVlKCkubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAobGFzdE1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgIGhhc2hicm93bi5zZXRNZXNzYWdlcyh2YWx1ZSgpLnNsaWNlKDAsIC0xKSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhc1ZhbHVlKCkge1xuICAgIHJldHVybiB2YWx1ZSgpLnNvbWUoKG1lc3NhZ2UpID0+IG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VuZE1lc3NhZ2UobWVzc2FnZTogQ2hhdC5Vc2VyTWVzc2FnZSkge1xuICAgIGhhc2hicm93bi5zZW5kTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2VuZE1lc3NhZ2VzKCkge1xuICAgIGhhc2hicm93bi5yZXNlbmRNZXNzYWdlcygpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0TWVzc2FnZXMobWVzc2FnZXM6IENoYXQuTWVzc2FnZTxPdXRwdXQsIFRvb2xzPltdKSB7XG4gICAgaGFzaGJyb3duLnNldE1lc3NhZ2VzKG1lc3NhZ2VzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3AoY2xlYXJTdHJlYW1pbmdNZXNzYWdlID0gZmFsc2UpIHtcbiAgICBoYXNoYnJvd24uc3RvcChjbGVhclN0cmVhbWluZ01lc3NhZ2UpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNWYWx1ZTogaGFzVmFsdWUgYXMgYW55LFxuICAgIHN0YXR1cyxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNHZW5lcmF0aW5nLFxuICAgIGlzU2VuZGluZyxcbiAgICBpc1JlY2VpdmluZyxcbiAgICBpc1J1bm5pbmdUb29sQ2FsbHMsXG4gICAgcmVsb2FkLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHJlc2VuZE1lc3NhZ2VzLFxuICAgIHN0b3AsXG4gICAgdmFsdWUsXG4gICAgZXJyb3IsXG4gICAgc2VuZGluZ0Vycm9yLFxuICAgIGdlbmVyYXRpbmdFcnJvcixcbiAgICBzZXRNZXNzYWdlcyxcbiAgICBsYXN0QXNzaXN0YW50TWVzc2FnZSxcbiAgICBpc0xvYWRpbmdUaHJlYWQsXG4gICAgaXNTYXZpbmdUaHJlYWQsXG4gICAgdGhyZWFkTG9hZEVycm9yLFxuICAgIHRocmVhZFNhdmVFcnJvcixcbiAgfTtcbn1cbiJdfQ==","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect } from '@angular/core';\nimport { structuredChatResource } from './structured-chat-resource.fn';\nimport { toDeepSignal } from '../utils/deep-signal';\n/**\n * Creates a structured completion resource.\n *\n * @public\n * @param options - The options for the structured completion resource.\n * @returns The structured completion resource.\n */\nexport function structuredCompletionResource(options) {\n    const { model, input, schema, system, tools, debugName, apiUrl, retries, debounce, } = options;\n    const resource = structuredChatResource({\n        model,\n        system,\n        schema,\n        tools,\n        debugName,\n        apiUrl,\n        retries,\n        debounce,\n        transport: options.transport,\n        ui: options.ui ?? false,\n        threadId: options.threadId,\n    });\n    effect(() => {\n        const _input = input();\n        if (!_input) {\n            return;\n        }\n        resource.setMessages([\n            {\n                role: 'user',\n                content: _input,\n            },\n        ]);\n    });\n    const valueSignal = computed(() => {\n        const lastMessage = resource.value()[resource.value().length - 1];\n        if (lastMessage &&\n            lastMessage.role === 'assistant' &&\n            lastMessage.content &&\n            lastMessage.content !== null) {\n            return lastMessage.content;\n        }\n        return null;\n    }, { debugName: debugName && `${debugName}.value` });\n    const value = toDeepSignal(valueSignal);\n    const status = resource.status;\n    const error = resource.error;\n    const isLoading = resource.isLoading;\n    const reload = resource.reload;\n    const stop = resource.stop;\n    function hasValue() {\n        return Boolean(valueSignal());\n    }\n    return {\n        value,\n        status,\n        error,\n        isLoading,\n        isSending: resource.isSending,\n        isGenerating: resource.isGenerating,\n        isReceiving: resource.isReceiving,\n        isRunningToolCalls: resource.isRunningToolCalls,\n        isLoadingThread: resource.isLoadingThread,\n        isSavingThread: resource.isSavingThread,\n        threadLoadError: resource.threadLoadError,\n        threadSaveError: resource.threadSaveError,\n        sendingError: resource.sendingError,\n        generatingError: resource.generatingError,\n        reload,\n        stop,\n        hasValue: hasValue,\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJlZC1jb21wbGV0aW9uLXJlc291cmNlLmZuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9zcmMvcmVzb3VyY2VzL3N0cnVjdHVyZWQtY29tcGxldGlvbi1yZXNvdXJjZS5mbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBUW5FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWdIcEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUsxQyxPQUEyRDtJQUUzRCxNQUFNLEVBQ0osS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE9BQU8sRUFDUCxRQUFRLEdBQ1QsR0FBRyxPQUFPLENBQUM7SUFFWixNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBK0I7UUFDcEUsS0FBSztRQUNMLE1BQU07UUFDTixNQUFNO1FBQ04sS0FBSztRQUNMLFNBQVM7UUFDVCxNQUFNO1FBQ04sT0FBTztRQUNQLFFBQVE7UUFDUixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7UUFDNUIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksS0FBSztRQUN2QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7S0FDM0IsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNWLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU87UUFDVCxDQUFDO1FBRUQsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUNuQjtnQkFDRSxJQUFJLEVBQUUsTUFBTTtnQkFDWixPQUFPLEVBQUUsTUFBTTthQUNoQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUMxQixHQUFHLEVBQUU7UUFDSCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUNFLFdBQVc7WUFDWCxXQUFXLENBQUMsSUFBSSxLQUFLLFdBQVc7WUFDaEMsV0FBVyxDQUFDLE9BQU87WUFDbkIsV0FBVyxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQzVCLENBQUM7WUFDRCxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDN0IsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxFQUNELEVBQUUsU0FBUyxFQUFFLFNBQVMsSUFBSSxHQUFHLFNBQVMsUUFBUSxFQUFFLENBQ2pELENBQUM7SUFDRixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFeEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUMvQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQzdCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDckMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUMvQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBRTNCLFNBQVMsUUFBUTtRQUNmLE9BQU8sT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELE9BQU87UUFDTCxLQUFLO1FBQ0wsTUFBTTtRQUNOLEtBQUs7UUFDTCxTQUFTO1FBQ1QsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO1FBQzdCLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtRQUNuQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7UUFDakMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLGtCQUFrQjtRQUMvQyxlQUFlLEVBQUUsUUFBUSxDQUFDLGVBQWU7UUFDekMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxjQUFjO1FBQ3ZDLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZTtRQUN6QyxlQUFlLEVBQUUsUUFBUSxDQUFDLGVBQWU7UUFDekMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1FBQ25DLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZTtRQUN6QyxNQUFNO1FBQ04sSUFBSTtRQUNKLFFBQVEsRUFBRSxRQUFlO0tBQzFCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdCwgUmVzb3VyY2UsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2hhdCxcbiAgdHlwZSBNb2RlbElucHV0LFxuICBzLFxuICB0eXBlIFRyYW5zcG9ydE9yRmFjdG9yeSxcbn0gZnJvbSAnQGhhc2hicm93bmFpL2NvcmUnO1xuaW1wb3J0IHsgU2lnbmFsTGlrZSB9IGZyb20gJy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IHN0cnVjdHVyZWRDaGF0UmVzb3VyY2UgfSBmcm9tICcuL3N0cnVjdHVyZWQtY2hhdC1yZXNvdXJjZS5mbic7XG5pbXBvcnQgeyB0b0RlZXBTaWduYWwgfSBmcm9tICcuLi91dGlscy9kZWVwLXNpZ25hbCc7XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gdGhlIHN0cnVjdHVyZWQgY29tcGxldGlvbiByZXNvdXJjZS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlZENvbXBsZXRpb25SZXNvdXJjZVJlZjxPdXRwdXQ+XG4gIGV4dGVuZHMgUmVzb3VyY2U8T3V0cHV0IHwgbnVsbD4ge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgY29tcGxldGlvbiBjYWxsIGlzIGN1cnJlbnRseSBzZW5kaW5nIGEgbWVzc2FnZS5cbiAgICovXG4gIGlzU2VuZGluZzogU2lnbmFsPGJvb2xlYW4+O1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbXBsZXRpb24gaXMgZ2VuZXJhdGluZyBhc3Npc3RhbnQgb3V0cHV0LlxuICAgKi9cbiAgaXNHZW5lcmF0aW5nOiBTaWduYWw8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdW5kZXJseWluZyBjb21wbGV0aW9uIGNhbGwgaXMgY3VycmVudGx5IHJlY2VpdmluZyB0b2tlbnMuXG4gICAqL1xuICBpc1JlY2VpdmluZzogU2lnbmFsPGJvb2xlYW4+O1xuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdG9vbCBjYWxscyBhcmUgcnVubmluZy4gKi9cbiAgaXNSdW5uaW5nVG9vbENhbGxzOiBTaWduYWw8Ym9vbGVhbj47XG4gIC8qKiBBZ2dyZWdhdGUgbG9hZGluZyBmbGFnIGFjcm9zcyB0cmFuc3BvcnQsIGdlbmVyYXRpb24sIHRvb2wgY2FsbHMsIGFuZCB0aHJlYWQgbG9hZC9zYXZlLiAqL1xuICBpc0xvYWRpbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgYSB0aHJlYWQgbG9hZCByZXF1ZXN0IGlzIGluIGZsaWdodC4gKi9cbiAgaXNMb2FkaW5nVGhyZWFkOiBTaWduYWw8Ym9vbGVhbj47XG4gIC8qKiBXaGV0aGVyIGEgdGhyZWFkIHNhdmUgcmVxdWVzdCBpcyBpbiBmbGlnaHQuICovXG4gIGlzU2F2aW5nVGhyZWFkOiBTaWduYWw8Ym9vbGVhbj47XG4gIC8qKiBFcnJvciBlbmNvdW50ZXJlZCB3aGlsZSBsb2FkaW5nIGEgdGhyZWFkLiAqL1xuICB0aHJlYWRMb2FkRXJyb3I6IFNpZ25hbDx7IGVycm9yOiBzdHJpbmc7IHN0YWNrdHJhY2U/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZD47XG4gIC8qKiBFcnJvciBlbmNvdW50ZXJlZCB3aGlsZSBzYXZpbmcgYSB0aHJlYWQuICovXG4gIHRocmVhZFNhdmVFcnJvcjogU2lnbmFsPHsgZXJyb3I6IHN0cmluZzsgc3RhY2t0cmFjZT86IHN0cmluZyB9IHwgdW5kZWZpbmVkPjtcbiAgLyoqIFRyYW5zcG9ydC9yZXF1ZXN0IGVycm9yIGJlZm9yZSBnZW5lcmF0aW9uIGZyYW1lcyBhcnJpdmUuICovXG4gIHNlbmRpbmdFcnJvcjogU2lnbmFsPEVycm9yIHwgdW5kZWZpbmVkPjtcbiAgLyoqIEVycm9yIGVtaXR0ZWQgZHVyaW5nIGdlbmVyYXRpb24gZnJhbWVzLiAqL1xuICBnZW5lcmF0aW5nRXJyb3I6IFNpZ25hbDxFcnJvciB8IHVuZGVmaW5lZD47XG4gIC8qKlxuICAgKiBSZWxvYWRzIHRoZSByZXNvdXJjZS5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgcmVzb3VyY2Ugd2FzIHJlbG9hZGVkLlxuICAgKi9cbiAgcmVsb2FkOiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTdG9wcyBhbnkgY3VycmVudGx5LXN0cmVhbWluZyBtZXNzYWdlLlxuICAgKiBAcGFyYW0gY2xlYXJTdHJlYW1pbmdNZXNzYWdlIC0gV2hldGhlciB0aGUgY3VycmVudGx5LXN0cmVhbWluZyBtZXNzYWdlIHNob3VsZCBiZSByZW1vdmVkIGZyb20gc3RhdGUuXG4gICAqL1xuICBzdG9wOiAoY2xlYXJTdHJlYW1pbmdNZXNzYWdlPzogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgc3RydWN0dXJlZCBjb21wbGV0aW9uIHJlc291cmNlLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVkQ29tcGxldGlvblJlc291cmNlT3B0aW9uczxcbiAgSW5wdXQsXG4gIFNjaGVtYSBleHRlbmRzIHMuSGFzaGJyb3duVHlwZSxcbj4ge1xuICAvKipcbiAgICogVGhlIG1vZGVsIHRvIHVzZSBmb3IgdGhlIHN0cnVjdHVyZWQgY29tcGxldGlvbiByZXNvdXJjZS5cbiAgICovXG4gIG1vZGVsOiBNb2RlbElucHV0O1xuICAvKipcbiAgICogVGhlIGlucHV0IHRvIHRoZSBzdHJ1Y3R1cmVkIGNvbXBsZXRpb24gcmVzb3VyY2UuXG4gICAqL1xuICBpbnB1dDogU2lnbmFsPElucHV0IHwgbnVsbCB8IHVuZGVmaW5lZD47XG4gIC8qKlxuICAgKiBUaGUgc2NoZW1hIHRvIHVzZSBmb3IgdGhlIHN0cnVjdHVyZWQgY29tcGxldGlvbiByZXNvdXJjZS5cbiAgICovXG4gIHNjaGVtYTogU2NoZW1hO1xuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9tcHQgdG8gdXNlIGZvciB0aGUgc3RydWN0dXJlZCBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgc3lzdGVtOiBTaWduYWxMaWtlPHN0cmluZz47XG4gIC8qKlxuICAgKiBUaGUgdG9vbHMgdG8gdXNlIGZvciB0aGUgc3RydWN0dXJlZCBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgdG9vbHM/OiBDaGF0LkFueVRvb2xbXTtcbiAgLyoqXG4gICAqIFRoZSBkZWJ1ZyBuYW1lIGZvciB0aGUgc3RydWN0dXJlZCBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgZGVidWdOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFQSSBVUkwgdG8gdXNlIGZvciB0aGUgc3RydWN0dXJlZCBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgYXBpVXJsPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiByZXRyaWVzIGZvciB0aGUgc3RydWN0dXJlZCBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgcmV0cmllcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBkZWJvdW5jZSB0aW1lIGZvciB0aGUgc3RydWN0dXJlZCBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgZGVib3VuY2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zcG9ydCBvdmVycmlkZSBmb3IgdGhpcyBzdHJ1Y3R1cmVkIGNvbXBsZXRpb24gcmVzb3VyY2UuXG4gICAqL1xuICB0cmFuc3BvcnQ/OiBUcmFuc3BvcnRPckZhY3Rvcnk7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgY29tcGxldGlvbiBpcyBVSSBnZW5lcmF0aW5nLlxuICAgKi9cbiAgdWk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0aHJlYWQgaWRlbnRpZmllciB1c2VkIHRvIGxvYWQgb3IgY29udGludWUgYW4gZXhpc3RpbmcgY29udmVyc2F0aW9uLlxuICAgKi9cbiAgdGhyZWFkSWQ/OiBTaWduYWxMaWtlPHN0cmluZyB8IHVuZGVmaW5lZD47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cnVjdHVyZWQgY29tcGxldGlvbiByZXNvdXJjZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgc3RydWN0dXJlZCBjb21wbGV0aW9uIHJlc291cmNlLlxuICogQHJldHVybnMgVGhlIHN0cnVjdHVyZWQgY29tcGxldGlvbiByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cnVjdHVyZWRDb21wbGV0aW9uUmVzb3VyY2U8XG4gIElucHV0LFxuICBTY2hlbWEgZXh0ZW5kcyBzLkhhc2hicm93blR5cGUsXG4gIE91dHB1dCBleHRlbmRzIHMuSW5mZXI8U2NoZW1hPiA9IHMuSW5mZXI8U2NoZW1hPixcbj4oXG4gIG9wdGlvbnM6IFN0cnVjdHVyZWRDb21wbGV0aW9uUmVzb3VyY2VPcHRpb25zPElucHV0LCBTY2hlbWE+LFxuKTogU3RydWN0dXJlZENvbXBsZXRpb25SZXNvdXJjZVJlZjxPdXRwdXQ+IHtcbiAgY29uc3Qge1xuICAgIG1vZGVsLFxuICAgIGlucHV0LFxuICAgIHNjaGVtYSxcbiAgICBzeXN0ZW0sXG4gICAgdG9vbHMsXG4gICAgZGVidWdOYW1lLFxuICAgIGFwaVVybCxcbiAgICByZXRyaWVzLFxuICAgIGRlYm91bmNlLFxuICB9ID0gb3B0aW9ucztcblxuICBjb25zdCByZXNvdXJjZSA9IHN0cnVjdHVyZWRDaGF0UmVzb3VyY2U8U2NoZW1hLCBDaGF0LkFueVRvb2wsIE91dHB1dD4oe1xuICAgIG1vZGVsLFxuICAgIHN5c3RlbSxcbiAgICBzY2hlbWEsXG4gICAgdG9vbHMsXG4gICAgZGVidWdOYW1lLFxuICAgIGFwaVVybCxcbiAgICByZXRyaWVzLFxuICAgIGRlYm91bmNlLFxuICAgIHRyYW5zcG9ydDogb3B0aW9ucy50cmFuc3BvcnQsXG4gICAgdWk6IG9wdGlvbnMudWkgPz8gZmFsc2UsXG4gICAgdGhyZWFkSWQ6IG9wdGlvbnMudGhyZWFkSWQsXG4gIH0pO1xuXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgX2lucHV0ID0gaW5wdXQoKTtcblxuICAgIGlmICghX2lucHV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVzb3VyY2Uuc2V0TWVzc2FnZXMoW1xuICAgICAge1xuICAgICAgICByb2xlOiAndXNlcicsXG4gICAgICAgIGNvbnRlbnQ6IF9pbnB1dCxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH0pO1xuXG4gIGNvbnN0IHZhbHVlU2lnbmFsID0gY29tcHV0ZWQoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2UgPSByZXNvdXJjZS52YWx1ZSgpW3Jlc291cmNlLnZhbHVlKCkubGVuZ3RoIC0gMV07XG4gICAgICBpZiAoXG4gICAgICAgIGxhc3RNZXNzYWdlICYmXG4gICAgICAgIGxhc3RNZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnICYmXG4gICAgICAgIGxhc3RNZXNzYWdlLmNvbnRlbnQgJiZcbiAgICAgICAgbGFzdE1lc3NhZ2UuY29udGVudCAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBsYXN0TWVzc2FnZS5jb250ZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICB7IGRlYnVnTmFtZTogZGVidWdOYW1lICYmIGAke2RlYnVnTmFtZX0udmFsdWVgIH0sXG4gICk7XG4gIGNvbnN0IHZhbHVlID0gdG9EZWVwU2lnbmFsKHZhbHVlU2lnbmFsKTtcblxuICBjb25zdCBzdGF0dXMgPSByZXNvdXJjZS5zdGF0dXM7XG4gIGNvbnN0IGVycm9yID0gcmVzb3VyY2UuZXJyb3I7XG4gIGNvbnN0IGlzTG9hZGluZyA9IHJlc291cmNlLmlzTG9hZGluZztcbiAgY29uc3QgcmVsb2FkID0gcmVzb3VyY2UucmVsb2FkO1xuICBjb25zdCBzdG9wID0gcmVzb3VyY2Uuc3RvcDtcblxuICBmdW5jdGlvbiBoYXNWYWx1ZSh0aGlzOiBTdHJ1Y3R1cmVkQ29tcGxldGlvblJlc291cmNlUmVmPE91dHB1dD4pIHtcbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZVNpZ25hbCgpKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWUsXG4gICAgc3RhdHVzLFxuICAgIGVycm9yLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1NlbmRpbmc6IHJlc291cmNlLmlzU2VuZGluZyxcbiAgICBpc0dlbmVyYXRpbmc6IHJlc291cmNlLmlzR2VuZXJhdGluZyxcbiAgICBpc1JlY2VpdmluZzogcmVzb3VyY2UuaXNSZWNlaXZpbmcsXG4gICAgaXNSdW5uaW5nVG9vbENhbGxzOiByZXNvdXJjZS5pc1J1bm5pbmdUb29sQ2FsbHMsXG4gICAgaXNMb2FkaW5nVGhyZWFkOiByZXNvdXJjZS5pc0xvYWRpbmdUaHJlYWQsXG4gICAgaXNTYXZpbmdUaHJlYWQ6IHJlc291cmNlLmlzU2F2aW5nVGhyZWFkLFxuICAgIHRocmVhZExvYWRFcnJvcjogcmVzb3VyY2UudGhyZWFkTG9hZEVycm9yLFxuICAgIHRocmVhZFNhdmVFcnJvcjogcmVzb3VyY2UudGhyZWFkU2F2ZUVycm9yLFxuICAgIHNlbmRpbmdFcnJvcjogcmVzb3VyY2Uuc2VuZGluZ0Vycm9yLFxuICAgIGdlbmVyYXRpbmdFcnJvcjogcmVzb3VyY2UuZ2VuZXJhdGluZ0Vycm9yLFxuICAgIHJlbG9hZCxcbiAgICBzdG9wLFxuICAgIGhhc1ZhbHVlOiBoYXNWYWx1ZSBhcyBhbnksXG4gIH07XG59XG4iXX0=","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed } from '@angular/core';\nimport { s, ɵui, } from '@hashbrownai/core';\nimport { structuredChatResource } from './structured-chat-resource.fn';\nimport { TAG_NAME_REGISTRY, } from '../utils/ui-chat.helpers';\nimport { readSignalLike } from '../utils';\n/**\n * Creates a UI chat resource.\n *\n * @public\n * @param args - The arguments for the UI chat resource.\n * @returns The UI chat resource.\n */\nexport function uiChatResource(args) {\n    const flattenedComponents = computed(() => ɵui.flattenComponents(args.components), ...(ngDevMode ? [{ debugName: \"flattenedComponents\" }] : []));\n    const internalSchema = s.object('UI', {\n        ui: s.streaming.array('List of elements', ɵui.createComponentSchema(args.components)),\n    });\n    const systemAsString = computed(() => {\n        const system = readSignalLike(args.system);\n        if (typeof system === 'string') {\n            return system;\n        }\n        const result = system.compile(args.components, internalSchema);\n        if (system.diagnostics.length > 0) {\n            throw new Error(`System prompt has ${system.diagnostics.length} errors: \\n\\n${system.diagnostics.map((d) => d.message).join('\\n\\n')}`);\n        }\n        return result;\n    }, ...(ngDevMode ? [{ debugName: \"systemAsString\" }] : []));\n    const chat = structuredChatResource({\n        model: args.model,\n        schema: internalSchema,\n        tools: [...(args.tools ?? [])],\n        system: systemAsString,\n        messages: [...(args.messages ?? [])],\n        debugName: args.debugName,\n        debounce: args.debounce,\n        apiUrl: args.apiUrl,\n        transport: args.transport,\n        ui: true,\n        threadId: args.threadId,\n    });\n    const value = computed(() => {\n        const messages = chat.value();\n        return messages.map((message) => {\n            if (message.role === 'assistant') {\n                const content = message.content;\n                if (!content) {\n                    return {\n                        ...message,\n                        [TAG_NAME_REGISTRY]: {},\n                    };\n                }\n                return {\n                    ...message,\n                    [TAG_NAME_REGISTRY]: Array.from(flattenedComponents().values()).reduce((acc, component) => {\n                        acc[component.name] = {\n                            props: component.props ?? {},\n                            component: component.component,\n                        };\n                        return acc;\n                    }, {}) ?? {},\n                };\n            }\n            if (message.role === 'user') {\n                return message;\n            }\n            if (message.role === 'error') {\n                return message;\n            }\n            throw new Error(`Unknown message role`);\n        });\n    }, { debugName: args.debugName && `${args.debugName}.value` });\n    const lastAssistantMessage = computed(() => {\n        return value().findLast((message) => message.role === 'assistant');\n    }, ...(ngDevMode ? [{ debugName: \"lastAssistantMessage\" }] : []));\n    return {\n        ...chat,\n        hasValue: chat.hasValue,\n        value,\n        lastAssistantMessage,\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktY2hhdC1yZXNvdXJjZS5mbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvc3JjL3Jlc291cmNlcy91aS1jaGF0LXJlc291cmNlLmZuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBR0wsQ0FBQyxFQUdELEdBQUcsR0FDSixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCxpQkFBaUIsR0FJbEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsY0FBYyxFQUFjLE1BQU0sVUFBVSxDQUFDO0FBdUd0RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixJQUFrQztJQUVsQyxNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDeEMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsK0RBQ3ZDLENBQUM7SUFDRixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtRQUNwQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQ25CLGtCQUFrQixFQUNsQixHQUFHLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUMzQztLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDbkMsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDL0QsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksS0FBSyxDQUNiLHFCQUFxQixNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sZ0JBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ3RILENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQywwREFBQyxDQUFDO0lBRUgsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUM7UUFDbEMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1FBQ2pCLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztRQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7UUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1FBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztRQUN6QixFQUFFLEVBQUUsSUFBSTtRQUNSLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtLQUN4QixDQUFDLENBQUM7SUFFSCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQ3BCLEdBQUcsRUFBRTtRQUNILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU5QixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQXdCLEVBQUU7WUFDcEQsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FHWCxDQUFDO2dCQUVkLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDYixPQUFPO3dCQUNMLEdBQUcsT0FBTzt3QkFDVixDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRTtxQkFDeEIsQ0FBQztnQkFDSixDQUFDO2dCQUVELE9BQU87b0JBQ0wsR0FBRyxPQUFPO29CQUNWLENBQUMsaUJBQWlCLENBQUMsRUFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUMvQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRTt3QkFDakIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRzs0QkFDcEIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTs0QkFDNUIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTO3lCQUMvQixDQUFDO3dCQUNGLE9BQU8sR0FBRyxDQUFDO29CQUNiLENBQUMsRUFDRCxFQUFxQixDQUN0QixJQUFJLEVBQUU7aUJBQ1YsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUM7WUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLEVBQ0QsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLFFBQVEsRUFBRSxDQUMzRCxDQUFDO0lBRUYsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3pDLE9BQU8sS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDO0lBQ3JFLENBQUMsZ0VBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxHQUFHLElBQUk7UUFDUCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQWU7UUFDOUIsS0FBSztRQUNMLG9CQUFvQjtLQUNyQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IGNvbXB1dGVkLCBSZXNvdXJjZSwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDaGF0LFxuICB0eXBlIE1vZGVsSW5wdXQsXG4gIHMsXG4gIFN5c3RlbVByb21wdCxcbiAgdHlwZSBUcmFuc3BvcnRPckZhY3RvcnksXG4gIMm1dWksXG59IGZyb20gJ0BoYXNoYnJvd25haS9jb3JlJztcbmltcG9ydCB7IEV4cG9zZWRDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9leHBvc2UtY29tcG9uZW50LmZuJztcbmltcG9ydCB7IHN0cnVjdHVyZWRDaGF0UmVzb3VyY2UgfSBmcm9tICcuL3N0cnVjdHVyZWQtY2hhdC1yZXNvdXJjZS5mbic7XG5pbXBvcnQge1xuICBUQUdfTkFNRV9SRUdJU1RSWSxcbiAgVGFnTmFtZVJlZ2lzdHJ5LFxuICBVaUFzc2lzdGFudE1lc3NhZ2UsXG4gIFVpQ2hhdE1lc3NhZ2UsXG59IGZyb20gJy4uL3V0aWxzL3VpLWNoYXQuaGVscGVycyc7XG5pbXBvcnQgeyByZWFkU2lnbmFsTGlrZSwgU2lnbmFsTGlrZSB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFVpQ2hhdE1lc3NhZ2VPdXRwdXQgPSBzLk9iamVjdFR5cGU8e1xuICB1aTogcy5BcnJheVR5cGU8cy5PYmplY3RUeXBlPMm1dWkuQ29tcG9uZW50VHJlZVNjaGVtYT4+O1xufT47XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIFVJIGNoYXQgcmVzb3VyY2UuXG4gKlxuICogQHB1YmxpY1xuICogQHR5cGVQYXJhbSBUb29scyAtIFRoZSBzZXQgb2YgdG9vbCBkZWZpbml0aW9ucyBhdmFpbGFibGUgdG8gdGhlIGNoYXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlDaGF0UmVzb3VyY2VPcHRpb25zPFRvb2xzIGV4dGVuZHMgQ2hhdC5BbnlUb29sPiB7XG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB0byB1c2UgZm9yIHRoZSBVSSBjaGF0IHJlc291cmNlLlxuICAgKi9cbiAgY29tcG9uZW50czogRXhwb3NlZENvbXBvbmVudDxhbnk+W107XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RlbCB0byB1c2UgZm9yIHRoZSBVSSBjaGF0IHJlc291cmNlLlxuICAgKi9cbiAgbW9kZWw6IE1vZGVsSW5wdXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvbXB0IHRvIHVzZSBmb3IgdGhlIFVJIGNoYXQgcmVzb3VyY2UuXG4gICAqL1xuICBzeXN0ZW06IHN0cmluZyB8IFNpZ25hbDxzdHJpbmc+IHwgU3lzdGVtUHJvbXB0IHwgU2lnbmFsPFN5c3RlbVByb21wdD47XG5cbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIG1lc3NhZ2VzIGZvciB0aGUgVUkgY2hhdCByZXNvdXJjZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUb29scyAtIFRoZSBzZXQgb2YgdG9vbCBkZWZpbml0aW9ucyBhdmFpbGFibGUgdG8gdGhlIGNoYXQuXG4gICAqL1xuICBtZXNzYWdlcz86IENoYXQuTWVzc2FnZTxzLkluZmVyPFVpQ2hhdE1lc3NhZ2VPdXRwdXQ+LCBUb29scz5bXTtcblxuICAvKipcbiAgICogVGhlIHRvb2xzIHRvIHVzZSBmb3IgdGhlIFVJIGNoYXQgcmVzb3VyY2UuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVG9vbHMgLSBUaGUgc2V0IG9mIHRvb2wgZGVmaW5pdGlvbnMgYXZhaWxhYmxlIHRvIHRoZSBjaGF0LlxuICAgKi9cbiAgdG9vbHM/OiBUb29sc1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVidWcgbmFtZSBmb3IgdGhlIFVJIGNoYXQgcmVzb3VyY2UuXG4gICAqL1xuICBkZWJ1Z05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWJvdW5jZSB0aW1lIGZvciB0aGUgVUkgY2hhdCByZXNvdXJjZS5cbiAgICovXG4gIGRlYm91bmNlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJIFVSTCB0byB1c2UgZm9yIHRoZSBVSSBjaGF0IHJlc291cmNlLlxuICAgKi9cbiAgYXBpVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gdHJhbnNwb3J0IG92ZXJyaWRlIGZvciB0aGUgVUkgY2hhdCByZXNvdXJjZS5cbiAgICovXG4gIHRyYW5zcG9ydD86IFRyYW5zcG9ydE9yRmFjdG9yeTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgdGhyZWFkIGlkZW50aWZpZXIgdXNlZCB0byBsb2FkIG9yIGNvbnRpbnVlIGFuIGV4aXN0aW5nIGNvbnZlcnNhdGlvbi5cbiAgICovXG4gIHRocmVhZElkPzogU2lnbmFsTGlrZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xufVxuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIHRoZSBVSSBjaGF0IHJlc291cmNlLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVaUNoYXRSZXNvdXJjZVJlZjxUb29scyBleHRlbmRzIENoYXQuQW55VG9vbD5cbiAgZXh0ZW5kcyBSZXNvdXJjZTxVaUNoYXRNZXNzYWdlPFRvb2xzPltdPiB7XG4gIC8qKlxuICAgKiBTZW5kIGEgbmV3IHVzZXIgbWVzc2FnZSB0byB0aGUgY2hhdC5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgdXNlciBtZXNzYWdlIHRvIHNlbmQuXG4gICAqL1xuICBzZW5kTWVzc2FnZTogKG1lc3NhZ2U6IENoYXQuVXNlck1lc3NhZ2UpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhdXNlIGN1cnJlbnQgbWVzc2FnZXMgdG8gYmUgcmVzZW50LiAgQ2FuIGJlIHVzZWQgYWZ0ZXIgYW4gZXJyb3IgaW4gY2hhdC5cbiAgICovXG4gIHJlc2VuZE1lc3NhZ2VzOiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTdG9wcyBhbnkgY3VycmVudGx5LXN0cmVhbWluZyBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2xlYXJTdHJlYW1pbmdNZXNzYWdlIC0gV2hldGhlciB0aGUgY3VycmVudGx5LXN0cmVhbWluZyBtZXNzYWdlIHNob3VsZCBiZSByZW1vdmVkIGZyb20gc3RhdGUuXG4gICAqL1xuICBzdG9wOiAoY2xlYXJTdHJlYW1pbmdNZXNzYWdlPzogYm9vbGVhbikgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIGxhc3QgYXNzaXN0YW50IG1lc3NhZ2UgZm9yIHRoZSBVSSBjaGF0IHJlc291cmNlLlxuICAgKi9cbiAgbGFzdEFzc2lzdGFudE1lc3NhZ2U6IFNpZ25hbDxVaUFzc2lzdGFudE1lc3NhZ2U8VG9vbHM+IHwgdW5kZWZpbmVkPjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgVUkgY2hhdCByZXNvdXJjZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAcGFyYW0gYXJncyAtIFRoZSBhcmd1bWVudHMgZm9yIHRoZSBVSSBjaGF0IHJlc291cmNlLlxuICogQHJldHVybnMgVGhlIFVJIGNoYXQgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1aUNoYXRSZXNvdXJjZTxUb29scyBleHRlbmRzIENoYXQuQW55VG9vbD4oXG4gIGFyZ3M6IFVpQ2hhdFJlc291cmNlT3B0aW9uczxUb29scz4sXG4pOiBVaUNoYXRSZXNvdXJjZVJlZjxUb29scz4ge1xuICBjb25zdCBmbGF0dGVuZWRDb21wb25lbnRzID0gY29tcHV0ZWQoKCkgPT5cbiAgICDJtXVpLmZsYXR0ZW5Db21wb25lbnRzKGFyZ3MuY29tcG9uZW50cyksXG4gICk7XG4gIGNvbnN0IGludGVybmFsU2NoZW1hID0gcy5vYmplY3QoJ1VJJywge1xuICAgIHVpOiBzLnN0cmVhbWluZy5hcnJheShcbiAgICAgICdMaXN0IG9mIGVsZW1lbnRzJyxcbiAgICAgIMm1dWkuY3JlYXRlQ29tcG9uZW50U2NoZW1hKGFyZ3MuY29tcG9uZW50cyksXG4gICAgKSxcbiAgfSk7XG4gIGNvbnN0IHN5c3RlbUFzU3RyaW5nID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHN5c3RlbSA9IHJlYWRTaWduYWxMaWtlKGFyZ3Muc3lzdGVtKTtcbiAgICBpZiAodHlwZW9mIHN5c3RlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBzeXN0ZW07XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHN5c3RlbS5jb21waWxlKGFyZ3MuY29tcG9uZW50cywgaW50ZXJuYWxTY2hlbWEpO1xuICAgIGlmIChzeXN0ZW0uZGlhZ25vc3RpY3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3lzdGVtIHByb21wdCBoYXMgJHtzeXN0ZW0uZGlhZ25vc3RpY3MubGVuZ3RofSBlcnJvcnM6IFxcblxcbiR7c3lzdGVtLmRpYWdub3N0aWNzLm1hcCgoZCkgPT4gZC5tZXNzYWdlKS5qb2luKCdcXG5cXG4nKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgY29uc3QgY2hhdCA9IHN0cnVjdHVyZWRDaGF0UmVzb3VyY2Uoe1xuICAgIG1vZGVsOiBhcmdzLm1vZGVsLFxuICAgIHNjaGVtYTogaW50ZXJuYWxTY2hlbWEsXG4gICAgdG9vbHM6IFsuLi4oYXJncy50b29scyA/PyBbXSldLFxuICAgIHN5c3RlbTogc3lzdGVtQXNTdHJpbmcsXG4gICAgbWVzc2FnZXM6IFsuLi4oYXJncy5tZXNzYWdlcyA/PyBbXSldLFxuICAgIGRlYnVnTmFtZTogYXJncy5kZWJ1Z05hbWUsXG4gICAgZGVib3VuY2U6IGFyZ3MuZGVib3VuY2UsXG4gICAgYXBpVXJsOiBhcmdzLmFwaVVybCxcbiAgICB0cmFuc3BvcnQ6IGFyZ3MudHJhbnNwb3J0LFxuICAgIHVpOiB0cnVlLFxuICAgIHRocmVhZElkOiBhcmdzLnRocmVhZElkLFxuICB9KTtcblxuICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gY2hhdC52YWx1ZSgpO1xuXG4gICAgICByZXR1cm4gbWVzc2FnZXMubWFwKChtZXNzYWdlKTogVWlDaGF0TWVzc2FnZTxUb29scz4gPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBtZXNzYWdlLmNvbnRlbnQgYXNcbiAgICAgICAgICAgIHwgcy5JbmZlcjx0eXBlb2YgaW50ZXJuYWxTY2hlbWE+XG4gICAgICAgICAgICB8ICcnXG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmICghY29udGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ubWVzc2FnZSxcbiAgICAgICAgICAgICAgW1RBR19OQU1FX1JFR0lTVFJZXToge30sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5tZXNzYWdlLFxuICAgICAgICAgICAgW1RBR19OQU1FX1JFR0lTVFJZXTpcbiAgICAgICAgICAgICAgQXJyYXkuZnJvbShmbGF0dGVuZWRDb21wb25lbnRzKCkudmFsdWVzKCkpLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoYWNjLCBjb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGFjY1tjb21wb25lbnQubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBjb21wb25lbnQucHJvcHMgPz8ge30sXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LmNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge30gYXMgVGFnTmFtZVJlZ2lzdHJ5LFxuICAgICAgICAgICAgICApID8/IHt9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lc3NhZ2Uucm9sZSA9PT0gJ3VzZXInKSB7XG4gICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lc3NhZ2Uucm9sZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG1lc3NhZ2Ugcm9sZWApO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB7IGRlYnVnTmFtZTogYXJncy5kZWJ1Z05hbWUgJiYgYCR7YXJncy5kZWJ1Z05hbWV9LnZhbHVlYCB9LFxuICApO1xuXG4gIGNvbnN0IGxhc3RBc3Npc3RhbnRNZXNzYWdlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB2YWx1ZSgpLmZpbmRMYXN0KChtZXNzYWdlKSA9PiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5jaGF0LFxuICAgIGhhc1ZhbHVlOiBjaGF0Lmhhc1ZhbHVlIGFzIGFueSxcbiAgICB2YWx1ZSxcbiAgICBsYXN0QXNzaXN0YW50TWVzc2FnZSxcbiAgfTtcbn1cbiJdfQ==","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed } from '@angular/core';\nimport { s, ɵui, } from '@hashbrownai/core';\nimport { structuredCompletionResource } from './structured-completion-resource.fn';\nimport { readSignalLike } from '../utils';\nimport { TAG_NAME_REGISTRY, } from '../utils/ui-chat.helpers';\n/**\n * Creates a UI completion resource that returns UI assistant messages.\n *\n * @public\n * @param options - The options for the UI completion resource.\n * @returns The UI completion resource.\n */\nexport function uiCompletionResource(options) {\n    const flattenedComponents = computed(() => ɵui.flattenComponents(options.components), ...(ngDevMode ? [{ debugName: \"flattenedComponents\" }] : []));\n    const internalSchema = s.object('UI', {\n        ui: s.streaming.array('List of elements', ɵui.createComponentSchema(options.components)),\n    });\n    const systemAsString = computed(() => {\n        const system = readSignalLike(options.system);\n        if (typeof system === 'string') {\n            return system;\n        }\n        const result = system.compile(options.components, internalSchema);\n        if (system.diagnostics.length > 0) {\n            throw new Error(`System prompt has ${system.diagnostics.length} errors: \\n\\n${system.diagnostics.map((d) => d.message).join('\\n\\n')}`);\n        }\n        return result;\n    }, ...(ngDevMode ? [{ debugName: \"systemAsString\" }] : []));\n    const completion = structuredCompletionResource({\n        model: options.model,\n        input: options.input,\n        schema: internalSchema,\n        system: systemAsString,\n        tools: options.tools,\n        debugName: options.debugName,\n        apiUrl: options.apiUrl,\n        retries: options.retries,\n        debounce: options.debounce,\n        transport: options.transport,\n        ui: true,\n        threadId: options.threadId,\n    });\n    const value = computed(() => {\n        const content = completion.value();\n        if (!content) {\n            return null;\n        }\n        const tagNameRegistry = Array.from(flattenedComponents().values()).reduce((acc, component) => {\n            acc[component.name] = {\n                props: component.props ?? {},\n                component: component.component,\n            };\n            return acc;\n        }, {}) ?? {};\n        return {\n            role: 'assistant',\n            content,\n            toolCalls: [],\n            [TAG_NAME_REGISTRY]: tagNameRegistry,\n        };\n    }, { debugName: options.debugName && `${options.debugName}.value` });\n    function hasValue() {\n        return value() !== null;\n    }\n    return {\n        value,\n        status: completion.status,\n        error: completion.error,\n        isLoading: completion.isLoading,\n        reload: completion.reload,\n        stop: completion.stop,\n        isSending: completion.isSending,\n        isReceiving: completion.isReceiving,\n        hasValue: hasValue,\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktY29tcGxldGlvbi1yZXNvdXJjZS5mbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvc3JjL3Jlc291cmNlcy91aS1jb21wbGV0aW9uLXJlc291cmNlLmZuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBR0wsQ0FBQyxFQUdELEdBQUcsR0FDSixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUNMLGlCQUFpQixHQUdsQixNQUFNLDBCQUEwQixDQUFDO0FBa0dsQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBSWxDLE9BQWtEO0lBRWxELE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUN4QyxHQUFHLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQywrREFDMUMsQ0FBQztJQUNGLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1FBQ3BDLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FDbkIsa0JBQWtCLEVBQ2xCLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQzlDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNuQyxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQzNCLE9BQU8sQ0FBQyxNQUEyQyxDQUNwRCxDQUFDO1FBRUYsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQixPQUFPLE1BQU0s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ZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBjb21wdXRlZCwgUmVzb3VyY2UsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2hhdCxcbiAgdHlwZSBNb2RlbElucHV0LFxuICBzLFxuICBTeXN0ZW1Qcm9tcHQsXG4gIHR5cGUgVHJhbnNwb3J0T3JGYWN0b3J5LFxuICDJtXVpLFxufSBmcm9tICdAaGFzaGJyb3duYWkvY29yZSc7XG5pbXBvcnQgeyBFeHBvc2VkQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvZXhwb3NlLWNvbXBvbmVudC5mbic7XG5pbXBvcnQgeyBzdHJ1Y3R1cmVkQ29tcGxldGlvblJlc291cmNlIH0gZnJvbSAnLi9zdHJ1Y3R1cmVkLWNvbXBsZXRpb24tcmVzb3VyY2UuZm4nO1xuaW1wb3J0IHsgcmVhZFNpZ25hbExpa2UgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBUQUdfTkFNRV9SRUdJU1RSWSxcbiAgVGFnTmFtZVJlZ2lzdHJ5LFxuICBVaUFzc2lzdGFudE1lc3NhZ2UsXG59IGZyb20gJy4uL3V0aWxzL3VpLWNoYXQuaGVscGVycyc7XG5pbXBvcnQgeyBTaWduYWxMaWtlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgVWlDaGF0TWVzc2FnZU91dHB1dCB9IGZyb20gJy4vdWktY2hhdC1yZXNvdXJjZS5mbic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIFVJIGNvbXBsZXRpb24gcmVzb3VyY2UuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpQ29tcGxldGlvblJlc291cmNlT3B0aW9uczxcbiAgSW5wdXQsXG4gIFRvb2xzIGV4dGVuZHMgQ2hhdC5BbnlUb29sID0gQ2hhdC5BbnlUb29sLFxuPiB7XG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB0byB1c2UgZm9yIHRoZSBVSSBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgY29tcG9uZW50czogRXhwb3NlZENvbXBvbmVudDxhbnk+W107XG5cbiAgLyoqXG4gICAqIFRoZSBzaWduYWwgdGhhdCBwcm9kdWNlcyB0aGUgaW5wdXQgZm9yIHRoZSBjb21wbGV0aW9uLlxuICAgKi9cbiAgaW5wdXQ6IFNpZ25hbDxJbnB1dCB8IG51bGwgfCB1bmRlZmluZWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kZWwgdG8gdXNlIGZvciB0aGUgVUkgY29tcGxldGlvbiByZXNvdXJjZS5cbiAgICovXG4gIG1vZGVsOiBNb2RlbElucHV0O1xuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb21wdCB0byB1c2UgZm9yIHRoZSBVSSBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgc3lzdGVtOiBzdHJpbmcgfCBTaWduYWw8c3RyaW5nPiB8IFN5c3RlbVByb21wdCB8IFNpZ25hbDxTeXN0ZW1Qcm9tcHQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbHMgdG8gdXNlIGZvciB0aGUgVUkgY29tcGxldGlvbiByZXNvdXJjZS5cbiAgICovXG4gIHRvb2xzPzogVG9vbHNbXTtcblxuICAvKipcbiAgICogVGhlIGRlYnVnIG5hbWUgZm9yIHRoZSBVSSBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgZGVidWdOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJIFVSTCB0byB1c2UgZm9yIHRoZSBVSSBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgYXBpVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHJldHJpZXMgZm9yIHRoZSBVSSBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgcmV0cmllcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRlYm91bmNlIHRpbWUgZm9yIHRoZSBVSSBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgZGVib3VuY2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSB0cmFuc3BvcnQgb3ZlcnJpZGUgZm9yIHRoZSBVSSBjb21wbGV0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgdHJhbnNwb3J0PzogVHJhbnNwb3J0T3JGYWN0b3J5O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0aHJlYWQgaWRlbnRpZmllciB1c2VkIHRvIGxvYWQgb3IgY29udGludWUgYW4gZXhpc3RpbmcgY29udmVyc2F0aW9uLlxuICAgKi9cbiAgdGhyZWFkSWQ/OiBTaWduYWxMaWtlPHN0cmluZyB8IHVuZGVmaW5lZD47XG59XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gdGhlIFVJIGNvbXBsZXRpb24gcmVzb3VyY2UuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpQ29tcGxldGlvblJlc291cmNlUmVmPFRvb2xzIGV4dGVuZHMgQ2hhdC5BbnlUb29sPlxuICBleHRlbmRzIFJlc291cmNlPFVpQXNzaXN0YW50TWVzc2FnZTxUb29scz4gfCBudWxsPiB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdW5kZXJseWluZyBjb21wbGV0aW9uIGNhbGwgaXMgY3VycmVudGx5IHNlbmRpbmcgYSByZXF1ZXN0LlxuICAgKi9cbiAgaXNTZW5kaW5nOiBTaWduYWw8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdW5kZXJseWluZyBjb21wbGV0aW9uIGNhbGwgaXMgY3VycmVudGx5IHJlY2VpdmluZyBkYXRhLlxuICAgKi9cbiAgaXNSZWNlaXZpbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqXG4gICAqIFJlbG9hZHMgdGhlIGNvbXBsZXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbXBsZXRpb24gd2FzIHJlbG9hZGVkLlxuICAgKi9cbiAgcmVsb2FkOiAoKSA9PiBib29sZWFuO1xuICAvKipcbiAgICogU3RvcHMgYW55IGN1cnJlbnRseSBzdHJlYW1pbmcgcmVzcG9uc2UuXG4gICAqXG4gICAqIEBwYXJhbSBjbGVhclN0cmVhbWluZ01lc3NhZ2UgLSBXaGV0aGVyIHRvIGNsZWFyIHRoZSBjdXJyZW50IHN0cmVhbWluZyByZXNwb25zZS5cbiAgICovXG4gIHN0b3A6IChjbGVhclN0cmVhbWluZ01lc3NhZ2U/OiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBVSSBjb21wbGV0aW9uIHJlc291cmNlIHRoYXQgcmV0dXJucyBVSSBhc3Npc3RhbnQgbWVzc2FnZXMuXG4gKlxuICogQHB1YmxpY1xuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIFVJIGNvbXBsZXRpb24gcmVzb3VyY2UuXG4gKiBAcmV0dXJucyBUaGUgVUkgY29tcGxldGlvbiByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpQ29tcGxldGlvblJlc291cmNlPFxuICBJbnB1dCxcbiAgVG9vbHMgZXh0ZW5kcyBDaGF0LkFueVRvb2wgPSBDaGF0LkFueVRvb2wsXG4+KFxuICBvcHRpb25zOiBVaUNvbXBsZXRpb25SZXNvdXJjZU9wdGlvbnM8SW5wdXQsIFRvb2xzPixcbik6IFVpQ29tcGxldGlvblJlc291cmNlUmVmPFRvb2xzPiB7XG4gIGNvbnN0IGZsYXR0ZW5lZENvbXBvbmVudHMgPSBjb21wdXRlZCgoKSA9PlxuICAgIMm1dWkuZmxhdHRlbkNvbXBvbmVudHMob3B0aW9ucy5jb21wb25lbnRzKSxcbiAgKTtcbiAgY29uc3QgaW50ZXJuYWxTY2hlbWEgPSBzLm9iamVjdCgnVUknLCB7XG4gICAgdWk6IHMuc3RyZWFtaW5nLmFycmF5KFxuICAgICAgJ0xpc3Qgb2YgZWxlbWVudHMnLFxuICAgICAgybV1aS5jcmVhdGVDb21wb25lbnRTY2hlbWEob3B0aW9ucy5jb21wb25lbnRzKSxcbiAgICApLFxuICB9KTtcbiAgY29uc3Qgc3lzdGVtQXNTdHJpbmcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3lzdGVtID0gcmVhZFNpZ25hbExpa2UoXG4gICAgICBvcHRpb25zLnN5c3RlbSBhcyBTaWduYWxMaWtlPHN0cmluZyB8IFN5c3RlbVByb21wdD4sXG4gICAgKTtcblxuICAgIGlmICh0eXBlb2Ygc3lzdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHN5c3RlbTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBzeXN0ZW0uY29tcGlsZShvcHRpb25zLmNvbXBvbmVudHMsIGludGVybmFsU2NoZW1hKTtcblxuICAgIGlmIChzeXN0ZW0uZGlhZ25vc3RpY3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3lzdGVtIHByb21wdCBoYXMgJHtzeXN0ZW0uZGlhZ25vc3RpY3MubGVuZ3RofSBlcnJvcnM6IFxcblxcbiR7c3lzdGVtLmRpYWdub3N0aWNzLm1hcCgoZCkgPT4gZC5tZXNzYWdlKS5qb2luKCdcXG5cXG4nKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICBjb25zdCBjb21wbGV0aW9uID0gc3RydWN0dXJlZENvbXBsZXRpb25SZXNvdXJjZTxcbiAgICBJbnB1dCxcbiAgICB0eXBlb2YgaW50ZXJuYWxTY2hlbWEsXG4gICAgcy5JbmZlcjxVaUNoYXRNZXNzYWdlT3V0cHV0PlxuICA+KHtcbiAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICBpbnB1dDogb3B0aW9ucy5pbnB1dCxcbiAgICBzY2hlbWE6IGludGVybmFsU2NoZW1hLFxuICAgIHN5c3RlbTogc3lzdGVtQXNTdHJpbmcsXG4gICAgdG9vbHM6IG9wdGlvbnMudG9vbHMsXG4gICAgZGVidWdOYW1lOiBvcHRpb25zLmRlYnVnTmFtZSxcbiAgICBhcGlVcmw6IG9wdGlvbnMuYXBpVXJsLFxuICAgIHJldHJpZXM6IG9wdGlvbnMucmV0cmllcyxcbiAgICBkZWJvdW5jZTogb3B0aW9ucy5kZWJvdW5jZSxcbiAgICB0cmFuc3BvcnQ6IG9wdGlvbnMudHJhbnNwb3J0LFxuICAgIHVpOiB0cnVlLFxuICAgIHRocmVhZElkOiBvcHRpb25zLnRocmVhZElkLFxuICB9KTtcblxuICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVkKFxuICAgICgpOiBVaUFzc2lzdGFudE1lc3NhZ2U8VG9vbHM+IHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250ZW50ID0gY29tcGxldGlvbi52YWx1ZSgpO1xuXG4gICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhZ05hbWVSZWdpc3RyeSA9XG4gICAgICAgIEFycmF5LmZyb20oZmxhdHRlbmVkQ29tcG9uZW50cygpLnZhbHVlcygpKS5yZWR1Y2UoKGFjYywgY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgYWNjW2NvbXBvbmVudC5uYW1lXSA9IHtcbiAgICAgICAgICAgIHByb3BzOiBjb21wb25lbnQucHJvcHMgPz8ge30sXG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudC5jb21wb25lbnQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSBhcyBUYWdOYW1lUmVnaXN0cnkpID8/IHt9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICByb2xlOiAnYXNzaXN0YW50JyxcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgdG9vbENhbGxzOiBbXSxcbiAgICAgICAgW1RBR19OQU1FX1JFR0lTVFJZXTogdGFnTmFtZVJlZ2lzdHJ5LFxuICAgICAgfTtcbiAgICB9LFxuICAgIHsgZGVidWdOYW1lOiBvcHRpb25zLmRlYnVnTmFtZSAmJiBgJHtvcHRpb25zLmRlYnVnTmFtZX0udmFsdWVgIH0sXG4gICk7XG5cbiAgZnVuY3Rpb24gaGFzVmFsdWUodGhpczogVWlDb21wbGV0aW9uUmVzb3VyY2VSZWY8VG9vbHM+KSB7XG4gICAgcmV0dXJuIHZhbHVlKCkgIT09IG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbHVlLFxuICAgIHN0YXR1czogY29tcGxldGlvbi5zdGF0dXMsXG4gICAgZXJyb3I6IGNvbXBsZXRpb24uZXJyb3IsXG4gICAgaXNMb2FkaW5nOiBjb21wbGV0aW9uLmlzTG9hZGluZyxcbiAgICByZWxvYWQ6IGNvbXBsZXRpb24ucmVsb2FkLFxuICAgIHN0b3A6IGNvbXBsZXRpb24uc3RvcCxcbiAgICBpc1NlbmRpbmc6IGNvbXBsZXRpb24uaXNTZW5kaW5nLFxuICAgIGlzUmVjZWl2aW5nOiBjb21wbGV0aW9uLmlzUmVjZWl2aW5nLFxuICAgIGhhc1ZhbHVlOiBoYXNWYWx1ZSBhcyBhbnksXG4gIH07XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaGJyb3duYWktYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvc3JjL2hhc2hicm93bmFpLWFuZ3VsYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["ɵcreateRuntimeFunctionImpl","ɵcreateRuntimeImpl","ɵui"],"mappings":"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"}