@aparte/core 0.13.1 → 0.15.0

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 (97) hide show
  1. package/README.md +2 -2
  2. package/dist/client/aparte-client.d.ts +36 -35
  3. package/dist/client/aparte-client.d.ts.map +1 -1
  4. package/dist/client/stream-adapter.d.ts +37 -145
  5. package/dist/client/stream-adapter.d.ts.map +1 -1
  6. package/dist/components/bubble/aparte-chat-bubble.d.ts +10 -2
  7. package/dist/components/bubble/aparte-chat-bubble.d.ts.map +1 -1
  8. package/dist/components/composer/aparte-composer-add-attachment.d.ts +6 -6
  9. package/dist/components/composer/aparte-composer-add-attachment.d.ts.map +1 -1
  10. package/dist/components/composer/aparte-composer-input.d.ts +9 -1
  11. package/dist/components/composer/aparte-composer-input.d.ts.map +1 -1
  12. package/dist/components/composer/aparte-composer.d.ts +12 -3
  13. package/dist/components/composer/aparte-composer.d.ts.map +1 -1
  14. package/dist/components/context/aparte-context.d.ts +81 -0
  15. package/dist/components/context/aparte-context.d.ts.map +1 -0
  16. package/dist/components/context/index.d.ts +3 -0
  17. package/dist/components/context/index.d.ts.map +1 -0
  18. package/dist/components/index.d.ts +4 -0
  19. package/dist/components/index.d.ts.map +1 -1
  20. package/dist/components/suggestions/aparte-suggestions.d.ts +95 -0
  21. package/dist/components/suggestions/aparte-suggestions.d.ts.map +1 -0
  22. package/dist/components/suggestions/index.d.ts +3 -0
  23. package/dist/components/suggestions/index.d.ts.map +1 -0
  24. package/dist/components/viewport/aparte-chat-viewport.d.ts +35 -7
  25. package/dist/components/viewport/aparte-chat-viewport.d.ts.map +1 -1
  26. package/dist/config/aparte-config.d.ts +1 -21
  27. package/dist/config/aparte-config.d.ts.map +1 -1
  28. package/dist/config/index.d.ts +0 -2
  29. package/dist/config/index.d.ts.map +1 -1
  30. package/dist/config/locale.d.ts +30 -1
  31. package/dist/config/locale.d.ts.map +1 -1
  32. package/dist/conversations/index.d.ts +1 -1
  33. package/dist/conversations/index.d.ts.map +1 -1
  34. package/dist/conversations/types.d.ts +9 -57
  35. package/dist/conversations/types.d.ts.map +1 -1
  36. package/dist/custom-elements.json +5543 -5196
  37. package/dist/generated/element-attributes.d.ts +34 -6
  38. package/dist/generated/element-attributes.d.ts.map +1 -1
  39. package/dist/{glyphs-QXfbL3n_.js → glyphs-B3BZ2TIb.js} +21 -21
  40. package/dist/glyphs-B3BZ2TIb.js.map +1 -0
  41. package/dist/host/aparte-chat-host.d.ts +1 -1
  42. package/dist/host/aparte-chat-host.d.ts.map +1 -1
  43. package/dist/icons/extended.d.ts +87 -85
  44. package/dist/icons/extended.d.ts.map +1 -1
  45. package/dist/icons/glyphs.d.ts +53 -50
  46. package/dist/icons/glyphs.d.ts.map +1 -1
  47. package/dist/icons.js +41 -41
  48. package/dist/icons.js.map +1 -1
  49. package/dist/index.css +532 -171
  50. package/dist/index.d.ts +10 -4
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +593 -183
  53. package/dist/index.js.map +1 -1
  54. package/dist/index.node.d.ts +6 -4
  55. package/dist/index.node.d.ts.map +1 -1
  56. package/dist/index.node.js +56 -56
  57. package/dist/index.node.js.map +1 -1
  58. package/dist/{is-awaiting-reply-CWp1ffHh.js → is-awaiting-reply-BZ_iJ3s3.js} +175 -994
  59. package/dist/is-awaiting-reply-BZ_iJ3s3.js.map +1 -0
  60. package/dist/parsers/aparte-stream-parser.d.ts +6 -17
  61. package/dist/parsers/aparte-stream-parser.d.ts.map +1 -1
  62. package/dist/primitives/select/aparte-select.d.ts +2 -2
  63. package/dist/primitives/select/aparte-select.d.ts.map +1 -1
  64. package/dist/renderers/segment-renderers.d.ts.map +1 -1
  65. package/dist/renderers/segments/tool-call.d.ts.map +1 -1
  66. package/dist/runtime/message-repository.d.ts +7 -0
  67. package/dist/runtime/message-repository.d.ts.map +1 -1
  68. package/dist/transport/types.d.ts +8 -0
  69. package/dist/transport/types.d.ts.map +1 -1
  70. package/dist/types/chat.d.ts +32 -38
  71. package/dist/types/chat.d.ts.map +1 -1
  72. package/dist/types/errors.d.ts +16 -1
  73. package/dist/types/errors.d.ts.map +1 -1
  74. package/dist/types/event-map.d.ts +4 -0
  75. package/dist/types/event-map.d.ts.map +1 -1
  76. package/dist/types/events.d.ts +15 -0
  77. package/dist/types/events.d.ts.map +1 -1
  78. package/dist/types/imperative-api.d.ts +10 -1
  79. package/dist/types/imperative-api.d.ts.map +1 -1
  80. package/dist/types/index.d.ts +2 -2
  81. package/dist/types/index.d.ts.map +1 -1
  82. package/dist/types/models.d.ts +1 -8
  83. package/dist/types/models.d.ts.map +1 -1
  84. package/dist/types/segments.d.ts +1 -13
  85. package/dist/types/segments.d.ts.map +1 -1
  86. package/dist/types/tools.d.ts +1 -1
  87. package/dist/utils/chat-boundary.d.ts +8 -4
  88. package/dist/utils/chat-boundary.d.ts.map +1 -1
  89. package/package.json +5 -2
  90. package/dist/client/xml-artifact-feed.d.ts +0 -76
  91. package/dist/client/xml-artifact-feed.d.ts.map +0 -1
  92. package/dist/config/skeleton-provider.d.ts +0 -26
  93. package/dist/config/skeleton-provider.d.ts.map +0 -1
  94. package/dist/glyphs-QXfbL3n_.js.map +0 -1
  95. package/dist/is-awaiting-reply-CWp1ffHh.js.map +0 -1
  96. package/dist/renderers/segments/pipeline-waiting.d.ts +0 -3
  97. package/dist/renderers/segments/pipeline-waiting.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aparte/core",
3
- "version": "0.13.1",
4
- "description": "High-performance AI conversation engine - Zero-dependency Web Components",
3
+ "version": "0.15.0",
4
+ "description": "AI chat in Web Components, with the agent loop inside — zero third-party dependencies",
5
5
  "type": "module",
6
6
  "//sideEffects": "The BROWSER entry defines the custom elements and imports CSS at module scope, so it must never be tree-shaken; the Node entry (`index.node`) and every other module are pure. Listing them explicitly is what lets a bundler drop the rest — the whole package was implicitly side-effectful before, the only one of the 14 without this field.",
7
7
  "sideEffects": [
@@ -44,6 +44,9 @@
44
44
  "engines": {
45
45
  "node": ">=18"
46
46
  },
47
+ "dependencies": {
48
+ "@aparte/engine": "0.15.0"
49
+ },
47
50
  "devDependencies": {
48
51
  "@custom-elements-manifest/analyzer": "^0.11.0",
49
52
  "@types/node": "^22.0.0",
@@ -1,76 +0,0 @@
1
- /**
2
- * The Claude-style `<artifact>` XML streamer: scans one text delta for
3
- * `<artifact …>` / `</artifact>`, routes chat text through the text parser and
4
- * artifact content into a dedicated artifact segment, and holds back a tag split
5
- * across deltas.
6
- *
7
- * TWIN: `packages/engine/src/agent/parsers/artifact-xml-state-machine.ts`. Core
8
- * cannot import engine's copy — engine peer-depends on core — so the two are
9
- * maintained by hand, and the parity suite asserts the same cases on both sides.
10
- * A fix applied to one twin and not the other is this repo's most repeated bug,
11
- * which is the reason this is a file: the two used to cite each other by line
12
- * number into a 2324-line module, and four of those citations had rotted onto
13
- * unrelated code — one of them in the published docs.
14
- *
15
- * It sits outside `AparteClient` because it never belonged inside it. It touches
16
- * `this` zero times: the state it mutates is owned by its caller and passed in.
17
- */
18
- import { AparteStreamParser } from '../parsers/aparte-stream-parser.js';
19
- import { type AparteLifecycleTarget } from './lifecycle-events.js';
20
- import type { AparteSegment } from '../types/index.js';
21
- import type { AparteArtifactHint } from '../types/chat.js';
22
- export type XmlArtifactFeedTarget = AparteLifecycleTarget & {
23
- addSegment?(segment: AparteSegment): void;
24
- updateSegment?(segmentId: string, updates: Partial<AparteSegment>): void;
25
- };
26
- /** Mutable state for streaming a Claude-style `<artifact>` XML block out of the
27
- * text stream — owned by the caller's stream loop, fed one delta at a time. */
28
- export interface XmlArtifactStreamState {
29
- state: 'normal' | 'scanning' | 'in-artifact';
30
- scanBuf: string;
31
- closeBuf: string;
32
- segId: string | null;
33
- content: string;
34
- mime: string;
35
- kind: string;
36
- title: string;
37
- }
38
- /**
39
- * Feed one text delta to the Claude-style `<artifact>` XML streamer. Scans for
40
- * `<artifact …>` / `</artifact>`, routing chat text through the text parser and
41
- * artifact content into a dedicated artifact segment (handling tags split across
42
- * deltas). Mutates `xml` in place.
43
- */
44
- export declare function feedXmlArtifactDelta(delta: string, xml: XmlArtifactStreamState, ctx: {
45
- targetElement: XmlArtifactFeedTarget;
46
- messageId: string;
47
- textParser: AparteStreamParser;
48
- streamingSegmentIds: Set<string>;
49
- artifactProgress: Map<string, number>;
50
- artifactXmlHint: AparteArtifactHint;
51
- }): void;
52
- /**
53
- * Flush a truncated artifact: a stream that ended mid-body (the model cut off
54
- * before `</artifact>`) still has to render what arrived.
55
- *
56
- * The twin of engine's `XmlArtifactStateMachine.finalize()`, and it lives here for
57
- * the same reason the feeder does — engine's copy is ONE file holding both halves,
58
- * so splitting them across files in core is precisely the drift the pairing exists
59
- * to prevent. It also puts the `scanning` note in the feeder next to the state test
60
- * that makes it true.
61
- */
62
- export declare function finalizeXmlArtifact(xml: XmlArtifactStreamState, ctx: {
63
- targetElement: XmlArtifactFeedTarget;
64
- messageId: string;
65
- artifactProgress: Map<string, number>;
66
- /** Absent when the turn was not in XML-artifact mode — then there is nothing to flush. */
67
- artifactXmlHint: AparteArtifactHint | undefined;
68
- /**
69
- * The turn's text parser. The `scanning` branch pushes held text into it, so
70
- * the caller MUST call this before `textParser.finalize()`.
71
- */
72
- textParser: AparteStreamParser;
73
- /** So the held-text render does not re-add a segment already on screen. */
74
- streamingSegmentIds: Set<string>;
75
- }): void;
76
- //# sourceMappingURL=xml-artifact-feed.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xml-artifact-feed.d.ts","sourceRoot":"","sources":["../../src/client/xml-artifact-feed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,kBAAkB,EAAsB,MAAM,oCAAoC,CAAC;AAE5F,OAAO,EAA6B,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9F,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,mBAAmB,CAAC;AAC9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAsB3D,MAAM,MAAM,qBAAqB,GAAG,qBAAqB,GAAG;IACxD,UAAU,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1C,aAAa,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;CAC5E,CAAC;AAoBF;gFACgF;AAChF,MAAM,WAAW,sBAAsB;IACnC,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,sBAAsB,EAC3B,GAAG,EAAE;IACD,aAAa,EAAE,qBAAqB,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,EAAE,kBAAkB,CAAC;CACvC,GACF,IAAI,CAoKN;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAC/B,GAAG,EAAE,sBAAsB,EAC3B,GAAG,EAAE;IACD,aAAa,EAAE,qBAAqB,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,0FAA0F;IAC1F,eAAe,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAChD;;;OAGG;IACH,UAAU,EAAE,kBAAkB,CAAC;IAC/B,2EAA2E;IAC3E,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACpC,GACF,IAAI,CAqEN"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Skeleton Provider Interface
3
- *
4
- * Defines the contract for skeleton/loading state plugins.
5
- * Returns HTML strings for various loading states.
6
- *
7
- * @example
8
- * // Register a skeleton provider (e.g. an Angular ngx-skeleton-loader bridge)
9
- * aparteGlobalConfig.setSkeletonProvider({
10
- * message: () => '<ngx-skeleton-loader count="3"></ngx-skeleton-loader>',
11
- * code: () => '<ngx-skeleton-loader appearance="line" count="5"></ngx-skeleton-loader>',
12
- * // ...
13
- * });
14
- */
15
- /** Skeleton types available in the provider */
16
- export type AparteSkeletonType = 'message' | 'code' | 'thinking' | 'input' | 'list' | 'text';
17
- export interface AparteSkeletonProvider {
18
- /** Get skeleton HTML for a specific type */
19
- getSkeleton: (type: AparteSkeletonType) => string;
20
- }
21
- /**
22
- * Minimal fallback skeletons - zero CSS animations, just structure
23
- * Used when no skeleton plugin is installed
24
- */
25
- export declare const APARTE_DEFAULT_SKELETON_FALLBACKS: Record<AparteSkeletonType, string>;
26
- //# sourceMappingURL=skeleton-provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skeleton-provider.d.ts","sourceRoot":"","sources":["../../src/config/skeleton-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+CAA+C;AAC/C,MAAM,MAAM,kBAAkB,GACxB,SAAS,GACT,MAAM,GACN,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,CAAC;AAEb,MAAM,WAAW,sBAAsB;IACnC,4CAA4C;IAC5C,WAAW,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,MAAM,CAAC;CACrD;AAED;;;GAGG;AACH,eAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAOhF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"glyphs-QXfbL3n_.js","sources":["../src/icons/glyphs.ts"],"sourcesContent":["/**\n * The glyphs.\n *\n * ONE place. Every SVG the library draws is declared here and nowhere else, because\n * scattering them did not merely spread the source around — it let them DRIFT. Before\n * this file there were three different ✕ (a filled one on a 12 grid, a stroked one at\n * 2.5, and `close`), two different chevrons, and `paperclip` and `scrollDown` each\n * existed twice, byte for byte, in a component that could have asked for them.\n *\n * Each glyph is a plain string, exported on its own, so a bundler can drop the ones a\n * build never reaches. `APARTE_DEFAULT_ICON_FALLBACKS` in `config/icon-provider.ts`\n * assembles them into the record `getIcon()` reads — that record is indexed by a\n * computed key, so it is retained whole; anything meant to be optional has to stay OUT\n * of it. That is the rule the extended set follows.\n *\n * Shapes follow Lucide's grid (24x24, `currentColor`, round caps) so a consumer who\n * swaps in the real Lucide gets the same drawing under the same name. Nothing is\n * imported from it: core has no dependencies.\n */\n\n\n/** Copy button icon */\nexport const copyIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/></svg>`;\n\n/** Success/check icon */\nexport const checkIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"/></svg>`;\n\n/** Send message icon */\nexport const sendIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"/><polygon points=\"22 2 15 22 11 13 2 9 22 2\"/></svg>`;\n\n/** Loading/spinner indicator */\nexport const loadingIcon = `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"aparte-icon aparte-icon-spin\"><circle cx=\"12\" cy=\"12\" r=\"10\" stroke-opacity=\"0.25\"/><path d=\"M12 2a10 10 0 0 1 10 10\"/></svg>`;\n\n/** Error indicator */\nexport const errorIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/></svg>`;\n\n/** Expand/show more icon */\nexport const expandIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"/></svg>`;\n\n/** Collapse/show less icon */\nexport const collapseIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"18 15 12 9 6 15\"/></svg>`;\n\n/** Terminal/command prompt icon */\nexport const terminalIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"4 17 10 11 4 5\"/><line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\"/></svg>`;\n\n/** File attachment / paperclip icon */\nexport const paperclipIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48\"/></svg>`;\n\n/** Image file icon */\nexport const imageIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/><polyline points=\"21 15 16 10 5 21\"/></svg>`;\n\n/** Generic file icon */\nexport const fileIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\"/><polyline points=\"14 2 14 8 20 8\"/></svg>`;\n\n/** Scroll to bottom button icon */\nexport const scrollDownIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"/><polyline points=\"19 12 12 19 5 12\"/></svg>`;\n\n/** Retry / regenerate icon */\nexport const retryIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"/><path d=\"M3 3v5h5\"/></svg>`;\n\n/** Edit / pencil icon */\nexport const editIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"/><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"/></svg>`;\n\n/** Thumbs up / positive feedback icon */\nexport const thumbUpIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M7 10v12\"/><path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\"/></svg>`;\n\n/** Thumbs down / negative feedback icon */\nexport const thumbDownIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M17 14V2\"/><path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\"/></svg>`;\n\n/** Previous branch arrow */\nexport const prevBranchIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"/></svg>`;\n\n/** Next branch arrow */\nexport const nextBranchIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"/></svg>`;\n\n/** Tool call indicator (wrench) */\nexport const toolIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\"/></svg>`;\n\n/** Close / failed / rejected / remove (✕) */\nexport const closeIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg>`;\n\n/** Stop / halt streaming (■) */\nexport const stopIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 16 16\" fill=\"currentColor\"><rect x=\"2\" y=\"2\" width=\"12\" height=\"12\" rx=\"2\"/></svg>`;\n\n/** Informational notice (ⓘ) */\nexport const infoIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/></svg>`;\n\n/** Archive a conversation */\nexport const archiveIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"3 8 21 8\"/><path d=\"M5 8v11a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8\"/><polyline points=\"9 14 12 11 15 14\"/><line x1=\"12\" y1=\"11\" x2=\"12\" y2=\"19\"/></svg>`;\n\n/** Restore an archived conversation */\nexport const unarchiveIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"3 8 21 8\"/><path d=\"M5 8v11a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8\"/><polyline points=\"9 14 12 17 15 14\"/><line x1=\"12\" y1=\"11\" x2=\"12\" y2=\"17\"/></svg>`;\n\n/** Download / save to disk */\nexport const downloadIcon = `<svg class=\"aparte-icon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 2v9m0 0l-3-3m3 3l3-3M2 13h12\"/></svg>`;\n\n/** Every glyph, by name — the map `APARTE_DEFAULT_ICON_FALLBACKS` is built from. */\nexport const APARTE_ICON_GLYPHS = {\n copy: copyIcon,\n check: checkIcon,\n send: sendIcon,\n loading: loadingIcon,\n error: errorIcon,\n expand: expandIcon,\n collapse: collapseIcon,\n terminal: terminalIcon,\n paperclip: paperclipIcon,\n image: imageIcon,\n file: fileIcon,\n scrollDown: scrollDownIcon,\n retry: retryIcon,\n edit: editIcon,\n thumbUp: thumbUpIcon,\n thumbDown: thumbDownIcon,\n prevBranch: prevBranchIcon,\n nextBranch: nextBranchIcon,\n tool: toolIcon,\n close: closeIcon,\n stop: stopIcon,\n info: infoIcon,\n archive: archiveIcon,\n unarchive: unarchiveIcon,\n download: downloadIcon,\n} as const;\n"],"names":[],"mappings":"AAsBO,MAAM,WAAW;AAGjB,MAAM,YAAY;AAGlB,MAAM,WAAW;AAGjB,MAAM,cAAc;AAGpB,MAAM,YAAY;AAGlB,MAAM,aAAa;AAGnB,MAAM,eAAe;AAGrB,MAAM,eAAe;AAGrB,MAAM,gBAAgB;AAGtB,MAAM,YAAY;AAGlB,MAAM,WAAW;AAGjB,MAAM,iBAAiB;AAGvB,MAAM,YAAY;AAGlB,MAAM,WAAW;AAGjB,MAAM,cAAc;AAGpB,MAAM,gBAAgB;AAGtB,MAAM,iBAAiB;AAGvB,MAAM,iBAAiB;AAGvB,MAAM,WAAW;AAGjB,MAAM,YAAY;AAGlB,MAAM,WAAW;AAGjB,MAAM,WAAW;AAGjB,MAAM,cAAc;AAGpB,MAAM,gBAAgB;AAGtB,MAAM,eAAe;AAGrB,MAAM,qBAAqB;AAAA,EAC9B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,OAAO;AAAA,EACP,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU;AACd;"}