@revikornmann/muka-ui 0.25.0 → 0.26.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 (96) hide show
  1. package/dist/cjs/components/Autocomplete/Autocomplete.css +63 -0
  2. package/dist/cjs/components/Autocomplete/Autocomplete.js +190 -0
  3. package/dist/cjs/components/Autocomplete/Autocomplete.js.map +1 -0
  4. package/dist/cjs/components/Autocomplete/index.js +6 -0
  5. package/dist/cjs/components/Autocomplete/index.js.map +1 -0
  6. package/dist/cjs/components/Combobox/Combobox.js +7 -23
  7. package/dist/cjs/components/Combobox/Combobox.js.map +1 -1
  8. package/dist/cjs/components/ContextSelect/ContextSelect.js +2 -2
  9. package/dist/cjs/components/ContextSelect/ContextSelect.js.map +1 -1
  10. package/dist/cjs/components/Dialog/Dialog.js +9 -1
  11. package/dist/cjs/components/Dialog/Dialog.js.map +1 -1
  12. package/dist/cjs/components/DropdownSelect/DropdownSelect.js +2 -2
  13. package/dist/cjs/components/DropdownSelect/DropdownSelect.js.map +1 -1
  14. package/dist/cjs/components/InputCounter/InputCounter.css +175 -0
  15. package/dist/cjs/components/InputCounter/InputCounter.js +196 -0
  16. package/dist/cjs/components/InputCounter/InputCounter.js.map +1 -0
  17. package/dist/cjs/components/InputCounter/index.js +11 -0
  18. package/dist/cjs/components/InputCounter/index.js.map +1 -0
  19. package/dist/cjs/components/Menu/Menu.js +26 -11
  20. package/dist/cjs/components/Menu/Menu.js.map +1 -1
  21. package/dist/cjs/components/Popover/Popover.js +10 -8
  22. package/dist/cjs/components/Popover/Popover.js.map +1 -1
  23. package/dist/cjs/components/Tooltip/Tooltip.js +7 -2
  24. package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
  25. package/dist/cjs/components/index.js +7 -3
  26. package/dist/cjs/components/index.js.map +1 -1
  27. package/dist/cjs/utils/suggestionList.js +27 -0
  28. package/dist/cjs/utils/suggestionList.js.map +1 -0
  29. package/dist/cjs/utils/usePortalContainer.js +33 -0
  30. package/dist/cjs/utils/usePortalContainer.js.map +1 -0
  31. package/dist/esm/components/Autocomplete/Autocomplete.css +63 -0
  32. package/dist/esm/components/Autocomplete/Autocomplete.js +187 -0
  33. package/dist/esm/components/Autocomplete/Autocomplete.js.map +1 -0
  34. package/dist/esm/components/Autocomplete/index.js +2 -0
  35. package/dist/esm/components/Autocomplete/index.js.map +1 -0
  36. package/dist/esm/components/Combobox/Combobox.js +5 -21
  37. package/dist/esm/components/Combobox/Combobox.js.map +1 -1
  38. package/dist/esm/components/ContextSelect/ContextSelect.js +2 -2
  39. package/dist/esm/components/ContextSelect/ContextSelect.js.map +1 -1
  40. package/dist/esm/components/Dialog/Dialog.js +9 -1
  41. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  42. package/dist/esm/components/DropdownSelect/DropdownSelect.js +2 -2
  43. package/dist/esm/components/DropdownSelect/DropdownSelect.js.map +1 -1
  44. package/dist/esm/components/InputCounter/InputCounter.css +175 -0
  45. package/dist/esm/components/InputCounter/InputCounter.js +160 -0
  46. package/dist/esm/components/InputCounter/InputCounter.js.map +1 -0
  47. package/dist/esm/components/InputCounter/index.js +3 -0
  48. package/dist/esm/components/InputCounter/index.js.map +1 -0
  49. package/dist/esm/components/Menu/Menu.js +26 -11
  50. package/dist/esm/components/Menu/Menu.js.map +1 -1
  51. package/dist/esm/components/Popover/Popover.js +10 -5
  52. package/dist/esm/components/Popover/Popover.js.map +1 -1
  53. package/dist/esm/components/Tooltip/Tooltip.js +7 -2
  54. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  55. package/dist/esm/components/index.js +2 -0
  56. package/dist/esm/components/index.js.map +1 -1
  57. package/dist/esm/utils/suggestionList.js +22 -0
  58. package/dist/esm/utils/suggestionList.js.map +1 -0
  59. package/dist/esm/utils/usePortalContainer.js +29 -0
  60. package/dist/esm/utils/usePortalContainer.js.map +1 -0
  61. package/dist/styles/components/Autocomplete.css +63 -0
  62. package/dist/styles/components/InputCounter.css +175 -0
  63. package/dist/styles/index.css +449 -205
  64. package/dist/styles/muka-dark.css +449 -205
  65. package/dist/styles/muka-light.css +449 -205
  66. package/dist/styles/wireframe-dark.css +449 -205
  67. package/dist/styles/wireframe-light.css +449 -205
  68. package/dist/types/components/Autocomplete/Autocomplete.d.ts +105 -0
  69. package/dist/types/components/Autocomplete/Autocomplete.d.ts.map +1 -0
  70. package/dist/types/components/Autocomplete/index.d.ts +2 -0
  71. package/dist/types/components/Autocomplete/index.d.ts.map +1 -0
  72. package/dist/types/components/Combobox/Combobox.d.ts +2 -2
  73. package/dist/types/components/Combobox/Combobox.d.ts.map +1 -1
  74. package/dist/types/components/ContextSelect/ContextSelect.d.ts +6 -0
  75. package/dist/types/components/ContextSelect/ContextSelect.d.ts.map +1 -1
  76. package/dist/types/components/Dialog/Dialog.d.ts.map +1 -1
  77. package/dist/types/components/DropdownSelect/DropdownSelect.d.ts +6 -0
  78. package/dist/types/components/DropdownSelect/DropdownSelect.d.ts.map +1 -1
  79. package/dist/types/components/InputCounter/InputCounter.d.ts +79 -0
  80. package/dist/types/components/InputCounter/InputCounter.d.ts.map +1 -0
  81. package/dist/types/components/InputCounter/index.d.ts +3 -0
  82. package/dist/types/components/InputCounter/index.d.ts.map +1 -0
  83. package/dist/types/components/Menu/Menu.d.ts +4 -4
  84. package/dist/types/components/Menu/Menu.d.ts.map +1 -1
  85. package/dist/types/components/Popover/Popover.d.ts +12 -0
  86. package/dist/types/components/Popover/Popover.d.ts.map +1 -1
  87. package/dist/types/components/Tooltip/Tooltip.d.ts +6 -0
  88. package/dist/types/components/Tooltip/Tooltip.d.ts.map +1 -1
  89. package/dist/types/components/index.d.ts +2 -0
  90. package/dist/types/components/index.d.ts.map +1 -1
  91. package/dist/types/utils/suggestionList.d.ts +13 -0
  92. package/dist/types/utils/suggestionList.d.ts.map +1 -0
  93. package/dist/types/utils/usePortalContainer.d.ts +19 -0
  94. package/dist/types/utils/usePortalContainer.d.ts.map +1 -0
  95. package/docs/consumers/README.md +2 -2
  96. package/package.json +1 -1
@@ -3799,6 +3799,88 @@ body {
3799
3799
  }
3800
3800
 
3801
3801
 
3802
+ /* TextLink */
3803
+ /* TextLink Component Styles - Using Muka Design Tokens */
3804
+
3805
+ .muka-text-link {
3806
+ display: inline;
3807
+ cursor: pointer;
3808
+ text-decoration: underline;
3809
+ /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
3810
+ text-underline-offset: 0.2em;
3811
+ text-decoration-thickness: from-font;
3812
+ /* Rounds the focus ring's corners; the link itself has no visible box. */
3813
+ border-radius: var(--border-radius-sm);
3814
+ transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
3815
+ }
3816
+
3817
+ /* ─── Sizes ───────────────────────────────────────────────
3818
+ Mirrors the body text scale so a link matches the copy it sits in. */
3819
+ .muka-text-link--sm {
3820
+ font-family: var(--text-body-sm-regular-fontFamily);
3821
+ font-weight: var(--text-body-sm-regular-fontWeight);
3822
+ font-size: var(--text-body-sm-regular-fontSize);
3823
+ line-height: var(--text-body-sm-regular-lineHeight);
3824
+ }
3825
+
3826
+ .muka-text-link--base {
3827
+ font-family: var(--text-body-base-regular-fontFamily);
3828
+ font-weight: var(--text-body-base-regular-fontWeight);
3829
+ font-size: var(--text-body-base-regular-fontSize);
3830
+ line-height: var(--text-body-base-regular-lineHeight);
3831
+ }
3832
+
3833
+ .muka-text-link--lg {
3834
+ font-family: var(--text-body-lg-regular-fontFamily);
3835
+ font-weight: var(--text-body-lg-regular-fontWeight);
3836
+ font-size: var(--text-body-lg-regular-fontSize);
3837
+ line-height: var(--text-body-lg-regular-lineHeight);
3838
+ }
3839
+
3840
+ /* ─── Variant: default (accent) ───────────────────────────
3841
+ Visited repeats the default colour on purpose: the design treats visited and
3842
+ default the same, and pinning it stops the browser's purple from showing. */
3843
+ .muka-text-link--default,
3844
+ .muka-text-link--default:visited {
3845
+ color: var(--color-text-action-default);
3846
+ }
3847
+
3848
+ .muka-text-link--default:hover,
3849
+ .muka-text-link--default:focus-visible {
3850
+ color: var(--color-text-action-hover);
3851
+ }
3852
+
3853
+ .muka-text-link--default:active {
3854
+ color: var(--color-text-action-pressed);
3855
+ }
3856
+
3857
+ /* ─── Variant: subtle (neutral) ───────────────────────────
3858
+ Hover, focus and pressed all darken to the default text colour. */
3859
+ .muka-text-link--subtle,
3860
+ .muka-text-link--subtle:visited {
3861
+ color: var(--color-text-subtle-default);
3862
+ }
3863
+
3864
+ .muka-text-link--subtle:hover,
3865
+ .muka-text-link--subtle:focus-visible,
3866
+ .muka-text-link--subtle:active {
3867
+ color: var(--color-text-default-default);
3868
+ }
3869
+
3870
+ /* ─── Focus ───────────────────────────────────────────────
3871
+ Same ring as every other focusable Muka component. */
3872
+ .muka-text-link:focus-visible {
3873
+ outline: 2px solid var(--color-border-focus);
3874
+ outline-offset: 2px;
3875
+ }
3876
+
3877
+ @media (prefers-reduced-motion: reduce) {
3878
+ .muka-text-link {
3879
+ transition: none;
3880
+ }
3881
+ }
3882
+
3883
+
3802
3884
  /* Textarea */
3803
3885
  /* Textarea Component Styles - Using Muka Design Tokens */
3804
3886
 
@@ -3963,88 +4045,6 @@ body {
3963
4045
  }
3964
4046
 
3965
4047
 
3966
- /* TextLink */
3967
- /* TextLink Component Styles - Using Muka Design Tokens */
3968
-
3969
- .muka-text-link {
3970
- display: inline;
3971
- cursor: pointer;
3972
- text-decoration: underline;
3973
- /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
3974
- text-underline-offset: 0.2em;
3975
- text-decoration-thickness: from-font;
3976
- /* Rounds the focus ring's corners; the link itself has no visible box. */
3977
- border-radius: var(--border-radius-sm);
3978
- transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
3979
- }
3980
-
3981
- /* ─── Sizes ───────────────────────────────────────────────
3982
- Mirrors the body text scale so a link matches the copy it sits in. */
3983
- .muka-text-link--sm {
3984
- font-family: var(--text-body-sm-regular-fontFamily);
3985
- font-weight: var(--text-body-sm-regular-fontWeight);
3986
- font-size: var(--text-body-sm-regular-fontSize);
3987
- line-height: var(--text-body-sm-regular-lineHeight);
3988
- }
3989
-
3990
- .muka-text-link--base {
3991
- font-family: var(--text-body-base-regular-fontFamily);
3992
- font-weight: var(--text-body-base-regular-fontWeight);
3993
- font-size: var(--text-body-base-regular-fontSize);
3994
- line-height: var(--text-body-base-regular-lineHeight);
3995
- }
3996
-
3997
- .muka-text-link--lg {
3998
- font-family: var(--text-body-lg-regular-fontFamily);
3999
- font-weight: var(--text-body-lg-regular-fontWeight);
4000
- font-size: var(--text-body-lg-regular-fontSize);
4001
- line-height: var(--text-body-lg-regular-lineHeight);
4002
- }
4003
-
4004
- /* ─── Variant: default (accent) ───────────────────────────
4005
- Visited repeats the default colour on purpose: the design treats visited and
4006
- default the same, and pinning it stops the browser's purple from showing. */
4007
- .muka-text-link--default,
4008
- .muka-text-link--default:visited {
4009
- color: var(--color-text-action-default);
4010
- }
4011
-
4012
- .muka-text-link--default:hover,
4013
- .muka-text-link--default:focus-visible {
4014
- color: var(--color-text-action-hover);
4015
- }
4016
-
4017
- .muka-text-link--default:active {
4018
- color: var(--color-text-action-pressed);
4019
- }
4020
-
4021
- /* ─── Variant: subtle (neutral) ───────────────────────────
4022
- Hover, focus and pressed all darken to the default text colour. */
4023
- .muka-text-link--subtle,
4024
- .muka-text-link--subtle:visited {
4025
- color: var(--color-text-subtle-default);
4026
- }
4027
-
4028
- .muka-text-link--subtle:hover,
4029
- .muka-text-link--subtle:focus-visible,
4030
- .muka-text-link--subtle:active {
4031
- color: var(--color-text-default-default);
4032
- }
4033
-
4034
- /* ─── Focus ───────────────────────────────────────────────
4035
- Same ring as every other focusable Muka component. */
4036
- .muka-text-link:focus-visible {
4037
- outline: 2px solid var(--color-border-focus);
4038
- outline-offset: 2px;
4039
- }
4040
-
4041
- @media (prefers-reduced-motion: reduce) {
4042
- .muka-text-link {
4043
- transition: none;
4044
- }
4045
- }
4046
-
4047
-
4048
4048
  /* Tabs */
4049
4049
  /* Tabs Component Styles - Clean underline style tabs matching Figma */
4050
4050
 
@@ -7466,6 +7466,77 @@ body {
7466
7466
  }
7467
7467
 
7468
7468
 
7469
+ /* ProfileBadge */
7470
+ /* ProfileBadge Component Styles - Using Muka Design Tokens */
7471
+
7472
+ .muka-profile-badge {
7473
+ display: inline-flex;
7474
+ align-items: center;
7475
+ font-family: var(--text-body-base-regular-fontFamily);
7476
+ }
7477
+
7478
+ /* Size variants */
7479
+ .muka-profile-badge--lg {
7480
+ gap: var(--spacing-4); /* 16px */
7481
+ }
7482
+
7483
+ .muka-profile-badge--md {
7484
+ gap: var(--spacing-3); /* 12px */
7485
+ }
7486
+
7487
+ .muka-profile-badge__avatar {
7488
+ flex-shrink: 0;
7489
+ }
7490
+
7491
+ /* Text stack */
7492
+ .muka-profile-badge__text {
7493
+ display: flex;
7494
+ flex-direction: column;
7495
+ align-items: flex-start;
7496
+ min-width: 0;
7497
+ }
7498
+
7499
+ .muka-profile-badge__name {
7500
+ font-family: var(--text-body-base-regular-fontFamily);
7501
+ font-size: var(--text-body-base-regular-fontSize);
7502
+ font-weight: var(--text-body-base-regular-fontWeight);
7503
+ line-height: var(--text-body-base-regular-lineHeight);
7504
+ color: var(--color-text-default-default);
7505
+ }
7506
+
7507
+ .muka-profile-badge__email {
7508
+ font-family: var(--text-body-xs-regular-fontFamily);
7509
+ font-size: var(--text-body-xs-regular-fontSize);
7510
+ font-weight: var(--text-body-xs-regular-fontWeight);
7511
+ line-height: var(--text-body-xs-regular-lineHeight);
7512
+ color: var(--color-text-subtle-default);
7513
+ }
7514
+
7515
+ /* Clickable state */
7516
+ .muka-profile-badge--clickable {
7517
+ cursor: pointer;
7518
+ border: none;
7519
+ background: none;
7520
+ padding: 0;
7521
+ text-align: left;
7522
+ border-radius: var(--radius-md);
7523
+ transition: opacity 0.2s ease;
7524
+ }
7525
+
7526
+ .muka-profile-badge--clickable:hover {
7527
+ opacity: 0.9;
7528
+ }
7529
+
7530
+ .muka-profile-badge--clickable:active {
7531
+ opacity: 0.8;
7532
+ }
7533
+
7534
+ .muka-profile-badge--clickable:focus-visible {
7535
+ outline: 2px solid var(--color-border-focus);
7536
+ outline-offset: 2px;
7537
+ }
7538
+
7539
+
7469
7540
  /* PriceTag */
7470
7541
  /* PriceTag Component Styles - Using Muka Design Tokens */
7471
7542
 
@@ -7532,105 +7603,34 @@ body {
7532
7603
  color: var(--color-text-default-default);
7533
7604
  }
7534
7605
 
7535
- /* ─── Small size typography ───────────────────────────── */
7536
-
7537
- .muka-price-tag--sm .muka-price-tag__currency {
7538
- font-family: var(--text-body-base-regular-fontFamily);
7539
- font-weight: var(--text-body-base-regular-fontWeight);
7540
- font-size: var(--text-body-base-regular-fontSize);
7541
- line-height: var(--text-label-md-bold-lineHeight);
7542
- color: var(--color-text-subtle-default);
7543
- }
7544
-
7545
- .muka-price-tag--sm .muka-price-tag__whole,
7546
- .muka-price-tag--sm .muka-price-tag__decimal,
7547
- .muka-price-tag--sm .muka-price-tag__cents {
7548
- font-family: var(--text-label-md-bold-fontFamily);
7549
- font-weight: var(--text-label-md-bold-fontWeight);
7550
- font-size: var(--text-label-md-bold-fontSize);
7551
- line-height: var(--text-label-md-bold-lineHeight);
7552
- color: var(--color-text-default-default);
7553
- }
7554
-
7555
- /* ─── Unit label (same for both sizes) ────────────────── */
7556
-
7557
- .muka-price-tag__unit {
7558
- font-family: var(--text-body-sm-regular-fontFamily);
7559
- font-weight: var(--text-body-sm-regular-fontWeight);
7560
- font-size: var(--text-body-sm-regular-fontSize);
7561
- line-height: var(--text-body-sm-regular-lineHeight);
7562
- color: var(--color-text-subtle-default);
7563
- }
7564
-
7565
-
7566
- /* ProfileBadge */
7567
- /* ProfileBadge Component Styles - Using Muka Design Tokens */
7568
-
7569
- .muka-profile-badge {
7570
- display: inline-flex;
7571
- align-items: center;
7572
- font-family: var(--text-body-base-regular-fontFamily);
7573
- }
7574
-
7575
- /* Size variants */
7576
- .muka-profile-badge--lg {
7577
- gap: var(--spacing-4); /* 16px */
7578
- }
7579
-
7580
- .muka-profile-badge--md {
7581
- gap: var(--spacing-3); /* 12px */
7582
- }
7583
-
7584
- .muka-profile-badge__avatar {
7585
- flex-shrink: 0;
7586
- }
7587
-
7588
- /* Text stack */
7589
- .muka-profile-badge__text {
7590
- display: flex;
7591
- flex-direction: column;
7592
- align-items: flex-start;
7593
- min-width: 0;
7594
- }
7595
-
7596
- .muka-profile-badge__name {
7597
- font-family: var(--text-body-base-regular-fontFamily);
7598
- font-size: var(--text-body-base-regular-fontSize);
7599
- font-weight: var(--text-body-base-regular-fontWeight);
7600
- line-height: var(--text-body-base-regular-lineHeight);
7601
- color: var(--color-text-default-default);
7602
- }
7603
-
7604
- .muka-profile-badge__email {
7605
- font-family: var(--text-body-xs-regular-fontFamily);
7606
- font-size: var(--text-body-xs-regular-fontSize);
7607
- font-weight: var(--text-body-xs-regular-fontWeight);
7608
- line-height: var(--text-body-xs-regular-lineHeight);
7609
- color: var(--color-text-subtle-default);
7610
- }
7611
-
7612
- /* Clickable state */
7613
- .muka-profile-badge--clickable {
7614
- cursor: pointer;
7615
- border: none;
7616
- background: none;
7617
- padding: 0;
7618
- text-align: left;
7619
- border-radius: var(--radius-md);
7620
- transition: opacity 0.2s ease;
7621
- }
7622
-
7623
- .muka-profile-badge--clickable:hover {
7624
- opacity: 0.9;
7606
+ /* ─── Small size typography ───────────────────────────── */
7607
+
7608
+ .muka-price-tag--sm .muka-price-tag__currency {
7609
+ font-family: var(--text-body-base-regular-fontFamily);
7610
+ font-weight: var(--text-body-base-regular-fontWeight);
7611
+ font-size: var(--text-body-base-regular-fontSize);
7612
+ line-height: var(--text-label-md-bold-lineHeight);
7613
+ color: var(--color-text-subtle-default);
7625
7614
  }
7626
7615
 
7627
- .muka-profile-badge--clickable:active {
7628
- opacity: 0.8;
7616
+ .muka-price-tag--sm .muka-price-tag__whole,
7617
+ .muka-price-tag--sm .muka-price-tag__decimal,
7618
+ .muka-price-tag--sm .muka-price-tag__cents {
7619
+ font-family: var(--text-label-md-bold-fontFamily);
7620
+ font-weight: var(--text-label-md-bold-fontWeight);
7621
+ font-size: var(--text-label-md-bold-fontSize);
7622
+ line-height: var(--text-label-md-bold-lineHeight);
7623
+ color: var(--color-text-default-default);
7629
7624
  }
7630
7625
 
7631
- .muka-profile-badge--clickable:focus-visible {
7632
- outline: 2px solid var(--color-border-focus);
7633
- outline-offset: 2px;
7626
+ /* ─── Unit label (same for both sizes) ────────────────── */
7627
+
7628
+ .muka-price-tag__unit {
7629
+ font-family: var(--text-body-sm-regular-fontFamily);
7630
+ font-weight: var(--text-body-sm-regular-fontWeight);
7631
+ font-size: var(--text-body-sm-regular-fontSize);
7632
+ line-height: var(--text-body-sm-regular-lineHeight);
7633
+ color: var(--color-text-subtle-default);
7634
7634
  }
7635
7635
 
7636
7636
 
@@ -8052,6 +8052,34 @@ body {
8052
8052
  }
8053
8053
 
8054
8054
 
8055
+ /* NavigationTransition */
8056
+ /* NavigationTransition Component Styles */
8057
+
8058
+ /* ─── Wrapper ────────────────────────────────────────── */
8059
+
8060
+ .muka-nav-transition {
8061
+ position: relative;
8062
+ height: 100vh;
8063
+ overflow: hidden;
8064
+ }
8065
+
8066
+ /* Disable interaction during animation */
8067
+ .muka-nav-transition--active {
8068
+ pointer-events: none;
8069
+ }
8070
+
8071
+ /* ─── View slots ─────────────────────────────────────── */
8072
+
8073
+ .muka-nav-transition--active .muka-nav-transition__view {
8074
+ position: absolute;
8075
+ inset: 0;
8076
+ }
8077
+
8078
+ /* Z-index layering */
8079
+ .muka-nav-transition__view--bottom { z-index: 1; }
8080
+ .muka-nav-transition__view--top { z-index: 2; }
8081
+
8082
+
8055
8083
  /* Menu */
8056
8084
  /* Menu Component Styles */
8057
8085
 
@@ -8531,34 +8559,6 @@ body {
8531
8559
  }
8532
8560
 
8533
8561
 
8534
- /* NavigationTransition */
8535
- /* NavigationTransition Component Styles */
8536
-
8537
- /* ─── Wrapper ────────────────────────────────────────── */
8538
-
8539
- .muka-nav-transition {
8540
- position: relative;
8541
- height: 100vh;
8542
- overflow: hidden;
8543
- }
8544
-
8545
- /* Disable interaction during animation */
8546
- .muka-nav-transition--active {
8547
- pointer-events: none;
8548
- }
8549
-
8550
- /* ─── View slots ─────────────────────────────────────── */
8551
-
8552
- .muka-nav-transition--active .muka-nav-transition__view {
8553
- position: absolute;
8554
- inset: 0;
8555
- }
8556
-
8557
- /* Z-index layering */
8558
- .muka-nav-transition__view--bottom { z-index: 1; }
8559
- .muka-nav-transition__view--top { z-index: 2; }
8560
-
8561
-
8562
8562
  /* ListItem */
8563
8563
  /* ListItem Component Styles - Using Muka Design Tokens */
8564
8564
 
@@ -8987,6 +8987,184 @@ li.muka-listitem {
8987
8987
  }
8988
8988
 
8989
8989
 
8990
+ /* InputCounter */
8991
+ /* InputCounter — numeric field + joined decrement/increment buttons.
8992
+ Label, helper and error text reuse Input.css (../Input/Input.css).
8993
+ Field and button group share one radius per size:
8994
+ sm/md → input.field.radius.md, lg → input.field.radius.lg. */
8995
+
8996
+ .muka-inputcounter {
8997
+ --muka-inputcounter-radius: var(--input-field-radius-md);
8998
+ --muka-inputcounter-height: var(--input-field-height-default);
8999
+ --muka-inputcounter-pad: calc(var(--spacing-2) + var(--spacing-1));
9000
+ --muka-inputcounter-min: var(--size-3xl);
9001
+
9002
+ display: inline-flex;
9003
+ flex-direction: column;
9004
+ gap: var(--spacing-2);
9005
+ }
9006
+
9007
+ .muka-inputcounter--sm {
9008
+ --muka-inputcounter-height: var(--input-field-height-sm);
9009
+ --muka-inputcounter-pad: calc(var(--spacing-1) + var(--spacing-1));
9010
+ --muka-inputcounter-min: var(--size-2xl);
9011
+ }
9012
+
9013
+ .muka-inputcounter--lg {
9014
+ --muka-inputcounter-radius: var(--input-field-radius-lg);
9015
+ --muka-inputcounter-height: var(--input-field-height-lg);
9016
+ }
9017
+
9018
+ /* Label row — label, info tooltip trigger, optional hint */
9019
+ .muka-inputcounter__label-row {
9020
+ display: flex;
9021
+ align-items: center;
9022
+ gap: var(--spacing-2);
9023
+ min-height: var(--size-xl);
9024
+ }
9025
+
9026
+ .muka-inputcounter__info {
9027
+ display: inline-flex;
9028
+ align-items: center;
9029
+ justify-content: center;
9030
+ padding: 0;
9031
+ border: none;
9032
+ border-radius: 50%;
9033
+ background: transparent;
9034
+ cursor: pointer;
9035
+ }
9036
+
9037
+ .muka-inputcounter__info .muka-icon {
9038
+ color: var(--color-action-default);
9039
+ }
9040
+
9041
+ .muka-inputcounter__info:focus-visible {
9042
+ outline: 2px solid var(--color-border-focus);
9043
+ outline-offset: 2px;
9044
+ }
9045
+
9046
+ .muka-inputcounter__optional {
9047
+ font-family: var(--text-label-sm-regular-fontFamily);
9048
+ font-weight: var(--text-label-sm-regular-fontWeight);
9049
+ font-size: var(--text-label-sm-regular-fontSize);
9050
+ line-height: var(--text-label-sm-regular-lineHeight);
9051
+ color: var(--color-text-subtle-default);
9052
+ }
9053
+
9054
+ /* Field + button group */
9055
+ .muka-inputcounter__row {
9056
+ display: flex;
9057
+ align-items: center;
9058
+ gap: var(--spacing-3);
9059
+ }
9060
+
9061
+ /* Field — grows with the value (in ch), never narrower than the Figma width.
9062
+ Padding sits on the native input so the 2px focus/error border doesn't
9063
+ need compensating: content is centred in a fixed box. */
9064
+ .muka-inputcounter__field {
9065
+ position: relative;
9066
+ display: flex;
9067
+ align-items: center;
9068
+ box-sizing: border-box;
9069
+ height: var(--muka-inputcounter-height);
9070
+ width: calc(
9071
+ max(var(--muka-inputcounter-min), calc(var(--muka-inputcounter-chars, 1) * 1ch)) +
9072
+ 2 * var(--muka-inputcounter-pad) + 2 * var(--border-width-regular)
9073
+ );
9074
+ background-color: var(--input-field-color-default-background);
9075
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
9076
+ border-radius: var(--muka-inputcounter-radius);
9077
+ transition: border-color 0.2s ease, background-color 0.2s ease;
9078
+ }
9079
+
9080
+ .muka-inputcounter__field::after {
9081
+ content: '';
9082
+ position: absolute;
9083
+ inset: 0;
9084
+ border-radius: inherit;
9085
+ box-shadow: var(--shadow-sunken);
9086
+ pointer-events: none;
9087
+ }
9088
+
9089
+ .muka-inputcounter__field--focused:not(.muka-inputcounter__field--disabled) {
9090
+ border-width: var(--border-width-bold);
9091
+ border-color: var(--input-field-color-focus-border);
9092
+ background-color: var(--input-field-color-focus-background);
9093
+ }
9094
+
9095
+ .muka-inputcounter__field--error:not(.muka-inputcounter__field--disabled) {
9096
+ border-width: var(--border-width-bold);
9097
+ border-color: var(--input-field-color-error-border);
9098
+ background-color: var(--input-field-color-error-background);
9099
+ }
9100
+
9101
+ .muka-inputcounter__field--disabled {
9102
+ background-color: var(--input-field-color-disabled-background);
9103
+ border-color: var(--input-field-color-disabled-border);
9104
+ }
9105
+
9106
+ .muka-inputcounter__field--disabled::after {
9107
+ display: none;
9108
+ }
9109
+
9110
+ .muka-inputcounter__native {
9111
+ width: 100%;
9112
+ min-width: 0;
9113
+ height: 100%;
9114
+ box-sizing: border-box;
9115
+ padding: 0 calc(var(--muka-inputcounter-pad) - var(--border-width-regular));
9116
+ border: none;
9117
+ outline: none;
9118
+ background: transparent;
9119
+ text-align: center;
9120
+ font-variant-numeric: tabular-nums;
9121
+ color: var(--input-field-color-default-foreground);
9122
+ font-family: var(--text-input-md-fontFamily);
9123
+ font-weight: var(--text-input-md-fontWeight);
9124
+ font-size: var(--text-input-md-fontSize);
9125
+ line-height: var(--text-input-md-lineHeight);
9126
+ }
9127
+
9128
+ .muka-inputcounter--sm .muka-inputcounter__native {
9129
+ font-family: var(--text-input-sm-fontFamily);
9130
+ font-weight: var(--text-input-sm-fontWeight);
9131
+ font-size: var(--text-input-sm-fontSize);
9132
+ line-height: var(--text-input-sm-lineHeight);
9133
+ }
9134
+
9135
+ .muka-inputcounter__field--disabled .muka-inputcounter__native {
9136
+ color: var(--input-field-color-disabled-foreground);
9137
+ cursor: not-allowed;
9138
+ }
9139
+
9140
+ /* Button group — secondary icon-only Buttons joined by a divider.
9141
+ Only the outer corners are rounded. */
9142
+ .muka-inputcounter__group {
9143
+ display: inline-flex;
9144
+ align-items: stretch;
9145
+ }
9146
+
9147
+ .muka-inputcounter__group .muka-button {
9148
+ border-radius: 0;
9149
+ }
9150
+
9151
+ .muka-inputcounter__group .muka-button:first-child {
9152
+ border-start-start-radius: var(--muka-inputcounter-radius);
9153
+ border-end-start-radius: var(--muka-inputcounter-radius);
9154
+ }
9155
+
9156
+ .muka-inputcounter__group .muka-button:last-child {
9157
+ border-start-end-radius: var(--muka-inputcounter-radius);
9158
+ border-end-end-radius: var(--muka-inputcounter-radius);
9159
+ }
9160
+
9161
+ .muka-inputcounter__divider {
9162
+ flex: none;
9163
+ width: var(--border-width-regular);
9164
+ background-color: var(--color-border-default);
9165
+ }
9166
+
9167
+
8990
9168
  /* Input */
8991
9169
  /* Input Component Styles - Using Muka Design Tokens */
8992
9170
 
@@ -14612,6 +14790,72 @@ button.muka-chat-photo-grid__tile:focus-visible {
14612
14790
  }
14613
14791
 
14614
14792
 
14793
+ /* Autocomplete */
14794
+ /* Autocomplete — Figma Input Autocomplete (Input field + single-line suggestion Menu).
14795
+ The field reuses the Input styles (.muka-input*); only the menu wiring lives here. */
14796
+
14797
+ .muka-autocomplete {
14798
+ min-width: 200px;
14799
+ }
14800
+
14801
+ /* Covers the field's outer edge so the menu matches its full width. The menu
14802
+ is only open while focused, when the field has the bold border. */
14803
+ .muka-autocomplete__menu-anchor {
14804
+ position: absolute;
14805
+ inset: calc(-1 * var(--border-width-bold));
14806
+ z-index: 0;
14807
+ margin: 0;
14808
+ padding: 0;
14809
+ border: none;
14810
+ background: transparent;
14811
+ pointer-events: none;
14812
+ opacity: 0;
14813
+ }
14814
+
14815
+ /* Keep the field content above the invisible anchor. */
14816
+ .muka-autocomplete__field > :not(.muka-autocomplete__menu-anchor) {
14817
+ position: relative;
14818
+ z-index: 1;
14819
+ }
14820
+
14821
+ /* Figma: the menu is as wide as the field (never below the menu min-width token). */
14822
+ .muka-autocomplete__menu {
14823
+ width: var(--radix-dropdown-menu-trigger-width);
14824
+ max-width: calc(100vw - 2rem);
14825
+ }
14826
+
14827
+ /* Suggestions are single-line; long labels truncate. */
14828
+ .muka-autocomplete__menu .muka-menu__item-label {
14829
+ overflow: hidden;
14830
+ text-overflow: ellipsis;
14831
+ }
14832
+
14833
+ /* Loading and empty rows: menu-row geometry, not selectable. */
14834
+ .muka-autocomplete__status {
14835
+ display: flex;
14836
+ align-items: center;
14837
+ gap: var(--menu-item-gap);
14838
+ min-height: var(--menu-item-height);
14839
+ padding: var(--menu-item-padding-y) var(--menu-item-padding-x);
14840
+ color: var(--color-text-subtle-default);
14841
+ font-family: var(--text-label-md-regular-fontFamily);
14842
+ font-size: var(--text-label-md-regular-fontSize);
14843
+ font-weight: var(--text-label-md-regular-fontWeight);
14844
+ line-height: var(--text-label-md-regular-lineHeight);
14845
+ }
14846
+
14847
+ .muka-autocomplete__footer {
14848
+ flex-shrink: 0;
14849
+ padding: var(--spacing-2) var(--spacing-3);
14850
+ border-top: var(--border-width-regular) solid var(--color-border-default);
14851
+ color: var(--color-text-subtle-default);
14852
+ font-family: var(--text-label-sm-regular-fontFamily);
14853
+ font-size: var(--text-label-sm-regular-fontSize);
14854
+ font-weight: var(--text-label-sm-regular-fontWeight);
14855
+ line-height: var(--text-label-sm-regular-lineHeight);
14856
+ }
14857
+
14858
+
14615
14859
  /* AppShell */
14616
14860
  /* AppShell Component Styles */
14617
14861