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