@syntrologie/adapt-chatbot 2.15.0 → 2.25.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 (69) hide show
  1. package/dist/ChatAssistantLit.d.ts +8 -56
  2. package/dist/ChatAssistantLit.d.ts.map +1 -1
  3. package/dist/ChatAssistantLit.js +8 -389
  4. package/dist/ChatAssistantLit.js.map +7 -0
  5. package/dist/cdn.d.ts +2 -6
  6. package/dist/cdn.d.ts.map +1 -1
  7. package/dist/chunk-FI7F22ED.js +3331 -0
  8. package/dist/chunk-FI7F22ED.js.map +7 -0
  9. package/dist/chunk-V6TY7KAL.js +8 -0
  10. package/dist/chunk-V6TY7KAL.js.map +7 -0
  11. package/dist/editor-lit.d.ts +37 -0
  12. package/dist/editor-lit.d.ts.map +1 -0
  13. package/dist/editor-lit.js +134 -0
  14. package/dist/editor-lit.js.map +7 -0
  15. package/dist/runtime-lit.d.ts +3 -24
  16. package/dist/runtime-lit.d.ts.map +1 -1
  17. package/dist/runtime.d.ts +1 -3
  18. package/dist/runtime.d.ts.map +1 -1
  19. package/dist/runtime.js +29 -40
  20. package/dist/runtime.js.map +7 -0
  21. package/dist/schema.d.ts +13 -3
  22. package/dist/schema.d.ts.map +1 -1
  23. package/dist/schema.js +29 -31
  24. package/dist/schema.js.map +7 -0
  25. package/dist/types.d.ts +1 -39
  26. package/dist/types.d.ts.map +1 -1
  27. package/package.json +22 -23
  28. package/dist/ChatAssistant.d.ts +0 -18
  29. package/dist/ChatAssistant.d.ts.map +0 -1
  30. package/dist/ChatAssistant.js +0 -178
  31. package/dist/SyntroChatbot.d.ts +0 -14
  32. package/dist/SyntroChatbot.d.ts.map +0 -1
  33. package/dist/SyntroChatbot.js +0 -56
  34. package/dist/actionParser.d.ts +0 -15
  35. package/dist/actionParser.d.ts.map +0 -1
  36. package/dist/actionParser.js +0 -52
  37. package/dist/apiClient.d.ts +0 -23
  38. package/dist/apiClient.d.ts.map +0 -1
  39. package/dist/apiClient.js +0 -51
  40. package/dist/cdn.js +0 -37
  41. package/dist/editor.d.ts +0 -17
  42. package/dist/editor.d.ts.map +0 -1
  43. package/dist/editor.js +0 -36
  44. package/dist/runtime-lit.js +0 -32
  45. package/dist/tools/bridge.d.ts +0 -26
  46. package/dist/tools/bridge.d.ts.map +0 -1
  47. package/dist/tools/bridge.js +0 -25
  48. package/dist/tools/expanders.d.ts +0 -17
  49. package/dist/tools/expanders.d.ts.map +0 -1
  50. package/dist/tools/expanders.js +0 -41
  51. package/dist/tools/index.d.ts +0 -14
  52. package/dist/tools/index.d.ts.map +0 -1
  53. package/dist/tools/index.js +0 -11
  54. package/dist/tools/registrations/GetContextTool.d.ts +0 -7
  55. package/dist/tools/registrations/GetContextTool.d.ts.map +0 -1
  56. package/dist/tools/registrations/GetContextTool.js +0 -18
  57. package/dist/tools/registrations/ScrollToTool.d.ts +0 -7
  58. package/dist/tools/registrations/ScrollToTool.d.ts.map +0 -1
  59. package/dist/tools/registrations/ScrollToTool.js +0 -38
  60. package/dist/tools/registrations/ShowOverlayTool.d.ts +0 -7
  61. package/dist/tools/registrations/ShowOverlayTool.d.ts.map +0 -1
  62. package/dist/tools/registrations/ShowOverlayTool.js +0 -47
  63. package/dist/tools/registrations/index.d.ts +0 -19
  64. package/dist/tools/registrations/index.d.ts.map +0 -1
  65. package/dist/tools/registrations/index.js +0 -7
  66. package/dist/types.js +0 -6
  67. package/dist/useChat.d.ts +0 -25
  68. package/dist/useChat.d.ts.map +0 -1
  69. package/dist/useChat.js +0 -106
@@ -0,0 +1,8 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+
5
+ export {
6
+ __publicField
7
+ };
8
+ //# sourceMappingURL=chunk-V6TY7KAL.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Adaptive Chatbot — Editor (Lit web component).
3
+ *
4
+ * Custom element: <se-chatbot-editor>
5
+ *
6
+ * Lit port of editor.tsx. Form-based: edits backendUrl, mlflowRunId,
7
+ * greeting, maxHistory and emits change events. No sub-items, no list view.
8
+ *
9
+ * Properties:
10
+ * - `config: ChatbotConfig | undefined` — current chatbot tile props
11
+ * - `onChange: (updatedAppConfig) => void` — callback fired when a field changes
12
+ *
13
+ * Events (bubbling, composed):
14
+ * - `navigate-home` — back button
15
+ * - `dirty-change` (detail: { dirty: boolean }) — emit dirty=true on first edit
16
+ */
17
+ import { LitElement } from 'lit';
18
+ type AppConfig = Record<string, unknown>;
19
+ export declare class ChatbotEditorLit extends LitElement {
20
+ static properties: {
21
+ config: {
22
+ attribute: boolean;
23
+ };
24
+ onChange: {
25
+ attribute: boolean;
26
+ };
27
+ };
28
+ config: AppConfig | undefined;
29
+ onChange: ((updated: AppConfig) => void) | undefined;
30
+ private _emittedDirty;
31
+ createRenderRoot(): this;
32
+ private _handleField;
33
+ private _navigateHome;
34
+ render(): import("lit-html").TemplateResult<1>;
35
+ }
36
+ export {};
37
+ //# sourceMappingURL=editor-lit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-lit.d.ts","sourceRoot":"","sources":["../src/editor-lit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAIvC,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzC,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,OAAgB,UAAU;;;;;;;MAGxB;IAEF,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAErD,OAAO,CAAC,aAAa,CAAS;IAErB,gBAAgB;IAIzB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,aAAa;IAIZ,MAAM;CAkGhB"}
@@ -0,0 +1,134 @@
1
+ import "./chunk-V6TY7KAL.js";
2
+
3
+ // src/editor-lit.ts
4
+ import { html, LitElement } from "lit";
5
+ var ChatbotEditorLit = class extends LitElement {
6
+ constructor() {
7
+ super(...arguments);
8
+ this._emittedDirty = false;
9
+ }
10
+ createRenderRoot() {
11
+ return this;
12
+ }
13
+ _handleField(field, value) {
14
+ if (!this.config) return;
15
+ const next = { ...this.config, [field]: value };
16
+ this.onChange?.(next);
17
+ if (!this._emittedDirty) {
18
+ this._emittedDirty = true;
19
+ this.dispatchEvent(
20
+ new CustomEvent("dirty-change", {
21
+ detail: { dirty: true },
22
+ bubbles: true,
23
+ composed: true
24
+ })
25
+ );
26
+ }
27
+ }
28
+ _navigateHome() {
29
+ this.dispatchEvent(new CustomEvent("navigate-home", { bubbles: true, composed: true }));
30
+ }
31
+ render() {
32
+ const cfg = this.config ?? {};
33
+ return html`
34
+ <div class="se-flex se-flex-col se-h-full se-font-sans">
35
+ <!-- Header -->
36
+ <div class="se-px-4 se-pt-3 se-pb-1 se-flex se-items-center se-gap-3">
37
+ <button
38
+ type="button"
39
+ @click=${() => this._navigateHome()}
40
+ class="se-py-1.5 se-px-3 se-rounded-md se-border-none se-bg-card-bg se-text-text-primary se-text-sm se-cursor-pointer"
41
+ >← Back</button>
42
+ <div class="se-flex se-flex-col">
43
+ <h2 class="se-m-0 se-text-base se-font-semibold se-text-text-primary">Chat Assistant</h2>
44
+ <p class="se-mt-0.5 se-mb-0 se-text-xs se-text-text-secondary">
45
+ Configure AI chat assistant
46
+ </p>
47
+ </div>
48
+ </div>
49
+
50
+ <div class="se-flex-1 se-overflow-auto se-px-4 se-py-3">
51
+ <!-- API Configuration -->
52
+ <div class="se-mb-6">
53
+ <div
54
+ class="se-text-xs se-font-semibold se-text-text-secondary se-uppercase se-tracking-wide se-mb-3"
55
+ >
56
+ API Configuration
57
+ </div>
58
+
59
+ <label class="se-block se-mb-3">
60
+ <span class="se-block se-text-xs se-text-text-secondary se-mb-1">Backend URL</span>
61
+ <input
62
+ type="text"
63
+ .value=${cfg.backendUrl ?? ""}
64
+ placeholder="/api/chat/message"
65
+ class="se-w-full se-py-2 se-px-3 se-rounded-md se-border se-border-input-field-border se-bg-input-field-bg se-text-text-primary se-text-sm focus:se-outline-none focus:se-border-input-field-border-selected"
66
+ @input=${(e) => this._handleField("backendUrl", e.target.value)}
67
+ />
68
+ </label>
69
+
70
+ <label class="se-block se-mb-3">
71
+ <span class="se-block se-text-xs se-text-text-secondary se-mb-1">
72
+ MLflow Run ID (optional)
73
+ </span>
74
+ <input
75
+ type="text"
76
+ .value=${cfg.mlflowRunId ?? ""}
77
+ placeholder="e.g., abc123"
78
+ class="se-w-full se-py-2 se-px-3 se-rounded-md se-border se-border-input-field-border se-bg-input-field-bg se-text-text-primary se-text-sm focus:se-outline-none focus:se-border-input-field-border-selected"
79
+ @input=${(e) => this._handleField("mlflowRunId", e.target.value)}
80
+ />
81
+ </label>
82
+ </div>
83
+
84
+ <!-- Chat Settings -->
85
+ <div class="se-mb-6">
86
+ <div
87
+ class="se-text-xs se-font-semibold se-text-text-secondary se-uppercase se-tracking-wide se-mb-3"
88
+ >
89
+ Chat Settings
90
+ </div>
91
+
92
+ <label class="se-block se-mb-3">
93
+ <span class="se-block se-text-xs se-text-text-secondary se-mb-1">Greeting Message</span>
94
+ <textarea
95
+ aria-label="Greeting Message"
96
+ .value=${cfg.greeting ?? ""}
97
+ placeholder="Hi! How can I help?"
98
+ rows="2"
99
+ class="se-w-full se-py-2 se-px-3 se-rounded-md se-border se-border-input-field-border se-bg-input-field-bg se-text-text-primary se-text-sm se-resize-none focus:se-outline-none focus:se-border-input-field-border-selected"
100
+ @input=${(e) => this._handleField("greeting", e.target.value)}
101
+ ></textarea>
102
+ </label>
103
+
104
+ <label class="se-block se-mb-3">
105
+ <span class="se-block se-text-xs se-text-text-secondary se-mb-1">
106
+ Max History (messages sent to backend)
107
+ </span>
108
+ <input
109
+ type="number"
110
+ .value=${String(cfg.maxHistory ?? 20)}
111
+ min="1"
112
+ max="100"
113
+ class="se-w-full se-py-2 se-px-3 se-rounded-md se-border se-border-input-field-border se-bg-input-field-bg se-text-text-primary se-text-sm focus:se-outline-none focus:se-border-input-field-border-selected"
114
+ @input=${(e) => {
115
+ const n = parseInt(e.target.value, 10);
116
+ if (!Number.isNaN(n)) this._handleField("maxHistory", n);
117
+ }}
118
+ />
119
+ </label>
120
+ </div>
121
+ </div>
122
+ </div>
123
+ `;
124
+ }
125
+ };
126
+ ChatbotEditorLit.properties = {
127
+ config: { attribute: false },
128
+ onChange: { attribute: false }
129
+ };
130
+ customElements.define("se-chatbot-editor", ChatbotEditorLit);
131
+ export {
132
+ ChatbotEditorLit
133
+ };
134
+ //# sourceMappingURL=editor-lit.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/editor-lit.ts"],
4
+ "sourcesContent": ["/**\n * Adaptive Chatbot \u2014 Editor (Lit web component).\n *\n * Custom element: <se-chatbot-editor>\n *\n * Lit port of editor.tsx. Form-based: edits backendUrl, mlflowRunId,\n * greeting, maxHistory and emits change events. No sub-items, no list view.\n *\n * Properties:\n * - `config: ChatbotConfig | undefined` \u2014 current chatbot tile props\n * - `onChange: (updatedAppConfig) => void` \u2014 callback fired when a field changes\n *\n * Events (bubbling, composed):\n * - `navigate-home` \u2014 back button\n * - `dirty-change` (detail: { dirty: boolean }) \u2014 emit dirty=true on first edit\n */\n\nimport { html, LitElement } from 'lit';\n\nimport type { ChatbotConfig } from './types';\n\ntype AppConfig = Record<string, unknown>;\n\nexport class ChatbotEditorLit extends LitElement {\n static override properties = {\n config: { attribute: false },\n onChange: { attribute: false },\n };\n\n config: AppConfig | undefined;\n onChange: ((updated: AppConfig) => void) | undefined;\n\n private _emittedDirty = false;\n\n override createRenderRoot() {\n return this;\n }\n\n private _handleField(field: keyof ChatbotConfig, value: string | number) {\n if (!this.config) return;\n const next = { ...(this.config as Partial<ChatbotConfig>), [field]: value };\n this.onChange?.(next as AppConfig);\n\n if (!this._emittedDirty) {\n this._emittedDirty = true;\n this.dispatchEvent(\n new CustomEvent('dirty-change', {\n detail: { dirty: true },\n bubbles: true,\n composed: true,\n })\n );\n }\n }\n\n private _navigateHome() {\n this.dispatchEvent(new CustomEvent('navigate-home', { bubbles: true, composed: true }));\n }\n\n override render() {\n const cfg = (this.config ?? {}) as Partial<ChatbotConfig>;\n\n return html`\n <div class=\"se-flex se-flex-col se-h-full se-font-sans\">\n <!-- Header -->\n <div class=\"se-px-4 se-pt-3 se-pb-1 se-flex se-items-center se-gap-3\">\n <button\n type=\"button\"\n @click=${() => this._navigateHome()}\n class=\"se-py-1.5 se-px-3 se-rounded-md se-border-none se-bg-card-bg se-text-text-primary se-text-sm se-cursor-pointer\"\n >\u2190 Back</button>\n <div class=\"se-flex se-flex-col\">\n <h2 class=\"se-m-0 se-text-base se-font-semibold se-text-text-primary\">Chat Assistant</h2>\n <p class=\"se-mt-0.5 se-mb-0 se-text-xs se-text-text-secondary\">\n Configure AI chat assistant\n </p>\n </div>\n </div>\n\n <div class=\"se-flex-1 se-overflow-auto se-px-4 se-py-3\">\n <!-- API Configuration -->\n <div class=\"se-mb-6\">\n <div\n class=\"se-text-xs se-font-semibold se-text-text-secondary se-uppercase se-tracking-wide se-mb-3\"\n >\n API Configuration\n </div>\n\n <label class=\"se-block se-mb-3\">\n <span class=\"se-block se-text-xs se-text-text-secondary se-mb-1\">Backend URL</span>\n <input\n type=\"text\"\n .value=${cfg.backendUrl ?? ''}\n placeholder=\"/api/chat/message\"\n class=\"se-w-full se-py-2 se-px-3 se-rounded-md se-border se-border-input-field-border se-bg-input-field-bg se-text-text-primary se-text-sm focus:se-outline-none focus:se-border-input-field-border-selected\"\n @input=${(e: Event) =>\n this._handleField('backendUrl', (e.target as HTMLInputElement).value)}\n />\n </label>\n\n <label class=\"se-block se-mb-3\">\n <span class=\"se-block se-text-xs se-text-text-secondary se-mb-1\">\n MLflow Run ID (optional)\n </span>\n <input\n type=\"text\"\n .value=${cfg.mlflowRunId ?? ''}\n placeholder=\"e.g., abc123\"\n class=\"se-w-full se-py-2 se-px-3 se-rounded-md se-border se-border-input-field-border se-bg-input-field-bg se-text-text-primary se-text-sm focus:se-outline-none focus:se-border-input-field-border-selected\"\n @input=${(e: Event) =>\n this._handleField('mlflowRunId', (e.target as HTMLInputElement).value)}\n />\n </label>\n </div>\n\n <!-- Chat Settings -->\n <div class=\"se-mb-6\">\n <div\n class=\"se-text-xs se-font-semibold se-text-text-secondary se-uppercase se-tracking-wide se-mb-3\"\n >\n Chat Settings\n </div>\n\n <label class=\"se-block se-mb-3\">\n <span class=\"se-block se-text-xs se-text-text-secondary se-mb-1\">Greeting Message</span>\n <textarea\n aria-label=\"Greeting Message\"\n .value=${cfg.greeting ?? ''}\n placeholder=\"Hi! How can I help?\"\n rows=\"2\"\n class=\"se-w-full se-py-2 se-px-3 se-rounded-md se-border se-border-input-field-border se-bg-input-field-bg se-text-text-primary se-text-sm se-resize-none focus:se-outline-none focus:se-border-input-field-border-selected\"\n @input=${(e: Event) =>\n this._handleField('greeting', (e.target as HTMLTextAreaElement).value)}\n ></textarea>\n </label>\n\n <label class=\"se-block se-mb-3\">\n <span class=\"se-block se-text-xs se-text-text-secondary se-mb-1\">\n Max History (messages sent to backend)\n </span>\n <input\n type=\"number\"\n .value=${String(cfg.maxHistory ?? 20)}\n min=\"1\"\n max=\"100\"\n class=\"se-w-full se-py-2 se-px-3 se-rounded-md se-border se-border-input-field-border se-bg-input-field-bg se-text-text-primary se-text-sm focus:se-outline-none focus:se-border-input-field-border-selected\"\n @input=${(e: Event) => {\n const n = parseInt((e.target as HTMLInputElement).value, 10);\n if (!Number.isNaN(n)) this._handleField('maxHistory', n);\n }}\n />\n </label>\n </div>\n </div>\n </div>\n `;\n }\n}\n\ncustomElements.define('se-chatbot-editor', ChatbotEditorLit);\n"],
5
+ "mappings": ";;;AAiBA,SAAS,MAAM,kBAAkB;AAM1B,IAAM,mBAAN,cAA+B,WAAW;AAAA,EAA1C;AAAA;AASL,SAAQ,gBAAgB;AAAA;AAAA,EAEf,mBAAmB;AAC1B,WAAO;AAAA,EACT;AAAA,EAEQ,aAAa,OAA4B,OAAwB;AACvE,QAAI,CAAC,KAAK,OAAQ;AAClB,UAAM,OAAO,EAAE,GAAI,KAAK,QAAmC,CAAC,KAAK,GAAG,MAAM;AAC1E,SAAK,WAAW,IAAiB;AAEjC,QAAI,CAAC,KAAK,eAAe;AACvB,WAAK,gBAAgB;AACrB,WAAK;AAAA,QACH,IAAI,YAAY,gBAAgB;AAAA,UAC9B,QAAQ,EAAE,OAAO,KAAK;AAAA,UACtB,SAAS;AAAA,UACT,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,gBAAgB;AACtB,SAAK,cAAc,IAAI,YAAY,iBAAiB,EAAE,SAAS,MAAM,UAAU,KAAK,CAAC,CAAC;AAAA,EACxF;AAAA,EAES,SAAS;AAChB,UAAM,MAAO,KAAK,UAAU,CAAC;AAE7B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAMU,MAAM,KAAK,cAAc,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAwBtB,IAAI,cAAc,EAAE;AAAA;AAAA;AAAA,yBAGpB,CAAC,MACR,KAAK,aAAa,cAAe,EAAE,OAA4B,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAU9D,IAAI,eAAe,EAAE;AAAA;AAAA;AAAA,yBAGrB,CAAC,MACR,KAAK,aAAa,eAAgB,EAAE,OAA4B,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAiB/D,IAAI,YAAY,EAAE;AAAA;AAAA;AAAA;AAAA,yBAIlB,CAAC,MACR,KAAK,aAAa,YAAa,EAAE,OAA+B,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAU/D,OAAO,IAAI,cAAc,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA,yBAI5B,CAAC,MAAa;AACrB,YAAM,IAAI,SAAU,EAAE,OAA4B,OAAO,EAAE;AAC3D,UAAI,CAAC,OAAO,MAAM,CAAC,EAAG,MAAK,aAAa,cAAc,CAAC;AAAA,IACzD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOf;AACF;AAtIa,iBACK,aAAa;AAAA,EAC3B,QAAQ,EAAE,WAAW,MAAM;AAAA,EAC3B,UAAU,EAAE,WAAW,MAAM;AAC/B;AAoIF,eAAe,OAAO,qBAAqB,gBAAgB;",
6
+ "names": []
7
+ }
@@ -1,29 +1,8 @@
1
1
  /**
2
2
  * Adaptive Chatbot - Runtime Module (Lit)
3
3
  *
4
- * Runtime manifest for the AI chat assistant adaptive.
5
- * Uses the Lit web component mountable instead of the React one.
6
- * This is a widget-based adaptive with no action executors.
4
+ * Now identical to the default runtime since there is no React path.
5
+ * Kept for backward compatibility with existing import paths.
7
6
  */
8
- export declare const runtime: {
9
- id: string;
10
- version: string;
11
- name: string;
12
- description: string;
13
- /** No action executors — chatbot uses existing action kinds via applyBatch */
14
- executors: never[];
15
- /** Widget definitions for the runtime's WidgetRegistry */
16
- widgets: {
17
- id: string;
18
- component: {
19
- mount(container: HTMLElement, mountConfig?: Record<string, unknown>): () => void;
20
- };
21
- metadata: {
22
- name: string;
23
- description: string;
24
- icon: string;
25
- };
26
- }[];
27
- };
28
- export default runtime;
7
+ export { runtime, runtime as default } from './runtime';
29
8
  //# sourceMappingURL=runtime-lit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-lit.d.ts","sourceRoot":"","sources":["../src/runtime-lit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,eAAO,MAAM,OAAO;;;;;IAMlB,8EAA8E;;IAG9E,0DAA0D;;;;;;;;;;;;CAY3D,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"runtime-lit.d.ts","sourceRoot":"","sources":["../src/runtime-lit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC"}
package/dist/runtime.d.ts CHANGED
@@ -2,16 +2,14 @@
2
2
  * Adaptive Chatbot - Runtime Module
3
3
  *
4
4
  * Runtime manifest for the AI chat assistant adaptive.
5
- * This is a widget-based adaptive with no action executors.
5
+ * Uses @syntrologie/chat for the UI no React dependency.
6
6
  */
7
7
  export declare const runtime: {
8
8
  id: string;
9
9
  version: string;
10
10
  name: string;
11
11
  description: string;
12
- /** No action executors — chatbot uses existing action kinds via applyBatch */
13
12
  executors: never[];
14
- /** Widget definitions for the runtime's WidgetRegistry */
15
13
  widgets: {
16
14
  id: string;
17
15
  component: {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,eAAO,MAAM,OAAO;;;;;IAMlB,8EAA8E;;IAG9E,0DAA0D;;;;;;;;;;;;CAqB3D,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;CAmBnB,CAAC;AAEF,eAAe,OAAO,CAAC"}
package/dist/runtime.js CHANGED
@@ -1,41 +1,30 @@
1
- /**
2
- * Adaptive Chatbot - Runtime Module
3
- *
4
- * Runtime manifest for the AI chat assistant adaptive.
5
- * This is a widget-based adaptive with no action executors.
6
- */
7
- import { ChatAssistantMountableWidget } from './ChatAssistant';
8
- import { ChatAssistantLitMountable } from './ChatAssistantLit';
9
- // ============================================================================
10
- // App Runtime Manifest
11
- // ============================================================================
12
- export const runtime = {
13
- id: 'adaptive-chatbot',
14
- version: '1.0.0',
15
- name: 'Chat Assistant',
16
- description: 'AI chat assistant with action execution capabilities',
17
- /** No action executors — chatbot uses existing action kinds via applyBatch */
18
- executors: [],
19
- /** Widget definitions for the runtime's WidgetRegistry */
20
- widgets: [
21
- {
22
- id: 'adaptive-chatbot:assistant',
23
- component: ChatAssistantMountableWidget,
24
- metadata: {
25
- name: 'Chat Assistant',
26
- description: 'AI-powered chat assistant that can execute DOM actions',
27
- icon: '💬',
28
- },
29
- },
30
- {
31
- id: 'adaptive-chatbot:assistant-lit',
32
- component: ChatAssistantLitMountable,
33
- metadata: {
34
- name: 'Chat Assistant (Lit)',
35
- description: 'Lit web component chat assistant — no React dependency',
36
- icon: '💬',
37
- },
38
- },
39
- ],
1
+ import {
2
+ ChatAssistantLitMountable
3
+ } from "./chunk-FI7F22ED.js";
4
+ import "./chunk-V6TY7KAL.js";
5
+
6
+ // src/runtime.ts
7
+ var runtime = {
8
+ id: "adaptive-chatbot",
9
+ version: "2.0.0",
10
+ name: "Chat Assistant",
11
+ description: "AI chat assistant powered by @syntrologie/chat with SSE transport",
12
+ executors: [],
13
+ widgets: [
14
+ {
15
+ id: "adaptive-chatbot:assistant",
16
+ component: ChatAssistantLitMountable,
17
+ metadata: {
18
+ name: "Chat Assistant",
19
+ description: "AI-powered chat assistant with SSE streaming and A2UI support",
20
+ icon: "\u{1F4AC}"
21
+ }
22
+ }
23
+ ]
40
24
  };
41
- export default runtime;
25
+ var runtime_default = runtime;
26
+ export {
27
+ runtime_default as default,
28
+ runtime
29
+ };
30
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/runtime.ts"],
4
+ "sourcesContent": ["/**\n * Adaptive Chatbot - Runtime Module\n *\n * Runtime manifest for the AI chat assistant adaptive.\n * Uses @syntrologie/chat for the UI \u2014 no React dependency.\n */\n\nimport { ChatAssistantLitMountable } from './ChatAssistantLit';\n\nexport const runtime = {\n id: 'adaptive-chatbot',\n version: '2.0.0',\n name: 'Chat Assistant',\n description: 'AI chat assistant powered by @syntrologie/chat with SSE transport',\n\n executors: [],\n\n widgets: [\n {\n id: 'adaptive-chatbot:assistant',\n component: ChatAssistantLitMountable,\n metadata: {\n name: 'Chat Assistant',\n description: 'AI-powered chat assistant with SSE streaming and A2UI support',\n icon: '\uD83D\uDCAC',\n },\n },\n ],\n};\n\nexport default runtime;\n"],
5
+ "mappings": ";;;;;;AASO,IAAM,UAAU;AAAA,EACrB,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,MAAM;AAAA,EACN,aAAa;AAAA,EAEb,WAAW,CAAC;AAAA,EAEZ,SAAS;AAAA,IACP;AAAA,MACE,IAAI;AAAA,MACJ,WAAW;AAAA,MACX,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,kBAAQ;",
6
+ "names": []
7
+ }
package/dist/schema.d.ts CHANGED
@@ -13,27 +13,33 @@ export declare const configSchema: z.ZodObject<{
13
13
  greeting: z.ZodDefault<z.ZodString>;
14
14
  /** Maximum number of history messages sent to the backend */
15
15
  maxHistory: z.ZodDefault<z.ZodNumber>;
16
+ /** Quick-reply suggestions shown in the empty state */
17
+ suggestions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
16
18
  }, "strip", z.ZodTypeAny, {
17
19
  backendUrl: string;
18
20
  greeting: string;
19
21
  maxHistory: number;
22
+ suggestions?: string[] | undefined;
20
23
  mlflowRunId?: string | undefined;
21
24
  }, {
22
25
  backendUrl: string;
26
+ suggestions?: string[] | undefined;
27
+ mlflowRunId?: string | undefined;
23
28
  greeting?: string | undefined;
24
29
  maxHistory?: number | undefined;
25
- mlflowRunId?: string | undefined;
26
30
  }>;
27
31
  export type ChatbotConfigSchema = z.infer<typeof configSchema>;
28
32
  export declare function validateChatbotConfig(data: unknown): z.SafeParseReturnType<{
29
33
  backendUrl: string;
34
+ suggestions?: string[] | undefined;
35
+ mlflowRunId?: string | undefined;
30
36
  greeting?: string | undefined;
31
37
  maxHistory?: number | undefined;
32
- mlflowRunId?: string | undefined;
33
38
  }, {
34
39
  backendUrl: string;
35
40
  greeting: string;
36
41
  maxHistory: number;
42
+ suggestions?: string[] | undefined;
37
43
  mlflowRunId?: string | undefined;
38
44
  }>;
39
45
  /**
@@ -53,16 +59,20 @@ export declare const tileWidgets: {
53
59
  greeting: z.ZodDefault<z.ZodString>;
54
60
  /** Maximum number of history messages sent to the backend */
55
61
  maxHistory: z.ZodDefault<z.ZodNumber>;
62
+ /** Quick-reply suggestions shown in the empty state */
63
+ suggestions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
56
64
  }, "strip", z.ZodTypeAny, {
57
65
  backendUrl: string;
58
66
  greeting: string;
59
67
  maxHistory: number;
68
+ suggestions?: string[] | undefined;
60
69
  mlflowRunId?: string | undefined;
61
70
  }, {
62
71
  backendUrl: string;
72
+ suggestions?: string[] | undefined;
73
+ mlflowRunId?: string | undefined;
63
74
  greeting?: string | undefined;
64
75
  maxHistory?: number | undefined;
65
- mlflowRunId?: string | undefined;
66
76
  }>;
67
77
  }[];
68
78
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;IACvB,4CAA4C;;IAE5C,4CAA4C;;IAE5C,iDAAiD;;IAEjD,6DAA6D;;;;;;;;;;;;EAE7D,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAE/D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;GAElD;AAMD;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;QAzBtB,4CAA4C;;QAE5C,4CAA4C;;QAE5C,iDAAiD;;QAEjD,6DAA6D;;;;;;;;;;;;;GAyB9D,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;IACvB,4CAA4C;;IAE5C,4CAA4C;;IAE5C,iDAAiD;;IAEjD,6DAA6D;;IAE7D,uDAAuD;;;;;;;;;;;;;;EAEvD,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAE/D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;GAElD;AAMD;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;QA3BtB,4CAA4C;;QAE5C,4CAA4C;;QAE5C,iDAAiD;;QAEjD,6DAA6D;;QAE7D,uDAAuD;;;;;;;;;;;;;;;GAyBxD,CAAC"}
package/dist/schema.js CHANGED
@@ -1,34 +1,32 @@
1
- /**
2
- * Adaptive Chatbot - Config Schema
3
- *
4
- * Zod schema for validating chatbot widget configuration.
5
- */
6
- import { z } from 'zod';
7
- export const configSchema = z.object({
8
- /** Backend URL for the chat API endpoint */
9
- backendUrl: z.string().min(1, 'Backend URL is required'),
10
- /** MLflow run ID for experiment tracking */
11
- mlflowRunId: z.string().optional(),
12
- /** Greeting message shown when the chat opens */
13
- greeting: z.string().default('Hi! How can I help?'),
14
- /** Maximum number of history messages sent to the backend */
15
- maxHistory: z.number().int().min(1).max(100).default(20),
1
+ import "./chunk-V6TY7KAL.js";
2
+
3
+ // src/schema.ts
4
+ import { z } from "zod";
5
+ var configSchema = z.object({
6
+ /** Backend URL for the chat API endpoint */
7
+ backendUrl: z.string().min(1, "Backend URL is required"),
8
+ /** MLflow run ID for experiment tracking */
9
+ mlflowRunId: z.string().optional(),
10
+ /** Greeting message shown when the chat opens */
11
+ greeting: z.string().default("Hi! How can I help?"),
12
+ /** Maximum number of history messages sent to the backend */
13
+ maxHistory: z.number().int().min(1).max(100).default(20),
14
+ /** Quick-reply suggestions shown in the empty state */
15
+ suggestions: z.array(z.string()).optional()
16
16
  });
17
- export function validateChatbotConfig(data) {
18
- return configSchema.safeParse(data);
17
+ function validateChatbotConfig(data) {
18
+ return configSchema.safeParse(data);
19
19
  }
20
- // ============================================================================
21
- // Tile Widget Props Export
22
- // ============================================================================
23
- /**
24
- * Tile widget definitions for unified JSON Schema generation.
25
- * Maps widget IDs to their props validation schema so the build script
26
- * can inject if/then constraints on tile.props.
27
- */
28
- export const tileWidgets = [
29
- {
30
- widget: 'adaptive-chatbot:assistant',
31
- defName: 'chatbotAssistantProps',
32
- propsSchema: configSchema,
33
- },
20
+ var tileWidgets = [
21
+ {
22
+ widget: "adaptive-chatbot:assistant",
23
+ defName: "chatbotAssistantProps",
24
+ propsSchema: configSchema
25
+ }
34
26
  ];
27
+ export {
28
+ configSchema,
29
+ tileWidgets,
30
+ validateChatbotConfig
31
+ };
32
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/schema.ts"],
4
+ "sourcesContent": ["/**\n * Adaptive Chatbot - Config Schema\n *\n * Zod schema for validating chatbot widget configuration.\n */\n\nimport { z } from 'zod';\n\nexport const configSchema = z.object({\n /** Backend URL for the chat API endpoint */\n backendUrl: z.string().min(1, 'Backend URL is required'),\n /** MLflow run ID for experiment tracking */\n mlflowRunId: z.string().optional(),\n /** Greeting message shown when the chat opens */\n greeting: z.string().default('Hi! How can I help?'),\n /** Maximum number of history messages sent to the backend */\n maxHistory: z.number().int().min(1).max(100).default(20),\n /** Quick-reply suggestions shown in the empty state */\n suggestions: z.array(z.string()).optional(),\n});\n\nexport type ChatbotConfigSchema = z.infer<typeof configSchema>;\n\nexport function validateChatbotConfig(data: unknown) {\n return configSchema.safeParse(data);\n}\n\n// ============================================================================\n// Tile Widget Props Export\n// ============================================================================\n\n/**\n * Tile widget definitions for unified JSON Schema generation.\n * Maps widget IDs to their props validation schema so the build script\n * can inject if/then constraints on tile.props.\n */\nexport const tileWidgets = [\n {\n widget: 'adaptive-chatbot:assistant',\n defName: 'chatbotAssistantProps',\n propsSchema: configSchema,\n },\n];\n"],
5
+ "mappings": ";;;AAMA,SAAS,SAAS;AAEX,IAAM,eAAe,EAAE,OAAO;AAAA;AAAA,EAEnC,YAAY,EAAE,OAAO,EAAE,IAAI,GAAG,yBAAyB;AAAA;AAAA,EAEvD,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAEjC,UAAU,EAAE,OAAO,EAAE,QAAQ,qBAAqB;AAAA;AAAA,EAElD,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAAA;AAAA,EAEvD,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAC5C,CAAC;AAIM,SAAS,sBAAsB,MAAe;AACnD,SAAO,aAAa,UAAU,IAAI;AACpC;AAWO,IAAM,cAAc;AAAA,EACzB;AAAA,IACE,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACF;",
6
+ "names": []
7
+ }
package/dist/types.d.ts CHANGED
@@ -1,41 +1,12 @@
1
1
  /**
2
2
  * Adaptive Chatbot - Types
3
- *
4
- * Type definitions for the AI chat assistant adaptive.
5
3
  */
6
- export type MessageRole = 'user' | 'assistant';
7
- export interface ChatMessage {
8
- id: string;
9
- role: MessageRole;
10
- text: string;
11
- timestamp: number;
12
- }
13
- export interface ChatApiRequest {
14
- message: string;
15
- history: Array<{
16
- role: MessageRole;
17
- content: string;
18
- }>;
19
- mlflow_run_id?: string;
20
- current_config?: Record<string, unknown>;
21
- }
22
- export interface ChatApiResponse {
23
- response: string;
24
- success: boolean;
25
- }
26
- export interface ActionBlock {
27
- kind: string;
28
- [key: string]: unknown;
29
- }
30
- export interface ParsedResponse {
31
- displayText: string;
32
- actions: ActionBlock[];
33
- }
34
4
  export interface ChatbotConfig {
35
5
  backendUrl: string;
36
6
  mlflowRunId?: string;
37
7
  greeting?: string;
38
8
  maxHistory?: number;
9
+ suggestions?: string[];
39
10
  }
40
11
  export interface ActionHandle {
41
12
  id: string;
@@ -57,15 +28,6 @@ export interface ChatbotWidgetRuntime {
57
28
  events: {
58
29
  publish: (name: string, props?: Record<string, unknown>) => void;
59
30
  };
60
- getActiveSignals: () => ActiveSignal[];
61
- getContextConfig: () => ContextConfig;
62
- }
63
- /** A behavioral signal that has fired in the current browser session */
64
- export interface ActiveSignal {
65
- name: string;
66
- firedAt: number;
67
31
  }
68
- /** Workspace-configured key/value pairs injected into get_context responses */
69
- export type ContextConfig = Record<string, unknown>;
70
32
  export type { EditorPanelProps } from '@syntrologie/sdk-contracts';
71
33
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAMD,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE;QACN,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;KAClE,CAAC;IAEF,gBAAgB,EAAE,MAAM,YAAY,EAAE,CAAC;IACvC,gBAAgB,EAAE,MAAM,aAAa,CAAC;CACvC;AAMD,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,+EAA+E;AAC/E,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAMpD,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE;QACN,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;KAClE,CAAC;CACH;AAED,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC"}