@nonoun/native-chat 0.5.16 → 0.5.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +4 -0
  2. package/dist/adapter-mock-0s0RPkdx.js +795 -0
  3. package/dist/avatar/chat-avatar-element.d.ts +18 -0
  4. package/dist/avatar/chat-avatar-element.d.ts.map +1 -0
  5. package/dist/avatar/index.d.ts +2 -0
  6. package/dist/avatar/index.d.ts.map +1 -0
  7. package/dist/avatar/n-chat-avatar.d.ts +2 -0
  8. package/dist/avatar/n-chat-avatar.d.ts.map +1 -0
  9. package/dist/chat-input-element.d.ts +31 -0
  10. package/dist/chat-input-element.d.ts.map +1 -0
  11. package/dist/{chat-input-structured-element-C_5MDbpb.js → chat-input-structured-element-A3nMG2WR.js} +353 -204
  12. package/dist/chat-panel-element.d.ts +94 -0
  13. package/dist/chat-panel-element.d.ts.map +1 -0
  14. package/dist/feed/chat-feed-element.d.ts +48 -0
  15. package/dist/feed/chat-feed-element.d.ts.map +1 -0
  16. package/dist/feed/index.d.ts +2 -0
  17. package/dist/feed/index.d.ts.map +1 -0
  18. package/dist/feed/n-chat-feed.d.ts +2 -0
  19. package/dist/feed/n-chat-feed.d.ts.map +1 -0
  20. package/dist/gateway/adapter-chatgpt.d.ts +68 -0
  21. package/dist/gateway/adapter-chatgpt.d.ts.map +1 -0
  22. package/dist/gateway/adapter-claude.d.ts +69 -0
  23. package/dist/gateway/adapter-claude.d.ts.map +1 -0
  24. package/dist/gateway/adapter-mock.d.ts +3 -0
  25. package/dist/gateway/adapter-mock.d.ts.map +1 -0
  26. package/dist/gateway/adapter.d.ts +71 -0
  27. package/dist/gateway/adapter.d.ts.map +1 -0
  28. package/dist/gateway/controller.d.ts +50 -0
  29. package/dist/gateway/controller.d.ts.map +1 -0
  30. package/dist/gateway/index.d.ts +9 -0
  31. package/dist/gateway/index.d.ts.map +1 -0
  32. package/dist/gateway/runtime.d.ts +43 -0
  33. package/dist/gateway/runtime.d.ts.map +1 -0
  34. package/dist/gateway/types.d.ts +73 -0
  35. package/dist/gateway/types.d.ts.map +1 -0
  36. package/dist/gateway.d.ts +2 -0
  37. package/dist/gateway.d.ts.map +1 -0
  38. package/dist/gateway.js +35 -0
  39. package/dist/index.d.ts +18 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/message/chat-input-structured-element.d.ts +43 -0
  42. package/dist/message/chat-input-structured-element.d.ts.map +1 -0
  43. package/dist/message/chat-message-activity-element.d.ts +32 -0
  44. package/dist/message/chat-message-activity-element.d.ts.map +1 -0
  45. package/dist/message/chat-message-element.d.ts +44 -0
  46. package/dist/message/chat-message-element.d.ts.map +1 -0
  47. package/dist/message/chat-message-genui-element.d.ts +45 -0
  48. package/dist/message/chat-message-genui-element.d.ts.map +1 -0
  49. package/dist/message/chat-message-seed-element.d.ts +33 -0
  50. package/dist/message/chat-message-seed-element.d.ts.map +1 -0
  51. package/dist/message/chat-message-text-element.d.ts +37 -0
  52. package/dist/message/chat-message-text-element.d.ts.map +1 -0
  53. package/dist/message/chat-messages-element.d.ts +39 -0
  54. package/dist/message/chat-messages-element.d.ts.map +1 -0
  55. package/dist/message/index.d.ts +8 -0
  56. package/dist/message/index.d.ts.map +1 -0
  57. package/dist/message/n-chat-message.d.ts +2 -0
  58. package/dist/message/n-chat-message.d.ts.map +1 -0
  59. package/dist/native-chat.css +51 -29
  60. package/dist/native-chat.js +1 -1
  61. package/dist/register.d.ts +13 -0
  62. package/dist/register.d.ts.map +1 -0
  63. package/dist/register.js +3 -3
  64. package/dist/stream/classify.d.ts +19 -0
  65. package/dist/stream/classify.d.ts.map +1 -0
  66. package/dist/stream/create-transport.d.ts +19 -0
  67. package/dist/stream/create-transport.d.ts.map +1 -0
  68. package/dist/stream/index.d.ts +9 -0
  69. package/dist/stream/index.d.ts.map +1 -0
  70. package/dist/stream/parse-json.d.ts +9 -0
  71. package/dist/stream/parse-json.d.ts.map +1 -0
  72. package/dist/stream/parse-ndjson.d.ts +9 -0
  73. package/dist/stream/parse-ndjson.d.ts.map +1 -0
  74. package/dist/stream/parse-sse.d.ts +9 -0
  75. package/dist/stream/parse-sse.d.ts.map +1 -0
  76. package/dist/stream/types.d.ts +42 -0
  77. package/dist/stream/types.d.ts.map +1 -0
  78. package/dist/telemetry/emitter.d.ts +20 -0
  79. package/dist/telemetry/emitter.d.ts.map +1 -0
  80. package/dist/telemetry/events.d.ts +11 -0
  81. package/dist/telemetry/events.d.ts.map +1 -0
  82. package/dist/telemetry/index.d.ts +5 -0
  83. package/dist/telemetry/index.d.ts.map +1 -0
  84. package/dist/telemetry/redactor.d.ts +17 -0
  85. package/dist/telemetry/redactor.d.ts.map +1 -0
  86. package/dist/telemetry/types.d.ts +27 -0
  87. package/dist/telemetry/types.d.ts.map +1 -0
  88. package/package.json +5 -1
@@ -0,0 +1,35 @@
1
+ import { a as e, c as t, d as n, f as r, i, l as a, n as o, o as s, r as c, s as l, t as u, u as d } from "./adapter-mock-0s0RPkdx.js";
2
+ function f(e) {
3
+ return typeof e == "object" && !!e && "kind" in e && "message" in e;
4
+ }
5
+ var p = class {
6
+ adapter;
7
+ capabilities;
8
+ constructor(e, t) {
9
+ this.adapter = e, this.capabilities = t;
10
+ }
11
+ bootstrapSession(e) {
12
+ return this.adapter.bootstrapSession(e);
13
+ }
14
+ sendMessage(e) {
15
+ return this.adapter.sendMessage(e);
16
+ }
17
+ sendMessageStream(e) {
18
+ return this.adapter.sendMessageStream(e);
19
+ }
20
+ checkHealth(e) {
21
+ return this.adapter.checkHealth(e);
22
+ }
23
+ getClientMetadata(e) {
24
+ return this.adapter.getClientMetadata(e);
25
+ }
26
+ listModels(e) {
27
+ return this.adapter.listModels ? this.adapter.listModels(e) : Promise.resolve([]);
28
+ }
29
+ getCapabilities() {
30
+ return this.capabilities;
31
+ }
32
+ };
33
+ /** @deprecated Use `LLMGatewayController` instead. */
34
+ const m = p;
35
+ export { m as ChatGatewayController, o as ClaudeGatewayAdapter, p as GatewayController, p as LLMGatewayController, t as GatewayRequestError, e as OpenAiGatewayAdapter, a as classifyByStatus, c as createClaudeGatewayAdapter, u as createMockGatewayAdapter, s as createOpenAiGatewayAdapter, d as createRequestId, n as fetchWithRetry, f as isGatewayErrorLike, r as parseJsonResponse, i as validateClaudeGatewayConfig, l as validateOpenAiGatewayConfig };
@@ -0,0 +1,18 @@
1
+ import './register.ts';
2
+ export { NChatInput } from './chat-input-element.ts';
3
+ export { NChatPanel } from './chat-panel-element.ts';
4
+ export type { AutoFocusPolicy, ChatPanelOpenOptions, FocusComposerOptions, ModelOption } from './chat-panel-element.ts';
5
+ export { NChatFeed } from './feed/index.ts';
6
+ export { NChatAvatar } from './avatar/index.ts';
7
+ export { NChatMessage, NChatMessages, NChatMessageText, NChatMessageActivity, NChatMessageSeed, NChatMessageGenUI, NChatInputStructured, } from './message/index.ts';
8
+ export type { ChatMessageActionDef } from './message/chat-message-element.ts';
9
+ export { ACTION_REGISTRY, ROLE_DEFAULTS } from './message/chat-message-element.ts';
10
+ export type { SeedOption } from './message/chat-message-seed-element.ts';
11
+ export type { StructuredOption } from './message/chat-input-structured-element.ts';
12
+ export type { GenUINode } from './message/chat-message-genui-element.ts';
13
+ export { renderMarkdown, renderInline, sanitizeHtml } from './message/chat-message-text-element.ts';
14
+ export type { ChatStreamChunk, StreamFormat, ChatTransportOptions, ChatStreamEvent, ChatTransport, TransportState, TransportStatus, TransportStateCallback, RetryOptions, StreamEndReason, } from './stream/index.ts';
15
+ export { parseSSE, parseNDJSON, parseJSON, detectFormat, createChatStream, createChatTransport, classifyStreamEnd, classifyHttpError, backoffDelay, } from './stream/index.ts';
16
+ export type { TelemetryCorrelation, TelemetryTiming, TelemetryRetry, TelemetryLevel, TelemetryEvent, TelemetryRedactor, } from './telemetry/index.ts';
17
+ export { CHAT_EVENTS, SAFE_FIELDS, SENSITIVE_FIELDS, scrubPII, createDefaultRedactor, TelemetryEmitter, } from './telemetry/index.ts';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAGvB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGxH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGnF,YAAY,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AACnF,YAAY,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAGpG,YAAY,EACV,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { NativeElement } from '@nonoun/native-ui';
2
+ export interface StructuredOption {
3
+ value: string;
4
+ label: string;
5
+ description?: string;
6
+ icon?: string;
7
+ }
8
+ /**
9
+ * Structured multi-choice input — appears before submission for
10
+ * guided input (like modern Claude chat's multiple-choice UI).
11
+ *
12
+ * ```html
13
+ * <n-chat-input-structured
14
+ * question="What would you like to do?"
15
+ * type="single"
16
+ * options='[{"value":"a","label":"Option A"},{"value":"b","label":"Option B"}]'>
17
+ * </n-chat-input-structured>
18
+ * ```
19
+ *
20
+ * @attr {string} question - Prompt text
21
+ * @attr {string} type - `single` (default) | `multi`
22
+ * @attr {string} options - JSON array of `{ value, label, description?, icon? }`
23
+ * @attr {boolean} required - At least one selection required before submit
24
+ * @attr {boolean} disabled - Disables interaction
25
+ * @fires native:structured-submit - Fired on submit with selections
26
+ * @fires native:structured-cancel - Fired when dismissed without selecting
27
+ */
28
+ export declare class NChatInputStructured extends NativeElement {
29
+ #private;
30
+ static observedAttributes: string[];
31
+ constructor();
32
+ get question(): string;
33
+ set question(val: string);
34
+ get options(): StructuredOption[];
35
+ set options(val: StructuredOption[]);
36
+ get selections(): StructuredOption[];
37
+ get disabled(): boolean;
38
+ set disabled(val: boolean);
39
+ attributeChangedCallback(name: string, old: string | null, val: string | null): void;
40
+ setup(): void;
41
+ teardown(): void;
42
+ }
43
+ //# sourceMappingURL=chat-input-structured-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-input-structured-element.d.ts","sourceRoot":"","sources":["../../src/message/chat-input-structured-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgC,MAAM,mBAAmB,CAAC;AAEhF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,oBAAqB,SAAQ,aAAa;;IACrD,MAAM,CAAC,kBAAkB,WAA2D;;IAiBpF,IAAI,QAAQ,IAAI,MAAM,CAAiC;IACvD,IAAI,QAAQ,CAAC,GAAG,EAAE,MAAM,EAGvB;IAED,IAAI,OAAO,IAAI,gBAAgB,EAAE,CAAgC;IACjE,IAAI,OAAO,CAAC,GAAG,EAAE,gBAAgB,EAAE,EAGlC;IAED,IAAI,UAAU,IAAI,gBAAgB,EAAE,CAGnC;IAED,IAAI,QAAQ,IAAI,OAAO,CAAiC;IACxD,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,EAGxB;IAID,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAiBpF,KAAK,IAAI,IAAI;IAYb,QAAQ,IAAI,IAAI;CA2HjB"}
@@ -0,0 +1,32 @@
1
+ import { NativeElement } from '@nonoun/native-ui';
2
+ /**
3
+ * Streaming activity indicator — typing, thinking, or tool-use status.
4
+ *
5
+ * When `active`, shows an animated indicator with elapsed time.
6
+ * When `expandable`, clicking toggles visibility of slotted trace content.
7
+ *
8
+ * ```html
9
+ * <n-chat-message-activity type="thinking" active>
10
+ * <pre>Reasoning trace here...</pre>
11
+ * </n-chat-message-activity>
12
+ * ```
13
+ *
14
+ * @attr {string} type - `typing` | `thinking` | `tool-use`
15
+ * @attr {string} label - Custom label text (overrides default per-type label)
16
+ * @attr {boolean} active - Currently streaming / in progress
17
+ * @attr {boolean} expandable - Allow click to expand trace content
18
+ * @fires native:activity-toggle - Fired when trace is expanded/collapsed
19
+ */
20
+ export declare class NChatMessageActivity extends NativeElement {
21
+ #private;
22
+ static observedAttributes: string[];
23
+ constructor();
24
+ get active(): boolean;
25
+ set active(val: boolean);
26
+ get expanded(): boolean;
27
+ set expanded(val: boolean);
28
+ attributeChangedCallback(name: string, old: string | null, val: string | null): void;
29
+ setup(): void;
30
+ teardown(): void;
31
+ }
32
+ //# sourceMappingURL=chat-message-activity-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message-activity-element.d.ts","sourceRoot":"","sources":["../../src/message/chat-message-activity-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAU,MAAM,mBAAmB,CAAC;AAE1D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,oBAAqB,SAAQ,aAAa;;IACrD,MAAM,CAAC,kBAAkB,WAA6C;;IAsBtE,IAAI,MAAM,IAAI,OAAO,CAA+B;IACpD,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,EAGtB;IAED,IAAI,QAAQ,IAAI,OAAO,CAAiC;IACxD,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,EAGxB;IAID,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAapF,KAAK,IAAI,IAAI;IAyCb,QAAQ,IAAI,IAAI;CAmFjB"}
@@ -0,0 +1,44 @@
1
+ import { NativeElement } from '@nonoun/native-ui';
2
+ export interface ChatMessageActionDef {
3
+ label: string;
4
+ icon: string;
5
+ }
6
+ export declare const ACTION_REGISTRY: Record<string, ChatMessageActionDef>;
7
+ export declare const ROLE_DEFAULTS: Record<string, string[]>;
8
+ /**
9
+ * Individual chat message bubble.
10
+ *
11
+ * Accepts slotted content: `n-chat-message-text`, `n-chat-message-genui`,
12
+ * `n-chat-message-seed`, or any custom content.
13
+ *
14
+ * @attr {string} role - `user` | `assistant` | `system`
15
+ * @attr {string} message-id - Unique message identifier
16
+ * @attr {string} timestamp - Epoch milliseconds
17
+ * @attr {string} status - `sending` | `sent` | `error` | `streaming` | `partial`
18
+ * @attr {string} actions - Comma-separated action list, or `"none"` to suppress
19
+ * @attr {string} actions-style - `"icon"` (default) | `"label"` | `"icon-label"`
20
+ * @attr {string} actions-position - `"below"` (default) | `"inside"` — toolbar placement
21
+ * @fires native:message-action - Fired when an action button is clicked
22
+ * @fires native:continue-request - Fired when continue is requested for a partial message
23
+ */
24
+ export declare class NChatMessage extends NativeElement {
25
+ #private;
26
+ static observedAttributes: string[];
27
+ constructor();
28
+ get role(): string;
29
+ set role(val: string);
30
+ get messageId(): string;
31
+ get timestamp(): number;
32
+ get status(): string;
33
+ set status(val: string);
34
+ get actions(): string | null;
35
+ set actions(val: string | null);
36
+ get actionsStyle(): string;
37
+ set actionsStyle(val: string);
38
+ get actionsPosition(): string;
39
+ set actionsPosition(val: string);
40
+ attributeChangedCallback(name: string, old: string | null, val: string | null): void;
41
+ setup(): void;
42
+ teardown(): void;
43
+ }
44
+ //# sourceMappingURL=chat-message-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message-element.d.ts","sourceRoot":"","sources":["../../src/message/chat-message-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAe,MAAM,mBAAmB,CAAC;AAI/D,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAOhE,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAGlD,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,YAAa,SAAQ,aAAa;;IAC7C,MAAM,CAAC,kBAAkB,WAAiG;;IAoB1H,IAAI,IAAI,IAAI,MAAM,CAA6B;IAC/C,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,EAGnB;IAED,IAAI,SAAS,IAAI,MAAM,CAAkD;IAEzE,IAAI,SAAS,IAAI,MAAM,CAAwD;IAE/E,IAAI,MAAM,IAAI,MAAM,CAA+B;IACnD,IAAI,MAAM,CAAC,GAAG,EAAE,MAAM,EAGrB;IAED,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAAgC;IAC5D,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAO7B;IAED,IAAI,YAAY,IAAI,MAAM,CAAqC;IAC/D,IAAI,YAAY,CAAC,GAAG,EAAE,MAAM,EAG3B;IAED,IAAI,eAAe,IAAI,MAAM,CAAwC;IACrE,IAAI,eAAe,CAAC,GAAG,EAAE,MAAM,EAG9B;IAID,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAcpF,KAAK,IAAI,IAAI;IAqBb,QAAQ,IAAI,IAAI;CAoJjB"}
@@ -0,0 +1,45 @@
1
+ import { NativeElement } from '@nonoun/native-ui';
2
+ /** Minimal UINode shape for schema-driven rendering. */
3
+ export interface GenUINode {
4
+ tag: string;
5
+ id?: string;
6
+ attributes?: Record<string, string>;
7
+ properties?: Record<string, unknown>;
8
+ children?: GenUINode[];
9
+ text?: string;
10
+ slot?: string;
11
+ }
12
+ /**
13
+ * GenUI message card — renders UI from a schema (A2UI, MCPUI, etc).
14
+ *
15
+ * Validates the schema before rendering. Forbidden tags are rejected.
16
+ *
17
+ * ```html
18
+ * <n-chat-message-genui schema-type="a2ui" mode="inline"></n-chat-message-genui>
19
+ * ```
20
+ *
21
+ * Set the schema via property:
22
+ * ```js
23
+ * el.schema = { tag: 'n-card', children: [{ tag: 'p', text: 'Hello' }] };
24
+ * ```
25
+ *
26
+ * @attr {string} schema-type - `a2ui` | `mcpui`
27
+ * @attr {string} mode - `inline` (default) | `lightbox`
28
+ * @fires native:genui-action - Fired when an action occurs within the rendered UI
29
+ * @fires native:genui-error - Fired when schema validation fails
30
+ */
31
+ export declare class NChatMessageGenUI extends NativeElement {
32
+ #private;
33
+ static observedAttributes: string[];
34
+ constructor();
35
+ get schema(): GenUINode | null;
36
+ set schema(val: GenUINode | null);
37
+ get schemaType(): string;
38
+ set schemaType(val: string);
39
+ get mode(): 'inline' | 'lightbox';
40
+ set mode(val: 'inline' | 'lightbox');
41
+ attributeChangedCallback(name: string, old: string | null, val: string | null): void;
42
+ setup(): void;
43
+ teardown(): void;
44
+ }
45
+ //# sourceMappingURL=chat-message-genui-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message-genui-element.d.ts","sourceRoot":"","sources":["../../src/message/chat-message-genui-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAU,MAAM,mBAAmB,CAAC;AAE1D,wDAAwD;AACxD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAQD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;;IAClD,MAAM,CAAC,kBAAkB,WAA2B;;IAepD,IAAI,MAAM,IAAI,SAAS,GAAG,IAAI,CAA+B;IAC7D,IAAI,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,EAE/B;IAED,IAAI,UAAU,IAAI,MAAM,CAAmC;IAC3D,IAAI,UAAU,CAAC,GAAG,EAAE,MAAM,EAGzB;IAED,IAAI,IAAI,IAAI,QAAQ,GAAG,UAAU,CAA6B;IAC9D,IAAI,IAAI,CAAC,GAAG,EAAE,QAAQ,GAAG,UAAU,EAGlC;IAID,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAWpF,KAAK,IAAI,IAAI;IA0Cb,QAAQ,IAAI,IAAI;CAsEjB"}
@@ -0,0 +1,33 @@
1
+ import { NativeElement } from '@nonoun/native-ui';
2
+ export interface SeedOption {
3
+ value: string;
4
+ label: string;
5
+ icon?: string;
6
+ }
7
+ /**
8
+ * Suggestion chips — pre-seeded quick responses.
9
+ *
10
+ * Options can be provided as JSON attribute or via the `options` property.
11
+ *
12
+ * ```html
13
+ * <n-chat-message-seed options='[{"value":"yes","label":"Yes"},{"value":"no","label":"No"}]'>
14
+ * </n-chat-message-seed>
15
+ * ```
16
+ *
17
+ * @attr {string} options - JSON array of `{ value, label, icon? }`
18
+ * @attr {boolean} disabled - Disables all chips
19
+ * @fires native:seed-select - Fired when a chip is clicked
20
+ */
21
+ export declare class NChatMessageSeed extends NativeElement {
22
+ #private;
23
+ static observedAttributes: string[];
24
+ constructor();
25
+ get options(): SeedOption[];
26
+ set options(val: SeedOption[]);
27
+ get disabled(): boolean;
28
+ set disabled(val: boolean);
29
+ attributeChangedCallback(name: string, old: string | null, val: string | null): void;
30
+ setup(): void;
31
+ teardown(): void;
32
+ }
33
+ //# sourceMappingURL=chat-message-seed-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message-seed-element.d.ts","sourceRoot":"","sources":["../../src/message/chat-message-seed-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgC,MAAM,mBAAmB,CAAC;AAEhF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAiB,SAAQ,aAAa;;IACjD,MAAM,CAAC,kBAAkB,WAA2B;;IAapD,IAAI,OAAO,IAAI,UAAU,EAAE,CAAgC;IAC3D,IAAI,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,EAG5B;IAED,IAAI,QAAQ,IAAI,OAAO,CAAiC;IACxD,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,EAGxB;IAID,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAgBpF,KAAK,IAAI,IAAI;IAyCb,QAAQ,IAAI,IAAI;CAsBjB"}
@@ -0,0 +1,37 @@
1
+ import { NativeElement } from '@nonoun/native-ui';
2
+ /**
3
+ * Rich text message renderer with lightweight markdown support.
4
+ *
5
+ * Renders a markdown subset (paragraphs, headings, lists, code fences,
6
+ * inline code, bold, italic, links, blockquotes) to sanitized HTML.
7
+ *
8
+ * ```html
9
+ * <n-chat-message-text format="markdown">
10
+ * Hello **world**!
11
+ * </n-chat-message-text>
12
+ * ```
13
+ *
14
+ * Or set content via property:
15
+ * ```js
16
+ * el.content = '# Title\nSome **bold** text';
17
+ * ```
18
+ *
19
+ * @attr {string} format - `markdown` (default) | `plain`
20
+ */
21
+ export declare class NChatMessageText extends NativeElement {
22
+ #private;
23
+ static observedAttributes: string[];
24
+ get content(): string;
25
+ set content(val: string);
26
+ get format(): 'markdown' | 'plain';
27
+ set format(val: 'markdown' | 'plain');
28
+ attributeChangedCallback(name: string, old: string | null, val: string | null): void;
29
+ setup(): void;
30
+ teardown(): void;
31
+ }
32
+ declare function renderInline(text: string): string;
33
+ declare function renderMarkdown(src: string): string;
34
+ /** Sanitize rendered HTML — strip any tags not in allowlist. */
35
+ export declare function sanitizeHtml(html: string): string;
36
+ export { renderMarkdown, renderInline };
37
+ //# sourceMappingURL=chat-message-text-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message-text-element.d.ts","sourceRoot":"","sources":["../../src/message/chat-message-text-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAU,MAAM,mBAAmB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,gBAAiB,SAAQ,aAAa;;IACjD,MAAM,CAAC,kBAAkB,WAAc;IAQvC,IAAI,OAAO,IAAI,MAAM,CAAgC;IACrD,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,EAEtB;IAED,IAAI,MAAM,IAAI,UAAU,GAAG,OAAO,CAA+B;IACjE,IAAI,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,EAGnC;IAID,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAUpF,KAAK,IAAI,IAAI;IA8Bb,QAAQ,IAAI,IAAI;CAIjB;AAuBD,iBAAS,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmB1C;AAED,iBAAS,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4F3C;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { NativeElement } from '@nonoun/native-ui';
2
+ /**
3
+ * Message group — cluster of messages from the same sender.
4
+ *
5
+ * Provides a 2×2 grid layout:
6
+ * - Col 1, row 1–2: avatar (bottom-aligned)
7
+ * - Col 2, row 1: context area (metadata, reasoning, timestamps)
8
+ * - Col 2, row 2: messages area (chat bubbles, flex column)
9
+ *
10
+ * On setup, non-avatar children are sorted into two wrapper divs:
11
+ * - `.n-chat-context` — non-message children (row 1)
12
+ * - `.n-chat-bubbles` — `n-chat-message` children (row 2)
13
+ *
14
+ * A MutationObserver routes dynamically added children into the
15
+ * correct wrapper automatically.
16
+ *
17
+ * ```html
18
+ * <n-chat-messages role="assistant" sender="AI">
19
+ * <n-chat-avatar>AI</n-chat-avatar>
20
+ * <span class="reasoning">Thinking...</span>
21
+ * <n-chat-message role="assistant">
22
+ * <n-chat-message-text>Hello!</n-chat-message-text>
23
+ * </n-chat-message>
24
+ * </n-chat-messages>
25
+ * ```
26
+ *
27
+ * @attr {string} role - `user` | `assistant` | `system`
28
+ * @attr {string} sender - Display name of the sender
29
+ * @attr {string} avatar-align - `"top"` | `"center"` | `"bottom"` (default) — avatar vertical alignment
30
+ */
31
+ export declare class NChatMessages extends NativeElement {
32
+ #private;
33
+ static observedAttributes: string[];
34
+ constructor();
35
+ attributeChangedCallback(name: string, old: string | null, val: string | null): void;
36
+ setup(): void;
37
+ teardown(): void;
38
+ }
39
+ //# sourceMappingURL=chat-messages-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-messages-element.d.ts","sourceRoot":"","sources":["../../src/message/chat-messages-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,aAAc,SAAQ,aAAa;;IAC9C,MAAM,CAAC,kBAAkB,WAAsC;;IAY/D,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAKpF,KAAK,IAAI,IAAI;IA8Bb,QAAQ,IAAI,IAAI;CA4CjB"}
@@ -0,0 +1,8 @@
1
+ export { NChatMessage } from './chat-message-element.ts';
2
+ export { NChatMessages } from './chat-messages-element.ts';
3
+ export { NChatMessageText } from './chat-message-text-element.ts';
4
+ export { NChatMessageActivity } from './chat-message-activity-element.ts';
5
+ export { NChatMessageSeed } from './chat-message-seed-element.ts';
6
+ export { NChatMessageGenUI } from './chat-message-genui-element.ts';
7
+ export { NChatInputStructured } from './chat-input-structured-element.ts';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/message/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=n-chat-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n-chat-message.d.ts","sourceRoot":"","sources":["../../src/message/n-chat-message.ts"],"names":[],"mappings":""}
@@ -47,6 +47,15 @@
47
47
  /* Activity */
48
48
  --n-chat-activity-color: var(--n-ink-muted);
49
49
 
50
+ /* Seed */
51
+ --n-chat-seed-gap: var(--n-space);
52
+ --n-chat-seed-padding-block: var(--n-space);
53
+ --n-chat-seed-padding-inline: var(--n-chat-bubble-padding-inline);
54
+
55
+ /* Structured input */
56
+ --n-chat-structured-gap: calc(var(--n-space) * 2);
57
+ --n-chat-structured-padding: calc(var(--n-space) * 3);
58
+
50
59
  /* Prose */
51
60
  --n-chat-prose-gap: calc(var(--n-space) * 2);
52
61
  }
@@ -91,6 +100,33 @@
91
100
  line-height: var(--n-line-height);
92
101
  }
93
102
 
103
+ /* ── Aside mode (collapsible side panel) ── */
104
+
105
+ :where(native-chat-panel)[aside] {
106
+ position: relative;
107
+ flex: none;
108
+ width: 0;
109
+ min-width: 0;
110
+ max-width: 480px;
111
+ overflow: clip;
112
+ padding: 0;
113
+ transition:
114
+ width var(--n-duration) var(--n-easing),
115
+ min-width var(--n-duration) var(--n-easing),
116
+ padding var(--n-duration) var(--n-easing),
117
+ margin var(--n-duration) var(--n-easing);
118
+ }
119
+
120
+ :where(native-chat-panel)[aside][open] {
121
+ width: 360px;
122
+ min-width: 280px;
123
+ overflow: visible;
124
+ }
125
+
126
+ :where(native-chat-panel)[aside][resizing] {
127
+ transition: none;
128
+ }
129
+
94
130
  /* ── Sub-container integration ── */
95
131
 
96
132
  :where(native-chat-panel) > :where(n-header) {
@@ -114,39 +150,20 @@
114
150
 
115
151
  /* ── Model picker ── */
116
152
 
117
- :where(native-chat-panel) :where(n-button[data-role="model-picker"]) {
118
- gap: calc(var(--n-space) * 0.5);
153
+ :where(native-chat-panel) :where(n-select[data-role="model-picker"]) {
119
154
  max-width: 12rem;
120
155
  }
121
156
 
122
- :where(native-chat-panel) :where(n-button[data-role="model-picker"]) :where([data-role="model-label"]) {
157
+ :where(native-chat-panel) :where(n-select[data-role="model-picker"]) :where(n-button[justify="spread"]) {
158
+ gap: calc(var(--n-space) * 0.5);
159
+ }
160
+
161
+ :where(native-chat-panel) :where(n-select[data-role="model-picker"]) :where([slot="label"]) {
123
162
  overflow: hidden;
124
163
  text-overflow: ellipsis;
125
164
  white-space: nowrap;
126
165
  }
127
166
 
128
- :where(native-chat-panel) :where(n-listbox[data-role="model-listbox"][popover]) {
129
- position: fixed;
130
- position-area: block-end span-inline-end;
131
- position-try-fallbacks: flip-block;
132
- margin: 0.25rem 0 0;
133
- min-width: anchor-size(inline);
134
- }
135
-
136
- /* WHY: Wide padding only above 22rem — asides (280–480px) keep compact defaults. */
137
- @container (min-width: 22rem) {
138
- :where(native-chat-panel) > :where(n-header) {
139
- padding-inline: calc(var(--n-space) * 8);
140
- }
141
-
142
- :where(native-chat-panel) > :where(n-body) {
143
- padding-inline: calc(var(--n-space) * 8);
144
- }
145
-
146
- :where(native-chat-panel) > :where(n-footer) {
147
- padding-inline: calc(var(--n-space) * 8);
148
- }
149
- }
150
167
 
151
168
  /* ── n-chat-content ── */
152
169
 
@@ -636,11 +653,15 @@
636
653
 
637
654
  :where(n-chat-message-seed) {
638
655
  display: block;
639
- padding-block: var(--n-space);
640
- padding-inline: var(--n-chat-bubble-padding-inline);
656
+ padding-block: var(--n-chat-seed-padding-block);
657
+ padding-inline: var(--n-chat-seed-padding-inline);
641
658
  align-self: flex-start;
642
659
  }
643
660
 
661
+ :where(n-chat-message-seed) > :where(n-stack) {
662
+ gap: var(--n-chat-seed-gap);
663
+ }
664
+
644
665
  :where(n-chat-message-seed)[aria-disabled="true"] {
645
666
  pointer-events: none;
646
667
  }
@@ -684,8 +705,8 @@
684
705
  :where(n-chat-input-structured) {
685
706
  display: flex;
686
707
  flex-direction: column;
687
- gap: calc(var(--n-space) * 2);
688
- padding: calc(var(--n-space) * 3);
708
+ gap: var(--n-chat-structured-gap);
709
+ padding: var(--n-chat-structured-padding);
689
710
  background: var(--n-card);
690
711
  border-radius: var(--n-chat-bubble-radius);
691
712
  align-self: stretch;
@@ -697,6 +718,7 @@
697
718
 
698
719
  :where(n-chat-input-structured) > :where(n-stack) {
699
720
  flex: 0 0 auto;
721
+ gap: var(--n-chat-seed-gap);
700
722
  }
701
723
 
702
724
  :where(n-chat-input-structured) > :where(.n-chat-structured-actions) {
@@ -1,4 +1,4 @@
1
- import { a as e, c as t, d as n, f as r, g as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h } from "./chat-input-structured-element-C_5MDbpb.js";
1
+ import { a as e, c as t, d as n, f as r, g as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h } from "./chat-input-structured-element-A3nMG2WR.js";
2
2
  /**
3
3
  * Parse a Server-Sent Events (SSE) response stream into ChatStreamChunk values.
4
4
  *
@@ -0,0 +1,13 @@
1
+ import { NChatInput } from './chat-input-element.ts';
2
+ import { NChatPanel } from './chat-panel-element.ts';
3
+ import { NChatFeed } from './feed/chat-feed-element.ts';
4
+ import { NChatAvatar } from './avatar/chat-avatar-element.ts';
5
+ import { NChatMessage } from './message/chat-message-element.ts';
6
+ import { NChatMessages } from './message/chat-messages-element.ts';
7
+ import { NChatMessageText } from './message/chat-message-text-element.ts';
8
+ import { NChatMessageActivity } from './message/chat-message-activity-element.ts';
9
+ import { NChatMessageSeed } from './message/chat-message-seed-element.ts';
10
+ import { NChatMessageGenUI } from './message/chat-message-genui-element.ts';
11
+ import { NChatInputStructured } from './message/chat-input-structured-element.ts';
12
+ export { NChatInput, NChatPanel, NChatFeed, NChatAvatar, NChatMessage, NChatMessages, NChatMessageText, NChatMessageActivity, NChatMessageSeed, NChatMessageGenUI, NChatInputStructured, };
13
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAmDlF,OAAO,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,GACrB,CAAC"}
package/dist/register.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as e, d as t, g as n, h as r, i, l as a, m as o, n as s, p as c, r as l, t as u } from "./chat-input-structured-element-C_5MDbpb.js";
2
- import { NButton as d, NCard as f, NDialog as p, NIcon as m, NListbox as h, NOption as g, NTextarea as _, NToolbar as v, define as y, registerIcon as b } from "@nonoun/native-ui";
3
- y("n-chat-input", n), y("native-chat-panel", r), y("n-chat-feed", o), y("n-chat-avatar", c), y("n-chat-message", t), y("n-chat-messages", a), y("n-chat-message-text", e), y("n-chat-message-activity", i), y("n-chat-message-seed", l), y("n-chat-message-genui", s), y("n-chat-input-structured", u), y("n-textarea", _), y("n-button", d), y("n-icon", m), y("n-toolbar", v), y("n-dialog", p), y("n-card", f), y("n-listbox", h), y("n-option", g), b("chat-dots", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M116,128a12,12,0,1,1,12,12A12,12,0,0,1,116,128ZM84,140a12,12,0,1,0-12-12A12,12,0,0,0,84,140Zm88,0a12,12,0,1,0-12-12A12,12,0,0,0,172,140Zm60-76V192a16,16,0,0,1-16,16H83l-32.6,28.16-.09.07A15.89,15.89,0,0,1,40,240a16.13,16.13,0,0,1-6.8-1.52A15.85,15.85,0,0,1,24,224V64A16,16,0,0,1,40,48H216A16,16,0,0,1,232,64ZM40,224h0ZM216,64H40V224l34.77-30A8,8,0,0,1,80,192H216Z\"/></svg>"), b("user", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M230.92,212c-15.23-26.33-38.7-45.21-66.09-54.16a72,72,0,1,0-73.66,0C63.78,166.78,40.31,185.66,25.08,212a8,8,0,1,0,13.85,8C55.71,194.74,89.05,176,128,176s72.29,18.74,89.07,44a8,8,0,0,0,13.85-8ZM72,96a56,56,0,1,1,56,56A56.06,56.06,0,0,1,72,96Z\"/></svg>"), b("stop", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M200,40H56A16,16,0,0,0,40,56V200a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V56A16,16,0,0,0,200,40Zm0,160H56V56H200V200Z\"/></svg>"), b("arrow-counter-clockwise", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M224,128a96,96,0,0,1-94.71,96H128A95.38,95.38,0,0,1,62.1,197.8a8,8,0,0,1,11-11.63A80,80,0,1,0,71.43,71.39a3.07,3.07,0,0,1-.26.25L44.59,96H72a8,8,0,0,1,0,16H24a8,8,0,0,1-8-8V56a8,8,0,0,1,16,0V85.8L60.25,60A96,96,0,0,1,224,128Z\"/></svg>"), b("caret-up-down", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M181.66,170.34a8,8,0,0,1,0,11.32l-48,48a8,8,0,0,1-11.32,0l-48-48a8,8,0,0,1,11.32-11.32L128,212.69l42.34-42.35A8,8,0,0,1,181.66,170.34Zm-96-84.68L128,43.31l42.34,42.35a8,8,0,0,0,11.32-11.32l-48-48a8,8,0,0,0-11.32,0l-48,48A8,8,0,0,0,85.66,85.66Z\"/></svg>"), b("copy", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z\"/></svg>"), b("arrow-clockwise", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1,0-16H211.4L184.81,71.64l-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,0,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60L224,85.8V56a8,8,0,1,1,16,0Z\"/></svg>"), b("pencil-simple", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z\"/></svg>"), b("thumbs-up", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M234,80.12A24,24,0,0,0,216,72H160V56a40,40,0,0,0-40-40,8,8,0,0,0-7.16,4.42L75.06,96H32a16,16,0,0,0-16,16v88a16,16,0,0,0,16,16H204a24,24,0,0,0,23.82-21l12-96A24,24,0,0,0,234,80.12ZM32,112H72v88H32ZM223.94,97l-12,96a8,8,0,0,1-7.94,7H88V105.89l36.71-73.43A24,24,0,0,1,144,56V80a8,8,0,0,0,8,8h64a8,8,0,0,1,7.94,9Z\"/></svg>"), b("thumbs-down", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M239.82,157l-12-96A24,24,0,0,0,204,40H32A16,16,0,0,0,16,56v88a16,16,0,0,0,16,16H75.06l37.78,75.58A8,8,0,0,0,120,240a40,40,0,0,0,40-40V184h56a24,24,0,0,0,23.82-27ZM72,144H32V56H72Zm150,21.29a7.88,7.88,0,0,1-6,2.71H152a8,8,0,0,0-8,8v24a24,24,0,0,1-19.29,23.54L88,150.11V56H204a8,8,0,0,1,7.94,7l12,96A7.87,7.87,0,0,1,222,165.29Z\"/></svg>"), b("arrow-right", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M221.66,133.66l-72,72a8,8,0,0,1-11.32-11.32L196.69,136H40a8,8,0,0,1,0-16H196.69L138.34,61.66a8,8,0,0,1,11.32-11.32l72,72A8,8,0,0,1,221.66,133.66Z\"/></svg>");
1
+ import { a as e, d as t, g as n, h as r, i, l as a, m as o, n as s, p as c, r as l, t as u } from "./chat-input-structured-element-A3nMG2WR.js";
2
+ import { NButton as d, NCard as f, NDialog as p, NIcon as m, NListbox as h, NOption as g, NOptionGroup as _, NOptionGroupHeader as v, NSelect as y, NTextarea as b, NToolbar as x, define as S, registerIcon as C } from "@nonoun/native-ui";
3
+ S("n-chat-input", n), S("native-chat-panel", r), S("n-chat-feed", o), S("n-chat-avatar", c), S("n-chat-message", t), S("n-chat-messages", a), S("n-chat-message-text", e), S("n-chat-message-activity", i), S("n-chat-message-seed", l), S("n-chat-message-genui", s), S("n-chat-input-structured", u), S("n-textarea", b), S("n-button", d), S("n-icon", m), S("n-toolbar", x), S("n-dialog", p), S("n-card", f), S("n-listbox", h), S("n-option", g), S("n-option-group", _), S("n-option-group-header", v), S("n-select", y), C("chat-dots", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M116,128a12,12,0,1,1,12,12A12,12,0,0,1,116,128ZM84,140a12,12,0,1,0-12-12A12,12,0,0,0,84,140Zm88,0a12,12,0,1,0-12-12A12,12,0,0,0,172,140Zm60-76V192a16,16,0,0,1-16,16H83l-32.6,28.16-.09.07A15.89,15.89,0,0,1,40,240a16.13,16.13,0,0,1-6.8-1.52A15.85,15.85,0,0,1,24,224V64A16,16,0,0,1,40,48H216A16,16,0,0,1,232,64ZM40,224h0ZM216,64H40V224l34.77-30A8,8,0,0,1,80,192H216Z\"/></svg>"), C("user", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M230.92,212c-15.23-26.33-38.7-45.21-66.09-54.16a72,72,0,1,0-73.66,0C63.78,166.78,40.31,185.66,25.08,212a8,8,0,1,0,13.85,8C55.71,194.74,89.05,176,128,176s72.29,18.74,89.07,44a8,8,0,0,0,13.85-8ZM72,96a56,56,0,1,1,56,56A56.06,56.06,0,0,1,72,96Z\"/></svg>"), C("stop", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M200,40H56A16,16,0,0,0,40,56V200a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V56A16,16,0,0,0,200,40Zm0,160H56V56H200V200Z\"/></svg>"), C("arrow-counter-clockwise", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M224,128a96,96,0,0,1-94.71,96H128A95.38,95.38,0,0,1,62.1,197.8a8,8,0,0,1,11-11.63A80,80,0,1,0,71.43,71.39a3.07,3.07,0,0,1-.26.25L44.59,96H72a8,8,0,0,1,0,16H24a8,8,0,0,1-8-8V56a8,8,0,0,1,16,0V85.8L60.25,60A96,96,0,0,1,224,128Z\"/></svg>"), C("caret-up-down", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M181.66,170.34a8,8,0,0,1,0,11.32l-48,48a8,8,0,0,1-11.32,0l-48-48a8,8,0,0,1,11.32-11.32L128,212.69l42.34-42.35A8,8,0,0,1,181.66,170.34Zm-96-84.68L128,43.31l42.34,42.35a8,8,0,0,0,11.32-11.32l-48-48a8,8,0,0,0-11.32,0l-48,48A8,8,0,0,0,85.66,85.66Z\"/></svg>"), C("dots-three-outline-fill", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M156,128a28,28,0,1,1-28-28A28,28,0,0,1,156,128ZM48,100a28,28,0,1,0,28,28A28,28,0,0,0,48,100Zm160,0a28,28,0,1,0,28,28A28,28,0,0,0,208,100Z\"/></svg>"), C("plus", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M224,128a8,8,0,0,1-8,8H136v80a8,8,0,0,1-16,0V136H40a8,8,0,0,1,0-16h80V40a8,8,0,0,1,16,0v80h80A8,8,0,0,1,224,128Z\"/></svg>"), C("microphone", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M128,176a48.05,48.05,0,0,0,48-48V64a48,48,0,0,0-96,0v64A48.05,48.05,0,0,0,128,176ZM96,64a32,32,0,0,1,64,0v64a32,32,0,0,1-64,0Zm40,143.6V240a8,8,0,0,1-16,0V207.6A80.11,80.11,0,0,1,48,128a8,8,0,0,1,16,0,64,64,0,0,0,128,0,8,8,0,0,1,16,0A80.11,80.11,0,0,1,136,207.6Z\"/></svg>"), C("arrow-up", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M205.66,117.66a8,8,0,0,1-11.32,0L136,59.31V216a8,8,0,0,1-16,0V59.31L61.66,117.66a8,8,0,0,1-11.32-11.32l72-72a8,8,0,0,1,11.32,0l72,72A8,8,0,0,1,205.66,117.66Z\"/></svg>"), C("copy", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z\"/></svg>"), C("arrow-clockwise", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1,0-16H211.4L184.81,71.64l-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,0,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60L224,85.8V56a8,8,0,1,1,16,0Z\"/></svg>"), C("pencil-simple", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z\"/></svg>"), C("thumbs-up", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M234,80.12A24,24,0,0,0,216,72H160V56a40,40,0,0,0-40-40,8,8,0,0,0-7.16,4.42L75.06,96H32a16,16,0,0,0-16,16v88a16,16,0,0,0,16,16H204a24,24,0,0,0,23.82-21l12-96A24,24,0,0,0,234,80.12ZM32,112H72v88H32ZM223.94,97l-12,96a8,8,0,0,1-7.94,7H88V105.89l36.71-73.43A24,24,0,0,1,144,56V80a8,8,0,0,0,8,8h64a8,8,0,0,1,7.94,9Z\"/></svg>"), C("thumbs-down", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M239.82,157l-12-96A24,24,0,0,0,204,40H32A16,16,0,0,0,16,56v88a16,16,0,0,0,16,16H75.06l37.78,75.58A8,8,0,0,0,120,240a40,40,0,0,0,40-40V184h56a24,24,0,0,0,23.82-27ZM72,144H32V56H72Zm150,21.29a7.88,7.88,0,0,1-6,2.71H152a8,8,0,0,0-8,8v24a24,24,0,0,1-19.29,23.54L88,150.11V56H204a8,8,0,0,1,7.94,7l12,96A7.87,7.87,0,0,1,222,165.29Z\"/></svg>"), C("arrow-right", "<svg viewBox=\"0 0 256 256\" fill=\"currentColor\"><path d=\"M221.66,133.66l-72,72a8,8,0,0,1-11.32-11.32L196.69,136H40a8,8,0,0,1,0-16H196.69L138.34,61.66a8,8,0,0,1,11.32-11.32l72,72A8,8,0,0,1,221.66,133.66Z\"/></svg>");
4
4
  export { c as NChatAvatar, o as NChatFeed, n as NChatInput, u as NChatInputStructured, t as NChatMessage, i as NChatMessageActivity, s as NChatMessageGenUI, l as NChatMessageSeed, e as NChatMessageText, a as NChatMessages, r as NChatPanel };
@@ -0,0 +1,19 @@
1
+ import type { ChatStreamChunk, TransportState } from './types.ts';
2
+ export type StreamEndReason = 'complete' | 'partial' | 'error' | 'stopped';
3
+ /**
4
+ * Classify how a stream ended based on the final chunk and optional error.
5
+ * - `complete` — explicit done signal received (e.g., `[DONE]` sentinel, `finish_reason`)
6
+ * - `partial` — stream ended without explicit completion (truncated)
7
+ * - `error` — an error occurred during streaming
8
+ * - `stopped` — consumer aborted the stream
9
+ */
10
+ export declare function classifyStreamEnd(chunk: ChatStreamChunk, error?: Error): StreamEndReason;
11
+ /**
12
+ * Classify an HTTP status code into a transport state.
13
+ */
14
+ export declare function classifyHttpError(status: number): TransportState;
15
+ /**
16
+ * Calculate exponential backoff delay with jitter.
17
+ */
18
+ export declare function backoffDelay(attempt: number, base?: number, max?: number): number;
19
+ //# sourceMappingURL=classify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/stream/classify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3E;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,eAAe,CAOxF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAKhE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,SAAO,EAAE,GAAG,SAAQ,GAAG,MAAM,CAE9E"}
@@ -0,0 +1,19 @@
1
+ import type { ChatStreamChunk, StreamFormat, ChatTransportOptions } from './types.ts';
2
+ /**
3
+ * Detect the stream format from a Content-Type header value.
4
+ */
5
+ export declare function detectFormat(contentType: string): StreamFormat;
6
+ /**
7
+ * Create an async generator that yields ChatStreamChunk values from a
8
+ * Response, auto-detecting the format from Content-Type when not specified.
9
+ */
10
+ export declare function createChatStream(response: Response, format?: StreamFormat): AsyncGenerator<ChatStreamChunk>;
11
+ export interface ChatTransport {
12
+ send(body: unknown): Promise<AsyncGenerator<ChatStreamChunk>>;
13
+ }
14
+ /**
15
+ * Create a reusable chat transport that sends requests and returns a
16
+ * streaming async generator. Supports retry/backoff and transport state callbacks.
17
+ */
18
+ export declare function createChatTransport(options: ChatTransportOptions): ChatTransport;
19
+ //# sourceMappingURL=create-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-transport.d.ts","sourceRoot":"","sources":["../../src/stream/create-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,oBAAoB,EAAmB,MAAM,YAAY,CAAC;AAMvG;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAK9D;AAED;;;GAGG;AACH,wBAAuB,gBAAgB,CACrC,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,YAAY,GACpB,cAAc,CAAC,eAAe,CAAC,CAejC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;CAC/D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CAsGf"}