ionbase-ui 0.47.0 → 0.51.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "ionbase-ui",
3
- "version": "0.47.0",
3
+ "version": "0.51.0",
4
4
  "usage": "Pick a component here, then read dist/meta/<Name>.json for its full contract.",
5
5
  "hooks": [
6
6
  "useToast"
@@ -416,6 +416,23 @@
416
416
  "detail": "dist/meta/NavItem.json",
417
417
  "hasIntent": true
418
418
  },
419
+ "Pagination": {
420
+ "summary": "Page navigation for a table or list. Renders prev/next arrows, a truncated run of page numbers, and an optional rows-per-page Select.",
421
+ "status": "stable",
422
+ "variants": {
423
+ "type": [
424
+ "numbered",
425
+ "simple"
426
+ ],
427
+ "size": [
428
+ "sm",
429
+ "md",
430
+ "lg"
431
+ ]
432
+ },
433
+ "detail": "dist/meta/Pagination.json",
434
+ "hasIntent": true
435
+ },
419
436
  "PhoneInput": {
420
437
  "summary": "A dial-code block butted against an Input, sharing one outline. It does not pick countries.",
421
438
  "status": "stable",
@@ -604,6 +621,27 @@
604
621
  "detail": "dist/meta/Tabs.json",
605
622
  "hasIntent": true
606
623
  },
624
+ "Textarea": {
625
+ "summary": "A multi-line text field. Every size and state is Input's; it wraps and it resizes vertically.",
626
+ "status": "stable",
627
+ "variants": {
628
+ "size": [
629
+ "sm",
630
+ "md",
631
+ "lg"
632
+ ],
633
+ "autoCapitalize": [
634
+ "none",
635
+ "off",
636
+ "on",
637
+ "sentences",
638
+ "words",
639
+ "characters"
640
+ ]
641
+ },
642
+ "detail": "dist/meta/Textarea.json",
643
+ "hasIntent": true
644
+ },
607
645
  "Toast": {
608
646
  "summary": "A transient notification on neutral chrome. Intent is carried by the icon, not by a tinted panel.",
609
647
  "status": "stable",
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "pageItems",
3
+ "source": "src/components/Pagination.tsx",
4
+ "propsType": null,
5
+ "description": "Which page numbers to draw, and where the runs are broken.\n\nExported for tests: truncation is the only real logic in this component, and\nthe failure mode is a pager that renders a gap marker with nothing behind it\n— an ellipsis standing in for exactly one page, which is both a lie and a\ncell the user cannot click to reach a page they can see the number of.\n\nThe rule that prevents it: a gap is only drawn where it replaces TWO or more\npages. `left > 2` rather than `left > 1`, and the mirror on the right.",
6
+ "import": "import { pageItems } from 'ionbase-ui';",
7
+ "stylesheet": null,
8
+ "tokens": [],
9
+ "props": {},
10
+ "propCounts": {
11
+ "own": 0,
12
+ "aria": 0,
13
+ "dom": 0,
14
+ "other": 0
15
+ }
16
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "ionbase-ui",
3
- "version": "0.47.0",
3
+ "version": "0.51.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": {
@@ -32,6 +32,7 @@
32
32
  @import url('./alert.css');
33
33
  @import url('./badge.css');
34
34
  @import url('./input.css');
35
+ @import url('./textarea.css');
35
36
  @import url('./phone-input.css');
36
37
  @import url('./select.css');
37
38
  @import url('./checkbox.css');
@@ -43,6 +44,7 @@
43
44
  @import url('./header.css');
44
45
  @import url('./logo.css');
45
46
  @import url('./table.css');
47
+ @import url('./pagination.css');
46
48
  @import url('./divider.css');
47
49
  @import url('./link.css');
48
50
  @import url('./modal.css');
@@ -21,10 +21,12 @@
21
21
  * padding box, so `padding-x: 12px` would put the text at 13px. The border
22
22
  * width is subtracted back out — the same correction Badge and Tabs needed.
23
23
  *
24
- * This also makes the focus state free: Figma's focus ring is a 2px inside
25
- * stroke, which eats 1px further into the padding and leaves the text
26
- * exactly where it was. Subtracting the live border width reproduces that,
27
- * so nothing shifts when the field takes focus.
24
+ * The subtraction is against the LIVE border width, which used to matter:
25
+ * focus was a 2px inside stroke that ate a further 1px of padding, and
26
+ * subtracting it kept the text from shifting. Every state is 1px as of
27
+ * 5 Sep 2026, so the correction is now constant — but it stays written this
28
+ * way, because it is correct either way and the next state to need a
29
+ * different width gets it for free.
28
30
  */
29
31
  .ion-input {
30
32
  /*
@@ -172,9 +174,10 @@
172
174
  * hover -> focus -> invalid -> read-only -> disabled.
173
175
  *
174
176
  * Invalid sits after focus and overrides the colour only, never the width. A
175
- * focused invalid field therefore keeps the 2px ring but shows it in the error
176
- * colour, which is both states being true at once rather than one masking the
177
- * other.
177
+ * focused invalid field therefore shows the error colour rather than the focus
178
+ * colour — both states are true at once and the more urgent one is shown. That
179
+ * ordering mattered more when the two differed in width as well; it is still
180
+ * the behaviour, and still deliberate.
178
181
  */
179
182
 
180
183
  /*
@@ -192,23 +195,39 @@
192
195
  border-color: var(--border-strong);
193
196
  }
194
197
 
198
+ /*
199
+ * 1px, not the 2px this used to carry. See the note on --invalid below: both
200
+ * states were thinned on the same design call, and the trade is the same one.
201
+ */
195
202
  .ion-input:focus-within,
196
203
  .ion-input[data-focused='true'] {
197
- --ion-input-border-width: var(--border-width-thick);
198
-
199
204
  border-color: var(--border-focus);
200
205
  }
201
206
 
202
207
  /*
203
- * 2px, matching Focus and matching Select. At 1px the invalid state differed
204
- * from default only in hue, which is the exact failure mode WCAG 1.4.1 is
205
- * about — error has to be perceivable without relying on colour alone.
206
- * Reconciled in Figma; Input was the one that was wrong.
208
+ * 1px. THIS COMMENT USED TO ARGUE FOR 2px AND THE ARGUMENT WAS SOUND, so read
209
+ * it before changing anything back:
210
+ *
211
+ * "2px, matching Focus and matching Select. At 1px the invalid state differed
212
+ * from default only in hue, which is the exact failure mode WCAG 1.4.1 is
213
+ * about — error has to be perceivable without relying on colour alone.
214
+ * Reconciled in Figma; Input was the one that was wrong."
215
+ *
216
+ * That defect was found once and fixed once, and thinning the border reopens
217
+ * it: an invalid field now differs from a default field by hue alone. It was
218
+ * changed on an explicit design call on 5 Sep 2026, applied to Input and
219
+ * Textarea and to their Figma sets, and it is recorded here rather than left to
220
+ * look like drift.
221
+ *
222
+ * Select, Checkbox, Radio, Tabs and Menu still carry border-width/thick, so
223
+ * these two are deliberately out of step with the rest of the system.
224
+ *
225
+ * IF THE ERROR STATE NEEDS A NON-COLOUR CUE AGAIN, this is the decision to
226
+ * revisit — and an icon or a message would satisfy 1.4.1 without the border,
227
+ * which is the better fix than putting the 2px back.
207
228
  */
208
229
  .ion-input--invalid,
209
230
  .ion-input[data-invalid='true'] {
210
- --ion-input-border-width: var(--border-width-thick);
211
-
212
231
  border-color: var(--border-error-strong);
213
232
  }
214
233
 
@@ -0,0 +1,170 @@
1
+ /*
2
+ * Pagination
3
+ *
4
+ * Geometry measured from Figma `Pagination Item` (1283:289) and `Pagination`
5
+ * (1291:503), designed 5 Sep 2026. Two Figma sets, one exported component: the
6
+ * item is an internal part, not something a caller composes, so it is not in
7
+ * the public API. See the `unmapped` note in figma/mapping.json.
8
+ *
9
+ * Size is a set of slots defaulting to medium — the same shape tabs.css uses.
10
+ * A size modifier reassigns five variables rather than restating five rules,
11
+ * which is why the item, the icon and the summary all resize from one class.
12
+ *
13
+ * sm 32 type/body-sm icon 14
14
+ * md 40 type/body icon 20
15
+ * lg 48 type/body-lg icon 24
16
+ *
17
+ * THE CELL IS NOT A FIXED SQUARE, AND FIGMA'S IS.
18
+ *
19
+ * Figma binds width AND height to the same spacing token, because a Figma
20
+ * variant has to pick a number and `1` is what fits in the frame. A real pager
21
+ * reaches three and four digits, and a fixed 40px box either clips `1024` or
22
+ * pads every single-digit cell to fit the widest one that might occur. So the
23
+ * height is the token and the width is a MINIMUM — the cell is square until the
24
+ * number outgrows it, then it grows. Do not "fix" this back to a square to
25
+ * match the Figma frame; the frame is the constraint, not the intent.
26
+ */
27
+
28
+ .ion-pagination {
29
+ --ion-pagination-box: var(--spacing-40);
30
+ --ion-pagination-gap: var(--spacing-8);
31
+ --ion-pagination-font-size: var(--type-body);
32
+ --ion-pagination-line-height: var(--type-body-line-height);
33
+ --ion-pagination-icon: var(--icon-size-md);
34
+
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: space-between;
38
+ gap: var(--spacing-16);
39
+ }
40
+
41
+ .ion-pagination--sm {
42
+ --ion-pagination-box: var(--spacing-32);
43
+ --ion-pagination-gap: var(--spacing-6);
44
+ --ion-pagination-font-size: var(--type-body-sm);
45
+ --ion-pagination-line-height: var(--type-body-sm-line-height);
46
+ --ion-pagination-icon: var(--icon-size-xs);
47
+ }
48
+
49
+ .ion-pagination--lg {
50
+ --ion-pagination-box: var(--spacing-48);
51
+ --ion-pagination-font-size: var(--type-body-lg);
52
+ --ion-pagination-line-height: var(--type-body-lg-line-height);
53
+ --ion-pagination-icon: var(--icon-size-lg);
54
+ }
55
+
56
+ /*
57
+ * With no page-size slot there is nothing to sit opposite, and
58
+ * `space-between` would pin a lone control group to the left edge of whatever
59
+ * contains it. Ending the row is what the component means in that case.
60
+ */
61
+ .ion-pagination--no-page-size {
62
+ justify-content: flex-end;
63
+ }
64
+
65
+ .ion-pagination__page-size {
66
+ display: flex;
67
+ align-items: center;
68
+ gap: var(--spacing-8);
69
+ }
70
+
71
+ .ion-pagination__controls {
72
+ display: flex;
73
+ align-items: center;
74
+ gap: var(--spacing-4);
75
+ margin: 0;
76
+ padding: 0;
77
+ list-style: none;
78
+ }
79
+
80
+ /* The cell. A button for pages and arrows; a span for the ellipsis. */
81
+ .ion-pagination__item {
82
+ display: inline-flex;
83
+ align-items: center;
84
+ justify-content: center;
85
+ box-sizing: border-box;
86
+ min-width: var(--ion-pagination-box);
87
+ height: var(--ion-pagination-box);
88
+ padding: 0 var(--spacing-4);
89
+ border: 0;
90
+ border-radius: var(--radius-md);
91
+ background-color: transparent;
92
+ color: var(--text-tertiary);
93
+ font-family: var(--font-family-sans);
94
+ font-size: var(--ion-pagination-font-size);
95
+ line-height: var(--ion-pagination-line-height);
96
+ font-weight: var(--font-weight-medium);
97
+ cursor: pointer;
98
+ transition:
99
+ background-color var(--ion-duration-base) var(--ion-ease-out),
100
+ color var(--ion-duration-base) var(--ion-ease-out);
101
+ }
102
+
103
+ .ion-pagination__item[data-hovered] {
104
+ background-color: var(--surface-hover);
105
+ color: var(--text-default);
106
+ }
107
+
108
+ /*
109
+ * SELECTED IS `surface/selected`, NOT THE `surface/default` TABS USES.
110
+ *
111
+ * A Tabs pill sits on a `surface/muted` track, so `surface/default` reads as a
112
+ * raised chip against it. Pagination has no track: on a `surface/default` card
113
+ * the current page would be the same colour as the thing behind it, and the one
114
+ * cell that must be unmistakable would be the only invisible one.
115
+ */
116
+ .ion-pagination__item[data-selected] {
117
+ background-color: var(--surface-selected);
118
+ color: var(--text-default);
119
+ }
120
+
121
+ .ion-pagination__item[data-selected][data-hovered] {
122
+ background-color: var(--surface-selected-hover);
123
+ }
124
+
125
+ .ion-pagination__item[data-disabled] {
126
+ color: var(--text-disabled);
127
+ cursor: not-allowed;
128
+ }
129
+
130
+ .ion-pagination__item[data-focused] {
131
+ outline: var(--border-width-thick) solid var(--border-focus);
132
+ outline-offset: var(--spacing-2);
133
+ }
134
+
135
+ .ion-pagination__icon {
136
+ width: var(--ion-pagination-icon);
137
+ height: var(--ion-pagination-icon);
138
+ flex-shrink: 0;
139
+ }
140
+
141
+ /*
142
+ * The truncation marker. Not a button and not focusable — it is the absence of
143
+ * pages, and giving it a tab stop would put a control in the sequence that does
144
+ * nothing when activated. `aria-hidden` in the TSX keeps it out of the
145
+ * announcement too; the surrounding numbers already say what was skipped.
146
+ */
147
+ .ion-pagination__ellipsis {
148
+ display: inline-flex;
149
+ align-items: center;
150
+ justify-content: center;
151
+ min-width: var(--ion-pagination-box);
152
+ height: var(--ion-pagination-box);
153
+ color: var(--text-tertiary);
154
+ }
155
+
156
+ .ion-pagination__summary {
157
+ padding: 0 var(--spacing-8);
158
+ color: var(--text-secondary);
159
+ font-family: var(--font-family-sans);
160
+ font-size: var(--ion-pagination-font-size);
161
+ line-height: var(--ion-pagination-line-height);
162
+ font-weight: var(--font-weight-regular);
163
+ white-space: nowrap;
164
+ }
165
+
166
+ @media (prefers-reduced-motion: reduce) {
167
+ .ion-pagination__item {
168
+ transition: none;
169
+ }
170
+ }
@@ -0,0 +1,178 @@
1
+ /*
2
+ * Textarea
3
+ *
4
+ * Measured from Figma `Textarea` (1301:334). Three sizes x seven states, and
5
+ * every one of them is Input's — a textarea is an input that wrapped. If the
6
+ * two ever diverge it should be because a design said so, not because one
7
+ * drifted; the shared vocabulary is the point.
8
+ *
9
+ * THE HEIGHT IS DERIVED, NOT TYPED
10
+ *
11
+ * Figma's frame hugs a three-line text node, so the box height falls out of
12
+ * bound padding and a bound line-height rather than a number someone picked:
13
+ *
14
+ * sm 3 x 20 + 2 x 6 = 72
15
+ * md 3 x 24 + 2 x 8 = 88
16
+ * lg 3 x 24 + 2 x 12 = 96
17
+ *
18
+ * `rows={3}` reproduces that in the browser for free, and it keeps working when
19
+ * the type ramp moves. Do not replace it with a fixed `height` — that would
20
+ * pin the box while the text inside it kept scaling.
21
+ *
22
+ * THE RESIZE GRIP IS THE BROWSER'S, AND THIS FILE MUST NOT DRAW ONE
23
+ *
24
+ * `resize: vertical` makes the browser paint the two-diagonal grip in the
25
+ * bottom-right corner. Figma draws that grip too, at border/stronger — but as
26
+ * documentation of a native control, not as a spec for one. The native grip
27
+ * cannot be styled, so a custom one here would not replace it; it would sit
28
+ * beside it and every field would have two.
29
+ *
30
+ * Horizontal resize is off deliberately: a field that can grow wider than its
31
+ * container breaks the layout around it, and no design here asks for it.
32
+ */
33
+
34
+ .ion-textarea {
35
+ --ion-textarea-padding-x: var(--spacing-12);
36
+ --ion-textarea-padding-y: var(--spacing-8);
37
+ --ion-textarea-radius: var(--radius-md);
38
+ --ion-textarea-font-size: var(--type-body);
39
+ --ion-textarea-line-height: var(--type-body-line-height);
40
+ --ion-textarea-border-width: var(--border-width-default);
41
+
42
+ display: block;
43
+ width: 100%;
44
+ box-sizing: border-box;
45
+
46
+ /*
47
+ * Same correction Input makes, and for the same reason: Figma draws its
48
+ * stroke INSIDE the frame so padding is measured from the outer edge, while a
49
+ * CSS border sits outside the padding box. Subtracting the live border width
50
+ * puts the text where Figma puts it.
51
+ */
52
+ padding: var(--ion-textarea-padding-y)
53
+ calc(var(--ion-textarea-padding-x) - var(--ion-textarea-border-width));
54
+ background-color: var(--surface-default);
55
+ border-style: solid;
56
+ border-width: var(--ion-textarea-border-width);
57
+ border-color: var(--border-default);
58
+ border-radius: var(--ion-textarea-radius);
59
+ color: var(--text-secondary);
60
+ font-family: var(--font-family-sans);
61
+ font-size: var(--ion-textarea-font-size);
62
+ line-height: var(--ion-textarea-line-height);
63
+ font-weight: var(--font-weight-regular);
64
+ resize: vertical;
65
+ transition:
66
+ border-color var(--ion-duration-base) var(--ion-ease-out),
67
+ background-color var(--ion-duration-base) var(--ion-ease-out);
68
+ }
69
+
70
+ .ion-textarea--sm {
71
+ --ion-textarea-padding-y: var(--spacing-6);
72
+ --ion-textarea-radius: var(--radius-sm);
73
+ --ion-textarea-font-size: var(--type-body-sm);
74
+ --ion-textarea-line-height: var(--type-body-sm-line-height);
75
+ }
76
+
77
+ /* Large keeps Medium's radius and type ramp — only padding grows, as on Input. */
78
+ .ion-textarea--lg {
79
+ --ion-textarea-padding-x: var(--spacing-16);
80
+ --ion-textarea-padding-y: var(--spacing-12);
81
+ }
82
+
83
+ /*
84
+ * Figma's Filled state differs from Default only in the value colour, which is
85
+ * exactly the placeholder distinction — so it needs no variant, the same
86
+ * resolution input.css reached.
87
+ *
88
+ * text/tertiary, and THERE IS NO LONGER A text/placeholder TO REACH FOR.
89
+ *
90
+ * The role read 2.38:1 in Light and 2.33:1 in Dark against the 4.5 SC 1.4.3
91
+ * asks, and the criterion does not exempt placeholder text. Writing this file
92
+ * against the Figma binding failed 14 contrast pairings immediately, which is
93
+ * how the defect surfaced at all: no stylesheet had ever used the role, so
94
+ * nothing measured it. It was retired from Figma and the export on 5 Sep 2026
95
+ * rather than exempted, and Input's six bindings moved here too.
96
+ *
97
+ * Base Web makes the same call — `inputPlaceholder` points at `contentTertiary`
98
+ * and there is no placeholder colour. Carbon keeps one, at 2.38:1, and has an
99
+ * open issue about it.
100
+ */
101
+ .ion-textarea::placeholder {
102
+ color: var(--text-tertiary);
103
+ opacity: 1;
104
+ }
105
+
106
+ /*
107
+ * State order is deliberate and equal-specificity, so later rules win:
108
+ * hover -> focus -> invalid -> read-only -> disabled.
109
+ */
110
+
111
+ /*
112
+ * Hover is declared twice, as on Input and Button. Native `:hover` latches on
113
+ * touch until you tap elsewhere; `[data-hovered]` comes from React Aria's
114
+ * useHover, which is pointer-aware. The media query keeps this working without
115
+ * React.
116
+ */
117
+ @media (hover: hover) {
118
+ .ion-textarea:hover {
119
+ border-color: var(--border-strong);
120
+ }
121
+ }
122
+
123
+ .ion-textarea[data-hovered='true'] {
124
+ border-color: var(--border-strong);
125
+ }
126
+
127
+ .ion-textarea:focus,
128
+ .ion-textarea[data-focused='true'] {
129
+ border-color: var(--border-focus);
130
+ outline: none;
131
+ }
132
+
133
+ /*
134
+ * 1px, matching Input as of 0.49.0. Input's stylesheet carries the full note:
135
+ * this width used to be 2px so the error state would not rest on hue alone,
136
+ * which is what WCAG 1.4.1 asks. It was thinned on an explicit design call, and
137
+ * an icon or a message is the better way to restore that cue.
138
+ */
139
+ .ion-textarea--invalid,
140
+ .ion-textarea[data-invalid='true'] {
141
+ border-color: var(--border-error-strong);
142
+ }
143
+
144
+ /*
145
+ * Read-only keeps the value legible but drops the field out of the editable
146
+ * palette — page surface, subtle border. It stays resizable, which is what the
147
+ * browser does and what the Figma set shows.
148
+ */
149
+ .ion-textarea--readonly,
150
+ .ion-textarea[data-readonly='true'] {
151
+ background-color: var(--surface-page);
152
+ border-color: var(--border-subtle);
153
+ }
154
+
155
+ /*
156
+ * Disabled turns resize off. A disabled textarea cannot be resized in any
157
+ * browser and none of them draw the grip on one, so `resize: none` here is
158
+ * matching the platform rather than making a choice.
159
+ */
160
+ .ion-textarea:disabled,
161
+ .ion-textarea[data-disabled='true'] {
162
+ background-color: var(--surface-disabled);
163
+ border-color: var(--border-disabled);
164
+ color: var(--text-disabled);
165
+ cursor: not-allowed;
166
+ resize: none;
167
+ }
168
+
169
+ .ion-textarea:disabled::placeholder,
170
+ .ion-textarea[data-disabled='true']::placeholder {
171
+ color: var(--text-disabled);
172
+ }
173
+
174
+ @media (prefers-reduced-motion: reduce) {
175
+ .ion-textarea {
176
+ transition: none;
177
+ }
178
+ }
@@ -305,7 +305,6 @@
305
305
  --text-default: #131923;
306
306
  --text-secondary: #384252;
307
307
  --text-tertiary: #4b5563;
308
- --text-placeholder: #9ca3b0;
309
308
  --text-disabled: #6b7280;
310
309
  --text-on-color: #ffffff;
311
310
  --text-inverse: #f6f8f9;
@@ -6,7 +6,6 @@
6
6
  --text-default: #f6f8f9;
7
7
  --text-secondary: #dde0e4;
8
8
  --text-tertiary: #9ca3b0;
9
- --text-placeholder: #4b5563;
10
9
  --text-inverse: #131923;
11
10
  --text-primary: #9fd5f9;
12
11
  --text-error: #ffadad;
@@ -36,7 +36,6 @@ export declare const ui: {
36
36
  readonly 'text/default': "var(--text-default)";
37
37
  readonly 'text/secondary': "var(--text-secondary)";
38
38
  readonly 'text/tertiary': "var(--text-tertiary)";
39
- readonly 'text/placeholder': "var(--text-placeholder)";
40
39
  readonly 'text/disabled': "var(--text-disabled)";
41
40
  readonly 'text/on-color': "var(--text-on-color)";
42
41
  readonly 'text/inverse': "var(--text-inverse)";
@@ -510,7 +509,6 @@ export declare const tokens: {
510
509
  readonly 'text/default': "var(--text-default)";
511
510
  readonly 'text/secondary': "var(--text-secondary)";
512
511
  readonly 'text/tertiary': "var(--text-tertiary)";
513
- readonly 'text/placeholder': "var(--text-placeholder)";
514
512
  readonly 'text/disabled': "var(--text-disabled)";
515
513
  readonly 'text/on-color': "var(--text-on-color)";
516
514
  readonly 'text/inverse': "var(--text-inverse)";
@@ -1118,10 +1116,6 @@ export declare const tokenValues: {
1118
1116
  readonly Light: "{neutral.600}";
1119
1117
  readonly Dark: "{neutral.400}";
1120
1118
  };
1121
- readonly "text/placeholder": {
1122
- readonly Light: "{neutral.400}";
1123
- readonly Dark: "{neutral.600}";
1124
- };
1125
1119
  readonly "text/disabled": {
1126
1120
  readonly Light: "{neutral.500}";
1127
1121
  readonly Dark: "{neutral.500}";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgjDd,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4iDd,CAAC"}
@@ -38,7 +38,6 @@ export const ui = {
38
38
  'text/default': 'var(--text-default)',
39
39
  'text/secondary': 'var(--text-secondary)',
40
40
  'text/tertiary': 'var(--text-tertiary)',
41
- 'text/placeholder': 'var(--text-placeholder)',
42
41
  'text/disabled': 'var(--text-disabled)',
43
42
  'text/on-color': 'var(--text-on-color)',
44
43
  'text/inverse': 'var(--text-inverse)',
@@ -640,10 +639,6 @@ export const tokenValues = {
640
639
  "Light": "{neutral.600}",
641
640
  "Dark": "{neutral.400}"
642
641
  },
643
- "text/placeholder": {
644
- "Light": "{neutral.400}",
645
- "Dark": "{neutral.600}"
646
- },
647
642
  "text/disabled": {
648
643
  "Light": "{neutral.500}",
649
644
  "Dark": "{neutral.500}"