@m3-baseui/react-tailwind 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 (82) hide show
  1. package/dist/badge.d.ts +45 -0
  2. package/dist/badge.js +50 -0
  3. package/dist/badge.js.map +1 -0
  4. package/dist/button.d.ts +69 -0
  5. package/dist/button.js +74 -0
  6. package/dist/button.js.map +1 -0
  7. package/dist/card.d.ts +80 -0
  8. package/dist/card.js +77 -0
  9. package/dist/card.js.map +1 -0
  10. package/dist/checkbox.d.ts +63 -0
  11. package/dist/checkbox.js +60 -0
  12. package/dist/checkbox.js.map +1 -0
  13. package/dist/chip.d.ts +165 -0
  14. package/dist/chip.js +76 -0
  15. package/dist/chip.js.map +1 -0
  16. package/dist/dialog.d.ts +86 -0
  17. package/dist/dialog.js +68 -0
  18. package/dist/dialog.js.map +1 -0
  19. package/dist/divider.d.ts +83 -0
  20. package/dist/divider.js +34 -0
  21. package/dist/divider.js.map +1 -0
  22. package/dist/fab.d.ts +104 -0
  23. package/dist/fab.js +43 -0
  24. package/dist/fab.js.map +1 -0
  25. package/dist/icon-button.d.ts +174 -0
  26. package/dist/icon-button.js +121 -0
  27. package/dist/icon-button.js.map +1 -0
  28. package/dist/index.d.ts +29 -0
  29. package/dist/index.js +1157 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/item.d.ts +94 -0
  32. package/dist/item.js +62 -0
  33. package/dist/item.js.map +1 -0
  34. package/dist/list.d.ts +163 -0
  35. package/dist/list.js +94 -0
  36. package/dist/list.js.map +1 -0
  37. package/dist/menu.d.ts +119 -0
  38. package/dist/menu.js +114 -0
  39. package/dist/menu.js.map +1 -0
  40. package/dist/navigation-bar.d.ts +91 -0
  41. package/dist/navigation-bar.js +48 -0
  42. package/dist/navigation-bar.js.map +1 -0
  43. package/dist/navigation-drawer.d.ts +86 -0
  44. package/dist/navigation-drawer.js +78 -0
  45. package/dist/navigation-drawer.js.map +1 -0
  46. package/dist/progress.d.ts +118 -0
  47. package/dist/progress.js +41 -0
  48. package/dist/progress.js.map +1 -0
  49. package/dist/radio.d.ts +56 -0
  50. package/dist/radio.js +47 -0
  51. package/dist/radio.js.map +1 -0
  52. package/dist/segmented-button.d.ts +83 -0
  53. package/dist/segmented-button.js +71 -0
  54. package/dist/segmented-button.js.map +1 -0
  55. package/dist/select.d.ts +125 -0
  56. package/dist/select.js +99 -0
  57. package/dist/select.js.map +1 -0
  58. package/dist/slider.d.ts +94 -0
  59. package/dist/slider.js +71 -0
  60. package/dist/slider.js.map +1 -0
  61. package/dist/snackbar.d.ts +108 -0
  62. package/dist/snackbar.js +57 -0
  63. package/dist/snackbar.js.map +1 -0
  64. package/dist/switch.d.ts +72 -0
  65. package/dist/switch.js +66 -0
  66. package/dist/switch.js.map +1 -0
  67. package/dist/tabs.d.ts +118 -0
  68. package/dist/tabs.js +97 -0
  69. package/dist/tabs.js.map +1 -0
  70. package/dist/textfield.d.ts +127 -0
  71. package/dist/textfield.js +83 -0
  72. package/dist/textfield.js.map +1 -0
  73. package/dist/tooltip.d.ts +61 -0
  74. package/dist/tooltip.js +52 -0
  75. package/dist/tooltip.js.map +1 -0
  76. package/dist/tv.d.ts +19 -0
  77. package/dist/tv.js +35 -0
  78. package/dist/tv.js.map +1 -0
  79. package/package.json +171 -0
  80. package/styles/preset.css +30 -0
  81. package/styles/theme.css +213 -0
  82. package/styles/tokens.css +361 -0
package/dist/fab.js ADDED
@@ -0,0 +1,43 @@
1
+ "use client";
2
+ import { createFab } from '@m3-baseui/core';
3
+ import { tv } from 'tailwind-variants';
4
+
5
+ // src/fab.ts
6
+ var fabTv = tv({
7
+ base: [
8
+ "relative inline-flex items-center justify-center box-border overflow-hidden",
9
+ "border-0 cursor-pointer select-none outline-none",
10
+ "shadow-level3 hover:shadow-level4",
11
+ "transition-shadow duration-150 ease-standard",
12
+ "before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
13
+ "hover:before:opacity-[var(--md-sys-state-hover)]",
14
+ "focus-visible:before:opacity-[var(--md-sys-state-focus)]",
15
+ "active:before:opacity-[var(--md-sys-state-pressed)]",
16
+ "data-[pressed]:before:opacity-[var(--md-sys-state-pressed)]",
17
+ "disabled:opacity-[0.38] disabled:pointer-events-none disabled:shadow-none",
18
+ "data-[disabled]:opacity-[0.38] data-[disabled]:pointer-events-none data-[disabled]:shadow-none"
19
+ ],
20
+ variants: {
21
+ size: {
22
+ small: "size-10 rounded-medium [&_svg]:size-6",
23
+ regular: "size-14 rounded-large [&_svg]:size-6",
24
+ large: "size-24 rounded-extra-large [&_svg]:size-9",
25
+ extended: "h-14 min-w-20 px-4 gap-3 rounded-large text-label-large [&_svg]:size-6"
26
+ },
27
+ color: {
28
+ surface: "bg-surface-container-high text-primary",
29
+ primary: "bg-primary-container text-on-primary-container",
30
+ secondary: "bg-secondary-container text-on-secondary-container",
31
+ tertiary: "bg-tertiary-container text-on-tertiary-container"
32
+ }
33
+ },
34
+ defaultVariants: {
35
+ size: "regular",
36
+ color: "surface"
37
+ }
38
+ });
39
+ var Fab = createFab(({ size, color }) => fabTv({ size, color }));
40
+
41
+ export { Fab, fabTv };
42
+ //# sourceMappingURL=fab.js.map
43
+ //# sourceMappingURL=fab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/fab.ts"],"names":[],"mappings":";;;;;AAUO,IAAM,QAAQ,EAAA,CAAG;AAAA,EACtB,IAAA,EAAM;AAAA,IACJ,6EAAA;AAAA,IACA,kDAAA;AAAA,IACA,mCAAA;AAAA,IACA,8CAAA;AAAA,IACA,4IAAA;AAAA,IACA,kDAAA;AAAA,IACA,0DAAA;AAAA,IACA,qDAAA;AAAA,IACA,6DAAA;AAAA,IACA,2EAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,uCAAA;AAAA,MACP,OAAA,EAAS,sCAAA;AAAA,MACT,KAAA,EAAO,4CAAA;AAAA,MACP,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,wCAAA;AAAA,MACT,OAAA,EAAS,gDAAA;AAAA,MACT,SAAA,EAAW,oDAAA;AAAA,MACX,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEX,CAAC;AAEM,IAAM,GAAA,GAAM,SAAA,CAAU,CAAC,EAAE,IAAA,EAAM,KAAA,EAAM,KAAM,KAAA,CAAM,EAAE,IAAA,EAAM,KAAA,EAAO,CAAC","file":"fab.js","sourcesContent":["/**\n * fab.ts — tailwind-variants for the M3 FAB.\n *\n * Four sizes + four container colors, elevation level3 (level4 on hover) and a\n * currentColor state-layer `::before`. The pointer ripple is added by the\n * factory. Same DOM as the VE build.\n */\nimport { createFab } from '@m3-baseui/core';\nimport { tv } from 'tailwind-variants';\n\nexport const fabTv = tv({\n base: [\n 'relative inline-flex items-center justify-center box-border overflow-hidden',\n 'border-0 cursor-pointer select-none outline-none',\n 'shadow-level3 hover:shadow-level4',\n 'transition-shadow duration-150 ease-standard',\n 'before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100',\n 'hover:before:opacity-[var(--md-sys-state-hover)]',\n 'focus-visible:before:opacity-[var(--md-sys-state-focus)]',\n 'active:before:opacity-[var(--md-sys-state-pressed)]',\n 'data-[pressed]:before:opacity-[var(--md-sys-state-pressed)]',\n 'disabled:opacity-[0.38] disabled:pointer-events-none disabled:shadow-none',\n 'data-[disabled]:opacity-[0.38] data-[disabled]:pointer-events-none data-[disabled]:shadow-none',\n ],\n variants: {\n size: {\n small: 'size-10 rounded-medium [&_svg]:size-6',\n regular: 'size-14 rounded-large [&_svg]:size-6',\n large: 'size-24 rounded-extra-large [&_svg]:size-9',\n extended: 'h-14 min-w-20 px-4 gap-3 rounded-large text-label-large [&_svg]:size-6',\n },\n color: {\n surface: 'bg-surface-container-high text-primary',\n primary: 'bg-primary-container text-on-primary-container',\n secondary: 'bg-secondary-container text-on-secondary-container',\n tertiary: 'bg-tertiary-container text-on-tertiary-container',\n },\n },\n defaultVariants: {\n size: 'regular',\n color: 'surface',\n },\n});\n\nexport const Fab = createFab(({ size, color }) => fabTv({ size, color }));\nexport type { FabProps, FabSize, FabColor } from '@m3-baseui/core';\n"]}
@@ -0,0 +1,174 @@
1
+ import * as _base_ui_react from '@base-ui/react';
2
+ import * as react from 'react';
3
+ import * as _m3_baseui_core from '@m3-baseui/core';
4
+ export { IconButtonProps, IconButtonVariant } from '@m3-baseui/core';
5
+ import * as tailwind_variants from 'tailwind-variants';
6
+ import * as tailwind_variants_dist_config_js from 'tailwind-variants/dist/config.js';
7
+
8
+ declare const iconButton: tailwind_variants.TVReturnType<{
9
+ variant: {
10
+ standard: string[];
11
+ filled: string[];
12
+ tonal: string[];
13
+ outlined: string[];
14
+ };
15
+ selected: {
16
+ true: string;
17
+ false: string;
18
+ };
19
+ size: {
20
+ xs: string;
21
+ s: string;
22
+ m: string;
23
+ l: string;
24
+ xl: string;
25
+ };
26
+ width: {
27
+ narrow: string;
28
+ default: string;
29
+ wide: string;
30
+ };
31
+ }, undefined, string[], tailwind_variants_dist_config_js.TVConfig<{
32
+ variant: {
33
+ standard: string[];
34
+ filled: string[];
35
+ tonal: string[];
36
+ outlined: string[];
37
+ };
38
+ selected: {
39
+ true: string;
40
+ false: string;
41
+ };
42
+ size: {
43
+ xs: string;
44
+ s: string;
45
+ m: string;
46
+ l: string;
47
+ xl: string;
48
+ };
49
+ width: {
50
+ narrow: string;
51
+ default: string;
52
+ wide: string;
53
+ };
54
+ }, {
55
+ variant: {
56
+ standard: string[];
57
+ filled: string[];
58
+ tonal: string[];
59
+ outlined: string[];
60
+ };
61
+ selected: {
62
+ true: string;
63
+ false: string;
64
+ };
65
+ size: {
66
+ xs: string;
67
+ s: string;
68
+ m: string;
69
+ l: string;
70
+ xl: string;
71
+ };
72
+ width: {
73
+ narrow: string;
74
+ default: string;
75
+ wide: string;
76
+ };
77
+ }>, {
78
+ variant: {
79
+ standard: string[];
80
+ filled: string[];
81
+ tonal: string[];
82
+ outlined: string[];
83
+ };
84
+ selected: {
85
+ true: string;
86
+ false: string;
87
+ };
88
+ size: {
89
+ xs: string;
90
+ s: string;
91
+ m: string;
92
+ l: string;
93
+ xl: string;
94
+ };
95
+ width: {
96
+ narrow: string;
97
+ default: string;
98
+ wide: string;
99
+ };
100
+ }, undefined, tailwind_variants.TVReturnType<{
101
+ variant: {
102
+ standard: string[];
103
+ filled: string[];
104
+ tonal: string[];
105
+ outlined: string[];
106
+ };
107
+ selected: {
108
+ true: string;
109
+ false: string;
110
+ };
111
+ size: {
112
+ xs: string;
113
+ s: string;
114
+ m: string;
115
+ l: string;
116
+ xl: string;
117
+ };
118
+ width: {
119
+ narrow: string;
120
+ default: string;
121
+ wide: string;
122
+ };
123
+ }, undefined, string[], tailwind_variants_dist_config_js.TVConfig<{
124
+ variant: {
125
+ standard: string[];
126
+ filled: string[];
127
+ tonal: string[];
128
+ outlined: string[];
129
+ };
130
+ selected: {
131
+ true: string;
132
+ false: string;
133
+ };
134
+ size: {
135
+ xs: string;
136
+ s: string;
137
+ m: string;
138
+ l: string;
139
+ xl: string;
140
+ };
141
+ width: {
142
+ narrow: string;
143
+ default: string;
144
+ wide: string;
145
+ };
146
+ }, {
147
+ variant: {
148
+ standard: string[];
149
+ filled: string[];
150
+ tonal: string[];
151
+ outlined: string[];
152
+ };
153
+ selected: {
154
+ true: string;
155
+ false: string;
156
+ };
157
+ size: {
158
+ xs: string;
159
+ s: string;
160
+ m: string;
161
+ l: string;
162
+ xl: string;
163
+ };
164
+ width: {
165
+ narrow: string;
166
+ default: string;
167
+ wide: string;
168
+ };
169
+ }>, unknown, unknown, undefined>>;
170
+ declare const IconButton: react.ForwardRefExoticComponent<_m3_baseui_core.IconButtonOwnProps & Omit<react.ButtonHTMLAttributes<HTMLButtonElement>, "color"> & {
171
+ render?: _base_ui_react.useRender.RenderProp;
172
+ } & react.RefAttributes<HTMLButtonElement>>;
173
+
174
+ export { IconButton, iconButton };
@@ -0,0 +1,121 @@
1
+ "use client";
2
+ import { createIconButton } from '@m3-baseui/core';
3
+ import { tv } from 'tailwind-variants';
4
+
5
+ // src/icon-button.ts
6
+ var WIDTHS = {
7
+ xs: { narrow: "w-7", default: "w-8", wide: "w-10" },
8
+ // 28 / 32 / 40
9
+ s: { narrow: "w-8", default: "w-10", wide: "w-13" },
10
+ // 32 / 40 / 52
11
+ m: { narrow: "w-12", default: "w-14", wide: "w-18" },
12
+ // 48 / 56 / 72
13
+ l: { narrow: "w-16", default: "w-24", wide: "w-32" },
14
+ // 64 / 96 / 128
15
+ xl: { narrow: "w-26", default: "w-34", wide: "w-46" }
16
+ // 104 / 136 / 184
17
+ };
18
+ var widthCompounds = Object.entries(WIDTHS).flatMap(
19
+ ([size, w]) => Object.entries(w).map(([width, klass]) => ({
20
+ size,
21
+ width,
22
+ class: klass
23
+ }))
24
+ );
25
+ var iconButton = tv({
26
+ base: [
27
+ "relative inline-flex items-center justify-center shrink-0",
28
+ "rounded-full overflow-hidden cursor-pointer select-none border-0 bg-transparent",
29
+ "transition-[box-shadow,background-color,color] duration-200 ease-standard",
30
+ // State layer overlay
31
+ "before:absolute before:inset-0 before:rounded-[inherit] before:bg-current before:opacity-0 before:pointer-events-none",
32
+ "before:transition-opacity before:duration-100",
33
+ "hover:before:opacity-[var(--md-sys-state-hover)]",
34
+ "focus-visible:before:opacity-[var(--md-sys-state-focus)]",
35
+ "active:before:opacity-[var(--md-sys-state-pressed)]",
36
+ "data-[pressed]:before:opacity-[var(--md-sys-state-pressed)]",
37
+ // Focus ring (M3: 3px secondary, 2px offset)
38
+ "focus-visible:outline-[3px] focus-visible:outline-offset-2 focus-visible:outline-secondary",
39
+ // Disabled: no interaction, no state layer. Per-variant disabled colors
40
+ // (container on-surface/12, icon on-surface/38) live on each variant.
41
+ "disabled:pointer-events-none disabled:before:opacity-0",
42
+ "data-[disabled]:pointer-events-none data-[disabled]:before:opacity-0"
43
+ ],
44
+ variants: {
45
+ // Disabled icon is on-surface/38 for every variant; filled/tonal disabled
46
+ // container is on-surface/12; outlined disabled outline is on-surface/12
47
+ // (material-web parity).
48
+ variant: {
49
+ standard: [
50
+ "text-on-surface-variant",
51
+ "disabled:text-on-surface/38 data-[disabled]:text-on-surface/38"
52
+ ],
53
+ filled: [
54
+ "bg-primary text-on-primary",
55
+ "disabled:bg-on-surface/12 disabled:text-on-surface/38",
56
+ "data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38"
57
+ ],
58
+ tonal: [
59
+ "bg-secondary-container text-on-secondary-container",
60
+ "disabled:bg-on-surface/12 disabled:text-on-surface/38",
61
+ "data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38"
62
+ ],
63
+ outlined: [
64
+ "border border-outline text-on-surface-variant",
65
+ "disabled:border-on-surface/12 disabled:text-on-surface/38",
66
+ "data-[disabled]:border-on-surface/12 data-[disabled]:text-on-surface/38"
67
+ ]
68
+ },
69
+ selected: {
70
+ true: "",
71
+ false: ""
72
+ },
73
+ // Container height + icon size per M3 Expressive size. Width comes from the
74
+ // (size, width) compound variants below.
75
+ size: {
76
+ xs: "h-8 [&>svg]:size-5",
77
+ s: "h-10 [&>svg]:size-6",
78
+ m: "h-14 [&>svg]:size-6",
79
+ l: "h-24 [&>svg]:size-8",
80
+ xl: "h-[136px] [&>svg]:size-10"
81
+ },
82
+ width: {
83
+ narrow: "",
84
+ default: "",
85
+ wide: ""
86
+ }
87
+ },
88
+ compoundVariants: [
89
+ ...widthCompounds,
90
+ { variant: "standard", selected: true, class: "text-primary" },
91
+ { variant: "filled", selected: false, class: "bg-surface-container-highest text-primary" },
92
+ {
93
+ variant: "tonal",
94
+ selected: false,
95
+ class: "bg-surface-container-highest text-on-surface-variant"
96
+ },
97
+ {
98
+ variant: "outlined",
99
+ selected: true,
100
+ class: [
101
+ "bg-inverse-surface text-inverse-on-surface border-transparent",
102
+ // M3 disabled + selected: faint on-surface/12 container, no outline
103
+ // (icon falls back to on-surface/38 from the variant). NOT transparent.
104
+ "disabled:bg-on-surface/12 disabled:border-transparent",
105
+ "data-[disabled]:bg-on-surface/12 data-[disabled]:border-transparent"
106
+ ]
107
+ }
108
+ ],
109
+ defaultVariants: {
110
+ variant: "standard",
111
+ size: "s",
112
+ width: "default"
113
+ }
114
+ });
115
+ var IconButton = createIconButton(
116
+ ({ variant, selected, size, width }) => iconButton({ variant, selected, size, width })
117
+ );
118
+
119
+ export { IconButton, iconButton };
120
+ //# sourceMappingURL=icon-button.js.map
121
+ //# sourceMappingURL=icon-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/icon-button.ts"],"names":[],"mappings":"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","file":"icon-button.js","sourcesContent":["/**\n * icon-button.ts — tailwind-variants resolver for the M3 Icon Button.\n *\n * 40×40 circular target with a centered icon. The `selected` variant supports\n * toggle icon buttons; when `selected` is undefined the variant's default\n * (filled/active) look is used. Emits the same DOM + ripple as the VE build.\n */\nimport { createIconButton } from '@m3-baseui/core';\nimport { tv } from 'tailwind-variants';\n\n// M3 Expressive container widths (px) per size × width. Tailwind v4's dynamic\n// spacing scale resolves any integer (e.g. w-13 = 52px, w-46 = 184px).\nconst WIDTHS = {\n xs: { narrow: 'w-7', default: 'w-8', wide: 'w-10' }, // 28 / 32 / 40\n s: { narrow: 'w-8', default: 'w-10', wide: 'w-13' }, // 32 / 40 / 52\n m: { narrow: 'w-12', default: 'w-14', wide: 'w-18' }, // 48 / 56 / 72\n l: { narrow: 'w-16', default: 'w-24', wide: 'w-32' }, // 64 / 96 / 128\n xl: { narrow: 'w-26', default: 'w-34', wide: 'w-46' }, // 104 / 136 / 184\n} as const;\n\nconst widthCompounds = Object.entries(WIDTHS).flatMap(([size, w]) =>\n Object.entries(w).map(([width, klass]) => ({\n size: size as keyof typeof WIDTHS,\n width: width as 'narrow' | 'default' | 'wide',\n class: klass,\n })),\n);\n\nexport const iconButton = tv({\n base: [\n 'relative inline-flex items-center justify-center shrink-0',\n 'rounded-full overflow-hidden cursor-pointer select-none border-0 bg-transparent',\n 'transition-[box-shadow,background-color,color] duration-200 ease-standard',\n // State layer overlay\n 'before:absolute before:inset-0 before:rounded-[inherit] before:bg-current before:opacity-0 before:pointer-events-none',\n 'before:transition-opacity before:duration-100',\n 'hover:before:opacity-[var(--md-sys-state-hover)]',\n 'focus-visible:before:opacity-[var(--md-sys-state-focus)]',\n 'active:before:opacity-[var(--md-sys-state-pressed)]',\n 'data-[pressed]:before:opacity-[var(--md-sys-state-pressed)]',\n // Focus ring (M3: 3px secondary, 2px offset)\n 'focus-visible:outline-[3px] focus-visible:outline-offset-2 focus-visible:outline-secondary',\n // Disabled: no interaction, no state layer. Per-variant disabled colors\n // (container on-surface/12, icon on-surface/38) live on each variant.\n 'disabled:pointer-events-none disabled:before:opacity-0',\n 'data-[disabled]:pointer-events-none data-[disabled]:before:opacity-0',\n ],\n variants: {\n // Disabled icon is on-surface/38 for every variant; filled/tonal disabled\n // container is on-surface/12; outlined disabled outline is on-surface/12\n // (material-web parity).\n variant: {\n standard: [\n 'text-on-surface-variant',\n 'disabled:text-on-surface/38 data-[disabled]:text-on-surface/38',\n ],\n filled: [\n 'bg-primary text-on-primary',\n 'disabled:bg-on-surface/12 disabled:text-on-surface/38',\n 'data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38',\n ],\n tonal: [\n 'bg-secondary-container text-on-secondary-container',\n 'disabled:bg-on-surface/12 disabled:text-on-surface/38',\n 'data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38',\n ],\n outlined: [\n 'border border-outline text-on-surface-variant',\n 'disabled:border-on-surface/12 disabled:text-on-surface/38',\n 'data-[disabled]:border-on-surface/12 data-[disabled]:text-on-surface/38',\n ],\n },\n selected: {\n true: '',\n false: '',\n },\n // Container height + icon size per M3 Expressive size. Width comes from the\n // (size, width) compound variants below.\n size: {\n xs: 'h-8 [&>svg]:size-5',\n s: 'h-10 [&>svg]:size-6',\n m: 'h-14 [&>svg]:size-6',\n l: 'h-24 [&>svg]:size-8',\n xl: 'h-[136px] [&>svg]:size-10',\n },\n width: {\n narrow: '',\n default: '',\n wide: '',\n },\n },\n compoundVariants: [\n ...widthCompounds,\n { variant: 'standard', selected: true, class: 'text-primary' },\n { variant: 'filled', selected: false, class: 'bg-surface-container-highest text-primary' },\n {\n variant: 'tonal',\n selected: false,\n class: 'bg-surface-container-highest text-on-surface-variant',\n },\n {\n variant: 'outlined',\n selected: true,\n class: [\n 'bg-inverse-surface text-inverse-on-surface border-transparent',\n // M3 disabled + selected: faint on-surface/12 container, no outline\n // (icon falls back to on-surface/38 from the variant). NOT transparent.\n 'disabled:bg-on-surface/12 disabled:border-transparent',\n 'data-[disabled]:bg-on-surface/12 data-[disabled]:border-transparent',\n ],\n },\n ],\n defaultVariants: {\n variant: 'standard',\n size: 's',\n width: 'default',\n },\n});\n\nexport const IconButton = createIconButton(({ variant, selected, size, width }) =>\n iconButton({ variant, selected, size, width }),\n);\nexport type { IconButtonProps, IconButtonVariant } from '@m3-baseui/core';\n"]}
@@ -0,0 +1,29 @@
1
+ export { Button, button } from './button.js';
2
+ export { IconButton, iconButton } from './icon-button.js';
3
+ export { Switch, switchTv } from './switch.js';
4
+ export { Checkbox, checkboxTv } from './checkbox.js';
5
+ export { Radio, RadioGroup, radioTv } from './radio.js';
6
+ export { Chip, chipTv } from './chip.js';
7
+ export { Tooltip, tooltipTv } from './tooltip.js';
8
+ export { Dialog, dialogTv } from './dialog.js';
9
+ export { Menu, menuTv } from './menu.js';
10
+ export { Tabs, tabsTv } from './tabs.js';
11
+ export { Slider, sliderTv } from './slider.js';
12
+ export { Select, selectTv } from './select.js';
13
+ export { TextField, textFieldTv } from './textfield.js';
14
+ export { NavigationBar, navigationBarTv } from './navigation-bar.js';
15
+ export { Fab, fabTv } from './fab.js';
16
+ export { Divider, dividerTv } from './divider.js';
17
+ export { Progress, circularTv, linearTv } from './progress.js';
18
+ export { List, listTv } from './list.js';
19
+ export { Snackbar, snackbarTv } from './snackbar.js';
20
+ export { Item, itemTv } from './item.js';
21
+ export { Badge, badgeTv } from './badge.js';
22
+ export { Card, cardTv } from './card.js';
23
+ export { SegmentedButton, segmentedButtonTv } from './segmented-button.js';
24
+ export { NavigationDrawer, navigationDrawerTv } from './navigation-drawer.js';
25
+ export { BadgeProps, BadgeSize, ButtonProps, ButtonVariant, CardProps, CardVariant, ChipProps, ChipVariant, CircularProgressProps, ContrastLevel, DividerInset, DividerOrientation, DividerProps, FabColor, FabProps, FabSize, IconButtonProps, IconButtonVariant, ItemProps, LinearProgressProps, ListItemLines, ListItemProps, NavigationDrawerVariant, Ripple, SchemeVariant, TabsVariant, TextFieldProps, TextFieldVariant, ThemeMode, ThemeProvider, ThemeProviderProps, applyScheme, generateScheme, schemeToCssText, useSnackbar, useTheme } from '@m3-baseui/core';
26
+ import '@base-ui/react';
27
+ import 'react';
28
+ import 'tailwind-variants';
29
+ import 'tailwind-variants/dist/config.js';