ionbase-ui 0.22.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 (56) 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/AgentStop.d.ts +58 -0
  6. package/dist/components/AgentStop.d.ts.map +1 -0
  7. package/dist/components/AgentStop.js +82 -0
  8. package/dist/components/AgentStop.js.map +1 -0
  9. package/dist/components/ApprovalGate.d.ts +72 -0
  10. package/dist/components/ApprovalGate.d.ts.map +1 -0
  11. package/dist/components/ApprovalGate.js +68 -0
  12. package/dist/components/ApprovalGate.js.map +1 -0
  13. package/dist/components/Citation.d.ts +51 -0
  14. package/dist/components/Citation.d.ts.map +1 -0
  15. package/dist/components/Citation.js +41 -0
  16. package/dist/components/Citation.js.map +1 -0
  17. package/dist/components/ConfidenceIndicator.d.ts +37 -0
  18. package/dist/components/ConfidenceIndicator.d.ts.map +1 -0
  19. package/dist/components/ConfidenceIndicator.js +41 -0
  20. package/dist/components/ConfidenceIndicator.js.map +1 -0
  21. package/dist/components/StreamingText.d.ts +47 -0
  22. package/dist/components/StreamingText.d.ts.map +1 -0
  23. package/dist/components/StreamingText.js +44 -0
  24. package/dist/components/StreamingText.js.map +1 -0
  25. package/dist/components/index.d.ts +12 -0
  26. package/dist/components/index.d.ts.map +1 -1
  27. package/dist/components/index.js +6 -0
  28. package/dist/components/index.js.map +1 -1
  29. package/dist/figma-descriptions.json +147 -0
  30. package/dist/figma-map.json +3 -1
  31. package/dist/meta/AgentActivity.json +103 -0
  32. package/dist/meta/AgentActivityStep.json +117 -0
  33. package/dist/meta/AgentStop.json +164 -0
  34. package/dist/meta/ApprovalGate.json +255 -0
  35. package/dist/meta/Avatar.json +2 -2
  36. package/dist/meta/AvatarGroup.json +2 -2
  37. package/dist/meta/Citation.json +101 -0
  38. package/dist/meta/CitationList.json +94 -0
  39. package/dist/meta/CitationListItem.json +88 -0
  40. package/dist/meta/ConfidenceIndicator.json +115 -0
  41. package/dist/meta/Input.json +2 -2
  42. package/dist/meta/PhoneInput.json +38 -38
  43. package/dist/meta/StreamingText.json +99 -0
  44. package/dist/meta/components.json +2125 -989
  45. package/dist/meta/contrast.json +1086 -32
  46. package/dist/meta/index.json +100 -5
  47. package/dist/meta/patterns/index.json +1 -1
  48. package/dist/styles/agent-activity.css +95 -0
  49. package/dist/styles/agent-stop.css +109 -0
  50. package/dist/styles/approval-gate.css +181 -0
  51. package/dist/styles/citation.css +93 -0
  52. package/dist/styles/confidence-indicator.css +97 -0
  53. package/dist/styles/index.css +34 -0
  54. package/dist/styles/streaming-text.css +56 -0
  55. package/llms.txt +2 -2
  56. package/package.json +4 -3
@@ -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"}
@@ -46,4 +46,16 @@ export { ScrollProgress } from './ScrollProgress.js';
46
46
  export type { ScrollProgressProps, ScrollProgressSection, } from './ScrollProgress.js';
47
47
  export { FullCard } from './FullCard.js';
48
48
  export type { FullCardProps, FullCardAlignment, FullCardHeadingLevel, } from './FullCard.js';
49
+ export { AgentStop } from './AgentStop.js';
50
+ export type { AgentStopProps, AgentStopSize } from './AgentStop.js';
51
+ export { ApprovalGate } from './ApprovalGate.js';
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';
49
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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"}
@@ -22,4 +22,10 @@ export { NavItem } from './NavItem.js';
22
22
  export { Table, TableHead, TableBody, TableRow, TableCell } from './Table.js';
23
23
  export { ScrollProgress } from './ScrollProgress.js';
24
24
  export { FullCard } from './FullCard.js';
25
+ export { AgentStop } from './AgentStop.js';
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';
25
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"}
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"}
@@ -0,0 +1,147 @@
1
+ {
2
+ "version": "0.25.0",
3
+ "begin": "───── CODE · ionbase-ui ─────",
4
+ "end": "───── end code ─────",
5
+ "blocks": {
6
+ "21:461": {
7
+ "figmaComponent": "Button",
8
+ "component": "Button",
9
+ "block": "───── CODE · ionbase-ui ─────\nimport { Button } from 'ionbase-ui';\n<Button variant=\"primary-brand\" size=\"sm\">Label</Button>\n\nPROPERTIES\n Type → variant: Primary Brand=primary-brand, Primary Neutral=primary-neutral, Primary Soft=primary-soft, Secondary=secondary, Tertiary=tertiary, Destructive=destructive, Success=success\n Size → size: Small=sm, Medium=md, Large=lg, XLarge=xl\n State → isDisabled (Disabled only)\n Label → children\n Leading Icon → startIcon\n Trailing Icon → endIcon\n Show Leading Icon → startIcon\n Show Trailing Icon → endIcon\n\nNOTES\n State: Default, Hover, Pressed and Focus are CSS and React Aria — :hover, :focus-visible, data-pressed — not props. Only Disabled is one.\n Leading Icon: wrap in Icon; omit Icon's label, the button text names it\n Trailing Icon: same\n Show Leading Icon: an absent prop is the switch — React needs no Show boolean, so false means omit startIcon\n Show Trailing Icon: same\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/button/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
10
+ },
11
+ "623:151": {
12
+ "figmaComponent": "Icon Button",
13
+ "component": "Button",
14
+ "block": "───── CODE · ionbase-ui ─────\nimport { Button } from 'ionbase-ui';\n<Button variant=\"primary-brand\" size=\"sm\" aria-label=\"…\" />\n\nPROPERTIES\n Type → variant: Primary Brand=primary-brand, Primary Neutral=primary-neutral, Primary Soft=primary-soft, Secondary=secondary, Tertiary=tertiary, Destructive=destructive, Success=success\n Size → size: Small=sm, Medium=md, Large=lg, XLarge=xl\n State → isDisabled (Disabled only)\n Icon → startIcon\n\nNot a separate component in code: an icon-only Button. It is the one case where aria-label is required, because there is no text to name it.\n\nNOTES\n State: as Button\n Icon: with Icon's own label omitted — the Button's aria-label carries the name\n Shape: Figma draws a square and a circle variant; code has no shape prop. A round icon button is a className, not an API.\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/button/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
15
+ },
16
+ "80:275": {
17
+ "figmaComponent": "Input",
18
+ "component": "Input",
19
+ "block": "───── CODE · ionbase-ui ─────\nimport { Input } from 'ionbase-ui';\n<Input size=\"lg\" label=\"…\" />\n\nPROPERTIES\n Size → size: Small=sm, Medium=md, Large=lg\n State → isInvalid (Invalid only)\n Value → value\n Leading Icon → leadingIcon\n Trailing Icon → trailingIcon\n Show Leading Icon → leadingIcon\n Show Trailing Icon → trailingIcon\n\nNOTES\n State: Hover, Focus and Filled are CSS or content. Disabled is isDisabled, Read-only is isReadOnly — both react-aria props rather than this axis.\n Value: or defaultValue when uncontrolled; Figma's text is placeholder content, not necessarily a value\n Show Leading Icon: false means omit the prop\n Show Trailing Icon: false means omit the prop\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/input/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
20
+ },
21
+ "80:372": {
22
+ "figmaComponent": "Input/Phone",
23
+ "component": "PhoneInput",
24
+ "block": "───── CODE · ionbase-ui ─────\nimport { PhoneInput } from 'ionbase-ui';\n<PhoneInput size=\"lg\" label=\"…\" />\n\nPROPERTIES\n Size → size: Small=sm, Medium=md, Large=lg\n Dial Code → dialCode\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/phone-input/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
25
+ },
26
+ "82:379": {
27
+ "figmaComponent": "Select",
28
+ "component": "Select",
29
+ "block": "───── CODE · ionbase-ui ─────\nimport { Select } from 'ionbase-ui';\n<Select size=\"lg\" label=\"…\" />\n\nPROPERTIES\n Size → size: Small=sm, Medium=md, Large=lg\n State → isInvalid (Invalid only)\n Value → placeholder\n\nNOTES\n State: Hover, Focus and Filled are CSS or content; Disabled is isDisabled\n Value: Figma's text is the collapsed display value. In code that is `placeholder` when nothing is chosen; once something is, the label comes from the `options` array.\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/select/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
30
+ },
31
+ "87:350": {
32
+ "figmaComponent": "Checkbox",
33
+ "component": "Checkbox",
34
+ "block": "───── CODE · ionbase-ui ─────\nimport { Checkbox } from 'ionbase-ui';\n<Checkbox size=\"sm\" intent=\"brand\">Label</Checkbox>\n\nPROPERTIES\n Size → size: Small=sm, Medium=md, Large=lg\n Color → intent: Brand=brand, Neutral=neutral, Danger=danger\n State → isIndeterminate (Indeterminate, Indeterminate-disabled only)\n Label → children\n Show Label → children\n\nNOTES\n State: Checked is `checked`/`defaultChecked`, and the -disabled halves are isDisabled. One Figma axis, three code props, which is why it is not a single mapping.\n Show Label: false means a bare box — and then aria-label becomes required\n Focused: a drawn focus ring. In code it is :focus-visible, which the browser owns.\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/checkbox/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
35
+ },
36
+ "89:314": {
37
+ "figmaComponent": "Radio",
38
+ "component": "Radio",
39
+ "block": "───── CODE · ionbase-ui ─────\nimport { Radio } from 'ionbase-ui';\n<Radio size=\"lg\" intent=\"brand\" value={…}>Label</Radio>\n\nPROPERTIES\n Size → size: Small=sm, Medium=md, Large=lg\n Color → intent: Brand=brand, Neutral=neutral, Danger=danger\n Label → children\n Show Label → children\n\nNOTES\n State: Selected/Unselected is the RadioGroup's value, not a prop on the Radio — a radio cannot own its own selection\n Show Label: false means aria-label is required\n Focused: drawn focus ring; :focus-visible in code\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/radio/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
40
+ },
41
+ "88:323": {
42
+ "figmaComponent": "Toggle",
43
+ "component": "Toggle",
44
+ "block": "───── CODE · ionbase-ui ─────\nimport { Toggle } from 'ionbase-ui';\n<Toggle size=\"sm\" intent=\"brand\">Label</Toggle>\n\nPROPERTIES\n Size → size: Small=sm, Medium=md, Large=lg\n Color → intent: Brand=brand, Neutral=neutral, Danger=danger\n Label → children\n Show Label → children\n\nNOTES\n State: On/Off is `checked`/`defaultChecked` on the underlying input, not a Toggle prop\n Show Label: false means aria-label is required\n Focused: drawn focus ring; :focus-visible in code\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/toggle/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
45
+ },
46
+ "152:73": {
47
+ "figmaComponent": "Badge",
48
+ "component": "Badge",
49
+ "block": "───── CODE · ionbase-ui ─────\nimport { Badge } from 'ionbase-ui';\n<Badge intent=\"neutral\">Label</Badge>\n\nPROPERTIES\n Intent → intent: Neutral=neutral, Primary=primary, Success=success, Warning=warning, Error=error, Information=information\n Label → children\n Show Label → children\n Show Dot → dot\n Show Icon → icon\n Swap Icon → icon\n\nNOTES\n Show Icon: false means omit icon; dot wins when both are set\n Size: Figma draws three sizes; code has no size prop. Badge inherits its type from the text it labels — the same call Link makes.\n Shape: Pill and Rounded are one radius token apart and code ships the pill only. Add the prop when a real screen needs both, not before.\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/badge/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
50
+ },
51
+ "812:1902": {
52
+ "figmaComponent": "Alert",
53
+ "component": "Alert",
54
+ "block": "───── CODE · ionbase-ui ─────\nimport { Alert } from 'ionbase-ui';\n<Alert intent=\"information\" emphasis=\"subtle\" layout=\"inline\">Label</Alert>\n\nPROPERTIES\n Intent → intent: Neutral=neutral, Primary=primary, Success=success, Warning=warning, Error=error, Information=information\n Emphasis → emphasis: Subtle=subtle, Solid=solid\n Layout → layout: Inline=inline, Banner=banner\n Title → title\n Show Title → title\n Message → children\n Show Icon → hideIcon\n Show Dismiss → onDismiss\n Show Actions → actions\n\nNOTES\n Show Title: false means omit title\n Show Icon: inverted — Figma's Show Icon false is hideIcon true\n Show Dismiss: the dismiss button appears when a handler is passed; there is no boolean\n Show Actions: an absent prop is the switch\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/alert/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
55
+ },
56
+ "820:1655": {
57
+ "figmaComponent": "Toast",
58
+ "component": "Toast",
59
+ "block": "───── CODE · ionbase-ui ─────\nimport { Toast } from 'ionbase-ui';\n<Toast intent=\"information\" onDismiss={…} id={…} />\n\nPROPERTIES\n Intent → intent: Neutral=neutral, Primary=primary, Success=success, Warning=warning, Error=error, Information=information\n Title → title\n Show Title → title\n Message → message\n Show Message → message\n Show Action → action\n Show Dismiss → dismissLabel\n\nNOTES\n Show Action: one action only — a second belongs in a Modal\n Show Dismiss: the dismiss control is always rendered; only its label is configurable\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/toast/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
60
+ },
61
+ "774:1516": {
62
+ "figmaComponent": "Link",
63
+ "component": "Link",
64
+ "block": "───── CODE · ionbase-ui ─────\nimport { Link } from 'ionbase-ui';\n<Link variant=\"inline\">Label</Link>\n\nPROPERTIES\n Type → variant: Inline=inline, Standalone=standalone\n State → isDisabled (Disabled only)\n Label → children\n Leading Icon → startIcon\n Trailing Icon → endIcon\n Show Leading Icon → startIcon\n Show Trailing Icon → endIcon\n\nNOTES\n State: Hover and Focus are CSS; Visited is :visited, which no prop can set\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/link/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
65
+ },
66
+ "53:13": {
67
+ "figmaComponent": "Nav Item",
68
+ "component": "NavItem",
69
+ "block": "───── CODE · ionbase-ui ─────\nimport { NavItem } from 'ionbase-ui';\n<NavItem>Label</NavItem>\n\nPROPERTIES\n Label → children\n Icon → icon\n Show Chevron → showChevron\n\nNOTES\n State: Default and Hover are CSS and React Aria's useHover, not props\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/nav-item/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
70
+ },
71
+ "82:306": {
72
+ "figmaComponent": "Menu",
73
+ "component": "Menu",
74
+ "block": "───── CODE · ionbase-ui ─────\nimport { Menu } from 'ionbase-ui';\n<Menu />\n\nNOTES\n Type: Single and Multi describe how many items may be selected, which is the caller's state. Menu renders the surface and holds no selection of its own.\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/menu/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
75
+ },
76
+ "639:2634": {
77
+ "figmaComponent": "Menu Item",
78
+ "component": "MenuItem",
79
+ "block": "───── CODE · ionbase-ui ─────\nimport { MenuItem } from 'ionbase-ui';\n<MenuItem>Label</MenuItem>\n\nPROPERTIES\n Status → isSelected (Selected, Selected Primary only)\n Text → children\n Show Icon → icon\n Select Icon → icon\n\nNOTES\n Status: Hover is CSS. Selected Primary is a second selected styling Figma draws and code does not yet ship.\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/menu-item/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
80
+ },
81
+ "157:126": {
82
+ "figmaComponent": "Tabs",
83
+ "component": "Tabs",
84
+ "block": "───── CODE · ionbase-ui ─────\nimport { Tabs } from 'ionbase-ui';\n<Tabs type=\"pill\" orientation=\"horizontal\" aria-label=\"…\" />\n\nPROPERTIES\n Type → type: Pill=pill, Underline=underline\n Orientation → orientation: Horizontal=horizontal, Vertical=vertical\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/tabs/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
85
+ },
86
+ "156:259": {
87
+ "figmaComponent": "Tabs Item",
88
+ "component": "TabItem",
89
+ "block": "───── CODE · ionbase-ui ─────\nimport { TabItem } from 'ionbase-ui';\n<TabItem key=\"billing\" title=\"Billing\">Panel content</TabItem>\n\nTabItem is a collection item and takes no props of its own. Type, Size and State belong to the parent Tabs or to its selection state, which is why almost everything here is ignored rather than mapped.\n\nNOTES\n Label: TabItem's label is its `title` collection prop. It is not a typed prop the TypeScript checker can see, so there is nothing here to verify against — see TabItem's contract.\n Type: set on the parent Tabs, not per item\n Size: set on the parent Tabs, not per item\n State: selection is the Tabs collection's state; Disabled is disabledKeys on Tabs\n Show Label: a tab without a label is a tab that cannot be named\n Show Leading Icon: not yet in the code component\n Leading Icon: not yet in the code component\n Show Trailing: not yet in the code component\n Trailing: not yet in the code component\n Focused: drawn focus ring; :focus-visible in code\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/tab-item/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
90
+ },
91
+ "174:103": {
92
+ "figmaComponent": "Table Cell",
93
+ "component": "TableCell",
94
+ "block": "───── CODE · ionbase-ui ─────\nimport { TableCell } from 'ionbase-ui';\n<TableCell align=\"leading\" />\n\nPROPERTIES\n Type → header (Header only)\n Align → align: Leading=leading, Trailing=trailing\n Show Divider → showDivider\n Content → children\n Show Content → children\n\nNOTES\n Type: Body is the default <td>\n Density: density is set once on Table and reaches the cell through CSS — a per-cell prop could disagree with its own table\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/table-cell/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
95
+ },
96
+ "175:605": {
97
+ "figmaComponent": "Table Row",
98
+ "component": "TableRow",
99
+ "block": "───── CODE · ionbase-ui ─────\nimport { TableRow } from 'ionbase-ui';\n<TableRow />\n\nPROPERTIES\n State → isSelected (Selected, Selected-Hover only)\n Show Selection → selection\n\nNOTES\n State: Hover is CSS\n Show Selection: takes the Checkbox's own props, not a boolean — a selectable row needs checked/onChange wiring\n Density: set once on Table; see Table Cell\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/table-row/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
100
+ },
101
+ "74:164": {
102
+ "figmaComponent": "Avatar",
103
+ "component": "Avatar",
104
+ "block": "───── CODE · ionbase-ui ─────\nimport { Avatar } from 'ionbase-ui';\n<Avatar size=\"lg\" shape=\"circle\" />\n\nPROPERTIES\n Size → size: Mini=mini, Small=sm, Medium=md, Large=lg\n Shape → shape: Circle=circle, Square=square\n Type → src (Image only)\n Initials → initials\n Icon → icon\n\nNOTES\n Type: code picks by precedence rather than a type prop: src, then initials, then icon. Character means pass initials, Icon means pass icon.\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/avatar/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
105
+ },
106
+ "74:279": {
107
+ "figmaComponent": "Avatar Group",
108
+ "component": "AvatarGroup",
109
+ "block": "───── CODE · ionbase-ui ─────\nimport { AvatarGroup } from 'ionbase-ui';\n<AvatarGroup size=\"lg\" shape=\"circle\" />\n\nPROPERTIES\n Size → size: Mini=mini, Small=sm, Medium=md, Large=lg\n Shape → shape: Circle=circle, Square=square\n Show Overflow → max\n Show Avatar 3 → children\n Show Avatar 4 → children\n\nNOTES\n Show Overflow: the +N avatar appears when children exceed max\n Show Avatar 3: Figma needs a boolean per slot; React just renders fewer children\n Show Avatar 4: same\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/avatar-group/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
110
+ },
111
+ "126:22724": {
112
+ "figmaComponent": "Border",
113
+ "component": "Divider",
114
+ "block": "───── CODE · ionbase-ui ─────\nimport { Divider } from 'ionbase-ui';\n<Divider orientation=\"vertical\" />\n\nPROPERTIES\n Style → orientation: Horizontal=horizontal, Vertical=vertical\n\nFigma calls it Border; the code component is Divider, because it renders an <hr> and an <hr> is a thematic break rather than an edge.\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/divider/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
115
+ },
116
+ "52:21369": {
117
+ "figmaComponent": "Logo-Ionbase",
118
+ "component": "Logo",
119
+ "block": "───── CODE · ionbase-ui ─────\nimport { Logo } from 'ionbase-ui';\n<Logo size=\"sm\" wordmark=\"vector\" />\n\nPROPERTIES\n Size → size: Small=sm, Large=lg\n Type → wordmark: Logo=vector, Icon=text\n\nNOTES\n Type: the names invert: Figma's Logo is the serif vector wordmark, Figma's Icon is live Host Grotesk text\n Property: the Name axis renders placeholder text in an unbound colour — leftover debug content, not a real asset. LogoMark covers the no-wordmark case.\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/logo/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
120
+ },
121
+ "792:1537": {
122
+ "figmaComponent": "Modal",
123
+ "component": "Modal",
124
+ "block": "───── CODE · ionbase-ui ─────\nimport { Modal } from 'ionbase-ui';\n<Modal size=\"sm\" align=\"left\" title={…} />\n\nPROPERTIES\n Size → size: Small=sm, Medium=md, Large=lg, Fullscreen=fullscreen\n Align → align: Left=left, Center=center\n Title → title\n Description → description\n Show Description → description\n Show Close → showClose\n Show Body → children\n Show Footer → footer\n Show Media → media\n Media → media\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/modal/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
125
+ },
126
+ "825:1853": {
127
+ "figmaComponent": "Popover",
128
+ "component": "Popover",
129
+ "block": "───── CODE · ionbase-ui ─────\nimport { Popover } from 'ionbase-ui';\n<Popover placement=\"bottom\" size=\"sm\">…</Popover>\n\nPROPERTIES\n Placement → placement: Top=top, Bottom=bottom, Left=left, Right=right\n Size → size: Small=sm, Medium=md, Large=lg\n Title → title\n Show Header → title\n Body → content\n Show Body → content\n Show Close → showClose\n Show Footer → footer\n Show Arrow → hideArrow\n\nNOTES\n Show Arrow: inverted — Show Arrow false is hideArrow true\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/popover/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
130
+ },
131
+ "801:68": {
132
+ "figmaComponent": "Tooltip",
133
+ "component": "Tooltip",
134
+ "block": "───── CODE · ionbase-ui ─────\nimport { Tooltip } from 'ionbase-ui';\n<Tooltip placement=\"top\" label={…}>…</Tooltip>\n\nPROPERTIES\n Placement → placement: Top=top, Bottom=bottom, Left=left, Right=right\n Label → label\n Title → title\n Show Title → title\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/tooltip/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
135
+ },
136
+ "592:857": {
137
+ "figmaComponent": "Full Card",
138
+ "component": "FullCard",
139
+ "block": "───── CODE · ionbase-ui ─────\nimport { FullCard } from 'ionbase-ui';\n<FullCard alignment=\"right\" headline={…} />\n\nPROPERTIES\n Row Reverse → alignment: True=left, False=right\n Headline → headline\n Description → description\n Show Description → description\n Eyebrow → eyebrow\n Show Eyebrow → eyebrow\n Actions → actions\n Show Actions → actions\n Media → media\n\nNOTES\n Row Reverse: Figma's boolean reverses the row; the code prop names which side the MEDIA sits on\n Media: pass the screenshot itself — the component draws the frame\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/full-card/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
140
+ },
141
+ "69:335": {
142
+ "figmaComponent": "Header",
143
+ "component": "Header",
144
+ "block": "───── CODE · ionbase-ui ─────\nimport { Header } from 'ionbase-ui';\n<Header />\n\nPROPERTIES\n Device → open (Mobile-Open, Mobile-Closed only)\n Center Slot → center\n End Slot → end\n Show Center Slot → center\n Show End Slot → end\n\nNOTES\n Device: Figma spells one four-way axis; code splits it in two. Desktop/Tablet/Mobile is a media query the browser already answers, and only Open/Closed is a prop.\n End Slot: a duplicate slot in the Figma component\n\nFull contract: https://raza-ahmed.github.io/ionbase-design-system/components/header/index.html.md\nGenerated from ionbase-ui@0.25.0. Edit the code, not this block.\n───── end code ─────"
145
+ }
146
+ }
147
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "ionbase-ui",
3
- "version": "0.22.0",
3
+ "version": "0.25.0",
4
4
  "figmaFile": "gaLbGd0QNb1fUl6BjSpfBA",
5
5
  "figmaExported": "2026-08-21",
6
6
  "usage": "Given a Figma node id or component name, look it up here for the React component, its import, and how each Figma property maps onto a real prop. Every mapping is verified against both the Figma export and the TypeScript API on each build.",
@@ -598,6 +598,7 @@
598
598
  "import": "import { TabItem } from 'ionbase-ui';",
599
599
  "docs": "components/tab-item/index.html.md",
600
600
  "note": "TabItem is a collection item and takes no props of its own. Type, Size and State belong to the parent Tabs or to its selection state, which is why almost everything here is ignored rather than mapped.",
601
+ "example": "<TabItem key=\"billing\" title=\"Billing\">Panel content</TabItem>",
601
602
  "props": {
602
603
  "Label#156:216": {
603
604
  "ignore": "TabItem's label is its `title` collection prop. It is not a typed prop the TypeScript checker can see, so there is nothing here to verify against — see TabItem's contract."
@@ -1613,6 +1614,7 @@
1613
1614
  "import": "import { TabItem } from 'ionbase-ui';",
1614
1615
  "docs": "components/tab-item/index.html.md",
1615
1616
  "note": "TabItem is a collection item and takes no props of its own. Type, Size and State belong to the parent Tabs or to its selection state, which is why almost everything here is ignored rather than mapped.",
1617
+ "example": "<TabItem key=\"billing\" title=\"Billing\">Panel content</TabItem>",
1616
1618
  "props": {
1617
1619
  "Label#156:216": {
1618
1620
  "ignore": "TabItem's label is its `title` collection prop. It is not a typed prop the TypeScript checker can see, so there is nothing here to verify against — see TabItem's contract."
@@ -0,0 +1,103 @@
1
+ {
2
+ "name": "AgentActivity",
3
+ "source": "src/components/AgentActivity.tsx",
4
+ "propsType": "AgentActivityProps",
5
+ "description": "AgentActivity — what the agent is doing, in plain language.\n\nAn ordered list, because the steps happened in an order and a screen reader\nshould say \"3 of 7\". Not a log viewer: this is the account a person reads to\ndecide whether to let the run continue, so the text belongs in their\nlanguage — \"Searched the invoice archive\", not `searchIndex(q, {limit:50})`.\n\nSTATUS IS NEVER CARRIED BY THE ICON ALONE. Every step renders its status as\ntext as well as a glyph. The glyphs differ in shape rather than only in\ncolour, so the list survives greyscale, colour blindness and forced-colours\nmode — WCAG 1.4.1, which a row of coloured dots fails outright.\n\nONE POLITE ANNOUNCEMENT PER STEP, not one per render. The active step's text\nis announced when it changes, so a user who is not watching still knows where\nthe run has got to. Watching the DOM instead would re-announce on every\nunrelated update, which is the failure mode that makes people turn logs off.",
6
+ "import": "import { AgentActivity } from 'ionbase-ui';",
7
+ "status": "stable",
8
+ "summary": "An ordered, plain-language log of what the agent is doing. Status is text and shape, never colour alone.",
9
+ "useWhen": [
10
+ "a run takes long enough that the user needs to know where it has got to",
11
+ "a person will decide whether to let it continue — which means they need to read what it did"
12
+ ],
13
+ "useInstead": [
14
+ {
15
+ "when": "the output is prose rather than steps",
16
+ "use": "StreamingText"
17
+ },
18
+ {
19
+ "when": "you need a decision, not a report",
20
+ "use": "ApprovalGate"
21
+ },
22
+ {
23
+ "when": "it is one finished outcome",
24
+ "use": "Alert"
25
+ }
26
+ ],
27
+ "composition": {
28
+ "order": [
29
+ "AgentActivity",
30
+ "AgentActivityStep"
31
+ ],
32
+ "note": "An <ol>, so a screen reader can say \"3 of 7\" and the order is structural rather than typed into each row.",
33
+ "example": "<AgentActivity><AgentActivityStep status=\"done\">Searched the invoice archive</AgentActivityStep><AgentActivityStep status=\"active\">Reading 12 matches</AgentActivityStep></AgentActivity>"
34
+ },
35
+ "a11y": {
36
+ "role": "list",
37
+ "guarantees": [
38
+ "every step renders its status as visually hidden text as well as a glyph, and the glyphs differ in shape rather than only in colour — a row of coloured dots fails WCAG 1.4.1 outright",
39
+ "the active step is announced once, when it changes, in a polite live region",
40
+ "the active step's spinner stops under `prefers-reduced-motion`"
41
+ ],
42
+ "requires": [
43
+ "step text in the user's language — \"Searched the invoice archive\", not a function signature",
44
+ "`announceActive={false}` when several logs are on screen, or they narrate over each other"
45
+ ],
46
+ "notes": [
47
+ "The active step is read out of the children rather than taken as a prop. Two sources for one fact is how they come to disagree."
48
+ ]
49
+ },
50
+ "antiPatterns": [
51
+ {
52
+ "dont": "raw tool calls or JSON as the step label",
53
+ "why": "this is the account a person reads to decide whether to let the run continue"
54
+ },
55
+ {
56
+ "dont": "more than one step with `status=\"active\"`",
57
+ "why": "the announcement names one thing, and two claims about what is happening now cannot both be true"
58
+ },
59
+ {
60
+ "dont": "several announcing logs on one screen",
61
+ "do": "`announceActive={false}` on all but one",
62
+ "why": "they interrupt each other and the user turns the whole thing off"
63
+ }
64
+ ],
65
+ "stylesheet": "src/styles/agent-activity.css",
66
+ "tokens": [
67
+ "--font-family-sans",
68
+ "--icon-error",
69
+ "--icon-primary",
70
+ "--icon-size-sm",
71
+ "--icon-success",
72
+ "--icon-tertiary",
73
+ "--spacing-2",
74
+ "--spacing-8",
75
+ "--text-default",
76
+ "--text-error",
77
+ "--text-secondary",
78
+ "--text-tertiary",
79
+ "--type-body-sm",
80
+ "--type-body-sm-line-height",
81
+ "--type-caption",
82
+ "--type-caption-line-height"
83
+ ],
84
+ "props": {
85
+ "children": {
86
+ "type": "React.ReactNode",
87
+ "required": false,
88
+ "origin": "own"
89
+ },
90
+ "announceActive": {
91
+ "type": "boolean | undefined",
92
+ "required": false,
93
+ "origin": "own",
94
+ "description": "Announce the step that just became active, once, in a polite live region.\n\nOn by default because the whole point of an activity log is knowing what\nthe agent is doing without watching it. Turn it off when several logs are\non screen at once, or they narrate over each other."
95
+ }
96
+ },
97
+ "propCounts": {
98
+ "own": 2,
99
+ "aria": 0,
100
+ "dom": 277,
101
+ "other": 0
102
+ }
103
+ }
@@ -0,0 +1,117 @@
1
+ {
2
+ "name": "AgentActivityStep",
3
+ "source": "src/components/AgentActivity.tsx",
4
+ "propsType": "AgentActivityStepProps",
5
+ "import": "import { AgentActivityStep } from 'ionbase-ui';",
6
+ "status": "stable",
7
+ "summary": "One step in an activity log: what happened, in the user's language, with a status carried by shape and text.",
8
+ "useWhen": [
9
+ "a child of AgentActivity — it is not usable elsewhere"
10
+ ],
11
+ "useInstead": [
12
+ {
13
+ "when": "it is a row in a dropdown",
14
+ "use": "MenuItem"
15
+ },
16
+ {
17
+ "when": "it is a data row",
18
+ "use": "TableRow"
19
+ }
20
+ ],
21
+ "variants": {
22
+ "status": {
23
+ "pending": {
24
+ "use": "the default — queued, not started"
25
+ },
26
+ "active": {
27
+ "use": "happening now. Only one step should carry it"
28
+ },
29
+ "done": {
30
+ "use": "finished successfully"
31
+ },
32
+ "failed": {
33
+ "use": "did not finish. Say why in `detail`"
34
+ },
35
+ "skipped": {
36
+ "use": "deliberately not run — a branch not taken, a cached result"
37
+ }
38
+ }
39
+ },
40
+ "slots": {
41
+ "children": {
42
+ "accepts": "text",
43
+ "note": "the step in plain language"
44
+ },
45
+ "detail": {
46
+ "accepts": "text",
47
+ "note": "the result, a count, a tool name — whatever makes the step checkable"
48
+ }
49
+ },
50
+ "a11y": {
51
+ "guarantees": [
52
+ "the status name is rendered as visually hidden text, so it is never carried by the glyph's colour alone",
53
+ "each status has a differently shaped glyph, which survives greyscale and forced-colours mode"
54
+ ]
55
+ },
56
+ "antiPatterns": [
57
+ {
58
+ "dont": "`failed` with no `detail`",
59
+ "why": "a failure the reader cannot diagnose is just a red mark"
60
+ },
61
+ {
62
+ "dont": "using it outside AgentActivity",
63
+ "why": "it renders an <li>, which is only valid inside a list"
64
+ }
65
+ ],
66
+ "stylesheet": "src/styles/agent-activity.css",
67
+ "tokens": [
68
+ "--font-family-sans",
69
+ "--icon-error",
70
+ "--icon-primary",
71
+ "--icon-size-sm",
72
+ "--icon-success",
73
+ "--icon-tertiary",
74
+ "--spacing-2",
75
+ "--spacing-8",
76
+ "--text-default",
77
+ "--text-error",
78
+ "--text-secondary",
79
+ "--text-tertiary",
80
+ "--type-body-sm",
81
+ "--type-body-sm-line-height",
82
+ "--type-caption",
83
+ "--type-caption-line-height"
84
+ ],
85
+ "props": {
86
+ "children": {
87
+ "type": "React.ReactNode",
88
+ "required": false,
89
+ "origin": "own",
90
+ "description": "What the agent did, in the user's language. Not a function name."
91
+ },
92
+ "status": {
93
+ "type": "AgentActivityStatus | undefined",
94
+ "required": false,
95
+ "origin": "own",
96
+ "values": [
97
+ "pending",
98
+ "active",
99
+ "done",
100
+ "failed",
101
+ "skipped"
102
+ ]
103
+ },
104
+ "detail": {
105
+ "type": "React.ReactNode",
106
+ "required": false,
107
+ "origin": "own",
108
+ "description": "The result, a tool name, a count — whatever makes the step checkable."
109
+ }
110
+ },
111
+ "propCounts": {
112
+ "own": 3,
113
+ "aria": 0,
114
+ "dom": 278,
115
+ "other": 0
116
+ }
117
+ }