@m3-baseui/react-tailwind 1.4.0 → 3.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.
- package/dist/{badge.js → components/badge/index.js} +4 -4
- package/dist/components/badge/index.js.map +1 -0
- package/dist/{bottom-app-bar.d.ts → components/bottom-app-bar/index.d.ts} +22 -21
- package/dist/{bottom-app-bar.js → components/bottom-app-bar/index.js} +4 -4
- package/dist/components/bottom-app-bar/index.js.map +1 -0
- package/dist/{bottom-sheet.d.ts → components/bottom-sheet/index.d.ts} +37 -36
- package/dist/{bottom-sheet.js → components/bottom-sheet/index.js} +4 -4
- package/dist/components/bottom-sheet/index.js.map +1 -0
- package/dist/{button.js → components/button/index.js} +3 -3
- package/dist/components/button/index.js.map +1 -0
- package/dist/{button-group.js → components/button-group/index.js} +4 -4
- package/dist/components/button-group/index.js.map +1 -0
- package/dist/{card.js → components/card/index.js} +4 -4
- package/dist/components/card/index.js.map +1 -0
- package/dist/{carousel.d.ts → components/carousel/index.d.ts} +21 -0
- package/dist/{carousel.js → components/carousel/index.js} +11 -5
- package/dist/components/carousel/index.js.map +1 -0
- package/dist/{checkbox.d.ts → components/checkbox/index.d.ts} +22 -21
- package/dist/{checkbox.js → components/checkbox/index.js} +3 -3
- package/dist/components/checkbox/index.js.map +1 -0
- package/dist/{chip.js → components/chip/index.js} +3 -3
- package/dist/components/chip/index.js.map +1 -0
- package/dist/components/date-picker/index.d.ts +189 -0
- package/dist/{date-picker.js → components/date-picker/index.js} +4 -4
- package/dist/components/date-picker/index.js.map +1 -0
- package/dist/{dialog.js → components/dialog/index.js} +4 -4
- package/dist/components/dialog/index.js.map +1 -0
- package/dist/{divider.js → components/divider/index.js} +3 -3
- package/dist/components/divider/index.js.map +1 -0
- package/dist/{fab.d.ts → components/fab/index.d.ts} +29 -15
- package/dist/components/fab/index.js +79 -0
- package/dist/components/fab/index.js.map +1 -0
- package/dist/{fab-menu.d.ts → components/fab-menu/index.d.ts} +0 -21
- package/dist/{fab-menu.js → components/fab-menu/index.js} +49 -18
- package/dist/components/fab-menu/index.js.map +1 -0
- package/dist/{icon-button.js → components/icon-button/index.js} +3 -3
- package/dist/components/icon-button/index.js.map +1 -0
- package/dist/components/item/index.d.ts +95 -0
- package/dist/{item.js → components/item/index.js} +3 -3
- package/dist/components/item/index.js.map +1 -0
- package/dist/{list.js → components/list/index.js} +3 -3
- package/dist/components/list/index.js.map +1 -0
- package/dist/{loading-indicator.js → components/loading-indicator/index.js} +4 -4
- package/dist/components/loading-indicator/index.js.map +1 -0
- package/dist/{menu.d.ts → components/menu/index.d.ts} +61 -60
- package/dist/components/menu/index.js +179 -0
- package/dist/components/menu/index.js.map +1 -0
- package/dist/components/navigation-bar/index.d.ts +92 -0
- package/dist/{navigation-bar.js → components/navigation-bar/index.js} +3 -3
- package/dist/components/navigation-bar/index.js.map +1 -0
- package/dist/{navigation-drawer.js → components/navigation-drawer/index.js} +4 -4
- package/dist/components/navigation-drawer/index.js.map +1 -0
- package/dist/components/navigation-rail/index.d.ts +102 -0
- package/dist/{navigation-rail.js → components/navigation-rail/index.js} +4 -4
- package/dist/components/navigation-rail/index.js.map +1 -0
- package/dist/components/progress/index.d.ts +127 -0
- package/dist/components/progress/index.js +101 -0
- package/dist/components/progress/index.js.map +1 -0
- package/dist/{radio.d.ts → components/radio/index.d.ts} +17 -16
- package/dist/{radio.js → components/radio/index.js} +3 -3
- package/dist/components/radio/index.js.map +1 -0
- package/dist/{search.d.ts → components/search/index.d.ts} +62 -61
- package/dist/{search.js → components/search/index.js} +4 -4
- package/dist/components/search/index.js.map +1 -0
- package/dist/{segmented-button.d.ts → components/segmented-button/index.d.ts} +32 -31
- package/dist/{segmented-button.js → components/segmented-button/index.js} +4 -4
- package/dist/components/segmented-button/index.js.map +1 -0
- package/dist/components/select/index.d.ts +235 -0
- package/dist/components/select/index.js +260 -0
- package/dist/components/select/index.js.map +1 -0
- package/dist/{side-sheet.js → components/side-sheet/index.js} +4 -4
- package/dist/components/side-sheet/index.js.map +1 -0
- package/dist/{slider.d.ts → components/slider/index.d.ts} +52 -51
- package/dist/{slider.js → components/slider/index.js} +4 -4
- package/dist/components/slider/index.js.map +1 -0
- package/dist/{snackbar.d.ts → components/snackbar/index.d.ts} +42 -41
- package/dist/{snackbar.js → components/snackbar/index.js} +3 -3
- package/dist/components/snackbar/index.js.map +1 -0
- package/dist/{split-button.js → components/split-button/index.js} +4 -4
- package/dist/components/split-button/index.js.map +1 -0
- package/dist/components/switch/index.d.ts +73 -0
- package/dist/{switch.js → components/switch/index.js} +3 -3
- package/dist/components/switch/index.js.map +1 -0
- package/dist/{tabs.js → components/tabs/index.js} +4 -4
- package/dist/components/tabs/index.js.map +1 -0
- package/dist/{textfield.d.ts → components/textfield/index.d.ts} +7 -1
- package/dist/{textfield.js → components/textfield/index.js} +35 -13
- package/dist/components/textfield/index.js.map +1 -0
- package/dist/components/time-picker/index.d.ts +153 -0
- package/dist/{time-picker.js → components/time-picker/index.js} +28 -13
- package/dist/components/time-picker/index.js.map +1 -0
- package/dist/{toolbar.js → components/toolbar/index.js} +4 -4
- package/dist/components/toolbar/index.js.map +1 -0
- package/dist/{tooltip.d.ts → components/tooltip/index.d.ts} +47 -46
- package/dist/{tooltip.js → components/tooltip/index.js} +4 -4
- package/dist/components/tooltip/index.js.map +1 -0
- package/dist/{top-app-bar.js → components/top-app-bar/index.js} +4 -4
- package/dist/components/top-app-bar/index.js.map +1 -0
- package/dist/index.d.ts +40 -39
- package/dist/index.js +382 -130
- package/dist/index.js.map +1 -1
- package/package.json +151 -151
- package/styles/preset.css +75 -7
- package/styles/theme.css +2 -0
- package/styles/tokens.css +2 -0
- package/dist/badge.js.map +0 -1
- package/dist/bottom-app-bar.js.map +0 -1
- package/dist/bottom-sheet.js.map +0 -1
- package/dist/button-group.js.map +0 -1
- package/dist/button.js.map +0 -1
- package/dist/card.js.map +0 -1
- package/dist/carousel.js.map +0 -1
- package/dist/checkbox.js.map +0 -1
- package/dist/chip.js.map +0 -1
- package/dist/date-picker.d.ts +0 -188
- package/dist/date-picker.js.map +0 -1
- package/dist/dialog.js.map +0 -1
- package/dist/divider.js.map +0 -1
- package/dist/fab-menu.js.map +0 -1
- package/dist/fab.js +0 -47
- package/dist/fab.js.map +0 -1
- package/dist/icon-button.js.map +0 -1
- package/dist/item.d.ts +0 -94
- package/dist/item.js.map +0 -1
- package/dist/list.js.map +0 -1
- package/dist/loading-indicator.js.map +0 -1
- package/dist/menu.js +0 -114
- package/dist/menu.js.map +0 -1
- package/dist/navigation-bar.d.ts +0 -91
- package/dist/navigation-bar.js.map +0 -1
- package/dist/navigation-drawer.js.map +0 -1
- package/dist/navigation-rail.d.ts +0 -101
- package/dist/navigation-rail.js.map +0 -1
- package/dist/progress.d.ts +0 -118
- package/dist/progress.js +0 -62
- package/dist/progress.js.map +0 -1
- package/dist/radio.js.map +0 -1
- package/dist/search.js.map +0 -1
- package/dist/segmented-button.js.map +0 -1
- package/dist/select.d.ts +0 -125
- package/dist/select.js +0 -99
- package/dist/select.js.map +0 -1
- package/dist/side-sheet.js.map +0 -1
- package/dist/slider.js.map +0 -1
- package/dist/snackbar.js.map +0 -1
- package/dist/split-button.js.map +0 -1
- package/dist/switch.d.ts +0 -72
- package/dist/switch.js.map +0 -1
- package/dist/tabs.js.map +0 -1
- package/dist/textfield.js.map +0 -1
- package/dist/time-picker.d.ts +0 -144
- package/dist/time-picker.js.map +0 -1
- package/dist/toolbar.js.map +0 -1
- package/dist/tooltip.js.map +0 -1
- package/dist/top-app-bar.js.map +0 -1
- /package/dist/{badge.d.ts → components/badge/index.d.ts} +0 -0
- /package/dist/{button.d.ts → components/button/index.d.ts} +0 -0
- /package/dist/{button-group.d.ts → components/button-group/index.d.ts} +0 -0
- /package/dist/{card.d.ts → components/card/index.d.ts} +0 -0
- /package/dist/{chip.d.ts → components/chip/index.d.ts} +0 -0
- /package/dist/{dialog.d.ts → components/dialog/index.d.ts} +0 -0
- /package/dist/{divider.d.ts → components/divider/index.d.ts} +0 -0
- /package/dist/{icon-button.d.ts → components/icon-button/index.d.ts} +0 -0
- /package/dist/{list.d.ts → components/list/index.d.ts} +0 -0
- /package/dist/{loading-indicator.d.ts → components/loading-indicator/index.d.ts} +0 -0
- /package/dist/{navigation-drawer.d.ts → components/navigation-drawer/index.d.ts} +0 -0
- /package/dist/{side-sheet.d.ts → components/side-sheet/index.d.ts} +0 -0
- /package/dist/{split-button.d.ts → components/split-button/index.d.ts} +0 -0
- /package/dist/{tabs.d.ts → components/tabs/index.d.ts} +0 -0
- /package/dist/{toolbar.d.ts → components/toolbar/index.d.ts} +0 -0
- /package/dist/{top-app-bar.d.ts → components/top-app-bar/index.d.ts} +0 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import * as _m3_baseui_core from '@m3-baseui/core';
|
|
3
|
+
export { SelectFieldProps } from '@m3-baseui/core';
|
|
4
|
+
import * as _base_ui_react from '@base-ui/react';
|
|
5
|
+
import * as tailwind_variants from 'tailwind-variants';
|
|
6
|
+
import * as tailwind_variants_dist_config_js from 'tailwind-variants/dist/config.js';
|
|
7
|
+
import * as tailwind_merge from 'tailwind-merge';
|
|
8
|
+
|
|
9
|
+
declare const selectTv: tailwind_variants.TVReturnType<{
|
|
10
|
+
[key: string]: {
|
|
11
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
12
|
+
value?: tailwind_merge.ClassNameValue;
|
|
13
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
14
|
+
icon?: tailwind_merge.ClassNameValue;
|
|
15
|
+
itemIndicator?: tailwind_merge.ClassNameValue;
|
|
16
|
+
groupLabel?: tailwind_merge.ClassNameValue;
|
|
17
|
+
item?: tailwind_merge.ClassNameValue;
|
|
18
|
+
trigger?: tailwind_merge.ClassNameValue;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
} | {
|
|
22
|
+
[x: string]: {
|
|
23
|
+
[x: string]: tailwind_merge.ClassNameValue | {
|
|
24
|
+
value?: tailwind_merge.ClassNameValue;
|
|
25
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
26
|
+
icon?: tailwind_merge.ClassNameValue;
|
|
27
|
+
itemIndicator?: tailwind_merge.ClassNameValue;
|
|
28
|
+
groupLabel?: tailwind_merge.ClassNameValue;
|
|
29
|
+
item?: tailwind_merge.ClassNameValue;
|
|
30
|
+
trigger?: tailwind_merge.ClassNameValue;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
} | {}, {
|
|
34
|
+
trigger: string[];
|
|
35
|
+
value: string;
|
|
36
|
+
icon: string;
|
|
37
|
+
popup: string;
|
|
38
|
+
item: string[];
|
|
39
|
+
itemIndicator: string;
|
|
40
|
+
groupLabel: string;
|
|
41
|
+
}, undefined, tailwind_variants_dist_config_js.TVConfig<unknown, {
|
|
42
|
+
[key: string]: {
|
|
43
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
44
|
+
value?: tailwind_merge.ClassNameValue;
|
|
45
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
46
|
+
icon?: tailwind_merge.ClassNameValue;
|
|
47
|
+
itemIndicator?: tailwind_merge.ClassNameValue;
|
|
48
|
+
groupLabel?: tailwind_merge.ClassNameValue;
|
|
49
|
+
item?: tailwind_merge.ClassNameValue;
|
|
50
|
+
trigger?: tailwind_merge.ClassNameValue;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
} | {}>, {
|
|
54
|
+
[key: string]: {
|
|
55
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
56
|
+
value?: tailwind_merge.ClassNameValue;
|
|
57
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
58
|
+
icon?: tailwind_merge.ClassNameValue;
|
|
59
|
+
itemIndicator?: tailwind_merge.ClassNameValue;
|
|
60
|
+
groupLabel?: tailwind_merge.ClassNameValue;
|
|
61
|
+
item?: tailwind_merge.ClassNameValue;
|
|
62
|
+
trigger?: tailwind_merge.ClassNameValue;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
} | {}, {
|
|
66
|
+
trigger: string[];
|
|
67
|
+
value: string;
|
|
68
|
+
icon: string;
|
|
69
|
+
popup: string;
|
|
70
|
+
item: string[];
|
|
71
|
+
itemIndicator: string;
|
|
72
|
+
groupLabel: string;
|
|
73
|
+
}, tailwind_variants.TVReturnType<unknown, {
|
|
74
|
+
trigger: string[];
|
|
75
|
+
value: string;
|
|
76
|
+
icon: string;
|
|
77
|
+
popup: string;
|
|
78
|
+
item: string[];
|
|
79
|
+
itemIndicator: string;
|
|
80
|
+
groupLabel: string;
|
|
81
|
+
}, undefined, tailwind_variants_dist_config_js.TVConfig<unknown, {
|
|
82
|
+
[key: string]: {
|
|
83
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
84
|
+
value?: tailwind_merge.ClassNameValue;
|
|
85
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
86
|
+
icon?: tailwind_merge.ClassNameValue;
|
|
87
|
+
itemIndicator?: tailwind_merge.ClassNameValue;
|
|
88
|
+
groupLabel?: tailwind_merge.ClassNameValue;
|
|
89
|
+
item?: tailwind_merge.ClassNameValue;
|
|
90
|
+
trigger?: tailwind_merge.ClassNameValue;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
} | {}>, unknown, unknown, undefined>>;
|
|
94
|
+
/**
|
|
95
|
+
* Exposed Dropdown Menu anchor (issue #96): the Select rendered as an M3
|
|
96
|
+
* TextField. The floating label, focus/filled border and trailing dropdown
|
|
97
|
+
* icon key off the trigger's own field state — Base UI stamps `data-focused` /
|
|
98
|
+
* `data-filled` / `data-invalid` / `data-popup-open` on the trigger (the
|
|
99
|
+
* `group/field`) once it sits inside `Field.Root`. Mirrors the standalone
|
|
100
|
+
* TextField so the anchor reads identically. Same DOM as the VE build.
|
|
101
|
+
*/
|
|
102
|
+
declare const selectFieldTv: tailwind_variants.TVReturnType<{
|
|
103
|
+
variant: {
|
|
104
|
+
filled: {
|
|
105
|
+
field: string[];
|
|
106
|
+
value: string;
|
|
107
|
+
label: string[];
|
|
108
|
+
};
|
|
109
|
+
outlined: {
|
|
110
|
+
field: string[];
|
|
111
|
+
label: string[];
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
}, {
|
|
115
|
+
root: string;
|
|
116
|
+
field: string[];
|
|
117
|
+
inputWrap: string;
|
|
118
|
+
value: string;
|
|
119
|
+
label: string[];
|
|
120
|
+
icon: string[];
|
|
121
|
+
leadingIcon: string;
|
|
122
|
+
supporting: string[];
|
|
123
|
+
supportingText: string;
|
|
124
|
+
}, undefined, tailwind_variants_dist_config_js.TVConfig<{
|
|
125
|
+
variant: {
|
|
126
|
+
filled: {
|
|
127
|
+
field: string[];
|
|
128
|
+
value: string;
|
|
129
|
+
label: string[];
|
|
130
|
+
};
|
|
131
|
+
outlined: {
|
|
132
|
+
field: string[];
|
|
133
|
+
label: string[];
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
}, {
|
|
137
|
+
variant: {
|
|
138
|
+
filled: {
|
|
139
|
+
field: string[];
|
|
140
|
+
value: string;
|
|
141
|
+
label: string[];
|
|
142
|
+
};
|
|
143
|
+
outlined: {
|
|
144
|
+
field: string[];
|
|
145
|
+
label: string[];
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
}>, {
|
|
149
|
+
variant: {
|
|
150
|
+
filled: {
|
|
151
|
+
field: string[];
|
|
152
|
+
value: string;
|
|
153
|
+
label: string[];
|
|
154
|
+
};
|
|
155
|
+
outlined: {
|
|
156
|
+
field: string[];
|
|
157
|
+
label: string[];
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
}, {
|
|
161
|
+
root: string;
|
|
162
|
+
field: string[];
|
|
163
|
+
inputWrap: string;
|
|
164
|
+
value: string;
|
|
165
|
+
label: string[];
|
|
166
|
+
icon: string[];
|
|
167
|
+
leadingIcon: string;
|
|
168
|
+
supporting: string[];
|
|
169
|
+
supportingText: string;
|
|
170
|
+
}, tailwind_variants.TVReturnType<{
|
|
171
|
+
variant: {
|
|
172
|
+
filled: {
|
|
173
|
+
field: string[];
|
|
174
|
+
value: string;
|
|
175
|
+
label: string[];
|
|
176
|
+
};
|
|
177
|
+
outlined: {
|
|
178
|
+
field: string[];
|
|
179
|
+
label: string[];
|
|
180
|
+
};
|
|
181
|
+
};
|
|
182
|
+
}, {
|
|
183
|
+
root: string;
|
|
184
|
+
field: string[];
|
|
185
|
+
inputWrap: string;
|
|
186
|
+
value: string;
|
|
187
|
+
label: string[];
|
|
188
|
+
icon: string[];
|
|
189
|
+
leadingIcon: string;
|
|
190
|
+
supporting: string[];
|
|
191
|
+
supportingText: string;
|
|
192
|
+
}, undefined, tailwind_variants_dist_config_js.TVConfig<{
|
|
193
|
+
variant: {
|
|
194
|
+
filled: {
|
|
195
|
+
field: string[];
|
|
196
|
+
value: string;
|
|
197
|
+
label: string[];
|
|
198
|
+
};
|
|
199
|
+
outlined: {
|
|
200
|
+
field: string[];
|
|
201
|
+
label: string[];
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
}, {
|
|
205
|
+
variant: {
|
|
206
|
+
filled: {
|
|
207
|
+
field: string[];
|
|
208
|
+
value: string;
|
|
209
|
+
label: string[];
|
|
210
|
+
};
|
|
211
|
+
outlined: {
|
|
212
|
+
field: string[];
|
|
213
|
+
label: string[];
|
|
214
|
+
};
|
|
215
|
+
};
|
|
216
|
+
}>, unknown, unknown, undefined>>;
|
|
217
|
+
declare const Select: {
|
|
218
|
+
Root: typeof _base_ui_react.SelectRoot;
|
|
219
|
+
Field: react.ForwardRefExoticComponent<_m3_baseui_core.SelectFieldOwnProps & Omit<_base_ui_react.SelectRoot.Props<unknown, boolean | undefined>, "className" | "children"> & react.RefAttributes<HTMLButtonElement>>;
|
|
220
|
+
Label: react.ForwardRefExoticComponent<Omit<_base_ui_react.SelectLabelProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
221
|
+
Trigger: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.SelectTriggerProps, "ref"> & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<unknown>>;
|
|
222
|
+
Value: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.SelectValueProps, "ref"> & react.RefAttributes<HTMLSpanElement>, "ref"> & react.RefAttributes<unknown>>;
|
|
223
|
+
Icon: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.SelectIconProps, "ref"> & react.RefAttributes<HTMLSpanElement>, "ref"> & react.RefAttributes<unknown>>;
|
|
224
|
+
Portal: react.ForwardRefExoticComponent<Omit<_base_ui_react.SelectPortalProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
225
|
+
Positioner: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.SelectPositionerProps, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
226
|
+
Popup: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.SelectPopupProps, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
227
|
+
List: react.ForwardRefExoticComponent<Omit<_base_ui_react.SelectListProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
228
|
+
Item: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.SelectItemProps, "ref"> & react.RefAttributes<HTMLElement>, "ref"> & react.RefAttributes<unknown>>;
|
|
229
|
+
ItemText: react.NamedExoticComponent<Omit<_base_ui_react.SelectItemTextProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
230
|
+
ItemIndicator: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.SelectItemIndicatorProps, "ref"> & react.RefAttributes<HTMLSpanElement>, "ref"> & react.RefAttributes<unknown>>;
|
|
231
|
+
Group: react.ForwardRefExoticComponent<Omit<_base_ui_react.SelectGroupProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
232
|
+
GroupLabel: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.SelectGroupLabelProps, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<unknown>>;
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
export { Select, selectFieldTv, selectTv };
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createSelect } from '@m3-baseui/core';
|
|
3
|
+
import { tv as tv$1 } from 'tailwind-variants';
|
|
4
|
+
|
|
5
|
+
// src/components/select/select.ts
|
|
6
|
+
var TYPESCALE = [
|
|
7
|
+
"display-large",
|
|
8
|
+
"display-medium",
|
|
9
|
+
"display-small",
|
|
10
|
+
"headline-large",
|
|
11
|
+
"headline-medium",
|
|
12
|
+
"headline-small",
|
|
13
|
+
"title-large",
|
|
14
|
+
"title-medium",
|
|
15
|
+
"title-small",
|
|
16
|
+
"body-large",
|
|
17
|
+
"body-medium",
|
|
18
|
+
"body-small",
|
|
19
|
+
"label-large",
|
|
20
|
+
"label-medium",
|
|
21
|
+
"label-small"
|
|
22
|
+
];
|
|
23
|
+
var tv = (options, config) => tv$1(options, {
|
|
24
|
+
...config,
|
|
25
|
+
twMergeConfig: {
|
|
26
|
+
extend: {
|
|
27
|
+
classGroups: {
|
|
28
|
+
"font-size": [{ text: [...TYPESCALE] }]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// src/components/menu/menu-selectable-item.ts
|
|
35
|
+
var menuSelectableItemStateLayer = [
|
|
36
|
+
"before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
|
|
37
|
+
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
38
|
+
"data-[highlighted]:before:opacity-[var(--md-sys-state-hover)]",
|
|
39
|
+
"active:before:opacity-[var(--md-sys-state-pressed)]"
|
|
40
|
+
];
|
|
41
|
+
var menuSelectableItemSelectedFill = [
|
|
42
|
+
"data-[selected]:bg-secondary-container data-[selected]:text-on-secondary-container",
|
|
43
|
+
"data-[checked]:bg-secondary-container data-[checked]:text-on-secondary-container"
|
|
44
|
+
];
|
|
45
|
+
var menuSelectableItemPositionShape = [
|
|
46
|
+
"data-[selected]:data-[position=only]:rounded-extra-small",
|
|
47
|
+
"data-[selected]:data-[position=first]:rounded-t-extra-small",
|
|
48
|
+
"data-[selected]:data-[position=middle]:rounded-none",
|
|
49
|
+
"data-[selected]:data-[position=last]:rounded-b-extra-small",
|
|
50
|
+
"data-[checked]:data-[position=only]:rounded-extra-small",
|
|
51
|
+
"data-[checked]:data-[position=first]:rounded-t-extra-small",
|
|
52
|
+
"data-[checked]:data-[position=middle]:rounded-none",
|
|
53
|
+
"data-[checked]:data-[position=last]:rounded-b-extra-small"
|
|
54
|
+
];
|
|
55
|
+
var menuSelectableItemPositionShapeFallback = [
|
|
56
|
+
"data-[selected]:not([data-position]):rounded-extra-small",
|
|
57
|
+
"data-[checked]:not([data-position]):rounded-extra-small"
|
|
58
|
+
];
|
|
59
|
+
var menuSelectableItemDisabled = [
|
|
60
|
+
"data-[disabled]:text-on-surface/[0.38] data-[disabled]:before:opacity-0 data-[disabled]:pointer-events-none",
|
|
61
|
+
"data-[disabled]:data-[selected]:bg-transparent data-[disabled]:data-[selected]:text-on-surface/[0.38]",
|
|
62
|
+
"data-[disabled]:data-[checked]:bg-transparent data-[disabled]:data-[checked]:text-on-surface/[0.38]"
|
|
63
|
+
];
|
|
64
|
+
var menuSelectableItemBase = [
|
|
65
|
+
"group relative cursor-pointer select-none outline-none text-label-large text-on-surface",
|
|
66
|
+
"h-12 px-3 overflow-hidden",
|
|
67
|
+
...menuSelectableItemStateLayer,
|
|
68
|
+
...menuSelectableItemSelectedFill,
|
|
69
|
+
...menuSelectableItemPositionShape,
|
|
70
|
+
...menuSelectableItemPositionShapeFallback,
|
|
71
|
+
...menuSelectableItemDisabled
|
|
72
|
+
];
|
|
73
|
+
var menuSelectableItemTv = tv({
|
|
74
|
+
slots: {
|
|
75
|
+
/** Select row: check + label + optional trailing meta. */
|
|
76
|
+
selectItem: ["grid grid-cols-[24px_1fr_auto] items-center gap-3", ...menuSelectableItemBase],
|
|
77
|
+
/** Menu checkbox / radio row: check + label. */
|
|
78
|
+
menuSelectableItem: ["grid grid-cols-[24px_1fr] items-center gap-3", ...menuSelectableItemBase],
|
|
79
|
+
itemIndicator: [
|
|
80
|
+
"inline-flex items-center justify-center text-on-surface",
|
|
81
|
+
"invisible group-data-[selected]:visible group-data-[checked]:visible",
|
|
82
|
+
"group-data-[selected]:text-on-secondary-container group-data-[checked]:text-on-secondary-container",
|
|
83
|
+
"group-data-[disabled]:text-on-surface/[0.38]"
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
var menuSelectableItem = menuSelectableItemTv();
|
|
88
|
+
|
|
89
|
+
// src/components/menu/menu-surface.ts
|
|
90
|
+
var menuSurfaceBase = [
|
|
91
|
+
"py-2",
|
|
92
|
+
"bg-surface-container text-on-surface rounded-extra-small shadow-level2",
|
|
93
|
+
"origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
|
|
94
|
+
"data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
|
|
95
|
+
"data-[ending-style]:opacity-0",
|
|
96
|
+
"focus:outline-none"
|
|
97
|
+
];
|
|
98
|
+
var menuSurfaceTv = tv({
|
|
99
|
+
slots: {
|
|
100
|
+
popup: ["max-w-[280px]", ...menuSurfaceBase],
|
|
101
|
+
groupLabel: "px-3 py-2 text-label-small text-on-surface-variant"
|
|
102
|
+
},
|
|
103
|
+
variants: {
|
|
104
|
+
width: {
|
|
105
|
+
/** Standalone Menu: 112–280dp. */
|
|
106
|
+
standard: { popup: "min-w-[112px]" },
|
|
107
|
+
/** Exposed Dropdown / Select: at least anchor width, capped at 280dp. */
|
|
108
|
+
anchor: { popup: "min-w-[max(112px,var(--anchor-width))]" }
|
|
109
|
+
},
|
|
110
|
+
scroll: {
|
|
111
|
+
none: {},
|
|
112
|
+
/** Select popup: clamp height and scroll the list. */
|
|
113
|
+
auto: { popup: "max-h-[var(--available-height)] overflow-auto" }
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
defaultVariants: {
|
|
117
|
+
width: "standard",
|
|
118
|
+
scroll: "none"
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
menuSurfaceTv();
|
|
122
|
+
|
|
123
|
+
// src/components/select/select.ts
|
|
124
|
+
var surface = menuSurfaceTv({ width: "anchor", scroll: "auto" });
|
|
125
|
+
var selectable = menuSelectableItem;
|
|
126
|
+
var selectTv = tv({
|
|
127
|
+
slots: {
|
|
128
|
+
trigger: [
|
|
129
|
+
"group relative inline-flex items-center justify-between gap-2 box-border",
|
|
130
|
+
"h-14 min-w-[200px] px-4 rounded-extra-small border border-outline bg-transparent",
|
|
131
|
+
"text-on-surface text-body-large cursor-pointer outline-none text-left",
|
|
132
|
+
"transition-colors duration-150 ease-standard",
|
|
133
|
+
// focus/open = 3dp primary outline; padding drops 2px to keep content steady
|
|
134
|
+
"data-[popup-open]:border-primary data-[popup-open]:border-[3px] data-[popup-open]:px-[14px]",
|
|
135
|
+
"focus-visible:border-primary focus-visible:border-[3px] focus-visible:px-[14px]",
|
|
136
|
+
"data-[disabled]:border-on-surface/[0.12] data-[disabled]:text-on-surface/[0.38] data-[disabled]:pointer-events-none"
|
|
137
|
+
],
|
|
138
|
+
value: "flex-1 truncate",
|
|
139
|
+
icon: "flex text-on-surface-variant transition-transform duration-150 group-data-[popup-open]:rotate-180 group-data-[disabled]:text-on-surface/[0.38]",
|
|
140
|
+
popup: surface.popup(),
|
|
141
|
+
item: [
|
|
142
|
+
selectable.selectItem(),
|
|
143
|
+
// M3 trailing supporting text (e.g. meta) sits in the last column.
|
|
144
|
+
"[&_[data-slot=select-trailing]]:pl-4 [&_[data-slot=select-trailing]]:text-label-large [&_[data-slot=select-trailing]]:text-on-surface-variant",
|
|
145
|
+
"data-[selected]:[&_[data-slot=select-trailing]]:text-on-secondary-container",
|
|
146
|
+
"data-[disabled]:[&_[data-slot=select-trailing]]:text-on-surface/[0.38]"
|
|
147
|
+
],
|
|
148
|
+
itemIndicator: selectable.itemIndicator(),
|
|
149
|
+
groupLabel: surface.groupLabel()
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
var selectFieldTv = tv({
|
|
153
|
+
slots: {
|
|
154
|
+
// The `group` hook lives here (not in engine-neutral core): supporting text
|
|
155
|
+
// keys its error color off Field.Root's `group-data-[invalid]`.
|
|
156
|
+
root: "group flex flex-col gap-1 min-w-[210px]",
|
|
157
|
+
field: [
|
|
158
|
+
"group/field relative flex items-stretch gap-3 h-14 px-4 box-border w-full",
|
|
159
|
+
"text-on-surface text-body-large cursor-pointer text-left outline-none",
|
|
160
|
+
"transition-[border-color,padding] duration-150 ease-standard",
|
|
161
|
+
"data-[disabled]:opacity-[0.38] data-[disabled]:pointer-events-none"
|
|
162
|
+
],
|
|
163
|
+
inputWrap: "relative z-0 flex-1 flex items-center min-w-0 overflow-visible",
|
|
164
|
+
value: "flex-1 truncate text-body-large text-on-surface",
|
|
165
|
+
label: [
|
|
166
|
+
"absolute left-0 pointer-events-none origin-left",
|
|
167
|
+
"top-1/2 -translate-y-1/2 text-body-large text-on-surface-variant",
|
|
168
|
+
"transition-all duration-150 ease-standard",
|
|
169
|
+
"group-data-[focused]/field:text-primary group-data-[invalid]/field:text-error"
|
|
170
|
+
],
|
|
171
|
+
icon: [
|
|
172
|
+
// Disabled dimming comes from the field's own opacity (0.38); no per-icon
|
|
173
|
+
// color override here, else it would compound to ~0.14.
|
|
174
|
+
"flex items-center text-on-surface-variant transition-transform duration-150 [&>svg]:size-6",
|
|
175
|
+
"group-data-[popup-open]/field:rotate-180"
|
|
176
|
+
],
|
|
177
|
+
leadingIcon: "inline-flex items-center justify-center shrink-0 text-on-surface-variant [&>svg]:size-6",
|
|
178
|
+
supporting: [
|
|
179
|
+
"flex justify-between gap-4 px-4 text-body-small text-on-surface-variant",
|
|
180
|
+
"group-data-[invalid]:text-error"
|
|
181
|
+
],
|
|
182
|
+
supportingText: "min-w-0"
|
|
183
|
+
},
|
|
184
|
+
variants: {
|
|
185
|
+
variant: {
|
|
186
|
+
filled: {
|
|
187
|
+
field: [
|
|
188
|
+
"overflow-hidden rounded-t-extra-small bg-surface-container-highest",
|
|
189
|
+
// M3 filled hover: state layer (on-surface × state-hover).
|
|
190
|
+
"before:absolute before:inset-0 before:rounded-[inherit] before:bg-current before:opacity-0 before:pointer-events-none",
|
|
191
|
+
"before:transition-opacity before:duration-100",
|
|
192
|
+
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
193
|
+
"data-[disabled]:before:opacity-0",
|
|
194
|
+
// M3 filled resting active-indicator: 1dp on-surface-variant.
|
|
195
|
+
"border-b border-on-surface-variant hover:border-on-surface",
|
|
196
|
+
// M3 filled focus-active-indicator-height is 3dp.
|
|
197
|
+
"data-[focused]:border-b-[3px] data-[focused]:border-primary",
|
|
198
|
+
"data-[popup-open]:border-b-[3px] data-[popup-open]:border-primary",
|
|
199
|
+
"data-[invalid]:border-error"
|
|
200
|
+
],
|
|
201
|
+
value: "pt-3",
|
|
202
|
+
label: [
|
|
203
|
+
"group-data-[focused]/field:top-1.5 group-data-[focused]/field:translate-y-0 group-data-[focused]/field:text-body-small",
|
|
204
|
+
"group-data-[filled]/field:top-1.5 group-data-[filled]/field:translate-y-0 group-data-[filled]/field:text-body-small",
|
|
205
|
+
"group-data-[popup-open]/field:top-1.5 group-data-[popup-open]/field:translate-y-0 group-data-[popup-open]/field:text-body-small",
|
|
206
|
+
"group-data-[has-placeholder]/field:top-1.5 group-data-[has-placeholder]/field:translate-y-0 group-data-[has-placeholder]/field:text-body-small"
|
|
207
|
+
]
|
|
208
|
+
},
|
|
209
|
+
outlined: {
|
|
210
|
+
field: [
|
|
211
|
+
"overflow-visible rounded-extra-small border border-outline hover:border-on-surface",
|
|
212
|
+
// M3 outlined focus-outline-width is 3dp; padding drops 2px so content
|
|
213
|
+
// stays steady as the 1dp border grows (matches the TextField anchor).
|
|
214
|
+
"data-[focused]:border-[3px] data-[focused]:border-primary data-[focused]:px-[14px]",
|
|
215
|
+
"data-[popup-open]:border-[3px] data-[popup-open]:border-primary data-[popup-open]:px-[14px]",
|
|
216
|
+
"data-[invalid]:border-error"
|
|
217
|
+
],
|
|
218
|
+
label: [
|
|
219
|
+
"group-data-[focused]/field:top-0 group-data-[focused]/field:-translate-y-1/2 group-data-[focused]/field:z-[1] group-data-[focused]/field:text-body-small group-data-[focused]/field:bg-surface group-data-[focused]/field:px-1 group-data-[focused]/field:leading-none",
|
|
220
|
+
"group-data-[filled]/field:top-0 group-data-[filled]/field:-translate-y-1/2 group-data-[filled]/field:z-[1] group-data-[filled]/field:text-body-small group-data-[filled]/field:bg-surface group-data-[filled]/field:px-1 group-data-[filled]/field:leading-none",
|
|
221
|
+
"group-data-[popup-open]/field:top-0 group-data-[popup-open]/field:-translate-y-1/2 group-data-[popup-open]/field:z-[1] group-data-[popup-open]/field:text-body-small group-data-[popup-open]/field:bg-surface group-data-[popup-open]/field:px-1 group-data-[popup-open]/field:leading-none",
|
|
222
|
+
"group-data-[has-placeholder]/field:top-0 group-data-[has-placeholder]/field:-translate-y-1/2 group-data-[has-placeholder]/field:z-[1] group-data-[has-placeholder]/field:text-body-small group-data-[has-placeholder]/field:bg-surface group-data-[has-placeholder]/field:px-1 group-data-[has-placeholder]/field:leading-none"
|
|
223
|
+
]
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
defaultVariants: {
|
|
228
|
+
variant: "outlined"
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
var s = selectTv();
|
|
232
|
+
var Select = createSelect(
|
|
233
|
+
{
|
|
234
|
+
trigger: s.trigger(),
|
|
235
|
+
value: s.value(),
|
|
236
|
+
icon: s.icon(),
|
|
237
|
+
popup: s.popup(),
|
|
238
|
+
item: s.item(),
|
|
239
|
+
itemIndicator: s.itemIndicator(),
|
|
240
|
+
groupLabel: s.groupLabel()
|
|
241
|
+
},
|
|
242
|
+
({ variant }) => {
|
|
243
|
+
const f = selectFieldTv({ variant });
|
|
244
|
+
return {
|
|
245
|
+
root: f.root(),
|
|
246
|
+
field: f.field(),
|
|
247
|
+
inputWrap: f.inputWrap(),
|
|
248
|
+
value: f.value(),
|
|
249
|
+
label: f.label(),
|
|
250
|
+
icon: f.icon(),
|
|
251
|
+
leadingIcon: f.leadingIcon(),
|
|
252
|
+
supporting: f.supporting(),
|
|
253
|
+
supportingText: f.supportingText()
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
);
|
|
257
|
+
|
|
258
|
+
export { Select, selectFieldTv, selectTv };
|
|
259
|
+
//# sourceMappingURL=index.js.map
|
|
260
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/tv.ts","../../../src/components/menu/menu-selectable-item.ts","../../../src/components/menu/menu-surface.ts","../../../src/components/select/select.ts"],"names":["baseTv"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * tv.ts — a tailwind-variants factory pre-configured for the M3 typescale.\n *\n * The Tailwind v4 preset exposes the 15 typescale roles as `text-<role>`\n * font-size utilities (e.g. `text-body-small`, `text-label-large`). Stock\n * tailwind-merge does not know these custom names, so it groups them with the\n * `text-<color>` utilities and drops one when a slot sets both a color *and* a\n * typescale (the common M3 case). That silently strips either the color or the\n * type, breaking token compliance.\n *\n * Teaching tailwind-merge that the typescale names belong to the `font-size`\n * group keeps color and type independent, so both survive the merge.\n */\nimport { type TV, tv as baseTv } from 'tailwind-variants';\n\nconst TYPESCALE = [\n 'display-large',\n 'display-medium',\n 'display-small',\n 'headline-large',\n 'headline-medium',\n 'headline-small',\n 'title-large',\n 'title-medium',\n 'title-small',\n 'body-large',\n 'body-medium',\n 'body-small',\n 'label-large',\n 'label-medium',\n 'label-small',\n] as const;\n\nexport const tv: TV = (options, config) =>\n baseTv(options, {\n ...config,\n twMergeConfig: {\n extend: {\n classGroups: {\n 'font-size': [{ text: [...TYPESCALE] }],\n },\n },\n },\n });\n","/**\n * menu-selectable-item.ts — shared M3 selectable menu row tokens.\n *\n * Select.Item and Menu CheckboxItem / RadioItem share secondary-container fill,\n * position-based selected shapes (issue #98), and the 24dp leading indicator column.\n */\nimport { tv } from '../../tv';\n\n/** State layer on selectable rows (hover / highlighted / pressed). */\nexport const menuSelectableItemStateLayer = [\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 'data-[highlighted]:before:opacity-[var(--md-sys-state-hover)]',\n 'active:before:opacity-[var(--md-sys-state-pressed)]',\n] as const;\n\n/** M3 selectable row fill when selected or checked. */\nexport const menuSelectableItemSelectedFill = [\n 'data-[selected]:bg-secondary-container data-[selected]:text-on-secondary-container',\n 'data-[checked]:bg-secondary-container data-[checked]:text-on-secondary-container',\n] as const;\n\n/** M3 MenuDefaults.itemShape — corner radii on the selected/checked container. */\nexport const menuSelectableItemPositionShape = [\n 'data-[selected]:data-[position=only]:rounded-extra-small',\n 'data-[selected]:data-[position=first]:rounded-t-extra-small',\n 'data-[selected]:data-[position=middle]:rounded-none',\n 'data-[selected]:data-[position=last]:rounded-b-extra-small',\n 'data-[checked]:data-[position=only]:rounded-extra-small',\n 'data-[checked]:data-[position=first]:rounded-t-extra-small',\n 'data-[checked]:data-[position=middle]:rounded-none',\n 'data-[checked]:data-[position=last]:rounded-b-extra-small',\n] as const;\n\n/** Fallback when rows are rendered via a wrapper and data-position is not stamped. */\nexport const menuSelectableItemPositionShapeFallback = [\n 'data-[selected]:not([data-position]):rounded-extra-small',\n 'data-[checked]:not([data-position]):rounded-extra-small',\n] as const;\n\nexport const menuSelectableItemDisabled = [\n 'data-[disabled]:text-on-surface/[0.38] data-[disabled]:before:opacity-0 data-[disabled]:pointer-events-none',\n 'data-[disabled]:data-[selected]:bg-transparent data-[disabled]:data-[selected]:text-on-surface/[0.38]',\n 'data-[disabled]:data-[checked]:bg-transparent data-[disabled]:data-[checked]:text-on-surface/[0.38]',\n] as const;\n\nexport const menuSelectableItemBase = [\n 'group relative cursor-pointer select-none outline-none text-label-large text-on-surface',\n 'h-12 px-3 overflow-hidden',\n ...menuSelectableItemStateLayer,\n ...menuSelectableItemSelectedFill,\n ...menuSelectableItemPositionShape,\n ...menuSelectableItemPositionShapeFallback,\n ...menuSelectableItemDisabled,\n] as const;\n\nexport const menuSelectableItemTv = tv({\n slots: {\n /** Select row: check + label + optional trailing meta. */\n selectItem: ['grid grid-cols-[24px_1fr_auto] items-center gap-3', ...menuSelectableItemBase],\n /** Menu checkbox / radio row: check + label. */\n menuSelectableItem: ['grid grid-cols-[24px_1fr] items-center gap-3', ...menuSelectableItemBase],\n itemIndicator: [\n 'inline-flex items-center justify-center text-on-surface',\n 'invisible group-data-[selected]:visible group-data-[checked]:visible',\n 'group-data-[selected]:text-on-secondary-container group-data-[checked]:text-on-secondary-container',\n 'group-data-[disabled]:text-on-surface/[0.38]',\n ],\n },\n});\n\nexport const menuSelectableItem = menuSelectableItemTv();\n","/**\n * menu-surface.ts — shared M3 menu popup surface tokens (Menus specs).\n *\n * Used by Menu (standard width) and Select (anchor-width + scroll). Engine-neutral\n * class strings; both components compose variants on top.\n */\nimport { tv } from '../../tv';\n\n/** Base popup surface shared by Menu and Select list popups. */\nexport const menuSurfaceBase = [\n 'py-2',\n 'bg-surface-container text-on-surface rounded-extra-small shadow-level2',\n 'origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard',\n 'data-[starting-style]:opacity-0 data-[starting-style]:scale-95',\n 'data-[ending-style]:opacity-0',\n 'focus:outline-none',\n] as const;\n\nexport const menuSurfaceTv = tv({\n slots: {\n popup: ['max-w-[280px]', ...menuSurfaceBase],\n groupLabel: 'px-3 py-2 text-label-small text-on-surface-variant',\n },\n variants: {\n width: {\n /** Standalone Menu: 112–280dp. */\n standard: { popup: 'min-w-[112px]' },\n /** Exposed Dropdown / Select: at least anchor width, capped at 280dp. */\n anchor: { popup: 'min-w-[max(112px,var(--anchor-width))]' },\n },\n scroll: {\n none: {},\n /** Select popup: clamp height and scroll the list. */\n auto: { popup: 'max-h-[var(--available-height)] overflow-auto' },\n },\n },\n defaultVariants: {\n width: 'standard',\n scroll: 'none',\n },\n});\n\nexport const menuSurface = menuSurfaceTv();\n","/**\n * select.ts — Tailwind classes for the M3 Select.\n *\n * Trigger = outlined field (56dp; 3dp primary border when open/focused, per the\n * M3 outlined-field focus-outline-width). Popup = M3 menu surface sized to the\n * anchor, clamped to the M3 menu 112–280dp bounds. Selectable items use\n * label-large, a leading check (on-surface; on-secondary-container when\n * selected), and secondary-container fill on the selected row. Same DOM as VE.\n *\n * Disabled follows the M3 outlined-field per-token opacities (not a blanket\n * fade): outline on-surface/0.12, label/value + icon on-surface/0.38.\n */\nimport { createSelect } from '@m3-baseui/core';\nimport { tv } from '../../tv';\nimport { menuSelectableItem } from '../menu/menu-selectable-item';\nimport { menuSurfaceTv } from '../menu/menu-surface';\n\nconst surface = menuSurfaceTv({ width: 'anchor', scroll: 'auto' });\nconst selectable = menuSelectableItem;\n\nexport const selectTv = tv({\n slots: {\n trigger: [\n 'group relative inline-flex items-center justify-between gap-2 box-border',\n 'h-14 min-w-[200px] px-4 rounded-extra-small border border-outline bg-transparent',\n 'text-on-surface text-body-large cursor-pointer outline-none text-left',\n 'transition-colors duration-150 ease-standard',\n // focus/open = 3dp primary outline; padding drops 2px to keep content steady\n 'data-[popup-open]:border-primary data-[popup-open]:border-[3px] data-[popup-open]:px-[14px]',\n 'focus-visible:border-primary focus-visible:border-[3px] focus-visible:px-[14px]',\n 'data-[disabled]:border-on-surface/[0.12] data-[disabled]:text-on-surface/[0.38] data-[disabled]:pointer-events-none',\n ],\n value: 'flex-1 truncate',\n icon: 'flex text-on-surface-variant transition-transform duration-150 group-data-[popup-open]:rotate-180 group-data-[disabled]:text-on-surface/[0.38]',\n popup: surface.popup(),\n item: [\n selectable.selectItem(),\n // M3 trailing supporting text (e.g. meta) sits in the last column.\n '[&_[data-slot=select-trailing]]:pl-4 [&_[data-slot=select-trailing]]:text-label-large [&_[data-slot=select-trailing]]:text-on-surface-variant',\n 'data-[selected]:[&_[data-slot=select-trailing]]:text-on-secondary-container',\n 'data-[disabled]:[&_[data-slot=select-trailing]]:text-on-surface/[0.38]',\n ],\n itemIndicator: selectable.itemIndicator(),\n groupLabel: surface.groupLabel(),\n },\n});\n\n/**\n * Exposed Dropdown Menu anchor (issue #96): the Select rendered as an M3\n * TextField. The floating label, focus/filled border and trailing dropdown\n * icon key off the trigger's own field state — Base UI stamps `data-focused` /\n * `data-filled` / `data-invalid` / `data-popup-open` on the trigger (the\n * `group/field`) once it sits inside `Field.Root`. Mirrors the standalone\n * TextField so the anchor reads identically. Same DOM as the VE build.\n */\nexport const selectFieldTv = tv({\n slots: {\n // The `group` hook lives here (not in engine-neutral core): supporting text\n // keys its error color off Field.Root's `group-data-[invalid]`.\n root: 'group flex flex-col gap-1 min-w-[210px]',\n field: [\n 'group/field relative flex items-stretch gap-3 h-14 px-4 box-border w-full',\n 'text-on-surface text-body-large cursor-pointer text-left outline-none',\n 'transition-[border-color,padding] duration-150 ease-standard',\n 'data-[disabled]:opacity-[0.38] data-[disabled]:pointer-events-none',\n ],\n inputWrap: 'relative z-0 flex-1 flex items-center min-w-0 overflow-visible',\n value: 'flex-1 truncate text-body-large text-on-surface',\n label: [\n 'absolute left-0 pointer-events-none origin-left',\n 'top-1/2 -translate-y-1/2 text-body-large text-on-surface-variant',\n 'transition-all duration-150 ease-standard',\n 'group-data-[focused]/field:text-primary group-data-[invalid]/field:text-error',\n ],\n icon: [\n // Disabled dimming comes from the field's own opacity (0.38); no per-icon\n // color override here, else it would compound to ~0.14.\n 'flex items-center text-on-surface-variant transition-transform duration-150 [&>svg]:size-6',\n 'group-data-[popup-open]/field:rotate-180',\n ],\n leadingIcon:\n 'inline-flex items-center justify-center shrink-0 text-on-surface-variant [&>svg]:size-6',\n supporting: [\n 'flex justify-between gap-4 px-4 text-body-small text-on-surface-variant',\n 'group-data-[invalid]:text-error',\n ],\n supportingText: 'min-w-0',\n },\n variants: {\n variant: {\n filled: {\n field: [\n 'overflow-hidden rounded-t-extra-small bg-surface-container-highest',\n // M3 filled hover: state layer (on-surface × state-hover).\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 'data-[disabled]:before:opacity-0',\n // M3 filled resting active-indicator: 1dp on-surface-variant.\n 'border-b border-on-surface-variant hover:border-on-surface',\n // M3 filled focus-active-indicator-height is 3dp.\n 'data-[focused]:border-b-[3px] data-[focused]:border-primary',\n 'data-[popup-open]:border-b-[3px] data-[popup-open]:border-primary',\n 'data-[invalid]:border-error',\n ],\n value: 'pt-3',\n label: [\n 'group-data-[focused]/field:top-1.5 group-data-[focused]/field:translate-y-0 group-data-[focused]/field:text-body-small',\n 'group-data-[filled]/field:top-1.5 group-data-[filled]/field:translate-y-0 group-data-[filled]/field:text-body-small',\n 'group-data-[popup-open]/field:top-1.5 group-data-[popup-open]/field:translate-y-0 group-data-[popup-open]/field:text-body-small',\n 'group-data-[has-placeholder]/field:top-1.5 group-data-[has-placeholder]/field:translate-y-0 group-data-[has-placeholder]/field:text-body-small',\n ],\n },\n outlined: {\n field: [\n 'overflow-visible rounded-extra-small border border-outline hover:border-on-surface',\n // M3 outlined focus-outline-width is 3dp; padding drops 2px so content\n // stays steady as the 1dp border grows (matches the TextField anchor).\n 'data-[focused]:border-[3px] data-[focused]:border-primary data-[focused]:px-[14px]',\n 'data-[popup-open]:border-[3px] data-[popup-open]:border-primary data-[popup-open]:px-[14px]',\n 'data-[invalid]:border-error',\n ],\n label: [\n 'group-data-[focused]/field:top-0 group-data-[focused]/field:-translate-y-1/2 group-data-[focused]/field:z-[1] group-data-[focused]/field:text-body-small group-data-[focused]/field:bg-surface group-data-[focused]/field:px-1 group-data-[focused]/field:leading-none',\n 'group-data-[filled]/field:top-0 group-data-[filled]/field:-translate-y-1/2 group-data-[filled]/field:z-[1] group-data-[filled]/field:text-body-small group-data-[filled]/field:bg-surface group-data-[filled]/field:px-1 group-data-[filled]/field:leading-none',\n 'group-data-[popup-open]/field:top-0 group-data-[popup-open]/field:-translate-y-1/2 group-data-[popup-open]/field:z-[1] group-data-[popup-open]/field:text-body-small group-data-[popup-open]/field:bg-surface group-data-[popup-open]/field:px-1 group-data-[popup-open]/field:leading-none',\n 'group-data-[has-placeholder]/field:top-0 group-data-[has-placeholder]/field:-translate-y-1/2 group-data-[has-placeholder]/field:z-[1] group-data-[has-placeholder]/field:text-body-small group-data-[has-placeholder]/field:bg-surface group-data-[has-placeholder]/field:px-1 group-data-[has-placeholder]/field:leading-none',\n ],\n },\n },\n },\n defaultVariants: {\n variant: 'outlined',\n },\n});\n\nconst s = selectTv();\nexport const Select = createSelect(\n {\n trigger: s.trigger(),\n value: s.value(),\n icon: s.icon(),\n popup: s.popup(),\n item: s.item(),\n itemIndicator: s.itemIndicator(),\n groupLabel: s.groupLabel(),\n },\n ({ variant }) => {\n const f = selectFieldTv({ variant });\n return {\n root: f.root(),\n field: f.field(),\n inputWrap: f.inputWrap(),\n value: f.value(),\n label: f.label(),\n icon: f.icon(),\n leadingIcon: f.leadingIcon(),\n supporting: f.supporting(),\n supportingText: f.supportingText(),\n };\n },\n);\n\nexport type { SelectFieldProps } from '@m3-baseui/core';\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createSideSheet } from '@m3-baseui/core';
|
|
3
3
|
import { tv as tv$1 } from 'tailwind-variants';
|
|
4
4
|
|
|
5
|
-
// src/side-sheet.ts
|
|
5
|
+
// src/components/side-sheet/side-sheet.ts
|
|
6
6
|
var TYPESCALE = [
|
|
7
7
|
"display-large",
|
|
8
8
|
"display-medium",
|
|
@@ -31,7 +31,7 @@ var tv = (options, config) => tv$1(options, {
|
|
|
31
31
|
}
|
|
32
32
|
});
|
|
33
33
|
|
|
34
|
-
// src/side-sheet.ts
|
|
34
|
+
// src/components/side-sheet/side-sheet.ts
|
|
35
35
|
var sideSheetTv = tv({
|
|
36
36
|
slots: {
|
|
37
37
|
backdrop: [
|
|
@@ -86,5 +86,5 @@ var SideSheet = createSideSheet({
|
|
|
86
86
|
});
|
|
87
87
|
|
|
88
88
|
export { SideSheet, sideSheetTv };
|
|
89
|
-
//# sourceMappingURL=
|
|
90
|
-
//# sourceMappingURL=
|
|
89
|
+
//# sourceMappingURL=index.js.map
|
|
90
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/tv.ts","../../../src/components/side-sheet/side-sheet.ts"],"names":["baseTv"],"mappings":";;;;;AAeA,IAAM,SAAA,GAAY;AAAA,EAChB,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,EAAA,GAAS,CAAC,OAAA,EAAS,MAAA,KAC9BA,KAAO,OAAA,EAAS;AAAA,EACd,GAAG,MAAA;AAAA,EACH,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,WAAA,EAAa;AAAA,QACX,WAAA,EAAa,CAAC,EAAE,IAAA,EAAM,CAAC,GAAG,SAAS,GAAG;AAAA;AACxC;AACF;AAEJ,CAAC,CAAA;;;AC9BI,IAAM,cAAc,EAAA,CAAG;AAAA,EAC5B,KAAA,EAAO;AAAA,IACL,QAAA,EAAU;AAAA,MACR,gCAAA;AAAA,MACA,iDAAA;AAAA,MACA,gCAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,QAAA,EAAU,uCAAA;AAAA,IACV,KAAA,EAAO;AAAA,MACL,sDAAA;AAAA,MACA,0EAAA;AAAA,MACA,0CAAA;AAAA,MACA,0EAAA;AAAA,MACA,wDAAA;AAAA,MACA,mDAAA;AAAA,MACA,4BAAA;AAAA,MACA,iFAAA;AAAA,MACA,+EAAA;AAAA,MACA,iFAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,4CAAA;AAAA,IACR,KAAA,EAAO,CAAC,6CAA6C,CAAA;AAAA,IACrD,WAAA,EAAa,CAAC,wDAAwD,CAAA;AAAA,IACtE,KAAA,EAAO;AAAA,GACT;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,KAAA,EAAO;AAAA,QACL,KAAA,EAAO;AAAA,UACL,eAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,QAAA,EAAU,EAAE,KAAA,EAAO,aAAA;AAAc;AACnC,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS;AAAA;AAEb,CAAC;AAED,IAAM,IAAI,WAAA,EAAY;AACf,IAAM,YAAY,eAAA,CAAgB;AAAA,EACvC,QAAA,EAAU,EAAE,QAAA,EAAS;AAAA,EACrB,QAAA,EAAU,EAAE,QAAA,EAAS;AAAA,EACrB,KAAA,EAAO,CAAC,EAAE,OAAA,EAAQ,KAAM,YAAY,EAAE,OAAA,EAAS,CAAA,CAAE,KAAA,EAAM;AAAA,EACvD,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,EACf,WAAA,EAAa,EAAE,WAAA,EAAY;AAAA,EAC3B,KAAA,EAAO,EAAE,KAAA;AACX,CAAC","file":"index.js","sourcesContent":["/**\n * tv.ts — a tailwind-variants factory pre-configured for the M3 typescale.\n *\n * The Tailwind v4 preset exposes the 15 typescale roles as `text-<role>`\n * font-size utilities (e.g. `text-body-small`, `text-label-large`). Stock\n * tailwind-merge does not know these custom names, so it groups them with the\n * `text-<color>` utilities and drops one when a slot sets both a color *and* a\n * typescale (the common M3 case). That silently strips either the color or the\n * type, breaking token compliance.\n *\n * Teaching tailwind-merge that the typescale names belong to the `font-size`\n * group keeps color and type independent, so both survive the merge.\n */\nimport { type TV, tv as baseTv } from 'tailwind-variants';\n\nconst TYPESCALE = [\n 'display-large',\n 'display-medium',\n 'display-small',\n 'headline-large',\n 'headline-medium',\n 'headline-small',\n 'title-large',\n 'title-medium',\n 'title-small',\n 'body-large',\n 'body-medium',\n 'body-small',\n 'label-large',\n 'label-medium',\n 'label-small',\n] as const;\n\nexport const tv: TV = (options, config) =>\n baseTv(options, {\n ...config,\n twMergeConfig: {\n extend: {\n classGroups: {\n 'font-size': [{ text: [...TYPESCALE] }],\n },\n },\n },\n });\n","/**\n * side-sheet.ts — tailwind-variants slots for the M3 Side sheet.\n *\n * A full-height 320dp `surface-container-low` surface anchored to a side edge.\n * `modal` floats at elevation 1 with the leading edge rounded large (16dp);\n * `standard` sits flush (no elevation). The anchored side is read from Base UI's\n * `data-swipe-direction` on the popup, so one resolver covers both left + right.\n * The popup slides via `--drawer-swipe-movement-x` so the swipe gesture tracks\n * the finger. Same DOM + `data-*` as the VE build.\n */\nimport { createSideSheet } from '@m3-baseui/core';\nimport { tv } from '../../tv';\n\nexport const sideSheetTv = tv({\n slots: {\n backdrop: [\n 'fixed inset-0 z-40 bg-scrim/32',\n 'transition-opacity duration-300 ease-emphasized',\n 'data-[swiping]:transition-none',\n 'data-[starting-style]:opacity-0 data-[ending-style]:opacity-0',\n ],\n viewport: 'fixed inset-0 z-50 flex items-stretch',\n popup: [\n 'box-border h-full w-[320px] max-w-[calc(100vw-56px)]',\n 'flex flex-col overflow-y-auto overscroll-contain touch-auto outline-none',\n 'bg-surface-container-low text-on-surface',\n 'data-[swipe-direction=right]:ml-auto data-[swipe-direction=left]:mr-auto',\n '[transform:translateX(var(--drawer-swipe-movement-x))]',\n 'transition-transform duration-300 ease-emphasized',\n 'data-[swiping]:select-none',\n 'data-[swipe-direction=right]:data-[starting-style]:[transform:translateX(100%)]',\n 'data-[swipe-direction=right]:data-[ending-style]:[transform:translateX(100%)]',\n 'data-[swipe-direction=left]:data-[starting-style]:[transform:translateX(-100%)]',\n 'data-[swipe-direction=left]:data-[ending-style]:[transform:translateX(-100%)]',\n ],\n header: 'flex items-center gap-2 min-h-14 px-4 py-2',\n title: ['flex-1 m-0 text-title-large text-on-surface'],\n description: ['m-0 px-6 pb-4 text-body-medium text-on-surface-variant'],\n close: 'inline-flex shrink-0',\n },\n variants: {\n variant: {\n modal: {\n popup: [\n 'shadow-level1',\n 'data-[swipe-direction=right]:rounded-s-large data-[swipe-direction=left]:rounded-e-large',\n ],\n },\n standard: { popup: 'shadow-none' },\n },\n },\n defaultVariants: {\n variant: 'modal',\n },\n});\n\nconst s = sideSheetTv();\nexport const SideSheet = createSideSheet({\n backdrop: s.backdrop(),\n viewport: s.viewport(),\n popup: ({ variant }) => sideSheetTv({ variant }).popup(),\n header: s.header(),\n title: s.title(),\n description: s.description(),\n close: s.close(),\n});\nexport type { SideSheetVariant, SideSheetSide } from '@m3-baseui/core';\n"]}
|