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
@@ -16,6 +16,20 @@
16
16
  "Alert",
17
17
  "Badge"
18
18
  ],
19
+ "drivenBy": {
20
+ "hook": "useAgentRun",
21
+ "note": "It turns the events a run reports into the props on AgentActivityStep (`status`), StreamingText (`outputProps`), AgentStop (`stopProps`) and ApprovalGate (`approvalProps`), and applies this pattern's states on the way: one active step, a stop keeps what was done and skips the rest, a failure marks the step that was running. It owns state, not markup or copy — which steps to show is `log`, and every sentence is yours. Feed it with `dispatch` from a live run or `replay(recording)` from a stored one; `agentRunFrom(events)` rebuilds a finished run without playing it.",
22
+ "events": [
23
+ "`run-started` — optionally with `steps: [{ id, label }]`, the plan, so steps the run never reaches can be named as not done",
24
+ "`step-started` { id, label? } — closes whichever step was active; exactly one is active at a time",
25
+ "`step-done` / `step-skipped` { id }",
26
+ "`step-failed` { id, error? }",
27
+ "`approval-requested` { id } — the step becomes the ApprovalGate; the run is `awaiting`",
28
+ "`approval-resolved` { id, decision: approved | rejected | expired, resolution? } — `expired` ends the run without acting",
29
+ "`output` { text } — appended; `output-done` ends streaming",
30
+ "`run-finished`, `run-failed` { error? }, `run-stopped` { resolution? } — the three ends a producer sends; after any end, later events are ignored"
31
+ ]
32
+ },
19
33
  "structure": [
20
34
  "A header row carrying the task name and the AgentStop control. The stop is the first thing on screen and it stays there for the whole run.",
21
35
  "An AgentActivity list of AgentActivityStep, one per step, in the order they happened. Exactly one step is `active` at a time.",
@@ -13,6 +13,10 @@
13
13
  "AgentStop",
14
14
  "Alert"
15
15
  ],
16
+ "drivenBy": {
17
+ "hook": "useAgentRun",
18
+ "note": "`approvalProps` carries the gate's `status`, `isSubmitting` and `resolution`, and `onApprove`/`onReject` when `onDecision` is given. A decision that throws stays pending with `state.approval.error` set — show it, because a decision the server never received must not look made. A stop or an expiry while pending resolves the gate as `expired`, never as approved."
19
+ },
16
20
  "structure": [
17
21
  "The gate appears in place, where the run reached it — inside the step log, not in a dialog that covers it.",
18
22
  "The AgentActivityStep that is waiting stays `active`; the ApprovalGate is its `detail`.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "ionbase-ui",
3
- "version": "0.73.0",
3
+ "version": "0.76.0",
4
4
  "usage": "A pattern is a documented composition of components, not a component. Read one here, then read the contracts of what it composes.",
5
5
  "patterns": {
6
6
  "AgentRun": {
@@ -15,6 +15,7 @@
15
15
  "Alert",
16
16
  "Badge"
17
17
  ],
18
+ "drivenBy": "useAgentRun",
18
19
  "states": [
19
20
  "loading",
20
21
  "empty",
@@ -113,6 +114,7 @@
113
114
  "AgentStop",
114
115
  "Alert"
115
116
  ],
117
+ "drivenBy": "useAgentRun",
116
118
  "states": [
117
119
  "loading",
118
120
  "empty",
@@ -0,0 +1,275 @@
1
+ /*
2
+ * Chart — styling for charts drawn with visx
3
+ *
4
+ * IonBase does not draw charts. visx does: it owns scales, shapes, axes and
5
+ * layout, and this file owns what they look like. Every rule is a class the
6
+ * product puts on a visx element — `chartAxisProps` and `chartGridProps` carry
7
+ * the axis and grid ones — so a chart themes with the page like everything
8
+ * else.
9
+ *
10
+ * CSS, NOT PROPS
11
+ *
12
+ * visx writes colour as SVG presentation attributes: `stroke="#222"` on an
13
+ * axis, `fill="#222"` and `font-family="Arial"` on a tick label, `#eaf0f6` on a
14
+ * grid line. A presentation attribute loses to any CSS declaration, so a class
15
+ * overrides all of them without a prop — and a CSS `var()` resolves in every
16
+ * browser, where a var() written into an attribute does not reliably.
17
+ *
18
+ * SERIES COLOUR IS ONE CUSTOM PROPERTY
19
+ *
20
+ * `.ion-chart-series-<n>` sets `--ion-chart-series` to `--chart-<n>`, and the
21
+ * line, area, bar, point and swatch rules read it. So a series is coloured in
22
+ * one place and its line, its points and its legend swatch cannot disagree —
23
+ * a legend that does not match its line is a chart that lies.
24
+ */
25
+
26
+ .ion-chart {
27
+ display: grid;
28
+ gap: var(--spacing-12);
29
+ margin: 0;
30
+ min-width: 0;
31
+ font-family: var(--font-family-sans);
32
+ }
33
+
34
+ .ion-chart__caption {
35
+ color: var(--text-secondary);
36
+ font-size: var(--type-body-sm);
37
+ line-height: var(--type-body-sm-line-height);
38
+ }
39
+
40
+ /* ---------------------------------------------------------------- axes */
41
+
42
+ /* Tabular figures, so tick values line up down a vertical axis. */
43
+ .ion-chart__tick {
44
+ fill: var(--text-tertiary);
45
+ font-family: var(--font-family-sans);
46
+ font-size: var(--type-caption);
47
+ font-variant-numeric: tabular-nums;
48
+ }
49
+
50
+ .ion-chart__axis-label {
51
+ fill: var(--text-secondary);
52
+ font-family: var(--font-family-sans);
53
+ font-size: var(--type-caption);
54
+ }
55
+
56
+ .ion-chart__axis-line,
57
+ .ion-chart__axis-tick line {
58
+ stroke: var(--border-default);
59
+ }
60
+
61
+ /* ---------------------------------------------------- gridlines, markers */
62
+
63
+ /* visx puts the class on the group; the lines inside inherit nothing. */
64
+ .ion-chart__grid line {
65
+ stroke: var(--border-subtle);
66
+ }
67
+
68
+ /* A target, a threshold, an average — a line the data is read against. */
69
+ .ion-chart__reference {
70
+ stroke: var(--border-stronger);
71
+ stroke-dasharray: 4 4;
72
+ }
73
+
74
+ .ion-chart__reference-label {
75
+ fill: var(--text-secondary);
76
+ font-family: var(--font-family-sans);
77
+ font-size: var(--type-caption);
78
+ }
79
+
80
+ /* The vertical rule under the pointer while a tooltip is open. */
81
+ .ion-chart__crosshair {
82
+ stroke: var(--border-strong);
83
+ pointer-events: none;
84
+ }
85
+
86
+ /* -------------------------------------------------------------- series */
87
+
88
+ .ion-chart-series-1 {
89
+ --ion-chart-series: var(--chart-1);
90
+ }
91
+
92
+ .ion-chart-series-2 {
93
+ --ion-chart-series: var(--chart-2);
94
+ }
95
+
96
+ .ion-chart-series-3 {
97
+ --ion-chart-series: var(--chart-3);
98
+ }
99
+
100
+ .ion-chart-series-4 {
101
+ --ion-chart-series: var(--chart-4);
102
+ }
103
+
104
+ .ion-chart-series-5 {
105
+ --ion-chart-series: var(--chart-5);
106
+ }
107
+
108
+ .ion-chart-series-6 {
109
+ --ion-chart-series: var(--chart-6);
110
+ }
111
+
112
+ .ion-chart-series-7 {
113
+ --ion-chart-series: var(--chart-7);
114
+ }
115
+
116
+ .ion-chart-series-8 {
117
+ --ion-chart-series: var(--chart-8);
118
+ }
119
+
120
+ .ion-chart__line {
121
+ fill: none;
122
+ stroke: var(--ion-chart-series, var(--chart-1));
123
+ stroke-width: 2;
124
+ stroke-linejoin: round;
125
+ stroke-linecap: round;
126
+ }
127
+
128
+ /*
129
+ * An area is the series at low opacity. The one place opacity is right: the
130
+ * fill sits behind its own full-strength line, which carries the 3:1 — the
131
+ * wash only says "this much".
132
+ */
133
+ .ion-chart__area {
134
+ fill: var(--ion-chart-series, var(--chart-1));
135
+ fill-opacity: 0.16;
136
+ stroke: none;
137
+ }
138
+
139
+ .ion-chart__bar {
140
+ fill: var(--ion-chart-series, var(--chart-1));
141
+ }
142
+
143
+ /* A hollow point, ringed in the series and filled with the ground. */
144
+ .ion-chart__point {
145
+ fill: var(--surface-default);
146
+ stroke: var(--ion-chart-series, var(--chart-1));
147
+ stroke-width: 2;
148
+ }
149
+
150
+ .ion-chart__point--active {
151
+ fill: var(--ion-chart-series, var(--chart-1));
152
+ }
153
+
154
+ /* ------------------------------------------------------------- heatmap */
155
+
156
+ .ion-chart__heat--0 {
157
+ fill: var(--surface-sunken);
158
+ }
159
+
160
+ .ion-chart__heat--1 {
161
+ fill: var(--chart-sequential-1);
162
+ }
163
+
164
+ .ion-chart__heat--2 {
165
+ fill: var(--chart-sequential-2);
166
+ }
167
+
168
+ .ion-chart__heat--3 {
169
+ fill: var(--chart-sequential-3);
170
+ }
171
+
172
+ .ion-chart__heat--4 {
173
+ fill: var(--chart-sequential-4);
174
+ }
175
+
176
+ .ion-chart__heat--5 {
177
+ fill: var(--chart-sequential-5);
178
+ }
179
+
180
+ /* -------------------------------------------------------------- swatch */
181
+
182
+ /* A series key: a square for bars and areas, a short rule for lines. */
183
+ .ion-chart-swatch {
184
+ display: inline-block;
185
+ flex-shrink: 0;
186
+ width: 0.625rem;
187
+ height: 0.625rem;
188
+ border-radius: var(--radius-2xs);
189
+ background-color: var(--ion-chart-series, var(--chart-1));
190
+ }
191
+
192
+ .ion-chart-swatch--line {
193
+ height: 0.1875rem;
194
+ width: 0.875rem;
195
+ border-radius: var(--radius-full);
196
+ }
197
+
198
+ /* -------------------------------------------------------------- legend */
199
+
200
+ .ion-chart-legend {
201
+ display: flex;
202
+ flex-wrap: wrap;
203
+ gap: var(--spacing-4) var(--spacing-16);
204
+ margin: 0;
205
+ padding: 0;
206
+ list-style: none;
207
+ font-family: var(--font-family-sans);
208
+ }
209
+
210
+ .ion-chart-legend__item {
211
+ display: inline-flex;
212
+ align-items: center;
213
+ gap: var(--spacing-6);
214
+ color: var(--text-secondary);
215
+ font-size: var(--type-body-sm);
216
+ line-height: var(--type-body-sm-line-height);
217
+ }
218
+
219
+ /* ------------------------------------------------------------- tooltip */
220
+
221
+ /*
222
+ * The panel Popover and Toast use: raised, a subtle rim and the lg shadow, so
223
+ * a tooltip over a chart reads as the same family as every other floating
224
+ * surface. Pass visx's Tooltip `unstyled` and `applyPositionStyle` — this
225
+ * component is the box, visx only places it.
226
+ */
227
+ .ion-chart-tooltip {
228
+ display: grid;
229
+ gap: var(--spacing-6);
230
+ min-width: 8rem;
231
+ max-width: 16rem;
232
+ padding: var(--spacing-8) var(--spacing-12);
233
+ border: var(--border-width-default) solid var(--border-subtle);
234
+ border-radius: var(--radius-md);
235
+ background-color: var(--surface-raised);
236
+ box-shadow: var(--ion-shadow-shadow-lg);
237
+ color: var(--text-default);
238
+ font-family: var(--font-family-sans);
239
+ font-size: var(--type-caption);
240
+ line-height: var(--type-caption-line-height);
241
+ pointer-events: none;
242
+ }
243
+
244
+ .ion-chart-tooltip__title {
245
+ color: var(--text-default);
246
+ font-weight: var(--font-weight-semibold);
247
+ }
248
+
249
+ .ion-chart-tooltip__rows {
250
+ display: grid;
251
+ gap: var(--spacing-4);
252
+ margin: 0;
253
+ }
254
+
255
+ .ion-chart-tooltip__row {
256
+ display: flex;
257
+ align-items: center;
258
+ justify-content: space-between;
259
+ gap: var(--spacing-12);
260
+ }
261
+
262
+ .ion-chart-tooltip__label {
263
+ display: inline-flex;
264
+ align-items: center;
265
+ gap: var(--spacing-6);
266
+ margin: 0;
267
+ color: var(--text-secondary);
268
+ }
269
+
270
+ .ion-chart-tooltip__value {
271
+ margin: 0;
272
+ color: var(--text-default);
273
+ font-weight: var(--font-weight-medium);
274
+ font-variant-numeric: tabular-nums;
275
+ }
@@ -92,6 +92,7 @@
92
92
  @import url('./date-range-picker.css');
93
93
  @import url('./stat-tile.css');
94
94
  @import url('./setting-row.css');
95
+ @import url('./chart.css');
95
96
 
96
97
  /*
97
98
  * Visually hidden, but not hidden from assistive tech.
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * Nav Item
3
3
  *
4
- * Measured from Figma `Nav Item` (70:22078). Two states only: Default, Hover.
4
+ * Measured from Figma `Nav Item` (70:22078): Default, Hover and Current.
5
5
  *
6
6
  * NO BACKGROUND ON HOVER — TEXT AND ICON RECOLOUR ONLY
7
7
  *
@@ -33,7 +33,10 @@
33
33
  font-family: var(--font-family-sans);
34
34
  font-size: var(--type-body-sm);
35
35
  line-height: var(--type-body-sm-line-height);
36
- font-weight: var(--font-weight-regular);
36
+
37
+ /* Figma binds `font/weight/medium` in every state; this read regular from
38
+ the July package merge until 0.76.0. */
39
+ font-weight: var(--font-weight-medium);
37
40
  text-decoration: none;
38
41
  cursor: pointer;
39
42
  user-select: none;
@@ -62,6 +65,38 @@
62
65
  outline-offset: 2px;
63
66
  }
64
67
 
68
+ /*
69
+ * CURRENT — THE TABS UNDERLINE, NOT THE SIDEBAR FILL
70
+ *
71
+ * Sidebar marks its current row with `surface/selected`, but NavItem never
72
+ * fills (see above), so it takes the other current state the system already
73
+ * has: Tabs' underline — `text/default` over a `border-width/thick` rule in
74
+ * `border/primary`. The rule is an inset shadow, not a border, so the current
75
+ * item is exactly as tall as the rest and a nav bar does not jump when the
76
+ * page changes. The weight does not change either, for the same reason.
77
+ *
78
+ * Colour alone would not do: `text/secondary` to `text/default` is a step a
79
+ * reader can miss. The rule is the part that is not colour.
80
+ */
81
+ .ion-nav-item--current {
82
+ color: var(--text-default);
83
+ box-shadow: inset 0 calc(-1 * var(--border-width-thick)) 0
84
+ var(--border-primary);
85
+ }
86
+
87
+ .ion-nav-item--current .ion-nav-item__icon {
88
+ color: var(--icon-primary);
89
+ }
90
+
91
+ /* Forced colours drop box-shadow, which would erase the indicator entirely. */
92
+ @media (forced-colors: active) {
93
+ .ion-nav-item--current {
94
+ text-decoration: underline;
95
+ text-decoration-thickness: var(--border-width-thick);
96
+ text-underline-offset: var(--spacing-4);
97
+ }
98
+ }
99
+
65
100
  .ion-nav-item--disabled,
66
101
  .ion-nav-item[data-disabled='true'] {
67
102
  color: var(--text-disabled);
package/llms.txt CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > IonBase is a React design system for enterprise SaaS, built to be consumed by an agent rather than read by a developer. Every component ships a machine-readable contract carrying the judgement a type signature cannot: when to use it, what to use instead, the anti-patterns, and what it guarantees for accessibility versus what it requires of you.
4
4
 
5
- Version 0.73.0. 73 components.
5
+ Version 0.76.0. 75 components.
6
6
 
7
7
  ## Read these, in this order
8
8
 
@@ -13,7 +13,7 @@ Both are importable: `ionbase-ui/meta/index` and `ionbase-ui/meta/<Name>.json`.
13
13
 
14
14
  ## Components
15
15
 
16
- `Accordion`, `AccordionItem`, `AgentActivity`, `AgentActivityStep`, `AgentStop`, `Alert`, `ApprovalGate`, `Avatar`, `AvatarGradient`, `AvatarGroup`, `Badge`, `Breadcrumb`, `BreadcrumbItem`, `Button`, `Checkbox`, `Citation`, `CitationList`, `CitationListItem`, `Combobox`, `ConfidenceIndicator`, `DatePicker`, `DateRangePicker`, `Divider`, `Drawer`, `EmptyState`, `FileUpload`, `FullCard`, `Header`, `Icon`, `Input`, `Link`, `Logo`, `LogoMark`, `Menu`, `MenuItem`, `Modal`, `NavItem`, `NumberInput`, `Pagination`, `PhoneInput`, `Popover`, `ProgressBar`, `PromptInput`, `Radio`, `RadioGroup`, `ScrollProgress`, `SegmentedControl`, `SegmentedControlItem`, `Select`, `SettingRow`, `Sidebar`, `SidebarItem`, `SidebarSection`, `Skeleton`, `Spinner`, `StatGroup`, `StatTile`, `Stepper`, `StepperStep`, `StreamingText`, `TabItem`, `Table`, `TableBody`, `TableCell`, `TableHead`, `TableRow`, `Tabs`, `Textarea`, `Toast`, `ToastProvider`, `Toggle`, `ToolCall`, `Tooltip`
16
+ `Accordion`, `AccordionItem`, `AgentActivity`, `AgentActivityStep`, `AgentStop`, `Alert`, `ApprovalGate`, `Avatar`, `AvatarGradient`, `AvatarGroup`, `Badge`, `Breadcrumb`, `BreadcrumbItem`, `Button`, `ChartLegend`, `ChartTooltip`, `Checkbox`, `Citation`, `CitationList`, `CitationListItem`, `Combobox`, `ConfidenceIndicator`, `DatePicker`, `DateRangePicker`, `Divider`, `Drawer`, `EmptyState`, `FileUpload`, `FullCard`, `Header`, `Icon`, `Input`, `Link`, `Logo`, `LogoMark`, `Menu`, `MenuItem`, `Modal`, `NavItem`, `NumberInput`, `Pagination`, `PhoneInput`, `Popover`, `ProgressBar`, `PromptInput`, `Radio`, `RadioGroup`, `ScrollProgress`, `SegmentedControl`, `SegmentedControlItem`, `Select`, `SettingRow`, `Sidebar`, `SidebarItem`, `SidebarSection`, `Skeleton`, `Spinner`, `StatGroup`, `StatTile`, `Stepper`, `StepperStep`, `StreamingText`, `TabItem`, `Table`, `TableBody`, `TableCell`, `TableHead`, `TableRow`, `Tabs`, `Textarea`, `Toast`, `ToastProvider`, `Toggle`, `ToolCall`, `Tooltip`
17
17
 
18
18
  ## Patterns
19
19
 
@@ -23,13 +23,21 @@ Compositions of the components above, in `dist/meta/patterns/`. Read `dist/meta/
23
23
 
24
24
  ## Drawing a chart?
25
25
 
26
- There is no chart component — use your charting library, and colour it from these tokens so it themes and passes contrast:
26
+ Draw it with visx — IonBase does not draw charts and does not depend on visx — and style it with these, so it themes and passes contrast:
27
27
 
28
+ - `<AxisBottom {...chartAxisProps} />`, `<GridRows {...chartGridProps} />` — axes and gridlines take the tokens instead of the `#222` visx writes.
29
+ - `className={chartSeriesClass(n)}` on a series group, with `ion-chart__line`, `__area`, `__bar` or `__point` on its marks; `ion-chart__reference` for a target line; `ion-chart__heat--0…5` for a heatmap cell.
30
+ - `ChartTooltip` inside `<TooltipWithBounds {...chartTooltipProps}>`, and `ChartLegend` for more than one series. Read their contracts.
31
+ - Always a text summary and the values in a table: the tooltip is pointer-only.
28
32
  - `--chart-1` … `--chart-8` — categorical series, in order. Each clears 3:1 against `--surface-default`, `--surface-page` and `--surface-raised` in Light and Dark. Set them as CSS `fill` / `stroke`, not SVG attributes, which do not reliably resolve `var()`.
29
33
  - `--chart-sequential-1` … `--chart-sequential-5` — one hue, low to high, for magnitude (a heatmap). Use `--surface-sunken` for zero. Do not fake a ramp with opacity: it reads differently on every ground.
30
34
  - **Bin a wide range into the five steps; do not ask for more.** Like GitHub's contribution graph (four steps and empty): zero is its own level, and the non-zero values split into five equal groups by rank, each cut the top of its group — rank, so one outlier does not flatten the rest. Past five to seven steps of one hue, readers cannot tell neighbours apart.
31
35
  - **Continuous scale?** Blend neighbouring steps in CSS, which still themes: `color-mix(in oklab, var(--chart-sequential-2) 60%, var(--chart-sequential-3))`. A JS colour scale cannot read `var()`. Pair it with a labelled axis or tooltip.
32
36
 
37
+ ## Driving an agent run?
38
+
39
+ Do not hand-build the state behind AgentActivity, ApprovalGate, StreamingText and AgentStop. `useAgentRun()` takes the events a run reports — `step-started`, `approval-requested`, `output`, `run-stopped` and the rest — and returns `log`, `stopProps`, `outputProps` and `approvalProps` to spread. It applies the AgentRun and HumanApproval patterns: one active step, a stop keeps what was done, an unanswered approval is never a yes. `replay(recording)` plays a stored run; `agentRunFrom(events)` rebuilds a finished one. The full event list is in `dist/meta/patterns/AgentRun.json` under `drivenBy`.
40
+
33
41
  ## Coming from a Figma design?
34
42
 
35
43
  `dist/figma-map.json` maps every Figma component and node id in the IonBase library to the React component and the real props — what Code Connect does, without needing an Organization plan. Look up the node id or the component name rather than guessing from a screenshot.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ionbase-ui",
3
- "version": "0.73.0",
3
+ "version": "0.76.0",
4
4
  "description": "IonBase Design System — accessible React components, styles and design tokens in one package",
5
5
  "license": "MIT",
6
6
  "type": "module",