{"version":3,"file":"aparte-angular.mjs","sources":["../../src/lib/aparte-ai.service.ts","../../src/lib/provide-aparte.ts","../../src/lib/aparte-chat.component.ts","../../src/lib/aparte-ui.component.ts","../../src/generated/element.directives.ts","../../src/lib/conversation-manager.service.ts","../../src/index.ts","../../src/aparte-angular.ts"],"sourcesContent":["import { Injectable, OnDestroy, inject, InjectionToken } from '@angular/core';\nimport { AparteClient, AparteClientOptions } from '@aparte/core';\n\n/**\n * Injection token for AparteClient configuration. Provided by `provideAparte()`;\n * omit it and the service falls back to `{}`.\n */\nexport const APARTE_CLIENT_OPTIONS = new InjectionToken<AparteClientOptions>('APARTE_CLIENT_OPTIONS');\n\n/**\n * AparteAiService\n *\n * Angular service to bridge the UI events with AI Providers.\n * Uses the agnostic `AparteClient` under the hood.\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class AparteAiService implements OnDestroy {\n    private readonly _clientOptions = inject(APARTE_CLIENT_OPTIONS, { optional: true });\n    private readonly _client: AparteClient = new AparteClient(this._clientOptions ?? {});\n\n    /**\n     * The `AparteClient` this service drives — the same object React's\n     * `useAparteClient`, Vue's and Svelte's `createAparteClient` return as\n     * `{ client, abort }`. Angular alone kept it private, so the instance was\n     * unreachable while each service's docblock called itself the others' equivalent.\n     */\n    get client(): AparteClient {\n        return this._client;\n    }\n\n    /**\n     * Start listening to `aparte-send` events globally.\n     * This connects the <aparte-chat> components to the AI Providers.\n     *\n     * `provideAparte()` calls this for you on app init (its `autoConnect`,\n     * on by default). Idempotent — a manual call on top of that is a no-op,\n     * so it stays the escape hatch when configuring without `provideAparte`.\n     */\n    connect(): void {\n        this._client.start();\n    }\n\n    /**\n     * Stop listening. The client also takes its `keyResolver` back off the config,\n     * so a paused bridge no longer answers for keys — a model list refreshed while\n     * disconnected sees the config's other key sources only.\n     */\n    disconnect(): void {\n        this._client.stop();\n    }\n\n    /**\n     * Abort the current AI response and all active tool calls.\n     */\n    abort(): void {\n        this._client.abort();\n    }\n\n    ngOnDestroy(): void {\n        this.disconnect();\n    }\n}\n","import {\n    DestroyRef,\n    InjectionToken,\n    inject,\n    makeEnvironmentProviders,\n    provideAppInitializer,\n    type EnvironmentProviders,\n} from '@angular/core';\nimport {\n    aparteGlobalConfig,\n    type AparteAIProvider,\n    type AparteClientOptions,\n    type AparteIconProvider,\n    type AparteLocale,\n    type AparteMarkdownProvider,\n    type AparteModelConfig,\n} from '@aparte/core';\nimport { DOCUMENT } from '@angular/common';\nimport { APARTE_CLIENT_OPTIONS, AparteAiService } from './aparte-ai.service';\n\n/**\n * Any function that initialises a plugin — sync or async, so it can wrap a\n * dynamic `import()` of a package YOU choose. It resolves to nothing, so `await`\n * the import rather than returning it:\n * `async () => { await import('@aparte/plugin-model-selector'); }`.\n */\nexport type ApartePluginLoader = () => void | Promise<void>;\n\n/**\n * Config for {@link provideAparte}. Deliberately **instance-agnostic**: every\n * plugin/locale slot takes a provider OBJECT or a LOADER function you supply —\n * this package never hardcodes (nor depends on) a catalog of `@aparte/*` package\n * names, so it stays a leaf with only `@aparte/core` + Angular as peers.\n */\nexport interface ProvideAparteOptions {\n    /** AI providers to register (e.g. from `@aparte/provider-openai-compat`). */\n    providers?: AparteAIProvider[];\n\n    /** Optional plugin wiring — objects or loaders, never package-name strings. */\n    plugins?: {\n        /**\n         * Action plugins, as loaders. A loader resolves to nothing, so `await` the\n         * import rather than returning it:\n         * `[async () => { await import('@aparte/plugin-model-selector'); }]`.\n         */\n        actions?: ApartePluginLoader[];\n        /** An icon provider object, or a loader that registers one. */\n        icons?: AparteIconProvider | ApartePluginLoader;\n        /** A loader that applies a theme. */\n        theme?: ApartePluginLoader;\n        /** A markdown provider `(raw: string) => string`, or a loader that registers one. */\n        markdown?: AparteMarkdownProvider | ApartePluginLoader;\n    };\n\n    /** Model selection configuration. */\n    modelConfig?: AparteModelConfig;\n\n    /** A locale OBJECT (e.g. `fr` from `@aparte/locale-fr`) — not a package-name string. */\n    locale?: AparteLocale;\n\n    /** Theme mode; `'auto'` follows the system preference. */\n    themeMode?: 'light' | 'dark' | 'auto';\n\n    /** Options for the `AparteClient` mounted by {@link AparteAiService}. */\n    clientOptions?: AparteClientOptions;\n\n    /**\n     * Start the {@link AparteAiService} client once the app initialises (after\n     * providers/plugins are registered), so sends stream without a manual\n     * `AparteAiService.connect()` — \"wire the config and it works\", same as the\n     * React/Vue/Svelte wrappers. Default `true`; set `false` to control the\n     * client lifecycle yourself.\n     */\n    autoConnect?: boolean;\n}\n\n/** Holds the resolved aparté config, for consumers that want to inject it. */\nexport const APARTE_CONFIG_TOKEN = new InjectionToken<ProvideAparteOptions>('APARTE_CONFIG');\n\nasync function loadIconPlugin(plugin: AparteIconProvider | ApartePluginLoader): Promise<void> {\n    if (typeof plugin === 'object' && plugin !== null) {\n        aparteGlobalConfig.setIconProvider(plugin);\n        return;\n    }\n    try {\n        await (plugin as ApartePluginLoader)();\n    } catch (err) {\n        console.warn('[aparte] Failed to load icon plugin', err);\n    }\n}\n\nasync function loadMarkdownPlugin(plugin: AparteMarkdownProvider | ApartePluginLoader): Promise<void> {\n    // A markdown provider takes the raw string; a loader takes nothing.\n    if (plugin.length >= 1) {\n        aparteGlobalConfig.setMarkdownProvider(plugin as AparteMarkdownProvider);\n        return;\n    }\n    try {\n        await (plugin as ApartePluginLoader)();\n    } catch (err) {\n        console.warn('[aparte] Failed to load markdown plugin', err);\n    }\n}\n\nasync function runLoader(loader: ApartePluginLoader, label: string): Promise<void> {\n    try {\n        await loader();\n    } catch (err) {\n        console.warn(`[aparte] Failed to load ${label} plugin`, err);\n    }\n}\n\nasync function loadPlugins(options: ProvideAparteOptions): Promise<void> {\n    const plugins = options.plugins;\n    if (!plugins) return;\n    const pending: Promise<void>[] = [];\n\n    for (const action of plugins.actions ?? []) pending.push(runLoader(action, 'action'));\n    if (plugins.icons) pending.push(loadIconPlugin(plugins.icons));\n    if (plugins.theme) pending.push(runLoader(plugins.theme, 'theme'));\n    if (plugins.markdown) pending.push(loadMarkdownPlugin(plugins.markdown));\n\n    await Promise.all(pending);\n}\n\n/**\n * Reflect the theme mode on the document root.\n *\n * Angular's own document, not the global: under Universal the initializer runs on the\n * server, where `document`/`window` do not exist and the injected DOCUMENT is Domino's.\n * A media query needs a real window; without one the mode is applied once and left.\n */\nfunction applyThemeMode(mode: 'light' | 'dark' | 'auto', doc: Document, destroyRef: DestroyRef): void {\n    if (mode !== 'auto') {\n        doc.documentElement.setAttribute('data-aparte-theme', mode);\n        return;\n    }\n    const win = doc.defaultView;\n    if (!win?.matchMedia) {\n        doc.documentElement.setAttribute('data-aparte-theme', 'light');\n        return;\n    }\n    const query = win.matchMedia('(prefers-color-scheme: dark)');\n    const onChange = (e: MediaQueryListEvent) => {\n        doc.documentElement.setAttribute('data-aparte-theme', e.matches ? 'dark' : 'light');\n    };\n    doc.documentElement.setAttribute('data-aparte-theme', query.matches ? 'dark' : 'light');\n    query.addEventListener('change', onChange);\n    // Released with the environment injector, so repeated bootstraps (TestBed, a\n    // multi-instance embed) don't stack listeners on the media query forever.\n    destroyRef.onDestroy(() => query.removeEventListener('change', onChange));\n}\n\n/**\n * Configure aparté for a standalone Angular app. Registers your AI providers,\n * model config, locale and optional plugins on `aparteGlobalConfig`,\n * provides {@link APARTE_CLIENT_OPTIONS} for {@link AparteAiService}, and\n * starts the client (see `autoConnect`) — no manual\n * `AparteAiService.connect()` needed.\n *\n * The components (`AparteChatComponent`, `AparteUiComponent`) are standalone and\n * work WITHOUT this — it is config sugar. Angular is the only wrapper that has it,\n * and the other three lose nothing: what this provider exists for is an initializer\n * that runs before the first component and a `DestroyRef` to release the theme\n * listener. Everything it configures is a plain call — bar `theme: 'auto'`, which is a\n * `matchMedia` listener you own — so React, Vue and Svelte make the same ones at module\n * scope, before the app mounts:\n *\n * ```ts\n * aparteGlobalConfig.registerAIProvider(createOpenAICompatProvider(presets.OPENROUTER));\n * aparteGlobalConfig.setModelConfig({ defaultModel: 'openai/gpt-4o-mini' });\n * aparteGlobalConfig.setLocale(fr);\n * document.documentElement.setAttribute('data-aparte-theme', 'dark');\n * // 'auto' is the one option with no one-liner: match prefers-color-scheme, rewrite the\n * // attribute on change, and drop the listener when your app tears down.\n * // The client stays the wrapper's own: useAparteClient(), createAparteClient().\n * ```\n *\n * @example\n * bootstrapApplication(App, {\n *   providers: [\n *     provideAparte({\n *       providers: [createOpenAICompatProvider(presets.OPENROUTER)],\n *       clientOptions: { keyResolver },\n *     }),\n *   ],\n * });\n */\nexport function provideAparte(options: ProvideAparteOptions = {}): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        { provide: APARTE_CONFIG_TOKEN, useValue: options },\n        { provide: APARTE_CLIENT_OPTIONS, useValue: options.clientOptions ?? {} },\n        provideAppInitializer(async () => {\n            const destroyRef = inject(DestroyRef);\n            // Before the first await, like `destroyRef`: inject() needs the context.\n            const doc = inject(DOCUMENT);\n            // inject() only works before the first await — grab the service now,\n            // connect at the end (after plugins) so the first send already sees\n            // markdown/action providers. SSR-safe: no listener without a window.\n            const ai = options.autoConnect !== false && typeof window !== 'undefined'\n                ? inject(AparteAiService)\n                : null;\n            if (options.providers?.length) {\n                aparteGlobalConfig.registerAIProvider(...options.providers);\n            }\n            if (options.modelConfig) {\n                aparteGlobalConfig.setModelConfig(options.modelConfig);\n            }\n            if (options.locale) {\n                aparteGlobalConfig.setLocale(options.locale);\n            }\n            await loadPlugins(options);\n            if (options.themeMode) {\n                applyThemeMode(options.themeMode, doc, destroyRef);\n            }\n            ai?.connect();\n        }),\n    ]);\n}\n","import {\n    Component,\n    CUSTOM_ELEMENTS_SCHEMA,\n    ElementRef,\n    OnDestroy,\n    ViewChild,\n    QueryList,\n    ViewChildren,\n    output,\n    signal,\n    computed,\n    ChangeDetectionStrategy,\n    AfterViewInit,\n    Input,\n    TemplateRef,\n    inject,\n    effect,\n    booleanAttribute,\n    numberAttribute,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Observable } from 'rxjs';\nimport type {\n    AparteMessage,\n    AparteSegment,\n    AparteSendEventDetail,\n    AparteChatHostBinding,\n    AparteConfig,\n    AparteActionEventDetail,\n    AparteChatImperativeApi,\n} from '@aparte/core';\nimport { AparteChatHost, aparteGlobalConfig, isAwaitingReply, uuid } from '@aparte/core';\n\n/**\n * AparteChatComponent — Angular 19 Wrapper\n *\n * Standalone component wrapping aparté Web Components with Angular Signals.\n * The streaming / branch-navigation / host-method orchestration (orphan-stream\n * guard, lifecycle tracking, conversation lifecycle, bubble reconciliation)\n * lives in the framework-agnostic `AparteChatHost` from `@aparte/core`; this\n * component only owns the Angular-idiomatic surface (signals, template, DI) and\n * binds the host over its `messages` signal.\n */\n@Component({\n    selector: 'aparte-chat',\n    standalone: true,\n    imports: [NgTemplateOutlet],\n    schemas: [CUSTOM_ELEMENTS_SCHEMA],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    // This selector is ALSO core's `<aparte-chat>` custom element, so the host gets\n    // upgraded by core on insert. `framework-managed` tells that shell to keep its\n    // hands off: THIS component renders the viewport + composer and drives them\n    // through AparteChatHost. Without it, core injects its default composition\n    // underneath ours (its own check can't see our children — they render later).\n    host: { 'framework-managed': '' },\n    template: `\n    <div\n      class=\"aparte-chat-container\"\n      [class]=\"containerClass()\"\n      [style]=\"containerStyle()\"\n      [class.aparte-chat-container--auto-center]=\"centerWhenEmpty()\"\n      [attr.overlay-composer]=\"overlayComposer() ? '' : null\"\n      [attr.data-aparte-empty]=\"centerWhenEmpty() && messages().length === 0 && !waiting() ? '' : null\"\n    >\n      <aparte-chat-viewport #viewport framework-managed=\"\" [attr.loading]=\"waiting() ? '' : null\">\n        @if (waiting()) {\n          <!-- The wait, drawn here because this DOM is Angular's: the kit's skeleton\n               recipe, and a line for a screen reader. -->\n          <div class=\"aparte-viewport-loading\" aria-hidden=\"true\">\n            <span class=\"aparte-skeleton aparte-skeleton--rect aparte-viewport-loading__user\"></span>\n            <span class=\"aparte-skeleton aparte-skeleton--text\"></span>\n            <span class=\"aparte-skeleton aparte-skeleton--text\"></span>\n            <span class=\"aparte-skeleton aparte-skeleton--text\"></span>\n            <span class=\"aparte-skeleton aparte-skeleton--text aparte-viewport-loading__last\"></span>\n          </div>\n          <span class=\"aparte-viewport-loading-status aparte-sr-only\" role=\"status\">{{ loadingText }}</span>\n        }\n        @if (messages().length === 0 && !waiting()) {\n          <!-- Welcome / placeholder shown inside the viewport while empty. -->\n          <ng-content select=\"[slot='empty-state']\"></ng-content>\n        }\n        @for (message of messages(); track message.id) {\n          @if (bubbleTemplate) {\n            <!-- Render your OWN element per message; driven by the reactive\n                 messages() signal so it streams live. -->\n            <ng-container\n              [ngTemplateOutlet]=\"bubbleTemplate\"\n              [ngTemplateOutletContext]=\"{ $implicit: message }\"\n            ></ng-container>\n          } @else {\n            <aparte-chat-bubble\n              #bubble\n              [attr.message-id]=\"message.id\"\n              [attr.data-role]=\"message.role\"\n              [attr.data-kind]=\"message.compaction ? 'compaction' : null\"\n              [attr.timestamp]=\"message.timestamp\"\n              [attr.content]=\"message.content\"\n              [attr.streaming]=\"awaitingReply(message) ? '' : null\"\n            ></aparte-chat-bubble>\n          }\n        }\n        <aparte-chat-status\n          [attr.visible]=\"isTyping() ? '' : null\"\n          [attr.text]=\"typingText()\"\n        ></aparte-chat-status>\n      </aparte-chat-viewport>\n\n      <!-- The presenter for a request to the human (approval gate, ask_user…).\n           Renders nothing until something asks; on by default as in <aparte-chat>. -->\n      @if (elicitation()) {\n        <aparte-elicitation></aparte-elicitation>\n      }\n\n      <ng-content select=\"[slot='above-composer']\"></ng-content>\n\n      <aparte-composer\n        #input\n        [attr.placeholder]=\"placeholder()\"\n        [attr.disabled]=\"disabled() || waiting() ? '' : null\"\n        [attr.submit-on-enter]=\"submitOnEnter() ? null : 'false'\"\n        (aparte-send)=\"onAparteSend($event)\"\n      >\n        <!-- Custom composer via [slot='composer']; falls back to the default\n             shell (input · send + footer slots, plus the attachment primitives\n             when the attachments input is set). Project your own\n             aparte-composer-* layout for a skin-specific composer. -->\n        <ng-content select=\"[slot='composer']\">\n          <div class=\"aparte-composer-shell\">\n            @if (attachments()) {\n              <aparte-composer-attachments></aparte-composer-attachments>\n            }\n            <div class=\"aparte-composer-row\">\n              @if (attachments()) {\n                <aparte-composer-add-attachment></aparte-composer-add-attachment>\n              }\n              <aparte-composer-input></aparte-composer-input>\n              <aparte-composer-send></aparte-composer-send>\n            </div>\n            <!-- The composer's bottom row. ONE slot: placement is the DOM order of\n                 what you project, and margin-inline-start:auto pushes a control to the\n                 end (a logical property, so it reads correctly in RTL).\n                 Angular cannot test whether anything projects into an ng-content, so\n                 unlike the other three wrappers the element is always rendered -- but it\n                 declares itself data-empty when nothing lands in it, and the stylesheet\n                 hides it then. The guarantee no longer depends on Angular stripping\n                 template whitespace. -->\n            <aparte-composer-toolbar>\n              <ng-content select=\"[slot='toolbar']\"></ng-content>\n            </aparte-composer-toolbar>\n          </div>\n        </ng-content>\n      </aparte-composer>\n    </div>\n  `,\n    styles: [`\n    :host {\n      display: block;\n      width: 100%;\n      height: 100%;\n    }\n\n    .aparte-chat-container {\n      display: flex;\n      flex-direction: column;\n      height: 100%;\n      width: 100%;\n      overflow: hidden;\n    }\n\n    aparte-chat-viewport {\n      flex: 1;\n      min-height: 0;\n    }\n\n    aparte-composer {\n      flex-shrink: 0;\n    }\n  `]\n})\nexport class AparteChatComponent implements AfterViewInit, OnDestroy, AparteChatImperativeApi {\n    constructor() {\n        // Reactive effect to reconcile bubbles when the messages signal updates.\n        // Debounced with requestAnimationFrame so rapid token bursts only trigger\n        // one sync per paint frame instead of N syncs for N tokens.\n        effect(() => {\n            // Read the signal so the effect tracks it — and react to EVERY value,\n            // the empty list included. React, Vue and Svelte all re-sync\n            // unconditionally, and emptying the transcript is exactly when the host\n            // has to let go of the bubbles that just went away. With the default\n            // bubbles `bubbleRefs.changes` hid the divergence; under a custom\n            // `[bubbleTemplate]` that query never fires and this was the only path.\n            this.messages();\n            if (this._syncRafId !== null) return;\n            this._syncRafId = requestAnimationFrame(() => {\n                this._syncRafId = null;\n                this._host?.syncBubbles();\n            });\n        });\n    }\n\n    private elementRef = inject(ElementRef);\n\n    /**\n     * Template bridge to core's shared `isAwaitingReply` (an Angular template can't\n     * call an imported function). One rule for the four wrappers and core itself,\n     * so \"is this bubble in flight\" can't drift between them.\n     */\n    readonly awaitingReply = isAwaitingReply;\n\n    // ── Input Signals ────────────────────────────────────────────────────────\n\n    /** Messages to display */\n    @Input('messages') set messagesInput(val: AparteMessage[]) {\n        this.messages.set(val);\n        // When messages are cleared (new conversation), reset the host's render cache\n        // so the next conversation starts clean — same as React/Vue/Svelte do. (The\n        // viewport's own clearMessages() is @deprecated in core and only clears its\n        // repo; the host's clearAll() path already owns the real teardown.)\n        if (val.length === 0) this._host?.clearRenderCache();\n    }\n    readonly messages = signal<AparteMessage[]>([]);\n\n    /** Input placeholder text */\n    @Input('placeholder') set placeholderInput(val: string) { this.placeholder.set(val); }\n    readonly placeholder = signal<string>('Type a message...');\n\n    /** Whether the input is disabled */\n    @Input({ alias: 'disabled', transform: booleanAttribute }) set disabledInput(val: boolean) { this.disabled.set(val); }\n    readonly disabled = signal<boolean>(false);\n\n    /** When false, Shift+Enter submits and a bare Enter inserts a newline. */\n    @Input({ alias: 'submitOnEnter', transform: booleanAttribute }) set submitOnEnterInput(val: boolean) { this.submitOnEnter.set(val); }\n    readonly submitOnEnter = signal<boolean>(true);\n\n    /**\n     * Opt in to the \"centered composer when empty\" layout: the composer sits\n     * vertically centered with the `[slot='empty-state']` content above it while\n     * the list is empty, then slides to the bottom on the first message (~0.3s).\n     * Off by default — additive (adds the `--auto-center` modifier + a\n     * `data-aparte-empty` attribute the shipped `aparte.css` recipe keys off).\n     */\n    @Input({ alias: 'centerWhenEmpty', transform: booleanAttribute }) set centerWhenEmptyInput(val: boolean) { this.centerWhenEmpty.set(val); }\n    readonly centerWhenEmpty = signal<boolean>(false);\n\n    /**\n     * The conversation is on its way: the viewport draws two skeleton turns, the empty\n     * state stays off and the composer is disabled until it lands. The conversation\n     * controller sets this itself while it fetches through your adapter's `loadFull()`;\n     * the input is for a wait of your own. Off by default.\n     */\n    @Input({ alias: 'loading', transform: booleanAttribute }) set loadingInput(val: boolean) { this.loading.set(val); }\n    readonly loading = signal<boolean>(false);\n    /** The controller's wait (a conversation fetched through the adapter). */\n    readonly hostLoading = signal<boolean>(false);\n    readonly waiting = computed(() => this.loading() || this.hostLoading());\n    get loadingText(): string { return (this.config ?? aparteGlobalConfig).t('loadingConversation'); }\n\n    /**\n     * Class(es) merged onto the INNER `.aparte-chat-container`, not onto this\n     * component's own `<aparte-chat>` host.\n     *\n     * The other three wrappers have no such host: their root IS the container, so a\n     * consumer's `className` / `class` lands on the div that carries\n     * `.aparte-chat-container`, `[overlay-composer]` and `[data-aparte-empty]` — the\n     * three selectors core's shell recipe keys on. Here a class written on the tag\n     * lands one level above them, so overriding the shell needed a descendant\n     * selector on Angular alone. This input is that parity. Additive: the recipe's\n     * own classes stay.\n     */\n    @Input('containerClass') set containerClassInput(val: string) { this.containerClass.set(val ?? ''); }\n    readonly containerClass = signal<string>('');\n\n    /** Inline style for the same div — a string or a `{ prop: value }` map. */\n    @Input('containerStyle') set containerStyleInput(val: string | Record<string, string> | null) { this.containerStyle.set(val ?? null); }\n    readonly containerStyle = signal<string | Record<string, string> | null>(null);\n\n    /**\n     * Overlay the composer on the transcript (the ChatGPT anatomy): the scroll\n     * surface spans the whole column, the scrollbar runs edge to edge, and the\n     * composer floats over it. Bound on the INNER `.aparte-chat-container` — that\n     * div is this wrapper's shell (the viewport is its child, not the host's), and\n     * core's recipe and the viewport's measurement both key on the attribute\n     * there. Read when the viewport mounts.\n     */\n    @Input({ alias: 'overlayComposer', transform: booleanAttribute }) set overlayComposerInput(val: boolean) { this.overlayComposer.set(val); }\n    readonly overlayComposer = signal<boolean>(false);\n\n    /**\n     * Add the file picker + chips strip to the default composer shell. **Off by\n     * default**, because the capability needs a host that consumes the files: an\n     * `AparteClient` inlines them per its `rawFileInject` option, but if you drive\n     * your own loop you must read `event.files` on `(messageSent)` — otherwise the\n     * file the user deliberately attached is dropped in silence. No effect when you\n     * project a `[slot='composer']` (drop `<aparte-composer-add-attachment>` and\n     * `<aparte-composer-attachments>` in it yourself).\n     */\n    @Input({ alias: 'attachments', transform: booleanAttribute }) set attachmentsInput(val: boolean) { this.attachments.set(val); }\n    readonly attachments = signal<boolean>(false);\n\n    /**\n     * Render the `<aparte-elicitation>` presenter inside the host — on by default, as\n     * it is in `<aparte-chat>`: the built-in approval gate and `requestUserInput()`\n     * ask through it, and it renders nothing until something asks. Set it to `false`\n     * when you mount a presenter of your own (`setElicitationPresenter`) or place the\n     * element yourself.\n     */\n    @Input({ alias: 'elicitation', transform: booleanAttribute }) set elicitationInput(val: boolean) { this.elicitation.set(val); }\n    readonly elicitation = signal<boolean>(true);\n\n    /** Whether the assistant is currently typing/streaming */\n    @Input({ alias: 'isTyping', transform: booleanAttribute }) set isTypingInput(val: boolean) { this.isTyping.set(val); }\n    readonly isTyping = signal<boolean>(false);\n\n    /** Text to show in the typing status */\n    @Input('typingText') set typingTextInput(val: string) { this.typingText.set(val); }\n    readonly typingText = signal<string>('Assistant is thinking...');\n\n    /** Duration in ms to freeze spacer recalculation after a conversation swap. */\n    @Input({ alias: 'layoutTransitionMs', transform: numberAttribute }) layoutTransitionMs = 0;\n\n    /**\n     * Active conversation id. When provided, the host attaches an\n     * `AparteConversationController` that loads/persists messages via the\n     * `AparteConversationManager` registered in `aparteGlobalConfig`. Setting a different id\n     * mid-stream aborts the previous request; `null` deselects.\n     */\n    @Input('conversationId') set conversationIdInput(val: string | null | undefined) {\n        const next = val ?? null;\n        if (next === this._conversationId) return;\n        this._conversationId = next;\n        if (this._host) void this._host.setConversationId(next);\n    }\n    private _conversationId: string | null = null;\n\n    /**\n     * Instance {@link AparteConfig} for this chat. When set, aparté components\n     * inside resolve THIS config instead of `aparteGlobalConfig`, so\n     * several independently-configured chats can coexist on one page. Omit for the\n     * global config. Read once in `ngAfterViewInit` when the host is created.\n     */\n    @Input() config?: AparteConfig;\n\n    /**\n     * Render your OWN element per message in place of `<aparte-chat-bubble>`.\n     * Opt-in — provide a `<ng-template let-message>` and pass its ref. Driven by\n     * the reactive `messages()` signal, so it updates live during streaming.\n     * The built-in action bar (retry/edit/branch) belongs to the native bubble;\n     * a custom bubble owns whatever it wires.\n     * @example\n     * <aparte-chat [bubbleTemplate]=\"tpl\" />\n     * <ng-template #tpl let-message>{{ message.content }}</ng-template>\n     */\n    @Input() bubbleTemplate?: TemplateRef<{ $implicit: AparteMessage }>;\n\n    // ── Outputs ────────────────────────────────────────────────────────────\n\n    /**\n     * User submitted a message from the composer. It is **appended to the thread\n     * automatically** (optimistic UI) before this fires — do NOT add it again in\n     * the handler (uncontrolled → duplicates; controlled → mirror it into your\n     * own `[messages]`). For side-effects: scroll, analytics, send.\n     */\n    readonly messageSent = output<AparteSendEventDetail>();\n    /**\n     * Emitted when a custom bubble action (registered via\n     * `aparteGlobalConfig.registerAction` with `zones: ['bubble']`) is clicked — a typed\n     * wrapper over the bubbling `aparte-action` DOM event. Switch on `$event.actionId`.\n     */\n    readonly action = output<AparteActionEventDetail>();\n    /** Emitted when messages are updated internally (e.g. by AparteClient) */\n    readonly messagesChange = output<AparteMessage[]>();\n    /** Emitted when a message is added internally (e.g. by appendMessage) */\n    readonly messageAppended = output<AparteMessage>();\n    /** The typing/\"thinking\" indicator toggled (the host flips it off on the first streamed token). */\n    readonly typingChange = output<boolean>();\n    /** Emitted when the controller lazily creates a conversation on first send. */\n    readonly conversationCreated = output<string>();\n\n    // ── View Children ────────────────────────────────────────────────────────\n    @ViewChild('viewport') viewportRef?: ElementRef<HTMLElement>;\n    @ViewChild('input') inputRef?: ElementRef<HTMLElement>;\n    @ViewChildren('bubble') bubbleRefs!: QueryList<ElementRef<HTMLElement>>;\n\n    // ── Private State ────────────────────────────────────────────────────────\n    /** Mirror of the host's streaming target id (drives `isStreaming`). */\n    private readonly _streamingId = signal<string | null>(null);\n    /** Computed: is currently streaming */\n    readonly isStreaming = computed(() => this._streamingId() !== null);\n\n    /** rAF id used to coalesce rapid signal updates during streaming */\n    private _syncRafId: number | null = null;\n\n    /** The framework-agnostic chat-host orchestrator (created in ngAfterViewInit). */\n    private _host?: AparteChatHost;\n    private _unbindHost?: () => void;\n    /** QueryList.changes subscription — released in ngOnDestroy so SPA route\n     *  churn doesn't leak a live subscription per mount. */\n    private _bubbleRefsSub?: { unsubscribe(): void };\n\n    ngAfterViewInit(): void {\n        const host = this.elementRef.nativeElement as HTMLElement;\n\n        // Ensure a stable id so aparte-composer can reference the host via `target`,\n        // letting AparteClient find it without DOM traversal across re-renders.\n        if (!host.id) host.id = `aparte-chat-${uuid()}`;\n        const composerEl = this.inputRef?.nativeElement;\n        if (composerEl) composerEl.setAttribute('target', host.id);\n\n        const binding: AparteChatHostBinding = {\n            hostId: host.id,\n            host,\n            viewport: this.viewportRef?.nativeElement ?? null,\n            getMessages: () => this.messages(),\n            setMessages: (msgs) => this.messages.set(msgs as AparteMessage[]),\n            onMessagesChange: (msgs) => this.messagesChange.emit(msgs as AparteMessage[]),\n            onMessageAppended: (msg) => this.messageAppended.emit(msg as AparteMessage),\n            onTypingChange: (typing) => { this.isTyping.set(typing); this.typingChange.emit(typing); },\n            onStreamingChange: (id) => this._streamingId.set(id),\n            onLoadingChange: (on) => this.hostLoading.set(on),\n            // Sibling-info / deferred work runs after Angular has re-rendered.\n            afterRender: (cb) => { setTimeout(cb, 0); },\n            resetComposer: () => {\n                (this.inputRef?.nativeElement as unknown as { reset?: () => void })?.reset?.();\n            },\n        };\n\n        this._host = new AparteChatHost(binding, {\n            layoutTransitionMs: this.layoutTransitionMs,\n            conversationId: this._conversationId,\n            onConversationCreated: (id) => {\n                this._conversationId = id;\n                this.conversationCreated.emit(id);\n            },\n            config: this.config,\n        });\n        this._unbindHost = this._host.bind();\n\n        // Custom bubble actions bubble to the host as `aparte-action`; surface them as\n        // the typed `action` output. (addEventListener, not @HostListener: Angular\n        // parses a colon in the event name as a `target:event` global target.)\n        host.addEventListener('aparte-action', this._onAction);\n\n        // Re-reconcile bubbles whenever Angular's @for materialises/destroys them.\n        this._host.syncBubbles();\n        this._bubbleRefsSub = this.bubbleRefs.changes.subscribe(() => this._host?.syncBubbles());\n    }\n\n    private readonly _onAction = (event: Event): void => {\n        this.action.emit((event as CustomEvent<AparteActionEventDetail>).detail);\n    };\n\n    ngOnDestroy(): void {\n        if (this._syncRafId !== null) {\n            cancelAnimationFrame(this._syncRafId);\n            this._syncRafId = null;\n        }\n        (this.elementRef.nativeElement as HTMLElement).removeEventListener('aparte-action', this._onAction);\n        this._bubbleRefsSub?.unsubscribe();\n        this._bubbleRefsSub = undefined;\n        this._unbindHost?.();\n        this._unbindHost = undefined;\n        this._host = undefined;\n    }\n\n    // ── Public imperative API (delegates to the host) ──────────────────────────\n\n    /** Append a message optimistically — `{ historical: true }` for one restored from your own store. */\n    appendMessage(message: AparteMessage, options?: { historical?: boolean }): void {\n        this._host?.appendMessage(message, options);\n    }\n    /** Atomic update for a message. */\n    updateMessage(messageId: string, updates: Partial<AparteMessage>): void {\n        this._host?.updateMessage(messageId, updates);\n    }\n    /** Update the last message content (streaming text). */\n    updateLastMessage(content: string, options?: { append?: boolean }): void {\n        this._host?.updateLastMessage(content, options);\n    }\n    /** Add a segment to the last message. */\n    addSegment(segment: AparteSegment): void { this._host?.addSegment(segment); }\n    /** Update a segment in the last message. */\n    updateSegment(segmentId: string, updates: Partial<AparteSegment>): void {\n        this._host?.updateSegment(segmentId, updates);\n    }\n    /** Remove a transient segment. */\n    removeSegment(segmentId: string): void { this._host?.removeSegment(segmentId); }\n    /** Append content to a segment in the last message. */\n    appendToSegment(segmentId: string, content: string): void {\n        this._host?.appendToSegment(segmentId, content);\n    }\n    /** Read the current message list. */\n    getMessages(): AparteMessage[] { return this._host?.getMessages() ?? this.messages(); }\n    /**\n     * Clear all messages + reset state. `{ revokeAttachments: false }` keeps the\n     * attachments' object URLs alive — pass it when the same messages are going back.\n     */\n    clearMessages(options?: { revokeAttachments?: boolean }): void { this._host?.clearMessages(options); }\n    /** Scroll the viewport to the latest message. */\n    scrollToBottom(): void {\n        (this.viewportRef?.nativeElement as unknown as { scrollToBottom?: () => void })?.scrollToBottom?.();\n    }\n    /**\n     * The `<aparte-chat-viewport>` element — for custom scroll handling, an\n     * IntersectionObserver, etc. Same `getViewport()` accessor on all four\n     * wrappers.\n     */\n    getViewport(): HTMLElement | null { return this.viewportRef?.nativeElement ?? null; }\n    /** Focus the composer input. */\n    focusInput(): void {\n        (this.inputRef?.nativeElement as unknown as { focus?: () => void })?.focus?.();\n    }\n    /** Create a new branch from a message (returns the new sibling index). */\n    addBranch(messageId: string): number { return this._host?.addBranch(messageId) ?? 0; }\n    /** Add a sibling of an existing message (returns the new id). */\n    addSiblingOf(existingId: string, newMessage: AparteMessage): string | null {\n        return this._host?.addSiblingOf(existingId, newMessage) ?? null;\n    }\n    /** Remove a message and all descendants (edit flow). */\n    truncateFrom(messageId: string): void { this._host?.truncateFrom(messageId); }\n    /** Keep up to and including a user message, drop later responses (retry). */\n    truncateResponsesAfter(userMessageId: string): void {\n        this._host?.truncateResponsesAfter(userMessageId);\n    }\n\n    // ── Token streaming (cross-wrapper contract + Observable adapter) ──────────\n\n    /**\n     * Inject a token stream for LLM streaming. Takes the cross-wrapper\n     * `AsyncIterable<string>` contract (the exact call that works on\n     * React/Vue/Svelte) — or an Angular-idiomatic RxJS `Observable<string>`,\n     * adapted into the host's agnostic `streamTokens(AsyncIterable)` so the\n     * orphan-stream guard + id tracking stay in one place (the host).\n     */\n    async injectTokenStream(\n        messageId: string,\n        stream: Observable<string> | AsyncIterable<string>,\n    ): Promise<void> {\n        if (!this._host) return;\n        const tokens = Symbol.asyncIterator in stream\n            ? (stream as AsyncIterable<string>)\n            : this._observableToAsyncIterable(stream as Observable<string>);\n        await this._host.streamTokens(messageId, tokens);\n    }\n\n    /** Stop any active token stream. */\n    stopTokenStream(): void { this._host?.stopTokenStream(); }\n\n    /**\n     * Set the active conversation id imperatively — parity with the other\n     * wrappers' handles (the `conversationId` `@Input` remains the declarative\n     * path). Delegates to the host, which loads/persists via the registered\n     * `AparteConversationManager`.\n     */\n    setConversationId(id: string | null): Promise<void> {\n        return this._host?.setConversationId(id) ?? Promise.resolve();\n    }\n\n    private _observableToAsyncIterable(stream: Observable<string>): AsyncIterable<string> {\n        return {\n            [Symbol.asyncIterator](): AsyncIterator<string> {\n                const buffer: string[] = [];\n                let finished = false;\n                let failure: unknown = null;\n                let pending: {\n                    resolve: (r: IteratorResult<string>) => void;\n                    reject: (e: unknown) => void;\n                } | null = null;\n                const settle = () => {\n                    if (!pending) return;\n                    if (failure !== null) { const p = pending; pending = null; p.reject(failure); return; }\n                    if (buffer.length) {\n                        const p = pending; pending = null;\n                        p.resolve({ value: buffer.shift() as string, done: false });\n                        return;\n                    }\n                    if (finished) {\n                        const p = pending; pending = null;\n                        p.resolve({ value: undefined as unknown as string, done: true });\n                    }\n                };\n                const sub = stream.subscribe({\n                    next: (v) => { buffer.push(v); settle(); },\n                    error: (e) => { failure = e; settle(); },\n                    complete: () => { finished = true; settle(); },\n                });\n                return {\n                    next(): Promise<IteratorResult<string>> {\n                        if (failure !== null) return Promise.reject(failure);\n                        if (buffer.length) {\n                            return Promise.resolve({ value: buffer.shift() as string, done: false });\n                        }\n                        if (finished) {\n                            return Promise.resolve({ value: undefined as unknown as string, done: true });\n                        }\n                        return new Promise((resolve, reject) => { pending = { resolve, reject }; });\n                    },\n                    return(): Promise<IteratorResult<string>> {\n                        sub.unsubscribe();\n                        // If a consumer is mid-`await next()` on an empty buffer (e.g. the\n                        // orphan-stream guard calling `return()` on stop/teardown), settle\n                        // that pending promise now with done:true — otherwise it hangs\n                        // forever, since unsubscribing means `next` and `complete` will\n                        // never fire again to resolve it.\n                        if (pending) {\n                            const p = pending;\n                            pending = null;\n                            p.resolve({ value: undefined as unknown as string, done: true });\n                        }\n                        finished = true;\n                        return Promise.resolve({ value: undefined as unknown as string, done: true });\n                    },\n                };\n            },\n        };\n    }\n\n    /** Handle aparte-send event from the composer Web Component. */\n    onAparteSend(event: Event): void {\n        const detail = (event as CustomEvent<AparteSendEventDetail>).detail;\n        // Smooth-scroll the next auto-scroll (when Angular adds the user bubble).\n        (this.viewportRef?.nativeElement as unknown as { requestSmoothScroll?: () => void })\n            ?.requestSmoothScroll?.();\n        this.messageSent.emit(detail);\n    }\n}\n","import {\n    Component,\n    CUSTOM_ELEMENTS_SCHEMA,\n    ElementRef,\n    OnChanges,\n    OnDestroy,\n    AfterViewInit,\n    SimpleChanges,\n    ChangeDetectionStrategy,\n    Input,\n    output,\n    Renderer2,\n    inject\n} from '@angular/core';\nimport { applyElementProps, APARTE_DEFAULT_UI_EVENTS, type AparteUiHandle } from '@aparte/core';\n\n/**\n * The imperative surface of the `AparteUi` proxy — one declaration in `@aparte/core`,\n * re-exported by all four wrappers. It used to be four hand-written copies, each\n * promising \"the same contract on all four\", and it had already drifted.\n */\nexport type { AparteUiHandle } from '@aparte/core';\n\n/**\n * The proxy's inputs, named for parity with React/Vue/Svelte, which all export an\n * `AparteUiProps`. Angular's are `@Input`s on the component rather than an object, so\n * this is the shape a caller building `[props]` programmatically writes against.\n */\nexport interface AparteUiProps {\n    /** The custom element tag name (e.g. 'aparte-model-selector'). */\n    name: string;\n    /** Props to apply. Keys starting with `--` become CSS variables. */\n    props?: Record<string, unknown>;\n    /**\n     * Which custom events to forward through `elementEvent`. Defaults to the\n     * interactive aparté surface ({@link APARTE_DEFAULT_UI_EVENTS}).\n     */\n    events?: string[];\n}\n\n/**\n * AparteUiComponent - Universal UI Proxy\n *\n * A pass-through proxy component that dynamically injects any aparté\n * Web Component, so you don't need a dedicated Angular wrapper per element.\n *\n * `name` can be any custom element, including one of yours. `aparte-model-selector`\n * below is defined by `@aparte/plugin-model-selector`, not by core — until that\n * package is imported the tag mounts empty and inert with no error, and upgrades on\n * its own once the definition arrives, which is what makes `provideAparte`'s lazy\n * `plugins` loaders work.\n *\n * A PLUGIN's event is not in the default forward list — that default is core's, and a\n * third-party plugin's author cannot add to it, so listing ours would privilege our\n * packages over theirs. Name it in `events` and it arrives; leave it out and the handler\n * silently never fires, which is what this example used to do.\n *\n * @example\n * ```html\n * <aparte-ui\n *   name=\"aparte-model-selector\"\n *   [props]=\"{\n *     placeholder: 'Ask anything...',\n *     '--glow-opacity': '1',\n *     '--glow-speed': '4s'\n *   }\"\n *   [events]=\"['aparte-model-change']\"\n *   (elementEvent)=\"onEvent($event)\"\n * />\n * ```\n *\n * @description\n * - Keys starting with `--` are applied as CSS Variables\n * - Other keys are set as DOM properties on the element\n * - The events in `events` (default: {@link APARTE_DEFAULT_UI_EVENTS}) bubble up via `elementEvent`\n */\n@Component({\n    selector: 'aparte-ui',\n    standalone: true,\n    schemas: [CUSTOM_ELEMENTS_SCHEMA],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `<ng-container></ng-container>`,\n    styles: [`\n    :host {\n      display: contents;\n    }\n  `]\n})\nexport class AparteUiComponent implements AfterViewInit, OnChanges, OnDestroy, AparteUiHandle {\n    private readonly renderer = inject(Renderer2);\n    private readonly hostEl = inject(ElementRef);\n\n    // ─────────────────────────────────────────────────────────────\n    // Inputs\n    // ─────────────────────────────────────────────────────────────\n\n    /** The custom element tag name (e.g., 'aparte-model-selector') */\n    @Input({ required: true }) name!: string;\n\n    /** Properties to pass to the element. Keys starting with '--' are CSS vars */\n    @Input() props: Record<string, unknown> = {};\n\n    /**\n     * Which custom events to forward through `elementEvent`. Defaults to the\n     * interactive aparté surface ({@link APARTE_DEFAULT_UI_EVENTS}); pass your own list to\n     * listen to other events (e.g. `['aparte-composer-change']` for attachments).\n     */\n    @Input() events?: string[];\n\n    // ─────────────────────────────────────────────────────────────\n    // Outputs\n    // ─────────────────────────────────────────────────────────────\n\n    /** Emits a forwarded custom event from the underlying Web Component */\n    readonly elementEvent = output<CustomEvent>();\n\n    // ─────────────────────────────────────────────────────────────\n    // Internal State\n    // ─────────────────────────────────────────────────────────────\n\n    /** The dynamically created Web Component element */\n    private element: HTMLElement | null = null;\n\n    /** Cleanup functions for event listeners */\n    private eventCleanups: (() => void)[] = [];\n\n    /** Joined key of the bound event set, so a fresh inline `[events]` array\n     *  doesn't thrash the element — only a real change rebinds. */\n    private lastEventsKey = '';\n\n    // ─────────────────────────────────────────────────────────────\n    // Lifecycle\n    // ─────────────────────────────────────────────────────────────\n\n    ngAfterViewInit(): void {\n        this.createElement();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        // Recreate the element when `name` (or the forwarded event set) changes.\n        const nameChanged = !!changes['name'] && !changes['name'].firstChange;\n        const eventsChanged =\n            !!changes['events'] &&\n            !changes['events'].firstChange &&\n            this.eventsKey() !== this.lastEventsKey;\n\n        if (nameChanged || eventsChanged) {\n            this.destroyElement();\n            this.createElement();\n        }\n\n        // If props changed, update them\n        if (changes['props'] && this.element) {\n            this.applyProps();\n        }\n    }\n\n    ngOnDestroy(): void {\n        this.destroyElement();\n    }\n\n    // ─────────────────────────────────────────────────────────────\n    // Element Management\n    // ─────────────────────────────────────────────────────────────\n\n    private eventsKey(): string {\n        return (this.events ?? APARTE_DEFAULT_UI_EVENTS).join('|');\n    }\n\n    private createElement(): void {\n        if (!this.name) return;\n\n        // Create the custom element\n        this.element = this.renderer.createElement(this.name);\n\n        // Apply initial props\n        this.applyProps();\n\n        // Setup event listeners\n        this.setupEventListeners();\n\n        // Append to host (not container, to avoid extra wrapper)\n        this.renderer.appendChild(this.hostEl.nativeElement, this.element);\n    }\n\n    private destroyElement(): void {\n        // Cleanup event listeners\n        this.eventCleanups.forEach(cleanup => cleanup());\n        this.eventCleanups = [];\n\n        // Remove element\n        if (this.element && this.element.parentNode) {\n            this.renderer.removeChild(this.hostEl.nativeElement, this.element);\n        }\n        this.element = null;\n    }\n\n    /**\n     * aparté elements are **attribute-driven** (`observedAttributes`): assigning a\n     * property is either a silent no-op (nothing observes it) or throws outright on\n     * a getter-only accessor — `<aparte-composer>`'s `placeholder`/`disabled` are\n     * exactly that. So primitives go through `setAttribute`; only values an\n     * attribute cannot carry (objects, functions) are handed over as properties.\n     */\n    private applyProps(): void {\n        if (this.element) applyElementProps(this.element, this.props);\n    }\n\n    private setupEventListeners(): void {\n        if (!this.element) return;\n\n        this.lastEventsKey = this.eventsKey();\n        (this.events ?? APARTE_DEFAULT_UI_EVENTS).forEach(eventName => {\n            const listener = (event: Event) => {\n                this.elementEvent.emit(event as CustomEvent);\n            };\n\n            this.element!.addEventListener(eventName, listener);\n            this.eventCleanups.push(() => {\n                this.element?.removeEventListener(eventName, listener);\n            });\n        });\n    }\n\n    // ─────────────────────────────────────────────────────────────\n    // Public API\n    // ─────────────────────────────────────────────────────────────\n\n    /** Get the underlying Web Component element */\n    getElement<T extends HTMLElement = HTMLElement>(): T | null {\n        return this.element as T | null;\n    }\n\n    /** Call a method on the underlying element */\n    callMethod<T = unknown>(methodName: string, ...args: unknown[]): T | undefined {\n        if (!this.element) return undefined;\n\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const method = (this.element as any)[methodName];\n        if (typeof method === 'function') {\n            return method.apply(this.element, args) as T;\n        }\n        return undefined;\n    }\n}\n","// AUTO-GENERATED by scripts/gen-element-bindings.mjs from this package's\n// custom-elements.json. Do not edit: it is gitignored and rewritten every build.\n// The source of every fact below is the element's own JSDoc.\n\n/**\n * A typed Angular surface for every element this package defines.\n *\n * Generated, and that is the point: a hand-written directive is a parallel structure over\n * the manifest with nothing watching it, so an attribute added to an element would be\n * typed in React, Vue and Svelte — which derive from the registry — and silently missing\n * here. That happened, which is why this file is generated now.\n *\n * Outputs emit the event's DETAIL, not the `CustomEvent`, because\n * `(selectChange)=\"pick($event.value)\"` is the Angular idiom. Reach the event itself with\n * a plain host listener when you need `stopPropagation`.\n */\nimport {\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostListener,\n    Input,\n    Output,\n    booleanAttribute,\n    inject,\n    numberAttribute,\n} from '@angular/core';\nimport { applyElementProps } from '@aparte/core';\nimport type {\n    AparteActionClickEventDetail,\n    AparteActionEventDetail,\n    AparteAttachmentPreviewEventDetail,\n    AparteBranchNavigateEventDetail,\n    AparteCompactEventDetail,\n    AparteComposerChangeEventDetail,\n    AparteContextThresholdEventDetail,\n    AparteConversationArchiveDetail,\n    AparteConversationDeleteDetail,\n    AparteConversationPinDetail,\n    AparteConversationRenameDetail,\n    AparteConversationSelectDetail,\n    AparteEditEventDetail,\n    AparteFeedbackEventDetail,\n    AparteLinkClickEventDetail,\n    AparteMessageInfoEventDetail,\n    AparteOptgroupToggleEventDetail,\n    ApartePathChangedEventDetail,\n    AparteRetryEventDetail,\n    AparteScrollRailJumpDetail,\n    AparteSegmentUpdateEventDetail,\n    AparteSelectChangeDetail,\n    AparteSendEventDetail,\n    AparteSidebarToggleDetail,\n    AparteSplitResizeDetail,\n    AparteSuggestionEventDetail,\n} from '@aparte/core';\n\n/**\n * Writes one declared attribute onto the host element.\n *\n * `applyElementProps` is core's own rule, reused rather than reimplemented: a primitive\n * goes through `setAttribute`, `true` becomes the empty presence attribute,\n * `false`/`null`/`undefined` remove it, and only a value an attribute cannot carry is\n * handed over as a property.\n */\n@Directive()\nabstract class AparteElementBase {\n    protected readonly host = inject(ElementRef<HTMLElement>);\n\n    protected write(name: string, value: unknown): void {\n        applyElementProps(this.host.nativeElement, { [name]: value });\n    }\n}\n\n/** `<aparte-chat-bubble>` — One message: plain content or a list of rich segments, in light DOM. */\n@Directive({ selector: 'aparte-chat-bubble', standalone: true })\nexport class AparteChatBubbleDirective extends AparteElementBase {\n    /** The message role, `user` or `assistant` — the one channel for it, and what the CSS keys off. (`role` is ARIA's attribute; this element sets it to `article` itself and no longer reads a message role from it.) */\n    @Input() set messageRole(v: string | undefined) { this.write('data-role', v); }\n    /** Plain text content, for a bubble with no segments. */\n    @Input() set content(v: string | undefined) { this.write('content', v); }\n    /** Epoch milliseconds OR a date string: `_updateTimestamp` accepts either and only coerces when the value is numeric. */\n    @Input() set timestamp(v: number | string | undefined) { this.write('timestamp', v); }\n    /** How streaming and the action bar address this bubble. */\n    @Input() set messageId(v: string | undefined) { this.write('message-id', v); }\n    /** Hides the action bar and shows the caret while a reply is in flight. */\n    @Input({ transform: booleanAttribute }) set streaming(v: boolean) { this.write('streaming', v); }\n    /** The display name in the header. */\n    @Input() set name(v: string | undefined) { this.write('name', v); }\n\n    /** An attached image was clicked, asking the app to open it full-size. */\n    @Output() readonly attachmentPreview = new EventEmitter<AparteAttachmentPreviewEventDetail>();\n    /** A custom action-bar button was pressed. */\n    @Output() readonly action = new EventEmitter<AparteActionEventDetail>();\n    /** Retry was pressed; the host forks the turn. */\n    @Output() readonly retry = new EventEmitter<AparteRetryEventDetail>();\n    /** Thumbs up or down. */\n    @Output() readonly feedback = new EventEmitter<AparteFeedbackEventDetail>();\n    /** The info affordance was pressed. */\n    @Output() readonly messageInfo = new EventEmitter<AparteMessageInfoEventDetail>();\n    /** An edit was saved. */\n    @Output() readonly edit = new EventEmitter<AparteEditEventDetail>();\n    /** The `‹1/2›` picker moved between sibling versions. */\n    @Output() readonly branchNavigate = new EventEmitter<AparteBranchNavigateEventDetail>();\n    /** A link in the message body is about to be followed. Cancelable: `preventDefault()` keeps the browser from navigating, so a host can route the link itself. Angular: this Output emits the detail, so preventDefault() is not on it — bind the DOM event for that: (aparte-link-click)=\"$event.preventDefault()\". */\n    @Output() readonly linkClick = new EventEmitter<AparteLinkClickEventDetail>();\n\n    @HostListener('aparte-attachment-preview', ['$event'])\n    protected onAttachmentPreview(e: CustomEvent<AparteAttachmentPreviewEventDetail>): void { this.attachmentPreview.emit(e.detail); }\n\n    @HostListener('aparte-action', ['$event'])\n    protected onAction(e: CustomEvent<AparteActionEventDetail>): void { this.action.emit(e.detail); }\n\n    @HostListener('aparte-retry', ['$event'])\n    protected onRetry(e: CustomEvent<AparteRetryEventDetail>): void { this.retry.emit(e.detail); }\n\n    @HostListener('aparte-feedback', ['$event'])\n    protected onFeedback(e: CustomEvent<AparteFeedbackEventDetail>): void { this.feedback.emit(e.detail); }\n\n    @HostListener('aparte-message-info', ['$event'])\n    protected onMessageInfo(e: CustomEvent<AparteMessageInfoEventDetail>): void { this.messageInfo.emit(e.detail); }\n\n    @HostListener('aparte-edit', ['$event'])\n    protected onEdit(e: CustomEvent<AparteEditEventDetail>): void { this.edit.emit(e.detail); }\n\n    @HostListener('aparte-branch-navigate', ['$event'])\n    protected onBranchNavigate(e: CustomEvent<AparteBranchNavigateEventDetail>): void { this.branchNavigate.emit(e.detail); }\n\n    @HostListener('aparte-link-click', ['$event'])\n    protected onLinkClick(e: CustomEvent<AparteLinkClickEventDetail>): void { this.linkClick.emit(e.detail); }\n}\n\n/** `<aparte-chat-status>` — A standalone status line — a light-DOM indicator the APP owns. Nothing in core turns it on: the framework host only ever flips it back OFF (on the first streamed token), and the four wrappers render one inside the viewport driven by their own `isTyping` prop. */\n@Directive({ selector: 'aparte-chat-status', standalone: true })\nexport class AparteChatStatusDirective extends AparteElementBase {\n    /** Shows or hides the indicator. */\n    @Input({ transform: booleanAttribute }) set visible(v: boolean) { this.write('visible', v); }\n    /** The line to show. Absent, the line is dots-only and the accessible name falls back to the literal `Typing` (not the locale's string). */\n    @Input() set text(v: string | undefined) { this.write('text', v); }\n}\n\n/** `<aparte-chat-viewport>` — The transcript surface: a light-DOM container with sticky scrolling, token streaming and segment-aware rendering. */\n@Directive({ selector: 'aparte-chat-viewport', standalone: true })\nexport class AparteChatViewportDirective extends AparteElementBase {\n    /** How close to the bottom still counts as \"at the bottom\". */\n    @Input({ transform: numberAttribute }) set scrollThreshold(v: number) { this.write('scroll-threshold', v); }\n    /** Caps how many bubbles stay in the DOM; older ones are released. */\n    @Input({ transform: numberAttribute }) set maxRenderedBubbles(v: number) { this.write('max-rendered-bubbles', v); }\n    /** The transcript is on its way: a conversation was chosen and its messages are being fetched. The element draws two skeleton turns, marks its scroll surface `aria-busy` and names the wait for a screen reader; `aparte-chat[center-empty]` does not count a loading viewport as empty. Set by `AparteConversationController` through its binding, or by hand from a loop of your own (`setLoading(true)`). */\n    @Input({ transform: booleanAttribute }) set loading(v: boolean) { this.write('loading', v); }\n    /** The wrapper's explicit hands-off signal: set it and this element builds no wrapper of its own and relocates none of the nodes the FRAMEWORK renders into it, because the framework owns them. Not \"none of its children\": core's own scroll-to-bottom button is re-appended whenever it stops being last, and that path runs in this mode only. All four wrappers set it. */\n    @Input({ transform: booleanAttribute }) set frameworkManaged(v: boolean) { this.write('framework-managed', v); }\n    /** Reflected BY the element while a turn streams: the transcript is read-only meanwhile, and every bubble inside reads it (at connect, and when it changes). The vanilla path derives it from the repository; a framework host sets it through `setTranscriptBusy()`. Read-only from the outside. */\n    @Input({ transform: booleanAttribute }) set dataBusy(v: boolean) { this.write('data-busy', v); }\n\n    /** A segment grew or settled during a stream. */\n    @Output() readonly segmentUpdate = new EventEmitter<AparteSegmentUpdateEventDetail>();\n    /** `clearAll()` finished emptying the transcript. No detail. */\n    @Output() readonly resetDone = new EventEmitter<void>();\n    /** The active branch path changed, after a retry fork or a navigation. */\n    @Output() readonly pathChanged = new EventEmitter<ApartePathChangedEventDetail>();\n\n    @HostListener('aparte-segment-update', ['$event'])\n    protected onSegmentUpdate(e: CustomEvent<AparteSegmentUpdateEventDetail>): void { this.segmentUpdate.emit(e.detail); }\n\n    @HostListener('aparte-reset-done')\n    protected onResetDone(): void { this.resetDone.emit(); }\n\n    @HostListener('aparte-path-changed', ['$event'])\n    protected onPathChanged(e: CustomEvent<ApartePathChangedEventDetail>): void { this.pathChanged.emit(e.detail); }\n}\n\n/** `<aparte-composer>` — The root context for every `aparte-composer-*` primitive. It imposes no visual layout — the consumer owns the structure — and holds the shared state the parts read: the value, the streaming flag, pending attachments, whether a panel is up. */\n@Directive({ selector: 'aparte-composer', standalone: true })\nexport class AparteComposerDirective extends AparteElementBase {\n    /** Fallback placeholder for `<aparte-composer-input>`, which reads it off this element when it carries none of its own. Changing it here reaches the inputs already on the page too. */\n    @Input() set placeholder(v: string | undefined) { this.write('placeholder', v); }\n    /** Disables the composer's own controls — the input, send, add-attachment and `<aparte-composer-action>` buttons each read it. What you put in the toolbar is yours to disable. */\n    @Input({ transform: booleanAttribute }) set disabled(v: boolean) { this.write('disabled', v); }\n    /** The id of the `<aparte-chat>` this composer drives. */\n    @Input() set target(v: string | undefined) { this.write('target', v); }\n    /** Enter sends and Shift+Enter breaks the line (the default); set it to the string `\"false\"` to swap them. Read lazily by the `submitOnEnter` getter rather than observed, which is why it was missing from the manifest — and so from every typed surface — while all four wrappers wrote it. */\n    @Input({ transform: booleanAttribute }) set submitOnEnter(v: boolean) { this.write('submit-on-enter', v ? '' : 'false'); }\n    /** Reflected BY the element while a panel (an elicitation, an approval) is mounted inside it; the shipped stylesheet keys off it. Read-only. */\n    @Input({ transform: booleanAttribute }) set dataPanelActive(v: boolean) { this.write('data-panel-active', v); }\n    /** Reflected BY the element while a panel is active: what the send button does meanwhile (`'none'` removes it — through this attribute, not by reaching into the button). Read-only. */\n    @Input() set dataPanelMode(v: string | undefined) { this.write('data-panel-mode', v); }\n    /** Reflected BY the element when `requireModelSelection` is on and no model is selected: sending is blocked and the shipped stylesheet greys the composer. Read-only. */\n    @Input({ transform: booleanAttribute }) set dataModelGated(v: boolean) { this.write('data-model-gated', v); }\n\n    /** A message was submitted: the text, its attachments and the target. */\n    @Output() readonly send = new EventEmitter<AparteSendEventDetail>();\n    /** The stop button was pressed. No detail; the two window events below carry the target. */\n    @Output() readonly cancel = new EventEmitter<void>();\n    /** Any of value / streaming / disabled / attachments / panel changed, folded into one event. */\n    @Output() readonly composerChange = new EventEmitter<AparteComposerChangeEventDetail>();\n\n    @HostListener('aparte-send', ['$event'])\n    protected onSend(e: CustomEvent<AparteSendEventDetail>): void { this.send.emit(e.detail); }\n\n    @HostListener('aparte-cancel')\n    protected onCancel(): void { this.cancel.emit(); }\n\n    @HostListener('aparte-composer-change', ['$event'])\n    protected onComposerChange(e: CustomEvent<AparteComposerChangeEventDetail>): void { this.composerChange.emit(e.detail); }\n}\n\n/** `<aparte-composer-action>` — Generic action button primitive for <aparte-composer>. */\n@Directive({ selector: 'aparte-composer-action', standalone: true })\nexport class AparteComposerActionDirective extends AparteElementBase {\n    /** Icon key for aparteGlobalConfig.getIcon(), or raw SVG/HTML starting with `<`. A key core's glyph set does not hold renders AS TEXT (`icon=\"star\"` draws the word *star*), so bring your own set through `setIconProvider` or pass the SVG. */\n    @Input() set icon(v: string | undefined) { this.write('icon', v); }\n    /** Accessible label (also used as tooltip) */\n    @Input() set label(v: string | undefined) { this.write('label', v); }\n    /** Disables the button */\n    @Input({ transform: booleanAttribute }) set disabled(v: boolean) { this.write('disabled', v); }\n    /** Identifies WHICH button fired; carried as `AparteActionClickEventDetail.actionId`. Read lazily at dispatch time rather than observed, so changing it takes effect on the next click. */\n    @Input() set actionId(v: string | undefined) { this.write('action-id', v); }\n\n    /** Bubbles up when the button is clicked, carrying which button it was and the composer it belongs to. The type argument is not decoration: a BARE `@fires` records `CustomEvent` with no argument, and the bindings generator then emits `EventEmitter<void>` with a listener that drops `$event` — so an Angular consumer with two custom buttons could not tell which one fired. detail: { actionId: string, composer: AparteComposer | null } */\n    @Output() readonly actionClick = new EventEmitter<AparteActionClickEventDetail>();\n\n    @HostListener('aparte-action-click', ['$event'])\n    protected onActionClick(e: CustomEvent<AparteActionClickEventDetail>): void { this.actionClick.emit(e.detail); }\n}\n\n/** `<aparte-composer-add-attachment>` — File picker button for <aparte-composer>. */\n@Directive({ selector: 'aparte-composer-add-attachment', standalone: true })\nexport class AparteComposerAddAttachmentDirective extends AparteElementBase {\n    /** MIME types / extensions passed to the file input (e.g. \"image/*,.pdf\") */\n    @Input() set accept(v: string | undefined) { this.write('accept', v); }\n    /** Allow multiple file selection (default: true) */\n    @Input({ transform: booleanAttribute }) set multiple(v: boolean) { this.write('multiple', v ? '' : 'false'); }\n    /** Greys out the picker. Drops are gated by the composer root's `disabled`, not by this one. */\n    @Input({ transform: booleanAttribute }) set disabled(v: boolean) { this.write('disabled', v); }\n}\n\n/** `<aparte-composer-attachments>` — Renders a square thumbnail tile for each file attached to the root composer. */\n@Directive({ selector: 'aparte-composer-attachments', standalone: true })\nexport class AparteComposerAttachmentsDirective {\n    /** An attached image was clicked; the app opens it full-size, and only if it declared `attachmentPreview`. */\n    @Output() readonly attachmentPreview = new EventEmitter<AparteAttachmentPreviewEventDetail>();\n\n    @HostListener('aparte-attachment-preview', ['$event'])\n    protected onAttachmentPreview(e: CustomEvent<AparteAttachmentPreviewEventDetail>): void { this.attachmentPreview.emit(e.detail); }\n}\n\n/** `<aparte-composer-cancel>` — Cancel/stop streaming button primitive for <aparte-composer>. */\n/**\n * No member at all: this element observes nothing and dispatches nothing, so the\n * directive exists only to CLAIM THE TAG — which is what spares a consuming component\n * `CUSTOM_ELEMENTS_SCHEMA`, a switch that turns checking off for every unknown tag in\n * the file rather than just this one.\n */\n@Directive({ selector: 'aparte-composer-cancel', standalone: true })\nexport class AparteComposerCancelDirective {\n}\n\n/** `<aparte-composer-input>` — Contenteditable text input primitive. */\n@Directive({ selector: 'aparte-composer-input', standalone: true })\nexport class AparteComposerInputDirective extends AparteElementBase {\n    /** Placeholder text (fallback: reads from aparte-composer) */\n    @Input() set placeholder(v: string | undefined) { this.write('placeholder', v); }\n    /** Max height in px before scroll (default: 200) */\n    @Input({ transform: numberAttribute }) set maxHeight(v: number) { this.write('max-height', v); }\n    /** Min height in px. When omitted, the stylesheet's min-height governs (44px in aparte.css) — so themes can resize the editor in pure CSS without being fought by an inline height. */\n    @Input({ transform: numberAttribute }) set minHeight(v: number) { this.write('min-height', v); }\n    /** Makes the field non-editable; the composer's own `disabled` also reaches it. */\n    @Input({ transform: booleanAttribute }) set disabled(v: boolean) { this.write('disabled', v); }\n\n    /** A submitting Enter was pressed with no `<aparte-composer>` ancestor to submit to; with one it calls `root.submit()` and dispatches nothing. No detail — the host that placed this primitive reads `getValue()`. */\n    @Output() readonly composerSubmit = new EventEmitter<void>();\n\n    @HostListener('aparte-composer-submit')\n    protected onComposerSubmit(): void { this.composerSubmit.emit(); }\n}\n\n/** `<aparte-composer-send>` — Submit button primitive for <aparte-composer>. */\n/**\n * No member at all: this element observes nothing and dispatches nothing, so the\n * directive exists only to CLAIM THE TAG — which is what spares a consuming component\n * `CUSTOM_ELEMENTS_SCHEMA`, a switch that turns checking off for every unknown tag in\n * the file rather than just this one.\n */\n@Directive({ selector: 'aparte-composer-send', standalone: true })\nexport class AparteComposerSendDirective {\n}\n\n/** `<aparte-composer-toolbar>` — The composer's bottom row — the strip a mode picker, a model selector or a token counter belongs in, rather than a bar of your own floating below the chat. Purely structural: it lays its children out in a row and gets out of the way. */\n/**\n * No member at all: this element observes nothing and dispatches nothing, so the\n * directive exists only to CLAIM THE TAG — which is what spares a consuming component\n * `CUSTOM_ELEMENTS_SCHEMA`, a switch that turns checking off for every unknown tag in\n * the file rather than just this one.\n */\n@Directive({ selector: 'aparte-composer-toolbar', standalone: true })\nexport class AparteComposerToolbarDirective {\n}\n\n/** `<aparte-context>` — A gauge of the model's context window: how much of it the conversation uses. */\n@Directive({ selector: 'aparte-context', standalone: true })\nexport class AparteContextDirective extends AparteElementBase {\n    /** The context window, in tokens. Overrides the current model's `contextWindow`. */\n    @Input({ transform: numberAttribute }) set window(v: number) { this.write('window', v); }\n    /** Fraction of the window at which the level turns `warn`. Default `0.75`. */\n    @Input({ transform: numberAttribute }) set warn(v: number) { this.write('warn', v); }\n    /** Fraction at which it turns `danger`. Default `0.9`. */\n    @Input({ transform: numberAttribute }) set danger(v: number) { this.write('danger', v); }\n    /** The id of the `<aparte-chat>` to watch, when the element is not under it. */\n    @Input() set target(v: string | undefined) { this.write('target', v); }\n    /** `bar` (default) or `ring`: a progress bar with the reading beside it, or a ring with the percentage. */\n    @Input() set variant(v: string | undefined) { this.write('variant', v); }\n    /** Dispatch `aparte-compact` on reaching `danger` (once per crossing). */\n    @Input({ transform: booleanAttribute }) set autoCompact(v: boolean) { this.write('auto-compact', v); }\n    /** Reflected BY the element: `ok`, `warn` or `danger`. Read-only. */\n    @Input() set dataLevel(v: string | undefined) { this.write('data-level', v); }\n    /** Reflected BY the element while it has nothing to show. Read-only. */\n    @Input({ transform: booleanAttribute }) set dataEmpty(v: boolean) { this.write('data-empty', v); }\n\n    /** The level changed. Bubbles. */\n    @Output() readonly contextThreshold = new EventEmitter<AparteContextThresholdEventDetail>();\n    /** Dispatched on `window` when `auto-compact` is set and the gauge first reaches `danger`: compact this target's transcript. Once per crossing, and only while the attribute is present. `@aparte/plugin-compaction` answers it; with no listener nothing happens. */\n    @Output() readonly compact = new EventEmitter<AparteCompactEventDetail>();\n\n    @HostListener('aparte-context-threshold', ['$event'])\n    protected onContextThreshold(e: CustomEvent<AparteContextThresholdEventDetail>): void { this.contextThreshold.emit(e.detail); }\n\n    @HostListener('aparte-compact', ['$event'])\n    protected onCompact(e: CustomEvent<AparteCompactEventDetail>): void { this.compact.emit(e.detail); }\n}\n\n/** `<aparte-conversation-list>` — Conversation-history sidebar — a framework-agnostic web component. The host sets the `conversations` JS property and the `active-id` attribute; this renders the rows and fires the user's intent. Acting on it is the host's, unless `manage` hands the row menu's writes to the registered conversation manager. */\n@Directive({ selector: 'aparte-conversation-list', standalone: true })\nexport class AparteConversationListDirective extends AparteElementBase {\n    /** The id of the conversation to render as selected. */\n    @Input() set activeId(v: string | undefined) { this.write('active-id', v); }\n    /** Render the rows flat, in host order, with no date headings. */\n    @Input({ transform: booleanAttribute }) set flat(v: boolean) { this.write('flat', v); }\n    /** The list is on its way: six skeleton rows stand where the rows will be, the element is `aria-busy` and a visually hidden line names the wait. A list that is not there yet is not an empty list. Set it while your store answers, clear it when you assign `conversations`. */\n    @Input({ transform: booleanAttribute }) set loading(v: boolean) { this.write('loading', v); }\n    /** Let the list finish the gesture: rename, pin, unpin, archive, unarchive and delete are performed on the conversation manager registered with `setConversationManager()`, instead of leaving you six listeners to write. The event still fires first, and `preventDefault()` on it takes the gesture back. Off by default, and selecting stays yours either way. */\n    @Input({ transform: booleanAttribute }) set manage(v: boolean) { this.write('manage', v); }\n\n    /** A row's title was activated; the host loads that conversation. */\n    @Output() readonly conversationSelect = new EventEmitter<AparteConversationSelectDetail>();\n    /** A rename was committed with a new, non-empty title. Cancelable: `preventDefault()` takes the gesture back from `manage`. Angular: this Output emits the detail, so preventDefault() is not on it — bind the DOM event for that: (aparte-conversation-rename)=\"$event.preventDefault()\". */\n    @Output() readonly conversationRename = new EventEmitter<AparteConversationRenameDetail>();\n    /** The pin item was chosen on an unpinned row. Cancelable: `preventDefault()` takes the gesture back from `manage`. Angular: this Output emits the detail, so preventDefault() is not on it — bind the DOM event for that: (aparte-conversation-pin)=\"$event.preventDefault()\". */\n    @Output() readonly conversationPin = new EventEmitter<AparteConversationPinDetail>();\n    /** The same item on a pinned row; same detail shape, opposite intent. Cancelable, like the rest. Angular: this Output emits the detail, so preventDefault() is not on it — bind the DOM event for that: (aparte-conversation-unpin)=\"$event.preventDefault()\". */\n    @Output() readonly conversationUnpin = new EventEmitter<AparteConversationPinDetail>();\n    /** The archive item was chosen on a live conversation. Cancelable: `preventDefault()` takes the gesture back from `manage`. Angular: this Output emits the detail, so preventDefault() is not on it — bind the DOM event for that: (aparte-conversation-archive)=\"$event.preventDefault()\". */\n    @Output() readonly conversationArchive = new EventEmitter<AparteConversationArchiveDetail>();\n    /** The same item on an already-archived one; same detail shape, opposite intent. Cancelable, like the rest. Angular: this Output emits the detail, so preventDefault() is not on it — bind the DOM event for that: (aparte-conversation-unarchive)=\"$event.preventDefault()\". */\n    @Output() readonly conversationUnarchive = new EventEmitter<AparteConversationArchiveDetail>();\n    /** The delete was confirmed. Cancelable: `preventDefault()` takes the gesture back from `manage`. Angular: this Output emits the detail, so preventDefault() is not on it — bind the DOM event for that: (aparte-conversation-delete)=\"$event.preventDefault()\". */\n    @Output() readonly conversationDelete = new EventEmitter<AparteConversationDeleteDetail>();\n\n    @HostListener('aparte-conversation-select', ['$event'])\n    protected onConversationSelect(e: CustomEvent<AparteConversationSelectDetail>): void { this.conversationSelect.emit(e.detail); }\n\n    @HostListener('aparte-conversation-rename', ['$event'])\n    protected onConversationRename(e: CustomEvent<AparteConversationRenameDetail>): void { this.conversationRename.emit(e.detail); }\n\n    @HostListener('aparte-conversation-pin', ['$event'])\n    protected onConversationPin(e: CustomEvent<AparteConversationPinDetail>): void { this.conversationPin.emit(e.detail); }\n\n    @HostListener('aparte-conversation-unpin', ['$event'])\n    protected onConversationUnpin(e: CustomEvent<AparteConversationPinDetail>): void { this.conversationUnpin.emit(e.detail); }\n\n    @HostListener('aparte-conversation-archive', ['$event'])\n    protected onConversationArchive(e: CustomEvent<AparteConversationArchiveDetail>): void { this.conversationArchive.emit(e.detail); }\n\n    @HostListener('aparte-conversation-unarchive', ['$event'])\n    protected onConversationUnarchive(e: CustomEvent<AparteConversationArchiveDetail>): void { this.conversationUnarchive.emit(e.detail); }\n\n    @HostListener('aparte-conversation-delete', ['$event'])\n    protected onConversationDelete(e: CustomEvent<AparteConversationDeleteDetail>): void { this.conversationDelete.emit(e.detail); }\n}\n\n/** `<aparte-elicitation>` — The default presenter for a request to the human. It renders nothing itself: it registers as the presenter for the config governing its subtree, and mounts a panel inside the nearest `<aparte-composer>` when something asks — a tool handler calling `requestUserInput`, or core's own approval gate. */\n/**\n * No member at all: this element observes nothing and dispatches nothing, so the\n * directive exists only to CLAIM THE TAG — which is what spares a consuming component\n * `CUSTOM_ELEMENTS_SCHEMA`, a switch that turns checking off for every unknown tag in\n * the file rather than just this one.\n */\n@Directive({ selector: 'aparte-elicitation', standalone: true })\nexport class AparteElicitationDirective {\n}\n\n/** `<aparte-icon>` — AparteIcon */\n@Directive({ selector: 'aparte-icon', standalone: true })\nexport class AparteIconDirective extends AparteElementBase {\n    /** Which glyph to draw. One of the names `setIconProvider` accepts; an unknown name draws nothing rather than a broken-image box. */\n    @Input() set name(v: string | undefined) { this.write('name', v); }\n}\n\n/** `<aparte-optgroup>` — AparteOptgroup */\n@Directive({ selector: 'aparte-optgroup', standalone: true })\nexport class AparteOptgroupDirective extends AparteElementBase {\n    /** Group label */\n    @Input() set label(v: string | undefined) { this.write('label', v); }\n    /** Adds the chevron and the click handler to the header — so it needs a `label`, and it is read only when that header is first built. */\n    @Input({ transform: booleanAttribute }) set collapsible(v: boolean) { this.write('collapsible', v); }\n    /** Collapsed state */\n    @Input({ transform: booleanAttribute }) set collapsed(v: boolean) { this.write('collapsed', v); }\n    /** Appends a spinner row to the group; the options stay visible. */\n    @Input({ transform: booleanAttribute }) set loading(v: boolean) { this.write('loading', v); }\n\n    /** The group was collapsed or expanded. */\n    @Output() readonly optgroupToggle = new EventEmitter<AparteOptgroupToggleEventDetail>();\n\n    @HostListener('aparte-optgroup-toggle', ['$event'])\n    protected onOptgroupToggle(e: CustomEvent<AparteOptgroupToggleEventDetail>): void { this.optgroupToggle.emit(e.detail); }\n}\n\n/** `<aparte-option>` — AparteOption */\n@Directive({ selector: 'aparte-option', standalone: true })\nexport class AparteOptionDirective extends AparteElementBase {\n    /** Option value */\n    @Input() set value(v: string | undefined) { this.write('value', v); }\n    /** Disabled state */\n    @Input({ transform: booleanAttribute }) set disabled(v: boolean) { this.write('disabled', v); }\n    /** Selected state */\n    @Input({ transform: booleanAttribute }) set selected(v: boolean) { this.write('selected', v); }\n    /** Free-form status the host sets; styled, never read by core. */\n    @Input() set dataStatus(v: string | undefined) { this.write('data-status', v); }\n}\n\n/** `<aparte-progress-spinner>` — AparteProgressSpinner */\n@Directive({ selector: 'aparte-progress-spinner', standalone: true })\nexport class AparteProgressSpinnerDirective extends AparteElementBase {\n    /** Progress percentage 0–100 (omit for indeterminate) */\n    @Input({ transform: numberAttribute }) set value(v: number) { this.write('value', v); }\n}\n\n/** `<aparte-scroll-rail>` — A rail of ticks beside the transcript — one per turn — that shows where you are in a long conversation and jumps back to any message on a click. */\n@Directive({ selector: 'aparte-scroll-rail', standalone: true })\nexport class AparteScrollRailDirective extends AparteElementBase {\n    /** The id of the `<aparte-chat>` to follow, when the element is not inside it. */\n    @Input() set target(v: string | undefined) { this.write('target', v); }\n    /** `user` (default): one tick per user turn. `message`: one per message. */\n    @Input() set every(v: string | undefined) { this.write('every', v); }\n    /** Reflected BY the element while it has fewer than two ticks. Read-only. */\n    @Input({ transform: booleanAttribute }) set dataEmpty(v: boolean) { this.write('data-empty', v); }\n\n    /** A tick was activated. Bubbles, cancelable: `preventDefault()` leaves the transcript where it is. Angular: this Output emits the detail, so preventDefault() is not on it — bind the DOM event for that: (aparte-scroll-rail-jump)=\"$event.preventDefault()\". */\n    @Output() readonly scrollRailJump = new EventEmitter<AparteScrollRailJumpDetail>();\n\n    @HostListener('aparte-scroll-rail-jump', ['$event'])\n    protected onScrollRailJump(e: CustomEvent<AparteScrollRailJumpDetail>): void { this.scrollRailJump.emit(e.detail); }\n}\n\n/** `<aparte-select>` — Dropdown select for aparté — a vanilla web component with optional grouping, a search filter and a keyboard-driven listbox. */\n@Directive({ selector: 'aparte-select', standalone: true })\nexport class AparteSelectDirective extends AparteElementBase {\n    /** The selected option's value. */\n    @Input() set value(v: string | undefined) { this.write('value', v); }\n    /** Shown while nothing is selected. */\n    @Input() set placeholder(v: string | undefined) { this.write('placeholder', v); }\n    /** Blocks opening the dropdown. */\n    @Input({ transform: booleanAttribute }) set disabled(v: boolean) { this.write('disabled', v); }\n    /** Adds a filter field above the options. Read on the first render only. */\n    @Input({ transform: booleanAttribute }) set searchable(v: boolean) { this.write('searchable', v); }\n    /** Reflects (and controls) whether the dropdown is open. */\n    @Input({ transform: booleanAttribute }) set open(v: boolean) { this.write('open', v); }\n\n    /** The dropdown opened. No detail. */\n    @Output() readonly selectOpen = new EventEmitter<void>();\n    /** The dropdown closed. No detail. */\n    @Output() readonly selectClose = new EventEmitter<void>();\n    /** The selection changed; carries the new value, its label and the previous value. */\n    @Output() readonly selectChange = new EventEmitter<AparteSelectChangeDetail>();\n\n    @HostListener('aparte-select-open')\n    protected onSelectOpen(): void { this.selectOpen.emit(); }\n\n    @HostListener('aparte-select-close')\n    protected onSelectClose(): void { this.selectClose.emit(); }\n\n    @HostListener('aparte-select-change', ['$event'])\n    protected onSelectChange(e: CustomEvent<AparteSelectChangeDetail>): void { this.selectChange.emit(e.detail); }\n}\n\n/** `<aparte-sidebar>` — The column beside the chat — conversations, a new-chat button, a search field, an account row — as an element, because it has behaviour: it collapses, it becomes a drawer on a narrow window, and its search field filters the conversation list. */\n@Directive({ selector: 'aparte-sidebar', standalone: true })\nexport class AparteSidebarDirective extends AparteElementBase {\n    /** Hidden (in the flow) or closed (as a drawer). Reflected; set it to start closed. */\n    @Input({ transform: booleanAttribute }) set collapsed(v: boolean) { this.write('collapsed', v); }\n    /** The window width under which the sidebar becomes a drawer: a length (default `48rem`), or `none` for a column that never does. */\n    @Input() set breakpoint(v: string | undefined) { this.write('breakpoint', v); }\n    /** Reflected BY the element while the window is narrower than `breakpoint` (48rem unless you set it). Read-only. */\n    @Input({ transform: booleanAttribute }) set dataDrawer(v: boolean) { this.write('data-drawer', v); }\n\n    /** The sidebar opened or closed, by a toggle, by Escape, by a click on the scrim or by `collapsed` being set. Bubbles. */\n    @Output() readonly sidebarToggle = new EventEmitter<AparteSidebarToggleDetail>();\n\n    @HostListener('aparte-sidebar-toggle', ['$event'])\n    protected onSidebarToggle(e: CustomEvent<AparteSidebarToggleDetail>): void { this.sidebarToggle.emit(e.detail); }\n}\n\n/** `<aparte-split>` — Two panes and a draggable seam — a chat beside a preview, an editor, an artifact card. */\n@Directive({ selector: 'aparte-split', standalone: true })\nexport class AparteSplitDirective extends AparteElementBase {\n    /** The primary pane's size, as a percentage of the container. Reflected on commit, never per drag frame. */\n    @Input({ transform: numberAttribute }) set position(v: number) { this.write('position', v); }\n    /** `horizontal` (panes side by side, the default) or `vertical` (stacked). Names the CONTAINER's axis. */\n    @Input() set orientation(v: string | undefined) { this.write('orientation', v); }\n    /** `start` (default) or `end`: which pane `position` sizes. */\n    @Input() set primary(v: string | undefined) { this.write('primary', v); }\n    /** The primary pane folded to its minimum. Enter on the seam toggles it; a second Enter restores the size it had. */\n    @Input({ transform: booleanAttribute }) set collapsed(v: boolean) { this.write('collapsed', v); }\n    /** Below this width the split shows one pane at a time. A length (default `48rem`), or `none` to never stack. */\n    @Input() set breakpoint(v: string | undefined) { this.write('breakpoint', v); }\n    /** `start` (default) or `end`: which pane is shown while stacked. */\n    @Input() set pane(v: string | undefined) { this.write('pane', v); }\n    /** No drag, no keys, no tab stop; the seam stays drawn. */\n    @Input({ transform: booleanAttribute }) set disabled(v: boolean) { this.write('disabled', v); }\n    /** The seam's accessible name. Defaults to the locale's `splitHandleLabel`. */\n    @Input() set label(v: string | undefined) { this.write('label', v); }\n    /** Show one pane — the one `pane` names — whatever the width: the seam and the other pane are gone, as under the breakpoint. For a host that decides itself when a second pane exists (a preview with nothing to preview yet). `collapsed` is not this: it folds the primary pane to `--aparte-split-min` and keeps the seam. The CSS route, `.aparte-split--only-start` / `--only-end`, is the same state for a host that owns its breakpoints. */\n    @Input({ transform: booleanAttribute }) set single(v: boolean) { this.write('single', v); }\n    /** Written BY the element while one pane is shown. Read-only; style against it. */\n    @Input({ transform: booleanAttribute }) set dataStacked(v: boolean) { this.write('data-stacked', v); }\n\n    /** The position settled: after a drag, a key, a double-click or a property set. Never during a drag — persist from here. */\n    @Output() readonly splitResize = new EventEmitter<AparteSplitResizeDetail>();\n\n    @HostListener('aparte-split-resize', ['$event'])\n    protected onSplitResize(e: CustomEvent<AparteSplitResizeDetail>): void { this.splitResize.emit(e.detail); }\n}\n\n/** `<aparte-suggestions>` — Prompt starters — a row of suggested prompts a reader clicks instead of typing. */\n@Directive({ selector: 'aparte-suggestions', standalone: true })\nexport class AparteSuggestionsDirective extends AparteElementBase {\n    /** The starters, as a JSON array: strings, or `{ \"label\", \"prompt\" }` objects when the visible label and the sent text differ. The `suggestions` PROPERTY takes the same shape without the JSON. */\n    @Input() set suggestions(v: string | undefined) { this.write('suggestions', v); }\n    /** The id of the `<aparte-chat>` whose composer should receive the click, when the element is not inside that composer. */\n    @Input() set target(v: string | undefined) { this.write('target', v); }\n    /** `send` (default): the click fills the composer and submits. `fill`: the click fills the composer and focuses it, so the reader edits first. */\n    @Input() set mode(v: string | undefined) { this.write('mode', v); }\n    /** Hides the row (`hidden`) once its composer has sent something. Remove the attribute, or `hidden`, to show it again. */\n    @Input({ transform: booleanAttribute }) set emptyOnly(v: boolean) { this.write('empty-only', v); }\n    /** Reflected BY the element while it has no suggestion to show; the stylesheet hides it then. Read-only, do not set it yourself. */\n    @Input({ transform: booleanAttribute }) set dataEmpty(v: boolean) { this.write('data-empty', v); }\n\n    /** A starter was clicked. Bubbles, and is cancelable: `preventDefault()` stops the composer from being filled or submitted. Angular: this Output emits the detail, so preventDefault() is not on it — bind the DOM event for that: (aparte-suggestion)=\"$event.preventDefault()\". */\n    @Output() readonly suggestion = new EventEmitter<AparteSuggestionEventDetail>();\n\n    @HostListener('aparte-suggestion', ['$event'])\n    protected onSuggestion(e: CustomEvent<AparteSuggestionEventDetail>): void { this.suggestion.emit(e.detail); }\n}\n\n/**\n * Every element directive, for one import in a standalone component.\n *\n * ```ts\n * @Component({ imports: [...APARTE_ELEMENT_DIRECTIVES], template: `…` })\n * ```\n */\nexport const APARTE_ELEMENT_DIRECTIVES = [\n    AparteChatBubbleDirective,\n    AparteChatStatusDirective,\n    AparteChatViewportDirective,\n    AparteComposerDirective,\n    AparteComposerActionDirective,\n    AparteComposerAddAttachmentDirective,\n    AparteComposerAttachmentsDirective,\n    AparteComposerCancelDirective,\n    AparteComposerInputDirective,\n    AparteComposerSendDirective,\n    AparteComposerToolbarDirective,\n    AparteContextDirective,\n    AparteConversationListDirective,\n    AparteElicitationDirective,\n    AparteIconDirective,\n    AparteOptgroupDirective,\n    AparteOptionDirective,\n    AparteProgressSpinnerDirective,\n    AparteScrollRailDirective,\n    AparteSelectDirective,\n    AparteSidebarDirective,\n    AparteSplitDirective,\n    AparteSuggestionsDirective,\n] as const;\n","import { Injectable, OnDestroy, computed, signal } from '@angular/core';\nimport { aparteGlobalConfig, AparteConversationManager, type AparteConfig, type AparteConversation, type AparteStorageAdapter } from '@aparte/core';\nimport type { AparteMessage } from '@aparte/core';\n\n/**\n * Angular 19 Signal-based wrapper around AparteConversationManager.\n *\n * Register a storage adapter before calling init():\n * ```ts\n * // app.config.ts\n * export const appConfig: ApplicationConfig = {\n *   providers: [\n *     {\n *       provide: CONVERSATION_ADAPTER,\n *       useValue: new IndexedDBAdapter('my-app-convs'),\n *     },\n *   ],\n * };\n * ```\n *\n * Then inject ConversationManagerService in any component or service.\n */\n@Injectable({ providedIn: 'root' })\nexport class ConversationManagerService implements OnDestroy {\n    private _manager: AparteConversationManager | null = null;\n    private _unsubscribe: (() => void) | null = null;\n\n    // ─── Signals ─────────────────────────────────────────────────────────────\n\n    /** All conversations (active + archived). */\n    readonly conversations = signal<AparteConversation[]>([]);\n\n    /** Active conversations only, newest first. */\n    readonly activeConversations = computed(() =>\n        this.conversations()\n            .filter(c => !c.archivedAt)\n            .sort((a, b) => b.updatedAt - a.updatedAt)\n    );\n\n    /** Archived conversations, newest first. */\n    readonly archivedConversations = computed(() =>\n        this.conversations()\n            .filter(c => !!c.archivedAt)\n            .sort((a, b) => b.updatedAt - a.updatedAt)\n    );\n\n    /** Currently active conversation id. */\n    readonly activeId = signal<string | null>(null);\n\n    /** The active conversation object (null when no conv is selected). */\n    readonly activeConversation = computed(() => {\n        const id = this.activeId();\n        if (!id) return null;\n        return this.conversations().find(c => c.id === id) ?? null;\n    });\n\n    // ─── Lifecycle ───────────────────────────────────────────────────────────\n\n    /**\n     * Initialise the service with a storage adapter.\n     * Call once in your root component or app initialiser.\n     */\n    async init(adapter: AparteStorageAdapter, config: AparteConfig = aparteGlobalConfig): Promise<void> {\n        this._manager = new AparteConversationManager(adapter);\n        this._unsubscribe = this._manager.subscribe(convs => {\n            this.conversations.set([...convs]);\n            this.activeId.set(this._manager!.activeId);\n        });\n        await this._manager.init();\n        // Sync activeId after load (manager may have no active conv yet)\n        this.activeId.set(this._manager.activeId);\n        // Registered on the config the chat will resolve, so\n        // AparteConversationController finds it without explicit DI plumbing.\n        //\n        // `config` defaults to the global singleton. Pass the SAME config you gave\n        // `[config]` on `<aparte-chat>`: the controller resolves the config\n        // governing its host element, so a manager on the global is invisible to a\n        // chat with its own — persistence silently does nothing while the\n        // optimistic UI keeps working.\n        config.setConversationManager(this._manager);\n    }\n\n    ngOnDestroy(): void {\n        this._unsubscribe?.();\n    }\n\n    // ─── Actions ─────────────────────────────────────────────────────────────\n\n    /** Create a new empty conversation, make it active, return it. */\n    async createNew(title?: string): Promise<AparteConversation> {\n        this._assertInit();\n        return this._manager!.createNew(title);\n    }\n\n    // Note: there is no `select()` / `clearActive()` here on purpose.\n    // The active conversation is owned exclusively by AparteConversationController\n    // (inside <aparte-chat>). To switch conversations, either bind\n    // `[conversationId]` on <aparte-chat> or dispatch a window event:\n    //   window.dispatchEvent(new CustomEvent('aparte-conversation-select', {\n    //     detail: { id, targetId? },\n    //   }));\n    // The `activeId` signal here is read-only and stays in sync via subscribe().\n\n    /** Append a message to a conversation and persist. */\n    async addMessage(convId: string, msg: AparteMessage): Promise<void> {\n        this._assertInit();\n        return this._manager!.addMessage(convId, msg);\n    }\n\n    /**\n     * Replace all messages for a conversation.\n     * Call after branch navigation or AI response completion.\n     */\n    async updateMessages(convId: string, messages: AparteMessage[]): Promise<void> {\n        this._assertInit();\n        return this._manager!.updateMessages(convId, messages);\n    }\n\n    /** Permanently delete a conversation. */\n    async delete(id: string): Promise<void> {\n        this._assertInit();\n        return this._manager!.delete(id);\n    }\n\n    /** Archive a conversation. */\n    async archive(id: string): Promise<void> {\n        this._assertInit();\n        return this._manager!.archive(id);\n    }\n\n    /** Restore an archived conversation. */\n    async unarchive(id: string): Promise<void> {\n        this._assertInit();\n        return this._manager!.unarchive(id);\n    }\n\n    /** Pin a conversation to the top of the list. */\n    async pin(id: string): Promise<void> {\n        this._assertInit();\n        return this._manager!.pin(id);\n    }\n\n    /** Unpin a conversation. */\n    async unpin(id: string): Promise<void> {\n        this._assertInit();\n        return this._manager!.unpin(id);\n    }\n\n    /** Rename a conversation. */\n    async updateTitle(id: string, title: string): Promise<void> {\n        this._assertInit();\n        return this._manager!.updateTitle(id, title);\n    }\n\n    // ─── Private ─────────────────────────────────────────────────────────────\n\n    private _assertInit(): void {\n        if (!this._manager) {\n            throw new Error(\n                '[ConversationManagerService] Not initialised. Call init(adapter) before using the service.'\n            );\n        }\n    }\n}\n","/**\n * aparté Angular wrapper\n * Angular 19 standalone components + services over the framework-agnostic web components.\n */\n\n// Configuration (a standalone provider function — no NgModule).\nexport { provideAparte, APARTE_CONFIG_TOKEN } from './lib/provide-aparte';\nexport type { ProvideAparteOptions, ApartePluginLoader } from './lib/provide-aparte';\n\n// Components (standalone — import them directly).\nexport { AparteChatComponent } from './lib/aparte-chat.component';\nexport { AparteUiComponent } from './lib/aparte-ui.component';\nexport type { AparteUiHandle, AparteUiProps } from './lib/aparte-ui.component';\n\n// Typed directives, one per element: the real tag in the template with typed Inputs and\n// one Output per event. GENERATED from core's custom-elements manifest at build time —\n// hand-written, they were a parallel structure that nothing watched, so an attribute\n// added to an element would be typed in the other three wrappers and silently missing\n// here. `<aparte-ui>` stays for an element aparté does not define.\n// A star, not a list: the list was hand-written under a comment explaining why the\n// generator exists, and it omitted three of the twenty generated directives\n// (`AparteContextDirective`, `AparteIconDirective`, `AparteSuggestionsDirective`) — the\n// parallel structure nothing watched, again. The module exports only the directives\n// and `APARTE_ELEMENT_DIRECTIVES`; its base class is deliberately unexported there.\nexport * from './generated/element.directives';\n\n// Annex: client lifecycle + reactive conversation manager.\nexport { AparteAiService, APARTE_CLIENT_OPTIONS } from './lib/aparte-ai.service';\nexport { ConversationManagerService } from './lib/conversation-manager.service';\n\n// Public types — re-exported from `@aparte/core`, the single source of truth\n// (the component used to re-declare `AparteMessage`/`AparteSendEventDetail` locally).\nexport type {\n    AparteMessage,\n    AparteSendEventDetail,\n    AparteActionEventDetail,\n    AparteSegment,\n    AparteTextSegment,\n    AparteCodeSegment,\n    AparteThinkingSegment,\n    // The imperative surface every wrapper exposes. Angular alone used to omit it,\n    // while React and the other two each aliased it under a name of their own.\n    AparteChatImperativeApi,\n} from '@aparte/core';\n\n// Re-export aparteGlobalConfig for direct access (config without `provideAparte`).\nexport { aparteGlobalConfig } from '@aparte/core';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}