@bug-on/m3-expressive 1.0.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 (98) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/README.md +110 -0
  3. package/dist/assets/fonts/GoogleSansFlex-VariableFont.woff2 +0 -0
  4. package/dist/assets/fonts/MaterialSymbolsOutlined-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  5. package/dist/assets/fonts/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  6. package/dist/assets/fonts/MaterialSymbolsSharp-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  7. package/dist/assets/loading-indicator.svg +19 -0
  8. package/dist/assets/material-symbols-cdn.css +65 -0
  9. package/dist/assets/material-symbols-self-hosted.css +94 -0
  10. package/dist/buttons.d.mts +180 -0
  11. package/dist/buttons.d.ts +180 -0
  12. package/dist/buttons.js +4282 -0
  13. package/dist/buttons.js.map +1 -0
  14. package/dist/buttons.mjs +4227 -0
  15. package/dist/buttons.mjs.map +1 -0
  16. package/dist/core.d.mts +422 -0
  17. package/dist/core.d.ts +422 -0
  18. package/dist/core.js +2581 -0
  19. package/dist/core.js.map +1 -0
  20. package/dist/core.mjs +2547 -0
  21. package/dist/core.mjs.map +1 -0
  22. package/dist/feedback.d.mts +600 -0
  23. package/dist/feedback.d.ts +600 -0
  24. package/dist/feedback.js +2357 -0
  25. package/dist/feedback.js.map +1 -0
  26. package/dist/feedback.mjs +2321 -0
  27. package/dist/feedback.mjs.map +1 -0
  28. package/dist/forms.d.mts +40 -0
  29. package/dist/forms.d.ts +40 -0
  30. package/dist/forms.js +4263 -0
  31. package/dist/forms.js.map +1 -0
  32. package/dist/forms.mjs +4228 -0
  33. package/dist/forms.mjs.map +1 -0
  34. package/dist/icon-button-D-gs0gfj.d.mts +136 -0
  35. package/dist/icon-button-D-gs0gfj.d.ts +136 -0
  36. package/dist/index.css +309 -0
  37. package/dist/index.css.d.ts +2 -0
  38. package/dist/index.d.mts +24 -0
  39. package/dist/index.d.ts +24 -0
  40. package/dist/index.js +23972 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/index.mjs +23668 -0
  43. package/dist/index.mjs.map +1 -0
  44. package/dist/layout.d.mts +610 -0
  45. package/dist/layout.d.ts +610 -0
  46. package/dist/layout.js +5091 -0
  47. package/dist/layout.js.map +1 -0
  48. package/dist/layout.mjs +5042 -0
  49. package/dist/layout.mjs.map +1 -0
  50. package/dist/material-symbols-cdn.css +65 -0
  51. package/dist/material-symbols-cdn.css.d.ts +2 -0
  52. package/dist/material-symbols-self-hosted.css +94 -0
  53. package/dist/material-symbols-self-hosted.css.d.ts +2 -0
  54. package/dist/md3-DFhj-NZj.d.mts +17 -0
  55. package/dist/md3-DFhj-NZj.d.ts +17 -0
  56. package/dist/navigation.d.mts +2766 -0
  57. package/dist/navigation.d.ts +2766 -0
  58. package/dist/navigation.js +6684 -0
  59. package/dist/navigation.js.map +1 -0
  60. package/dist/navigation.mjs +6573 -0
  61. package/dist/navigation.mjs.map +1 -0
  62. package/dist/overlays.d.mts +161 -0
  63. package/dist/overlays.d.ts +161 -0
  64. package/dist/overlays.js +3298 -0
  65. package/dist/overlays.js.map +1 -0
  66. package/dist/overlays.mjs +3244 -0
  67. package/dist/overlays.mjs.map +1 -0
  68. package/dist/pickers.d.mts +1074 -0
  69. package/dist/pickers.d.ts +1074 -0
  70. package/dist/pickers.js +4240 -0
  71. package/dist/pickers.js.map +1 -0
  72. package/dist/pickers.mjs +4200 -0
  73. package/dist/pickers.mjs.map +1 -0
  74. package/dist/plugin.d.mts +1 -0
  75. package/dist/plugin.d.ts +1 -0
  76. package/dist/plugin.js +13 -0
  77. package/dist/plugin.js.map +1 -0
  78. package/dist/plugin.mjs +3 -0
  79. package/dist/plugin.mjs.map +1 -0
  80. package/dist/scroll-area-CVS6HyLl.d.mts +33 -0
  81. package/dist/scroll-area-CVS6HyLl.d.ts +33 -0
  82. package/dist/shapes.d.mts +1119 -0
  83. package/dist/shapes.d.ts +1119 -0
  84. package/dist/shapes.js +2941 -0
  85. package/dist/shapes.js.map +1 -0
  86. package/dist/shapes.mjs +2889 -0
  87. package/dist/shapes.mjs.map +1 -0
  88. package/dist/side-sheet-modal-BY6VCC8p.d.mts +553 -0
  89. package/dist/side-sheet-modal-CglP6KYA.d.ts +553 -0
  90. package/dist/split-button-trailing-uncheckable-C5CLCIKP.d.ts +731 -0
  91. package/dist/split-button-trailing-uncheckable-MXj_kyNt.d.mts +731 -0
  92. package/dist/text-field-eAIpz9z1.d.mts +1038 -0
  93. package/dist/text-field-eAIpz9z1.d.ts +1038 -0
  94. package/dist/typography-339RV6v7.d.mts +486 -0
  95. package/dist/typography-339RV6v7.d.ts +486 -0
  96. package/dist/typography.css +22 -0
  97. package/dist/typography.css.d.ts +2 -0
  98. package/package.json +207 -0
@@ -0,0 +1,136 @@
1
+ import { HTMLMotionProps } from 'motion/react';
2
+ import * as React from 'react';
3
+
4
+ /**
5
+ * @file icon-button.tsx
6
+ *
7
+ * MD3 Expressive Icon Button component.
8
+ *
9
+ * An icon-only button with shape morphing, ripple effect, loading state,
10
+ * and toggle variant. Requires `aria-label` for accessibility since there
11
+ * is no visible text label.
12
+ *
13
+ * @see https://m3.material.io/components/icon-buttons/overview
14
+ */
15
+
16
+ type MotionButtonProps = Omit<HTMLMotionProps<"button">, "children" | "color">;
17
+ /**
18
+ * Base props for the Icon Button component.
19
+ *
20
+ * @see {@link IconButtonProps} for the full discriminated union.
21
+ * @see https://m3.material.io/components/icon-buttons/overview
22
+ */
23
+ interface BaseIconButtonProps extends MotionButtonProps {
24
+ /**
25
+ * Visual color style following MD3 color roles.
26
+ * @default "standard"
27
+ */
28
+ colorStyle?: "standard" | "filled" | "tonal" | "outlined";
29
+ /**
30
+ * Button container size.
31
+ * Sizes: XS=32dp, SM=40dp, MD=56dp, LG=96dp, XL=136dp.
32
+ * @default "sm"
33
+ */
34
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
35
+ /**
36
+ * Container shape controlling border-radius morphing.
37
+ * - `round`: fully circular (CornerFull).
38
+ * - `square`: rounded square (CornerMedium–CornerExtraLarge per size).
39
+ * @default "round"
40
+ */
41
+ shape?: "round" | "square";
42
+ /**
43
+ * When `true`, replaces the icon with an animated loading indicator.
44
+ * Interaction is blocked and `aria-busy` is set.
45
+ * @default false
46
+ */
47
+ loading?: boolean;
48
+ /**
49
+ * Spinner style shown while `loading={true}`.
50
+ * @default "loading-indicator"
51
+ */
52
+ loadingVariant?: "loading-indicator" | "circular";
53
+ /** Explicit icon size override in px */
54
+ iconSize?: number | "inherit";
55
+ /** Icon content — typically a single SVG icon component. */
56
+ children: React.ReactNode;
57
+ /**
58
+ * Accessible label — **REQUIRED** because icon buttons have no visible text.
59
+ *
60
+ * @example "Close", "Add to favourites", "Toggle dark mode"
61
+ * @see https://m3.material.io/components/icon-buttons/accessibility
62
+ */
63
+ "aria-label": string;
64
+ }
65
+ /**
66
+ * Complete `IconButton` props — discriminated union that enforces
67
+ * `selected` is only valid with `variant="toggle"`.
68
+ *
69
+ * @example
70
+ * ```tsx
71
+ * // Standard
72
+ * <IconButton aria-label="Close" onClick={handleClose}>
73
+ * <XIcon />
74
+ * </IconButton>
75
+ *
76
+ * // Toggle
77
+ * <IconButton
78
+ * variant="toggle"
79
+ * selected={isLiked}
80
+ * aria-label={isLiked ? "Unlike" : "Like"}
81
+ * colorStyle="filled"
82
+ * onClick={() => setIsLiked(!isLiked)}
83
+ * >
84
+ * <HeartIcon />
85
+ * </IconButton>
86
+ * ```
87
+ *
88
+ * @see https://m3.material.io/components/icon-buttons/overview
89
+ */
90
+ type IconButtonProps = BaseIconButtonProps & ({
91
+ variant?: "default";
92
+ selected?: never;
93
+ } | {
94
+ variant: "toggle";
95
+ selected: boolean;
96
+ });
97
+ /**
98
+ * MD3 Expressive Icon Button.
99
+ *
100
+ * An icon-only button with spring shape morphing, ripple effect, loading state support,
101
+ * and an optional toggle variant. Compliant with MD3 Expressive sizing and WCAG 2.5.5
102
+ * (touch target minimum for XS and SM sizes).
103
+ *
104
+ * @remarks
105
+ * - `aria-label` is **required** — icon buttons have no visible text label.
106
+ * - `variant="toggle"` requires `selected: boolean`.
107
+ * - Touch target is automatically extended to 48dp for `xs` and `sm` sizes.
108
+ *
109
+ * @example
110
+ * ```tsx
111
+ * <IconButton aria-label="Close" onClick={handleClose}>
112
+ * <XIcon />
113
+ * </IconButton>
114
+ *
115
+ * <IconButton
116
+ * variant="toggle"
117
+ * selected={isBookmarked}
118
+ * aria-label={isBookmarked ? "Remove bookmark" : "Bookmark"}
119
+ * colorStyle="filled"
120
+ * onClick={toggleBookmark}
121
+ * >
122
+ * <BookmarkIcon />
123
+ * </IconButton>
124
+ * ```
125
+ *
126
+ * @see https://m3.material.io/components/icon-buttons/overview
127
+ */
128
+ declare const IconButton: React.NamedExoticComponent<(Omit<BaseIconButtonProps & {
129
+ variant?: "default";
130
+ selected?: never;
131
+ }, "ref"> | Omit<BaseIconButtonProps & {
132
+ variant: "toggle";
133
+ selected: boolean;
134
+ }, "ref">) & React.RefAttributes<HTMLButtonElement>>;
135
+
136
+ export { type BaseIconButtonProps as B, IconButton as I, type IconButtonProps as a };
@@ -0,0 +1,136 @@
1
+ import { HTMLMotionProps } from 'motion/react';
2
+ import * as React from 'react';
3
+
4
+ /**
5
+ * @file icon-button.tsx
6
+ *
7
+ * MD3 Expressive Icon Button component.
8
+ *
9
+ * An icon-only button with shape morphing, ripple effect, loading state,
10
+ * and toggle variant. Requires `aria-label` for accessibility since there
11
+ * is no visible text label.
12
+ *
13
+ * @see https://m3.material.io/components/icon-buttons/overview
14
+ */
15
+
16
+ type MotionButtonProps = Omit<HTMLMotionProps<"button">, "children" | "color">;
17
+ /**
18
+ * Base props for the Icon Button component.
19
+ *
20
+ * @see {@link IconButtonProps} for the full discriminated union.
21
+ * @see https://m3.material.io/components/icon-buttons/overview
22
+ */
23
+ interface BaseIconButtonProps extends MotionButtonProps {
24
+ /**
25
+ * Visual color style following MD3 color roles.
26
+ * @default "standard"
27
+ */
28
+ colorStyle?: "standard" | "filled" | "tonal" | "outlined";
29
+ /**
30
+ * Button container size.
31
+ * Sizes: XS=32dp, SM=40dp, MD=56dp, LG=96dp, XL=136dp.
32
+ * @default "sm"
33
+ */
34
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
35
+ /**
36
+ * Container shape controlling border-radius morphing.
37
+ * - `round`: fully circular (CornerFull).
38
+ * - `square`: rounded square (CornerMedium–CornerExtraLarge per size).
39
+ * @default "round"
40
+ */
41
+ shape?: "round" | "square";
42
+ /**
43
+ * When `true`, replaces the icon with an animated loading indicator.
44
+ * Interaction is blocked and `aria-busy` is set.
45
+ * @default false
46
+ */
47
+ loading?: boolean;
48
+ /**
49
+ * Spinner style shown while `loading={true}`.
50
+ * @default "loading-indicator"
51
+ */
52
+ loadingVariant?: "loading-indicator" | "circular";
53
+ /** Explicit icon size override in px */
54
+ iconSize?: number | "inherit";
55
+ /** Icon content — typically a single SVG icon component. */
56
+ children: React.ReactNode;
57
+ /**
58
+ * Accessible label — **REQUIRED** because icon buttons have no visible text.
59
+ *
60
+ * @example "Close", "Add to favourites", "Toggle dark mode"
61
+ * @see https://m3.material.io/components/icon-buttons/accessibility
62
+ */
63
+ "aria-label": string;
64
+ }
65
+ /**
66
+ * Complete `IconButton` props — discriminated union that enforces
67
+ * `selected` is only valid with `variant="toggle"`.
68
+ *
69
+ * @example
70
+ * ```tsx
71
+ * // Standard
72
+ * <IconButton aria-label="Close" onClick={handleClose}>
73
+ * <XIcon />
74
+ * </IconButton>
75
+ *
76
+ * // Toggle
77
+ * <IconButton
78
+ * variant="toggle"
79
+ * selected={isLiked}
80
+ * aria-label={isLiked ? "Unlike" : "Like"}
81
+ * colorStyle="filled"
82
+ * onClick={() => setIsLiked(!isLiked)}
83
+ * >
84
+ * <HeartIcon />
85
+ * </IconButton>
86
+ * ```
87
+ *
88
+ * @see https://m3.material.io/components/icon-buttons/overview
89
+ */
90
+ type IconButtonProps = BaseIconButtonProps & ({
91
+ variant?: "default";
92
+ selected?: never;
93
+ } | {
94
+ variant: "toggle";
95
+ selected: boolean;
96
+ });
97
+ /**
98
+ * MD3 Expressive Icon Button.
99
+ *
100
+ * An icon-only button with spring shape morphing, ripple effect, loading state support,
101
+ * and an optional toggle variant. Compliant with MD3 Expressive sizing and WCAG 2.5.5
102
+ * (touch target minimum for XS and SM sizes).
103
+ *
104
+ * @remarks
105
+ * - `aria-label` is **required** — icon buttons have no visible text label.
106
+ * - `variant="toggle"` requires `selected: boolean`.
107
+ * - Touch target is automatically extended to 48dp for `xs` and `sm` sizes.
108
+ *
109
+ * @example
110
+ * ```tsx
111
+ * <IconButton aria-label="Close" onClick={handleClose}>
112
+ * <XIcon />
113
+ * </IconButton>
114
+ *
115
+ * <IconButton
116
+ * variant="toggle"
117
+ * selected={isBookmarked}
118
+ * aria-label={isBookmarked ? "Remove bookmark" : "Bookmark"}
119
+ * colorStyle="filled"
120
+ * onClick={toggleBookmark}
121
+ * >
122
+ * <BookmarkIcon />
123
+ * </IconButton>
124
+ * ```
125
+ *
126
+ * @see https://m3.material.io/components/icon-buttons/overview
127
+ */
128
+ declare const IconButton: React.NamedExoticComponent<(Omit<BaseIconButtonProps & {
129
+ variant?: "default";
130
+ selected?: never;
131
+ }, "ref"> | Omit<BaseIconButtonProps & {
132
+ variant: "toggle";
133
+ selected: boolean;
134
+ }, "ref">) & React.RefAttributes<HTMLButtonElement>>;
135
+
136
+ export { type BaseIconButtonProps as B, IconButton as I, type IconButtonProps as a };
package/dist/index.css ADDED
@@ -0,0 +1,309 @@
1
+ /* @bug-on/m3-tokens — MD3 System Color Tokens */
2
+ /* MD3 System Color Tokens — Light Theme (Baseline Scheme)
3
+ *
4
+ * Mapping: PaletteTokens → ColorLightTokens → CSS variable
5
+ * Reference: ColorLightTokens.kt, ColorDarkTokens.kt, PaletteTokens.kt
6
+ */
7
+ :root {
8
+ /* ── Primary ─────────────────────────────────────────────────────────── */
9
+ --md-sys-color-primary: #6750a4; /* Primary40 */
10
+ --md-sys-color-on-primary: #ffffff; /* Primary100 */
11
+ --md-sys-color-primary-container: #eaddff; /* Primary90 */
12
+ --md-sys-color-on-primary-container: #21005d; /* Primary10 */
13
+ --md-sys-color-inverse-primary: #d0bcff; /* Primary80 */
14
+
15
+ /* ── Primary Fixed (stable across light/dark) ────────────────────────── */
16
+ --md-sys-color-primary-fixed: #eaddff; /* Primary90 */
17
+ --md-sys-color-primary-fixed-dim: #d0bcff; /* Primary80 */
18
+ --md-sys-color-on-primary-fixed: #21005d; /* Primary10 */
19
+ --md-sys-color-on-primary-fixed-variant: #4f378b; /* Primary30 */
20
+
21
+ /* ── Secondary ───────────────────────────────────────────────────────── */
22
+ --md-sys-color-secondary: #625b71; /* Secondary40 */
23
+ --md-sys-color-on-secondary: #ffffff; /* Secondary100 */
24
+ --md-sys-color-secondary-container: #e8def8; /* Secondary90 */
25
+ --md-sys-color-on-secondary-container: #1d192b; /* Secondary10 */
26
+
27
+ /* ── Secondary Fixed (stable across light/dark) ──────────────────────── */
28
+ --md-sys-color-secondary-fixed: #e8def8; /* Secondary90 */
29
+ --md-sys-color-secondary-fixed-dim: #ccc2dc; /* Secondary80 */
30
+ --md-sys-color-on-secondary-fixed: #1d192b; /* Secondary10 */
31
+ --md-sys-color-on-secondary-fixed-variant: #4a4458; /* Secondary30 */
32
+
33
+ /* ── Tertiary ────────────────────────────────────────────────────────── */
34
+ --md-sys-color-tertiary: #7d5260; /* Tertiary40 */
35
+ --md-sys-color-on-tertiary: #ffffff; /* Tertiary100 */
36
+ --md-sys-color-tertiary-container: #ffd8e4; /* Tertiary90 */
37
+ --md-sys-color-on-tertiary-container: #31111d; /* Tertiary10 */
38
+
39
+ /* ── Tertiary Fixed (stable across light/dark) ───────────────────────── */
40
+ --md-sys-color-tertiary-fixed: #ffd8e4; /* Tertiary90 */
41
+ --md-sys-color-tertiary-fixed-dim: #efb8c8; /* Tertiary80 */
42
+ --md-sys-color-on-tertiary-fixed: #31111d; /* Tertiary10 */
43
+ --md-sys-color-on-tertiary-fixed-variant: #633b48; /* Tertiary30 */
44
+
45
+ /* ── Error ───────────────────────────────────────────────────────────── */
46
+ --md-sys-color-error: #b3261e; /* Error40 */
47
+ --md-sys-color-on-error: #ffffff; /* Error100 */
48
+ --md-sys-color-error-container: #f9dedc; /* Error90 */
49
+ --md-sys-color-on-error-container: #410e0b; /* Error10 */
50
+
51
+ /* ── Surface ─────────────────────────────────────────────────────────── */
52
+ --md-sys-color-surface: #fef7ff; /* Neutral98 */
53
+ --md-sys-color-on-surface: #1c1b1f; /* Neutral10 */
54
+ --md-sys-color-surface-variant: #e7e0eb; /* NeutralVariant90 */
55
+ --md-sys-color-on-surface-variant: #49454f; /* NeutralVariant30 */
56
+ --md-sys-color-surface-dim: #ded8e1; /* Neutral87 */
57
+ --md-sys-color-surface-bright: #fef7ff; /* Neutral98 */
58
+ --md-sys-color-surface-tint: #6750a4; /* = primary */
59
+ --md-sys-color-surface-container-lowest: #ffffff; /* Neutral100 */
60
+ --md-sys-color-surface-container-low: #f7f2fa; /* Neutral96 */
61
+ --md-sys-color-surface-container: #f3edf7; /* Neutral94 */
62
+ --md-sys-color-surface-container-high: #ece6f0; /* Neutral92 */
63
+ --md-sys-color-surface-container-highest: #e6e0e9; /* Neutral90 */
64
+
65
+ /* ── Inverse Surface ─────────────────────────────────────────────────── */
66
+ --md-sys-color-inverse-surface: #313033; /* Neutral20 */
67
+ --md-sys-color-inverse-on-surface: #f4eff4; /* Neutral95 */
68
+
69
+ /* ── Background ──────────────────────────────────────────────────────── */
70
+ --md-sys-color-background: #fef7ff; /* Neutral98 — same as surface */
71
+ --md-sys-color-on-background: #1c1b1f; /* Neutral10 */
72
+
73
+ /* ── Outline ─────────────────────────────────────────────────────────── */
74
+ --md-sys-color-outline: #79747e; /* NeutralVariant50 */
75
+ --md-sys-color-outline-variant: #cac4d0; /* NeutralVariant80 */
76
+
77
+ /* ── Utility ─────────────────────────────────────────────────────────── */
78
+ --md-sys-color-scrim: #000000; /* Neutral0 */
79
+ --md-sys-color-shadow: #000000; /* Neutral0 */
80
+
81
+ /* ── Indicator tokens — Loading & Progress ───────────────────────────── */
82
+ --md-sys-color-indicator-active: var(--md-sys-color-primary);
83
+ --md-sys-color-indicator-container: var(--md-sys-color-secondary-container);
84
+ --md-sys-color-indicator-contained-active: var(
85
+ --md-sys-color-on-primary-container
86
+ );
87
+ --md-sys-color-indicator-contained-container: var(
88
+ --md-sys-color-primary-container
89
+ );
90
+ --md-sys-color-indicator-track: var(--md-sys-color-surface-variant);
91
+ --md-sys-color-indicator-stop: var(--md-sys-color-primary);
92
+ }
93
+
94
+ /* Dark Theme overrides
95
+ * Mapping: PaletteTokens → ColorDarkTokens → CSS variable
96
+ */
97
+ [data-theme="dark"],
98
+ .dark {
99
+ /* ── Primary ─────────────────────────────────────────────────────────── */
100
+ --md-sys-color-primary: #d0bcff; /* Primary80 */
101
+ --md-sys-color-on-primary: #381e72; /* Primary20 */
102
+ --md-sys-color-primary-container: #4f378b; /* Primary30 */
103
+ --md-sys-color-on-primary-container: #eaddff; /* Primary90 */
104
+ --md-sys-color-inverse-primary: #6750a4; /* Primary40 */
105
+
106
+ /* ── Secondary ───────────────────────────────────────────────────────── */
107
+ --md-sys-color-secondary: #ccc2dc; /* Secondary80 */
108
+ --md-sys-color-on-secondary: #332d41; /* Secondary20 */
109
+ --md-sys-color-secondary-container: #4a4458; /* Secondary30 */
110
+ --md-sys-color-on-secondary-container: #e8def8; /* Secondary90 */
111
+
112
+ /* ── Tertiary ────────────────────────────────────────────────────────── */
113
+ --md-sys-color-tertiary: #efb8c8; /* Tertiary80 */
114
+ --md-sys-color-on-tertiary: #492532; /* Tertiary20 */
115
+ --md-sys-color-tertiary-container: #633b48; /* Tertiary30 */
116
+ --md-sys-color-on-tertiary-container: #ffd8e4; /* Tertiary90 */
117
+
118
+ /* ── Error ───────────────────────────────────────────────────────────── */
119
+ --md-sys-color-error: #f2b8b5; /* Error80 */
120
+ --md-sys-color-on-error: #601410; /* Error20 */
121
+ --md-sys-color-error-container: #8c1d18; /* Error30 */
122
+ --md-sys-color-on-error-container: #f9dedc; /* Error90 */
123
+
124
+ /* ── Surface ─────────────────────────────────────────────────────────── */
125
+ --md-sys-color-surface: #141218; /* Neutral6 */
126
+ --md-sys-color-on-surface: #e6e1e5; /* Neutral90 */
127
+ --md-sys-color-surface-variant: #49454f; /* NeutralVariant30 */
128
+ --md-sys-color-on-surface-variant: #cac4d0; /* NeutralVariant80 */
129
+ --md-sys-color-surface-dim: #141218; /* Neutral6 */
130
+ --md-sys-color-surface-bright: #3b383e; /* Neutral24 */
131
+ --md-sys-color-surface-tint: #d0bcff; /* = primary (dark) */
132
+ --md-sys-color-surface-container-lowest: #0f0d13; /* Neutral4 */
133
+ --md-sys-color-surface-container-low: #1d1b20; /* Neutral10 */
134
+ --md-sys-color-surface-container: #211f26; /* Neutral12 */
135
+ --md-sys-color-surface-container-high: #2b2930; /* Neutral17 */
136
+ --md-sys-color-surface-container-highest: #36343b; /* Neutral22 */
137
+
138
+ /* ── Inverse Surface ─────────────────────────────────────────────────── */
139
+ --md-sys-color-inverse-surface: #e6e1e5; /* Neutral90 */
140
+ --md-sys-color-inverse-on-surface: #313033; /* Neutral20 */
141
+
142
+ /* ── Background ──────────────────────────────────────────────────────── */
143
+ --md-sys-color-background: #141218; /* Neutral6 — same as dark surface */
144
+ --md-sys-color-on-background: #e6e1e5; /* Neutral90 */
145
+
146
+ /* ── Outline ─────────────────────────────────────────────────────────── */
147
+ --md-sys-color-outline: #938f99; /* NeutralVariant60 */
148
+ --md-sys-color-outline-variant: #49454f; /* NeutralVariant30 */
149
+
150
+ /* ── Utility ─────────────────────────────────────────────────────────── */
151
+ --md-sys-color-scrim: #000000;
152
+ --md-sys-color-shadow: #000000;
153
+
154
+ /* ── Indicator tokens — Dark ─────────────────────────────────────────── */
155
+ --md-sys-color-indicator-active: var(--md-sys-color-primary);
156
+ --md-sys-color-indicator-container: var(--md-sys-color-secondary-container);
157
+ --md-sys-color-indicator-contained-active: var(
158
+ --md-sys-color-on-primary-container
159
+ );
160
+ --md-sys-color-indicator-contained-container: var(
161
+ --md-sys-color-primary-container
162
+ );
163
+ --md-sys-color-indicator-track: var(--md-sys-color-surface-variant);
164
+ --md-sys-color-indicator-stop: var(--md-sys-color-primary);
165
+ }
166
+
167
+ :root {
168
+ /* ── MD3 Expressive Corner Radius Scale (10 levels) ─────────────────────── */
169
+ /* Source: https://m3.material.io/styles/shape/corner-radius-scale */
170
+
171
+ --md-sys-shape-corner-none: 0px;
172
+ --md-sys-shape-corner-extra-small: 4px;
173
+ --md-sys-shape-corner-small: 8px;
174
+ --md-sys-shape-corner-medium: 12px;
175
+ --md-sys-shape-corner-large: 16px;
176
+ /* New in M3 Expressive (May 2025) */
177
+ --md-sys-shape-corner-large-increased: 20px;
178
+ --md-sys-shape-corner-extra-large: 28px;
179
+ /* New in M3 Expressive (May 2025) */
180
+ --md-sys-shape-corner-extra-large-increased: 32px;
181
+ /* New in M3 Expressive (May 2025) */
182
+ --md-sys-shape-corner-extra-extra-large: 48px;
183
+ --md-sys-shape-corner-full: 9999px;
184
+ }
185
+
186
+
187
+ /* @bug-on/m3-expressive — Component Base Reset & Source Scan Configuration */
188
+ @source "./**/*.{js,mjs}";
189
+ /* @bug-on/m3-expressive - Base Reset Styles */
190
+
191
+ /**
192
+ * Hide default browser UI elements that conflict with MD3 custom UI.
193
+ * - Hide search clear/decoration buttons in WebKit/Blink (Chrome, Safari, Edge).
194
+ * - Hide IE/Edge specific clear and reveal (password) buttons.
195
+ */
196
+
197
+ /* Hide default search clear button and related decorations */
198
+ input[type="search"]::-webkit-search-decoration,
199
+ input[type="search"]::-webkit-search-cancel-button,
200
+ input[type="search"]::-webkit-search-results-button,
201
+ input[type="search"]::-webkit-search-results-decoration {
202
+ -webkit-appearance: none;
203
+ }
204
+
205
+ /* Hide IE/Edge clear and reveal (password toggle) buttons */
206
+ input::-ms-clear,
207
+ input::-ms-reveal {
208
+ display: none;
209
+ width: 0;
210
+ height: 0;
211
+ }
212
+
213
+
214
+ /* @bug-on/m3-expressive — Tailwind v4 Theme Registration */
215
+ /* Registers MD3 tokens as Tailwind utilities. No manual @theme mapping needed. */
216
+ @theme {
217
+ /* ── Colors: Primary ── */
218
+ --color-m3-primary: var(--md-sys-color-primary);
219
+ --color-m3-on-primary: var(--md-sys-color-on-primary);
220
+ --color-m3-primary-container: var(--md-sys-color-primary-container);
221
+ --color-m3-on-primary-container: var(--md-sys-color-on-primary-container);
222
+ --color-m3-primary-fixed: var(--md-sys-color-primary-fixed);
223
+ --color-m3-primary-fixed-dim: var(--md-sys-color-primary-fixed-dim);
224
+ --color-m3-on-primary-fixed: var(--md-sys-color-on-primary-fixed);
225
+ --color-m3-on-primary-fixed-variant: var(--md-sys-color-on-primary-fixed-variant);
226
+
227
+ /* ── Colors: Secondary ── */
228
+ --color-m3-secondary: var(--md-sys-color-secondary);
229
+ --color-m3-on-secondary: var(--md-sys-color-on-secondary);
230
+ --color-m3-secondary-container: var(--md-sys-color-secondary-container);
231
+ --color-m3-on-secondary-container: var(--md-sys-color-on-secondary-container);
232
+ --color-m3-secondary-fixed: var(--md-sys-color-secondary-fixed);
233
+ --color-m3-secondary-fixed-dim: var(--md-sys-color-secondary-fixed-dim);
234
+ --color-m3-on-secondary-fixed: var(--md-sys-color-on-secondary-fixed);
235
+ --color-m3-on-secondary-fixed-variant: var(--md-sys-color-on-secondary-fixed-variant);
236
+
237
+ /* ── Colors: Tertiary ── */
238
+ --color-m3-tertiary: var(--md-sys-color-tertiary);
239
+ --color-m3-on-tertiary: var(--md-sys-color-on-tertiary);
240
+ --color-m3-tertiary-container: var(--md-sys-color-tertiary-container);
241
+ --color-m3-on-tertiary-container: var(--md-sys-color-on-tertiary-container);
242
+ --color-m3-tertiary-fixed: var(--md-sys-color-tertiary-fixed);
243
+ --color-m3-tertiary-fixed-dim: var(--md-sys-color-tertiary-fixed-dim);
244
+ --color-m3-on-tertiary-fixed: var(--md-sys-color-on-tertiary-fixed);
245
+ --color-m3-on-tertiary-fixed-variant: var(--md-sys-color-on-tertiary-fixed-variant);
246
+
247
+ /* ── Colors: Error ── */
248
+ --color-m3-error: var(--md-sys-color-error);
249
+ --color-m3-on-error: var(--md-sys-color-on-error);
250
+ --color-m3-error-container: var(--md-sys-color-error-container);
251
+ --color-m3-on-error-container: var(--md-sys-color-on-error-container);
252
+
253
+ /* ── Colors: Surface ── */
254
+ --color-m3-surface: var(--md-sys-color-surface);
255
+ --color-m3-surface-dim: var(--md-sys-color-surface-dim);
256
+ --color-m3-surface-bright: var(--md-sys-color-surface-bright);
257
+ --color-m3-on-surface: var(--md-sys-color-on-surface);
258
+ --color-m3-surface-variant: var(--md-sys-color-surface-variant);
259
+ --color-m3-on-surface-variant: var(--md-sys-color-on-surface-variant);
260
+ --color-m3-surface-container-lowest: var(--md-sys-color-surface-container-lowest);
261
+ --color-m3-surface-container-low: var(--md-sys-color-surface-container-low);
262
+ --color-m3-surface-container: var(--md-sys-color-surface-container);
263
+ --color-m3-surface-container-high: var(--md-sys-color-surface-container-high);
264
+ --color-m3-surface-container-highest: var(--md-sys-color-surface-container-highest);
265
+
266
+ /* ── Colors: Inverse ── */
267
+ --color-m3-inverse-surface: var(--md-sys-color-inverse-surface);
268
+ --color-m3-inverse-on-surface: var(--md-sys-color-inverse-on-surface);
269
+ --color-m3-inverse-primary: var(--md-sys-color-inverse-primary);
270
+
271
+ /* ── Colors: Outline / Shadow / Scrim ── */
272
+ --color-m3-outline: var(--md-sys-color-outline);
273
+ --color-m3-outline-variant: var(--md-sys-color-outline-variant);
274
+ --color-m3-shadow: var(--md-sys-color-shadow);
275
+ --color-m3-scrim: var(--md-sys-color-scrim);
276
+ --color-m3-surface-tint: var(--md-sys-color-surface-tint);
277
+
278
+ /* ── Colors: Background ── */
279
+ --color-m3-background: var(--md-sys-color-background);
280
+ --color-m3-on-background: var(--md-sys-color-on-background);
281
+
282
+ /* ── Colors: Navigation Indicator ── */
283
+ --color-m3-indicator-active: var(--md-sys-color-indicator-active);
284
+ --color-m3-indicator-container: var(--md-sys-color-indicator-container);
285
+ --color-m3-indicator-contained-active: var(--md-sys-color-indicator-contained-active);
286
+ --color-m3-indicator-contained-container: var(--md-sys-color-indicator-contained-container);
287
+ --color-m3-indicator-track: var(--md-sys-color-indicator-track);
288
+ --color-m3-indicator-stop: var(--md-sys-color-indicator-stop);
289
+
290
+ /* ── Shape: Corner Radius Scale (10 levels, M3 Expressive) ── */
291
+ --radius-m3-none: var(--md-sys-shape-corner-none, 0px);
292
+ --radius-m3-xs: var(--md-sys-shape-corner-extra-small, 4px);
293
+ --radius-m3-sm: var(--md-sys-shape-corner-small, 8px);
294
+ --radius-m3-md: var(--md-sys-shape-corner-medium, 12px);
295
+ --radius-m3-lg: var(--md-sys-shape-corner-large, 16px);
296
+ --radius-m3-lg-inc: var(--md-sys-shape-corner-large-increased, 20px);
297
+ --radius-m3-xl: var(--md-sys-shape-corner-extra-large, 28px);
298
+ --radius-m3-xl-inc: var(--md-sys-shape-corner-extra-large-increased, 32px);
299
+ --radius-m3-xxl: var(--md-sys-shape-corner-extra-extra-large, 48px);
300
+ --radius-m3-full: var(--md-sys-shape-corner-full, 9999px);
301
+
302
+ /* ── Motion Easing ── */
303
+ --ease-m3-emphasized: cubic-bezier(0.2, 0, 0, 1);
304
+ --ease-m3-emphasized-accelerate: cubic-bezier(0.3, 0, 0.8, 0.15);
305
+ --ease-m3-emphasized-decelerate: cubic-bezier(0.05, 0.7, 0.1, 1);
306
+ --ease-m3-standard: cubic-bezier(0.2, 0, 0, 1);
307
+ --ease-m3-standard-accelerate: cubic-bezier(0.3, 0, 1, 1);
308
+ --ease-m3-standard-decelerate: cubic-bezier(0, 0, 0, 1);
309
+ }
@@ -0,0 +1,2 @@
1
+ // CSS module — no runtime types
2
+ export {};
@@ -0,0 +1,24 @@
1
+ export { Icon, IconProps, MD3ColorScheme, MD3ThemeProvider, MD3ThemeProviderProps, MaterialSymbolsPreconnect, Ripple, RippleOrigin, RippleProps, ThemeMode, UseRippleStateOptions, applyTheme, cn, generateM3Theme, resolveMode, useDOMRipple, useMediaQuery, useRipple, useRippleState, useTheme, useThemeMode } from './core.mjs';
2
+ export { ANGLE_EPSILON, CornerFeature, CornerRounding, Cubic, CubicPair, DISTANCE_EPSILON, DoubleMapper, EdgeFeature, FLOAT_PI, Feature, MD3CornerRadius, MD3CornerRadiusToken, MD3ShapeName, MD3Shapes, MeasuredCubic, MeasuredFeature, MeasuredPolygon, Morph, MorphTrigger, MutableCubic, Point, PointTransformer, RoundedPolygon, ShapeIcon, ShapeIconProps, ShapeMedia, ShapeMediaProps, ShapeMediaServer, ShapeMorphOptions, ShapeRef, ShapeSvg, ShapeSvgProps, UNROUNDED, UseShapeMorphResult, addPoints, circle, clockwise, convex, cornerFeature, cornerRounding, createDoubleMapper, directionVector, distance, distanceSquared, dividePoint, dotProduct, edgeFeature, featureMapper, getDirection, getDistance, getDistanceSquared, interpolate, interpolatePath, lerpPoint, pill, pillStar, point, positiveModulo, radialToCartesian, rectangle, rotate90, scalePoint, square, star, subtractPoints, toClipPath, toSvgPath, transformFeature, transformPoint, useShapeMorph } from './shapes.mjs';
3
+ export { M as MD3ColorStyle, a as MD3Shape, b as MD3Size, P as PolymorphicProps, c as PolymorphicRef } from './md3-DFhj-NZj.mjs';
4
+ export { APP_BAR_BOTTOM_SPRING, APP_BAR_COLORS, APP_BAR_COLOR_TRANSITION, APP_BAR_ENTER_ALWAYS_SPRING, APP_BAR_TITLE_FADE, AppBarColors, AppBarColumn, AppBarColumnProps, AppBarItem, AppBarItemType, AppBarMenuState, AppBarOverflowIndicator, AppBarOverflowIndicatorProps, AppBarRow, AppBarRowProps, AppBarScrollBehavior, AppBarTokens, BaseAppBarProps, BottomAppBar, BottomAppBarProps, BottomDockedToolbar, BottomDockedToolbarProps, CHECK_ICON_VARIANTS, ContextMenu, ContextMenuContent, ContextMenuContentProps, ContextMenuProps, ContextMenuTrigger, ContextMenuTriggerProps, DIVIDER_COLOR, DIVIDER_PADDING, DockedToolbar, DockedToolbarProps, FAST_EFFECTS_TRANSITION, FAST_SPATIAL_SPRING, FlexibleAppBarProps, FloatingToolbarColors, FloatingToolbarProps, FloatingToolbarScrollBehavior, FloatingToolbarWithFabProps, GROUP_SHAPES, HorizontalFloatingToolbar, HorizontalFloatingToolbarWithFab, ITEM_SHAPE_CLASSES, LargeFlexibleAppBar, MENU_CHECK_ICON_SIZE, MENU_CONTAINER_VARIANTS, MENU_GROUP_GAP, MENU_ICON_SIZE, MENU_ITEM_MIN_HEIGHT, MENU_MAX_WIDTH, MENU_MIN_WIDTH, MediumFlexibleAppBar, Menu, MenuColorVariant, MenuContent, MenuContentProps, MenuDivider, MenuDividerProps, MenuGroup, MenuGroupPosition, MenuGroupProps, MenuItem, MenuItemPosition, MenuItemProps, MenuPrimitive, MenuProps, MenuProvider, MenuTrigger, MenuTriggerProps, MenuVariant, NavigationBar, NavigationBarItem, NavigationBarItemLayout, NavigationBarItemProps, NavigationBarProps, NavigationBarVariant, NavigationRail, NavigationRailItem, NavigationRailItemProps, NavigationRailLabelVisibility, NavigationRailProps, NavigationRailVariant, SEARCH_BAR_EXPAND_SPRING, SEARCH_COLORS, SEARCH_DOCKED_REVEAL_SPRING, SEARCH_FULLSCREEN_SPRING, SEARCH_TYPOGRAPHY, SEARCH_VIEW_SPRING, STANDARD_COLORS, SUBMENU_CONTAINER_VARIANTS, Search, SearchAppBar, SearchAppBarProps, SearchBar, SearchBarVariant, SearchProps, SearchStyleType, SearchTokens, SearchVariant, SearchView, SearchViewContainer, SearchViewDocked, SearchViewFullScreen, SearchViewProps, SmallAppBar, SmallAppBarProps, SubMenu, SubMenuProps, Tab, TabProps, Tabs, TabsColors, TabsContent, TabsContentProps, TabsList, TabsListProps, TabsProps, TabsTokens, TabsVariant, TitleAlignment, ToolbarDivider, ToolbarDividerProps, ToolbarDividerTokens, ToolbarIconButton, ToolbarIconButtonProps, ToolbarIconButtonSize, ToolbarIconButtonTokens, ToolbarIconButtonVariant, UseAppBarScrollReturn, UseFloatingToolbarScrollBehaviorOptions, VIBRANT_COLORS, VerticalFloatingToolbar, VerticalFloatingToolbarWithFab, VerticalMenu, VerticalMenuContent, VerticalMenuContentProps, VerticalMenuDivider, VerticalMenuDividerProps, VerticalMenuGroup, VerticalMenuGroupProps, VerticalMenuProps, VerticalMenuSeparatorStyle, appBarTypography, standardFloatingToolbarColors, useAppBarScroll, useFloatingToolbarScrollBehavior, useMenuContext, useSearchKeyboard, vibrantFloatingToolbarColors } from './navigation.mjs';
5
+ export { Badge, BadgeProps, BadgedBox, BadgedBoxProps, CaretConfig, CircularProgressProps, LinearProgressProps, LoadingIndicator, LoadingIndicatorProps, PlainTooltip, PlainTooltipProps, ProgressIndicator, ProgressIndicatorProps, RichTooltip, RichTooltipProps, Snackbar, SnackbarData, SnackbarDuration, SnackbarHost, SnackbarHostProps, SnackbarProps, SnackbarProvider, SnackbarResult, SnackbarVisuals, TooltipBox, TooltipBoxProps, TooltipCaretShape, TooltipPlacement, TooltipState, TooltipStateConfig, TooltipTokens, TooltipTrigger, UseSnackbarStateReturn, useSnackbar, useSnackbarState, useTooltipPosition, useTooltipState } from './feedback.mjs';
6
+ export { B as BUTTON_COLOR_TOKENS, a as BUTTON_SIZE_TOKENS, b as BaseButtonProps, c as Button, d as ButtonGroup, e as ButtonGroupOrientation, f as ButtonGroupProps, g as ButtonGroupVariant, h as ButtonProps, E as ElevatedSplitButtonLeading, i as ElevatedSplitButtonTrailing, j as ElevatedSplitButtonTrailingUncheckable, k as ExtendedFAB, l as ExtendedFABProps, F as FAB, m as FABMenu, n as FABMenuItem, o as FABMenuItemData, p as FABMenuItemProps, q as FABMenuProps, r as FABPosition, s as FABPositionProps, t as FABProps, u as FilledSplitButtonLeading, v as FilledSplitButtonTrailing, w as FilledSplitButtonTrailingUncheckable, O as OutlinedSplitButtonLeading, x as OutlinedSplitButtonTrailing, y as OutlinedSplitButtonTrailingUncheckable, S as SplitButtonLayout, z as SplitButtonLayoutProps, A as SplitButtonLeading, C as SplitButtonLeadingProps, D as SplitButtonSize, G as SplitButtonTrailing, H as SplitButtonTrailingProps, I as SplitButtonTrailingUncheckable, J as SplitButtonTrailingUncheckableProps, K as SplitButtonVariant, T as ToggleFAB, L as ToggleFABProps, M as TonalSplitButtonLeading, N as TonalSplitButtonTrailing, P as TonalSplitButtonTrailingUncheckable } from './split-button-trailing-uncheckable-MXj_kyNt.mjs';
7
+ export { B as BaseIconButtonProps, I as IconButton, a as IconButtonProps } from './icon-button-D-gs0gfj.mjs';
8
+ export { Card, CardProps, CodeBlock, CodeBlockProps, Divider, DividerProps, LIST_TOKENS, List, ListContext, ListDivider, ListDividerProps, ListItem, ListItemLeadingType, ListItemProps, ListItemTrailingType, ListProps, ListSelectionMode, ListStyle, ListVariant, TableOfContents, TableOfContentsProps, Text, TextProps, ToCItem, TypeScaleTokens, TypeScaleTokensType, buildWavePath, getExpressiveShape, getListItemHeight, shouldTopAlign, useListContext } from './layout.mjs';
9
+ export { C as Checkbox, a as CheckboxProps, b as CheckboxState, c as Chip, d as ChipProps, R as RadioButton, e as RadioButtonColors, f as RadioButtonProps, g as RadioGroup, h as RadioGroupProps, i as RangeSlider, j as RangeSliderProps, S as Slider, k as SliderColors, l as SliderOrientation, m as SliderProps, n as SliderTokens, o as SliderTrackSize, p as SliderVariant, q as Switch, r as SwitchColors, s as SwitchProps, t as SwitchTokens, T as TextField, u as TextFieldHandle, v as TextFieldInputType, w as TextFieldProps, x as TextFieldTrailingIconMode, y as TextFieldVariant, z as TriStateCheckbox, A as TriStateCheckboxProps } from './text-field-eAIpz9z1.mjs';
10
+ export { DP_CLASSES, DP_COLORS, DP_SHAPE, DP_SIZE, DateLocale, DatePicker, DatePickerDialog, DatePickerDialogProps, DatePickerInput, DatePickerInputProps, DatePickerProps, DatePickerState, DateRange, DateRangePicker, DateRangePickerProps, DateRangePickerState, DisplayMode, SelectableDates, TP_CLASSES, TP_COLORS, TP_SHAPE, TP_SIZE, TimeInput, TimeInputProps, TimePicker, TimePickerDialog, TimePickerDialogProps, TimePickerLayout, TimePickerProps, TimePickerSelectionMode, TimePickerState, UseDatePickerStateOptions, UseDateRangePickerStateOptions, UseTimePickerStateOptions, useDatePickerState, useDateRangePickerState, useTimePickerState } from './pickers.mjs';
11
+ export { B as BaseSheetProps, a as BottomSheet, b as BottomSheetHandle, c as BottomSheetModal, d as BottomSheetModalProps, e as BottomSheetProps, f as BottomSheetSnapPoint, D as Dialog, g as DialogBody, h as DialogClose, i as DialogContent, j as DialogContentProps, k as DialogDescription, l as DialogFooter, m as DialogFullScreenContent, n as DialogFullScreenContentProps, o as DialogHeader, p as DialogIcon, q as DialogOverlay, r as DialogPortal, s as DialogProps, t as DialogTitle, u as DialogTrigger, v as DragHandle, w as DragHandleProps, x as Drawer, y as DrawerClose, z as DrawerContent, A as DrawerContentProps, C as DrawerDescription, E as DrawerFooter, F as DrawerHeader, G as DrawerOverlay, H as DrawerPortal, I as DrawerProps, J as DrawerTitle, K as DrawerTrigger, S as Scrim, L as ScrimProps, M as SheetEdge, N as SheetState, O as SideSheet, P as SideSheetModal, Q as SideSheetModalProps, R as SideSheetProps, U as UseBottomSheetOptions, T as UseBottomSheetReturn, V as useBottomSheet } from './side-sheet-modal-BY6VCC8p.mjs';
12
+ export { S as ScrollArea, a as ScrollAreaOrientation, b as ScrollAreaProps, c as ScrollAreaScrollbar, d as ScrollAreaType } from './scroll-area-CVS6HyLl.mjs';
13
+ export { M as MD3_EXPRESSIVE_FONT_VARIATION, T as TextStyle, a as Typography, b as TypographyContext, c as TypographyKeyTokens, d as TypographyProvider, e as TypographyProviderProps, f as TypographyTokens, u as useTypography } from './typography-339RV6v7.mjs';
14
+ import 'react';
15
+ import 'react/jsx-runtime';
16
+ import 'clsx';
17
+ import 'motion';
18
+ import '@radix-ui/react-context-menu';
19
+ import '@radix-ui/react-dropdown-menu';
20
+ import 'motion/react';
21
+ import 'class-variance-authority/types';
22
+ import 'class-variance-authority';
23
+ import '@radix-ui/react-dialog';
24
+ import '@radix-ui/react-scroll-area';