@revikornmann/muka-ui 0.22.0 → 0.23.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 (53) hide show
  1. package/dist/cjs/components/Icon/iconRegistry.js +2 -2
  2. package/dist/cjs/components/Icon/iconRegistry.js.map +1 -1
  3. package/dist/cjs/components/Input/Input.css +11 -4
  4. package/dist/cjs/components/Input/Input.js +13 -5
  5. package/dist/cjs/components/Input/Input.js.map +1 -1
  6. package/dist/cjs/components/SocialSignInButton/SocialSignInButton.css +147 -0
  7. package/dist/cjs/components/SocialSignInButton/SocialSignInButton.js +43 -0
  8. package/dist/cjs/components/SocialSignInButton/SocialSignInButton.js.map +1 -0
  9. package/dist/cjs/components/SocialSignInButton/icons/AppleLogo.js +11 -0
  10. package/dist/cjs/components/SocialSignInButton/icons/AppleLogo.js.map +1 -0
  11. package/dist/cjs/components/SocialSignInButton/icons/GoogleLogo.js +12 -0
  12. package/dist/cjs/components/SocialSignInButton/icons/GoogleLogo.js.map +1 -0
  13. package/dist/cjs/components/SocialSignInButton/index.js +11 -0
  14. package/dist/cjs/components/SocialSignInButton/index.js.map +1 -0
  15. package/dist/cjs/components/index.js +3 -1
  16. package/dist/cjs/components/index.js.map +1 -1
  17. package/dist/esm/components/Icon/iconRegistry.js +2 -2
  18. package/dist/esm/components/Icon/iconRegistry.js.map +1 -1
  19. package/dist/esm/components/Input/Input.css +11 -4
  20. package/dist/esm/components/Input/Input.js +13 -5
  21. package/dist/esm/components/Input/Input.js.map +1 -1
  22. package/dist/esm/components/SocialSignInButton/SocialSignInButton.css +147 -0
  23. package/dist/esm/components/SocialSignInButton/SocialSignInButton.js +40 -0
  24. package/dist/esm/components/SocialSignInButton/SocialSignInButton.js.map +1 -0
  25. package/dist/esm/components/SocialSignInButton/icons/AppleLogo.js +7 -0
  26. package/dist/esm/components/SocialSignInButton/icons/AppleLogo.js.map +1 -0
  27. package/dist/esm/components/SocialSignInButton/icons/GoogleLogo.js +8 -0
  28. package/dist/esm/components/SocialSignInButton/icons/GoogleLogo.js.map +1 -0
  29. package/dist/esm/components/SocialSignInButton/index.js +3 -0
  30. package/dist/esm/components/SocialSignInButton/index.js.map +1 -0
  31. package/dist/esm/components/index.js +1 -0
  32. package/dist/esm/components/index.js.map +1 -1
  33. package/dist/styles/components/Input.css +11 -4
  34. package/dist/styles/components/SocialSignInButton.css +147 -0
  35. package/dist/styles/index.css +949 -792
  36. package/dist/styles/muka-dark.css +949 -792
  37. package/dist/styles/muka-light.css +949 -792
  38. package/dist/styles/wireframe-dark.css +949 -792
  39. package/dist/styles/wireframe-light.css +949 -792
  40. package/dist/types/components/Icon/iconRegistry.d.ts +2 -2
  41. package/dist/types/components/Input/Input.d.ts +5 -0
  42. package/dist/types/components/Input/Input.d.ts.map +1 -1
  43. package/dist/types/components/SocialSignInButton/SocialSignInButton.d.ts +41 -0
  44. package/dist/types/components/SocialSignInButton/SocialSignInButton.d.ts.map +1 -0
  45. package/dist/types/components/SocialSignInButton/icons/AppleLogo.d.ts +9 -0
  46. package/dist/types/components/SocialSignInButton/icons/AppleLogo.d.ts.map +1 -0
  47. package/dist/types/components/SocialSignInButton/icons/GoogleLogo.d.ts +10 -0
  48. package/dist/types/components/SocialSignInButton/icons/GoogleLogo.d.ts.map +1 -0
  49. package/dist/types/components/SocialSignInButton/index.d.ts +3 -0
  50. package/dist/types/components/SocialSignInButton/index.d.ts.map +1 -0
  51. package/dist/types/components/index.d.ts +1 -0
  52. package/dist/types/components/index.d.ts.map +1 -1
  53. package/package.json +1 -1
@@ -4834,6 +4834,156 @@ body {
4834
4834
  }
4835
4835
 
4836
4836
 
4837
+ /* SocialSignInButton */
4838
+ /*
4839
+ * SocialSignInButton lockup colors are provider-mandated (Apple HIG /
4840
+ * Google Identity branding) and intentionally fixed across Muka brands —
4841
+ * same exception pattern as LicensePlateInput regulatory colors.
4842
+ *
4843
+ * Apple: https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple
4844
+ * Google: https://developers.google.com/identity/branding-guidelines
4845
+ */
4846
+ .muka-social-sign-in-button {
4847
+ --ssi-white: #ffffff;
4848
+ --ssi-black: #000000;
4849
+ --ssi-google-text-light: #1f1f1f;
4850
+
4851
+ display: inline-flex;
4852
+ align-items: center;
4853
+ justify-content: center;
4854
+
4855
+ /* Provider lockup type — matches Figma / HIG, not brand font tokens.
4856
+ * SF Pro Text is OS-provided on Apple platforms (not redistributable).
4857
+ * Google Sans is not freely shippable; Roboto is the closest system fallback. */
4858
+ font-family: inherit;
4859
+ font-weight: 600;
4860
+ text-decoration: none;
4861
+ white-space: nowrap;
4862
+
4863
+ border: 1px solid transparent;
4864
+ cursor: pointer;
4865
+ user-select: none;
4866
+ transition: opacity 0.15s ease, filter 0.15s ease;
4867
+
4868
+ outline: none;
4869
+ position: relative;
4870
+ box-sizing: border-box;
4871
+ }
4872
+
4873
+ .muka-social-sign-in-button--apple {
4874
+ font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
4875
+ Helvetica, Arial, sans-serif;
4876
+ font-weight: 600;
4877
+ }
4878
+
4879
+ .muka-social-sign-in-button--google {
4880
+ font-family: 'Google Sans', Roboto, 'Helvetica Neue', Arial, sans-serif;
4881
+ font-weight: 500;
4882
+ }
4883
+
4884
+ .muka-social-sign-in-button:focus-visible {
4885
+ outline: 2px solid var(--color-border-focus);
4886
+ outline-offset: 2px;
4887
+ }
4888
+
4889
+ /* Sizes — heights align with Button md/lg */
4890
+ .muka-social-sign-in-button--md {
4891
+ padding: 0 var(--button-padding-md-x);
4892
+ border-radius: var(--button-radius-md);
4893
+ font-size: var(--text-label-sm-semibold-fontSize);
4894
+ line-height: var(--text-label-sm-semibold-lineHeight);
4895
+ min-height: 40px;
4896
+ min-width: 240px;
4897
+ }
4898
+
4899
+ .muka-social-sign-in-button--md .muka-social-sign-in-button__label {
4900
+ padding: 0 var(--button-gap-md);
4901
+ }
4902
+
4903
+ .muka-social-sign-in-button--md .muka-social-sign-in-button__icon {
4904
+ width: var(--button-icon-md);
4905
+ height: var(--button-icon-md);
4906
+ }
4907
+
4908
+ .muka-social-sign-in-button--lg {
4909
+ padding: 0 var(--button-padding-lg-x);
4910
+ border-radius: var(--button-radius-lg);
4911
+ font-size: var(--text-label-lg-semibold-fontSize);
4912
+ line-height: var(--text-label-lg-semibold-lineHeight);
4913
+ min-height: 48px;
4914
+ min-width: 280px;
4915
+ }
4916
+
4917
+ .muka-social-sign-in-button--lg .muka-social-sign-in-button__label {
4918
+ padding: 0 var(--button-gap-lg);
4919
+ }
4920
+
4921
+ .muka-social-sign-in-button--lg .muka-social-sign-in-button__icon {
4922
+ width: var(--button-icon-lg);
4923
+ height: var(--button-icon-lg);
4924
+ }
4925
+
4926
+ /* White lockup — for dark surfaces (Apple White with Outline) */
4927
+ .muka-social-sign-in-button--white {
4928
+ background-color: var(--ssi-white);
4929
+ color: var(--ssi-black);
4930
+ border-color: var(--ssi-black);
4931
+ }
4932
+
4933
+ .muka-social-sign-in-button--white.muka-social-sign-in-button--google {
4934
+ color: var(--ssi-google-text-light);
4935
+ }
4936
+
4937
+ /* Black lockup — for light surfaces */
4938
+ .muka-social-sign-in-button--black {
4939
+ background-color: var(--ssi-black);
4940
+ color: var(--ssi-white);
4941
+ border-color: transparent;
4942
+ }
4943
+
4944
+ /* Interaction — luminance/opacity only; no brand tint */
4945
+ .muka-social-sign-in-button:hover:not(:disabled) {
4946
+ filter: brightness(0.92);
4947
+ }
4948
+
4949
+ .muka-social-sign-in-button:active:not(:disabled) {
4950
+ filter: brightness(0.85);
4951
+ }
4952
+
4953
+ .muka-social-sign-in-button:disabled,
4954
+ .muka-social-sign-in-button--disabled {
4955
+ cursor: not-allowed;
4956
+ opacity: 0.4;
4957
+ pointer-events: none;
4958
+ filter: none;
4959
+ }
4960
+
4961
+ .muka-social-sign-in-button--full-width {
4962
+ width: 100%;
4963
+ min-width: 0;
4964
+ }
4965
+
4966
+ .muka-social-sign-in-button__icon {
4967
+ display: inline-flex;
4968
+ align-items: center;
4969
+ justify-content: center;
4970
+ flex-shrink: 0;
4971
+ }
4972
+
4973
+ .muka-social-sign-in-button__icon > *,
4974
+ .muka-social-sign-in-button__icon svg {
4975
+ width: auto;
4976
+ height: 100%;
4977
+ max-width: 100%;
4978
+ display: block;
4979
+ }
4980
+
4981
+ .muka-social-sign-in-button__label {
4982
+ display: inline-flex;
4983
+ align-items: center;
4984
+ }
4985
+
4986
+
4837
4987
  /* SmsOtpField */
4838
4988
  /* SmsOtpField Component Styles - Using Muka Design Tokens */
4839
4989
 
@@ -7386,6 +7536,37 @@ body {
7386
7536
  }
7387
7537
 
7388
7538
 
7539
+ /* Popover */
7540
+ /* Popover Component Styles */
7541
+
7542
+ .muka-popover__content {
7543
+ background-color: var(--color-surface-level3);
7544
+ border: var(--border-width-regular) solid var(--color-border-default);
7545
+ border-radius: var(--radius-md);
7546
+ padding: var(--spacing-4);
7547
+ box-shadow: var(--shadow-level3);
7548
+ max-width: 20rem;
7549
+ z-index: 50;
7550
+ animation: muka-popover-fade-in 150ms ease;
7551
+ }
7552
+
7553
+ @keyframes muka-popover-fade-in {
7554
+ from {
7555
+ opacity: 0;
7556
+ transform: scale(0.96);
7557
+ }
7558
+ to {
7559
+ opacity: 1;
7560
+ transform: scale(1);
7561
+ }
7562
+ }
7563
+
7564
+ /* Arrow */
7565
+ .muka-popover__arrow {
7566
+ fill: var(--color-surface-level3);
7567
+ }
7568
+
7569
+
7389
7570
  /* PriceTag */
7390
7571
  /* PriceTag Component Styles - Using Muka Design Tokens */
7391
7572
 
@@ -7483,37 +7664,6 @@ body {
7483
7664
  }
7484
7665
 
7485
7666
 
7486
- /* Popover */
7487
- /* Popover Component Styles */
7488
-
7489
- .muka-popover__content {
7490
- background-color: var(--color-surface-level3);
7491
- border: var(--border-width-regular) solid var(--color-border-default);
7492
- border-radius: var(--radius-md);
7493
- padding: var(--spacing-4);
7494
- box-shadow: var(--shadow-level3);
7495
- max-width: 20rem;
7496
- z-index: 50;
7497
- animation: muka-popover-fade-in 150ms ease;
7498
- }
7499
-
7500
- @keyframes muka-popover-fade-in {
7501
- from {
7502
- opacity: 0;
7503
- transform: scale(0.96);
7504
- }
7505
- to {
7506
- opacity: 1;
7507
- transform: scale(1);
7508
- }
7509
- }
7510
-
7511
- /* Arrow */
7512
- .muka-popover__arrow {
7513
- fill: var(--color-surface-level3);
7514
- }
7515
-
7516
-
7517
7667
  /* PieChart */
7518
7668
  /* PieChart Component Styles - Using Muka Design Tokens */
7519
7669
 
@@ -7929,869 +8079,869 @@ body {
7929
8079
  .muka-nav-transition__view--top { z-index: 2; }
7930
8080
 
7931
8081
 
7932
- /* Menu */
7933
- /* Menu Component Styles */
7934
-
7935
- /* ─── Content Container ──────────────────────────────────────────────────── */
8082
+ /* ListItem */
8083
+ /* ListItem Component Styles - Using Muka Design Tokens */
7936
8084
 
7937
- .muka-menu__content {
8085
+ /* Base list item styles */
8086
+ .muka-listitem {
8087
+ /* Layout */
7938
8088
  display: flex;
7939
- flex-direction: column;
7940
- min-width: var(--menu-content-min-width);
7941
- max-height: var(--menu-content-max-height);
7942
- overflow: hidden;
7943
- background-color: var(--menu-content-color-background);
7944
- border: var(--menu-content-border-width) solid var(--menu-content-color-border);
7945
- border-radius: var(--menu-content-border-radius);
7946
- box-shadow: var(--menu-content-shadow);
7947
- padding: 0;
7948
- z-index: 50;
8089
+ align-items: flex-start;
8090
+ gap: var(--spacing-4);
8091
+ padding: var(--spacing-5) var(--spacing-4);
8092
+
8093
+ /* Background - using semantic tokens */
8094
+ background-color: var(--color-surface-level3);
8095
+
8096
+ /* Typography */
8097
+ font-family: var(--alias-font-brand-family);
8098
+
8099
+ /* Border and spacing */
8100
+ border: none;
8101
+ position: relative;
8102
+
8103
+ /* Interaction - only apply if interactive */
8104
+ transition: background-color 0.2s ease, box-shadow 0.2s ease;
8105
+ }
7949
8106
 
7950
- /* Animation */
7951
- animation-duration: 150ms;
7952
- animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
8107
+ /* Interactive state */
8108
+ .muka-listitem--interactive {
8109
+ cursor: pointer;
7953
8110
  }
7954
8111
 
7955
- .muka-menu__body {
7956
- display: flex;
7957
- flex: 1 1 auto;
7958
- min-height: 0;
7959
- align-items: stretch;
7960
- width: 100%;
8112
+ /*
8113
+ * surface.hover / surface.pressed are theme-adaptive translucent tints, so they
8114
+ * are layered on top of the item's base surface via an inset box-shadow overlay
8115
+ * rather than replacing background-color. This preserves the base level (level3,
8116
+ * or level2 when selected) and lets the tint read correctly on any surface.
8117
+ */
8118
+ .muka-listitem--interactive:hover:not(:disabled):not(.muka-listitem--disabled) {
8119
+ box-shadow: inset 0 0 0 9999px var(--color-surface-hover);
7961
8120
  }
7962
8121
 
7963
- .muka-menu__viewport {
7964
- flex: 1 1 auto;
7965
- min-width: 0;
7966
- min-height: 0;
7967
- overflow-y: auto;
7968
- padding: var(--menu-content-padding);
8122
+ .muka-listitem--interactive:active:not(:disabled):not(.muka-listitem--disabled),
8123
+ .muka-listitem--interactive.muka-listitem--pressed:not(:disabled):not(.muka-listitem--disabled) {
8124
+ box-shadow: inset 0 0 0 9999px var(--color-surface-pressed);
7969
8125
  }
7970
8126
 
7971
- .muka-menu__content--scrollbar .muka-menu__viewport {
7972
- /* Custom scrollbar owns the chrome; hide native track */
7973
- scrollbar-width: none;
8127
+ /* Focus styles for accessibility */
8128
+ .muka-listitem:focus-visible {
8129
+ outline: 2px solid var(--color-border-focus);
8130
+ outline-offset: -2px;
7974
8131
  }
7975
8132
 
7976
- .muka-menu__content--scrollbar .muka-menu__viewport::-webkit-scrollbar {
7977
- display: none;
8133
+ /* Disabled state */
8134
+ .muka-listitem--disabled {
8135
+ opacity: 0.5;
8136
+ cursor: not-allowed;
8137
+ pointer-events: none;
7978
8138
  }
7979
8139
 
7980
- /* ─── Search header ──────────────────────────────────────────────────────── */
8140
+ .muka-listitem--disabled:hover {
8141
+ background-color: var(--color-surface-level3);
8142
+ }
7981
8143
 
7982
- .muka-menu__search {
7983
- display: flex;
7984
- align-items: center;
7985
- flex-shrink: 0;
7986
- /* Figma dropdown filter header: 48px, 8px inset, 32px icon slots. */
7987
- height: var(--input-field-height-lg, 3rem);
7988
- padding: 0 var(--spacing-2);
7989
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
8144
+ /* Selected state */
8145
+ .muka-listitem--selected {
8146
+ background-color: var(--color-surface-level2);
7990
8147
  }
7991
8148
 
7992
- .muka-menu__search--sm {
7993
- height: calc(var(--size-xl, 1.5rem) + var(--spacing-2) * 2);
8149
+ .muka-listitem--selected:hover {
8150
+ box-shadow: inset 0 0 0 9999px var(--color-surface-hover);
7994
8151
  }
7995
8152
 
7996
- .muka-menu__search-icon,
7997
- .muka-menu__search-clear {
8153
+ /* No divider modifier */
8154
+ .muka-listitem--no-divider .muka-listitem__divider {
8155
+ display: none;
8156
+ }
8157
+
8158
+ /* Center content vertically when no caption */
8159
+ .muka-listitem--no-caption {
8160
+ align-items: center;
8161
+ }
8162
+
8163
+ /* Leading content (icon or image) */
8164
+ .muka-listitem__leading {
7998
8165
  display: flex;
7999
8166
  align-items: center;
8000
8167
  justify-content: center;
8001
8168
  flex-shrink: 0;
8002
- width: var(--size-2xl, 2rem);
8003
- height: var(--size-2xl, 2rem);
8004
- color: var(--color-text-subtle-default);
8169
+ width: 48px;
8170
+ height: 48px;
8005
8171
  }
8006
8172
 
8007
- .muka-menu__search-icon .muka-icon,
8008
- .muka-menu__search-clear .muka-icon,
8009
- .muka-menu__search-clear:hover,
8010
- .muka-menu__search-clear:hover .muka-icon {
8011
- color: var(--color-text-subtle-default);
8173
+ .muka-listitem__icon {
8174
+ display: inline-flex;
8175
+ align-items: center;
8176
+ justify-content: center;
8177
+ width: 32px;
8178
+ height: 32px;
8179
+ color: var(--color-text-default-default);
8012
8180
  }
8013
8181
 
8014
- .muka-menu__search--sm .muka-menu__search-icon,
8015
- .muka-menu__search--sm .muka-menu__search-clear {
8016
- width: var(--size-xl, 1.5rem);
8017
- height: var(--size-xl, 1.5rem);
8182
+ .muka-listitem__image {
8183
+ width: 48px;
8184
+ height: 48px;
8185
+ border-radius: var(--radius-md);
8186
+ object-fit: cover;
8018
8187
  }
8019
8188
 
8020
- .muka-menu__search-input {
8021
- flex: 1 1 auto;
8189
+ /* Main content area */
8190
+ .muka-listitem__content {
8191
+ flex: 1;
8192
+ display: flex;
8193
+ align-items: center;
8194
+ gap: var(--spacing-4);
8022
8195
  min-width: 0;
8023
- border: none;
8024
- outline: none;
8025
- background: transparent;
8026
- padding: 0 var(--spacing-1);
8027
- font-family: var(--text-input-md-fontFamily);
8028
- font-size: var(--text-input-md-fontSize);
8029
- font-weight: var(--text-input-md-fontWeight);
8030
- line-height: var(--text-input-md-lineHeight);
8031
- color: var(--color-text-default-default);
8032
8196
  }
8033
8197
 
8034
- .muka-menu__search--sm .muka-menu__search-input {
8035
- font-family: var(--text-input-sm-fontFamily);
8036
- font-size: var(--text-input-sm-fontSize);
8037
- font-weight: var(--text-input-sm-fontWeight);
8038
- line-height: var(--text-input-sm-lineHeight);
8198
+ .muka-listitem__text {
8199
+ flex: 1;
8200
+ display: flex;
8201
+ flex-direction: column;
8202
+ gap: var(--spacing-1);
8203
+ min-width: 0;
8039
8204
  }
8040
8205
 
8041
- .muka-menu__search-input::placeholder {
8042
- color: var(--color-text-subtle-default);
8206
+ /* Label text */
8207
+ .muka-listitem__label {
8208
+ margin: 0;
8209
+ padding: 0;
8210
+
8211
+ /* Typography - using semantic tokens */
8212
+ font-family: var(--alias-font-plain-family);
8213
+ font-weight: var(--alias-font-plain-weight-semibold, 600);
8214
+ font-size: var(--text-label-md-fontSize);
8215
+ line-height: var(--text-label-md-lineHeight);
8216
+ color: var(--color-text-default-default);
8217
+
8218
+ /* Text handling */
8219
+ overflow: hidden;
8220
+ text-overflow: ellipsis;
8221
+ white-space: nowrap;
8043
8222
  }
8044
8223
 
8045
- .muka-menu__search-input::-webkit-search-cancel-button,
8046
- .muka-menu__search-input::-webkit-search-decoration {
8047
- -webkit-appearance: none;
8048
- appearance: none;
8224
+ /* Caption text */
8225
+ .muka-listitem__caption {
8226
+ margin: 0;
8227
+ padding: 0;
8228
+
8229
+ /* Typography - using semantic tokens */
8230
+ font-family: var(--alias-font-plain-family);
8231
+ font-weight: var(--alias-font-plain-weight-regular, 400);
8232
+ font-size: var(--text-body-sm-fontSize);
8233
+ line-height: var(--text-body-sm-lineHeight);
8234
+ color: var(--color-text-subtle-default);
8235
+
8236
+ /* Text handling */
8237
+ overflow: hidden;
8238
+ text-overflow: ellipsis;
8239
+ white-space: nowrap;
8049
8240
  }
8050
8241
 
8051
- .muka-menu__empty {
8052
- display: flex;
8242
+ /* Trailing chevron */
8243
+ .muka-listitem__chevron {
8244
+ display: inline-flex;
8053
8245
  align-items: center;
8054
- min-height: var(--menu-item-height);
8055
- padding: var(--menu-item-padding-y) var(--menu-item-padding-x);
8246
+ justify-content: center;
8247
+ flex-shrink: 0;
8248
+ width: 24px;
8249
+ height: 24px;
8056
8250
  color: var(--color-text-subtle-default);
8057
- font-family: var(--text-input-md-fontFamily);
8058
- font-size: var(--text-input-md-fontSize);
8059
- font-weight: var(--text-input-md-fontWeight);
8060
- line-height: var(--text-input-md-lineHeight);
8061
- pointer-events: none;
8062
- user-select: none;
8063
8251
  }
8064
8252
 
8065
- .muka-menu__search-clear {
8066
- padding: 0;
8067
- border: none;
8068
- background: transparent;
8069
- cursor: pointer;
8253
+ /* Bottom divider */
8254
+ .muka-listitem__divider {
8255
+ position: absolute;
8256
+ bottom: 0;
8257
+ left: 0;
8258
+ right: 0;
8259
+ height: 1px;
8260
+ background-color: var(--color-border-default);
8070
8261
  }
8071
8262
 
8072
- .muka-menu__match {
8073
- font-weight: var(--text-label-md-bold-fontWeight);
8263
+ /* Button and anchor specific styles */
8264
+ button.muka-listitem,
8265
+ a.muka-listitem {
8266
+ text-align: left;
8267
+ width: 100%;
8074
8268
  }
8075
8269
 
8076
- .muka-menu__content--scrollbar {
8077
- height: var(--menu-content-scroll-height, 20.625rem);
8078
- max-height: var(--menu-content-scroll-height, 20.625rem);
8270
+ /* List item specific styles */
8271
+ li.muka-listitem {
8272
+ list-style: none;
8079
8273
  }
8080
8274
 
8081
- .muka-menu__content[data-state='open'] {
8082
- animation-name: muka-menu-fade-in;
8083
- }
8084
8275
 
8085
- .muka-menu__content[data-state='closed'] {
8086
- animation-name: muka-menu-fade-out;
8087
- }
8276
+ /* LicensePlateInput */
8277
+ /* LicensePlateInput — Dutch RDW-style plate input
8278
+ *
8279
+ * Plate body colors are regulatory (EU/NL) and intentionally fixed:
8280
+ * - Plate yellow: #F0CE3D
8281
+ * - EU strip blue: #003399
8282
+ * - EU stars yellow: #FFCC00
8283
+ * - Plate text: #1A1A1A
8284
+ *
8285
+ * All surrounding UI (label, helper, focus ring, error border) uses Muka tokens.
8286
+ */
8088
8287
 
8089
- .muka-menu__content[data-side='top'] {
8090
- animation-name: muka-menu-slide-down;
8091
- }
8288
+ .muka-license-plate-input {
8289
+ --plate-yellow: #f0ce3d;
8290
+ --plate-blue: #003399;
8291
+ --plate-text: #1a1a1a;
8292
+ --plate-stars: #ffcc00;
8092
8293
 
8093
- .muka-menu__content[data-side='bottom'] {
8094
- animation-name: muka-menu-slide-up;
8294
+ display: inline-flex;
8295
+ flex-direction: column;
8296
+ gap: var(--spacing-2);
8095
8297
  }
8096
8298
 
8097
- .muka-menu__content[data-side='left'] {
8098
- animation-name: muka-menu-slide-right;
8299
+ /* Plate body */
8300
+ .muka-license-plate-input__plate {
8301
+ display: inline-flex;
8302
+ align-items: stretch;
8303
+ background-color: var(--plate-yellow);
8304
+ border-radius: var(--input-field-radius-md);
8305
+ cursor: text;
8306
+ position: relative;
8307
+ overflow: hidden;
8308
+ box-sizing: border-box;
8309
+ /* Subtle outline to lift the plate from light backgrounds */
8310
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
8311
+ /* Reserve space for the focus / error solid ring without shifting layout */
8312
+ outline: 3px solid transparent;
8313
+ outline-offset: 2px;
8314
+ transition: outline-color 0.15s ease, opacity 0.15s ease;
8099
8315
  }
8100
8316
 
8101
- .muka-menu__content[data-side='right'] {
8102
- animation-name: muka-menu-slide-left;
8317
+ /* Size variants — plate aspect echoes the real RDW plate (~5:1) */
8318
+ .muka-license-plate-input__plate--sm {
8319
+ height: 44px;
8320
+ min-width: 220px;
8321
+ border-radius: var(--input-field-radius-sm);
8103
8322
  }
8104
8323
 
8105
- /* ─── Menu Item ──────────────────────────────────────────────────────────── */
8324
+ .muka-license-plate-input__plate--md {
8325
+ height: 60px;
8326
+ min-width: 300px;
8327
+ border-radius: var(--input-field-radius-md);
8328
+ }
8106
8329
 
8107
- .muka-menu__item {
8108
- position: relative;
8109
- display: flex;
8110
- align-items: center;
8111
- gap: var(--menu-item-gap);
8112
- min-height: var(--menu-item-height);
8113
- /* Right gutter always reserved for floating trailers (enter / check). */
8114
- padding: var(--menu-item-padding-y) var(--menu-item-padding-right) var(--menu-item-padding-y)
8115
- var(--menu-item-padding-x);
8116
- border-radius: var(--menu-item-border-radius);
8117
- cursor: pointer;
8118
- user-select: none;
8119
- outline: none;
8120
- font-family: var(--text-label-md-regular-fontFamily);
8121
- font-size: var(--text-label-md-regular-fontSize);
8122
- font-weight: var(--text-label-md-regular-fontWeight);
8123
- line-height: var(--text-label-md-regular-lineHeight);
8124
- color: var(--menu-item-color-default-foreground);
8125
- background-color: var(--menu-item-color-default-background);
8126
- transition: background-color 100ms ease, color 100ms ease;
8127
- white-space: nowrap;
8330
+ .muka-license-plate-input__plate--lg {
8331
+ height: 80px;
8332
+ min-width: 400px;
8333
+ border-radius: var(--input-field-radius-lg);
8128
8334
  }
8129
8335
 
8130
- .muka-menu__item:hover,
8131
- .muka-menu__item[data-highlighted] {
8132
- background-color: var(--menu-item-color-hover-background);
8133
- color: var(--menu-item-color-hover-foreground);
8336
+ /* Focus — solid outline ring */
8337
+ .muka-license-plate-input__plate--focused:not(.muka-license-plate-input__plate--disabled) {
8338
+ outline-color: var(--input-field-color-focus-border);
8134
8339
  }
8135
8340
 
8136
- .muka-menu__item:focus,
8137
- .muka-menu__item[data-highlighted]:focus {
8138
- background-color: var(--menu-item-color-focus-background);
8139
- color: var(--menu-item-color-focus-foreground);
8341
+ /* Error — solid outline ring in error color */
8342
+ .muka-license-plate-input__plate--error:not(.muka-license-plate-input__plate--disabled) {
8343
+ outline-color: var(--input-field-color-error-border);
8140
8344
  }
8141
8345
 
8142
8346
  /* Disabled */
8143
- .muka-menu__item--disabled,
8144
- .muka-menu__item[data-disabled] {
8145
- color: var(--menu-item-color-disabled-foreground);
8146
- background-color: var(--menu-item-color-disabled-background);
8347
+ .muka-license-plate-input__plate--disabled {
8147
8348
  cursor: not-allowed;
8148
- pointer-events: none;
8349
+ opacity: 0.55;
8149
8350
  }
8150
8351
 
8151
- .muka-menu__item--disabled .muka-menu__item-icon,
8152
- .muka-menu__item[data-disabled] .muka-menu__item-icon {
8153
- color: var(--menu-item-color-disabled-icon);
8352
+ /* EU strip */
8353
+ .muka-license-plate-input__eu-strip {
8354
+ display: inline-flex;
8355
+ flex-direction: column;
8356
+ align-items: center;
8357
+ justify-content: center;
8358
+ background-color: var(--plate-blue);
8359
+ color: #ffffff;
8360
+ flex-shrink: 0;
8361
+ padding: 0 0.4em;
8362
+ gap: 0.15em;
8363
+ /* Strip width scales with plate height for a consistent ratio */
8364
+ width: 14%;
8365
+ min-width: 36px;
8154
8366
  }
8155
8367
 
8156
- /* Destructive */
8157
- .muka-menu__item--destructive {
8158
- color: var(--menu-item-color-destructive-default-foreground);
8368
+ .muka-license-plate-input__eu-stars {
8369
+ width: 60%;
8370
+ max-width: 28px;
8371
+ aspect-ratio: 1 / 1;
8372
+ display: block;
8159
8373
  }
8160
8374
 
8161
- .muka-menu__item--destructive .muka-menu__item-icon {
8162
- color: var(--menu-item-color-destructive-default-icon);
8375
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__eu-stars {
8376
+ max-width: 20px;
8163
8377
  }
8164
8378
 
8165
- .muka-menu__item--destructive:hover,
8166
- .muka-menu__item--destructive[data-highlighted] {
8167
- background-color: var(--menu-item-color-destructive-hover-background);
8168
- color: var(--menu-item-color-destructive-hover-foreground);
8379
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__eu-stars {
8380
+ max-width: 36px;
8169
8381
  }
8170
8382
 
8171
- .muka-menu__item--destructive:hover .muka-menu__item-icon,
8172
- .muka-menu__item--destructive[data-highlighted] .muka-menu__item-icon {
8173
- color: var(--menu-item-color-destructive-hover-icon);
8383
+ .muka-license-plate-input__country-code {
8384
+ font-family:
8385
+ 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
8386
+ font-weight: 700;
8387
+ letter-spacing: 0.04em;
8388
+ line-height: 1;
8389
+ color: #ffffff;
8174
8390
  }
8175
8391
 
8176
- /* ─── Item Parts ─────────────────────────────────────────────────────────── */
8392
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__country-code {
8393
+ font-size: 10px;
8394
+ }
8177
8395
 
8178
- .muka-menu__item-icon {
8179
- display: flex;
8180
- align-items: center;
8181
- justify-content: center;
8182
- flex-shrink: 0;
8183
- color: var(--menu-item-color-default-icon);
8184
- transition: color 100ms ease;
8396
+ .muka-license-plate-input__plate--md .muka-license-plate-input__country-code {
8397
+ font-size: 13px;
8185
8398
  }
8186
8399
 
8187
- .muka-menu__item:hover .muka-menu__item-icon,
8188
- .muka-menu__item[data-highlighted] .muka-menu__item-icon {
8189
- color: var(--menu-item-color-hover-icon);
8400
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__country-code {
8401
+ font-size: 16px;
8190
8402
  }
8191
8403
 
8192
- .muka-menu__item-label {
8193
- flex: 1 1 auto;
8404
+ /* Native input */
8405
+ .muka-license-plate-input__native {
8406
+ flex: 1;
8194
8407
  min-width: 0;
8195
- white-space: nowrap;
8408
+ border: none;
8409
+ outline: none;
8410
+ background: transparent;
8411
+ color: var(--plate-text);
8412
+ text-align: center;
8413
+ text-transform: uppercase;
8414
+ letter-spacing: 0.06em;
8415
+ /* Plate font — bold condensed sans is closest to the FE-Schrift look without
8416
+ shipping a custom font. JetBrains Mono is the system mono brand font. */
8417
+ font-family:
8418
+ 'Arial Narrow', 'Helvetica Neue', Helvetica, Arial, sans-serif;
8419
+ font-weight: 800;
8420
+ padding: 0 0.5em;
8421
+ width: 100%;
8422
+ caret-color: var(--plate-text);
8196
8423
  }
8197
8424
 
8198
- /* Shortcut trailers replace icons and sit with an 8px right inset. */
8199
- .muka-menu__item--has-shortcut {
8200
- padding-right: var(--spacing-2);
8425
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__native {
8426
+ font-size: 22px;
8201
8427
  }
8202
8428
 
8203
- .muka-menu__item-shortcut {
8204
- flex-shrink: 0;
8205
- margin-left: auto;
8206
- padding-left: var(--menu-item-gap);
8429
+ .muka-license-plate-input__plate--md .muka-license-plate-input__native {
8430
+ font-size: 30px;
8431
+ }
8432
+
8433
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__native {
8434
+ font-size: 42px;
8435
+ }
8436
+
8437
+ .muka-license-plate-input__native::placeholder {
8438
+ color: var(--plate-text);
8439
+ opacity: 0.55;
8440
+ font-weight: 700;
8441
+ letter-spacing: 0.08em;
8442
+ }
8443
+
8444
+ .muka-license-plate-input__plate--disabled .muka-license-plate-input__native {
8445
+ cursor: not-allowed;
8446
+ }
8447
+
8448
+ /* Helper text */
8449
+ .muka-license-plate-input__helper {
8207
8450
  font-family: var(--text-label-sm-regular-fontFamily);
8208
- font-size: var(--text-label-sm-regular-fontSize);
8209
8451
  font-weight: var(--text-label-sm-regular-fontWeight);
8452
+ font-size: var(--text-label-sm-regular-fontSize);
8210
8453
  line-height: var(--text-label-sm-regular-lineHeight);
8211
- color: var(--color-text-muted-default);
8212
- white-space: nowrap;
8454
+ color: var(--color-text-subtle-default);
8455
+ margin: 0;
8213
8456
  }
8214
8457
 
8215
- .muka-menu__item-hint {
8216
- /* Figma: trailer sits with 8px margin top / right / bottom; 24px glyph centered inside. */
8217
- position: absolute;
8218
- top: var(--spacing-2);
8219
- right: var(--spacing-2);
8220
- bottom: var(--spacing-2);
8221
- display: none;
8222
- align-items: center;
8223
- justify-content: center;
8224
- width: var(--icon-size-default, 1.5rem);
8225
- color: var(--color-text-muted-default);
8226
- pointer-events: none;
8458
+ /* Error message */
8459
+ .muka-license-plate-input__error {
8460
+ font-family: var(--text-label-sm-regular-fontFamily);
8461
+ font-weight: var(--text-label-sm-regular-fontWeight);
8462
+ font-size: var(--text-label-sm-regular-fontSize);
8463
+ line-height: var(--text-label-sm-regular-lineHeight);
8464
+ color: var(--color-state-error-default);
8465
+ margin: 0;
8227
8466
  }
8228
8467
 
8229
- .muka-menu__item--hint-enter[data-highlighted] .muka-menu__item-hint {
8230
- display: flex;
8231
- }
8232
8468
 
8233
- .muka-menu__item-chevron {
8234
- position: absolute;
8235
- top: var(--spacing-2);
8236
- right: var(--spacing-2);
8237
- bottom: var(--spacing-2);
8469
+ /* Menu */
8470
+ /* Menu Component Styles */
8471
+
8472
+ /* ─── Content Container ──────────────────────────────────────────────────── */
8473
+
8474
+ .muka-menu__content {
8238
8475
  display: flex;
8239
- align-items: center;
8240
- justify-content: center;
8241
- width: var(--icon-size-default, 1.5rem);
8242
- color: var(--menu-shortcut-color);
8243
- }
8476
+ flex-direction: column;
8477
+ min-width: var(--menu-content-min-width);
8478
+ max-height: var(--menu-content-max-height);
8479
+ overflow: hidden;
8480
+ background-color: var(--menu-content-color-background);
8481
+ border: var(--menu-content-border-width) solid var(--menu-content-color-border);
8482
+ border-radius: var(--menu-content-border-radius);
8483
+ box-shadow: var(--menu-content-shadow);
8484
+ padding: 0;
8485
+ z-index: 50;
8244
8486
 
8245
- /* ─── Indicator (Checkbox/Radio) ─────────────────────────────────────────── */
8487
+ /* Animation */
8488
+ animation-duration: 150ms;
8489
+ animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
8490
+ }
8246
8491
 
8247
- .muka-menu__item-indicator {
8492
+ .muka-menu__body {
8248
8493
  display: flex;
8249
- align-items: center;
8250
- justify-content: center;
8251
- width: var(--menu-checkbox-indicator-size);
8252
- height: var(--menu-checkbox-indicator-size);
8253
- flex-shrink: 0;
8254
- color: var(--menu-checkbox-indicator-color);
8494
+ flex: 1 1 auto;
8495
+ min-height: 0;
8496
+ align-items: stretch;
8497
+ width: 100%;
8255
8498
  }
8256
8499
 
8257
- .muka-menu__item--checkbox,
8258
- .muka-menu__item--radio {
8259
- padding-left: var(--menu-item-padding-x);
8500
+ .muka-menu__viewport {
8501
+ flex: 1 1 auto;
8502
+ min-width: 0;
8503
+ min-height: 0;
8504
+ overflow-y: auto;
8505
+ padding: var(--menu-content-padding);
8260
8506
  }
8261
8507
 
8262
- .muka-menu__item--checkbox-trailing,
8263
- .muka-menu__item--radio-check {
8264
- /* Same reserved right gutter as default items — trailing indicator floats. */
8265
- padding-right: var(--menu-item-padding-right);
8508
+ .muka-menu__content--scrollbar .muka-menu__viewport {
8509
+ /* Custom scrollbar owns the chrome; hide native track */
8510
+ scrollbar-width: none;
8266
8511
  }
8267
8512
 
8268
- .muka-menu__item--radio-check[data-state='checked'] {
8269
- background-color: var(--menu-item-color-selected-background);
8513
+ .muka-menu__content--scrollbar .muka-menu__viewport::-webkit-scrollbar {
8514
+ display: none;
8270
8515
  }
8271
8516
 
8272
- .muka-menu__item-indicator--trailing {
8273
- /* Match enter-hint trailer: 8px inset, 24px box (override leading indicator size). */
8274
- position: absolute;
8275
- top: var(--spacing-2);
8276
- right: var(--spacing-2);
8277
- bottom: var(--spacing-2);
8517
+ /* ─── Search header ──────────────────────────────────────────────────────── */
8518
+
8519
+ .muka-menu__search {
8278
8520
  display: flex;
8279
8521
  align-items: center;
8280
- justify-content: center;
8281
- width: var(--icon-size-default, 1.5rem);
8282
- height: auto;
8283
- max-height: none;
8284
- transform: none;
8285
- color: var(--color-text-subtle-default);
8522
+ flex-shrink: 0;
8523
+ /* Figma dropdown filter header: 48px, 8px inset, 32px icon slots. */
8524
+ height: var(--input-field-height-lg, 3rem);
8525
+ padding: 0 var(--spacing-2);
8526
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
8286
8527
  }
8287
8528
 
8288
- .muka-menu__item-indicator--trailing > [data-state] {
8529
+ .muka-menu__search--sm {
8530
+ height: calc(var(--size-xl, 1.5rem) + var(--spacing-2) * 2);
8531
+ }
8532
+
8533
+ .muka-menu__search-icon,
8534
+ .muka-menu__search-clear {
8289
8535
  display: flex;
8290
8536
  align-items: center;
8291
8537
  justify-content: center;
8292
- width: 100%;
8293
- height: 100%;
8538
+ flex-shrink: 0;
8539
+ width: var(--size-2xl, 2rem);
8540
+ height: var(--size-2xl, 2rem);
8541
+ color: var(--color-text-subtle-default);
8294
8542
  }
8295
8543
 
8296
- .muka-menu__radio-dot {
8297
- width: 8px;
8298
- height: 8px;
8299
- border-radius: 50%;
8300
- background-color: var(--menu-radio-indicator-color);
8544
+ .muka-menu__search-icon .muka-icon,
8545
+ .muka-menu__search-clear .muka-icon,
8546
+ .muka-menu__search-clear:hover,
8547
+ .muka-menu__search-clear:hover .muka-icon {
8548
+ color: var(--color-text-subtle-default);
8301
8549
  }
8302
8550
 
8303
- /* ─── Separator ──────────────────────────────────────────────────────────── */
8551
+ .muka-menu__search--sm .muka-menu__search-icon,
8552
+ .muka-menu__search--sm .muka-menu__search-clear {
8553
+ width: var(--size-xl, 1.5rem);
8554
+ height: var(--size-xl, 1.5rem);
8555
+ }
8304
8556
 
8305
- .muka-menu__separator {
8306
- height: var(--menu-separator-height);
8307
- margin: var(--menu-separator-margin-y) 0;
8308
- background-color: var(--menu-separator-color);
8557
+ .muka-menu__search-input {
8558
+ flex: 1 1 auto;
8559
+ min-width: 0;
8560
+ border: none;
8561
+ outline: none;
8562
+ background: transparent;
8563
+ padding: 0 var(--spacing-1);
8564
+ font-family: var(--text-input-md-fontFamily);
8565
+ font-size: var(--text-input-md-fontSize);
8566
+ font-weight: var(--text-input-md-fontWeight);
8567
+ line-height: var(--text-input-md-lineHeight);
8568
+ color: var(--color-text-default-default);
8309
8569
  }
8310
8570
 
8311
- /* ─── Group ──────────────────────────────────────────────────────────────── */
8312
-
8313
- .muka-menu__group {
8314
- /* No additional styles needed - just a container */
8571
+ .muka-menu__search--sm .muka-menu__search-input {
8572
+ font-family: var(--text-input-sm-fontFamily);
8573
+ font-size: var(--text-input-sm-fontSize);
8574
+ font-weight: var(--text-input-sm-fontWeight);
8575
+ line-height: var(--text-input-sm-lineHeight);
8315
8576
  }
8316
8577
 
8317
- .muka-menu__group-label {
8318
- padding: var(--menu-group-label-padding-y) var(--menu-group-label-padding-x);
8319
- font-family: var(--text-label-sm-semibold-fontFamily);
8320
- font-size: var(--text-label-sm-semibold-fontSize);
8321
- font-weight: var(--text-label-sm-semibold-fontWeight);
8322
- line-height: var(--text-label-sm-semibold-lineHeight);
8323
- color: var(--menu-group-label-color);
8324
- text-transform: uppercase;
8325
- letter-spacing: 0.05em;
8578
+ .muka-menu__search-input::placeholder {
8579
+ color: var(--color-text-subtle-default);
8326
8580
  }
8327
8581
 
8328
- /* ─── Radio Group ────────────────────────────────────────────────────────── */
8329
-
8330
- .muka-menu__radio-group {
8331
- /* No additional styles needed - just a container */
8582
+ .muka-menu__search-input::-webkit-search-cancel-button,
8583
+ .muka-menu__search-input::-webkit-search-decoration {
8584
+ -webkit-appearance: none;
8585
+ appearance: none;
8332
8586
  }
8333
8587
 
8334
- /* ─── Context Menu Trigger ───────────────────────────────────────────────── */
8335
-
8336
- .muka-context-menu__trigger {
8337
- /* Allow the trigger to be styled by the parent */
8588
+ .muka-menu__empty {
8589
+ display: flex;
8590
+ align-items: center;
8591
+ min-height: var(--menu-item-height);
8592
+ padding: var(--menu-item-padding-y) var(--menu-item-padding-x);
8593
+ color: var(--color-text-subtle-default);
8594
+ font-family: var(--text-input-md-fontFamily);
8595
+ font-size: var(--text-input-md-fontSize);
8596
+ font-weight: var(--text-input-md-fontWeight);
8597
+ line-height: var(--text-input-md-lineHeight);
8598
+ pointer-events: none;
8599
+ user-select: none;
8338
8600
  }
8339
8601
 
8340
- .muka-context-menu__trigger:focus-visible {
8341
- outline: var(--contextmenu-trigger-outline-width) solid var(--contextmenu-trigger-outline-color);
8342
- outline-offset: var(--contextmenu-trigger-outline-offset);
8343
- border-radius: var(--border-radius-sm);
8602
+ .muka-menu__search-clear {
8603
+ padding: 0;
8604
+ border: none;
8605
+ background: transparent;
8606
+ cursor: pointer;
8344
8607
  }
8345
8608
 
8346
- /* ─── Animations ─────────────────────────────────────────────────────────── */
8609
+ .muka-menu__match {
8610
+ font-weight: var(--text-label-md-bold-fontWeight);
8611
+ }
8347
8612
 
8348
- @keyframes muka-menu-fade-in {
8349
- from {
8350
- opacity: 0;
8351
- }
8352
- to {
8353
- opacity: 1;
8354
- }
8613
+ .muka-menu__content--scrollbar {
8614
+ height: var(--menu-content-scroll-height, 20.625rem);
8615
+ max-height: var(--menu-content-scroll-height, 20.625rem);
8355
8616
  }
8356
8617
 
8357
- @keyframes muka-menu-fade-out {
8358
- from {
8359
- opacity: 1;
8360
- }
8361
- to {
8362
- opacity: 0;
8363
- }
8618
+ .muka-menu__content[data-state='open'] {
8619
+ animation-name: muka-menu-fade-in;
8364
8620
  }
8365
8621
 
8366
- @keyframes muka-menu-slide-up {
8367
- from {
8368
- opacity: 0;
8369
- transform: translateY(4px);
8370
- }
8371
- to {
8372
- opacity: 1;
8373
- transform: translateY(0);
8374
- }
8622
+ .muka-menu__content[data-state='closed'] {
8623
+ animation-name: muka-menu-fade-out;
8375
8624
  }
8376
8625
 
8377
- @keyframes muka-menu-slide-down {
8378
- from {
8379
- opacity: 0;
8380
- transform: translateY(-4px);
8381
- }
8382
- to {
8383
- opacity: 1;
8384
- transform: translateY(0);
8385
- }
8626
+ .muka-menu__content[data-side='top'] {
8627
+ animation-name: muka-menu-slide-down;
8386
8628
  }
8387
8629
 
8388
- @keyframes muka-menu-slide-left {
8389
- from {
8390
- opacity: 0;
8391
- transform: translateX(4px);
8392
- }
8393
- to {
8394
- opacity: 1;
8395
- transform: translateX(0);
8396
- }
8630
+ .muka-menu__content[data-side='bottom'] {
8631
+ animation-name: muka-menu-slide-up;
8397
8632
  }
8398
8633
 
8399
- @keyframes muka-menu-slide-right {
8400
- from {
8401
- opacity: 0;
8402
- transform: translateX(-4px);
8403
- }
8404
- to {
8405
- opacity: 1;
8406
- transform: translateX(0);
8407
- }
8634
+ .muka-menu__content[data-side='left'] {
8635
+ animation-name: muka-menu-slide-right;
8408
8636
  }
8409
8637
 
8638
+ .muka-menu__content[data-side='right'] {
8639
+ animation-name: muka-menu-slide-left;
8640
+ }
8410
8641
 
8411
- /* ListItem */
8412
- /* ListItem Component Styles - Using Muka Design Tokens */
8642
+ /* ─── Menu Item ──────────────────────────────────────────────────────────── */
8413
8643
 
8414
- /* Base list item styles */
8415
- .muka-listitem {
8416
- /* Layout */
8417
- display: flex;
8418
- align-items: flex-start;
8419
- gap: var(--spacing-4);
8420
- padding: var(--spacing-5) var(--spacing-4);
8421
-
8422
- /* Background - using semantic tokens */
8423
- background-color: var(--color-surface-level3);
8424
-
8425
- /* Typography */
8426
- font-family: var(--alias-font-brand-family);
8427
-
8428
- /* Border and spacing */
8429
- border: none;
8644
+ .muka-menu__item {
8430
8645
  position: relative;
8431
-
8432
- /* Interaction - only apply if interactive */
8433
- transition: background-color 0.2s ease, box-shadow 0.2s ease;
8434
- }
8435
-
8436
- /* Interactive state */
8437
- .muka-listitem--interactive {
8646
+ display: flex;
8647
+ align-items: center;
8648
+ gap: var(--menu-item-gap);
8649
+ min-height: var(--menu-item-height);
8650
+ /* Right gutter always reserved for floating trailers (enter / check). */
8651
+ padding: var(--menu-item-padding-y) var(--menu-item-padding-right) var(--menu-item-padding-y)
8652
+ var(--menu-item-padding-x);
8653
+ border-radius: var(--menu-item-border-radius);
8438
8654
  cursor: pointer;
8655
+ user-select: none;
8656
+ outline: none;
8657
+ font-family: var(--text-label-md-regular-fontFamily);
8658
+ font-size: var(--text-label-md-regular-fontSize);
8659
+ font-weight: var(--text-label-md-regular-fontWeight);
8660
+ line-height: var(--text-label-md-regular-lineHeight);
8661
+ color: var(--menu-item-color-default-foreground);
8662
+ background-color: var(--menu-item-color-default-background);
8663
+ transition: background-color 100ms ease, color 100ms ease;
8664
+ white-space: nowrap;
8439
8665
  }
8440
8666
 
8441
- /*
8442
- * surface.hover / surface.pressed are theme-adaptive translucent tints, so they
8443
- * are layered on top of the item's base surface via an inset box-shadow overlay
8444
- * rather than replacing background-color. This preserves the base level (level3,
8445
- * or level2 when selected) and lets the tint read correctly on any surface.
8446
- */
8447
- .muka-listitem--interactive:hover:not(:disabled):not(.muka-listitem--disabled) {
8448
- box-shadow: inset 0 0 0 9999px var(--color-surface-hover);
8449
- }
8450
-
8451
- .muka-listitem--interactive:active:not(:disabled):not(.muka-listitem--disabled),
8452
- .muka-listitem--interactive.muka-listitem--pressed:not(:disabled):not(.muka-listitem--disabled) {
8453
- box-shadow: inset 0 0 0 9999px var(--color-surface-pressed);
8667
+ .muka-menu__item:hover,
8668
+ .muka-menu__item[data-highlighted] {
8669
+ background-color: var(--menu-item-color-hover-background);
8670
+ color: var(--menu-item-color-hover-foreground);
8454
8671
  }
8455
8672
 
8456
- /* Focus styles for accessibility */
8457
- .muka-listitem:focus-visible {
8458
- outline: 2px solid var(--color-border-focus);
8459
- outline-offset: -2px;
8673
+ .muka-menu__item:focus,
8674
+ .muka-menu__item[data-highlighted]:focus {
8675
+ background-color: var(--menu-item-color-focus-background);
8676
+ color: var(--menu-item-color-focus-foreground);
8460
8677
  }
8461
8678
 
8462
- /* Disabled state */
8463
- .muka-listitem--disabled {
8464
- opacity: 0.5;
8679
+ /* Disabled */
8680
+ .muka-menu__item--disabled,
8681
+ .muka-menu__item[data-disabled] {
8682
+ color: var(--menu-item-color-disabled-foreground);
8683
+ background-color: var(--menu-item-color-disabled-background);
8465
8684
  cursor: not-allowed;
8466
8685
  pointer-events: none;
8467
8686
  }
8468
8687
 
8469
- .muka-listitem--disabled:hover {
8470
- background-color: var(--color-surface-level3);
8688
+ .muka-menu__item--disabled .muka-menu__item-icon,
8689
+ .muka-menu__item[data-disabled] .muka-menu__item-icon {
8690
+ color: var(--menu-item-color-disabled-icon);
8471
8691
  }
8472
8692
 
8473
- /* Selected state */
8474
- .muka-listitem--selected {
8475
- background-color: var(--color-surface-level2);
8693
+ /* Destructive */
8694
+ .muka-menu__item--destructive {
8695
+ color: var(--menu-item-color-destructive-default-foreground);
8476
8696
  }
8477
8697
 
8478
- .muka-listitem--selected:hover {
8479
- box-shadow: inset 0 0 0 9999px var(--color-surface-hover);
8698
+ .muka-menu__item--destructive .muka-menu__item-icon {
8699
+ color: var(--menu-item-color-destructive-default-icon);
8480
8700
  }
8481
8701
 
8482
- /* No divider modifier */
8483
- .muka-listitem--no-divider .muka-listitem__divider {
8484
- display: none;
8702
+ .muka-menu__item--destructive:hover,
8703
+ .muka-menu__item--destructive[data-highlighted] {
8704
+ background-color: var(--menu-item-color-destructive-hover-background);
8705
+ color: var(--menu-item-color-destructive-hover-foreground);
8485
8706
  }
8486
8707
 
8487
- /* Center content vertically when no caption */
8488
- .muka-listitem--no-caption {
8489
- align-items: center;
8708
+ .muka-menu__item--destructive:hover .muka-menu__item-icon,
8709
+ .muka-menu__item--destructive[data-highlighted] .muka-menu__item-icon {
8710
+ color: var(--menu-item-color-destructive-hover-icon);
8490
8711
  }
8491
8712
 
8492
- /* Leading content (icon or image) */
8493
- .muka-listitem__leading {
8713
+ /* ─── Item Parts ─────────────────────────────────────────────────────────── */
8714
+
8715
+ .muka-menu__item-icon {
8494
8716
  display: flex;
8495
8717
  align-items: center;
8496
8718
  justify-content: center;
8497
8719
  flex-shrink: 0;
8498
- width: 48px;
8499
- height: 48px;
8720
+ color: var(--menu-item-color-default-icon);
8721
+ transition: color 100ms ease;
8500
8722
  }
8501
8723
 
8502
- .muka-listitem__icon {
8503
- display: inline-flex;
8504
- align-items: center;
8505
- justify-content: center;
8506
- width: 32px;
8507
- height: 32px;
8508
- color: var(--color-text-default-default);
8509
- }
8510
-
8511
- .muka-listitem__image {
8512
- width: 48px;
8513
- height: 48px;
8514
- border-radius: var(--radius-md);
8515
- object-fit: cover;
8516
- }
8517
-
8518
- /* Main content area */
8519
- .muka-listitem__content {
8520
- flex: 1;
8521
- display: flex;
8522
- align-items: center;
8523
- gap: var(--spacing-4);
8524
- min-width: 0;
8724
+ .muka-menu__item:hover .muka-menu__item-icon,
8725
+ .muka-menu__item[data-highlighted] .muka-menu__item-icon {
8726
+ color: var(--menu-item-color-hover-icon);
8525
8727
  }
8526
8728
 
8527
- .muka-listitem__text {
8528
- flex: 1;
8529
- display: flex;
8530
- flex-direction: column;
8531
- gap: var(--spacing-1);
8729
+ .muka-menu__item-label {
8730
+ flex: 1 1 auto;
8532
8731
  min-width: 0;
8533
- }
8534
-
8535
- /* Label text */
8536
- .muka-listitem__label {
8537
- margin: 0;
8538
- padding: 0;
8539
-
8540
- /* Typography - using semantic tokens */
8541
- font-family: var(--alias-font-plain-family);
8542
- font-weight: var(--alias-font-plain-weight-semibold, 600);
8543
- font-size: var(--text-label-md-fontSize);
8544
- line-height: var(--text-label-md-lineHeight);
8545
- color: var(--color-text-default-default);
8546
-
8547
- /* Text handling */
8548
- overflow: hidden;
8549
- text-overflow: ellipsis;
8550
8732
  white-space: nowrap;
8551
8733
  }
8552
8734
 
8553
- /* Caption text */
8554
- .muka-listitem__caption {
8555
- margin: 0;
8556
- padding: 0;
8557
-
8558
- /* Typography - using semantic tokens */
8559
- font-family: var(--alias-font-plain-family);
8560
- font-weight: var(--alias-font-plain-weight-regular, 400);
8561
- font-size: var(--text-body-sm-fontSize);
8562
- line-height: var(--text-body-sm-lineHeight);
8563
- color: var(--color-text-subtle-default);
8564
-
8565
- /* Text handling */
8566
- overflow: hidden;
8567
- text-overflow: ellipsis;
8568
- white-space: nowrap;
8735
+ /* Shortcut trailers replace icons and sit with an 8px right inset. */
8736
+ .muka-menu__item--has-shortcut {
8737
+ padding-right: var(--spacing-2);
8569
8738
  }
8570
8739
 
8571
- /* Trailing chevron */
8572
- .muka-listitem__chevron {
8573
- display: inline-flex;
8574
- align-items: center;
8575
- justify-content: center;
8740
+ .muka-menu__item-shortcut {
8576
8741
  flex-shrink: 0;
8577
- width: 24px;
8578
- height: 24px;
8579
- color: var(--color-text-subtle-default);
8742
+ margin-left: auto;
8743
+ padding-left: var(--menu-item-gap);
8744
+ font-family: var(--text-label-sm-regular-fontFamily);
8745
+ font-size: var(--text-label-sm-regular-fontSize);
8746
+ font-weight: var(--text-label-sm-regular-fontWeight);
8747
+ line-height: var(--text-label-sm-regular-lineHeight);
8748
+ color: var(--color-text-muted-default);
8749
+ white-space: nowrap;
8580
8750
  }
8581
8751
 
8582
- /* Bottom divider */
8583
- .muka-listitem__divider {
8752
+ .muka-menu__item-hint {
8753
+ /* Figma: trailer sits with 8px margin top / right / bottom; 24px glyph centered inside. */
8584
8754
  position: absolute;
8585
- bottom: 0;
8586
- left: 0;
8587
- right: 0;
8588
- height: 1px;
8589
- background-color: var(--color-border-default);
8755
+ top: var(--spacing-2);
8756
+ right: var(--spacing-2);
8757
+ bottom: var(--spacing-2);
8758
+ display: none;
8759
+ align-items: center;
8760
+ justify-content: center;
8761
+ width: var(--icon-size-default, 1.5rem);
8762
+ color: var(--color-text-muted-default);
8763
+ pointer-events: none;
8590
8764
  }
8591
8765
 
8592
- /* Button and anchor specific styles */
8593
- button.muka-listitem,
8594
- a.muka-listitem {
8595
- text-align: left;
8596
- width: 100%;
8766
+ .muka-menu__item--hint-enter[data-highlighted] .muka-menu__item-hint {
8767
+ display: flex;
8597
8768
  }
8598
8769
 
8599
- /* List item specific styles */
8600
- li.muka-listitem {
8601
- list-style: none;
8770
+ .muka-menu__item-chevron {
8771
+ position: absolute;
8772
+ top: var(--spacing-2);
8773
+ right: var(--spacing-2);
8774
+ bottom: var(--spacing-2);
8775
+ display: flex;
8776
+ align-items: center;
8777
+ justify-content: center;
8778
+ width: var(--icon-size-default, 1.5rem);
8779
+ color: var(--menu-shortcut-color);
8602
8780
  }
8603
8781
 
8782
+ /* ─── Indicator (Checkbox/Radio) ─────────────────────────────────────────── */
8604
8783
 
8605
- /* LicensePlateInput */
8606
- /* LicensePlateInput — Dutch RDW-style plate input
8607
- *
8608
- * Plate body colors are regulatory (EU/NL) and intentionally fixed:
8609
- * - Plate yellow: #F0CE3D
8610
- * - EU strip blue: #003399
8611
- * - EU stars yellow: #FFCC00
8612
- * - Plate text: #1A1A1A
8613
- *
8614
- * All surrounding UI (label, helper, focus ring, error border) uses Muka tokens.
8615
- */
8616
-
8617
- .muka-license-plate-input {
8618
- --plate-yellow: #f0ce3d;
8619
- --plate-blue: #003399;
8620
- --plate-text: #1a1a1a;
8621
- --plate-stars: #ffcc00;
8622
-
8623
- display: inline-flex;
8624
- flex-direction: column;
8625
- gap: var(--spacing-2);
8784
+ .muka-menu__item-indicator {
8785
+ display: flex;
8786
+ align-items: center;
8787
+ justify-content: center;
8788
+ width: var(--menu-checkbox-indicator-size);
8789
+ height: var(--menu-checkbox-indicator-size);
8790
+ flex-shrink: 0;
8791
+ color: var(--menu-checkbox-indicator-color);
8626
8792
  }
8627
8793
 
8628
- /* Plate body */
8629
- .muka-license-plate-input__plate {
8630
- display: inline-flex;
8631
- align-items: stretch;
8632
- background-color: var(--plate-yellow);
8633
- border-radius: var(--input-field-radius-md);
8634
- cursor: text;
8635
- position: relative;
8636
- overflow: hidden;
8637
- box-sizing: border-box;
8638
- /* Subtle outline to lift the plate from light backgrounds */
8639
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
8640
- /* Reserve space for the focus / error solid ring without shifting layout */
8641
- outline: 3px solid transparent;
8642
- outline-offset: 2px;
8643
- transition: outline-color 0.15s ease, opacity 0.15s ease;
8794
+ .muka-menu__item--checkbox,
8795
+ .muka-menu__item--radio {
8796
+ padding-left: var(--menu-item-padding-x);
8644
8797
  }
8645
8798
 
8646
- /* Size variants — plate aspect echoes the real RDW plate (~5:1) */
8647
- .muka-license-plate-input__plate--sm {
8648
- height: 44px;
8649
- min-width: 220px;
8650
- border-radius: var(--input-field-radius-sm);
8799
+ .muka-menu__item--checkbox-trailing,
8800
+ .muka-menu__item--radio-check {
8801
+ /* Same reserved right gutter as default items — trailing indicator floats. */
8802
+ padding-right: var(--menu-item-padding-right);
8651
8803
  }
8652
8804
 
8653
- .muka-license-plate-input__plate--md {
8654
- height: 60px;
8655
- min-width: 300px;
8656
- border-radius: var(--input-field-radius-md);
8805
+ .muka-menu__item--radio-check[data-state='checked'] {
8806
+ background-color: var(--menu-item-color-selected-background);
8657
8807
  }
8658
8808
 
8659
- .muka-license-plate-input__plate--lg {
8660
- height: 80px;
8661
- min-width: 400px;
8662
- border-radius: var(--input-field-radius-lg);
8809
+ .muka-menu__item-indicator--trailing {
8810
+ /* Match enter-hint trailer: 8px inset, 24px box (override leading indicator size). */
8811
+ position: absolute;
8812
+ top: var(--spacing-2);
8813
+ right: var(--spacing-2);
8814
+ bottom: var(--spacing-2);
8815
+ display: flex;
8816
+ align-items: center;
8817
+ justify-content: center;
8818
+ width: var(--icon-size-default, 1.5rem);
8819
+ height: auto;
8820
+ max-height: none;
8821
+ transform: none;
8822
+ color: var(--color-text-subtle-default);
8663
8823
  }
8664
8824
 
8665
- /* Focus — solid outline ring */
8666
- .muka-license-plate-input__plate--focused:not(.muka-license-plate-input__plate--disabled) {
8667
- outline-color: var(--input-field-color-focus-border);
8825
+ .muka-menu__item-indicator--trailing > [data-state] {
8826
+ display: flex;
8827
+ align-items: center;
8828
+ justify-content: center;
8829
+ width: 100%;
8830
+ height: 100%;
8668
8831
  }
8669
8832
 
8670
- /* Error — solid outline ring in error color */
8671
- .muka-license-plate-input__plate--error:not(.muka-license-plate-input__plate--disabled) {
8672
- outline-color: var(--input-field-color-error-border);
8833
+ .muka-menu__radio-dot {
8834
+ width: 8px;
8835
+ height: 8px;
8836
+ border-radius: 50%;
8837
+ background-color: var(--menu-radio-indicator-color);
8673
8838
  }
8674
8839
 
8675
- /* Disabled */
8676
- .muka-license-plate-input__plate--disabled {
8677
- cursor: not-allowed;
8678
- opacity: 0.55;
8679
- }
8840
+ /* ─── Separator ──────────────────────────────────────────────────────────── */
8680
8841
 
8681
- /* EU strip */
8682
- .muka-license-plate-input__eu-strip {
8683
- display: inline-flex;
8684
- flex-direction: column;
8685
- align-items: center;
8686
- justify-content: center;
8687
- background-color: var(--plate-blue);
8688
- color: #ffffff;
8689
- flex-shrink: 0;
8690
- padding: 0 0.4em;
8691
- gap: 0.15em;
8692
- /* Strip width scales with plate height for a consistent ratio */
8693
- width: 14%;
8694
- min-width: 36px;
8842
+ .muka-menu__separator {
8843
+ height: var(--menu-separator-height);
8844
+ margin: var(--menu-separator-margin-y) 0;
8845
+ background-color: var(--menu-separator-color);
8695
8846
  }
8696
8847
 
8697
- .muka-license-plate-input__eu-stars {
8698
- width: 60%;
8699
- max-width: 28px;
8700
- aspect-ratio: 1 / 1;
8701
- display: block;
8702
- }
8848
+ /* ─── Group ──────────────────────────────────────────────────────────────── */
8703
8849
 
8704
- .muka-license-plate-input__plate--sm .muka-license-plate-input__eu-stars {
8705
- max-width: 20px;
8850
+ .muka-menu__group {
8851
+ /* No additional styles needed - just a container */
8706
8852
  }
8707
8853
 
8708
- .muka-license-plate-input__plate--lg .muka-license-plate-input__eu-stars {
8709
- max-width: 36px;
8854
+ .muka-menu__group-label {
8855
+ padding: var(--menu-group-label-padding-y) var(--menu-group-label-padding-x);
8856
+ font-family: var(--text-label-sm-semibold-fontFamily);
8857
+ font-size: var(--text-label-sm-semibold-fontSize);
8858
+ font-weight: var(--text-label-sm-semibold-fontWeight);
8859
+ line-height: var(--text-label-sm-semibold-lineHeight);
8860
+ color: var(--menu-group-label-color);
8861
+ text-transform: uppercase;
8862
+ letter-spacing: 0.05em;
8710
8863
  }
8711
8864
 
8712
- .muka-license-plate-input__country-code {
8713
- font-family:
8714
- 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
8715
- font-weight: 700;
8716
- letter-spacing: 0.04em;
8717
- line-height: 1;
8718
- color: #ffffff;
8719
- }
8865
+ /* ─── Radio Group ────────────────────────────────────────────────────────── */
8720
8866
 
8721
- .muka-license-plate-input__plate--sm .muka-license-plate-input__country-code {
8722
- font-size: 10px;
8867
+ .muka-menu__radio-group {
8868
+ /* No additional styles needed - just a container */
8723
8869
  }
8724
8870
 
8725
- .muka-license-plate-input__plate--md .muka-license-plate-input__country-code {
8726
- font-size: 13px;
8727
- }
8871
+ /* ─── Context Menu Trigger ───────────────────────────────────────────────── */
8728
8872
 
8729
- .muka-license-plate-input__plate--lg .muka-license-plate-input__country-code {
8730
- font-size: 16px;
8873
+ .muka-context-menu__trigger {
8874
+ /* Allow the trigger to be styled by the parent */
8731
8875
  }
8732
8876
 
8733
- /* Native input */
8734
- .muka-license-plate-input__native {
8735
- flex: 1;
8736
- min-width: 0;
8737
- border: none;
8738
- outline: none;
8739
- background: transparent;
8740
- color: var(--plate-text);
8741
- text-align: center;
8742
- text-transform: uppercase;
8743
- letter-spacing: 0.06em;
8744
- /* Plate font — bold condensed sans is closest to the FE-Schrift look without
8745
- shipping a custom font. JetBrains Mono is the system mono brand font. */
8746
- font-family:
8747
- 'Arial Narrow', 'Helvetica Neue', Helvetica, Arial, sans-serif;
8748
- font-weight: 800;
8749
- padding: 0 0.5em;
8750
- width: 100%;
8751
- caret-color: var(--plate-text);
8877
+ .muka-context-menu__trigger:focus-visible {
8878
+ outline: var(--contextmenu-trigger-outline-width) solid var(--contextmenu-trigger-outline-color);
8879
+ outline-offset: var(--contextmenu-trigger-outline-offset);
8880
+ border-radius: var(--border-radius-sm);
8752
8881
  }
8753
8882
 
8754
- .muka-license-plate-input__plate--sm .muka-license-plate-input__native {
8755
- font-size: 22px;
8756
- }
8883
+ /* ─── Animations ─────────────────────────────────────────────────────────── */
8757
8884
 
8758
- .muka-license-plate-input__plate--md .muka-license-plate-input__native {
8759
- font-size: 30px;
8885
+ @keyframes muka-menu-fade-in {
8886
+ from {
8887
+ opacity: 0;
8888
+ }
8889
+ to {
8890
+ opacity: 1;
8891
+ }
8760
8892
  }
8761
8893
 
8762
- .muka-license-plate-input__plate--lg .muka-license-plate-input__native {
8763
- font-size: 42px;
8894
+ @keyframes muka-menu-fade-out {
8895
+ from {
8896
+ opacity: 1;
8897
+ }
8898
+ to {
8899
+ opacity: 0;
8900
+ }
8764
8901
  }
8765
8902
 
8766
- .muka-license-plate-input__native::placeholder {
8767
- color: var(--plate-text);
8768
- opacity: 0.55;
8769
- font-weight: 700;
8770
- letter-spacing: 0.08em;
8903
+ @keyframes muka-menu-slide-up {
8904
+ from {
8905
+ opacity: 0;
8906
+ transform: translateY(4px);
8907
+ }
8908
+ to {
8909
+ opacity: 1;
8910
+ transform: translateY(0);
8911
+ }
8771
8912
  }
8772
8913
 
8773
- .muka-license-plate-input__plate--disabled .muka-license-plate-input__native {
8774
- cursor: not-allowed;
8914
+ @keyframes muka-menu-slide-down {
8915
+ from {
8916
+ opacity: 0;
8917
+ transform: translateY(-4px);
8918
+ }
8919
+ to {
8920
+ opacity: 1;
8921
+ transform: translateY(0);
8922
+ }
8775
8923
  }
8776
8924
 
8777
- /* Helper text */
8778
- .muka-license-plate-input__helper {
8779
- font-family: var(--text-label-sm-regular-fontFamily);
8780
- font-weight: var(--text-label-sm-regular-fontWeight);
8781
- font-size: var(--text-label-sm-regular-fontSize);
8782
- line-height: var(--text-label-sm-regular-lineHeight);
8783
- color: var(--color-text-subtle-default);
8784
- margin: 0;
8925
+ @keyframes muka-menu-slide-left {
8926
+ from {
8927
+ opacity: 0;
8928
+ transform: translateX(4px);
8929
+ }
8930
+ to {
8931
+ opacity: 1;
8932
+ transform: translateX(0);
8933
+ }
8785
8934
  }
8786
8935
 
8787
- /* Error message */
8788
- .muka-license-plate-input__error {
8789
- font-family: var(--text-label-sm-regular-fontFamily);
8790
- font-weight: var(--text-label-sm-regular-fontWeight);
8791
- font-size: var(--text-label-sm-regular-fontSize);
8792
- line-height: var(--text-label-sm-regular-lineHeight);
8793
- color: var(--color-state-error-default);
8794
- margin: 0;
8936
+ @keyframes muka-menu-slide-right {
8937
+ from {
8938
+ opacity: 0;
8939
+ transform: translateX(-4px);
8940
+ }
8941
+ to {
8942
+ opacity: 1;
8943
+ transform: translateX(0);
8944
+ }
8795
8945
  }
8796
8946
 
8797
8947
 
@@ -9023,7 +9173,8 @@ li.muka-listitem {
9023
9173
  height: var(--icon-size-default);
9024
9174
  }
9025
9175
 
9026
- .muka-input__clear {
9176
+ .muka-input__clear,
9177
+ .muka-input__reveal {
9027
9178
  display: inline-flex;
9028
9179
  align-items: center;
9029
9180
  justify-content: center;
@@ -9037,7 +9188,8 @@ li.muka-listitem {
9037
9188
  cursor: pointer;
9038
9189
  }
9039
9190
 
9040
- .muka-input__field--sm .muka-input__clear {
9191
+ .muka-input__field--sm .muka-input__clear,
9192
+ .muka-input__field--sm .muka-input__reveal {
9041
9193
  width: var(--size-xl, 1.5rem);
9042
9194
  height: var(--size-xl, 1.5rem);
9043
9195
  }
@@ -9046,14 +9198,19 @@ li.muka-listitem {
9046
9198
  .muka-input__icon .muka-icon,
9047
9199
  .muka-input__clear .muka-icon,
9048
9200
  .muka-input__clear:hover,
9049
- .muka-input__clear:hover .muka-icon {
9201
+ .muka-input__clear:hover .muka-icon,
9202
+ .muka-input__reveal .muka-icon,
9203
+ .muka-input__reveal:hover,
9204
+ .muka-input__reveal:hover .muka-icon {
9050
9205
  color: var(--color-text-subtle-default);
9051
9206
  }
9052
9207
 
9053
9208
  .muka-input__field--disabled .muka-input__icon,
9054
9209
  .muka-input__field--disabled .muka-input__icon .muka-icon,
9055
9210
  .muka-input__field--disabled .muka-input__clear,
9056
- .muka-input__field--disabled .muka-input__clear .muka-icon {
9211
+ .muka-input__field--disabled .muka-input__clear .muka-icon,
9212
+ .muka-input__field--disabled .muka-input__reveal,
9213
+ .muka-input__field--disabled .muka-input__reveal .muka-icon {
9057
9214
  color: var(--input-field-color-disabled-foreground);
9058
9215
  }
9059
9216
 
@@ -12752,134 +12909,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
12752
12909
  }
12753
12910
 
12754
12911
 
12755
- /* ChatComposer */
12756
- /* ChatComposer Component Styles */
12757
-
12758
- /*
12759
- * The composer is a bare, fill-width row: no padding, background, border or
12760
- * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
12761
- * container — see BottomBar's `chat` variant.
12762
- */
12763
- .muka-chat-composer {
12764
- display: flex;
12765
- flex-direction: column;
12766
- gap: var(--spacing-3);
12767
- width: 100%;
12768
- }
12769
-
12770
- .muka-chat-composer--disabled {
12771
- opacity: 0.6;
12772
- pointer-events: none;
12773
- }
12774
-
12775
- /* ─── Input row ────────────────────────────────────────── */
12776
-
12777
- .muka-chat-composer__row {
12778
- display: flex;
12779
- width: 100%;
12780
- align-items: flex-end;
12781
- gap: var(--spacing-3);
12782
- }
12783
-
12784
- /* ─── Text field ───────────────────────────────────────── */
12785
-
12786
- .muka-chat-composer__field {
12787
- display: flex;
12788
- flex: 1 1 auto;
12789
- min-width: 0;
12790
- box-sizing: border-box;
12791
- align-items: center;
12792
- gap: var(--spacing-1);
12793
- min-height: var(--input-field-height-lg, 48px);
12794
- padding: 0 var(--spacing-2);
12795
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
12796
- border-radius: var(--input-field-radius-lg);
12797
- background-color: var(--input-field-color-default-background);
12798
- transition: border-color 0.12s ease;
12799
- }
12800
-
12801
- .muka-chat-composer__field:focus-within {
12802
- border-color: var(--input-field-color-focus-border, var(--color-action-default));
12803
- }
12804
-
12805
- .muka-chat-composer__input {
12806
- flex: 1 1 auto;
12807
- min-width: 0;
12808
- width: 100%;
12809
- box-sizing: border-box;
12810
- resize: none;
12811
- border: none;
12812
- background: transparent;
12813
- outline: none;
12814
- padding: 0 var(--spacing-1);
12815
- color: var(--color-text-default-default);
12816
- font-family: var(--text-body-base-regular-fontFamily);
12817
- font-weight: var(--text-body-base-regular-fontWeight);
12818
- font-size: var(--text-body-base-regular-fontSize);
12819
- line-height: var(--text-body-base-regular-lineHeight);
12820
- appearance: none;
12821
- -webkit-appearance: none;
12822
- }
12823
-
12824
- .muka-chat-composer__input::placeholder {
12825
- color: var(--color-text-subtle-default);
12826
- }
12827
-
12828
- /* Keep the in-field emoji button flush to the bottom-right as the field grows */
12829
- .muka-chat-composer__emoji {
12830
- flex-shrink: 0;
12831
- }
12832
-
12833
- /* ─── Recording bar ────────────────────────────────────── */
12834
-
12835
- .muka-chat-composer__recording {
12836
- display: flex;
12837
- flex: 1 1 auto;
12838
- min-width: 0;
12839
- box-sizing: border-box;
12840
- align-items: center;
12841
- min-height: var(--input-field-height-lg, 48px);
12842
- padding: var(--card-padding-sm);
12843
- border: var(--border-width-regular) solid var(--card-color-default-border);
12844
- border-radius: var(--radius-lg);
12845
- background-color: var(--card-color-default-background);
12846
- }
12847
-
12848
- /* ─── Staged attachments strip ─────────────────────────── */
12849
-
12850
- .muka-chat-composer__attachments-strip {
12851
- position: relative;
12852
- width: 100%;
12853
- }
12854
-
12855
- .muka-chat-composer__attachments {
12856
- display: flex;
12857
- gap: var(--spacing-3);
12858
- overflow-x: auto;
12859
- scroll-behavior: smooth;
12860
- scrollbar-width: none;
12861
- }
12862
-
12863
- .muka-chat-composer__attachments::-webkit-scrollbar {
12864
- display: none;
12865
- }
12866
-
12867
- .muka-chat-composer__overflow {
12868
- position: absolute;
12869
- top: 50%;
12870
- right: var(--spacing-2);
12871
- transform: translateY(-50%);
12872
- }
12873
-
12874
- /* ─── Print ────────────────────────────────────────────── */
12875
-
12876
- @media print {
12877
- .muka-chat-composer {
12878
- display: none;
12879
- }
12880
- }
12881
-
12882
-
12883
12912
  /* ChatAttachmentChip */
12884
12913
  /* ChatAttachmentChip Component Styles */
12885
12914
 
@@ -14453,6 +14482,134 @@ button.muka-chat-photo-grid__tile:focus-visible {
14453
14482
  }
14454
14483
 
14455
14484
 
14485
+ /* ChatComposer */
14486
+ /* ChatComposer Component Styles */
14487
+
14488
+ /*
14489
+ * The composer is a bare, fill-width row: no padding, background, border or
14490
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
14491
+ * container — see BottomBar's `chat` variant.
14492
+ */
14493
+ .muka-chat-composer {
14494
+ display: flex;
14495
+ flex-direction: column;
14496
+ gap: var(--spacing-3);
14497
+ width: 100%;
14498
+ }
14499
+
14500
+ .muka-chat-composer--disabled {
14501
+ opacity: 0.6;
14502
+ pointer-events: none;
14503
+ }
14504
+
14505
+ /* ─── Input row ────────────────────────────────────────── */
14506
+
14507
+ .muka-chat-composer__row {
14508
+ display: flex;
14509
+ width: 100%;
14510
+ align-items: flex-end;
14511
+ gap: var(--spacing-3);
14512
+ }
14513
+
14514
+ /* ─── Text field ───────────────────────────────────────── */
14515
+
14516
+ .muka-chat-composer__field {
14517
+ display: flex;
14518
+ flex: 1 1 auto;
14519
+ min-width: 0;
14520
+ box-sizing: border-box;
14521
+ align-items: center;
14522
+ gap: var(--spacing-1);
14523
+ min-height: var(--input-field-height-lg, 48px);
14524
+ padding: 0 var(--spacing-2);
14525
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
14526
+ border-radius: var(--input-field-radius-lg);
14527
+ background-color: var(--input-field-color-default-background);
14528
+ transition: border-color 0.12s ease;
14529
+ }
14530
+
14531
+ .muka-chat-composer__field:focus-within {
14532
+ border-color: var(--input-field-color-focus-border, var(--color-action-default));
14533
+ }
14534
+
14535
+ .muka-chat-composer__input {
14536
+ flex: 1 1 auto;
14537
+ min-width: 0;
14538
+ width: 100%;
14539
+ box-sizing: border-box;
14540
+ resize: none;
14541
+ border: none;
14542
+ background: transparent;
14543
+ outline: none;
14544
+ padding: 0 var(--spacing-1);
14545
+ color: var(--color-text-default-default);
14546
+ font-family: var(--text-body-base-regular-fontFamily);
14547
+ font-weight: var(--text-body-base-regular-fontWeight);
14548
+ font-size: var(--text-body-base-regular-fontSize);
14549
+ line-height: var(--text-body-base-regular-lineHeight);
14550
+ appearance: none;
14551
+ -webkit-appearance: none;
14552
+ }
14553
+
14554
+ .muka-chat-composer__input::placeholder {
14555
+ color: var(--color-text-subtle-default);
14556
+ }
14557
+
14558
+ /* Keep the in-field emoji button flush to the bottom-right as the field grows */
14559
+ .muka-chat-composer__emoji {
14560
+ flex-shrink: 0;
14561
+ }
14562
+
14563
+ /* ─── Recording bar ────────────────────────────────────── */
14564
+
14565
+ .muka-chat-composer__recording {
14566
+ display: flex;
14567
+ flex: 1 1 auto;
14568
+ min-width: 0;
14569
+ box-sizing: border-box;
14570
+ align-items: center;
14571
+ min-height: var(--input-field-height-lg, 48px);
14572
+ padding: var(--card-padding-sm);
14573
+ border: var(--border-width-regular) solid var(--card-color-default-border);
14574
+ border-radius: var(--radius-lg);
14575
+ background-color: var(--card-color-default-background);
14576
+ }
14577
+
14578
+ /* ─── Staged attachments strip ─────────────────────────── */
14579
+
14580
+ .muka-chat-composer__attachments-strip {
14581
+ position: relative;
14582
+ width: 100%;
14583
+ }
14584
+
14585
+ .muka-chat-composer__attachments {
14586
+ display: flex;
14587
+ gap: var(--spacing-3);
14588
+ overflow-x: auto;
14589
+ scroll-behavior: smooth;
14590
+ scrollbar-width: none;
14591
+ }
14592
+
14593
+ .muka-chat-composer__attachments::-webkit-scrollbar {
14594
+ display: none;
14595
+ }
14596
+
14597
+ .muka-chat-composer__overflow {
14598
+ position: absolute;
14599
+ top: 50%;
14600
+ right: var(--spacing-2);
14601
+ transform: translateY(-50%);
14602
+ }
14603
+
14604
+ /* ─── Print ────────────────────────────────────────────── */
14605
+
14606
+ @media print {
14607
+ .muka-chat-composer {
14608
+ display: none;
14609
+ }
14610
+ }
14611
+
14612
+
14456
14613
  /* AppShell */
14457
14614
  /* AppShell Component Styles */
14458
14615