@common-origin/design-system 2.21.0 → 2.22.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 (74) hide show
  1. package/dist/client.js +222 -206
  2. package/dist/client.js.map +1 -1
  3. package/dist/components/atoms/Badge/Badge.d.mts +16 -4
  4. package/dist/components/atoms/Badge/Badge.d.ts +16 -4
  5. package/dist/components/atoms/Badge/Badge.mjs +4 -5
  6. package/dist/components/atoms/Badge/index.d.mts +1 -1
  7. package/dist/components/atoms/Badge/index.d.ts +1 -1
  8. package/dist/components/atoms/Button/Button.mjs +1 -1
  9. package/dist/components/atoms/CategoryLabel/CategoryLabel.d.mts +23 -8
  10. package/dist/components/atoms/CategoryLabel/CategoryLabel.d.ts +23 -8
  11. package/dist/components/atoms/CategoryLabel/CategoryLabel.mjs +31 -18
  12. package/dist/components/atoms/CategoryLabel/index.d.mts +1 -1
  13. package/dist/components/atoms/CategoryLabel/index.d.ts +1 -1
  14. package/dist/components/atoms/Chip/SuggestionChip.mjs +1 -1
  15. package/dist/components/atoms/Chip/shared/utils.mjs +1 -1
  16. package/dist/components/atoms/Chip/shared/utils.mjs.map +1 -1
  17. package/dist/components/atoms/Icon/Icon.mjs +1 -1
  18. package/dist/components/atoms/MoneyDisplay/MoneyDisplay.mjs +14 -60
  19. package/dist/components/atoms/StatusBadge/StatusBadge.d.mts +3 -2
  20. package/dist/components/atoms/StatusBadge/StatusBadge.d.ts +3 -2
  21. package/dist/components/atoms/StatusBadge/StatusBadge.mjs +1 -1
  22. package/dist/components/atoms/StatusBadge/StatusBadge.mjs.map +1 -1
  23. package/dist/components/atoms/StatusLabel/StatusLabel.d.mts +5 -2
  24. package/dist/components/atoms/StatusLabel/StatusLabel.d.ts +5 -2
  25. package/dist/components/atoms/StatusLabel/StatusLabel.mjs +5 -2
  26. package/dist/components/atoms/StatusLabel/StatusLabel.mjs.map +1 -1
  27. package/dist/components/atoms/StatusLabel/StatusLabelBase.d.mts +2 -2
  28. package/dist/components/atoms/StatusLabel/StatusLabelBase.d.ts +2 -2
  29. package/dist/components/atoms/StatusLabel/StatusLabelBase.mjs +19 -13
  30. package/dist/components/atoms/StatusLabel/StatusShape.d.mts +4 -0
  31. package/dist/components/atoms/StatusLabel/StatusShape.d.ts +4 -0
  32. package/dist/components/atoms/StatusLabel/StatusShape.mjs +31 -0
  33. package/dist/components/atoms/StatusLabel/StatusShape.mjs.map +1 -0
  34. package/dist/components/atoms/Typography/Typography.mjs +2 -2
  35. package/dist/components/molecules/AccountCard/AccountCard.mjs +21 -13
  36. package/dist/components/molecules/Alert/Alert.d.mts +4 -4
  37. package/dist/components/molecules/Alert/Alert.d.ts +4 -4
  38. package/dist/components/molecules/Alert/Alert.mjs +5 -4
  39. package/dist/components/molecules/CodeBlock/CodeBlock.mjs +1 -1
  40. package/dist/components/molecules/Dropdown/Dropdown.mjs +2 -2
  41. package/dist/components/molecules/InlineAlert/InlineAlert.mjs +15 -5
  42. package/dist/components/molecules/TabBar/TabBar.mjs +3 -3
  43. package/dist/components/molecules/TransactionListItem/TransactionListItem.d.mts +1 -1
  44. package/dist/components/molecules/TransactionListItem/TransactionListItem.d.ts +1 -1
  45. package/dist/components/molecules/TransactionListItem/TransactionListItem.mjs +15 -31
  46. package/dist/data.js +505 -295
  47. package/dist/data.js.map +1 -1
  48. package/dist/lib/statusShapes.d.mts +2 -0
  49. package/dist/lib/statusShapes.d.ts +2 -0
  50. package/dist/lib/statusShapes.mjs +16 -0
  51. package/dist/lib/statusShapes.mjs.map +1 -0
  52. package/dist/lib/styleUtils.mjs +2 -2
  53. package/dist/lib/styleUtils.mjs.map +1 -1
  54. package/dist/lib/tokenAliases.mjs +15 -10
  55. package/dist/lib/tokenAliases.mjs.map +1 -1
  56. package/dist/styles/icons.json +141 -0
  57. package/dist/styles/icons.json.mjs +153 -2
  58. package/dist/styles/icons.json.mjs.map +1 -1
  59. package/dist/styles/tokens.d.mts +412 -122
  60. package/dist/styles/tokens.d.ts +412 -122
  61. package/dist/styles/tokens.json +353 -294
  62. package/dist/styles/tokens.json.mjs +353 -294
  63. package/dist/styles/tokens.json.mjs.map +1 -1
  64. package/dist/tokens/index.js +353 -294
  65. package/dist/tokens/index.js.map +1 -1
  66. package/dist/tokens/index.mjs +353 -294
  67. package/dist/tokens/index.mjs.map +1 -1
  68. package/dist/tokens/styles/tokens.d.mts +412 -122
  69. package/dist/tokens/styles/tokens.d.ts +412 -122
  70. package/dist/tokens.css +257 -212
  71. package/dist/types/icons.d.mts +1 -1
  72. package/dist/types/icons.d.ts +1 -1
  73. package/dist/types/icons.mjs.map +1 -1
  74. package/package.json +1 -1
package/dist/client.js CHANGED
@@ -167,7 +167,7 @@ var AvatarContainer = /*#__PURE__*/styled__default.default.div.withConfig({
167
167
  },
168
168
  displayName: "Avatar__AvatarContainer",
169
169
  componentId: "sc-ezn4ax-0"
170
- })(templateObject_1$O || (templateObject_1$O = __makeTemplateObject(["\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n border-radius: ", ";\n background-color: ", ";\n overflow: hidden;\n flex-shrink: 0;\n"], ["\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n border-radius: ", ";\n background-color: ", ";\n overflow: hidden;\n flex-shrink: 0;\n"])), function (_a) {
170
+ })(templateObject_1$P || (templateObject_1$P = __makeTemplateObject(["\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n border-radius: ", ";\n background-color: ", ";\n overflow: hidden;\n flex-shrink: 0;\n"], ["\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n border-radius: ", ";\n background-color: ", ";\n overflow: hidden;\n flex-shrink: 0;\n"])), function (_a) {
171
171
  var $size = _a.$size;
172
172
  return size$4.avatar[$size];
173
173
  }, function (_a) {
@@ -246,7 +246,7 @@ var Avatar = function Avatar(_a) {
246
246
  })
247
247
  }));
248
248
  };
249
- var templateObject_1$O, templateObject_2$z, templateObject_3$w;
249
+ var templateObject_1$P, templateObject_2$z, templateObject_3$w;
250
250
 
251
251
  // Breakpoints from the semantic tokens (decision 0014)
252
252
  var breakpoints$1 = {
@@ -281,7 +281,7 @@ var forcedColorsEdge = "".concat(forcedColors, " {\n border: ").concat(tokens.s
281
281
  var reducedMotion = '@media (prefers-reduced-motion: reduce)';
282
282
  // No `from` keyframe: the fade starts from the element's current opacity, including a
283
283
  // still-running entrance, so closing mid-entrance doesn't jump back to fully visible.
284
- var fadeOut$1 = styled.keyframes(templateObject_1$N || (templateObject_1$N = __makeTemplateObject(["\n to { opacity: 0; }\n"], ["\n to { opacity: 0; }\n"
284
+ var fadeOut$1 = styled.keyframes(templateObject_1$O || (templateObject_1$O = __makeTemplateObject(["\n to { opacity: 0; }\n"], ["\n to { opacity: 0; }\n"
285
285
  // Exit for overlays that unmount (use with usePresence). Append `exitAnimation` to each of
286
286
  // the element's `animation` declarations while it exits: the entrance stays in the list,
287
287
  // so it isn't restarted, and the fade runs on top of it. A fade is already the
@@ -333,11 +333,11 @@ var rowStates = {
333
333
  },
334
334
  hover: {
335
335
  background: rowFill['accent-muted-hover'],
336
- text: rowText['accent-hover']
336
+ text: rowText.accent
337
337
  },
338
338
  pressed: {
339
339
  background: rowFill['accent-muted-pressed'],
340
- text: rowText['accent-pressed']
340
+ text: rowText.accent
341
341
  }
342
342
  }
343
343
  };
@@ -399,7 +399,7 @@ var rowForcedColors = function rowForcedColors(_a) {
399
399
  // the descendants' own rules.
400
400
  return "".concat(forcedColors, " {\n ").concat(selected ? "background-color: Highlight;\n ".concat(text('HighlightText'), "\n && * {\n color: inherit;\n background-color: transparent;\n }") : '', "\n ").concat(!disabled && focused ? hover : '', "\n ").concat(disabled ? '' : "&:hover {\n ".concat(hover, "\n }"), "\n }");
401
401
  };
402
- var templateObject_1$N, templateObject_2$y, templateObject_3$v;
402
+ var templateObject_1$O, templateObject_2$y, templateObject_3$v;
403
403
 
404
404
  var _a$a = tokens.semantic,
405
405
  typography$3 = _a$a.typography,
@@ -421,7 +421,7 @@ var getTypographyStyles = function getTypographyStyles(variant) {
421
421
  caption: "font: ".concat(typography$3.caption, "; text-transform: uppercase;"),
422
422
  button1: "font: ".concat(tokens.component.button.sizes.large.font, ";"),
423
423
  button2: "font: ".concat(tokens.component.button.sizes.medium.font, ";"),
424
- button3: "font: ".concat(tokens.component.button.sizes.small.font, ";"),
424
+ button3: "font: ".concat(tokens.component.button.sizes.small.font, "; font-weight: ").concat(tokens.component.button.sizes.small.fontWeight, ";"),
425
425
  label: "font: ".concat(typography$3.label, ";")
426
426
  };
427
427
  return styles[variant] || styles.body;
@@ -429,7 +429,7 @@ var getTypographyStyles = function getTypographyStyles(variant) {
429
429
  var getTextColor = function getTextColor(colorVariant) {
430
430
  var colorMap = {
431
431
  "default": color$c.text["default"],
432
- emphasis: color$c.text.emphasis,
432
+ emphasis: color$c.text["default"],
433
433
  subdued: color$c.text.muted,
434
434
  inverse: color$c.text.inverse,
435
435
  disabled: color$c.text.disabled,
@@ -467,7 +467,7 @@ var StyledTypography = /*#__PURE__*/styled__default.default.span.withConfig({
467
467
  },
468
468
  displayName: "Typography__StyledTypography",
469
469
  componentId: "sc-17mqo4k-0"
470
- })(templateObject_1$M || (templateObject_1$M = __makeTemplateObject(["\n ", "\n color: ", ";\n margin: 0;\n"], ["\n ", "\n color: ", ";\n margin: 0;\n"
470
+ })(templateObject_1$N || (templateObject_1$N = __makeTemplateObject(["\n ", "\n color: ", ";\n margin: 0;\n"], ["\n ", "\n color: ", ";\n margin: 0;\n"
471
471
  /**
472
472
  * Typography is an atomic component for rendering text with semantic meaning and consistent styling.
473
473
  *
@@ -529,7 +529,7 @@ var Typography = function Typography(_a) {
529
529
  children: children
530
530
  });
531
531
  };
532
- var templateObject_1$M;
532
+ var templateObject_1$N;
533
533
 
534
534
  var semantic$m = tokens.semantic;
535
535
  var color$b = semantic$m.color;
@@ -538,7 +538,7 @@ var _a$9 = tokens.component.badge,
538
538
  dot = _a$9.dot,
539
539
  count = _a$9.count,
540
540
  ring = _a$9.ring;
541
- var scaleIn$2 = styled.keyframes(templateObject_1$L || (templateObject_1$L = __makeTemplateObject(["\n from {\n transform: scale(0.8);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n"], ["\n from {\n transform: scale(0.8);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n"])));
541
+ var scaleIn$2 = styled.keyframes(templateObject_1$M || (templateObject_1$M = __makeTemplateObject(["\n from {\n transform: scale(0.8);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n"], ["\n from {\n transform: scale(0.8);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n"])));
542
542
  var BadgeWrapper = /*#__PURE__*/styled__default.default.span.withConfig({
543
543
  displayName: "Badge__BadgeWrapper",
544
544
  componentId: "sc-tjz4pp-0"
@@ -561,16 +561,15 @@ var BadgeIndicator = /*#__PURE__*/styled__default.default.span.withConfig({
561
561
  return props.$isDot ? "".concat(forcedColors, " { forced-color-adjust: none; background-color: CanvasText; }") : "".concat(forcedColors, " { border: ").concat(semantic$m.border.width.thin, " solid currentColor; }");
562
562
  }, function (props) {
563
563
  switch (props.$variant) {
564
+ // 'primary', 'error', 'warning' and 'success' are deprecated aliases for 'accent', removed in
565
+ // 3.0: 'primary' (#169), and the status colours, because a badge's colour alone can't carry a
566
+ // status (decision 0045, #263)
564
567
  case 'accent':
565
568
  case 'primary':
566
- // Deprecated alias for 'accent', removed in 3.0 (#169)
567
- return "\n background-color: ".concat(color$b.fill.accent, ";\n color: ").concat(color$b.text.inverse, ";\n ");
568
569
  case 'error':
569
- return "\n background-color: ".concat(color$b.fill.danger, ";\n color: ").concat(color$b.text.inverse, ";\n ");
570
570
  case 'warning':
571
- return "\n background-color: ".concat(color$b.fill.warning, ";\n color: ").concat(color$b.text.inverse, ";\n ");
572
571
  case 'success':
573
- return "\n background-color: ".concat(color$b.fill.success, ";\n color: ").concat(color$b.text.inverse, ";\n ");
572
+ return "\n background-color: ".concat(color$b.fill.accent, ";\n color: ").concat(color$b.text.inverse, ";\n ");
574
573
  default:
575
574
  return "\n background-color: ".concat(color$b.fill.emphasis, ";\n color: ").concat(color$b.text.inverse, ";\n ");
576
575
  }
@@ -616,7 +615,7 @@ var Badge = function Badge(_a) {
616
615
  })]
617
616
  });
618
617
  };
619
- var templateObject_1$L, templateObject_2$x, templateObject_3$u, templateObject_4$n;
618
+ var templateObject_1$M, templateObject_2$x, templateObject_3$u, templateObject_4$n;
620
619
 
621
620
  // Props whose values are token keys keep their published vocabulary in 2.x (P7), but read the
622
621
  // semantic grammar's names (decision 0031, #189). Each map covers every key the prop type allows,
@@ -625,7 +624,8 @@ var semantic$l = tokens.semantic;
625
624
  var color$a = semantic$l.color,
626
625
  space$e = semantic$l.space,
627
626
  radius$4 = semantic$l.radius,
628
- surface = semantic$l.surface;
627
+ surface = semantic$l.surface,
628
+ opacity = semantic$l.opacity;
629
629
  /** Box's spacing props (`p`, `m`, `gap`…): the old layout scale's keys, read from `space`. */
630
630
  var spaceByLayoutKey = {
631
631
  none: space$e[0],
@@ -666,8 +666,9 @@ var backgroundByKey = {
666
666
  subtle: surface.raised,
667
667
  overlay: surface.scrim,
668
668
  emphasis: color$a.fill.emphasis,
669
- 'emphasis-hover': color$a.fill['emphasis-hover'],
670
- 'emphasis-active': color$a.fill['emphasis-pressed'],
669
+ // A strong fill's states mix its content colour in at the state-layer opacity (decision 0048)
670
+ 'emphasis-hover': "color-mix(in srgb, ".concat(color$a.fill.emphasis, ", ").concat(color$a.text.inverse, " calc(").concat(opacity.state.hover, " * 100%))"),
671
+ 'emphasis-active': "color-mix(in srgb, ".concat(color$a.fill.emphasis, ", ").concat(color$a.text.inverse, " calc(").concat(opacity.state.pressed, " * 100%))"),
671
672
  surface: color$a.fill.muted,
672
673
  inverse: color$a.fill.inverse,
673
674
  interactive: color$a.fill.accent,
@@ -698,21 +699,22 @@ var backgroundByKey = {
698
699
  /** Box's `color` prop: text colours, old and new keys. */
699
700
  var textColorByKey = {
700
701
  "default": color$a.text["default"],
701
- emphasis: color$a.text.emphasis,
702
+ emphasis: color$a.text["default"],
702
703
  inverse: color$a.text.inverse,
703
704
  disabled: color$a.text.disabled,
704
705
  success: color$a.text.success,
705
706
  warning: color$a.text.warning,
706
707
  muted: color$a.text.muted,
707
708
  accent: color$a.text.accent,
708
- 'accent-hover': color$a.text['accent-hover'],
709
- 'accent-pressed': color$a.text['accent-pressed'],
709
+ 'accent-hover': color$a.text.accent,
710
+ 'accent-pressed': color$a.text.accent,
710
711
  danger: color$a.text.danger,
712
+ serious: color$a.text.serious,
711
713
  ai: color$a.text.ai,
712
714
  subdued: color$a.text.muted,
713
715
  interactive: color$a.text.accent,
714
- 'interactive-hover': color$a.text['accent-hover'],
715
- 'interactive-active': color$a.text['accent-pressed'],
716
+ 'interactive-hover': color$a.text.accent,
717
+ 'interactive-active': color$a.text.accent,
716
718
  error: color$a.text.danger
717
719
  };
718
720
  /** Box's border props: border colours, old and new keys. */
@@ -721,13 +723,15 @@ var borderColorByKey = {
721
723
  success: color$a.border.success,
722
724
  warning: color$a.border.warning,
723
725
  none: color$a.border.none,
724
- emphasis: color$a.border.emphasis,
726
+ emphasis: color$a.border["default"],
725
727
  input: color$a.border.input,
726
728
  'input-hover': color$a.border['input-hover'],
727
729
  focus: color$a.border.focus,
728
730
  accent: color$a.border.accent,
729
731
  danger: color$a.border.danger,
730
- subtle: color$a.border.emphasis,
732
+ serious: color$a.border.serious,
733
+ ai: color$a.border.ai,
734
+ subtle: color$a.border["default"],
731
735
  control: color$a.border.input,
732
736
  // `strong` split by use (0031); as a generic firm outline it is the hovered-input border
733
737
  strong: color$a.border['input-hover'],
@@ -744,7 +748,7 @@ var StyledBox = /*#__PURE__*/styled__default.default.div.withConfig({
744
748
  })(templateObject_51 || (templateObject_51 = __makeTemplateObject(["\n ", "\n \n // Flexbox\n ", "\n ", "\n ", "\n ", "\n ", "\n \n // Margin\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n \n // Padding\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n \n // Size\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n \n // Position\n ", "\n ", "\n ", "\n ", "\n ", "\n \n // Borders\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n \n // Background & Color\n ", "\n ", "\n \n // Elevation (shadow)\n ", "\n \n // Cursor\n ", "\n \n // Transition\n ", "\n \n // Hover states\n ", "\n \n // Overflow\n ", "\n ", "\n ", "\n"], ["\n ", "\n \n // Flexbox\n ", "\n ", "\n ", "\n ", "\n ", "\n \n // Margin\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n \n // Padding\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n \n // Size\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n \n // Position\n ", "\n ", "\n ", "\n ", "\n ", "\n \n // Borders\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n \n // Background & Color\n ", "\n ", "\n \n // Elevation (shadow)\n ", "\n \n // Cursor\n ", "\n \n // Transition\n ", "\n \n // Hover states\n ", "\n \n // Overflow\n ", "\n ", "\n ", "\n"
745
749
  // Transform component that maps clean props to $-prefixed props for styled-components
746
750
  ])), function (props) {
747
- return props.$display && styled.css(templateObject_1$K || (templateObject_1$K = __makeTemplateObject(["display: ", ";"], ["display: ", ";"])), props.$display);
751
+ return props.$display && styled.css(templateObject_1$L || (templateObject_1$L = __makeTemplateObject(["display: ", ";"], ["display: ", ";"])), props.$display);
748
752
  }, function (props) {
749
753
  return props.$flexDirection && styled.css(templateObject_2$w || (templateObject_2$w = __makeTemplateObject(["flex-direction: ", ";"], ["flex-direction: ", ";"])), props.$flexDirection);
750
754
  }, function (props) {
@@ -968,7 +972,7 @@ var BoxTransform = function BoxTransform(props) {
968
972
  }));
969
973
  };
970
974
  var Box = BoxTransform;
971
- var templateObject_1$K, templateObject_2$w, templateObject_3$t, templateObject_4$m, templateObject_5$i, templateObject_6$d, templateObject_7$b, templateObject_8$8, templateObject_9$6, templateObject_10$4, templateObject_11$4, templateObject_12$4, templateObject_13$4, templateObject_14$2, templateObject_15$2, templateObject_16$2, templateObject_17$2, templateObject_18$2, templateObject_19$2, templateObject_20$2, templateObject_21$2, templateObject_22$2, templateObject_23$2, templateObject_24$2, templateObject_25$2, templateObject_26$2, templateObject_27$2, templateObject_28$2, templateObject_29$2, templateObject_30$2, templateObject_31$2, templateObject_32$2, templateObject_33$2, templateObject_34$1, templateObject_35$1, templateObject_36, templateObject_37, templateObject_38, templateObject_39, templateObject_40, templateObject_41, templateObject_42, templateObject_43, templateObject_44, templateObject_45, templateObject_46, templateObject_47, templateObject_48, templateObject_49, templateObject_50, templateObject_51;
975
+ var templateObject_1$L, templateObject_2$w, templateObject_3$t, templateObject_4$m, templateObject_5$i, templateObject_6$d, templateObject_7$b, templateObject_8$8, templateObject_9$6, templateObject_10$4, templateObject_11$4, templateObject_12$4, templateObject_13$4, templateObject_14$2, templateObject_15$2, templateObject_16$2, templateObject_17$2, templateObject_18$2, templateObject_19$2, templateObject_20$2, templateObject_21$2, templateObject_22$2, templateObject_23$2, templateObject_24$2, templateObject_25$2, templateObject_26$2, templateObject_27$2, templateObject_28$2, templateObject_29$2, templateObject_30$2, templateObject_31$2, templateObject_32$2, templateObject_33$2, templateObject_34$1, templateObject_35$1, templateObject_36, templateObject_37, templateObject_38, templateObject_39, templateObject_40, templateObject_41, templateObject_42, templateObject_43, templateObject_44, templateObject_45, templateObject_46, templateObject_47, templateObject_48, templateObject_49, templateObject_50, templateObject_51;
972
976
 
973
977
  var IconStyled = /*#__PURE__*/styled__default.default.span.withConfig({
974
978
  shouldForwardProp: function shouldForwardProp(prop) {
@@ -976,7 +980,7 @@ var IconStyled = /*#__PURE__*/styled__default.default.span.withConfig({
976
980
  },
977
981
  displayName: "Icon__IconStyled",
978
982
  componentId: "sc-1105czq-0"
979
- })(templateObject_1$J || (templateObject_1$J = __makeTemplateObject(["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n \n svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n \n /* Use semantic icon colors */\n color: ", ";\n"], ["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n \n svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n \n /* Use semantic icon colors */\n color: ", ";\n"])), function (_a) {
983
+ })(templateObject_1$K || (templateObject_1$K = __makeTemplateObject(["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n \n svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n \n /* Use semantic icon colors */\n color: ", ";\n"], ["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: ", ";\n \n svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n \n /* Use semantic icon colors */\n color: ", ";\n"])), function (_a) {
980
984
  var $size = _a.$size;
981
985
  return tokens.semantic.size.icon[$size];
982
986
  }, function (_a) {
@@ -988,7 +992,7 @@ var IconStyled = /*#__PURE__*/styled__default.default.span.withConfig({
988
992
  case 'default':
989
993
  return tokens.semantic.color.icon["default"];
990
994
  case 'emphasis':
991
- return tokens.semantic.color.icon.emphasis;
995
+ return tokens.semantic.color.icon["default"];
992
996
  case 'subdued':
993
997
  return tokens.semantic.color.icon.muted;
994
998
  case 'disabled':
@@ -1053,7 +1057,7 @@ var Icon = function Icon(_a) {
1053
1057
  }))
1054
1058
  });
1055
1059
  };
1056
- var templateObject_1$J;
1060
+ var templateObject_1$K;
1057
1061
 
1058
1062
  var button$1 = tokens.component.button,
1059
1063
  semantic$k = tokens.semantic;
@@ -1126,7 +1130,7 @@ var getSizeStyles = function getSizeStyles(_a) {
1126
1130
  var $size = _a.$size;
1127
1131
  switch ($size) {
1128
1132
  case 'small':
1129
- return "\n font: ".concat(button$1.sizes.small.font, ";\n min-height: ").concat(control$1.sm, ";\n padding: 0 ").concat(inset.md, ";\n ");
1133
+ return "\n font: ".concat(button$1.sizes.small.font, ";\n font-weight: ").concat(button$1.sizes.small.fontWeight, ";\n min-height: ").concat(control$1.sm, ";\n padding: 0 ").concat(inset.md, ";\n ");
1130
1134
  case 'medium':
1131
1135
  return "\n font: ".concat(button$1.sizes.medium.font, ";\n min-height: ").concat(control$1.md, ";\n padding: 0 ").concat(inset.lg, ";\n ");
1132
1136
  case 'large':
@@ -1140,7 +1144,7 @@ var StyledButton = /*#__PURE__*/styled__default.default.button.withConfig({
1140
1144
  },
1141
1145
  displayName: "Button__StyledButton",
1142
1146
  componentId: "sc-1eiuum9-0"
1143
- })(templateObject_1$I || (templateObject_1$I = __makeTemplateObject(["\n ", "\n border-radius: ", ";\n \n ", "\n ", "\n"], ["\n ", "\n border-radius: ", ";\n \n ", "\n ", "\n"])), baseButtonStyles, button$1.primary.borderRadius, getVariantStyles$1, getSizeStyles);
1147
+ })(templateObject_1$J || (templateObject_1$J = __makeTemplateObject(["\n ", "\n border-radius: ", ";\n \n ", "\n ", "\n"], ["\n ", "\n border-radius: ", ";\n \n ", "\n ", "\n"])), baseButtonStyles, button$1.primary.borderRadius, getVariantStyles$1, getSizeStyles);
1144
1148
  var StyledLink = /*#__PURE__*/styled__default.default.a.withConfig({
1145
1149
  shouldForwardProp: function shouldForwardProp(prop) {
1146
1150
  return !prop.startsWith('$');
@@ -1250,7 +1254,7 @@ var Button = function Button(_a) {
1250
1254
  children: renderButtonContent(children, iconName, size)
1251
1255
  }));
1252
1256
  };
1253
- var templateObject_1$I, templateObject_2$v;
1257
+ var templateObject_1$J, templateObject_2$v;
1254
1258
 
1255
1259
  var semantic$j = tokens.semantic;
1256
1260
  var color$9 = semantic$j.color;
@@ -1259,15 +1263,26 @@ var category = color$9.category;
1259
1263
  var radius$3 = semantic$j.radius;
1260
1264
  var space$d = semantic$j.space;
1261
1265
  var labelHeight$1 = semantic$j.size.label;
1262
- // Text on white or the -subtle fill (outlined and minimal), at least 4.5:1 (#115)
1266
+ var displayColor = {
1267
+ olive: 'olive',
1268
+ periwinkle: 'periwinkle',
1269
+ rose: 'rose',
1270
+ magenta: 'magenta',
1271
+ gray: 'gray',
1272
+ blue: 'periwinkle',
1273
+ purple: 'magenta',
1274
+ pink: 'rose',
1275
+ yellow: 'olive',
1276
+ green: 'olive',
1277
+ red: 'rose',
1278
+ orange: 'rose'
1279
+ };
1280
+ // Text on white or the -muted fill (outlined and minimal), at least 4.5:1 (#115)
1263
1281
  var categoryText = {
1264
- blue: category['blue-text'],
1265
- purple: category['purple-text'],
1266
- pink: category['pink-text'],
1267
- yellow: category['yellow-text'],
1268
- green: category['green-text'],
1269
- red: category['red-text'],
1270
- orange: category['orange-text'],
1282
+ olive: category['olive-text'],
1283
+ periwinkle: category['periwinkle-text'],
1284
+ rose: category['rose-text'],
1285
+ magenta: category['magenta-text'],
1271
1286
  gray: category['gray-text']
1272
1287
  };
1273
1288
  var StyledCategoryLabel = /*#__PURE__*/styled__default.default.span.withConfig({
@@ -1276,7 +1291,7 @@ var StyledCategoryLabel = /*#__PURE__*/styled__default.default.span.withConfig({
1276
1291
  },
1277
1292
  displayName: "CategoryLabel__StyledCategoryLabel",
1278
1293
  componentId: "sc-1jx7bjo-0"
1279
- })(templateObject_1$H || (templateObject_1$H = __makeTemplateObject(["\n box-sizing: border-box; /* the height includes padding and border, without relying on a global reset */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: ", ";\n white-space: nowrap;\n user-select: none;\n border-style: solid;\n border-width: ", ";\n \n /* Size styles */\n height: ", ";\n padding: ", ";\n font: ", ";\n /* After the font shorthand, which would otherwise reset it */\n font-weight: ", ";\n gap: ", ";\n \n /* Variant + Color styles */\n background-color: ", ";\n \n /* Outlined and minimal text uses the AA text token, not the base colour (issue 115) */\n color: ", ";\n \n border-color: ", ";\n"], ["\n box-sizing: border-box; /* the height includes padding and border, without relying on a global reset */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: ", ";\n white-space: nowrap;\n user-select: none;\n border-style: solid;\n border-width: ", ";\n \n /* Size styles */\n height: ", ";\n padding: ", ";\n font: ", ";\n /* After the font shorthand, which would otherwise reset it */\n font-weight: ", ";\n gap: ", ";\n \n /* Variant + Color styles */\n background-color: ", ";\n \n /* Outlined and minimal text uses the AA text token, not the base colour (issue 115) */\n color: ", ";\n \n border-color: ", ";\n"
1294
+ })(templateObject_1$I || (templateObject_1$I = __makeTemplateObject(["\n box-sizing: border-box; /* the height includes padding and border, without relying on a global reset */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: ", ";\n white-space: nowrap;\n user-select: none;\n border-style: solid;\n border-width: ", ";\n \n /* Size styles */\n height: ", ";\n padding: ", ";\n font: ", ";\n /* After the font shorthand, which would otherwise reset it */\n font-weight: ", ";\n gap: ", ";\n \n /* Variant + Color styles */\n background-color: ", ";\n \n /* Outlined and minimal text uses the AA text token, not the base colour (issue 115) */\n color: ", ";\n \n border-color: ", ";\n"], ["\n box-sizing: border-box; /* the height includes padding and border, without relying on a global reset */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: ", ";\n white-space: nowrap;\n user-select: none;\n border-style: solid;\n border-width: ", ";\n \n /* Size styles */\n height: ", ";\n padding: ", ";\n font: ", ";\n /* After the font shorthand, which would otherwise reset it */\n font-weight: ", ";\n gap: ", ";\n \n /* Variant + Color styles */\n background-color: ", ";\n \n /* Outlined and minimal text uses the AA text token, not the base colour (issue 115) */\n color: ", ";\n \n border-color: ", ";\n"
1280
1295
  // The visible content, hidden from assistive technology when an aria-label replaces it.
1281
1296
  // display: contents keeps the root's flex layout and gap.
1282
1297
  ])), radius$3.full, semantic$j.border.width.thin, function (_a) {
@@ -1327,16 +1342,17 @@ var HiddenLabel = /*#__PURE__*/styled__default.default.span.withConfig({
1327
1342
  /**
1328
1343
  * CategoryLabel colour-codes an item's category, such as a transaction's (decision 0018).
1329
1344
  *
1330
- * A static, chip-like label with 8 category colours, 3 visual variants and an optional icon.
1331
- * Category colours carry no status meaning; for status use StatusLabel.
1345
+ * A static, chip-like label with 4 display colours plus grey, 3 visual variants and an optional
1346
+ * icon. Category colours carry no meaning (decision 0043); for status use StatusLabel. Beyond five
1347
+ * categories, the icon and text tell them apart.
1332
1348
  *
1333
1349
  * @example
1334
1350
  * ```tsx
1335
- * <CategoryLabel color="orange" icon="creditCard">
1351
+ * <CategoryLabel color="rose" icon="creditCard">
1336
1352
  * Shopping
1337
1353
  * </CategoryLabel>
1338
1354
  *
1339
- * <CategoryLabel color="blue" variant="outlined" size="medium">
1355
+ * <CategoryLabel color="periwinkle" variant="outlined" size="medium">
1340
1356
  * Travel
1341
1357
  * </CategoryLabel>
1342
1358
  * ```
@@ -1344,16 +1360,17 @@ var HiddenLabel = /*#__PURE__*/styled__default.default.span.withConfig({
1344
1360
  /**
1345
1361
  * CategoryLabel colour-codes an item's category, such as a transaction's (decision 0018).
1346
1362
  *
1347
- * A static, chip-like label with 8 category colours, 3 visual variants and an optional icon.
1348
- * Category colours carry no status meaning; for status use StatusLabel.
1363
+ * A static, chip-like label with 4 display colours plus grey, 3 visual variants and an optional
1364
+ * icon. Category colours carry no meaning (decision 0043); for status use StatusLabel. Beyond five
1365
+ * categories, the icon and text tell them apart.
1349
1366
  *
1350
1367
  * @example
1351
1368
  * ```tsx
1352
- * <CategoryLabel color="orange" icon="creditCard">
1369
+ * <CategoryLabel color="rose" icon="creditCard">
1353
1370
  * Shopping
1354
1371
  * </CategoryLabel>
1355
1372
  *
1356
- * <CategoryLabel color="blue" variant="outlined" size="medium">
1373
+ * <CategoryLabel color="periwinkle" variant="outlined" size="medium">
1357
1374
  * Travel
1358
1375
  * </CategoryLabel>
1359
1376
  * ```
@@ -1361,7 +1378,7 @@ var HiddenLabel = /*#__PURE__*/styled__default.default.span.withConfig({
1361
1378
  var CategoryLabel = function CategoryLabel(_a) {
1362
1379
  var children = _a.children,
1363
1380
  _b = _a.color,
1364
- color = _b === void 0 ? 'blue' : _b,
1381
+ color = _b === void 0 ? 'periwinkle' : _b,
1365
1382
  _c = _a.variant,
1366
1383
  variant = _c === void 0 ? 'filled' : _c,
1367
1384
  _d = _a.size,
@@ -1373,7 +1390,7 @@ var CategoryLabel = function CategoryLabel(_a) {
1373
1390
  // A blank aria-label is no label at all, so it falls back like a missing one
1374
1391
  var accessibleLabel = (ariaLabel === null || ariaLabel === void 0 ? void 0 : ariaLabel.trim()) ? ariaLabel : undefined;
1375
1392
  return jsxRuntime.jsxs(StyledCategoryLabel, {
1376
- "$color": color,
1393
+ "$color": displayColor[color],
1377
1394
  "$variant": variant,
1378
1395
  "$size": size,
1379
1396
  "data-testid": dataTestId,
@@ -1390,7 +1407,7 @@ var CategoryLabel = function CategoryLabel(_a) {
1390
1407
  });
1391
1408
  };
1392
1409
  CategoryLabel.displayName = 'CategoryLabel';
1393
- var templateObject_1$H, templateObject_2$u, templateObject_3$s;
1410
+ var templateObject_1$I, templateObject_2$u, templateObject_3$s;
1394
1411
 
1395
1412
  // CategoryBadge sizes on the decision 0018 scale
1396
1413
  var toLabelSize = {
@@ -1435,7 +1452,7 @@ var getVariantStyles = function getVariantStyles(_a) {
1435
1452
  fill = _b.fill,
1436
1453
  text = _b.text;
1437
1454
  var interactiveStates = $clickable;
1438
- return "\n background-color: ".concat(fill['accent-muted'], ";\n color: ").concat(text.accent, ";\n \n &:hover {\n background-color: ").concat(interactiveStates ? fill['accent-muted-hover'] : fill['accent-muted'], ";\n color: ").concat(interactiveStates ? text['accent-hover'] : text.accent, ";\n }\n \n &:active {\n background-color: ").concat(interactiveStates ? fill['accent-muted-pressed'] : fill['accent-muted'], ";\n color: ").concat(interactiveStates ? text['accent-pressed'] : text.accent, ";\n }\n\n /* Forced colours drop the fill, so a selected chip takes the system selection colours\n (decision 0038); its checkmark follows the text colour */\n ").concat(forcedColors, " {\n forced-color-adjust: none;\n background-color: Highlight;\n border-color: Highlight;\n color: HighlightText;\n }\n ");
1455
+ return "\n background-color: ".concat(fill['accent-muted'], ";\n color: ").concat(text.accent, ";\n \n &:hover {\n background-color: ").concat(interactiveStates ? fill['accent-muted-hover'] : fill['accent-muted'], ";\n color: ").concat(interactiveStates ? text.accent : text.accent, ";\n }\n \n &:active {\n background-color: ").concat(interactiveStates ? fill['accent-muted-pressed'] : fill['accent-muted'], ";\n color: ").concat(interactiveStates ? text.accent : text.accent, ";\n }\n\n /* Forced colours drop the fill, so a selected chip takes the system selection colours\n (decision 0038); its checkmark follows the text colour */\n ").concat(forcedColors, " {\n forced-color-adjust: none;\n background-color: Highlight;\n border-color: Highlight;\n color: HighlightText;\n }\n ");
1439
1456
  }
1440
1457
  switch ($variant) {
1441
1458
  case 'emphasis':
@@ -1463,7 +1480,7 @@ var StyledChip = /*#__PURE__*/styled__default.default.span.withConfig({
1463
1480
  },
1464
1481
  displayName: "ChipBase__StyledChip",
1465
1482
  componentId: "sc-moa6zc-0"
1466
- })(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: fit-content;\n height: max-content;\n border-radius: ", ";\n box-sizing: border-box;\n user-select: none;\n white-space: nowrap;\n transition: ", ";\n cursor: ", ";\n \n /* Forced colours: an edge, and GrayText when disabled, since a span gets no system disabled\n colour (decision 0038). Before the variant styles, so a selected chip's Highlight border wins. */\n ", "\n ", "\n\n ", "\n ", "\n \n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n }\n\n"], ["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: fit-content;\n height: max-content;\n border-radius: ", ";\n box-sizing: border-box;\n user-select: none;\n white-space: nowrap;\n transition: ", ";\n cursor: ", ";\n \n /* Forced colours: an edge, and GrayText when disabled, since a span gets no system disabled\n colour (decision 0038). Before the variant styles, so a selected chip's Highlight border wins. */\n ", "\n ", "\n\n ", "\n ", "\n \n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n }\n\n"
1483
+ })(templateObject_1$H || (templateObject_1$H = __makeTemplateObject(["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: fit-content;\n height: max-content;\n border-radius: ", ";\n box-sizing: border-box;\n user-select: none;\n white-space: nowrap;\n transition: ", ";\n cursor: ", ";\n \n /* Forced colours: an edge, and GrayText when disabled, since a span gets no system disabled\n colour (decision 0038). Before the variant styles, so a selected chip's Highlight border wins. */\n ", "\n ", "\n\n ", "\n ", "\n \n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n }\n\n"], ["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: fit-content;\n height: max-content;\n border-radius: ", ";\n box-sizing: border-box;\n user-select: none;\n white-space: nowrap;\n transition: ", ";\n cursor: ", ";\n \n /* Forced colours: an edge, and GrayText when disabled, since a span gets no system disabled\n colour (decision 0038). Before the variant styles, so a selected chip's Highlight border wins. */\n ", "\n ", "\n\n ", "\n ", "\n \n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n }\n\n"
1467
1484
  // Icon container for selected indicator or leading icons
1468
1485
  ])), chip$1["default"].borderRadius, semantic$h.motion.transition.feedback, function (props) {
1469
1486
  return props.$disabled ? 'not-allowed' : props.$clickable ? 'pointer' : 'default';
@@ -1487,7 +1504,7 @@ var CloseButton = /*#__PURE__*/styled__default.default.button.withConfig({
1487
1504
  })(templateObject_3$r || (templateObject_3$r = __makeTemplateObject(["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: ", ";\n background: transparent;\n border: none;\n position: relative;\n width: ", ";\n height: ", ";\n padding: ", ";\n\n /* The pointer target is at least 24 \xD7 24px (WCAG 2.5.8, decision 0039): an invisible hit area\n as tall as the chip, centred on the 20px button. It stays inside the chip and its padding, so\n it can't overlap another target. */\n &::before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: ", ";\n height: ", ";\n transform: translate(-50%, -50%);\n }\n border-radius: ", ";\n cursor: ", ";\n color: inherit;\n transition: ", ";\n \n &:hover:not(:disabled) {\n background-color: ", ";\n }\n \n &:active:not(:disabled) {\n background-color: ", ";\n }\n \n &:disabled {\n color: ", ";\n }\n \n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n border-radius: ", ";\n }\n"], ["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: ", ";\n background: transparent;\n border: none;\n position: relative;\n width: ", ";\n height: ", ";\n padding: ", ";\n\n /* The pointer target is at least 24 \xD7 24px (WCAG 2.5.8, decision 0039): an invisible hit area\n as tall as the chip, centred on the 20px button. It stays inside the chip and its padding, so\n it can't overlap another target. */\n &::before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: ", ";\n height: ", ";\n transform: translate(-50%, -50%);\n }\n border-radius: ", ";\n cursor: ", ";\n color: inherit;\n transition: ", ";\n \n &:hover:not(:disabled) {\n background-color: ", ";\n }\n \n &:active:not(:disabled) {\n background-color: ", ";\n }\n \n &:disabled {\n color: ", ";\n }\n \n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n border-radius: ", ";\n }\n"])), tokens.semantic.space[200], chip$1.closeButton.size, chip$1.closeButton.size, tokens.semantic.space[0], semantic$h.size.label.medium, semantic$h.size.label.medium, tokens.semantic.radius.xs, function (props) {
1488
1505
  return props.$disabled ? 'not-allowed' : 'pointer';
1489
1506
  }, semantic$h.motion.transition.feedback, tokens.semantic.color.fill['none-hover'], tokens.semantic.color.fill['none-pressed'], tokens.semantic.color.text.disabled, chip$1.focus.outline, semantic$h.border.focusOffset, chip$1["default"].borderRadius);
1490
- var templateObject_1$G, templateObject_2$t, templateObject_3$r;
1507
+ var templateObject_1$H, templateObject_2$t, templateObject_3$r;
1491
1508
 
1492
1509
  /**
1493
1510
  * Chip - a static, non-interactive label for tags, categories and metadata.
@@ -1732,7 +1749,7 @@ var color$8 = semantic$g.color;
1732
1749
  var StyledSuggestionChip = /*#__PURE__*/styled__default.default.button.withConfig({
1733
1750
  displayName: "SuggestionChip__StyledSuggestionChip",
1734
1751
  componentId: "sc-1k0njm-0"
1735
- })(templateObject_1$F || (templateObject_1$F = __makeTemplateObject(["\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n margin: 0;\n box-sizing: border-box;\n border: ", " solid ", ";\n border-radius: ", ";\n background-color: ", ";\n color: ", ";\n cursor: pointer;\n text-align: start;\n /* A long suggestion wraps inside the chip rather than being cut off (issue 279) */\n white-space: normal;\n overflow-wrap: anywhere;\n transition: ", ";\n ", "\n\n &:hover:not(:disabled) {\n background-color: ", ";\n }\n\n &:active:not(:disabled) {\n background-color: ", ";\n }\n\n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n }\n\n &:disabled {\n border-color: ", ";\n color: ", ";\n cursor: not-allowed;\n }\n\n /* Forced colours: a native button gets ButtonBorder and GrayText; keep the edge (decision 0038) */\n ", " {\n border-color: ButtonBorder;\n\n &:disabled {\n border-color: GrayText;\n }\n }\n"], ["\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n margin: 0;\n box-sizing: border-box;\n border: ", " solid ", ";\n border-radius: ", ";\n background-color: ", ";\n color: ", ";\n cursor: pointer;\n text-align: start;\n /* A long suggestion wraps inside the chip rather than being cut off (issue 279) */\n white-space: normal;\n overflow-wrap: anywhere;\n transition: ", ";\n ", "\n\n &:hover:not(:disabled) {\n background-color: ", ";\n }\n\n &:active:not(:disabled) {\n background-color: ", ";\n }\n\n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n }\n\n &:disabled {\n border-color: ", ";\n color: ", ";\n cursor: not-allowed;\n }\n\n /* Forced colours: a native button gets ButtonBorder and GrayText; keep the edge (decision 0038) */\n ", " {\n border-color: ButtonBorder;\n\n &:disabled {\n border-color: GrayText;\n }\n }\n"
1752
+ })(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n margin: 0;\n box-sizing: border-box;\n border: ", " solid ", ";\n border-radius: ", ";\n background-color: ", ";\n color: ", ";\n cursor: pointer;\n text-align: start;\n /* A long suggestion wraps inside the chip rather than being cut off (issue 279) */\n white-space: normal;\n overflow-wrap: anywhere;\n transition: ", ";\n ", "\n\n &:hover:not(:disabled) {\n background-color: ", ";\n }\n\n &:active:not(:disabled) {\n background-color: ", ";\n }\n\n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n }\n\n &:disabled {\n border-color: ", ";\n color: ", ";\n cursor: not-allowed;\n }\n\n /* Forced colours: a native button gets ButtonBorder and GrayText; keep the edge (decision 0038) */\n ", " {\n border-color: ButtonBorder;\n\n &:disabled {\n border-color: GrayText;\n }\n }\n"], ["\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n margin: 0;\n box-sizing: border-box;\n border: ", " solid ", ";\n border-radius: ", ";\n background-color: ", ";\n color: ", ";\n cursor: pointer;\n text-align: start;\n /* A long suggestion wraps inside the chip rather than being cut off (issue 279) */\n white-space: normal;\n overflow-wrap: anywhere;\n transition: ", ";\n ", "\n\n &:hover:not(:disabled) {\n background-color: ", ";\n }\n\n &:active:not(:disabled) {\n background-color: ", ";\n }\n\n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n }\n\n &:disabled {\n border-color: ", ";\n color: ", ";\n cursor: not-allowed;\n }\n\n /* Forced colours: a native button gets ButtonBorder and GrayText; keep the edge (decision 0038) */\n ", " {\n border-color: ButtonBorder;\n\n &:disabled {\n border-color: GrayText;\n }\n }\n"
1736
1753
  /**
1737
1754
  * SuggestionChip - Offers text to put in the agent input
1738
1755
  *
@@ -1744,7 +1761,7 @@ var StyledSuggestionChip = /*#__PURE__*/styled__default.default.button.withConfi
1744
1761
  * - A native button: Enter and Space pick it, and its text is its accessible name
1745
1762
  * - Outlined, with the naked hover and pressed fills; no selected state
1746
1763
  * - One chip height (24px minimum, decision 0035); long text wraps instead of being cut off
1747
- */])), semantic$g.border.width.thin, color$8.border.input, chip["default"].borderRadius, color$8.fill.none, color$8.text["default"], semantic$g.motion.transition.feedback, sizeStyles, color$8.fill['none-hover'], color$8.fill['none-pressed'], chip.focus.outline, semantic$g.border.focusOffset, color$8.border.emphasis, color$8.text.disabled, forcedColors);
1764
+ */])), semantic$g.border.width.thin, color$8.border.input, chip["default"].borderRadius, color$8.fill.none, color$8.text["default"], semantic$g.motion.transition.feedback, sizeStyles, color$8.fill['none-hover'], color$8.fill['none-pressed'], chip.focus.outline, semantic$g.border.focusOffset, color$8.border["default"], color$8.text.disabled, forcedColors);
1748
1765
  /**
1749
1766
  * SuggestionChip - Offers text to put in the agent input
1750
1767
  *
@@ -1772,13 +1789,13 @@ var SuggestionChip = function SuggestionChip(_a) {
1772
1789
  });
1773
1790
  };
1774
1791
  SuggestionChip.displayName = 'SuggestionChip';
1775
- var templateObject_1$F;
1792
+ var templateObject_1$G;
1776
1793
 
1777
1794
  var space$c = tokens.semantic.space;
1778
1795
  var StyledContainer$2 = /*#__PURE__*/styled__default.default.div.withConfig({
1779
1796
  displayName: "Container__StyledContainer",
1780
1797
  componentId: "sc-17dbj6n-0"
1781
- })(templateObject_1$E || (templateObject_1$E = __makeTemplateObject(["\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n padding-left: ", ";\n padding-right: ", ";\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n"], ["\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n padding-left: ", ";\n padding-right: ", ";\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n"])), space$c[600], space$c[600], media$1.sm, breakpoints$1.sm, media$1.md, breakpoints$1.md, media$1.lg, breakpoints$1.lg, media$1.xl, breakpoints$1.xl, media$1['2xl'], breakpoints$1['2xl']);
1798
+ })(templateObject_1$F || (templateObject_1$F = __makeTemplateObject(["\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n padding-left: ", ";\n padding-right: ", ";\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n"], ["\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n padding-left: ", ";\n padding-right: ", ";\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n \n ", " {\n max-width: ", ";\n }\n"])), space$c[600], space$c[600], media$1.sm, breakpoints$1.sm, media$1.md, breakpoints$1.md, media$1.lg, breakpoints$1.lg, media$1.xl, breakpoints$1.xl, media$1['2xl'], breakpoints$1['2xl']);
1782
1799
  var Container$1 = function Container(_a) {
1783
1800
  var children = _a.children,
1784
1801
  props = __rest(_a, ["children"]);
@@ -1786,12 +1803,12 @@ var Container$1 = function Container(_a) {
1786
1803
  children: children
1787
1804
  }));
1788
1805
  };
1789
- var templateObject_1$E;
1806
+ var templateObject_1$F;
1790
1807
 
1791
1808
  var PictureWrapper = /*#__PURE__*/styled__default.default.div.withConfig({
1792
1809
  displayName: "Picture__PictureWrapper",
1793
1810
  componentId: "sc-11d9tei-0"
1794
- })(templateObject_1$D || (templateObject_1$D = __makeTemplateObject(["\n margin: 0 auto;\n \n ", " {\n margin-left: 0;\n margin-right: 0;\n }\n"], ["\n margin: 0 auto;\n \n ", " {\n margin-left: 0;\n margin-right: 0;\n }\n"
1811
+ })(templateObject_1$E || (templateObject_1$E = __makeTemplateObject(["\n margin: 0 auto;\n \n ", " {\n margin-left: 0;\n margin-right: 0;\n }\n"], ["\n margin: 0 auto;\n \n ", " {\n margin-left: 0;\n margin-right: 0;\n }\n"
1795
1812
  // A clickable image answers input on the image itself (decision 0029, #185): it fades on hover and
1796
1813
  // one step further while pressed, and draws the system focus ring around the image, following its
1797
1814
  // rounded corners. Fading isn't movement, so it stays under reduced motion.
@@ -1841,7 +1858,7 @@ var Picture = function Picture(_a) {
1841
1858
  }) : image
1842
1859
  });
1843
1860
  };
1844
- var templateObject_1$D, templateObject_2$s, templateObject_3$q, templateObject_4$l, templateObject_5$h;
1861
+ var templateObject_1$E, templateObject_2$s, templateObject_3$q, templateObject_4$l, templateObject_5$h;
1845
1862
 
1846
1863
  var _a$8 = tokens.semantic,
1847
1864
  typography$2 = _a$8.typography,
@@ -1849,7 +1866,7 @@ var _a$8 = tokens.semantic,
1849
1866
  var TimeStyled = /*#__PURE__*/styled__default.default.time.withConfig({
1850
1867
  displayName: "DateFormatter__TimeStyled",
1851
1868
  componentId: "sc-5464cc-0"
1852
- })(templateObject_1$C || (templateObject_1$C = __makeTemplateObject(["\n font: ", ";\n color: ", ";\n"], ["\n font: ", ";\n color: ", ";\n"
1869
+ })(templateObject_1$D || (templateObject_1$D = __makeTemplateObject(["\n font: ", ";\n color: ", ";\n"], ["\n font: ", ";\n color: ", ";\n"
1853
1870
  /**
1854
1871
  * Formats a date with smart relative/absolute logic
1855
1872
  */])), typography$2.label, color$7.text.muted);
@@ -1895,7 +1912,7 @@ var DateFormatter = function DateFormatter(_a) {
1895
1912
  children: displayText
1896
1913
  });
1897
1914
  };
1898
- var templateObject_1$C;
1915
+ var templateObject_1$D;
1899
1916
 
1900
1917
  var _a$7 = tokens.semantic,
1901
1918
  motion$5 = _a$7.motion,
@@ -1956,7 +1973,7 @@ var IconButtonStyled = /*#__PURE__*/styled__default.default.button.withConfig({
1956
1973
  },
1957
1974
  displayName: "IconButton__IconButtonStyled",
1958
1975
  componentId: "sc-k8b14t-0"
1959
- })(templateObject_1$B || (templateObject_1$B = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n border: none;\n border-radius: ", ";\n transition: ", ";\n box-sizing: border-box;\n display: flex;\n justify-content: center;\n align-items: center;\n height: max-content;\n cursor: pointer;\n position: relative;\n\n min-width: ", ";\n min-height: ", ";\n padding: ", ";\n\n &:hover:not(:disabled) {\n background-color: ", ";\n }\n\n &:active:not(:disabled) {\n background-color: ", ";\n }\n\n &:focus {\n outline: ", ";\n outline-offset: ", ";\n }\n\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: not-allowed;\n }\n\n ", "\n"], ["\n background-color: ", ";\n color: ", ";\n border: none;\n border-radius: ", ";\n transition: ", ";\n box-sizing: border-box;\n display: flex;\n justify-content: center;\n align-items: center;\n height: max-content;\n cursor: pointer;\n position: relative;\n\n min-width: ", ";\n min-height: ", ";\n padding: ", ";\n\n &:hover:not(:disabled) {\n background-color: ", ";\n }\n\n &:active:not(:disabled) {\n background-color: ", ";\n }\n\n &:focus {\n outline: ", ";\n outline-offset: ", ";\n }\n\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: not-allowed;\n }\n\n ", "\n"])), function (_a) {
1976
+ })(templateObject_1$C || (templateObject_1$C = __makeTemplateObject(["\n background-color: ", ";\n color: ", ";\n border: none;\n border-radius: ", ";\n transition: ", ";\n box-sizing: border-box;\n display: flex;\n justify-content: center;\n align-items: center;\n height: max-content;\n cursor: pointer;\n position: relative;\n\n min-width: ", ";\n min-height: ", ";\n padding: ", ";\n\n &:hover:not(:disabled) {\n background-color: ", ";\n }\n\n &:active:not(:disabled) {\n background-color: ", ";\n }\n\n &:focus {\n outline: ", ";\n outline-offset: ", ";\n }\n\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: not-allowed;\n }\n\n ", "\n"], ["\n background-color: ", ";\n color: ", ";\n border: none;\n border-radius: ", ";\n transition: ", ";\n box-sizing: border-box;\n display: flex;\n justify-content: center;\n align-items: center;\n height: max-content;\n cursor: pointer;\n position: relative;\n\n min-width: ", ";\n min-height: ", ";\n padding: ", ";\n\n &:hover:not(:disabled) {\n background-color: ", ";\n }\n\n &:active:not(:disabled) {\n background-color: ", ";\n }\n\n &:focus {\n outline: ", ";\n outline-offset: ", ";\n }\n\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: not-allowed;\n }\n\n ", "\n"])), function (_a) {
1960
1977
  var $variant = _a.$variant;
1961
1978
  return colours($variant).bg;
1962
1979
  }, function (_a) {
@@ -2034,7 +2051,7 @@ var IconButton = function IconButton(_a) {
2034
2051
  })
2035
2052
  }));
2036
2053
  };
2037
- var templateObject_1$B;
2054
+ var templateObject_1$C;
2038
2055
 
2039
2056
  var StyledWrapper = /*#__PURE__*/styled__default.default.span.withConfig({
2040
2057
  shouldForwardProp: function shouldForwardProp(prop) {
@@ -2042,7 +2059,7 @@ var StyledWrapper = /*#__PURE__*/styled__default.default.span.withConfig({
2042
2059
  },
2043
2060
  displayName: "MoneyDisplay__StyledWrapper",
2044
2061
  componentId: "sc-1mddej3-0"
2045
- })(templateObject_1$A || (templateObject_1$A = __makeTemplateObject(["\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n text-align: ", ";\n font-weight: ", ";\n"], ["\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n text-align: ", ";\n font-weight: ", ";\n"
2062
+ })(templateObject_1$B || (templateObject_1$B = __makeTemplateObject(["\n display: inline-flex;\n align-items: center;\n text-align: ", ";\n font-weight: ", ";\n"], ["\n display: inline-flex;\n align-items: center;\n text-align: ", ";\n font-weight: ", ";\n"
2046
2063
  // Map size to Typography variant
2047
2064
  ])), function (_a) {
2048
2065
  var $align = _a.$align;
@@ -2058,35 +2075,8 @@ var sizeToTypographyVariant = {
2058
2075
  large: 'h3',
2059
2076
  xlarge: 'h2'
2060
2077
  };
2061
- // Map size to Icon size for consistent visual alignment
2062
- var sizeToIconSize = {
2063
- small: 'xs',
2064
- medium: 'sm',
2065
- large: 'md',
2066
- xlarge: 'lg'
2067
- };
2068
- /**
2069
- * Generates aria-label with spelled out amount
2070
- */
2071
- var generateAriaLabel = function generateAriaLabel(amount, currency, locale) {
2072
- var _a, _b;
2073
- var formatter = new Intl.NumberFormat(locale, {
2074
- style: 'currency',
2075
- currency: currency,
2076
- minimumFractionDigits: 2,
2077
- maximumFractionDigits: 2
2078
- });
2079
- // Get parts to spell out the amount
2080
- var parts = formatter.formatToParts(Math.abs(amount));
2081
- var integerPart = ((_a = parts.find(function (p) {
2082
- return p.type === 'integer';
2083
- })) === null || _a === void 0 ? void 0 : _a.value) || '0';
2084
- var fractionPart = ((_b = parts.find(function (p) {
2085
- return p.type === 'fraction';
2086
- })) === null || _b === void 0 ? void 0 : _b.value) || '00';
2087
- var sign = amount < 0 ? 'negative ' : '';
2088
- return "".concat(sign).concat(integerPart, " dollars and ").concat(fractionPart, " cents");
2089
- };
2078
+ // The minus sign, not a hyphen, so it reads and copies as minus (decision 0045)
2079
+ var MINUS = "\u2212";
2090
2080
  var MoneyDisplay = function MoneyDisplay(_a) {
2091
2081
  var amount = _a.amount,
2092
2082
  _b = _a.currency,
@@ -2112,44 +2102,26 @@ var MoneyDisplay = function MoneyDisplay(_a) {
2112
2102
  maximumFractionDigits: 2
2113
2103
  });
2114
2104
  var formattedAmount = formatter.format(Math.abs(amount));
2115
- // Determine if we need to show a sign icon
2116
- var showPositiveIcon = showSign && amount > 0 || variant === 'positive';
2117
- var showNegativeIcon = amount < 0 || variant === 'negative';
2118
- // Generate accessibility label
2119
- var ariaLabel = generateAriaLabel(amount, currency, locale);
2120
- // Get typography variant and icon size
2105
+ // A signed amount carries its sign as text, so the sign survives copying and is read aloud, and the
2106
+ // role colour repeats it (decision 0045). Negative amounts always show their sign.
2107
+ var isNegative = amount < 0 || variant === 'negative';
2108
+ var isPositive = !isNegative && (showSign && amount > 0 || variant === 'positive');
2109
+ var sign = isNegative ? MINUS : isPositive ? '+' : '';
2121
2110
  var typographyVariant = sizeToTypographyVariant[size];
2122
- var iconSize = sizeToIconSize[size];
2123
- // Determine icon color based on variant
2124
- var iconColor = variant === 'positive' || showPositiveIcon ? 'success' : variant === 'negative' || showNegativeIcon ? 'error' : variant === 'neutral' ? 'subdued' : 'default';
2125
- // Amount always uses default color (except neutral which stays subdued)
2126
- var amountColor = variant === 'neutral' ? 'subdued' : 'default';
2127
- return jsxRuntime.jsxs(StyledWrapper, {
2111
+ var amountColor = isNegative ? 'error' : isPositive ? 'success' : variant === 'neutral' ? 'subdued' : 'default';
2112
+ return jsxRuntime.jsx(StyledWrapper, {
2128
2113
  "$align": align,
2129
2114
  "$weight": weight,
2130
- "aria-label": ariaLabel,
2131
2115
  "data-testid": dataTestId,
2132
- children: [showPositiveIcon && !showNegativeIcon &&
2133
- // The amount is shown without a sign, so the icon is the sign and needs a name (#85)
2134
- jsxRuntime.jsx(Icon, {
2135
- name: "addRing",
2136
- size: iconSize,
2137
- iconColor: iconColor,
2138
- "aria-label": "Plus"
2139
- }), showNegativeIcon && jsxRuntime.jsx(Icon, {
2140
- name: "remove",
2141
- size: iconSize,
2142
- iconColor: iconColor,
2143
- "aria-label": "Minus"
2144
- }), jsxRuntime.jsx(Typography, {
2116
+ children: jsxRuntime.jsxs(Typography, {
2145
2117
  variant: typographyVariant,
2146
2118
  color: amountColor,
2147
2119
  as: "span",
2148
- children: formattedAmount
2149
- })]
2120
+ children: [sign, formattedAmount]
2121
+ })
2150
2122
  });
2151
2123
  };
2152
- var templateObject_1$A;
2124
+ var templateObject_1$B;
2153
2125
 
2154
2126
  // Destructure tokens
2155
2127
  var semantic$f = tokens.semantic;
@@ -2167,7 +2139,7 @@ var ProgressBarContainer = /*#__PURE__*/styled__default.default.div.withConfig({
2167
2139
  displayName: "ProgressBar__ProgressBarContainer",
2168
2140
  componentId: "sc-1nco33q-0"
2169
2141
  })(templateObject_3$p || (templateObject_3$p = __makeTemplateObject(["\n background-color: ", ";\n border-radius: ", ";\n overflow: hidden;\n\n /* Forced colours drop the track's fill, so the track gets an edge (decision 0038) */\n ", "\n\n ", "\n\n ", "\n"], ["\n background-color: ", ";\n border-radius: ", ";\n overflow: hidden;\n\n /* Forced colours drop the track's fill, so the track gets an edge (decision 0038) */\n ", "\n\n ", "\n\n ", "\n"])), tokens.component.track.background, radius$2.xs, forcedColorsEdge, function (props) {
2170
- return props.$variant === 'horizontal' && styled.css(templateObject_1$z || (templateObject_1$z = __makeTemplateObject(["\n width: 100%;\n height: ", ";\n "], ["\n width: 100%;\n height: ", ";\n "])), props.$height ? component$2.progressBar.sizes[props.$height].height : component$2.progressBar.sizes.md.height);
2142
+ return props.$variant === 'horizontal' && styled.css(templateObject_1$A || (templateObject_1$A = __makeTemplateObject(["\n width: 100%;\n height: ", ";\n "], ["\n width: 100%;\n height: ", ";\n "])), props.$height ? component$2.progressBar.sizes[props.$height].height : component$2.progressBar.sizes.md.height);
2171
2143
  }, function (props) {
2172
2144
  return props.$variant === 'vertical' && styled.css(templateObject_2$r || (templateObject_2$r = __makeTemplateObject(["\n width: ", ";\n height: 100%;\n "], ["\n width: ", ";\n height: 100%;\n "])), props.$width ? component$2.progressBar.sizes[props.$width].height : component$2.progressBar.sizes.md.height);
2173
2145
  });
@@ -2230,7 +2202,7 @@ var ProgressBar = function ProgressBar(_a) {
2230
2202
  })
2231
2203
  });
2232
2204
  };
2233
- var templateObject_1$z, templateObject_2$r, templateObject_3$p, templateObject_4$k, templateObject_5$g, templateObject_6$c, templateObject_7$a;
2205
+ var templateObject_1$A, templateObject_2$r, templateObject_3$p, templateObject_4$k, templateObject_5$g, templateObject_6$c, templateObject_7$a;
2234
2206
 
2235
2207
  // Destructure tokens for cleaner access
2236
2208
  var separatorTokens = tokens.component.separator;
@@ -2242,7 +2214,7 @@ var StyledDivider = /*#__PURE__*/styled__default.default.div.withConfig({
2242
2214
  },
2243
2215
  displayName: "Divider__StyledDivider",
2244
2216
  componentId: "sc-1l0c8ja-0"
2245
- })(templateObject_1$y || (templateObject_1$y = __makeTemplateObject(["\n border: none;\n \n /* Apply orientation */\n ", "\n \n /* Apply variant styles */\n ", "\n \n /* Apply size styles (spacing) */\n ", "\n"], ["\n border: none;\n \n /* Apply orientation */\n ", "\n \n /* Apply variant styles */\n ", "\n \n /* Apply size styles (spacing) */\n ", "\n"
2217
+ })(templateObject_1$z || (templateObject_1$z = __makeTemplateObject(["\n border: none;\n \n /* Apply orientation */\n ", "\n \n /* Apply variant styles */\n ", "\n \n /* Apply size styles (spacing) */\n ", "\n"], ["\n border: none;\n \n /* Apply orientation */\n ", "\n \n /* Apply variant styles */\n ", "\n \n /* Apply size styles (spacing) */\n ", "\n"
2246
2218
  /**
2247
2219
  * Divider is an atomic component that provides visual separation between content sections.
2248
2220
  *
@@ -2355,7 +2327,7 @@ var Divider = function Divider(_a) {
2355
2327
  "aria-orientation": orientation
2356
2328
  });
2357
2329
  };
2358
- var templateObject_1$y;
2330
+ var templateObject_1$z;
2359
2331
 
2360
2332
  var StyledStack = /*#__PURE__*/styled__default.default.div.withConfig({
2361
2333
  shouldForwardProp: function shouldForwardProp(prop) {
@@ -2363,7 +2335,7 @@ var StyledStack = /*#__PURE__*/styled__default.default.div.withConfig({
2363
2335
  },
2364
2336
  displayName: "Stack__StyledStack",
2365
2337
  componentId: "sc-1ehkxgy-0"
2366
- })(templateObject_1$x || (templateObject_1$x = __makeTemplateObject(["\n display: flex;\n flex-direction: var(--stack-direction);\n align-items: var(--stack-align-items);\n justify-content: var(--stack-justify-content);\n gap: var(--stack-gap);\n flex-wrap: var(--stack-wrap);\n"], ["\n display: flex;\n flex-direction: var(--stack-direction);\n align-items: var(--stack-align-items);\n justify-content: var(--stack-justify-content);\n gap: var(--stack-gap);\n flex-wrap: var(--stack-wrap);\n"
2338
+ })(templateObject_1$y || (templateObject_1$y = __makeTemplateObject(["\n display: flex;\n flex-direction: var(--stack-direction);\n align-items: var(--stack-align-items);\n justify-content: var(--stack-justify-content);\n gap: var(--stack-gap);\n flex-wrap: var(--stack-wrap);\n"], ["\n display: flex;\n flex-direction: var(--stack-direction);\n align-items: var(--stack-align-items);\n justify-content: var(--stack-justify-content);\n gap: var(--stack-gap);\n flex-wrap: var(--stack-wrap);\n"
2367
2339
  // Each gap name maps to the space step that replaced its old spacing.layout token (decision 0031),
2368
2340
  // so every gap keeps its value
2369
2341
  ])));
@@ -2417,6 +2389,40 @@ var Stack = function Stack(_a) {
2417
2389
  children: children
2418
2390
  });
2419
2391
  };
2392
+ var templateObject_1$y;
2393
+
2394
+ // Shape indicators for the six coloured statuses (decision 0045): filled silhouettes on the
2395
+ // 24px grid, each the same outline as its status icon. Internal: they aren't public icons, so a
2396
+ // bare shape can't be shown without its label. The shape indicator (#264) and the small
2397
+ // StatusLabel and InlineAlert sizes render them at 12px or more, with a darker edge.
2398
+ var statusShapes = {
2399
+ error: 'M22.5 12L17.25 21.0933L6.75 21.0933L1.5 12L6.75 2.9067L17.25 2.9067Z',
2400
+ serious: 'M12 2L22 12L12 22L2 12Z',
2401
+ warning: 'M12 2.5L22 20.5L2 20.5Z',
2402
+ success: 'M12 2A10 10 0 1 1 12 22A10 10 0 1 1 12 2Z',
2403
+ info: 'M7 2H17A5 5 0 0 1 22 7V17A5 5 0 0 1 17 22H7A5 5 0 0 1 2 17V7A5 5 0 0 1 7 2Z',
2404
+ inProgress: 'M12 2A10 10 0 1 1 12 22A10 10 0 1 1 12 2ZM12 4A8 8 0 1 0 12 20A8 8 0 1 0 12 4ZM12 6A6 6 0 0 1 12 18Z'
2405
+ };
2406
+
2407
+ // The shape indicator: at least 12px (decision 0045), filled with the current text colour, which is
2408
+ // the label's role colour at 5.3:1 or more on its tint, so it needs no edge. Decorative: the text
2409
+ // beside it names the status. Internal to the status family (#264): not exported from the package.
2410
+ var Mark = /*#__PURE__*/styled__default.default.svg.withConfig({
2411
+ displayName: "StatusShape__Mark",
2412
+ componentId: "sc-1yzi9jt-0"
2413
+ })(templateObject_1$x || (templateObject_1$x = __makeTemplateObject(["\n flex: none;\n width: ", ";\n height: ", ";\n fill: currentColor;\n"], ["\n flex: none;\n width: ", ";\n height: ", ";\n fill: currentColor;\n"])), tokens.semantic.size.icon.xs, tokens.semantic.size.icon.xs);
2414
+ var StatusShape = function StatusShape(_a) {
2415
+ var shape = _a.shape;
2416
+ return jsxRuntime.jsx(Mark, {
2417
+ viewBox: "0 0 24 24",
2418
+ "aria-hidden": "true",
2419
+ focusable: "false",
2420
+ "data-shape": shape,
2421
+ children: jsxRuntime.jsx("path", {
2422
+ d: statusShapes[shape]
2423
+ })
2424
+ });
2425
+ };
2420
2426
  var templateObject_1$x;
2421
2427
 
2422
2428
  // Destructure tokens for cleaner access
@@ -2432,43 +2438,46 @@ var labelHeight = tokens.semantic.size.label;
2432
2438
  var label$1 = tokens.component.badge.label;
2433
2439
  var scaleIn$1 = styled.keyframes(templateObject_1$w || (templateObject_1$w = __makeTemplateObject(["\n from {\n opacity: 0;\n transform: scale(0.8);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n"], ["\n from {\n opacity: 0;\n transform: scale(0.8);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n"])));
2434
2440
  var getStatusConfig = function getStatusConfig(status) {
2441
+ // Each status's icon and, for the coloured statuses, its shape indicator (decision 0045). The
2442
+ // neutral statuses have no shape: at the small size they're plain text.
2435
2443
  var configs = {
2436
2444
  pending: {
2437
2445
  color: statusColors.pending.text,
2438
2446
  bgColor: statusColors.pending.background,
2439
- icon: 'refresh',
2440
- // Fallback until 'clock' icon is added
2447
+ icon: 'statusPending',
2441
2448
  label: 'Pending'
2442
2449
  },
2443
2450
  completed: {
2444
2451
  color: statusColors.completed.text,
2445
2452
  bgColor: statusColors.completed.background,
2446
- icon: 'check',
2453
+ icon: 'statusSuccess',
2454
+ shape: 'success',
2447
2455
  label: 'Completed'
2448
2456
  },
2449
2457
  failed: {
2450
2458
  color: statusColors.failed.text,
2451
2459
  bgColor: statusColors.failed.background,
2452
- icon: 'close',
2460
+ icon: 'statusError',
2461
+ shape: 'error',
2453
2462
  label: 'Failed'
2454
2463
  },
2455
2464
  cancelled: {
2456
2465
  color: statusColors.cancelled.text,
2457
2466
  bgColor: statusColors.cancelled.background,
2458
- icon: 'cancel',
2467
+ icon: 'statusCancelled',
2459
2468
  label: 'Cancelled'
2460
2469
  },
2461
2470
  processing: {
2462
2471
  color: statusColors.processing.text,
2463
2472
  bgColor: statusColors.processing.background,
2464
- icon: 'refresh',
2473
+ icon: 'statusInProgress',
2474
+ shape: 'inProgress',
2465
2475
  label: 'Processing'
2466
2476
  },
2467
2477
  scheduled: {
2468
2478
  color: statusColors.scheduled.text,
2469
2479
  bgColor: statusColors.scheduled.background,
2470
- icon: 'bell',
2471
- // Fallback until 'calendar' icon is added
2480
+ icon: 'statusScheduled',
2472
2481
  label: 'Scheduled'
2473
2482
  }
2474
2483
  };
@@ -2521,13 +2530,13 @@ var VisibleContent = /*#__PURE__*/styled__default.default.span.withConfig({
2521
2530
  })(templateObject_4$j || (templateObject_4$j = __makeTemplateObject(["\n display: contents;\n"], ["\n display: contents;\n"
2522
2531
  /**
2523
2532
  * Shared implementation of StatusLabel and the deprecated StatusBadge. Internal: not exported
2524
- * from the package. `showIcon` exists only for StatusBadge; StatusLabel always shows the icon
2525
- * (decision 0018).
2533
+ * from the package. `showIcon` exists only for StatusBadge. StatusLabel always shows the status icon
2534
+ * at the medium size, and at the small size the shape for coloured statuses (decisions 0018, 0045).
2526
2535
  */])));
2527
2536
  /**
2528
2537
  * Shared implementation of StatusLabel and the deprecated StatusBadge. Internal: not exported
2529
- * from the package. `showIcon` exists only for StatusBadge; StatusLabel always shows the icon
2530
- * (decision 0018).
2538
+ * from the package. `showIcon` exists only for StatusBadge. StatusLabel always shows the status icon
2539
+ * at the medium size, and at the small size the shape for coloured statuses (decisions 0018, 0045).
2531
2540
  */
2532
2541
  var StatusLabelBase = function StatusLabelBase(_a) {
2533
2542
  var status = _a.status,
@@ -2555,10 +2564,12 @@ var StatusLabelBase = function StatusLabelBase(_a) {
2555
2564
  "data-testid": dataTestId,
2556
2565
  children: [jsxRuntime.jsxs(VisibleContent, {
2557
2566
  "aria-hidden": accessibleLabel ? 'true' : undefined,
2558
- children: [showIcon && jsxRuntime.jsx(Icon, {
2567
+ children: [showIcon && size === 'medium' && jsxRuntime.jsx(Icon, {
2559
2568
  name: statusConfig.icon,
2560
2569
  size: sizeStyles.iconSize,
2561
2570
  iconColor: "inherit"
2571
+ }), showIcon && size === 'small' && statusConfig.shape && jsxRuntime.jsx(StatusShape, {
2572
+ shape: statusConfig.shape
2562
2573
  }), displayLabel, jsxRuntime.jsxs(ScreenReaderOnly, {
2563
2574
  children: [status, " status"]
2564
2575
  })]
@@ -2573,7 +2584,7 @@ var templateObject_1$w, templateObject_2$q, templateObject_3$o, templateObject_4
2573
2584
  * StatusBadge displays a transaction or task status.
2574
2585
  *
2575
2586
  * @deprecated Renamed to `StatusLabel` (same `status`, `size`, `label`, `liveRegion`), which always
2576
- * shows the icon. StatusBadge is removed in 3.0 (decision 0018).
2587
+ * shows its status icon or shape. StatusBadge is removed in 3.0 (decision 0018).
2577
2588
  */
2578
2589
  var StatusBadge = function StatusBadge(props) {
2579
2590
  return jsxRuntime.jsx(StatusLabelBase, __assign({}, props));
@@ -2583,8 +2594,11 @@ StatusBadge.displayName = 'StatusBadge';
2583
2594
  /**
2584
2595
  * StatusLabel conveys the status of something, such as a transaction or task (decision 0018).
2585
2596
  *
2586
- * Uses only the status colour tokens and always shows an icon with its text, so status is never
2587
- * conveyed by colour alone. Not interactive. Announces changes politely to screen readers.
2597
+ * Uses only the status colour tokens and always shows its text, so status is never conveyed by
2598
+ * colour alone (decision 0045). Medium shows the status icon. Small shows the status shape for
2599
+ * completed, failed and processing, and text only for the neutral pending, scheduled and
2600
+ * cancelled, so keep the label visible. Not interactive. Announces changes politely to screen
2601
+ * readers.
2588
2602
  *
2589
2603
  * @example
2590
2604
  * ```tsx
@@ -2801,7 +2815,10 @@ var StyledBalanceSection = /*#__PURE__*/styled__default.default.div.withConfig({
2801
2815
  var StyledTrendSection = /*#__PURE__*/styled__default.default.div.withConfig({
2802
2816
  displayName: "AccountCard__StyledTrendSection",
2803
2817
  componentId: "sc-1erp7zn-1"
2804
- })(templateObject_2$o || (templateObject_2$o = __makeTemplateObject(["\n display: flex;\n align-items: center;\n gap: ", ";\n"], ["\n display: flex;\n align-items: center;\n gap: ", ";\n"])), space$7[100]);
2818
+ })(templateObject_2$o || (templateObject_2$o = __makeTemplateObject(["\n display: flex;\n align-items: center;\n gap: ", ";\n color: ", ";\n font: ", ";\n"], ["\n display: flex;\n align-items: center;\n gap: ", ";\n color: ", ";\n font: ", ";\n"])), space$7[100], function (_a) {
2819
+ var $color = _a.$color;
2820
+ return $color;
2821
+ }, semantic$c.typography.small);
2805
2822
  /*#__PURE__*/styled__default.default.div.withConfig({
2806
2823
  displayName: "AccountCard__StyledActions",
2807
2824
  componentId: "sc-1erp7zn-2"
@@ -2822,10 +2839,12 @@ var trendToIcon = {
2822
2839
  down: 'arrowDown',
2823
2840
  neutral: 'arrowRight'
2824
2841
  };
2842
+ // A trend is a differential indicator (decision 0045): the arrow and the signed value carry the
2843
+ // direction, and the role colour repeats it. Category colours carry no meaning, so they aren't used.
2825
2844
  var trendToColor = {
2826
- up: 'green',
2827
- down: 'red',
2828
- neutral: 'blue'
2845
+ up: semantic$c.color.text.success,
2846
+ down: semantic$c.color.text.danger,
2847
+ neutral: semantic$c.color.text.muted
2829
2848
  };
2830
2849
  /**
2831
2850
  * AccountCard component
@@ -2920,16 +2939,19 @@ var AccountCard = function AccountCard(_a) {
2920
2939
  }), jsxRuntime.jsx(Typography, {
2921
2940
  color: "subdued",
2922
2941
  children: "Available"
2923
- }), trend && trendValue && jsxRuntime.jsx(StyledTrendSection, {
2942
+ }), trend && trendValue &&
2943
+ // A group rather than an image, so screen readers read the value as well as the direction
2944
+ jsxRuntime.jsxs(StyledTrendSection, {
2945
+ role: "group",
2924
2946
  "aria-label": "Trend ".concat(trend),
2925
- role: "img",
2926
- children: jsxRuntime.jsx(CategoryLabel, {
2927
- size: "medium",
2928
- icon: trendIcon,
2929
- color: trendColor,
2930
- variant: "minimal",
2947
+ "$color": trendColor,
2948
+ children: [jsxRuntime.jsx(Icon, {
2949
+ name: trendIcon,
2950
+ size: "sm",
2951
+ iconColor: "inherit"
2952
+ }), jsxRuntime.jsx("span", {
2931
2953
  children: trendValue
2932
- })
2954
+ })]
2933
2955
  })]
2934
2956
  })
2935
2957
  })]
@@ -4697,11 +4719,12 @@ var fadeOut = styled.keyframes(templateObject_2$k || (templateObject_2$k = __mak
4697
4719
  // The generated names of the two exits (full, and reduced motion)
4698
4720
  var EXIT_ANIMATION_NAMES = [fadeThenCollapse.getName(), fadeOut.getName()];
4699
4721
  // Default icons by variant
4722
+ // Each severity's status icon (decision 0045): decorative, because the title and message say it
4700
4723
  var variantIcons$1 = {
4701
- error: 'crossCircle',
4702
- warning: 'bell',
4703
- info: 'info',
4704
- success: 'checkRing'
4724
+ error: 'statusError',
4725
+ warning: 'statusWarning',
4726
+ info: 'statusInfo',
4727
+ success: 'statusSuccess'
4705
4728
  };
4706
4729
  // Icon colors by variant (using semantic icon color tokens)
4707
4730
  var variantIconColors = {
@@ -4946,11 +4969,12 @@ var semantic$8 = tokens.semantic;
4946
4969
  var color$2 = semantic$8.color,
4947
4970
  typography = semantic$8.typography,
4948
4971
  size = semantic$8.size;
4972
+ // Each severity's status icon and, at the small size, its shape (decision 0045)
4949
4973
  var variantIcons = {
4950
- error: 'crossCircle',
4951
- warning: 'bell',
4952
- info: 'info',
4953
- success: 'checkRing'
4974
+ error: 'statusError',
4975
+ warning: 'statusWarning',
4976
+ info: 'statusInfo',
4977
+ success: 'statusSuccess'
4954
4978
  };
4955
4979
  var variantTextColors = {
4956
4980
  error: color$2.text.danger,
@@ -4958,6 +4982,12 @@ var variantTextColors = {
4958
4982
  info: color$2.text.accent,
4959
4983
  success: color$2.text.success
4960
4984
  };
4985
+ var variantShapes = {
4986
+ error: 'error',
4987
+ warning: 'warning',
4988
+ info: 'info',
4989
+ success: 'success'
4990
+ };
4961
4991
  var sizeConfig = {
4962
4992
  small: {
4963
4993
  font: typography.caption,
@@ -5058,7 +5088,9 @@ var InlineAlert = function InlineAlert(_a) {
5058
5088
  children: hasMessage && jsxRuntime.jsxs(jsxRuntime.Fragment, {
5059
5089
  children: [jsxRuntime.jsx(StyledIconLine, {
5060
5090
  "aria-hidden": "true",
5061
- children: jsxRuntime.jsx(Icon, {
5091
+ children: alertSize === 'small' ? jsxRuntime.jsx(StatusShape, {
5092
+ shape: variantShapes[variant]
5093
+ }) : jsxRuntime.jsx(Icon, {
5062
5094
  name: variantIcons[variant],
5063
5095
  size: sizeConfig[alertSize].icon,
5064
5096
  iconColor: "inherit"
@@ -5504,7 +5536,7 @@ var _a$1 = tokens.semantic,
5504
5536
  var StyledCodeBlock = /*#__PURE__*/styled__default.default.pre.withConfig({
5505
5537
  displayName: "CodeBlock__StyledCodeBlock",
5506
5538
  componentId: "sc-1p1t0kp-0"
5507
- })(templateObject_1$h || (templateObject_1$h = __makeTemplateObject(["\n background-color: ", ";\n border: ", ";\n border-radius: ", ";\n padding: ", ";\n font-family: ", ";\n font-size: ", ";\n line-height: ", ";\n color: ", ";\n overflow-x: auto;\n overflow-y: ", ";\n margin: ", " 0;\n position: relative;\n transition: max-height ", " ", ";\n\n ", " {\n transition: none;\n }\n \n ", "\n\n /* The block is focusable so keyboard users can scroll it; it shows the system focus ring\n (decision 0029) */\n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n }\n"], ["\n background-color: ", ";\n border: ", ";\n border-radius: ", ";\n padding: ", ";\n font-family: ", ";\n font-size: ", ";\n line-height: ", ";\n color: ", ";\n overflow-x: auto;\n overflow-y: ", ";\n margin: ", " 0;\n position: relative;\n transition: max-height ", " ", ";\n\n ", " {\n transition: none;\n }\n \n ", "\n\n /* The block is focusable so keyboard users can scroll it; it shows the system focus ring\n (decision 0029) */\n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n }\n"])), tokens.semantic.surface.raised, border$1.emphasis, tokens.semantic.radius.sm, tokens.semantic.space[300], tokens.component.codeBlock.fontFamily, tokens.component.codeBlock.fontSize, tokens.component.codeBlock.lineHeight, color$1.text["default"], function (_a) {
5539
+ })(templateObject_1$h || (templateObject_1$h = __makeTemplateObject(["\n background-color: ", ";\n border: ", ";\n border-radius: ", ";\n padding: ", ";\n font-family: ", ";\n font-size: ", ";\n line-height: ", ";\n color: ", ";\n overflow-x: auto;\n overflow-y: ", ";\n margin: ", " 0;\n position: relative;\n transition: max-height ", " ", ";\n\n ", " {\n transition: none;\n }\n \n ", "\n\n /* The block is focusable so keyboard users can scroll it; it shows the system focus ring\n (decision 0029) */\n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n }\n"], ["\n background-color: ", ";\n border: ", ";\n border-radius: ", ";\n padding: ", ";\n font-family: ", ";\n font-size: ", ";\n line-height: ", ";\n color: ", ";\n overflow-x: auto;\n overflow-y: ", ";\n margin: ", " 0;\n position: relative;\n transition: max-height ", " ", ";\n\n ", " {\n transition: none;\n }\n \n ", "\n\n /* The block is focusable so keyboard users can scroll it; it shows the system focus ring\n (decision 0029) */\n &:focus-visible {\n outline: ", ";\n outline-offset: ", ";\n }\n"])), tokens.semantic.surface.raised, border$1["default"], tokens.semantic.radius.sm, tokens.semantic.space[300], tokens.component.codeBlock.fontFamily, tokens.component.codeBlock.fontSize, tokens.component.codeBlock.lineHeight, color$1.text["default"], function (_a) {
5508
5540
  var $isExpanded = _a.$isExpanded,
5509
5541
  $needsExpansion = _a.$needsExpansion;
5510
5542
  return $needsExpansion && !$isExpanded ? 'hidden' : 'auto';
@@ -6065,7 +6097,7 @@ var DropdownMenu = /*#__PURE__*/styled__default.default.div.withConfig({
6065
6097
  },
6066
6098
  displayName: "Dropdown__DropdownMenu",
6067
6099
  componentId: "sc-kz07c4-3"
6068
- })(templateObject_4$9 || (templateObject_4$9 = __makeTemplateObject(["\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: ", ";\n background-color: ", ";\n /* A decorative outline: elevation separates the menu, and only the trigger is a control edge (decision 0025) */\n border: ", ";\n border-radius: ", ";\n box-shadow: ", ";\n margin-top: ", ";\n overflow: hidden;\n opacity: ", ";\n visibility: ", ";\n transform: ", ";\n transition: opacity ", " ", ",\n visibility ", " ", ",\n transform ", " ", ";\n max-height: ", ";\n overflow-y: auto;\n\n ", " {\n transform: none;\n }\n"], ["\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: ", ";\n background-color: ", ";\n /* A decorative outline: elevation separates the menu, and only the trigger is a control edge (decision 0025) */\n border: ", ";\n border-radius: ", ";\n box-shadow: ", ";\n margin-top: ", ";\n overflow: hidden;\n opacity: ", ";\n visibility: ", ";\n transform: ", ";\n transition: opacity ", " ", ",\n visibility ", " ", ",\n transform ", " ", ";\n max-height: ", ";\n overflow-y: auto;\n\n ", " {\n transform: none;\n }\n"])), tokens.semantic.layer.dropdown, input$1["default"].backgroundColor, border.emphasis, input$1["default"].borderRadius, elevation$1.floating, space$4[100], function (_a) {
6100
+ })(templateObject_4$9 || (templateObject_4$9 = __makeTemplateObject(["\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: ", ";\n background-color: ", ";\n /* A decorative outline: elevation separates the menu, and only the trigger is a control edge (decision 0025) */\n border: ", ";\n border-radius: ", ";\n box-shadow: ", ";\n margin-top: ", ";\n overflow: hidden;\n opacity: ", ";\n visibility: ", ";\n transform: ", ";\n transition: opacity ", " ", ",\n visibility ", " ", ",\n transform ", " ", ";\n max-height: ", ";\n overflow-y: auto;\n\n ", " {\n transform: none;\n }\n"], ["\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: ", ";\n background-color: ", ";\n /* A decorative outline: elevation separates the menu, and only the trigger is a control edge (decision 0025) */\n border: ", ";\n border-radius: ", ";\n box-shadow: ", ";\n margin-top: ", ";\n overflow: hidden;\n opacity: ", ";\n visibility: ", ";\n transform: ", ";\n transition: opacity ", " ", ",\n visibility ", " ", ",\n transform ", " ", ";\n max-height: ", ";\n overflow-y: auto;\n\n ", " {\n transform: none;\n }\n"])), tokens.semantic.layer.dropdown, input$1["default"].backgroundColor, border["default"], input$1["default"].borderRadius, elevation$1.floating, space$4[100], function (_a) {
6069
6101
  var $isOpen = _a.$isOpen;
6070
6102
  return $isOpen ? 1 : 0;
6071
6103
  }, function (_a) {
@@ -6088,7 +6120,7 @@ var DropdownOption = /*#__PURE__*/styled__default.default.button.withConfig({
6088
6120
  selected: $isSelected,
6089
6121
  focused: $isFocused
6090
6122
  });
6091
- }, border.emphasis);
6123
+ }, border["default"]);
6092
6124
  var StyledHelperText$3 = /*#__PURE__*/styled__default.default.div.withConfig({
6093
6125
  displayName: "Dropdown__StyledHelperText",
6094
6126
  componentId: "sc-kz07c4-5"
@@ -8069,7 +8101,7 @@ var semantic = tokens.semantic;
8069
8101
  var StyledTabList = /*#__PURE__*/styled__default.default.div.withConfig({
8070
8102
  displayName: "TabBar__StyledTabList",
8071
8103
  componentId: "sc-1g9ib0y-0"
8072
- })(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n border-bottom: ", " solid ", ";\n overflow-x: auto;\n overflow-y: hidden;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: thin;\n \n &::-webkit-scrollbar {\n height: ", ";\n }\n \n &::-webkit-scrollbar-track {\n background: ", ";\n }\n \n &::-webkit-scrollbar-thumb {\n background: ", ";\n border-radius: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n border-bottom: ", " solid ", ";\n overflow-x: auto;\n overflow-y: hidden;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: thin;\n \n &::-webkit-scrollbar {\n height: ", ";\n }\n \n &::-webkit-scrollbar-track {\n background: ", ";\n }\n \n &::-webkit-scrollbar-thumb {\n background: ", ";\n border-radius: ", ";\n }\n"])), semantic.border.width.thin, semantic.color.border.emphasis, tokens.component.tabBar.scrollbar.height, semantic.surface.raised, semantic.color.border["default"], semantic.radius.sm);
8104
+ })(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n border-bottom: ", " solid ", ";\n overflow-x: auto;\n overflow-y: hidden;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: thin;\n \n &::-webkit-scrollbar {\n height: ", ";\n }\n \n &::-webkit-scrollbar-track {\n background: ", ";\n }\n \n &::-webkit-scrollbar-thumb {\n background: ", ";\n border-radius: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n border-bottom: ", " solid ", ";\n overflow-x: auto;\n overflow-y: hidden;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: thin;\n \n &::-webkit-scrollbar {\n height: ", ";\n }\n \n &::-webkit-scrollbar-track {\n background: ", ";\n }\n \n &::-webkit-scrollbar-thumb {\n background: ", ";\n border-radius: ", ";\n }\n"])), semantic.border.width.thin, semantic.color.border["default"], tokens.component.tabBar.scrollbar.height, semantic.surface.raised, semantic.color.border["default"], semantic.radius.sm);
8073
8105
  var StyledTab = /*#__PURE__*/styled__default.default.button.withConfig({
8074
8106
  shouldForwardProp: function shouldForwardProp(prop) {
8075
8107
  return !prop.startsWith('$');
@@ -8089,11 +8121,11 @@ var StyledTab = /*#__PURE__*/styled__default.default.button.withConfig({
8089
8121
  }, function (props) {
8090
8122
  return props.$isActive ? semantic.color.fill['accent-muted-hover'] : 'transparent';
8091
8123
  }, function (props) {
8092
- return props.$isActive ? semantic.color.text['accent-hover'] : semantic.color.text["default"];
8124
+ return props.$isActive ? semantic.color.text.accent : semantic.color.text["default"];
8093
8125
  }, function (props) {
8094
8126
  return props.$isActive ? semantic.color.fill['accent-muted-pressed'] : 'transparent';
8095
8127
  }, function (props) {
8096
- return props.$isActive ? semantic.color.text['accent-pressed'] : semantic.color.text["default"];
8128
+ return props.$isActive ? semantic.color.text.accent : semantic.color.text["default"];
8097
8129
  }, function (props) {
8098
8130
  return props.$disabled ? '0.5' : '1';
8099
8131
  }, semantic.border.focus, semantic.border.focusOffset);
@@ -8414,28 +8446,30 @@ var StyledTruncatedText = /*#__PURE__*/styled__default.default.span.withConfig({
8414
8446
  ])));
8415
8447
  // Map categories to CategoryLabel configurations
8416
8448
  var categoryConfig = {
8449
+ // Display colours carry no meaning (decision 0043); five coloured categories share four colours,
8450
+ // so the icon and label tell dining and bills apart
8417
8451
  shopping: {
8418
- color: 'purple',
8452
+ color: 'magenta',
8419
8453
  icon: 'paper',
8420
8454
  label: 'Shopping'
8421
8455
  },
8422
8456
  dining: {
8423
- color: 'orange',
8457
+ color: 'rose',
8424
8458
  icon: 'paper',
8425
8459
  label: 'Dining'
8426
8460
  },
8427
8461
  transport: {
8428
- color: 'blue',
8462
+ color: 'periwinkle',
8429
8463
  icon: 'paper',
8430
8464
  label: 'Transport'
8431
8465
  },
8432
8466
  entertainment: {
8433
- color: 'pink',
8467
+ color: 'olive',
8434
8468
  icon: 'star',
8435
8469
  label: 'Entertainment'
8436
8470
  },
8437
8471
  bills: {
8438
- color: 'red',
8472
+ color: 'rose',
8439
8473
  icon: 'paper',
8440
8474
  label: 'Bills'
8441
8475
  },
@@ -8445,12 +8479,6 @@ var categoryConfig = {
8445
8479
  label: 'Other'
8446
8480
  }
8447
8481
  };
8448
- // Map status to badge variant
8449
- var statusToBadgeVariant = {
8450
- completed: 'success',
8451
- pending: 'warning',
8452
- failed: 'error'
8453
- };
8454
8482
  /**
8455
8483
  * TransactionListItem component
8456
8484
  *
@@ -8458,7 +8486,7 @@ var statusToBadgeVariant = {
8458
8486
  * status, and optional metadata (category, receipt, notes). Minimum height 72px
8459
8487
  * with interactive states for clickable items.
8460
8488
  *
8461
- * Composes: Avatar, Badge, MoneyDisplay, Icon, DateFormatter, Typography, Stack
8489
+ * Composes: Avatar, CategoryLabel, StatusLabel, MoneyDisplay, Icon, DateFormatter, Typography, Stack
8462
8490
  */
8463
8491
  var TransactionListItem = function TransactionListItem(_a) {
8464
8492
  var merchant = _a.merchant,
@@ -8482,8 +8510,6 @@ var TransactionListItem = function TransactionListItem(_a) {
8482
8510
  var amountVariant = amount > 0 ? 'positive' : amount < 0 ? 'negative' : 'default';
8483
8511
  // Get category configuration
8484
8512
  var categoryData = category ? categoryConfig[category] : undefined;
8485
- // Get badge variant from status
8486
- var badgeVariant = statusToBadgeVariant[status];
8487
8513
  var handleClick = function handleClick() {
8488
8514
  if (isClickable && onClick) {
8489
8515
  onClick();
@@ -8501,19 +8527,10 @@ var TransactionListItem = function TransactionListItem(_a) {
8501
8527
  onKeyDown: handleKeyDown,
8502
8528
  tabIndex: isClickable ? 0 : undefined,
8503
8529
  role: isClickable ? 'button' : undefined,
8504
- "aria-label": isClickable ? "".concat(merchant, " transaction, ").concat(amount < 0 ? 'expense' : 'income', " of ").concat(Math.abs(amount)) : undefined,
8530
+ "aria-label": isClickable ? "".concat(merchant, " transaction, ").concat(amount < 0 ? 'expense' : 'income', " of ").concat(Math.abs(amount)).concat(status === 'completed' ? '' : ", ".concat(status)) : undefined,
8505
8531
  "data-testid": dataTestId,
8506
8532
  children: [jsxRuntime.jsx(StyledAvatarSection, {
8507
- children: status === 'pending' ? jsxRuntime.jsx(Badge, {
8508
- variant: badgeVariant,
8509
- dot: true,
8510
- "aria-label": "Pending transaction",
8511
- children: jsxRuntime.jsx(Avatar, {
8512
- name: merchant,
8513
- picture: merchantLogo,
8514
- size: "md"
8515
- })
8516
- }) : jsxRuntime.jsx(Avatar, {
8533
+ children: jsxRuntime.jsx(Avatar, {
8517
8534
  name: merchant,
8518
8535
  picture: merchantLogo,
8519
8536
  size: "md"
@@ -8533,11 +8550,10 @@ var TransactionListItem = function TransactionListItem(_a) {
8533
8550
  variant: "minimal",
8534
8551
  "aria-label": "Category: ".concat(categoryData.label),
8535
8552
  children: categoryData.label
8536
- }), status === 'failed' && jsxRuntime.jsx(Badge, {
8537
- variant: "error",
8538
- dot: true,
8539
- "aria-label": "Failed transaction",
8540
- children: jsxRuntime.jsx("span", {})
8553
+ }), status !== 'completed' && jsxRuntime.jsx(StatusLabel, {
8554
+ status: status,
8555
+ size: "small",
8556
+ liveRegion: false
8541
8557
  })]
8542
8558
  }), jsxRuntime.jsx(MoneyDisplay, {
8543
8559
  amount: amount,