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