@juspay/svelte-ui-components 4.29.1 → 4.31.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 (58) hide show
  1. package/README.md +15 -14
  2. package/dist/Accordion/Accordion.svelte +18 -0
  3. package/dist/AnimatedNumber/AnimatedNumber.svelte +776 -0
  4. package/dist/AnimatedNumber/AnimatedNumber.svelte.d.ts +4 -0
  5. package/dist/AnimatedNumber/motion.d.ts +47 -0
  6. package/dist/AnimatedNumber/motion.js +190 -0
  7. package/dist/AnimatedNumber/properties.d.ts +58 -0
  8. package/dist/AnimatedNumber/properties.js +1 -0
  9. package/dist/Badge/Badge.svelte +20 -3
  10. package/dist/Badge/properties.d.ts +9 -0
  11. package/dist/Book/Book.svelte +9 -0
  12. package/dist/Calendar/Calendar.svelte +34 -2
  13. package/dist/Carousel/Carousel.svelte +17 -2
  14. package/dist/ChatBubble/ChatBubble.svelte +12 -0
  15. package/dist/ChatComposer/ChatComposer.svelte +9 -0
  16. package/dist/CommandMenu/CommandMenu.svelte +13 -0
  17. package/dist/DateRangePicker/DateRangePicker.svelte +77 -20
  18. package/dist/DeltaIndicator/DeltaIndicator.svelte +12 -1
  19. package/dist/DeltaIndicator/properties.d.ts +9 -0
  20. package/dist/Gallery/Gallery.svelte +16 -0
  21. package/dist/Gauge/Gauge.svelte +21 -2
  22. package/dist/Gauge/properties.d.ts +13 -0
  23. package/dist/Input/Input.svelte +34 -26
  24. package/dist/KeyboardInput/KeyboardInput.svelte +1 -1
  25. package/dist/ListItem/ListItem.svelte +27 -2
  26. package/dist/ListItem/label.d.ts +11 -0
  27. package/dist/ListItem/label.js +40 -0
  28. package/dist/ListItem/properties.d.ts +52 -0
  29. package/dist/MediaUpload/MediaUpload.svelte +12 -1
  30. package/dist/MediaUpload/properties.d.ts +9 -0
  31. package/dist/Menu/Menu.svelte +11 -2
  32. package/dist/Modal/Modal.svelte +14 -4
  33. package/dist/PieChart/PieChart.svelte +16 -1
  34. package/dist/PieChart/properties.d.ts +13 -0
  35. package/dist/Progress/Progress.svelte +21 -1
  36. package/dist/Progress/properties.d.ts +12 -0
  37. package/dist/ProportionBar/ProportionBar.svelte +7 -1
  38. package/dist/ProportionBar/ProportionBar.svelte.d.ts +0 -19
  39. package/dist/ProportionBar/properties.d.ts +10 -0
  40. package/dist/Select/Select.svelte +23 -8
  41. package/dist/SplitButton/SplitButton.svelte +4 -1
  42. package/dist/SplitInput/SplitInput.svelte +1 -1
  43. package/dist/StatCard/StatCard.svelte +129 -5
  44. package/dist/StatCard/metric.d.ts +22 -0
  45. package/dist/StatCard/metric.js +74 -0
  46. package/dist/StatCard/properties.d.ts +44 -0
  47. package/dist/Table/BuiltinCell.svelte +19 -2
  48. package/dist/Table/cellData.js +3 -0
  49. package/dist/Table/properties.d.ts +15 -0
  50. package/dist/Tabs/Tabs.svelte +16 -0
  51. package/dist/index.d.ts +2 -0
  52. package/dist/index.js +1 -0
  53. package/dist/styles/theme-dark.css +27 -3
  54. package/dist-codemod/codemod/migration-assets/legacy-display.css +2 -1
  55. package/dist-codemod/codemod/migration-assets/legacy-palette.css +4 -1
  56. package/dist-codemod/codemod/migration-assets/wc-display.json +5 -0
  57. package/dist-wc/index.js +1435 -747
  58. package/package.json +4 -2
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Whether a displayed value is a METRIC worth rolling, or an identifier that
3
+ * merely contains digits.
4
+ *
5
+ * The distinction is not cosmetic. Adopting the odometer across a dashboard
6
+ * mapper animated `demo-store.myshopify.com` and `Shinchan Store GA4 (987654321)`
7
+ * on the anomaly surface: a store domain and a GA4 account id, rolled digit by
8
+ * digit as though they were measurements. Nothing was broken -- they went
9
+ * through the same `statcard-value` slot as `₹60k` -- which is exactly why a
10
+ * blanket "animate this card's values" is the wrong instruction.
11
+ *
12
+ * The rule is digits plus decoration. A metric is allowed to carry a currency
13
+ * symbol, a sign, a percent, group and decimal separators, and SHORT unit words
14
+ * -- `₹60k`, `90%`, `₹1.23Cr`, `12m 15s`, `-8%`. Anything else with a long
15
+ * alphabetic run, a dotted hostname or a parenthesised id is an identifier and
16
+ * is left alone.
17
+ *
18
+ * Deliberately conservative in one direction only: a metric wrongly refused
19
+ * renders exactly as it does today, while an identifier wrongly accepted is a
20
+ * number spinning in a domain name.
21
+ */
22
+ /** Unit fragments a metric may carry. Matched case-insensitively, whole-run. */
23
+ const UNITS = new Set([
24
+ 'k',
25
+ 'l',
26
+ 'm',
27
+ 'b',
28
+ 't',
29
+ 'cr',
30
+ 'lac',
31
+ 'lakh',
32
+ 'mn',
33
+ 'bn',
34
+ 's',
35
+ 'ms',
36
+ 'h',
37
+ 'hr',
38
+ 'hrs',
39
+ 'd',
40
+ 'day',
41
+ 'days',
42
+ 'min',
43
+ 'mins',
44
+ 'sec',
45
+ 'secs',
46
+ 'x',
47
+ 'pt',
48
+ 'pts',
49
+ 'px'
50
+ ]);
51
+ /** Decoration that carries no meaning for this decision. */
52
+ const DECORATION = /[\p{Nd}\s,.:+%()[\]]|\p{Sc}|\p{Pd}|\p{Sm}/gu;
53
+ export const isAnimatableMetric = (text) => {
54
+ if (typeof text !== 'string') {
55
+ return false;
56
+ }
57
+ const value = text.trim();
58
+ if (value.length === 0 || !/\p{Nd}/u.test(value)) {
59
+ return false;
60
+ }
61
+ // A dotted hostname or an email is an identifier however many digits it has.
62
+ if (/\.[a-z]{2,}(?:\/|$)|@|\/\//i.test(value)) {
63
+ return false;
64
+ }
65
+ // A parenthesised run of digits is an id in a label, not a measurement:
66
+ // "Shinchan Store GA4 (987654321)".
67
+ if (/\([^)]*\p{Nd}[^)]*\)/u.test(value)) {
68
+ return false;
69
+ }
70
+ // What remains once digits and decoration are removed must be unit words only.
71
+ const remainder = value.replace(DECORATION, ' ');
72
+ const words = remainder.split(/\s+/).filter((word) => word.length > 0);
73
+ return words.every((word) => UNITS.has(word.toLowerCase()));
74
+ };
@@ -111,6 +111,50 @@ export type OptionalStatCardProperties = {
111
111
  footer?: Snippet;
112
112
  /** Replaces the string `value` with a custom snippet for advanced value rendering. */
113
113
  valueSnippet?: Snippet;
114
+ /**
115
+ * Rolls `value`, each row's `value`/`comparisonValue`, and each breakdown
116
+ * item's `value` through AnimatedNumber's per-digit odometer instead of
117
+ * swapping the text outright. Every one of those is already a
118
+ * consumer-preformatted string, not a raw number -- AnimatedNumber diffs a
119
+ * string by character position, so `'₹1.23Cr'` -> `'₹1.45Cr'` rolls only the
120
+ * two digits that changed and leaves `₹`, the decimal point and `Cr` alone,
121
+ * with nothing here ever surfacing the number underneath. `valueSnippet`
122
+ * still wins outright when set, exactly as it does today.
123
+ * @default false
124
+ */
125
+ animateValue?: boolean;
126
+ /**
127
+ * Rolls the animated values up from zero as the card appears, rather than
128
+ * painting them outright. Requires an animation mode to be active -- either
129
+ * `animateValue`, or `animatePrimary` having resolved a slot to animate.
130
+ * Ignored when neither applies, because there is then nothing to roll.
131
+ *
132
+ * Worth turning on for a card whose figures arrive once with a fetch and then
133
+ * do not change, which is the ordinary dashboard case -- otherwise the
134
+ * odometer has nothing to react to for the life of the page.
135
+ * @default false
136
+ */
137
+ animateOnMount?: boolean;
138
+ /**
139
+ * Animate exactly ONE value on the card instead of all of them.
140
+ *
141
+ * Prefer this to `animateValue` on a dashboard. A card carries several numeric
142
+ * slots at different sizes, and animating all of them puts motion on the small
143
+ * supporting figures as loudly as on the headline -- which reads as noise, and
144
+ * on the business variant actually animated the 18px rows while the 44px
145
+ * subtitle above them sat still.
146
+ * @default false
147
+ */
148
+ animatePrimary?: boolean;
149
+ /**
150
+ * Which slot `animatePrimary` animates.
151
+ *
152
+ * `'auto'` measures the rendered slots and picks the largest one holding a
153
+ * metric, so the card follows its own type scale. Name a slot to override:
154
+ * `'subtitle'`, `'value'`, or a row index. Ignored unless `animatePrimary`.
155
+ * @default 'auto'
156
+ */
157
+ primary?: 'auto' | 'subtitle' | 'value' | number;
114
158
  /**
115
159
  * Multiple metric rows. When provided, replaces the single value/delta row with
116
160
  * a column of rows separated by dividers.
@@ -25,6 +25,7 @@
25
25
  import Select from '../Select/Select.svelte';
26
26
  import Input from '../Input/Input.svelte';
27
27
  import Menu from '../Menu/Menu.svelte';
28
+ import AnimatedNumber from '../AnimatedNumber/AnimatedNumber.svelte';
28
29
  import trendUpSvg from '../assets/trend-up.svg?raw';
29
30
  import trendDownSvg from '../assets/trend-down.svg?raw';
30
31
  import copySvg from '../assets/copy.svg?raw';
@@ -258,7 +259,15 @@
258
259
  >
259
260
  <!-- eslint-disable svelte/no-at-html-tags -->
260
261
  <span class="builtin-trend-icon">{@html trendUpSvg}</span>
261
- {compare.trendPercent}%
262
+ {#if compare.animateTrend}
263
+ <!-- The string form, not the raw number: it keeps the % inside the
264
+ odometer's accessible name, and avoids Intl grouping a raw
265
+ trendPercent into "1,234.5" where the plain branch shows
266
+ "1234.5". -->
267
+ <AnimatedNumber value={`${compare.trendPercent}%`} />
268
+ {:else}
269
+ {compare.trendPercent}%
270
+ {/if}
262
271
  </span>
263
272
  {:else if compare.trendPercent < 0}
264
273
  <span
@@ -268,7 +277,15 @@
268
277
  >
269
278
  <!-- eslint-disable svelte/no-at-html-tags -->
270
279
  <span class="builtin-trend-icon">{@html trendDownSvg}</span>
271
- {compare.trendPercent}%
280
+ {#if compare.animateTrend}
281
+ <!-- The string form, not the raw number: it keeps the % inside the
282
+ odometer's accessible name, and avoids Intl grouping a raw
283
+ trendPercent into "1,234.5" where the plain branch shows
284
+ "1234.5". -->
285
+ <AnimatedNumber value={`${compare.trendPercent}%`} />
286
+ {:else}
287
+ {compare.trendPercent}%
288
+ {/if}
272
289
  </span>
273
290
  {:else}
274
291
  <span class="builtin-trend builtin-trend-flat">↔ 0%</span>
@@ -116,6 +116,9 @@ export const asCompareCellData = (value) => {
116
116
  if (typeof record.trendLabel === 'string') {
117
117
  compareData.trendLabel = record.trendLabel;
118
118
  }
119
+ if (typeof record.animateTrend === 'boolean') {
120
+ compareData.animateTrend = record.animateTrend;
121
+ }
119
122
  return compareData;
120
123
  };
121
124
  export const asLinkCellData = (value) => {
@@ -89,6 +89,21 @@ export type TableCompareCellData = {
89
89
  comparison?: string;
90
90
  trendPercent?: number;
91
91
  trendLabel?: string;
92
+ /**
93
+ * Rolls `trendPercent` through `AnimatedNumber` instead of the plain text
94
+ * it renders as today, so a comparison row that updates in place (a live
95
+ * dashboard, a polling total) visibly counts to its new value rather than
96
+ * jumping. Per-cell rather than a Table-level prop, since a single column
97
+ * can mix trend rows a consumer wants live with historical ones that don't
98
+ * need to move. `AnimatedNumber` is handed the complete string
99
+ * `` `${trendPercent}%` ``, so the unit sits inside its accessible name
100
+ * rather than beside it, where a reader navigating by graphic would never
101
+ * reach it. The `%` stays a literal character rather than an
102
+ * `Intl.NumberFormat` percent style, which would divide the value by 100
103
+ * and render the wrong figure, and it is a literal column that never rolls.
104
+ * @default false
105
+ */
106
+ animateTrend?: boolean;
92
107
  };
93
108
  /** Cell shape for `type: 'toggle'` — the handler lives on the column. */
94
109
  export type TableToggleCellData = {
@@ -638,6 +638,22 @@
638
638
  transition: var(--tabs-transition, color 0.2s ease, background 0.2s ease);
639
639
  }
640
640
 
641
+ /* Roving focus really does move (see focusedKey/focusTabAt above) -- this
642
+ just replaces the INDICATOR that outline:none above strips, which is what
643
+ was actually missing (WCAG 2.4.7). :focus-visible only, so a mouse click
644
+ that activates a tab still shows nothing new, matching the rest of this
645
+ file's pattern (Sheet's .sheet-panel, Select's .select-clear, ...).
646
+ currentColor tracks --tabs-item-color / --tabs-active-color, which are
647
+ already themed per-mode and per-state, so the ring stays visible against
648
+ --tabs-bar-background in both themes with no extra token needed here. The
649
+ offset is inset, not the usual outward one: .tabs-bar is a same-axis
650
+ overflow:auto scroller with 0px padding/gap by default, so an outward ring
651
+ on an edge tab would be clipped by the scroll container's own edge. */
652
+ .tabs-item:focus-visible {
653
+ outline: var(--tabs-item-focus-outline, 2px solid currentColor);
654
+ outline-offset: var(--tabs-item-focus-outline-offset, -2px);
655
+ }
656
+
641
657
  .tabs-item :global(.tabs-item-icon) {
642
658
  --image-width: var(--tabs-item-icon-size, 16px);
643
659
  --image-height: var(--tabs-item-icon-size, 16px);
package/dist/index.d.ts CHANGED
@@ -86,6 +86,7 @@ export { default as FileDropzoneTrigger } from './FileDropzoneTrigger/FileDropzo
86
86
  export { default as Separator } from './Separator/Separator.svelte';
87
87
  export { default as Label } from './Label/Label.svelte';
88
88
  export { default as AspectRatio } from './AspectRatio/AspectRatio.svelte';
89
+ export { default as AnimatedNumber } from './AnimatedNumber/AnimatedNumber.svelte';
89
90
  export { default as RatingGroup } from './RatingGroup/RatingGroup.svelte';
90
91
  export { default as Chat } from './Chat/Chat.svelte';
91
92
  export { default as ChatHeader } from './ChatHeader/ChatHeader.svelte';
@@ -154,6 +155,7 @@ export type * from './LoadingDots/properties';
154
155
  export type * from './Separator/properties';
155
156
  export type * from './Label/properties';
156
157
  export type * from './AspectRatio/properties';
158
+ export type * from './AnimatedNumber/properties';
157
159
  export type * from './RatingGroup/properties';
158
160
  export type * from './Menu/properties';
159
161
  export type * from './Sheet/properties';
package/dist/index.js CHANGED
@@ -86,6 +86,7 @@ export { default as FileDropzoneTrigger } from './FileDropzoneTrigger/FileDropzo
86
86
  export { default as Separator } from './Separator/Separator.svelte';
87
87
  export { default as Label } from './Label/Label.svelte';
88
88
  export { default as AspectRatio } from './AspectRatio/AspectRatio.svelte';
89
+ export { default as AnimatedNumber } from './AnimatedNumber/AnimatedNumber.svelte';
89
90
  export { default as RatingGroup } from './RatingGroup/RatingGroup.svelte';
90
91
  export { default as Chat } from './Chat/Chat.svelte';
91
92
  export { default as ChatHeader } from './ChatHeader/ChatHeader.svelte';
@@ -135,6 +135,8 @@
135
135
  --chat-composer-placeholder-color: #9ca3af;
136
136
  --chat-composer-action-color: #9ca3af;
137
137
  --chat-composer-action-hover-background-color: #252535;
138
+ --chat-composer-focus-border-color: #818cf8;
139
+ --chat-composer-focus-shadow: 0 0 0 2px rgba(129, 140, 248, 0.3);
138
140
  --chat-composer-send-background-color: #e4e4e7;
139
141
  --chat-composer-send-color: #18181b;
140
142
  --chat-composer-send-hover-background-color: #d4d4d8;
@@ -167,6 +169,7 @@
167
169
  --chat-bubble-color: #18181b;
168
170
  --chat-bubble-hover-background-color: #d4d4d8;
169
171
  --chat-bubble-panel-background: #161621;
172
+ --chat-bubble-panel-focus-outline: 2px solid #818cf8;
170
173
 
171
174
  /* HITL */
172
175
  --hitl-background: #1e1e2e;
@@ -460,6 +463,7 @@
460
463
 
461
464
  /* Book */
462
465
  --book-dot-active-color: #818cf8;
466
+ --book-focus-outline: 2px solid #818cf8;
463
467
  --book-nav-color: #9ca3af;
464
468
 
465
469
  /* BrandLoader */
@@ -523,6 +527,7 @@
523
527
  --command-menu-background: #1e1e2e;
524
528
  --command-menu-input-caret-color: #818cf8;
525
529
  --command-menu-input-color: #d1d5db;
530
+ --command-menu-input-focus-outline: 2px solid #818cf8;
526
531
  --command-menu-item-active-background: #252535;
527
532
  --command-menu-item-active-color: #d1d5db;
528
533
  --command-menu-item-color: #9ca3af;
@@ -545,6 +550,8 @@
545
550
  --drp-clear-hover-background: #252535;
546
551
  --drp-date-input-background: #1e1e2e;
547
552
  --drp-date-input-color: #d1d5db;
553
+ --drp-date-input-focus-border: #818cf8;
554
+ --drp-date-input-focus-shadow: 0 0 0 2px rgba(129, 140, 248, 0.3);
548
555
  --drp-date-input-invalid-border: #f87171;
549
556
  --drp-datetime-arrow-color: #9ca3af;
550
557
  --drp-field-error-color: #f87171;
@@ -553,6 +560,8 @@
553
560
  --drp-preset-hover-background: #252535;
554
561
  --drp-time-field-color: #d1d5db;
555
562
  --drp-time-input-background: #1e1e2e;
563
+ --drp-time-input-focus-border: #818cf8;
564
+ --drp-time-input-focus-shadow: 0 0 0 2px rgba(129, 140, 248, 0.3);
556
565
  --drp-time-input-icon-color: #9ca3af;
557
566
  --drp-time-input-invalid-border: #f87171;
558
567
  --drp-time-toggle-active-color: #60a5fa;
@@ -568,6 +577,9 @@
568
577
  --file-input-error-color: #f87171;
569
578
  --file-input-info-color: #9ca3af;
570
579
 
580
+ /* Gallery */
581
+ --gallery-lightbox-focus-outline: 2px solid #818cf8;
582
+
571
583
  /* GridItem */
572
584
  --grid-item-background-color: #252535;
573
585
 
@@ -587,22 +599,25 @@
587
599
  --keyboard-input-key-background: #1e1e2e;
588
600
  --keyboard-input-key-color: #d1d5db;
589
601
  --keyboard-input-separator-color: #9ca3af;
602
+ --field-group-separator-color: #9ca3af;
590
603
 
591
604
  /* Label */
592
605
  --label-required-color: #f87171;
593
606
 
594
607
  /* ListItem */
608
+ --list-item-focus-outline: 2px solid #818cf8;
595
609
  --list-item-loader-background: #1a1a26;
596
610
 
597
611
  /* MarkdownText */
598
612
  --markdown-text-focus-outline-color: #818cf8;
613
+ --markdown-text-color: #d1d5db;
599
614
  --markdown-text-link-color: #a78bfa;
600
615
 
601
616
  /* MediaUpload */
602
617
  --media-upload-add-background-color: #1e1e2e;
603
618
  /* The tile's own text, on that #1e1e2e tile. The light defaults (#6b7280 /
604
619
  #9aa0a8) are tuned for a white tile and read at 3.4:1 and 3.8:1 here. */
605
- --media-upload-add-color: #9ca3af;
620
+ --media-upload-add-color: #cbd5e1;
606
621
  --media-upload-add-hint-color: #9ca3af;
607
622
  --media-upload-add-dragging-background-color: #262b4a;
608
623
  --media-upload-add-dragging-color: #818cf8;
@@ -622,9 +637,11 @@
622
637
  --menu-item-danger-hover-background-color: #331519;
623
638
  --menu-item-focus-background-color: #252535;
624
639
  --menu-item-hover-background-color: #252535;
640
+ --menu-trigger-focus-outline: 2px solid #818cf8;
625
641
 
626
642
  /* Modal */
627
643
  --modal-content-background-color: #1e1e2e;
644
+ --modal-content-focus-outline: 2px solid #818cf8;
628
645
  --modal-footer-background-color: #1a1a26;
629
646
  --modal-footer-primary-button-color: #9ca3af;
630
647
  --modal-footer-secondary-button-color: #9ca3af;
@@ -737,6 +754,13 @@
737
754
  --table-header-border-bgcolor: #1e1e2e;
738
755
  --table-header-font-color: #9ca3af;
739
756
  --table-inline-search-clear-color: #9ca3af;
757
+ /* #9ca3af measured 4.41:1 here -- just under 4.5:1 -- because this input sits on
758
+ a row background that composites lighter than the table's own #1a1a26 (row
759
+ hover/alt tinting stacks on top). #b8bcc4 (already used for
760
+ --loader-sub-text-color, the same "muted text on a dark surface" role) clears
761
+ it with margin, verified at 5.88:1 by scripts/check-contrast.mjs against the
762
+ actual composited background rather than the nominal one. */
763
+ --table-ops-note-placeholder-color: #b8bcc4;
740
764
  --table-link-copy-color: #9ca3af;
741
765
  --table-sort-active-color: #60a5fa;
742
766
  --table-sort-hover-color: #9ca3af;
@@ -745,12 +769,12 @@
745
769
  --table-trend-up-color: #4ade80;
746
770
 
747
771
  /* Tabs */
748
- --tabs-active-color: #818cf8;
772
+ --tabs-active-color: #a5b4fc;
749
773
  --tabs-bar-background: #1e1e2e;
750
774
  --tabs-hover-background: #252535;
751
775
  --tabs-hover-color: #d1d5db;
752
776
  --tabs-indicator-color: #818cf8;
753
- --tabs-item-color: #9ca3af;
777
+ --tabs-item-color: #cbd5e1;
754
778
  --tabs-item-status-default-color: #818cf8;
755
779
  --tabs-item-status-error-color: #f87171;
756
780
 
@@ -106,7 +106,8 @@ sui-tooltip { --sui-tooltip-display: inline; }
106
106
  sui-typewriter-text { --sui-typewriter-text-display: inline; }
107
107
  sui-voice-orb { --sui-voice-orb-display: inline; }
108
108
 
109
- /* components whose new default is `inline-block` (11) */
109
+ /* components whose new default is `inline-block` (12) */
110
+ sui-animated-number { --sui-animated-number-display: inline; }
110
111
  sui-avatar { --sui-avatar-display: inline; }
111
112
  sui-chat-suggestions { --sui-chat-suggestions-display: inline; }
112
113
  sui-checkbox { --sui-checkbox-display: inline; }
@@ -12,7 +12,7 @@
12
12
  * one property at a time, not to be a permanent fixture in a consumer
13
13
  * build.
14
14
  *
15
- * 51 properties pinned below. 9 more could not be -- see the note at the end.
15
+ * 54 properties pinned below. 9 more could not be -- see the note at the end.
16
16
  *
17
17
  * Generated by scripts/migrate/legacy-palette.ts -- do not hand edit.
18
18
  */
@@ -29,16 +29,19 @@
29
29
  :root { --drp-panel-background: inherit; } /* was the 4.27.x default */
30
30
  :root { --empty-state-description-opacity: 0.6; } /* was the 4.27.x default */
31
31
  :root { --field-group-label-color: #9ca3af; } /* was the 4.27.x default */
32
+ :root { --field-group-separator-color: #9ca3af; } /* was the 4.27.x default */
32
33
  :root { --file-dropzone-trigger-caption-color: #64748b; } /* was the 4.27.x default */
33
34
  :root { --hitl-approved-color: #16a34a; } /* was the 4.27.x default */
34
35
  :root { --hitl-badge-color: #858585; } /* was the 4.27.x default */
35
36
  :root { --hitl-description-color: #858585; } /* was the 4.27.x default */
36
37
  :root { --hitl-param-label-color: #858585; } /* was the 4.27.x default */
37
38
  :root { --input-char-count-color: #98a2b3; } /* was the 4.27.x default */
39
+ :root { --keyboard-input-separator-color: #888888; } /* was the 4.27.x default */
38
40
  :root { --loader-text-color: white; } /* was the 4.27.x default */
39
41
  :root { --media-upload-add-color: #6b7280; } /* was the 4.27.x default */
40
42
  :root { --media-upload-add-hint-color: #9aa0a8; } /* was the 4.27.x default */
41
43
  :root { --media-upload-counter-color: #8a8f98; } /* was the 4.27.x default */
44
+ :root { --menu-trigger-focus-outline: none; } /* was the 4.27.x default */
42
45
  :root { --pagination-button-color: #3a4550; } /* was the 4.27.x default */
43
46
  :root { --pagination-load-more-color: #3a4550; } /* was the 4.27.x default */
44
47
  :root { --pill-tone-muted-color: #6b7280; } /* was the 4.27.x default */
@@ -4,6 +4,11 @@
4
4
  "property": "--sui-accordion-display",
5
5
  "default": "block"
6
6
  },
7
+ {
8
+ "tag": "sui-animated-number",
9
+ "property": "--sui-animated-number-display",
10
+ "default": "inline-block"
11
+ },
7
12
  {
8
13
  "tag": "sui-area-chart",
9
14
  "property": "--sui-area-chart-display",