@artooi/ag-ui-web-component 0.1.0 → 0.2.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 (109) hide show
  1. package/CHANGELOG.md +102 -2
  2. package/README.md +235 -47
  3. package/dist/ag-ui-web-component.bundle.js +451 -46
  4. package/dist/ag-ui-web-component.bundle.js.map +4 -4
  5. package/dist/constants.d.ts +34 -0
  6. package/dist/constants.d.ts.map +1 -1
  7. package/dist/{ag_ui_chat.d.ts → core/ag_ui_chat.d.ts} +63 -6
  8. package/dist/core/ag_ui_chat.d.ts.map +1 -0
  9. package/dist/core/agui_client.d.ts.map +1 -0
  10. package/dist/core/conversation_store.d.ts.map +1 -0
  11. package/dist/core/create_http_agent.d.ts.map +1 -0
  12. package/dist/core/define_ag_ui_chat.d.ts.map +1 -0
  13. package/dist/dom/animations.d.ts +71 -0
  14. package/dist/dom/animations.d.ts.map +1 -0
  15. package/dist/{dom_driver.d.ts → dom/dom_driver.d.ts} +7 -1
  16. package/dist/dom/dom_driver.d.ts.map +1 -0
  17. package/dist/dom/native_setter.d.ts +5 -0
  18. package/dist/dom/native_setter.d.ts.map +1 -0
  19. package/dist/index.d.ts +19 -16
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +3886 -388
  22. package/dist/index.js.map +4 -4
  23. package/dist/skills/fill_template.d.ts +17 -0
  24. package/dist/skills/fill_template.d.ts.map +1 -0
  25. package/dist/skills/parse_skills.d.ts +8 -0
  26. package/dist/skills/parse_skills.d.ts.map +1 -0
  27. package/dist/skills/skill.d.ts +24 -0
  28. package/dist/skills/skill.d.ts.map +1 -0
  29. package/dist/{client_tool_registry.d.ts → tools/client_tool_registry.d.ts} +6 -1
  30. package/dist/tools/client_tool_registry.d.ts.map +1 -0
  31. package/dist/tools/is_destructive.d.ts.map +1 -0
  32. package/dist/tools/is_navigates.d.ts.map +1 -0
  33. package/dist/tools/page_map.d.ts.map +1 -0
  34. package/dist/tools/route_map.d.ts +40 -0
  35. package/dist/tools/route_map.d.ts.map +1 -0
  36. package/dist/tools/state_hook.d.ts.map +1 -0
  37. package/dist/ui/confirmation_card.d.ts +22 -0
  38. package/dist/ui/confirmation_card.d.ts.map +1 -0
  39. package/dist/ui/render_markdown.d.ts +13 -0
  40. package/dist/ui/render_markdown.d.ts.map +1 -0
  41. package/dist/ui/reveal_words.d.ts +8 -0
  42. package/dist/ui/reveal_words.d.ts.map +1 -0
  43. package/dist/ui/skills_menu.d.ts +35 -0
  44. package/dist/ui/skills_menu.d.ts.map +1 -0
  45. package/dist/ui/styles.d.ts +2 -0
  46. package/dist/ui/styles.d.ts.map +1 -0
  47. package/dist/ui/tool_call_card.d.ts +35 -0
  48. package/dist/ui/tool_call_card.d.ts.map +1 -0
  49. package/package.json +5 -3
  50. package/src/constants.ts +38 -0
  51. package/src/core/ag_ui_chat.ts +786 -0
  52. package/src/{agui_client.ts → core/agui_client.ts} +1 -1
  53. package/src/{define_ag_ui_chat.ts → core/define_ag_ui_chat.ts} +1 -1
  54. package/src/dom/animations.ts +201 -0
  55. package/src/{dom_driver.ts → dom/dom_driver.ts} +35 -2
  56. package/src/dom/native_setter.ts +42 -0
  57. package/src/index.ts +61 -32
  58. package/src/skills/fill_template.ts +32 -0
  59. package/src/skills/parse_skills.ts +26 -0
  60. package/src/skills/skill.ts +23 -0
  61. package/src/{client_tool_registry.ts → tools/client_tool_registry.ts} +6 -4
  62. package/src/{is_destructive.ts → tools/is_destructive.ts} +1 -1
  63. package/src/{is_navigates.ts → tools/is_navigates.ts} +1 -1
  64. package/src/tools/route_map.ts +140 -0
  65. package/src/{state_hook.ts → tools/state_hook.ts} +1 -1
  66. package/src/ui/confirmation_card.ts +71 -0
  67. package/src/ui/render_markdown.ts +68 -0
  68. package/src/ui/reveal_words.ts +41 -0
  69. package/src/ui/skills_menu.ts +171 -0
  70. package/src/ui/styles.ts +631 -0
  71. package/src/{tool_call_card.ts → ui/tool_call_card.ts} +50 -19
  72. package/src/version.ts +1 -1
  73. package/dist/ag_ui_chat.d.ts.map +0 -1
  74. package/dist/agui_client.d.ts.map +0 -1
  75. package/dist/animations.d.ts +0 -33
  76. package/dist/animations.d.ts.map +0 -1
  77. package/dist/client_tool_registry.d.ts.map +0 -1
  78. package/dist/confirmation_modal.d.ts +0 -14
  79. package/dist/confirmation_modal.d.ts.map +0 -1
  80. package/dist/conversation_store.d.ts.map +0 -1
  81. package/dist/create_http_agent.d.ts.map +0 -1
  82. package/dist/define_ag_ui_chat.d.ts.map +0 -1
  83. package/dist/dom_driver.d.ts.map +0 -1
  84. package/dist/is_destructive.d.ts.map +0 -1
  85. package/dist/is_navigates.d.ts.map +0 -1
  86. package/dist/page_map.d.ts.map +0 -1
  87. package/dist/route_map.d.ts +0 -27
  88. package/dist/route_map.d.ts.map +0 -1
  89. package/dist/state_hook.d.ts.map +0 -1
  90. package/dist/styles.d.ts +0 -2
  91. package/dist/styles.d.ts.map +0 -1
  92. package/dist/tool_call_card.d.ts +0 -29
  93. package/dist/tool_call_card.d.ts.map +0 -1
  94. package/src/ag_ui_chat.ts +0 -411
  95. package/src/animations.ts +0 -86
  96. package/src/confirmation_modal.ts +0 -69
  97. package/src/route_map.ts +0 -83
  98. package/src/styles.ts +0 -296
  99. /package/dist/{agui_client.d.ts → core/agui_client.d.ts} +0 -0
  100. /package/dist/{conversation_store.d.ts → core/conversation_store.d.ts} +0 -0
  101. /package/dist/{create_http_agent.d.ts → core/create_http_agent.d.ts} +0 -0
  102. /package/dist/{define_ag_ui_chat.d.ts → core/define_ag_ui_chat.d.ts} +0 -0
  103. /package/dist/{is_destructive.d.ts → tools/is_destructive.d.ts} +0 -0
  104. /package/dist/{is_navigates.d.ts → tools/is_navigates.d.ts} +0 -0
  105. /package/dist/{page_map.d.ts → tools/page_map.d.ts} +0 -0
  106. /package/dist/{state_hook.d.ts → tools/state_hook.d.ts} +0 -0
  107. /package/src/{conversation_store.ts → core/conversation_store.ts} +0 -0
  108. /package/src/{create_http_agent.ts → core/create_http_agent.ts} +0 -0
  109. /package/src/{page_map.ts → tools/page_map.ts} +0 -0
@@ -1,8 +1,11 @@
1
- import { TOOL_CALL_STATUS } from "./constants.js";
1
+ import { TOOL_CALL_STATUS, TOOL_DISPLAY } from "../constants.js";
2
2
 
3
3
  /** Any state a tool-call card can be in. */
4
4
  export type ToolCallStatus = (typeof TOOL_CALL_STATUS)[keyof typeof TOOL_CALL_STATUS];
5
5
 
6
+ /** How much detail a card renders. */
7
+ export type ToolDisplayMode = (typeof TOOL_DISPLAY)[keyof typeof TOOL_DISPLAY];
8
+
6
9
  /** The terminal states a card settles into (everything but `pending`). */
7
10
  export type SettledStatus = Exclude<ToolCallStatus, typeof TOOL_CALL_STATUS.PENDING>;
8
11
 
@@ -14,7 +17,7 @@ const STATUS_LABEL: Record<ToolCallStatus, string> = {
14
17
  [TOOL_CALL_STATUS.DECLINED]: "⊘ declined",
15
18
  };
16
19
 
17
- /** Toggle-button label for each settled outcome's collapsible body. */
20
+ /** Toggle-button label for each settled outcome's collapsible body (full mode). */
18
21
  const RESULT_LABEL: Record<SettledStatus, string> = {
19
22
  [TOOL_CALL_STATUS.DONE]: "Result",
20
23
  [TOOL_CALL_STATUS.ERROR]: "Error",
@@ -24,10 +27,14 @@ const RESULT_LABEL: Record<SettledStatus, string> = {
24
27
  /**
25
28
  * A live tool-call card for the chat transcript.
26
29
  *
27
- * Construction renders the tool name, its pretty-printed arguments, and a
28
- * `running…` status pill. {@link settle} later flips the pill to the outcome
29
- * and appends a click-to-expand body holding the result (or error / decline
30
- * message), collapsed by default.
30
+ * Construction renders the tool name and a `running…` status pill; in `full`
31
+ * mode it also shows the pretty-printed arguments inline. {@link settle} later
32
+ * flips the pill to the outcome and depending on the {@link ToolDisplayMode} —
33
+ * appends a collapsible body:
34
+ *
35
+ * - `minimal` — pill only; nothing to expand.
36
+ * - `compact` — one "Details" toggle revealing args *and* result together.
37
+ * - `full` — the result (or error / decline message) behind its own toggle.
31
38
  *
32
39
  * Pure DOM (no framework); the host appends {@link element} into its shadow
33
40
  * root and themes it via the `--ag-ui-*` custom properties.
@@ -37,53 +44,77 @@ export class ToolCallCard {
37
44
  readonly element: HTMLDivElement;
38
45
 
39
46
  readonly #status: HTMLSpanElement;
47
+ readonly #mode: ToolDisplayMode;
48
+ readonly #args: Record<string, unknown>;
49
+
50
+ constructor(
51
+ name: string,
52
+ args: Record<string, unknown>,
53
+ mode: ToolDisplayMode = TOOL_DISPLAY.FULL,
54
+ summary?: string,
55
+ ) {
56
+ this.#mode = mode;
57
+ this.#args = args;
40
58
 
41
- constructor(name: string, args: Record<string, unknown>) {
42
59
  this.element = document.createElement("div");
43
60
  this.element.className = "tool-call";
44
61
  this.element.setAttribute("data-tool-name", name);
45
62
  this.element.setAttribute("data-status", TOOL_CALL_STATUS.PENDING);
63
+ this.element.setAttribute("data-display", mode);
46
64
 
47
65
  const head = document.createElement("div");
48
66
  head.className = "tool-call-head";
49
67
 
50
68
  const label = document.createElement("span");
51
69
  label.className = "tool-call-name";
52
- label.textContent = `🔧 ${name}`;
70
+ // A server-provided `x-summary` label reads better than the raw tool name.
71
+ label.textContent = `🔧 ${summary ?? name}`;
53
72
 
54
73
  this.#status = document.createElement("span");
55
74
  this.#status.className = "tool-call-status";
56
75
  this.#status.textContent = STATUS_LABEL[TOOL_CALL_STATUS.PENDING];
57
76
 
58
77
  head.append(label, this.#status);
59
-
60
- const argsEl = document.createElement("pre");
61
- argsEl.className = "tool-call-args";
62
- argsEl.textContent = JSON.stringify(args, null, 2);
63
-
64
- this.element.append(head, argsEl);
78
+ this.element.append(head);
79
+
80
+ if (mode === TOOL_DISPLAY.FULL) {
81
+ const argsEl = document.createElement("pre");
82
+ argsEl.className = "tool-call-args";
83
+ argsEl.textContent = JSON.stringify(args, null, 2);
84
+ this.element.append(argsEl);
85
+ }
65
86
  }
66
87
 
67
88
  /**
68
- * Flip the status pill to ``status`` and append a collapsed body holding
69
- * ``text`` (the JSON result, an error message, a decline notice, or a
70
- * server-executed note) behind a click-to-expand toggle.
89
+ * Flip the status pill to ``status`` and, unless in `minimal` mode, append a
90
+ * collapsed body behind a click-to-expand toggle: the result alone (`full`),
91
+ * or the args + result together (`compact`).
71
92
  */
72
93
  settle(status: SettledStatus, text: string): void {
73
94
  this.element.setAttribute("data-status", status);
74
95
  this.#status.textContent = STATUS_LABEL[status];
75
96
 
97
+ if (this.#mode === TOOL_DISPLAY.MINIMAL) {
98
+ return;
99
+ }
100
+
76
101
  const toggle = document.createElement("button");
77
102
  toggle.type = "button";
78
103
  toggle.className = "tool-call-toggle";
79
104
  toggle.setAttribute("aria-expanded", "false");
80
- toggle.textContent = RESULT_LABEL[status];
81
105
 
82
106
  const output = document.createElement("pre");
83
107
  output.className = "tool-call-result";
84
- output.textContent = text;
85
108
  output.hidden = true;
86
109
 
110
+ if (this.#mode === TOOL_DISPLAY.COMPACT) {
111
+ toggle.textContent = "Details";
112
+ output.textContent = `args: ${JSON.stringify(this.#args)}\n\n${text}`;
113
+ } else {
114
+ toggle.textContent = RESULT_LABEL[status];
115
+ output.textContent = text;
116
+ }
117
+
87
118
  toggle.addEventListener("click", () => {
88
119
  const expand = output.hidden;
89
120
  output.hidden = !expand;
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const VERSION: string = "0.1.0";
1
+ export const VERSION: string = "0.2.0";
@@ -1 +0,0 @@
1
- {"version":3,"file":"ag_ui_chat.d.ts","sourceRoot":"","sources":["../src/ag_ui_chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAW,IAAI,EAAE,MAAM,aAAa,CAAC;AAO1D,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,2BAA2B,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAkC,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EAE1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,wBAAwB,CAAC;AAG5E,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIvE,8CAA8C;AAC9C,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAE3E,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,QAAS,SAAQ,WAAW;;IACvC,wEAAwE;IACxE,YAAY,EAAE,YAAY,CAAmB;IAE7C,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IAErC,yEAAyE;IACzE,WAAW,UAAS;IAEpB;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,IAAI,EAAE,CAOpB;IAEF;;;OAGG;IACH,UAAU,EAAE,MAAM,OAAO,EAAE,CAAuE;IAElG;;;OAGG;IACH,QAAQ,EAAE,QAAQ,CAAM;IAExB;;;;OAIG;IACH,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAEjD,iEAAiE;IACjE,UAAU,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,IAAI,CAAQ;IAE1C,iEAAiE;IACjE,iBAAiB,UAAQ;IAEzB;;;;OAIG;IACH,iBAAiB,EAAE,uBAAuB,CAA6B;IAEvE;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,UAAU,EAAE,oBAAoB,KAAK,OAAO,CAG5D;;IAyBH,kDAAkD;IAClD,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIpC,wEAAwE;IACxE,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IA0BxC,kEAAkE;IAClE,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,iBAAiB,IAAI,IAAI;IA6CzB,6CAA6C;IAC7C,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc;CAiMlE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"agui_client.d.ts","sourceRoot":"","sources":["../src/agui_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAoC,MAAM,eAAe,CAAC;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAG1D,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;AAEhF;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,IAAI,IAAI,CAAC;IACnB,yEAAyE;IACzE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gFAAgF;IAChF,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,+EAA+E;IAC/E,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACrC,QAAQ,IAAI,IAAI,CAAC;IACjB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,OAAO,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,sEAAsE;IACtE,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,oEAAoE;IACpE,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,KAAK,IAAI,CAAC;CACpD;AAED;;;;;;GAMG;AACH,qBAAa,UAAU;;gBAQT,MAAM,EAAE,gBAAgB;IASpC,4CAA4C;IAC5C,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,wEAAwE;IACxE,IAAI,QAAQ,IAAI,SAAS,OAAO,EAAE,CAEjC;IAED;;;;;;OAMG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1C;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,0EAA0E;IAC1E,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CA+EzD"}
@@ -1,33 +0,0 @@
1
- /**
2
- * Visible-action animation primitives.
3
- *
4
- * These run against the **host page** DOM (not the element's shadow root) so a
5
- * user watches the agent type, highlight, and click at human-readable speed.
6
- * Each is configurable; pass small/zero durations in tests (or use fake timers).
7
- */
8
- /** An element whose `value` can be typed into. */
9
- export type TextLikeElement = HTMLInputElement | HTMLTextAreaElement;
10
- export interface TypeOptions {
11
- /** Milliseconds between characters. Default 35. */
12
- charDelayMs?: number;
13
- }
14
- /**
15
- * Clear ``el`` and type ``value`` one character at a time, firing ``input``
16
- * events as a real user would, then a final ``change`` event.
17
- */
18
- export declare function typeInto(el: TextLikeElement, value: string, options?: TypeOptions): Promise<void>;
19
- export interface HighlightClickOptions {
20
- /** Milliseconds to hold the highlight before clicking. Default 280. */
21
- highlightMs?: number;
22
- }
23
- /** Outline ``el``, pause so the user sees it, then click and restore. */
24
- export declare function highlightThenClick(el: HTMLElement, options?: HighlightClickOptions): Promise<void>;
25
- /** Scroll ``el`` to the vertical centre of the viewport. */
26
- export declare function scrollIntoCenterView(el: HTMLElement): void;
27
- export interface FlashOptions {
28
- /** Milliseconds to hold the focus flash. Default 200. */
29
- flashMs?: number;
30
- }
31
- /** Focus ``el`` and briefly flash a ring around it. */
32
- export declare function focusWithFlash(el: HTMLElement, options?: FlashOptions): Promise<void>;
33
- //# sourceMappingURL=animations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"animations.d.ts","sourceRoot":"","sources":["../src/animations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,kDAAkD;AAClD,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;AAErE,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,EAAE,EAAE,eAAe,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,MAAM,WAAW,qBAAqB;IACpC,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,yEAAyE;AACzE,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,WAAW,EACf,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,4DAA4D;AAC5D,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAE1D;AAED,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,uDAAuD;AACvD,wBAAsB,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/F"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client_tool_registry.d.ts","sourceRoot":"","sources":["../src/client_tool_registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxE;AAED;;;;;;GAMG;AACH,qBAAa,kBAAkB;;IAG7B,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAOhC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,yCAAyC;IACzC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAQ7B,wDAAwD;IACxD,KAAK,IAAI,IAAI,EAAE;CAOhB"}
@@ -1,14 +0,0 @@
1
- /** What the confirmation modal displays. */
2
- export interface ConfirmationRequest {
3
- toolName: string;
4
- args: Record<string, unknown>;
5
- }
6
- /**
7
- * Render a confirmation modal into ``host`` and resolve when the user decides.
8
- *
9
- * Resolves ``true`` if the user confirms, ``false`` if they cancel or dismiss
10
- * via the backdrop. The modal is appended to ``host`` (the chat container
11
- * inside the element's shadow root) and removed once resolved.
12
- */
13
- export declare function requestConfirmation(host: Node & ParentNode, request: ConfirmationRequest): Promise<boolean>;
14
- //# sourceMappingURL=confirmation_modal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"confirmation_modal.d.ts","sourceRoot":"","sources":["../src/confirmation_modal.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,GAAG,UAAU,EACvB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,OAAO,CAAC,CAoDlB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversation_store.d.ts","sourceRoot":"","sources":["../src/conversation_store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,uEAAuE;IACvE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,uBAAuB;IACtC,uEAAuE;IACvE,QAAQ,IAAI,MAAM,CAAC;IACnB,sEAAsE;IACtE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACnE,mCAAmC;IACnC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CAAC;IACnE,0EAA0E;IAC1E,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAAC;IAC9D,4EAA4E;IAC5E,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAAC;IAChF,yEAAyE;IACzE,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAMD;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,uBAAuB;;IACjE,QAAQ,IAAI,MAAM;IAUlB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,GAAG,IAAI,CAAC;IAIlE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAIlE,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI;IAI7D,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,GAAG,IAAI,GAAG,IAAI;IAS/E,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAkB9B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"create_http_agent.d.ts","sourceRoot":"","sources":["../src/create_http_agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAa,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,eAAe,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CACtC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa,CAgBxE;AAED,2EAA2E;AAC3E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,gBAAgB,KAAK,aAAa,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"define_ag_ui_chat.d.ts","sourceRoot":"","sources":["../src/define_ag_ui_chat.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAIrC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dom_driver.d.ts","sourceRoot":"","sources":["../src/dom_driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,qBAAqB,EAG1B,KAAK,eAAe,EACpB,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;GAMG;AAEH,MAAM,WAAW,gBAAiB,SAAQ,WAAW,EAAE,gBAAgB;CAAG;AAE1E,UAAU,gBAAgB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,6EAA6E;AAC7E,wBAAsB,SAAS,CAC7B,EAAE,EAAE,eAAe,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,kDAAkD;AAClD,wBAAsB,YAAY,CAChC,EAAE,EAAE,WAAW,EACf,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,gBAAgB,GAAG,iBAAiB,EACxC,KAAK,EAAE,MAAM,GAAG,OAAO,GACtB,IAAI,CAQN"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"is_destructive.d.ts","sourceRoot":"","sources":["../src/is_destructive.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAE1E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"is_navigates.d.ts","sourceRoot":"","sources":["../src/is_navigates.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAExE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"page_map.d.ts","sourceRoot":"","sources":["../src/page_map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,IAAI,EAClC,UAAU,EAAE,OAAO,GAClB,OAAO,EAAE,CAKX"}
@@ -1,27 +0,0 @@
1
- import type { ClientTool } from "./client_tool_registry.js";
2
- /** A single navigable route the host declares for the agent. */
3
- export interface Route {
4
- /** Stable id the agent uses with `navigate_to_route`. */
5
- readonly id: string;
6
- /** The URL path to navigate to. */
7
- readonly path: string;
8
- /** Human label shown to the agent. */
9
- readonly title?: string;
10
- /** Optional grouping (e.g. an app or section). */
11
- readonly group?: string;
12
- /** Optional longer description of when to use the route. */
13
- readonly description?: string;
14
- }
15
- /** The host-declared catalog of navigable routes. */
16
- export type RouteMap = readonly Route[];
17
- /**
18
- * The built-in `route.*` tools, bound to live getters so a host can set
19
- * `routeMap` / `navigate` before or after mount.
20
- *
21
- * `list_routes` is read-only; `navigate_to_route` is marked `x-navigates` so an
22
- * MPA reload checkpoints + resumes. When the host supplies a `navigate(path)`
23
- * callback (an SPA), the element routes client-side instead and the run loop
24
- * simply continues — see `AgUiChat`'s execute path.
25
- */
26
- export declare function createRouteTools(getRouteMap: () => RouteMap, getNavigate: () => ((path: string) => void) | null): ClientTool[];
27
- //# sourceMappingURL=route_map.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route_map.d.ts","sourceRoot":"","sources":["../src/route_map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAG5D,gEAAgE;AAChE,MAAM,WAAW,KAAK;IACpB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,qDAAqD;AACrD,MAAM,MAAM,QAAQ,GAAG,SAAS,KAAK,EAAE,CAAC;AAexC;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,QAAQ,EAC3B,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,GACjD,UAAU,EAAE,CAqCd"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"state_hook.d.ts","sourceRoot":"","sources":["../src/state_hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAG5D;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;IAC5D,uEAAuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,EAAE,CAmBlE"}
package/dist/styles.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare const STYLES = "\n:host {\n /* Colors */\n --ag-ui-bg: #ffffff;\n --ag-ui-fg: #1a1a2e;\n --ag-ui-accent: #4f46e5;\n --ag-ui-user-bg: #4f46e5;\n --ag-ui-user-fg: #ffffff;\n --ag-ui-assistant-bg: #f1f1f6;\n --ag-ui-input-bg: var(--ag-ui-bg);\n --ag-ui-tool-bg: var(--ag-ui-assistant-bg);\n --ag-ui-tool-fg: var(--ag-ui-accent);\n --ag-ui-header-bg: var(--ag-ui-accent);\n --ag-ui-header-fg: #ffffff;\n --ag-ui-border: #e2e2ec;\n --ag-ui-radius: 12px;\n\n /* Status accents for tool-call cards. */\n --ag-ui-success: #15803d;\n --ag-ui-danger: #b91c1c;\n --ag-ui-muted: #6b7280;\n\n /* Surface \u2014 set --ag-ui-shadow: none for a flush, embedded panel. */\n --ag-ui-shadow: 0 12px 32px rgba(20, 20, 50, 0.18);\n --ag-ui-font: inherit;\n --ag-ui-font-size: 14px;\n\n /* Layout \u2014 override from outside to dock the widget anywhere.\n Set --ag-ui-position: static (and place this element in your own\n grid/flex layout) to embed it in the page flow instead of floating. */\n --ag-ui-position: fixed;\n --ag-ui-z-index: 2147483000;\n --ag-ui-width: 380px;\n --ag-ui-height: 560px;\n --ag-ui-inset: auto 24px 24px auto;\n --ag-ui-max-width: calc(100vw - 48px);\n --ag-ui-max-height: calc(100vh - 48px);\n\n position: var(--ag-ui-position);\n inset: var(--ag-ui-inset);\n z-index: var(--ag-ui-z-index);\n width: var(--ag-ui-width);\n max-width: var(--ag-ui-max-width);\n height: var(--ag-ui-height);\n max-height: var(--ag-ui-max-height);\n display: flex;\n font-family: var(--ag-ui-font);\n font-size: var(--ag-ui-font-size);\n color: var(--ag-ui-fg);\n}\n\n.chat {\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n background: var(--ag-ui-bg);\n border: 1px solid var(--ag-ui-border);\n border-radius: var(--ag-ui-radius);\n box-shadow: var(--ag-ui-shadow);\n overflow: hidden;\n}\n\n.header {\n padding: 12px 16px;\n font-weight: 600;\n border-bottom: 1px solid var(--ag-ui-border);\n background: var(--ag-ui-header-bg);\n color: var(--ag-ui-header-fg);\n}\n\n.messages {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.message {\n max-width: 80%;\n padding: 8px 12px;\n border-radius: 14px;\n line-height: 1.4;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.message--user {\n align-self: flex-end;\n background: var(--ag-ui-user-bg);\n color: var(--ag-ui-user-fg);\n border-bottom-right-radius: 4px;\n}\n\n.message--assistant {\n align-self: flex-start;\n background: var(--ag-ui-assistant-bg);\n border-bottom-left-radius: 4px;\n}\n\n.tool-call {\n align-self: flex-start;\n max-width: 80%;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: 6px;\n font-size: 12px;\n font-family: ui-monospace, \"SF Mono\", Menlo, monospace;\n padding: 8px 10px;\n border-radius: 8px;\n background: var(--ag-ui-tool-bg);\n border: 1px solid var(--ag-ui-border);\n color: var(--ag-ui-tool-fg);\n}\n\n.tool-call-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.tool-call-name {\n font-weight: 600;\n word-break: break-word;\n}\n\n.tool-call-status {\n flex: none;\n padding: 1px 8px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 600;\n background: rgba(127, 127, 127, 0.16);\n color: var(--ag-ui-muted);\n}\n\n.tool-call[data-status=\"done\"] .tool-call-status {\n color: var(--ag-ui-success);\n}\n\n.tool-call[data-status=\"error\"] .tool-call-status {\n color: var(--ag-ui-danger);\n}\n\n.tool-call[data-status=\"declined\"] .tool-call-status {\n color: var(--ag-ui-muted);\n}\n\n.tool-call-args,\n.tool-call-result {\n margin: 0;\n padding: 6px 8px;\n max-height: 160px;\n overflow: auto;\n background: var(--ag-ui-bg);\n border: 1px solid var(--ag-ui-border);\n border-radius: 6px;\n white-space: pre-wrap;\n word-break: break-word;\n color: var(--ag-ui-fg);\n}\n\n.tool-call-toggle {\n align-self: flex-start;\n border: none;\n padding: 0;\n background: none;\n font: inherit;\n font-weight: 600;\n color: var(--ag-ui-accent);\n cursor: pointer;\n}\n\n.tool-call-toggle::before {\n content: \"\u25B8 \";\n}\n\n.tool-call-toggle[aria-expanded=\"true\"]::before {\n content: \"\u25BE \";\n}\n\n.input-row {\n display: flex;\n gap: 8px;\n padding: 12px;\n border-top: 1px solid var(--ag-ui-border);\n}\n\n.input {\n flex: 1;\n resize: none;\n background: var(--ag-ui-input-bg);\n border: 1px solid var(--ag-ui-border);\n border-radius: 8px;\n padding: 8px 10px;\n font: inherit;\n color: inherit;\n outline: none;\n}\n\n.input:focus {\n border-color: var(--ag-ui-accent);\n}\n\n.send {\n border: none;\n border-radius: 8px;\n padding: 0 16px;\n background: var(--ag-ui-accent);\n color: #ffffff;\n font: inherit;\n font-weight: 600;\n cursor: pointer;\n}\n\n.send:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.modal-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n background: rgba(20, 20, 50, 0.4);\n backdrop-filter: blur(2px);\n}\n\n.modal {\n width: 100%;\n max-width: 320px;\n background: var(--ag-ui-bg);\n border-radius: 12px;\n box-shadow: 0 16px 40px rgba(20, 20, 50, 0.3);\n overflow: hidden;\n}\n\n.modal-title {\n padding: 12px 16px;\n font-weight: 600;\n border-bottom: 1px solid var(--ag-ui-border);\n}\n\n.modal-body {\n padding: 12px 16px 4px;\n}\n\n.modal-args {\n margin: 0 16px 12px;\n padding: 8px 10px;\n max-height: 140px;\n overflow: auto;\n font-size: 12px;\n font-family: ui-monospace, \"SF Mono\", Menlo, monospace;\n background: var(--ag-ui-assistant-bg);\n border-radius: 8px;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.modal-actions {\n display: flex;\n gap: 8px;\n padding: 0 16px 16px;\n justify-content: flex-end;\n}\n\n.modal-btn {\n border: 1px solid var(--ag-ui-border);\n border-radius: 8px;\n padding: 8px 14px;\n font: inherit;\n font-weight: 600;\n cursor: pointer;\n background: var(--ag-ui-bg);\n color: var(--ag-ui-fg);\n}\n\n.modal-btn--confirm {\n border-color: var(--ag-ui-accent);\n background: var(--ag-ui-accent);\n color: #ffffff;\n}\n";
2
- //# sourceMappingURL=styles.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,MAAM,6nMAmSlB,CAAC"}
@@ -1,29 +0,0 @@
1
- import { TOOL_CALL_STATUS } from "./constants.js";
2
- /** Any state a tool-call card can be in. */
3
- export type ToolCallStatus = (typeof TOOL_CALL_STATUS)[keyof typeof TOOL_CALL_STATUS];
4
- /** The terminal states a card settles into (everything but `pending`). */
5
- export type SettledStatus = Exclude<ToolCallStatus, typeof TOOL_CALL_STATUS.PENDING>;
6
- /**
7
- * A live tool-call card for the chat transcript.
8
- *
9
- * Construction renders the tool name, its pretty-printed arguments, and a
10
- * `running…` status pill. {@link settle} later flips the pill to the outcome
11
- * and appends a click-to-expand body holding the result (or error / decline
12
- * message), collapsed by default.
13
- *
14
- * Pure DOM (no framework); the host appends {@link element} into its shadow
15
- * root and themes it via the `--ag-ui-*` custom properties.
16
- */
17
- export declare class ToolCallCard {
18
- #private;
19
- /** The card's root element; append this into the message list. */
20
- readonly element: HTMLDivElement;
21
- constructor(name: string, args: Record<string, unknown>);
22
- /**
23
- * Flip the status pill to ``status`` and append a collapsed body holding
24
- * ``text`` (the JSON result, an error message, a decline notice, or a
25
- * server-executed note) behind a click-to-expand toggle.
26
- */
27
- settle(status: SettledStatus, text: string): void;
28
- }
29
- //# sourceMappingURL=tool_call_card.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool_call_card.d.ts","sourceRoot":"","sources":["../src/tool_call_card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,4CAA4C;AAC5C,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAEtF,0EAA0E;AAC1E,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,cAAc,EAAE,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAiBrF;;;;;;;;;;GAUG;AACH,qBAAa,YAAY;;IACvB,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;gBAIrB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA0BvD;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAuBlD"}