ionbase-ui 0.73.0 → 0.76.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 (36) hide show
  1. package/dist/components/Chart.d.ts +95 -0
  2. package/dist/components/Chart.d.ts.map +1 -0
  3. package/dist/components/Chart.js +60 -0
  4. package/dist/components/Chart.js.map +1 -0
  5. package/dist/components/NavItem.d.ts +7 -0
  6. package/dist/components/NavItem.d.ts.map +1 -1
  7. package/dist/components/NavItem.js +3 -1
  8. package/dist/components/NavItem.js.map +1 -1
  9. package/dist/components/agent-run.d.ts +147 -0
  10. package/dist/components/agent-run.d.ts.map +1 -0
  11. package/dist/components/agent-run.js +250 -0
  12. package/dist/components/agent-run.js.map +1 -0
  13. package/dist/components/index.d.ts +6 -0
  14. package/dist/components/index.d.ts.map +1 -1
  15. package/dist/components/index.js +14 -0
  16. package/dist/components/index.js.map +1 -1
  17. package/dist/components/use-agent-run.d.ts +65 -0
  18. package/dist/components/use-agent-run.d.ts.map +1 -0
  19. package/dist/components/use-agent-run.js +127 -0
  20. package/dist/components/use-agent-run.js.map +1 -0
  21. package/dist/figma-descriptions.json +76 -66
  22. package/dist/figma-map.json +98 -4
  23. package/dist/meta/ChartLegend.json +125 -0
  24. package/dist/meta/ChartTooltip.json +126 -0
  25. package/dist/meta/NavItem.json +17 -3
  26. package/dist/meta/components.json +282 -4
  27. package/dist/meta/contrast.json +528 -0
  28. package/dist/meta/index.json +33 -1
  29. package/dist/meta/patterns/AgentRun.json +14 -0
  30. package/dist/meta/patterns/HumanApproval.json +4 -0
  31. package/dist/meta/patterns/index.json +3 -1
  32. package/dist/styles/chart.css +275 -0
  33. package/dist/styles/index.css +1 -0
  34. package/dist/styles/nav-item.css +37 -2
  35. package/llms.txt +11 -3
  36. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "package": "ionbase-ui",
3
- "version": "0.73.0",
3
+ "version": "0.76.0",
4
4
  "figmaFile": "gaLbGd0QNb1fUl6BjSpfBA",
5
- "figmaExported": "2026-09-24",
5
+ "figmaExported": "2026-09-25",
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.",
7
7
  "generated": "by scripts/verify-figma-map.mjs — do not edit",
8
8
  "byNodeId": {
@@ -1151,7 +1151,11 @@
1151
1151
  "docs": "components/nav-item/index.html.md",
1152
1152
  "props": {
1153
1153
  "State": {
1154
- "ignore": "Default and Hover are CSS and React Aria's useHover, not props"
1154
+ "prop": "isCurrent",
1155
+ "when": {
1156
+ "Current": true
1157
+ },
1158
+ "note": "Default and Hover are CSS and React Aria useHover, not props."
1155
1159
  },
1156
1160
  "Label#53:0": {
1157
1161
  "prop": "children"
@@ -2089,6 +2093,48 @@
2089
2093
  "prop": "title"
2090
2094
  }
2091
2095
  }
2096
+ },
2097
+ "1432:282": {
2098
+ "figmaComponent": "Chart Tooltip",
2099
+ "figmaNodeId": "1432:282",
2100
+ "figmaPage": "Chart",
2101
+ "component": "ChartTooltip",
2102
+ "import": "import { ChartTooltip } from 'ionbase-ui';",
2103
+ "docs": "components/chart-tooltip/index.html.md",
2104
+ "props": {
2105
+ "Title#1432:18": {
2106
+ "prop": "title"
2107
+ },
2108
+ "Show Row 2#1432:19": {
2109
+ "prop": "rows",
2110
+ "note": "true draws a second entry in rows; the row count is the length of the array"
2111
+ },
2112
+ "Show Row 3#1432:20": {
2113
+ "prop": "rows",
2114
+ "note": "true draws a third entry in rows"
2115
+ }
2116
+ }
2117
+ },
2118
+ "1432:369": {
2119
+ "figmaComponent": "Chart Legend",
2120
+ "figmaNodeId": "1432:369",
2121
+ "figmaPage": "Chart",
2122
+ "component": "ChartLegend",
2123
+ "import": "import { ChartLegend } from 'ionbase-ui';",
2124
+ "docs": "components/chart-legend/index.html.md",
2125
+ "props": {
2126
+ "Shape": {
2127
+ "prop": "shape",
2128
+ "values": {
2129
+ "Square": "square",
2130
+ "Line": "line"
2131
+ }
2132
+ },
2133
+ "Show Item 3#1432:38": {
2134
+ "prop": "items",
2135
+ "note": "true draws a third entry in items; the entry count is the length of the array"
2136
+ }
2137
+ }
2092
2138
  }
2093
2139
  },
2094
2140
  "byFigmaName": {
@@ -3237,7 +3283,11 @@
3237
3283
  "docs": "components/nav-item/index.html.md",
3238
3284
  "props": {
3239
3285
  "State": {
3240
- "ignore": "Default and Hover are CSS and React Aria's useHover, not props"
3286
+ "prop": "isCurrent",
3287
+ "when": {
3288
+ "Current": true
3289
+ },
3290
+ "note": "Default and Hover are CSS and React Aria useHover, not props."
3241
3291
  },
3242
3292
  "Label#53:0": {
3243
3293
  "prop": "children"
@@ -4175,12 +4225,56 @@
4175
4225
  "prop": "title"
4176
4226
  }
4177
4227
  }
4228
+ },
4229
+ "Chart Tooltip": {
4230
+ "figmaComponent": "Chart Tooltip",
4231
+ "figmaNodeId": "1432:282",
4232
+ "figmaPage": "Chart",
4233
+ "component": "ChartTooltip",
4234
+ "import": "import { ChartTooltip } from 'ionbase-ui';",
4235
+ "docs": "components/chart-tooltip/index.html.md",
4236
+ "props": {
4237
+ "Title#1432:18": {
4238
+ "prop": "title"
4239
+ },
4240
+ "Show Row 2#1432:19": {
4241
+ "prop": "rows",
4242
+ "note": "true draws a second entry in rows; the row count is the length of the array"
4243
+ },
4244
+ "Show Row 3#1432:20": {
4245
+ "prop": "rows",
4246
+ "note": "true draws a third entry in rows"
4247
+ }
4248
+ }
4249
+ },
4250
+ "Chart Legend": {
4251
+ "figmaComponent": "Chart Legend",
4252
+ "figmaNodeId": "1432:369",
4253
+ "figmaPage": "Chart",
4254
+ "component": "ChartLegend",
4255
+ "import": "import { ChartLegend } from 'ionbase-ui';",
4256
+ "docs": "components/chart-legend/index.html.md",
4257
+ "props": {
4258
+ "Shape": {
4259
+ "prop": "shape",
4260
+ "values": {
4261
+ "Square": "square",
4262
+ "Line": "line"
4263
+ }
4264
+ },
4265
+ "Show Item 3#1432:38": {
4266
+ "prop": "items",
4267
+ "note": "true draws a third entry in items; the entry count is the length of the array"
4268
+ }
4269
+ }
4178
4270
  }
4179
4271
  },
4180
4272
  "unmapped": {
4181
4273
  ".Status Indicator": "The dot Avatar draws in its corners. Avatar owns both instances — Top is Intent=Primary with the check glyph, Bottom is Intent=Success with Show Icon off — and exposes them as `topIndicator` / `bottomIndicator`.\n\nThe leading dot in the name is Figma's own marker for a private component: it is excluded from the published library, so a designer cannot place one on a canvas even if they wanted to. That settles a question this entry used to argue: it is internal by the file's own declaration, not merely by our reading of it. The same call Line, Progress and Progress Heading get for being internal to ScrollProgress — with better evidence.\n\nMap it only if the dot is ever removed.",
4182
4274
  "Calendar": "The open calendar both pickers render internally — Calendar and CalendarPopover are not exported, because a grid with no field to own its value is not a control a caller should mount. Mode=Single is DatePicker’s, Mode=Range is DateRangePicker’s; Months=Two is `visibleMonths={2}`, Show Presets is `presets` and Show Clear is `isClearable`, all on DateRangePicker. Drawn separately because a frame cannot both hug a field and overlay a grid on it — the same reason Combobox Menu is its own frame.",
4183
4275
  "Calendar Day": "A day cell inside Calendar — internal to it the way Pagination Item is internal to Pagination. A caller never places one; `isDateUnavailable`, `minValue` and `maxValue` on the pickers decide which state each day draws in.",
4276
+ "Chart Legend Item": "One entry of Chart Legend — `items[n]` in code, `{ label, series }`. Its Shape follows the legend’s `shape`; Series picks chart/1…8. Internal to the legend.",
4277
+ "Chart Tooltip Row": "One entry of Chart Tooltip — `rows[n]` in code, `{ label, value, series }`. Series picks the swatch from chart/1…8, exactly as `series` does. Internal to the tooltip the way Pagination Item is internal to Pagination.",
4184
4278
  "Combobox Menu": "The list Combobox opens. It is not a separate export: the React component renders its own menu, because the two are one control and splitting them would let a caller mount a listbox with no combobox to own it. Drawn separately in Figma because a frame cannot both hug a field and overlay a list on top of it.",
4185
4279
  "Form Field": "Label, helper text and error wiring are built into Input and Select rather than a separate wrapper — the wrapper is how Figma composes them, not how React does.",
4186
4280
  "Line": "An internal part of the Scroll Progress rail, not a component a caller composes.",
@@ -0,0 +1,125 @@
1
+ {
2
+ "name": "ChartLegend",
3
+ "source": "src/components/Chart.tsx",
4
+ "propsType": "ChartLegendProps",
5
+ "description": "ChartLegend — which colour is which series.\n\nColour alone never identifies a series (SC 1.4.1), so any chart with more\nthan one series needs this, or direct labels on the lines. The swatch reads\nthe same `--chart-<n>` as the series itself, through `chartSeriesClass`, so\nthe two cannot drift apart.",
6
+ "import": "import { ChartLegend } from 'ionbase-ui';",
7
+ "status": "stable",
8
+ "since": "0.74.0",
9
+ "summary": "Which colour is which series, for a chart drawn with visx. The swatch reads the same token as the series.",
10
+ "useWhen": [
11
+ "a chart has more than one series",
12
+ "a single-series chart sits beside others and its colour needs naming"
13
+ ],
14
+ "useInstead": [
15
+ {
16
+ "when": "the lines are few and there is room to label each at its end",
17
+ "use": "direct labels in the SVG, with the series class on the text"
18
+ },
19
+ {
20
+ "when": "the scale is a magnitude ramp (a heatmap), not categories",
21
+ "use": "a Less-to-More row of .ion-chart__heat--0…5 cells"
22
+ }
23
+ ],
24
+ "composition": {
25
+ "note": "Items are listed in the order the series are drawn, with the same series numbers the chart uses. Place it above or below the plot inside the same .ion-chart figure.",
26
+ "example": "<ChartLegend shape=\"line\" items={[{ label: 'Production', series: 1 }, { label: 'Staging', series: 2 }]} />"
27
+ },
28
+ "variants": {
29
+ "shape": {
30
+ "square": {
31
+ "use": "the default — bars, areas and heatmap-like marks"
32
+ },
33
+ "line": {
34
+ "use": "line charts, so the key looks like the mark it names"
35
+ }
36
+ }
37
+ },
38
+ "a11y": {
39
+ "guarantees": [
40
+ "a list, so a screen reader announces how many series there are",
41
+ "swatches are aria-hidden; every series is named in text"
42
+ ],
43
+ "requires": [
44
+ "series numbers matching the chart — the legend cannot see the chart"
45
+ ]
46
+ },
47
+ "antiPatterns": [
48
+ {
49
+ "dont": "a multi-series chart with no legend and no direct labels",
50
+ "why": "colour becomes the only way to tell series apart, which fails SC 1.4.1 and fails anyone who cannot tell blue from purple"
51
+ },
52
+ {
53
+ "dont": "listing series in a different order from the chart",
54
+ "why": "the reader matches legend to chart by position as much as by colour"
55
+ }
56
+ ],
57
+ "stylesheet": "src/styles/chart.css",
58
+ "tokens": [
59
+ "--border-default",
60
+ "--border-strong",
61
+ "--border-stronger",
62
+ "--border-subtle",
63
+ "--border-width-default",
64
+ "--chart-1",
65
+ "--chart-2",
66
+ "--chart-3",
67
+ "--chart-4",
68
+ "--chart-5",
69
+ "--chart-6",
70
+ "--chart-7",
71
+ "--chart-8",
72
+ "--chart-sequential-1",
73
+ "--chart-sequential-2",
74
+ "--chart-sequential-3",
75
+ "--chart-sequential-4",
76
+ "--chart-sequential-5",
77
+ "--font-family-sans",
78
+ "--font-weight-medium",
79
+ "--font-weight-semibold",
80
+ "--ion-chart-series",
81
+ "--ion-shadow-shadow-lg",
82
+ "--radius-2xs",
83
+ "--radius-full",
84
+ "--radius-md",
85
+ "--spacing-12",
86
+ "--spacing-16",
87
+ "--spacing-4",
88
+ "--spacing-6",
89
+ "--spacing-8",
90
+ "--surface-default",
91
+ "--surface-raised",
92
+ "--surface-sunken",
93
+ "--text-default",
94
+ "--text-secondary",
95
+ "--text-tertiary",
96
+ "--type-body-sm",
97
+ "--type-body-sm-line-height",
98
+ "--type-caption",
99
+ "--type-caption-line-height"
100
+ ],
101
+ "props": {
102
+ "items": {
103
+ "type": "ChartLegendItem[]",
104
+ "required": true,
105
+ "origin": "own",
106
+ "description": "One per series, in the order the series are drawn."
107
+ },
108
+ "shape": {
109
+ "type": "ChartLegendShape | undefined",
110
+ "required": false,
111
+ "origin": "own",
112
+ "description": "`square` for bars and areas, `line` for line charts.",
113
+ "values": [
114
+ "square",
115
+ "line"
116
+ ]
117
+ }
118
+ },
119
+ "propCounts": {
120
+ "own": 2,
121
+ "aria": 0,
122
+ "dom": 277,
123
+ "other": 0
124
+ }
125
+ }
@@ -0,0 +1,126 @@
1
+ {
2
+ "name": "ChartTooltip",
3
+ "source": "src/components/Chart.tsx",
4
+ "propsType": "ChartTooltipProps",
5
+ "description": "ChartTooltip — the panel that shows the values under the pointer.\n\nPut it inside visx's Tooltip with `chartTooltipProps`, so visx places it and\nthis draws it: raised, rimmed and shadowed like Popover and Toast.\n\nIT IS NOT THE ACCESSIBLE WAY TO THE DATA. It appears on hover, so a keyboard\nor screen-reader user never sees it. Every chart still needs a text summary\nand the values in a table (visually hidden is fine) — the tooltip is a\nconvenience for pointer users, never the only route to a number.",
6
+ "import": "import { ChartTooltip } from 'ionbase-ui';",
7
+ "status": "stable",
8
+ "since": "0.74.0",
9
+ "summary": "The panel showing the values under the pointer on a visx chart. visx positions it; this draws it.",
10
+ "useWhen": [
11
+ "a chart drawn with visx shows exact values on hover",
12
+ "several series share an x value and the reader compares them at a point"
13
+ ],
14
+ "useInstead": [
15
+ {
16
+ "when": "it explains a control rather than a data point",
17
+ "use": "Tooltip"
18
+ },
19
+ {
20
+ "when": "it holds interactive content",
21
+ "use": "Popover"
22
+ },
23
+ {
24
+ "when": "the reader needs every value, or needs them without a pointer",
25
+ "use": "Table"
26
+ }
27
+ ],
28
+ "composition": {
29
+ "note": "Render it inside visx's Tooltip, TooltipWithBounds or TooltipInPortal with {...chartTooltipProps}, which turns off visx's own box so this one is the only panel. Axes take {...chartAxisProps} and gridlines {...chartGridProps}; a series takes className={chartSeriesClass(n)} plus ion-chart__line, __area, __bar or __point.",
30
+ "example": "<TooltipWithBounds top={top} left={left} {...chartTooltipProps}><ChartTooltip title=\"12 Sep\" rows={[{ label: 'Success rate', value: '96.2%', series: 1 }]} /></TooltipWithBounds>"
31
+ },
32
+ "a11y": {
33
+ "guarantees": [
34
+ "rows are a <dl>, so each value is announced with its label",
35
+ "the series swatch is aria-hidden; the label carries the name"
36
+ ],
37
+ "requires": [
38
+ "a text summary and the values in a table (visually hidden is fine) — the tooltip appears on hover, so keyboard and screen-reader users never reach it",
39
+ "`value` already formatted — the tooltip cannot know the unit or precision"
40
+ ]
41
+ },
42
+ "antiPatterns": [
43
+ {
44
+ "dont": "making the tooltip the only way to read a value",
45
+ "why": "it exists only under a mouse pointer; without a table the data is invisible to keyboard and screen-reader users"
46
+ },
47
+ {
48
+ "dont": "leaving visx's default tooltip styles on",
49
+ "why": "it draws a second white box with a hardcoded shadow around this one, and that box does not theme"
50
+ },
51
+ {
52
+ "dont": "a swatch colour that does not match the series",
53
+ "why": "pass the same `series` number the line or bar uses — the swatch reads the same token only if it is told the same index"
54
+ }
55
+ ],
56
+ "stylesheet": "src/styles/chart.css",
57
+ "tokens": [
58
+ "--border-default",
59
+ "--border-strong",
60
+ "--border-stronger",
61
+ "--border-subtle",
62
+ "--border-width-default",
63
+ "--chart-1",
64
+ "--chart-2",
65
+ "--chart-3",
66
+ "--chart-4",
67
+ "--chart-5",
68
+ "--chart-6",
69
+ "--chart-7",
70
+ "--chart-8",
71
+ "--chart-sequential-1",
72
+ "--chart-sequential-2",
73
+ "--chart-sequential-3",
74
+ "--chart-sequential-4",
75
+ "--chart-sequential-5",
76
+ "--font-family-sans",
77
+ "--font-weight-medium",
78
+ "--font-weight-semibold",
79
+ "--ion-chart-series",
80
+ "--ion-shadow-shadow-lg",
81
+ "--radius-2xs",
82
+ "--radius-full",
83
+ "--radius-md",
84
+ "--spacing-12",
85
+ "--spacing-16",
86
+ "--spacing-4",
87
+ "--spacing-6",
88
+ "--spacing-8",
89
+ "--surface-default",
90
+ "--surface-raised",
91
+ "--surface-sunken",
92
+ "--text-default",
93
+ "--text-secondary",
94
+ "--text-tertiary",
95
+ "--type-body-sm",
96
+ "--type-body-sm-line-height",
97
+ "--type-caption",
98
+ "--type-caption-line-height"
99
+ ],
100
+ "props": {
101
+ "title": {
102
+ "type": "React.ReactNode",
103
+ "required": false,
104
+ "origin": "own",
105
+ "description": "What the pointer is over — usually the x value, e.g. a date."
106
+ },
107
+ "rows": {
108
+ "type": "ChartTooltipRow[] | undefined",
109
+ "required": false,
110
+ "origin": "own",
111
+ "description": "One row per series at that point."
112
+ },
113
+ "children": {
114
+ "type": "React.ReactNode",
115
+ "required": false,
116
+ "origin": "own",
117
+ "description": "Free content after the rows, for anything that is not label/value."
118
+ }
119
+ },
120
+ "propCounts": {
121
+ "own": 3,
122
+ "aria": 0,
123
+ "dom": 276,
124
+ "other": 0
125
+ }
126
+ }
@@ -31,7 +31,8 @@
31
31
  "guarantees": [
32
32
  "hover state comes from React Aria's pointer-aware `useHover`, so a tap does not stay hovered until the next tap elsewhere",
33
33
  "the focus ring shows for keyboard navigation only",
34
- "the CSS keeps its own `:hover` / `:focus-visible` rules, so the styling survives without React"
34
+ "the CSS keeps its own `:hover` / `:focus-visible` rules, so the styling survives without React",
35
+ "`isCurrent` sets `aria-current=\"page\"`, and the current item is marked by an underline as well as colour, which survives forced-colours mode"
35
36
  ],
36
37
  "requires": [
37
38
  "an accessible name — `children`, or `aria-label` on an icon-only item"
@@ -49,6 +50,10 @@
49
50
  "dont": "marking the current page with colour only",
50
51
  "do": "`aria-current=\"page\"`",
51
52
  "why": "a screen-reader user is otherwise never told where they are"
53
+ },
54
+ {
55
+ "dont": "marking the current page with a className or colour of your own instead of `isCurrent`",
56
+ "why": "a screen reader hears nothing without `aria-current`, and a colour-only marker fails anyone who cannot see the difference"
52
57
  }
53
58
  ],
54
59
  "deprecated": [
@@ -60,11 +65,13 @@
60
65
  "stylesheet": "src/styles/nav-item.css",
61
66
  "tokens": [
62
67
  "--border-focus",
68
+ "--border-primary",
63
69
  "--border-width-thick",
64
70
  "--font-family-sans",
65
- "--font-weight-regular",
71
+ "--font-weight-medium",
66
72
  "--icon-disabled",
67
73
  "--icon-interactive-hover",
74
+ "--icon-primary",
68
75
  "--icon-size-sm",
69
76
  "--icon-tertiary",
70
77
  "--ion-duration-base",
@@ -72,6 +79,7 @@
72
79
  "--radius-sm",
73
80
  "--spacing-4",
74
81
  "--spacing-8",
82
+ "--text-default",
75
83
  "--text-disabled",
76
84
  "--text-interactive-hover",
77
85
  "--text-secondary",
@@ -91,6 +99,12 @@
91
99
  "origin": "own",
92
100
  "description": "Figma's `Show Chevron`. Set on a nav item that opens a menu, not a plain link."
93
101
  },
102
+ "isCurrent": {
103
+ "type": "boolean | undefined",
104
+ "required": false,
105
+ "origin": "own",
106
+ "description": "The page the user is on. Marks the item `aria-current=\"page\"` and draws\nthe same indicator Tabs' underline does — so a section switcher built from\nNavItems says where you are, in words for a screen reader and in more than\ncolour for everyone else."
107
+ },
94
108
  "isDisabled": {
95
109
  "type": "boolean | undefined",
96
110
  "required": false,
@@ -121,7 +135,7 @@
121
135
  }
122
136
  },
123
137
  "propCounts": {
124
- "own": 7,
138
+ "own": 8,
125
139
  "aria": 0,
126
140
  "dom": 276,
127
141
  "other": 0