ionbase-ui 0.24.0 → 0.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 (42) hide show
  1. package/dist/components/AgentActivity.d.ts +41 -0
  2. package/dist/components/AgentActivity.d.ts.map +1 -0
  3. package/dist/components/AgentActivity.js +84 -0
  4. package/dist/components/AgentActivity.js.map +1 -0
  5. package/dist/components/Citation.d.ts +51 -0
  6. package/dist/components/Citation.d.ts.map +1 -0
  7. package/dist/components/Citation.js +41 -0
  8. package/dist/components/Citation.js.map +1 -0
  9. package/dist/components/ConfidenceIndicator.d.ts +37 -0
  10. package/dist/components/ConfidenceIndicator.d.ts.map +1 -0
  11. package/dist/components/ConfidenceIndicator.js +41 -0
  12. package/dist/components/ConfidenceIndicator.js.map +1 -0
  13. package/dist/components/StreamingText.d.ts +47 -0
  14. package/dist/components/StreamingText.d.ts.map +1 -0
  15. package/dist/components/StreamingText.js +44 -0
  16. package/dist/components/StreamingText.js.map +1 -0
  17. package/dist/components/index.d.ts +8 -0
  18. package/dist/components/index.d.ts.map +1 -1
  19. package/dist/components/index.js +4 -0
  20. package/dist/components/index.js.map +1 -1
  21. package/dist/figma-descriptions.json +29 -29
  22. package/dist/figma-map.json +1 -1
  23. package/dist/meta/AgentActivity.json +103 -0
  24. package/dist/meta/AgentActivityStep.json +117 -0
  25. package/dist/meta/Citation.json +101 -0
  26. package/dist/meta/CitationList.json +94 -0
  27. package/dist/meta/CitationListItem.json +88 -0
  28. package/dist/meta/ConfidenceIndicator.json +115 -0
  29. package/dist/meta/Input.json +2 -2
  30. package/dist/meta/PhoneInput.json +2 -2
  31. package/dist/meta/StreamingText.json +99 -0
  32. package/dist/meta/components.json +722 -5
  33. package/dist/meta/contrast.json +240 -0
  34. package/dist/meta/index.json +64 -1
  35. package/dist/meta/patterns/index.json +1 -1
  36. package/dist/styles/agent-activity.css +95 -0
  37. package/dist/styles/citation.css +93 -0
  38. package/dist/styles/confidence-indicator.css +97 -0
  39. package/dist/styles/index.css +4 -0
  40. package/dist/styles/streaming-text.css +56 -0
  41. package/llms.txt +2 -2
  42. package/package.json +1 -1
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+ export type AgentActivityStatus = 'pending' | 'active' | 'done' | 'failed' | 'skipped';
3
+ export interface AgentActivityProps extends React.HTMLAttributes<HTMLOListElement> {
4
+ children?: React.ReactNode;
5
+ /**
6
+ * Announce the step that just became active, once, in a polite live region.
7
+ *
8
+ * On by default because the whole point of an activity log is knowing what
9
+ * the agent is doing without watching it. Turn it off when several logs are
10
+ * on screen at once, or they narrate over each other.
11
+ */
12
+ announceActive?: boolean;
13
+ }
14
+ export interface AgentActivityStepProps extends React.LiHTMLAttributes<HTMLLIElement> {
15
+ /** What the agent did, in the user's language. Not a function name. */
16
+ children?: React.ReactNode;
17
+ status?: AgentActivityStatus;
18
+ /** The result, a tool name, a count — whatever makes the step checkable. */
19
+ detail?: React.ReactNode;
20
+ }
21
+ /**
22
+ * AgentActivity — what the agent is doing, in plain language.
23
+ *
24
+ * An ordered list, because the steps happened in an order and a screen reader
25
+ * should say "3 of 7". Not a log viewer: this is the account a person reads to
26
+ * decide whether to let the run continue, so the text belongs in their
27
+ * language — "Searched the invoice archive", not `searchIndex(q, {limit:50})`.
28
+ *
29
+ * STATUS IS NEVER CARRIED BY THE ICON ALONE. Every step renders its status as
30
+ * text as well as a glyph. The glyphs differ in shape rather than only in
31
+ * colour, so the list survives greyscale, colour blindness and forced-colours
32
+ * mode — WCAG 1.4.1, which a row of coloured dots fails outright.
33
+ *
34
+ * ONE POLITE ANNOUNCEMENT PER STEP, not one per render. The active step's text
35
+ * is announced when it changes, so a user who is not watching still knows where
36
+ * the run has got to. Watching the DOM instead would re-announce on every
37
+ * unrelated update, which is the failure mode that makes people turn logs off.
38
+ */
39
+ export declare const AgentActivity: React.ForwardRefExoticComponent<AgentActivityProps & React.RefAttributes<HTMLOListElement>>;
40
+ export declare const AgentActivityStep: React.ForwardRefExoticComponent<AgentActivityStepProps & React.RefAttributes<HTMLLIElement>>;
41
+ //# sourceMappingURL=AgentActivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentActivity.d.ts","sourceRoot":"","sources":["../../src/components/AgentActivity.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAEvE,MAAM,MAAM,mBAAmB,GAC7B,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,kBAAmB,SAAQ,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAChF,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAuB,SAAQ,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC;IACnF,uEAAuE;IACvE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAsED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa,6FAyDzB,CAAC;AAIF,eAAO,MAAM,iBAAiB,8FA6B5B,CAAC"}
@@ -0,0 +1,84 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import React, { forwardRef, useEffect, useRef, useState } from 'react';
4
+ const STATUS_TEXT = {
5
+ pending: 'Not started',
6
+ active: 'In progress',
7
+ done: 'Done',
8
+ failed: 'Failed',
9
+ skipped: 'Skipped',
10
+ };
11
+ const Glyphs = {
12
+ pending: () => (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", focusable: "false", children: _jsx("circle", { cx: "12", cy: "12", r: "9", stroke: "currentColor", strokeWidth: "2" }) })),
13
+ active: () => (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", focusable: "false", children: [_jsx("circle", { cx: "12", cy: "12", r: "9", stroke: "currentColor", strokeWidth: "2", opacity: "0.3" }), _jsx("path", { d: "M21 12a9 9 0 0 0-9-9", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })] })),
14
+ done: () => (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", focusable: "false", children: [_jsx("circle", { cx: "12", cy: "12", r: "9", stroke: "currentColor", strokeWidth: "2" }), _jsx("path", { d: "m8.5 12 2.5 2.5 4.5-5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })] })),
15
+ failed: () => (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", focusable: "false", children: [_jsx("circle", { cx: "12", cy: "12", r: "9", stroke: "currentColor", strokeWidth: "2" }), _jsx("path", { d: "m9 9 6 6M15 9l-6 6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })] })),
16
+ skipped: () => (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", focusable: "false", children: [_jsx("circle", { cx: "12", cy: "12", r: "9", stroke: "currentColor", strokeWidth: "2" }), _jsx("path", { d: "M8.5 12h7", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })] })),
17
+ };
18
+ /**
19
+ * AgentActivity — what the agent is doing, in plain language.
20
+ *
21
+ * An ordered list, because the steps happened in an order and a screen reader
22
+ * should say "3 of 7". Not a log viewer: this is the account a person reads to
23
+ * decide whether to let the run continue, so the text belongs in their
24
+ * language — "Searched the invoice archive", not `searchIndex(q, {limit:50})`.
25
+ *
26
+ * STATUS IS NEVER CARRIED BY THE ICON ALONE. Every step renders its status as
27
+ * text as well as a glyph. The glyphs differ in shape rather than only in
28
+ * colour, so the list survives greyscale, colour blindness and forced-colours
29
+ * mode — WCAG 1.4.1, which a row of coloured dots fails outright.
30
+ *
31
+ * ONE POLITE ANNOUNCEMENT PER STEP, not one per render. The active step's text
32
+ * is announced when it changes, so a user who is not watching still knows where
33
+ * the run has got to. Watching the DOM instead would re-announce on every
34
+ * unrelated update, which is the failure mode that makes people turn logs off.
35
+ */
36
+ export const AgentActivity = forwardRef(({ children, announceActive = true, className, ...rest }, ref) => {
37
+ /*
38
+ * Read the active step out of the children rather than asking the caller to
39
+ * repeat it in a prop. Two sources for one fact is how they disagree.
40
+ */
41
+ const activeLabel = React.Children.toArray(children).reduce((found, child) => {
42
+ if (found)
43
+ return found;
44
+ if (!React.isValidElement(child))
45
+ return found;
46
+ if (child.props.status !== 'active')
47
+ return found;
48
+ return typeof child.props.children === 'string'
49
+ ? child.props.children
50
+ : 'In progress';
51
+ }, '');
52
+ const [announcement, setAnnouncement] = useState('');
53
+ /*
54
+ * Seeded with '' rather than the current label, so the FIRST active step is
55
+ * announced too. Seeding it with `activeLabel` reads as "only announce
56
+ * changes" and silently swallows the one announcement that matters most —
57
+ * the log usually mounts at the moment the run starts, and that first step
58
+ * is exactly what a user who is not watching needs to hear.
59
+ */
60
+ const previous = useRef('');
61
+ useEffect(() => {
62
+ if (!announceActive)
63
+ return;
64
+ if (activeLabel && activeLabel !== previous.current)
65
+ setAnnouncement(activeLabel);
66
+ previous.current = activeLabel;
67
+ }, [activeLabel, announceActive]);
68
+ return (_jsxs(_Fragment, { children: [_jsx("ol", { ...rest, ref: ref, className: ['ion-agent-activity', className]
69
+ .filter(Boolean)
70
+ .join(' '), children: children }), announceActive && (_jsx("span", { className: "ion-visually-hidden", role: "status", "aria-live": "polite", children: announcement }))] }));
71
+ });
72
+ AgentActivity.displayName = 'AgentActivity';
73
+ export const AgentActivityStep = forwardRef(({ children, status = 'pending', detail, className, ...rest }, ref) => {
74
+ const Glyph = Glyphs[status];
75
+ return (_jsxs("li", { ...rest, ref: ref, "data-status": status, className: [
76
+ 'ion-agent-activity__step',
77
+ `ion-agent-activity__step--${status}`,
78
+ className || '',
79
+ ]
80
+ .filter(Boolean)
81
+ .join(' '), children: [_jsx("span", { className: "ion-agent-activity__glyph", "aria-hidden": "true", children: _jsx(Glyph, {}) }), _jsxs("span", { className: "ion-agent-activity__body", children: [_jsx("span", { className: "ion-agent-activity__label", children: children }), detail && _jsx("span", { className: "ion-agent-activity__detail", children: detail })] }), _jsx("span", { className: "ion-visually-hidden", children: STATUS_TEXT[status] })] }));
82
+ });
83
+ AgentActivityStep.displayName = 'AgentActivityStep';
84
+ //# sourceMappingURL=AgentActivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentActivity.js","sourceRoot":"","sources":["../../src/components/AgentActivity.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import React from 'react';
2
+ export interface CitationProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> {
3
+ /** The marker shown inline — usually a number matching the footer list. */
4
+ index: number | string;
5
+ /**
6
+ * What is being cited. Required: it is the link's accessible name, and a
7
+ * citation a reader cannot identify without following it is not attribution.
8
+ */
9
+ source: string;
10
+ /** Where it goes. Omit for a source with no address — a document, a call. */
11
+ href?: string;
12
+ }
13
+ export interface CitationListProps extends React.OlHTMLAttributes<HTMLOListElement> {
14
+ children?: React.ReactNode;
15
+ /** Heading above the list. Rendered as plain text, not a heading element. */
16
+ label?: React.ReactNode;
17
+ }
18
+ export interface CitationListItemProps extends React.LiHTMLAttributes<HTMLLIElement> {
19
+ index: number | string;
20
+ source: string;
21
+ href?: string;
22
+ /** The quoted or summarised passage this citation supports. */
23
+ children?: React.ReactNode;
24
+ }
25
+ /**
26
+ * Citation — the inline marker.
27
+ *
28
+ * THE MARKER IS NOT THE NAME. Rendered naively, a superscript "1" announces as
29
+ * "link, 1", which tells a screen-reader user nothing about whether to follow
30
+ * it. The visible marker stays a number; the accessible name is
31
+ * "Source 1: <source>". The number is for the sighted reader's eye and the
32
+ * sentence is for everyone.
33
+ *
34
+ * NOT A TOOLTIP. A tooltip cannot be reached on touch and closes on the way to
35
+ * it; attribution has to survive both. It is a real link, or a real
36
+ * non-interactive marker when there is nowhere to go.
37
+ *
38
+ * WITHOUT `href` IT IS NOT A LINK. A citation to a phone call or an internal
39
+ * document has no address, and rendering a dead anchor for it puts an
40
+ * unfollowable link in the page's link list. It becomes a plain marked-up
41
+ * reference instead.
42
+ */
43
+ export declare const Citation: React.ForwardRefExoticComponent<CitationProps & React.RefAttributes<HTMLAnchorElement>>;
44
+ /**
45
+ * The footer list. An `<ol>` so the numbering is structural rather than typed
46
+ * into each row, and so a screen reader can say how many sources there are
47
+ * before the reader commits to hearing them.
48
+ */
49
+ export declare const CitationList: React.ForwardRefExoticComponent<CitationListProps & React.RefAttributes<HTMLOListElement>>;
50
+ export declare const CitationListItem: React.ForwardRefExoticComponent<CitationListItemProps & React.RefAttributes<HTMLLIElement>>;
51
+ //# sourceMappingURL=Citation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Citation.d.ts","sourceRoot":"","sources":["../../src/components/Citation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,MAAM,WAAW,aAAc,SAAQ,IAAI,CACzC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,UAAU,CACX;IACC,2EAA2E;IAC3E,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAkB,SAAQ,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;IACjF,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC;IAClF,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,QAAQ,yFAmBpB,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,YAAY,4FAexB,CAAC;AAIF,eAAO,MAAM,gBAAgB,6FAyB3B,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ /**
4
+ * Citation — the inline marker.
5
+ *
6
+ * THE MARKER IS NOT THE NAME. Rendered naively, a superscript "1" announces as
7
+ * "link, 1", which tells a screen-reader user nothing about whether to follow
8
+ * it. The visible marker stays a number; the accessible name is
9
+ * "Source 1: <source>". The number is for the sighted reader's eye and the
10
+ * sentence is for everyone.
11
+ *
12
+ * NOT A TOOLTIP. A tooltip cannot be reached on touch and closes on the way to
13
+ * it; attribution has to survive both. It is a real link, or a real
14
+ * non-interactive marker when there is nowhere to go.
15
+ *
16
+ * WITHOUT `href` IT IS NOT A LINK. A citation to a phone call or an internal
17
+ * document has no address, and rendering a dead anchor for it puts an
18
+ * unfollowable link in the page's link list. It becomes a plain marked-up
19
+ * reference instead.
20
+ */
21
+ export const Citation = forwardRef(({ index, source, href, className, ...rest }, ref) => {
22
+ const name = `Source ${index}: ${source}`;
23
+ const classes = ['ion-citation', className].filter(Boolean).join(' ');
24
+ if (!href) {
25
+ return (_jsx("span", { className: classes, role: "note", "aria-label": name, children: _jsx("span", { "aria-hidden": "true", children: index }) }));
26
+ }
27
+ return (_jsx("a", { ...rest, ref: ref, href: href, className: classes, "aria-label": name, children: _jsx("span", { "aria-hidden": "true", children: index }) }));
28
+ });
29
+ Citation.displayName = 'Citation';
30
+ /**
31
+ * The footer list. An `<ol>` so the numbering is structural rather than typed
32
+ * into each row, and so a screen reader can say how many sources there are
33
+ * before the reader commits to hearing them.
34
+ */
35
+ export const CitationList = forwardRef(({ children, label = 'Sources', className, ...rest }, ref) => (_jsxs("div", { className: "ion-citation-list", children: [label && _jsx("p", { className: "ion-citation-list__label", children: label }), _jsx("ol", { ...rest, ref: ref, className: ['ion-citation-list__items', className]
36
+ .filter(Boolean)
37
+ .join(' '), children: children })] })));
38
+ CitationList.displayName = 'CitationList';
39
+ export const CitationListItem = forwardRef(({ index, source, href, children, className, ...rest }, ref) => (_jsxs("li", { ...rest, ref: ref, className: ['ion-citation-list__item', className].filter(Boolean).join(' '), children: [_jsx("span", { className: "ion-citation-list__marker", "aria-hidden": "true", children: index }), _jsxs("span", { className: "ion-citation-list__body", children: [href ? (_jsx("a", { className: "ion-citation-list__source", href: href, children: source })) : (_jsx("span", { className: "ion-citation-list__source", children: source })), children && (_jsx("span", { className: "ion-citation-list__passage", children: children }))] })] })));
40
+ CitationListItem.displayName = 'CitationListItem';
41
+ //# sourceMappingURL=Citation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Citation.js","sourceRoot":"","sources":["../../src/components/Citation.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AA+B1C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAChC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACnD,MAAM,IAAI,GAAG,UAAU,KAAK,KAAK,MAAM,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CACL,eAAM,SAAS,EAAE,OAAO,EAAE,IAAI,EAAC,MAAM,gBAAa,IAAI,YACpD,8BAAkB,MAAM,YAAE,KAAK,GAAQ,GAClC,CACR,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAO,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,gBAAc,IAAI,YACrE,8BAAkB,MAAM,YAAE,KAAK,GAAQ,GACrC,CACL,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CACpC,CAAC,EAAE,QAAQ,EAAE,KAAK,GAAG,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAC5D,eAAK,SAAS,EAAC,mBAAmB,aAC/B,KAAK,IAAI,YAAG,SAAS,EAAC,0BAA0B,YAAE,KAAK,GAAK,EAC7D,gBACM,IAAI,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,CAAC,0BAA0B,EAAE,SAAS,CAAC;iBAC/C,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,GAAG,CAAC,YAEX,QAAQ,GACN,IACD,CACP,CACF,CAAC;AAEF,YAAY,CAAC,WAAW,GAAG,cAAc,CAAC;AAE1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAGxC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAChE,iBACM,IAAI,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAE3E,eAAM,SAAS,EAAC,2BAA2B,iBAAa,MAAM,YAC3D,KAAK,GACD,EACP,gBAAM,SAAS,EAAC,yBAAyB,aACtC,IAAI,CAAC,CAAC,CAAC,CACN,YAAG,SAAS,EAAC,2BAA2B,EAAC,IAAI,EAAE,IAAI,YAChD,MAAM,GACL,CACL,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,2BAA2B,YAAE,MAAM,GAAQ,CAC5D,EACA,QAAQ,IAAI,CACX,eAAM,SAAS,EAAC,4BAA4B,YAAE,QAAQ,GAAQ,CAC/D,IACI,IACJ,CACN,CAAC,CAAC;AAEH,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC"}
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ export type ConfidenceLevel = 'low' | 'medium' | 'high';
3
+ export interface ConfidenceIndicatorProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {
4
+ level: ConfidenceLevel;
5
+ /**
6
+ * What the level is based on. REQUIRED, and the reason this component exists
7
+ * rather than a coloured dot: a confidence with no stated basis is a number
8
+ * the reader has no way to weigh. "3 of 4 sources agree", "no matching
9
+ * records found", "single unverified source".
10
+ */
11
+ basis: string;
12
+ /** Override the level's word. Keep it a word, not a percentage. */
13
+ label?: string;
14
+ }
15
+ /**
16
+ * ConfidenceIndicator — how much to trust the thing next to it.
17
+ *
18
+ * THERE IS NO PERCENTAGE PROP, AND THERE WILL NOT BE ONE
19
+ *
20
+ * "87% confident" reads as a measurement. Almost nowhere is it one: it is
21
+ * usually a softmax score, a heuristic, or a number a model produced about
22
+ * itself — none of which are calibrated probabilities, and all of which invite
23
+ * a reader to treat two digits of precision as real. Three levels cannot
24
+ * overclaim in that way.
25
+ *
26
+ * `basis` IS REQUIRED FOR THE SAME REASON. A level with nothing behind it is
27
+ * decoration that changes behaviour: people act on "high confidence" whether or
28
+ * not anything justifies it. Making the justification a required prop is the
29
+ * only enforcement available here, and it is a type error rather than a policy
30
+ * — which is the strongest kind this system can offer.
31
+ *
32
+ * It renders as text plus a three-bar meter, never the meter alone. The bars
33
+ * differ in filled COUNT, not only in colour, so the reading survives greyscale
34
+ * and forced-colours mode.
35
+ */
36
+ export declare const ConfidenceIndicator: React.ForwardRefExoticComponent<ConfidenceIndicatorProps & React.RefAttributes<HTMLSpanElement>>;
37
+ //# sourceMappingURL=ConfidenceIndicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfidenceIndicator.d.ts","sourceRoot":"","sources":["../../src/components/ConfidenceIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CACpD,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EACrC,UAAU,CACX;IACC,KAAK,EAAE,eAAe,CAAC;IACvB;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,mBAAmB,kGAiC9B,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ const LEVEL_TEXT = {
4
+ low: 'Low confidence',
5
+ medium: 'Medium confidence',
6
+ high: 'High confidence',
7
+ };
8
+ /**
9
+ * ConfidenceIndicator — how much to trust the thing next to it.
10
+ *
11
+ * THERE IS NO PERCENTAGE PROP, AND THERE WILL NOT BE ONE
12
+ *
13
+ * "87% confident" reads as a measurement. Almost nowhere is it one: it is
14
+ * usually a softmax score, a heuristic, or a number a model produced about
15
+ * itself — none of which are calibrated probabilities, and all of which invite
16
+ * a reader to treat two digits of precision as real. Three levels cannot
17
+ * overclaim in that way.
18
+ *
19
+ * `basis` IS REQUIRED FOR THE SAME REASON. A level with nothing behind it is
20
+ * decoration that changes behaviour: people act on "high confidence" whether or
21
+ * not anything justifies it. Making the justification a required prop is the
22
+ * only enforcement available here, and it is a type error rather than a policy
23
+ * — which is the strongest kind this system can offer.
24
+ *
25
+ * It renders as text plus a three-bar meter, never the meter alone. The bars
26
+ * differ in filled COUNT, not only in colour, so the reading survives greyscale
27
+ * and forced-colours mode.
28
+ */
29
+ export const ConfidenceIndicator = forwardRef(({ level, basis, label, className, ...rest }, ref) => {
30
+ const filled = level === 'high' ? 3 : level === 'medium' ? 2 : 1;
31
+ return (_jsxs("span", { ...rest, ref: ref, "data-level": level, className: ['ion-confidence', `ion-confidence--${level}`, className || '']
32
+ .filter(Boolean)
33
+ .join(' '), children: [_jsx("span", { className: "ion-confidence__meter", "aria-hidden": "true", children: [0, 1, 2].map((i) => (_jsx("span", { className: [
34
+ 'ion-confidence__bar',
35
+ i < filled ? 'ion-confidence__bar--on' : '',
36
+ ]
37
+ .filter(Boolean)
38
+ .join(' ') }, i))) }), _jsx("span", { className: "ion-confidence__label", children: label ?? LEVEL_TEXT[level] }), _jsx("span", { className: "ion-confidence__basis", children: basis })] }));
39
+ });
40
+ ConfidenceIndicator.displayName = 'ConfidenceIndicator';
41
+ //# sourceMappingURL=ConfidenceIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfidenceIndicator.js","sourceRoot":"","sources":["../../src/components/ConfidenceIndicator.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAoB1C,MAAM,UAAU,GAAoC;IAClD,GAAG,EAAE,gBAAgB;IACrB,MAAM,EAAE,mBAAmB;IAC3B,IAAI,EAAE,iBAAiB;CACxB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAG3C,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACrD,MAAM,MAAM,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,OAAO,CACL,mBACM,IAAI,EACR,GAAG,EAAE,GAAG,gBACI,KAAK,EACjB,SAAS,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,KAAK,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC;aACvE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,aAEZ,eAAM,SAAS,EAAC,uBAAuB,iBAAa,MAAM,YACvD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACpB,eAEE,SAAS,EAAE;wBACT,qBAAqB;wBACrB,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE;qBAC5C;yBACE,MAAM,CAAC,OAAO,CAAC;yBACf,IAAI,CAAC,GAAG,CAAC,IANP,CAAC,CAON,CACH,CAAC,GACG,EACP,eAAM,SAAS,EAAC,uBAAuB,YACpC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,GACtB,EACP,eAAM,SAAS,EAAC,uBAAuB,YAAE,KAAK,GAAQ,IACjD,CACR,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,mBAAmB,CAAC,WAAW,GAAG,qBAAqB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import React from 'react';
2
+ export interface StreamingTextProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
3
+ /** The text so far. Re-render with more of it; this component appends nothing. */
4
+ children?: React.ReactNode;
5
+ /** More is still arriving. Shows the cursor and marks the region busy. */
6
+ isStreaming?: boolean;
7
+ /**
8
+ * Rows of height to hold while the text is short, so the page below does not
9
+ * climb the screen as tokens arrive. Costs blank space at the start and buys
10
+ * a layout that does not move under a reader.
11
+ */
12
+ minLines?: number;
13
+ /** Accessible name for the region. */
14
+ label?: string;
15
+ /** Hide the trailing cursor. The text still marks itself busy. */
16
+ hideCursor?: boolean;
17
+ }
18
+ /**
19
+ * StreamingText — model output arriving a token at a time.
20
+ *
21
+ * IT IS NOT A LIVE REGION, AND THAT IS THE WHOLE DESIGN
22
+ *
23
+ * The obvious implementation — `aria-live="polite"` on the container — is the
24
+ * one that makes a screen reader unusable. Every token mutation queues an
25
+ * announcement, so the user hears the answer re-read, stuttered, dozens of
26
+ * times, and cannot get ahead of it. `aria-live="off"` is not an oversight
27
+ * here; it is the accessible choice.
28
+ *
29
+ * What it does instead: `aria-busy` while streaming, so assistive tech knows
30
+ * the region is unsettled and can wait. The text is ordinary readable content
31
+ * throughout — a screen-reader user navigates into it whenever they want,
32
+ * exactly like sighted users reading ahead of the cursor.
33
+ *
34
+ * ANNOUNCING COMPLETION IS THE CALLER'S CALL, not this component's. Some
35
+ * surfaces want "response complete"; a chat with ten turns on screen does not
36
+ * want ten of them. Render your own `role="status"` when you want it.
37
+ *
38
+ * THE HEIGHT IS RESERVED, NOT ANIMATED. `minLines` holds space in `lh` units so
39
+ * the content below stays still. A container that grows token by token drags
40
+ * the whole page, which is worse for someone using magnification than the wait.
41
+ *
42
+ * The cursor is CSS and `aria-hidden`. It stops blinking under
43
+ * `prefers-reduced-motion` — a blinking element is a WCAG 2.3.1 concern and a
44
+ * genuine problem for some vestibular and attention conditions.
45
+ */
46
+ export declare const StreamingText: React.ForwardRefExoticComponent<StreamingTextProps & React.RefAttributes<HTMLDivElement>>;
47
+ //# sourceMappingURL=StreamingText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamingText.d.ts","sourceRoot":"","sources":["../../src/components/StreamingText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAC9C,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EACpC,UAAU,CACX;IACC,kFAAkF;IAClF,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,aAAa,2FA4CzB,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ /**
4
+ * StreamingText — model output arriving a token at a time.
5
+ *
6
+ * IT IS NOT A LIVE REGION, AND THAT IS THE WHOLE DESIGN
7
+ *
8
+ * The obvious implementation — `aria-live="polite"` on the container — is the
9
+ * one that makes a screen reader unusable. Every token mutation queues an
10
+ * announcement, so the user hears the answer re-read, stuttered, dozens of
11
+ * times, and cannot get ahead of it. `aria-live="off"` is not an oversight
12
+ * here; it is the accessible choice.
13
+ *
14
+ * What it does instead: `aria-busy` while streaming, so assistive tech knows
15
+ * the region is unsettled and can wait. The text is ordinary readable content
16
+ * throughout — a screen-reader user navigates into it whenever they want,
17
+ * exactly like sighted users reading ahead of the cursor.
18
+ *
19
+ * ANNOUNCING COMPLETION IS THE CALLER'S CALL, not this component's. Some
20
+ * surfaces want "response complete"; a chat with ten turns on screen does not
21
+ * want ten of them. Render your own `role="status"` when you want it.
22
+ *
23
+ * THE HEIGHT IS RESERVED, NOT ANIMATED. `minLines` holds space in `lh` units so
24
+ * the content below stays still. A container that grows token by token drags
25
+ * the whole page, which is worse for someone using magnification than the wait.
26
+ *
27
+ * The cursor is CSS and `aria-hidden`. It stops blinking under
28
+ * `prefers-reduced-motion` — a blinking element is a WCAG 2.3.1 concern and a
29
+ * genuine problem for some vestibular and attention conditions.
30
+ */
31
+ export const StreamingText = forwardRef(({ children, isStreaming = false, minLines, label, hideCursor = false, className, style, ...rest }, ref) => (_jsxs("div", { ...rest, ref: ref, "aria-busy": isStreaming || undefined, "aria-live": "off", "aria-label": label, role: label ? 'region' : undefined, "data-streaming": isStreaming || undefined, style: minLines
32
+ ? {
33
+ '--ion-streaming-min-lines': minLines,
34
+ ...style,
35
+ }
36
+ : style, className: [
37
+ 'ion-streaming-text',
38
+ minLines ? 'ion-streaming-text--reserved' : '',
39
+ className || '',
40
+ ]
41
+ .filter(Boolean)
42
+ .join(' '), children: [children, isStreaming && !hideCursor && (_jsx("span", { className: "ion-streaming-text__cursor", "aria-hidden": "true" }))] })));
43
+ StreamingText.displayName = 'StreamingText';
44
+ //# sourceMappingURL=StreamingText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamingText.js","sourceRoot":"","sources":["../../src/components/StreamingText.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAsB1C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CACrC,CACE,EACE,QAAQ,EACR,WAAW,GAAG,KAAK,EACnB,QAAQ,EACR,KAAK,EACL,UAAU,GAAG,KAAK,EAClB,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EACD,GAAG,EACH,EAAE,CAAC,CACH,kBACM,IAAI,EACR,GAAG,EAAE,GAAG,eACG,WAAW,IAAI,SAAS,eACzB,KAAK,gBACH,KAAK,EACjB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,oBAClB,WAAW,IAAI,SAAS,EACxC,KAAK,EACH,QAAQ;QACN,CAAC,CAAE;YACC,2BAA2B,EAAE,QAAQ;YACrC,GAAG,KAAK;SACe;QAC3B,CAAC,CAAC,KAAK,EAEX,SAAS,EAAE;QACT,oBAAoB;QACpB,QAAQ,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE;QAC9C,SAAS,IAAI,EAAE;KAChB;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,aAEX,QAAQ,EACR,WAAW,IAAI,CAAC,UAAU,IAAI,CAC7B,eAAM,SAAS,EAAC,4BAA4B,iBAAa,MAAM,GAAG,CACnE,IACG,CACP,CACF,CAAC;AAEF,aAAa,CAAC,WAAW,GAAG,eAAe,CAAC"}
@@ -50,4 +50,12 @@ export { AgentStop } from './AgentStop.js';
50
50
  export type { AgentStopProps, AgentStopSize } from './AgentStop.js';
51
51
  export { ApprovalGate } from './ApprovalGate.js';
52
52
  export type { ApprovalGateProps, ApprovalGateRisk, ApprovalGateStatus, } from './ApprovalGate.js';
53
+ export { StreamingText } from './StreamingText.js';
54
+ export type { StreamingTextProps } from './StreamingText.js';
55
+ export { AgentActivity, AgentActivityStep } from './AgentActivity.js';
56
+ export type { AgentActivityProps, AgentActivityStepProps, AgentActivityStatus, } from './AgentActivity.js';
57
+ export { Citation, CitationList, CitationListItem } from './Citation.js';
58
+ export type { CitationProps, CitationListProps, CitationListItemProps, } from './Citation.js';
59
+ export { ConfidenceIndicator } from './ConfidenceIndicator.js';
60
+ export type { ConfidenceIndicatorProps, ConfidenceLevel, } from './ConfidenceIndicator.js';
53
61
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
@@ -24,4 +24,8 @@ export { ScrollProgress } from './ScrollProgress.js';
24
24
  export { FullCard } from './FullCard.js';
25
25
  export { AgentStop } from './AgentStop.js';
26
26
  export { ApprovalGate } from './ApprovalGate.js';
27
+ export { StreamingText } from './StreamingText.js';
28
+ export { AgentActivity, AgentActivityStep } from './AgentActivity.js';
29
+ export { Citation, CitationList, CitationListItem } from './Citation.js';
30
+ export { ConfidenceIndicator } from './ConfidenceIndicator.js';
27
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAOnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAO/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAOlD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAO3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAS5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAU9E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAOnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAO/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAOlD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAO3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAS5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAU9E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAMtE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}