@revikornmann/muka-ui 0.26.0 → 0.27.1

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 (79) hide show
  1. package/dist/cjs/components/Avatar/Avatar.css +79 -30
  2. package/dist/cjs/components/Avatar/Avatar.js +24 -2
  3. package/dist/cjs/components/Avatar/Avatar.js.map +1 -1
  4. package/dist/cjs/components/Avatar/AvatarGroup.js +4 -3
  5. package/dist/cjs/components/Avatar/AvatarGroup.js.map +1 -1
  6. package/dist/cjs/components/Button/Button.css +33 -0
  7. package/dist/cjs/components/Button/Button.js +2 -2
  8. package/dist/cjs/components/DataPieChart/DataPieChart.js +5 -2
  9. package/dist/cjs/components/DataPieChart/DataPieChart.js.map +1 -1
  10. package/dist/cjs/components/DataPieChart/index.js.map +1 -1
  11. package/dist/cjs/components/Tabs/Tabs.css +37 -14
  12. package/dist/cjs/components/Tabs/Tabs.js +30 -10
  13. package/dist/cjs/components/Tabs/Tabs.js.map +1 -1
  14. package/dist/cjs/components/index.js.map +1 -1
  15. package/dist/esm/components/Avatar/Avatar.css +79 -30
  16. package/dist/esm/components/Avatar/Avatar.js +25 -3
  17. package/dist/esm/components/Avatar/Avatar.js.map +1 -1
  18. package/dist/esm/components/Avatar/AvatarGroup.js +4 -3
  19. package/dist/esm/components/Avatar/AvatarGroup.js.map +1 -1
  20. package/dist/esm/components/Button/Button.css +33 -0
  21. package/dist/esm/components/Button/Button.js +2 -2
  22. package/dist/esm/components/DataPieChart/DataPieChart.js +4 -1
  23. package/dist/esm/components/DataPieChart/DataPieChart.js.map +1 -1
  24. package/dist/esm/components/DataPieChart/index.js.map +1 -1
  25. package/dist/esm/components/Tabs/Tabs.css +37 -14
  26. package/dist/esm/components/Tabs/Tabs.js +30 -10
  27. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  28. package/dist/esm/components/index.js.map +1 -1
  29. package/dist/styles/components/Avatar.css +79 -30
  30. package/dist/styles/components/Button.css +33 -0
  31. package/dist/styles/components/Tabs.css +37 -14
  32. package/dist/styles/index.css +555 -407
  33. package/dist/styles/muka-dark.css +555 -407
  34. package/dist/styles/muka-light.css +555 -407
  35. package/dist/styles/tokens-bouwplan-dark.css +48 -5
  36. package/dist/styles/tokens-bouwplan-light.css +48 -5
  37. package/dist/styles/tokens-fscl-dark.css +48 -5
  38. package/dist/styles/tokens-fscl-light.css +48 -5
  39. package/dist/styles/tokens-grip-dark.css +48 -5
  40. package/dist/styles/tokens-grip-light.css +48 -5
  41. package/dist/styles/tokens-muka-dark.css +48 -5
  42. package/dist/styles/tokens-muka-light.css +48 -5
  43. package/dist/styles/tokens-wireframe-dark.css +48 -5
  44. package/dist/styles/tokens-wireframe-light.css +48 -5
  45. package/dist/styles/wireframe-dark.css +555 -407
  46. package/dist/styles/wireframe-light.css +555 -407
  47. package/dist/types/components/Avatar/Avatar.d.ts +8 -3
  48. package/dist/types/components/Avatar/Avatar.d.ts.map +1 -1
  49. package/dist/types/components/Avatar/AvatarGroup.d.ts +10 -5
  50. package/dist/types/components/Avatar/AvatarGroup.d.ts.map +1 -1
  51. package/dist/types/components/Avatar/index.d.ts +1 -1
  52. package/dist/types/components/Avatar/index.d.ts.map +1 -1
  53. package/dist/types/components/Button/Button.d.ts +3 -3
  54. package/dist/types/components/Button/Button.d.ts.map +1 -1
  55. package/dist/types/components/DataPieChart/DataPieChart.d.ts +13 -2
  56. package/dist/types/components/DataPieChart/DataPieChart.d.ts.map +1 -1
  57. package/dist/types/components/DataPieChart/index.d.ts +1 -1
  58. package/dist/types/components/DataPieChart/index.d.ts.map +1 -1
  59. package/dist/types/components/Tabs/Tabs.d.ts +17 -2
  60. package/dist/types/components/Tabs/Tabs.d.ts.map +1 -1
  61. package/dist/types/components/index.d.ts +2 -2
  62. package/dist/types/components/index.d.ts.map +1 -1
  63. package/package.json +1 -1
  64. package/tokens/t1-primitives/color.json +10 -0
  65. package/tokens/t2-alias/base.json +14 -0
  66. package/tokens/t2-alias/brand/bouwplan/dark.json +5 -0
  67. package/tokens/t2-alias/brand/bouwplan/light.json +5 -0
  68. package/tokens/t2-alias/brand/fscl/dark.json +5 -0
  69. package/tokens/t2-alias/brand/fscl/light.json +5 -0
  70. package/tokens/t2-alias/brand/grip/dark.json +14 -0
  71. package/tokens/t2-alias/brand/grip/light.json +14 -0
  72. package/tokens/t2-alias/brand/muka/dark.json +14 -0
  73. package/tokens/t2-alias/brand/muka/light.json +14 -0
  74. package/tokens/t2-alias/brand/wireframe/dark.json +14 -0
  75. package/tokens/t2-alias/brand/wireframe/light.json +14 -0
  76. package/tokens/t3-semantics/ui.json +49 -2
  77. package/tokens/t4-components/avatar.json +82 -18
  78. package/tokens/t4-components/button.json +56 -0
  79. package/tokens/t4-components/tabs.json +41 -1
@@ -410,6 +410,8 @@ body {
410
410
  --color-red-10: #dc3d43;
411
411
  --color-red-11: #cd2b31;
412
412
  --color-red-12: #381316;
413
+ --color-redStrong-1: #bd1524;
414
+ --color-redStrong-2: #ab001a;
413
415
  --color-ruby-1: #fffcfd;
414
416
  --color-ruby-2: #fff7f8;
415
417
  --color-ruby-3: #ffeef1;
@@ -1208,6 +1210,9 @@ body {
1208
1210
  --color-state-error-default: #e5484d;
1209
1211
  --color-state-error-contrast: #cd2b31;
1210
1212
  --color-state-error-background: #ffefef;
1213
+ --color-state-error-solid-default: #cd2b31;
1214
+ --color-state-error-solid-hover: #bd1524;
1215
+ --color-state-error-solid-pressed: #ab001a;
1211
1216
  --color-state-info-default: #3e63dd;
1212
1217
  --color-state-info-contrast: #3a5ccc;
1213
1218
  --color-state-info-background: #edf2fe;
@@ -1308,6 +1313,9 @@ body {
1308
1313
  --alias-color-state-error-contrast: #cd2b31;
1309
1314
  --alias-color-state-error-default: #e5484d;
1310
1315
  --alias-color-state-error-muted: #ffefef;
1316
+ --alias-color-state-error-solid-default: #cd2b31;
1317
+ --alias-color-state-error-solid-hover: #bd1524;
1318
+ --alias-color-state-error-solid-pressed: #ab001a;
1311
1319
  --alias-color-state-error-surface-level0: #fff8f8;
1312
1320
  --alias-color-state-error-surface-level1: #ffefef;
1313
1321
  --alias-color-state-error-surface-level2: #ffe5e5;
@@ -1604,6 +1612,18 @@ body {
1604
1612
  --button-color-primary-shadow-hover: inset 0px -2px 0px 0px rgba(0, 0, 0, 0.090);
1605
1613
  --button-color-primary-shadow-pressed: none;
1606
1614
  --button-color-primary-shadow-disabled: none;
1615
+ --button-color-destructive-background-default: #cd2b31;
1616
+ --button-color-destructive-background-hover: #bd1524;
1617
+ --button-color-destructive-background-pressed: #ab001a;
1618
+ --button-color-destructive-background-disabled: #eae7ec;
1619
+ --button-color-destructive-foreground-default: #fdfcfd;
1620
+ --button-color-destructive-foreground-hover: #fdfcfd;
1621
+ --button-color-destructive-foreground-pressed: #fdfcfd;
1622
+ --button-color-destructive-foreground-disabled: #d0cdd7;
1623
+ --button-color-destructive-shadow-default: inset 0px -2px 0px 0px rgba(0, 0, 0, 0.090);
1624
+ --button-color-destructive-shadow-hover: inset 0px -2px 0px 0px rgba(0, 0, 0, 0.090);
1625
+ --button-color-destructive-shadow-pressed: none;
1626
+ --button-color-destructive-shadow-disabled: none;
1607
1627
  --button-color-secondary-background-default: #f2eff3;
1608
1628
  --button-color-secondary-background-hover: #f2eff3;
1609
1629
  --button-color-secondary-background-pressed: #eae7ec;
@@ -1968,7 +1988,7 @@ body {
1968
1988
  --contextmenu-trigger-outline-color: #3e63dd;
1969
1989
  --contextmenu-trigger-outline-offset: 0.25rem;
1970
1990
  --tabs-trigger-color-default-background: #f2eff3;
1971
- --tabs-trigger-color-default-foreground: #211f26;
1991
+ --tabs-trigger-color-default-foreground: #8e8c99;
1972
1992
  --tabs-trigger-color-default-border: #d0cdd7;
1973
1993
  --tabs-trigger-color-hover-background: #f2eff3;
1974
1994
  --tabs-trigger-color-hover-foreground: #211f26;
@@ -1983,8 +2003,16 @@ body {
1983
2003
  --tabs-trigger-padding-y: 0.5rem;
1984
2004
  --tabs-trigger-height: 3rem;
1985
2005
  --tabs-trigger-radius: 0.75rem;
2006
+ --tabs-trigger-min-height-sm: 2.5rem;
2007
+ --tabs-trigger-min-height-md: 3.5rem;
2008
+ --tabs-trigger-min-height-lg: 5rem;
1986
2009
  --tabs-panel-background: #fdfcfd;
1987
2010
  --tabs-panel-border: #d0cdd7;
2011
+ --tabs-indicator-color: #3e63dd;
2012
+ --tabs-indicator-height-sm: 2px;
2013
+ --tabs-indicator-height-md: 3px;
2014
+ --tabs-indicator-height-lg: 4px;
2015
+ --tabs-list-padding-x: 1rem;
1988
2016
  --separator-color-default: #eae7ec;
1989
2017
  --separator-color-contrast: #d0cdd7;
1990
2018
  --separator-width: 0.0625rem;
@@ -2017,6 +2045,9 @@ body {
2017
2045
  --progress-size-circle-strokeWidth-sm: 0.25rem;
2018
2046
  --progress-size-circle-strokeWidth-md: 0.5rem;
2019
2047
  --progress-size-circle-strokeWidth-lg: 0.75rem;
2048
+ --avatar-size-4xs: 1rem;
2049
+ --avatar-size-3xs: 1.5rem;
2050
+ --avatar-size-2xs: 2rem;
2020
2051
  --avatar-size-xs: 2.5rem;
2021
2052
  --avatar-size-sm: 3rem;
2022
2053
  --avatar-size-md: 4rem;
@@ -2026,26 +2057,38 @@ body {
2026
2057
  --avatar-color-background-loading: #eae7ec;
2027
2058
  --avatar-color-foreground-default: #211f26;
2028
2059
  --avatar-color-foreground-muted: #d0cdd7;
2029
- --avatar-color-border-default: #eae7ec;
2030
2060
  --avatar-color-status-online: #027864;
2031
2061
  --avatar-color-status-offline: #d0cdd7;
2032
2062
  --avatar-color-status-busy: #e5484d;
2033
2063
  --avatar-color-status-away: #ffc53d;
2034
2064
  --avatar-radius-circle: 999rem;
2035
2065
  --avatar-radius-square: 0.75rem;
2066
+ --avatar-radius-square-sm: 0.375rem;
2067
+ --avatar-font-size-3xs: 0.75rem;
2068
+ --avatar-font-size-2xs: 0.75rem;
2036
2069
  --avatar-font-size-xs: 0.75rem;
2037
2070
  --avatar-font-size-sm: 0.875rem;
2038
2071
  --avatar-font-size-md: 1.125rem;
2039
2072
  --avatar-font-size-lg: 1.25rem;
2040
2073
  --avatar-font-size-xl: 1.5rem;
2074
+ --avatar-status-size-3xs: 0.5rem;
2075
+ --avatar-status-size-2xs: 0.5rem;
2041
2076
  --avatar-status-size-xs: 0.5rem;
2042
2077
  --avatar-status-size-sm: 0.75rem;
2043
2078
  --avatar-status-size-md: 1rem;
2044
2079
  --avatar-status-size-lg: 1.25rem;
2045
2080
  --avatar-status-size-xl: 1.5rem;
2046
- --avatar-border-width: 1px;
2047
- --avatar-group-spacing-tight: -0.5rem;
2048
- --avatar-group-spacing-normal: -0.25rem;
2081
+ --avatar-group-ring-width: 0.125rem;
2082
+ --avatar-group-ring-color: #fdfcfd;
2083
+ --avatar-group-overlap-tight-sm: 2rem;
2084
+ --avatar-group-overlap-tight-2xs: 1.25rem;
2085
+ --avatar-group-overlap-tight-3xs: 1rem;
2086
+ --avatar-group-overlap-compact-sm: 1.5rem;
2087
+ --avatar-group-overlap-compact-2xs: 1rem;
2088
+ --avatar-group-overlap-compact-3xs: 0.75rem;
2089
+ --avatar-group-overlap-spacious-sm: 1rem;
2090
+ --avatar-group-overlap-spacious-2xs: 0.75rem;
2091
+ --avatar-group-overlap-spacious-3xs: 0.5rem;
2049
2092
  --toast-color-info-background: #211f26;
2050
2093
  --toast-color-info-foreground: #fdfcfd;
2051
2094
  --toast-color-info-accent: #edf2fe;
@@ -3799,88 +3842,6 @@ body {
3799
3842
  }
3800
3843
 
3801
3844
 
3802
- /* TextLink */
3803
- /* TextLink Component Styles - Using Muka Design Tokens */
3804
-
3805
- .muka-text-link {
3806
- display: inline;
3807
- cursor: pointer;
3808
- text-decoration: underline;
3809
- /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
3810
- text-underline-offset: 0.2em;
3811
- text-decoration-thickness: from-font;
3812
- /* Rounds the focus ring's corners; the link itself has no visible box. */
3813
- border-radius: var(--border-radius-sm);
3814
- transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
3815
- }
3816
-
3817
- /* ─── Sizes ───────────────────────────────────────────────
3818
- Mirrors the body text scale so a link matches the copy it sits in. */
3819
- .muka-text-link--sm {
3820
- font-family: var(--text-body-sm-regular-fontFamily);
3821
- font-weight: var(--text-body-sm-regular-fontWeight);
3822
- font-size: var(--text-body-sm-regular-fontSize);
3823
- line-height: var(--text-body-sm-regular-lineHeight);
3824
- }
3825
-
3826
- .muka-text-link--base {
3827
- font-family: var(--text-body-base-regular-fontFamily);
3828
- font-weight: var(--text-body-base-regular-fontWeight);
3829
- font-size: var(--text-body-base-regular-fontSize);
3830
- line-height: var(--text-body-base-regular-lineHeight);
3831
- }
3832
-
3833
- .muka-text-link--lg {
3834
- font-family: var(--text-body-lg-regular-fontFamily);
3835
- font-weight: var(--text-body-lg-regular-fontWeight);
3836
- font-size: var(--text-body-lg-regular-fontSize);
3837
- line-height: var(--text-body-lg-regular-lineHeight);
3838
- }
3839
-
3840
- /* ─── Variant: default (accent) ───────────────────────────
3841
- Visited repeats the default colour on purpose: the design treats visited and
3842
- default the same, and pinning it stops the browser's purple from showing. */
3843
- .muka-text-link--default,
3844
- .muka-text-link--default:visited {
3845
- color: var(--color-text-action-default);
3846
- }
3847
-
3848
- .muka-text-link--default:hover,
3849
- .muka-text-link--default:focus-visible {
3850
- color: var(--color-text-action-hover);
3851
- }
3852
-
3853
- .muka-text-link--default:active {
3854
- color: var(--color-text-action-pressed);
3855
- }
3856
-
3857
- /* ─── Variant: subtle (neutral) ───────────────────────────
3858
- Hover, focus and pressed all darken to the default text colour. */
3859
- .muka-text-link--subtle,
3860
- .muka-text-link--subtle:visited {
3861
- color: var(--color-text-subtle-default);
3862
- }
3863
-
3864
- .muka-text-link--subtle:hover,
3865
- .muka-text-link--subtle:focus-visible,
3866
- .muka-text-link--subtle:active {
3867
- color: var(--color-text-default-default);
3868
- }
3869
-
3870
- /* ─── Focus ───────────────────────────────────────────────
3871
- Same ring as every other focusable Muka component. */
3872
- .muka-text-link:focus-visible {
3873
- outline: 2px solid var(--color-border-focus);
3874
- outline-offset: 2px;
3875
- }
3876
-
3877
- @media (prefers-reduced-motion: reduce) {
3878
- .muka-text-link {
3879
- transition: none;
3880
- }
3881
- }
3882
-
3883
-
3884
3845
  /* Textarea */
3885
3846
  /* Textarea Component Styles - Using Muka Design Tokens */
3886
3847
 
@@ -4045,6 +4006,88 @@ body {
4045
4006
  }
4046
4007
 
4047
4008
 
4009
+ /* TextLink */
4010
+ /* TextLink Component Styles - Using Muka Design Tokens */
4011
+
4012
+ .muka-text-link {
4013
+ display: inline;
4014
+ cursor: pointer;
4015
+ text-decoration: underline;
4016
+ /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
4017
+ text-underline-offset: 0.2em;
4018
+ text-decoration-thickness: from-font;
4019
+ /* Rounds the focus ring's corners; the link itself has no visible box. */
4020
+ border-radius: var(--border-radius-sm);
4021
+ transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
4022
+ }
4023
+
4024
+ /* ─── Sizes ───────────────────────────────────────────────
4025
+ Mirrors the body text scale so a link matches the copy it sits in. */
4026
+ .muka-text-link--sm {
4027
+ font-family: var(--text-body-sm-regular-fontFamily);
4028
+ font-weight: var(--text-body-sm-regular-fontWeight);
4029
+ font-size: var(--text-body-sm-regular-fontSize);
4030
+ line-height: var(--text-body-sm-regular-lineHeight);
4031
+ }
4032
+
4033
+ .muka-text-link--base {
4034
+ font-family: var(--text-body-base-regular-fontFamily);
4035
+ font-weight: var(--text-body-base-regular-fontWeight);
4036
+ font-size: var(--text-body-base-regular-fontSize);
4037
+ line-height: var(--text-body-base-regular-lineHeight);
4038
+ }
4039
+
4040
+ .muka-text-link--lg {
4041
+ font-family: var(--text-body-lg-regular-fontFamily);
4042
+ font-weight: var(--text-body-lg-regular-fontWeight);
4043
+ font-size: var(--text-body-lg-regular-fontSize);
4044
+ line-height: var(--text-body-lg-regular-lineHeight);
4045
+ }
4046
+
4047
+ /* ─── Variant: default (accent) ───────────────────────────
4048
+ Visited repeats the default colour on purpose: the design treats visited and
4049
+ default the same, and pinning it stops the browser's purple from showing. */
4050
+ .muka-text-link--default,
4051
+ .muka-text-link--default:visited {
4052
+ color: var(--color-text-action-default);
4053
+ }
4054
+
4055
+ .muka-text-link--default:hover,
4056
+ .muka-text-link--default:focus-visible {
4057
+ color: var(--color-text-action-hover);
4058
+ }
4059
+
4060
+ .muka-text-link--default:active {
4061
+ color: var(--color-text-action-pressed);
4062
+ }
4063
+
4064
+ /* ─── Variant: subtle (neutral) ───────────────────────────
4065
+ Hover, focus and pressed all darken to the default text colour. */
4066
+ .muka-text-link--subtle,
4067
+ .muka-text-link--subtle:visited {
4068
+ color: var(--color-text-subtle-default);
4069
+ }
4070
+
4071
+ .muka-text-link--subtle:hover,
4072
+ .muka-text-link--subtle:focus-visible,
4073
+ .muka-text-link--subtle:active {
4074
+ color: var(--color-text-default-default);
4075
+ }
4076
+
4077
+ /* ─── Focus ───────────────────────────────────────────────
4078
+ Same ring as every other focusable Muka component. */
4079
+ .muka-text-link:focus-visible {
4080
+ outline: 2px solid var(--color-border-focus);
4081
+ outline-offset: 2px;
4082
+ }
4083
+
4084
+ @media (prefers-reduced-motion: reduce) {
4085
+ .muka-text-link {
4086
+ transition: none;
4087
+ }
4088
+ }
4089
+
4090
+
4048
4091
  /* Tabs */
4049
4092
  /* Tabs Component Styles - Clean underline style tabs matching Figma */
4050
4093
 
@@ -4076,12 +4119,17 @@ body {
4076
4119
  border-bottom: 1px solid var(--tabs-trigger-color-default-border);
4077
4120
  }
4078
4121
 
4122
+ /* Padding: inset the tabs; the divider (border) still spans the full width */
4123
+ .muka-tabs--padding-default .muka-tabs__list {
4124
+ padding-inline: var(--tabs-list-padding-x);
4125
+ }
4126
+
4079
4127
  /* Tab Trigger — clean underline style */
4080
4128
  .muka-tabs__trigger {
4081
4129
  display: inline-flex;
4082
4130
  align-items: center;
4083
4131
  justify-content: center;
4084
- gap: var(--spacing-2, 8px);
4132
+ gap: var(--spacing-1);
4085
4133
  background: transparent;
4086
4134
  border: none;
4087
4135
  cursor: pointer;
@@ -4094,8 +4142,8 @@ body {
4094
4142
  color: var(--tabs-trigger-color-default-foreground);
4095
4143
 
4096
4144
  /* Default MD size values */
4097
- height: 48px;
4098
- padding: 0 var(--spacing-3, 12px);
4145
+ min-height: var(--tabs-trigger-min-height-md);
4146
+ padding: var(--spacing-3);
4099
4147
  font-family: var(--text-label-md-regular-fontFamily);
4100
4148
  font-weight: var(--text-label-md-regular-fontWeight);
4101
4149
  font-size: var(--text-label-md-regular-fontSize);
@@ -4104,8 +4152,8 @@ body {
4104
4152
 
4105
4153
  /* Size Variants */
4106
4154
  .muka-tabs--size-sm .muka-tabs__trigger {
4107
- height: 36px;
4108
- padding: 0 var(--spacing-2, 8px);
4155
+ min-height: var(--tabs-trigger-min-height-sm);
4156
+ padding: 0 var(--spacing-2);
4109
4157
  font-family: var(--text-label-sm-regular-fontFamily);
4110
4158
  font-weight: var(--text-label-sm-regular-fontWeight);
4111
4159
  font-size: var(--text-label-sm-regular-fontSize);
@@ -4113,8 +4161,8 @@ body {
4113
4161
  }
4114
4162
 
4115
4163
  .muka-tabs--size-lg .muka-tabs__trigger {
4116
- height: 56px;
4117
- padding: 0 var(--spacing-4, 16px);
4164
+ min-height: var(--tabs-trigger-min-height-lg);
4165
+ padding: var(--spacing-4);
4118
4166
  font-family: var(--text-label-lg-regular-fontFamily);
4119
4167
  font-weight: var(--text-label-lg-regular-fontWeight);
4120
4168
  font-size: var(--text-label-lg-regular-fontSize);
@@ -4138,8 +4186,8 @@ body {
4138
4186
  bottom: -1px; /* Overlap the 1px border */
4139
4187
  left: 0;
4140
4188
  right: 0;
4141
- height: 3px;
4142
- background-color: var(--tabs-trigger-color-current-foreground);
4189
+ height: var(--tabs-indicator-height-md);
4190
+ background-color: var(--tabs-indicator-color);
4143
4191
  border-bottom-left-radius: 1px;
4144
4192
  border-bottom-right-radius: 1px;
4145
4193
  border-top-left-radius: 3px;
@@ -4147,6 +4195,13 @@ body {
4147
4195
  z-index: 3;
4148
4196
  }
4149
4197
 
4198
+ .muka-tabs--size-sm .muka-tabs__trigger--current::after {
4199
+ height: var(--tabs-indicator-height-sm);
4200
+ }
4201
+ .muka-tabs--size-lg .muka-tabs__trigger--current::after {
4202
+ height: var(--tabs-indicator-height-lg);
4203
+ }
4204
+
4150
4205
  .muka-tabs__trigger--disabled {
4151
4206
  color: var(--tabs-trigger-color-disabled-foreground);
4152
4207
  cursor: not-allowed;
@@ -4157,18 +4212,29 @@ body {
4157
4212
  outline-offset: -2px;
4158
4213
  }
4159
4214
 
4160
- /* Icons */
4161
- .muka-tabs__icon {
4215
+ /* Label: Figma pads the label 8px either side, so with the 4px gap a leading
4216
+ item sits 12px from the text */
4217
+ .muka-tabs__label {
4218
+ padding: 0 var(--spacing-2);
4219
+ }
4220
+
4221
+ /* Leading item: icon, avatar, avatar group or data pie chart */
4222
+ .muka-tabs__leading {
4162
4223
  display: flex;
4163
4224
  align-items: center;
4164
4225
  justify-content: center;
4226
+ flex-shrink: 0;
4165
4227
  }
4166
4228
  .muka-tabs__trigger .muka-icon {
4167
4229
  color: inherit;
4168
4230
  }
4169
- .muka-tabs--size-sm .muka-tabs__icon svg { width: 16px; height: 16px; }
4170
- .muka-tabs--size-md .muka-tabs__icon svg { width: 20px; height: 20px; }
4171
- .muka-tabs--size-lg .muka-tabs__icon svg { width: 24px; height: 24px; }
4231
+ /* Icon sizes only: avatars and pie charts are sized through their size prop */
4232
+ .muka-tabs--size-sm .muka-tabs__leading > svg,
4233
+ .muka-tabs--size-sm .muka-tabs__leading > .muka-icon svg { width: 16px; height: 16px; }
4234
+ .muka-tabs--size-md .muka-tabs__leading > svg,
4235
+ .muka-tabs--size-md .muka-tabs__leading > .muka-icon svg { width: 20px; height: 20px; }
4236
+ .muka-tabs--size-lg .muka-tabs__leading > svg,
4237
+ .muka-tabs--size-lg .muka-tabs__leading > .muka-icon svg { width: 24px; height: 24px; }
4172
4238
 
4173
4239
  /* Responsive Scroll behavior on small screens */
4174
4240
  @media (max-width: 768px) {
@@ -10755,6 +10821,38 @@ li.muka-listitem {
10755
10821
  }
10756
10822
 
10757
10823
 
10824
+ /* DatePicker */
10825
+ /* DatePicker — compact native date field. */
10826
+ /* Field/label/helper styling is inherited from ../Input/Input.css. */
10827
+
10828
+ /* Adopt the field typography on the native date input. */
10829
+ .muka-datepicker__field .muka-input__native {
10830
+ font-family: var(--text-input-md-fontFamily);
10831
+ font-size: var(--text-input-md-fontSize);
10832
+ line-height: var(--text-input-md-lineHeight);
10833
+ }
10834
+
10835
+ .muka-datepicker__field--sm .muka-input__native {
10836
+ font-family: var(--text-input-sm-fontFamily);
10837
+ font-size: var(--text-input-sm-fontSize);
10838
+ line-height: var(--text-input-sm-lineHeight);
10839
+ }
10840
+
10841
+ /* Tint the browser calendar indicator to match the field foreground. */
10842
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
10843
+ cursor: pointer;
10844
+ opacity: 0.6;
10845
+ }
10846
+
10847
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
10848
+ opacity: 1;
10849
+ }
10850
+
10851
+ .muka-datepicker__field .muka-input__native:disabled {
10852
+ cursor: not-allowed;
10853
+ }
10854
+
10855
+
10758
10856
  /* Dialog */
10759
10857
  /* Dialog Component Styles */
10760
10858
 
@@ -11023,38 +11121,6 @@ li.muka-listitem {
11023
11121
  }
11024
11122
 
11025
11123
 
11026
- /* DatePicker */
11027
- /* DatePicker — compact native date field. */
11028
- /* Field/label/helper styling is inherited from ../Input/Input.css. */
11029
-
11030
- /* Adopt the field typography on the native date input. */
11031
- .muka-datepicker__field .muka-input__native {
11032
- font-family: var(--text-input-md-fontFamily);
11033
- font-size: var(--text-input-md-fontSize);
11034
- line-height: var(--text-input-md-lineHeight);
11035
- }
11036
-
11037
- .muka-datepicker__field--sm .muka-input__native {
11038
- font-family: var(--text-input-sm-fontFamily);
11039
- font-size: var(--text-input-sm-fontSize);
11040
- line-height: var(--text-input-sm-lineHeight);
11041
- }
11042
-
11043
- /* Tint the browser calendar indicator to match the field foreground. */
11044
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
11045
- cursor: pointer;
11046
- opacity: 0.6;
11047
- }
11048
-
11049
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
11050
- opacity: 1;
11051
- }
11052
-
11053
- .muka-datepicker__field .muka-input__native:disabled {
11054
- cursor: not-allowed;
11055
- }
11056
-
11057
-
11058
11124
  /* DataTable */
11059
11125
  /* DataTable Component Styles - Using Muka Design Tokens */
11060
11126
 
@@ -12372,17 +12438,139 @@ li.muka-listitem {
12372
12438
  }
12373
12439
 
12374
12440
 
12375
- /* Checkbox */
12376
- /* Checkbox Component Styles - Using Muka Design Tokens */
12441
+ /* ChatPhotoGrid */
12442
+ /* ChatPhotoGrid Component Styles */
12377
12443
 
12378
- /* Wrapper - clickable label container */
12379
- .muka-checkbox {
12380
- display: inline-flex;
12381
- align-items: center;
12382
- gap: var(--spacing-4);
12383
- cursor: pointer;
12384
- user-select: none;
12385
- }
12444
+ /*
12445
+ * The grid clips to its own radius and the tiles stay square, so only the four
12446
+ * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12447
+ */
12448
+ .muka-chat-photo-grid {
12449
+ display: grid;
12450
+ gap: var(--chatphotogrid-gap);
12451
+ width: 100%;
12452
+ min-width: 0;
12453
+ overflow: hidden;
12454
+ border-radius: var(--chatphotogrid-radius);
12455
+ }
12456
+
12457
+ /* ─── Tiles ────────────────────────────────────────────── */
12458
+
12459
+ .muka-chat-photo-grid__tile {
12460
+ position: relative;
12461
+ display: block;
12462
+ overflow: hidden;
12463
+ min-width: 0;
12464
+ padding: 0;
12465
+ margin: 0;
12466
+ border: none;
12467
+ background-color: var(--chatphotogrid-color-placeholder);
12468
+ aspect-ratio: 1 / 1;
12469
+ }
12470
+
12471
+ button.muka-chat-photo-grid__tile {
12472
+ cursor: pointer;
12473
+ appearance: none;
12474
+ }
12475
+
12476
+ button.muka-chat-photo-grid__tile:focus-visible {
12477
+ outline: var(--border-width-bold) solid var(--color-border-focus);
12478
+ /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12479
+ outline-offset: calc(-1 * var(--border-width-bold));
12480
+ }
12481
+
12482
+ .muka-chat-photo-grid__image {
12483
+ display: block;
12484
+ width: 100%;
12485
+ height: 100%;
12486
+ object-fit: cover;
12487
+ }
12488
+
12489
+ /* ─── Overflow tile ────────────────────────────────────── */
12490
+
12491
+ .muka-chat-photo-grid__overflow {
12492
+ position: absolute;
12493
+ inset: 0;
12494
+ display: flex;
12495
+ align-items: center;
12496
+ justify-content: center;
12497
+ background-color: var(--chatphotogrid-color-overflow-background);
12498
+ color: var(--chatphotogrid-color-overflow-foreground);
12499
+ font-family: var(--text-body-2xl-regular-fontFamily);
12500
+ font-weight: var(--text-body-2xl-regular-fontWeight);
12501
+ font-size: var(--text-body-2xl-regular-fontSize);
12502
+ line-height: var(--text-body-2xl-regular-lineHeight);
12503
+ }
12504
+
12505
+ /* ─── Layouts ──────────────────────────────────────────── */
12506
+
12507
+ .muka-chat-photo-grid--1 {
12508
+ grid-template-columns: 1fr;
12509
+ }
12510
+
12511
+ .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12512
+ aspect-ratio: 4 / 3;
12513
+ }
12514
+
12515
+ .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12516
+ aspect-ratio: 3 / 4;
12517
+ }
12518
+
12519
+ .muka-chat-photo-grid--2 {
12520
+ grid-template-columns: repeat(2, 1fr);
12521
+ }
12522
+
12523
+ .muka-chat-photo-grid--3 {
12524
+ grid-template-columns: repeat(3, 1fr);
12525
+ }
12526
+
12527
+ .muka-chat-photo-grid--4 {
12528
+ grid-template-columns: repeat(2, 1fr);
12529
+ }
12530
+
12531
+ /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12532
+ .muka-chat-photo-grid--5 {
12533
+ grid-template-columns: repeat(6, 1fr);
12534
+ }
12535
+
12536
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12537
+ grid-column: span 3;
12538
+ }
12539
+
12540
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12541
+ grid-column: span 2;
12542
+ }
12543
+
12544
+ .muka-chat-photo-grid--6,
12545
+ .muka-chat-photo-grid--overflow {
12546
+ grid-template-columns: repeat(3, 1fr);
12547
+ }
12548
+
12549
+ /* ─── Print ────────────────────────────────────────────── */
12550
+
12551
+ @media print {
12552
+ .muka-chat-photo-grid {
12553
+ break-inside: avoid;
12554
+ }
12555
+
12556
+ .muka-chat-photo-grid__image {
12557
+ print-color-adjust: exact;
12558
+ -webkit-print-color-adjust: exact;
12559
+ }
12560
+ }
12561
+
12562
+
12563
+ /* Checkbox */
12564
+ /* Checkbox Component Styles - Using Muka Design Tokens */
12565
+
12566
+ /* Wrapper - clickable label container */
12567
+ .muka-checkbox {
12568
+ display: inline-flex;
12569
+ align-items: center;
12570
+ gap: var(--spacing-4);
12571
+ cursor: pointer;
12572
+ user-select: none;
12573
+ }
12386
12574
 
12387
12575
  .muka-checkbox--disabled {
12388
12576
  cursor: not-allowed;
@@ -12539,128 +12727,6 @@ li.muka-listitem {
12539
12727
  }
12540
12728
 
12541
12729
 
12542
- /* ChatPhotoGrid */
12543
- /* ChatPhotoGrid Component Styles */
12544
-
12545
- /*
12546
- * The grid clips to its own radius and the tiles stay square, so only the four
12547
- * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12548
- */
12549
- .muka-chat-photo-grid {
12550
- display: grid;
12551
- gap: var(--chatphotogrid-gap);
12552
- width: 100%;
12553
- min-width: 0;
12554
- overflow: hidden;
12555
- border-radius: var(--chatphotogrid-radius);
12556
- }
12557
-
12558
- /* ─── Tiles ────────────────────────────────────────────── */
12559
-
12560
- .muka-chat-photo-grid__tile {
12561
- position: relative;
12562
- display: block;
12563
- overflow: hidden;
12564
- min-width: 0;
12565
- padding: 0;
12566
- margin: 0;
12567
- border: none;
12568
- background-color: var(--chatphotogrid-color-placeholder);
12569
- aspect-ratio: 1 / 1;
12570
- }
12571
-
12572
- button.muka-chat-photo-grid__tile {
12573
- cursor: pointer;
12574
- appearance: none;
12575
- }
12576
-
12577
- button.muka-chat-photo-grid__tile:focus-visible {
12578
- outline: var(--border-width-bold) solid var(--color-border-focus);
12579
- /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12580
- outline-offset: calc(-1 * var(--border-width-bold));
12581
- }
12582
-
12583
- .muka-chat-photo-grid__image {
12584
- display: block;
12585
- width: 100%;
12586
- height: 100%;
12587
- object-fit: cover;
12588
- }
12589
-
12590
- /* ─── Overflow tile ────────────────────────────────────── */
12591
-
12592
- .muka-chat-photo-grid__overflow {
12593
- position: absolute;
12594
- inset: 0;
12595
- display: flex;
12596
- align-items: center;
12597
- justify-content: center;
12598
- background-color: var(--chatphotogrid-color-overflow-background);
12599
- color: var(--chatphotogrid-color-overflow-foreground);
12600
- font-family: var(--text-body-2xl-regular-fontFamily);
12601
- font-weight: var(--text-body-2xl-regular-fontWeight);
12602
- font-size: var(--text-body-2xl-regular-fontSize);
12603
- line-height: var(--text-body-2xl-regular-lineHeight);
12604
- }
12605
-
12606
- /* ─── Layouts ──────────────────────────────────────────── */
12607
-
12608
- .muka-chat-photo-grid--1 {
12609
- grid-template-columns: 1fr;
12610
- }
12611
-
12612
- .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12613
- aspect-ratio: 4 / 3;
12614
- }
12615
-
12616
- .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12617
- aspect-ratio: 3 / 4;
12618
- }
12619
-
12620
- .muka-chat-photo-grid--2 {
12621
- grid-template-columns: repeat(2, 1fr);
12622
- }
12623
-
12624
- .muka-chat-photo-grid--3 {
12625
- grid-template-columns: repeat(3, 1fr);
12626
- }
12627
-
12628
- .muka-chat-photo-grid--4 {
12629
- grid-template-columns: repeat(2, 1fr);
12630
- }
12631
-
12632
- /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12633
- .muka-chat-photo-grid--5 {
12634
- grid-template-columns: repeat(6, 1fr);
12635
- }
12636
-
12637
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12638
- grid-column: span 3;
12639
- }
12640
-
12641
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12642
- grid-column: span 2;
12643
- }
12644
-
12645
- .muka-chat-photo-grid--6,
12646
- .muka-chat-photo-grid--overflow {
12647
- grid-template-columns: repeat(3, 1fr);
12648
- }
12649
-
12650
- /* ─── Print ────────────────────────────────────────────── */
12651
-
12652
- @media print {
12653
- .muka-chat-photo-grid {
12654
- break-inside: avoid;
12655
- }
12656
-
12657
- .muka-chat-photo-grid__image {
12658
- print-color-adjust: exact;
12659
- -webkit-print-color-adjust: exact;
12660
- }
12661
- }
12662
-
12663
-
12664
12730
  /* ChatMessageStack */
12665
12731
  /* ChatMessageStack Component Styles */
12666
12732
 
@@ -13603,10 +13669,43 @@ button.muka-chat-photo-grid__tile:focus-visible {
13603
13669
  opacity: 1; /* Remove opacity since we have proper disabled tokens */
13604
13670
  }
13605
13671
 
13606
- /* Secondary variant - supporting actions, no border, only bottom inner shadow */
13607
- .muka-button--secondary {
13608
- background-color: var(--button-color-secondary-background-default);
13609
- color: var(--button-color-secondary-foreground-default);
13672
+ /* Destructive variant - primary's structure on the solid error fill, for
13673
+ irreversible actions. Hover and pressed step away from the label color, so
13674
+ contrast never drops (darker in light themes, lighter in dark themes).
13675
+ Disabled is neutral grey rather than primary's brand-tinted fill. */
13676
+ .muka-button--destructive {
13677
+ background-color: var(--button-color-destructive-background-default);
13678
+ color: var(--button-color-destructive-foreground-default);
13679
+ box-shadow: var(--button-color-destructive-shadow-default);
13680
+ }
13681
+
13682
+ .muka-button--destructive:hover:not(:disabled) {
13683
+ background-color: var(--button-color-destructive-background-hover);
13684
+ color: var(--button-color-destructive-foreground-hover);
13685
+ box-shadow: var(--button-color-destructive-shadow-hover);
13686
+ }
13687
+
13688
+ .muka-button--destructive:active:not(:disabled),
13689
+ .muka-button--destructive.muka-button--pressed:not(:disabled),
13690
+ .muka-button--destructive[data-state="open"]:not(:disabled),
13691
+ .muka-button--destructive[aria-pressed="true"]:not(:disabled) {
13692
+ background-color: var(--button-color-destructive-background-pressed);
13693
+ color: var(--button-color-destructive-foreground-pressed);
13694
+ box-shadow: var(--button-color-destructive-shadow-pressed);
13695
+ }
13696
+
13697
+ .muka-button--destructive:disabled {
13698
+ background-color: var(--button-color-destructive-background-disabled);
13699
+ color: var(--button-color-destructive-foreground-disabled);
13700
+ box-shadow: var(--button-color-destructive-shadow-disabled);
13701
+ cursor: not-allowed;
13702
+ opacity: 1;
13703
+ }
13704
+
13705
+ /* Secondary variant - supporting actions, no border, only bottom inner shadow */
13706
+ .muka-button--secondary {
13707
+ background-color: var(--button-color-secondary-background-default);
13708
+ color: var(--button-color-secondary-foreground-default);
13610
13709
  box-shadow: var(--button-color-secondary-shadow-default);
13611
13710
  }
13612
13711
 
@@ -13913,6 +14012,114 @@ button.muka-chat-photo-grid__tile:focus-visible {
13913
14012
  }
13914
14013
 
13915
14014
 
14015
+ /* BadgeNumber */
14016
+ /* BadgeNumber Component Styles - Using Muka Design Tokens */
14017
+
14018
+ .muka-badge-number {
14019
+ display: inline-flex;
14020
+ align-items: center;
14021
+ justify-content: center;
14022
+ border-radius: var(--border-radius-full);
14023
+ white-space: nowrap;
14024
+ user-select: none;
14025
+ box-sizing: border-box;
14026
+ }
14027
+
14028
+ /*
14029
+ * Sizes — fixed height, matching min-width (so a single digit renders as a
14030
+ * circle), horizontal padding, and bold label typography. Vertical centering
14031
+ * is handled by the fixed height + align-items: center.
14032
+ */
14033
+ .muka-badge-number--2xs {
14034
+ height: var(--badge-number-size-2xs);
14035
+ min-width: var(--badge-number-size-2xs);
14036
+ padding: 0 var(--badge-number-padding-2xs);
14037
+ font-family: var(--text-label-xs-bold-fontFamily);
14038
+ font-weight: var(--text-label-xs-bold-fontWeight);
14039
+ font-size: var(--text-label-xs-bold-fontSize);
14040
+ line-height: var(--text-label-xs-bold-lineHeight);
14041
+ }
14042
+
14043
+ .muka-badge-number--xs {
14044
+ height: var(--badge-number-size-xs);
14045
+ min-width: var(--badge-number-size-xs);
14046
+ padding: 0 var(--badge-number-padding-xs);
14047
+ font-family: var(--text-label-sm-bold-fontFamily);
14048
+ font-weight: var(--text-label-sm-bold-fontWeight);
14049
+ font-size: var(--text-label-sm-bold-fontSize);
14050
+ line-height: var(--text-label-sm-bold-lineHeight);
14051
+ }
14052
+
14053
+ .muka-badge-number--sm {
14054
+ height: var(--badge-number-size-sm);
14055
+ min-width: var(--badge-number-size-sm);
14056
+ padding: 0 var(--badge-number-padding-sm);
14057
+ font-family: var(--text-label-md-bold-fontFamily);
14058
+ font-weight: var(--text-label-md-bold-fontWeight);
14059
+ font-size: var(--text-label-md-bold-fontSize);
14060
+ line-height: var(--text-label-md-bold-lineHeight);
14061
+ }
14062
+
14063
+ .muka-badge-number--md {
14064
+ height: var(--badge-number-size-md);
14065
+ min-width: var(--badge-number-size-md);
14066
+ padding: 0 var(--badge-number-padding-md);
14067
+ font-family: var(--text-label-lg-bold-fontFamily);
14068
+ font-weight: var(--text-label-lg-bold-fontWeight);
14069
+ font-size: var(--text-label-lg-bold-fontSize);
14070
+ line-height: var(--text-label-lg-bold-lineHeight);
14071
+ }
14072
+
14073
+ .muka-badge-number--lg {
14074
+ height: var(--badge-number-size-lg);
14075
+ min-width: var(--badge-number-size-lg);
14076
+ padding: 0 var(--badge-number-padding-lg);
14077
+ font-family: var(--text-label-2xl-bold-fontFamily);
14078
+ font-weight: var(--text-label-2xl-bold-fontWeight);
14079
+ font-size: var(--text-label-2xl-bold-fontSize);
14080
+ line-height: var(--text-label-2xl-bold-lineHeight);
14081
+ }
14082
+
14083
+ .muka-badge-number__label {
14084
+ /*
14085
+ * The badge sets a tight line-height for compact sizing, which would clip
14086
+ * glyph descenders; give the label a roomier line-height. Vertical centering
14087
+ * is unaffected because the badge height is fixed and content is centered.
14088
+ */
14089
+ line-height: normal;
14090
+ }
14091
+
14092
+ /* Neutral variant */
14093
+ .muka-badge-number--neutral {
14094
+ background-color: var(--color-surface-level1);
14095
+ color: var(--color-text-default-default);
14096
+ }
14097
+
14098
+ /* Info variant */
14099
+ .muka-badge-number--info {
14100
+ background-color: var(--color-state-info-contrast);
14101
+ color: var(--color-text-default-inverse);
14102
+ }
14103
+
14104
+ /* Success variant */
14105
+ .muka-badge-number--success {
14106
+ background-color: var(--color-state-success-contrast);
14107
+ color: var(--color-text-default-inverse);
14108
+ }
14109
+
14110
+ /* Warning variant */
14111
+ .muka-badge-number--warning {
14112
+ background-color: var(--color-state-warning-contrast);
14113
+ color: var(--color-text-default-inverse);
14114
+ }
14115
+
14116
+ /* Error variant */
14117
+ .muka-badge-number--error {
14118
+ background-color: var(--color-state-error-contrast);
14119
+ color: var(--color-text-default-inverse);
14120
+ }
14121
+
14122
+
13916
14123
  /* BottomBar */
13917
14124
  /* BottomBar Component Styles */
13918
14125
 
@@ -14229,114 +14436,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
14229
14436
  }
14230
14437
 
14231
14438
 
14232
- /* BadgeNumber */
14233
- /* BadgeNumber Component Styles - Using Muka Design Tokens */
14234
-
14235
- .muka-badge-number {
14236
- display: inline-flex;
14237
- align-items: center;
14238
- justify-content: center;
14239
- border-radius: var(--border-radius-full);
14240
- white-space: nowrap;
14241
- user-select: none;
14242
- box-sizing: border-box;
14243
- }
14244
-
14245
- /*
14246
- * Sizes — fixed height, matching min-width (so a single digit renders as a
14247
- * circle), horizontal padding, and bold label typography. Vertical centering
14248
- * is handled by the fixed height + align-items: center.
14249
- */
14250
- .muka-badge-number--2xs {
14251
- height: var(--badge-number-size-2xs);
14252
- min-width: var(--badge-number-size-2xs);
14253
- padding: 0 var(--badge-number-padding-2xs);
14254
- font-family: var(--text-label-xs-bold-fontFamily);
14255
- font-weight: var(--text-label-xs-bold-fontWeight);
14256
- font-size: var(--text-label-xs-bold-fontSize);
14257
- line-height: var(--text-label-xs-bold-lineHeight);
14258
- }
14259
-
14260
- .muka-badge-number--xs {
14261
- height: var(--badge-number-size-xs);
14262
- min-width: var(--badge-number-size-xs);
14263
- padding: 0 var(--badge-number-padding-xs);
14264
- font-family: var(--text-label-sm-bold-fontFamily);
14265
- font-weight: var(--text-label-sm-bold-fontWeight);
14266
- font-size: var(--text-label-sm-bold-fontSize);
14267
- line-height: var(--text-label-sm-bold-lineHeight);
14268
- }
14269
-
14270
- .muka-badge-number--sm {
14271
- height: var(--badge-number-size-sm);
14272
- min-width: var(--badge-number-size-sm);
14273
- padding: 0 var(--badge-number-padding-sm);
14274
- font-family: var(--text-label-md-bold-fontFamily);
14275
- font-weight: var(--text-label-md-bold-fontWeight);
14276
- font-size: var(--text-label-md-bold-fontSize);
14277
- line-height: var(--text-label-md-bold-lineHeight);
14278
- }
14279
-
14280
- .muka-badge-number--md {
14281
- height: var(--badge-number-size-md);
14282
- min-width: var(--badge-number-size-md);
14283
- padding: 0 var(--badge-number-padding-md);
14284
- font-family: var(--text-label-lg-bold-fontFamily);
14285
- font-weight: var(--text-label-lg-bold-fontWeight);
14286
- font-size: var(--text-label-lg-bold-fontSize);
14287
- line-height: var(--text-label-lg-bold-lineHeight);
14288
- }
14289
-
14290
- .muka-badge-number--lg {
14291
- height: var(--badge-number-size-lg);
14292
- min-width: var(--badge-number-size-lg);
14293
- padding: 0 var(--badge-number-padding-lg);
14294
- font-family: var(--text-label-2xl-bold-fontFamily);
14295
- font-weight: var(--text-label-2xl-bold-fontWeight);
14296
- font-size: var(--text-label-2xl-bold-fontSize);
14297
- line-height: var(--text-label-2xl-bold-lineHeight);
14298
- }
14299
-
14300
- .muka-badge-number__label {
14301
- /*
14302
- * The badge sets a tight line-height for compact sizing, which would clip
14303
- * glyph descenders; give the label a roomier line-height. Vertical centering
14304
- * is unaffected because the badge height is fixed and content is centered.
14305
- */
14306
- line-height: normal;
14307
- }
14308
-
14309
- /* Neutral variant */
14310
- .muka-badge-number--neutral {
14311
- background-color: var(--color-surface-level1);
14312
- color: var(--color-text-default-default);
14313
- }
14314
-
14315
- /* Info variant */
14316
- .muka-badge-number--info {
14317
- background-color: var(--color-state-info-contrast);
14318
- color: var(--color-text-default-inverse);
14319
- }
14320
-
14321
- /* Success variant */
14322
- .muka-badge-number--success {
14323
- background-color: var(--color-state-success-contrast);
14324
- color: var(--color-text-default-inverse);
14325
- }
14326
-
14327
- /* Warning variant */
14328
- .muka-badge-number--warning {
14329
- background-color: var(--color-state-warning-contrast);
14330
- color: var(--color-text-default-inverse);
14331
- }
14332
-
14333
- /* Error variant */
14334
- .muka-badge-number--error {
14335
- background-color: var(--color-state-error-contrast);
14336
- color: var(--color-text-default-inverse);
14337
- }
14338
-
14339
-
14340
14439
  /* Badge */
14341
14440
  /* Badge Component Styles - Using Muka Design Tokens */
14342
14441
 
@@ -14536,12 +14635,29 @@ button.muka-chat-photo-grid__tile:focus-visible {
14536
14635
  vertical-align: middle;
14537
14636
  background-color: var(--avatar-color-background-default);
14538
14637
  color: var(--avatar-color-foreground-default);
14539
- border: var(--avatar-border-width) solid var(--avatar-color-border-default);
14540
14638
  font-family: var(--alias-font-brand-family);
14541
14639
  font-weight: var(--alias-font-brand-weight-semibold);
14542
14640
  }
14543
14641
 
14544
14642
  /* Size variants */
14643
+ .muka-avatar--4xs {
14644
+ width: var(--avatar-size-4xs);
14645
+ height: var(--avatar-size-4xs);
14646
+ font-size: var(--avatar-font-size-3xs); /* only used by an AvatarGroup "+N" */
14647
+ }
14648
+
14649
+ .muka-avatar--3xs {
14650
+ width: var(--avatar-size-3xs);
14651
+ height: var(--avatar-size-3xs);
14652
+ font-size: var(--avatar-font-size-3xs);
14653
+ }
14654
+
14655
+ .muka-avatar--2xs {
14656
+ width: var(--avatar-size-2xs);
14657
+ height: var(--avatar-size-2xs);
14658
+ font-size: var(--avatar-font-size-2xs);
14659
+ }
14660
+
14545
14661
  .muka-avatar--xs {
14546
14662
  width: var(--avatar-size-xs);
14547
14663
  height: var(--avatar-size-xs);
@@ -14581,6 +14697,20 @@ button.muka-chat-photo-grid__tile:focus-visible {
14581
14697
  border-radius: var(--avatar-radius-square);
14582
14698
  }
14583
14699
 
14700
+ .muka-avatar--square.muka-avatar--4xs,
14701
+ .muka-avatar--square.muka-avatar--3xs,
14702
+ .muka-avatar--square.muka-avatar--2xs {
14703
+ border-radius: var(--avatar-radius-square-sm);
14704
+ }
14705
+
14706
+ /* 4xs is too small for initials, the fallback icon or a status dot:
14707
+ it shows the picture, or the plain background */
14708
+ .muka-avatar--4xs .muka-avatar__initials,
14709
+ .muka-avatar--4xs .muka-avatar__fallback,
14710
+ .muka-avatar--4xs .muka-avatar__status {
14711
+ display: none;
14712
+ }
14713
+
14584
14714
  /* Clickable state */
14585
14715
  .muka-avatar--clickable {
14586
14716
  cursor: pointer;
@@ -14684,6 +14814,16 @@ button.muka-chat-photo-grid__tile:focus-visible {
14684
14814
  box-sizing: border-box;
14685
14815
  }
14686
14816
 
14817
+ .muka-avatar--3xs .muka-avatar__status {
14818
+ width: var(--avatar-status-size-3xs);
14819
+ height: var(--avatar-status-size-3xs);
14820
+ }
14821
+
14822
+ .muka-avatar--2xs .muka-avatar__status {
14823
+ width: var(--avatar-status-size-2xs);
14824
+ height: var(--avatar-status-size-2xs);
14825
+ }
14826
+
14687
14827
  .muka-avatar--xs .muka-avatar__status {
14688
14828
  width: var(--avatar-status-size-xs);
14689
14829
  height: var(--avatar-status-size-xs);
@@ -14737,44 +14877,17 @@ button.muka-chat-photo-grid__tile:focus-visible {
14737
14877
  background-color: var(--avatar-color-status-away);
14738
14878
  }
14739
14879
 
14740
- /* Avatar Group */
14880
+ /* Avatar Group (Figma "Avatar Stack") */
14741
14881
  .muka-avatar-group {
14742
14882
  display: inline-flex;
14743
14883
  align-items: center;
14744
14884
  flex-direction: row;
14745
14885
  }
14746
14886
 
14887
+ /* Later avatars sit on top of earlier ones (DOM order); a hovered one comes to the front */
14747
14888
  .muka-avatar-group__item {
14748
14889
  position: relative;
14749
14890
  display: inline-flex;
14750
- border: 2px solid var(--color-surface-level1);
14751
- border-radius: inherit;
14752
- }
14753
-
14754
- /* Add border radius to match avatar shape */
14755
- .muka-avatar-group__item .muka-avatar--circle {
14756
- border-radius: var(--avatar-radius-circle);
14757
- }
14758
-
14759
- .muka-avatar-group__item .muka-avatar--square {
14760
- border-radius: var(--avatar-radius-square);
14761
- }
14762
-
14763
- .muka-avatar-group__item .muka-avatar {
14764
- border: none;
14765
- }
14766
-
14767
- /* Spacing variants for avatar group */
14768
- .muka-avatar-group--tight .muka-avatar-group__item:not(:first-child) {
14769
- margin-left: calc(var(--avatar-group-spacing-tight));
14770
- }
14771
-
14772
- .muka-avatar-group--normal .muka-avatar-group__item:not(:first-child) {
14773
- margin-left: calc(var(--avatar-group-spacing-normal));
14774
- }
14775
-
14776
- /* Z-index stacking for overlap effect */
14777
- .muka-avatar-group__item {
14778
14891
  z-index: 0;
14779
14892
  }
14780
14893
 
@@ -14782,6 +14895,41 @@ button.muka-chat-photo-grid__tile:focus-visible {
14782
14895
  z-index: 10;
14783
14896
  }
14784
14897
 
14898
+ /* Grouped avatars get a ring outside their edge, drawn as a shadow so it
14899
+ does not change the avatar's size or the overlap */
14900
+ .muka-avatar-group__item .muka-avatar {
14901
+ box-shadow: 0 0 0 var(--avatar-group-ring-width) var(--avatar-group-ring-color);
14902
+ }
14903
+
14904
+ /* Overlap. Figma specifies exact values for 48 / 32 / 24px avatars (sm / 2xs / 3xs);
14905
+ other sizes use the same proportions: tight 2/3, compact 1/2, spacious 1/3. */
14906
+ .muka-avatar-group--4xs { --muka-avatar-group-size: var(--avatar-size-4xs); }
14907
+ .muka-avatar-group--3xs { --muka-avatar-group-size: var(--avatar-size-3xs); }
14908
+ .muka-avatar-group--2xs { --muka-avatar-group-size: var(--avatar-size-2xs); }
14909
+ .muka-avatar-group--xs { --muka-avatar-group-size: var(--avatar-size-xs); }
14910
+ .muka-avatar-group--sm { --muka-avatar-group-size: var(--avatar-size-sm); }
14911
+ .muka-avatar-group--md { --muka-avatar-group-size: var(--avatar-size-md); }
14912
+ .muka-avatar-group--lg { --muka-avatar-group-size: var(--avatar-size-lg); }
14913
+ .muka-avatar-group--xl { --muka-avatar-group-size: var(--avatar-size-xl); }
14914
+
14915
+ .muka-avatar-group--tight { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) * 2 / 3); }
14916
+ .muka-avatar-group--compact { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) / 2); }
14917
+ .muka-avatar-group--spacious { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) / 3); }
14918
+
14919
+ .muka-avatar-group--tight.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-sm); }
14920
+ .muka-avatar-group--tight.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-2xs); }
14921
+ .muka-avatar-group--tight.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-3xs); }
14922
+ .muka-avatar-group--compact.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-sm); }
14923
+ .muka-avatar-group--compact.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-2xs); }
14924
+ .muka-avatar-group--compact.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-3xs); }
14925
+ .muka-avatar-group--spacious.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-sm); }
14926
+ .muka-avatar-group--spacious.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-2xs); }
14927
+ .muka-avatar-group--spacious.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-3xs); }
14928
+
14929
+ .muka-avatar-group__item:not(:first-child) {
14930
+ margin-left: calc(-1 * var(--muka-avatar-group-overlap));
14931
+ }
14932
+
14785
14933
  /* Overflow avatar styling */
14786
14934
  .muka-avatar--overflow {
14787
14935
  background-color: var(--avatar-color-background-default);