ionbase-ui 0.51.0 → 0.69.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 (174) hide show
  1. package/dist/components/Accordion.d.ts +54 -0
  2. package/dist/components/Accordion.d.ts.map +1 -0
  3. package/dist/components/Accordion.js +68 -0
  4. package/dist/components/Accordion.js.map +1 -0
  5. package/dist/components/AgentActivity.d.ts +2 -1
  6. package/dist/components/AgentActivity.d.ts.map +1 -1
  7. package/dist/components/AgentActivity.js +4 -17
  8. package/dist/components/AgentActivity.js.map +1 -1
  9. package/dist/components/Breadcrumb.d.ts +45 -0
  10. package/dist/components/Breadcrumb.d.ts.map +1 -0
  11. package/dist/components/Breadcrumb.js +31 -0
  12. package/dist/components/Breadcrumb.js.map +1 -0
  13. package/dist/components/Calendar.d.ts +20 -0
  14. package/dist/components/Calendar.d.ts.map +1 -0
  15. package/dist/components/Calendar.js +151 -0
  16. package/dist/components/Calendar.js.map +1 -0
  17. package/dist/components/CalendarPopover.d.ts +26 -0
  18. package/dist/components/CalendarPopover.d.ts.map +1 -0
  19. package/dist/components/CalendarPopover.js +45 -0
  20. package/dist/components/CalendarPopover.js.map +1 -0
  21. package/dist/components/Checkbox.d.ts +2 -1
  22. package/dist/components/Checkbox.d.ts.map +1 -1
  23. package/dist/components/Checkbox.js +4 -2
  24. package/dist/components/Checkbox.js.map +1 -1
  25. package/dist/components/Combobox.d.ts +86 -0
  26. package/dist/components/Combobox.d.ts.map +1 -0
  27. package/dist/components/Combobox.js +261 -0
  28. package/dist/components/Combobox.js.map +1 -0
  29. package/dist/components/DateField.d.ts +15 -0
  30. package/dist/components/DateField.d.ts.map +1 -0
  31. package/dist/components/DateField.js +74 -0
  32. package/dist/components/DateField.js.map +1 -0
  33. package/dist/components/DatePicker.d.ts +81 -0
  34. package/dist/components/DatePicker.d.ts.map +1 -0
  35. package/dist/components/DatePicker.js +102 -0
  36. package/dist/components/DatePicker.js.map +1 -0
  37. package/dist/components/DateRangePicker.d.ts +117 -0
  38. package/dist/components/DateRangePicker.d.ts.map +1 -0
  39. package/dist/components/DateRangePicker.js +152 -0
  40. package/dist/components/DateRangePicker.js.map +1 -0
  41. package/dist/components/Drawer.d.ts +52 -0
  42. package/dist/components/Drawer.d.ts.map +1 -0
  43. package/dist/components/Drawer.js +66 -0
  44. package/dist/components/Drawer.js.map +1 -0
  45. package/dist/components/FileUpload.d.ts +79 -0
  46. package/dist/components/FileUpload.d.ts.map +1 -0
  47. package/dist/components/FileUpload.js +218 -0
  48. package/dist/components/FileUpload.js.map +1 -0
  49. package/dist/components/Header.d.ts +10 -0
  50. package/dist/components/Header.d.ts.map +1 -1
  51. package/dist/components/Header.js +18 -3
  52. package/dist/components/Header.js.map +1 -1
  53. package/dist/components/NumberInput.d.ts +63 -0
  54. package/dist/components/NumberInput.d.ts.map +1 -0
  55. package/dist/components/NumberInput.js +102 -0
  56. package/dist/components/NumberInput.js.map +1 -0
  57. package/dist/components/ProgressBar.d.ts +46 -0
  58. package/dist/components/ProgressBar.d.ts.map +1 -0
  59. package/dist/components/ProgressBar.js +52 -0
  60. package/dist/components/ProgressBar.js.map +1 -0
  61. package/dist/components/PromptInput.d.ts +89 -0
  62. package/dist/components/PromptInput.d.ts.map +1 -0
  63. package/dist/components/PromptInput.js +130 -0
  64. package/dist/components/PromptInput.js.map +1 -0
  65. package/dist/components/SegmentedControl.d.ts +63 -0
  66. package/dist/components/SegmentedControl.d.ts.map +1 -0
  67. package/dist/components/SegmentedControl.js +79 -0
  68. package/dist/components/SegmentedControl.js.map +1 -0
  69. package/dist/components/Select.d.ts +9 -2
  70. package/dist/components/Select.d.ts.map +1 -1
  71. package/dist/components/Select.js.map +1 -1
  72. package/dist/components/Sidebar.d.ts +109 -0
  73. package/dist/components/Sidebar.d.ts.map +1 -0
  74. package/dist/components/Sidebar.js +106 -0
  75. package/dist/components/Sidebar.js.map +1 -0
  76. package/dist/components/Skeleton.d.ts +39 -0
  77. package/dist/components/Skeleton.d.ts.map +1 -0
  78. package/dist/components/Skeleton.js +50 -0
  79. package/dist/components/Skeleton.js.map +1 -0
  80. package/dist/components/Spinner.d.ts +45 -0
  81. package/dist/components/Spinner.d.ts.map +1 -0
  82. package/dist/components/Spinner.js +44 -0
  83. package/dist/components/Spinner.js.map +1 -0
  84. package/dist/components/Stepper.d.ts +73 -0
  85. package/dist/components/Stepper.d.ts.map +1 -0
  86. package/dist/components/Stepper.js +82 -0
  87. package/dist/components/Stepper.js.map +1 -0
  88. package/dist/components/Toggle.d.ts +2 -1
  89. package/dist/components/Toggle.d.ts.map +1 -1
  90. package/dist/components/Toggle.js +4 -2
  91. package/dist/components/Toggle.js.map +1 -1
  92. package/dist/components/ToolCall.d.ts +66 -0
  93. package/dist/components/ToolCall.d.ts.map +1 -0
  94. package/dist/components/ToolCall.js +78 -0
  95. package/dist/components/ToolCall.js.map +1 -0
  96. package/dist/components/agent-status.d.ts +14 -0
  97. package/dist/components/agent-status.d.ts.map +1 -0
  98. package/dist/components/agent-status.js +16 -0
  99. package/dist/components/agent-status.js.map +1 -0
  100. package/dist/components/index.d.ts +33 -0
  101. package/dist/components/index.d.ts.map +1 -1
  102. package/dist/components/index.js +16 -0
  103. package/dist/components/index.js.map +1 -1
  104. package/dist/components/iso-date.d.ts +53 -0
  105. package/dist/components/iso-date.d.ts.map +1 -0
  106. package/dist/components/iso-date.js +102 -0
  107. package/dist/components/iso-date.js.map +1 -0
  108. package/dist/components/resolve-selection.d.ts +36 -0
  109. package/dist/components/resolve-selection.d.ts.map +1 -0
  110. package/dist/components/resolve-selection.js +14 -0
  111. package/dist/components/resolve-selection.js.map +1 -0
  112. package/dist/figma-descriptions.json +255 -145
  113. package/dist/figma-map.json +3205 -1860
  114. package/dist/meta/Accordion.json +123 -0
  115. package/dist/meta/AccordionItem.json +90 -0
  116. package/dist/meta/AgentActivityStep.json +2 -2
  117. package/dist/meta/Breadcrumb.json +87 -0
  118. package/dist/meta/BreadcrumbItem.json +78 -0
  119. package/dist/meta/Checkbox.json +18 -1
  120. package/dist/meta/Combobox.json +265 -0
  121. package/dist/meta/DatePicker.json +270 -0
  122. package/dist/meta/DateRangePicker.json +284 -0
  123. package/dist/meta/Drawer.json +234 -0
  124. package/dist/meta/EmptyState.json +1 -1
  125. package/dist/meta/FileUpload.json +246 -0
  126. package/dist/meta/Header.json +32 -2
  127. package/dist/meta/NumberInput.json +407 -0
  128. package/dist/meta/PhoneInput.json +39 -39
  129. package/dist/meta/Popover.json +3 -3
  130. package/dist/meta/ProgressBar.json +166 -0
  131. package/dist/meta/PromptInput.json +212 -0
  132. package/dist/meta/SegmentedControl.json +217 -0
  133. package/dist/meta/SegmentedControlItem.json +122 -0
  134. package/dist/meta/Select.json +4 -3
  135. package/dist/meta/Sidebar.json +150 -0
  136. package/dist/meta/SidebarItem.json +184 -0
  137. package/dist/meta/SidebarSection.json +131 -0
  138. package/dist/meta/Skeleton.json +120 -0
  139. package/dist/meta/Spinner.json +123 -0
  140. package/dist/meta/Stepper.json +135 -0
  141. package/dist/meta/StepperStep.json +148 -0
  142. package/dist/meta/Tabs.json +5 -0
  143. package/dist/meta/Toggle.json +18 -1
  144. package/dist/meta/ToolCall.json +192 -0
  145. package/dist/meta/Tooltip.json +3 -3
  146. package/dist/meta/components.json +6759 -2705
  147. package/dist/meta/contrast.json +11075 -3098
  148. package/dist/meta/index.json +266 -8
  149. package/dist/meta/patterns/AgentRun.json +27 -0
  150. package/dist/meta/patterns/Form.json +9 -0
  151. package/dist/meta/patterns/PageShell.json +43 -3
  152. package/dist/meta/patterns/Wizard.json +20 -1
  153. package/dist/meta/patterns/index.json +10 -1
  154. package/dist/styles/accordion.css +102 -0
  155. package/dist/styles/breadcrumb.css +72 -0
  156. package/dist/styles/combobox.css +154 -0
  157. package/dist/styles/date-picker.css +420 -0
  158. package/dist/styles/date-range-picker.css +280 -0
  159. package/dist/styles/drawer.css +181 -0
  160. package/dist/styles/empty-state.css +16 -4
  161. package/dist/styles/file-upload.css +236 -0
  162. package/dist/styles/header.css +26 -0
  163. package/dist/styles/index.css +23 -0
  164. package/dist/styles/number-input.css +83 -0
  165. package/dist/styles/progress-bar.css +107 -0
  166. package/dist/styles/prompt-input.css +127 -0
  167. package/dist/styles/segmented-control.css +182 -0
  168. package/dist/styles/sidebar.css +307 -0
  169. package/dist/styles/skeleton.css +76 -0
  170. package/dist/styles/spinner.css +70 -0
  171. package/dist/styles/stepper.css +250 -0
  172. package/dist/styles/tool-call.css +202 -0
  173. package/llms.txt +2 -2
  174. package/package.json +2 -1
@@ -0,0 +1,102 @@
1
+ /*
2
+ * Accordion
3
+ *
4
+ * Drawn in Figma as `Accordion` (1360:267) and `Accordion Item` (1360:266),
5
+ * from this file rather than the reverse — so the code is the source when the
6
+ * two disagree.
7
+ *
8
+ * Figma's Accordion Item carries a Collapsed/Expanded axis that the React
9
+ * component does NOT own: the open set lives on the container, because a static
10
+ * frame cannot hold a selection. The axis is drawn on the item because that is
11
+ * where the difference is visible, and owned in code where it is decidable.
12
+ *
13
+ * The trigger fills its heading so the whole row is the hit target. A button
14
+ * that only covers its text makes a wide section header mostly dead space.
15
+ */
16
+ .ion-accordion {
17
+ font-family: var(--font-family-sans);
18
+ border-top: var(--border-width-default) solid var(--border-subtle);
19
+ }
20
+
21
+ .ion-accordion__item {
22
+ border-bottom: var(--border-width-default) solid var(--border-subtle);
23
+ }
24
+
25
+ .ion-accordion__heading {
26
+ margin: 0;
27
+
28
+ /* The heading carries structure, not size: the visible scale belongs to the
29
+ * trigger, so changing headingLevel for document reasons does not resize the
30
+ * control. */
31
+ font: inherit;
32
+ }
33
+
34
+ .ion-accordion__trigger {
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: space-between;
38
+ gap: var(--spacing-12);
39
+ width: 100%;
40
+ padding: var(--spacing-16) var(--spacing-4);
41
+ border: 0;
42
+ background: none;
43
+ color: var(--text-default);
44
+ font-family: inherit;
45
+ font-size: var(--type-body);
46
+ line-height: var(--type-body-line-height);
47
+ font-weight: var(--font-weight-medium);
48
+ text-align: start;
49
+ cursor: pointer;
50
+ }
51
+
52
+ /* Focus and disabled before :hover, so specificity reads non-decreasing — the
53
+ * same ordering approval-gate.css documents and stylelint enforces. */
54
+ .ion-accordion__trigger:focus-visible {
55
+ outline: var(--border-width-thick) solid var(--border-focus);
56
+ outline-offset: -2px;
57
+ border-radius: var(--radius-xs);
58
+ }
59
+
60
+ .ion-accordion__trigger:disabled {
61
+ color: var(--text-disabled);
62
+ cursor: default;
63
+ }
64
+
65
+ .ion-accordion__trigger:hover:not(:disabled) {
66
+ color: var(--text-primary);
67
+ }
68
+
69
+ .ion-accordion__indicator {
70
+ display: inline-flex;
71
+ flex: none;
72
+ width: var(--icon-size-md);
73
+ height: var(--icon-size-md);
74
+ color: var(--icon-secondary);
75
+ transition: transform var(--ion-duration-base) var(--ion-ease-out);
76
+ }
77
+
78
+ .ion-accordion__indicator svg {
79
+ width: 100%;
80
+ height: 100%;
81
+ }
82
+
83
+ .ion-accordion__item[data-expanded] .ion-accordion__indicator {
84
+ transform: rotate(180deg);
85
+ }
86
+
87
+ .ion-accordion__trigger:disabled .ion-accordion__indicator {
88
+ color: var(--icon-disabled);
89
+ }
90
+
91
+ .ion-accordion__content {
92
+ padding: 0 var(--spacing-4) var(--spacing-16);
93
+ color: var(--text-secondary);
94
+ font-size: var(--type-body);
95
+ line-height: var(--type-body-line-height);
96
+ }
97
+
98
+ @media (prefers-reduced-motion: reduce) {
99
+ .ion-accordion__indicator {
100
+ transition-duration: 1ms;
101
+ }
102
+ }
@@ -0,0 +1,72 @@
1
+ /*
2
+ * Breadcrumb
3
+ *
4
+ * Drawn in Figma as `Breadcrumb` (1359:252) and `Breadcrumb Item` (1359:251) —
5
+ * FROM this file, not the other way round. Every other stylesheet here says
6
+ * "measured from Figma" because Figma came first; here the code did, and the
7
+ * drawing was made to match it. Worth stating, because the direction decides
8
+ * which side wins the next time the two disagree: this one.
9
+ *
10
+ * The separator is a CSS ::before on every item after the first. Drawing it in
11
+ * markup is the usual version of this component and the usual defect: a "/"
12
+ * character in the DOM is announced as punctuation between every crumb.
13
+ */
14
+ .ion-breadcrumb {
15
+ font-family: var(--font-family-sans);
16
+ font-size: var(--type-body-sm);
17
+ line-height: var(--type-body-sm-line-height);
18
+ }
19
+
20
+ .ion-breadcrumb__list {
21
+ display: flex;
22
+ flex-wrap: wrap;
23
+ align-items: center;
24
+ gap: var(--spacing-8);
25
+ margin: 0;
26
+ padding: 0;
27
+ list-style: none;
28
+ }
29
+
30
+ .ion-breadcrumb__item {
31
+ display: inline-flex;
32
+ align-items: center;
33
+ gap: var(--spacing-8);
34
+ min-width: 0;
35
+ }
36
+
37
+ .ion-breadcrumb__item + .ion-breadcrumb__item::before {
38
+ content: '/';
39
+ color: var(--text-tertiary);
40
+ }
41
+
42
+ .ion-breadcrumb__link {
43
+ color: var(--text-secondary);
44
+ text-decoration: none;
45
+ border-radius: var(--radius-xs);
46
+ }
47
+
48
+ .ion-breadcrumb__link:hover {
49
+ color: var(--text-default);
50
+ text-decoration: underline;
51
+ }
52
+
53
+ .ion-breadcrumb__link:focus-visible {
54
+ outline: var(--border-width-thick) solid var(--border-focus);
55
+ outline-offset: 2px;
56
+ }
57
+
58
+ /*
59
+ * The current page is the one crumb a user is most likely to be looking for,
60
+ * so it carries the stronger colour — the trail above it is navigation, and
61
+ * this is the position.
62
+ */
63
+ .ion-breadcrumb__current {
64
+ color: var(--text-default);
65
+ font-weight: var(--font-weight-medium);
66
+
67
+ /* A long record title truncates rather than wrapping the trail onto three
68
+ * lines; the full value stays reachable through the element's own text. */
69
+ overflow: hidden;
70
+ text-overflow: ellipsis;
71
+ white-space: nowrap;
72
+ }
@@ -0,0 +1,154 @@
1
+ /*
2
+ * Combobox
3
+ *
4
+ * Drawn in Figma as `Combobox` (1370:2359) and `Combobox Menu` (1372:262), from
5
+ * this file. The field is `Input`'s box unchanged — Combobox carries
6
+ * `.ion-input` alongside `.ion-combobox` rather than restating a border, a
7
+ * radius and three states that would then drift from the real thing. Only the
8
+ * disclosure button is new here. The menu borrows `Menu`'s row metrics.
9
+ *
10
+ * The two are one control in code and two components in Figma, because a frame
11
+ * cannot both hug a field and overlay a list on top of it. `Combobox Menu` is
12
+ * recorded in mapping.json's `unmapped` for exactly that reason: there is no
13
+ * React export behind it, and there should not be — a listbox with no combobox
14
+ * to own it is not a thing a caller should be able to mount.
15
+ *
16
+ * THE MENU IS ITS OWN BLOCK, `.ion-combobox-menu`
17
+ *
18
+ * Not `.ion-combobox__popover`. The contrast gate resolves a translucent
19
+ * colour's backdrop from the BLOCK's background, and `.ion-combobox` has no
20
+ * background of its own — it inherits Input's. An option's `surface/hover`
21
+ * would then have had no resolvable ground and come back *skipped*: not
22
+ * failing, not passing, unmeasured. Drawer shipped that exact bug in 0.57.0 and
23
+ * only a count in a summary line caught it.
24
+ */
25
+ .ion-combobox__button {
26
+ display: inline-flex;
27
+ align-items: center;
28
+ justify-content: center;
29
+ flex-shrink: 0;
30
+ padding: 0;
31
+ background: none;
32
+ border: none;
33
+ color: var(--icon-secondary);
34
+ cursor: pointer;
35
+ }
36
+
37
+ .ion-combobox__button svg {
38
+ width: var(--ion-input-icon-size);
39
+ height: var(--ion-input-icon-size);
40
+ transition: transform var(--ion-duration-base) var(--ion-ease-out);
41
+ }
42
+
43
+ /* The caret follows the list. A static caret beside an open menu is a lie. */
44
+ .ion-combobox[data-open='true'] .ion-combobox__button svg {
45
+ transform: rotate(180deg);
46
+ }
47
+
48
+ .ion-combobox[data-disabled='true'] .ion-combobox__button {
49
+ color: var(--icon-disabled);
50
+ cursor: not-allowed;
51
+ }
52
+
53
+ /*
54
+ * NO UNDERLAY, deliberately.
55
+ *
56
+ * Modal and Popover render one. A non-modal popover must not: `usePopover`
57
+ * already listens for outside interaction on the document, so the underlay adds
58
+ * nothing, and a fixed full-viewport element over the page swallows the first
59
+ * click on whatever is behind it. The page stays fully interactive while the
60
+ * list is open, which is the whole difference between this and a dialog.
61
+ */
62
+ .ion-combobox-menu {
63
+ z-index: 1000;
64
+ display: flex;
65
+ flex-direction: column;
66
+ padding: var(--spacing-4);
67
+ background-color: var(--surface-raised);
68
+ border: var(--border-width-default) solid var(--border-subtle);
69
+ border-radius: var(--radius-md);
70
+ box-shadow: var(--ion-shadow-shadow-lg);
71
+ }
72
+
73
+ /*
74
+ * Capped, and the cap is the whole reason the list scrolls rather than the
75
+ * page. `usePopover` also passes a maxHeight in the inline style when the
76
+ * viewport is tighter than this; the smaller of the two wins, which is correct
77
+ * either way.
78
+ */
79
+ .ion-combobox-menu__list {
80
+ max-height: 16rem;
81
+ margin: 0;
82
+ padding: 0;
83
+ overflow-y: auto;
84
+ list-style: none;
85
+ }
86
+
87
+ .ion-combobox-menu__list:focus {
88
+ outline: none;
89
+ }
90
+
91
+ .ion-combobox-menu__option {
92
+ display: flex;
93
+ flex-direction: column;
94
+ gap: var(--spacing-2);
95
+ padding: var(--spacing-6) var(--spacing-8);
96
+ border-radius: var(--radius-sm);
97
+ cursor: pointer;
98
+ }
99
+
100
+ .ion-combobox-menu__label {
101
+ color: var(--text-default);
102
+ font-family: var(--font-family-sans);
103
+ font-size: var(--type-body);
104
+ line-height: var(--type-body-line-height);
105
+ }
106
+
107
+ .ion-combobox-menu__description {
108
+ color: var(--text-tertiary);
109
+ font-family: var(--font-family-sans);
110
+ font-size: var(--type-body-sm);
111
+ line-height: var(--type-body-sm-line-height);
112
+ }
113
+
114
+ /*
115
+ * Focus is a background, not an outline, and it is driven by data-focused
116
+ * rather than `:focus`.
117
+ *
118
+ * The real DOM focus never leaves the input — the list is driven by
119
+ * `aria-activedescendant`, so no option is ever `:focus` or `:hover` in the way
120
+ * a normal menu's rows are. Styling either one would produce a list where the
121
+ * keyboard highlight is invisible. React Aria also routes pointer hover into
122
+ * the same `isFocused` flag, so one rule covers both and the mouse and keyboard
123
+ * cannot end up highlighting two different rows.
124
+ */
125
+ .ion-combobox-menu__option[data-focused='true'] {
126
+ background-color: var(--surface-hover);
127
+ }
128
+
129
+ .ion-combobox-menu__option[data-selected='true'] .ion-combobox-menu__label {
130
+ font-weight: var(--font-weight-medium);
131
+ }
132
+
133
+ .ion-combobox-menu__option[data-selected='true'] {
134
+ background-color: var(--surface-primary-subtle);
135
+ }
136
+
137
+ .ion-combobox-menu__option[data-disabled='true'] {
138
+ cursor: not-allowed;
139
+ }
140
+
141
+ .ion-combobox-menu__option[data-disabled='true'] .ion-combobox-menu__label,
142
+ .ion-combobox-menu__option[data-disabled='true']
143
+ .ion-combobox-menu__description {
144
+ color: var(--text-disabled);
145
+ }
146
+
147
+ .ion-combobox-menu__empty {
148
+ padding: var(--spacing-12) var(--spacing-8);
149
+ color: var(--text-tertiary);
150
+ font-family: var(--font-family-sans);
151
+ font-size: var(--type-body-sm);
152
+ line-height: var(--type-body-sm-line-height);
153
+ text-align: center;
154
+ }